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