diff options
author | Eli Friedman <eli.friedman@gmail.com> | 2012-02-06 21:50:18 +0000 |
---|---|---|
committer | Eli Friedman <eli.friedman@gmail.com> | 2012-02-06 21:50:18 +0000 |
commit | 8f66cdffa00fde5b7536178c05cd4ade1239a529 (patch) | |
tree | 7f45753a6a770a8cc6702be3d4d1587ef7fe7910 | |
parent | d22b98aad24577c224813c0a301affa9fae8e57f (diff) | |
download | bcm5719-llvm-8f66cdffa00fde5b7536178c05cd4ade1239a529.tar.gz bcm5719-llvm-8f66cdffa00fde5b7536178c05cd4ade1239a529.zip |
Fix the result of VarDecl::checkInitIsICE so it is consistently accurate in C++11 mode. PR11928.
llvm-svn: 149908
-rw-r--r-- | clang/lib/AST/Decl.cpp | 2 | ||||
-rw-r--r-- | clang/test/SemaCXX/lambda-expressions.cpp | 3 |
2 files changed, 4 insertions, 1 deletions
diff --git a/clang/lib/AST/Decl.cpp b/clang/lib/AST/Decl.cpp index 123b14c0560..76d8ec06bf8 100644 --- a/clang/lib/AST/Decl.cpp +++ b/clang/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/clang/test/SemaCXX/lambda-expressions.cpp b/clang/test/SemaCXX/lambda-expressions.cpp index 05aba53dbba..46c74c3c74e 100644 --- a/clang/test/SemaCXX/lambda-expressions.cpp +++ b/clang/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}} } } |