domtest.c revision 58f6f1e37ab32fdd0c8bab6771d8e09bc139e9ed
1// 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
166