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 Livoid 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 Livoid test2_f(void) {} 13*67e74705SXin Li static void test2_g(void) __attribute__((weakref("test2_f"))); test2_h(void)14*67e74705SXin Livoid 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 Livoid test3_foo(void) { 22*67e74705SXin Li test3_f(); 23*67e74705SXin Li } test3_h(void)24*67e74705SXin Livoid 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 Livoid test4_h(void) { 32*67e74705SXin Li test4_g(); 33*67e74705SXin Li } test4_f(void)34*67e74705SXin Livoid 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 Livoid test5_h(void) { 40*67e74705SXin Li test5_g(); 41*67e74705SXin Li } test5_foo(void)42*67e74705SXin Livoid 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 Livoid test6_h(void) { 50*67e74705SXin Li test6_g(); 51*67e74705SXin Li } test6_foo(void)52*67e74705SXin Livoid 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 Livoid 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 Livoid* test7_h(void) { 67*67e74705SXin Li return test7_zed; 68*67e74705SXin Li } 69