1b19c0ac7SFangrui Song /// Test instrumentation can handle various linkages. 27b6b15e0SFangrui Song // REQUIRES: lld-available 3*9788652dSVitaly Buka 4*9788652dSVitaly Buka // FIXME: Investigate and fix. 5*9788652dSVitaly Buka // XFAIL: powerpc64-target-arch 6*9788652dSVitaly Buka 7b19c0ac7SFangrui Song // RUN: %clang_profgen -fcoverage-mapping %s -o %t 8b19c0ac7SFangrui Song // RUN: env LLVM_PROFILE_FILE=%t.profraw %run %t 97b6b15e0SFangrui Song // RUN: llvm-profdata show %t.profraw --all-functions | FileCheck %s 10b19c0ac7SFangrui Song 117b6b15e0SFangrui Song // RUN: %clang_profgen -fcoverage-mapping -ffunction-sections -fuse-ld=lld -Wl,--gc-sections %s -o %t 12b19c0ac7SFangrui Song // RUN: env LLVM_PROFILE_FILE=%t.profraw %run %t 137b6b15e0SFangrui Song // RUN: llvm-profdata show %t.profraw --all-functions | FileCheck %s 147b6b15e0SFangrui Song 157b6b15e0SFangrui Song // CHECK: {{.*}}external{{.*}}: 167b6b15e0SFangrui Song // CHECK-NEXT: Hash: 177b6b15e0SFangrui Song // CHECK-NEXT: Counters: 1 187b6b15e0SFangrui Song // CHECK-NEXT: Function count: 1 197b6b15e0SFangrui Song // CHECK: {{.*}}weak{{.*}}: 207b6b15e0SFangrui Song // CHECK-NEXT: Hash: 217b6b15e0SFangrui Song // CHECK-NEXT: Counters: 1 227b6b15e0SFangrui Song // CHECK-NEXT: Function count: 1 237b6b15e0SFangrui Song // CHECK: main: 247b6b15e0SFangrui Song // CHECK-NEXT: Hash: 257b6b15e0SFangrui Song // CHECK-NEXT: Counters: 1 267b6b15e0SFangrui Song // CHECK-NEXT: Function count: 1 277b6b15e0SFangrui Song // CHECK: {{.*}}internal{{.*}}: 287b6b15e0SFangrui Song // CHECK-NEXT: Hash: 297b6b15e0SFangrui Song // CHECK-NEXT: Counters: 1 307b6b15e0SFangrui Song // CHECK-NEXT: Function count: 1 317b6b15e0SFangrui Song // CHECK: {{.*}}linkonce_odr{{.*}}: 327b6b15e0SFangrui Song // CHECK-NEXT: Hash: 337b6b15e0SFangrui Song // CHECK-NEXT: Counters: 1 347b6b15e0SFangrui Song // CHECK-NEXT: Function count: 1 35b19c0ac7SFangrui Song 36b19c0ac7SFangrui Song #include <stdio.h> 37b19c0ac7SFangrui Song discarded0()38b19c0ac7SFangrui Songvoid discarded0() {} discarded1()39b19c0ac7SFangrui Song__attribute__((weak)) void discarded1() {} 40b19c0ac7SFangrui Song external()41b19c0ac7SFangrui Songvoid external() { puts("external"); } weak()42b19c0ac7SFangrui Song__attribute__((weak)) void weak() { puts("weak"); } internal()43b19c0ac7SFangrui Songstatic void internal() { puts("internal"); } linkonce_odr()44b19c0ac7SFangrui Song__attribute__((noinline)) inline void linkonce_odr() { puts("linkonce_odr"); } 45b19c0ac7SFangrui Song main()46b19c0ac7SFangrui Songint main() { 47b19c0ac7SFangrui Song internal(); 48b19c0ac7SFangrui Song external(); 49b19c0ac7SFangrui Song weak(); 50b19c0ac7SFangrui Song linkonce_odr(); 51b19c0ac7SFangrui Song } 52