Seems safe. Merged in r325766.
On Thu, Feb 22, 2018 at 1:15 AM, Richard Trieu <rtr...@google.com> wrote: > Hi Hans, > > If there's still time for rc3, I'd like to get this crash fix in. This adds > a null check to prevent a crash on invalid. > > Richard > > On Mon, Feb 5, 2018 at 6:58 PM, Richard Trieu via cfe-commits > <cfe-commits@lists.llvm.org> wrote: >> >> Author: rtrieu >> Date: Mon Feb 5 18:58:21 2018 >> New Revision: 324308 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=324308&view=rev >> Log: >> Fix crash on invalid. >> >> Don't call a method when the pointer is null. >> >> Modified: >> cfe/trunk/lib/Sema/SemaExpr.cpp >> cfe/trunk/test/SemaCXX/lambda-expressions.cpp >> >> Modified: cfe/trunk/lib/Sema/SemaExpr.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=324308&r1=324307&r2=324308&view=diff >> >> ============================================================================== >> --- cfe/trunk/lib/Sema/SemaExpr.cpp (original) >> +++ cfe/trunk/lib/Sema/SemaExpr.cpp Mon Feb 5 18:58:21 2018 >> @@ -14958,7 +14958,8 @@ static void DoMarkVarDeclReferenced(Sema >> if (RefersToEnclosingScope) { >> LambdaScopeInfo *const LSI = >> SemaRef.getCurLambda(/*IgnoreNonLambdaCapturingScope=*/true); >> - if (LSI && !LSI->CallOperator->Encloses(Var->getDeclContext())) { >> + if (LSI && (!LSI->CallOperator || >> + !LSI->CallOperator->Encloses(Var->getDeclContext()))) { >> // If a variable could potentially be odr-used, defer marking it >> so >> // until we finish analyzing the full expression for any >> // lvalue-to-rvalue >> >> Modified: cfe/trunk/test/SemaCXX/lambda-expressions.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/lambda-expressions.cpp?rev=324308&r1=324307&r2=324308&view=diff >> >> ============================================================================== >> --- cfe/trunk/test/SemaCXX/lambda-expressions.cpp (original) >> +++ cfe/trunk/test/SemaCXX/lambda-expressions.cpp Mon Feb 5 18:58:21 2018 >> @@ -608,3 +608,18 @@ namespace ConversionOperatorDoesNotHaveD >> // This used to crash in return type deduction for the conversion >> opreator. >> struct A { int n; void f() { +[](decltype(n)) {}; } }; >> } >> + >> +namespace TypoCorrection { >> +template <typename T> struct X {}; >> +// expected-note@-1 {{template parameter is declared here}} >> + >> +template <typename T> >> +void Run(const int& points) { >> +// expected-note@-1 {{'points' declared here}} >> + auto outer_lambda = []() { >> + auto inner_lambda = [](const X<Points>&) {}; >> + // expected-error@-1 {{use of undeclared identifier 'Points'; did you >> mean 'points'?}} >> + // expected-error@-2 {{template argument for template type parameter >> must be a type}} >> + }; >> +} >> +} >> >> >> _______________________________________________ >> cfe-commits mailing list >> cfe-commits@lists.llvm.org >> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits > > _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits