• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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