summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2008-02-21 19:30:14 +0000
committerTed Kremenek <kremenek@apple.com>2008-02-21 19:30:14 +0000
commite82c7a44d6cba61f30ada1daba24a31afa8e9be1 (patch)
tree54713c3a0a8a391aa7f540b7c138ec15895c2ab5
parent7328fa6ec83203e379b2cbf8534168ee335c2588 (diff)
downloadbcm5719-llvm-e82c7a44d6cba61f30ada1daba24a31afa8e9be1.tar.gz
bcm5719-llvm-e82c7a44d6cba61f30ada1daba24a31afa8e9be1.zip
RemoveDeadBindings should now check for UninitalizedVal, as it is a now
an error to cast it to LVal. llvm-svn: 47450
-rw-r--r--clang/Analysis/ValueState.cpp11
-rw-r--r--clang/include/clang/Analysis/PathSensitive/GRExprEngine.h4
2 files changed, 13 insertions, 2 deletions
diff --git a/clang/Analysis/ValueState.cpp b/clang/Analysis/ValueState.cpp
index db2ef6badc2..e175a1cd8fa 100644
--- a/clang/Analysis/ValueState.cpp
+++ b/clang/Analysis/ValueState.cpp
@@ -94,8 +94,15 @@ ValueStateManager::RemoveDeadBindings(ValueState St, Stmt* Loc,
Marked.insert(V);
if (V->getType()->isPointerType()) {
- const LVal& LV =
- cast<LVal>(GetRVal(St, lval::DeclVal(cast<VarDecl>(V))));
+
+ RVal X = GetRVal(St, lval::DeclVal(cast<VarDecl>(V)));
+
+ assert (!X.isUnknown());
+
+ if (X.isUninit())
+ continue;
+
+ LVal LV = cast<LVal>(X);
for (RVal::symbol_iterator SI = LV.symbol_begin(), SE = LV.symbol_end();
SI != SE; ++SI) {
diff --git a/clang/include/clang/Analysis/PathSensitive/GRExprEngine.h b/clang/include/clang/Analysis/PathSensitive/GRExprEngine.h
index f83f3d3e5c4..8e66b9c327b 100644
--- a/clang/include/clang/Analysis/PathSensitive/GRExprEngine.h
+++ b/clang/include/clang/Analysis/PathSensitive/GRExprEngine.h
@@ -367,6 +367,10 @@ public:
return R.isValid() ? TF->EvalBinOp(ValMgr, Op, L, cast<NonLVal>(R)) : R;
}
+ RVal EvalBinOp(BinaryOperator::Opcode Op, NonLVal L, NonLVal R) {
+ return R.isValid() ? TF->EvalBinOp(ValMgr, Op, L, R) : R;
+ }
+
RVal EvalBinOp(BinaryOperator::Opcode Op, RVal L, RVal R) {
if (L.isUninit() || R.isUninit())
OpenPOWER on IntegriCloud