diff options
author | Ted Kremenek <kremenek@apple.com> | 2008-04-18 20:35:30 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2008-04-18 20:35:30 +0000 |
commit | b0533965f1b4db020692e3b23ca7b3bc15bf5897 (patch) | |
tree | 673bf1e7434b784a8d4745634bfa8838960500b4 /lib/Analysis/GRExprEngine.cpp | |
parent | eaa9edac11531178b14e060a32d0ac8b805021d0 (diff) |
Fixed more caching bugs related to the one fixed in r49914. Silence
compiler warning introduced by a recent patch of mine.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@49917 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/GRExprEngine.cpp')
-rw-r--r-- | lib/Analysis/GRExprEngine.cpp | 37 |
1 files changed, 26 insertions, 11 deletions
diff --git a/lib/Analysis/GRExprEngine.cpp b/lib/Analysis/GRExprEngine.cpp index 2e474fc8e9..8c771bffa1 100644 --- a/lib/Analysis/GRExprEngine.cpp +++ b/lib/Analysis/GRExprEngine.cpp @@ -188,7 +188,7 @@ void GRExprEngine::ProcessStmt(Stmt* S, StmtNodeBuilder& builder) { // dead mappings removed. if (Dst.size() == 1 && *Dst.begin() == StmtEntryNode && - !Builder->hasGeneratedNode()) + !Builder->HasGeneratedNode) builder.generateNode(S, GetState(StmtEntryNode), StmtEntryNode); // NULL out these variables to cleanup. @@ -715,7 +715,11 @@ void GRExprEngine::EvalStore(NodeSet& Dst, Expr* E, NodeTy* Pred, assert (Builder && "GRStmtNodeBuilder must be defined."); unsigned size = Dst.size(); - SaveAndRestore<bool> OldSink(Builder->BuildSinks); + + SaveAndRestore<bool> OldSink(Builder->BuildSinks), + OldHasGen(Builder->HasGeneratedNode); + + Builder->HasGeneratedNode = false; assert (!TargetLV.isUndef()); @@ -724,7 +728,7 @@ void GRExprEngine::EvalStore(NodeSet& Dst, Expr* E, NodeTy* Pred, // Handle the case where no nodes where generated. Auto-generate that // contains the updated state if we aren't generating sinks. - if (!Builder->BuildSinks && Dst.size() == size) + if (!Builder->BuildSinks && Dst.size() == size && !Builder->HasGeneratedNode) TF->GRTransferFuncs::EvalStore(Dst, *this, *Builder, E, Pred, St, TargetLV, Val); } @@ -888,14 +892,18 @@ void GRExprEngine::VisitCall(CallExpr* CE, NodeTy* Pred, unsigned size = Dst.size(); - SaveAndRestore<bool> OldSink(Builder->BuildSinks); + SaveAndRestore<bool> OldSink(Builder->BuildSinks), + OldHasGen(Builder->HasGeneratedNode); + Builder->HasGeneratedNode = false; + EvalCall(Dst, CE, cast<LVal>(L), *DI); // Handle the case where no nodes where generated. Auto-generate that // contains the updated state if we aren't generating sinks. - if (!Builder->BuildSinks && Dst.size() == size) + if (!Builder->BuildSinks && Dst.size() == size && + !Builder->HasGeneratedNode) MakeNode(Dst, CE, *DI, St); } } @@ -991,14 +999,18 @@ void GRExprEngine::VisitObjCMessageExprDispatchHelper(ObjCMessageExpr* ME, // Dispatch to plug-in transfer function. unsigned size = Dst.size(); - SaveAndRestore<bool> OldSink(Builder->BuildSinks); + + SaveAndRestore<bool> OldSink(Builder->BuildSinks), + OldHasGen(Builder->HasGeneratedNode); + Builder->HasGeneratedNode = false; + EvalObjCMessageExpr(Dst, ME, Pred); // Handle the case where no nodes where generated. Auto-generate that // contains the updated state if we aren't generating sinks. - if (!Builder->BuildSinks && Dst.size() == size) + if (!Builder->BuildSinks && Dst.size() == size && !Builder->HasGeneratedNode) MakeNode(Dst, ME, Pred, St); } @@ -1461,14 +1473,17 @@ void GRExprEngine::EvalReturn(NodeSet& Dst, ReturnStmt* S, NodeTy* Pred) { assert (Builder && "GRStmtNodeBuilder must be defined."); unsigned size = Dst.size(); - SaveAndRestore<bool> OldSink(Builder->BuildSinks); + + SaveAndRestore<bool> OldSink(Builder->BuildSinks), + OldHasGen(Builder->HasGeneratedNode); + Builder->HasGeneratedNode = false; + TF->EvalReturn(Dst, *this, *Builder, S, Pred); - // Handle the case where no nodes where generated. Auto-generate that - // contains the updated state if we aren't generating sinks. + // Handle the case where no nodes where generated. - if (!Builder->BuildSinks && Dst.size() == size) + if (!Builder->BuildSinks && Dst.size() == size && !Builder->HasGeneratedNode) MakeNode(Dst, S, Pred, GetState(Pred)); } |