diff options
author | Ted Kremenek <kremenek@apple.com> | 2011-07-19 14:18:43 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2011-07-19 14:18:43 +0000 |
commit | 8b46c00b5f63db5708d5d777e0697c4aa9c7c6cc (patch) | |
tree | f3e8b706310fcd34fe96ae8eeb5924964d9b7de2 /clang/lib/Analysis/CFG.cpp | |
parent | bf904773bb917c7fee56ad103b611d50d3ef3bd9 (diff) | |
download | bcm5719-llvm-8b46c00b5f63db5708d5d777e0697c4aa9c7c6cc.tar.gz bcm5719-llvm-8b46c00b5f63db5708d5d777e0697c4aa9c7c6cc.zip |
Add hooks into the CFG builder to force that specific expressions are always CFGElements.
llvm-svn: 135479
Diffstat (limited to 'clang/lib/Analysis/CFG.cpp')
-rw-r--r-- | clang/lib/Analysis/CFG.cpp | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/clang/lib/Analysis/CFG.cpp b/clang/lib/Analysis/CFG.cpp index f231c147f11..2a13450b4dc 100644 --- a/clang/lib/Analysis/CFG.cpp +++ b/clang/lib/Analysis/CFG.cpp @@ -394,7 +394,7 @@ private: // Interface to CFGBlock - adding CFGElements. void appendStmt(CFGBlock *B, const Stmt *S) { - if (alwaysAdd(S)) + if (alwaysAdd(S) && cachedEntry) cachedEntry->second = B; // All block-level expressions should have already been IgnoreParens()ed. @@ -461,15 +461,17 @@ inline bool AddStmtChoice::alwaysAdd(CFGBuilder &builder, } bool CFGBuilder::alwaysAdd(const Stmt *stmt) { + bool shouldAdd = BuildOpts.alwaysAdd(stmt); + if (!BuildOpts.forcedBlkExprs) - return false; + return shouldAdd; if (lastLookup == stmt) { if (cachedEntry) { assert(cachedEntry->first == stmt); return true; } - return false; + return shouldAdd; } lastLookup = stmt; @@ -480,13 +482,13 @@ bool CFGBuilder::alwaysAdd(const Stmt *stmt) { if (!fb) { // No need to update 'cachedEntry', since it will always be null. assert(cachedEntry == 0); - return false; + return shouldAdd; } CFG::BuildOptions::ForcedBlkExprs::iterator itr = fb->find(stmt); if (itr == fb->end()) { cachedEntry = 0; - return false; + return shouldAdd; } cachedEntry = &*itr; |