summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorZhongxing Xu <xuzhongxing@gmail.com>2010-06-16 05:56:39 +0000
committerZhongxing Xu <xuzhongxing@gmail.com>2010-06-16 05:56:39 +0000
commitb4126ee1334ad2f703e58566cc1500ccbca8dacd (patch)
treed98962c34a100ce4d1c464238356936c832cdd4d /clang/lib
parent9fe7e9129bfe574fb90b2b816f46c723962ea70b (diff)
downloadbcm5719-llvm-b4126ee1334ad2f703e58566cc1500ccbca8dacd.tar.gz
bcm5719-llvm-b4126ee1334ad2f703e58566cc1500ccbca8dacd.zip
Although arguments can not be undefined when we get here, they can still be
unknown. llvm-svn: 106085
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/Checker/StreamChecker.cpp28
1 files changed, 15 insertions, 13 deletions
diff --git a/clang/lib/Checker/StreamChecker.cpp b/clang/lib/Checker/StreamChecker.cpp
index 30618837060..1fd72b5ce25 100644
--- a/clang/lib/Checker/StreamChecker.cpp
+++ b/clang/lib/Checker/StreamChecker.cpp
@@ -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);
+ }
}
}
}
OpenPOWER on IntegriCloud