mirror of https://github.com/microsoft/clang.git
Tests for #pragma GCC visibility.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@110316 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
aa8b0d1924
commit
62e22ee7a1
|
@ -0,0 +1,24 @@
|
|||
// RUN: %clang_cc1 -emit-llvm -o - %s | FileCheck %s
|
||||
|
||||
#pragma GCC visibility push(hidden)
|
||||
int x = 2;
|
||||
// CHECK: @x = hidden global
|
||||
|
||||
extern int y;
|
||||
#pragma GCC visibility pop
|
||||
int y = 4;
|
||||
// CHECK: @y = hidden global
|
||||
|
||||
#pragma GCC visibility push(hidden)
|
||||
extern __attribute((visibility("default"))) int z;
|
||||
int z = 0;
|
||||
// CHECK: @z = global
|
||||
#pragma GCC visibility pop
|
||||
|
||||
#pragma GCC visibility push(hidden)
|
||||
void f() {}
|
||||
// CHECK: define hidden void @f
|
||||
|
||||
__attribute((visibility("default"))) void g();
|
||||
void g() {}
|
||||
// CHECK: define void @g
|
|
@ -0,0 +1,72 @@
|
|||
// RUN: %clang_cc1 -emit-llvm -o - %s | FileCheck %s
|
||||
|
||||
#pragma GCC visibility push(hidden)
|
||||
struct x {
|
||||
static int y;
|
||||
};
|
||||
#pragma GCC visibility pop
|
||||
int x::y = 10;
|
||||
// CHECK: @_ZN1x1yE = hidden global
|
||||
|
||||
#pragma GCC visibility push(hidden)
|
||||
struct __attribute((visibility("default"))) x2 {
|
||||
static int y;
|
||||
};
|
||||
int x2::y = 10;
|
||||
// CHECK: @_ZN2x21yE = global
|
||||
#pragma GCC visibility pop
|
||||
|
||||
#pragma GCC visibility push(hidden)
|
||||
struct x3 {
|
||||
static int y;
|
||||
} __attribute((visibility("default")));
|
||||
int x3::y = 10;
|
||||
// CHECK: @_ZN2x31yE = global
|
||||
#pragma GCC visibility pop
|
||||
|
||||
#pragma GCC visibility push(hidden)
|
||||
template<class T> struct x4 {
|
||||
static int y;
|
||||
};
|
||||
#pragma GCC visibility pop
|
||||
template<> int x4<int>::y = 10;
|
||||
// CHECK: @_ZN2x4IiE1yE = hidden global i32
|
||||
|
||||
#pragma GCC visibility push(hidden)
|
||||
template<int x> int f() { return x; }
|
||||
extern "C" int g() { return f<3>(); }
|
||||
#pragma GCC visibility pop
|
||||
// CHECK: define hidden i32 @g()
|
||||
// CHECK: define linkonce_odr hidden i32 @_Z1fILi3EEiv()
|
||||
|
||||
#pragma GCC visibility push(hidden)
|
||||
template<class T> struct x5 {
|
||||
void y();
|
||||
};
|
||||
#pragma GCC visibility pop
|
||||
template<> void x5<int>::y() {}
|
||||
// CHECK: define hidden void @_ZN2x5IiE1yEv
|
||||
|
||||
#pragma GCC visibility push(hidden)
|
||||
namespace n __attribute((visibility("default"))) {
|
||||
void f() {}
|
||||
// CHECK: define void @_ZN1n1fEv
|
||||
}
|
||||
#pragma GCC visibility pop
|
||||
|
||||
namespace n __attribute((visibility("default"))) {
|
||||
extern int foofoo; // FIXME: Shouldn't be necessary, but otherwise the pragma
|
||||
// gets to Sema before the namespace!
|
||||
#pragma GCC visibility push(hidden)
|
||||
void g() {}
|
||||
// CHECK: define hidden void @_ZN1n1gEv
|
||||
#pragma GCC visibility pop
|
||||
}
|
||||
|
||||
namespace n __attribute((visibility("hidden"))) {
|
||||
extern int foofoo; // FIXME: Shouldn't be necessary, but otherwise the pragma
|
||||
// gets to Sema before the namespace!
|
||||
#pragma GCC visibility pop
|
||||
void h() {}
|
||||
// CHECK: define void @_ZN1n1hEv
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
// RUN: %clang_cc1 -fsyntax-only -verify %s
|
||||
|
||||
#pragma GCC visibility foo // expected-warning{{expected identifier in '#pragma visibility' - ignored}}
|
||||
#pragma GCC visibility pop foo // expected-warning{{extra tokens at end of '#pragma visibility' - ignored}}
|
||||
#pragma GCC visibility push // expected-warning{{missing '(' after '#pragma visibility'}}
|
||||
#pragma GCC visibility push( // expected-warning{{expected identifier in '#pragma visibility' - ignored}}
|
||||
#pragma GCC visibility push(hidden // expected-warning{{missing ')' after '#pragma visibility' - ignoring}}
|
||||
#pragma GCC visibility push(hidden)
|
||||
#pragma GCC visibility pop
|
Loading…
Reference in New Issue