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