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