[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