| // RUN: %clang_cc1 -fsyntax-only -verify %s | 
 |  | 
 | namespace test1 __attribute__((visibility("hidden"))) { // expected-note{{surrounding namespace with visibility attribute starts here}} | 
 | #pragma GCC visibility pop // expected-error{{#pragma visibility pop with no matching #pragma visibility push}} | 
 | } | 
 |  | 
 | // GCC 4.6 accepts this, but the "hidden" leaks past the namespace end. | 
 | namespace test2 __attribute__((visibility("hidden"))) { | 
 | #pragma GCC visibility push(protected) // expected-error{{#pragma visibility push with no matching #pragma visibility pop}} | 
 | } // expected-note{{surrounding namespace with visibility attribute ends here}} | 
 |  | 
 | #pragma GCC visibility pop // expected-error{{#pragma visibility pop with no matching #pragma visibility push}} | 
 |  | 
 | // <rdar://problem/10871094> | 
 | struct A { | 
 |   #pragma GCC visibility push(protected) | 
 |   #pragma GCC visibility pop | 
 | }; | 
 |  | 
 | void f() { | 
 |   #pragma GCC visibility push(protected) | 
 |   #pragma GCC visibility pop | 
 | } | 
 |  | 
 | namespace pr13662 { | 
 | #pragma GCC visibility push(hidden) | 
 |   template<class T> class __attribute__((__visibility__("default"))) foo; | 
 |   class bar { template<class T> friend class foo; }; | 
 | #pragma GCC visibility pop | 
 | } |