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