1 /* PR middle-end/20303 */
2 /* Test nesting of #pragma GCC visibility. */
3 /* { dg-do compile } */
4 /* { dg-require-visibility "" } */
5 /* { dg-final { scan-not-hidden "foo00" } } */
6 /* { dg-final { scan-hidden "foo01" } } */
7 /* { dg-final { scan-not-hidden "foo02" } } */
8 /* { dg-final { scan-hidden "foo03" } } */
9 /* { dg-final { scan-not-hidden "foo04" } } */
10 /* { dg-final { scan-not-hidden "foo05" } } */
11 /* { dg-final { scan-not-hidden "foo06" } } */
12 /* { dg-final { scan-hidden "foo07" } } */
13 /* { dg-final { scan-not-hidden "foo08" } } */
14 /* { dg-final { scan-hidden "foo09" } } */
15 /* { dg-final { scan-not-hidden "foo10" } } */
16 /* { dg-final { scan-hidden "foo11" } } */
17 /* { dg-final { scan-hidden "foo12" } } */
18 /* { dg-final { scan-hidden "foo13" } } */
19 /* { dg-final { scan-not-hidden "foo14" } } */
20 /* { dg-final { scan-hidden "foo15" } } */
21 /* { dg-final { scan-not-hidden "foo16" } } */
22 /* { dg-final { scan-hidden "foo17" } } */
23 /* { dg-final { scan-not-hidden "foo18" } } */
24 /* { dg-final { scan-hidden "foo19" } } */
25 /* { dg-final { scan-not-hidden "foo20" } } */
26 /* { dg-final { scan-hidden "foo21" } } */
27 /* { dg-final { scan-not-hidden "foo22" } } */
28 /* { dg-final { scan-hidden "foo23" } } */
29 /* { dg-final { scan-not-hidden "foo24" } } */
30 /* { dg-final { scan-hidden "foo25" } } */
31 /* { dg-final { scan-not-hidden "foo26" } } */
32 /* { dg-final { scan-hidden "foo27" } } */
33 /* { dg-final { scan-not-hidden "foo28" } } */
34 /* { dg-final { scan-hidden "foo29" } } */
35 /* { dg-final { scan-not-hidden "foo30" } } */
36 /* { dg-final { scan-hidden "foo31" } } */
37 /* { dg-final { scan-not-hidden "foo32" } } */
38 /* { dg-final { scan-hidden "foo33" } } */
39 /* { dg-final { scan-not-hidden "foo34" } } */
40 /* { dg-final { scan-hidden "foo35" } } */
41 /* { dg-final { scan-not-hidden "foo36" } } */
42 /* { dg-final { scan-hidden "foo37" } } */
43 /* { dg-final { scan-not-hidden "foo38" } } */
44 /* { dg-final { scan-hidden "foo39" } } */
45 /* { dg-final { scan-not-hidden "foo40" } } */
46 /* { dg-final { scan-hidden "foo41" } } */
47 /* { dg-final { scan-not-hidden "foo42" } } */
48 /* { dg-final { scan-hidden "foo43" } } */
49 /* { dg-final { scan-not-hidden "foo44" } } */
50 /* { dg-final { scan-hidden "foo45" } } */
51 /* { dg-final { scan-hidden "foo46" } } */
52 /* { dg-final { scan-hidden "foo47" } } */
53 /* { dg-final { scan-not-hidden "foo48" } } */
54 /* { dg-final { scan-hidden "foo49" } } */
55 /* { dg-final { scan-not-hidden "foo50" } } */
56 /* { dg-final { scan-hidden "foo51" } } */
57 /* { dg-final { scan-not-hidden "foo52" } } */
58 /* { dg-final { scan-not-hidden "foo53" } } */
59 /* { dg-final { scan-not-hidden "foo54" } } */
60 /* { dg-final { scan-hidden "foo55" } } */
61 /* { dg-final { scan-not-hidden "foo56" } } */
62 /* { dg-final { scan-hidden "foo57" } } */
63 /* { dg-final { scan-not-hidden "foo58" } } */
64 /* { dg-final { scan-hidden "foo59" } } */
65 
66 #pragma GCC visibility push(default)
67 void foo00();
68 #pragma GCC visibility push(hidden)
69 void foo01();
70 #pragma GCC visibility push(default)
71 void foo02();
72 #pragma GCC visibility push(hidden)
73 void foo03();
74 #pragma GCC visibility push(default)
75 void foo04();
76 #pragma GCC visibility push(default)
77 void foo05();
78 #pragma GCC visibility push(default)
79 void foo06();
80 #pragma GCC visibility push(hidden)
81 void foo07();
82 #pragma GCC visibility push(default)
83 void foo08();
84 #pragma GCC visibility push(hidden)
85 void foo09();
86 #pragma GCC visibility push(default)
87 void foo10();
88 #pragma GCC visibility push(hidden)
89 void foo11();
90 #pragma GCC visibility push(hidden)
91 void foo12();
92 #pragma GCC visibility push(hidden)
93 void foo13();
94 #pragma GCC visibility push(default)
95 void foo14();
96 #pragma GCC visibility push(hidden)
97 void foo15();
98 #pragma GCC visibility push(default)
99 void foo16();
100 #pragma GCC visibility push(hidden)
101 void foo17();
102 #pragma GCC visibility push(default)
103 void foo18();
104 #pragma GCC visibility push(hidden)
105 void foo19();
106 #pragma GCC visibility push(default)
107 void foo20();
108 #pragma GCC visibility push(hidden)
109 void foo21();
110 #pragma GCC visibility push(default)
111 void foo22();
112 #pragma GCC visibility push(hidden)
113 void foo23();
114 #pragma GCC visibility push(default)
115 void foo24();
116 #pragma GCC visibility push(hidden)
117 void foo25();
118 #pragma GCC visibility push(default)
119 void foo26();
120 #pragma GCC visibility push(hidden)
121 void foo27();
122 #pragma GCC visibility push(default)
123 void foo28();
124 #pragma GCC visibility push(hidden)
125 void foo29();
126 #pragma GCC visibility pop
127 void foo30();
128 #pragma GCC visibility pop
129 void foo31();
130 #pragma GCC visibility pop
131 void foo32();
132 #pragma GCC visibility pop
133 void foo33();
134 #pragma GCC visibility pop
135 void foo34();
136 #pragma GCC visibility pop
137 void foo35();
138 #pragma GCC visibility pop
139 void foo36();
140 #pragma GCC visibility pop
141 void foo37();
142 #pragma GCC visibility pop
143 void foo38();
144 #pragma GCC visibility pop
145 void foo39();
146 #pragma GCC visibility pop
147 void foo40();
148 #pragma GCC visibility pop
149 void foo41();
150 #pragma GCC visibility pop
151 void foo42();
152 #pragma GCC visibility pop
153 void foo43();
154 #pragma GCC visibility pop
155 void foo44();
156 #pragma GCC visibility pop
157 void foo45();
158 #pragma GCC visibility pop
159 void foo46();
160 #pragma GCC visibility pop
161 void foo47();
162 #pragma GCC visibility pop
163 void foo48();
164 #pragma GCC visibility pop
165 void foo49();
166 #pragma GCC visibility pop
167 void foo50();
168 #pragma GCC visibility pop
169 void foo51();
170 #pragma GCC visibility pop
171 void foo52();
172 #pragma GCC visibility pop
173 void foo53();
174 #pragma GCC visibility pop
175 void foo54();
176 #pragma GCC visibility pop
177 void foo55();
178 #pragma GCC visibility pop
179 void foo56();
180 #pragma GCC visibility pop
181 void foo57();
182 #pragma GCC visibility pop
183 void foo58();
184 #pragma GCC visibility push (hidden)
185 void foo59();
186 #pragma GCC visibility pop
187 #pragma GCC visibility pop
188 
189 #define D(N) \
190 void foo##N##0() { } \
191 void foo##N##1() { } \
192 void foo##N##2() { } \
193 void foo##N##3() { } \
194 void foo##N##4() { } \
195 void foo##N##5() { } \
196 void foo##N##6() { } \
197 void foo##N##7() { } \
198 void foo##N##8() { } \
199 void foo##N##9() { }
200 D(0)
201 D(1)
202 D(2)
203 D(3)
204 D(4)
205 D(5)
206