31 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			31 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C++
		
	
	
	
// 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
 | 
						|
}
 |