summaryrefslogtreecommitdiffstats
path: root/clang/lib/StaticAnalyzer/Checkers/NonNullParamChecker.cpp
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2014-01-17 07:15:35 +0000
committerTed Kremenek <kremenek@apple.com>2014-01-17 07:15:35 +0000
commitf0ae7d02012af9c997c62a5b1bd04e57bf85530b (patch)
treeb827f952046434827c64deab63edf7dd1f7dc34f /clang/lib/StaticAnalyzer/Checkers/NonNullParamChecker.cpp
parent2ff160046b6681976499619b9b8edc5bb6fb0e9c (diff)
downloadbcm5719-llvm-f0ae7d02012af9c997c62a5b1bd04e57bf85530b.tar.gz
bcm5719-llvm-f0ae7d02012af9c997c62a5b1bd04e57bf85530b.zip
[analyzer] Teach NonNullParamChecker about 'nonnull' attributes on parameters.
llvm-svn: 199473
Diffstat (limited to 'clang/lib/StaticAnalyzer/Checkers/NonNullParamChecker.cpp')
-rw-r--r--clang/lib/StaticAnalyzer/Checkers/NonNullParamChecker.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/clang/lib/StaticAnalyzer/Checkers/NonNullParamChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/NonNullParamChecker.cpp
index 273a7a38824..bde902707eb 100644
--- a/clang/lib/StaticAnalyzer/Checkers/NonNullParamChecker.cpp
+++ b/clang/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;
OpenPOWER on IntegriCloud