1*67e74705SXin Li // RUN: %clang_cc1 -std=c++11 -fsyntax-only -Wexit-time-destructors %s -verify 2*67e74705SXin Li 3*67e74705SXin Li namespace test1 { 4*67e74705SXin Li struct A { ~A(); }; 5*67e74705SXin Li A a; // expected-warning {{declaration requires an exit-time destructor}} 6*67e74705SXin Li A b[10]; // expected-warning {{declaration requires an exit-time destructor}} 7*67e74705SXin Li A c[10][10]; // expected-warning {{declaration requires an exit-time destructor}} 8*67e74705SXin Li 9*67e74705SXin Li A &d = a; 10*67e74705SXin Li A &e = b[5]; 11*67e74705SXin Li A &f = c[5][7]; 12*67e74705SXin Li } 13*67e74705SXin Li 14*67e74705SXin Li namespace test2 { f()15*67e74705SXin Livoid f() { 16*67e74705SXin Li struct A { ~A() { } }; 17*67e74705SXin Li 18*67e74705SXin Li static A a; // expected-warning {{declaration requires an exit-time destructor}} 19*67e74705SXin Li static A b[10]; // expected-warning {{declaration requires an exit-time destructor}} 20*67e74705SXin Li static A c[10][10]; // expected-warning {{declaration requires an exit-time destructor}} 21*67e74705SXin Li 22*67e74705SXin Li static A &d = a; 23*67e74705SXin Li static A &e = b[5]; 24*67e74705SXin Li static A &f = c[5][7]; 25*67e74705SXin Li } 26*67e74705SXin Li } 27*67e74705SXin Li 28*67e74705SXin Li namespace test3 { 29*67e74705SXin Li struct A { ~A() = default; }; 30*67e74705SXin Li A a; 31*67e74705SXin Li 32*67e74705SXin Li struct B { ~B(); }; 33*67e74705SXin Li struct C : B { ~C() = default; }; 34*67e74705SXin Li C c; // expected-warning {{exit-time destructor}} 35*67e74705SXin Li 36*67e74705SXin Li class D { 37*67e74705SXin Li friend struct E; 38*67e74705SXin Li ~D() = default; 39*67e74705SXin Li }; 40*67e74705SXin Li struct E : D { 41*67e74705SXin Li D d; 42*67e74705SXin Li ~E() = default; 43*67e74705SXin Li }; 44*67e74705SXin Li E e; 45*67e74705SXin Li } 46