[cfe-commits] r64541 - in /cfe/trunk: lib/Analysis/GRExprEngine.cpp test/Analysis/misc-ps.m
Ted Kremenek
kremenek at apple.com
Fri Feb 13 21:55:08 PST 2009
Author: kremenek
Date: Fri Feb 13 23:55:08 2009
New Revision: 64541
URL: http://llvm.org/viewvc/llvm-project?rev=64541&view=rev
Log:
GRExprEngine: Handle empty statement expressions.
Modified:
cfe/trunk/lib/Analysis/GRExprEngine.cpp
cfe/trunk/test/Analysis/misc-ps.m
Modified: cfe/trunk/lib/Analysis/GRExprEngine.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Analysis/GRExprEngine.cpp?rev=64541&r1=64540&r2=64541&view=diff
==============================================================================
--- cfe/trunk/lib/Analysis/GRExprEngine.cpp (original)
+++ cfe/trunk/lib/Analysis/GRExprEngine.cpp Fri Feb 13 23:55:08 2009
@@ -356,15 +356,19 @@
case Stmt::StmtExprClass: {
StmtExpr* SE = cast<StmtExpr>(S);
-
- const GRState* state = GetState(Pred);
-
- // FIXME: Not certain if we can have empty StmtExprs. If so, we should
- // probably just remove these from the CFG.
- assert (!SE->getSubStmt()->body_empty());
-
- if (Expr* LastExpr = dyn_cast<Expr>(*SE->getSubStmt()->body_rbegin()))
+
+ if (SE->getSubStmt()->body_empty()) {
+ // Empty statement expression.
+ assert(SE->getType() == getContext().VoidTy
+ && "Empty statement expression must have void type.");
+ Dst.Add(Pred);
+ break;
+ }
+
+ if (Expr* LastExpr = dyn_cast<Expr>(*SE->getSubStmt()->body_rbegin())) {
+ const GRState* state = GetState(Pred);
MakeNode(Dst, SE, Pred, BindExpr(state, SE, GetSVal(state, LastExpr)));
+ }
else
Dst.Add(Pred);
Modified: cfe/trunk/test/Analysis/misc-ps.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/misc-ps.m?rev=64541&r1=64540&r2=64541&view=diff
==============================================================================
--- cfe/trunk/test/Analysis/misc-ps.m (original)
+++ cfe/trunk/test/Analysis/misc-ps.m Fri Feb 13 23:55:08 2009
@@ -108,3 +108,9 @@
pr3422_helper(&q[1]);
}
+// PR 3543 (handle empty statement expressions)
+int pr_3543(void) {
+ ({});
+}
+
+
More information about the cfe-commits
mailing list