xref: /llvm-project/clang/test/Profile/cxx-structors.cpp (revision c4ad41385374cfbd89bd1b4f2b0198029f472c4d)
1 // Tests for instrumentation of C++ constructors and destructors.
2 //
3 // RUN: %clang_cc1 -triple x86_64-apple-macosx10.11.0 -x c++ %s -o %t -emit-llvm -fprofile-instrument=clang
4 // RUN: FileCheck %s -input-file=%t -check-prefix=INSTR
5 // RUN: FileCheck %s -input-file=%t -check-prefix=NOINSTR
6 
7 struct Foo {
FooFoo8   Foo() {}
FooFoo9   Foo(int) {}
~FooFoo10   ~Foo() {}
11 };
12 
13 struct Bar : public Foo {
BarBar14   Bar() {}
BarBar15   Bar(int x) : Foo(x) {}
16   ~Bar();
17 };
18 
19 struct Baz : virtual public Foo {
BazBaz20   Baz() {}
BazBaz21   Baz(int x) : Foo(x) {}
22   ~Baz();
23 };
24 
25 struct Quux : public Foo {
QuuxQuux26   Quux(const char *y, ...) : Foo(0) {}
27 };
28 
29 Foo foo;
30 Foo foo2(1);
31 Bar bar;
32 Baz baz;
33 Baz baz2(1);
34 Quux qux("fi", "fo", "fum");
35 
36 // Profile data for complete constructors and destructors must be absent.
37 
38 // INSTR: @__profc__ZN3BazC1Ev =
39 // INSTR: @__profc__ZN3BazC1Ei =
40 // INSTR: @__profc__ZN4QuuxC1EPKcz =
41 // INSTR: @__profc_main =
42 // INSTR: @__profc__ZN3FooC2Ev =
43 // INSTR: @__profc__ZN3FooD2Ev =
44 // INSTR: @__profc__ZN3FooC2Ei =
45 // INSTR: @__profc__ZN3BarC2Ev =
46 
47 // NOINSTR-NOT: @__profc__ZN3FooC1Ev
48 // NOINSTR-NOT: @__profc__ZN3FooC1Ei
49 // NOINSTR-NOT: @__profc__ZN3FooD1Ev
50 // NOINSTR-NOT: @__profc__ZN3BarC1Ev
51 // NOINSTR-NOT: @__profc__ZN3BarD1Ev
52 // NOINSTR-NOT: @__profc__ZN3FooD1Ev
53 
main()54 int main() {
55 }
56