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