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