| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| |
|
|
|
|
| |
thereof. Patch by Anders Johnsen!
llvm-svn: 73641
|
| |
|
|
| |
llvm-svn: 73462
|
| |
|
|
|
|
| |
argument before the function has been declared.
llvm-svn: 73234
|
| |
|
|
|
|
| |
argument is not unparsed. Add a new hasDefaultArg() and use it in places where getDefaultArg() was called when the argument was unparsed.
llvm-svn: 72984
|
| |
|
|
| |
llvm-svn: 72633
|
| |
|
|
| |
llvm-svn: 72616
|
| |
|
|
|
|
|
|
|
| |
using namespace std::debug;
Extended UsingDirectiveDecl to store the nested-name-specifier that
precedes the nominated namespace.
llvm-svn: 72614
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
parser. Rather than placing all of the delayed member function
declarations and inline definitions into a single bucket corresponding
to the top-level class, we instead mirror the nesting structure of the
nested classes and place the delayed member functions into their
appropriate place. Then, when we actually parse the delayed member
function declarations, set up the scope stack the same way as it was
when we originally saw the declaration, so that we can find, e.g.,
template parameters that are in scope.
llvm-svn: 72502
|
| |
|
|
|
|
| |
keep the spec out of the canonical type this time. Net effect is currently nothing, because the spec isn't checked anywhere.
llvm-svn: 72498
|
| |
|
|
|
|
|
|
| |
an integral constant expression, maintain a cache of the value and the
is-an-ICE flag within the VarDecl itself. This eliminates
exponential-time behavior of the Fibonacci template metaprogram.
llvm-svn: 72428
|
| |
|
|
|
|
| |
-> const T is not an lvalue cast.
llvm-svn: 72082
|
| |
|
|
|
|
|
|
|
| |
statement was using an rvalue reference during the template
definition. However, template instantiations based on an lvalue
reference type are well-formed, so we delay checking of these property
until template instantiation time.
llvm-svn: 72041
|
| |
|
|
| |
llvm-svn: 72035
|
| |
|
|
|
|
| |
<rdar://problem/6854087>
llvm-svn: 71970
|
| |
|
|
| |
llvm-svn: 71936
|
| |
|
|
| |
llvm-svn: 71786
|
| |
|
|
|
|
| |
don't check covariance but that's next.
llvm-svn: 71759
|
| |
|
|
| |
llvm-svn: 71489
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
specialization" within a C++ template, and permit name lookup into the
current instantiation. For example, given:
template<typename T, typename U>
struct X {
typedef T type;
X* x1; // current instantiation
X<T, U> *x2; // current instantiation
X<U, T> *x3; // not current instantiation
::X<type, U> *x4; // current instantiation
X<typename X<type, U>::type, U>: *x5; // current instantiation
};
llvm-svn: 71471
|
| |
|
|
|
|
| |
until we've had a lot more discussion.
llvm-svn: 71125
|
| |
|
|
|
|
|
|
|
| |
into the left-hand side of an assignment expression. This completes
most of PR3500; the only remaining part is to deal with the
GCC-specific implementation-defined behavior for "unsigned long" (and
other) bit-fields.
llvm-svn: 70623
|
| |
|
|
| |
llvm-svn: 70566
|
| |
|
|
|
|
| |
<rdar://problem/6841210>.
llvm-svn: 70519
|
| |
|
|
|
|
| |
completely.
llvm-svn: 70516
|
| |
|
|
| |
llvm-svn: 70506
|
| |
|
|
|
|
| |
constructors. Meh ...
llvm-svn: 70256
|
| |
|
|
| |
llvm-svn: 70248
|
| |
|
|
| |
llvm-svn: 70022
|
| |
|
|
| |
llvm-svn: 70021
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This gets rid of a bunch of random InvalidDecl bools in sema, changing
us to use the following approach:
1. When analyzing a declspec or declarator, if an error is found, we
set a bit in Declarator saying that it is invalid.
2. Once the Decl is created by sema, we immediately set the isInvalid
bit on it from what is in the declarator. From this point on, sema
consistently looks at and sets the bit on the decl.
This gives a very clear separation of concerns and simplifies a bunch
of code. In addition to this, this patch makes these changes:
1. it renames DeclSpec::getInvalidType() -> isInvalidType().
2. various "merge" functions no longer return bools: they just set the
invalid bit on the dest decl if invalid.
3. The ActOnTypedefDeclarator/ActOnFunctionDeclarator/ActOnVariableDeclarator
methods now set invalid on the decl returned instead of returning an
invalid bit byref.
4. In SemaType, refering to a typedef that was invalid now propagates the
bit into the resultant type. Stuff declared with the invalid typedef
will now be marked invalid.
5. Various methods like CheckVariableDeclaration now return void and set the
invalid bit on the decl they check.
There are a few minor changes to tests with this, but the only major bad
result is test/SemaCXX/constructor-recovery.cpp. I'll take a look at this
next.
llvm-svn: 70020
|
| |
|
|
|
|
| |
InitializeVarWithConstructor.
llvm-svn: 69956
|
| |
|
|
|
|
| |
Add a few commented lines to the test case that point out things that don't work yet.
llvm-svn: 69354
|
| |
|
|
| |
llvm-svn: 69345
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
will now make an implicit CXXTemporaryObjectExpr. So
struct S {
S();
};
void f() {
S s;
}
's' here will implicitly be declared as.
S s = S();
llvm-svn: 69326
|
| |
|
|
|
|
|
|
|
|
|
| |
conversion constructors.
Remove an atrocious amount of trailing whitespace in the overloaded operator mangler. Sorry, couldn't help myself.
Change the DeclType parameter of Sema::CheckReferenceInit to be passed by value instead of reference. It wasn't changed anywhere.
Let the parser handle C++'s irregular grammar around assignment-expression and conditional-expression.
And finally, the reason for all this stuff: implement C++ semantics for the conditional operator. The implementation is complete except for determining lvalueness.
llvm-svn: 69299
|
| |
|
|
|
|
| |
that it's a valid init. Instead, just set it as the VarDecl's initializer.
llvm-svn: 69292
|
| |
|
|
|
|
| |
default2.cpp to fail.
llvm-svn: 69267
|
| |
|
|
| |
llvm-svn: 69245
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
for example:
struct X {
X(int, int);
};
X x(10, 10);
we model that as
X x = X(10, 10);
inserting a temporary object expr.
llvm-svn: 69227
|
| |
|
|
| |
llvm-svn: 68923
|
| |
|
|
|
|
|
|
|
| |
different code path that I forgot previously.
Implement the rvalue reference overload dance for returning local objects. Returning a local object first tries to find a move constructor now.
The error message when no move constructor is defined (or is not applicable) and the copy constructor is deleted is quite ugly, though.
llvm-svn: 68902
|
| |
|
|
|
|
| |
No functionality change (really).
llvm-svn: 68726
|
| |
|
|
| |
llvm-svn: 68268
|
| |
|
|
| |
llvm-svn: 68261
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
productions (except the already broken ObjC cases like @class X,Y;) in
the parser that can produce more than one Decl return a DeclGroup instead
of a Decl, etc.
This allows elimination of the Decl::NextDeclarator field, and exposes
various clients that should look at all decls in a group, but which were
only looking at one (such as the dumper, printer, etc). These have been
fixed.
Still TODO:
1) there are some FIXME's in the code about potentially using
DeclGroup for better location info.
2) ParseObjCAtDirectives should return a DeclGroup due to @class etc.
3) I'm not sure what is going on with StmtIterator.cpp, or if it can
be radically simplified now.
4) I put a truly horrible hack in ParseTemplate.cpp.
I plan to bring up #3/4 on the mailing list, but don't plan to tackle
#1/2 in the short term.
llvm-svn: 68002
|
| |
|
|
|
|
| |
failures on i386 or x86_64. If this fails for someone, please contact me.
llvm-svn: 67999
|
| |
|
|
| |
llvm-svn: 67981
|
| |
|
|
|
|
| |
aliases in using directives.
llvm-svn: 67966
|
| |
|
|
| |
llvm-svn: 67964
|
| |
|
|
| |
llvm-svn: 67962
|