Rafael Espindola | 20039ae | 2012-02-01 23:24:59 +0000 | [diff] [blame] | 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}} |
Eli Friedman | aa5ab26 | 2012-02-23 23:47:16 +0000 | [diff] [blame] | 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 | } |
Rafael Espindola | 4bda1d8 | 2012-08-22 14:52:14 +0000 | [diff] [blame] | 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 | } |