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

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
1 // PR c++/83058 - ICE on C++ code with negative array index: in
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
2 // warn_placement_new_too_small
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
3 // { dg-do compile }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
4 // { dg-additional-options "-Wplacement-new -Wno-pedantic" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
5 // { dg-require-effective-target alloca }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
6
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
7 #define SIZE_MAX __SIZE_MAX__
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
8 #define DIFF_MAX __PTRDIFF_MAX__
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
9 #define DIFF_MIN (-DIFF_MAX - 1)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
10
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
11 void* operator new (__SIZE_TYPE__ n, void *p) { return p; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
12 void* operator new[] (__SIZE_TYPE__ n, void *p) { return p; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
13
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
14 struct A { };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
15
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
16 char carr[2];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
17 int iarr[2];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
18
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
19 struct C0 { char i, carr[0]; };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
20 struct I0 { int i, iarr[0]; };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
21 struct CX { char i, carr[]; };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
22 struct IX { int i, iarr[]; };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
23
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
24 void test_single (C0 *pc, CX *qc, I0 *pi, IX *qi, int n)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
25 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
26 new (&carr[DIFF_MIN]) A (); // { dg-warning "placement new constructing an object of type .A. and size .1. in a region of type .char \\\[2]. and size .0." }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
27 new (&carr[-1]) A; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
28 new (carr -1 ) A; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
29 new (&carr[0]) A;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
30 new (carr) A;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
31 new (&carr[1]) A;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
32 new (carr + 1) A;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
33 new (&carr[n]) A;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
34 new (carr + n) A;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
35 new (&carr[DIFF_MAX]) A; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
36 new (carr + DIFF_MAX) A; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
37 new (&carr[SIZE_MAX]) A; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
38 new (carr + SIZE_MAX) A; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
39
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
40 new (&pc->carr[DIFF_MIN]) A; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
41 new (&pc->carr[-1]) A; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
42 new (&pc->carr[0]) A;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
43 new (&pc->carr[9]) A;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
44 new (&pc->carr[n]) A;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
45 new (&pc->carr[DIFF_MAX]) A; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
46 new (&pc->carr[SIZE_MAX]) A; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
47
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
48 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
49 /* The highest index at which a single A can be constructed. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
50 enum { MAX = DIFF_MAX - sizeof *pc - sizeof (A) };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
51 new (&pc->carr[MAX]) A;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
52 new (&pc->carr[MAX + 1]) A; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
53 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
54
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
55 new (&qc->carr[DIFF_MIN]) A; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
56 new (&qc->carr[-1]) A; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
57 new (&qc->carr[0]) A;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
58 new (&qc->carr[9]) A;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
59 new (&qc->carr[n]) A;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
60 new (&qc->carr[DIFF_MAX]) A; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
61 new (&qc->carr[SIZE_MAX]) A; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
62
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
63 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
64 /* The highest index at which a single A can be constructed. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
65 enum { MAX = DIFF_MAX - sizeof *qc - sizeof (A) };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
66 new (&qc->carr[MAX]) A;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
67 new (&qc->carr[MAX + 1]) A; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
68 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
69
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
70 new (&pi->iarr[DIFF_MIN]) A; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
71 new (&pi->iarr[-1]) A; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
72 new (&pi->iarr[0]) A;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
73 new (&pi->iarr[9]) A;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
74 new (&pi->iarr[n]) A;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
75 new (&pi->iarr[DIFF_MAX]) A; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
76 new (&pi->iarr[SIZE_MAX]) A; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
77
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
78 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
79 enum { MAX = (DIFF_MAX - sizeof *pi) / sizeof *pi->iarr };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
80 new (&pi->iarr[MAX]) A;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
81 new (&pi->iarr[MAX + 1]) A; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
82 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
83
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
84 new (&qi->iarr[DIFF_MIN]) A; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
85 new (&qi->iarr[-1]) A; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
86 new (&qi->iarr[0]) A;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
87 new (&qi->iarr[9]) A;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
88 new (&qi->iarr[n]) A;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
89 new (&qi->iarr[DIFF_MAX]) A; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
90 new (&qi->iarr[SIZE_MAX]) A; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
91
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
92 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
93 enum { MAX = (DIFF_MAX - sizeof *qi) / sizeof *qi->iarr };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
94 new (&qi->iarr[MAX]) A;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
95 new (&qi->iarr[MAX + 1]) A; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
96 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
97
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
98 new (&iarr[DIFF_MIN]) A; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
99 new (&iarr[-1]) A; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
100 new (&iarr[1]) A;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
101 new (&iarr[n]) A;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
102 new (&iarr[DIFF_MAX]) A; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
103 new (&iarr[SIZE_MAX]) A; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
104 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
105
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
106 void test_array_1 (C0 *pc, CX *qc, I0 *pi, IX *qi)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
107 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
108 enum { N = 1 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
109
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
110 new (&carr[DIFF_MIN]) A[N]; // { dg-warning "placement new constructing an object of type .A \\\[\[0-9\]+]. and size .\[0-9\]+. in a region of type .char \\\[2]. and size .0." }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
111 new (&carr[-1]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
112 new (&carr[DIFF_MAX]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
113 new (&carr[SIZE_MAX]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
114
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
115 new (&pc->carr[DIFF_MIN]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
116 new (&pc->carr[-1]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
117 new (&pc->carr[DIFF_MAX]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
118 new (&pc->carr[SIZE_MAX]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
119
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
120 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
121 enum { MAX = DIFF_MAX - sizeof *pc - sizeof (A[N]) };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
122 new (&pc->carr[MAX]) A[N];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
123 new (&pc->carr[MAX + 1]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
124 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
125
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
126 new (&qc->carr[DIFF_MIN]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
127 new (&qc->carr[-1]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
128 new (&qc->carr[DIFF_MAX]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
129 new (&qc->carr[SIZE_MAX]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
130
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
131 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
132 enum { MAX = DIFF_MAX - sizeof *qc - sizeof (A[N]) };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
133 new (&qc->carr[MAX]) A[N];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
134 new (&qc->carr[MAX + 1]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
135 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
136
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
137 new (&pi->iarr[DIFF_MIN]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
138 new (&pi->iarr[-1]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
139 new (&pi->iarr[DIFF_MAX]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
140 new (&pi->iarr[SIZE_MAX]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
141
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
142 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
143 enum { MAX = (DIFF_MAX - sizeof *pi) / sizeof *pi->iarr };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
144 new (&pi->iarr[MAX]) A[N];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
145 new (&pi->iarr[MAX + 1]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
146 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
147
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
148 new (&qi->iarr[DIFF_MIN]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
149 new (&qi->iarr[-1]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
150 new (&qi->iarr[DIFF_MAX]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
151 new (&qi->iarr[SIZE_MAX]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
152
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
153 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
154 enum { MAX = (DIFF_MAX - sizeof *qi) / sizeof *qi->iarr };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
155 new (&qi->iarr[MAX]) A[N];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
156 new (&qi->iarr[MAX + 1]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
157 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
158
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
159 new (&iarr[DIFF_MIN]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
160 new (&iarr[-1]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
161 new (&iarr[DIFF_MAX]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
162 new (&iarr[SIZE_MAX]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
163 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
164
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
165
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
166 void test_array_3 (C0 *pc, CX *qc, I0 *pi, IX *qi)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
167 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
168 enum { N = 3 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
169
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
170 new (&carr[DIFF_MIN]) A[N]; // { dg-warning "placement new constructing an object of type .A \\\[\[0-9\]+]. and size .\[0-9\]+. in a region of type .char \\\[2]. and size .0." }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
171 new (&carr[-1]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
172 new (&carr[DIFF_MAX]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
173 new (&carr[SIZE_MAX]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
174
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
175 new (&pc->carr[DIFF_MIN]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
176 new (&pc->carr[-1]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
177 new (&pc->carr[DIFF_MAX]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
178 new (&pc->carr[SIZE_MAX]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
179
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
180 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
181 enum { MAX = DIFF_MAX - sizeof *pc - sizeof (A[N]) };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
182 new (&pc->carr[MAX]) A[N];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
183 new (&pc->carr[MAX + 1]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
184 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
185
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
186 new (&qc->carr[DIFF_MIN]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
187 new (&qc->carr[-1]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
188 new (&qc->carr[DIFF_MAX]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
189 new (&qc->carr[SIZE_MAX]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
190
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
191 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
192 enum { MAX = DIFF_MAX - sizeof *qc - sizeof (A[N]) };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
193 new (&qc->carr[MAX]) A[N];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
194 new (&qc->carr[MAX + 1]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
195 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
196
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
197 new (&pi->iarr[DIFF_MIN]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
198 new (&pi->iarr[-1]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
199 new (&pi->iarr[DIFF_MAX]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
200 new (&pi->iarr[SIZE_MAX]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
201
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
202 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
203 enum { MAX = (DIFF_MAX - sizeof *pi) / sizeof *pi->iarr };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
204 new (&pi->iarr[MAX]) A[N];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
205 new (&pi->iarr[MAX + 1]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
206 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
207
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
208 new (&qi->iarr[DIFF_MIN]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
209 new (&qi->iarr[-1]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
210 new (&qi->iarr[DIFF_MAX]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
211 new (&qi->iarr[SIZE_MAX]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
212
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
213 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
214 enum { MAX = (DIFF_MAX - sizeof *qi) / sizeof *qi->iarr };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
215 new (&qi->iarr[MAX]) A[N];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
216 new (&qi->iarr[MAX + 1]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
217 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
218
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
219 new (&iarr[DIFF_MIN]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
220 new (&iarr[-1]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
221 new (&iarr[DIFF_MAX]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
222 new (&iarr[SIZE_MAX]) A[N]; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
223 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
224
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
225
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
226 void test_vla (unsigned n)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
227 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
228 char cvla[n];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
229
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
230 new (&cvla[DIFF_MIN]) A; // { dg-warning "placement new constructing an object of type .A. and size .1. in a region of type .char \\\[n]. and size .0." }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
231 new (&cvla[-1]) A; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
232 new (cvla -1) A; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
233 new (&cvla[0]) A;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
234 new (&cvla[9]) A;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
235 new (&cvla[n - 1]) A;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
236 new (cvla + n - 1) A;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
237 new (&cvla[DIFF_MAX - 1]) A;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
238 new (&cvla[DIFF_MAX]) A; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
239 new (cvla + DIFF_MAX) A; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
240 new (&cvla[SIZE_MAX]) A; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
241 new (cvla + SIZE_MAX) A; // { dg-warning "\\\[-Wplacement-new" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
242 }