blob: e6f955501a3071ed5b9b2a46fc89d982e3d949d1 [file] [log] [blame]
Richard Smith213d70b2012-02-18 04:13:32 +00001// RUN: %clang_cc1 -verify -std=c++11 %s -fcxx-exceptions
2
3class BadDtor {
4 // A private, but nonetheless trivial, destructor.
Richard Smith03f68782012-02-26 07:51:39 +00005 ~BadDtor() = default; // expected-note 9{{here}}
Richard Smith213d70b2012-02-18 04:13:32 +00006 friend class K;
7};
8void f() {
9 BadDtor *p = new BadDtor[3]; // expected-error {{private destructor}}
10 delete [] p; // expected-error {{private destructor}}
11 const BadDtor &dd2 = BadDtor(); // expected-error {{private destructor}}
12 BadDtor dd; // expected-error {{private destructor}}
13 throw dd; // expected-error {{private destructor}}
14}
Richard Smith6c4c36c2012-03-30 20:53:28 +000015struct V {
Richard Smithdfefb842012-02-25 07:33:38 +000016 V();
Richard Smith6c4c36c2012-03-30 20:53:28 +000017 BadDtor bd; // expected-note {{inaccessible destructor}}
Richard Smithdfefb842012-02-25 07:33:38 +000018};
Richard Smith03f68782012-02-26 07:51:39 +000019V v; // expected-error {{deleted function}}
Richard Smith6c4c36c2012-03-30 20:53:28 +000020struct W : BadDtor { // expected-note {{inaccessible destructor}}
Richard Smithdfefb842012-02-25 07:33:38 +000021 W();
22};
Richard Smith03f68782012-02-26 07:51:39 +000023W w; // expected-error {{deleted function}}
Richard Smith213d70b2012-02-18 04:13:32 +000024struct X : BadDtor { // expected-error {{private destructor}}
25 ~X() {}
26};
27struct Y {
28 BadDtor dd; // expected-error {{private destructor}}
29 ~Y() {}
30};
31struct Z : virtual BadDtor { // expected-error {{private destructor}}
32 ~Z() {}
33};
34BadDtor dd; // expected-error {{private destructor}}
35
36class K : BadDtor {
37 void f() {
38 BadDtor *p = new BadDtor[3];
39 delete [] p;
40 const BadDtor &dd2 = BadDtor();
41 BadDtor dd;
42 throw dd;
43
44 {
45 BadDtor x;
46 goto dont_call_dtor;
47 }
48dont_call_dtor:
49 ;
50 }
51 struct Z : virtual BadDtor {
52 ~Z() {}
53 };
54 BadDtor dd;
55 ~K();
56};