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