]> granicus.if.org Git - clang/commitdiff
RemoveDeadBindings should now check for UninitalizedVal, as it is a now
authorTed Kremenek <kremenek@apple.com>
Thu, 21 Feb 2008 19:30:14 +0000 (19:30 +0000)
committerTed Kremenek <kremenek@apple.com>
Thu, 21 Feb 2008 19:30:14 +0000 (19:30 +0000)
an error to cast it to LVal.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47450 91177308-0d34-0410-b5e6-96231b3b80d8

Analysis/ValueState.cpp
include/clang/Analysis/PathSensitive/GRExprEngine.h

index db2ef6badc26be96f7821bf63d208150044ef741..e175a1cd8fac89f16a67d5f84d670b6db821f351 100644 (file)
@@ -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) {
index f83f3d3e5c4528ae8477151c93605acb93517872..8e66b9c327b1a41610e3cdb6026fc7a0acc754dd 100644 (file)
@@ -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())