OSDN Git Service

c47ce1e569b532203985bfe89796f20a73219de2
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.dg / attr-weakref-1.c
1 // { dg-do run }
2 // { dg-require-weak "" }
3 // { dg-options "-O2" }
4 // { dg-additional-sources "attr-weakref-1a.c" }
5
6 // Copyright 2005 Free Software Foundation, Inc.
7 // Contributed by Alexandre Oliva <aoliva@redhat.com>
8
9 // Torture test for weakrefs.  The first letter of an identifier
10 // indicates whether/how it is defined; the second letter indicates
11 // whether it is part of a variable or function test; the number that
12 // follows is a test counter, and a letter that may follow enables
13 // multiple identifiers within the same test (e.g., multiple weakrefs
14 // or pointers to the same identifier).
15
16 // Identifiers starting with W are weakrefs; those with p are
17 // pointers; those with g are global definitions; those with l are
18 // local definitions; those with w are expected to be weak undefined
19 // in the symbol table; those with u are expected to be marked as
20 // non-weak undefined in the symbol table.
21
22 #include <stdlib.h>
23
24 #define USED __attribute__((used))
25
26 typedef int vtype;
27
28 extern vtype wv1;
29 extern vtype Wv1a __attribute__((weakref ("wv1")));
30 static vtype *pv1a USED = &Wv1a;
31 extern vtype Wv1b __attribute__((weak, weakref, alias ("wv1")));
32 static vtype *pv1b USED = &Wv1b;
33 extern vtype Wv1c __attribute__((weakref));
34 extern vtype Wv1c __attribute__((alias ("wv1")));
35 static vtype *pv1c USED = &Wv1c;
36
37 vtype gv2;
38 extern vtype Wv2a __attribute__((weakref ("gv2")));
39 static vtype *pv2a USED = &Wv2a;
40
41 static vtype lv3;
42 extern vtype Wv3a __attribute__((weakref ("lv3")));
43 static vtype *pv3a USED = &Wv3a;
44
45 extern vtype uv4;
46 extern vtype Wv4a __attribute__((weakref ("uv4")));
47 static vtype *pv4a USED = &Wv4a;
48 static vtype *pv4 USED = &uv4;
49
50 extern vtype Wv5a __attribute__((weakref ("uv5")));
51 static vtype *pv5a USED = &Wv5a;
52 extern vtype uv5;
53 static vtype *pv5 USED = &uv5;
54
55 extern vtype Wv6a __attribute__((weakref ("wv6")));
56 static vtype *pv6a USED = &Wv6a;
57 extern vtype wv6;
58
59 extern vtype Wv7a __attribute__((weakref ("uv7")));
60 static vtype* USED fv7 (void) {
61   return &Wv7a;
62 }
63 extern vtype uv7;
64 static vtype* USED fv7a (void) {
65   return &uv7;
66 }
67
68 extern vtype uv8;
69 static vtype* USED fv8a (void) {
70   return &uv8;
71 }
72 extern vtype Wv8a __attribute__((weakref ("uv8")));
73 static vtype* USED fv8 (void) {
74   return &Wv8a;
75 }
76
77 extern vtype wv9 __attribute__((weak));
78 extern vtype Wv9a __attribute__((weakref ("wv9")));
79 static vtype *pv9a USED = &Wv9a;
80
81 extern vtype Wv10a __attribute__((weakref ("Wv10b")));
82 extern vtype Wv10b __attribute__((weakref ("Wv10c")));
83 extern vtype Wv10c __attribute__((weakref ("Wv10d")));
84 extern vtype Wv10d __attribute__((weakref ("wv10")));
85 extern vtype wv10;
86
87 extern vtype wv11;
88 extern vtype Wv11d __attribute__((weakref ("wv11")));
89 extern vtype Wv11c __attribute__((weakref ("Wv11d")));
90 extern vtype Wv11b __attribute__((weakref ("Wv11c")));
91 extern vtype Wv11a __attribute__((weakref ("Wv11b")));
92
93 extern vtype Wv12 __attribute__((weakref ("wv12")));
94 extern vtype wv12 __attribute__((weak));
95
96 extern vtype Wv13 __attribute__((weakref ("wv13")));
97 extern vtype wv13 __attribute__((weak));
98
99 extern vtype Wv14a __attribute__((weakref ("wv14")));
100 extern vtype Wv14b __attribute__((weakref ("wv14")));
101 extern vtype wv14 __attribute__((weak));
102
103 typedef void ftype(void);
104
105 extern ftype wf1;
106 extern ftype Wf1a __attribute__((weakref ("wf1")));
107 static ftype *pf1a USED = &Wf1a;
108 extern ftype Wf1b __attribute__((weak, weakref, alias ("wf1")));
109 static ftype *pf1b USED = &Wf1b;
110 extern ftype Wf1c __attribute__((weakref));
111 extern ftype Wf1c __attribute__((alias ("wf1")));
112 static ftype *pf1c USED = &Wf1c;
113
114 void gf2(void) {}
115 extern ftype Wf2a __attribute__((weakref ("gf2")));
116 static ftype *pf2a USED = &Wf2a;
117
118 static void lf3(void) {}
119 extern ftype Wf3a __attribute__((weakref ("lf3")));
120 static ftype *pf3a USED = &Wf3a;
121
122 extern ftype uf4;
123 extern ftype Wf4a __attribute__((weakref ("uf4")));
124 static ftype *pf4a USED = &Wf4a;
125 static ftype *pf4 USED = &uf4;
126
127 extern ftype Wf5a __attribute__((weakref ("uf5")));
128 static ftype *pf5a USED = &Wf5a;
129 extern ftype uf5;
130 static ftype *pf5 USED = &uf5;
131
132 extern ftype Wf6a __attribute__((weakref ("wf6")));
133 static ftype *pf6a USED = &Wf6a;
134 extern ftype wf6;
135
136 extern ftype Wf7a __attribute__((weakref ("uf7")));
137 static ftype* USED ff7 (void) {
138   return &Wf7a;
139 }
140 extern ftype uf7;
141 static ftype* USED ff7a (void) {
142   return &uf7;
143 }
144
145 extern ftype uf8;
146 static ftype* USED ff8a (void) {
147   return &uf8;
148 }
149 extern ftype Wf8a __attribute__((weakref ("uf8")));
150 static ftype* USED ff8 (void) {
151   return &Wf8a;
152 }
153
154 extern ftype wf9 __attribute__((weak));
155 extern ftype Wf9a __attribute__((weakref ("wf9")));
156 static ftype *pf9a USED = &Wf9a;
157
158 extern ftype Wf10a __attribute__((weakref ("Wf10b")));
159 extern ftype Wf10b __attribute__((weakref ("Wf10c")));
160 extern ftype Wf10c __attribute__((weakref ("Wf10d")));
161 extern ftype Wf10d __attribute__((weakref ("wf10")));
162 extern ftype wf10;
163
164 extern ftype wf11;
165 extern ftype Wf11d __attribute__((weakref ("wf11")));
166 extern ftype Wf11c __attribute__((weakref ("Wf11d")));
167 extern ftype Wf11b __attribute__((weakref ("Wf11c")));
168 extern ftype Wf11a __attribute__((weakref ("Wf11b")));
169
170 extern ftype Wf12 __attribute__((weakref ("wf12")));
171 extern ftype wf12 __attribute__((weak));
172
173 extern ftype Wf13 __attribute__((weakref ("wf13")));
174 extern ftype wf13 __attribute__((weak));
175
176 extern ftype Wf14a __attribute__((weakref ("wf14")));
177 extern ftype Wf14b __attribute__((weakref ("wf14")));
178 extern ftype wf14 __attribute__((weak));
179
180 #define chk(p) do { if (!p) abort (); } while (0)
181
182 int main () {
183   chk (!pv1a);
184   chk (!pv1b);
185   chk (!pv1c);
186   chk (pv2a);
187   chk (pv3a);
188   chk (pv4a);
189   chk (pv4);
190   chk (pv5a);
191   chk (pv5);
192   chk (!pv6a);
193   chk (fv7 ());
194   chk (fv7a ());
195   chk (fv8 ());
196   chk (fv8a ());
197   chk (!pv9a);
198   chk (!&Wv10a);
199   chk (!&Wv11a);
200   chk (!&Wv12);
201   chk (!&wv12);
202   chk (!&wv13);
203   chk (!&Wv14a);
204
205   chk (!pf1a);
206   chk (!pf1b);
207   chk (!pf1c);
208   chk (pf2a);
209   chk (pf3a);
210   chk (pf4a);
211   chk (pf4);
212   chk (pf5a);
213   chk (pf5);
214   chk (!pf6a);
215   chk (ff7 ());
216   chk (ff7a ());
217   chk (ff8 ());
218   chk (ff8a ());
219   chk (!pf9a);
220   chk (!&Wf10a);
221   chk (!&Wf11a);
222   chk (!&Wf12);
223   chk (!&wf12);
224   chk (!&wf13);
225   chk (!&Wf14a);
226
227   exit (0);
228 }