diff options
| author | Zhongxing Xu <xuzhongxing@gmail.com> | 2010-06-16 05:56:39 +0000 |
|---|---|---|
| committer | Zhongxing Xu <xuzhongxing@gmail.com> | 2010-06-16 05:56:39 +0000 |
| commit | b4126ee1334ad2f703e58566cc1500ccbca8dacd (patch) | |
| tree | d98962c34a100ce4d1c464238356936c832cdd4d /clang/lib | |
| parent | 9fe7e9129bfe574fb90b2b816f46c723962ea70b (diff) | |
| download | bcm5719-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.cpp | 28 |
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); + } } } } |

