Home | History | Annotate | Download | only in SemaCXX
      1 // RUN: %clang_cc1 -verify -std=c++11 %s -fcxx-exceptions
      2 
      3 class BadDtor {
      4   // A private, but nonetheless trivial, destructor.
      5   ~BadDtor() = default; // expected-note 9{{here}}
      6   friend class K;
      7 };
      8 void 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 }
     15 struct V {
     16   V();
     17   BadDtor bd; // expected-note {{inaccessible destructor}}
     18 };
     19 V v; // expected-error {{deleted function}}
     20 struct W : BadDtor { // expected-note {{inaccessible destructor}}
     21   W();
     22 };
     23 W w; // expected-error {{deleted function}}
     24 struct X : BadDtor { // expected-error {{private destructor}}
     25   ~X() {}
     26 };
     27 struct Y {
     28   BadDtor dd; // expected-error {{private destructor}}
     29   ~Y() {}
     30 };
     31 struct Z : virtual BadDtor { // expected-error {{private destructor}}
     32   ~Z() {}
     33 };
     34 BadDtor dd; // expected-error {{private destructor}}
     35 
     36 class 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     }
     48 dont_call_dtor:
     49     ;
     50   }
     51   struct Z : virtual BadDtor {
     52     ~Z() {}
     53   };
     54   BadDtor dd;
     55   ~K();
     56 };
     57