xref: /aosp_15_r20/external/clang/test/CodeGen/visibility.c (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 %s -triple i386-unknown-unknown -fvisibility default -emit-llvm -o - | FileCheck %s -check-prefix=CHECK-DEFAULT
2*67e74705SXin Li // RUN: %clang_cc1 %s -triple i386-unknown-unknown -fvisibility protected -emit-llvm -o - | FileCheck %s -check-prefix=CHECK-PROTECTED
3*67e74705SXin Li // RUN: %clang_cc1 %s -triple i386-unknown-unknown -fvisibility hidden -emit-llvm -o - | FileCheck %s -check-prefix=CHECK-HIDDEN
4*67e74705SXin Li 
5*67e74705SXin Li // CHECK-DEFAULT: @g_def = global i32 0
6*67e74705SXin Li // CHECK-DEFAULT: @g_com = common global i32 0
7*67e74705SXin Li // CHECK-DEFAULT: @g_ext = external global i32
8*67e74705SXin Li // CHECK-DEFAULT: @g_deferred = internal global
9*67e74705SXin Li // CHECK-PROTECTED: @g_def = protected global i32 0
10*67e74705SXin Li // CHECK-PROTECTED: @g_com = common protected global i32 0
11*67e74705SXin Li // CHECK-PROTECTED: @g_ext = external global i32
12*67e74705SXin Li // CHECK-PROTECTED: @g_deferred = internal global
13*67e74705SXin Li // CHECK-HIDDEN: @g_def = hidden global i32 0
14*67e74705SXin Li // CHECK-HIDDEN: @g_com = common hidden global i32 0
15*67e74705SXin Li // CHECK-HIDDEN: @g_ext = external global i32
16*67e74705SXin Li // CHECK-HIDDEN: @g_deferred = internal global
17*67e74705SXin Li int g_com;
18*67e74705SXin Li int g_def = 0;
19*67e74705SXin Li extern int g_ext;
20*67e74705SXin Li static char g_deferred[] = "hello";
21*67e74705SXin Li 
22*67e74705SXin Li // CHECK-DEFAULT: @test4 = hidden global i32 10
23*67e74705SXin Li // CHECK-PROTECTED: @test4 = hidden global i32 10
24*67e74705SXin Li // CHECK-HIDDEN: @test4 = hidden global i32 10
25*67e74705SXin Li 
26*67e74705SXin Li // CHECK-DEFAULT-LABEL: define i32 @f_def()
27*67e74705SXin Li // CHECK-DEFAULT: declare void @f_ext()
28*67e74705SXin Li // CHECK-DEFAULT-LABEL: define internal void @f_deferred()
29*67e74705SXin Li // CHECK-PROTECTED-LABEL: define protected i32 @f_def()
30*67e74705SXin Li // CHECK-PROTECTED: declare void @f_ext()
31*67e74705SXin Li // CHECK-PROTECTED-LABEL: define internal void @f_deferred()
32*67e74705SXin Li // CHECK-HIDDEN-LABEL: define hidden i32 @f_def()
33*67e74705SXin Li // CHECK-HIDDEN: declare void @f_ext()
34*67e74705SXin Li // CHECK-HIDDEN-LABEL: define internal void @f_deferred()
35*67e74705SXin Li 
36*67e74705SXin Li extern void f_ext(void);
37*67e74705SXin Li 
f_deferred(void)38*67e74705SXin Li static void f_deferred(void) {
39*67e74705SXin Li }
40*67e74705SXin Li 
f_def(void)41*67e74705SXin Li int f_def(void) {
42*67e74705SXin Li   f_ext();
43*67e74705SXin Li   f_deferred();
44*67e74705SXin Li   return g_com + g_def + g_ext + g_deferred[0];
45*67e74705SXin Li }
46*67e74705SXin Li 
47*67e74705SXin Li // PR8457
48*67e74705SXin Li // CHECK-DEFAULT-LABEL: define void @test1(
49*67e74705SXin Li // CHECK-PROTECTED-LABEL: define void @test1(
50*67e74705SXin Li // CHECK-HIDDEN-LABEL: define void @test1(
51*67e74705SXin Li struct Test1 { int field; };
test1(struct Test1 * v)52*67e74705SXin Li void  __attribute__((visibility("default"))) test1(struct Test1 *v) { }
53*67e74705SXin Li 
54*67e74705SXin Li // rdar://problem/8595231
55*67e74705SXin Li // CHECK-DEFAULT-LABEL: define void @test2()
56*67e74705SXin Li // CHECK-PROTECTED-LABEL: define void @test2()
57*67e74705SXin Li // CHECK-HIDDEN-LABEL: define void @test2()
58*67e74705SXin Li void test2(void);
test2(void)59*67e74705SXin Li void __attribute__((visibility("default"))) test2(void) {}
60*67e74705SXin Li 
61*67e74705SXin Li // CHECK-DEFAULT-LABEL: define hidden void @test3()
62*67e74705SXin Li // CHECK-PROTECTED-LABEL: define hidden void @test3()
63*67e74705SXin Li // CHECK-HIDDEN-LABEL: define hidden void @test3()
64*67e74705SXin Li extern void test3(void);
test3(void)65*67e74705SXin Li __private_extern__ void test3(void) {}
66*67e74705SXin Li 
67*67e74705SXin Li // Top of file.
68*67e74705SXin Li extern int test4;
69*67e74705SXin Li __private_extern__ int test4 = 10;
70*67e74705SXin Li 
71*67e74705SXin Li // rdar://12399248
72*67e74705SXin Li // CHECK-DEFAULT-LABEL: define hidden void @test5()
73*67e74705SXin Li // CHECK-PROTECTED-LABEL: define hidden void @test5()
74*67e74705SXin Li // CHECK-HIDDEN-LABEL: define hidden void @test5()
75*67e74705SXin Li __attribute__((availability(macosx,introduced=10.5,deprecated=10.6)))
test5(void)76*67e74705SXin Li __private_extern__ void test5(void) {}
77