From: Ted Kremenek Date: Thu, 21 Feb 2008 19:30:14 +0000 (+0000) Subject: RemoveDeadBindings should now check for UninitalizedVal, as it is a now X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c3055ab39ac3535ffd581d33e21b72133099a6eb;p=clang RemoveDeadBindings should now check for UninitalizedVal, as it is a now an error to cast it to LVal. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47450 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/Analysis/ValueState.cpp b/Analysis/ValueState.cpp index db2ef6badc..e175a1cd8f 100644 --- a/Analysis/ValueState.cpp +++ b/Analysis/ValueState.cpp @@ -94,8 +94,15 @@ ValueStateManager::RemoveDeadBindings(ValueState St, Stmt* Loc, Marked.insert(V); if (V->getType()->isPointerType()) { - const LVal& LV = - cast(GetRVal(St, lval::DeclVal(cast(V)))); + + RVal X = GetRVal(St, lval::DeclVal(cast(V))); + + assert (!X.isUnknown()); + + if (X.isUninit()) + continue; + + LVal LV = cast(X); for (RVal::symbol_iterator SI = LV.symbol_begin(), SE = LV.symbol_end(); SI != SE; ++SI) { diff --git a/include/clang/Analysis/PathSensitive/GRExprEngine.h b/include/clang/Analysis/PathSensitive/GRExprEngine.h index f83f3d3e5c..8e66b9c327 100644 --- a/include/clang/Analysis/PathSensitive/GRExprEngine.h +++ b/include/clang/Analysis/PathSensitive/GRExprEngine.h @@ -367,6 +367,10 @@ public: return R.isValid() ? TF->EvalBinOp(ValMgr, Op, L, cast(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())