Hi Aaron, I'll let it sit in the tree for a bit, and will then merge it later today.
Many thanks, Hans On Tue, Feb 23, 2016 at 11:01 AM, Aaron Ballman <aa...@aaronballman.com> wrote: > 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@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@lists.llvm.org >> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits