diff options
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/Checker/Environment.cpp | 8 | ||||
| -rw-r--r-- | clang/lib/Checker/GRCoreEngine.cpp | 1 | ||||
| -rw-r--r-- | clang/lib/Checker/GRExprEngine.cpp | 8 | ||||
| -rw-r--r-- | clang/lib/Checker/GRState.cpp | 20 | ||||
| -rw-r--r-- | clang/lib/Checker/SymbolManager.cpp | 10 | 
5 files changed, 21 insertions, 26 deletions
diff --git a/clang/lib/Checker/Environment.cpp b/clang/lib/Checker/Environment.cpp index c2c9190fc9f..671cf89119f 100644 --- a/clang/lib/Checker/Environment.cpp +++ b/clang/lib/Checker/Environment.cpp @@ -78,12 +78,12 @@ Environment EnvironmentManager::BindExpr(Environment Env, const Stmt *S,    if (V.isUnknown()) {      if (Invalidate) -      return Environment(F.Remove(Env.ExprBindings, S), Env.ACtx); +      return Environment(F.Remove(Env.ExprBindings, S));      else        return Env;    } -  return Environment(F.Add(Env.ExprBindings, S, V), Env.ACtx); +  return Environment(F.Add(Env.ExprBindings, S, V));  }  namespace { @@ -109,12 +109,12 @@ EnvironmentManager::RemoveDeadBindings(Environment Env, const Stmt *S,                                         const GRState *ST,                                llvm::SmallVectorImpl<const MemRegion*> &DRoots) { -  CFG &C = *Env.getAnalysisContext().getCFG(); +  CFG &C = *SymReaper.getLocationContext()->getCFG();    // We construct a new Environment object entirely, as this is cheaper than    // individually removing all the subexpression bindings (which will greatly    // outnumber block-level expression bindings). -  Environment NewEnv = getInitialEnvironment(&Env.getAnalysisContext()); +  Environment NewEnv = getInitialEnvironment();    // Iterate over the block-expr bindings.    for (Environment::iterator I = Env.begin(), E = Env.end(); diff --git a/clang/lib/Checker/GRCoreEngine.cpp b/clang/lib/Checker/GRCoreEngine.cpp index 63ac31d6064..a9347d01641 100644 --- a/clang/lib/Checker/GRCoreEngine.cpp +++ b/clang/lib/Checker/GRCoreEngine.cpp @@ -682,7 +682,6 @@ void GRCallExitNodeBuilder::GenerateNode(const GRState *state) {    // Get the callee's location context.    const StackFrameContext *LocCtx                            = cast<StackFrameContext>(Pred->getLocationContext()); -  state = state->setAnalysisContext(LocCtx->getParent()->getAnalysisContext());    PostStmt Loc(LocCtx->getCallSite(), LocCtx->getParent());    bool isNew; diff --git a/clang/lib/Checker/GRExprEngine.cpp b/clang/lib/Checker/GRExprEngine.cpp index d25526e1ede..2ea689e56a8 100644 --- a/clang/lib/Checker/GRExprEngine.cpp +++ b/clang/lib/Checker/GRExprEngine.cpp @@ -477,8 +477,9 @@ void GRExprEngine::ProcessStmt(CFGElement CE, GRStmtNodeBuilder& builder) {    // Create the cleaned state.    const ExplodedNode *BasePred = Builder->getBasePredecessor(); -  SymbolReaper SymReaper(BasePred->getLiveVariables(), SymMgr, -                        BasePred->getLocationContext()->getCurrentStackFrame()); + +  SymbolReaper SymReaper(BasePred->getLocationContext(), SymMgr); +    CleanedState = AMgr.shouldPurgeDead()      ? StateMgr.RemoveDeadBindings(EntryNode->getState(), CurrentStmt, SymReaper)      : EntryNode->getState(); @@ -1309,7 +1310,6 @@ void GRExprEngine::ProcessCallEnter(GRCallEnterNodeBuilder &B) {    const GRState *state = B.getState();    state = getStoreManager().EnterStackFrame(state, LocCtx); -  state = state->setAnalysisContext(LocCtx->getAnalysisContext());    B.GenerateNode(state, LocCtx);  } @@ -3320,7 +3320,7 @@ struct DOTGraphTraits<ExplodedNode*> :      Out << "\\|StateID: " << (void*) N->getState() << "\\|";      const GRState *state = N->getState(); -    state->printDOT(Out); +    state->printDOT(Out, *N->getLocationContext()->getCFG());      Out << "\\l";      return Out.str(); diff --git a/clang/lib/Checker/GRState.cpp b/clang/lib/Checker/GRState.cpp index ce7d6e2a838..97ede1d480f 100644 --- a/clang/lib/Checker/GRState.cpp +++ b/clang/lib/Checker/GRState.cpp @@ -23,12 +23,6 @@ using namespace clang;  // FIXME: Move this elsewhere.  ConstraintManager::~ConstraintManager() {} -const GRState *GRState::setAnalysisContext(AnalysisContext *ctx) const { -  GRState NewState = *this; -  NewState.Env.setAnalysisContext(ctx); -  return StateMgr->getPersistentState(NewState); -} -  GRStateManager::~GRStateManager() {    for (std::vector<GRState::Printer*>::iterator I=Printers.begin(),          E=Printers.end(); I!=E; ++I) @@ -105,7 +99,7 @@ const GRState *GRState::BindExpr(const Stmt* Ex, SVal V, bool Invalidate) const{  const GRState* GRStateManager::getInitialState(const LocationContext *InitLoc) {    GRState State(this, -                EnvMgr.getInitialEnvironment(InitLoc->getAnalysisContext()), +                EnvMgr.getInitialEnvironment(),                  StoreMgr->getInitialStore(InitLoc),                  GDMFactory.GetEmptyMap()); @@ -137,14 +131,12 @@ const GRState* GRState::makeWithStore(Store store) const {  //  State pretty-printing.  //===----------------------------------------------------------------------===// -void GRState::print(llvm::raw_ostream& Out, const char* nl, +void GRState::print(llvm::raw_ostream& Out, CFG &C, const char* nl,                      const char* sep) const {    // Print the store.    GRStateManager &Mgr = getStateManager();    Mgr.getStoreManager().print(getStore(), Out, nl, sep); -  CFG &C = *getAnalysisContext().getCFG(); -    // Print Subexpression bindings.    bool isFirst = true; @@ -192,12 +184,12 @@ void GRState::print(llvm::raw_ostream& Out, const char* nl,    }  } -void GRState::printDOT(llvm::raw_ostream& Out) const { -  print(Out, "\\l", "\\|"); +void GRState::printDOT(llvm::raw_ostream& Out, CFG &C) const { +  print(Out, C, "\\l", "\\|");  } -void GRState::printStdErr() const { -  print(llvm::errs()); +void GRState::printStdErr(CFG &C) const { +  print(llvm::errs(), C);  }  //===----------------------------------------------------------------------===// diff --git a/clang/lib/Checker/SymbolManager.cpp b/clang/lib/Checker/SymbolManager.cpp index f2d630cdf64..65a46e31fef 100644 --- a/clang/lib/Checker/SymbolManager.cpp +++ b/clang/lib/Checker/SymbolManager.cpp @@ -215,13 +215,17 @@ bool SymbolReaper::isLive(SymbolRef sym) {    return isa<SymbolRegionValue>(sym);  } +bool SymbolReaper::isLive(const Stmt* Loc, const Stmt* ExprVal) const { +  return LCtx->getLiveVariables()->isLive(Loc, ExprVal); +} +  bool SymbolReaper::isLive(const Stmt *Loc, const VarRegion *VR) const {    const StackFrameContext *SFC = VR->getStackFrame(); -  if (SFC == CurrentStackFrame) -    return Liveness.isLive(Loc, VR->getDecl()); +  if (SFC == LCtx->getCurrentStackFrame()) +    return LCtx->getLiveVariables()->isLive(Loc, VR->getDecl());    else -    return SFC->isParentOf(CurrentStackFrame); +    return SFC->isParentOf(LCtx->getCurrentStackFrame());  }  SymbolVisitor::~SymbolVisitor() {}  | 

