CFG.cpp revision 198398
1//===--- CFG.cpp - Classes for representing and building CFGs----*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10//  This file defines the CFG and CFGBuilder classes for representing and
11//  building Control-Flow Graphs (CFGs) from ASTs.
12//
13//===----------------------------------------------------------------------===//
14
15#include "clang/Analysis/Support/SaveAndRestore.h"
16#include "clang/Analysis/CFG.h"
17#include "clang/AST/StmtVisitor.h"
18#include "clang/AST/PrettyPrinter.h"
19#include "llvm/Support/GraphWriter.h"
20#include "llvm/Support/Compiler.h"
21#include "llvm/Support/Allocator.h"
22#include "llvm/Support/Format.h"
23#include "llvm/ADT/DenseMap.h"
24#include "llvm/ADT/SmallPtrSet.h"
25#include "llvm/ADT/OwningPtr.h"
26
27using namespace clang;
28
29namespace {
30
31static SourceLocation GetEndLoc(Decl* D) {
32  if (VarDecl* VD = dyn_cast<VarDecl>(D))
33    if (Expr* Ex = VD->getInit())
34      return Ex->getSourceRange().getEnd();
35
36  return D->getLocation();
37}
38
39/// CFGBuilder - This class implements CFG construction from an AST.
40///   The builder is stateful: an instance of the builder should be used to only
41///   construct a single CFG.
42///
43///   Example usage:
44///
45///     CFGBuilder builder;
46///     CFG* cfg = builder.BuildAST(stmt1);
47///
48///  CFG construction is done via a recursive walk of an AST.  We actually parse
49///  the AST in reverse order so that the successor of a basic block is
50///  constructed prior to its predecessor.  This allows us to nicely capture
51///  implicit fall-throughs without extra basic blocks.
52///
53class VISIBILITY_HIDDEN CFGBuilder {
54  ASTContext *Context;
55  llvm::OwningPtr<CFG> cfg;
56
57  CFGBlock* Block;
58  CFGBlock* Succ;
59  CFGBlock* ContinueTargetBlock;
60  CFGBlock* BreakTargetBlock;
61  CFGBlock* SwitchTerminatedBlock;
62  CFGBlock* DefaultCaseBlock;
63
64  // LabelMap records the mapping from Label expressions to their blocks.
65  typedef llvm::DenseMap<LabelStmt*,CFGBlock*> LabelMapTy;
66  LabelMapTy LabelMap;
67
68  // A list of blocks that end with a "goto" that must be backpatched to their
69  // resolved targets upon completion of CFG construction.
70  typedef std::vector<CFGBlock*> BackpatchBlocksTy;
71  BackpatchBlocksTy BackpatchBlocks;
72
73  // A list of labels whose address has been taken (for indirect gotos).
74  typedef llvm::SmallPtrSet<LabelStmt*,5> LabelSetTy;
75  LabelSetTy AddressTakenLabels;
76
77public:
78  explicit CFGBuilder() : cfg(new CFG()), // crew a new CFG
79                          Block(NULL), Succ(NULL),
80                          ContinueTargetBlock(NULL), BreakTargetBlock(NULL),
81                          SwitchTerminatedBlock(NULL), DefaultCaseBlock(NULL) {}
82
83  // buildCFG - Used by external clients to construct the CFG.
84  CFG* buildCFG(Stmt *Statement, ASTContext *C);
85
86private:
87  // Visitors to walk an AST and construct the CFG.
88  CFGBlock *VisitAddrLabelExpr(AddrLabelExpr *A, bool alwaysAdd);
89  CFGBlock *VisitBinaryOperator(BinaryOperator *B, bool alwaysAdd);
90  CFGBlock *VisitBlockExpr(BlockExpr* E, bool alwaysAdd);
91  CFGBlock *VisitBlockDeclRefExpr(BlockDeclRefExpr* E, bool alwaysAdd);
92  CFGBlock *VisitBreakStmt(BreakStmt *B);
93  CFGBlock *VisitCallExpr(CallExpr *C, bool alwaysAdd);
94  CFGBlock *VisitCaseStmt(CaseStmt *C);
95  CFGBlock *VisitChooseExpr(ChooseExpr *C);
96  CFGBlock *VisitCompoundStmt(CompoundStmt *C);
97  CFGBlock *VisitConditionalOperator(ConditionalOperator *C);
98  CFGBlock *VisitContinueStmt(ContinueStmt *C);
99  CFGBlock *VisitCXXThrowExpr(CXXThrowExpr *T);
100  CFGBlock *VisitDeclStmt(DeclStmt *DS);
101  CFGBlock *VisitDeclSubExpr(Decl* D);
102  CFGBlock *VisitDefaultStmt(DefaultStmt *D);
103  CFGBlock *VisitDoStmt(DoStmt *D);
104  CFGBlock *VisitForStmt(ForStmt *F);
105  CFGBlock *VisitGotoStmt(GotoStmt* G);
106  CFGBlock *VisitIfStmt(IfStmt *I);
107  CFGBlock *VisitIndirectGotoStmt(IndirectGotoStmt *I);
108  CFGBlock *VisitLabelStmt(LabelStmt *L);
109  CFGBlock *VisitObjCAtCatchStmt(ObjCAtCatchStmt *S);
110  CFGBlock *VisitObjCAtSynchronizedStmt(ObjCAtSynchronizedStmt *S);
111  CFGBlock *VisitObjCAtThrowStmt(ObjCAtThrowStmt *S);
112  CFGBlock *VisitObjCAtTryStmt(ObjCAtTryStmt *S);
113  CFGBlock *VisitObjCForCollectionStmt(ObjCForCollectionStmt *S);
114  CFGBlock *VisitReturnStmt(ReturnStmt* R);
115  CFGBlock *VisitSizeOfAlignOfExpr(SizeOfAlignOfExpr *E, bool alwaysAdd);
116  CFGBlock *VisitStmtExpr(StmtExpr *S, bool alwaysAdd);
117  CFGBlock *VisitSwitchStmt(SwitchStmt *S);
118  CFGBlock *VisitWhileStmt(WhileStmt *W);
119
120  CFGBlock *Visit(Stmt *S, bool alwaysAdd = false);
121  CFGBlock *VisitStmt(Stmt *S, bool alwaysAdd);
122  CFGBlock *VisitChildren(Stmt* S);
123
124  // NYS == Not Yet Supported
125  CFGBlock* NYS() {
126    badCFG = true;
127    return Block;
128  }
129
130  void autoCreateBlock() { if (!Block) Block = createBlock(); }
131  CFGBlock *createBlock(bool add_successor = true);
132  bool FinishBlock(CFGBlock* B);
133  CFGBlock *addStmt(Stmt *S) { return Visit(S, true); }
134
135  void AppendStmt(CFGBlock *B, Stmt *S) {
136    B->appendStmt(S, cfg->getBumpVectorContext());
137  }
138
139  void AddSuccessor(CFGBlock *B, CFGBlock *S) {
140    B->addSuccessor(S, cfg->getBumpVectorContext());
141  }
142
143  /// TryResult - a class representing a variant over the values
144  ///  'true', 'false', or 'unknown'.  This is returned by TryEvaluateBool,
145  ///  and is used by the CFGBuilder to decide if a branch condition
146  ///  can be decided up front during CFG construction.
147  class TryResult {
148    int X;
149  public:
150    TryResult(bool b) : X(b ? 1 : 0) {}
151    TryResult() : X(-1) {}
152
153    bool isTrue() const { return X == 1; }
154    bool isFalse() const { return X == 0; }
155    bool isKnown() const { return X >= 0; }
156    void negate() {
157      assert(isKnown());
158      X ^= 0x1;
159    }
160  };
161
162  /// TryEvaluateBool - Try and evaluate the Stmt and return 0 or 1
163  /// if we can evaluate to a known value, otherwise return -1.
164  TryResult TryEvaluateBool(Expr *S) {
165    Expr::EvalResult Result;
166    if (!S->isTypeDependent() && !S->isValueDependent() &&
167        S->Evaluate(Result, *Context) && Result.Val.isInt())
168      return Result.Val.getInt().getBoolValue();
169
170    return TryResult();
171  }
172
173  bool badCFG;
174};
175
176// FIXME: Add support for dependent-sized array types in C++?
177// Does it even make sense to build a CFG for an uninstantiated template?
178static VariableArrayType* FindVA(Type* t) {
179  while (ArrayType* vt = dyn_cast<ArrayType>(t)) {
180    if (VariableArrayType* vat = dyn_cast<VariableArrayType>(vt))
181      if (vat->getSizeExpr())
182        return vat;
183
184    t = vt->getElementType().getTypePtr();
185  }
186
187  return 0;
188}
189
190/// BuildCFG - Constructs a CFG from an AST (a Stmt*).  The AST can represent an
191///  arbitrary statement.  Examples include a single expression or a function
192///  body (compound statement).  The ownership of the returned CFG is
193///  transferred to the caller.  If CFG construction fails, this method returns
194///  NULL.
195CFG* CFGBuilder::buildCFG(Stmt* Statement, ASTContext* C) {
196  Context = C;
197  assert(cfg.get());
198  if (!Statement)
199    return NULL;
200
201  badCFG = false;
202
203  // Create an empty block that will serve as the exit block for the CFG.  Since
204  // this is the first block added to the CFG, it will be implicitly registered
205  // as the exit block.
206  Succ = createBlock();
207  assert(Succ == &cfg->getExit());
208  Block = NULL;  // the EXIT block is empty.  Create all other blocks lazily.
209
210  // Visit the statements and create the CFG.
211  CFGBlock* B = addStmt(Statement);
212  if (!B)
213    B = Succ;
214
215  if (B) {
216    // Finalize the last constructed block.  This usually involves reversing the
217    // order of the statements in the block.
218    if (Block) FinishBlock(B);
219
220    // Backpatch the gotos whose label -> block mappings we didn't know when we
221    // encountered them.
222    for (BackpatchBlocksTy::iterator I = BackpatchBlocks.begin(),
223         E = BackpatchBlocks.end(); I != E; ++I ) {
224
225      CFGBlock* B = *I;
226      GotoStmt* G = cast<GotoStmt>(B->getTerminator());
227      LabelMapTy::iterator LI = LabelMap.find(G->getLabel());
228
229      // If there is no target for the goto, then we are looking at an
230      // incomplete AST.  Handle this by not registering a successor.
231      if (LI == LabelMap.end()) continue;
232
233      AddSuccessor(B, LI->second);
234    }
235
236    // Add successors to the Indirect Goto Dispatch block (if we have one).
237    if (CFGBlock* B = cfg->getIndirectGotoBlock())
238      for (LabelSetTy::iterator I = AddressTakenLabels.begin(),
239           E = AddressTakenLabels.end(); I != E; ++I ) {
240
241        // Lookup the target block.
242        LabelMapTy::iterator LI = LabelMap.find(*I);
243
244        // If there is no target block that contains label, then we are looking
245        // at an incomplete AST.  Handle this by not registering a successor.
246        if (LI == LabelMap.end()) continue;
247
248        AddSuccessor(B, LI->second);
249      }
250
251    Succ = B;
252  }
253
254  // Create an empty entry block that has no predecessors.
255  cfg->setEntry(createBlock());
256
257  return badCFG ? NULL : cfg.take();
258}
259
260/// createBlock - Used to lazily create blocks that are connected
261///  to the current (global) succcessor.
262CFGBlock* CFGBuilder::createBlock(bool add_successor) {
263  CFGBlock* B = cfg->createBlock();
264  if (add_successor && Succ)
265    AddSuccessor(B, Succ);
266  return B;
267}
268
269/// FinishBlock - "Finalize" the block by checking if we have a bad CFG.
270bool CFGBuilder::FinishBlock(CFGBlock* B) {
271  if (badCFG)
272    return false;
273
274  assert(B);
275  return true;
276}
277
278/// Visit - Walk the subtree of a statement and add extra
279///   blocks for ternary operators, &&, and ||.  We also process "," and
280///   DeclStmts (which may contain nested control-flow).
281CFGBlock* CFGBuilder::Visit(Stmt * S, bool alwaysAdd) {
282tryAgain:
283  switch (S->getStmtClass()) {
284    default:
285      return VisitStmt(S, alwaysAdd);
286
287    case Stmt::AddrLabelExprClass:
288      return VisitAddrLabelExpr(cast<AddrLabelExpr>(S), alwaysAdd);
289
290    case Stmt::BinaryOperatorClass:
291      return VisitBinaryOperator(cast<BinaryOperator>(S), alwaysAdd);
292
293    case Stmt::BlockExprClass:
294      return VisitBlockExpr(cast<BlockExpr>(S), alwaysAdd);
295
296    case Stmt::BlockDeclRefExprClass:
297      return VisitBlockDeclRefExpr(cast<BlockDeclRefExpr>(S), alwaysAdd);
298
299    case Stmt::BreakStmtClass:
300      return VisitBreakStmt(cast<BreakStmt>(S));
301
302    case Stmt::CallExprClass:
303      return VisitCallExpr(cast<CallExpr>(S), alwaysAdd);
304
305    case Stmt::CaseStmtClass:
306      return VisitCaseStmt(cast<CaseStmt>(S));
307
308    case Stmt::ChooseExprClass:
309      return VisitChooseExpr(cast<ChooseExpr>(S));
310
311    case Stmt::CompoundStmtClass:
312      return VisitCompoundStmt(cast<CompoundStmt>(S));
313
314    case Stmt::ConditionalOperatorClass:
315      return VisitConditionalOperator(cast<ConditionalOperator>(S));
316
317    case Stmt::ContinueStmtClass:
318      return VisitContinueStmt(cast<ContinueStmt>(S));
319
320    case Stmt::DeclStmtClass:
321      return VisitDeclStmt(cast<DeclStmt>(S));
322
323    case Stmt::DefaultStmtClass:
324      return VisitDefaultStmt(cast<DefaultStmt>(S));
325
326    case Stmt::DoStmtClass:
327      return VisitDoStmt(cast<DoStmt>(S));
328
329    case Stmt::ForStmtClass:
330      return VisitForStmt(cast<ForStmt>(S));
331
332    case Stmt::GotoStmtClass:
333      return VisitGotoStmt(cast<GotoStmt>(S));
334
335    case Stmt::IfStmtClass:
336      return VisitIfStmt(cast<IfStmt>(S));
337
338    case Stmt::IndirectGotoStmtClass:
339      return VisitIndirectGotoStmt(cast<IndirectGotoStmt>(S));
340
341    case Stmt::LabelStmtClass:
342      return VisitLabelStmt(cast<LabelStmt>(S));
343
344    case Stmt::ObjCAtCatchStmtClass:
345      return VisitObjCAtCatchStmt(cast<ObjCAtCatchStmt>(S));
346
347  case Stmt::CXXThrowExprClass:
348    return VisitCXXThrowExpr(cast<CXXThrowExpr>(S));
349
350    case Stmt::ObjCAtSynchronizedStmtClass:
351      return VisitObjCAtSynchronizedStmt(cast<ObjCAtSynchronizedStmt>(S));
352
353    case Stmt::ObjCAtThrowStmtClass:
354      return VisitObjCAtThrowStmt(cast<ObjCAtThrowStmt>(S));
355
356    case Stmt::ObjCAtTryStmtClass:
357      return VisitObjCAtTryStmt(cast<ObjCAtTryStmt>(S));
358
359    case Stmt::ObjCForCollectionStmtClass:
360      return VisitObjCForCollectionStmt(cast<ObjCForCollectionStmt>(S));
361
362    case Stmt::ParenExprClass:
363      S = cast<ParenExpr>(S)->getSubExpr();
364      goto tryAgain;
365
366    case Stmt::NullStmtClass:
367      return Block;
368
369    case Stmt::ReturnStmtClass:
370      return VisitReturnStmt(cast<ReturnStmt>(S));
371
372    case Stmt::SizeOfAlignOfExprClass:
373      return VisitSizeOfAlignOfExpr(cast<SizeOfAlignOfExpr>(S), alwaysAdd);
374
375    case Stmt::StmtExprClass:
376      return VisitStmtExpr(cast<StmtExpr>(S), alwaysAdd);
377
378    case Stmt::SwitchStmtClass:
379      return VisitSwitchStmt(cast<SwitchStmt>(S));
380
381    case Stmt::WhileStmtClass:
382      return VisitWhileStmt(cast<WhileStmt>(S));
383  }
384}
385
386CFGBlock *CFGBuilder::VisitStmt(Stmt *S, bool alwaysAdd) {
387  if (alwaysAdd) {
388    autoCreateBlock();
389    AppendStmt(Block, S);
390  }
391
392  return VisitChildren(S);
393}
394
395/// VisitChildren - Visit the children of a Stmt.
396CFGBlock *CFGBuilder::VisitChildren(Stmt* Terminator) {
397  CFGBlock *B = Block;
398  for (Stmt::child_iterator I = Terminator->child_begin(),
399         E = Terminator->child_end(); I != E; ++I) {
400    if (*I) B = Visit(*I);
401  }
402  return B;
403}
404
405CFGBlock *CFGBuilder::VisitAddrLabelExpr(AddrLabelExpr *A, bool alwaysAdd) {
406  AddressTakenLabels.insert(A->getLabel());
407
408  if (alwaysAdd) {
409    autoCreateBlock();
410    AppendStmt(Block, A);
411  }
412
413  return Block;
414}
415
416CFGBlock *CFGBuilder::VisitBinaryOperator(BinaryOperator *B, bool alwaysAdd) {
417  if (B->isLogicalOp()) { // && or ||
418    CFGBlock* ConfluenceBlock = Block ? Block : createBlock();
419    AppendStmt(ConfluenceBlock, B);
420
421    if (!FinishBlock(ConfluenceBlock))
422      return 0;
423
424    // create the block evaluating the LHS
425    CFGBlock* LHSBlock = createBlock(false);
426    LHSBlock->setTerminator(B);
427
428    // create the block evaluating the RHS
429    Succ = ConfluenceBlock;
430    Block = NULL;
431    CFGBlock* RHSBlock = addStmt(B->getRHS());
432    if (!FinishBlock(RHSBlock))
433      return 0;
434
435    // See if this is a known constant.
436    TryResult KnownVal = TryEvaluateBool(B->getLHS());
437    if (KnownVal.isKnown() && (B->getOpcode() == BinaryOperator::LOr))
438      KnownVal.negate();
439
440    // Now link the LHSBlock with RHSBlock.
441    if (B->getOpcode() == BinaryOperator::LOr) {
442      AddSuccessor(LHSBlock, KnownVal.isTrue() ? NULL : ConfluenceBlock);
443      AddSuccessor(LHSBlock, KnownVal.isFalse() ? NULL : RHSBlock);
444    } else {
445      assert (B->getOpcode() == BinaryOperator::LAnd);
446      AddSuccessor(LHSBlock, KnownVal.isFalse() ? NULL : RHSBlock);
447      AddSuccessor(LHSBlock, KnownVal.isTrue() ? NULL : ConfluenceBlock);
448    }
449
450    // Generate the blocks for evaluating the LHS.
451    Block = LHSBlock;
452    return addStmt(B->getLHS());
453  }
454  else if (B->getOpcode() == BinaryOperator::Comma) { // ,
455    autoCreateBlock();
456    AppendStmt(Block, B);
457    addStmt(B->getRHS());
458    return addStmt(B->getLHS());
459  }
460
461  return VisitStmt(B, alwaysAdd);
462}
463
464CFGBlock *CFGBuilder::VisitBlockExpr(BlockExpr* E, bool alwaysAdd) {
465  // FIXME
466  return NYS();
467}
468
469CFGBlock *CFGBuilder::VisitBlockDeclRefExpr(BlockDeclRefExpr* E,
470                                            bool alwaysAdd) {
471  // FIXME
472  return NYS();
473}
474
475CFGBlock *CFGBuilder::VisitBreakStmt(BreakStmt *B) {
476  // "break" is a control-flow statement.  Thus we stop processing the current
477  // block.
478  if (Block && !FinishBlock(Block))
479      return 0;
480
481  // Now create a new block that ends with the break statement.
482  Block = createBlock(false);
483  Block->setTerminator(B);
484
485  // If there is no target for the break, then we are looking at an incomplete
486  // AST.  This means that the CFG cannot be constructed.
487  if (BreakTargetBlock)
488    AddSuccessor(Block, BreakTargetBlock);
489  else
490    badCFG = true;
491
492
493  return Block;
494}
495
496CFGBlock *CFGBuilder::VisitCallExpr(CallExpr *C, bool alwaysAdd) {
497  // If this is a call to a no-return function, this stops the block here.
498  bool NoReturn = false;
499  if (C->getCallee()->getType().getNoReturnAttr()) {
500    NoReturn = true;
501  }
502
503  if (FunctionDecl *FD = C->getDirectCallee())
504    if (FD->hasAttr<NoReturnAttr>())
505      NoReturn = true;
506
507  if (!NoReturn)
508    return VisitStmt(C, alwaysAdd);
509
510  if (Block && !FinishBlock(Block))
511    return 0;
512
513  // Create new block with no successor for the remaining pieces.
514  Block = createBlock(false);
515  AppendStmt(Block, C);
516
517  // Wire this to the exit block directly.
518  AddSuccessor(Block, &cfg->getExit());
519
520  return VisitChildren(C);
521}
522
523CFGBlock *CFGBuilder::VisitChooseExpr(ChooseExpr *C) {
524  CFGBlock* ConfluenceBlock = Block ? Block : createBlock();
525  AppendStmt(ConfluenceBlock, C);
526  if (!FinishBlock(ConfluenceBlock))
527    return 0;
528
529  Succ = ConfluenceBlock;
530  Block = NULL;
531  CFGBlock* LHSBlock = addStmt(C->getLHS());
532  if (!FinishBlock(LHSBlock))
533    return 0;
534
535  Succ = ConfluenceBlock;
536  Block = NULL;
537  CFGBlock* RHSBlock = addStmt(C->getRHS());
538  if (!FinishBlock(RHSBlock))
539    return 0;
540
541  Block = createBlock(false);
542  // See if this is a known constant.
543  const TryResult& KnownVal = TryEvaluateBool(C->getCond());
544  AddSuccessor(Block, KnownVal.isFalse() ? NULL : LHSBlock);
545  AddSuccessor(Block, KnownVal.isTrue() ? NULL : RHSBlock);
546  Block->setTerminator(C);
547  return addStmt(C->getCond());
548}
549
550
551CFGBlock* CFGBuilder::VisitCompoundStmt(CompoundStmt* C) {
552  CFGBlock* LastBlock = Block;
553
554  for (CompoundStmt::reverse_body_iterator I=C->body_rbegin(), E=C->body_rend();
555       I != E; ++I ) {
556    LastBlock = addStmt(*I);
557
558    if (badCFG)
559      return NULL;
560  }
561  return LastBlock;
562}
563
564CFGBlock *CFGBuilder::VisitConditionalOperator(ConditionalOperator *C) {
565  // Create the confluence block that will "merge" the results of the ternary
566  // expression.
567  CFGBlock* ConfluenceBlock = Block ? Block : createBlock();
568  AppendStmt(ConfluenceBlock, C);
569  if (!FinishBlock(ConfluenceBlock))
570    return 0;
571
572  // Create a block for the LHS expression if there is an LHS expression.  A
573  // GCC extension allows LHS to be NULL, causing the condition to be the
574  // value that is returned instead.
575  //  e.g: x ?: y is shorthand for: x ? x : y;
576  Succ = ConfluenceBlock;
577  Block = NULL;
578  CFGBlock* LHSBlock = NULL;
579  if (C->getLHS()) {
580    LHSBlock = addStmt(C->getLHS());
581    if (!FinishBlock(LHSBlock))
582      return 0;
583    Block = NULL;
584  }
585
586  // Create the block for the RHS expression.
587  Succ = ConfluenceBlock;
588  CFGBlock* RHSBlock = addStmt(C->getRHS());
589  if (!FinishBlock(RHSBlock))
590    return 0;
591
592  // Create the block that will contain the condition.
593  Block = createBlock(false);
594
595  // See if this is a known constant.
596  const TryResult& KnownVal = TryEvaluateBool(C->getCond());
597  if (LHSBlock) {
598    AddSuccessor(Block, KnownVal.isFalse() ? NULL : LHSBlock);
599  } else {
600    if (KnownVal.isFalse()) {
601      // If we know the condition is false, add NULL as the successor for
602      // the block containing the condition.  In this case, the confluence
603      // block will have just one predecessor.
604      AddSuccessor(Block, 0);
605      assert(ConfluenceBlock->pred_size() == 1);
606    } else {
607      // If we have no LHS expression, add the ConfluenceBlock as a direct
608      // successor for the block containing the condition.  Moreover, we need to
609      // reverse the order of the predecessors in the ConfluenceBlock because
610      // the RHSBlock will have been added to the succcessors already, and we
611      // want the first predecessor to the the block containing the expression
612      // for the case when the ternary expression evaluates to true.
613      AddSuccessor(Block, ConfluenceBlock);
614      assert(ConfluenceBlock->pred_size() == 2);
615      std::reverse(ConfluenceBlock->pred_begin(),
616                   ConfluenceBlock->pred_end());
617    }
618  }
619
620  AddSuccessor(Block, KnownVal.isTrue() ? NULL : RHSBlock);
621  Block->setTerminator(C);
622  return addStmt(C->getCond());
623}
624
625CFGBlock *CFGBuilder::VisitDeclStmt(DeclStmt *DS) {
626  autoCreateBlock();
627
628  if (DS->isSingleDecl()) {
629    AppendStmt(Block, DS);
630    return VisitDeclSubExpr(DS->getSingleDecl());
631  }
632
633  CFGBlock *B = 0;
634
635  // FIXME: Add a reverse iterator for DeclStmt to avoid this extra copy.
636  typedef llvm::SmallVector<Decl*,10> BufTy;
637  BufTy Buf(DS->decl_begin(), DS->decl_end());
638
639  for (BufTy::reverse_iterator I = Buf.rbegin(), E = Buf.rend(); I != E; ++I) {
640    // Get the alignment of the new DeclStmt, padding out to >=8 bytes.
641    unsigned A = llvm::AlignOf<DeclStmt>::Alignment < 8
642               ? 8 : llvm::AlignOf<DeclStmt>::Alignment;
643
644    // Allocate the DeclStmt using the BumpPtrAllocator.  It will get
645    // automatically freed with the CFG.
646    DeclGroupRef DG(*I);
647    Decl *D = *I;
648    void *Mem = cfg->getAllocator().Allocate(sizeof(DeclStmt), A);
649    DeclStmt *DSNew = new (Mem) DeclStmt(DG, D->getLocation(), GetEndLoc(D));
650
651    // Append the fake DeclStmt to block.
652    AppendStmt(Block, DSNew);
653    B = VisitDeclSubExpr(D);
654  }
655
656  return B;
657}
658
659/// VisitDeclSubExpr - Utility method to add block-level expressions for
660///  initializers in Decls.
661CFGBlock *CFGBuilder::VisitDeclSubExpr(Decl* D) {
662  assert(Block);
663
664  VarDecl *VD = dyn_cast<VarDecl>(D);
665
666  if (!VD)
667    return Block;
668
669  Expr *Init = VD->getInit();
670
671  if (Init) {
672    // Optimization: Don't create separate block-level statements for literals.
673    switch (Init->getStmtClass()) {
674      case Stmt::IntegerLiteralClass:
675      case Stmt::CharacterLiteralClass:
676      case Stmt::StringLiteralClass:
677        break;
678      default:
679        Block = addStmt(Init);
680    }
681  }
682
683  // If the type of VD is a VLA, then we must process its size expressions.
684  for (VariableArrayType* VA = FindVA(VD->getType().getTypePtr()); VA != 0;
685       VA = FindVA(VA->getElementType().getTypePtr()))
686    Block = addStmt(VA->getSizeExpr());
687
688  return Block;
689}
690
691CFGBlock* CFGBuilder::VisitIfStmt(IfStmt* I) {
692  // We may see an if statement in the middle of a basic block, or it may be the
693  // first statement we are processing.  In either case, we create a new basic
694  // block.  First, we create the blocks for the then...else statements, and
695  // then we create the block containing the if statement.  If we were in the
696  // middle of a block, we stop processing that block.  That block is then the
697  // implicit successor for the "then" and "else" clauses.
698
699  // The block we were proccessing is now finished.  Make it the successor
700  // block.
701  if (Block) {
702    Succ = Block;
703    if (!FinishBlock(Block))
704      return 0;
705  }
706
707  // Process the false branch.
708  CFGBlock* ElseBlock = Succ;
709
710  if (Stmt* Else = I->getElse()) {
711    SaveAndRestore<CFGBlock*> sv(Succ);
712
713    // NULL out Block so that the recursive call to Visit will
714    // create a new basic block.
715    Block = NULL;
716    ElseBlock = addStmt(Else);
717
718    if (!ElseBlock) // Can occur when the Else body has all NullStmts.
719      ElseBlock = sv.get();
720    else if (Block) {
721      if (!FinishBlock(ElseBlock))
722        return 0;
723    }
724  }
725
726  // Process the true branch.
727  CFGBlock* ThenBlock;
728  {
729    Stmt* Then = I->getThen();
730    assert (Then);
731    SaveAndRestore<CFGBlock*> sv(Succ);
732    Block = NULL;
733    ThenBlock = addStmt(Then);
734
735    if (!ThenBlock) {
736      // We can reach here if the "then" body has all NullStmts.
737      // Create an empty block so we can distinguish between true and false
738      // branches in path-sensitive analyses.
739      ThenBlock = createBlock(false);
740      AddSuccessor(ThenBlock, sv.get());
741    } else if (Block) {
742      if (!FinishBlock(ThenBlock))
743        return 0;
744    }
745  }
746
747  // Now create a new block containing the if statement.
748  Block = createBlock(false);
749
750  // Set the terminator of the new block to the If statement.
751  Block->setTerminator(I);
752
753  // See if this is a known constant.
754  const TryResult &KnownVal = TryEvaluateBool(I->getCond());
755
756  // Now add the successors.
757  AddSuccessor(Block, KnownVal.isFalse() ? NULL : ThenBlock);
758  AddSuccessor(Block, KnownVal.isTrue()? NULL : ElseBlock);
759
760  // Add the condition as the last statement in the new block.  This may create
761  // new blocks as the condition may contain control-flow.  Any newly created
762  // blocks will be pointed to be "Block".
763  return addStmt(I->getCond());
764}
765
766
767CFGBlock* CFGBuilder::VisitReturnStmt(ReturnStmt* R) {
768  // If we were in the middle of a block we stop processing that block.
769  //
770  // NOTE: If a "return" appears in the middle of a block, this means that the
771  //       code afterwards is DEAD (unreachable).  We still keep a basic block
772  //       for that code; a simple "mark-and-sweep" from the entry block will be
773  //       able to report such dead blocks.
774  if (Block)
775    FinishBlock(Block);
776
777  // Create the new block.
778  Block = createBlock(false);
779
780  // The Exit block is the only successor.
781  AddSuccessor(Block, &cfg->getExit());
782
783  // Add the return statement to the block.  This may create new blocks if R
784  // contains control-flow (short-circuit operations).
785  return VisitStmt(R, true);
786}
787
788CFGBlock* CFGBuilder::VisitLabelStmt(LabelStmt* L) {
789  // Get the block of the labeled statement.  Add it to our map.
790  addStmt(L->getSubStmt());
791  CFGBlock* LabelBlock = Block;
792
793  if (!LabelBlock)              // This can happen when the body is empty, i.e.
794    LabelBlock = createBlock(); // scopes that only contains NullStmts.
795
796  assert(LabelMap.find(L) == LabelMap.end() && "label already in map");
797  LabelMap[ L ] = LabelBlock;
798
799  // Labels partition blocks, so this is the end of the basic block we were
800  // processing (L is the block's label).  Because this is label (and we have
801  // already processed the substatement) there is no extra control-flow to worry
802  // about.
803  LabelBlock->setLabel(L);
804  if (!FinishBlock(LabelBlock))
805    return 0;
806
807  // We set Block to NULL to allow lazy creation of a new block (if necessary);
808  Block = NULL;
809
810  // This block is now the implicit successor of other blocks.
811  Succ = LabelBlock;
812
813  return LabelBlock;
814}
815
816CFGBlock* CFGBuilder::VisitGotoStmt(GotoStmt* G) {
817  // Goto is a control-flow statement.  Thus we stop processing the current
818  // block and create a new one.
819  if (Block)
820    FinishBlock(Block);
821
822  Block = createBlock(false);
823  Block->setTerminator(G);
824
825  // If we already know the mapping to the label block add the successor now.
826  LabelMapTy::iterator I = LabelMap.find(G->getLabel());
827
828  if (I == LabelMap.end())
829    // We will need to backpatch this block later.
830    BackpatchBlocks.push_back(Block);
831  else
832    AddSuccessor(Block, I->second);
833
834  return Block;
835}
836
837CFGBlock* CFGBuilder::VisitForStmt(ForStmt* F) {
838  CFGBlock* LoopSuccessor = NULL;
839
840  // "for" is a control-flow statement.  Thus we stop processing the current
841  // block.
842  if (Block) {
843    if (!FinishBlock(Block))
844      return 0;
845    LoopSuccessor = Block;
846  } else
847    LoopSuccessor = Succ;
848
849  // Because of short-circuit evaluation, the condition of the loop can span
850  // multiple basic blocks.  Thus we need the "Entry" and "Exit" blocks that
851  // evaluate the condition.
852  CFGBlock* ExitConditionBlock = createBlock(false);
853  CFGBlock* EntryConditionBlock = ExitConditionBlock;
854
855  // Set the terminator for the "exit" condition block.
856  ExitConditionBlock->setTerminator(F);
857
858  // Now add the actual condition to the condition block.  Because the condition
859  // itself may contain control-flow, new blocks may be created.
860  if (Stmt* C = F->getCond()) {
861    Block = ExitConditionBlock;
862    EntryConditionBlock = addStmt(C);
863    if (Block) {
864      if (!FinishBlock(EntryConditionBlock))
865        return 0;
866    }
867  }
868
869  // The condition block is the implicit successor for the loop body as well as
870  // any code above the loop.
871  Succ = EntryConditionBlock;
872
873  // See if this is a known constant.
874  TryResult KnownVal(true);
875
876  if (F->getCond())
877    KnownVal = TryEvaluateBool(F->getCond());
878
879  // Now create the loop body.
880  {
881    assert (F->getBody());
882
883    // Save the current values for Block, Succ, and continue and break targets
884    SaveAndRestore<CFGBlock*> save_Block(Block), save_Succ(Succ),
885    save_continue(ContinueTargetBlock),
886    save_break(BreakTargetBlock);
887
888    // Create a new block to contain the (bottom) of the loop body.
889    Block = NULL;
890
891    if (Stmt* I = F->getInc()) {
892      // Generate increment code in its own basic block.  This is the target of
893      // continue statements.
894      Succ = addStmt(I);
895    } else {
896      // No increment code.  Create a special, empty, block that is used as the
897      // target block for "looping back" to the start of the loop.
898      assert(Succ == EntryConditionBlock);
899      Succ = createBlock();
900    }
901
902    // Finish up the increment (or empty) block if it hasn't been already.
903    if (Block) {
904      assert(Block == Succ);
905      if (!FinishBlock(Block))
906        return 0;
907      Block = 0;
908    }
909
910    ContinueTargetBlock = Succ;
911
912    // The starting block for the loop increment is the block that should
913    // represent the 'loop target' for looping back to the start of the loop.
914    ContinueTargetBlock->setLoopTarget(F);
915
916    // All breaks should go to the code following the loop.
917    BreakTargetBlock = LoopSuccessor;
918
919    // Now populate the body block, and in the process create new blocks as we
920    // walk the body of the loop.
921    CFGBlock* BodyBlock = addStmt(F->getBody());
922
923    if (!BodyBlock)
924      BodyBlock = ContinueTargetBlock; // can happen for "for (...;...;...) ;"
925    else if (Block && !FinishBlock(BodyBlock))
926      return 0;
927
928    // This new body block is a successor to our "exit" condition block.
929    AddSuccessor(ExitConditionBlock, KnownVal.isFalse() ? NULL : BodyBlock);
930  }
931
932  // Link up the condition block with the code that follows the loop.  (the
933  // false branch).
934  AddSuccessor(ExitConditionBlock, KnownVal.isTrue() ? NULL : LoopSuccessor);
935
936  // If the loop contains initialization, create a new block for those
937  // statements.  This block can also contain statements that precede the loop.
938  if (Stmt* I = F->getInit()) {
939    Block = createBlock();
940    return addStmt(I);
941  } else {
942    // There is no loop initialization.  We are thus basically a while loop.
943    // NULL out Block to force lazy block construction.
944    Block = NULL;
945    Succ = EntryConditionBlock;
946    return EntryConditionBlock;
947  }
948}
949
950CFGBlock* CFGBuilder::VisitObjCForCollectionStmt(ObjCForCollectionStmt* S) {
951  // Objective-C fast enumeration 'for' statements:
952  //  http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC
953  //
954  //  for ( Type newVariable in collection_expression ) { statements }
955  //
956  //  becomes:
957  //
958  //   prologue:
959  //     1. collection_expression
960  //     T. jump to loop_entry
961  //   loop_entry:
962  //     1. side-effects of element expression
963  //     1. ObjCForCollectionStmt [performs binding to newVariable]
964  //     T. ObjCForCollectionStmt  TB, FB  [jumps to TB if newVariable != nil]
965  //   TB:
966  //     statements
967  //     T. jump to loop_entry
968  //   FB:
969  //     what comes after
970  //
971  //  and
972  //
973  //  Type existingItem;
974  //  for ( existingItem in expression ) { statements }
975  //
976  //  becomes:
977  //
978  //   the same with newVariable replaced with existingItem; the binding works
979  //   the same except that for one ObjCForCollectionStmt::getElement() returns
980  //   a DeclStmt and the other returns a DeclRefExpr.
981  //
982
983  CFGBlock* LoopSuccessor = 0;
984
985  if (Block) {
986    if (!FinishBlock(Block))
987      return 0;
988    LoopSuccessor = Block;
989    Block = 0;
990  } else
991    LoopSuccessor = Succ;
992
993  // Build the condition blocks.
994  CFGBlock* ExitConditionBlock = createBlock(false);
995  CFGBlock* EntryConditionBlock = ExitConditionBlock;
996
997  // Set the terminator for the "exit" condition block.
998  ExitConditionBlock->setTerminator(S);
999
1000  // The last statement in the block should be the ObjCForCollectionStmt, which
1001  // performs the actual binding to 'element' and determines if there are any
1002  // more items in the collection.
1003  AppendStmt(ExitConditionBlock, S);
1004  Block = ExitConditionBlock;
1005
1006  // Walk the 'element' expression to see if there are any side-effects.  We
1007  // generate new blocks as necesary.  We DON'T add the statement by default to
1008  // the CFG unless it contains control-flow.
1009  EntryConditionBlock = Visit(S->getElement(), false);
1010  if (Block) {
1011    if (!FinishBlock(EntryConditionBlock))
1012      return 0;
1013    Block = 0;
1014  }
1015
1016  // The condition block is the implicit successor for the loop body as well as
1017  // any code above the loop.
1018  Succ = EntryConditionBlock;
1019
1020  // Now create the true branch.
1021  {
1022    // Save the current values for Succ, continue and break targets.
1023    SaveAndRestore<CFGBlock*> save_Succ(Succ),
1024      save_continue(ContinueTargetBlock), save_break(BreakTargetBlock);
1025
1026    BreakTargetBlock = LoopSuccessor;
1027    ContinueTargetBlock = EntryConditionBlock;
1028
1029    CFGBlock* BodyBlock = addStmt(S->getBody());
1030
1031    if (!BodyBlock)
1032      BodyBlock = EntryConditionBlock; // can happen for "for (X in Y) ;"
1033    else if (Block) {
1034      if (!FinishBlock(BodyBlock))
1035        return 0;
1036    }
1037
1038    // This new body block is a successor to our "exit" condition block.
1039    AddSuccessor(ExitConditionBlock, BodyBlock);
1040  }
1041
1042  // Link up the condition block with the code that follows the loop.
1043  // (the false branch).
1044  AddSuccessor(ExitConditionBlock, LoopSuccessor);
1045
1046  // Now create a prologue block to contain the collection expression.
1047  Block = createBlock();
1048  return addStmt(S->getCollection());
1049}
1050
1051CFGBlock* CFGBuilder::VisitObjCAtSynchronizedStmt(ObjCAtSynchronizedStmt* S) {
1052  // FIXME: Add locking 'primitives' to CFG for @synchronized.
1053
1054  // Inline the body.
1055  CFGBlock *SyncBlock = addStmt(S->getSynchBody());
1056
1057  // The sync body starts its own basic block.  This makes it a little easier
1058  // for diagnostic clients.
1059  if (SyncBlock) {
1060    if (!FinishBlock(SyncBlock))
1061      return 0;
1062
1063    Block = 0;
1064  }
1065
1066  Succ = SyncBlock;
1067
1068  // Inline the sync expression.
1069  return addStmt(S->getSynchExpr());
1070}
1071
1072CFGBlock* CFGBuilder::VisitObjCAtTryStmt(ObjCAtTryStmt* S) {
1073  // FIXME
1074  return NYS();
1075}
1076
1077CFGBlock* CFGBuilder::VisitWhileStmt(WhileStmt* W) {
1078  CFGBlock* LoopSuccessor = NULL;
1079
1080  // "while" is a control-flow statement.  Thus we stop processing the current
1081  // block.
1082  if (Block) {
1083    if (!FinishBlock(Block))
1084      return 0;
1085    LoopSuccessor = Block;
1086  } else
1087    LoopSuccessor = Succ;
1088
1089  // Because of short-circuit evaluation, the condition of the loop can span
1090  // multiple basic blocks.  Thus we need the "Entry" and "Exit" blocks that
1091  // evaluate the condition.
1092  CFGBlock* ExitConditionBlock = createBlock(false);
1093  CFGBlock* EntryConditionBlock = ExitConditionBlock;
1094
1095  // Set the terminator for the "exit" condition block.
1096  ExitConditionBlock->setTerminator(W);
1097
1098  // Now add the actual condition to the condition block.  Because the condition
1099  // itself may contain control-flow, new blocks may be created.  Thus we update
1100  // "Succ" after adding the condition.
1101  if (Stmt* C = W->getCond()) {
1102    Block = ExitConditionBlock;
1103    EntryConditionBlock = addStmt(C);
1104    assert(Block == EntryConditionBlock);
1105    if (Block) {
1106      if (!FinishBlock(EntryConditionBlock))
1107        return 0;
1108    }
1109  }
1110
1111  // The condition block is the implicit successor for the loop body as well as
1112  // any code above the loop.
1113  Succ = EntryConditionBlock;
1114
1115  // See if this is a known constant.
1116  const TryResult& KnownVal = TryEvaluateBool(W->getCond());
1117
1118  // Process the loop body.
1119  {
1120    assert(W->getBody());
1121
1122    // Save the current values for Block, Succ, and continue and break targets
1123    SaveAndRestore<CFGBlock*> save_Block(Block), save_Succ(Succ),
1124                              save_continue(ContinueTargetBlock),
1125                              save_break(BreakTargetBlock);
1126
1127    // Create an empty block to represent the transition block for looping back
1128    // to the head of the loop.
1129    Block = 0;
1130    assert(Succ == EntryConditionBlock);
1131    Succ = createBlock();
1132    Succ->setLoopTarget(W);
1133    ContinueTargetBlock = Succ;
1134
1135    // All breaks should go to the code following the loop.
1136    BreakTargetBlock = LoopSuccessor;
1137
1138    // NULL out Block to force lazy instantiation of blocks for the body.
1139    Block = NULL;
1140
1141    // Create the body.  The returned block is the entry to the loop body.
1142    CFGBlock* BodyBlock = addStmt(W->getBody());
1143
1144    if (!BodyBlock)
1145      BodyBlock = ContinueTargetBlock; // can happen for "while(...) ;"
1146    else if (Block) {
1147      if (!FinishBlock(BodyBlock))
1148        return 0;
1149    }
1150
1151    // Add the loop body entry as a successor to the condition.
1152    AddSuccessor(ExitConditionBlock, KnownVal.isFalse() ? NULL : BodyBlock);
1153  }
1154
1155  // Link up the condition block with the code that follows the loop.  (the
1156  // false branch).
1157  AddSuccessor(ExitConditionBlock, KnownVal.isTrue() ? NULL : LoopSuccessor);
1158
1159  // There can be no more statements in the condition block since we loop back
1160  // to this block.  NULL out Block to force lazy creation of another block.
1161  Block = NULL;
1162
1163  // Return the condition block, which is the dominating block for the loop.
1164  Succ = EntryConditionBlock;
1165  return EntryConditionBlock;
1166}
1167
1168
1169CFGBlock *CFGBuilder::VisitObjCAtCatchStmt(ObjCAtCatchStmt* S) {
1170  // FIXME: For now we pretend that @catch and the code it contains does not
1171  //  exit.
1172  return Block;
1173}
1174
1175CFGBlock* CFGBuilder::VisitObjCAtThrowStmt(ObjCAtThrowStmt* S) {
1176  // FIXME: This isn't complete.  We basically treat @throw like a return
1177  //  statement.
1178
1179  // If we were in the middle of a block we stop processing that block.
1180  if (Block && !FinishBlock(Block))
1181    return 0;
1182
1183  // Create the new block.
1184  Block = createBlock(false);
1185
1186  // The Exit block is the only successor.
1187  AddSuccessor(Block, &cfg->getExit());
1188
1189  // Add the statement to the block.  This may create new blocks if S contains
1190  // control-flow (short-circuit operations).
1191  return VisitStmt(S, true);
1192}
1193
1194CFGBlock* CFGBuilder::VisitCXXThrowExpr(CXXThrowExpr* T) {
1195  // If we were in the middle of a block we stop processing that block.
1196  if (Block && !FinishBlock(Block))
1197    return 0;
1198
1199  // Create the new block.
1200  Block = createBlock(false);
1201
1202  // The Exit block is the only successor.
1203  AddSuccessor(Block, &cfg->getExit());
1204
1205  // Add the statement to the block.  This may create new blocks if S contains
1206  // control-flow (short-circuit operations).
1207  return VisitStmt(T, true);
1208}
1209
1210CFGBlock *CFGBuilder::VisitDoStmt(DoStmt* D) {
1211  CFGBlock* LoopSuccessor = NULL;
1212
1213  // "do...while" is a control-flow statement.  Thus we stop processing the
1214  // current block.
1215  if (Block) {
1216    if (!FinishBlock(Block))
1217      return 0;
1218    LoopSuccessor = Block;
1219  } else
1220    LoopSuccessor = Succ;
1221
1222  // Because of short-circuit evaluation, the condition of the loop can span
1223  // multiple basic blocks.  Thus we need the "Entry" and "Exit" blocks that
1224  // evaluate the condition.
1225  CFGBlock* ExitConditionBlock = createBlock(false);
1226  CFGBlock* EntryConditionBlock = ExitConditionBlock;
1227
1228  // Set the terminator for the "exit" condition block.
1229  ExitConditionBlock->setTerminator(D);
1230
1231  // Now add the actual condition to the condition block.  Because the condition
1232  // itself may contain control-flow, new blocks may be created.
1233  if (Stmt* C = D->getCond()) {
1234    Block = ExitConditionBlock;
1235    EntryConditionBlock = addStmt(C);
1236    if (Block) {
1237      if (!FinishBlock(EntryConditionBlock))
1238        return 0;
1239    }
1240  }
1241
1242  // The condition block is the implicit successor for the loop body.
1243  Succ = EntryConditionBlock;
1244
1245  // See if this is a known constant.
1246  const TryResult &KnownVal = TryEvaluateBool(D->getCond());
1247
1248  // Process the loop body.
1249  CFGBlock* BodyBlock = NULL;
1250  {
1251    assert (D->getBody());
1252
1253    // Save the current values for Block, Succ, and continue and break targets
1254    SaveAndRestore<CFGBlock*> save_Block(Block), save_Succ(Succ),
1255    save_continue(ContinueTargetBlock),
1256    save_break(BreakTargetBlock);
1257
1258    // All continues within this loop should go to the condition block
1259    ContinueTargetBlock = EntryConditionBlock;
1260
1261    // All breaks should go to the code following the loop.
1262    BreakTargetBlock = LoopSuccessor;
1263
1264    // NULL out Block to force lazy instantiation of blocks for the body.
1265    Block = NULL;
1266
1267    // Create the body.  The returned block is the entry to the loop body.
1268    BodyBlock = addStmt(D->getBody());
1269
1270    if (!BodyBlock)
1271      BodyBlock = EntryConditionBlock; // can happen for "do ; while(...)"
1272    else if (Block) {
1273      if (!FinishBlock(BodyBlock))
1274        return 0;
1275    }
1276
1277    // Add an intermediate block between the BodyBlock and the
1278    // ExitConditionBlock to represent the "loop back" transition.  Create an
1279    // empty block to represent the transition block for looping back to the
1280    // head of the loop.
1281    // FIXME: Can we do this more efficiently without adding another block?
1282    Block = NULL;
1283    Succ = BodyBlock;
1284    CFGBlock *LoopBackBlock = createBlock();
1285    LoopBackBlock->setLoopTarget(D);
1286
1287    // Add the loop body entry as a successor to the condition.
1288    AddSuccessor(ExitConditionBlock, KnownVal.isFalse() ? NULL : LoopBackBlock);
1289  }
1290
1291  // Link up the condition block with the code that follows the loop.
1292  // (the false branch).
1293  AddSuccessor(ExitConditionBlock, KnownVal.isTrue() ? NULL : LoopSuccessor);
1294
1295  // There can be no more statements in the body block(s) since we loop back to
1296  // the body.  NULL out Block to force lazy creation of another block.
1297  Block = NULL;
1298
1299  // Return the loop body, which is the dominating block for the loop.
1300  Succ = BodyBlock;
1301  return BodyBlock;
1302}
1303
1304CFGBlock* CFGBuilder::VisitContinueStmt(ContinueStmt* C) {
1305  // "continue" is a control-flow statement.  Thus we stop processing the
1306  // current block.
1307  if (Block && !FinishBlock(Block))
1308      return 0;
1309
1310  // Now create a new block that ends with the continue statement.
1311  Block = createBlock(false);
1312  Block->setTerminator(C);
1313
1314  // If there is no target for the continue, then we are looking at an
1315  // incomplete AST.  This means the CFG cannot be constructed.
1316  if (ContinueTargetBlock)
1317    AddSuccessor(Block, ContinueTargetBlock);
1318  else
1319    badCFG = true;
1320
1321  return Block;
1322}
1323
1324CFGBlock *CFGBuilder::VisitSizeOfAlignOfExpr(SizeOfAlignOfExpr *E,
1325                                             bool alwaysAdd) {
1326
1327  if (alwaysAdd) {
1328    autoCreateBlock();
1329    AppendStmt(Block, E);
1330  }
1331
1332  // VLA types have expressions that must be evaluated.
1333  if (E->isArgumentType()) {
1334    for (VariableArrayType* VA = FindVA(E->getArgumentType().getTypePtr());
1335         VA != 0; VA = FindVA(VA->getElementType().getTypePtr()))
1336      addStmt(VA->getSizeExpr());
1337  }
1338
1339  return Block;
1340}
1341
1342/// VisitStmtExpr - Utility method to handle (nested) statement
1343///  expressions (a GCC extension).
1344CFGBlock* CFGBuilder::VisitStmtExpr(StmtExpr *SE, bool alwaysAdd) {
1345  if (alwaysAdd) {
1346    autoCreateBlock();
1347    AppendStmt(Block, SE);
1348  }
1349  return VisitCompoundStmt(SE->getSubStmt());
1350}
1351
1352CFGBlock* CFGBuilder::VisitSwitchStmt(SwitchStmt* Terminator) {
1353  // "switch" is a control-flow statement.  Thus we stop processing the current
1354  // block.
1355  CFGBlock* SwitchSuccessor = NULL;
1356
1357  if (Block) {
1358    if (!FinishBlock(Block))
1359      return 0;
1360    SwitchSuccessor = Block;
1361  } else SwitchSuccessor = Succ;
1362
1363  // Save the current "switch" context.
1364  SaveAndRestore<CFGBlock*> save_switch(SwitchTerminatedBlock),
1365                            save_break(BreakTargetBlock),
1366                            save_default(DefaultCaseBlock);
1367
1368  // Set the "default" case to be the block after the switch statement.  If the
1369  // switch statement contains a "default:", this value will be overwritten with
1370  // the block for that code.
1371  DefaultCaseBlock = SwitchSuccessor;
1372
1373  // Create a new block that will contain the switch statement.
1374  SwitchTerminatedBlock = createBlock(false);
1375
1376  // Now process the switch body.  The code after the switch is the implicit
1377  // successor.
1378  Succ = SwitchSuccessor;
1379  BreakTargetBlock = SwitchSuccessor;
1380
1381  // When visiting the body, the case statements should automatically get linked
1382  // up to the switch.  We also don't keep a pointer to the body, since all
1383  // control-flow from the switch goes to case/default statements.
1384  assert (Terminator->getBody() && "switch must contain a non-NULL body");
1385  Block = NULL;
1386  CFGBlock *BodyBlock = addStmt(Terminator->getBody());
1387  if (Block) {
1388    if (!FinishBlock(BodyBlock))
1389      return 0;
1390  }
1391
1392  // If we have no "default:" case, the default transition is to the code
1393  // following the switch body.
1394  AddSuccessor(SwitchTerminatedBlock, DefaultCaseBlock);
1395
1396  // Add the terminator and condition in the switch block.
1397  SwitchTerminatedBlock->setTerminator(Terminator);
1398  assert (Terminator->getCond() && "switch condition must be non-NULL");
1399  Block = SwitchTerminatedBlock;
1400
1401  return addStmt(Terminator->getCond());
1402}
1403
1404CFGBlock* CFGBuilder::VisitCaseStmt(CaseStmt* CS) {
1405  // CaseStmts are essentially labels, so they are the first statement in a
1406  // block.
1407
1408  if (CS->getSubStmt())
1409    addStmt(CS->getSubStmt());
1410
1411  CFGBlock* CaseBlock = Block;
1412  if (!CaseBlock)
1413    CaseBlock = createBlock();
1414
1415  // Cases statements partition blocks, so this is the top of the basic block we
1416  // were processing (the "case XXX:" is the label).
1417  CaseBlock->setLabel(CS);
1418
1419  if (!FinishBlock(CaseBlock))
1420    return 0;
1421
1422  // Add this block to the list of successors for the block with the switch
1423  // statement.
1424  assert(SwitchTerminatedBlock);
1425  AddSuccessor(SwitchTerminatedBlock, CaseBlock);
1426
1427  // We set Block to NULL to allow lazy creation of a new block (if necessary)
1428  Block = NULL;
1429
1430  // This block is now the implicit successor of other blocks.
1431  Succ = CaseBlock;
1432
1433  return CaseBlock;
1434}
1435
1436CFGBlock* CFGBuilder::VisitDefaultStmt(DefaultStmt* Terminator) {
1437  if (Terminator->getSubStmt())
1438    addStmt(Terminator->getSubStmt());
1439
1440  DefaultCaseBlock = Block;
1441
1442  if (!DefaultCaseBlock)
1443    DefaultCaseBlock = createBlock();
1444
1445  // Default statements partition blocks, so this is the top of the basic block
1446  // we were processing (the "default:" is the label).
1447  DefaultCaseBlock->setLabel(Terminator);
1448
1449  if (!FinishBlock(DefaultCaseBlock))
1450    return 0;
1451
1452  // Unlike case statements, we don't add the default block to the successors
1453  // for the switch statement immediately.  This is done when we finish
1454  // processing the switch statement.  This allows for the default case
1455  // (including a fall-through to the code after the switch statement) to always
1456  // be the last successor of a switch-terminated block.
1457
1458  // We set Block to NULL to allow lazy creation of a new block (if necessary)
1459  Block = NULL;
1460
1461  // This block is now the implicit successor of other blocks.
1462  Succ = DefaultCaseBlock;
1463
1464  return DefaultCaseBlock;
1465}
1466
1467CFGBlock* CFGBuilder::VisitIndirectGotoStmt(IndirectGotoStmt* I) {
1468  // Lazily create the indirect-goto dispatch block if there isn't one already.
1469  CFGBlock* IBlock = cfg->getIndirectGotoBlock();
1470
1471  if (!IBlock) {
1472    IBlock = createBlock(false);
1473    cfg->setIndirectGotoBlock(IBlock);
1474  }
1475
1476  // IndirectGoto is a control-flow statement.  Thus we stop processing the
1477  // current block and create a new one.
1478  if (Block && !FinishBlock(Block))
1479    return 0;
1480
1481  Block = createBlock(false);
1482  Block->setTerminator(I);
1483  AddSuccessor(Block, IBlock);
1484  return addStmt(I->getTarget());
1485}
1486
1487} // end anonymous namespace
1488
1489/// createBlock - Constructs and adds a new CFGBlock to the CFG.  The block has
1490///  no successors or predecessors.  If this is the first block created in the
1491///  CFG, it is automatically set to be the Entry and Exit of the CFG.
1492CFGBlock* CFG::createBlock() {
1493  bool first_block = begin() == end();
1494
1495  // Create the block.
1496  CFGBlock *Mem = getAllocator().Allocate<CFGBlock>();
1497  new (Mem) CFGBlock(NumBlockIDs++, BlkBVC);
1498  Blocks.push_back(Mem, BlkBVC);
1499
1500  // If this is the first block, set it as the Entry and Exit.
1501  if (first_block)
1502    Entry = Exit = &back();
1503
1504  // Return the block.
1505  return &back();
1506}
1507
1508/// buildCFG - Constructs a CFG from an AST.  Ownership of the returned
1509///  CFG is returned to the caller.
1510CFG* CFG::buildCFG(Stmt* Statement, ASTContext *C) {
1511  CFGBuilder Builder;
1512  return Builder.buildCFG(Statement, C);
1513}
1514
1515//===----------------------------------------------------------------------===//
1516// CFG: Queries for BlkExprs.
1517//===----------------------------------------------------------------------===//
1518
1519namespace {
1520  typedef llvm::DenseMap<const Stmt*,unsigned> BlkExprMapTy;
1521}
1522
1523static void FindSubExprAssignments(Stmt* Terminator, llvm::SmallPtrSet<Expr*,50>& Set) {
1524  if (!Terminator)
1525    return;
1526
1527  for (Stmt::child_iterator I=Terminator->child_begin(), E=Terminator->child_end(); I!=E; ++I) {
1528    if (!*I) continue;
1529
1530    if (BinaryOperator* B = dyn_cast<BinaryOperator>(*I))
1531      if (B->isAssignmentOp()) Set.insert(B);
1532
1533    FindSubExprAssignments(*I, Set);
1534  }
1535}
1536
1537static BlkExprMapTy* PopulateBlkExprMap(CFG& cfg) {
1538  BlkExprMapTy* M = new BlkExprMapTy();
1539
1540  // Look for assignments that are used as subexpressions.  These are the only
1541  // assignments that we want to *possibly* register as a block-level
1542  // expression.  Basically, if an assignment occurs both in a subexpression and
1543  // at the block-level, it is a block-level expression.
1544  llvm::SmallPtrSet<Expr*,50> SubExprAssignments;
1545
1546  for (CFG::iterator I=cfg.begin(), E=cfg.end(); I != E; ++I)
1547    for (CFGBlock::iterator BI=(*I)->begin(), EI=(*I)->end(); BI != EI; ++BI)
1548      FindSubExprAssignments(*BI, SubExprAssignments);
1549
1550  for (CFG::iterator I=cfg.begin(), E=cfg.end(); I != E; ++I) {
1551
1552    // Iterate over the statements again on identify the Expr* and Stmt* at the
1553    // block-level that are block-level expressions.
1554
1555    for (CFGBlock::iterator BI=(*I)->begin(), EI=(*I)->end(); BI != EI; ++BI)
1556      if (Expr* Exp = dyn_cast<Expr>(*BI)) {
1557
1558        if (BinaryOperator* B = dyn_cast<BinaryOperator>(Exp)) {
1559          // Assignment expressions that are not nested within another
1560          // expression are really "statements" whose value is never used by
1561          // another expression.
1562          if (B->isAssignmentOp() && !SubExprAssignments.count(Exp))
1563            continue;
1564        } else if (const StmtExpr* Terminator = dyn_cast<StmtExpr>(Exp)) {
1565          // Special handling for statement expressions.  The last statement in
1566          // the statement expression is also a block-level expr.
1567          const CompoundStmt* C = Terminator->getSubStmt();
1568          if (!C->body_empty()) {
1569            unsigned x = M->size();
1570            (*M)[C->body_back()] = x;
1571          }
1572        }
1573
1574        unsigned x = M->size();
1575        (*M)[Exp] = x;
1576      }
1577
1578    // Look at terminators.  The condition is a block-level expression.
1579
1580    Stmt* S = (*I)->getTerminatorCondition();
1581
1582    if (S && M->find(S) == M->end()) {
1583        unsigned x = M->size();
1584        (*M)[S] = x;
1585    }
1586  }
1587
1588  return M;
1589}
1590
1591CFG::BlkExprNumTy CFG::getBlkExprNum(const Stmt* S) {
1592  assert(S != NULL);
1593  if (!BlkExprMap) { BlkExprMap = (void*) PopulateBlkExprMap(*this); }
1594
1595  BlkExprMapTy* M = reinterpret_cast<BlkExprMapTy*>(BlkExprMap);
1596  BlkExprMapTy::iterator I = M->find(S);
1597
1598  if (I == M->end()) return CFG::BlkExprNumTy();
1599  else return CFG::BlkExprNumTy(I->second);
1600}
1601
1602unsigned CFG::getNumBlkExprs() {
1603  if (const BlkExprMapTy* M = reinterpret_cast<const BlkExprMapTy*>(BlkExprMap))
1604    return M->size();
1605  else {
1606    // We assume callers interested in the number of BlkExprs will want
1607    // the map constructed if it doesn't already exist.
1608    BlkExprMap = (void*) PopulateBlkExprMap(*this);
1609    return reinterpret_cast<BlkExprMapTy*>(BlkExprMap)->size();
1610  }
1611}
1612
1613//===----------------------------------------------------------------------===//
1614// Cleanup: CFG dstor.
1615//===----------------------------------------------------------------------===//
1616
1617CFG::~CFG() {
1618  delete reinterpret_cast<const BlkExprMapTy*>(BlkExprMap);
1619}
1620
1621//===----------------------------------------------------------------------===//
1622// CFG pretty printing
1623//===----------------------------------------------------------------------===//
1624
1625namespace {
1626
1627class VISIBILITY_HIDDEN StmtPrinterHelper : public PrinterHelper  {
1628
1629  typedef llvm::DenseMap<Stmt*,std::pair<unsigned,unsigned> > StmtMapTy;
1630  StmtMapTy StmtMap;
1631  signed CurrentBlock;
1632  unsigned CurrentStmt;
1633  const LangOptions &LangOpts;
1634public:
1635
1636  StmtPrinterHelper(const CFG* cfg, const LangOptions &LO)
1637    : CurrentBlock(0), CurrentStmt(0), LangOpts(LO) {
1638    for (CFG::const_iterator I = cfg->begin(), E = cfg->end(); I != E; ++I ) {
1639      unsigned j = 1;
1640      for (CFGBlock::const_iterator BI = (*I)->begin(), BEnd = (*I)->end() ;
1641           BI != BEnd; ++BI, ++j )
1642        StmtMap[*BI] = std::make_pair((*I)->getBlockID(),j);
1643      }
1644  }
1645
1646  virtual ~StmtPrinterHelper() {}
1647
1648  const LangOptions &getLangOpts() const { return LangOpts; }
1649  void setBlockID(signed i) { CurrentBlock = i; }
1650  void setStmtID(unsigned i) { CurrentStmt = i; }
1651
1652  virtual bool handledStmt(Stmt* Terminator, llvm::raw_ostream& OS) {
1653
1654    StmtMapTy::iterator I = StmtMap.find(Terminator);
1655
1656    if (I == StmtMap.end())
1657      return false;
1658
1659    if (CurrentBlock >= 0 && I->second.first == (unsigned) CurrentBlock
1660                          && I->second.second == CurrentStmt)
1661      return false;
1662
1663      OS << "[B" << I->second.first << "." << I->second.second << "]";
1664    return true;
1665  }
1666};
1667} // end anonymous namespace
1668
1669
1670namespace {
1671class VISIBILITY_HIDDEN CFGBlockTerminatorPrint
1672  : public StmtVisitor<CFGBlockTerminatorPrint,void> {
1673
1674  llvm::raw_ostream& OS;
1675  StmtPrinterHelper* Helper;
1676  PrintingPolicy Policy;
1677
1678public:
1679  CFGBlockTerminatorPrint(llvm::raw_ostream& os, StmtPrinterHelper* helper,
1680                          const PrintingPolicy &Policy)
1681    : OS(os), Helper(helper), Policy(Policy) {}
1682
1683  void VisitIfStmt(IfStmt* I) {
1684    OS << "if ";
1685    I->getCond()->printPretty(OS,Helper,Policy);
1686  }
1687
1688  // Default case.
1689  void VisitStmt(Stmt* Terminator) {
1690    Terminator->printPretty(OS, Helper, Policy);
1691  }
1692
1693  void VisitForStmt(ForStmt* F) {
1694    OS << "for (" ;
1695    if (F->getInit()) OS << "...";
1696    OS << "; ";
1697    if (Stmt* C = F->getCond()) C->printPretty(OS, Helper, Policy);
1698    OS << "; ";
1699    if (F->getInc()) OS << "...";
1700    OS << ")";
1701  }
1702
1703  void VisitWhileStmt(WhileStmt* W) {
1704    OS << "while " ;
1705    if (Stmt* C = W->getCond()) C->printPretty(OS, Helper, Policy);
1706  }
1707
1708  void VisitDoStmt(DoStmt* D) {
1709    OS << "do ... while ";
1710    if (Stmt* C = D->getCond()) C->printPretty(OS, Helper, Policy);
1711  }
1712
1713  void VisitSwitchStmt(SwitchStmt* Terminator) {
1714    OS << "switch ";
1715    Terminator->getCond()->printPretty(OS, Helper, Policy);
1716  }
1717
1718  void VisitConditionalOperator(ConditionalOperator* C) {
1719    C->getCond()->printPretty(OS, Helper, Policy);
1720    OS << " ? ... : ...";
1721  }
1722
1723  void VisitChooseExpr(ChooseExpr* C) {
1724    OS << "__builtin_choose_expr( ";
1725    C->getCond()->printPretty(OS, Helper, Policy);
1726    OS << " )";
1727  }
1728
1729  void VisitIndirectGotoStmt(IndirectGotoStmt* I) {
1730    OS << "goto *";
1731    I->getTarget()->printPretty(OS, Helper, Policy);
1732  }
1733
1734  void VisitBinaryOperator(BinaryOperator* B) {
1735    if (!B->isLogicalOp()) {
1736      VisitExpr(B);
1737      return;
1738    }
1739
1740    B->getLHS()->printPretty(OS, Helper, Policy);
1741
1742    switch (B->getOpcode()) {
1743      case BinaryOperator::LOr:
1744        OS << " || ...";
1745        return;
1746      case BinaryOperator::LAnd:
1747        OS << " && ...";
1748        return;
1749      default:
1750        assert(false && "Invalid logical operator.");
1751    }
1752  }
1753
1754  void VisitExpr(Expr* E) {
1755    E->printPretty(OS, Helper, Policy);
1756  }
1757};
1758} // end anonymous namespace
1759
1760
1761static void print_stmt(llvm::raw_ostream &OS, StmtPrinterHelper* Helper,
1762                       Stmt* Terminator) {
1763  if (Helper) {
1764    // special printing for statement-expressions.
1765    if (StmtExpr* SE = dyn_cast<StmtExpr>(Terminator)) {
1766      CompoundStmt* Sub = SE->getSubStmt();
1767
1768      if (Sub->child_begin() != Sub->child_end()) {
1769        OS << "({ ... ; ";
1770        Helper->handledStmt(*SE->getSubStmt()->body_rbegin(),OS);
1771        OS << " })\n";
1772        return;
1773      }
1774    }
1775
1776    // special printing for comma expressions.
1777    if (BinaryOperator* B = dyn_cast<BinaryOperator>(Terminator)) {
1778      if (B->getOpcode() == BinaryOperator::Comma) {
1779        OS << "... , ";
1780        Helper->handledStmt(B->getRHS(),OS);
1781        OS << '\n';
1782        return;
1783      }
1784    }
1785  }
1786
1787  Terminator->printPretty(OS, Helper, PrintingPolicy(Helper->getLangOpts()));
1788
1789  // Expressions need a newline.
1790  if (isa<Expr>(Terminator)) OS << '\n';
1791}
1792
1793static void print_block(llvm::raw_ostream& OS, const CFG* cfg,
1794                        const CFGBlock& B,
1795                        StmtPrinterHelper* Helper, bool print_edges) {
1796
1797  if (Helper) Helper->setBlockID(B.getBlockID());
1798
1799  // Print the header.
1800  OS << "\n [ B" << B.getBlockID();
1801
1802  if (&B == &cfg->getEntry())
1803    OS << " (ENTRY) ]\n";
1804  else if (&B == &cfg->getExit())
1805    OS << " (EXIT) ]\n";
1806  else if (&B == cfg->getIndirectGotoBlock())
1807    OS << " (INDIRECT GOTO DISPATCH) ]\n";
1808  else
1809    OS << " ]\n";
1810
1811  // Print the label of this block.
1812  if (Stmt* Terminator = const_cast<Stmt*>(B.getLabel())) {
1813
1814    if (print_edges)
1815      OS << "    ";
1816
1817    if (LabelStmt* L = dyn_cast<LabelStmt>(Terminator))
1818      OS << L->getName();
1819    else if (CaseStmt* C = dyn_cast<CaseStmt>(Terminator)) {
1820      OS << "case ";
1821      C->getLHS()->printPretty(OS, Helper,
1822                               PrintingPolicy(Helper->getLangOpts()));
1823      if (C->getRHS()) {
1824        OS << " ... ";
1825        C->getRHS()->printPretty(OS, Helper,
1826                                 PrintingPolicy(Helper->getLangOpts()));
1827      }
1828    } else if (isa<DefaultStmt>(Terminator))
1829      OS << "default";
1830    else
1831      assert(false && "Invalid label statement in CFGBlock.");
1832
1833    OS << ":\n";
1834  }
1835
1836  // Iterate through the statements in the block and print them.
1837  unsigned j = 1;
1838
1839  for (CFGBlock::const_iterator I = B.begin(), E = B.end() ;
1840       I != E ; ++I, ++j ) {
1841
1842    // Print the statement # in the basic block and the statement itself.
1843    if (print_edges)
1844      OS << "    ";
1845
1846    OS << llvm::format("%3d", j) << ": ";
1847
1848    if (Helper)
1849      Helper->setStmtID(j);
1850
1851    print_stmt(OS,Helper,*I);
1852  }
1853
1854  // Print the terminator of this block.
1855  if (B.getTerminator()) {
1856    if (print_edges)
1857      OS << "    ";
1858
1859    OS << "  T: ";
1860
1861    if (Helper) Helper->setBlockID(-1);
1862
1863    CFGBlockTerminatorPrint TPrinter(OS, Helper,
1864                                     PrintingPolicy(Helper->getLangOpts()));
1865    TPrinter.Visit(const_cast<Stmt*>(B.getTerminator()));
1866    OS << '\n';
1867  }
1868
1869  if (print_edges) {
1870    // Print the predecessors of this block.
1871    OS << "    Predecessors (" << B.pred_size() << "):";
1872    unsigned i = 0;
1873
1874    for (CFGBlock::const_pred_iterator I = B.pred_begin(), E = B.pred_end();
1875         I != E; ++I, ++i) {
1876
1877      if (i == 8 || (i-8) == 0)
1878        OS << "\n     ";
1879
1880      OS << " B" << (*I)->getBlockID();
1881    }
1882
1883    OS << '\n';
1884
1885    // Print the successors of this block.
1886    OS << "    Successors (" << B.succ_size() << "):";
1887    i = 0;
1888
1889    for (CFGBlock::const_succ_iterator I = B.succ_begin(), E = B.succ_end();
1890         I != E; ++I, ++i) {
1891
1892      if (i == 8 || (i-8) % 10 == 0)
1893        OS << "\n    ";
1894
1895      if (*I)
1896        OS << " B" << (*I)->getBlockID();
1897      else
1898        OS  << " NULL";
1899    }
1900
1901    OS << '\n';
1902  }
1903}
1904
1905
1906/// dump - A simple pretty printer of a CFG that outputs to stderr.
1907void CFG::dump(const LangOptions &LO) const { print(llvm::errs(), LO); }
1908
1909/// print - A simple pretty printer of a CFG that outputs to an ostream.
1910void CFG::print(llvm::raw_ostream &OS, const LangOptions &LO) const {
1911  StmtPrinterHelper Helper(this, LO);
1912
1913  // Print the entry block.
1914  print_block(OS, this, getEntry(), &Helper, true);
1915
1916  // Iterate through the CFGBlocks and print them one by one.
1917  for (const_iterator I = Blocks.begin(), E = Blocks.end() ; I != E ; ++I) {
1918    // Skip the entry block, because we already printed it.
1919    if (&(**I) == &getEntry() || &(**I) == &getExit())
1920      continue;
1921
1922    print_block(OS, this, **I, &Helper, true);
1923  }
1924
1925  // Print the exit block.
1926  print_block(OS, this, getExit(), &Helper, true);
1927  OS.flush();
1928}
1929
1930/// dump - A simply pretty printer of a CFGBlock that outputs to stderr.
1931void CFGBlock::dump(const CFG* cfg, const LangOptions &LO) const {
1932  print(llvm::errs(), cfg, LO);
1933}
1934
1935/// print - A simple pretty printer of a CFGBlock that outputs to an ostream.
1936///   Generally this will only be called from CFG::print.
1937void CFGBlock::print(llvm::raw_ostream& OS, const CFG* cfg,
1938                     const LangOptions &LO) const {
1939  StmtPrinterHelper Helper(cfg, LO);
1940  print_block(OS, cfg, *this, &Helper, true);
1941}
1942
1943/// printTerminator - A simple pretty printer of the terminator of a CFGBlock.
1944void CFGBlock::printTerminator(llvm::raw_ostream &OS,
1945                               const LangOptions &LO) const {
1946  CFGBlockTerminatorPrint TPrinter(OS, NULL, PrintingPolicy(LO));
1947  TPrinter.Visit(const_cast<Stmt*>(getTerminator()));
1948}
1949
1950Stmt* CFGBlock::getTerminatorCondition() {
1951
1952  if (!Terminator)
1953    return NULL;
1954
1955  Expr* E = NULL;
1956
1957  switch (Terminator->getStmtClass()) {
1958    default:
1959      break;
1960
1961    case Stmt::ForStmtClass:
1962      E = cast<ForStmt>(Terminator)->getCond();
1963      break;
1964
1965    case Stmt::WhileStmtClass:
1966      E = cast<WhileStmt>(Terminator)->getCond();
1967      break;
1968
1969    case Stmt::DoStmtClass:
1970      E = cast<DoStmt>(Terminator)->getCond();
1971      break;
1972
1973    case Stmt::IfStmtClass:
1974      E = cast<IfStmt>(Terminator)->getCond();
1975      break;
1976
1977    case Stmt::ChooseExprClass:
1978      E = cast<ChooseExpr>(Terminator)->getCond();
1979      break;
1980
1981    case Stmt::IndirectGotoStmtClass:
1982      E = cast<IndirectGotoStmt>(Terminator)->getTarget();
1983      break;
1984
1985    case Stmt::SwitchStmtClass:
1986      E = cast<SwitchStmt>(Terminator)->getCond();
1987      break;
1988
1989    case Stmt::ConditionalOperatorClass:
1990      E = cast<ConditionalOperator>(Terminator)->getCond();
1991      break;
1992
1993    case Stmt::BinaryOperatorClass: // '&&' and '||'
1994      E = cast<BinaryOperator>(Terminator)->getLHS();
1995      break;
1996
1997    case Stmt::ObjCForCollectionStmtClass:
1998      return Terminator;
1999  }
2000
2001  return E ? E->IgnoreParens() : NULL;
2002}
2003
2004bool CFGBlock::hasBinaryBranchTerminator() const {
2005
2006  if (!Terminator)
2007    return false;
2008
2009  Expr* E = NULL;
2010
2011  switch (Terminator->getStmtClass()) {
2012    default:
2013      return false;
2014
2015    case Stmt::ForStmtClass:
2016    case Stmt::WhileStmtClass:
2017    case Stmt::DoStmtClass:
2018    case Stmt::IfStmtClass:
2019    case Stmt::ChooseExprClass:
2020    case Stmt::ConditionalOperatorClass:
2021    case Stmt::BinaryOperatorClass:
2022      return true;
2023  }
2024
2025  return E ? E->IgnoreParens() : NULL;
2026}
2027
2028
2029//===----------------------------------------------------------------------===//
2030// CFG Graphviz Visualization
2031//===----------------------------------------------------------------------===//
2032
2033
2034#ifndef NDEBUG
2035static StmtPrinterHelper* GraphHelper;
2036#endif
2037
2038void CFG::viewCFG(const LangOptions &LO) const {
2039#ifndef NDEBUG
2040  StmtPrinterHelper H(this, LO);
2041  GraphHelper = &H;
2042  llvm::ViewGraph(this,"CFG");
2043  GraphHelper = NULL;
2044#endif
2045}
2046
2047namespace llvm {
2048template<>
2049struct DOTGraphTraits<const CFG*> : public DefaultDOTGraphTraits {
2050  static std::string getNodeLabel(const CFGBlock* Node, const CFG* Graph,
2051                                  bool ShortNames) {
2052
2053#ifndef NDEBUG
2054    std::string OutSStr;
2055    llvm::raw_string_ostream Out(OutSStr);
2056    print_block(Out,Graph, *Node, GraphHelper, false);
2057    std::string& OutStr = Out.str();
2058
2059    if (OutStr[0] == '\n') OutStr.erase(OutStr.begin());
2060
2061    // Process string output to make it nicer...
2062    for (unsigned i = 0; i != OutStr.length(); ++i)
2063      if (OutStr[i] == '\n') {                            // Left justify
2064        OutStr[i] = '\\';
2065        OutStr.insert(OutStr.begin()+i+1, 'l');
2066      }
2067
2068    return OutStr;
2069#else
2070    return "";
2071#endif
2072  }
2073};
2074} // end namespace llvm
2075