summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWill Dietz <wdietz2@illinois.edu>2013-01-07 09:51:17 +0000
committerWill Dietz <wdietz2@illinois.edu>2013-01-07 09:51:17 +0000
commitdf9a2bbcb1a812f0977964d56714e444374dcd80 (patch)
tree94bda76de97f660038a8ecfd1766975ea5113792
parent1b89629616f6562e40896b9ae62e9f4bebcbaec1 (diff)
downloadbcm5719-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.cpp4
-rw-r--r--clang/test/Analysis/cfg.cpp37
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;
+ }
+}
OpenPOWER on IntegriCloud