| Rafael Espindola | 6d65d7b | 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 | ec52f92 | 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 | 0c6c405 | 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 | } |