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