diff options
| author | Tom Care <tcare@apple.com> | 2010-08-03 01:55:07 +0000 |
|---|---|---|
| committer | Tom Care <tcare@apple.com> | 2010-08-03 01:55:07 +0000 |
| commit | 44081fbc6c2dc137d7a8c5669d5f086c2bb562e3 (patch) | |
| tree | 3b5edbf145603147bf5d8a5e99dfdcaad499049b /clang/lib/Checker | |
| parent | 7492a11f0c9c267f06f0592e9302ed9a074695ba (diff) | |
| download | bcm5719-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.cpp | 2 | ||||
| -rw-r--r-- | clang/lib/Checker/IdempotentOperationChecker.cpp | 7 | ||||
| -rw-r--r-- | clang/lib/Checker/UnreachableCodeChecker.cpp | 9 |
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; |

