[clang] Implement lifetime analysis for lifetime_capture_by(X) (#115921)
[llvm-project.git] / clang / test / SemaCUDA / inherited-ctor.cu
blob8ac59e7b539f37428ed2026a0d05cfebae961eb4
1 // RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify %s
3 // Inherit a valid non-default ctor.
4 namespace NonDefaultCtorValid {
5   struct A {
6     A(const int &x) {}
7   };
9   struct B : A {
10     using A::A;
11   };
13   struct C {
14     struct B b;
15     C() : b(0) {}
16   };
18   void test() {
19     B b(0);
20     C c;
21   }
24 // Inherit an invalid non-default ctor.
25 // The inherited ctor is invalid because it is unable to initialize s.
26 namespace NonDefaultCtorInvalid {
27   struct S {
28     S() = delete;
29   };
30   struct A {
31     A(const int &x) {}
32   };
34   struct B : A {
35     using A::A;
36     S s;
37   };
39   struct C {
40     struct B b;
41     C() : b(0) {} // expected-error{{constructor inherited by 'B' from base class 'A' is implicitly deleted}}
42                   // expected-note@-6{{constructor inherited by 'B' is implicitly deleted because field 's' has a deleted corresponding constructor}}
43                   // expected-note@-15{{'S' has been explicitly marked deleted here}}
44   };
47 // Inherit a valid default ctor.
48 namespace DefaultCtorValid {
49   struct A {
50     A() {}
51   };
53   struct B : A {
54     using A::A;
55   };
57   struct C {
58     struct B b;
59     C() {}
60   };
62   void test() {
63     B b;
64     C c;
65   }
68 // Inherit an invalid default ctor.
69 // The inherited ctor is invalid because it is unable to initialize s.
70 namespace DefaultCtorInvalid {
71   struct S {
72     S() = delete;
73   };
74   struct A {
75     A() {}
76   };
78   struct B : A {
79     using A::A;
80     S s;
81   };
83   struct C {
84     struct B b;
85     C() {} // expected-error{{call to implicitly-deleted default constructor of 'struct B'}}
86            // expected-note@-6{{default constructor of 'B' is implicitly deleted because field 's' has a deleted default constructor}}
87            // expected-note@-15{{'S' has been explicitly marked deleted here}}
88   };