Home | History | Annotate | Download | only in CodeGen
      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