1*68745a55SFangrui Song /// Test instrumentation can handle various linkages. 2*68745a55SFangrui Song // RUN: %clang_profgen -fcoverage-mapping %s -o %t 3*68745a55SFangrui Song // RUN: env LLVM_PROFILE_FILE=%t.profraw %run %t 4*68745a55SFangrui Song // RUN: llvm-profdata show %t.profraw --all-functions | FileCheck %s 5*68745a55SFangrui Song 6*68745a55SFangrui Song // RUN: %clang_profgen -fcoverage-mapping -Wl,-dead_strip %s -o %t 7*68745a55SFangrui Song // RUN: env LLVM_PROFILE_FILE=%t.profraw %run %t 8*68745a55SFangrui Song // RUN: llvm-profdata show %t.profraw --all-functions | FileCheck %s 9*68745a55SFangrui Song 10*68745a55SFangrui Song // CHECK: {{.*}}external{{.*}}: 11*68745a55SFangrui Song // CHECK-NEXT: Hash: 12*68745a55SFangrui Song // CHECK-NEXT: Counters: 1 13*68745a55SFangrui Song // CHECK-NEXT: Function count: 1 14*68745a55SFangrui Song // CHECK: {{.*}}weak{{.*}}: 15*68745a55SFangrui Song // CHECK-NEXT: Hash: 16*68745a55SFangrui Song // CHECK-NEXT: Counters: 1 17*68745a55SFangrui Song // CHECK-NEXT: Function count: 1 18*68745a55SFangrui Song // CHECK: main: 19*68745a55SFangrui Song // CHECK-NEXT: Hash: 20*68745a55SFangrui Song // CHECK-NEXT: Counters: 1 21*68745a55SFangrui Song // CHECK-NEXT: Function count: 1 22*68745a55SFangrui Song // CHECK: {{.*}}internal{{.*}}: 23*68745a55SFangrui Song // CHECK-NEXT: Hash: 24*68745a55SFangrui Song // CHECK-NEXT: Counters: 1 25*68745a55SFangrui Song // CHECK-NEXT: Function count: 1 26*68745a55SFangrui Song // CHECK: {{.*}}linkonce_odr{{.*}}: 27*68745a55SFangrui Song // CHECK-NEXT: Hash: 28*68745a55SFangrui Song // CHECK-NEXT: Counters: 1 29*68745a55SFangrui Song // CHECK-NEXT: Function count: 1 30*68745a55SFangrui Song 31*68745a55SFangrui Song #include <stdio.h> 32*68745a55SFangrui Song discarded0()33*68745a55SFangrui Songvoid discarded0() {} discarded1()34*68745a55SFangrui Song__attribute__((weak)) void discarded1() {} 35*68745a55SFangrui Song external()36*68745a55SFangrui Songvoid external() { puts("external"); } weak()37*68745a55SFangrui Song__attribute__((weak)) void weak() { puts("weak"); } internal()38*68745a55SFangrui Songstatic void internal() { puts("internal"); } linkonce_odr()39*68745a55SFangrui Song__attribute__((noinline)) inline void linkonce_odr() { puts("linkonce_odr"); } 40*68745a55SFangrui Song main()41*68745a55SFangrui Songint main() { 42*68745a55SFangrui Song internal(); 43*68745a55SFangrui Song external(); 44*68745a55SFangrui Song weak(); 45*68745a55SFangrui Song linkonce_odr(); 46*68745a55SFangrui Song } 47