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