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 Listatic void f_deferred(void) { 39*67e74705SXin Li } 40*67e74705SXin Li f_def(void)41*67e74705SXin Liint 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 Livoid __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 Livoid __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