1 // RUN: %clang -cc1 -analyze -analyzer-checker=debug.DumpDominators %s 2>&1 | FileCheck %s
2
3 // Test the DominatorsTree implementation with various control flows
test1()4 int 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
test2()37 int 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
test3()65 int 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
test4()94 int 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
test5()124 int 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
166