46 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C++
		
	
	
	
// RUN: %clang_cc1 -std=c++11 -fsyntax-only -Wexit-time-destructors %s -verify
 | 
						|
 | 
						|
namespace test1 {
 | 
						|
  struct A { ~A(); };
 | 
						|
  A a; // expected-warning {{declaration requires an exit-time destructor}}
 | 
						|
  A b[10]; // expected-warning {{declaration requires an exit-time destructor}}
 | 
						|
  A c[10][10]; // expected-warning {{declaration requires an exit-time destructor}}
 | 
						|
 | 
						|
  A &d = a;
 | 
						|
  A &e = b[5];
 | 
						|
  A &f = c[5][7];
 | 
						|
}
 | 
						|
 | 
						|
namespace test2 {
 | 
						|
void f() {
 | 
						|
  struct A { ~A() { } };
 | 
						|
  
 | 
						|
  static A a; // expected-warning {{declaration requires an exit-time destructor}}
 | 
						|
  static A b[10]; // expected-warning {{declaration requires an exit-time destructor}}
 | 
						|
  static A c[10][10]; // expected-warning {{declaration requires an exit-time destructor}}
 | 
						|
 | 
						|
  static A &d = a;
 | 
						|
  static A &e = b[5];
 | 
						|
  static A &f = c[5][7];
 | 
						|
}
 | 
						|
}
 | 
						|
 | 
						|
namespace test3 {
 | 
						|
  struct A { ~A() = default; };
 | 
						|
  A a;
 | 
						|
 | 
						|
  struct B { ~B(); };
 | 
						|
  struct C : B { ~C() = default; };
 | 
						|
  C c; // expected-warning {{exit-time destructor}}
 | 
						|
 | 
						|
  class D {
 | 
						|
    friend struct E;
 | 
						|
    ~D() = default;
 | 
						|
  };
 | 
						|
  struct E : D {
 | 
						|
    D d;
 | 
						|
    ~E() = default;
 | 
						|
  };
 | 
						|
  E e;
 | 
						|
}
 |