annotate gcc/testsuite/g++.dg/warn/Wplacement-new-size-2.C @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children 1830386684a0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 // PR c++/69662 - -Wplacement-new on allocated one element array members
kono
parents:
diff changeset
2 // Exercising -Wplacement-new=2.
kono
parents:
diff changeset
3 // { dg-do compile }
kono
parents:
diff changeset
4 // { dg-options "-Wno-pedantic -Wplacement-new=2" }
kono
parents:
diff changeset
5
kono
parents:
diff changeset
6 typedef __typeof__ (sizeof 0) size_t;
kono
parents:
diff changeset
7
kono
parents:
diff changeset
8 void* operator new (size_t, void *p) { return p; }
kono
parents:
diff changeset
9 void* operator new[] (size_t, void *p) { return p; }
kono
parents:
diff changeset
10
kono
parents:
diff changeset
11 struct Ax { char n, a []; };
kono
parents:
diff changeset
12 struct A0 { char n, a [0]; };
kono
parents:
diff changeset
13 struct A1 { char n, a [1]; };
kono
parents:
diff changeset
14 struct A2 { char n, a [2]; };
kono
parents:
diff changeset
15
kono
parents:
diff changeset
16 typedef __INT16_TYPE__ Int16;
kono
parents:
diff changeset
17 typedef __INT32_TYPE__ Int32;
kono
parents:
diff changeset
18
kono
parents:
diff changeset
19 void fAx (Ax *px, Ax &rx)
kono
parents:
diff changeset
20 {
kono
parents:
diff changeset
21 Ax ax;
kono
parents:
diff changeset
22
kono
parents:
diff changeset
23 new (ax.a) Int32; // { dg-warning "placement" }
kono
parents:
diff changeset
24 new (ax.a) Int32[1]; // { dg-warning "placement" }
kono
parents:
diff changeset
25
kono
parents:
diff changeset
26 new (px->a) Int32;
kono
parents:
diff changeset
27 new (px->a) Int32[1];
kono
parents:
diff changeset
28
kono
parents:
diff changeset
29 new (rx.a) Int32;
kono
parents:
diff changeset
30 new (rx.a) Int32[2];
kono
parents:
diff changeset
31 }
kono
parents:
diff changeset
32
kono
parents:
diff changeset
33 void fAx2 ()
kono
parents:
diff changeset
34 {
kono
parents:
diff changeset
35 // Initialization of non-static objects with flexible array members
kono
parents:
diff changeset
36 // isn't allowed in C and should perhaps be disallowed in C++ as
kono
parents:
diff changeset
37 // well to avoid c++/69696 - incorrect initialization of block-scope
kono
parents:
diff changeset
38 // flexible array members.
kono
parents:
diff changeset
39 Ax ax2 = { 1, { 2, 3 } };
kono
parents:
diff changeset
40
kono
parents:
diff changeset
41 new (ax2.a) Int16;
kono
parents:
diff changeset
42 new (ax2.a) Int16[1];
kono
parents:
diff changeset
43 new (ax2.a) Int16[2]; // { dg-warning "placement" }
kono
parents:
diff changeset
44 new (ax2.a) Int32; // { dg-warning "placement" }
kono
parents:
diff changeset
45 new (ax2.a) Int32[2]; // { dg-warning "placement" }
kono
parents:
diff changeset
46 }
kono
parents:
diff changeset
47
kono
parents:
diff changeset
48 void fAx3 ()
kono
parents:
diff changeset
49 {
kono
parents:
diff changeset
50 static Ax ax3 = { 1, { 2, 3, 4 } };
kono
parents:
diff changeset
51
kono
parents:
diff changeset
52 new (ax3.a) Int16;
kono
parents:
diff changeset
53 new (ax3.a) Int16[1];
kono
parents:
diff changeset
54 new (ax3.a) Int16[2]; // { dg-warning "placement" }
kono
parents:
diff changeset
55 new (ax3.a) Int32; // { dg-warning "placement" }
kono
parents:
diff changeset
56 new (ax3.a) Int32[1]; // { dg-warning "placement" }
kono
parents:
diff changeset
57 }
kono
parents:
diff changeset
58
kono
parents:
diff changeset
59 static Ax ax4 = { 1, { 2, 3, 4, 5 } };
kono
parents:
diff changeset
60
kono
parents:
diff changeset
61 void fAx4 ()
kono
parents:
diff changeset
62 {
kono
parents:
diff changeset
63 new (ax4.a) Int16;
kono
parents:
diff changeset
64 new (ax4.a) Int16[1];
kono
parents:
diff changeset
65 new (ax4.a) Int16[2];
kono
parents:
diff changeset
66 new (ax4.a) Int32;
kono
parents:
diff changeset
67 new (ax4.a) Int32[1];
kono
parents:
diff changeset
68 new (ax4.a) Int32[2]; // { dg-warning "placement" }
kono
parents:
diff changeset
69 }
kono
parents:
diff changeset
70
kono
parents:
diff changeset
71 void fA0 (A0 *p0, A0 &r0)
kono
parents:
diff changeset
72 {
kono
parents:
diff changeset
73 A0 a0;
kono
parents:
diff changeset
74
kono
parents:
diff changeset
75 new (a0.a) Int32; // { dg-warning "placement" }
kono
parents:
diff changeset
76 new (a0.a) Int32[1]; // { dg-warning "placement" }
kono
parents:
diff changeset
77
kono
parents:
diff changeset
78 new (p0->a) Int32;
kono
parents:
diff changeset
79 new (p0->a) Int32[1];
kono
parents:
diff changeset
80 new (p0->a) Int32[2];
kono
parents:
diff changeset
81
kono
parents:
diff changeset
82 new (r0.a) Int32;
kono
parents:
diff changeset
83 new (r0.a) Int32[1];
kono
parents:
diff changeset
84 new (r0.a) Int32[2];
kono
parents:
diff changeset
85 }
kono
parents:
diff changeset
86
kono
parents:
diff changeset
87 void fA1 (A1 *p1, A1 &r1)
kono
parents:
diff changeset
88 {
kono
parents:
diff changeset
89 A1 a1;
kono
parents:
diff changeset
90
kono
parents:
diff changeset
91 new (a1.a) Int32; // { dg-warning "placement" }
kono
parents:
diff changeset
92 new (a1.a) Int32[1]; // { dg-warning "placement" }
kono
parents:
diff changeset
93
kono
parents:
diff changeset
94 new (p1->a) Int32; // { dg-warning "placement" }
kono
parents:
diff changeset
95 new (p1->a) Int32[1]; // { dg-warning "placement" }
kono
parents:
diff changeset
96 new (p1->a) Int32[2]; // { dg-warning "placement" }
kono
parents:
diff changeset
97
kono
parents:
diff changeset
98 new (r1.a) Int32; // { dg-warning "placement" }
kono
parents:
diff changeset
99 new (r1.a) Int32[1]; // { dg-warning "placement" }
kono
parents:
diff changeset
100 new (r1.a) Int32[2]; // { dg-warning "placement" }
kono
parents:
diff changeset
101 }
kono
parents:
diff changeset
102
kono
parents:
diff changeset
103 void fA2 (A2 *p2, A2 &r2)
kono
parents:
diff changeset
104 {
kono
parents:
diff changeset
105 A2 a2;
kono
parents:
diff changeset
106 new (a2.a) Int32; // { dg-warning "placement" }
kono
parents:
diff changeset
107 new (a2.a) Int32[1]; // { dg-warning "placement" }
kono
parents:
diff changeset
108 new (a2.a) Int32[2]; // { dg-warning "placement" }
kono
parents:
diff changeset
109
kono
parents:
diff changeset
110 new (p2->a) Int32; // { dg-warning "placement" }
kono
parents:
diff changeset
111 new (p2->a) Int32[1]; // { dg-warning "placement" }
kono
parents:
diff changeset
112 new (p2->a) Int32[2]; // { dg-warning "placement" }
kono
parents:
diff changeset
113
kono
parents:
diff changeset
114 new (r2.a) Int32; // { dg-warning "placement" }
kono
parents:
diff changeset
115 new (r2.a) Int32[1]; // { dg-warning "placement" }
kono
parents:
diff changeset
116 new (r2.a) Int32[2]; // { dg-warning "placement" }
kono
parents:
diff changeset
117 }
kono
parents:
diff changeset
118
kono
parents:
diff changeset
119 struct BAx { int i; Ax ax; };
kono
parents:
diff changeset
120 struct BA0 { int i; A0 a0; };
kono
parents:
diff changeset
121 struct BA1 { int i; A1 a1; };
kono
parents:
diff changeset
122 struct BA2 { int i; A2 a2; };
kono
parents:
diff changeset
123
kono
parents:
diff changeset
124 void fBx (BAx *pbx, BAx &rbx)
kono
parents:
diff changeset
125 {
kono
parents:
diff changeset
126 BAx bax;
kono
parents:
diff changeset
127 new (bax.ax.a) char; // { dg-warning "placement" }
kono
parents:
diff changeset
128 new (bax.ax.a) Int16; // { dg-warning "placement" }
kono
parents:
diff changeset
129 new (bax.ax.a) Int32; // { dg-warning "placement" }
kono
parents:
diff changeset
130
kono
parents:
diff changeset
131 new (pbx->ax.a) char;
kono
parents:
diff changeset
132 new (rbx.ax.a) char;
kono
parents:
diff changeset
133 new (pbx->ax.a) Int16;
kono
parents:
diff changeset
134 new (rbx.ax.a) Int16;
kono
parents:
diff changeset
135 new (pbx->ax.a) Int32;
kono
parents:
diff changeset
136 new (rbx.ax.a) Int32;
kono
parents:
diff changeset
137 new (pbx->ax.a) int[1234];
kono
parents:
diff changeset
138 new (rbx.ax.a) int[5678];
kono
parents:
diff changeset
139 }
kono
parents:
diff changeset
140
kono
parents:
diff changeset
141 void fBx1 ()
kono
parents:
diff changeset
142 {
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
143 BAx bax1 = { 1, /* Ax = */ { 2, /* a[] = */ {} } };
111
kono
parents:
diff changeset
144
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
145 new (bax1.ax.a) char; // { dg-warning "placement" }
111
kono
parents:
diff changeset
146 new (bax1.ax.a) char[2]; // { dg-warning "placement" }
kono
parents:
diff changeset
147 new (bax1.ax.a) Int16; // { dg-warning "placement" }
kono
parents:
diff changeset
148 new (bax1.ax.a) Int32; // { dg-warning "placement" }
kono
parents:
diff changeset
149 }
kono
parents:
diff changeset
150
kono
parents:
diff changeset
151 void fB0 (BA0 *pb0, BA0 &rb0)
kono
parents:
diff changeset
152 {
kono
parents:
diff changeset
153 BA0 ba0;
kono
parents:
diff changeset
154 new (ba0.a0.a) Int32; // { dg-warning "placement" }
kono
parents:
diff changeset
155 new (pb0->a0.a) Int32;
kono
parents:
diff changeset
156 new (rb0.a0.a) Int32;
kono
parents:
diff changeset
157 }
kono
parents:
diff changeset
158
kono
parents:
diff changeset
159 void fB1 (BA1 *pb1, BA1 &rb1)
kono
parents:
diff changeset
160 {
kono
parents:
diff changeset
161 BA1 ba1;
kono
parents:
diff changeset
162 new (ba1.a1.a) Int32; // { dg-warning "placement" }
kono
parents:
diff changeset
163 new (pb1->a1.a) Int32; // { dg-warning "placement" }
kono
parents:
diff changeset
164 new (rb1.a1.a) Int32; // { dg-warning "placement" }
kono
parents:
diff changeset
165 }
kono
parents:
diff changeset
166
kono
parents:
diff changeset
167 void fB2 (BA2 *pb2, BA2 &rb2)
kono
parents:
diff changeset
168 {
kono
parents:
diff changeset
169 BA2 ba2;
kono
parents:
diff changeset
170 new (ba2.a2.a) Int32; // { dg-warning "placement" }
kono
parents:
diff changeset
171 new (pb2->a2.a) Int32; // { dg-warning "placement" }
kono
parents:
diff changeset
172 new (rb2.a2.a) Int32; // { dg-warning "placement" }
kono
parents:
diff changeset
173 }