blob: a4b868c0ad5a7f5414a73dd0cbbc5dab6fb7bc8e [file] [log] [blame]
Richard Smitheec915d62012-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 Smith561fb152012-02-25 07:33:38 +00005 ~BadDtor() = default; // expected-note 11{{here}}
Richard Smitheec915d62012-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 Smith561fb152012-02-25 07:33:38 +000015struct V { // expected-note {{here}}
16 V();
17 BadDtor bd; // expected-error {{private destructor}}
18};
19V v; // expected-error {{deleted function}} expected-note {{required here}}
20struct W : BadDtor { // expected-note {{here}} expected-error {{private destructor}}
21 W();
22};
23W w; // expected-error {{deleted function}} expected-note {{required here}}
Richard Smitheec915d62012-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};