]> granicus.if.org Git - clang/commitdiff
Although arguments can not be undefined when we get here, they can still be
authorZhongxing Xu <xuzhongxing@gmail.com>
Wed, 16 Jun 2010 05:56:39 +0000 (05:56 +0000)
committerZhongxing Xu <xuzhongxing@gmail.com>
Wed, 16 Jun 2010 05:56:39 +0000 (05:56 +0000)
unknown.

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

lib/Checker/StreamChecker.cpp

index 306188370608de0deb02cf9d415c45cb071b0320..1fd72b5ce259c1883d51dbea5ccccb9493a0645a 100644 (file)
@@ -98,19 +98,21 @@ void StreamChecker::FRead(CheckerContext &C, const CallExpr *CE) {
   const GRState *state = C.getState();
 
   // Assume CallAndMessageChecker has been run.
-  const DefinedSVal &StreamVal=cast<DefinedSVal>(state->getSVal(CE->getArg(3)));
-
-  ConstraintManager &CM = C.getConstraintManager();
-  const GRState *stateNotNull, *stateNull;
-  llvm::tie(stateNotNull, stateNull) = CM.AssumeDual(state, StreamVal);
-
-  if (!stateNotNull && stateNull) {
-    if (ExplodedNode *N = C.GenerateSink(stateNull)) {
-      if (!BT_nullfp)
-        BT_nullfp = new BuiltinBug("NULL stream pointer",
-                                   "Stream pointer might be NULL.");
-      BugReport *R = new BugReport(*BT_nullfp, BT_nullfp->getDescription(), N);
-      C.EmitReport(R);
+  SVal StreamVal = state->getSVal(CE->getArg(3));
+
+  if (const DefinedSVal *DV = cast<DefinedSVal>(&StreamVal)) {
+    ConstraintManager &CM = C.getConstraintManager();
+    const GRState *stateNotNull, *stateNull;
+    llvm::tie(stateNotNull, stateNull) = CM.AssumeDual(state, *DV);
+
+    if (!stateNotNull && stateNull) {
+      if (ExplodedNode *N = C.GenerateSink(stateNull)) {
+        if (!BT_nullfp)
+          BT_nullfp = new BuiltinBug("NULL stream pointer",
+                                     "Stream pointer might be NULL.");
+        BugReport *R =new BugReport(*BT_nullfp, BT_nullfp->getDescription(), N);
+        C.EmitReport(R);
+      }
     }
   }
 }