Files
clang-p2996/compiler-rt/test/profile/Darwin/coverage-linkage.cpp
Fangrui Song 68745a557e [InstrProfiling] Use llvm.compiler.used if applicable for Mach-O
Similar to D97585.

D25456 used `S_ATTR_LIVE_SUPPORT` to ensure the data variable will be retained
or discarded as a unit with the counter variable, so llvm.compiler.used is
sufficient. It allows ld to dead strip unneeded profc and profd variables.

Reviewed By: vsk

Differential Revision: https://reviews.llvm.org/D105445
2021-09-01 14:46:51 -07:00

47 lines
1.4 KiB
C++

/// Test instrumentation can handle various linkages.
// RUN: %clang_profgen -fcoverage-mapping %s -o %t
// RUN: env LLVM_PROFILE_FILE=%t.profraw %run %t
// RUN: llvm-profdata show %t.profraw --all-functions | FileCheck %s
// RUN: %clang_profgen -fcoverage-mapping -Wl,-dead_strip %s -o %t
// RUN: env LLVM_PROFILE_FILE=%t.profraw %run %t
// RUN: llvm-profdata show %t.profraw --all-functions | FileCheck %s
// CHECK: {{.*}}external{{.*}}:
// CHECK-NEXT: Hash:
// CHECK-NEXT: Counters: 1
// CHECK-NEXT: Function count: 1
// CHECK: {{.*}}weak{{.*}}:
// CHECK-NEXT: Hash:
// CHECK-NEXT: Counters: 1
// CHECK-NEXT: Function count: 1
// CHECK: main:
// CHECK-NEXT: Hash:
// CHECK-NEXT: Counters: 1
// CHECK-NEXT: Function count: 1
// CHECK: {{.*}}internal{{.*}}:
// CHECK-NEXT: Hash:
// CHECK-NEXT: Counters: 1
// CHECK-NEXT: Function count: 1
// CHECK: {{.*}}linkonce_odr{{.*}}:
// CHECK-NEXT: Hash:
// CHECK-NEXT: Counters: 1
// CHECK-NEXT: Function count: 1
#include <stdio.h>
void discarded0() {}
__attribute__((weak)) void discarded1() {}
void external() { puts("external"); }
__attribute__((weak)) void weak() { puts("weak"); }
static void internal() { puts("internal"); }
__attribute__((noinline)) inline void linkonce_odr() { puts("linkonce_odr"); }
int main() {
internal();
external();
weak();
linkonce_odr();
}