[cfe-commits] r77631 - in /cfe/trunk: lib/Sema/SemaStmt.cpp test/Sema/unused-expr.c
Daniel Dunbar
daniel at zuster.org
Fri Jul 31 16:44:03 PDT 2009
Hi Anders,
Nice catch! Looks like we are still missing a few places, for example:
--
for (1 == 2;;) {}
--
and
--
1==2, foo();
--
- Daniel
On Thu, Jul 30, 2009 at 3:39 PM, Anders Carlsson<andersca at mac.com> wrote:
> Author: andersca
> Date: Thu Jul 30 17:39:03 2009
> New Revision: 77631
>
> URL: http://llvm.org/viewvc/llvm-project?rev=77631&view=rev
> Log:
> Diagnose unused expression results for all statements, just not compound statements.
>
> Modified:
> cfe/trunk/lib/Sema/SemaStmt.cpp
> cfe/trunk/test/Sema/unused-expr.c
>
> Modified: cfe/trunk/lib/Sema/SemaStmt.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaStmt.cpp?rev=77631&r1=77630&r2=77631&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaStmt.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaStmt.cpp Thu Jul 30 17:39:03 2009
> @@ -52,7 +52,7 @@
> }
>
> void Sema::DiagnoseUnusedExprResult(const Stmt *S) {
> - const Expr *E = dyn_cast<Expr>(S);
> + const Expr *E = dyn_cast_or_null<Expr>(S);
> if (!E)
> return;
>
> @@ -215,6 +215,7 @@
> }
>
> Stmt *thenStmt = ThenVal.takeAs<Stmt>();
> + DiagnoseUnusedExprResult(thenStmt);
>
> // Warn if the if block has a null body without an else value.
> // this helps prevent bugs due to typos, such as
> @@ -225,9 +226,12 @@
> Diag(stmt->getSemiLoc(), diag::warn_empty_if_body);
> }
>
> + Stmt *elseStmt = ElseVal.takeAs<Stmt>();
> + DiagnoseUnusedExprResult(elseStmt);
> +
> CondResult.release();
> return Owned(new (Context) IfStmt(IfLoc, condExpr, thenStmt,
> - ElseLoc, ElseVal.takeAs<Stmt>()));
> + ElseLoc, elseStmt));
> }
>
> Action::OwningStmtResult
> @@ -571,9 +575,11 @@
> << condType << condExpr->getSourceRange());
> }
>
> + Stmt *bodyStmt = Body.takeAs<Stmt>();
> + DiagnoseUnusedExprResult(bodyStmt);
> +
> CondArg.release();
> - return Owned(new (Context) WhileStmt(condExpr, Body.takeAs<Stmt>(),
> - WhileLoc));
> + return Owned(new (Context) WhileStmt(condExpr, bodyStmt, WhileLoc));
> }
>
> Action::OwningStmtResult
> @@ -597,8 +603,11 @@
> << condType << condExpr->getSourceRange());
> }
>
> + Stmt *bodyStmt = Body.takeAs<Stmt>();
> + DiagnoseUnusedExprResult(bodyStmt);
> +
> Cond.release();
> - return Owned(new (Context) DoStmt(Body.takeAs<Stmt>(), condExpr, DoLoc,
> + return Owned(new (Context) DoStmt(bodyStmt, condExpr, DoLoc,
> WhileLoc, CondRParen));
> }
>
> @@ -639,6 +648,9 @@
> diag::err_typecheck_statement_requires_scalar)
> << SecondType << Second->getSourceRange());
> }
> +
> + DiagnoseUnusedExprResult(Body);
> +
> first.release();
> second.release();
> third.release();
>
> Modified: cfe/trunk/test/Sema/unused-expr.c
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/unused-expr.c?rev=77631&r1=77630&r2=77631&view=diff
>
> ==============================================================================
> --- cfe/trunk/test/Sema/unused-expr.c (original)
> +++ cfe/trunk/test/Sema/unused-expr.c Thu Jul 30 17:39:03 2009
> @@ -50,4 +50,23 @@
> ((void)0), y = x;
> }
>
> +void t4(int a) {
> + int b = 0;
> +
> + if (a)
> + b == 1; // expected-warning{{expression result unused}}
> + else
> + b == 2; // expected-warning{{expression result unused}}
> +
> + while (1)
> + b == 3; // expected-warning{{expression result unused}}
> +
> + do
> + b == 4; // expected-warning{{expression result unused}}
> + while (1);
> +
> + for (;;)
> + b == 5; // expected-warning{{expression result unused}}
> +}
> +
>
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
More information about the cfe-commits
mailing list