summaryrefslogtreecommitdiffstats
path: root/clang/lib/StaticAnalyzer/Checkers/CallAndMessageChecker.cpp
diff options
context:
space:
mode:
authorJordan Rose <jordan_rose@apple.com>2012-08-03 23:09:01 +0000
committerJordan Rose <jordan_rose@apple.com>2012-08-03 23:09:01 +0000
commitcfb4eb293fd8be1d3d247690f65606836431d1c1 (patch)
treee1241953b9bcb7d48ad8745d9c310a6e2e5625d4 /clang/lib/StaticAnalyzer/Checkers/CallAndMessageChecker.cpp
parent3eb3cd45b82855486b79e6a01add7899f07970fb (diff)
downloadbcm5719-llvm-cfb4eb293fd8be1d3d247690f65606836431d1c1.tar.gz
bcm5719-llvm-cfb4eb293fd8be1d3d247690f65606836431d1c1.zip
[analyzer] When a symbol is null, we should track its constraints.
Because of this, we would previously emit NO path notes when a parameter is constrained to null (because there are no stores). Now we show where we made the assumption, which is much more useful. llvm-svn: 161280
Diffstat (limited to 'clang/lib/StaticAnalyzer/Checkers/CallAndMessageChecker.cpp')
-rw-r--r--clang/lib/StaticAnalyzer/Checkers/CallAndMessageChecker.cpp13
1 files changed, 4 insertions, 9 deletions
diff --git a/clang/lib/StaticAnalyzer/Checkers/CallAndMessageChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/CallAndMessageChecker.cpp
index 70b6241dea0..e09d6885a98 100644
--- a/clang/lib/StaticAnalyzer/Checkers/CallAndMessageChecker.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/CallAndMessageChecker.cpp
@@ -75,7 +75,7 @@ void CallAndMessageChecker::emitBadCall(BugType *BT, CheckerContext &C,
BugReport *R = new BugReport(*BT, BT->getName(), N);
if (BadE) {
R->addRange(BadE->getSourceRange());
- R->addVisitor(bugreporter::getTrackNullOrUndefValueVisitor(N, BadE, R));
+ bugreporter::addTrackNullOrUndefValueVisitor(N, BadE, R);
}
C.EmitReport(R);
}
@@ -122,8 +122,7 @@ bool CallAndMessageChecker::PreVisitProcessArg(CheckerContext &C,
BugReport *R = new BugReport(*BT, Desc, N);
R->addRange(argRange);
if (argEx)
- R->addVisitor(bugreporter::getTrackNullOrUndefValueVisitor(N, argEx,
- R));
+ bugreporter::addTrackNullOrUndefValueVisitor(N, argEx, R);
C.EmitReport(R);
}
return true;
@@ -320,9 +319,7 @@ void CallAndMessageChecker::checkPreObjCMessage(const ObjCMethodCall &msg,
// FIXME: getTrackNullOrUndefValueVisitor can't handle "super" yet.
if (const Expr *ReceiverE = ME->getInstanceReceiver())
- R->addVisitor(bugreporter::getTrackNullOrUndefValueVisitor(N,
- ReceiverE,
- R));
+ bugreporter::addTrackNullOrUndefValueVisitor(N, ReceiverE, R);
C.EmitReport(R);
}
return;
@@ -364,9 +361,7 @@ void CallAndMessageChecker::emitNilReceiverBug(CheckerContext &C,
report->addRange(ME->getReceiverRange());
// FIXME: This won't track "self" in messages to super.
if (const Expr *receiver = ME->getInstanceReceiver()) {
- report->addVisitor(bugreporter::getTrackNullOrUndefValueVisitor(N,
- receiver,
- report));
+ bugreporter::addTrackNullOrUndefValueVisitor(N, receiver, report);
}
C.EmitReport(report);
}
OpenPOWER on IntegriCloud