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