1 // RUN: %clang_cc1 -emit-llvm -triple i386-linux-gnu -o %t %s
2 // RUN: FileCheck --input-file=%t %s
3 
4 // CHECK: declare extern_weak void @test1_f()
5 void test1_f(void);
6 static void test1_g(void) __attribute__((weakref("test1_f")));
7 void test1_h(void) {
8   test1_g();
9 }
10 
11 // CHECK-LABEL: define void @test2_f()
12 void test2_f(void) {}
13 static void test2_g(void) __attribute__((weakref("test2_f")));
14 void test2_h(void) {
15   test2_g();
16 }
17 
18 // CHECK: declare void @test3_f()
19 void test3_f(void);
20 static void test3_g(void) __attribute__((weakref("test3_f")));
21 void test3_foo(void) {
22   test3_f();
23 }
24 void test3_h(void) {
25   test3_g();
26 }
27 
28 // CHECK-LABEL: define void @test4_f()
29 void test4_f(void);
30 static void test4_g(void) __attribute__((weakref("test4_f")));
31 void test4_h(void) {
32   test4_g();
33 }
34 void test4_f(void) {}
35 
36 // CHECK: declare void @test5_f()
37 void test5_f(void);
38 static void test5_g(void) __attribute__((weakref("test5_f")));
39 void test5_h(void) {
40   test5_g();
41 }
42 void test5_foo(void) {
43   test5_f();
44 }
45 
46 // CHECK: declare extern_weak void @test6_f()
47 void test6_f(void) __attribute__((weak));
48 static void test6_g(void) __attribute__((weakref("test6_f")));
49 void test6_h(void) {
50   test6_g();
51 }
52 void test6_foo(void) {
53   test6_f();
54 }
55 
56 // CHECK: declare extern_weak void @test8_f()
57 static void test8_g(void) __attribute__((weakref("test8_f")));
58 void test8_h(void) {
59   if (test8_g)
60     test8_g();
61 }
62 // CHECK: declare extern_weak void @test7_f()
63 void test7_f(void);
64 static void test7_g(void) __attribute__((weakref("test7_f")));
65 static void *const test7_zed = (void *) &test7_g;
66 void* test7_h(void) {
67   return test7_zed;
68 }
69