[cfe-commits] r156901 - in /cfe/trunk: include/clang/Sema/Sema.h lib/Parse/ParseStmt.cpp lib/Sema/SemaExprCXX.cpp test/SemaCXX/conversion.cpp
Chandler Carruth
chandlerc at google.com
Wed May 16 01:02:39 PDT 2012
I have to ask: why do we bother warning about 'if (NULL) {...}'? It seems
obvious and valid code, with no plausible typo or mistake in it. I don't
understand why we need such heavy machinery merely to suppress this *iff*
the NULL comes out of some other macro... But I've not followed all of the
discussion, so perhaps I'm just missing context.
On Tue, May 15, 2012 at 10:20 PM, David Blaikie <dblaikie at gmail.com> wrote:
> Author: dblaikie
> Date: Tue May 15 23:20:04 2012
> New Revision: 156901
>
> URL: http://llvm.org/viewvc/llvm-project?rev=156901&view=rev
> Log:
> Include the correct conversion context locations for condition expressions.
>
> This improves the conversion diagnostics (by correctly pointing to the loop
> construct for conversions that may've been caused by the contextual
> conversion
> to bool caused by a condition expression) and also causes the NULL
> conversion
> warnings to be correctly suppressed when crossing a macro boundary in such
> a
> context. (previously, since the conversion context location was incorrect,
> the
> suppression could not be performed)
>
> Reported by Nico Weber as feedback to r156826.
>
> Modified:
> cfe/trunk/include/clang/Sema/Sema.h
> cfe/trunk/lib/Parse/ParseStmt.cpp
> cfe/trunk/lib/Sema/SemaExprCXX.cpp
> cfe/trunk/test/SemaCXX/conversion.cpp
>
> Modified: cfe/trunk/include/clang/Sema/Sema.h
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Sema/Sema.h?rev=156901&r1=156900&r2=156901&view=diff
>
> ==============================================================================
> --- cfe/trunk/include/clang/Sema/Sema.h (original)
> +++ cfe/trunk/include/clang/Sema/Sema.h Tue May 15 23:20:04 2012
> @@ -2402,7 +2402,10 @@
> };
>
> FullExprArg MakeFullExpr(Expr *Arg) {
> - return FullExprArg(ActOnFinishFullExpr(Arg).release());
> + return MakeFullExpr(Arg, Arg ? Arg->getExprLoc() : SourceLocation());
> + }
> + FullExprArg MakeFullExpr(Expr *Arg, SourceLocation CC) {
> + return FullExprArg(ActOnFinishFullExpr(Arg, CC).release());
> }
>
> StmtResult ActOnExprStmt(FullExprArg Expr);
> @@ -3795,7 +3798,11 @@
> Stmt *MaybeCreateStmtWithCleanups(Stmt *SubStmt);
> ExprResult MaybeCreateExprWithCleanups(ExprResult SubExpr);
>
> - ExprResult ActOnFinishFullExpr(Expr *Expr);
> + ExprResult ActOnFinishFullExpr(Expr *Expr) {
> + return ActOnFinishFullExpr(Expr, Expr ? Expr->getExprLoc()
> + : SourceLocation());
> + }
> + ExprResult ActOnFinishFullExpr(Expr *Expr, SourceLocation CC);
> StmtResult ActOnFinishFullStmt(Stmt *Stmt);
>
> // Marks SS invalid if it represents an incomplete type.
>
> Modified: cfe/trunk/lib/Parse/ParseStmt.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseStmt.cpp?rev=156901&r1=156900&r2=156901&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Parse/ParseStmt.cpp (original)
> +++ cfe/trunk/lib/Parse/ParseStmt.cpp Tue May 15 23:20:04 2012
> @@ -948,7 +948,7 @@
> if (ParseParenExprOrCondition(CondExp, CondVar, IfLoc, true))
> return StmtError();
>
> - FullExprArg FullCondExp(Actions.MakeFullExpr(CondExp.get()));
> + FullExprArg FullCondExp(Actions.MakeFullExpr(CondExp.get(), IfLoc));
>
> // C99 6.8.4p3 - In C99, the body of the if statement is a scope, even if
> // there is no compound stmt. C90 does not have this clause. We only
> do this
> @@ -1174,7 +1174,7 @@
> if (ParseParenExprOrCondition(Cond, CondVar, WhileLoc, true))
> return StmtError();
>
> - FullExprArg FullCond(Actions.MakeFullExpr(Cond.get()));
> + FullExprArg FullCond(Actions.MakeFullExpr(Cond.get(), WhileLoc));
>
> // C99 6.8.5p5 - In C99, the body of the if statement is a scope, even if
> // there is no compound stmt. C90 does not have this clause. We only
> do this
> @@ -1451,7 +1451,7 @@
> Second.get());
> }
> SecondPartIsInvalid = Second.isInvalid();
> - SecondPart = Actions.MakeFullExpr(Second.get());
> + SecondPart = Actions.MakeFullExpr(Second.get(), ForLoc);
> }
>
> if (Tok.isNot(tok::semi)) {
>
> Modified: cfe/trunk/lib/Sema/SemaExprCXX.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExprCXX.cpp?rev=156901&r1=156900&r2=156901&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaExprCXX.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaExprCXX.cpp Tue May 15 23:20:04 2012
> @@ -5310,7 +5310,7 @@
> return Owned(E);
> }
>
> -ExprResult Sema::ActOnFinishFullExpr(Expr *FE) {
> +ExprResult Sema::ActOnFinishFullExpr(Expr *FE, SourceLocation CC) {
> ExprResult FullExpr = Owned(FE);
>
> if (!FullExpr.get())
> @@ -5336,7 +5336,7 @@
> if (FullExpr.isInvalid())
> return ExprError();
>
> - CheckImplicitConversions(FullExpr.get(), FullExpr.get()->getExprLoc());
> + CheckImplicitConversions(FullExpr.get(), CC);
> return MaybeCreateExprWithCleanups(FullExpr);
> }
>
>
> Modified: cfe/trunk/test/SemaCXX/conversion.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/conversion.cpp?rev=156901&r1=156900&r2=156901&view=diff
>
> ==============================================================================
> --- cfe/trunk/test/SemaCXX/conversion.cpp (original)
> +++ cfe/trunk/test/SemaCXX/conversion.cpp Tue May 15 23:20:04 2012
> @@ -81,6 +81,14 @@
> // and avoiding that helps us skip these cases:
> #define NULL_COND(cond) ((cond) ? &a : NULL)
> bool bl2 = NULL_COND(true); // don't warn on NULL conversion through the
> conditional operator across a macro boundary
> + if (NULL_COND(true))
> + ;
> + while (NULL_COND(true))
> + ;
> + for (; NULL_COND(true); )
> + ;
> + do ;
> + while(NULL_COND(true));
> }
>
> namespace test4 {
>
>
> _______________________________________________
> 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/20120516/bc7af1b9/attachment.html>
More information about the cfe-commits
mailing list