diff options
author | Jordy Rose <jediknil@belkadan.com> | 2010-08-14 20:18:45 +0000 |
---|---|---|
committer | Jordy Rose <jediknil@belkadan.com> | 2010-08-14 20:18:45 +0000 |
commit | bd533aa4ff8895c676d4634d0d3de254962569d0 (patch) | |
tree | 0c70891592a31a1e20e22344050ccd455d9ef1ca /lib/Checker/GRExprEngine.cpp | |
parent | 838d796d020f6a8cd2b2d1e2a0a85c83bbf29543 (diff) |
Add a new metadata symbol type for checkers to use. Metadata symbols must be associated with a region and will be collected if the region dies or its checker fails to mark it as in use.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@111076 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Checker/GRExprEngine.cpp')
-rw-r--r-- | lib/Checker/GRExprEngine.cpp | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/lib/Checker/GRExprEngine.cpp b/lib/Checker/GRExprEngine.cpp index 98d2bf1b08..fe19c05779 100644 --- a/lib/Checker/GRExprEngine.cpp +++ b/lib/Checker/GRExprEngine.cpp @@ -578,15 +578,23 @@ void GRExprEngine::ProcessStmt(const CFGElement CE,GRStmtNodeBuilder& builder) { Builder->setAuditor(BatchAuditor.get()); // Create the cleaned state. - const ExplodedNode *BasePred = Builder->getBasePredecessor(); + const LocationContext *LC = EntryNode->getLocationContext(); + SymbolReaper SymReaper(LC, CurrentStmt, SymMgr); - SymbolReaper SymReaper(BasePred->getLocationContext(), CurrentStmt, SymMgr); + if (AMgr.shouldPurgeDead()) { + const GRState *St = EntryNode->getState(); - CleanedState = AMgr.shouldPurgeDead() - ? StateMgr.RemoveDeadBindings(EntryNode->getState(), - BasePred->getLocationContext()->getCurrentStackFrame(), - SymReaper) - : EntryNode->getState(); + for (CheckersOrdered::iterator I = Checkers.begin(), E = Checkers.end(); + I != E; ++I) { + Checker *checker = I->second; + checker->MarkLiveSymbols(St, SymReaper); + } + + const StackFrameContext *SFC = LC->getCurrentStackFrame(); + CleanedState = StateMgr.RemoveDeadBindings(St, SFC, SymReaper); + } else { + CleanedState = EntryNode->getState(); + } // Process any special transfer function for dead symbols. ExplodedNodeSet Tmp; |