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