xref: /llvm-project/compiler-rt/test/profile/Darwin/coverage-linkage.cpp (revision 68745a557e9454c0f54011b9eea139f04b699b69)
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 Song void discarded0() {}
discarded1()34*68745a55SFangrui Song __attribute__((weak)) void discarded1() {}
35*68745a55SFangrui Song 
external()36*68745a55SFangrui Song void external() { puts("external"); }
weak()37*68745a55SFangrui Song __attribute__((weak)) void weak() { puts("weak"); }
internal()38*68745a55SFangrui Song static void internal() { puts("internal"); }
linkonce_odr()39*68745a55SFangrui Song __attribute__((noinline)) inline void linkonce_odr() { puts("linkonce_odr"); }
40*68745a55SFangrui Song 
main()41*68745a55SFangrui Song int main() {
42*68745a55SFangrui Song   internal();
43*68745a55SFangrui Song   external();
44*68745a55SFangrui Song   weak();
45*68745a55SFangrui Song   linkonce_odr();
46*68745a55SFangrui Song }
47