<div dir="ltr">Hi Hans,<div><br></div><div>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.</div><div><br></div><div>Richard</div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Feb 5, 2018 at 6:58 PM, Richard Trieu via cfe-commits <span dir="ltr"><<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: rtrieu<br>
Date: Mon Feb  5 18:58:21 2018<br>
New Revision: 324308<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=324308&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject?rev=324308&view=rev</a><br>
Log:<br>
Fix crash on invalid.<br>
<br>
Don't call a method when the pointer is null.<br>
<br>
Modified:<br>
    cfe/trunk/lib/Sema/SemaExpr.cp<wbr>p<br>
    cfe/trunk/test/SemaCXX/lambda-<wbr>expressions.cpp<br>
<br>
Modified: cfe/trunk/lib/Sema/SemaExpr.cp<wbr>p<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=324308&r1=324307&r2=324308&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/cfe/trunk/lib/Sema/SemaE<wbr>xpr.cpp?rev=324308&r1=324307&<wbr>r2=324308&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/lib/Sema/SemaExpr.cp<wbr>p (original)<br>
+++ cfe/trunk/lib/Sema/SemaExpr.cp<wbr>p Mon Feb  5 18:58:21 2018<br>
@@ -14958,7 +14958,8 @@ static void DoMarkVarDeclReferenced(Sema<br>
     if (RefersToEnclosingScope) {<br>
       LambdaScopeInfo *const LSI =<br>
           SemaRef.getCurLambda(/*Ignore<wbr>NonLambdaCapturingScope=*/<wbr>true);<br>
-      if (LSI && !LSI->CallOperator->Encloses(V<wbr>ar->getDeclContext())) {<br>
+      if (LSI && (!LSI->CallOperator ||<br>
+                  !LSI->CallOperator->Encloses(V<wbr>ar->getDeclContext()))) {<br>
         // If a variable could potentially be odr-used, defer marking it so<br>
         // until we finish analyzing the full expression for any<br>
         // lvalue-to-rvalue<br>
<br>
Modified: cfe/trunk/test/SemaCXX/lambda-<wbr>expressions.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/lambda-expressions.cpp?rev=324308&r1=324307&r2=324308&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/cfe/trunk/test/SemaCXX/<wbr>lambda-expressions.cpp?rev=<wbr>324308&r1=324307&r2=324308&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/test/SemaCXX/lambda-<wbr>expressions.cpp (original)<br>
+++ cfe/trunk/test/SemaCXX/lambda-<wbr>expressions.cpp Mon Feb  5 18:58:21 2018<br>
@@ -608,3 +608,18 @@ namespace ConversionOperatorDoesNotHaveD<br>
   // This used to crash in return type deduction for the conversion opreator.<br>
   struct A { int n; void f() { +[](decltype(n)) {}; } };<br>
 }<br>
+<br>
+namespace TypoCorrection {<br>
+template <typename T> struct X {};<br>
+// expected-note@-1 {{template parameter is declared here}}<br>
+<br>
+template <typename T><br>
+void Run(const int& points) {<br>
+// expected-note@-1 {{'points' declared here}}<br>
+  auto outer_lambda = []() {<br>
+    auto inner_lambda = [](const X<Points>&) {};<br>
+    // expected-error@-1 {{use of undeclared identifier 'Points'; did you mean 'points'?}}<br>
+    // expected-error@-2 {{template argument for template type parameter must be a type}}<br>
+  };<br>
+}<br>
+}<br>
<br>
<br>
______________________________<wbr>_________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br></div></div>