57 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C++
		
	
	
	
| // RUN: %clang_cc1 -verify -std=c++11 %s -fcxx-exceptions
 | |
| 
 | |
| class BadDtor {
 | |
|   // A private, but nonetheless trivial, destructor.
 | |
|   ~BadDtor() = default; // expected-note 9{{here}}
 | |
|   friend class K;
 | |
| };
 | |
| void f() {
 | |
|   BadDtor *p = new BadDtor[3]; // expected-error {{private destructor}}
 | |
|   delete [] p; // expected-error {{private destructor}}
 | |
|   const BadDtor &dd2 = BadDtor(); // expected-error {{private destructor}}
 | |
|   BadDtor dd; // expected-error {{private destructor}}
 | |
|   throw dd; // expected-error {{private destructor}}
 | |
| }
 | |
| struct V {
 | |
|   V();
 | |
|   BadDtor bd; // expected-note {{inaccessible destructor}}
 | |
| };
 | |
| V v; // expected-error {{deleted function}}
 | |
| struct W : BadDtor { // expected-note {{inaccessible destructor}}
 | |
|   W();
 | |
| };
 | |
| W w; // expected-error {{deleted function}}
 | |
| struct X : BadDtor { // expected-error {{private destructor}}
 | |
|   ~X() {}
 | |
| };
 | |
| struct Y {
 | |
|   BadDtor dd; // expected-error {{private destructor}}
 | |
|   ~Y() {}
 | |
| };
 | |
| struct Z : virtual BadDtor { // expected-error {{private destructor}}
 | |
|   ~Z() {}
 | |
| };
 | |
| BadDtor dd; // expected-error {{private destructor}}
 | |
| 
 | |
| class K : BadDtor {
 | |
|   void f() {
 | |
|     BadDtor *p = new BadDtor[3];
 | |
|     delete [] p;
 | |
|     const BadDtor &dd2 = BadDtor();
 | |
|     BadDtor dd;
 | |
|     throw dd;
 | |
| 
 | |
|     {
 | |
|       BadDtor x;
 | |
|       goto dont_call_dtor;
 | |
|     }
 | |
| dont_call_dtor:
 | |
|     ;
 | |
|   }
 | |
|   struct Z : virtual BadDtor {
 | |
|     ~Z() {}
 | |
|   };
 | |
|   BadDtor dd;
 | |
|   ~K();
 | |
| };
 |