blob: d147b13f04fdf63d5ffa59afafe325f7d8b64245 [file] [log] [blame]
Eli Friedman0d30a872010-08-07 23:11:44 +00001// RUN: %clang_cc1 -fsyntax-only -verify %s
2// PR7800
3
Eli Friedmana5702602010-08-08 05:07:06 +00004class NoDestroy { ~NoDestroy(); }; // expected-note 3 {{declared private here}}
Eli Friedman0d30a872010-08-07 23:11:44 +00005struct A {
6 virtual ~A();
7};
Eli Friedmana5702602010-08-08 05:07:06 +00008
Eli Friedman0d30a872010-08-07 23:11:44 +00009struct B : public virtual A {
10 NoDestroy x; // expected-error {{field of type 'NoDestroy' has private destructor}}
11};
12struct D : public virtual B {
13 virtual void foo();
14 ~D();
15};
16void D::foo() { // expected-note {{implicit default destructor for 'B' first required here}}
17}
Eli Friedmana5702602010-08-08 05:07:06 +000018
19struct E : public virtual A {
20 NoDestroy x; // expected-error {{field of type 'NoDestroy' has private destructor}}
21};
22struct F : public E { // expected-note {{implicit default destructor for 'E' first required here}}
23};
24struct G : public virtual F {
25 virtual void foo();
26 ~G();
27};
28void G::foo() { // expected-note {{implicit default destructor for 'F' first required here}}
29}
30
31struct H : public virtual A {
32 NoDestroy x; // expected-error {{field of type 'NoDestroy' has private destructor}}
33};
34struct I : public virtual H {
35 ~I();
36};
37struct J : public I {
38 virtual void foo();
39 ~J();
40};
41void J::foo() { // expected-note {{implicit default destructor for 'H' first required here}}
42}