[cfe-commits] r47456 - /cfe/trunk/Analysis/GRExprEngine.cpp

Ted Kremenek kremenek at apple.com
Thu Feb 21 11:46:04 PST 2008


Author: kremenek
Date: Thu Feb 21 13:46:04 2008
New Revision: 47456

URL: http://llvm.org/viewvc/llvm-project?rev=47456&view=rev
Log:
Added transfer function support for dispatching to functions we don't know
about.  The default logic is to invalidate the values of all values
passed-by-reference.

Modified:
    cfe/trunk/Analysis/GRExprEngine.cpp

Modified: cfe/trunk/Analysis/GRExprEngine.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Analysis/GRExprEngine.cpp?rev=47456&r1=47455&r2=47456&view=diff

==============================================================================
--- cfe/trunk/Analysis/GRExprEngine.cpp (original)
+++ cfe/trunk/Analysis/GRExprEngine.cpp Thu Feb 21 13:46:04 2008
@@ -448,10 +448,20 @@
       continue;
     }
     
-    // FIXME: EvalCall must handle the case where the callee is Unknown.
-    assert (!L.isUnknown());    
+    if (L.isUnknown()) {
+      // Invalidate all arguments passed in by reference (LVals).
+      for (CallExpr::arg_iterator I = CE->arg_begin(), E = CE->arg_end();
+                                                       I != E; ++I) {
+        RVal V = GetRVal(St, *I);
 
-    Nodify(Dst, CE, *DI, EvalCall(CE, cast<LVal>(L), (*DI)->getState()));
+        if (isa<LVal>(V))
+          St = SetRVal(St, cast<LVal>(V), UnknownVal());
+      }
+    }
+    else
+      St = EvalCall(CE, cast<LVal>(L), (*DI)->getState());
+    
+    Nodify(Dst, CE, *DI, St);
   }
 }
 





More information about the cfe-commits mailing list