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"))); 6 void test1_h(void) { 7 test1_g(); 8 } 9 10 // CHECK-LABEL: define dso_local void @test2_f() 11 void test2_f(void) {} 12 static void test2_g(void) __attribute__((weakref("test2_f"))); 13 void 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"))); 20 void test3_foo(void) { 21 test3_f(); 22 } 23 void 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"))); 30 void test4_h(void) { 31 test4_g(); 32 } 33 void 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"))); 38 void test5_h(void) { 39 test5_g(); 40 } 41 void 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"))); 48 void test6_h(void) { 49 test6_g(); 50 } 51 void 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"))); 57 void 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; 65 void* test7_h(void) { 66 return test7_zed; 67 } 68