Add an extra check for invalid decls in the lambda semantic analysis to avoid a crash...
authorEli Friedman <eli.friedman@gmail.com>
Tue, 18 Sep 2012 21:11:30 +0000 (21:11 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Tue, 18 Sep 2012 21:11:30 +0000 (21:11 +0000)
llvm-svn: 164168

clang/lib/Sema/SemaLambda.cpp
clang/test/SemaCXX/lambda-expressions.cpp

index 75ea536..7cbfc36 100644 (file)
@@ -527,6 +527,10 @@ void Sema::ActOnStartOfLambdaDefinition(LambdaIntroducer &Intro,
       continue;
     }
 
+    // Ignore invalid decls; they'll just confuse the code later.
+    if (Var->isInvalidDecl())
+      continue;
+
     if (!Var->hasLocalStorage()) {
       Diag(C->Loc, diag::err_capture_non_automatic_variable) << C->Id;
       Diag(Var->getLocation(), diag::note_previous_decl) << C->Id;
index 0fd6345..0a95680 100644 (file)
@@ -221,3 +221,11 @@ namespace VariadicPackExpansion {
   template void nested2(int); // ok
   template void nested2(int, int); // expected-note {{in instantiation of}}
 }
+
+namespace PR13860 {
+  void foo() {
+    auto x = PR13860UndeclaredIdentifier(); // expected-error {{use of undeclared identifier 'PR13860UndeclaredIdentifier'}}
+    auto y = [x]() { };
+    static_assert(sizeof(y), "");
+  }
+}