diff options
author | Ted Kremenek <kremenek@apple.com> | 2014-01-17 07:15:35 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2014-01-17 07:15:35 +0000 |
commit | a93d8a5d2c31d36239588b0427fccbd5fc277a33 (patch) | |
tree | d8179b5d6c8623c9768b5e0f4fe04a1865866e5e /lib/StaticAnalyzer/Checkers/NonNullParamChecker.cpp | |
parent | d9f32582b1c19af46dbccefd89b26fc8d9d76c4f (diff) |
[analyzer] Teach NonNullParamChecker about 'nonnull' attributes on parameters.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@199473 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/StaticAnalyzer/Checkers/NonNullParamChecker.cpp')
-rw-r--r-- | lib/StaticAnalyzer/Checkers/NonNullParamChecker.cpp | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/lib/StaticAnalyzer/Checkers/NonNullParamChecker.cpp b/lib/StaticAnalyzer/Checkers/NonNullParamChecker.cpp index 273a7a3882..bde902707e 100644 --- a/lib/StaticAnalyzer/Checkers/NonNullParamChecker.cpp +++ b/lib/StaticAnalyzer/Checkers/NonNullParamChecker.cpp @@ -43,7 +43,7 @@ public: } // end anonymous namespace void NonNullParamChecker::checkPreCall(const CallEvent &Call, - CheckerContext &C) const { + CheckerContext &C) const { const Decl *FD = Call.getDecl(); if (!FD) return; @@ -66,6 +66,12 @@ void NonNullParamChecker::checkPreCall(const CallEvent &Call, } bool haveAttrNonNull = Att && Att->isNonNull(idx); + if (!haveAttrNonNull) { + // Check if the parameter is also marked 'nonnull'. + ArrayRef<ParmVarDecl*> parms = Call.parameters(); + if (idx < parms.size()) + haveAttrNonNull = parms[idx]->hasAttr<NonNullAttr>(); + } if (!haveRefTypeParam && !haveAttrNonNull) continue; |