diff options
author | Jordy Rose <jediknil@belkadan.com> | 2010-06-21 20:08:28 +0000 |
---|---|---|
committer | Jordy Rose <jediknil@belkadan.com> | 2010-06-21 20:08:28 +0000 |
commit | 9a126850968b0aa25f7c6f214e7309e33f2d800a (patch) | |
tree | 8c09e2fa2bde69e4a15e4b4f28b3473c8c221def /lib/Checker/AttrNonNullChecker.cpp | |
parent | 027d7ed9d616d93ae7f02de79d17863725b14866 (diff) |
If a nonnull argument evaluates to UnknownVal, don't warn (and don't crash).
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@106456 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Checker/AttrNonNullChecker.cpp')
-rw-r--r-- | lib/Checker/AttrNonNullChecker.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/lib/Checker/AttrNonNullChecker.cpp b/lib/Checker/AttrNonNullChecker.cpp index 471cf19717..d0bccb27b4 100644 --- a/lib/Checker/AttrNonNullChecker.cpp +++ b/lib/Checker/AttrNonNullChecker.cpp @@ -60,11 +60,16 @@ void AttrNonNullChecker::PreVisitCallExpr(CheckerContext &C, if (!Att->isNonNull(idx)) continue; - const DefinedSVal &V = cast<DefinedSVal>(state->getSVal(*I)); + SVal V = state->getSVal(*I); + DefinedSVal *DV = dyn_cast<DefinedSVal>(&V); + + // If the value is unknown or undefined, we can't perform this check. + if (!DV) + continue; ConstraintManager &CM = C.getConstraintManager(); const GRState *stateNotNull, *stateNull; - llvm::tie(stateNotNull, stateNull) = CM.AssumeDual(state, V); + llvm::tie(stateNotNull, stateNull) = CM.AssumeDual(state, *DV); if (stateNull && !stateNotNull) { // Generate an error node. Check for a null node in case |