diff options
| author | Zhongxing Xu <xuzhongxing@gmail.com> | 2010-06-16 05:45:09 +0000 |
|---|---|---|
| committer | Zhongxing Xu <xuzhongxing@gmail.com> | 2010-06-16 05:45:09 +0000 |
| commit | 8225bda0d553576d114b00e664cbc47e7120352e (patch) | |
| tree | 6ca2259ea1c0256450c4656c031fff191ad1e8ed /clang/lib/Checker | |
| parent | 0fa7cddbab95c5bdfa715b0cff990509cb72c3ac (diff) | |
| download | bcm5719-llvm-8225bda0d553576d114b00e664cbc47e7120352e.tar.gz bcm5719-llvm-8225bda0d553576d114b00e664cbc47e7120352e.zip | |
Register CallAndMessageChecker before AttrNonNullChecker. Then we can assume
arguments are not undefined.
llvm-svn: 106083
Diffstat (limited to 'clang/lib/Checker')
| -rw-r--r-- | clang/lib/Checker/AttrNonNullChecker.cpp | 8 | ||||
| -rw-r--r-- | clang/lib/Checker/GRExprEngine.cpp | 4 |
2 files changed, 5 insertions, 7 deletions
diff --git a/clang/lib/Checker/AttrNonNullChecker.cpp b/clang/lib/Checker/AttrNonNullChecker.cpp index 309a74ce544..471cf197170 100644 --- a/clang/lib/Checker/AttrNonNullChecker.cpp +++ b/clang/lib/Checker/AttrNonNullChecker.cpp @@ -60,15 +60,11 @@ void AttrNonNullChecker::PreVisitCallExpr(CheckerContext &C, if (!Att->isNonNull(idx)) continue; - const SVal &V = state->getSVal(*I); - const DefinedSVal *DV = dyn_cast<DefinedSVal>(&V); - - if (!DV) - continue; + const DefinedSVal &V = cast<DefinedSVal>(state->getSVal(*I)); ConstraintManager &CM = C.getConstraintManager(); const GRState *stateNotNull, *stateNull; - llvm::tie(stateNotNull, stateNull) = CM.AssumeDual(state, *DV); + llvm::tie(stateNotNull, stateNull) = CM.AssumeDual(state, V); if (stateNull && !stateNotNull) { // Generate an error node. Check for a null node in case diff --git a/clang/lib/Checker/GRExprEngine.cpp b/clang/lib/Checker/GRExprEngine.cpp index d5bd4b0cb0f..615e8e3791c 100644 --- a/clang/lib/Checker/GRExprEngine.cpp +++ b/clang/lib/Checker/GRExprEngine.cpp @@ -312,8 +312,10 @@ static void RegisterInternalChecks(GRExprEngine &Eng) { // automatically. Note that the check itself is owned by the GRExprEngine // object. RegisterAdjustedReturnValueChecker(Eng); - RegisterAttrNonNullChecker(Eng); + // CallAndMessageChecker should be registered before AttrNonNullChecker, + // where we assume arguments are not undefined. RegisterCallAndMessageChecker(Eng); + RegisterAttrNonNullChecker(Eng); RegisterDereferenceChecker(Eng); RegisterVLASizeChecker(Eng); RegisterDivZeroChecker(Eng); |

