xref: /aosp_15_r20/external/clang/test/SemaCXX/warn-exit-time-destructors.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
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 Li void 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