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