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