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 17int g_com; 18int g_def = 0; 19extern int g_ext; 20static 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 36extern void f_ext(void); 37 38static void f_deferred(void) { 39} 40 41int 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( 51struct Test1 { int field; }; 52void __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() 58void test2(void); 59void __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() 64extern void test3(void); 65__private_extern__ void test3(void) {} 66 67// Top of file. 68extern 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