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