diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2010-03-04 18:17:24 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2010-03-04 18:17:24 +0000 |
commit | 2e42fec3a092692a98865cb264940e9320c42aa0 (patch) | |
tree | 3ad73e79deaacd19dc9bef42463727e396823377 /clang/test/CodeGen/attr-weakref.c | |
parent | 334db0ce7f2fc39f4644dd50e878f467a2a0f89b (diff) | |
download | bcm5719-llvm-2e42fec3a092692a98865cb264940e9320c42aa0.tar.gz bcm5719-llvm-2e42fec3a092692a98865cb264940e9320c42aa0.zip |
Fix PR6473.
Clang's support for weakref is now better than llvm-gcc's :-)
We don't introduce a new symbol and we correctly mark undefined references weak only if there is no
definition or regular undefined references in the same file.
llvm-svn: 97733
Diffstat (limited to 'clang/test/CodeGen/attr-weakref.c')
-rw-r--r-- | clang/test/CodeGen/attr-weakref.c | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/clang/test/CodeGen/attr-weakref.c b/clang/test/CodeGen/attr-weakref.c new file mode 100644 index 00000000000..06185e8e34e --- /dev/null +++ b/clang/test/CodeGen/attr-weakref.c @@ -0,0 +1,54 @@ +// RUN: %clang_cc1 -emit-llvm -triple i386-linux-gnu -o %t %s +// RUN: FileCheck --input-file=%t %s + +// CHECK: declare extern_weak void @test1_f() +void test1_f(void); +static void test1_g(void) __attribute__((weakref("test1_f"))); +void test1_h(void) { + test1_g(); +} + +// CHECK: define void @test2_f() +void test2_f(void) {} +static void test2_g(void) __attribute__((weakref("test2_f"))); +void test2_h(void) { + test2_g(); +} + +// CHECK: declare void @test3_f() +void test3_f(void); +static void test3_g(void) __attribute__((weakref("test3_f"))); +void test3_foo(void) { + test3_f(); +} +void test3_h(void) { + test3_g(); +} + +// CHECK: define void @test4_f() +void test4_f(void); +static void test4_g(void) __attribute__((weakref("test4_f"))); +void test4_h(void) { + test4_g(); +} +void test4_f(void) {} + +// CHECK: declare void @test5_f() +void test5_f(void); +static void test5_g(void) __attribute__((weakref("test5_f"))); +void test5_h(void) { + test5_g(); +} +void test5_foo(void) { + test5_f(); +} + +// CHECK: declare extern_weak void @test6_f() +void test6_f(void) __attribute__((weak)); +static void test6_g(void) __attribute__((weakref("test6_f"))); +void test6_h(void) { + test6_g(); +} +void test6_foo(void) { + test6_f(); +} |