From: Ted Kremenek Date: Sun, 9 Mar 2008 18:05:48 +0000 (+0000) Subject: Refactored guards for "GRExprEngine::RemoveDeadBindings" directly into the X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=daa497e3ae567ba6684226b86e6e1fe900112dab;p=clang Refactored guards for "GRExprEngine::RemoveDeadBindings" directly into the method. This paves the way for other alterations to RemoveDeadBindings that are transparent to its callers. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@48113 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/Analysis/GRExprEngine.cpp b/Analysis/GRExprEngine.cpp index de6e10cf3c..e8d0306e21 100644 --- a/Analysis/GRExprEngine.cpp +++ b/Analysis/GRExprEngine.cpp @@ -39,6 +39,17 @@ using llvm::dyn_cast; using llvm::cast; using llvm::APSInt; +ValueState* GRExprEngine::RemoveDeadBindings(ValueState* St) { + + if (StateCleaned || !CurrentStmt) + return St; + + StateCleaned = true; + + return StateMgr.RemoveDeadBindings(St, CurrentStmt, Liveness); +} + + ValueState* GRExprEngine::getInitialState() { // The LiveVariables information already has a compilation of all VarDecls @@ -65,10 +76,7 @@ ValueState* GRExprEngine::getInitialState() { ValueState* GRExprEngine::SetRVal(ValueState* St, Expr* Ex, RVal V) { - if (!StateCleaned) { - St = RemoveDeadBindings(CurrentStmt, St); - StateCleaned = true; - } + St = RemoveDeadBindings(St); bool isBlkExpr = false; @@ -83,22 +91,12 @@ ValueState* GRExprEngine::SetRVal(ValueState* St, Expr* Ex, RVal V) { } ValueState* GRExprEngine::SetRVal(ValueState* St, LVal LV, RVal RV) { - - if (!StateCleaned) { - St = RemoveDeadBindings(CurrentStmt, St); - StateCleaned = true; - } - + St = RemoveDeadBindings(St); return StateMgr.SetRVal(St, LV, RV); } ValueState* GRExprEngine::SetBlkExprRVal(ValueState* St, Expr* Ex, RVal V) { - - if (CurrentStmt && !StateCleaned) { - St = RemoveDeadBindings(CurrentStmt, St); - StateCleaned = true; - } - + St = RemoveDeadBindings(St); return StateMgr.SetRVal(St, Ex, V, true, false); } @@ -432,7 +430,7 @@ void GRExprEngine::ProcessStmt(Stmt* S, StmtNodeBuilder& builder) { if (Dst.size() == 1 && *Dst.begin() == StmtEntryNode) { ValueState* St = StateCleaned ? StmtEntryNode->getState() : - RemoveDeadBindings(S, StmtEntryNode->getState()); + RemoveDeadBindings(StmtEntryNode->getState()); builder.generateNode(S, St, StmtEntryNode); } diff --git a/include/clang/Analysis/PathSensitive/GRExprEngine.h b/include/clang/Analysis/PathSensitive/GRExprEngine.h index 37220ff5cd..7b1115bee8 100644 --- a/include/clang/Analysis/PathSensitive/GRExprEngine.h +++ b/include/clang/Analysis/PathSensitive/GRExprEngine.h @@ -263,11 +263,9 @@ protected: /// RemoveDeadBindings - Return a new state that is the same as 'St' except /// that all subexpression mappings are removed and that any - /// block-level expressions that are not live at 'S' also have their - /// mappings removed. - inline ValueState* RemoveDeadBindings(Stmt* S, ValueState* St) { - return StateMgr.RemoveDeadBindings(St, S, Liveness); - } + /// block-level expressions that are not live at 'CurrentStmt' also have + /// their mappings removed. + ValueState* RemoveDeadBindings(ValueState* St); ValueState* SetRVal(ValueState* St, Expr* Ex, RVal V);