OSDN Git Service

9849b1edfa8e662238685c6cc51b9a635d9705f8
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / g++.dg / warn / delete-non-virtual-dtor.C
1 // { dg-options "-std=gnu++0x -Wdelete-non-virtual-dtor" }
2 // { dg-do compile }
3
4 struct polyBase { virtual void f(); };
5
6 void f(polyBase* p, polyBase* arr)
7 {
8   delete p;      // { dg-warning "non-virtual destructor might" }
9   delete [] arr;
10 }
11
12 struct polyDerived : polyBase { };
13
14 void f(polyDerived* p, polyDerived* arr)
15 {
16   delete p;      // { dg-warning "non-virtual destructor might" }
17   delete [] arr;
18 }
19
20 struct absDerived : polyBase { virtual void g() = 0; };
21
22 void f(absDerived* p, absDerived* arr)
23 {
24   delete p;      // { dg-warning "non-virtual destructor will" }
25   delete [] arr;
26 }
27
28 struct finalDerived final : polyBase { };
29
30 void f(finalDerived* p, finalDerived* arr)
31 {
32   delete p;      // no error for final classes
33   delete [] arr;
34 }
35
36 struct safeBase { virtual ~safeBase(); };
37 struct safeDerived : safeBase { virtual void f(); };
38
39 void f(safeDerived* p, safeDerived* arr)
40 {
41   delete p;      // no error because base has virtual dtor
42   delete [] arr;
43 }
44