1213d70b58b4f48050c3e545ce1bd4b0ec3af74beRichard Smith// RUN: %clang_cc1 -verify -std=c++11 %s -fcxx-exceptions 2213d70b58b4f48050c3e545ce1bd4b0ec3af74beRichard Smith 3213d70b58b4f48050c3e545ce1bd4b0ec3af74beRichard Smithclass BadDtor { 4213d70b58b4f48050c3e545ce1bd4b0ec3af74beRichard Smith // A private, but nonetheless trivial, destructor. 503f68788036803c0bad3fe6ea9a4ea31ba195a2bRichard Smith ~BadDtor() = default; // expected-note 9{{here}} 6213d70b58b4f48050c3e545ce1bd4b0ec3af74beRichard Smith friend class K; 7213d70b58b4f48050c3e545ce1bd4b0ec3af74beRichard Smith}; 8213d70b58b4f48050c3e545ce1bd4b0ec3af74beRichard Smithvoid f() { 9213d70b58b4f48050c3e545ce1bd4b0ec3af74beRichard Smith BadDtor *p = new BadDtor[3]; // expected-error {{private destructor}} 10213d70b58b4f48050c3e545ce1bd4b0ec3af74beRichard Smith delete [] p; // expected-error {{private destructor}} 11213d70b58b4f48050c3e545ce1bd4b0ec3af74beRichard Smith const BadDtor &dd2 = BadDtor(); // expected-error {{private destructor}} 12213d70b58b4f48050c3e545ce1bd4b0ec3af74beRichard Smith BadDtor dd; // expected-error {{private destructor}} 13213d70b58b4f48050c3e545ce1bd4b0ec3af74beRichard Smith throw dd; // expected-error {{private destructor}} 14213d70b58b4f48050c3e545ce1bd4b0ec3af74beRichard Smith} 156c4c36c4ed1007143f5b8655eb68b313a7e12e76Richard Smithstruct V { 16dfefb840e36f069286ef6cf178ef339c90f4603dRichard Smith V(); 176c4c36c4ed1007143f5b8655eb68b313a7e12e76Richard Smith BadDtor bd; // expected-note {{inaccessible destructor}} 18dfefb840e36f069286ef6cf178ef339c90f4603dRichard Smith}; 1903f68788036803c0bad3fe6ea9a4ea31ba195a2bRichard SmithV v; // expected-error {{deleted function}} 206c4c36c4ed1007143f5b8655eb68b313a7e12e76Richard Smithstruct W : BadDtor { // expected-note {{inaccessible destructor}} 21dfefb840e36f069286ef6cf178ef339c90f4603dRichard Smith W(); 22dfefb840e36f069286ef6cf178ef339c90f4603dRichard Smith}; 2303f68788036803c0bad3fe6ea9a4ea31ba195a2bRichard SmithW w; // expected-error {{deleted function}} 24213d70b58b4f48050c3e545ce1bd4b0ec3af74beRichard Smithstruct X : BadDtor { // expected-error {{private destructor}} 25213d70b58b4f48050c3e545ce1bd4b0ec3af74beRichard Smith ~X() {} 26213d70b58b4f48050c3e545ce1bd4b0ec3af74beRichard Smith}; 27213d70b58b4f48050c3e545ce1bd4b0ec3af74beRichard Smithstruct Y { 28213d70b58b4f48050c3e545ce1bd4b0ec3af74beRichard Smith BadDtor dd; // expected-error {{private destructor}} 29213d70b58b4f48050c3e545ce1bd4b0ec3af74beRichard Smith ~Y() {} 30213d70b58b4f48050c3e545ce1bd4b0ec3af74beRichard Smith}; 31213d70b58b4f48050c3e545ce1bd4b0ec3af74beRichard Smithstruct Z : virtual BadDtor { // expected-error {{private destructor}} 32213d70b58b4f48050c3e545ce1bd4b0ec3af74beRichard Smith ~Z() {} 33213d70b58b4f48050c3e545ce1bd4b0ec3af74beRichard Smith}; 34213d70b58b4f48050c3e545ce1bd4b0ec3af74beRichard SmithBadDtor dd; // expected-error {{private destructor}} 35213d70b58b4f48050c3e545ce1bd4b0ec3af74beRichard Smith 36213d70b58b4f48050c3e545ce1bd4b0ec3af74beRichard Smithclass K : BadDtor { 37213d70b58b4f48050c3e545ce1bd4b0ec3af74beRichard Smith void f() { 38213d70b58b4f48050c3e545ce1bd4b0ec3af74beRichard Smith BadDtor *p = new BadDtor[3]; 39213d70b58b4f48050c3e545ce1bd4b0ec3af74beRichard Smith delete [] p; 40213d70b58b4f48050c3e545ce1bd4b0ec3af74beRichard Smith const BadDtor &dd2 = BadDtor(); 41213d70b58b4f48050c3e545ce1bd4b0ec3af74beRichard Smith BadDtor dd; 42213d70b58b4f48050c3e545ce1bd4b0ec3af74beRichard Smith throw dd; 43213d70b58b4f48050c3e545ce1bd4b0ec3af74beRichard Smith 44213d70b58b4f48050c3e545ce1bd4b0ec3af74beRichard Smith { 45213d70b58b4f48050c3e545ce1bd4b0ec3af74beRichard Smith BadDtor x; 46213d70b58b4f48050c3e545ce1bd4b0ec3af74beRichard Smith goto dont_call_dtor; 47213d70b58b4f48050c3e545ce1bd4b0ec3af74beRichard Smith } 48213d70b58b4f48050c3e545ce1bd4b0ec3af74beRichard Smithdont_call_dtor: 49213d70b58b4f48050c3e545ce1bd4b0ec3af74beRichard Smith ; 50213d70b58b4f48050c3e545ce1bd4b0ec3af74beRichard Smith } 51213d70b58b4f48050c3e545ce1bd4b0ec3af74beRichard Smith struct Z : virtual BadDtor { 52213d70b58b4f48050c3e545ce1bd4b0ec3af74beRichard Smith ~Z() {} 53213d70b58b4f48050c3e545ce1bd4b0ec3af74beRichard Smith }; 54213d70b58b4f48050c3e545ce1bd4b0ec3af74beRichard Smith BadDtor dd; 55213d70b58b4f48050c3e545ce1bd4b0ec3af74beRichard Smith ~K(); 56213d70b58b4f48050c3e545ce1bd4b0ec3af74beRichard Smith}; 57