diff options
author | John McCall <rjmccall@apple.com> | 2010-10-26 04:59:26 +0000 |
---|---|---|
committer | John McCall <rjmccall@apple.com> | 2010-10-26 04:59:26 +0000 |
commit | ac65c6208d48b0f9b4661c30c28997a280ac5ba6 (patch) | |
tree | ead6d222141d69c1252b787ec497789c559be297 /test/CodeGen/visibility.c | |
parent | 1235b0ebb16618bf41a9e7234d5e2690faf97d37 (diff) | |
download | clang-ac65c6208d48b0f9b4661c30c28997a280ac5ba6.tar.gz |
A couple of tweaks to the visibility rules:
- tags with C linkage should ignore visibility=hidden
- functions and variables with explicit visibility attributes should
ignore the linkage of their types
Either of these should be sufficient to fix PR8457.
Also, FileCheck-ize a test case.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@117351 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen/visibility.c')
-rw-r--r-- | test/CodeGen/visibility.c | 56 |
1 files changed, 32 insertions, 24 deletions
diff --git a/test/CodeGen/visibility.c b/test/CodeGen/visibility.c index 8f81c8f3a9..501071b832 100644 --- a/test/CodeGen/visibility.c +++ b/test/CodeGen/visibility.c @@ -1,33 +1,34 @@ -// RUN: %clang_cc1 -triple i386-unknown-unknown -fvisibility default -emit-llvm -o %t %s -// RUN: grep '@g_com = common global i32 0' %t -// RUN: grep '@g_def = global i32 0' %t -// RUN: grep '@g_ext = external global i32' %t -// RUN: grep '@g_deferred = internal global' %t -// RUN: grep 'declare void @f_ext()' %t -// RUN: grep 'define internal void @f_deferred()' %t -// RUN: grep 'define i32 @f_def()' %t -// RUN: %clang_cc1 -triple i386-unknown-unknown -fvisibility protected -emit-llvm -o %t %s -// RUN: grep '@g_com = common protected global i32 0' %t -// RUN: grep '@g_def = protected global i32 0' %t -// RUN: grep '@g_ext = external global i32' %t -// RUN: grep '@g_deferred = internal global' %t -// RUN: grep 'declare void @f_ext()' %t -// RUN: grep 'define internal void @f_deferred()' %t -// RUN: grep 'define protected i32 @f_def()' %t -// RUN: %clang_cc1 -triple i386-unknown-unknown -fvisibility hidden -emit-llvm -o %t %s -// RUN: grep '@g_com = common hidden global i32 0' %t -// RUN: grep '@g_def = hidden global i32 0' %t -// RUN: grep '@g_ext = external global i32' %t -// RUN: grep '@g_deferred = internal global' %t -// RUN: grep 'declare void @f_ext()' %t -// RUN: grep 'define internal void @f_deferred()' %t -// RUN: grep 'define hidden i32 @f_def()' %t +// RUN: %clang_cc1 %s -triple i386-unknown-unknown -fvisibility default -emit-llvm -o - | FileCheck %s -check-prefix=CHECK-DEFAULT +// RUN: %clang_cc1 %s -triple i386-unknown-unknown -fvisibility protected -emit-llvm -o - | FileCheck %s -check-prefix=CHECK-PROTECTED +// RUN: %clang_cc1 %s -triple i386-unknown-unknown -fvisibility hidden -emit-llvm -o - | FileCheck %s -check-prefix=CHECK-HIDDEN +// CHECK-DEFAULT: @g_def = global i32 0 +// CHECK-DEFAULT: @g_com = common global i32 0 +// CHECK-DEFAULT: @g_ext = external global i32 +// CHECK-DEFAULT: @g_deferred = internal global +// CHECK-PROTECTED: @g_def = protected global i32 0 +// CHECK-PROTECTED: @g_com = common protected global i32 0 +// CHECK-PROTECTED: @g_ext = external global i32 +// CHECK-PROTECTED: @g_deferred = internal global +// CHECK-HIDDEN: @g_def = hidden global i32 0 +// CHECK-HIDDEN: @g_com = common hidden global i32 0 +// CHECK-HIDDEN: @g_ext = external global i32 +// CHECK-HIDDEN: @g_deferred = internal global int g_com; int g_def = 0; extern int g_ext; static char g_deferred[] = "hello"; +// CHECK-DEFAULT: define i32 @f_def() +// CHECK-DEFAULT: declare void @f_ext() +// CHECK-DEFAULT: define internal void @f_deferred() +// CHECK-PROTECTED: define protected i32 @f_def() +// CHECK-PROTECTED: declare void @f_ext() +// CHECK-PROTECTED: define internal void @f_deferred() +// CHECK-HIDDEN: define hidden i32 @f_def() +// CHECK-HIDDEN: declare void @f_ext() +// CHECK-HIDDEN: define internal void @f_deferred() + extern void f_ext(void); static void f_deferred(void) { @@ -38,3 +39,10 @@ int f_def(void) { f_deferred(); return g_com + g_def + g_ext + g_deferred[0]; } + +// PR8457 +// CHECK-DEFAULT: define void @test1( +// CHECK-PROTECTED: define void @test1( +// CHECK-HIDDEN: define void @test1( +struct Test1 { int field; }; +void __attribute__((visibility("default"))) test1(struct Test1 *v) { } |