1 // REQUIRES: darwin
2 
3 // RUN: echo "void dso1(void) {}" > %t.dso1.c
4 // RUN: echo "void dso2(void) {}" > %t.dso2.c
5 // RUN: %clang_pgogen -dynamiclib -o %t.dso1.dylib %t.dso1.c
6 // RUN: %clang_pgogen -dynamiclib -o %t.dso2.dylib %t.dso2.c
7 // RUN: %clang_pgogen -o %t.exe %s %t.dso1.dylib %t.dso2.dylib
8 // RUN: env LLVM_PROFILE_FILE="%c%t.profraw" %run %t.exe 2>&1 | count 0
9 // RUN: llvm-profdata show --counts --all-functions %t.profraw | FileCheck %s
10 
11 // CHECK-LABEL: Counters:
12 // CHECK-NEXT:   dso1:
13 // CHECK-NEXT:     Hash: 0x{{.*}}
14 // CHECK-NEXT:     Counters: 1
15 // CHECK-NEXT:     Block counts: [1]
16 // CHECK-NEXT:   dso2:
17 // CHECK-NEXT:     Hash: 0x{{.*}}
18 // CHECK-NEXT:     Counters: 1
19 // CHECK-NEXT:     Block counts: [1]
20 // CHECK-NEXT:   main:
21 // CHECK-NEXT:     Hash: 0x{{.*}}
22 // CHECK-NEXT:     Counters: 1
23 // CHECK-NEXT:     Block counts: [1]
24 // CHECK-NEXT: Instrumentation level: IR
25 // CHECK-NEXT: Functions shown: 3
26 // CHECK-NEXT: Total functions: 3
27 // CHECK-NEXT: Maximum function count: 1
28 // CHECK-NEXT: Maximum internal block count: 0
29 
30 void dso1(void);
31 void dso2(void);
32 
main()33 int main() {
34   dso1();
35   dso2();
36   return 0;
37 }
38