scope0.c revision 1.1.1.1 1 1.1 christos static int filelocal = 1; /* In Data section */
2 1.1 christos static int filelocal_bss; /* In BSS section */
3 1.1 christos #ifndef __STDC__
4 1.1 christos #define const /**/
5 1.1 christos #endif
6 1.1 christos static const int filelocal_ro = 201; /* In Read-Only Data section */
7 1.1 christos
8 1.1 christos extern void init1();
9 1.1 christos extern void foo();
10 1.1 christos
11 1.1 christos int autovars (int bcd, int abc);
12 1.1 christos int localscopes (int x);
13 1.1 christos int useit (int val);
14 1.1 christos int useitp (const int *val);
15 1.1 christos void init0();
16 1.1 christos void marker1 ();
17 1.1 christos void marker2 ();
18 1.1 christos void marker3 ();
19 1.1 christos void marker4 ();
20 1.1 christos
21 1.1 christos int main ()
22 1.1 christos {
23 1.1 christos init0 ();
24 1.1 christos foo ();
25 1.1 christos autovars (5, 6);
26 1.1 christos localscopes (0);
27 1.1 christos }
28 1.1 christos
29 1.1 christos /* On some systems, such as AIX, unreferenced variables are deleted
30 1.1 christos from the executable. On other compilers, such as ARM RealView,
31 1.1 christos const variables without their address taken are deleted. */
32 1.1 christos void usestatics ()
33 1.1 christos {
34 1.1 christos useitp (&filelocal);
35 1.1 christos useitp (&filelocal_bss);
36 1.1 christos useitp (&filelocal_ro);
37 1.1 christos }
38 1.1 christos
39 1.1 christos void init0 ()
40 1.1 christos {
41 1.1 christos filelocal_bss = 101;
42 1.1 christos init1 ();
43 1.1 christos }
44 1.1 christos
45 1.1 christos /* This is to derail optimizer in localscopes.
46 1.1 christos Return 1 + 2 + . . . + N. */
47 1.1 christos #ifdef PROTOTYPES
48 1.1 christos int
49 1.1 christos sum_upto (int n)
50 1.1 christos #else
51 1.1 christos int
52 1.1 christos sum_upto (n)
53 1.1 christos int n;
54 1.1 christos #endif
55 1.1 christos {
56 1.1 christos int i;
57 1.1 christos int retval = 0;
58 1.1 christos
59 1.1 christos for (i = 1; i <= n; ++i)
60 1.1 christos retval += i;
61 1.1 christos return retval;
62 1.1 christos }
63 1.1 christos
64 1.1 christos #ifdef PROTOTYPES
65 1.1 christos int
66 1.1 christos useit (int val)
67 1.1 christos #else
68 1.1 christos int
69 1.1 christos useit (val) int val;
70 1.1 christos #endif
71 1.1 christos {
72 1.1 christos static int usedval;
73 1.1 christos
74 1.1 christos usedval = val;
75 1.1 christos return val + sum_upto (0);
76 1.1 christos }
77 1.1 christos
78 1.1 christos #ifdef PROTOTYPES
79 1.1 christos int
80 1.1 christos useitp (const int *val)
81 1.1 christos #else
82 1.1 christos int
83 1.1 christos useitp (val) const int *val;
84 1.1 christos #endif
85 1.1 christos {
86 1.1 christos static int usedval;
87 1.1 christos
88 1.1 christos usedval = *val;
89 1.1 christos return *val + sum_upto (0);
90 1.1 christos }
91 1.1 christos
92 1.1 christos #ifdef PROTOTYPES
93 1.1 christos int
94 1.1 christos autovars (int bcd, int abc)
95 1.1 christos #else
96 1.1 christos int
97 1.1 christos autovars (bcd, abc)
98 1.1 christos int bcd;
99 1.1 christos int abc;
100 1.1 christos #endif
101 1.1 christos {
102 1.1 christos int i0 = useit (0), i1 = useit (1), i2 = useit (2);
103 1.1 christos int i3 = useit (3), i4 = useit (4), i5 = useit (5);
104 1.1 christos int i6 = useit (6), i7 = useit (7), i8 = useit (8);
105 1.1 christos int i9 = useit (9), i10 = useit (10), i11 = useit (11);
106 1.1 christos int i12 = useit (12), i13 = useit (13), i14 = useit (14);
107 1.1 christos int i15 = useit (15), i16 = useit (16), i17 = useit (17);
108 1.1 christos int i18 = useit (18), i19 = useit (19), i20 = useit (20);
109 1.1 christos int i21 = useit (21), i22 = useit (22), i23 = useit (23);
110 1.1 christos int i24 = useit (24), i25 = useit (25), i26 = useit (26);
111 1.1 christos int i27 = useit (27), i28 = useit (28), i29 = useit (29);
112 1.1 christos int i30 = useit (30), i31 = useit (31), i32 = useit (32);
113 1.1 christos int i33 = useit (33), i34 = useit (34), i35 = useit (35);
114 1.1 christos int i36 = useit (36), i37 = useit (37), i38 = useit (38);
115 1.1 christos int i39 = useit (39), i40 = useit (40), i41 = useit (41);
116 1.1 christos int i42 = useit (42), i43 = useit (43), i44 = useit (44);
117 1.1 christos int i45 = useit (45), i46 = useit (46), i47 = useit (47);
118 1.1 christos int i48 = useit (48), i49 = useit (49), i50 = useit (50);
119 1.1 christos int i51 = useit (51), i52 = useit (52), i53 = useit (53);
120 1.1 christos int i54 = useit (54), i55 = useit (55), i56 = useit (56);
121 1.1 christos int i57 = useit (57), i58 = useit (58), i59 = useit (59);
122 1.1 christos int i60 = useit (60), i61 = useit (61), i62 = useit (62);
123 1.1 christos int i63 = useit (63), i64 = useit (64), i65 = useit (65);
124 1.1 christos int i66 = useit (66), i67 = useit (67), i68 = useit (68);
125 1.1 christos int i69 = useit (69), i70 = useit (70), i71 = useit (71);
126 1.1 christos int i72 = useit (72), i73 = useit (73), i74 = useit (74);
127 1.1 christos int i75 = useit (75), i76 = useit (76), i77 = useit (77);
128 1.1 christos int i78 = useit (78), i79 = useit (79), i80 = useit (80);
129 1.1 christos int i81 = useit (81), i82 = useit (82), i83 = useit (83);
130 1.1 christos int i84 = useit (84), i85 = useit (85), i86 = useit (86);
131 1.1 christos int i87 = useit (87), i88 = useit (88), i89 = useit (89);
132 1.1 christos int i90 = useit (90), i91 = useit (91), i92 = useit (92);
133 1.1 christos int i93 = useit (93), i94 = useit (94), i95 = useit (95);
134 1.1 christos int i96 = useit (96), i97 = useit (97), i98 = useit (98);
135 1.1 christos int i99 = useit (99);
136 1.1 christos
137 1.1 christos /* Use all 100 of the local variables to derail agressive optimizers. */
138 1.1 christos
139 1.1 christos useit ( i0); useit ( i1); useit ( i2); useit ( i3); useit ( i4);
140 1.1 christos useit ( i5); useit ( i6); useit ( i7); useit ( i8); useit ( i9);
141 1.1 christos useit (i10); useit (i11); useit (i12); useit (i13); useit (i14);
142 1.1 christos useit (i15); useit (i16); useit (i17); useit (i18); useit (i19);
143 1.1 christos useit (i20); useit (i21); useit (i22); useit (i23); useit (i24);
144 1.1 christos useit (i25); useit (i26); useit (i27); useit (i28); useit (i29);
145 1.1 christos useit (i30); useit (i31); useit (i32); useit (i33); useit (i34);
146 1.1 christos useit (i35); useit (i36); useit (i37); useit (i38); useit (i39);
147 1.1 christos useit (i40); useit (i41); useit (i42); useit (i43); useit (i44);
148 1.1 christos useit (i45); useit (i46); useit (i47); useit (i48); useit (i49);
149 1.1 christos useit (i50); useit (i51); useit (i52); useit (i53); useit (i54);
150 1.1 christos useit (i55); useit (i56); useit (i57); useit (i58); useit (i59);
151 1.1 christos useit (i60); useit (i61); useit (i62); useit (i63); useit (i64);
152 1.1 christos useit (i65); useit (i66); useit (i67); useit (i68); useit (i69);
153 1.1 christos useit (i70); useit (i71); useit (i72); useit (i73); useit (i74);
154 1.1 christos useit (i75); useit (i76); useit (i77); useit (i78); useit (i79);
155 1.1 christos useit (i80); useit (i81); useit (i82); useit (i83); useit (i84);
156 1.1 christos useit (i85); useit (i86); useit (i87); useit (i88); useit (i89);
157 1.1 christos useit (i90); useit (i91); useit (i92); useit (i93); useit (i94);
158 1.1 christos useit (i95); useit (i96); useit (i97); useit (i98); useit (i99);
159 1.1 christos
160 1.1 christos useit (abc); useit (bcd);
161 1.1 christos
162 1.1 christos marker1 ();
163 1.1 christos return i0 + i1 + i2 + i3 + i4 + i5 + i6 + i7 + i8 + i9 + i10
164 1.1 christos + i11 + i12 + i13 + i14 + i15 + i16 + i17 + i18 + i19 + i20
165 1.1 christos + i21 + i22 + i23 + i24 + i25 + i26 + i27 + i28 + i29 + i30
166 1.1 christos + i31 + i32 + i33 + i34 + i35 + i36 + i37 + i38 + i39 + i40
167 1.1 christos + i41 + i42 + i43 + i44 + i45 + i46 + i47 + i48 + i49 + i50
168 1.1 christos + i51 + i52 + i53 + i54 + i55 + i56 + i57 + i58 + i59 + i60
169 1.1 christos + i61 + i62 + i63 + i64 + i65 + i66 + i67 + i68 + i69 + i70
170 1.1 christos + i71 + i72 + i73 + i74 + i75 + i76 + i77 + i78 + i79 + i80
171 1.1 christos + i81 + i82 + i83 + i84 + i85 + i86 + i87 + i88 + i89 + i90
172 1.1 christos + i91 + i92 + i93 + i94 + i95 + i96 + i97 + i98 + i99 + abc + bcd;
173 1.1 christos }
174 1.1 christos
175 1.1 christos #ifdef PROTOTYPES
176 1.1 christos int
177 1.1 christos localscopes (int x)
178 1.1 christos #else
179 1.1 christos int
180 1.1 christos localscopes (x)
181 1.1 christos int x;
182 1.1 christos #endif
183 1.1 christos {
184 1.1 christos int localval;
185 1.1 christos int retval;
186 1.1 christos int i;
187 1.1 christos
188 1.1 christos localval = 0;
189 1.1 christos useit (localval);
190 1.1 christos
191 1.1 christos {
192 1.1 christos int localval = x + 4 + sum_upto (3); /* 10 */
193 1.1 christos int localval1 = x + 5 + sum_upto (3); /* 11 */
194 1.1 christos
195 1.1 christos useit (localval);
196 1.1 christos useit (localval1);
197 1.1 christos marker2 ();
198 1.1 christos {
199 1.1 christos int localval = localval1 + 3 + sum_upto (3); /* 20 */
200 1.1 christos int localval2 = localval1 + sum_upto (1); /* 12 */
201 1.1 christos useit (localval);
202 1.1 christos useit (localval2);
203 1.1 christos marker3 ();
204 1.1 christos {
205 1.1 christos int localval = localval2 + 3 + sum_upto (5); /* 30 */
206 1.1 christos int localval3 = localval2 + sum_upto (1); /* 13 */
207 1.1 christos useit (localval);
208 1.1 christos useit (localval3);
209 1.1 christos marker4 ();
210 1.1 christos retval = x + localval1 + localval2 + localval3;
211 1.1 christos }
212 1.1 christos }
213 1.1 christos }
214 1.1 christos return retval;
215 1.1 christos }
216 1.1 christos
217 1.1 christos void marker1 () {}
218 1.1 christos void marker2 () {}
219 1.1 christos void marker3 () {}
220 1.1 christos void marker4 () {}
221