1 //===--- CFG.cpp - Classes for representing and building CFGs----*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 //  This file defines the CFG and CFGBuilder classes for representing and
11 //  building Control-Flow Graphs (CFGs) from ASTs.
12 //
13 //===----------------------------------------------------------------------===//
14 
15 #include "clang/Analysis/Support/SaveAndRestore.h"
16 #include "clang/Analysis/CFG.h"
17 #include "clang/AST/DeclCXX.h"
18 #include "clang/AST/StmtVisitor.h"
19 #include "clang/AST/PrettyPrinter.h"
20 #include "clang/AST/CharUnits.h"
21 #include "llvm/Support/GraphWriter.h"
22 #include "llvm/Support/Allocator.h"
23 #include "llvm/Support/Format.h"
24 #include "llvm/ADT/DenseMap.h"
25 #include "llvm/ADT/SmallPtrSet.h"
26 #include "llvm/ADT/OwningPtr.h"
27 
28 using namespace clang;
29 
30 namespace {
31 
32 static SourceLocation GetEndLoc(Decl *D) {
33   if (VarDecl *VD = dyn_cast<VarDecl>(D))
34     if (Expr *Ex = VD->getInit())
35       return Ex->getSourceRange().getEnd();
36   return D->getLocation();
37 }
38 
39 class CFGBuilder;
40 
41 /// The CFG builder uses a recursive algorithm to build the CFG.  When
42 ///  we process an expression, sometimes we know that we must add the
43 ///  subexpressions as block-level expressions.  For example:
44 ///
45 ///    exp1 || exp2
46 ///
47 ///  When processing the '||' expression, we know that exp1 and exp2
48 ///  need to be added as block-level expressions, even though they
49 ///  might not normally need to be.  AddStmtChoice records this
50 ///  contextual information.  If AddStmtChoice is 'NotAlwaysAdd', then
51 ///  the builder has an option not to add a subexpression as a
52 ///  block-level expression.
53 ///
54 class AddStmtChoice {
55 public:
56   enum Kind { NotAlwaysAdd = 0, AlwaysAdd = 1 };
57 
58   AddStmtChoice(Kind a_kind = NotAlwaysAdd) : kind(a_kind) {}
59 
60   bool alwaysAdd(CFGBuilder &builder,
61                  const Stmt *stmt) const;
62 
63   /// Return a copy of this object, except with the 'always-add' bit
64   ///  set as specified.
65   AddStmtChoice withAlwaysAdd(bool alwaysAdd) const {
66     return AddStmtChoice(alwaysAdd ? AlwaysAdd : NotAlwaysAdd);
67   }
68 
69 private:
70   Kind kind;
71 };
72 
73 /// LocalScope - Node in tree of local scopes created for C++ implicit
74 /// destructor calls generation. It contains list of automatic variables
75 /// declared in the scope and link to position in previous scope this scope
76 /// began in.
77 ///
78 /// The process of creating local scopes is as follows:
79 /// - Init CFGBuilder::ScopePos with invalid position (equivalent for null),
80 /// - Before processing statements in scope (e.g. CompoundStmt) create
81 ///   LocalScope object using CFGBuilder::ScopePos as link to previous scope
82 ///   and set CFGBuilder::ScopePos to the end of new scope,
83 /// - On every occurrence of VarDecl increase CFGBuilder::ScopePos if it points
84 ///   at this VarDecl,
85 /// - For every normal (without jump) end of scope add to CFGBlock destructors
86 ///   for objects in the current scope,
87 /// - For every jump add to CFGBlock destructors for objects
88 ///   between CFGBuilder::ScopePos and local scope position saved for jump
89 ///   target. Thanks to C++ restrictions on goto jumps we can be sure that
90 ///   jump target position will be on the path to root from CFGBuilder::ScopePos
91 ///   (adding any variable that doesn't need constructor to be called to
92 ///   LocalScope can break this assumption),
93 ///
94 class LocalScope {
95 public:
96   typedef BumpVector<VarDecl*> AutomaticVarsTy;
97 
98   /// const_iterator - Iterates local scope backwards and jumps to previous
99   /// scope on reaching the beginning of currently iterated scope.
100   class const_iterator {
101     const LocalScope* Scope;
102 
103     /// VarIter is guaranteed to be greater then 0 for every valid iterator.
104     /// Invalid iterator (with null Scope) has VarIter equal to 0.
105     unsigned VarIter;
106 
107   public:
108     /// Create invalid iterator. Dereferencing invalid iterator is not allowed.
109     /// Incrementing invalid iterator is allowed and will result in invalid
110     /// iterator.
111     const_iterator()
112         : Scope(NULL), VarIter(0) {}
113 
114     /// Create valid iterator. In case when S.Prev is an invalid iterator and
115     /// I is equal to 0, this will create invalid iterator.
116     const_iterator(const LocalScope& S, unsigned I)
117         : Scope(&S), VarIter(I) {
118       // Iterator to "end" of scope is not allowed. Handle it by going up
119       // in scopes tree possibly up to invalid iterator in the root.
120       if (VarIter == 0 && Scope)
121         *this = Scope->Prev;
122     }
123 
124     VarDecl *const* operator->() const {
125       assert (Scope && "Dereferencing invalid iterator is not allowed");
126       assert (VarIter != 0 && "Iterator has invalid value of VarIter member");
127       return &Scope->Vars[VarIter - 1];
128     }
129     VarDecl *operator*() const {
130       return *this->operator->();
131     }
132 
133     const_iterator &operator++() {
134       if (!Scope)
135         return *this;
136 
137       assert (VarIter != 0 && "Iterator has invalid value of VarIter member");
138       --VarIter;
139       if (VarIter == 0)
140         *this = Scope->Prev;
141       return *this;
142     }
143     const_iterator operator++(int) {
144       const_iterator P = *this;
145       ++*this;
146       return P;
147     }
148 
149     bool operator==(const const_iterator &rhs) const {
150       return Scope == rhs.Scope && VarIter == rhs.VarIter;
151     }
152     bool operator!=(const const_iterator &rhs) const {
153       return !(*this == rhs);
154     }
155 
156     operator bool() const {
157       return *this != const_iterator();
158     }
159 
160     int distance(const_iterator L);
161   };
162 
163   friend class const_iterator;
164 
165 private:
166   BumpVectorContext ctx;
167 
168   /// Automatic variables in order of declaration.
169   AutomaticVarsTy Vars;
170   /// Iterator to variable in previous scope that was declared just before
171   /// begin of this scope.
172   const_iterator Prev;
173 
174 public:
175   /// Constructs empty scope linked to previous scope in specified place.
176   LocalScope(BumpVectorContext &ctx, const_iterator P)
177       : ctx(ctx), Vars(ctx, 4), Prev(P) {}
178 
179   /// Begin of scope in direction of CFG building (backwards).
180   const_iterator begin() const { return const_iterator(*this, Vars.size()); }
181 
182   void addVar(VarDecl *VD) {
183     Vars.push_back(VD, ctx);
184   }
185 };
186 
187 /// distance - Calculates distance from this to L. L must be reachable from this
188 /// (with use of ++ operator). Cost of calculating the distance is linear w.r.t.
189 /// number of scopes between this and L.
190 int LocalScope::const_iterator::distance(LocalScope::const_iterator L) {
191   int D = 0;
192   const_iterator F = *this;
193   while (F.Scope != L.Scope) {
194     assert (F != const_iterator()
195         && "L iterator is not reachable from F iterator.");
196     D += F.VarIter;
197     F = F.Scope->Prev;
198   }
199   D += F.VarIter - L.VarIter;
200   return D;
201 }
202 
203 /// BlockScopePosPair - Structure for specifying position in CFG during its
204 /// build process. It consists of CFGBlock that specifies position in CFG graph
205 /// and  LocalScope::const_iterator that specifies position in LocalScope graph.
206 struct BlockScopePosPair {
207   BlockScopePosPair() : block(0) {}
208   BlockScopePosPair(CFGBlock *b, LocalScope::const_iterator scopePos)
209       : block(b), scopePosition(scopePos) {}
210 
211   CFGBlock *block;
212   LocalScope::const_iterator scopePosition;
213 };
214 
215 /// TryResult - a class representing a variant over the values
216 ///  'true', 'false', or 'unknown'.  This is returned by tryEvaluateBool,
217 ///  and is used by the CFGBuilder to decide if a branch condition
218 ///  can be decided up front during CFG construction.
219 class TryResult {
220   int X;
221 public:
222   TryResult(bool b) : X(b ? 1 : 0) {}
223   TryResult() : X(-1) {}
224 
225   bool isTrue() const { return X == 1; }
226   bool isFalse() const { return X == 0; }
227   bool isKnown() const { return X >= 0; }
228   void negate() {
229     assert(isKnown());
230     X ^= 0x1;
231   }
232 };
233 
234 /// CFGBuilder - This class implements CFG construction from an AST.
235 ///   The builder is stateful: an instance of the builder should be used to only
236 ///   construct a single CFG.
237 ///
238 ///   Example usage:
239 ///
240 ///     CFGBuilder builder;
241 ///     CFG* cfg = builder.BuildAST(stmt1);
242 ///
243 ///  CFG construction is done via a recursive walk of an AST.  We actually parse
244 ///  the AST in reverse order so that the successor of a basic block is
245 ///  constructed prior to its predecessor.  This allows us to nicely capture
246 ///  implicit fall-throughs without extra basic blocks.
247 ///
248 class CFGBuilder {
249   typedef BlockScopePosPair JumpTarget;
250   typedef BlockScopePosPair JumpSource;
251 
252   ASTContext *Context;
253   llvm::OwningPtr<CFG> cfg;
254 
255   CFGBlock *Block;
256   CFGBlock *Succ;
257   JumpTarget ContinueJumpTarget;
258   JumpTarget BreakJumpTarget;
259   CFGBlock *SwitchTerminatedBlock;
260   CFGBlock *DefaultCaseBlock;
261   CFGBlock *TryTerminatedBlock;
262 
263   // Current position in local scope.
264   LocalScope::const_iterator ScopePos;
265 
266   // LabelMap records the mapping from Label expressions to their jump targets.
267   typedef llvm::DenseMap<LabelDecl*, JumpTarget> LabelMapTy;
268   LabelMapTy LabelMap;
269 
270   // A list of blocks that end with a "goto" that must be backpatched to their
271   // resolved targets upon completion of CFG construction.
272   typedef std::vector<JumpSource> BackpatchBlocksTy;
273   BackpatchBlocksTy BackpatchBlocks;
274 
275   // A list of labels whose address has been taken (for indirect gotos).
276   typedef llvm::SmallPtrSet<LabelDecl*, 5> LabelSetTy;
277   LabelSetTy AddressTakenLabels;
278 
279   bool badCFG;
280   const CFG::BuildOptions &BuildOpts;
281 
282   // State to track for building switch statements.
283   bool switchExclusivelyCovered;
284   Expr::EvalResult *switchCond;
285 
286   CFG::BuildOptions::ForcedBlkExprs::value_type *cachedEntry;
287   const Stmt *lastLookup;
288 
289 public:
290   explicit CFGBuilder(ASTContext *astContext,
291                       const CFG::BuildOptions &buildOpts)
292     : Context(astContext), cfg(new CFG()), // crew a new CFG
293       Block(NULL), Succ(NULL),
294       SwitchTerminatedBlock(NULL), DefaultCaseBlock(NULL),
295       TryTerminatedBlock(NULL), badCFG(false), BuildOpts(buildOpts),
296       switchExclusivelyCovered(false), switchCond(0),
297       cachedEntry(0), lastLookup(0) {}
298 
299   // buildCFG - Used by external clients to construct the CFG.
300   CFG* buildCFG(const Decl *D, Stmt *Statement);
301 
302   bool alwaysAdd(const Stmt *stmt);
303 
304 private:
305   // Visitors to walk an AST and construct the CFG.
306   CFGBlock *VisitAddrLabelExpr(AddrLabelExpr *A, AddStmtChoice asc);
307   CFGBlock *VisitBinaryOperator(BinaryOperator *B, AddStmtChoice asc);
308   CFGBlock *VisitBlockExpr(BlockExpr *E, AddStmtChoice asc);
309   CFGBlock *VisitBreakStmt(BreakStmt *B);
310   CFGBlock *VisitCXXCatchStmt(CXXCatchStmt *S);
311   CFGBlock *VisitExprWithCleanups(ExprWithCleanups *E,
312       AddStmtChoice asc);
313   CFGBlock *VisitCXXThrowExpr(CXXThrowExpr *T);
314   CFGBlock *VisitCXXTryStmt(CXXTryStmt *S);
315   CFGBlock *VisitCXXForRangeStmt(CXXForRangeStmt *S);
316   CFGBlock *VisitCXXBindTemporaryExpr(CXXBindTemporaryExpr *E,
317                                       AddStmtChoice asc);
318   CFGBlock *VisitCXXConstructExpr(CXXConstructExpr *C, AddStmtChoice asc);
319   CFGBlock *VisitCXXFunctionalCastExpr(CXXFunctionalCastExpr *E,
320                                        AddStmtChoice asc);
321   CFGBlock *VisitCXXTemporaryObjectExpr(CXXTemporaryObjectExpr *C,
322                                         AddStmtChoice asc);
323   CFGBlock *VisitCallExpr(CallExpr *C, AddStmtChoice asc);
324   CFGBlock *VisitCaseStmt(CaseStmt *C);
325   CFGBlock *VisitChooseExpr(ChooseExpr *C, AddStmtChoice asc);
326   CFGBlock *VisitCompoundStmt(CompoundStmt *C);
327   CFGBlock *VisitConditionalOperator(AbstractConditionalOperator *C,
328                                      AddStmtChoice asc);
329   CFGBlock *VisitContinueStmt(ContinueStmt *C);
330   CFGBlock *VisitDeclStmt(DeclStmt *DS);
331   CFGBlock *VisitDeclSubExpr(DeclStmt *DS);
332   CFGBlock *VisitDefaultStmt(DefaultStmt *D);
333   CFGBlock *VisitDoStmt(DoStmt *D);
334   CFGBlock *VisitForStmt(ForStmt *F);
335   CFGBlock *VisitGotoStmt(GotoStmt *G);
336   CFGBlock *VisitIfStmt(IfStmt *I);
337   CFGBlock *VisitImplicitCastExpr(ImplicitCastExpr *E, AddStmtChoice asc);
338   CFGBlock *VisitIndirectGotoStmt(IndirectGotoStmt *I);
339   CFGBlock *VisitLabelStmt(LabelStmt *L);
340   CFGBlock *VisitMemberExpr(MemberExpr *M, AddStmtChoice asc);
341   CFGBlock *VisitObjCAtCatchStmt(ObjCAtCatchStmt *S);
342   CFGBlock *VisitObjCAtSynchronizedStmt(ObjCAtSynchronizedStmt *S);
343   CFGBlock *VisitObjCAtThrowStmt(ObjCAtThrowStmt *S);
344   CFGBlock *VisitObjCAtTryStmt(ObjCAtTryStmt *S);
345   CFGBlock *VisitObjCForCollectionStmt(ObjCForCollectionStmt *S);
346   CFGBlock *VisitReturnStmt(ReturnStmt *R);
347   CFGBlock *VisitPseudoObjectExpr(PseudoObjectExpr *E);
348   CFGBlock *VisitUnaryExprOrTypeTraitExpr(UnaryExprOrTypeTraitExpr *E,
349                                           AddStmtChoice asc);
350   CFGBlock *VisitStmtExpr(StmtExpr *S, AddStmtChoice asc);
351   CFGBlock *VisitSwitchStmt(SwitchStmt *S);
352   CFGBlock *VisitUnaryOperator(UnaryOperator *U, AddStmtChoice asc);
353   CFGBlock *VisitWhileStmt(WhileStmt *W);
354 
355   CFGBlock *Visit(Stmt *S, AddStmtChoice asc = AddStmtChoice::NotAlwaysAdd);
356   CFGBlock *VisitStmt(Stmt *S, AddStmtChoice asc);
357   CFGBlock *VisitChildren(Stmt *S);
358 
359   // Visitors to walk an AST and generate destructors of temporaries in
360   // full expression.
361   CFGBlock *VisitForTemporaryDtors(Stmt *E, bool BindToTemporary = false);
362   CFGBlock *VisitChildrenForTemporaryDtors(Stmt *E);
363   CFGBlock *VisitBinaryOperatorForTemporaryDtors(BinaryOperator *E);
364   CFGBlock *VisitCXXBindTemporaryExprForTemporaryDtors(CXXBindTemporaryExpr *E,
365       bool BindToTemporary);
366   CFGBlock *
367   VisitConditionalOperatorForTemporaryDtors(AbstractConditionalOperator *E,
368                                             bool BindToTemporary);
369 
370   // NYS == Not Yet Supported
371   CFGBlock *NYS() {
372     badCFG = true;
373     return Block;
374   }
375 
376   void autoCreateBlock() { if (!Block) Block = createBlock(); }
377   CFGBlock *createBlock(bool add_successor = true);
378   CFGBlock *createNoReturnBlock();
379 
380   CFGBlock *addStmt(Stmt *S) {
381     return Visit(S, AddStmtChoice::AlwaysAdd);
382   }
383   CFGBlock *addInitializer(CXXCtorInitializer *I);
384   void addAutomaticObjDtors(LocalScope::const_iterator B,
385                             LocalScope::const_iterator E, Stmt *S);
386   void addImplicitDtorsForDestructor(const CXXDestructorDecl *DD);
387 
388   // Local scopes creation.
389   LocalScope* createOrReuseLocalScope(LocalScope* Scope);
390 
391   void addLocalScopeForStmt(Stmt *S);
392   LocalScope* addLocalScopeForDeclStmt(DeclStmt *DS, LocalScope* Scope = NULL);
393   LocalScope* addLocalScopeForVarDecl(VarDecl *VD, LocalScope* Scope = NULL);
394 
395   void addLocalScopeAndDtors(Stmt *S);
396 
397   // Interface to CFGBlock - adding CFGElements.
398   void appendStmt(CFGBlock *B, const Stmt *S) {
399     if (alwaysAdd(S) && cachedEntry)
400       cachedEntry->second = B;
401 
402     // All block-level expressions should have already been IgnoreParens()ed.
403     assert(!isa<Expr>(S) || cast<Expr>(S)->IgnoreParens() == S);
404     B->appendStmt(const_cast<Stmt*>(S), cfg->getBumpVectorContext());
405   }
406   void appendInitializer(CFGBlock *B, CXXCtorInitializer *I) {
407     B->appendInitializer(I, cfg->getBumpVectorContext());
408   }
409   void appendBaseDtor(CFGBlock *B, const CXXBaseSpecifier *BS) {
410     B->appendBaseDtor(BS, cfg->getBumpVectorContext());
411   }
412   void appendMemberDtor(CFGBlock *B, FieldDecl *FD) {
413     B->appendMemberDtor(FD, cfg->getBumpVectorContext());
414   }
415   void appendTemporaryDtor(CFGBlock *B, CXXBindTemporaryExpr *E) {
416     B->appendTemporaryDtor(E, cfg->getBumpVectorContext());
417   }
418   void appendAutomaticObjDtor(CFGBlock *B, VarDecl *VD, Stmt *S) {
419     B->appendAutomaticObjDtor(VD, S, cfg->getBumpVectorContext());
420   }
421 
422   void prependAutomaticObjDtorsWithTerminator(CFGBlock *Blk,
423       LocalScope::const_iterator B, LocalScope::const_iterator E);
424 
425   void addSuccessor(CFGBlock *B, CFGBlock *S) {
426     B->addSuccessor(S, cfg->getBumpVectorContext());
427   }
428 
429   /// Try and evaluate an expression to an integer constant.
430   bool tryEvaluate(Expr *S, Expr::EvalResult &outResult) {
431     if (!BuildOpts.PruneTriviallyFalseEdges)
432       return false;
433     return !S->isTypeDependent() &&
434            !S->isValueDependent() &&
435            S->EvaluateAsRValue(outResult, *Context);
436   }
437 
438   /// tryEvaluateBool - Try and evaluate the Stmt and return 0 or 1
439   /// if we can evaluate to a known value, otherwise return -1.
440   TryResult tryEvaluateBool(Expr *S) {
441     bool Result;
442     if (!BuildOpts.PruneTriviallyFalseEdges ||
443         S->isTypeDependent() || S->isValueDependent() ||
444         !S->EvaluateAsBooleanCondition(Result, *Context))
445       return TryResult();
446     return Result;
447   }
448 
449 };
450 
451 inline bool AddStmtChoice::alwaysAdd(CFGBuilder &builder,
452                                      const Stmt *stmt) const {
453   return builder.alwaysAdd(stmt) || kind == AlwaysAdd;
454 }
455 
456 bool CFGBuilder::alwaysAdd(const Stmt *stmt) {
457   bool shouldAdd = BuildOpts.alwaysAdd(stmt);
458 
459   if (!BuildOpts.forcedBlkExprs)
460     return shouldAdd;
461 
462   if (lastLookup == stmt) {
463     if (cachedEntry) {
464       assert(cachedEntry->first == stmt);
465       return true;
466     }
467     return shouldAdd;
468   }
469 
470   lastLookup = stmt;
471 
472   // Perform the lookup!
473   CFG::BuildOptions::ForcedBlkExprs *fb = *BuildOpts.forcedBlkExprs;
474 
475   if (!fb) {
476     // No need to update 'cachedEntry', since it will always be null.
477     assert(cachedEntry == 0);
478     return shouldAdd;
479   }
480 
481   CFG::BuildOptions::ForcedBlkExprs::iterator itr = fb->find(stmt);
482   if (itr == fb->end()) {
483     cachedEntry = 0;
484     return shouldAdd;
485   }
486 
487   cachedEntry = &*itr;
488   return true;
489 }
490 
491 // FIXME: Add support for dependent-sized array types in C++?
492 // Does it even make sense to build a CFG for an uninstantiated template?
493 static const VariableArrayType *FindVA(const Type *t) {
494   while (const ArrayType *vt = dyn_cast<ArrayType>(t)) {
495     if (const VariableArrayType *vat = dyn_cast<VariableArrayType>(vt))
496       if (vat->getSizeExpr())
497         return vat;
498 
499     t = vt->getElementType().getTypePtr();
500   }
501 
502   return 0;
503 }
504 
505 /// BuildCFG - Constructs a CFG from an AST (a Stmt*).  The AST can represent an
506 ///  arbitrary statement.  Examples include a single expression or a function
507 ///  body (compound statement).  The ownership of the returned CFG is
508 ///  transferred to the caller.  If CFG construction fails, this method returns
509 ///  NULL.
510 CFG* CFGBuilder::buildCFG(const Decl *D, Stmt *Statement) {
511   assert(cfg.get());
512   if (!Statement)
513     return NULL;
514 
515   // Create an empty block that will serve as the exit block for the CFG.  Since
516   // this is the first block added to the CFG, it will be implicitly registered
517   // as the exit block.
518   Succ = createBlock();
519   assert(Succ == &cfg->getExit());
520   Block = NULL;  // the EXIT block is empty.  Create all other blocks lazily.
521 
522   if (BuildOpts.AddImplicitDtors)
523     if (const CXXDestructorDecl *DD = dyn_cast_or_null<CXXDestructorDecl>(D))
524       addImplicitDtorsForDestructor(DD);
525 
526   // Visit the statements and create the CFG.
527   CFGBlock *B = addStmt(Statement);
528 
529   if (badCFG)
530     return NULL;
531 
532   // For C++ constructor add initializers to CFG.
533   if (const CXXConstructorDecl *CD = dyn_cast_or_null<CXXConstructorDecl>(D)) {
534     for (CXXConstructorDecl::init_const_reverse_iterator I = CD->init_rbegin(),
535         E = CD->init_rend(); I != E; ++I) {
536       B = addInitializer(*I);
537       if (badCFG)
538         return NULL;
539     }
540   }
541 
542   if (B)
543     Succ = B;
544 
545   // Backpatch the gotos whose label -> block mappings we didn't know when we
546   // encountered them.
547   for (BackpatchBlocksTy::iterator I = BackpatchBlocks.begin(),
548                                    E = BackpatchBlocks.end(); I != E; ++I ) {
549 
550     CFGBlock *B = I->block;
551     GotoStmt *G = cast<GotoStmt>(B->getTerminator());
552     LabelMapTy::iterator LI = LabelMap.find(G->getLabel());
553 
554     // If there is no target for the goto, then we are looking at an
555     // incomplete AST.  Handle this by not registering a successor.
556     if (LI == LabelMap.end()) continue;
557 
558     JumpTarget JT = LI->second;
559     prependAutomaticObjDtorsWithTerminator(B, I->scopePosition,
560                                            JT.scopePosition);
561     addSuccessor(B, JT.block);
562   }
563 
564   // Add successors to the Indirect Goto Dispatch block (if we have one).
565   if (CFGBlock *B = cfg->getIndirectGotoBlock())
566     for (LabelSetTy::iterator I = AddressTakenLabels.begin(),
567                               E = AddressTakenLabels.end(); I != E; ++I ) {
568 
569       // Lookup the target block.
570       LabelMapTy::iterator LI = LabelMap.find(*I);
571 
572       // If there is no target block that contains label, then we are looking
573       // at an incomplete AST.  Handle this by not registering a successor.
574       if (LI == LabelMap.end()) continue;
575 
576       addSuccessor(B, LI->second.block);
577     }
578 
579   // Create an empty entry block that has no predecessors.
580   cfg->setEntry(createBlock());
581 
582   return cfg.take();
583 }
584 
585 /// createBlock - Used to lazily create blocks that are connected
586 ///  to the current (global) succcessor.
587 CFGBlock *CFGBuilder::createBlock(bool add_successor) {
588   CFGBlock *B = cfg->createBlock();
589   if (add_successor && Succ)
590     addSuccessor(B, Succ);
591   return B;
592 }
593 
594 /// createNoReturnBlock - Used to create a block is a 'noreturn' point in the
595 /// CFG. It is *not* connected to the current (global) successor, and instead
596 /// directly tied to the exit block in order to be reachable.
597 CFGBlock *CFGBuilder::createNoReturnBlock() {
598   CFGBlock *B = createBlock(false);
599   B->setHasNoReturnElement();
600   addSuccessor(B, &cfg->getExit());
601   return B;
602 }
603 
604 /// addInitializer - Add C++ base or member initializer element to CFG.
605 CFGBlock *CFGBuilder::addInitializer(CXXCtorInitializer *I) {
606   if (!BuildOpts.AddInitializers)
607     return Block;
608 
609   bool IsReference = false;
610   bool HasTemporaries = false;
611 
612   // Destructors of temporaries in initialization expression should be called
613   // after initialization finishes.
614   Expr *Init = I->getInit();
615   if (Init) {
616     if (FieldDecl *FD = I->getAnyMember())
617       IsReference = FD->getType()->isReferenceType();
618     HasTemporaries = isa<ExprWithCleanups>(Init);
619 
620     if (BuildOpts.AddImplicitDtors && HasTemporaries) {
621       // Generate destructors for temporaries in initialization expression.
622       VisitForTemporaryDtors(cast<ExprWithCleanups>(Init)->getSubExpr(),
623           IsReference);
624     }
625   }
626 
627   autoCreateBlock();
628   appendInitializer(Block, I);
629 
630   if (Init) {
631     if (HasTemporaries) {
632       // For expression with temporaries go directly to subexpression to omit
633       // generating destructors for the second time.
634       return Visit(cast<ExprWithCleanups>(Init)->getSubExpr());
635     }
636     return Visit(Init);
637   }
638 
639   return Block;
640 }
641 
642 /// addAutomaticObjDtors - Add to current block automatic objects destructors
643 /// for objects in range of local scope positions. Use S as trigger statement
644 /// for destructors.
645 void CFGBuilder::addAutomaticObjDtors(LocalScope::const_iterator B,
646                                       LocalScope::const_iterator E, Stmt *S) {
647   if (!BuildOpts.AddImplicitDtors)
648     return;
649 
650   if (B == E)
651     return;
652 
653   CFGBlock::iterator InsertPos;
654 
655   // We need to append the destructors in reverse order, but any one of them
656   // may be a no-return destructor which changes the CFG. As a result, buffer
657   // this sequence up and replay them in reverse order when appending onto the
658   // CFGBlock(s).
659   SmallVector<VarDecl*, 10> Decls;
660   Decls.reserve(B.distance(E));
661   for (LocalScope::const_iterator I = B; I != E; ++I)
662     Decls.push_back(*I);
663 
664   for (SmallVectorImpl<VarDecl*>::reverse_iterator I = Decls.rbegin(),
665                                                    E = Decls.rend();
666        I != E; ++I) {
667     // If this destructor is marked as a no-return destructor, we need to
668     // create a new block for the destructor which does not have as a successor
669     // anything built thus far: control won't flow out of this block.
670     QualType Ty = (*I)->getType().getNonReferenceType();
671     if (const ArrayType *AT = Context->getAsArrayType(Ty))
672       Ty = AT->getElementType();
673     const CXXDestructorDecl *Dtor = Ty->getAsCXXRecordDecl()->getDestructor();
674     if (cast<FunctionType>(Dtor->getType())->getNoReturnAttr())
675       Block = createNoReturnBlock();
676     else
677       autoCreateBlock();
678 
679     appendAutomaticObjDtor(Block, *I, S);
680   }
681 }
682 
683 /// addImplicitDtorsForDestructor - Add implicit destructors generated for
684 /// base and member objects in destructor.
685 void CFGBuilder::addImplicitDtorsForDestructor(const CXXDestructorDecl *DD) {
686   assert (BuildOpts.AddImplicitDtors
687       && "Can be called only when dtors should be added");
688   const CXXRecordDecl *RD = DD->getParent();
689 
690   // At the end destroy virtual base objects.
691   for (CXXRecordDecl::base_class_const_iterator VI = RD->vbases_begin(),
692       VE = RD->vbases_end(); VI != VE; ++VI) {
693     const CXXRecordDecl *CD = VI->getType()->getAsCXXRecordDecl();
694     if (!CD->hasTrivialDestructor()) {
695       autoCreateBlock();
696       appendBaseDtor(Block, VI);
697     }
698   }
699 
700   // Before virtual bases destroy direct base objects.
701   for (CXXRecordDecl::base_class_const_iterator BI = RD->bases_begin(),
702       BE = RD->bases_end(); BI != BE; ++BI) {
703     if (!BI->isVirtual()) {
704       const CXXRecordDecl *CD = BI->getType()->getAsCXXRecordDecl();
705       if (!CD->hasTrivialDestructor()) {
706         autoCreateBlock();
707         appendBaseDtor(Block, BI);
708       }
709     }
710   }
711 
712   // First destroy member objects.
713   for (CXXRecordDecl::field_iterator FI = RD->field_begin(),
714       FE = RD->field_end(); FI != FE; ++FI) {
715     // Check for constant size array. Set type to array element type.
716     QualType QT = FI->getType();
717     if (const ConstantArrayType *AT = Context->getAsConstantArrayType(QT)) {
718       if (AT->getSize() == 0)
719         continue;
720       QT = AT->getElementType();
721     }
722 
723     if (const CXXRecordDecl *CD = QT->getAsCXXRecordDecl())
724       if (!CD->hasTrivialDestructor()) {
725         autoCreateBlock();
726         appendMemberDtor(Block, *FI);
727       }
728   }
729 }
730 
731 /// createOrReuseLocalScope - If Scope is NULL create new LocalScope. Either
732 /// way return valid LocalScope object.
733 LocalScope* CFGBuilder::createOrReuseLocalScope(LocalScope* Scope) {
734   if (!Scope) {
735     llvm::BumpPtrAllocator &alloc = cfg->getAllocator();
736     Scope = alloc.Allocate<LocalScope>();
737     BumpVectorContext ctx(alloc);
738     new (Scope) LocalScope(ctx, ScopePos);
739   }
740   return Scope;
741 }
742 
743 /// addLocalScopeForStmt - Add LocalScope to local scopes tree for statement
744 /// that should create implicit scope (e.g. if/else substatements).
745 void CFGBuilder::addLocalScopeForStmt(Stmt *S) {
746   if (!BuildOpts.AddImplicitDtors)
747     return;
748 
749   LocalScope *Scope = 0;
750 
751   // For compound statement we will be creating explicit scope.
752   if (CompoundStmt *CS = dyn_cast<CompoundStmt>(S)) {
753     for (CompoundStmt::body_iterator BI = CS->body_begin(), BE = CS->body_end()
754         ; BI != BE; ++BI) {
755       Stmt *SI = (*BI)->stripLabelLikeStatements();
756       if (DeclStmt *DS = dyn_cast<DeclStmt>(SI))
757         Scope = addLocalScopeForDeclStmt(DS, Scope);
758     }
759     return;
760   }
761 
762   // For any other statement scope will be implicit and as such will be
763   // interesting only for DeclStmt.
764   if (DeclStmt *DS = dyn_cast<DeclStmt>(S->stripLabelLikeStatements()))
765     addLocalScopeForDeclStmt(DS);
766 }
767 
768 /// addLocalScopeForDeclStmt - Add LocalScope for declaration statement. Will
769 /// reuse Scope if not NULL.
770 LocalScope* CFGBuilder::addLocalScopeForDeclStmt(DeclStmt *DS,
771                                                  LocalScope* Scope) {
772   if (!BuildOpts.AddImplicitDtors)
773     return Scope;
774 
775   for (DeclStmt::decl_iterator DI = DS->decl_begin(), DE = DS->decl_end()
776       ; DI != DE; ++DI) {
777     if (VarDecl *VD = dyn_cast<VarDecl>(*DI))
778       Scope = addLocalScopeForVarDecl(VD, Scope);
779   }
780   return Scope;
781 }
782 
783 /// addLocalScopeForVarDecl - Add LocalScope for variable declaration. It will
784 /// create add scope for automatic objects and temporary objects bound to
785 /// const reference. Will reuse Scope if not NULL.
786 LocalScope* CFGBuilder::addLocalScopeForVarDecl(VarDecl *VD,
787                                                 LocalScope* Scope) {
788   if (!BuildOpts.AddImplicitDtors)
789     return Scope;
790 
791   // Check if variable is local.
792   switch (VD->getStorageClass()) {
793   case SC_None:
794   case SC_Auto:
795   case SC_Register:
796     break;
797   default: return Scope;
798   }
799 
800   // Check for const references bound to temporary. Set type to pointee.
801   QualType QT = VD->getType();
802   if (const ReferenceType* RT = QT.getTypePtr()->getAs<ReferenceType>()) {
803     QT = RT->getPointeeType();
804     if (!QT.isConstQualified())
805       return Scope;
806     if (!VD->extendsLifetimeOfTemporary())
807       return Scope;
808   }
809 
810   // Check for constant size array. Set type to array element type.
811   if (const ConstantArrayType *AT = Context->getAsConstantArrayType(QT)) {
812     if (AT->getSize() == 0)
813       return Scope;
814     QT = AT->getElementType();
815   }
816 
817   // Check if type is a C++ class with non-trivial destructor.
818   if (const CXXRecordDecl *CD = QT->getAsCXXRecordDecl())
819     if (!CD->hasTrivialDestructor()) {
820       // Add the variable to scope
821       Scope = createOrReuseLocalScope(Scope);
822       Scope->addVar(VD);
823       ScopePos = Scope->begin();
824     }
825   return Scope;
826 }
827 
828 /// addLocalScopeAndDtors - For given statement add local scope for it and
829 /// add destructors that will cleanup the scope. Will reuse Scope if not NULL.
830 void CFGBuilder::addLocalScopeAndDtors(Stmt *S) {
831   if (!BuildOpts.AddImplicitDtors)
832     return;
833 
834   LocalScope::const_iterator scopeBeginPos = ScopePos;
835   addLocalScopeForStmt(S);
836   addAutomaticObjDtors(ScopePos, scopeBeginPos, S);
837 }
838 
839 /// prependAutomaticObjDtorsWithTerminator - Prepend destructor CFGElements for
840 /// variables with automatic storage duration to CFGBlock's elements vector.
841 /// Elements will be prepended to physical beginning of the vector which
842 /// happens to be logical end. Use blocks terminator as statement that specifies
843 /// destructors call site.
844 /// FIXME: This mechanism for adding automatic destructors doesn't handle
845 /// no-return destructors properly.
846 void CFGBuilder::prependAutomaticObjDtorsWithTerminator(CFGBlock *Blk,
847     LocalScope::const_iterator B, LocalScope::const_iterator E) {
848   BumpVectorContext &C = cfg->getBumpVectorContext();
849   CFGBlock::iterator InsertPos
850     = Blk->beginAutomaticObjDtorsInsert(Blk->end(), B.distance(E), C);
851   for (LocalScope::const_iterator I = B; I != E; ++I)
852     InsertPos = Blk->insertAutomaticObjDtor(InsertPos, *I,
853                                             Blk->getTerminator());
854 }
855 
856 /// Visit - Walk the subtree of a statement and add extra
857 ///   blocks for ternary operators, &&, and ||.  We also process "," and
858 ///   DeclStmts (which may contain nested control-flow).
859 CFGBlock *CFGBuilder::Visit(Stmt * S, AddStmtChoice asc) {
860   if (!S) {
861     badCFG = true;
862     return 0;
863   }
864 
865   if (Expr *E = dyn_cast<Expr>(S))
866     S = E->IgnoreParens();
867 
868   switch (S->getStmtClass()) {
869     default:
870       return VisitStmt(S, asc);
871 
872     case Stmt::AddrLabelExprClass:
873       return VisitAddrLabelExpr(cast<AddrLabelExpr>(S), asc);
874 
875     case Stmt::BinaryConditionalOperatorClass:
876       return VisitConditionalOperator(cast<BinaryConditionalOperator>(S), asc);
877 
878     case Stmt::BinaryOperatorClass:
879       return VisitBinaryOperator(cast<BinaryOperator>(S), asc);
880 
881     case Stmt::BlockExprClass:
882       return VisitBlockExpr(cast<BlockExpr>(S), asc);
883 
884     case Stmt::BreakStmtClass:
885       return VisitBreakStmt(cast<BreakStmt>(S));
886 
887     case Stmt::CallExprClass:
888     case Stmt::CXXOperatorCallExprClass:
889     case Stmt::CXXMemberCallExprClass:
890       return VisitCallExpr(cast<CallExpr>(S), asc);
891 
892     case Stmt::CaseStmtClass:
893       return VisitCaseStmt(cast<CaseStmt>(S));
894 
895     case Stmt::ChooseExprClass:
896       return VisitChooseExpr(cast<ChooseExpr>(S), asc);
897 
898     case Stmt::CompoundStmtClass:
899       return VisitCompoundStmt(cast<CompoundStmt>(S));
900 
901     case Stmt::ConditionalOperatorClass:
902       return VisitConditionalOperator(cast<ConditionalOperator>(S), asc);
903 
904     case Stmt::ContinueStmtClass:
905       return VisitContinueStmt(cast<ContinueStmt>(S));
906 
907     case Stmt::CXXCatchStmtClass:
908       return VisitCXXCatchStmt(cast<CXXCatchStmt>(S));
909 
910     case Stmt::ExprWithCleanupsClass:
911       return VisitExprWithCleanups(cast<ExprWithCleanups>(S), asc);
912 
913     case Stmt::CXXBindTemporaryExprClass:
914       return VisitCXXBindTemporaryExpr(cast<CXXBindTemporaryExpr>(S), asc);
915 
916     case Stmt::CXXConstructExprClass:
917       return VisitCXXConstructExpr(cast<CXXConstructExpr>(S), asc);
918 
919     case Stmt::CXXFunctionalCastExprClass:
920       return VisitCXXFunctionalCastExpr(cast<CXXFunctionalCastExpr>(S), asc);
921 
922     case Stmt::CXXTemporaryObjectExprClass:
923       return VisitCXXTemporaryObjectExpr(cast<CXXTemporaryObjectExpr>(S), asc);
924 
925     case Stmt::CXXThrowExprClass:
926       return VisitCXXThrowExpr(cast<CXXThrowExpr>(S));
927 
928     case Stmt::CXXTryStmtClass:
929       return VisitCXXTryStmt(cast<CXXTryStmt>(S));
930 
931     case Stmt::CXXForRangeStmtClass:
932       return VisitCXXForRangeStmt(cast<CXXForRangeStmt>(S));
933 
934     case Stmt::DeclStmtClass:
935       return VisitDeclStmt(cast<DeclStmt>(S));
936 
937     case Stmt::DefaultStmtClass:
938       return VisitDefaultStmt(cast<DefaultStmt>(S));
939 
940     case Stmt::DoStmtClass:
941       return VisitDoStmt(cast<DoStmt>(S));
942 
943     case Stmt::ForStmtClass:
944       return VisitForStmt(cast<ForStmt>(S));
945 
946     case Stmt::GotoStmtClass:
947       return VisitGotoStmt(cast<GotoStmt>(S));
948 
949     case Stmt::IfStmtClass:
950       return VisitIfStmt(cast<IfStmt>(S));
951 
952     case Stmt::ImplicitCastExprClass:
953       return VisitImplicitCastExpr(cast<ImplicitCastExpr>(S), asc);
954 
955     case Stmt::IndirectGotoStmtClass:
956       return VisitIndirectGotoStmt(cast<IndirectGotoStmt>(S));
957 
958     case Stmt::LabelStmtClass:
959       return VisitLabelStmt(cast<LabelStmt>(S));
960 
961     case Stmt::MemberExprClass:
962       return VisitMemberExpr(cast<MemberExpr>(S), asc);
963 
964     case Stmt::NullStmtClass:
965       return Block;
966 
967     case Stmt::ObjCAtCatchStmtClass:
968       return VisitObjCAtCatchStmt(cast<ObjCAtCatchStmt>(S));
969 
970     case Stmt::ObjCAtSynchronizedStmtClass:
971       return VisitObjCAtSynchronizedStmt(cast<ObjCAtSynchronizedStmt>(S));
972 
973     case Stmt::ObjCAtThrowStmtClass:
974       return VisitObjCAtThrowStmt(cast<ObjCAtThrowStmt>(S));
975 
976     case Stmt::ObjCAtTryStmtClass:
977       return VisitObjCAtTryStmt(cast<ObjCAtTryStmt>(S));
978 
979     case Stmt::ObjCForCollectionStmtClass:
980       return VisitObjCForCollectionStmt(cast<ObjCForCollectionStmt>(S));
981 
982     case Stmt::OpaqueValueExprClass:
983       return Block;
984 
985     case Stmt::PseudoObjectExprClass:
986       return VisitPseudoObjectExpr(cast<PseudoObjectExpr>(S));
987 
988     case Stmt::ReturnStmtClass:
989       return VisitReturnStmt(cast<ReturnStmt>(S));
990 
991     case Stmt::UnaryExprOrTypeTraitExprClass:
992       return VisitUnaryExprOrTypeTraitExpr(cast<UnaryExprOrTypeTraitExpr>(S),
993                                            asc);
994 
995     case Stmt::StmtExprClass:
996       return VisitStmtExpr(cast<StmtExpr>(S), asc);
997 
998     case Stmt::SwitchStmtClass:
999       return VisitSwitchStmt(cast<SwitchStmt>(S));
1000 
1001     case Stmt::UnaryOperatorClass:
1002       return VisitUnaryOperator(cast<UnaryOperator>(S), asc);
1003 
1004     case Stmt::WhileStmtClass:
1005       return VisitWhileStmt(cast<WhileStmt>(S));
1006   }
1007 }
1008 
1009 CFGBlock *CFGBuilder::VisitStmt(Stmt *S, AddStmtChoice asc) {
1010   if (asc.alwaysAdd(*this, S)) {
1011     autoCreateBlock();
1012     appendStmt(Block, S);
1013   }
1014 
1015   return VisitChildren(S);
1016 }
1017 
1018 /// VisitChildren - Visit the children of a Stmt.
1019 CFGBlock *CFGBuilder::VisitChildren(Stmt *Terminator) {
1020   CFGBlock *lastBlock = Block;
1021   for (Stmt::child_range I = Terminator->children(); I; ++I)
1022     if (Stmt *child = *I)
1023       if (CFGBlock *b = Visit(child))
1024         lastBlock = b;
1025 
1026   return lastBlock;
1027 }
1028 
1029 CFGBlock *CFGBuilder::VisitAddrLabelExpr(AddrLabelExpr *A,
1030                                          AddStmtChoice asc) {
1031   AddressTakenLabels.insert(A->getLabel());
1032 
1033   if (asc.alwaysAdd(*this, A)) {
1034     autoCreateBlock();
1035     appendStmt(Block, A);
1036   }
1037 
1038   return Block;
1039 }
1040 
1041 CFGBlock *CFGBuilder::VisitUnaryOperator(UnaryOperator *U,
1042            AddStmtChoice asc) {
1043   if (asc.alwaysAdd(*this, U)) {
1044     autoCreateBlock();
1045     appendStmt(Block, U);
1046   }
1047 
1048   return Visit(U->getSubExpr(), AddStmtChoice());
1049 }
1050 
1051 CFGBlock *CFGBuilder::VisitBinaryOperator(BinaryOperator *B,
1052                                           AddStmtChoice asc) {
1053   if (B->isLogicalOp()) { // && or ||
1054     CFGBlock *ConfluenceBlock = Block ? Block : createBlock();
1055     appendStmt(ConfluenceBlock, B);
1056 
1057     if (badCFG)
1058       return 0;
1059 
1060     // create the block evaluating the LHS
1061     CFGBlock *LHSBlock = createBlock(false);
1062     LHSBlock->setTerminator(B);
1063 
1064     // create the block evaluating the RHS
1065     Succ = ConfluenceBlock;
1066     Block = NULL;
1067     CFGBlock *RHSBlock = addStmt(B->getRHS());
1068 
1069     if (RHSBlock) {
1070       if (badCFG)
1071         return 0;
1072     } else {
1073       // Create an empty block for cases where the RHS doesn't require
1074       // any explicit statements in the CFG.
1075       RHSBlock = createBlock();
1076     }
1077 
1078     // See if this is a known constant.
1079     TryResult KnownVal = tryEvaluateBool(B->getLHS());
1080     if (KnownVal.isKnown() && (B->getOpcode() == BO_LOr))
1081       KnownVal.negate();
1082 
1083     // Now link the LHSBlock with RHSBlock.
1084     if (B->getOpcode() == BO_LOr) {
1085       addSuccessor(LHSBlock, KnownVal.isTrue() ? NULL : ConfluenceBlock);
1086       addSuccessor(LHSBlock, KnownVal.isFalse() ? NULL : RHSBlock);
1087     } else {
1088       assert(B->getOpcode() == BO_LAnd);
1089       addSuccessor(LHSBlock, KnownVal.isFalse() ? NULL : RHSBlock);
1090       addSuccessor(LHSBlock, KnownVal.isTrue() ? NULL : ConfluenceBlock);
1091     }
1092 
1093     // Generate the blocks for evaluating the LHS.
1094     Block = LHSBlock;
1095     return addStmt(B->getLHS());
1096   }
1097 
1098   if (B->getOpcode() == BO_Comma) { // ,
1099     autoCreateBlock();
1100     appendStmt(Block, B);
1101     addStmt(B->getRHS());
1102     return addStmt(B->getLHS());
1103   }
1104 
1105   if (B->isAssignmentOp()) {
1106     if (asc.alwaysAdd(*this, B)) {
1107       autoCreateBlock();
1108       appendStmt(Block, B);
1109     }
1110     Visit(B->getLHS());
1111     return Visit(B->getRHS());
1112   }
1113 
1114   if (asc.alwaysAdd(*this, B)) {
1115     autoCreateBlock();
1116     appendStmt(Block, B);
1117   }
1118 
1119   CFGBlock *RBlock = Visit(B->getRHS());
1120   CFGBlock *LBlock = Visit(B->getLHS());
1121   // If visiting RHS causes us to finish 'Block', e.g. the RHS is a StmtExpr
1122   // containing a DoStmt, and the LHS doesn't create a new block, then we should
1123   // return RBlock.  Otherwise we'll incorrectly return NULL.
1124   return (LBlock ? LBlock : RBlock);
1125 }
1126 
1127 CFGBlock *CFGBuilder::VisitBlockExpr(BlockExpr *E, AddStmtChoice asc) {
1128   if (asc.alwaysAdd(*this, E)) {
1129     autoCreateBlock();
1130     appendStmt(Block, E);
1131   }
1132   return Block;
1133 }
1134 
1135 CFGBlock *CFGBuilder::VisitBreakStmt(BreakStmt *B) {
1136   // "break" is a control-flow statement.  Thus we stop processing the current
1137   // block.
1138   if (badCFG)
1139     return 0;
1140 
1141   // Now create a new block that ends with the break statement.
1142   Block = createBlock(false);
1143   Block->setTerminator(B);
1144 
1145   // If there is no target for the break, then we are looking at an incomplete
1146   // AST.  This means that the CFG cannot be constructed.
1147   if (BreakJumpTarget.block) {
1148     addAutomaticObjDtors(ScopePos, BreakJumpTarget.scopePosition, B);
1149     addSuccessor(Block, BreakJumpTarget.block);
1150   } else
1151     badCFG = true;
1152 
1153 
1154   return Block;
1155 }
1156 
1157 static bool CanThrow(Expr *E, ASTContext &Ctx) {
1158   QualType Ty = E->getType();
1159   if (Ty->isFunctionPointerType())
1160     Ty = Ty->getAs<PointerType>()->getPointeeType();
1161   else if (Ty->isBlockPointerType())
1162     Ty = Ty->getAs<BlockPointerType>()->getPointeeType();
1163 
1164   const FunctionType *FT = Ty->getAs<FunctionType>();
1165   if (FT) {
1166     if (const FunctionProtoType *Proto = dyn_cast<FunctionProtoType>(FT))
1167       if (Proto->isNothrow(Ctx))
1168         return false;
1169   }
1170   return true;
1171 }
1172 
1173 CFGBlock *CFGBuilder::VisitCallExpr(CallExpr *C, AddStmtChoice asc) {
1174   // Compute the callee type.
1175   QualType calleeType = C->getCallee()->getType();
1176   if (calleeType == Context->BoundMemberTy) {
1177     QualType boundType = Expr::findBoundMemberType(C->getCallee());
1178 
1179     // We should only get a null bound type if processing a dependent
1180     // CFG.  Recover by assuming nothing.
1181     if (!boundType.isNull()) calleeType = boundType;
1182   }
1183 
1184   // If this is a call to a no-return function, this stops the block here.
1185   bool NoReturn = getFunctionExtInfo(*calleeType).getNoReturn();
1186 
1187   bool AddEHEdge = false;
1188 
1189   // Languages without exceptions are assumed to not throw.
1190   if (Context->getLangOptions().Exceptions) {
1191     if (BuildOpts.AddEHEdges)
1192       AddEHEdge = true;
1193   }
1194 
1195   if (FunctionDecl *FD = C->getDirectCallee()) {
1196     if (FD->hasAttr<NoReturnAttr>())
1197       NoReturn = true;
1198     if (FD->hasAttr<NoThrowAttr>())
1199       AddEHEdge = false;
1200   }
1201 
1202   if (!CanThrow(C->getCallee(), *Context))
1203     AddEHEdge = false;
1204 
1205   if (!NoReturn && !AddEHEdge)
1206     return VisitStmt(C, asc.withAlwaysAdd(true));
1207 
1208   if (Block) {
1209     Succ = Block;
1210     if (badCFG)
1211       return 0;
1212   }
1213 
1214   if (NoReturn)
1215     Block = createNoReturnBlock();
1216   else
1217     Block = createBlock();
1218 
1219   appendStmt(Block, C);
1220 
1221   if (AddEHEdge) {
1222     // Add exceptional edges.
1223     if (TryTerminatedBlock)
1224       addSuccessor(Block, TryTerminatedBlock);
1225     else
1226       addSuccessor(Block, &cfg->getExit());
1227   }
1228 
1229   return VisitChildren(C);
1230 }
1231 
1232 CFGBlock *CFGBuilder::VisitChooseExpr(ChooseExpr *C,
1233                                       AddStmtChoice asc) {
1234   CFGBlock *ConfluenceBlock = Block ? Block : createBlock();
1235   appendStmt(ConfluenceBlock, C);
1236   if (badCFG)
1237     return 0;
1238 
1239   AddStmtChoice alwaysAdd = asc.withAlwaysAdd(true);
1240   Succ = ConfluenceBlock;
1241   Block = NULL;
1242   CFGBlock *LHSBlock = Visit(C->getLHS(), alwaysAdd);
1243   if (badCFG)
1244     return 0;
1245 
1246   Succ = ConfluenceBlock;
1247   Block = NULL;
1248   CFGBlock *RHSBlock = Visit(C->getRHS(), alwaysAdd);
1249   if (badCFG)
1250     return 0;
1251 
1252   Block = createBlock(false);
1253   // See if this is a known constant.
1254   const TryResult& KnownVal = tryEvaluateBool(C->getCond());
1255   addSuccessor(Block, KnownVal.isFalse() ? NULL : LHSBlock);
1256   addSuccessor(Block, KnownVal.isTrue() ? NULL : RHSBlock);
1257   Block->setTerminator(C);
1258   return addStmt(C->getCond());
1259 }
1260 
1261 
1262 CFGBlock *CFGBuilder::VisitCompoundStmt(CompoundStmt *C) {
1263   addLocalScopeAndDtors(C);
1264   CFGBlock *LastBlock = Block;
1265 
1266   for (CompoundStmt::reverse_body_iterator I=C->body_rbegin(), E=C->body_rend();
1267        I != E; ++I ) {
1268     // If we hit a segment of code just containing ';' (NullStmts), we can
1269     // get a null block back.  In such cases, just use the LastBlock
1270     if (CFGBlock *newBlock = addStmt(*I))
1271       LastBlock = newBlock;
1272 
1273     if (badCFG)
1274       return NULL;
1275   }
1276 
1277   return LastBlock;
1278 }
1279 
1280 CFGBlock *CFGBuilder::VisitConditionalOperator(AbstractConditionalOperator *C,
1281                                                AddStmtChoice asc) {
1282   const BinaryConditionalOperator *BCO = dyn_cast<BinaryConditionalOperator>(C);
1283   const OpaqueValueExpr *opaqueValue = (BCO ? BCO->getOpaqueValue() : NULL);
1284 
1285   // Create the confluence block that will "merge" the results of the ternary
1286   // expression.
1287   CFGBlock *ConfluenceBlock = Block ? Block : createBlock();
1288   appendStmt(ConfluenceBlock, C);
1289   if (badCFG)
1290     return 0;
1291 
1292   AddStmtChoice alwaysAdd = asc.withAlwaysAdd(true);
1293 
1294   // Create a block for the LHS expression if there is an LHS expression.  A
1295   // GCC extension allows LHS to be NULL, causing the condition to be the
1296   // value that is returned instead.
1297   //  e.g: x ?: y is shorthand for: x ? x : y;
1298   Succ = ConfluenceBlock;
1299   Block = NULL;
1300   CFGBlock *LHSBlock = 0;
1301   const Expr *trueExpr = C->getTrueExpr();
1302   if (trueExpr != opaqueValue) {
1303     LHSBlock = Visit(C->getTrueExpr(), alwaysAdd);
1304     if (badCFG)
1305       return 0;
1306     Block = NULL;
1307   }
1308   else
1309     LHSBlock = ConfluenceBlock;
1310 
1311   // Create the block for the RHS expression.
1312   Succ = ConfluenceBlock;
1313   CFGBlock *RHSBlock = Visit(C->getFalseExpr(), alwaysAdd);
1314   if (badCFG)
1315     return 0;
1316 
1317   // Create the block that will contain the condition.
1318   Block = createBlock(false);
1319 
1320   // See if this is a known constant.
1321   const TryResult& KnownVal = tryEvaluateBool(C->getCond());
1322   addSuccessor(Block, KnownVal.isFalse() ? NULL : LHSBlock);
1323   addSuccessor(Block, KnownVal.isTrue() ? NULL : RHSBlock);
1324   Block->setTerminator(C);
1325   Expr *condExpr = C->getCond();
1326 
1327   if (opaqueValue) {
1328     // Run the condition expression if it's not trivially expressed in
1329     // terms of the opaque value (or if there is no opaque value).
1330     if (condExpr != opaqueValue)
1331       addStmt(condExpr);
1332 
1333     // Before that, run the common subexpression if there was one.
1334     // At least one of this or the above will be run.
1335     return addStmt(BCO->getCommon());
1336   }
1337 
1338   return addStmt(condExpr);
1339 }
1340 
1341 CFGBlock *CFGBuilder::VisitDeclStmt(DeclStmt *DS) {
1342   // Check if the Decl is for an __label__.  If so, elide it from the
1343   // CFG entirely.
1344   if (isa<LabelDecl>(*DS->decl_begin()))
1345     return Block;
1346 
1347   // This case also handles static_asserts.
1348   if (DS->isSingleDecl())
1349     return VisitDeclSubExpr(DS);
1350 
1351   CFGBlock *B = 0;
1352 
1353   // FIXME: Add a reverse iterator for DeclStmt to avoid this extra copy.
1354   typedef SmallVector<Decl*,10> BufTy;
1355   BufTy Buf(DS->decl_begin(), DS->decl_end());
1356 
1357   for (BufTy::reverse_iterator I = Buf.rbegin(), E = Buf.rend(); I != E; ++I) {
1358     // Get the alignment of the new DeclStmt, padding out to >=8 bytes.
1359     unsigned A = llvm::AlignOf<DeclStmt>::Alignment < 8
1360                ? 8 : llvm::AlignOf<DeclStmt>::Alignment;
1361 
1362     // Allocate the DeclStmt using the BumpPtrAllocator.  It will get
1363     // automatically freed with the CFG.
1364     DeclGroupRef DG(*I);
1365     Decl *D = *I;
1366     void *Mem = cfg->getAllocator().Allocate(sizeof(DeclStmt), A);
1367     DeclStmt *DSNew = new (Mem) DeclStmt(DG, D->getLocation(), GetEndLoc(D));
1368 
1369     // Append the fake DeclStmt to block.
1370     B = VisitDeclSubExpr(DSNew);
1371   }
1372 
1373   return B;
1374 }
1375 
1376 /// VisitDeclSubExpr - Utility method to add block-level expressions for
1377 /// DeclStmts and initializers in them.
1378 CFGBlock *CFGBuilder::VisitDeclSubExpr(DeclStmt *DS) {
1379   assert(DS->isSingleDecl() && "Can handle single declarations only.");
1380   Decl *D = DS->getSingleDecl();
1381 
1382   if (isa<StaticAssertDecl>(D)) {
1383     // static_asserts aren't added to the CFG because they do not impact
1384     // runtime semantics.
1385     return Block;
1386   }
1387 
1388   VarDecl *VD = dyn_cast<VarDecl>(DS->getSingleDecl());
1389 
1390   if (!VD) {
1391     autoCreateBlock();
1392     appendStmt(Block, DS);
1393     return Block;
1394   }
1395 
1396   bool IsReference = false;
1397   bool HasTemporaries = false;
1398 
1399   // Destructors of temporaries in initialization expression should be called
1400   // after initialization finishes.
1401   Expr *Init = VD->getInit();
1402   if (Init) {
1403     IsReference = VD->getType()->isReferenceType();
1404     HasTemporaries = isa<ExprWithCleanups>(Init);
1405 
1406     if (BuildOpts.AddImplicitDtors && HasTemporaries) {
1407       // Generate destructors for temporaries in initialization expression.
1408       VisitForTemporaryDtors(cast<ExprWithCleanups>(Init)->getSubExpr(),
1409           IsReference);
1410     }
1411   }
1412 
1413   autoCreateBlock();
1414   appendStmt(Block, DS);
1415 
1416   if (Init) {
1417     if (HasTemporaries)
1418       // For expression with temporaries go directly to subexpression to omit
1419       // generating destructors for the second time.
1420       Visit(cast<ExprWithCleanups>(Init)->getSubExpr());
1421     else
1422       Visit(Init);
1423   }
1424 
1425   // If the type of VD is a VLA, then we must process its size expressions.
1426   for (const VariableArrayType* VA = FindVA(VD->getType().getTypePtr());
1427        VA != 0; VA = FindVA(VA->getElementType().getTypePtr()))
1428     Block = addStmt(VA->getSizeExpr());
1429 
1430   // Remove variable from local scope.
1431   if (ScopePos && VD == *ScopePos)
1432     ++ScopePos;
1433 
1434   return Block;
1435 }
1436 
1437 CFGBlock *CFGBuilder::VisitIfStmt(IfStmt *I) {
1438   // We may see an if statement in the middle of a basic block, or it may be the
1439   // first statement we are processing.  In either case, we create a new basic
1440   // block.  First, we create the blocks for the then...else statements, and
1441   // then we create the block containing the if statement.  If we were in the
1442   // middle of a block, we stop processing that block.  That block is then the
1443   // implicit successor for the "then" and "else" clauses.
1444 
1445   // Save local scope position because in case of condition variable ScopePos
1446   // won't be restored when traversing AST.
1447   SaveAndRestore<LocalScope::const_iterator> save_scope_pos(ScopePos);
1448 
1449   // Create local scope for possible condition variable.
1450   // Store scope position. Add implicit destructor.
1451   if (VarDecl *VD = I->getConditionVariable()) {
1452     LocalScope::const_iterator BeginScopePos = ScopePos;
1453     addLocalScopeForVarDecl(VD);
1454     addAutomaticObjDtors(ScopePos, BeginScopePos, I);
1455   }
1456 
1457   // The block we were processing is now finished.  Make it the successor
1458   // block.
1459   if (Block) {
1460     Succ = Block;
1461     if (badCFG)
1462       return 0;
1463   }
1464 
1465   // Process the false branch.
1466   CFGBlock *ElseBlock = Succ;
1467 
1468   if (Stmt *Else = I->getElse()) {
1469     SaveAndRestore<CFGBlock*> sv(Succ);
1470 
1471     // NULL out Block so that the recursive call to Visit will
1472     // create a new basic block.
1473     Block = NULL;
1474 
1475     // If branch is not a compound statement create implicit scope
1476     // and add destructors.
1477     if (!isa<CompoundStmt>(Else))
1478       addLocalScopeAndDtors(Else);
1479 
1480     ElseBlock = addStmt(Else);
1481 
1482     if (!ElseBlock) // Can occur when the Else body has all NullStmts.
1483       ElseBlock = sv.get();
1484     else if (Block) {
1485       if (badCFG)
1486         return 0;
1487     }
1488   }
1489 
1490   // Process the true branch.
1491   CFGBlock *ThenBlock;
1492   {
1493     Stmt *Then = I->getThen();
1494     assert(Then);
1495     SaveAndRestore<CFGBlock*> sv(Succ);
1496     Block = NULL;
1497 
1498     // If branch is not a compound statement create implicit scope
1499     // and add destructors.
1500     if (!isa<CompoundStmt>(Then))
1501       addLocalScopeAndDtors(Then);
1502 
1503     ThenBlock = addStmt(Then);
1504 
1505     if (!ThenBlock) {
1506       // We can reach here if the "then" body has all NullStmts.
1507       // Create an empty block so we can distinguish between true and false
1508       // branches in path-sensitive analyses.
1509       ThenBlock = createBlock(false);
1510       addSuccessor(ThenBlock, sv.get());
1511     } else if (Block) {
1512       if (badCFG)
1513         return 0;
1514     }
1515   }
1516 
1517   // Now create a new block containing the if statement.
1518   Block = createBlock(false);
1519 
1520   // Set the terminator of the new block to the If statement.
1521   Block->setTerminator(I);
1522 
1523   // See if this is a known constant.
1524   const TryResult &KnownVal = tryEvaluateBool(I->getCond());
1525 
1526   // Now add the successors.
1527   addSuccessor(Block, KnownVal.isFalse() ? NULL : ThenBlock);
1528   addSuccessor(Block, KnownVal.isTrue()? NULL : ElseBlock);
1529 
1530   // Add the condition as the last statement in the new block.  This may create
1531   // new blocks as the condition may contain control-flow.  Any newly created
1532   // blocks will be pointed to be "Block".
1533   Block = addStmt(I->getCond());
1534 
1535   // Finally, if the IfStmt contains a condition variable, add both the IfStmt
1536   // and the condition variable initialization to the CFG.
1537   if (VarDecl *VD = I->getConditionVariable()) {
1538     if (Expr *Init = VD->getInit()) {
1539       autoCreateBlock();
1540       appendStmt(Block, I->getConditionVariableDeclStmt());
1541       addStmt(Init);
1542     }
1543   }
1544 
1545   return Block;
1546 }
1547 
1548 
1549 CFGBlock *CFGBuilder::VisitReturnStmt(ReturnStmt *R) {
1550   // If we were in the middle of a block we stop processing that block.
1551   //
1552   // NOTE: If a "return" appears in the middle of a block, this means that the
1553   //       code afterwards is DEAD (unreachable).  We still keep a basic block
1554   //       for that code; a simple "mark-and-sweep" from the entry block will be
1555   //       able to report such dead blocks.
1556 
1557   // Create the new block.
1558   Block = createBlock(false);
1559 
1560   // The Exit block is the only successor.
1561   addAutomaticObjDtors(ScopePos, LocalScope::const_iterator(), R);
1562   addSuccessor(Block, &cfg->getExit());
1563 
1564   // Add the return statement to the block.  This may create new blocks if R
1565   // contains control-flow (short-circuit operations).
1566   return VisitStmt(R, AddStmtChoice::AlwaysAdd);
1567 }
1568 
1569 CFGBlock *CFGBuilder::VisitLabelStmt(LabelStmt *L) {
1570   // Get the block of the labeled statement.  Add it to our map.
1571   addStmt(L->getSubStmt());
1572   CFGBlock *LabelBlock = Block;
1573 
1574   if (!LabelBlock)              // This can happen when the body is empty, i.e.
1575     LabelBlock = createBlock(); // scopes that only contains NullStmts.
1576 
1577   assert(LabelMap.find(L->getDecl()) == LabelMap.end() &&
1578          "label already in map");
1579   LabelMap[L->getDecl()] = JumpTarget(LabelBlock, ScopePos);
1580 
1581   // Labels partition blocks, so this is the end of the basic block we were
1582   // processing (L is the block's label).  Because this is label (and we have
1583   // already processed the substatement) there is no extra control-flow to worry
1584   // about.
1585   LabelBlock->setLabel(L);
1586   if (badCFG)
1587     return 0;
1588 
1589   // We set Block to NULL to allow lazy creation of a new block (if necessary);
1590   Block = NULL;
1591 
1592   // This block is now the implicit successor of other blocks.
1593   Succ = LabelBlock;
1594 
1595   return LabelBlock;
1596 }
1597 
1598 CFGBlock *CFGBuilder::VisitGotoStmt(GotoStmt *G) {
1599   // Goto is a control-flow statement.  Thus we stop processing the current
1600   // block and create a new one.
1601 
1602   Block = createBlock(false);
1603   Block->setTerminator(G);
1604 
1605   // If we already know the mapping to the label block add the successor now.
1606   LabelMapTy::iterator I = LabelMap.find(G->getLabel());
1607 
1608   if (I == LabelMap.end())
1609     // We will need to backpatch this block later.
1610     BackpatchBlocks.push_back(JumpSource(Block, ScopePos));
1611   else {
1612     JumpTarget JT = I->second;
1613     addAutomaticObjDtors(ScopePos, JT.scopePosition, G);
1614     addSuccessor(Block, JT.block);
1615   }
1616 
1617   return Block;
1618 }
1619 
1620 CFGBlock *CFGBuilder::VisitForStmt(ForStmt *F) {
1621   CFGBlock *LoopSuccessor = NULL;
1622 
1623   // Save local scope position because in case of condition variable ScopePos
1624   // won't be restored when traversing AST.
1625   SaveAndRestore<LocalScope::const_iterator> save_scope_pos(ScopePos);
1626 
1627   // Create local scope for init statement and possible condition variable.
1628   // Add destructor for init statement and condition variable.
1629   // Store scope position for continue statement.
1630   if (Stmt *Init = F->getInit())
1631     addLocalScopeForStmt(Init);
1632   LocalScope::const_iterator LoopBeginScopePos = ScopePos;
1633 
1634   if (VarDecl *VD = F->getConditionVariable())
1635     addLocalScopeForVarDecl(VD);
1636   LocalScope::const_iterator ContinueScopePos = ScopePos;
1637 
1638   addAutomaticObjDtors(ScopePos, save_scope_pos.get(), F);
1639 
1640   // "for" is a control-flow statement.  Thus we stop processing the current
1641   // block.
1642   if (Block) {
1643     if (badCFG)
1644       return 0;
1645     LoopSuccessor = Block;
1646   } else
1647     LoopSuccessor = Succ;
1648 
1649   // Save the current value for the break targets.
1650   // All breaks should go to the code following the loop.
1651   SaveAndRestore<JumpTarget> save_break(BreakJumpTarget);
1652   BreakJumpTarget = JumpTarget(LoopSuccessor, ScopePos);
1653 
1654   // Because of short-circuit evaluation, the condition of the loop can span
1655   // multiple basic blocks.  Thus we need the "Entry" and "Exit" blocks that
1656   // evaluate the condition.
1657   CFGBlock *ExitConditionBlock = createBlock(false);
1658   CFGBlock *EntryConditionBlock = ExitConditionBlock;
1659 
1660   // Set the terminator for the "exit" condition block.
1661   ExitConditionBlock->setTerminator(F);
1662 
1663   // Now add the actual condition to the condition block.  Because the condition
1664   // itself may contain control-flow, new blocks may be created.
1665   if (Stmt *C = F->getCond()) {
1666     Block = ExitConditionBlock;
1667     EntryConditionBlock = addStmt(C);
1668     if (badCFG)
1669       return 0;
1670     assert(Block == EntryConditionBlock ||
1671            (Block == 0 && EntryConditionBlock == Succ));
1672 
1673     // If this block contains a condition variable, add both the condition
1674     // variable and initializer to the CFG.
1675     if (VarDecl *VD = F->getConditionVariable()) {
1676       if (Expr *Init = VD->getInit()) {
1677         autoCreateBlock();
1678         appendStmt(Block, F->getConditionVariableDeclStmt());
1679         EntryConditionBlock = addStmt(Init);
1680         assert(Block == EntryConditionBlock);
1681       }
1682     }
1683 
1684     if (Block) {
1685       if (badCFG)
1686         return 0;
1687     }
1688   }
1689 
1690   // The condition block is the implicit successor for the loop body as well as
1691   // any code above the loop.
1692   Succ = EntryConditionBlock;
1693 
1694   // See if this is a known constant.
1695   TryResult KnownVal(true);
1696 
1697   if (F->getCond())
1698     KnownVal = tryEvaluateBool(F->getCond());
1699 
1700   // Now create the loop body.
1701   {
1702     assert(F->getBody());
1703 
1704    // Save the current values for Block, Succ, and continue targets.
1705    SaveAndRestore<CFGBlock*> save_Block(Block), save_Succ(Succ);
1706    SaveAndRestore<JumpTarget> save_continue(ContinueJumpTarget);
1707 
1708     // Create a new block to contain the (bottom) of the loop body.
1709     Block = NULL;
1710 
1711     // Loop body should end with destructor of Condition variable (if any).
1712     addAutomaticObjDtors(ScopePos, LoopBeginScopePos, F);
1713 
1714     if (Stmt *I = F->getInc()) {
1715       // Generate increment code in its own basic block.  This is the target of
1716       // continue statements.
1717       Succ = addStmt(I);
1718     } else {
1719       // No increment code.  Create a special, empty, block that is used as the
1720       // target block for "looping back" to the start of the loop.
1721       assert(Succ == EntryConditionBlock);
1722       Succ = Block ? Block : createBlock();
1723     }
1724 
1725     // Finish up the increment (or empty) block if it hasn't been already.
1726     if (Block) {
1727       assert(Block == Succ);
1728       if (badCFG)
1729         return 0;
1730       Block = 0;
1731     }
1732 
1733     ContinueJumpTarget = JumpTarget(Succ, ContinueScopePos);
1734 
1735     // The starting block for the loop increment is the block that should
1736     // represent the 'loop target' for looping back to the start of the loop.
1737     ContinueJumpTarget.block->setLoopTarget(F);
1738 
1739     // If body is not a compound statement create implicit scope
1740     // and add destructors.
1741     if (!isa<CompoundStmt>(F->getBody()))
1742       addLocalScopeAndDtors(F->getBody());
1743 
1744     // Now populate the body block, and in the process create new blocks as we
1745     // walk the body of the loop.
1746     CFGBlock *BodyBlock = addStmt(F->getBody());
1747 
1748     if (!BodyBlock)
1749       BodyBlock = ContinueJumpTarget.block;//can happen for "for (...;...;...);"
1750     else if (badCFG)
1751       return 0;
1752 
1753     // This new body block is a successor to our "exit" condition block.
1754     addSuccessor(ExitConditionBlock, KnownVal.isFalse() ? NULL : BodyBlock);
1755   }
1756 
1757   // Link up the condition block with the code that follows the loop.  (the
1758   // false branch).
1759   addSuccessor(ExitConditionBlock, KnownVal.isTrue() ? NULL : LoopSuccessor);
1760 
1761   // If the loop contains initialization, create a new block for those
1762   // statements.  This block can also contain statements that precede the loop.
1763   if (Stmt *I = F->getInit()) {
1764     Block = createBlock();
1765     return addStmt(I);
1766   }
1767 
1768   // There is no loop initialization.  We are thus basically a while loop.
1769   // NULL out Block to force lazy block construction.
1770   Block = NULL;
1771   Succ = EntryConditionBlock;
1772   return EntryConditionBlock;
1773 }
1774 
1775 CFGBlock *CFGBuilder::VisitMemberExpr(MemberExpr *M, AddStmtChoice asc) {
1776   if (asc.alwaysAdd(*this, M)) {
1777     autoCreateBlock();
1778     appendStmt(Block, M);
1779   }
1780   return Visit(M->getBase());
1781 }
1782 
1783 CFGBlock *CFGBuilder::VisitObjCForCollectionStmt(ObjCForCollectionStmt *S) {
1784   // Objective-C fast enumeration 'for' statements:
1785   //  http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC
1786   //
1787   //  for ( Type newVariable in collection_expression ) { statements }
1788   //
1789   //  becomes:
1790   //
1791   //   prologue:
1792   //     1. collection_expression
1793   //     T. jump to loop_entry
1794   //   loop_entry:
1795   //     1. side-effects of element expression
1796   //     1. ObjCForCollectionStmt [performs binding to newVariable]
1797   //     T. ObjCForCollectionStmt  TB, FB  [jumps to TB if newVariable != nil]
1798   //   TB:
1799   //     statements
1800   //     T. jump to loop_entry
1801   //   FB:
1802   //     what comes after
1803   //
1804   //  and
1805   //
1806   //  Type existingItem;
1807   //  for ( existingItem in expression ) { statements }
1808   //
1809   //  becomes:
1810   //
1811   //   the same with newVariable replaced with existingItem; the binding works
1812   //   the same except that for one ObjCForCollectionStmt::getElement() returns
1813   //   a DeclStmt and the other returns a DeclRefExpr.
1814   //
1815 
1816   CFGBlock *LoopSuccessor = 0;
1817 
1818   if (Block) {
1819     if (badCFG)
1820       return 0;
1821     LoopSuccessor = Block;
1822     Block = 0;
1823   } else
1824     LoopSuccessor = Succ;
1825 
1826   // Build the condition blocks.
1827   CFGBlock *ExitConditionBlock = createBlock(false);
1828 
1829   // Set the terminator for the "exit" condition block.
1830   ExitConditionBlock->setTerminator(S);
1831 
1832   // The last statement in the block should be the ObjCForCollectionStmt, which
1833   // performs the actual binding to 'element' and determines if there are any
1834   // more items in the collection.
1835   appendStmt(ExitConditionBlock, S);
1836   Block = ExitConditionBlock;
1837 
1838   // Walk the 'element' expression to see if there are any side-effects.  We
1839   // generate new blocks as necessary.  We DON'T add the statement by default to
1840   // the CFG unless it contains control-flow.
1841   CFGBlock *EntryConditionBlock = Visit(S->getElement(),
1842                                         AddStmtChoice::NotAlwaysAdd);
1843   if (Block) {
1844     if (badCFG)
1845       return 0;
1846     Block = 0;
1847   }
1848 
1849   // The condition block is the implicit successor for the loop body as well as
1850   // any code above the loop.
1851   Succ = EntryConditionBlock;
1852 
1853   // Now create the true branch.
1854   {
1855     // Save the current values for Succ, continue and break targets.
1856     SaveAndRestore<CFGBlock*> save_Succ(Succ);
1857     SaveAndRestore<JumpTarget> save_continue(ContinueJumpTarget),
1858         save_break(BreakJumpTarget);
1859 
1860     BreakJumpTarget = JumpTarget(LoopSuccessor, ScopePos);
1861     ContinueJumpTarget = JumpTarget(EntryConditionBlock, ScopePos);
1862 
1863     CFGBlock *BodyBlock = addStmt(S->getBody());
1864 
1865     if (!BodyBlock)
1866       BodyBlock = EntryConditionBlock; // can happen for "for (X in Y) ;"
1867     else if (Block) {
1868       if (badCFG)
1869         return 0;
1870     }
1871 
1872     // This new body block is a successor to our "exit" condition block.
1873     addSuccessor(ExitConditionBlock, BodyBlock);
1874   }
1875 
1876   // Link up the condition block with the code that follows the loop.
1877   // (the false branch).
1878   addSuccessor(ExitConditionBlock, LoopSuccessor);
1879 
1880   // Now create a prologue block to contain the collection expression.
1881   Block = createBlock();
1882   return addStmt(S->getCollection());
1883 }
1884 
1885 CFGBlock *CFGBuilder::VisitObjCAtSynchronizedStmt(ObjCAtSynchronizedStmt *S) {
1886   // FIXME: Add locking 'primitives' to CFG for @synchronized.
1887 
1888   // Inline the body.
1889   CFGBlock *SyncBlock = addStmt(S->getSynchBody());
1890 
1891   // The sync body starts its own basic block.  This makes it a little easier
1892   // for diagnostic clients.
1893   if (SyncBlock) {
1894     if (badCFG)
1895       return 0;
1896 
1897     Block = 0;
1898     Succ = SyncBlock;
1899   }
1900 
1901   // Add the @synchronized to the CFG.
1902   autoCreateBlock();
1903   appendStmt(Block, S);
1904 
1905   // Inline the sync expression.
1906   return addStmt(S->getSynchExpr());
1907 }
1908 
1909 CFGBlock *CFGBuilder::VisitObjCAtTryStmt(ObjCAtTryStmt *S) {
1910   // FIXME
1911   return NYS();
1912 }
1913 
1914 CFGBlock *CFGBuilder::VisitPseudoObjectExpr(PseudoObjectExpr *E) {
1915   autoCreateBlock();
1916 
1917   // Add the PseudoObject as the last thing.
1918   appendStmt(Block, E);
1919 
1920   CFGBlock *lastBlock = Block;
1921 
1922   // Before that, evaluate all of the semantics in order.  In
1923   // CFG-land, that means appending them in reverse order.
1924   for (unsigned i = E->getNumSemanticExprs(); i != 0; ) {
1925     Expr *Semantic = E->getSemanticExpr(--i);
1926 
1927     // If the semantic is an opaque value, we're being asked to bind
1928     // it to its source expression.
1929     if (OpaqueValueExpr *OVE = dyn_cast<OpaqueValueExpr>(Semantic))
1930       Semantic = OVE->getSourceExpr();
1931 
1932     if (CFGBlock *B = Visit(Semantic))
1933       lastBlock = B;
1934   }
1935 
1936   return lastBlock;
1937 }
1938 
1939 CFGBlock *CFGBuilder::VisitWhileStmt(WhileStmt *W) {
1940   CFGBlock *LoopSuccessor = NULL;
1941 
1942   // Save local scope position because in case of condition variable ScopePos
1943   // won't be restored when traversing AST.
1944   SaveAndRestore<LocalScope::const_iterator> save_scope_pos(ScopePos);
1945 
1946   // Create local scope for possible condition variable.
1947   // Store scope position for continue statement.
1948   LocalScope::const_iterator LoopBeginScopePos = ScopePos;
1949   if (VarDecl *VD = W->getConditionVariable()) {
1950     addLocalScopeForVarDecl(VD);
1951     addAutomaticObjDtors(ScopePos, LoopBeginScopePos, W);
1952   }
1953 
1954   // "while" is a control-flow statement.  Thus we stop processing the current
1955   // block.
1956   if (Block) {
1957     if (badCFG)
1958       return 0;
1959     LoopSuccessor = Block;
1960     Block = 0;
1961   } else
1962     LoopSuccessor = Succ;
1963 
1964   // Because of short-circuit evaluation, the condition of the loop can span
1965   // multiple basic blocks.  Thus we need the "Entry" and "Exit" blocks that
1966   // evaluate the condition.
1967   CFGBlock *ExitConditionBlock = createBlock(false);
1968   CFGBlock *EntryConditionBlock = ExitConditionBlock;
1969 
1970   // Set the terminator for the "exit" condition block.
1971   ExitConditionBlock->setTerminator(W);
1972 
1973   // Now add the actual condition to the condition block.  Because the condition
1974   // itself may contain control-flow, new blocks may be created.  Thus we update
1975   // "Succ" after adding the condition.
1976   if (Stmt *C = W->getCond()) {
1977     Block = ExitConditionBlock;
1978     EntryConditionBlock = addStmt(C);
1979     // The condition might finish the current 'Block'.
1980     Block = EntryConditionBlock;
1981 
1982     // If this block contains a condition variable, add both the condition
1983     // variable and initializer to the CFG.
1984     if (VarDecl *VD = W->getConditionVariable()) {
1985       if (Expr *Init = VD->getInit()) {
1986         autoCreateBlock();
1987         appendStmt(Block, W->getConditionVariableDeclStmt());
1988         EntryConditionBlock = addStmt(Init);
1989         assert(Block == EntryConditionBlock);
1990       }
1991     }
1992 
1993     if (Block) {
1994       if (badCFG)
1995         return 0;
1996     }
1997   }
1998 
1999   // The condition block is the implicit successor for the loop body as well as
2000   // any code above the loop.
2001   Succ = EntryConditionBlock;
2002 
2003   // See if this is a known constant.
2004   const TryResult& KnownVal = tryEvaluateBool(W->getCond());
2005 
2006   // Process the loop body.
2007   {
2008     assert(W->getBody());
2009 
2010     // Save the current values for Block, Succ, and continue and break targets
2011     SaveAndRestore<CFGBlock*> save_Block(Block), save_Succ(Succ);
2012     SaveAndRestore<JumpTarget> save_continue(ContinueJumpTarget),
2013         save_break(BreakJumpTarget);
2014 
2015     // Create an empty block to represent the transition block for looping back
2016     // to the head of the loop.
2017     Block = 0;
2018     assert(Succ == EntryConditionBlock);
2019     Succ = createBlock();
2020     Succ->setLoopTarget(W);
2021     ContinueJumpTarget = JumpTarget(Succ, LoopBeginScopePos);
2022 
2023     // All breaks should go to the code following the loop.
2024     BreakJumpTarget = JumpTarget(LoopSuccessor, ScopePos);
2025 
2026     // NULL out Block to force lazy instantiation of blocks for the body.
2027     Block = NULL;
2028 
2029     // Loop body should end with destructor of Condition variable (if any).
2030     addAutomaticObjDtors(ScopePos, LoopBeginScopePos, W);
2031 
2032     // If body is not a compound statement create implicit scope
2033     // and add destructors.
2034     if (!isa<CompoundStmt>(W->getBody()))
2035       addLocalScopeAndDtors(W->getBody());
2036 
2037     // Create the body.  The returned block is the entry to the loop body.
2038     CFGBlock *BodyBlock = addStmt(W->getBody());
2039 
2040     if (!BodyBlock)
2041       BodyBlock = ContinueJumpTarget.block; // can happen for "while(...) ;"
2042     else if (Block) {
2043       if (badCFG)
2044         return 0;
2045     }
2046 
2047     // Add the loop body entry as a successor to the condition.
2048     addSuccessor(ExitConditionBlock, KnownVal.isFalse() ? NULL : BodyBlock);
2049   }
2050 
2051   // Link up the condition block with the code that follows the loop.  (the
2052   // false branch).
2053   addSuccessor(ExitConditionBlock, KnownVal.isTrue() ? NULL : LoopSuccessor);
2054 
2055   // There can be no more statements in the condition block since we loop back
2056   // to this block.  NULL out Block to force lazy creation of another block.
2057   Block = NULL;
2058 
2059   // Return the condition block, which is the dominating block for the loop.
2060   Succ = EntryConditionBlock;
2061   return EntryConditionBlock;
2062 }
2063 
2064 
2065 CFGBlock *CFGBuilder::VisitObjCAtCatchStmt(ObjCAtCatchStmt *S) {
2066   // FIXME: For now we pretend that @catch and the code it contains does not
2067   //  exit.
2068   return Block;
2069 }
2070 
2071 CFGBlock *CFGBuilder::VisitObjCAtThrowStmt(ObjCAtThrowStmt *S) {
2072   // FIXME: This isn't complete.  We basically treat @throw like a return
2073   //  statement.
2074 
2075   // If we were in the middle of a block we stop processing that block.
2076   if (badCFG)
2077     return 0;
2078 
2079   // Create the new block.
2080   Block = createBlock(false);
2081 
2082   // The Exit block is the only successor.
2083   addSuccessor(Block, &cfg->getExit());
2084 
2085   // Add the statement to the block.  This may create new blocks if S contains
2086   // control-flow (short-circuit operations).
2087   return VisitStmt(S, AddStmtChoice::AlwaysAdd);
2088 }
2089 
2090 CFGBlock *CFGBuilder::VisitCXXThrowExpr(CXXThrowExpr *T) {
2091   // If we were in the middle of a block we stop processing that block.
2092   if (badCFG)
2093     return 0;
2094 
2095   // Create the new block.
2096   Block = createBlock(false);
2097 
2098   if (TryTerminatedBlock)
2099     // The current try statement is the only successor.
2100     addSuccessor(Block, TryTerminatedBlock);
2101   else
2102     // otherwise the Exit block is the only successor.
2103     addSuccessor(Block, &cfg->getExit());
2104 
2105   // Add the statement to the block.  This may create new blocks if S contains
2106   // control-flow (short-circuit operations).
2107   return VisitStmt(T, AddStmtChoice::AlwaysAdd);
2108 }
2109 
2110 CFGBlock *CFGBuilder::VisitDoStmt(DoStmt *D) {
2111   CFGBlock *LoopSuccessor = NULL;
2112 
2113   // "do...while" is a control-flow statement.  Thus we stop processing the
2114   // current block.
2115   if (Block) {
2116     if (badCFG)
2117       return 0;
2118     LoopSuccessor = Block;
2119   } else
2120     LoopSuccessor = Succ;
2121 
2122   // Because of short-circuit evaluation, the condition of the loop can span
2123   // multiple basic blocks.  Thus we need the "Entry" and "Exit" blocks that
2124   // evaluate the condition.
2125   CFGBlock *ExitConditionBlock = createBlock(false);
2126   CFGBlock *EntryConditionBlock = ExitConditionBlock;
2127 
2128   // Set the terminator for the "exit" condition block.
2129   ExitConditionBlock->setTerminator(D);
2130 
2131   // Now add the actual condition to the condition block.  Because the condition
2132   // itself may contain control-flow, new blocks may be created.
2133   if (Stmt *C = D->getCond()) {
2134     Block = ExitConditionBlock;
2135     EntryConditionBlock = addStmt(C);
2136     if (Block) {
2137       if (badCFG)
2138         return 0;
2139     }
2140   }
2141 
2142   // The condition block is the implicit successor for the loop body.
2143   Succ = EntryConditionBlock;
2144 
2145   // See if this is a known constant.
2146   const TryResult &KnownVal = tryEvaluateBool(D->getCond());
2147 
2148   // Process the loop body.
2149   CFGBlock *BodyBlock = NULL;
2150   {
2151     assert(D->getBody());
2152 
2153     // Save the current values for Block, Succ, and continue and break targets
2154     SaveAndRestore<CFGBlock*> save_Block(Block), save_Succ(Succ);
2155     SaveAndRestore<JumpTarget> save_continue(ContinueJumpTarget),
2156         save_break(BreakJumpTarget);
2157 
2158     // All continues within this loop should go to the condition block
2159     ContinueJumpTarget = JumpTarget(EntryConditionBlock, ScopePos);
2160 
2161     // All breaks should go to the code following the loop.
2162     BreakJumpTarget = JumpTarget(LoopSuccessor, ScopePos);
2163 
2164     // NULL out Block to force lazy instantiation of blocks for the body.
2165     Block = NULL;
2166 
2167     // If body is not a compound statement create implicit scope
2168     // and add destructors.
2169     if (!isa<CompoundStmt>(D->getBody()))
2170       addLocalScopeAndDtors(D->getBody());
2171 
2172     // Create the body.  The returned block is the entry to the loop body.
2173     BodyBlock = addStmt(D->getBody());
2174 
2175     if (!BodyBlock)
2176       BodyBlock = EntryConditionBlock; // can happen for "do ; while(...)"
2177     else if (Block) {
2178       if (badCFG)
2179         return 0;
2180     }
2181 
2182     if (!KnownVal.isFalse()) {
2183       // Add an intermediate block between the BodyBlock and the
2184       // ExitConditionBlock to represent the "loop back" transition.  Create an
2185       // empty block to represent the transition block for looping back to the
2186       // head of the loop.
2187       // FIXME: Can we do this more efficiently without adding another block?
2188       Block = NULL;
2189       Succ = BodyBlock;
2190       CFGBlock *LoopBackBlock = createBlock();
2191       LoopBackBlock->setLoopTarget(D);
2192 
2193       // Add the loop body entry as a successor to the condition.
2194       addSuccessor(ExitConditionBlock, LoopBackBlock);
2195     }
2196     else
2197       addSuccessor(ExitConditionBlock, NULL);
2198   }
2199 
2200   // Link up the condition block with the code that follows the loop.
2201   // (the false branch).
2202   addSuccessor(ExitConditionBlock, KnownVal.isTrue() ? NULL : LoopSuccessor);
2203 
2204   // There can be no more statements in the body block(s) since we loop back to
2205   // the body.  NULL out Block to force lazy creation of another block.
2206   Block = NULL;
2207 
2208   // Return the loop body, which is the dominating block for the loop.
2209   Succ = BodyBlock;
2210   return BodyBlock;
2211 }
2212 
2213 CFGBlock *CFGBuilder::VisitContinueStmt(ContinueStmt *C) {
2214   // "continue" is a control-flow statement.  Thus we stop processing the
2215   // current block.
2216   if (badCFG)
2217     return 0;
2218 
2219   // Now create a new block that ends with the continue statement.
2220   Block = createBlock(false);
2221   Block->setTerminator(C);
2222 
2223   // If there is no target for the continue, then we are looking at an
2224   // incomplete AST.  This means the CFG cannot be constructed.
2225   if (ContinueJumpTarget.block) {
2226     addAutomaticObjDtors(ScopePos, ContinueJumpTarget.scopePosition, C);
2227     addSuccessor(Block, ContinueJumpTarget.block);
2228   } else
2229     badCFG = true;
2230 
2231   return Block;
2232 }
2233 
2234 CFGBlock *CFGBuilder::VisitUnaryExprOrTypeTraitExpr(UnaryExprOrTypeTraitExpr *E,
2235                                                     AddStmtChoice asc) {
2236 
2237   if (asc.alwaysAdd(*this, E)) {
2238     autoCreateBlock();
2239     appendStmt(Block, E);
2240   }
2241 
2242   // VLA types have expressions that must be evaluated.
2243   CFGBlock *lastBlock = Block;
2244 
2245   if (E->isArgumentType()) {
2246     for (const VariableArrayType *VA =FindVA(E->getArgumentType().getTypePtr());
2247          VA != 0; VA = FindVA(VA->getElementType().getTypePtr()))
2248       lastBlock = addStmt(VA->getSizeExpr());
2249   }
2250   return lastBlock;
2251 }
2252 
2253 /// VisitStmtExpr - Utility method to handle (nested) statement
2254 ///  expressions (a GCC extension).
2255 CFGBlock *CFGBuilder::VisitStmtExpr(StmtExpr *SE, AddStmtChoice asc) {
2256   if (asc.alwaysAdd(*this, SE)) {
2257     autoCreateBlock();
2258     appendStmt(Block, SE);
2259   }
2260   return VisitCompoundStmt(SE->getSubStmt());
2261 }
2262 
2263 CFGBlock *CFGBuilder::VisitSwitchStmt(SwitchStmt *Terminator) {
2264   // "switch" is a control-flow statement.  Thus we stop processing the current
2265   // block.
2266   CFGBlock *SwitchSuccessor = NULL;
2267 
2268   // Save local scope position because in case of condition variable ScopePos
2269   // won't be restored when traversing AST.
2270   SaveAndRestore<LocalScope::const_iterator> save_scope_pos(ScopePos);
2271 
2272   // Create local scope for possible condition variable.
2273   // Store scope position. Add implicit destructor.
2274   if (VarDecl *VD = Terminator->getConditionVariable()) {
2275     LocalScope::const_iterator SwitchBeginScopePos = ScopePos;
2276     addLocalScopeForVarDecl(VD);
2277     addAutomaticObjDtors(ScopePos, SwitchBeginScopePos, Terminator);
2278   }
2279 
2280   if (Block) {
2281     if (badCFG)
2282       return 0;
2283     SwitchSuccessor = Block;
2284   } else SwitchSuccessor = Succ;
2285 
2286   // Save the current "switch" context.
2287   SaveAndRestore<CFGBlock*> save_switch(SwitchTerminatedBlock),
2288                             save_default(DefaultCaseBlock);
2289   SaveAndRestore<JumpTarget> save_break(BreakJumpTarget);
2290 
2291   // Set the "default" case to be the block after the switch statement.  If the
2292   // switch statement contains a "default:", this value will be overwritten with
2293   // the block for that code.
2294   DefaultCaseBlock = SwitchSuccessor;
2295 
2296   // Create a new block that will contain the switch statement.
2297   SwitchTerminatedBlock = createBlock(false);
2298 
2299   // Now process the switch body.  The code after the switch is the implicit
2300   // successor.
2301   Succ = SwitchSuccessor;
2302   BreakJumpTarget = JumpTarget(SwitchSuccessor, ScopePos);
2303 
2304   // When visiting the body, the case statements should automatically get linked
2305   // up to the switch.  We also don't keep a pointer to the body, since all
2306   // control-flow from the switch goes to case/default statements.
2307   assert(Terminator->getBody() && "switch must contain a non-NULL body");
2308   Block = NULL;
2309 
2310   // For pruning unreachable case statements, save the current state
2311   // for tracking the condition value.
2312   SaveAndRestore<bool> save_switchExclusivelyCovered(switchExclusivelyCovered,
2313                                                      false);
2314 
2315   // Determine if the switch condition can be explicitly evaluated.
2316   assert(Terminator->getCond() && "switch condition must be non-NULL");
2317   Expr::EvalResult result;
2318   bool b = tryEvaluate(Terminator->getCond(), result);
2319   SaveAndRestore<Expr::EvalResult*> save_switchCond(switchCond,
2320                                                     b ? &result : 0);
2321 
2322   // If body is not a compound statement create implicit scope
2323   // and add destructors.
2324   if (!isa<CompoundStmt>(Terminator->getBody()))
2325     addLocalScopeAndDtors(Terminator->getBody());
2326 
2327   addStmt(Terminator->getBody());
2328   if (Block) {
2329     if (badCFG)
2330       return 0;
2331   }
2332 
2333   // If we have no "default:" case, the default transition is to the code
2334   // following the switch body.  Moreover, take into account if all the
2335   // cases of a switch are covered (e.g., switching on an enum value).
2336   addSuccessor(SwitchTerminatedBlock,
2337                switchExclusivelyCovered || Terminator->isAllEnumCasesCovered()
2338                ? 0 : DefaultCaseBlock);
2339 
2340   // Add the terminator and condition in the switch block.
2341   SwitchTerminatedBlock->setTerminator(Terminator);
2342   Block = SwitchTerminatedBlock;
2343   Block = addStmt(Terminator->getCond());
2344 
2345   // Finally, if the SwitchStmt contains a condition variable, add both the
2346   // SwitchStmt and the condition variable initialization to the CFG.
2347   if (VarDecl *VD = Terminator->getConditionVariable()) {
2348     if (Expr *Init = VD->getInit()) {
2349       autoCreateBlock();
2350       appendStmt(Block, Terminator->getConditionVariableDeclStmt());
2351       addStmt(Init);
2352     }
2353   }
2354 
2355   return Block;
2356 }
2357 
2358 static bool shouldAddCase(bool &switchExclusivelyCovered,
2359                           const Expr::EvalResult *switchCond,
2360                           const CaseStmt *CS,
2361                           ASTContext &Ctx) {
2362   if (!switchCond)
2363     return true;
2364 
2365   bool addCase = false;
2366 
2367   if (!switchExclusivelyCovered) {
2368     if (switchCond->Val.isInt()) {
2369       // Evaluate the LHS of the case value.
2370       const llvm::APSInt &lhsInt = CS->getLHS()->EvaluateKnownConstInt(Ctx);
2371       const llvm::APSInt &condInt = switchCond->Val.getInt();
2372 
2373       if (condInt == lhsInt) {
2374         addCase = true;
2375         switchExclusivelyCovered = true;
2376       }
2377       else if (condInt < lhsInt) {
2378         if (const Expr *RHS = CS->getRHS()) {
2379           // Evaluate the RHS of the case value.
2380           const llvm::APSInt &V2 = RHS->EvaluateKnownConstInt(Ctx);
2381           if (V2 <= condInt) {
2382             addCase = true;
2383             switchExclusivelyCovered = true;
2384           }
2385         }
2386       }
2387     }
2388     else
2389       addCase = true;
2390   }
2391   return addCase;
2392 }
2393 
2394 CFGBlock *CFGBuilder::VisitCaseStmt(CaseStmt *CS) {
2395   // CaseStmts are essentially labels, so they are the first statement in a
2396   // block.
2397   CFGBlock *TopBlock = 0, *LastBlock = 0;
2398 
2399   if (Stmt *Sub = CS->getSubStmt()) {
2400     // For deeply nested chains of CaseStmts, instead of doing a recursion
2401     // (which can blow out the stack), manually unroll and create blocks
2402     // along the way.
2403     while (isa<CaseStmt>(Sub)) {
2404       CFGBlock *currentBlock = createBlock(false);
2405       currentBlock->setLabel(CS);
2406 
2407       if (TopBlock)
2408         addSuccessor(LastBlock, currentBlock);
2409       else
2410         TopBlock = currentBlock;
2411 
2412       addSuccessor(SwitchTerminatedBlock,
2413                    shouldAddCase(switchExclusivelyCovered, switchCond,
2414                                  CS, *Context)
2415                    ? currentBlock : 0);
2416 
2417       LastBlock = currentBlock;
2418       CS = cast<CaseStmt>(Sub);
2419       Sub = CS->getSubStmt();
2420     }
2421 
2422     addStmt(Sub);
2423   }
2424 
2425   CFGBlock *CaseBlock = Block;
2426   if (!CaseBlock)
2427     CaseBlock = createBlock();
2428 
2429   // Cases statements partition blocks, so this is the top of the basic block we
2430   // were processing (the "case XXX:" is the label).
2431   CaseBlock->setLabel(CS);
2432 
2433   if (badCFG)
2434     return 0;
2435 
2436   // Add this block to the list of successors for the block with the switch
2437   // statement.
2438   assert(SwitchTerminatedBlock);
2439   addSuccessor(SwitchTerminatedBlock,
2440                shouldAddCase(switchExclusivelyCovered, switchCond,
2441                              CS, *Context)
2442                ? CaseBlock : 0);
2443 
2444   // We set Block to NULL to allow lazy creation of a new block (if necessary)
2445   Block = NULL;
2446 
2447   if (TopBlock) {
2448     addSuccessor(LastBlock, CaseBlock);
2449     Succ = TopBlock;
2450   } else {
2451     // This block is now the implicit successor of other blocks.
2452     Succ = CaseBlock;
2453   }
2454 
2455   return Succ;
2456 }
2457 
2458 CFGBlock *CFGBuilder::VisitDefaultStmt(DefaultStmt *Terminator) {
2459   if (Terminator->getSubStmt())
2460     addStmt(Terminator->getSubStmt());
2461 
2462   DefaultCaseBlock = Block;
2463 
2464   if (!DefaultCaseBlock)
2465     DefaultCaseBlock = createBlock();
2466 
2467   // Default statements partition blocks, so this is the top of the basic block
2468   // we were processing (the "default:" is the label).
2469   DefaultCaseBlock->setLabel(Terminator);
2470 
2471   if (badCFG)
2472     return 0;
2473 
2474   // Unlike case statements, we don't add the default block to the successors
2475   // for the switch statement immediately.  This is done when we finish
2476   // processing the switch statement.  This allows for the default case
2477   // (including a fall-through to the code after the switch statement) to always
2478   // be the last successor of a switch-terminated block.
2479 
2480   // We set Block to NULL to allow lazy creation of a new block (if necessary)
2481   Block = NULL;
2482 
2483   // This block is now the implicit successor of other blocks.
2484   Succ = DefaultCaseBlock;
2485 
2486   return DefaultCaseBlock;
2487 }
2488 
2489 CFGBlock *CFGBuilder::VisitCXXTryStmt(CXXTryStmt *Terminator) {
2490   // "try"/"catch" is a control-flow statement.  Thus we stop processing the
2491   // current block.
2492   CFGBlock *TrySuccessor = NULL;
2493 
2494   if (Block) {
2495     if (badCFG)
2496       return 0;
2497     TrySuccessor = Block;
2498   } else TrySuccessor = Succ;
2499 
2500   CFGBlock *PrevTryTerminatedBlock = TryTerminatedBlock;
2501 
2502   // Create a new block that will contain the try statement.
2503   CFGBlock *NewTryTerminatedBlock = createBlock(false);
2504   // Add the terminator in the try block.
2505   NewTryTerminatedBlock->setTerminator(Terminator);
2506 
2507   bool HasCatchAll = false;
2508   for (unsigned h = 0; h <Terminator->getNumHandlers(); ++h) {
2509     // The code after the try is the implicit successor.
2510     Succ = TrySuccessor;
2511     CXXCatchStmt *CS = Terminator->getHandler(h);
2512     if (CS->getExceptionDecl() == 0) {
2513       HasCatchAll = true;
2514     }
2515     Block = NULL;
2516     CFGBlock *CatchBlock = VisitCXXCatchStmt(CS);
2517     if (CatchBlock == 0)
2518       return 0;
2519     // Add this block to the list of successors for the block with the try
2520     // statement.
2521     addSuccessor(NewTryTerminatedBlock, CatchBlock);
2522   }
2523   if (!HasCatchAll) {
2524     if (PrevTryTerminatedBlock)
2525       addSuccessor(NewTryTerminatedBlock, PrevTryTerminatedBlock);
2526     else
2527       addSuccessor(NewTryTerminatedBlock, &cfg->getExit());
2528   }
2529 
2530   // The code after the try is the implicit successor.
2531   Succ = TrySuccessor;
2532 
2533   // Save the current "try" context.
2534   SaveAndRestore<CFGBlock*> save_try(TryTerminatedBlock, NewTryTerminatedBlock);
2535   cfg->addTryDispatchBlock(TryTerminatedBlock);
2536 
2537   assert(Terminator->getTryBlock() && "try must contain a non-NULL body");
2538   Block = NULL;
2539   Block = addStmt(Terminator->getTryBlock());
2540   return Block;
2541 }
2542 
2543 CFGBlock *CFGBuilder::VisitCXXCatchStmt(CXXCatchStmt *CS) {
2544   // CXXCatchStmt are treated like labels, so they are the first statement in a
2545   // block.
2546 
2547   // Save local scope position because in case of exception variable ScopePos
2548   // won't be restored when traversing AST.
2549   SaveAndRestore<LocalScope::const_iterator> save_scope_pos(ScopePos);
2550 
2551   // Create local scope for possible exception variable.
2552   // Store scope position. Add implicit destructor.
2553   if (VarDecl *VD = CS->getExceptionDecl()) {
2554     LocalScope::const_iterator BeginScopePos = ScopePos;
2555     addLocalScopeForVarDecl(VD);
2556     addAutomaticObjDtors(ScopePos, BeginScopePos, CS);
2557   }
2558 
2559   if (CS->getHandlerBlock())
2560     addStmt(CS->getHandlerBlock());
2561 
2562   CFGBlock *CatchBlock = Block;
2563   if (!CatchBlock)
2564     CatchBlock = createBlock();
2565 
2566   CatchBlock->setLabel(CS);
2567 
2568   if (badCFG)
2569     return 0;
2570 
2571   // We set Block to NULL to allow lazy creation of a new block (if necessary)
2572   Block = NULL;
2573 
2574   return CatchBlock;
2575 }
2576 
2577 CFGBlock *CFGBuilder::VisitCXXForRangeStmt(CXXForRangeStmt *S) {
2578   // C++0x for-range statements are specified as [stmt.ranged]:
2579   //
2580   // {
2581   //   auto && __range = range-init;
2582   //   for ( auto __begin = begin-expr,
2583   //         __end = end-expr;
2584   //         __begin != __end;
2585   //         ++__begin ) {
2586   //     for-range-declaration = *__begin;
2587   //     statement
2588   //   }
2589   // }
2590 
2591   // Save local scope position before the addition of the implicit variables.
2592   SaveAndRestore<LocalScope::const_iterator> save_scope_pos(ScopePos);
2593 
2594   // Create local scopes and destructors for range, begin and end variables.
2595   if (Stmt *Range = S->getRangeStmt())
2596     addLocalScopeForStmt(Range);
2597   if (Stmt *BeginEnd = S->getBeginEndStmt())
2598     addLocalScopeForStmt(BeginEnd);
2599   addAutomaticObjDtors(ScopePos, save_scope_pos.get(), S);
2600 
2601   LocalScope::const_iterator ContinueScopePos = ScopePos;
2602 
2603   // "for" is a control-flow statement.  Thus we stop processing the current
2604   // block.
2605   CFGBlock *LoopSuccessor = NULL;
2606   if (Block) {
2607     if (badCFG)
2608       return 0;
2609     LoopSuccessor = Block;
2610   } else
2611     LoopSuccessor = Succ;
2612 
2613   // Save the current value for the break targets.
2614   // All breaks should go to the code following the loop.
2615   SaveAndRestore<JumpTarget> save_break(BreakJumpTarget);
2616   BreakJumpTarget = JumpTarget(LoopSuccessor, ScopePos);
2617 
2618   // The block for the __begin != __end expression.
2619   CFGBlock *ConditionBlock = createBlock(false);
2620   ConditionBlock->setTerminator(S);
2621 
2622   // Now add the actual condition to the condition block.
2623   if (Expr *C = S->getCond()) {
2624     Block = ConditionBlock;
2625     CFGBlock *BeginConditionBlock = addStmt(C);
2626     if (badCFG)
2627       return 0;
2628     assert(BeginConditionBlock == ConditionBlock &&
2629            "condition block in for-range was unexpectedly complex");
2630     (void)BeginConditionBlock;
2631   }
2632 
2633   // The condition block is the implicit successor for the loop body as well as
2634   // any code above the loop.
2635   Succ = ConditionBlock;
2636 
2637   // See if this is a known constant.
2638   TryResult KnownVal(true);
2639 
2640   if (S->getCond())
2641     KnownVal = tryEvaluateBool(S->getCond());
2642 
2643   // Now create the loop body.
2644   {
2645     assert(S->getBody());
2646 
2647     // Save the current values for Block, Succ, and continue targets.
2648     SaveAndRestore<CFGBlock*> save_Block(Block), save_Succ(Succ);
2649     SaveAndRestore<JumpTarget> save_continue(ContinueJumpTarget);
2650 
2651     // Generate increment code in its own basic block.  This is the target of
2652     // continue statements.
2653     Block = 0;
2654     Succ = addStmt(S->getInc());
2655     ContinueJumpTarget = JumpTarget(Succ, ContinueScopePos);
2656 
2657     // The starting block for the loop increment is the block that should
2658     // represent the 'loop target' for looping back to the start of the loop.
2659     ContinueJumpTarget.block->setLoopTarget(S);
2660 
2661     // Finish up the increment block and prepare to start the loop body.
2662     assert(Block);
2663     if (badCFG)
2664       return 0;
2665     Block = 0;
2666 
2667 
2668     // Add implicit scope and dtors for loop variable.
2669     addLocalScopeAndDtors(S->getLoopVarStmt());
2670 
2671     // Populate a new block to contain the loop body and loop variable.
2672     Block = addStmt(S->getBody());
2673     if (badCFG)
2674       return 0;
2675     Block = addStmt(S->getLoopVarStmt());
2676     if (badCFG)
2677       return 0;
2678 
2679     // This new body block is a successor to our condition block.
2680     addSuccessor(ConditionBlock, KnownVal.isFalse() ? 0 : Block);
2681   }
2682 
2683   // Link up the condition block with the code that follows the loop (the
2684   // false branch).
2685   addSuccessor(ConditionBlock, KnownVal.isTrue() ? 0 : LoopSuccessor);
2686 
2687   // Add the initialization statements.
2688   Block = createBlock();
2689   addStmt(S->getBeginEndStmt());
2690   return addStmt(S->getRangeStmt());
2691 }
2692 
2693 CFGBlock *CFGBuilder::VisitExprWithCleanups(ExprWithCleanups *E,
2694     AddStmtChoice asc) {
2695   if (BuildOpts.AddImplicitDtors) {
2696     // If adding implicit destructors visit the full expression for adding
2697     // destructors of temporaries.
2698     VisitForTemporaryDtors(E->getSubExpr());
2699 
2700     // Full expression has to be added as CFGStmt so it will be sequenced
2701     // before destructors of it's temporaries.
2702     asc = asc.withAlwaysAdd(true);
2703   }
2704   return Visit(E->getSubExpr(), asc);
2705 }
2706 
2707 CFGBlock *CFGBuilder::VisitCXXBindTemporaryExpr(CXXBindTemporaryExpr *E,
2708                                                 AddStmtChoice asc) {
2709   if (asc.alwaysAdd(*this, E)) {
2710     autoCreateBlock();
2711     appendStmt(Block, E);
2712 
2713     // We do not want to propagate the AlwaysAdd property.
2714     asc = asc.withAlwaysAdd(false);
2715   }
2716   return Visit(E->getSubExpr(), asc);
2717 }
2718 
2719 CFGBlock *CFGBuilder::VisitCXXConstructExpr(CXXConstructExpr *C,
2720                                             AddStmtChoice asc) {
2721   autoCreateBlock();
2722   if (!C->isElidable())
2723     appendStmt(Block, C);
2724 
2725   return VisitChildren(C);
2726 }
2727 
2728 CFGBlock *CFGBuilder::VisitCXXFunctionalCastExpr(CXXFunctionalCastExpr *E,
2729                                                  AddStmtChoice asc) {
2730   if (asc.alwaysAdd(*this, E)) {
2731     autoCreateBlock();
2732     appendStmt(Block, E);
2733     // We do not want to propagate the AlwaysAdd property.
2734     asc = asc.withAlwaysAdd(false);
2735   }
2736   return Visit(E->getSubExpr(), asc);
2737 }
2738 
2739 CFGBlock *CFGBuilder::VisitCXXTemporaryObjectExpr(CXXTemporaryObjectExpr *C,
2740                                                   AddStmtChoice asc) {
2741   autoCreateBlock();
2742   appendStmt(Block, C);
2743   return VisitChildren(C);
2744 }
2745 
2746 CFGBlock *CFGBuilder::VisitImplicitCastExpr(ImplicitCastExpr *E,
2747                                             AddStmtChoice asc) {
2748   if (asc.alwaysAdd(*this, E)) {
2749     autoCreateBlock();
2750     appendStmt(Block, E);
2751   }
2752   return Visit(E->getSubExpr(), AddStmtChoice());
2753 }
2754 
2755 CFGBlock *CFGBuilder::VisitIndirectGotoStmt(IndirectGotoStmt *I) {
2756   // Lazily create the indirect-goto dispatch block if there isn't one already.
2757   CFGBlock *IBlock = cfg->getIndirectGotoBlock();
2758 
2759   if (!IBlock) {
2760     IBlock = createBlock(false);
2761     cfg->setIndirectGotoBlock(IBlock);
2762   }
2763 
2764   // IndirectGoto is a control-flow statement.  Thus we stop processing the
2765   // current block and create a new one.
2766   if (badCFG)
2767     return 0;
2768 
2769   Block = createBlock(false);
2770   Block->setTerminator(I);
2771   addSuccessor(Block, IBlock);
2772   return addStmt(I->getTarget());
2773 }
2774 
2775 CFGBlock *CFGBuilder::VisitForTemporaryDtors(Stmt *E, bool BindToTemporary) {
2776 tryAgain:
2777   if (!E) {
2778     badCFG = true;
2779     return NULL;
2780   }
2781   switch (E->getStmtClass()) {
2782     default:
2783       return VisitChildrenForTemporaryDtors(E);
2784 
2785     case Stmt::BinaryOperatorClass:
2786       return VisitBinaryOperatorForTemporaryDtors(cast<BinaryOperator>(E));
2787 
2788     case Stmt::CXXBindTemporaryExprClass:
2789       return VisitCXXBindTemporaryExprForTemporaryDtors(
2790           cast<CXXBindTemporaryExpr>(E), BindToTemporary);
2791 
2792     case Stmt::BinaryConditionalOperatorClass:
2793     case Stmt::ConditionalOperatorClass:
2794       return VisitConditionalOperatorForTemporaryDtors(
2795           cast<AbstractConditionalOperator>(E), BindToTemporary);
2796 
2797     case Stmt::ImplicitCastExprClass:
2798       // For implicit cast we want BindToTemporary to be passed further.
2799       E = cast<CastExpr>(E)->getSubExpr();
2800       goto tryAgain;
2801 
2802     case Stmt::ParenExprClass:
2803       E = cast<ParenExpr>(E)->getSubExpr();
2804       goto tryAgain;
2805 
2806     case Stmt::MaterializeTemporaryExprClass:
2807       E = cast<MaterializeTemporaryExpr>(E)->GetTemporaryExpr();
2808       goto tryAgain;
2809   }
2810 }
2811 
2812 CFGBlock *CFGBuilder::VisitChildrenForTemporaryDtors(Stmt *E) {
2813   // When visiting children for destructors we want to visit them in reverse
2814   // order. Because there's no reverse iterator for children must to reverse
2815   // them in helper vector.
2816   typedef SmallVector<Stmt *, 4> ChildrenVect;
2817   ChildrenVect ChildrenRev;
2818   for (Stmt::child_range I = E->children(); I; ++I) {
2819     if (*I) ChildrenRev.push_back(*I);
2820   }
2821 
2822   CFGBlock *B = Block;
2823   for (ChildrenVect::reverse_iterator I = ChildrenRev.rbegin(),
2824       L = ChildrenRev.rend(); I != L; ++I) {
2825     if (CFGBlock *R = VisitForTemporaryDtors(*I))
2826       B = R;
2827   }
2828   return B;
2829 }
2830 
2831 CFGBlock *CFGBuilder::VisitBinaryOperatorForTemporaryDtors(BinaryOperator *E) {
2832   if (E->isLogicalOp()) {
2833     // Destructors for temporaries in LHS expression should be called after
2834     // those for RHS expression. Even if this will unnecessarily create a block,
2835     // this block will be used at least by the full expression.
2836     autoCreateBlock();
2837     CFGBlock *ConfluenceBlock = VisitForTemporaryDtors(E->getLHS());
2838     if (badCFG)
2839       return NULL;
2840 
2841     Succ = ConfluenceBlock;
2842     Block = NULL;
2843     CFGBlock *RHSBlock = VisitForTemporaryDtors(E->getRHS());
2844 
2845     if (RHSBlock) {
2846       if (badCFG)
2847         return NULL;
2848 
2849       // If RHS expression did produce destructors we need to connect created
2850       // blocks to CFG in same manner as for binary operator itself.
2851       CFGBlock *LHSBlock = createBlock(false);
2852       LHSBlock->setTerminator(CFGTerminator(E, true));
2853 
2854       // For binary operator LHS block is before RHS in list of predecessors
2855       // of ConfluenceBlock.
2856       std::reverse(ConfluenceBlock->pred_begin(),
2857           ConfluenceBlock->pred_end());
2858 
2859       // See if this is a known constant.
2860       TryResult KnownVal = tryEvaluateBool(E->getLHS());
2861       if (KnownVal.isKnown() && (E->getOpcode() == BO_LOr))
2862         KnownVal.negate();
2863 
2864       // Link LHSBlock with RHSBlock exactly the same way as for binary operator
2865       // itself.
2866       if (E->getOpcode() == BO_LOr) {
2867         addSuccessor(LHSBlock, KnownVal.isTrue() ? NULL : ConfluenceBlock);
2868         addSuccessor(LHSBlock, KnownVal.isFalse() ? NULL : RHSBlock);
2869       } else {
2870         assert (E->getOpcode() == BO_LAnd);
2871         addSuccessor(LHSBlock, KnownVal.isFalse() ? NULL : RHSBlock);
2872         addSuccessor(LHSBlock, KnownVal.isTrue() ? NULL : ConfluenceBlock);
2873       }
2874 
2875       Block = LHSBlock;
2876       return LHSBlock;
2877     }
2878 
2879     Block = ConfluenceBlock;
2880     return ConfluenceBlock;
2881   }
2882 
2883   if (E->isAssignmentOp()) {
2884     // For assignment operator (=) LHS expression is visited
2885     // before RHS expression. For destructors visit them in reverse order.
2886     CFGBlock *RHSBlock = VisitForTemporaryDtors(E->getRHS());
2887     CFGBlock *LHSBlock = VisitForTemporaryDtors(E->getLHS());
2888     return LHSBlock ? LHSBlock : RHSBlock;
2889   }
2890 
2891   // For any other binary operator RHS expression is visited before
2892   // LHS expression (order of children). For destructors visit them in reverse
2893   // order.
2894   CFGBlock *LHSBlock = VisitForTemporaryDtors(E->getLHS());
2895   CFGBlock *RHSBlock = VisitForTemporaryDtors(E->getRHS());
2896   return RHSBlock ? RHSBlock : LHSBlock;
2897 }
2898 
2899 CFGBlock *CFGBuilder::VisitCXXBindTemporaryExprForTemporaryDtors(
2900     CXXBindTemporaryExpr *E, bool BindToTemporary) {
2901   // First add destructors for temporaries in subexpression.
2902   CFGBlock *B = VisitForTemporaryDtors(E->getSubExpr());
2903   if (!BindToTemporary) {
2904     // If lifetime of temporary is not prolonged (by assigning to constant
2905     // reference) add destructor for it.
2906 
2907     // If the destructor is marked as a no-return destructor, we need to create
2908     // a new block for the destructor which does not have as a successor
2909     // anything built thus far. Control won't flow out of this block.
2910     const CXXDestructorDecl *Dtor = E->getTemporary()->getDestructor();
2911     if (cast<FunctionType>(Dtor->getType())->getNoReturnAttr())
2912       Block = createNoReturnBlock();
2913     else
2914       autoCreateBlock();
2915 
2916     appendTemporaryDtor(Block, E);
2917     B = Block;
2918   }
2919   return B;
2920 }
2921 
2922 CFGBlock *CFGBuilder::VisitConditionalOperatorForTemporaryDtors(
2923     AbstractConditionalOperator *E, bool BindToTemporary) {
2924   // First add destructors for condition expression.  Even if this will
2925   // unnecessarily create a block, this block will be used at least by the full
2926   // expression.
2927   autoCreateBlock();
2928   CFGBlock *ConfluenceBlock = VisitForTemporaryDtors(E->getCond());
2929   if (badCFG)
2930     return NULL;
2931   if (BinaryConditionalOperator *BCO
2932         = dyn_cast<BinaryConditionalOperator>(E)) {
2933     ConfluenceBlock = VisitForTemporaryDtors(BCO->getCommon());
2934     if (badCFG)
2935       return NULL;
2936   }
2937 
2938   // Try to add block with destructors for LHS expression.
2939   CFGBlock *LHSBlock = NULL;
2940   Succ = ConfluenceBlock;
2941   Block = NULL;
2942   LHSBlock = VisitForTemporaryDtors(E->getTrueExpr(), BindToTemporary);
2943   if (badCFG)
2944     return NULL;
2945 
2946   // Try to add block with destructors for RHS expression;
2947   Succ = ConfluenceBlock;
2948   Block = NULL;
2949   CFGBlock *RHSBlock = VisitForTemporaryDtors(E->getFalseExpr(),
2950                                               BindToTemporary);
2951   if (badCFG)
2952     return NULL;
2953 
2954   if (!RHSBlock && !LHSBlock) {
2955     // If neither LHS nor RHS expression had temporaries to destroy don't create
2956     // more blocks.
2957     Block = ConfluenceBlock;
2958     return Block;
2959   }
2960 
2961   Block = createBlock(false);
2962   Block->setTerminator(CFGTerminator(E, true));
2963 
2964   // See if this is a known constant.
2965   const TryResult &KnownVal = tryEvaluateBool(E->getCond());
2966 
2967   if (LHSBlock) {
2968     addSuccessor(Block, KnownVal.isFalse() ? NULL : LHSBlock);
2969   } else if (KnownVal.isFalse()) {
2970     addSuccessor(Block, NULL);
2971   } else {
2972     addSuccessor(Block, ConfluenceBlock);
2973     std::reverse(ConfluenceBlock->pred_begin(), ConfluenceBlock->pred_end());
2974   }
2975 
2976   if (!RHSBlock)
2977     RHSBlock = ConfluenceBlock;
2978   addSuccessor(Block, KnownVal.isTrue() ? NULL : RHSBlock);
2979 
2980   return Block;
2981 }
2982 
2983 } // end anonymous namespace
2984 
2985 /// createBlock - Constructs and adds a new CFGBlock to the CFG.  The block has
2986 ///  no successors or predecessors.  If this is the first block created in the
2987 ///  CFG, it is automatically set to be the Entry and Exit of the CFG.
2988 CFGBlock *CFG::createBlock() {
2989   bool first_block = begin() == end();
2990 
2991   // Create the block.
2992   CFGBlock *Mem = getAllocator().Allocate<CFGBlock>();
2993   new (Mem) CFGBlock(NumBlockIDs++, BlkBVC);
2994   Blocks.push_back(Mem, BlkBVC);
2995 
2996   // If this is the first block, set it as the Entry and Exit.
2997   if (first_block)
2998     Entry = Exit = &back();
2999 
3000   // Return the block.
3001   return &back();
3002 }
3003 
3004 /// buildCFG - Constructs a CFG from an AST.  Ownership of the returned
3005 ///  CFG is returned to the caller.
3006 CFG* CFG::buildCFG(const Decl *D, Stmt *Statement, ASTContext *C,
3007     const BuildOptions &BO) {
3008   CFGBuilder Builder(C, BO);
3009   return Builder.buildCFG(D, Statement);
3010 }
3011 
3012 const CXXDestructorDecl *
3013 CFGImplicitDtor::getDestructorDecl(ASTContext &astContext) const {
3014   switch (getKind()) {
3015     case CFGElement::Invalid:
3016     case CFGElement::Statement:
3017     case CFGElement::Initializer:
3018       llvm_unreachable("getDestructorDecl should only be used with "
3019                        "ImplicitDtors");
3020     case CFGElement::AutomaticObjectDtor: {
3021       const VarDecl *var = cast<CFGAutomaticObjDtor>(this)->getVarDecl();
3022       QualType ty = var->getType();
3023       ty = ty.getNonReferenceType();
3024       if (const ArrayType *arrayType = astContext.getAsArrayType(ty)) {
3025         ty = arrayType->getElementType();
3026       }
3027       const RecordType *recordType = ty->getAs<RecordType>();
3028       const CXXRecordDecl *classDecl =
3029       cast<CXXRecordDecl>(recordType->getDecl());
3030       return classDecl->getDestructor();
3031     }
3032     case CFGElement::TemporaryDtor: {
3033       const CXXBindTemporaryExpr *bindExpr =
3034         cast<CFGTemporaryDtor>(this)->getBindTemporaryExpr();
3035       const CXXTemporary *temp = bindExpr->getTemporary();
3036       return temp->getDestructor();
3037     }
3038     case CFGElement::BaseDtor:
3039     case CFGElement::MemberDtor:
3040 
3041       // Not yet supported.
3042       return 0;
3043   }
3044   llvm_unreachable("getKind() returned bogus value");
3045   return 0;
3046 }
3047 
3048 bool CFGImplicitDtor::isNoReturn(ASTContext &astContext) const {
3049   if (const CXXDestructorDecl *cdecl = getDestructorDecl(astContext)) {
3050     QualType ty = cdecl->getType();
3051     return cast<FunctionType>(ty)->getNoReturnAttr();
3052   }
3053   return false;
3054 }
3055 
3056 //===----------------------------------------------------------------------===//
3057 // CFG: Queries for BlkExprs.
3058 //===----------------------------------------------------------------------===//
3059 
3060 namespace {
3061   typedef llvm::DenseMap<const Stmt*,unsigned> BlkExprMapTy;
3062 }
3063 
3064 static void FindSubExprAssignments(const Stmt *S,
3065                                    llvm::SmallPtrSet<const Expr*,50>& Set) {
3066   if (!S)
3067     return;
3068 
3069   for (Stmt::const_child_range I = S->children(); I; ++I) {
3070     const Stmt *child = *I;
3071     if (!child)
3072       continue;
3073 
3074     if (const BinaryOperator* B = dyn_cast<BinaryOperator>(child))
3075       if (B->isAssignmentOp()) Set.insert(B);
3076 
3077     FindSubExprAssignments(child, Set);
3078   }
3079 }
3080 
3081 static BlkExprMapTy* PopulateBlkExprMap(CFG& cfg) {
3082   BlkExprMapTy* M = new BlkExprMapTy();
3083 
3084   // Look for assignments that are used as subexpressions.  These are the only
3085   // assignments that we want to *possibly* register as a block-level
3086   // expression.  Basically, if an assignment occurs both in a subexpression and
3087   // at the block-level, it is a block-level expression.
3088   llvm::SmallPtrSet<const Expr*,50> SubExprAssignments;
3089 
3090   for (CFG::iterator I=cfg.begin(), E=cfg.end(); I != E; ++I)
3091     for (CFGBlock::iterator BI=(*I)->begin(), EI=(*I)->end(); BI != EI; ++BI)
3092       if (const CFGStmt *S = BI->getAs<CFGStmt>())
3093         FindSubExprAssignments(S->getStmt(), SubExprAssignments);
3094 
3095   for (CFG::iterator I=cfg.begin(), E=cfg.end(); I != E; ++I) {
3096 
3097     // Iterate over the statements again on identify the Expr* and Stmt* at the
3098     // block-level that are block-level expressions.
3099 
3100     for (CFGBlock::iterator BI=(*I)->begin(), EI=(*I)->end(); BI != EI; ++BI) {
3101       const CFGStmt *CS = BI->getAs<CFGStmt>();
3102       if (!CS)
3103         continue;
3104       if (const Expr *Exp = dyn_cast<Expr>(CS->getStmt())) {
3105         assert((Exp->IgnoreParens() == Exp) && "No parens on block-level exps");
3106 
3107         if (const BinaryOperator* B = dyn_cast<BinaryOperator>(Exp)) {
3108           // Assignment expressions that are not nested within another
3109           // expression are really "statements" whose value is never used by
3110           // another expression.
3111           if (B->isAssignmentOp() && !SubExprAssignments.count(Exp))
3112             continue;
3113         } else if (const StmtExpr *SE = dyn_cast<StmtExpr>(Exp)) {
3114           // Special handling for statement expressions.  The last statement in
3115           // the statement expression is also a block-level expr.
3116           const CompoundStmt *C = SE->getSubStmt();
3117           if (!C->body_empty()) {
3118             const Stmt *Last = C->body_back();
3119             if (const Expr *LastEx = dyn_cast<Expr>(Last))
3120               Last = LastEx->IgnoreParens();
3121             unsigned x = M->size();
3122             (*M)[Last] = x;
3123           }
3124         }
3125 
3126         unsigned x = M->size();
3127         (*M)[Exp] = x;
3128       }
3129     }
3130 
3131     // Look at terminators.  The condition is a block-level expression.
3132 
3133     Stmt *S = (*I)->getTerminatorCondition();
3134 
3135     if (S && M->find(S) == M->end()) {
3136       unsigned x = M->size();
3137       (*M)[S] = x;
3138     }
3139   }
3140 
3141   return M;
3142 }
3143 
3144 CFG::BlkExprNumTy CFG::getBlkExprNum(const Stmt *S) {
3145   assert(S != NULL);
3146   if (!BlkExprMap) { BlkExprMap = (void*) PopulateBlkExprMap(*this); }
3147 
3148   BlkExprMapTy* M = reinterpret_cast<BlkExprMapTy*>(BlkExprMap);
3149   BlkExprMapTy::iterator I = M->find(S);
3150   return (I == M->end()) ? CFG::BlkExprNumTy() : CFG::BlkExprNumTy(I->second);
3151 }
3152 
3153 unsigned CFG::getNumBlkExprs() {
3154   if (const BlkExprMapTy* M = reinterpret_cast<const BlkExprMapTy*>(BlkExprMap))
3155     return M->size();
3156 
3157   // We assume callers interested in the number of BlkExprs will want
3158   // the map constructed if it doesn't already exist.
3159   BlkExprMap = (void*) PopulateBlkExprMap(*this);
3160   return reinterpret_cast<BlkExprMapTy*>(BlkExprMap)->size();
3161 }
3162 
3163 //===----------------------------------------------------------------------===//
3164 // Filtered walking of the CFG.
3165 //===----------------------------------------------------------------------===//
3166 
3167 bool CFGBlock::FilterEdge(const CFGBlock::FilterOptions &F,
3168         const CFGBlock *From, const CFGBlock *To) {
3169 
3170   if (To && F.IgnoreDefaultsWithCoveredEnums) {
3171     // If the 'To' has no label or is labeled but the label isn't a
3172     // CaseStmt then filter this edge.
3173     if (const SwitchStmt *S =
3174         dyn_cast_or_null<SwitchStmt>(From->getTerminator().getStmt())) {
3175       if (S->isAllEnumCasesCovered()) {
3176         const Stmt *L = To->getLabel();
3177         if (!L || !isa<CaseStmt>(L))
3178           return true;
3179       }
3180     }
3181   }
3182 
3183   return false;
3184 }
3185 
3186 //===----------------------------------------------------------------------===//
3187 // Cleanup: CFG dstor.
3188 //===----------------------------------------------------------------------===//
3189 
3190 CFG::~CFG() {
3191   delete reinterpret_cast<const BlkExprMapTy*>(BlkExprMap);
3192 }
3193 
3194 //===----------------------------------------------------------------------===//
3195 // CFG pretty printing
3196 //===----------------------------------------------------------------------===//
3197 
3198 namespace {
3199 
3200 class StmtPrinterHelper : public PrinterHelper  {
3201   typedef llvm::DenseMap<const Stmt*,std::pair<unsigned,unsigned> > StmtMapTy;
3202   typedef llvm::DenseMap<const Decl*,std::pair<unsigned,unsigned> > DeclMapTy;
3203   StmtMapTy StmtMap;
3204   DeclMapTy DeclMap;
3205   signed currentBlock;
3206   unsigned currentStmt;
3207   const LangOptions &LangOpts;
3208 public:
3209 
3210   StmtPrinterHelper(const CFG* cfg, const LangOptions &LO)
3211     : currentBlock(0), currentStmt(0), LangOpts(LO)
3212   {
3213     for (CFG::const_iterator I = cfg->begin(), E = cfg->end(); I != E; ++I ) {
3214       unsigned j = 1;
3215       for (CFGBlock::const_iterator BI = (*I)->begin(), BEnd = (*I)->end() ;
3216            BI != BEnd; ++BI, ++j ) {
3217         if (const CFGStmt *SE = BI->getAs<CFGStmt>()) {
3218           const Stmt *stmt= SE->getStmt();
3219           std::pair<unsigned, unsigned> P((*I)->getBlockID(), j);
3220           StmtMap[stmt] = P;
3221 
3222           switch (stmt->getStmtClass()) {
3223             case Stmt::DeclStmtClass:
3224                 DeclMap[cast<DeclStmt>(stmt)->getSingleDecl()] = P;
3225                 break;
3226             case Stmt::IfStmtClass: {
3227               const VarDecl *var = cast<IfStmt>(stmt)->getConditionVariable();
3228               if (var)
3229                 DeclMap[var] = P;
3230               break;
3231             }
3232             case Stmt::ForStmtClass: {
3233               const VarDecl *var = cast<ForStmt>(stmt)->getConditionVariable();
3234               if (var)
3235                 DeclMap[var] = P;
3236               break;
3237             }
3238             case Stmt::WhileStmtClass: {
3239               const VarDecl *var =
3240                 cast<WhileStmt>(stmt)->getConditionVariable();
3241               if (var)
3242                 DeclMap[var] = P;
3243               break;
3244             }
3245             case Stmt::SwitchStmtClass: {
3246               const VarDecl *var =
3247                 cast<SwitchStmt>(stmt)->getConditionVariable();
3248               if (var)
3249                 DeclMap[var] = P;
3250               break;
3251             }
3252             case Stmt::CXXCatchStmtClass: {
3253               const VarDecl *var =
3254                 cast<CXXCatchStmt>(stmt)->getExceptionDecl();
3255               if (var)
3256                 DeclMap[var] = P;
3257               break;
3258             }
3259             default:
3260               break;
3261           }
3262         }
3263       }
3264     }
3265   }
3266 
3267 
3268   virtual ~StmtPrinterHelper() {}
3269 
3270   const LangOptions &getLangOpts() const { return LangOpts; }
3271   void setBlockID(signed i) { currentBlock = i; }
3272   void setStmtID(unsigned i) { currentStmt = i; }
3273 
3274   virtual bool handledStmt(Stmt *S, raw_ostream &OS) {
3275     StmtMapTy::iterator I = StmtMap.find(S);
3276 
3277     if (I == StmtMap.end())
3278       return false;
3279 
3280     if (currentBlock >= 0 && I->second.first == (unsigned) currentBlock
3281                           && I->second.second == currentStmt) {
3282       return false;
3283     }
3284 
3285     OS << "[B" << I->second.first << "." << I->second.second << "]";
3286     return true;
3287   }
3288 
3289   bool handleDecl(const Decl *D, raw_ostream &OS) {
3290     DeclMapTy::iterator I = DeclMap.find(D);
3291 
3292     if (I == DeclMap.end())
3293       return false;
3294 
3295     if (currentBlock >= 0 && I->second.first == (unsigned) currentBlock
3296                           && I->second.second == currentStmt) {
3297       return false;
3298     }
3299 
3300     OS << "[B" << I->second.first << "." << I->second.second << "]";
3301     return true;
3302   }
3303 };
3304 } // end anonymous namespace
3305 
3306 
3307 namespace {
3308 class CFGBlockTerminatorPrint
3309   : public StmtVisitor<CFGBlockTerminatorPrint,void> {
3310 
3311   raw_ostream &OS;
3312   StmtPrinterHelper* Helper;
3313   PrintingPolicy Policy;
3314 public:
3315   CFGBlockTerminatorPrint(raw_ostream &os, StmtPrinterHelper* helper,
3316                           const PrintingPolicy &Policy)
3317     : OS(os), Helper(helper), Policy(Policy) {}
3318 
3319   void VisitIfStmt(IfStmt *I) {
3320     OS << "if ";
3321     I->getCond()->printPretty(OS,Helper,Policy);
3322   }
3323 
3324   // Default case.
3325   void VisitStmt(Stmt *Terminator) {
3326     Terminator->printPretty(OS, Helper, Policy);
3327   }
3328 
3329   void VisitForStmt(ForStmt *F) {
3330     OS << "for (" ;
3331     if (F->getInit())
3332       OS << "...";
3333     OS << "; ";
3334     if (Stmt *C = F->getCond())
3335       C->printPretty(OS, Helper, Policy);
3336     OS << "; ";
3337     if (F->getInc())
3338       OS << "...";
3339     OS << ")";
3340   }
3341 
3342   void VisitWhileStmt(WhileStmt *W) {
3343     OS << "while " ;
3344     if (Stmt *C = W->getCond())
3345       C->printPretty(OS, Helper, Policy);
3346   }
3347 
3348   void VisitDoStmt(DoStmt *D) {
3349     OS << "do ... while ";
3350     if (Stmt *C = D->getCond())
3351       C->printPretty(OS, Helper, Policy);
3352   }
3353 
3354   void VisitSwitchStmt(SwitchStmt *Terminator) {
3355     OS << "switch ";
3356     Terminator->getCond()->printPretty(OS, Helper, Policy);
3357   }
3358 
3359   void VisitCXXTryStmt(CXXTryStmt *CS) {
3360     OS << "try ...";
3361   }
3362 
3363   void VisitAbstractConditionalOperator(AbstractConditionalOperator* C) {
3364     C->getCond()->printPretty(OS, Helper, Policy);
3365     OS << " ? ... : ...";
3366   }
3367 
3368   void VisitChooseExpr(ChooseExpr *C) {
3369     OS << "__builtin_choose_expr( ";
3370     C->getCond()->printPretty(OS, Helper, Policy);
3371     OS << " )";
3372   }
3373 
3374   void VisitIndirectGotoStmt(IndirectGotoStmt *I) {
3375     OS << "goto *";
3376     I->getTarget()->printPretty(OS, Helper, Policy);
3377   }
3378 
3379   void VisitBinaryOperator(BinaryOperator* B) {
3380     if (!B->isLogicalOp()) {
3381       VisitExpr(B);
3382       return;
3383     }
3384 
3385     B->getLHS()->printPretty(OS, Helper, Policy);
3386 
3387     switch (B->getOpcode()) {
3388       case BO_LOr:
3389         OS << " || ...";
3390         return;
3391       case BO_LAnd:
3392         OS << " && ...";
3393         return;
3394       default:
3395         llvm_unreachable("Invalid logical operator.");
3396     }
3397   }
3398 
3399   void VisitExpr(Expr *E) {
3400     E->printPretty(OS, Helper, Policy);
3401   }
3402 };
3403 } // end anonymous namespace
3404 
3405 static void print_elem(raw_ostream &OS, StmtPrinterHelper* Helper,
3406                        const CFGElement &E) {
3407   if (const CFGStmt *CS = E.getAs<CFGStmt>()) {
3408     const Stmt *S = CS->getStmt();
3409 
3410     if (Helper) {
3411 
3412       // special printing for statement-expressions.
3413       if (const StmtExpr *SE = dyn_cast<StmtExpr>(S)) {
3414         const CompoundStmt *Sub = SE->getSubStmt();
3415 
3416         if (Sub->children()) {
3417           OS << "({ ... ; ";
3418           Helper->handledStmt(*SE->getSubStmt()->body_rbegin(),OS);
3419           OS << " })\n";
3420           return;
3421         }
3422       }
3423       // special printing for comma expressions.
3424       if (const BinaryOperator* B = dyn_cast<BinaryOperator>(S)) {
3425         if (B->getOpcode() == BO_Comma) {
3426           OS << "... , ";
3427           Helper->handledStmt(B->getRHS(),OS);
3428           OS << '\n';
3429           return;
3430         }
3431       }
3432     }
3433     S->printPretty(OS, Helper, PrintingPolicy(Helper->getLangOpts()));
3434 
3435     if (isa<CXXOperatorCallExpr>(S)) {
3436       OS << " (OperatorCall)";
3437     } else if (isa<CXXBindTemporaryExpr>(S)) {
3438       OS << " (BindTemporary)";
3439     }
3440 
3441     // Expressions need a newline.
3442     if (isa<Expr>(S))
3443       OS << '\n';
3444 
3445   } else if (const CFGInitializer *IE = E.getAs<CFGInitializer>()) {
3446     const CXXCtorInitializer *I = IE->getInitializer();
3447     if (I->isBaseInitializer())
3448       OS << I->getBaseClass()->getAsCXXRecordDecl()->getName();
3449     else OS << I->getAnyMember()->getName();
3450 
3451     OS << "(";
3452     if (Expr *IE = I->getInit())
3453       IE->printPretty(OS, Helper, PrintingPolicy(Helper->getLangOpts()));
3454     OS << ")";
3455 
3456     if (I->isBaseInitializer())
3457       OS << " (Base initializer)\n";
3458     else OS << " (Member initializer)\n";
3459 
3460   } else if (const CFGAutomaticObjDtor *DE = E.getAs<CFGAutomaticObjDtor>()){
3461     const VarDecl *VD = DE->getVarDecl();
3462     Helper->handleDecl(VD, OS);
3463 
3464     const Type* T = VD->getType().getTypePtr();
3465     if (const ReferenceType* RT = T->getAs<ReferenceType>())
3466       T = RT->getPointeeType().getTypePtr();
3467     else if (const Type *ET = T->getArrayElementTypeNoTypeQual())
3468       T = ET;
3469 
3470     OS << ".~" << T->getAsCXXRecordDecl()->getName().str() << "()";
3471     OS << " (Implicit destructor)\n";
3472 
3473   } else if (const CFGBaseDtor *BE = E.getAs<CFGBaseDtor>()) {
3474     const CXXBaseSpecifier *BS = BE->getBaseSpecifier();
3475     OS << "~" << BS->getType()->getAsCXXRecordDecl()->getName() << "()";
3476     OS << " (Base object destructor)\n";
3477 
3478   } else if (const CFGMemberDtor *ME = E.getAs<CFGMemberDtor>()) {
3479     const FieldDecl *FD = ME->getFieldDecl();
3480 
3481     const Type *T = FD->getType().getTypePtr();
3482     if (const Type *ET = T->getArrayElementTypeNoTypeQual())
3483       T = ET;
3484 
3485     OS << "this->" << FD->getName();
3486     OS << ".~" << T->getAsCXXRecordDecl()->getName() << "()";
3487     OS << " (Member object destructor)\n";
3488 
3489   } else if (const CFGTemporaryDtor *TE = E.getAs<CFGTemporaryDtor>()) {
3490     const CXXBindTemporaryExpr *BT = TE->getBindTemporaryExpr();
3491     OS << "~" << BT->getType()->getAsCXXRecordDecl()->getName() << "()";
3492     OS << " (Temporary object destructor)\n";
3493   }
3494 }
3495 
3496 static void print_block(raw_ostream &OS, const CFG* cfg,
3497                         const CFGBlock &B,
3498                         StmtPrinterHelper* Helper, bool print_edges) {
3499 
3500   if (Helper) Helper->setBlockID(B.getBlockID());
3501 
3502   // Print the header.
3503   OS << "\n [ B" << B.getBlockID();
3504 
3505   if (&B == &cfg->getEntry())
3506     OS << " (ENTRY) ]\n";
3507   else if (&B == &cfg->getExit())
3508     OS << " (EXIT) ]\n";
3509   else if (&B == cfg->getIndirectGotoBlock())
3510     OS << " (INDIRECT GOTO DISPATCH) ]\n";
3511   else
3512     OS << " ]\n";
3513 
3514   // Print the label of this block.
3515   if (Stmt *Label = const_cast<Stmt*>(B.getLabel())) {
3516 
3517     if (print_edges)
3518       OS << "    ";
3519 
3520     if (LabelStmt *L = dyn_cast<LabelStmt>(Label))
3521       OS << L->getName();
3522     else if (CaseStmt *C = dyn_cast<CaseStmt>(Label)) {
3523       OS << "case ";
3524       C->getLHS()->printPretty(OS, Helper,
3525                                PrintingPolicy(Helper->getLangOpts()));
3526       if (C->getRHS()) {
3527         OS << " ... ";
3528         C->getRHS()->printPretty(OS, Helper,
3529                                  PrintingPolicy(Helper->getLangOpts()));
3530       }
3531     } else if (isa<DefaultStmt>(Label))
3532       OS << "default";
3533     else if (CXXCatchStmt *CS = dyn_cast<CXXCatchStmt>(Label)) {
3534       OS << "catch (";
3535       if (CS->getExceptionDecl())
3536         CS->getExceptionDecl()->print(OS, PrintingPolicy(Helper->getLangOpts()),
3537                                       0);
3538       else
3539         OS << "...";
3540       OS << ")";
3541 
3542     } else
3543       llvm_unreachable("Invalid label statement in CFGBlock.");
3544 
3545     OS << ":\n";
3546   }
3547 
3548   // Iterate through the statements in the block and print them.
3549   unsigned j = 1;
3550 
3551   for (CFGBlock::const_iterator I = B.begin(), E = B.end() ;
3552        I != E ; ++I, ++j ) {
3553 
3554     // Print the statement # in the basic block and the statement itself.
3555     if (print_edges)
3556       OS << "    ";
3557 
3558     OS << llvm::format("%3d", j) << ": ";
3559 
3560     if (Helper)
3561       Helper->setStmtID(j);
3562 
3563     print_elem(OS,Helper,*I);
3564   }
3565 
3566   // Print the terminator of this block.
3567   if (B.getTerminator()) {
3568     if (print_edges)
3569       OS << "    ";
3570 
3571     OS << "  T: ";
3572 
3573     if (Helper) Helper->setBlockID(-1);
3574 
3575     CFGBlockTerminatorPrint TPrinter(OS, Helper,
3576                                      PrintingPolicy(Helper->getLangOpts()));
3577     TPrinter.Visit(const_cast<Stmt*>(B.getTerminator().getStmt()));
3578     OS << '\n';
3579   }
3580 
3581   if (print_edges) {
3582     // Print the predecessors of this block.
3583     OS << "    Predecessors (" << B.pred_size() << "):";
3584     unsigned i = 0;
3585 
3586     for (CFGBlock::const_pred_iterator I = B.pred_begin(), E = B.pred_end();
3587          I != E; ++I, ++i) {
3588 
3589       if (i == 8 || (i-8) == 0)
3590         OS << "\n     ";
3591 
3592       OS << " B" << (*I)->getBlockID();
3593     }
3594 
3595     OS << '\n';
3596 
3597     // Print the successors of this block.
3598     OS << "    Successors (" << B.succ_size() << "):";
3599     i = 0;
3600 
3601     for (CFGBlock::const_succ_iterator I = B.succ_begin(), E = B.succ_end();
3602          I != E; ++I, ++i) {
3603 
3604       if (i == 8 || (i-8) % 10 == 0)
3605         OS << "\n    ";
3606 
3607       if (*I)
3608         OS << " B" << (*I)->getBlockID();
3609       else
3610         OS  << " NULL";
3611     }
3612 
3613     OS << '\n';
3614   }
3615 }
3616 
3617 
3618 /// dump - A simple pretty printer of a CFG that outputs to stderr.
3619 void CFG::dump(const LangOptions &LO) const { print(llvm::errs(), LO); }
3620 
3621 /// print - A simple pretty printer of a CFG that outputs to an ostream.
3622 void CFG::print(raw_ostream &OS, const LangOptions &LO) const {
3623   StmtPrinterHelper Helper(this, LO);
3624 
3625   // Print the entry block.
3626   print_block(OS, this, getEntry(), &Helper, true);
3627 
3628   // Iterate through the CFGBlocks and print them one by one.
3629   for (const_iterator I = Blocks.begin(), E = Blocks.end() ; I != E ; ++I) {
3630     // Skip the entry block, because we already printed it.
3631     if (&(**I) == &getEntry() || &(**I) == &getExit())
3632       continue;
3633 
3634     print_block(OS, this, **I, &Helper, true);
3635   }
3636 
3637   // Print the exit block.
3638   print_block(OS, this, getExit(), &Helper, true);
3639   OS.flush();
3640 }
3641 
3642 /// dump - A simply pretty printer of a CFGBlock that outputs to stderr.
3643 void CFGBlock::dump(const CFG* cfg, const LangOptions &LO) const {
3644   print(llvm::errs(), cfg, LO);
3645 }
3646 
3647 /// print - A simple pretty printer of a CFGBlock that outputs to an ostream.
3648 ///   Generally this will only be called from CFG::print.
3649 void CFGBlock::print(raw_ostream &OS, const CFG* cfg,
3650                      const LangOptions &LO) const {
3651   StmtPrinterHelper Helper(cfg, LO);
3652   print_block(OS, cfg, *this, &Helper, true);
3653 }
3654 
3655 /// printTerminator - A simple pretty printer of the terminator of a CFGBlock.
3656 void CFGBlock::printTerminator(raw_ostream &OS,
3657                                const LangOptions &LO) const {
3658   CFGBlockTerminatorPrint TPrinter(OS, NULL, PrintingPolicy(LO));
3659   TPrinter.Visit(const_cast<Stmt*>(getTerminator().getStmt()));
3660 }
3661 
3662 Stmt *CFGBlock::getTerminatorCondition() {
3663   Stmt *Terminator = this->Terminator;
3664   if (!Terminator)
3665     return NULL;
3666 
3667   Expr *E = NULL;
3668 
3669   switch (Terminator->getStmtClass()) {
3670     default:
3671       break;
3672 
3673     case Stmt::ForStmtClass:
3674       E = cast<ForStmt>(Terminator)->getCond();
3675       break;
3676 
3677     case Stmt::WhileStmtClass:
3678       E = cast<WhileStmt>(Terminator)->getCond();
3679       break;
3680 
3681     case Stmt::DoStmtClass:
3682       E = cast<DoStmt>(Terminator)->getCond();
3683       break;
3684 
3685     case Stmt::IfStmtClass:
3686       E = cast<IfStmt>(Terminator)->getCond();
3687       break;
3688 
3689     case Stmt::ChooseExprClass:
3690       E = cast<ChooseExpr>(Terminator)->getCond();
3691       break;
3692 
3693     case Stmt::IndirectGotoStmtClass:
3694       E = cast<IndirectGotoStmt>(Terminator)->getTarget();
3695       break;
3696 
3697     case Stmt::SwitchStmtClass:
3698       E = cast<SwitchStmt>(Terminator)->getCond();
3699       break;
3700 
3701     case Stmt::BinaryConditionalOperatorClass:
3702       E = cast<BinaryConditionalOperator>(Terminator)->getCond();
3703       break;
3704 
3705     case Stmt::ConditionalOperatorClass:
3706       E = cast<ConditionalOperator>(Terminator)->getCond();
3707       break;
3708 
3709     case Stmt::BinaryOperatorClass: // '&&' and '||'
3710       E = cast<BinaryOperator>(Terminator)->getLHS();
3711       break;
3712 
3713     case Stmt::ObjCForCollectionStmtClass:
3714       return Terminator;
3715   }
3716 
3717   return E ? E->IgnoreParens() : NULL;
3718 }
3719 
3720 //===----------------------------------------------------------------------===//
3721 // CFG Graphviz Visualization
3722 //===----------------------------------------------------------------------===//
3723 
3724 
3725 #ifndef NDEBUG
3726 static StmtPrinterHelper* GraphHelper;
3727 #endif
3728 
3729 void CFG::viewCFG(const LangOptions &LO) const {
3730 #ifndef NDEBUG
3731   StmtPrinterHelper H(this, LO);
3732   GraphHelper = &H;
3733   llvm::ViewGraph(this,"CFG");
3734   GraphHelper = NULL;
3735 #endif
3736 }
3737 
3738 namespace llvm {
3739 template<>
3740 struct DOTGraphTraits<const CFG*> : public DefaultDOTGraphTraits {
3741 
3742   DOTGraphTraits (bool isSimple=false) : DefaultDOTGraphTraits(isSimple) {}
3743 
3744   static std::string getNodeLabel(const CFGBlock *Node, const CFG* Graph) {
3745 
3746 #ifndef NDEBUG
3747     std::string OutSStr;
3748     llvm::raw_string_ostream Out(OutSStr);
3749     print_block(Out,Graph, *Node, GraphHelper, false);
3750     std::string& OutStr = Out.str();
3751 
3752     if (OutStr[0] == '\n') OutStr.erase(OutStr.begin());
3753 
3754     // Process string output to make it nicer...
3755     for (unsigned i = 0; i != OutStr.length(); ++i)
3756       if (OutStr[i] == '\n') {                            // Left justify
3757         OutStr[i] = '\\';
3758         OutStr.insert(OutStr.begin()+i+1, 'l');
3759       }
3760 
3761     return OutStr;
3762 #else
3763     return "";
3764 #endif
3765   }
3766 };
3767 } // end namespace llvm
3768