xref: /llvm-project/compiler-rt/test/profile/Linux/coverage_ctors.cpp (revision f23fae29eb38b9e9d0c6195fa82a882167bd8abe)
13d731c5eSXinliang David Li // RUN: %clangxx_profgen -std=c++11 -fuse-ld=gold -fcoverage-mapping -o %t %s
2abf6d973SXinliang David Li // RUN: env LLVM_PROFILE_FILE=%t.profraw %run %t
3abf6d973SXinliang David Li // RUN: llvm-profdata merge -o %t.profdata %t.profraw
4*f23fae29SFangrui Song // RUN: llvm-cov show %t -instr-profile %t.profdata 2>&1 | FileCheck %s
5abf6d973SXinliang David Li 
6abf6d973SXinliang David Li struct Base {
7abf6d973SXinliang David Li   int B;
BaseBase8a3be895bSXinliang David Li   Base() : B(0) {}
BaseBase9a3be895bSXinliang David Li   Base(const Base &b2) {
10a3be895bSXinliang David Li     B = b2.B + 5;
11a3be895bSXinliang David Li   }
BaseBase12a3be895bSXinliang David Li   Base(Base &&b2) {
13a3be895bSXinliang David Li     B = b2.B + 10;
14abf6d973SXinliang David Li   }
15abf6d973SXinliang David Li };
16abf6d973SXinliang David Li 
17abf6d973SXinliang David Li struct Derived : public Base {
185e3c5e80SVedant Kumar   Derived(const Derived &) = default; // CHECK:  [[@LINE]]| 2|  Derived(const Derived &) = default;
195e3c5e80SVedant Kumar   Derived(Derived &&) = default;      // CHECK:  [[@LINE]]| 1| Derived(Derived &&) = default;
205e3c5e80SVedant Kumar   Derived() = default;                // CHECK:  [[@LINE]]| 1| Derived() = default
21abf6d973SXinliang David Li };
22abf6d973SXinliang David Li 
23abf6d973SXinliang David Li Derived dd;
main()24abf6d973SXinliang David Li int main() {
25abf6d973SXinliang David Li   Derived dd2(dd);
26a3be895bSXinliang David Li   Derived dd3(dd2);
27a3be895bSXinliang David Li   Derived dd4(static_cast<Derived &&>(dd3));
28abf6d973SXinliang David Li 
29a3be895bSXinliang David Li   if (dd.B != 0 || dd2.B != 5 || dd3.B != 10 || dd4.B != 20)
305e3c5e80SVedant Kumar     return 1;                         // CHECK: [[@LINE]]| 0|     return 1;
31abf6d973SXinliang David Li   return 0;
32abf6d973SXinliang David Li }
33