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

source code of compiler-rt/test/profile/Windows/coverage-linkage.cpp