annotate gcc/testsuite/g++.dg/warn/delete-non-virtual-dtor.C @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 // { dg-options "-Wdelete-non-virtual-dtor" }
kono
parents:
diff changeset
2 // { dg-do compile { target c++11 } }
kono
parents:
diff changeset
3
kono
parents:
diff changeset
4 struct polyBase { virtual void f(); };
kono
parents:
diff changeset
5
kono
parents:
diff changeset
6 void f(polyBase* p, polyBase* arr)
kono
parents:
diff changeset
7 {
kono
parents:
diff changeset
8 polyBase pb;
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
9 delete p; // { dg-warning "3:deleting \[^\n\r]* non-virtual destructor might" }
111
kono
parents:
diff changeset
10 delete [] arr;
kono
parents:
diff changeset
11 }
kono
parents:
diff changeset
12
kono
parents:
diff changeset
13 struct polyDerived : polyBase { };
kono
parents:
diff changeset
14
kono
parents:
diff changeset
15 void f(polyDerived* p, polyDerived* arr)
kono
parents:
diff changeset
16 {
kono
parents:
diff changeset
17 polyDerived pd;
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
18 delete p; // { dg-warning "3:deleting \[^\n\r]* non-virtual destructor might" }
111
kono
parents:
diff changeset
19 delete [] arr;
kono
parents:
diff changeset
20 }
kono
parents:
diff changeset
21
kono
parents:
diff changeset
22 struct absDerived : polyBase { virtual void g() = 0; };
kono
parents:
diff changeset
23
kono
parents:
diff changeset
24 void f(absDerived* p, absDerived* arr)
kono
parents:
diff changeset
25 {
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
26 delete p; // { dg-warning "3:deleting \[^\n\r]* non-virtual destructor will" }
111
kono
parents:
diff changeset
27 delete [] arr;
kono
parents:
diff changeset
28 }
kono
parents:
diff changeset
29
kono
parents:
diff changeset
30 struct finalDerived final : polyBase { };
kono
parents:
diff changeset
31
kono
parents:
diff changeset
32 void f(finalDerived* p, finalDerived* arr)
kono
parents:
diff changeset
33 {
kono
parents:
diff changeset
34 finalDerived fd;
kono
parents:
diff changeset
35 delete p; // no error for final classes
kono
parents:
diff changeset
36 delete [] arr;
kono
parents:
diff changeset
37 }
kono
parents:
diff changeset
38
kono
parents:
diff changeset
39 struct safeBase { virtual ~safeBase(); };
kono
parents:
diff changeset
40 struct safeDerived : safeBase { virtual void f(); };
kono
parents:
diff changeset
41
kono
parents:
diff changeset
42 void f(safeDerived* p, safeDerived* arr)
kono
parents:
diff changeset
43 {
kono
parents:
diff changeset
44 safeDerived sd;
kono
parents:
diff changeset
45 delete p; // no error because base has virtual dtor
kono
parents:
diff changeset
46 delete [] arr;
kono
parents:
diff changeset
47 }
kono
parents:
diff changeset
48
kono
parents:
diff changeset
49 struct polyBaseNonTrivial { ~polyBaseNonTrivial(); virtual void f(); };
kono
parents:
diff changeset
50
kono
parents:
diff changeset
51 void f(polyBaseNonTrivial* p, polyBaseNonTrivial* arr)
kono
parents:
diff changeset
52 {
kono
parents:
diff changeset
53 polyBaseNonTrivial pbnt;
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
54 delete p; // { dg-warning "3:deleting \[^\n\r]* non-virtual destructor might" }
111
kono
parents:
diff changeset
55 delete [] arr;
kono
parents:
diff changeset
56 }
kono
parents:
diff changeset
57
kono
parents:
diff changeset
58 struct polyDerivedNT : polyBaseNonTrivial { ~polyDerivedNT(); };
kono
parents:
diff changeset
59
kono
parents:
diff changeset
60 void f(polyDerivedNT* p, polyDerivedNT* arr)
kono
parents:
diff changeset
61 {
kono
parents:
diff changeset
62 polyDerivedNT pdnt;
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
63 delete p; // { dg-warning "3:deleting \[^\n\r]* non-virtual destructor might" }
111
kono
parents:
diff changeset
64 delete [] arr;
kono
parents:
diff changeset
65 }
kono
parents:
diff changeset
66