John McCall | ac65c62 | 2010-10-26 04:59:26 +0000 | [diff] [blame] | 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 |
Daniel Dunbar | 03abc9e | 2009-04-07 22:36:33 +0000 | [diff] [blame] | 4 | |
John McCall | ac65c62 | 2010-10-26 04:59:26 +0000 | [diff] [blame] | 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 |
Daniel Dunbar | 03abc9e | 2009-04-07 22:36:33 +0000 | [diff] [blame] | 17 | int g_com; |
| 18 | int g_def = 0; |
| 19 | extern int g_ext; |
Daniel Dunbar | 7e714cd | 2009-04-10 20:26:50 +0000 | [diff] [blame] | 20 | static char g_deferred[] = "hello"; |
Daniel Dunbar | 03abc9e | 2009-04-07 22:36:33 +0000 | [diff] [blame] | 21 | |
John McCall | 35cebc3 | 2010-11-02 18:38:13 +0000 | [diff] [blame] | 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 | |
John McCall | ac65c62 | 2010-10-26 04:59:26 +0000 | [diff] [blame] | 26 | // CHECK-DEFAULT: define i32 @f_def() |
| 27 | // CHECK-DEFAULT: declare void @f_ext() |
| 28 | // CHECK-DEFAULT: define internal void @f_deferred() |
| 29 | // CHECK-PROTECTED: define protected i32 @f_def() |
| 30 | // CHECK-PROTECTED: declare void @f_ext() |
| 31 | // CHECK-PROTECTED: define internal void @f_deferred() |
| 32 | // CHECK-HIDDEN: define hidden i32 @f_def() |
| 33 | // CHECK-HIDDEN: declare void @f_ext() |
| 34 | // CHECK-HIDDEN: define internal void @f_deferred() |
| 35 | |
Daniel Dunbar | 03abc9e | 2009-04-07 22:36:33 +0000 | [diff] [blame] | 36 | extern void f_ext(void); |
| 37 | |
Daniel Dunbar | 7e714cd | 2009-04-10 20:26:50 +0000 | [diff] [blame] | 38 | static void f_deferred(void) { |
| 39 | } |
| 40 | |
Daniel Dunbar | 03abc9e | 2009-04-07 22:36:33 +0000 | [diff] [blame] | 41 | int f_def(void) { |
| 42 | f_ext(); |
Daniel Dunbar | 7e714cd | 2009-04-10 20:26:50 +0000 | [diff] [blame] | 43 | f_deferred(); |
| 44 | return g_com + g_def + g_ext + g_deferred[0]; |
Daniel Dunbar | 03abc9e | 2009-04-07 22:36:33 +0000 | [diff] [blame] | 45 | } |
John McCall | ac65c62 | 2010-10-26 04:59:26 +0000 | [diff] [blame] | 46 | |
| 47 | // PR8457 |
| 48 | // CHECK-DEFAULT: define void @test1( |
| 49 | // CHECK-PROTECTED: define void @test1( |
| 50 | // CHECK-HIDDEN: define void @test1( |
| 51 | struct Test1 { int field; }; |
| 52 | void __attribute__((visibility("default"))) test1(struct Test1 *v) { } |
John McCall | e7bc972 | 2010-10-28 04:18:25 +0000 | [diff] [blame] | 53 | |
| 54 | // rdar://problem/8595231 |
| 55 | // CHECK-DEFAULT: define void @test2() |
| 56 | // CHECK-PROTECTED: define void @test2() |
| 57 | // CHECK-HIDDEN: define void @test2() |
| 58 | void test2(void); |
| 59 | void __attribute__((visibility("default"))) test2(void) {} |
John McCall | 35cebc3 | 2010-11-02 18:38:13 +0000 | [diff] [blame] | 60 | |
| 61 | // CHECK-DEFAULT: define hidden void @test3() |
| 62 | // CHECK-PROTECTED: define hidden void @test3() |
| 63 | // CHECK-HIDDEN: 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; |