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