1*67e74705SXin Li // RUN: %clang_cc1 -verify -std=c++11 %s -fcxx-exceptions 2*67e74705SXin Li 3*67e74705SXin Li class BadDtor { 4*67e74705SXin Li // A private, but nonetheless trivial, destructor. 5*67e74705SXin Li ~BadDtor() = default; // expected-note 9{{here}} 6*67e74705SXin Li friend class K; 7*67e74705SXin Li }; f()8*67e74705SXin Livoid f() { 9*67e74705SXin Li BadDtor *p = new BadDtor[3]; // expected-error {{private destructor}} 10*67e74705SXin Li delete [] p; // expected-error {{private destructor}} 11*67e74705SXin Li const BadDtor &dd2 = BadDtor(); // expected-error {{private destructor}} 12*67e74705SXin Li BadDtor dd; // expected-error {{private destructor}} 13*67e74705SXin Li throw dd; // expected-error {{private destructor}} 14*67e74705SXin Li } 15*67e74705SXin Li struct V { 16*67e74705SXin Li V(); 17*67e74705SXin Li BadDtor bd; // expected-note {{inaccessible destructor}} 18*67e74705SXin Li }; 19*67e74705SXin Li V v; // expected-error {{deleted function}} 20*67e74705SXin Li struct W : BadDtor { // expected-note {{inaccessible destructor}} 21*67e74705SXin Li W(); 22*67e74705SXin Li }; 23*67e74705SXin Li W w; // expected-error {{deleted function}} 24*67e74705SXin Li struct X : BadDtor { // expected-error {{private destructor}} ~XX25*67e74705SXin Li ~X() {} 26*67e74705SXin Li }; 27*67e74705SXin Li struct Y { 28*67e74705SXin Li BadDtor dd; // expected-error {{private destructor}} ~YY29*67e74705SXin Li ~Y() {} 30*67e74705SXin Li }; 31*67e74705SXin Li struct Z : virtual BadDtor { // expected-error {{private destructor}} ~ZZ32*67e74705SXin Li ~Z() {} 33*67e74705SXin Li }; 34*67e74705SXin Li BadDtor dd; // expected-error {{private destructor}} 35*67e74705SXin Li 36*67e74705SXin Li class K : BadDtor { f()37*67e74705SXin Li void f() { 38*67e74705SXin Li BadDtor *p = new BadDtor[3]; 39*67e74705SXin Li delete [] p; 40*67e74705SXin Li const BadDtor &dd2 = BadDtor(); 41*67e74705SXin Li BadDtor dd; 42*67e74705SXin Li throw dd; 43*67e74705SXin Li 44*67e74705SXin Li { 45*67e74705SXin Li BadDtor x; 46*67e74705SXin Li goto dont_call_dtor; 47*67e74705SXin Li } 48*67e74705SXin Li dont_call_dtor: 49*67e74705SXin Li ; 50*67e74705SXin Li } 51*67e74705SXin Li struct Z : virtual BadDtor { ~ZK::Z52*67e74705SXin Li ~Z() {} 53*67e74705SXin Li }; 54*67e74705SXin Li BadDtor dd; 55*67e74705SXin Li ~K(); 56*67e74705SXin Li }; 57