1 | // RUN: %clang_cc1 -fsyntax-only -verify %s |
2 | |
3 | namespace test1 __attribute__((visibility("hidden"))) { // expected-note{{surrounding namespace with visibility attribute starts here}} |
4 | #pragma GCC visibility pop // expected-error{{#pragma visibility pop with no matching #pragma visibility push}} |
5 | } |
6 | |
7 | // GCC 4.6 accepts this, but the "hidden" leaks past the namespace end. |
8 | namespace test2 __attribute__((visibility("hidden"))) { |
9 | #pragma GCC visibility push(protected) // expected-error{{#pragma visibility push with no matching #pragma visibility pop}} |
10 | } // expected-note{{surrounding namespace with visibility attribute ends here}} |
11 | |
12 | #pragma GCC visibility pop // expected-error{{#pragma visibility pop with no matching #pragma visibility push}} |
13 | |
14 | // <rdar://problem/10871094> |
15 | struct A { |
16 | #pragma GCC visibility push(protected) |
17 | #pragma GCC visibility pop |
18 | }; |
19 | |
20 | void f() { |
21 | #pragma GCC visibility push(protected) |
22 | #pragma GCC visibility pop |
23 | } |
24 | |
25 | namespace pr13662 { |
26 | #pragma GCC visibility push(hidden) |
27 | template<class T> class __attribute__((__visibility__("default"))) foo; |
28 | class bar { template<class T> friend class foo; }; |
29 | #pragma GCC visibility pop |
30 | } |
31 | |