diff options
| author | Ted Kremenek <kremenek@apple.com> | 2008-02-21 19:30:14 +0000 |
|---|---|---|
| committer | Ted Kremenek <kremenek@apple.com> | 2008-02-21 19:30:14 +0000 |
| commit | e82c7a44d6cba61f30ada1daba24a31afa8e9be1 (patch) | |
| tree | 54713c3a0a8a391aa7f540b7c138ec15895c2ab5 | |
| parent | 7328fa6ec83203e379b2cbf8534168ee335c2588 (diff) | |
| download | bcm5719-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.cpp | 11 | ||||
| -rw-r--r-- | clang/include/clang/Analysis/PathSensitive/GRExprEngine.h | 4 |
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()) |

