diff options
author | Anna Zaks <ganna@apple.com> | 2011-11-01 22:41:09 +0000 |
---|---|---|
committer | Anna Zaks <ganna@apple.com> | 2011-11-01 22:41:09 +0000 |
commit | bfb3520fc5bc97faaa0642bf0f97c40d923e10c6 (patch) | |
tree | 42e9731f8a1697f63e249efbf38f7c7c03a9fdeb /clang/lib/StaticAnalyzer/Core/ExprEngine.cpp | |
parent | 6d319489df0a0baa358cc42a9be9261af22101af (diff) | |
download | bcm5719-llvm-bfb3520fc5bc97faaa0642bf0f97c40d923e10c6.tar.gz bcm5719-llvm-bfb3520fc5bc97faaa0642bf0f97c40d923e10c6.zip |
[analyzer] Make sure the child builder use temporary destination sets
The parent and child builders should not share node sets.
llvm-svn: 143515
Diffstat (limited to 'clang/lib/StaticAnalyzer/Core/ExprEngine.cpp')
-rw-r--r-- | clang/lib/StaticAnalyzer/Core/ExprEngine.cpp | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp b/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp index 3924154f6f4..9973b7765c7 100644 --- a/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp +++ b/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp @@ -432,11 +432,12 @@ void ExprEngine::ProcessTemporaryDtor(const CFGTemporaryDtor D, ExplodedNodeSet &Dst) {} void ExprEngine::Visit(const Stmt *S, ExplodedNode *Pred, - ExplodedNodeSet &Dst) { + ExplodedNodeSet &DstTop) { PrettyStackTraceLoc CrashInfo(getContext().getSourceManager(), S->getLocStart(), "Error evaluating statement"); - StmtNodeBuilder Bldr(Pred, Dst, *currentBuilderContext); + ExplodedNodeSet Dst; + StmtNodeBuilder Bldr(Pred, DstTop, *currentBuilderContext); // Expressions to ignore. if (const Expr *Ex = dyn_cast<Expr>(S)) @@ -1283,9 +1284,10 @@ void ExprEngine::VisitLvalArraySubscriptExpr(const ArraySubscriptExpr *A, /// VisitMemberExpr - Transfer function for member expressions. void ExprEngine::VisitMemberExpr(const MemberExpr *M, ExplodedNode *Pred, - ExplodedNodeSet &Dst) { + ExplodedNodeSet &TopDst) { - StmtNodeBuilder Bldr(Pred, Dst, *currentBuilderContext); + StmtNodeBuilder Bldr(Pred, TopDst, *currentBuilderContext); + ExplodedNodeSet Dst; Decl *member = M->getMemberDecl(); if (VarDecl *VD = dyn_cast<VarDecl>(member)) { assert(M->isLValue()); |