1ac65c6208d48b0f9b4661c30c28997a280ac5ba6John McCall// RUN: %clang_cc1 %s -triple i386-unknown-unknown -fvisibility default -emit-llvm -o - | FileCheck %s -check-prefix=CHECK-DEFAULT 2ac65c6208d48b0f9b4661c30c28997a280ac5ba6John McCall// RUN: %clang_cc1 %s -triple i386-unknown-unknown -fvisibility protected -emit-llvm -o - | FileCheck %s -check-prefix=CHECK-PROTECTED 3ac65c6208d48b0f9b4661c30c28997a280ac5ba6John McCall// RUN: %clang_cc1 %s -triple i386-unknown-unknown -fvisibility hidden -emit-llvm -o - | FileCheck %s -check-prefix=CHECK-HIDDEN 403abc9ec05e8edce5e8d0c7f08a05027b9e04170Daniel Dunbar 5ac65c6208d48b0f9b4661c30c28997a280ac5ba6John McCall// CHECK-DEFAULT: @g_def = global i32 0 6ac65c6208d48b0f9b4661c30c28997a280ac5ba6John McCall// CHECK-DEFAULT: @g_com = common global i32 0 7ac65c6208d48b0f9b4661c30c28997a280ac5ba6John McCall// CHECK-DEFAULT: @g_ext = external global i32 8ac65c6208d48b0f9b4661c30c28997a280ac5ba6John McCall// CHECK-DEFAULT: @g_deferred = internal global 9ac65c6208d48b0f9b4661c30c28997a280ac5ba6John McCall// CHECK-PROTECTED: @g_def = protected global i32 0 10ac65c6208d48b0f9b4661c30c28997a280ac5ba6John McCall// CHECK-PROTECTED: @g_com = common protected global i32 0 11ac65c6208d48b0f9b4661c30c28997a280ac5ba6John McCall// CHECK-PROTECTED: @g_ext = external global i32 12ac65c6208d48b0f9b4661c30c28997a280ac5ba6John McCall// CHECK-PROTECTED: @g_deferred = internal global 13ac65c6208d48b0f9b4661c30c28997a280ac5ba6John McCall// CHECK-HIDDEN: @g_def = hidden global i32 0 14ac65c6208d48b0f9b4661c30c28997a280ac5ba6John McCall// CHECK-HIDDEN: @g_com = common hidden global i32 0 15ac65c6208d48b0f9b4661c30c28997a280ac5ba6John McCall// CHECK-HIDDEN: @g_ext = external global i32 16ac65c6208d48b0f9b4661c30c28997a280ac5ba6John McCall// CHECK-HIDDEN: @g_deferred = internal global 1703abc9ec05e8edce5e8d0c7f08a05027b9e04170Daniel Dunbarint g_com; 1803abc9ec05e8edce5e8d0c7f08a05027b9e04170Daniel Dunbarint g_def = 0; 1903abc9ec05e8edce5e8d0c7f08a05027b9e04170Daniel Dunbarextern int g_ext; 207e714cd931fa3a90bfd728318a92485aa3e95748Daniel Dunbarstatic char g_deferred[] = "hello"; 2103abc9ec05e8edce5e8d0c7f08a05027b9e04170Daniel Dunbar 2235cebc3eea898637057b10b5cf7dd08b1d788980John McCall// CHECK-DEFAULT: @test4 = hidden global i32 10 2335cebc3eea898637057b10b5cf7dd08b1d788980John McCall// CHECK-PROTECTED: @test4 = hidden global i32 10 2435cebc3eea898637057b10b5cf7dd08b1d788980John McCall// CHECK-HIDDEN: @test4 = hidden global i32 10 2535cebc3eea898637057b10b5cf7dd08b1d788980John McCall 2693ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// CHECK-DEFAULT-LABEL: define i32 @f_def() 27ac65c6208d48b0f9b4661c30c28997a280ac5ba6John McCall// CHECK-DEFAULT: declare void @f_ext() 2893ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// CHECK-DEFAULT-LABEL: define internal void @f_deferred() 2993ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// CHECK-PROTECTED-LABEL: define protected i32 @f_def() 30ac65c6208d48b0f9b4661c30c28997a280ac5ba6John McCall// CHECK-PROTECTED: declare void @f_ext() 3193ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// CHECK-PROTECTED-LABEL: define internal void @f_deferred() 3293ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// CHECK-HIDDEN-LABEL: define hidden i32 @f_def() 33ac65c6208d48b0f9b4661c30c28997a280ac5ba6John McCall// CHECK-HIDDEN: declare void @f_ext() 3493ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// CHECK-HIDDEN-LABEL: define internal void @f_deferred() 35ac65c6208d48b0f9b4661c30c28997a280ac5ba6John McCall 3603abc9ec05e8edce5e8d0c7f08a05027b9e04170Daniel Dunbarextern void f_ext(void); 3703abc9ec05e8edce5e8d0c7f08a05027b9e04170Daniel Dunbar 387e714cd931fa3a90bfd728318a92485aa3e95748Daniel Dunbarstatic void f_deferred(void) { 397e714cd931fa3a90bfd728318a92485aa3e95748Daniel Dunbar} 407e714cd931fa3a90bfd728318a92485aa3e95748Daniel Dunbar 4103abc9ec05e8edce5e8d0c7f08a05027b9e04170Daniel Dunbarint f_def(void) { 4203abc9ec05e8edce5e8d0c7f08a05027b9e04170Daniel Dunbar f_ext(); 437e714cd931fa3a90bfd728318a92485aa3e95748Daniel Dunbar f_deferred(); 447e714cd931fa3a90bfd728318a92485aa3e95748Daniel Dunbar return g_com + g_def + g_ext + g_deferred[0]; 4503abc9ec05e8edce5e8d0c7f08a05027b9e04170Daniel Dunbar} 46ac65c6208d48b0f9b4661c30c28997a280ac5ba6John McCall 47ac65c6208d48b0f9b4661c30c28997a280ac5ba6John McCall// PR8457 4893ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// CHECK-DEFAULT-LABEL: define void @test1( 4993ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// CHECK-PROTECTED-LABEL: define void @test1( 5093ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// CHECK-HIDDEN-LABEL: define void @test1( 51ac65c6208d48b0f9b4661c30c28997a280ac5ba6John McCallstruct Test1 { int field; }; 52ac65c6208d48b0f9b4661c30c28997a280ac5ba6John McCallvoid __attribute__((visibility("default"))) test1(struct Test1 *v) { } 53e7bc9722c807030409178d4af8ce8d1260bbd821John McCall 54e7bc9722c807030409178d4af8ce8d1260bbd821John McCall// rdar://problem/8595231 5593ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// CHECK-DEFAULT-LABEL: define void @test2() 5693ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// CHECK-PROTECTED-LABEL: define void @test2() 5793ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// CHECK-HIDDEN-LABEL: define void @test2() 58e7bc9722c807030409178d4af8ce8d1260bbd821John McCallvoid test2(void); 59e7bc9722c807030409178d4af8ce8d1260bbd821John McCallvoid __attribute__((visibility("default"))) test2(void) {} 6035cebc3eea898637057b10b5cf7dd08b1d788980John McCall 6193ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// CHECK-DEFAULT-LABEL: define hidden void @test3() 6293ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// CHECK-PROTECTED-LABEL: define hidden void @test3() 6393ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// CHECK-HIDDEN-LABEL: define hidden void @test3() 6435cebc3eea898637057b10b5cf7dd08b1d788980John McCallextern void test3(void); 6535cebc3eea898637057b10b5cf7dd08b1d788980John McCall__private_extern__ void test3(void) {} 6635cebc3eea898637057b10b5cf7dd08b1d788980John McCall 6735cebc3eea898637057b10b5cf7dd08b1d788980John McCall// Top of file. 6835cebc3eea898637057b10b5cf7dd08b1d788980John McCallextern int test4; 6935cebc3eea898637057b10b5cf7dd08b1d788980John McCall__private_extern__ int test4 = 10; 701c8278b4bc83fafd29eead80ff4e5814fce7fd9bJohn McCall 711c8278b4bc83fafd29eead80ff4e5814fce7fd9bJohn McCall// rdar://12399248 7293ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// CHECK-DEFAULT-LABEL: define hidden void @test5() 7393ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// CHECK-PROTECTED-LABEL: define hidden void @test5() 7493ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// CHECK-HIDDEN-LABEL: define hidden void @test5() 751c8278b4bc83fafd29eead80ff4e5814fce7fd9bJohn McCall__attribute__((availability(macosx,introduced=10.5,deprecated=10.6))) 761c8278b4bc83fafd29eead80ff4e5814fce7fd9bJohn McCall__private_extern__ void test5(void) {} 77