1// RUN: %clang_cc1 -verify -std=c++11 %s -fcxx-exceptions
2
3class BadDtor {
4  // A private, but nonetheless trivial, destructor.
5  ~BadDtor() = default; // expected-note 9{{here}}
6  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}
15struct V {
16  V();
17  BadDtor bd; // expected-note {{inaccessible destructor}}
18};
19V v; // expected-error {{deleted function}}
20struct W : BadDtor { // expected-note {{inaccessible destructor}}
21  W();
22};
23W w; // expected-error {{deleted function}}
24struct 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};
57