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