From: Eli Friedman Date: Tue, 18 Sep 2012 21:11:30 +0000 (+0000) Subject: Add an extra check for invalid decls in the lambda semantic analysis to avoid a crash... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9cd5b24315aea4bc58bac03cfb4874e076b013b8;p=clang Add an extra check for invalid decls in the lambda semantic analysis to avoid a crash. PR13860. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@164168 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaLambda.cpp b/lib/Sema/SemaLambda.cpp index 75ea5368f8..7cbfc364f6 100644 --- a/lib/Sema/SemaLambda.cpp +++ b/lib/Sema/SemaLambda.cpp @@ -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; diff --git a/test/SemaCXX/lambda-expressions.cpp b/test/SemaCXX/lambda-expressions.cpp index 0fd634502b..0a95680478 100644 --- a/test/SemaCXX/lambda-expressions.cpp +++ b/test/SemaCXX/lambda-expressions.cpp @@ -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), ""); + } +}