blob: 245186a1c239167148847090dc81ee4f5501e666 [file] [log] [blame]
Ted Kremenek58f6f1e2011-10-25 00:25:24 +00001// RUN: %clang -cc1 -analyze -analyzer-checker=debug.DumpDominators %s 2>&1 | FileCheck %s
2
3// Test the DominatorsTree implementation with various control flows
4int test1()
5{
6 int x = 6;
7 int y = x/2;
8 int z;
9
10 while(y > 0) {
11 if(y < x) {
12 x = x/y;
13 y = y-1;
14 }else{
15 z = x - y;
16 }
17 x = x - 1;
18 x = x - 1;
19 }
20 z = x+y;
21 z = 3;
22 return 0;
23}
24
25// CHECK: Immediate dominance tree (Node#,IDom#):
26// CHECK: (0,1)
27// CHECK: (1,2)
28// CHECK: (2,8)
29// CHECK: (3,4)
30// CHECK: (4,7)
31// CHECK: (5,7)
32// CHECK: (6,7)
33// CHECK: (7,2)
34// CHECK: (8,9)
35// CHECK: (9,9)
36
37int test2()
38{
39 int x,y,z;
40
41 x = 10; y = 100;
42 if(x > 0){
43 y = 1;
44 }else{
45 while(x<=0){
46 x++;
47 y++;
48 }
49 }
50 z = y;
51
52 return 0;
53}
54
55// CHECK: Immediate dominance tree (Node#,IDom#):
56// CHECK: (0,1)
57// CHECK: (1,6)
58// CHECK: (2,6)
59// CHECK: (3,4)
60// CHECK: (4,2)
61// CHECK: (5,6)
62// CHECK: (6,7)
63// CHECK: (7,7)
64
65int test3()
66{
67 int x,y,z;
68
69 x = y = z = 1;
70 if(x>0) {
71 while(x>=0){
72 while(y>=x) {
73 x = x-1;
74 y = y/2;
75 }
76 }
77 }
78 z = y;
79
80 return 0;
81}
82
83// CHECK: Immediate dominance tree (Node#,IDom#):
84// CHECK: (0,1)
85// CHECK: (1,7)
86// CHECK: (2,7)
87// CHECK: (3,4)
88// CHECK: (4,2)
89// CHECK: (5,6)
90// CHECK: (6,4)
91// CHECK: (7,8)
92// CHECK: (8,8)
93
94int test4()
95{
96 int y = 3;
97 while(y > 0) {
98 if(y < 3) {
99 while(y>0)
100 y ++;
101 }else{
102 while(y<10)
103 y ++;
104 }
105 }
106 return 0;
107}
108
109// CHECK: Immediate dominance tree (Node#,IDom#):
110// CHECK: (0,1)
111// CHECK: (1,2)
112// CHECK: (2,11)
113// CHECK: (3,10)
114// CHECK: (4,10)
115// CHECK: (5,6)
116// CHECK: (6,4)
117// CHECK: (7,10)
118// CHECK: (8,9)
119// CHECK: (9,7)
120// CHECK: (10,2)
121// CHECK: (11,12)
122// CHECK: (12,12)
123
124int test5()
125{
126 int x,y,z,a,b,c;
127 x = 1;
128 y = 2;
129 z = 3;
130 a = 4;
131 b = 5;
132 c = 6;
133 if ( x < 10 ) {
134 if ( y < 10 ) {
135 if ( z < 10 ) {
136 x = 4;
137 } else {
138 x = 5;
139 }
140 a = 10;
141 } else {
142 x = 6;
143 }
144 b = 10;
145 } else {
146 x = 7;
147 }
148 c = 11;
149 return 0;
150}
151
152// CHECK: Immediate dominance tree (Node#,IDom#):
153// CHECK: (0,1)
154// CHECK: (1,10)
155// CHECK: (2,10)
156// CHECK: (3,9)
157// CHECK: (4,9)
158// CHECK: (5,8)
159// CHECK: (6,8)
160// CHECK: (7,8)
161// CHECK: (8,9)
162// CHECK: (9,10)
163// CHECK: (10,11)
164// CHECK: (11,11)
165