diff options
author | Will Dietz <wdietz2@illinois.edu> | 2013-01-07 09:51:17 +0000 |
---|---|---|
committer | Will Dietz <wdietz2@illinois.edu> | 2013-01-07 09:51:17 +0000 |
commit | df9a2bbcb1a812f0977964d56714e444374dcd80 (patch) | |
tree | 94bda76de97f660038a8ecfd1766975ea5113792 | |
parent | 1b89629616f6562e40896b9ae62e9f4bebcbaec1 (diff) | |
download | bcm5719-llvm-df9a2bbcb1a812f0977964d56714e444374dcd80.tar.gz bcm5719-llvm-df9a2bbcb1a812f0977964d56714e444374dcd80.zip |
CFG.cpp: Fix wrapping logic when printing block preds/succs.
First check only wrapped with i==8, second wrapped at i==2,8,18,28,...
This fix restores the intended behavior: i==8,18,28,...
Found with -fsanitize=integer.
llvm-svn: 171718
-rw-r--r-- | clang/lib/Analysis/CFG.cpp | 4 | ||||
-rw-r--r-- | clang/test/Analysis/cfg.cpp | 37 |
2 files changed, 39 insertions, 2 deletions
diff --git a/clang/lib/Analysis/CFG.cpp b/clang/lib/Analysis/CFG.cpp index 3fe76d58bc0..043066bd60e 100644 --- a/clang/lib/Analysis/CFG.cpp +++ b/clang/lib/Analysis/CFG.cpp @@ -3893,7 +3893,7 @@ static void print_block(raw_ostream &OS, const CFG* cfg, for (CFGBlock::const_pred_iterator I = B.pred_begin(), E = B.pred_end(); I != E; ++I, ++i) { - if (i == 8 || (i-8) == 0) + if (i % 10 == 8) OS << "\n "; OS << " B" << (*I)->getBlockID(); @@ -3922,7 +3922,7 @@ static void print_block(raw_ostream &OS, const CFG* cfg, for (CFGBlock::const_succ_iterator I = B.succ_begin(), E = B.succ_end(); I != E; ++I, ++i) { - if (i == 8 || (i-8) % 10 == 0) + if (i % 10 == 8) OS << "\n "; if (*I) diff --git a/clang/test/Analysis/cfg.cpp b/clang/test/Analysis/cfg.cpp new file mode 100644 index 00000000000..8c1c7653db1 --- /dev/null +++ b/clang/test/Analysis/cfg.cpp @@ -0,0 +1,37 @@ +// RUN: %clang_cc1 -fsyntax-only -analyze -analyzer-checker=debug.DumpCFG %s 2>&1 | FileCheck %s +// Check the wrapping behavior when dumping the CFG. + +// CHECK: ENTRY +// CHECK-NEXT: Succs (1): B1 +// CHECK: [B1] +// CHECK: Succs (21): B2 B3 B4 B5 B6 B7 B8 B9 +// CHECK: B10 B11 B12 B13 B14 B15 B16 B17 B18 B19 +// CHECK: B20 B21 B0 +// CHECK: [B0 (EXIT)] +// CHECK-NEXT: Preds (21): B2 B3 B4 B5 B6 B7 B8 B9 +// CHECK-NEXT: B10 B11 B12 B13 B14 B15 B16 B17 B18 B19 +// CHECK-NEXT: B20 B21 B1 +void test(int i) { + switch(i) { + case 0: break; + case 1: break; + case 2: break; + case 3: break; + case 4: break; + case 5: break; + case 6: break; + case 7: break; + case 8: break; + case 9: break; + case 10: break; + case 11: break; + case 12: break; + case 13: break; + case 14: break; + case 15: break; + case 16: break; + case 17: break; + case 18: break; + case 19: break; + } +} |