<div dir="ltr">This is another candidate for the release branch as it fixes a segfault-on-error introduced during the 3.6 development cycle.</div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jan 28, 2015 at 1:10 PM, Kaelyn Takata <span dir="ltr"><<a href="mailto:rikka@google.com" target="_blank">rikka@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: rikka<br>
Date: Wed Jan 28 15:10:46 2015<br>
New Revision: 227368<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=227368&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=227368&view=rev</a><br>
Log:<br>
Revert a change from r222797 that is no longer needed and can cause<br>
infinite recursion.<br>
<br>
Also guard against said infinite recursion by adding an assert that will<br>
trigger if CorrectDelayedTyposInExpr is called before a previous call to<br>
CorrectDelayedTyposInExpr returns (i.e. if the TreeTransform run by<br>
CorrectDelayedTyposInExpr calls a sequence of methods that<br>
end up calling CorrectDelayedTyposInExpr, as the new test case had done<br>
prior to this commit). Fixes PR22292.<br>
<br>
Modified:<br>
    cfe/trunk/lib/Sema/SemaExpr.cpp<br>
    cfe/trunk/lib/Sema/SemaExprCXX.cpp<br>
    cfe/trunk/test/SemaCXX/typo-correction-delayed.cpp<br>
<br>
Modified: cfe/trunk/lib/Sema/SemaExpr.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=227368&r1=227367&r2=227368&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=227368&r1=227367&r2=227368&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Sema/SemaExpr.cpp (original)<br>
+++ cfe/trunk/lib/Sema/SemaExpr.cpp Wed Jan 28 15:10:46 2015<br>
@@ -4762,12 +4762,8 @@ Sema::BuildResolvedCallExpr(Expr *Fn, Na<br>
                                      VK_RValue, RParenLoc);<br>
<br>
   // Bail out early if calling a builtin with custom typechecking.<br>
-  if (BuiltinID && Context.BuiltinInfo.hasCustomTypechecking(BuiltinID)) {<br>
-    ExprResult Res = CorrectDelayedTyposInExpr(TheCall);<br>
-    if (!Res.isUsable() || !isa<CallExpr>(Res.get()))<br>
-      return Res;<br>
-    return CheckBuiltinFunctionCall(FDecl, BuiltinID, cast<CallExpr>(Res.get()));<br>
-  }<br>
+  if (BuiltinID && Context.BuiltinInfo.hasCustomTypechecking(BuiltinID))<br>
+    return CheckBuiltinFunctionCall(FDecl, BuiltinID, TheCall);<br>
<br>
  retry:<br>
   const FunctionType *FuncT;<br>
<br>
Modified: cfe/trunk/lib/Sema/SemaExprCXX.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExprCXX.cpp?rev=227368&r1=227367&r2=227368&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExprCXX.cpp?rev=227368&r1=227367&r2=227368&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Sema/SemaExprCXX.cpp (original)<br>
+++ cfe/trunk/lib/Sema/SemaExprCXX.cpp Wed Jan 28 15:10:46 2015<br>
@@ -6235,8 +6235,12 @@ ExprResult Sema::CorrectDelayedTyposInEx<br>
   if (E && !ExprEvalContexts.empty() && ExprEvalContexts.back().NumTypos &&<br>
       (E->isTypeDependent() || E->isValueDependent() ||<br>
        E->isInstantiationDependent())) {<br>
+    auto TyposInContext = ExprEvalContexts.back().NumTypos;<br>
+    assert(TyposInContext < ~0U && "Recursive call of CorrectDelayedTyposInExpr");<br>
+    ExprEvalContexts.back().NumTypos = ~0U;<br>
     auto TyposResolved = DelayedTypos.size();<br>
     auto Result = TransformTypos(*this, Filter).Transform(E);<br>
+    ExprEvalContexts.back().NumTypos = TyposInContext;<br>
     TyposResolved -= DelayedTypos.size();<br>
     if (Result.isInvalid() || Result.get() != E) {<br>
       ExprEvalContexts.back().NumTypos -= TyposResolved;<br>
<br>
Modified: cfe/trunk/test/SemaCXX/typo-correction-delayed.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/typo-correction-delayed.cpp?rev=227368&r1=227367&r2=227368&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/typo-correction-delayed.cpp?rev=227368&r1=227367&r2=227368&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/test/SemaCXX/typo-correction-delayed.cpp (original)<br>
+++ cfe/trunk/test/SemaCXX/typo-correction-delayed.cpp Wed Jan 28 15:10:46 2015<br>
@@ -176,6 +176,14 @@ namespace PR22250 {<br>
 int getenv_s(size_t *y, char(&z)) {}<br>
 }<br>
<br>
+namespace PR22291 {<br>
+template <unsigned I> void f() {<br>
+  unsigned *prio_bits_array;  // expected-note {{'prio_bits_array' declared here}}<br>
+  // expected-error@+1 {{use of undeclared identifier 'prio_op_array'; did you mean 'prio_bits_array'?}}<br>
+  __atomic_store_n(prio_op_array + I, false, __ATOMIC_RELAXED);<br>
+}<br>
+}<br>
+<br>
 namespace PR22297 {<br>
 double pow(double x, double y);<br>
 struct TimeTicks {<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br></div>