summaryrefslogtreecommitdiffstats
path: root/clang/lib/Checker
diff options
context:
space:
mode:
authorTom Care <tcare@apple.com>2010-08-03 01:55:07 +0000
committerTom Care <tcare@apple.com>2010-08-03 01:55:07 +0000
commit44081fbc6c2dc137d7a8c5669d5f086c2bb562e3 (patch)
tree3b5edbf145603147bf5d8a5e99dfdcaad499049b /clang/lib/Checker
parent7492a11f0c9c267f06f0592e9302ed9a074695ba (diff)
downloadbcm5719-llvm-44081fbc6c2dc137d7a8c5669d5f086c2bb562e3.tar.gz
bcm5719-llvm-44081fbc6c2dc137d7a8c5669d5f086c2bb562e3.zip
Changed GRExprEngine to pass down a reference to itself when checkers are doing postanalysis. This allows the checker to gather information about the state of the engine when it has finished.
- Exposed the worklist and BlockAborted flag in GRCoreEngine - Changed postanalysis checkers to use the new infrastructure llvm-svn: 110095
Diffstat (limited to 'clang/lib/Checker')
-rw-r--r--clang/lib/Checker/GRExprEngine.cpp2
-rw-r--r--clang/lib/Checker/IdempotentOperationChecker.cpp7
-rw-r--r--clang/lib/Checker/UnreachableCodeChecker.cpp9
3 files changed, 9 insertions, 9 deletions
diff --git a/clang/lib/Checker/GRExprEngine.cpp b/clang/lib/Checker/GRExprEngine.cpp
index 9ee723eb7c5..328dacfe909 100644
--- a/clang/lib/Checker/GRExprEngine.cpp
+++ b/clang/lib/Checker/GRExprEngine.cpp
@@ -518,7 +518,7 @@ const GRState *GRExprEngine::ProcessAssume(const GRState *state, SVal cond,
void GRExprEngine::ProcessEndWorklist(bool hasWorkRemaining) {
for (CheckersOrdered::iterator I = Checkers.begin(), E = Checkers.end();
I != E; ++I) {
- I->second->VisitEndAnalysis(G, BR, hasWorkRemaining);
+ I->second->VisitEndAnalysis(G, BR, *this);
}
}
diff --git a/clang/lib/Checker/IdempotentOperationChecker.cpp b/clang/lib/Checker/IdempotentOperationChecker.cpp
index 267e747928a..26b018e54b9 100644
--- a/clang/lib/Checker/IdempotentOperationChecker.cpp
+++ b/clang/lib/Checker/IdempotentOperationChecker.cpp
@@ -65,8 +65,7 @@ class IdempotentOperationChecker
public:
static void *getTag();
void PreVisitBinaryOperator(CheckerContext &C, const BinaryOperator *B);
- void VisitEndAnalysis(ExplodedGraph &G, BugReporter &B,
- bool hasWorkRemaining);
+ void VisitEndAnalysis(ExplodedGraph &G, BugReporter &B, GRExprEngine &Eng);
private:
// Our assumption about a particular operation.
@@ -293,9 +292,9 @@ void IdempotentOperationChecker::PreVisitBinaryOperator(
void IdempotentOperationChecker::VisitEndAnalysis(ExplodedGraph &G,
BugReporter &BR,
- bool hasWorkRemaining) {
+ GRExprEngine &Eng) {
// If there is any work remaining we cannot be 100% sure about our warnings
- if (hasWorkRemaining)
+ if (Eng.hasWorkRemaining())
return;
// Iterate over the hash to see if we have any paths with definite
diff --git a/clang/lib/Checker/UnreachableCodeChecker.cpp b/clang/lib/Checker/UnreachableCodeChecker.cpp
index e95e6a832d0..e3d758f20a5 100644
--- a/clang/lib/Checker/UnreachableCodeChecker.cpp
+++ b/clang/lib/Checker/UnreachableCodeChecker.cpp
@@ -33,8 +33,9 @@ namespace {
class UnreachableCodeChecker : public CheckerVisitor<UnreachableCodeChecker> {
public:
static void *getTag();
- void VisitEndAnalysis(ExplodedGraph &G, BugReporter &B,
- bool hasWorkRemaining);
+ void VisitEndAnalysis(ExplodedGraph &G,
+ BugReporter &B,
+ GRExprEngine &Eng);
private:
typedef bool (*ExplodedNodeHeuristic)(const ExplodedNode &EN);
@@ -60,9 +61,9 @@ void clang::RegisterUnreachableCodeChecker(GRExprEngine &Eng) {
void UnreachableCodeChecker::VisitEndAnalysis(ExplodedGraph &G,
BugReporter &B,
- bool hasWorkRemaining) {
+ GRExprEngine &Eng) {
// Bail out if we didn't cover all paths
- if (hasWorkRemaining)
+ if (Eng.hasWorkRemaining())
return;
CFG *C = 0;
OpenPOWER on IntegriCloud