diff options
| author | Ted Kremenek <kremenek@apple.com> | 2014-03-08 02:22:29 +0000 |
|---|---|---|
| committer | Ted Kremenek <kremenek@apple.com> | 2014-03-08 02:22:29 +0000 |
| commit | fcc1417fad167a945596e41cf5f3cdc8c96ee686 (patch) | |
| tree | a355688566515ae074909841be0dec75b6e55e43 /clang/lib/Analysis/CFG.cpp | |
| parent | ff909f907cef898e9ba8c137420748968ce6bad0 (diff) | |
| download | bcm5719-llvm-fcc1417fad167a945596e41cf5f3cdc8c96ee686.tar.gz bcm5719-llvm-fcc1417fad167a945596e41cf5f3cdc8c96ee686.zip | |
Fix CFG bug where the 'isTemporaryDtorsBranch' bit was silently lost for terminators.
llvm-svn: 203335
Diffstat (limited to 'clang/lib/Analysis/CFG.cpp')
| -rw-r--r-- | clang/lib/Analysis/CFG.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/clang/lib/Analysis/CFG.cpp b/clang/lib/Analysis/CFG.cpp index a2fa6216a0e..d9be7433651 100644 --- a/clang/lib/Analysis/CFG.cpp +++ b/clang/lib/Analysis/CFG.cpp @@ -3405,6 +3405,7 @@ CFGBlock *CFGBuilder::VisitConditionalOperatorForTemporaryDtors( Block = createBlock(false); Block->setTerminator(CFGTerminator(E, true)); + assert(Block->getTerminator().isTemporaryDtorsBranch()); // See if this is a known constant. const TryResult &KnownVal = tryEvaluateBool(E->getCond()); @@ -3766,6 +3767,13 @@ public: void VisitExpr(Expr *E) { E->printPretty(OS, Helper, Policy); } + +public: + void print(CFGTerminator T) { + if (T.isTemporaryDtorsBranch()) + OS << "(Temp Dtor) "; + Visit(T.getStmt()); + } }; } // end anonymous namespace @@ -3969,7 +3977,7 @@ static void print_block(raw_ostream &OS, const CFG* cfg, PrintingPolicy PP(Helper.getLangOpts()); CFGBlockTerminatorPrint TPrinter(OS, &Helper, PP); - TPrinter.Visit(const_cast<Stmt*>(B.getTerminator().getStmt())); + TPrinter.print(B.getTerminator()); OS << '\n'; if (ShowColors) @@ -4107,7 +4115,7 @@ void CFGBlock::print(raw_ostream &OS, const CFG* cfg, void CFGBlock::printTerminator(raw_ostream &OS, const LangOptions &LO) const { CFGBlockTerminatorPrint TPrinter(OS, NULL, PrintingPolicy(LO)); - TPrinter.Visit(const_cast<Stmt*>(getTerminator().getStmt())); + TPrinter.print(getTerminator()); } Stmt *CFGBlock::getTerminatorCondition() { |

