r261669 - Amends r252104 to evaluate the controlling expression in an unevaluated context. This eliminates false-positive diagnostics about null pointer dereferences (etc) in the controlling expression.
Aaron Ballman via cfe-commits
cfe-commits at lists.llvm.org
Tue Feb 23 11:01:00 PST 2016
Hans, this should be safe to merge into 3.8 (as Richard had mentioned
in the review thread). Can you do the merge magic on my behalf?
Thanks!
~Aaron
On Tue, Feb 23, 2016 at 1:55 PM, Aaron Ballman via cfe-commits
<cfe-commits at lists.llvm.org> wrote:
> Author: aaronballman
> Date: Tue Feb 23 12:55:15 2016
> New Revision: 261669
>
> URL: http://llvm.org/viewvc/llvm-project?rev=261669&view=rev
> Log:
> Amends r252104 to evaluate the controlling expression in an unevaluated context. This eliminates false-positive diagnostics about null pointer dereferences (etc) in the controlling expression.
>
> Modified:
> cfe/trunk/lib/Sema/SemaExpr.cpp
> cfe/trunk/test/Sema/generic-selection.c
>
> Modified: cfe/trunk/lib/Sema/SemaExpr.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=261669&r1=261668&r2=261669&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaExpr.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaExpr.cpp Tue Feb 23 12:55:15 2016
> @@ -1373,10 +1373,13 @@ Sema::CreateGenericSelectionExpr(SourceL
>
> // Decay and strip qualifiers for the controlling expression type, and handle
> // placeholder type replacement. See committee discussion from WG14 DR423.
> - ExprResult R = DefaultFunctionArrayLvalueConversion(ControllingExpr);
> - if (R.isInvalid())
> - return ExprError();
> - ControllingExpr = R.get();
> + {
> + EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
> + ExprResult R = DefaultFunctionArrayLvalueConversion(ControllingExpr);
> + if (R.isInvalid())
> + return ExprError();
> + ControllingExpr = R.get();
> + }
>
> // The controlling expression is an unevaluated operand, so side effects are
> // likely unintended.
>
> Modified: cfe/trunk/test/Sema/generic-selection.c
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/generic-selection.c?rev=261669&r1=261668&r2=261669&view=diff
> ==============================================================================
> --- cfe/trunk/test/Sema/generic-selection.c (original)
> +++ cfe/trunk/test/Sema/generic-selection.c Tue Feb 23 12:55:15 2016
> @@ -31,4 +31,8 @@ void foo(int n) {
>
> const int i = 12;
> int a9[_Generic(i, int: 1, default: 2) == 1 ? 1 : -1];
> +
> + // This is expected to not trigger any diagnostics because the controlling
> + // expression is not evaluated.
> + (void)_Generic(*(int *)0, int: 1);
> }
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list