Refactored guards for "GRExprEngine::RemoveDeadBindings" directly into the

method. This paves the way for other alterations to RemoveDeadBindings that are
transparent to its callers.

llvm-svn: 48113
This commit is contained in:
Ted Kremenek 2008-03-09 18:05:48 +00:00
parent 0ac65c3b99
commit 2d063bef8b
2 changed files with 18 additions and 22 deletions

View File

@ -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);
}

View File

@ -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);