blob: 501071b832b0550dbf9ecfb25f29fd5bffcab099 [file] [log] [blame]
John McCallac65c622010-10-26 04:59:26 +00001// RUN: %clang_cc1 %s -triple i386-unknown-unknown -fvisibility default -emit-llvm -o - | FileCheck %s -check-prefix=CHECK-DEFAULT
2// RUN: %clang_cc1 %s -triple i386-unknown-unknown -fvisibility protected -emit-llvm -o - | FileCheck %s -check-prefix=CHECK-PROTECTED
3// RUN: %clang_cc1 %s -triple i386-unknown-unknown -fvisibility hidden -emit-llvm -o - | FileCheck %s -check-prefix=CHECK-HIDDEN
Daniel Dunbar03abc9e2009-04-07 22:36:33 +00004
John McCallac65c622010-10-26 04:59:26 +00005// CHECK-DEFAULT: @g_def = global i32 0
6// CHECK-DEFAULT: @g_com = common global i32 0
7// CHECK-DEFAULT: @g_ext = external global i32
8// CHECK-DEFAULT: @g_deferred = internal global
9// CHECK-PROTECTED: @g_def = protected global i32 0
10// CHECK-PROTECTED: @g_com = common protected global i32 0
11// CHECK-PROTECTED: @g_ext = external global i32
12// CHECK-PROTECTED: @g_deferred = internal global
13// CHECK-HIDDEN: @g_def = hidden global i32 0
14// CHECK-HIDDEN: @g_com = common hidden global i32 0
15// CHECK-HIDDEN: @g_ext = external global i32
16// CHECK-HIDDEN: @g_deferred = internal global
Daniel Dunbar03abc9e2009-04-07 22:36:33 +000017int g_com;
18int g_def = 0;
19extern int g_ext;
Daniel Dunbar7e714cd2009-04-10 20:26:50 +000020static char g_deferred[] = "hello";
Daniel Dunbar03abc9e2009-04-07 22:36:33 +000021
John McCallac65c622010-10-26 04:59:26 +000022// CHECK-DEFAULT: define i32 @f_def()
23// CHECK-DEFAULT: declare void @f_ext()
24// CHECK-DEFAULT: define internal void @f_deferred()
25// CHECK-PROTECTED: define protected i32 @f_def()
26// CHECK-PROTECTED: declare void @f_ext()
27// CHECK-PROTECTED: define internal void @f_deferred()
28// CHECK-HIDDEN: define hidden i32 @f_def()
29// CHECK-HIDDEN: declare void @f_ext()
30// CHECK-HIDDEN: define internal void @f_deferred()
31
Daniel Dunbar03abc9e2009-04-07 22:36:33 +000032extern void f_ext(void);
33
Daniel Dunbar7e714cd2009-04-10 20:26:50 +000034static void f_deferred(void) {
35}
36
Daniel Dunbar03abc9e2009-04-07 22:36:33 +000037int f_def(void) {
38 f_ext();
Daniel Dunbar7e714cd2009-04-10 20:26:50 +000039 f_deferred();
40 return g_com + g_def + g_ext + g_deferred[0];
Daniel Dunbar03abc9e2009-04-07 22:36:33 +000041}
John McCallac65c622010-10-26 04:59:26 +000042
43// PR8457
44// CHECK-DEFAULT: define void @test1(
45// CHECK-PROTECTED: define void @test1(
46// CHECK-HIDDEN: define void @test1(
47struct Test1 { int field; };
48void __attribute__((visibility("default"))) test1(struct Test1 *v) { }