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