1 // 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 4 5 // 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 17 int g_com; 18 int g_def = 0; 19 extern int g_ext; 20 static char g_deferred[] = "hello"; 21 22 // CHECK-DEFAULT: @test4 = hidden global i32 10 23 // CHECK-PROTECTED: @test4 = hidden global i32 10 24 // CHECK-HIDDEN: @test4 = hidden global i32 10 25 26 // CHECK-DEFAULT-LABEL: define i32 @f_def() 27 // CHECK-DEFAULT: declare void @f_ext() 28 // CHECK-DEFAULT-LABEL: define internal void @f_deferred() 29 // CHECK-PROTECTED-LABEL: define protected i32 @f_def() 30 // CHECK-PROTECTED: declare void @f_ext() 31 // CHECK-PROTECTED-LABEL: define internal void @f_deferred() 32 // CHECK-HIDDEN-LABEL: define hidden i32 @f_def() 33 // CHECK-HIDDEN: declare void @f_ext() 34 // CHECK-HIDDEN-LABEL: define internal void @f_deferred() 35 36 extern void f_ext(void); 37 38 static void f_deferred(void) { 39 } 40 41 int f_def(void) { 42 f_ext(); 43 f_deferred(); 44 return g_com + g_def + g_ext + g_deferred[0]; 45 } 46 47 // PR8457 48 // CHECK-DEFAULT-LABEL: define void @test1( 49 // CHECK-PROTECTED-LABEL: define void @test1( 50 // CHECK-HIDDEN-LABEL: define void @test1( 51 struct Test1 { int field; }; 52 void __attribute__((visibility("default"))) test1(struct Test1 *v) { } 53 54 // rdar://problem/8595231 55 // CHECK-DEFAULT-LABEL: define void @test2() 56 // CHECK-PROTECTED-LABEL: define void @test2() 57 // CHECK-HIDDEN-LABEL: define void @test2() 58 void test2(void); 59 void __attribute__((visibility("default"))) test2(void) {} 60 61 // CHECK-DEFAULT-LABEL: define hidden void @test3() 62 // CHECK-PROTECTED-LABEL: define hidden void @test3() 63 // CHECK-HIDDEN-LABEL: define hidden void @test3() 64 extern void test3(void); 65 __private_extern__ void test3(void) {} 66 67 // Top of file. 68 extern int test4; 69 __private_extern__ int test4 = 10; 70 71 // rdar://12399248 72 // CHECK-DEFAULT-LABEL: define hidden void @test5() 73 // CHECK-PROTECTED-LABEL: define hidden void @test5() 74 // CHECK-HIDDEN-LABEL: define hidden void @test5() 75 __attribute__((availability(macosx,introduced=10.5,deprecated=10.6))) 76 __private_extern__ void test5(void) {} 77