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