| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
| |
llvm-svn: 84005
|
| |
|
|
| |
llvm-svn: 83993
|
| |
|
|
|
|
| |
DeclRefExpr. Fixes PR5177.
llvm-svn: 83986
|
| |
|
|
|
|
| |
specialization. This completes C++ [temp.expl.spec]!
llvm-svn: 83980
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
template as a specialization. For example, this occurs with:
template<typename T>
struct X {
template<typename U> struct Inner { /* ... */ };
};
template<> template<typename T>
struct X<int>::Inner {
T member;
};
We need to treat templates that are member specializations as special
in two contexts:
- When looking for a definition of a member template, we look
through the instantiation chain until we hit the primary template
*or a member specialization*. This allows us to distinguish
between the primary "Inner" definition and the X<int>::Inner
definition, above.
- When computing all of the levels of template arguments needed to
instantiate a member template, don't add template arguments
from contexts outside of the instantiation of a member
specialization, since the user has already manually substituted
those arguments.
Fix up the existing test for p18, which was actually wrong (but we
didn't diagnose it because of our poor handling of member
specializations of templates), and add a new test for member
specializations of templates.
llvm-svn: 83974
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
function templates.
This commit ensures that friend function templates are constructed as
FunctionTemplateDecls rather than partial FunctionDecls (as they
previously were). It then implements template instantiation for friend
function templates, injecting the friend function template only when
no previous declaration exists at the time of instantiation.
Oh, and make sure that explicit specialization declarations are not
friends.
llvm-svn: 83970
|
| |
|
|
|
|
| |
offsets for covariant thunks.
llvm-svn: 83965
|
| |
|
|
|
|
|
|
|
|
| |
which is a common idiom to improve PIC'ness of code using the addr of
label extension. This implementation is a gross hack, but the only other
alternative would be to teach evalutate about this horrid combination.
While GCC allows things like "&&foo - &&bar + 1", people don't use this
in practice. This implements PR5131.
llvm-svn: 83957
|
| |
|
|
|
|
| |
hairier (but nonsensical) example.
llvm-svn: 83951
|
| |
|
|
| |
llvm-svn: 83945
|
| |
|
|
| |
llvm-svn: 83942
|
| |
|
|
| |
llvm-svn: 83941
|
| |
|
|
|
|
| |
about the reason, rdar://7186119.
llvm-svn: 83940
|
| |
|
|
|
|
| |
previously we only recognized it on inputs.
llvm-svn: 83939
|
| |
|
|
|
|
| |
info intrinsics are not used to encode debug info.
llvm-svn: 83929
|
| |
|
|
|
|
|
|
| |
that the scope in which it is being declared is complete. Also, when
instantiating a member class template's ClassTemplateDecl, be sure to
delay type creation so that the resulting type is dependent. Ick.
llvm-svn: 83923
|
| |
|
|
| |
llvm-svn: 83914
|
| |
|
|
|
|
|
|
| |
that are declarations (rather than definitions). Also, be sure to set
the access specifiers properly when instantiating the declarations of
member function templates.
llvm-svn: 83911
|
| |
|
|
|
|
|
|
|
| |
conditions. Add a fixit to insert the parentheses. Also fix a very minor
possible memory leak in 'for' conditions.
Fixes PR 4876 and rdar://problem/7289172
llvm-svn: 83907
|
| |
|
|
|
|
| |
not definitions
llvm-svn: 83904
|
| |
|
|
| |
llvm-svn: 83901
|
| |
|
|
| |
llvm-svn: 83896
|
| |
|
|
| |
llvm-svn: 83893
|
| |
|
|
|
|
|
| |
instantiation has already been required. To do so, keep track of the
point of instantiation for anything that can be instantiated.
llvm-svn: 83890
|
| |
|
|
|
|
| |
wip - To prune excessive reporting.
llvm-svn: 83889
|
| |
|
|
| |
llvm-svn: 83888
|
| |
|
|
| |
llvm-svn: 83886
|
| |
|
|
| |
llvm-svn: 83883
|
| |
|
|
| |
llvm-svn: 83882
|
| |
|
|
|
|
| |
handle references correctly.
llvm-svn: 83880
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
user-defined type conversions, issue list of ambiguites in addition
to the diagnostic. So, clang now issues the following:
b.cpp:19:19: error: left hand operand to ->* must be a pointer to class compatible with the right hand operand, but is 'struct C1'
int i = c1->*pmf;
~~^
b.cpp:19:19: note: because of ambiguity in conversion of 'struct C1' to 'struct E *'
b.cpp:5:5: note: candidate function
operator E*();
^
b.cpp:11:5: note: candidate function
operator E*();
^
llvm-svn: 83862
|
| |
|
|
|
|
| |
virtual call.
llvm-svn: 83816
|
| |
|
|
| |
llvm-svn: 83766
|
| |
|
|
|
|
|
| |
Along the way, use RequireCompleteType when testing exception spec types.
Separate all the ugly spec stuff into its own file.
llvm-svn: 83764
|
| |
|
|
|
|
| |
variable inside the block.
llvm-svn: 83729
|
| |
|
|
|
|
|
|
|
| |
assignment and initialization.
The exception specification of the assignee must be the same or a subset of the target. In addition, exception specifications on arguments and return types must be equivalent, but this is not implemented yet.
This currently produces two diagnostics for every invalid assignment/initialization, due to the diagnostic produced outside PerformImplicitConversion, e.g. in CheckSingleInitializer. I don't know how to suppress this; in any case I think it is the wrong place for a diagnostic, since there are other diagnostics produced inside the function. So I'm leaving it as it is for the moment.
llvm-svn: 83710
|
| |
|
|
|
|
|
| |
Split the various ambiguous result enumerators into their own enum. Tests
for most of C++ [namespace.qual].
llvm-svn: 83700
|
| |
|
|
| |
llvm-svn: 83694
|
| |
|
|
| |
llvm-svn: 83693
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This will improve error messages. For
struct B;
B f();
void g() {
f();
}
We now get
t.cpp:6:3: error: calling 'f' with incomplete return type 'struct B'
f();
^~~
t.cpp:3:3: note: 'f' declared here
B f();
^
t.cpp:1:8: note: forward declaration of 'struct B'
struct B;
^
llvm-svn: 83692
|
| |
|
|
|
|
|
|
|
| |
users to
pass a LookupResult reference to lookup routines. Call out uses which assume a single
result.
llvm-svn: 83674
|
| |
|
|
|
|
|
|
| |
injected-class-name (e.g., when we're referring to other
specializations of the current class template). Make sure that we see
the template rather than the injected-class-name. Fixes PR4768.
llvm-svn: 83672
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
Now we produce things like:
bug1.cpp:21:11: error: use of overloaded operator '->*' is ambiguous
int i = c->*pmf; // expected-error {{use of overloaded operator '->*' is ambiguous}} \
~^ ~~~
bug1.cpp:21:11: note: built-in candidate operator ->* ('struct A volatile *', 'int const struct A::*')
bug1.cpp:21:11: note: built-in candidate operator ->* ('struct A volatile *', 'int restrict struct A::*')
...
Still need to look at an issue (indicated as FIXME in the test case).
llvm-svn: 83650
|
| |
|
|
|
|
|
|
| |
(compare was system dependent). Worked on Linux, failed on Mac OS (which caused the recently added testcase to fail on Linux).
- Sort results in testcase.
llvm-svn: 83597
|
| |
|
|
|
|
| |
Patch by John Thompson.
llvm-svn: 83593
|
| |
|
|
| |
llvm-svn: 83588
|
| |
|
|
| |
llvm-svn: 83586
|
| |
|
|
| |
llvm-svn: 83584
|
| |
|
|
|
|
|
| |
because of missing default constructor of a member.
Fixes pr5154.
llvm-svn: 83583
|
| |
|
|
|
|
|
| |
of a floating point number. This add regular expressions to account
for this. Patch by John Thompson.
llvm-svn: 83581
|