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 | 552e29985a710f4ced62b39d70557501bd31ca9b (patch) | |
tree | 40f70512749090c477d5be59542b3306f320b2aa /lib/Parse/ParseDeclCXX.cpp | |
parent | c9e0f925bfadfce815143aa82980376d73b1ea77 (diff) |
Implement name mangling for lambda expressions that occur within the
initializers of data members (both static and non-static).
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@151017 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Parse/ParseDeclCXX.cpp')
-rw-r--r-- | lib/Parse/ParseDeclCXX.cpp | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/lib/Parse/ParseDeclCXX.cpp b/lib/Parse/ParseDeclCXX.cpp index 6213824cae..5edc30be92 100644 --- a/lib/Parse/ParseDeclCXX.cpp +++ b/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)) { |