summaryrefslogtreecommitdiffstats
path: root/clang/test/CodeGen/attr-weakref.c
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2010-03-04 18:17:24 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2010-03-04 18:17:24 +0000
commit2e42fec3a092692a98865cb264940e9320c42aa0 (patch)
tree3ad73e79deaacd19dc9bef42463727e396823377 /clang/test/CodeGen/attr-weakref.c
parent334db0ce7f2fc39f4644dd50e878f467a2a0f89b (diff)
downloadbcm5719-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.c54
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();
+}
OpenPOWER on IntegriCloud