[cfe-commits] r47450 - in /cfe/trunk: Analysis/ValueState.cpp include/clang/Analysis/PathSensitive/GRExprEngine.h

Ted Kremenek kremenek at apple.com
Thu Feb 21 11:30:14 PST 2008


Author: kremenek
Date: Thu Feb 21 13:30:14 2008
New Revision: 47450

URL: http://llvm.org/viewvc/llvm-project?rev=47450&view=rev
Log:
RemoveDeadBindings should now check for UninitalizedVal, as it is a now
an error to cast it to LVal.

Modified:
    cfe/trunk/Analysis/ValueState.cpp
    cfe/trunk/include/clang/Analysis/PathSensitive/GRExprEngine.h

Modified: cfe/trunk/Analysis/ValueState.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Analysis/ValueState.cpp?rev=47450&r1=47449&r2=47450&view=diff

==============================================================================
--- cfe/trunk/Analysis/ValueState.cpp (original)
+++ cfe/trunk/Analysis/ValueState.cpp Thu Feb 21 13:30:14 2008
@@ -94,8 +94,15 @@
     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) {

Modified: cfe/trunk/include/clang/Analysis/PathSensitive/GRExprEngine.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Analysis/PathSensitive/GRExprEngine.h?rev=47450&r1=47449&r2=47450&view=diff

==============================================================================
--- cfe/trunk/include/clang/Analysis/PathSensitive/GRExprEngine.h (original)
+++ cfe/trunk/include/clang/Analysis/PathSensitive/GRExprEngine.h Thu Feb 21 13:30:14 2008
@@ -367,6 +367,10 @@
     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())





More information about the cfe-commits mailing list