xref: /llvm-project/compiler-rt/test/profile/coverage-inline.cpp (revision 92ad0397f494a9895385057586cc59a908107f81)
1*92ad0397SWael Yehia // XFAIL: target={{.*}}-aix{{.*}}
24fb3502bSReid Kleckner // Test that the instrumentation puts the right linkage on the profile data for
34fb3502bSReid Kleckner // inline functions.
4987d331fSReid Kleckner // RUN: %clang_profgen -g -fcoverage-mapping -c -o %t1.o %s -DOBJECT_1
5987d331fSReid Kleckner // RUN: %clang_profgen -g -fcoverage-mapping -c -o %t2.o %s
6987d331fSReid Kleckner // RUN: %clang_profgen -g -fcoverage-mapping %t1.o %t2.o -o %t.exe
7987d331fSReid Kleckner // RUN: env LLVM_PROFILE_FILE=%t.profraw %run %t.exe
8987d331fSReid Kleckner // RUN: llvm-profdata show %t.profraw -all-functions | FileCheck %s
9987d331fSReid Kleckner 
104fb3502bSReid Kleckner // Again, with optimizations and inlining. This tests that we use comdats
114fb3502bSReid Kleckner // correctly.
124fb3502bSReid Kleckner // RUN: %clang_profgen -O2 -g -fcoverage-mapping -c -o %t1.o %s -DOBJECT_1
134fb3502bSReid Kleckner // RUN: %clang_profgen -O2 -g -fcoverage-mapping -c -o %t2.o %s
144fb3502bSReid Kleckner // RUN: %clang_profgen -g -fcoverage-mapping %t1.o %t2.o -o %t.exe
154fb3502bSReid Kleckner // RUN: env LLVM_PROFILE_FILE=%t.profraw %run %t.exe
164fb3502bSReid Kleckner // RUN: llvm-profdata show %t.profraw -all-functions | FileCheck %s
17987d331fSReid Kleckner 
18987d331fSReid Kleckner // CHECK:  {{.*}}foo{{.*}}:
19987d331fSReid Kleckner // CHECK-NEXT:    Hash:
20987d331fSReid Kleckner // CHECK-NEXT:    Counters: 1
21987d331fSReid Kleckner // CHECK-NEXT:    Function count: 1
22987d331fSReid Kleckner // CHECK:  {{.*}}inline_wrapper{{.*}}:
23987d331fSReid Kleckner // CHECK-NEXT:    Hash:
24987d331fSReid Kleckner // CHECK-NEXT:    Counters: 1
25987d331fSReid Kleckner // CHECK-NEXT:    Function count: 2
26987d331fSReid Kleckner // CHECK:  main:
27987d331fSReid Kleckner // CHECK-NEXT:    Hash:
28987d331fSReid Kleckner // CHECK-NEXT:    Counters: 1
29987d331fSReid Kleckner // CHECK-NEXT:    Function count: 1
30987d331fSReid Kleckner 
31987d331fSReid Kleckner extern "C" int puts(const char *);
32987d331fSReid Kleckner 
33987d331fSReid Kleckner inline void inline_wrapper(const char *msg) {
34987d331fSReid Kleckner   puts(msg);
35987d331fSReid Kleckner }
36987d331fSReid Kleckner 
37987d331fSReid Kleckner void foo();
38987d331fSReid Kleckner 
39987d331fSReid Kleckner #ifdef OBJECT_1
40987d331fSReid Kleckner void foo() {
41987d331fSReid Kleckner   inline_wrapper("foo");
42987d331fSReid Kleckner }
43987d331fSReid Kleckner #else
44987d331fSReid Kleckner int main() {
45987d331fSReid Kleckner   inline_wrapper("main");
46987d331fSReid Kleckner   foo();
47987d331fSReid Kleckner }
48987d331fSReid Kleckner #endif
49