diff options
author | Douglas Gregor <dgregor@apple.com> | 2012-02-21 02:22:07 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2012-02-21 02:22:07 +0000 |
commit | 926410d2db727c5093bda792cb8b2025d7f02cc3 (patch) | |
tree | f6d079eb498c82377a23722e4091dc34450004a3 /clang/lib/Parse/ParseDeclCXX.cpp | |
parent | 7d445e92c3206ab312b385202a6c81c59fd9599c (diff) | |
download | bcm5719-llvm-926410d2db727c5093bda792cb8b2025d7f02cc3.tar.gz bcm5719-llvm-926410d2db727c5093bda792cb8b2025d7f02cc3.zip |
Implement name mangling for lambda expressions that occur within the
initializers of data members (both static and non-static).
llvm-svn: 151017
Diffstat (limited to 'clang/lib/Parse/ParseDeclCXX.cpp')
-rw-r--r-- | clang/lib/Parse/ParseDeclCXX.cpp | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp index 6213824cae3..5edc30be92b 100644 --- a/clang/lib/Parse/ParseDeclCXX.cpp +++ b/clang/lib/Parse/ParseDeclCXX.cpp @@ -2000,7 +2000,7 @@ void Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS, } else if (HasInitializer) { // Normal initializer. if (!Init.isUsable()) - Init = ParseCXXMemberInitializer( + Init = ParseCXXMemberInitializer(ThisDecl, DeclaratorInfo.isDeclarationOfFunction(), EqualLoc); if (Init.isInvalid()) @@ -2096,11 +2096,14 @@ void Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS, /// /// Prior to C++0x, the assignment-expression in an initializer-clause must /// be a constant-expression. -ExprResult Parser::ParseCXXMemberInitializer(bool IsFunction, +ExprResult Parser::ParseCXXMemberInitializer(Decl *D, bool IsFunction, SourceLocation &EqualLoc) { assert((Tok.is(tok::equal) || Tok.is(tok::l_brace)) && "Data member initializer not starting with '=' or '{'"); + EnterExpressionEvaluationContext Context(Actions, + Sema::PotentiallyEvaluated, + D); if (Tok.is(tok::equal)) { EqualLoc = ConsumeToken(); if (Tok.is(tok::kw_delete)) { |