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