r227368 - Revert a change from r222797 that is no longer needed and can cause
Kaelyn Takata
rikka at google.com
Wed Jan 28 13:36:37 PST 2015
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 <rikka at google.com> 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 at +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
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150128/87abff43/attachment.html>
More information about the cfe-commits
mailing list