From: Eli Friedman Date: Mon, 6 Feb 2012 21:50:18 +0000 (+0000) Subject: Fix the result of VarDecl::checkInitIsICE so it is consistently accurate in C++11... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=210386eb619ea9feef425636150bdffc0538574d;p=clang Fix the result of VarDecl::checkInitIsICE so it is consistently accurate in C++11 mode. PR11928. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@149908 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/AST/Decl.cpp b/lib/AST/Decl.cpp index 123b14c056..76d8ec06bf 100644 --- a/lib/AST/Decl.cpp +++ b/lib/AST/Decl.cpp @@ -1413,7 +1413,7 @@ APValue *VarDecl::evaluateValue( // expression as a side-effect. if (getASTContext().getLangOptions().CPlusPlus0x && !Eval->CheckedICE) { Eval->CheckedICE = true; - Eval->IsICE = Notes.empty(); + Eval->IsICE = Result && Notes.empty(); } return Result ? &Eval->Evaluated : 0; diff --git a/test/SemaCXX/lambda-expressions.cpp b/test/SemaCXX/lambda-expressions.cpp index 05aba53dbb..46c74c3c74 100644 --- a/test/SemaCXX/lambda-expressions.cpp +++ b/test/SemaCXX/lambda-expressions.cpp @@ -79,5 +79,8 @@ namespace ImplicitCapture { [=]() { const G* gg = &g; return gg->a; }; // expected-error {{not supported yet}} [=]() { return [=]{ const G* gg = &g; return gg->a; }(); }; // expected-error {{no matching constructor for initialization of 'const ImplicitCapture::G'}} expected-error 2 {{not supported yet}} (void)^{ return [=]{ const G* gg = &g; return gg->a; }(); }; // expected-error 2 {{no matching constructor for initialization of 'const ImplicitCapture::G'}} expected-error {{not supported yet}} + + const int h = a; // expected-note {{declared}} + []() { return h; }; // expected-error {{variable 'h' cannot be implicitly captured in a lambda with no capture-default specified}} expected-note {{lambda expression begins here}} expected-error {{not supported yet}} } }