1 // RUN: %clangxx_profgen -fcoverage-mapping %S/Inputs/instrprof-visibility-helper.cpp -o %t %s
2 // RUN: env LLVM_PROFILE_FILE=%t.profraw %run %t
3 // RUN: llvm-profdata merge %t.profraw -o %t.profdata
4 // RUN: llvm-profdata show --all-functions %t.profraw | FileCheck -allow-deprecated-dag-overlap %s --check-prefix=PROFILE
5 // RUN: llvm-cov show %t -instr-profile=%t.profdata | FileCheck -allow-deprecated-dag-overlap %s --check-prefix=COV
6 
7 namespace {
8 #define NO_WEAK
9 #define NO_EXTERN
10 #include "instrprof-visibility-kinds.inc"
11 #undef NO_EXTERN
12 #undef NO_WEAK
13 }
14 
15 namespace N1 {
16 #include "instrprof-visibility-kinds.inc"
17 }
18 
main()19 int main() {
20   call();
21   N1::call();
22   return 0;
23 }
24 
25 // PROFILE-DAG: _ZN2N12f1Ev
26 // PROFILE-DAG: _ZN2N12f2Ev
27 // PROFILE-DAG: _ZN2N12f3Ev
28 // PROFILE-DAG: _ZN2N12f4Ev
29 // PROFILE-DAG: _ZN2N12f5Ev
30 // PROFILE-DAG: _ZN2N12f6Ev
31 // PROFILE-DAG: _ZN2N12f7Ev
32 // PROFILE-DAG: _ZN2N14callEv
33 // PROFILE-DAG: main
34 // PROFILE-DAG: instrprof-visibility.cpp:_ZN12_GLOBAL__N_14callEv
35 // PROFILE-DAG: instrprof-visibility.cpp:_ZN12_GLOBAL__N_12f1Ev
36 // PROFILE-DAG: instrprof-visibility.cpp:_ZN12_GLOBAL__N_12f3Ev
37 // PROFILE-DAG: instrprof-visibility.cpp:_ZN12_GLOBAL__N_12f5Ev
38 // PROFILE-DAG: instrprof-visibility.cpp:_ZN12_GLOBAL__N_12f6Ev
39 // PROFILE-DAG: instrprof-visibility.cpp:_ZN12_GLOBAL__N_12f7Ev
40 // PROFILE-DAG: Total functions: 15
41 
42 // COV-DAG: instrprof-visibility-helper.cpp
43 
44 // COV-DAG: instrprof-visibility-kinds.inc
45 
46 // COV-DAG: _ZN2N12f1Ev
47 // COV-DAG: instrprof-visibility.cpp:_ZN12_GLOBAL__N_12f1Ev
48 // COV-DAG: instrprof-visibility.cpp:_ZN12_GLOBAL__N_12f3Ev
49 // COV-DAG: _ZN2N12f3Ev
50 // COV-DAG: instrprof-visibility.cpp:_ZN12_GLOBAL__N_12f5Ev
51 // COV-DAG: _ZN2N12f5Ev
52 // COV-DAG: _ZN2N12f6Ev
53 // COV-DAG: instrprof-visibility.cpp:_ZN12_GLOBAL__N_12f6Ev
54 // COV-DAG: instrprof-visibility.cpp:_ZN12_GLOBAL__N_12f7Ev
55 // COV-DAG: _ZN2N12f7Ev
56 
57 // --- Check coverage for functions in the anonymous namespace.
58 // COV-DAG: instrprof-visibility.cpp:_ZN12_GLOBAL__N_14callEv
59 // COV-DAG: [[CALL:[0-9]+]]|{{ *}}1|void call() {
60 // COV-DAG: {{.*}}|{{ *}}1|  f1();
61 // COV-DAG: {{.*}}|{{ *}}1|#ifndef NO_WEAK
62 // COV-DAG: {{.*}}|{{ *}} |  f2();
63 // COV-DAG: {{.*}}|{{ *}} |#endif
64 // COV-DAG: {{.*}}|{{ *}}1|  f3();
65 // COV-DAG: {{.*}}|{{ *}}1|#ifndef NO_EXTERN
66 // COV-DAG: {{.*}}|{{ *}} |  f4();
67 // COV-DAG: {{.*}}|{{ *}} |#endif
68 // COV-DAG: {{.*}}|{{ *}}1|  f5();
69 // COV-DAG: {{.*}}|{{ *}}1|  f6();
70 // COV-DAG: {{.*}}|{{ *}}1|  f7();
71 // COV-DAG: {{.*}}|{{ *}}1|}
72 
73 // --- Check coverage for functions in namespace N1.
74 // COV-DAG: _ZN2N14callEv
75 // COV-DAG: {{ *}}[[CALL]]|{{ *}}1|void call() {
76 // COV-DAG: {{.*}}|{{ *}}1|  f1();
77 // COV-DAG: {{.*}}|{{ *}}1|#ifndef NO_WEAK
78 // COV-DAG: {{.*}}|{{ *}}1|  f2();
79 // COV-DAG: {{.*}}|{{ *}}1|#endif
80 // COV-DAG: {{.*}}|{{ *}}1|  f3();
81 // COV-DAG: {{.*}}|{{ *}}1|#ifndef NO_EXTERN
82 // COV-DAG: {{.*}}|{{ *}}1|  f4();
83 // COV-DAG: {{.*}}|{{ *}}1|#endif
84 // COV-DAG: {{.*}}|{{ *}}1|  f5();
85 // COV-DAG: {{.*}}|{{ *}}1|  f6();
86 // COV-DAG: {{.*}}|{{ *}}1|  f7();
87 // COV-DAG: {{.*}}|{{ *}}1|}
88 
89 // COV-DAG: instrprof-visibility.cpp
90