summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEli Friedman <eli.friedman@gmail.com>2012-02-06 21:50:18 +0000
committerEli Friedman <eli.friedman@gmail.com>2012-02-06 21:50:18 +0000
commit8f66cdffa00fde5b7536178c05cd4ade1239a529 (patch)
tree7f45753a6a770a8cc6702be3d4d1587ef7fe7910
parentd22b98aad24577c224813c0a301affa9fae8e57f (diff)
downloadbcm5719-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.cpp2
-rw-r--r--clang/test/SemaCXX/lambda-expressions.cpp3
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}}
}
}
OpenPOWER on IntegriCloud