]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/cp/init.c
routine-1.c: New.
[thirdparty/gcc.git] / gcc / cp / init.c
CommitLineData
8d08fdba 1/* Handle initialization things in C++.
5624e564 2 Copyright (C) 1987-2015 Free Software Foundation, Inc.
8d08fdba
MS
3 Contributed by Michael Tiemann (tiemann@cygnus.com)
4
f5adbb8d 5This file is part of GCC.
8d08fdba 6
f5adbb8d 7GCC is free software; you can redistribute it and/or modify
8d08fdba 8it under the terms of the GNU General Public License as published by
e77f031d 9the Free Software Foundation; either version 3, or (at your option)
8d08fdba
MS
10any later version.
11
f5adbb8d 12GCC is distributed in the hope that it will be useful,
8d08fdba
MS
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
e77f031d
NC
18along with GCC; see the file COPYING3. If not see
19<http://www.gnu.org/licenses/>. */
8d08fdba 20
e92cc029 21/* High-level class interface. */
8d08fdba
MS
22
23#include "config.h"
8d052bc7 24#include "system.h"
4977bab6 25#include "coretypes.h"
2adfab87 26#include "target.h"
8d08fdba 27#include "tree.h"
2adfab87 28#include "cp-tree.h"
d8a2d370 29#include "stringpool.h"
2adfab87 30#include "alias.h"
d8a2d370 31#include "varasm.h"
8d08fdba 32#include "flags.h"
45b0be94 33#include "gimplify.h"
46621807 34#include "c-family/c-ubsan.h"
8d08fdba 35
2a3398e1
NS
36static bool begin_init_stmts (tree *, tree *);
37static tree finish_init_stmts (bool, tree, tree);
2282d28d 38static void construct_virtual_base (tree, tree);
5ade1ed2
DG
39static void expand_aggr_init_1 (tree, tree, tree, tree, int, tsubst_flags_t);
40static void expand_default_init (tree, tree, tree, tree, int, tsubst_flags_t);
2282d28d 41static void perform_member_init (tree, tree);
362efdc1
NN
42static int member_init_ok_or_else (tree, tree, tree);
43static void expand_virtual_init (tree, tree);
2282d28d 44static tree sort_mem_initializers (tree, tree);
362efdc1
NN
45static tree initializing_context (tree);
46static void expand_cleanup_for_base (tree, tree);
362efdc1 47static tree dfs_initialize_vtbl_ptrs (tree, void *);
362efdc1 48static tree build_field_list (tree, tree, int *);
40bb78ad 49static int diagnose_uninitialized_cst_or_ref_member_1 (tree, tree, bool, bool);
8d08fdba 50
3dbc07b6
MM
51/* We are about to generate some complex initialization code.
52 Conceptually, it is all a single expression. However, we may want
53 to include conditionals, loops, and other such statement-level
54 constructs. Therefore, we build the initialization code inside a
55 statement-expression. This function starts such an expression.
56 STMT_EXPR_P and COMPOUND_STMT_P are filled in by this function;
57 pass them back to finish_init_stmts when the expression is
58 complete. */
59
2a3398e1 60static bool
362efdc1 61begin_init_stmts (tree *stmt_expr_p, tree *compound_stmt_p)
3dbc07b6 62{
38e01f9e 63 bool is_global = !building_stmt_list_p ();
c8094d83 64
2a3398e1 65 *stmt_expr_p = begin_stmt_expr ();
325c3691 66 *compound_stmt_p = begin_compound_stmt (BCS_NO_SCOPE);
2a3398e1
NS
67
68 return is_global;
3dbc07b6
MM
69}
70
71/* Finish out the statement-expression begun by the previous call to
72 begin_init_stmts. Returns the statement-expression itself. */
73
2a3398e1
NS
74static tree
75finish_init_stmts (bool is_global, tree stmt_expr, tree compound_stmt)
c8094d83 76{
7a3397c7 77 finish_compound_stmt (compound_stmt);
c8094d83 78
303b7406 79 stmt_expr = finish_stmt_expr (stmt_expr, true);
3dbc07b6 80
38e01f9e 81 gcc_assert (!building_stmt_list_p () == is_global);
c8094d83 82
3dbc07b6
MM
83 return stmt_expr;
84}
85
86/* Constructors */
87
338d90b8
NS
88/* Called from initialize_vtbl_ptrs via dfs_walk. BINFO is the base
89 which we want to initialize the vtable pointer for, DATA is
90 TREE_LIST whose TREE_VALUE is the this ptr expression. */
7177d104 91
d569399b 92static tree
362efdc1 93dfs_initialize_vtbl_ptrs (tree binfo, void *data)
d569399b 94{
5d5a519f
NS
95 if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
96 return dfs_skip_bases;
c8094d83 97
5d5a519f 98 if (!BINFO_PRIMARY_P (binfo) || BINFO_VIRTUAL_P (binfo))
d569399b
MM
99 {
100 tree base_ptr = TREE_VALUE ((tree) data);
7177d104 101
a271590a
PC
102 base_ptr = build_base_path (PLUS_EXPR, base_ptr, binfo, /*nonnull=*/1,
103 tf_warning_or_error);
d569399b
MM
104
105 expand_virtual_init (binfo, base_ptr);
106 }
7177d104 107
d569399b
MM
108 return NULL_TREE;
109}
110
cf2e003b
MM
111/* Initialize all the vtable pointers in the object pointed to by
112 ADDR. */
e92cc029 113
8d08fdba 114void
362efdc1 115initialize_vtbl_ptrs (tree addr)
8d08fdba 116{
cf2e003b
MM
117 tree list;
118 tree type;
119
120 type = TREE_TYPE (TREE_TYPE (addr));
121 list = build_tree_list (type, addr);
d569399b 122
bbd15aac 123 /* Walk through the hierarchy, initializing the vptr in each base
1f5a253a 124 class. We do these in pre-order because we can't find the virtual
3461fba7
NS
125 bases for a class until we've initialized the vtbl for that
126 class. */
5d5a519f 127 dfs_walk_once (TYPE_BINFO (type), dfs_initialize_vtbl_ptrs, NULL, list);
8d08fdba 128}
d569399b 129
17bbb839
MM
130/* Return an expression for the zero-initialization of an object with
131 type T. This expression will either be a constant (in the case
132 that T is a scalar), or a CONSTRUCTOR (in the case that T is an
b43d1bde
PC
133 aggregate), or NULL (in the case that T does not require
134 initialization). In either case, the value can be used as
135 DECL_INITIAL for a decl of the indicated TYPE; it is a valid static
136 initializer. If NELTS is non-NULL, and TYPE is an ARRAY_TYPE, NELTS
137 is the number of elements in the array. If STATIC_STORAGE_P is
138 TRUE, initializers are only generated for entities for which
1cb8292f 139 zero-initialization does not simply mean filling the storage with
e33eba75
JJ
140 zero bytes. FIELD_SIZE, if non-NULL, is the bit size of the field,
141 subfields with bit positions at or above that bit size shouldn't
a8c1d899
JM
142 be added. Note that this only works when the result is assigned
143 to a base COMPONENT_REF; if we only have a pointer to the base subobject,
144 expand_assignment will end up clearing the full size of TYPE. */
94e6e4c4 145
e33eba75
JJ
146static tree
147build_zero_init_1 (tree type, tree nelts, bool static_storage_p,
148 tree field_size)
94e6e4c4 149{
17bbb839
MM
150 tree init = NULL_TREE;
151
152 /* [dcl.init]
153
0fcedd9c 154 To zero-initialize an object of type T means:
17bbb839
MM
155
156 -- if T is a scalar type, the storage is set to the value of zero
0cbd7506 157 converted to T.
17bbb839
MM
158
159 -- if T is a non-union class type, the storage for each nonstatic
0cbd7506 160 data member and each base-class subobject is zero-initialized.
17bbb839
MM
161
162 -- if T is a union type, the storage for its first data member is
0cbd7506 163 zero-initialized.
17bbb839
MM
164
165 -- if T is an array type, the storage for each element is
0cbd7506 166 zero-initialized.
17bbb839
MM
167
168 -- if T is a reference type, no initialization is performed. */
94e6e4c4 169
50bc768d 170 gcc_assert (nelts == NULL_TREE || TREE_CODE (nelts) == INTEGER_CST);
7a1d37e9 171
17bbb839
MM
172 if (type == error_mark_node)
173 ;
174 else if (static_storage_p && zero_init_p (type))
175 /* In order to save space, we do not explicitly build initializers
176 for items that do not need them. GCC's semantics are that
177 items with static storage duration that are not otherwise
178 initialized are initialized to zero. */
179 ;
66b1156a 180 else if (TYPE_PTR_OR_PTRMEM_P (type))
89401152 181 init = convert (type, nullptr_node);
b8063b29 182 else if (SCALAR_TYPE_P (type))
908e152c 183 init = convert (type, integer_zero_node);
5621a5d7 184 else if (RECORD_OR_UNION_CODE_P (TREE_CODE (type)))
17bbb839
MM
185 {
186 tree field;
9771b263 187 vec<constructor_elt, va_gc> *v = NULL;
17bbb839 188
17bbb839 189 /* Iterate over the fields, building initializations. */
910ad8de 190 for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
17bbb839
MM
191 {
192 if (TREE_CODE (field) != FIELD_DECL)
193 continue;
194
7614d42c
JJ
195 if (TREE_TYPE (field) == error_mark_node)
196 continue;
197
e33eba75
JJ
198 /* Don't add virtual bases for base classes if they are beyond
199 the size of the current field, that means it is present
200 somewhere else in the object. */
201 if (field_size)
202 {
203 tree bitpos = bit_position (field);
204 if (TREE_CODE (bitpos) == INTEGER_CST
205 && !tree_int_cst_lt (bitpos, field_size))
206 continue;
207 }
208
17bbb839
MM
209 /* Note that for class types there will be FIELD_DECLs
210 corresponding to base classes as well. Thus, iterating
211 over TYPE_FIELDs will result in correct initialization of
212 all of the subobjects. */
32a11c08 213 if (!static_storage_p || !zero_init_p (TREE_TYPE (field)))
4038c495 214 {
e33eba75
JJ
215 tree new_field_size
216 = (DECL_FIELD_IS_BASE (field)
217 && DECL_SIZE (field)
218 && TREE_CODE (DECL_SIZE (field)) == INTEGER_CST)
219 ? DECL_SIZE (field) : NULL_TREE;
220 tree value = build_zero_init_1 (TREE_TYPE (field),
221 /*nelts=*/NULL_TREE,
222 static_storage_p,
223 new_field_size);
b43d1bde
PC
224 if (value)
225 CONSTRUCTOR_APPEND_ELT(v, field, value);
4038c495 226 }
17bbb839
MM
227
228 /* For unions, only the first field is initialized. */
229 if (TREE_CODE (type) == UNION_TYPE)
230 break;
231 }
4038c495 232
0fcedd9c
JM
233 /* Build a constructor to contain the initializations. */
234 init = build_constructor (type, v);
17bbb839
MM
235 }
236 else if (TREE_CODE (type) == ARRAY_TYPE)
94e6e4c4 237 {
17bbb839 238 tree max_index;
9771b263 239 vec<constructor_elt, va_gc> *v = NULL;
17bbb839 240
17bbb839 241 /* Iterate over the array elements, building initializations. */
6b6c8106 242 if (nelts)
db3927fb
AH
243 max_index = fold_build2_loc (input_location,
244 MINUS_EXPR, TREE_TYPE (nelts),
7866705a 245 nelts, integer_one_node);
6b6c8106
SB
246 else
247 max_index = array_type_nelts (type);
9bdb04a2
AP
248
249 /* If we have an error_mark here, we should just return error mark
250 as we don't know the size of the array yet. */
251 if (max_index == error_mark_node)
252 return error_mark_node;
50bc768d 253 gcc_assert (TREE_CODE (max_index) == INTEGER_CST);
7a1d37e9 254
a8e6c82a
MM
255 /* A zero-sized array, which is accepted as an extension, will
256 have an upper bound of -1. */
257 if (!tree_int_cst_equal (max_index, integer_minus_one_node))
94763647 258 {
f32682ca 259 constructor_elt ce;
4038c495 260
b01f0d13
AP
261 /* If this is a one element array, we just use a regular init. */
262 if (tree_int_cst_equal (size_zero_node, max_index))
f32682ca 263 ce.index = size_zero_node;
b01f0d13 264 else
f32682ca 265 ce.index = build2 (RANGE_EXPR, sizetype, size_zero_node,
4038c495 266 max_index);
c8094d83 267
f32682ca 268 ce.value = build_zero_init_1 (TREE_TYPE (type),
e33eba75
JJ
269 /*nelts=*/NULL_TREE,
270 static_storage_p, NULL_TREE);
f11c7048
JJ
271 if (ce.value)
272 {
273 vec_alloc (v, 1);
274 v->quick_push (ce);
275 }
94763647 276 }
c8094d83 277
4038c495
GB
278 /* Build a constructor to contain the initializations. */
279 init = build_constructor (type, v);
94e6e4c4 280 }
b55b02ea 281 else if (VECTOR_TYPE_P (type))
e8160c9a 282 init = build_zero_cst (type);
94e6e4c4 283 else
8dc2b103 284 gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
94e6e4c4 285
17bbb839
MM
286 /* In all cases, the initializer is a constant. */
287 if (init)
51eed280 288 TREE_CONSTANT (init) = 1;
94e6e4c4
AO
289
290 return init;
291}
292
e33eba75
JJ
293/* Return an expression for the zero-initialization of an object with
294 type T. This expression will either be a constant (in the case
295 that T is a scalar), or a CONSTRUCTOR (in the case that T is an
296 aggregate), or NULL (in the case that T does not require
297 initialization). In either case, the value can be used as
298 DECL_INITIAL for a decl of the indicated TYPE; it is a valid static
299 initializer. If NELTS is non-NULL, and TYPE is an ARRAY_TYPE, NELTS
300 is the number of elements in the array. If STATIC_STORAGE_P is
301 TRUE, initializers are only generated for entities for which
302 zero-initialization does not simply mean filling the storage with
303 zero bytes. */
304
305tree
306build_zero_init (tree type, tree nelts, bool static_storage_p)
307{
308 return build_zero_init_1 (type, nelts, static_storage_p, NULL_TREE);
309}
310
0fcedd9c 311/* Return a suitable initializer for value-initializing an object of type
8f540f06 312 TYPE, as described in [dcl.init]. */
0fcedd9c 313
8f540f06 314tree
309714d4 315build_value_init (tree type, tsubst_flags_t complain)
0fcedd9c
JM
316{
317 /* [dcl.init]
318
319 To value-initialize an object of type T means:
320
eca7fc57
JM
321 - if T is a class type (clause 9) with either no default constructor
322 (12.1) or a default constructor that is user-provided or deleted,
026c3cfd 323 then the object is default-initialized;
0fcedd9c 324
eca7fc57
JM
325 - if T is a (possibly cv-qualified) class type without a user-provided
326 or deleted default constructor, then the object is zero-initialized
327 and the semantic constraints for default-initialization are checked,
328 and if T has a non-trivial default constructor, the object is
329 default-initialized;
0fcedd9c
JM
330
331 - if T is an array type, then each element is value-initialized;
332
333 - otherwise, the object is zero-initialized.
334
335 A program that calls for default-initialization or
eca7fc57 336 value-initialization of an entity of reference type is ill-formed. */
0fcedd9c 337
95d7bdaa 338 /* The AGGR_INIT_EXPR tweaking below breaks in templates. */
14b1860e
JJ
339 gcc_assert (!processing_template_decl
340 || (SCALAR_TYPE_P (type) || TREE_CODE (type) == ARRAY_TYPE));
95d7bdaa 341
60ff8e16
JM
342 if (CLASS_TYPE_P (type)
343 && type_build_ctor_call (type))
0fcedd9c 344 {
a710f1f8 345 tree ctor =
eca7fc57
JM
346 build_special_member_call (NULL_TREE, complete_ctor_identifier,
347 NULL, type, LOOKUP_NORMAL,
a710f1f8
JM
348 complain);
349 if (ctor == error_mark_node)
350 return ctor;
351 tree fn = NULL_TREE;
352 if (TREE_CODE (ctor) == CALL_EXPR)
353 fn = get_callee_fndecl (ctor);
354 ctor = build_aggr_init_expr (type, ctor);
355 if (fn && user_provided_p (fn))
eca7fc57 356 return ctor;
7b37a0c5 357 else if (TYPE_HAS_COMPLEX_DFLT (type))
8f540f06
JM
358 {
359 /* This is a class that needs constructing, but doesn't have
360 a user-provided constructor. So we need to zero-initialize
361 the object and then call the implicitly defined ctor.
450a927a 362 This will be handled in simplify_aggr_init_expr. */
eca7fc57 363 AGGR_INIT_ZERO_FIRST (ctor) = 1;
8f540f06
JM
364 return ctor;
365 }
fd97a96a 366 }
eca7fc57
JM
367
368 /* Discard any access checking during subobject initialization;
369 the checks are implied by the call to the ctor which we have
370 verified is OK (cpp0x/defaulted46.C). */
371 push_deferring_access_checks (dk_deferred);
372 tree r = build_value_init_noctor (type, complain);
373 pop_deferring_access_checks ();
374 return r;
fd97a96a
JM
375}
376
377/* Like build_value_init, but don't call the constructor for TYPE. Used
378 for base initializers. */
379
380tree
309714d4 381build_value_init_noctor (tree type, tsubst_flags_t complain)
fd97a96a 382{
46a76d4b
JM
383 if (!COMPLETE_TYPE_P (type))
384 {
385 if (complain & tf_error)
386 error ("value-initialization of incomplete type %qT", type);
387 return error_mark_node;
388 }
4ddd8a74
JM
389 /* FIXME the class and array cases should just use digest_init once it is
390 SFINAE-enabled. */
fd97a96a
JM
391 if (CLASS_TYPE_P (type))
392 {
12185846
PC
393 gcc_assert (!TYPE_HAS_COMPLEX_DFLT (type)
394 || errorcount != 0);
fd97a96a
JM
395
396 if (TREE_CODE (type) != UNION_TYPE)
0fcedd9c 397 {
8f540f06 398 tree field;
9771b263 399 vec<constructor_elt, va_gc> *v = NULL;
0fcedd9c
JM
400
401 /* Iterate over the fields, building initializations. */
910ad8de 402 for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
0fcedd9c
JM
403 {
404 tree ftype, value;
405
406 if (TREE_CODE (field) != FIELD_DECL)
407 continue;
408
409 ftype = TREE_TYPE (field);
410
a95aef3c
PC
411 if (ftype == error_mark_node)
412 continue;
413
0fcedd9c
JM
414 /* We could skip vfields and fields of types with
415 user-defined constructors, but I think that won't improve
416 performance at all; it should be simpler in general just
417 to zero out the entire object than try to only zero the
418 bits that actually need it. */
419
420 /* Note that for class types there will be FIELD_DECLs
421 corresponding to base classes as well. Thus, iterating
422 over TYPE_FIELDs will result in correct initialization of
423 all of the subobjects. */
309714d4 424 value = build_value_init (ftype, complain);
c0014b07 425 value = maybe_constant_init (value);
0fcedd9c 426
351ccf20
JM
427 if (value == error_mark_node)
428 return error_mark_node;
429
c0014b07
JM
430 CONSTRUCTOR_APPEND_ELT(v, field, value);
431
432 /* We shouldn't have gotten here for anything that would need
433 non-trivial initialization, and gimplify_init_ctor_preeval
434 would need to be fixed to allow it. */
435 gcc_assert (TREE_CODE (value) != TARGET_EXPR
436 && TREE_CODE (value) != AGGR_INIT_EXPR);
0fcedd9c
JM
437 }
438
439 /* Build a constructor to contain the zero- initializations. */
8f540f06 440 return build_constructor (type, v);
0fcedd9c
JM
441 }
442 }
443 else if (TREE_CODE (type) == ARRAY_TYPE)
444 {
9771b263 445 vec<constructor_elt, va_gc> *v = NULL;
0fcedd9c
JM
446
447 /* Iterate over the array elements, building initializations. */
448 tree max_index = array_type_nelts (type);
449
450 /* If we have an error_mark here, we should just return error mark
451 as we don't know the size of the array yet. */
452 if (max_index == error_mark_node)
462aa169 453 {
e2a009c7
JM
454 if (complain & tf_error)
455 error ("cannot value-initialize array of unknown bound %qT",
456 type);
462aa169
JM
457 return error_mark_node;
458 }
0fcedd9c
JM
459 gcc_assert (TREE_CODE (max_index) == INTEGER_CST);
460
461 /* A zero-sized array, which is accepted as an extension, will
462 have an upper bound of -1. */
463 if (!tree_int_cst_equal (max_index, integer_minus_one_node))
464 {
f32682ca 465 constructor_elt ce;
0fcedd9c 466
0fcedd9c
JM
467 /* If this is a one element array, we just use a regular init. */
468 if (tree_int_cst_equal (size_zero_node, max_index))
f32682ca 469 ce.index = size_zero_node;
0fcedd9c 470 else
f32682ca 471 ce.index = build2 (RANGE_EXPR, sizetype, size_zero_node, max_index);
0fcedd9c 472
f32682ca 473 ce.value = build_value_init (TREE_TYPE (type), complain);
c0014b07
JM
474 ce.value = maybe_constant_init (ce.value);
475 if (ce.value == error_mark_node)
476 return error_mark_node;
9dbd4406 477
c0014b07
JM
478 vec_alloc (v, 1);
479 v->quick_push (ce);
351ccf20 480
c0014b07
JM
481 /* We shouldn't have gotten here for anything that would need
482 non-trivial initialization, and gimplify_init_ctor_preeval
483 would need to be fixed to allow it. */
484 gcc_assert (TREE_CODE (ce.value) != TARGET_EXPR
485 && TREE_CODE (ce.value) != AGGR_INIT_EXPR);
0fcedd9c
JM
486 }
487
488 /* Build a constructor to contain the initializations. */
489 return build_constructor (type, v);
490 }
2b8497cd
JM
491 else if (TREE_CODE (type) == FUNCTION_TYPE)
492 {
493 if (complain & tf_error)
494 error ("value-initialization of function type %qT", type);
495 return error_mark_node;
496 }
351ccf20
JM
497 else if (TREE_CODE (type) == REFERENCE_TYPE)
498 {
499 if (complain & tf_error)
500 error ("value-initialization of reference type %qT", type);
501 return error_mark_node;
502 }
0fcedd9c
JM
503
504 return build_zero_init (type, NULL_TREE, /*static_storage_p=*/false);
505}
506
238e471c
VV
507/* Initialize current class with INIT, a TREE_LIST of
508 arguments for a target constructor. If TREE_LIST is void_type_node,
509 an empty initializer list was given. */
510
511static void
512perform_target_ctor (tree init)
513{
514 tree decl = current_class_ref;
515 tree type = current_class_type;
516
a624d5fe
PC
517 finish_expr_stmt (build_aggr_init (decl, init,
518 LOOKUP_NORMAL|LOOKUP_DELEGATING_CONS,
519 tf_warning_or_error));
eca7fc57 520 if (type_build_dtor_call (type))
238e471c
VV
521 {
522 tree expr = build_delete (type, decl, sfk_complete_destructor,
523 LOOKUP_NORMAL
524 |LOOKUP_NONVIRTUAL
525 |LOOKUP_DESTRUCTOR,
526 0, tf_warning_or_error);
eca7fc57
JM
527 if (expr != error_mark_node
528 && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
238e471c
VV
529 finish_eh_cleanup (expr);
530 }
531}
532
b15ea309
JM
533/* Return the non-static data initializer for FIELD_DECL MEMBER. */
534
535tree
536get_nsdmi (tree member, bool in_ctor)
537{
538 tree init;
539 tree save_ccp = current_class_ptr;
540 tree save_ccr = current_class_ref;
04eca83e 541
b15ea309 542 if (!in_ctor)
3e605b20
JM
543 {
544 /* Use a PLACEHOLDER_EXPR when we don't have a 'this' parameter to
545 refer to; constexpr evaluation knows what to do with it. */
546 current_class_ref = build0 (PLACEHOLDER_EXPR, DECL_CONTEXT (member));
547 current_class_ptr = build_address (current_class_ref);
548 }
04eca83e 549
b15ea309 550 if (DECL_LANG_SPECIFIC (member) && DECL_TEMPLATE_INFO (member))
f4cd9c51 551 {
04eca83e
NS
552 init = DECL_INITIAL (DECL_TI_TEMPLATE (member));
553 if (TREE_CODE (init) == DEFAULT_ARG)
554 goto unparsed;
555
556 /* Check recursive instantiation. */
557 if (DECL_INSTANTIATING_NSDMI_P (member))
558 {
559 error ("recursive instantiation of non-static data member "
560 "initializer for %qD", member);
561 init = error_mark_node;
562 }
563 else
564 {
565 DECL_INSTANTIATING_NSDMI_P (member) = 1;
566
567 /* Do deferred instantiation of the NSDMI. */
568 init = (tsubst_copy_and_build
569 (init, DECL_TI_ARGS (member),
570 tf_warning_or_error, member, /*function_p=*/false,
571 /*integral_constant_expression_p=*/false));
572 init = digest_nsdmi_init (member, init);
573
574 DECL_INSTANTIATING_NSDMI_P (member) = 0;
575 }
f4cd9c51 576 }
b15ea309
JM
577 else
578 {
579 init = DECL_INITIAL (member);
580 if (init && TREE_CODE (init) == DEFAULT_ARG)
581 {
04eca83e 582 unparsed:
b15ea309
JM
583 error ("constructor required before non-static data member "
584 "for %qD has been parsed", member);
585 DECL_INITIAL (member) = error_mark_node;
3e605b20 586 init = error_mark_node;
b15ea309
JM
587 }
588 /* Strip redundant TARGET_EXPR so we don't need to remap it, and
589 so the aggregate init code below will see a CONSTRUCTOR. */
338976c2 590 if (init && SIMPLE_TARGET_EXPR_P (init))
b15ea309
JM
591 init = TARGET_EXPR_INITIAL (init);
592 init = break_out_target_exprs (init);
593 }
594 current_class_ptr = save_ccp;
595 current_class_ref = save_ccr;
596 return init;
597}
598
2282d28d
MM
599/* Initialize MEMBER, a FIELD_DECL, with INIT, a TREE_LIST of
600 arguments. If TREE_LIST is void_type_node, an empty initializer
601 list was given; if NULL_TREE no initializer was given. */
e92cc029 602
8d08fdba 603static void
2282d28d 604perform_member_init (tree member, tree init)
8d08fdba
MS
605{
606 tree decl;
607 tree type = TREE_TYPE (member);
2282d28d 608
0e5f8a59
JM
609 /* Use the non-static data member initializer if there was no
610 mem-initializer for this field. */
611 if (init == NULL_TREE)
b15ea309 612 init = get_nsdmi (member, /*ctor*/true);
0e5f8a59 613
a9eba00e
PC
614 if (init == error_mark_node)
615 return;
616
2282d28d
MM
617 /* Effective C++ rule 12 requires that all data members be
618 initialized. */
9dbd4406 619 if (warn_ecpp && init == NULL_TREE && TREE_CODE (type) != ARRAY_TYPE)
c5d75364
MLI
620 warning_at (DECL_SOURCE_LOCATION (current_function_decl), OPT_Weffc__,
621 "%qD should be initialized in the member initialization list",
622 member);
2282d28d 623
2282d28d 624 /* Get an lvalue for the data member. */
50ad9642
MM
625 decl = build_class_member_access_expr (current_class_ref, member,
626 /*access_path=*/NULL_TREE,
5ade1ed2
DG
627 /*preserve_reference=*/true,
628 tf_warning_or_error);
2fbfe9b8
MS
629 if (decl == error_mark_node)
630 return;
631
c11e39b0
JW
632 if (warn_init_self && init && TREE_CODE (init) == TREE_LIST
633 && TREE_CHAIN (init) == NULL_TREE)
634 {
635 tree val = TREE_VALUE (init);
0aa359c1
PC
636 /* Handle references. */
637 if (REFERENCE_REF_P (val))
638 val = TREE_OPERAND (val, 0);
c11e39b0
JW
639 if (TREE_CODE (val) == COMPONENT_REF && TREE_OPERAND (val, 1) == member
640 && TREE_OPERAND (val, 0) == current_class_ref)
641 warning_at (DECL_SOURCE_LOCATION (current_function_decl),
0ccb505d 642 OPT_Winit_self, "%qD is initialized with itself",
c11e39b0
JW
643 member);
644 }
645
9dbd4406
JM
646 if (init == void_type_node)
647 {
648 /* mem() means value-initialization. */
649 if (TREE_CODE (type) == ARRAY_TYPE)
0f737a30 650 {
9c69dcea 651 init = build_vec_init_expr (type, init, tf_warning_or_error);
4de2f020 652 init = build2 (INIT_EXPR, type, decl, init);
0f737a30
JJ
653 finish_expr_stmt (init);
654 }
9dbd4406
JM
655 else
656 {
48e5d119
PC
657 tree value = build_value_init (type, tf_warning_or_error);
658 if (value == error_mark_node)
659 return;
660 init = build2 (INIT_EXPR, type, decl, value);
351ccf20 661 finish_expr_stmt (init);
9dbd4406 662 }
9dbd4406 663 }
6bdb8141
JM
664 /* Deal with this here, as we will get confused if we try to call the
665 assignment op for an anonymous union. This can happen in a
666 synthesized copy constructor. */
9dbd4406 667 else if (ANON_AGGR_TYPE_P (type))
6bdb8141 668 {
ff9f1a5d
MM
669 if (init)
670 {
f293ce4b 671 init = build2 (INIT_EXPR, type, decl, TREE_VALUE (init));
ff9f1a5d
MM
672 finish_expr_stmt (init);
673 }
6bdb8141 674 }
e2df21bf
JM
675 else if (init
676 && (TREE_CODE (type) == REFERENCE_TYPE
677 /* Pre-digested NSDMI. */
678 || (((TREE_CODE (init) == CONSTRUCTOR
679 && TREE_TYPE (init) == type)
680 /* { } mem-initializer. */
681 || (TREE_CODE (init) == TREE_LIST
014397c2 682 && DIRECT_LIST_INIT_P (TREE_VALUE (init))))
e2df21bf
JM
683 && (CP_AGGREGATE_TYPE_P (type)
684 || is_std_init_list (type)))))
685 {
686 /* With references and list-initialization, we need to deal with
687 extending temporary lifetimes. 12.2p5: "A temporary bound to a
688 reference member in a constructor’s ctor-initializer (12.6.2)
689 persists until the constructor exits." */
690 unsigned i; tree t;
9771b263 691 vec<tree, va_gc> *cleanups = make_tree_vector ();
e2df21bf
JM
692 if (TREE_CODE (init) == TREE_LIST)
693 init = build_x_compound_expr_from_list (init, ELK_MEM_INIT,
694 tf_warning_or_error);
695 if (TREE_TYPE (init) != type)
4794d4b5
JM
696 {
697 if (BRACE_ENCLOSED_INITIALIZER_P (init)
698 && CP_AGGREGATE_TYPE_P (type))
699 init = reshape_init (type, init, tf_warning_or_error);
700 init = digest_init (type, init, tf_warning_or_error);
701 }
e2df21bf
JM
702 if (init == error_mark_node)
703 return;
f3fae478
JM
704 /* A FIELD_DECL doesn't really have a suitable lifetime, but
705 make_temporary_var_for_ref_to_temp will treat it as automatic and
706 set_up_extended_ref_temp wants to use the decl in a warning. */
2c6f7927 707 init = extend_ref_init_temps (member, init, &cleanups);
e2df21bf
JM
708 if (TREE_CODE (type) == ARRAY_TYPE
709 && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (type)))
710 init = build_vec_init_expr (type, init, tf_warning_or_error);
711 init = build2 (INIT_EXPR, type, decl, init);
712 finish_expr_stmt (init);
9771b263 713 FOR_EACH_VEC_ELT (*cleanups, i, t)
e2df21bf
JM
714 push_cleanup (decl, t, false);
715 release_tree_vector (cleanups);
716 }
a0348261
JM
717 else if (type_build_ctor_call (type)
718 || (init && CLASS_TYPE_P (strip_array_types (type))))
8d08fdba 719 {
534ecb17 720 if (TREE_CODE (type) == ARRAY_TYPE)
8d08fdba 721 {
534ecb17
JM
722 if (init)
723 {
dd56ca9f
JM
724 if (TREE_CHAIN (init))
725 init = error_mark_node;
726 else
727 init = TREE_VALUE (init);
f41349a3
JM
728 if (BRACE_ENCLOSED_INITIALIZER_P (init))
729 init = digest_init (type, init, tf_warning_or_error);
534ecb17
JM
730 }
731 if (init == NULL_TREE
732 || same_type_ignoring_top_level_qualifiers_p (type,
733 TREE_TYPE (init)))
734 {
9c69dcea 735 init = build_vec_init_expr (type, init, tf_warning_or_error);
534ecb17
JM
736 init = build2 (INIT_EXPR, type, decl, init);
737 finish_expr_stmt (init);
738 }
739 else
740 error ("invalid initializer for array member %q#D", member);
8d08fdba
MS
741 }
742 else
b87d79e6 743 {
b8bf6ad9
JM
744 int flags = LOOKUP_NORMAL;
745 if (DECL_DEFAULTED_FN (current_function_decl))
746 flags |= LOOKUP_DEFAULTED;
b87d79e6
JM
747 if (CP_TYPE_CONST_P (type)
748 && init == NULL_TREE
6132bdd7 749 && default_init_uninitialized_part (type))
0df9da03
FC
750 {
751 /* TYPE_NEEDS_CONSTRUCTING can be set just because we have a
752 vtable; still give this diagnostic. */
753 if (permerror (DECL_SOURCE_LOCATION (current_function_decl),
754 "uninitialized const member in %q#T", type))
755 inform (DECL_SOURCE_LOCATION (member),
756 "%q#D should be initialized", member );
757 }
b8bf6ad9 758 finish_expr_stmt (build_aggr_init (decl, init, flags,
b87d79e6
JM
759 tf_warning_or_error));
760 }
8d08fdba
MS
761 }
762 else
763 {
764 if (init == NULL_TREE)
765 {
31d1acec 766 tree core_type;
8d08fdba 767 /* member traversal: note it leaves init NULL */
9dbd4406 768 if (TREE_CODE (type) == REFERENCE_TYPE)
0df9da03
FC
769 {
770 if (permerror (DECL_SOURCE_LOCATION (current_function_decl),
771 "uninitialized reference member in %q#T", type))
772 inform (DECL_SOURCE_LOCATION (member),
773 "%q#D should be initialized", member);
774 }
58ec3cc5 775 else if (CP_TYPE_CONST_P (type))
0df9da03
FC
776 {
777 if (permerror (DECL_SOURCE_LOCATION (current_function_decl),
778 "uninitialized const member in %q#T", type))
779 inform (DECL_SOURCE_LOCATION (member),
780 "%q#D should be initialized", member );
781 }
31d1acec 782
69f36ba6
JM
783 core_type = strip_array_types (type);
784
012e6a1e
JM
785 if (CLASS_TYPE_P (core_type)
786 && (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type)
787 || CLASSTYPE_REF_FIELDS_NEED_INIT (core_type)))
788 diagnose_uninitialized_cst_or_ref_member (core_type,
40bb78ad
FC
789 /*using_new=*/false,
790 /*complain=*/true);
8d08fdba
MS
791 }
792 else if (TREE_CODE (init) == TREE_LIST)
c7b62f14
NS
793 /* There was an explicit member initialization. Do some work
794 in that case. */
d555b1c7
PC
795 init = build_x_compound_expr_from_list (init, ELK_MEM_INIT,
796 tf_warning_or_error);
8d08fdba 797
4f0aa416 798 if (init)
5ade1ed2
DG
799 finish_expr_stmt (cp_build_modify_expr (decl, INIT_EXPR, init,
800 tf_warning_or_error));
8d08fdba 801 }
eb66be0e 802
eca7fc57 803 if (type_build_dtor_call (type))
b7484fbe 804 {
de22184b
MS
805 tree expr;
806
50ad9642
MM
807 expr = build_class_member_access_expr (current_class_ref, member,
808 /*access_path=*/NULL_TREE,
5ade1ed2
DG
809 /*preserve_reference=*/false,
810 tf_warning_or_error);
3ec6bad3 811 expr = build_delete (type, expr, sfk_complete_destructor,
574cfaa4
JM
812 LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR, 0,
813 tf_warning_or_error);
b7484fbe 814
eca7fc57
JM
815 if (expr != error_mark_node
816 && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
659e5a7a 817 finish_eh_cleanup (expr);
b7484fbe 818 }
8d08fdba
MS
819}
820
ff9f1a5d
MM
821/* Returns a TREE_LIST containing (as the TREE_PURPOSE of each node) all
822 the FIELD_DECLs on the TYPE_FIELDS list for T, in reverse order. */
823
c8094d83 824static tree
a81072c7 825build_field_list (tree t, tree list, int *uses_unions_or_anon_p)
ff9f1a5d
MM
826{
827 tree fields;
828
829 /* Note whether or not T is a union. */
830 if (TREE_CODE (t) == UNION_TYPE)
a81072c7 831 *uses_unions_or_anon_p = 1;
ff9f1a5d 832
910ad8de 833 for (fields = TYPE_FIELDS (t); fields; fields = DECL_CHAIN (fields))
ff9f1a5d 834 {
535335bf
JM
835 tree fieldtype;
836
ff9f1a5d 837 /* Skip CONST_DECLs for enumeration constants and so forth. */
17bbb839 838 if (TREE_CODE (fields) != FIELD_DECL || DECL_ARTIFICIAL (fields))
ff9f1a5d 839 continue;
c8094d83 840
535335bf 841 fieldtype = TREE_TYPE (fields);
ff9f1a5d
MM
842
843 /* For an anonymous struct or union, we must recursively
844 consider the fields of the anonymous type. They can be
845 directly initialized from the constructor. */
535335bf 846 if (ANON_AGGR_TYPE_P (fieldtype))
ff9f1a5d
MM
847 {
848 /* Add this field itself. Synthesized copy constructors
849 initialize the entire aggregate. */
850 list = tree_cons (fields, NULL_TREE, list);
851 /* And now add the fields in the anonymous aggregate. */
a81072c7
JM
852 list = build_field_list (fieldtype, list, uses_unions_or_anon_p);
853 *uses_unions_or_anon_p = 1;
ff9f1a5d
MM
854 }
855 /* Add this field. */
856 else if (DECL_NAME (fields))
857 list = tree_cons (fields, NULL_TREE, list);
858 }
859
860 return list;
861}
862
a81072c7
JM
863/* Return the innermost aggregate scope for FIELD, whether that is
864 the enclosing class or an anonymous aggregate within it. */
865
866static tree
867innermost_aggr_scope (tree field)
868{
869 if (ANON_AGGR_TYPE_P (TREE_TYPE (field)))
870 return TREE_TYPE (field);
871 else
872 return DECL_CONTEXT (field);
873}
874
2282d28d
MM
875/* The MEM_INITS are a TREE_LIST. The TREE_PURPOSE of each list gives
876 a FIELD_DECL or BINFO in T that needs initialization. The
877 TREE_VALUE gives the initializer, or list of initializer arguments.
878
879 Return a TREE_LIST containing all of the initializations required
880 for T, in the order in which they should be performed. The output
881 list has the same format as the input. */
e92cc029 882
8d08fdba 883static tree
2282d28d 884sort_mem_initializers (tree t, tree mem_inits)
8d08fdba 885{
ff9f1a5d 886 tree init;
fa743e8c 887 tree base, binfo, base_binfo;
2282d28d
MM
888 tree sorted_inits;
889 tree next_subobject;
9771b263 890 vec<tree, va_gc> *vbases;
2282d28d 891 int i;
a81072c7 892 int uses_unions_or_anon_p = 0;
ff9f1a5d 893
2282d28d
MM
894 /* Build up a list of initializations. The TREE_PURPOSE of entry
895 will be the subobject (a FIELD_DECL or BINFO) to initialize. The
896 TREE_VALUE will be the constructor arguments, or NULL if no
897 explicit initialization was provided. */
898 sorted_inits = NULL_TREE;
c8094d83 899
2282d28d 900 /* Process the virtual bases. */
9ba5ff0f 901 for (vbases = CLASSTYPE_VBASECLASSES (t), i = 0;
9771b263 902 vec_safe_iterate (vbases, i, &base); i++)
58c42dc2 903 sorted_inits = tree_cons (base, NULL_TREE, sorted_inits);
c8094d83 904
2282d28d 905 /* Process the direct bases. */
fa743e8c
NS
906 for (binfo = TYPE_BINFO (t), i = 0;
907 BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
908 if (!BINFO_VIRTUAL_P (base_binfo))
909 sorted_inits = tree_cons (base_binfo, NULL_TREE, sorted_inits);
910
2282d28d 911 /* Process the non-static data members. */
a81072c7 912 sorted_inits = build_field_list (t, sorted_inits, &uses_unions_or_anon_p);
2282d28d
MM
913 /* Reverse the entire list of initializations, so that they are in
914 the order that they will actually be performed. */
915 sorted_inits = nreverse (sorted_inits);
916
917 /* If the user presented the initializers in an order different from
918 that in which they will actually occur, we issue a warning. Keep
919 track of the next subobject which can be explicitly initialized
920 without issuing a warning. */
921 next_subobject = sorted_inits;
922
923 /* Go through the explicit initializers, filling in TREE_PURPOSE in
924 the SORTED_INITS. */
925 for (init = mem_inits; init; init = TREE_CHAIN (init))
926 {
927 tree subobject;
928 tree subobject_init;
929
930 subobject = TREE_PURPOSE (init);
931
932 /* If the explicit initializers are in sorted order, then
c8094d83 933 SUBOBJECT will be NEXT_SUBOBJECT, or something following
2282d28d 934 it. */
c8094d83
MS
935 for (subobject_init = next_subobject;
936 subobject_init;
2282d28d
MM
937 subobject_init = TREE_CHAIN (subobject_init))
938 if (TREE_PURPOSE (subobject_init) == subobject)
ff9f1a5d
MM
939 break;
940
2282d28d 941 /* Issue a warning if the explicit initializer order does not
2cfe82fe 942 match that which will actually occur.
0cbd7506 943 ??? Are all these on the correct lines? */
2282d28d 944 if (warn_reorder && !subobject_init)
ff9f1a5d 945 {
2282d28d 946 if (TREE_CODE (TREE_PURPOSE (next_subobject)) == FIELD_DECL)
af718670
PC
947 warning_at (DECL_SOURCE_LOCATION (TREE_PURPOSE (next_subobject)),
948 OPT_Wreorder, "%qD will be initialized after",
949 TREE_PURPOSE (next_subobject));
2282d28d 950 else
b323323f 951 warning (OPT_Wreorder, "base %qT will be initialized after",
2282d28d
MM
952 TREE_PURPOSE (next_subobject));
953 if (TREE_CODE (subobject) == FIELD_DECL)
af718670
PC
954 warning_at (DECL_SOURCE_LOCATION (subobject),
955 OPT_Wreorder, " %q#D", subobject);
2282d28d 956 else
b323323f 957 warning (OPT_Wreorder, " base %qT", subobject);
c5d75364
MLI
958 warning_at (DECL_SOURCE_LOCATION (current_function_decl),
959 OPT_Wreorder, " when initialized here");
ff9f1a5d 960 }
b7484fbe 961
2282d28d
MM
962 /* Look again, from the beginning of the list. */
963 if (!subobject_init)
ff9f1a5d 964 {
2282d28d
MM
965 subobject_init = sorted_inits;
966 while (TREE_PURPOSE (subobject_init) != subobject)
967 subobject_init = TREE_CHAIN (subobject_init);
ff9f1a5d 968 }
c8094d83 969
2282d28d
MM
970 /* It is invalid to initialize the same subobject more than
971 once. */
972 if (TREE_VALUE (subobject_init))
ff9f1a5d 973 {
2282d28d 974 if (TREE_CODE (subobject) == FIELD_DECL)
c5d75364
MLI
975 error_at (DECL_SOURCE_LOCATION (current_function_decl),
976 "multiple initializations given for %qD",
977 subobject);
2282d28d 978 else
c5d75364
MLI
979 error_at (DECL_SOURCE_LOCATION (current_function_decl),
980 "multiple initializations given for base %qT",
981 subobject);
ff9f1a5d
MM
982 }
983
2282d28d
MM
984 /* Record the initialization. */
985 TREE_VALUE (subobject_init) = TREE_VALUE (init);
986 next_subobject = subobject_init;
ff9f1a5d
MM
987 }
988
989 /* [class.base.init]
b7484fbe 990
ff9f1a5d
MM
991 If a ctor-initializer specifies more than one mem-initializer for
992 multiple members of the same union (including members of
57ece258
JM
993 anonymous unions), the ctor-initializer is ill-formed.
994
995 Here we also splice out uninitialized union members. */
a81072c7 996 if (uses_unions_or_anon_p)
ff9f1a5d 997 {
3a6a88c8 998 tree *last_p = NULL;
57ece258
JM
999 tree *p;
1000 for (p = &sorted_inits; *p; )
8d08fdba 1001 {
ff9f1a5d 1002 tree field;
535335bf 1003 tree ctx;
ff9f1a5d 1004
57ece258
JM
1005 init = *p;
1006
1007 field = TREE_PURPOSE (init);
1008
1009 /* Skip base classes. */
1010 if (TREE_CODE (field) != FIELD_DECL)
1011 goto next;
1012
a81072c7 1013 /* If this is an anonymous aggregate with no explicit initializer,
57ece258 1014 splice it out. */
a81072c7 1015 if (!TREE_VALUE (init) && ANON_AGGR_TYPE_P (TREE_TYPE (field)))
57ece258
JM
1016 goto splice;
1017
ff9f1a5d
MM
1018 /* See if this field is a member of a union, or a member of a
1019 structure contained in a union, etc. */
a81072c7
JM
1020 ctx = innermost_aggr_scope (field);
1021
ff9f1a5d 1022 /* If this field is not a member of a union, skip it. */
a81072c7
JM
1023 if (TREE_CODE (ctx) != UNION_TYPE
1024 && !ANON_AGGR_TYPE_P (ctx))
57ece258
JM
1025 goto next;
1026
3a6a88c8
JM
1027 /* If this union member has no explicit initializer and no NSDMI,
1028 splice it out. */
1029 if (TREE_VALUE (init) || DECL_INITIAL (field))
1030 /* OK. */;
1031 else
57ece258 1032 goto splice;
8d08fdba 1033
ff9f1a5d
MM
1034 /* It's only an error if we have two initializers for the same
1035 union type. */
3a6a88c8 1036 if (!last_p)
6bdb8141 1037 {
3a6a88c8 1038 last_p = p;
57ece258 1039 goto next;
6bdb8141 1040 }
8d08fdba 1041
ff9f1a5d 1042 /* See if LAST_FIELD and the field initialized by INIT are
a81072c7
JM
1043 members of the same union (or the union itself). If so, there's
1044 a problem, unless they're actually members of the same structure
ff9f1a5d 1045 which is itself a member of a union. For example, given:
8d08fdba 1046
ff9f1a5d
MM
1047 union { struct { int i; int j; }; };
1048
1049 initializing both `i' and `j' makes sense. */
a81072c7
JM
1050 ctx = common_enclosing_class
1051 (innermost_aggr_scope (field),
1052 innermost_aggr_scope (TREE_PURPOSE (*last_p)));
3a6a88c8 1053
a81072c7
JM
1054 if (ctx && (TREE_CODE (ctx) == UNION_TYPE
1055 || ctx == TREE_TYPE (TREE_PURPOSE (*last_p))))
8d08fdba 1056 {
3a6a88c8
JM
1057 /* A mem-initializer hides an NSDMI. */
1058 if (TREE_VALUE (init) && !TREE_VALUE (*last_p))
1059 *last_p = TREE_CHAIN (*last_p);
1060 else if (TREE_VALUE (*last_p) && !TREE_VALUE (init))
1061 goto splice;
1062 else
2ef7251f
MP
1063 {
1064 error_at (DECL_SOURCE_LOCATION (current_function_decl),
1065 "initializations for multiple members of %qT",
1066 ctx);
1067 goto splice;
1068 }
8d08fdba 1069 }
ff9f1a5d 1070
3a6a88c8 1071 last_p = p;
57ece258
JM
1072
1073 next:
1074 p = &TREE_CHAIN (*p);
1075 continue;
1076 splice:
1077 *p = TREE_CHAIN (*p);
1078 continue;
b7484fbe
MS
1079 }
1080 }
8d08fdba 1081
2282d28d 1082 return sorted_inits;
b7484fbe
MS
1083}
1084
2282d28d
MM
1085/* Initialize all bases and members of CURRENT_CLASS_TYPE. MEM_INITS
1086 is a TREE_LIST giving the explicit mem-initializer-list for the
1087 constructor. The TREE_PURPOSE of each entry is a subobject (a
1088 FIELD_DECL or a BINFO) of the CURRENT_CLASS_TYPE. The TREE_VALUE
1089 is a TREE_LIST giving the arguments to the constructor or
1090 void_type_node for an empty list of arguments. */
a9aedbc2 1091
3dbc07b6 1092void
2282d28d 1093emit_mem_initializers (tree mem_inits)
8d08fdba 1094{
b8bf6ad9
JM
1095 int flags = LOOKUP_NORMAL;
1096
72e4661a
PC
1097 /* We will already have issued an error message about the fact that
1098 the type is incomplete. */
1099 if (!COMPLETE_TYPE_P (current_class_type))
1100 return;
c8094d83 1101
238e471c
VV
1102 if (mem_inits
1103 && TYPE_P (TREE_PURPOSE (mem_inits))
1104 && same_type_p (TREE_PURPOSE (mem_inits), current_class_type))
1105 {
1106 /* Delegating constructor. */
1107 gcc_assert (TREE_CHAIN (mem_inits) == NULL_TREE);
1108 perform_target_ctor (TREE_VALUE (mem_inits));
1109 return;
1110 }
1111
85b5d65a
JM
1112 if (DECL_DEFAULTED_FN (current_function_decl)
1113 && ! DECL_INHERITED_CTOR_BASE (current_function_decl))
b8bf6ad9
JM
1114 flags |= LOOKUP_DEFAULTED;
1115
2282d28d
MM
1116 /* Sort the mem-initializers into the order in which the
1117 initializations should be performed. */
1118 mem_inits = sort_mem_initializers (current_class_type, mem_inits);
8d08fdba 1119
1f5a253a 1120 in_base_initializer = 1;
c8094d83 1121
2282d28d 1122 /* Initialize base classes. */
3b616f08
PC
1123 for (; (mem_inits
1124 && TREE_CODE (TREE_PURPOSE (mem_inits)) != FIELD_DECL);
1125 mem_inits = TREE_CHAIN (mem_inits))
8d08fdba 1126 {
2282d28d
MM
1127 tree subobject = TREE_PURPOSE (mem_inits);
1128 tree arguments = TREE_VALUE (mem_inits);
1129
3b616f08
PC
1130 /* We already have issued an error message. */
1131 if (arguments == error_mark_node)
1132 continue;
1133
91ea6df3
GDR
1134 if (arguments == NULL_TREE)
1135 {
1136 /* If these initializations are taking place in a copy constructor,
1137 the base class should probably be explicitly initialized if there
1138 is a user-defined constructor in the base class (other than the
1139 default constructor, which will be called anyway). */
1140 if (extra_warnings
1141 && DECL_COPY_CONSTRUCTOR_P (current_function_decl)
1142 && type_has_user_nondefault_constructor (BINFO_TYPE (subobject)))
1143 warning_at (DECL_SOURCE_LOCATION (current_function_decl),
1144 OPT_Wextra, "base class %q#T should be explicitly "
1145 "initialized in the copy constructor",
1146 BINFO_TYPE (subobject));
91ea6df3 1147 }
2282d28d 1148
2282d28d 1149 /* Initialize the base. */
809e3e7f 1150 if (BINFO_VIRTUAL_P (subobject))
2282d28d
MM
1151 construct_virtual_base (subobject, arguments);
1152 else
b7484fbe 1153 {
2282d28d 1154 tree base_addr;
c8094d83 1155
2282d28d 1156 base_addr = build_base_path (PLUS_EXPR, current_class_ptr,
a271590a 1157 subobject, 1, tf_warning_or_error);
2282d28d 1158 expand_aggr_init_1 (subobject, NULL_TREE,
dd865ef6 1159 cp_build_indirect_ref (base_addr, RO_NULL,
5ade1ed2 1160 tf_warning_or_error),
2282d28d 1161 arguments,
b8bf6ad9 1162 flags,
5ade1ed2 1163 tf_warning_or_error);
2282d28d 1164 expand_cleanup_for_base (subobject, NULL_TREE);
8d08fdba 1165 }
8d08fdba 1166 }
1f5a253a 1167 in_base_initializer = 0;
8d08fdba 1168
2282d28d 1169 /* Initialize the vptrs. */
cf2e003b 1170 initialize_vtbl_ptrs (current_class_ptr);
c8094d83 1171
2282d28d
MM
1172 /* Initialize the data members. */
1173 while (mem_inits)
8d08fdba 1174 {
2282d28d
MM
1175 perform_member_init (TREE_PURPOSE (mem_inits),
1176 TREE_VALUE (mem_inits));
1177 mem_inits = TREE_CHAIN (mem_inits);
b7484fbe 1178 }
8d08fdba
MS
1179}
1180
3ec6bad3
MM
1181/* Returns the address of the vtable (i.e., the value that should be
1182 assigned to the vptr) for BINFO. */
1183
2077db1b 1184tree
362efdc1 1185build_vtbl_address (tree binfo)
3ec6bad3 1186{
9965d119 1187 tree binfo_for = binfo;
3ec6bad3
MM
1188 tree vtbl;
1189
fc6633e0 1190 if (BINFO_VPTR_INDEX (binfo) && BINFO_VIRTUAL_P (binfo))
9965d119
NS
1191 /* If this is a virtual primary base, then the vtable we want to store
1192 is that for the base this is being used as the primary base of. We
1193 can't simply skip the initialization, because we may be expanding the
1194 inits of a subobject constructor where the virtual base layout
1195 can be different. */
fc6633e0
NS
1196 while (BINFO_PRIMARY_P (binfo_for))
1197 binfo_for = BINFO_INHERITANCE_CHAIN (binfo_for);
9965d119 1198
3ec6bad3
MM
1199 /* Figure out what vtable BINFO's vtable is based on, and mark it as
1200 used. */
9965d119 1201 vtbl = get_vtbl_decl_for_binfo (binfo_for);
c3439626 1202 TREE_USED (vtbl) = true;
3ec6bad3
MM
1203
1204 /* Now compute the address to use when initializing the vptr. */
6de9cd9a 1205 vtbl = unshare_expr (BINFO_VTABLE (binfo_for));
5a6ccc94 1206 if (VAR_P (vtbl))
6de9cd9a 1207 vtbl = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (vtbl)), vtbl);
3ec6bad3
MM
1208
1209 return vtbl;
1210}
1211
8d08fdba
MS
1212/* This code sets up the virtual function tables appropriate for
1213 the pointer DECL. It is a one-ply initialization.
1214
1215 BINFO is the exact type that DECL is supposed to be. In
1216 multiple inheritance, this might mean "C's A" if C : A, B. */
e92cc029 1217
8926095f 1218static void
362efdc1 1219expand_virtual_init (tree binfo, tree decl)
8d08fdba 1220{
8d08fdba 1221 tree vtbl, vtbl_ptr;
3ec6bad3 1222 tree vtt_index;
8d08fdba 1223
3ec6bad3
MM
1224 /* Compute the initializer for vptr. */
1225 vtbl = build_vtbl_address (binfo);
1226
3461fba7
NS
1227 /* We may get this vptr from a VTT, if this is a subobject
1228 constructor or subobject destructor. */
3ec6bad3
MM
1229 vtt_index = BINFO_VPTR_INDEX (binfo);
1230 if (vtt_index)
1231 {
1232 tree vtbl2;
1233 tree vtt_parm;
1234
1235 /* Compute the value to use, when there's a VTT. */
e0fff4b3 1236 vtt_parm = current_vtt_parm;
5d49b6a7 1237 vtbl2 = fold_build_pointer_plus (vtt_parm, vtt_index);
dd865ef6 1238 vtbl2 = cp_build_indirect_ref (vtbl2, RO_NULL, tf_warning_or_error);
6de9cd9a 1239 vtbl2 = convert (TREE_TYPE (vtbl), vtbl2);
3ec6bad3
MM
1240
1241 /* The actual initializer is the VTT value only in the subobject
1242 constructor. In maybe_clone_body we'll substitute NULL for
1243 the vtt_parm in the case of the non-subobject constructor. */
c8094d83
MS
1244 vtbl = build3 (COND_EXPR,
1245 TREE_TYPE (vtbl),
f293ce4b
RS
1246 build2 (EQ_EXPR, boolean_type_node,
1247 current_in_charge_parm, integer_zero_node),
c8094d83 1248 vtbl2,
f293ce4b 1249 vtbl);
3ec6bad3 1250 }
70ae3201
MM
1251
1252 /* Compute the location of the vtpr. */
dd865ef6 1253 vtbl_ptr = build_vfield_ref (cp_build_indirect_ref (decl, RO_NULL,
5ade1ed2 1254 tf_warning_or_error),
338d90b8 1255 TREE_TYPE (binfo));
50bc768d 1256 gcc_assert (vtbl_ptr != error_mark_node);
8d08fdba 1257
70ae3201 1258 /* Assign the vtable to the vptr. */
4b978f96 1259 vtbl = convert_force (TREE_TYPE (vtbl_ptr), vtbl, 0, tf_warning_or_error);
5ade1ed2
DG
1260 finish_expr_stmt (cp_build_modify_expr (vtbl_ptr, NOP_EXPR, vtbl,
1261 tf_warning_or_error));
8d08fdba
MS
1262}
1263
f33e32a8
MM
1264/* If an exception is thrown in a constructor, those base classes already
1265 constructed must be destroyed. This function creates the cleanup
0b8a1e58 1266 for BINFO, which has just been constructed. If FLAG is non-NULL,
838dfd8a 1267 it is a DECL which is nonzero when this base needs to be
0b8a1e58 1268 destroyed. */
f33e32a8
MM
1269
1270static void
362efdc1 1271expand_cleanup_for_base (tree binfo, tree flag)
f33e32a8
MM
1272{
1273 tree expr;
1274
eca7fc57 1275 if (!type_build_dtor_call (BINFO_TYPE (binfo)))
f33e32a8
MM
1276 return;
1277
0b8a1e58 1278 /* Call the destructor. */
c8094d83 1279 expr = build_special_member_call (current_class_ref,
4ba126e4 1280 base_dtor_identifier,
c166b898 1281 NULL,
4ba126e4 1282 binfo,
5ade1ed2
DG
1283 LOOKUP_NORMAL | LOOKUP_NONVIRTUAL,
1284 tf_warning_or_error);
eca7fc57
JM
1285
1286 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (BINFO_TYPE (binfo)))
1287 return;
1288
0b8a1e58 1289 if (flag)
db3927fb
AH
1290 expr = fold_build3_loc (input_location,
1291 COND_EXPR, void_type_node,
ba47d38d 1292 c_common_truthvalue_conversion (input_location, flag),
7866705a 1293 expr, integer_zero_node);
0b8a1e58 1294
659e5a7a 1295 finish_eh_cleanup (expr);
f33e32a8
MM
1296}
1297
2282d28d
MM
1298/* Construct the virtual base-class VBASE passing the ARGUMENTS to its
1299 constructor. */
e92cc029 1300
8d08fdba 1301static void
2282d28d 1302construct_virtual_base (tree vbase, tree arguments)
8d08fdba 1303{
2282d28d 1304 tree inner_if_stmt;
2282d28d 1305 tree exp;
c8094d83 1306 tree flag;
2282d28d
MM
1307
1308 /* If there are virtual base classes with destructors, we need to
1309 emit cleanups to destroy them if an exception is thrown during
1310 the construction process. These exception regions (i.e., the
1311 period during which the cleanups must occur) begin from the time
1312 the construction is complete to the end of the function. If we
1313 create a conditional block in which to initialize the
1314 base-classes, then the cleanup region for the virtual base begins
1315 inside a block, and ends outside of that block. This situation
1316 confuses the sjlj exception-handling code. Therefore, we do not
1317 create a single conditional block, but one for each
1318 initialization. (That way the cleanup regions always begin
3b426391 1319 in the outer block.) We trust the back end to figure out
2282d28d
MM
1320 that the FLAG will not change across initializations, and
1321 avoid doing multiple tests. */
910ad8de 1322 flag = DECL_CHAIN (DECL_ARGUMENTS (current_function_decl));
2282d28d
MM
1323 inner_if_stmt = begin_if_stmt ();
1324 finish_if_stmt_cond (flag, inner_if_stmt);
2282d28d
MM
1325
1326 /* Compute the location of the virtual base. If we're
1327 constructing virtual bases, then we must be the most derived
1328 class. Therefore, we don't have to look up the virtual base;
1329 we already know where it is. */
22ed7e5f
MM
1330 exp = convert_to_base_statically (current_class_ref, vbase);
1331
c8094d83 1332 expand_aggr_init_1 (vbase, current_class_ref, exp, arguments,
4b978f96 1333 0, tf_warning_or_error);
2282d28d 1334 finish_then_clause (inner_if_stmt);
325c3691 1335 finish_if_stmt (inner_if_stmt);
2282d28d
MM
1336
1337 expand_cleanup_for_base (vbase, flag);
8d08fdba
MS
1338}
1339
2ee887f2 1340/* Find the context in which this FIELD can be initialized. */
e92cc029 1341
2ee887f2 1342static tree
362efdc1 1343initializing_context (tree field)
2ee887f2
MS
1344{
1345 tree t = DECL_CONTEXT (field);
1346
1347 /* Anonymous union members can be initialized in the first enclosing
1348 non-anonymous union context. */
6bdb8141 1349 while (t && ANON_AGGR_TYPE_P (t))
2ee887f2
MS
1350 t = TYPE_CONTEXT (t);
1351 return t;
1352}
1353
8d08fdba
MS
1354/* Function to give error message if member initialization specification
1355 is erroneous. FIELD is the member we decided to initialize.
1356 TYPE is the type for which the initialization is being performed.
72b7eeff 1357 FIELD must be a member of TYPE.
c8094d83 1358
8d08fdba
MS
1359 MEMBER_NAME is the name of the member. */
1360
1361static int
362efdc1 1362member_init_ok_or_else (tree field, tree type, tree member_name)
8d08fdba
MS
1363{
1364 if (field == error_mark_node)
1365 return 0;
a723baf1 1366 if (!field)
8d08fdba 1367 {
15a7ee29 1368 error ("class %qT does not have any field named %qD", type,
a723baf1 1369 member_name);
8d08fdba
MS
1370 return 0;
1371 }
5a6ccc94 1372 if (VAR_P (field))
b7484fbe 1373 {
15a7ee29 1374 error ("%q#D is a static data member; it can only be "
a723baf1
MM
1375 "initialized at its definition",
1376 field);
1377 return 0;
1378 }
1379 if (TREE_CODE (field) != FIELD_DECL)
1380 {
15a7ee29 1381 error ("%q#D is not a non-static data member of %qT",
a723baf1
MM
1382 field, type);
1383 return 0;
1384 }
1385 if (initializing_context (field) != type)
1386 {
15a7ee29 1387 error ("class %qT does not have any field named %qD", type,
a723baf1 1388 member_name);
b7484fbe
MS
1389 return 0;
1390 }
1391
8d08fdba
MS
1392 return 1;
1393}
1394
2282d28d
MM
1395/* NAME is a FIELD_DECL, an IDENTIFIER_NODE which names a field, or it
1396 is a _TYPE node or TYPE_DECL which names a base for that type.
1f5a253a
NS
1397 Check the validity of NAME, and return either the base _TYPE, base
1398 binfo, or the FIELD_DECL of the member. If NAME is invalid, return
2282d28d 1399 NULL_TREE and issue a diagnostic.
8d08fdba 1400
36a68fe7
NS
1401 An old style unnamed direct single base construction is permitted,
1402 where NAME is NULL. */
8d08fdba 1403
fd74ca0b 1404tree
1f5a253a 1405expand_member_init (tree name)
8d08fdba 1406{
2282d28d
MM
1407 tree basetype;
1408 tree field;
8d08fdba 1409
2282d28d 1410 if (!current_class_ref)
fd74ca0b 1411 return NULL_TREE;
8d08fdba 1412
36a68fe7 1413 if (!name)
90418208 1414 {
36a68fe7
NS
1415 /* This is an obsolete unnamed base class initializer. The
1416 parser will already have warned about its use. */
604a3205 1417 switch (BINFO_N_BASE_BINFOS (TYPE_BINFO (current_class_type)))
36a68fe7
NS
1418 {
1419 case 0:
15a7ee29 1420 error ("unnamed initializer for %qT, which has no base classes",
2282d28d 1421 current_class_type);
36a68fe7
NS
1422 return NULL_TREE;
1423 case 1:
604a3205
NS
1424 basetype = BINFO_TYPE
1425 (BINFO_BASE_BINFO (TYPE_BINFO (current_class_type), 0));
36a68fe7
NS
1426 break;
1427 default:
15a7ee29 1428 error ("unnamed initializer for %qT, which uses multiple inheritance",
2282d28d 1429 current_class_type);
36a68fe7
NS
1430 return NULL_TREE;
1431 }
90418208 1432 }
36a68fe7 1433 else if (TYPE_P (name))
be99da77 1434 {
a82d6da5 1435 basetype = TYPE_MAIN_VARIANT (name);
36a68fe7 1436 name = TYPE_NAME (name);
be99da77 1437 }
36a68fe7
NS
1438 else if (TREE_CODE (name) == TYPE_DECL)
1439 basetype = TYPE_MAIN_VARIANT (TREE_TYPE (name));
2282d28d
MM
1440 else
1441 basetype = NULL_TREE;
8d08fdba 1442
36a68fe7 1443 if (basetype)
41efda8f 1444 {
d9148cf4
MM
1445 tree class_binfo;
1446 tree direct_binfo;
1447 tree virtual_binfo;
1448 int i;
2282d28d 1449
5cd5a78c
JM
1450 if (current_template_parms
1451 || same_type_p (basetype, current_class_type))
238e471c 1452 return basetype;
2282d28d 1453
d9148cf4
MM
1454 class_binfo = TYPE_BINFO (current_class_type);
1455 direct_binfo = NULL_TREE;
1456 virtual_binfo = NULL_TREE;
1457
1458 /* Look for a direct base. */
fa743e8c 1459 for (i = 0; BINFO_BASE_ITERATE (class_binfo, i, direct_binfo); ++i)
539ed333 1460 if (SAME_BINFO_TYPE_P (BINFO_TYPE (direct_binfo), basetype))
fa743e8c
NS
1461 break;
1462
d9148cf4
MM
1463 /* Look for a virtual base -- unless the direct base is itself
1464 virtual. */
809e3e7f 1465 if (!direct_binfo || !BINFO_VIRTUAL_P (direct_binfo))
58c42dc2 1466 virtual_binfo = binfo_for_vbase (basetype, current_class_type);
d9148cf4
MM
1467
1468 /* [class.base.init]
c8094d83 1469
0cbd7506 1470 If a mem-initializer-id is ambiguous because it designates
d9148cf4
MM
1471 both a direct non-virtual base class and an inherited virtual
1472 base class, the mem-initializer is ill-formed. */
1473 if (direct_binfo && virtual_binfo)
1474 {
15a7ee29 1475 error ("%qD is both a direct base and an indirect virtual base",
d9148cf4
MM
1476 basetype);
1477 return NULL_TREE;
1478 }
1479
1480 if (!direct_binfo && !virtual_binfo)
8d08fdba 1481 {
5775a06a 1482 if (CLASSTYPE_VBASECLASSES (current_class_type))
c3115fd2
MM
1483 error ("type %qT is not a direct or virtual base of %qT",
1484 basetype, current_class_type);
41efda8f 1485 else
c3115fd2
MM
1486 error ("type %qT is not a direct base of %qT",
1487 basetype, current_class_type);
fd74ca0b 1488 return NULL_TREE;
41efda8f 1489 }
d9148cf4
MM
1490
1491 return direct_binfo ? direct_binfo : virtual_binfo;
41efda8f
MM
1492 }
1493 else
1494 {
9dc6f476 1495 if (identifier_p (name))
86ac0575 1496 field = lookup_field (current_class_type, name, 1, false);
2282d28d
MM
1497 else
1498 field = name;
8d08fdba 1499
2282d28d 1500 if (member_init_ok_or_else (field, current_class_type, name))
1f5a253a 1501 return field;
41efda8f 1502 }
fd74ca0b 1503
2282d28d 1504 return NULL_TREE;
8d08fdba
MS
1505}
1506
1507/* This is like `expand_member_init', only it stores one aggregate
1508 value into another.
1509
1510 INIT comes in two flavors: it is either a value which
1511 is to be stored in EXP, or it is a parameter list
1512 to go to a constructor, which will operate on EXP.
f30432d7
MS
1513 If INIT is not a parameter list for a constructor, then set
1514 LOOKUP_ONLYCONVERTING.
6060a796
MS
1515 If FLAGS is LOOKUP_ONLYCONVERTING then it is the = init form of
1516 the initializer, if FLAGS is 0, then it is the (init) form.
8d08fdba 1517 If `init' is a CONSTRUCTOR, then we emit a warning message,
59be0cdd 1518 explaining that such initializations are invalid.
8d08fdba 1519
8d08fdba
MS
1520 If INIT resolves to a CALL_EXPR which happens to return
1521 something of the type we are looking for, then we know
1522 that we can safely use that call to perform the
1523 initialization.
1524
1525 The virtual function table pointer cannot be set up here, because
1526 we do not really know its type.
1527
8d08fdba
MS
1528 This never calls operator=().
1529
1530 When initializing, nothing is CONST.
1531
1532 A default copy constructor may have to be used to perform the
1533 initialization.
1534
1535 A constructor or a conversion operator may have to be used to
e92cc029 1536 perform the initialization, but not both, as it would be ambiguous. */
8d08fdba 1537
f1dedc31 1538tree
5ade1ed2 1539build_aggr_init (tree exp, tree init, int flags, tsubst_flags_t complain)
8d08fdba 1540{
f1dedc31
MM
1541 tree stmt_expr;
1542 tree compound_stmt;
1543 int destroy_temps;
8d08fdba
MS
1544 tree type = TREE_TYPE (exp);
1545 int was_const = TREE_READONLY (exp);
f30432d7 1546 int was_volatile = TREE_THIS_VOLATILE (exp);
2a3398e1 1547 int is_global;
8d08fdba
MS
1548
1549 if (init == error_mark_node)
f1dedc31 1550 return error_mark_node;
8d08fdba
MS
1551
1552 TREE_READONLY (exp) = 0;
f30432d7
MS
1553 TREE_THIS_VOLATILE (exp) = 0;
1554
1ca66f7e
PC
1555 if (init && init != void_type_node
1556 && TREE_CODE (init) != TREE_LIST
e08cc018
JM
1557 && !(TREE_CODE (init) == TARGET_EXPR
1558 && TARGET_EXPR_DIRECT_INIT_P (init))
014397c2 1559 && !DIRECT_LIST_INIT_P (init))
f30432d7 1560 flags |= LOOKUP_ONLYCONVERTING;
8d08fdba
MS
1561
1562 if (TREE_CODE (type) == ARRAY_TYPE)
1563 {
671cb993
MM
1564 tree itype;
1565
92a62aad
MM
1566 /* An array may not be initialized use the parenthesized
1567 initialization form -- unless the initializer is "()". */
1568 if (init && TREE_CODE (init) == TREE_LIST)
8d08fdba 1569 {
5ade1ed2
DG
1570 if (complain & tf_error)
1571 error ("bad array initializer");
f1dedc31 1572 return error_mark_node;
8d08fdba 1573 }
92a62aad
MM
1574 /* Must arrange to initialize each element of EXP
1575 from elements of INIT. */
671cb993 1576 itype = init ? TREE_TYPE (init) : NULL_TREE;
36c37128
JM
1577 if (cv_qualified_p (type))
1578 TREE_TYPE (exp) = cv_unqualified (type);
1579 if (itype && cv_qualified_p (itype))
1580 TREE_TYPE (init) = cv_unqualified (itype);
a48cccea 1581 stmt_expr = build_vec_init (exp, NULL_TREE, init,
844ae01d 1582 /*explicit_value_init_p=*/false,
36c37128 1583 itype && same_type_p (TREE_TYPE (init),
5ade1ed2
DG
1584 TREE_TYPE (exp)),
1585 complain);
8d08fdba 1586 TREE_READONLY (exp) = was_const;
f30432d7 1587 TREE_THIS_VOLATILE (exp) = was_volatile;
8d08fdba 1588 TREE_TYPE (exp) = type;
a47c2f62
JM
1589 /* Restore the type of init unless it was used directly. */
1590 if (init && TREE_CODE (stmt_expr) != INIT_EXPR)
f376e137 1591 TREE_TYPE (init) = itype;
f1dedc31 1592 return stmt_expr;
8d08fdba
MS
1593 }
1594
2a99e5e6
LL
1595 if ((VAR_P (exp) || TREE_CODE (exp) == PARM_DECL)
1596 && !lookup_attribute ("warn_unused", TYPE_ATTRIBUTES (type)))
f4f206f4 1597 /* Just know that we've seen something for this node. */
8d08fdba
MS
1598 TREE_USED (exp) = 1;
1599
2a3398e1 1600 is_global = begin_init_stmts (&stmt_expr, &compound_stmt);
f2c5f623 1601 destroy_temps = stmts_are_full_exprs_p ();
ae499cce 1602 current_stmt_tree ()->stmts_are_full_exprs_p = 0;
8d08fdba 1603 expand_aggr_init_1 (TYPE_BINFO (type), exp, exp,
5ade1ed2 1604 init, LOOKUP_NORMAL|flags, complain);
2a3398e1 1605 stmt_expr = finish_init_stmts (is_global, stmt_expr, compound_stmt);
ae499cce 1606 current_stmt_tree ()->stmts_are_full_exprs_p = destroy_temps;
8d08fdba 1607 TREE_READONLY (exp) = was_const;
f30432d7 1608 TREE_THIS_VOLATILE (exp) = was_volatile;
f1dedc31
MM
1609
1610 return stmt_expr;
8d08fdba
MS
1611}
1612
1613static void
5ade1ed2
DG
1614expand_default_init (tree binfo, tree true_exp, tree exp, tree init, int flags,
1615 tsubst_flags_t complain)
8d08fdba 1616{
fc378698 1617 tree type = TREE_TYPE (exp);
9eb71d8c 1618 tree ctor_name;
fc378698 1619
8d08fdba
MS
1620 /* It fails because there may not be a constructor which takes
1621 its own type as the first (or only parameter), but which does
1622 take other types via a conversion. So, if the thing initializing
1623 the expression is a unit element of type X, first try X(X&),
1624 followed by initialization by X. If neither of these work
1625 out, then look hard. */
1626 tree rval;
9771b263 1627 vec<tree, va_gc> *parms;
8d08fdba 1628
2061820e
JM
1629 /* If we have direct-initialization from an initializer list, pull
1630 it out of the TREE_LIST so the code below can see it. */
1631 if (init && TREE_CODE (init) == TREE_LIST
014397c2 1632 && DIRECT_LIST_INIT_P (TREE_VALUE (init)))
2061820e
JM
1633 {
1634 gcc_checking_assert ((flags & LOOKUP_ONLYCONVERTING) == 0
1635 && TREE_CHAIN (init) == NULL_TREE);
1636 init = TREE_VALUE (init);
1637 }
1638
4c9b3895
JM
1639 if (init && BRACE_ENCLOSED_INITIALIZER_P (init)
1640 && CP_AGGREGATE_TYPE_P (type))
e08cc018
JM
1641 /* A brace-enclosed initializer for an aggregate. In C++0x this can
1642 happen for direct-initialization, too. */
ebcf592c
PC
1643 {
1644 init = reshape_init (type, init, complain);
1645 init = digest_init (type, init, complain);
1646 }
e08cc018
JM
1647
1648 /* A CONSTRUCTOR of the target's type is a previously digested
1649 initializer, whether that happened just above or in
1650 cp_parser_late_parsing_nsdmi.
1651
1652 A TARGET_EXPR with TARGET_EXPR_DIRECT_INIT_P or TARGET_EXPR_LIST_INIT_P
1653 set represents the whole initialization, so we shouldn't build up
1654 another ctor call. */
1655 if (init
1656 && (TREE_CODE (init) == CONSTRUCTOR
1657 || (TREE_CODE (init) == TARGET_EXPR
1658 && (TARGET_EXPR_DIRECT_INIT_P (init)
1659 || TARGET_EXPR_LIST_INIT_P (init))))
1660 && same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (init), type))
4c9b3895 1661 {
e08cc018
JM
1662 /* Early initialization via a TARGET_EXPR only works for
1663 complete objects. */
1664 gcc_assert (TREE_CODE (init) == CONSTRUCTOR || true_exp == exp);
1665
4c9b3895
JM
1666 init = build2 (INIT_EXPR, TREE_TYPE (exp), exp, init);
1667 TREE_SIDE_EFFECTS (init) = 1;
1668 finish_expr_stmt (init);
1669 return;
1670 }
1671
277294d7 1672 if (init && TREE_CODE (init) != TREE_LIST
faf5394a
MS
1673 && (flags & LOOKUP_ONLYCONVERTING))
1674 {
1675 /* Base subobjects should only get direct-initialization. */
8dc2b103 1676 gcc_assert (true_exp == exp);
faf5394a 1677
c37dc68e
JM
1678 if (flags & DIRECT_BIND)
1679 /* Do nothing. We hit this in two cases: Reference initialization,
1680 where we aren't initializing a real variable, so we don't want
1681 to run a new constructor; and catching an exception, where we
1682 have already built up the constructor call so we could wrap it
1683 in an exception region. */;
1684 else
4b978f96
PC
1685 init = ocp_convert (type, init, CONV_IMPLICIT|CONV_FORCE_TEMP,
1686 flags, complain);
faf5394a 1687
4e8dca1c
JM
1688 if (TREE_CODE (init) == MUST_NOT_THROW_EXPR)
1689 /* We need to protect the initialization of a catch parm with a
1690 call to terminate(), which shows up as a MUST_NOT_THROW_EXPR
c7ae64f2 1691 around the TARGET_EXPR for the copy constructor. See
4e8dca1c
JM
1692 initialize_handler_parm. */
1693 {
f293ce4b
RS
1694 TREE_OPERAND (init, 0) = build2 (INIT_EXPR, TREE_TYPE (exp), exp,
1695 TREE_OPERAND (init, 0));
4e8dca1c
JM
1696 TREE_TYPE (init) = void_type_node;
1697 }
c7ae64f2 1698 else
f293ce4b 1699 init = build2 (INIT_EXPR, TREE_TYPE (exp), exp, init);
c7ae64f2 1700 TREE_SIDE_EFFECTS (init) = 1;
f1dedc31 1701 finish_expr_stmt (init);
faf5394a
MS
1702 return;
1703 }
1704
c166b898
ILT
1705 if (init == NULL_TREE)
1706 parms = NULL;
1707 else if (TREE_CODE (init) == TREE_LIST && !TREE_TYPE (init))
8d08fdba 1708 {
c166b898
ILT
1709 parms = make_tree_vector ();
1710 for (; init != NULL_TREE; init = TREE_CHAIN (init))
9771b263 1711 vec_safe_push (parms, TREE_VALUE (init));
8d08fdba 1712 }
8d08fdba 1713 else
c166b898 1714 parms = make_tree_vector_single (init);
8d08fdba 1715
238e471c
VV
1716 if (exp == current_class_ref && current_function_decl
1717 && DECL_HAS_IN_CHARGE_PARM_P (current_function_decl))
1718 {
1719 /* Delegating constructor. */
1720 tree complete;
1721 tree base;
c4ce224c
JM
1722 tree elt; unsigned i;
1723
1724 /* Unshare the arguments for the second call. */
9771b263
DN
1725 vec<tree, va_gc> *parms2 = make_tree_vector ();
1726 FOR_EACH_VEC_SAFE_ELT (parms, i, elt)
c4ce224c
JM
1727 {
1728 elt = break_out_target_exprs (elt);
9771b263 1729 vec_safe_push (parms2, elt);
c4ce224c 1730 }
238e471c 1731 complete = build_special_member_call (exp, complete_ctor_identifier,
c4ce224c
JM
1732 &parms2, binfo, flags,
1733 complain);
1734 complete = fold_build_cleanup_point_expr (void_type_node, complete);
1735 release_tree_vector (parms2);
1736
238e471c
VV
1737 base = build_special_member_call (exp, base_ctor_identifier,
1738 &parms, binfo, flags,
1739 complain);
c4ce224c
JM
1740 base = fold_build_cleanup_point_expr (void_type_node, base);
1741 rval = build3 (COND_EXPR, void_type_node,
1742 build2 (EQ_EXPR, boolean_type_node,
1743 current_in_charge_parm, integer_zero_node),
1744 base,
1745 complete);
238e471c
VV
1746 }
1747 else
1748 {
1749 if (true_exp == exp)
1750 ctor_name = complete_ctor_identifier;
1751 else
1752 ctor_name = base_ctor_identifier;
1753 rval = build_special_member_call (exp, ctor_name, &parms, binfo, flags,
1754 complain);
1755 }
c166b898
ILT
1756
1757 if (parms != NULL)
1758 release_tree_vector (parms);
1759
fa2200cb
JM
1760 if (exp == true_exp && TREE_CODE (rval) == CALL_EXPR)
1761 {
1762 tree fn = get_callee_fndecl (rval);
a76c13bf 1763 if (fn && DECL_DECLARED_CONSTEXPR_P (fn))
fa2200cb 1764 {
3e605b20 1765 tree e = maybe_constant_init (rval, exp);
fa2200cb
JM
1766 if (TREE_CONSTANT (e))
1767 rval = build2 (INIT_EXPR, type, exp, e);
1768 }
1769 }
1770
1771 /* FIXME put back convert_to_void? */
25eb19ff 1772 if (TREE_SIDE_EFFECTS (rval))
fa2200cb 1773 finish_expr_stmt (rval);
8d08fdba
MS
1774}
1775
1776/* This function is responsible for initializing EXP with INIT
1777 (if any).
1778
1779 BINFO is the binfo of the type for who we are performing the
1780 initialization. For example, if W is a virtual base class of A and B,
1781 and C : A, B.
1782 If we are initializing B, then W must contain B's W vtable, whereas
1783 were we initializing C, W must contain C's W vtable.
1784
1785 TRUE_EXP is nonzero if it is the true expression being initialized.
1786 In this case, it may be EXP, or may just contain EXP. The reason we
1787 need this is because if EXP is a base element of TRUE_EXP, we
1788 don't necessarily know by looking at EXP where its virtual
1789 baseclass fields should really be pointing. But we do know
1790 from TRUE_EXP. In constructors, we don't know anything about
1791 the value being initialized.
1792
9f880ef9
MM
1793 FLAGS is just passed to `build_new_method_call'. See that function
1794 for its description. */
8d08fdba
MS
1795
1796static void
5ade1ed2
DG
1797expand_aggr_init_1 (tree binfo, tree true_exp, tree exp, tree init, int flags,
1798 tsubst_flags_t complain)
8d08fdba
MS
1799{
1800 tree type = TREE_TYPE (exp);
8d08fdba 1801
50bc768d 1802 gcc_assert (init != error_mark_node && type != error_mark_node);
38e01f9e 1803 gcc_assert (building_stmt_list_p ());
8d08fdba
MS
1804
1805 /* Use a function returning the desired type to initialize EXP for us.
1806 If the function is a constructor, and its first argument is
1807 NULL_TREE, know that it was meant for us--just slide exp on
1808 in and expand the constructor. Constructors now come
1809 as TARGET_EXPRs. */
faf5394a 1810
5a6ccc94 1811 if (init && VAR_P (exp)
3b2db49f 1812 && COMPOUND_LITERAL_P (init))
faf5394a 1813 {
9771b263 1814 vec<tree, va_gc> *cleanups = NULL;
f1dedc31 1815 /* If store_init_value returns NULL_TREE, the INIT has been
3b2db49f 1816 recorded as the DECL_INITIAL for EXP. That means there's
f1dedc31 1817 nothing more we have to do. */
b25dd954 1818 init = store_init_value (exp, init, &cleanups, flags);
25ebb82a
RH
1819 if (init)
1820 finish_expr_stmt (init);
b25dd954 1821 gcc_assert (!cleanups);
faf5394a
MS
1822 return;
1823 }
1824
fd97a96a
JM
1825 /* If an explicit -- but empty -- initializer list was present,
1826 that's value-initialization. */
1827 if (init == void_type_node)
1828 {
c2b3ec18
JM
1829 /* If the type has data but no user-provided ctor, we need to zero
1830 out the object. */
1831 if (!type_has_user_provided_constructor (type)
1832 && !is_really_empty_class (type))
fd97a96a 1833 {
1fb0b801
JM
1834 tree field_size = NULL_TREE;
1835 if (exp != true_exp && CLASSTYPE_AS_BASE (type) != type)
1836 /* Don't clobber already initialized virtual bases. */
1837 field_size = TYPE_SIZE (CLASSTYPE_AS_BASE (type));
1838 init = build_zero_init_1 (type, NULL_TREE, /*static_storage_p=*/false,
1839 field_size);
fd97a96a
JM
1840 init = build2 (INIT_EXPR, type, exp, init);
1841 finish_expr_stmt (init);
fd97a96a 1842 }
1fb0b801 1843
fd97a96a 1844 /* If we don't need to mess with the constructor at all,
1fb0b801
JM
1845 then we're done. */
1846 if (! type_build_ctor_call (type))
1847 return;
1848
1849 /* Otherwise fall through and call the constructor. */
fd97a96a
JM
1850 init = NULL_TREE;
1851 }
1852
9e9ff709
MS
1853 /* We know that expand_default_init can handle everything we want
1854 at this point. */
5ade1ed2 1855 expand_default_init (binfo, true_exp, exp, init, flags, complain);
8d08fdba
MS
1856}
1857
9e1e64ec 1858/* Report an error if TYPE is not a user-defined, class type. If
be99da77 1859 OR_ELSE is nonzero, give an error message. */
e92cc029 1860
be99da77 1861int
9e1e64ec 1862is_class_type (tree type, int or_else)
be99da77
MS
1863{
1864 if (type == error_mark_node)
1865 return 0;
1866
9e1e64ec 1867 if (! CLASS_TYPE_P (type))
be99da77
MS
1868 {
1869 if (or_else)
9e1e64ec 1870 error ("%qT is not a class type", type);
be99da77
MS
1871 return 0;
1872 }
1873 return 1;
1874}
1875
8d08fdba 1876tree
362efdc1 1877get_type_value (tree name)
8d08fdba 1878{
8d08fdba
MS
1879 if (name == error_mark_node)
1880 return NULL_TREE;
1881
1882 if (IDENTIFIER_HAS_TYPE_VALUE (name))
1883 return IDENTIFIER_TYPE_VALUE (name);
8d08fdba
MS
1884 else
1885 return NULL_TREE;
1886}
051e6fd7 1887
a5ac359a
MM
1888/* Build a reference to a member of an aggregate. This is not a C++
1889 `&', but really something which can have its address taken, and
1890 then act as a pointer to member, for example TYPE :: FIELD can have
1891 its address taken by saying & TYPE :: FIELD. ADDRESS_P is true if
1892 this expression is the operand of "&".
8d08fdba
MS
1893
1894 @@ Prints out lousy diagnostics for operator <typename>
1895 @@ fields.
1896
51c184be 1897 @@ This function should be rewritten and placed in search.c. */
e92cc029 1898
8d08fdba 1899tree
a378996b
PC
1900build_offset_ref (tree type, tree member, bool address_p,
1901 tsubst_flags_t complain)
8d08fdba 1902{
8d245821 1903 tree decl;
fc378698 1904 tree basebinfo = NULL_TREE;
8d08fdba 1905
5f311aec 1906 /* class templates can come in as TEMPLATE_DECLs here. */
d4f0f205
MM
1907 if (TREE_CODE (member) == TEMPLATE_DECL)
1908 return member;
93cdc044 1909
627bc938
JM
1910 if (dependent_scope_p (type) || type_dependent_expression_p (member))
1911 return build_qualified_name (NULL_TREE, type, member,
2d660b7f 1912 /*template_p=*/false);
5566b478 1913
d4f0f205 1914 gcc_assert (TYPE_P (type));
9e1e64ec 1915 if (! is_class_type (type, 1))
c833d2be
NS
1916 return error_mark_node;
1917
d4f0f205
MM
1918 gcc_assert (DECL_P (member) || BASELINK_P (member));
1919 /* Callers should call mark_used before this point. */
3146f36f 1920 gcc_assert (!DECL_P (member) || TREE_USED (member));
be99da77 1921
627bc938 1922 type = TYPE_MAIN_VARIANT (type);
01628e54 1923 if (!COMPLETE_OR_OPEN_TYPE_P (complete_type (type)))
8d08fdba 1924 {
a378996b
PC
1925 if (complain & tf_error)
1926 error ("incomplete type %qT does not have member %qD", type, member);
a5ac359a
MM
1927 return error_mark_node;
1928 }
1929
d4f0f205 1930 /* Entities other than non-static members need no further
3db45ab5 1931 processing. */
a5ac359a 1932 if (TREE_CODE (member) == TYPE_DECL)
d4f0f205 1933 return member;
5a6ccc94 1934 if (VAR_P (member) || TREE_CODE (member) == CONST_DECL)
d4f0f205 1935 return convert_from_reference (member);
a5ac359a
MM
1936
1937 if (TREE_CODE (member) == FIELD_DECL && DECL_C_BIT_FIELD (member))
1938 {
a378996b
PC
1939 if (complain & tf_error)
1940 error ("invalid pointer to bit-field %qD", member);
a5ac359a
MM
1941 return error_mark_node;
1942 }
1943
d4f0f205
MM
1944 /* Set up BASEBINFO for member lookup. */
1945 decl = maybe_dummy_object (type, &basebinfo);
1946
aa52c1ff 1947 /* A lot of this logic is now handled in lookup_member. */
a5ac359a 1948 if (BASELINK_P (member))
8d08fdba 1949 {
8d08fdba 1950 /* Go from the TREE_BASELINK to the member function info. */
7304fcb4 1951 tree t = BASELINK_FUNCTIONS (member);
8d08fdba 1952
50ad9642 1953 if (TREE_CODE (t) != TEMPLATE_ID_EXPR && !really_overloaded_fn (t))
8d08fdba 1954 {
f4f206f4 1955 /* Get rid of a potential OVERLOAD around it. */
2c73f9f5
ML
1956 t = OVL_CURRENT (t);
1957
b54f5338
KL
1958 /* Unique functions are handled easily. */
1959
1960 /* For non-static member of base class, we need a special rule
1961 for access checking [class.protected]:
1962
1963 If the access is to form a pointer to member, the
1964 nested-name-specifier shall name the derived class
1965 (or any class derived from that class). */
1966 if (address_p && DECL_P (t)
1967 && DECL_NONSTATIC_MEMBER_P (t))
0e69fdf0 1968 perform_or_defer_access_check (TYPE_BINFO (type), t, t,
a378996b 1969 complain);
b54f5338 1970 else
0e69fdf0 1971 perform_or_defer_access_check (basebinfo, t, t,
a378996b 1972 complain);
b54f5338 1973
848b92e1
JM
1974 if (DECL_STATIC_FUNCTION_P (t))
1975 return t;
a5ac359a
MM
1976 member = t;
1977 }
1978 else
7304fcb4 1979 TREE_TYPE (member) = unknown_type_node;
8d08fdba 1980 }
b54f5338
KL
1981 else if (address_p && TREE_CODE (member) == FIELD_DECL)
1982 /* We need additional test besides the one in
1983 check_accessibility_of_qualified_id in case it is
1984 a pointer to non-static member. */
0e69fdf0 1985 perform_or_defer_access_check (TYPE_BINFO (type), member, member,
a378996b 1986 complain);
8d08fdba 1987
a5ac359a 1988 if (!address_p)
8d08fdba 1989 {
a5ac359a
MM
1990 /* If MEMBER is non-static, then the program has fallen afoul of
1991 [expr.prim]:
8d08fdba 1992
a5ac359a
MM
1993 An id-expression that denotes a nonstatic data member or
1994 nonstatic member function of a class can only be used:
8d08fdba 1995
a5ac359a
MM
1996 -- as part of a class member access (_expr.ref_) in which the
1997 object-expression refers to the member's class or a class
1998 derived from that class, or
b7484fbe 1999
a5ac359a
MM
2000 -- to form a pointer to member (_expr.unary.op_), or
2001
2002 -- in the body of a nonstatic member function of that class or
2003 of a class derived from that class (_class.mfct.nonstatic_), or
2004
2005 -- in a mem-initializer for a constructor for that class or for
2006 a class derived from that class (_class.base.init_). */
2007 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (member))
2008 {
39a13be5 2009 /* Build a representation of the qualified name suitable
e9525111
MM
2010 for use as the operand to "&" -- even though the "&" is
2011 not actually present. */
f293ce4b 2012 member = build2 (OFFSET_REF, TREE_TYPE (member), decl, member);
a5ac359a
MM
2013 /* In Microsoft mode, treat a non-static member function as if
2014 it were a pointer-to-member. */
2015 if (flag_ms_extensions)
2016 {
a5ac359a 2017 PTRMEM_OK_P (member) = 1;
a378996b 2018 return cp_build_addr_expr (member, complain);
a5ac359a 2019 }
a378996b
PC
2020 if (complain & tf_error)
2021 error ("invalid use of non-static member function %qD",
2022 TREE_OPERAND (member, 1));
07471dfb 2023 return error_mark_node;
a5ac359a
MM
2024 }
2025 else if (TREE_CODE (member) == FIELD_DECL)
2026 {
a378996b
PC
2027 if (complain & tf_error)
2028 error ("invalid use of non-static data member %qD", member);
a5ac359a
MM
2029 return error_mark_node;
2030 }
2031 return member;
2032 }
8d08fdba 2033
f293ce4b 2034 member = build2 (OFFSET_REF, TREE_TYPE (member), decl, member);
8d245821
MM
2035 PTRMEM_OK_P (member) = 1;
2036 return member;
8d08fdba
MS
2037}
2038
393e756d
MM
2039/* If DECL is a scalar enumeration constant or variable with a
2040 constant initializer, return the initializer (or, its initializers,
69eb4fde
JM
2041 recursively); otherwise, return DECL. If STRICT_P, the
2042 initializer is only returned if DECL is a
90454da1
PC
2043 constant-expression. If RETURN_AGGREGATE_CST_OK_P, it is ok to
2044 return an aggregate constant. */
8d08fdba 2045
393e756d 2046static tree
69eb4fde 2047constant_value_1 (tree decl, bool strict_p, bool return_aggregate_cst_ok_p)
8d08fdba 2048{
f513e31f 2049 while (TREE_CODE (decl) == CONST_DECL
69eb4fde 2050 || (strict_p
fa2200cb 2051 ? decl_constant_var_p (decl)
5a6ccc94 2052 : (VAR_P (decl)
393e756d 2053 && CP_TYPE_CONST_NON_VOLATILE_P (TREE_TYPE (decl)))))
b794e321
MM
2054 {
2055 tree init;
fa2200cb
JM
2056 /* If DECL is a static data member in a template
2057 specialization, we must instantiate it here. The
2058 initializer for the static data member is not processed
2059 until needed; we need it now. */
fd5c817a 2060 mark_used (decl, tf_none);
fa2200cb
JM
2061 mark_rvalue_use (decl);
2062 init = DECL_INITIAL (decl);
d174af6c 2063 if (init == error_mark_node)
88274c4d
JM
2064 {
2065 if (DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl))
2066 /* Treat the error as a constant to avoid cascading errors on
2067 excessively recursive template instantiation (c++/9335). */
2068 return init;
2069 else
2070 return decl;
2071 }
73ce7fcb
JJ
2072 /* Initializers in templates are generally expanded during
2073 instantiation, so before that for const int i(2)
2074 INIT is a TREE_LIST with the actual initializer as
2075 TREE_VALUE. */
2076 if (processing_template_decl
2077 && init
2078 && TREE_CODE (init) == TREE_LIST
2079 && TREE_CHAIN (init) == NULL_TREE)
2080 init = TREE_VALUE (init);
d174af6c 2081 if (!init
b794e321 2082 || !TREE_TYPE (init)
8152661b 2083 || !TREE_CONSTANT (init)
69eb4fde 2084 || (!return_aggregate_cst_ok_p
90454da1
PC
2085 /* Unless RETURN_AGGREGATE_CST_OK_P is true, do not
2086 return an aggregate constant (of which string
2087 literals are a special case), as we do not want
2088 to make inadvertent copies of such entities, and
2089 we must be sure that their addresses are the
2090 same everywhere. */
8152661b
JM
2091 && (TREE_CODE (init) == CONSTRUCTOR
2092 || TREE_CODE (init) == STRING_CST)))
b794e321 2093 break;
57b37fe3 2094 decl = unshare_expr (init);
b794e321 2095 }
8a784e4a
NS
2096 return decl;
2097}
a1652802 2098
69eb4fde
JM
2099/* If DECL is a CONST_DECL, or a constant VAR_DECL initialized by constant
2100 of integral or enumeration type, or a constexpr variable of scalar type,
2101 then return that value. These are those variables permitted in constant
2102 expressions by [5.19/1]. */
a1652802 2103
8a784e4a 2104tree
69eb4fde 2105scalar_constant_value (tree decl)
8a784e4a 2106{
69eb4fde 2107 return constant_value_1 (decl, /*strict_p=*/true,
90454da1 2108 /*return_aggregate_cst_ok_p=*/false);
393e756d 2109}
c8094d83 2110
69eb4fde 2111/* Like scalar_constant_value, but can also return aggregate initializers. */
393e756d
MM
2112
2113tree
69eb4fde 2114decl_really_constant_value (tree decl)
393e756d 2115{
69eb4fde 2116 return constant_value_1 (decl, /*strict_p=*/true,
90454da1
PC
2117 /*return_aggregate_cst_ok_p=*/true);
2118}
2119
69eb4fde
JM
2120/* A more relaxed version of scalar_constant_value, used by the
2121 common C/C++ code. */
90454da1
PC
2122
2123tree
69eb4fde 2124decl_constant_value (tree decl)
90454da1 2125{
69eb4fde
JM
2126 return constant_value_1 (decl, /*strict_p=*/processing_template_decl,
2127 /*return_aggregate_cst_ok_p=*/true);
8d08fdba
MS
2128}
2129\f
8d08fdba 2130/* Common subroutines of build_new and build_vec_delete. */
8d08fdba 2131\f
63c9a190
MM
2132/* Build and return a NEW_EXPR. If NELTS is non-NULL, TYPE[NELTS] is
2133 the type of the object being allocated; otherwise, it's just TYPE.
2134 INIT is the initializer, if any. USE_GLOBAL_NEW is true if the
2135 user explicitly wrote "::operator new". PLACEMENT, if non-NULL, is
c166b898
ILT
2136 a vector of arguments to be provided as arguments to a placement
2137 new operator. This routine performs no semantic checks; it just
2138 creates and returns a NEW_EXPR. */
a0d5fba7 2139
63c9a190 2140static tree
9771b263
DN
2141build_raw_new_expr (vec<tree, va_gc> *placement, tree type, tree nelts,
2142 vec<tree, va_gc> *init, int use_global_new)
743f140d 2143{
c166b898 2144 tree init_list;
63c9a190 2145 tree new_expr;
3db45ab5 2146
c166b898
ILT
2147 /* If INIT is NULL, the we want to store NULL_TREE in the NEW_EXPR.
2148 If INIT is not NULL, then we want to store VOID_ZERO_NODE. This
2149 permits us to distinguish the case of a missing initializer "new
2150 int" from an empty initializer "new int()". */
2151 if (init == NULL)
2152 init_list = NULL_TREE;
9771b263 2153 else if (init->is_empty ())
632f2871 2154 init_list = void_node;
c166b898
ILT
2155 else
2156 init_list = build_tree_list_vec (init);
2157
2158 new_expr = build4 (NEW_EXPR, build_pointer_type (type),
2159 build_tree_list_vec (placement), type, nelts,
2160 init_list);
63c9a190
MM
2161 NEW_EXPR_USE_GLOBAL (new_expr) = use_global_new;
2162 TREE_SIDE_EFFECTS (new_expr) = 1;
2163
2164 return new_expr;
743f140d
PB
2165}
2166
9d809e8f
FC
2167/* Diagnose uninitialized const members or reference members of type
2168 TYPE. USING_NEW is used to disambiguate the diagnostic between a
40bb78ad
FC
2169 new expression without a new-initializer and a declaration. Returns
2170 the error count. */
9d809e8f 2171
40bb78ad 2172static int
9d809e8f 2173diagnose_uninitialized_cst_or_ref_member_1 (tree type, tree origin,
40bb78ad 2174 bool using_new, bool complain)
9d809e8f
FC
2175{
2176 tree field;
40bb78ad 2177 int error_count = 0;
9d809e8f 2178
10ab8f62 2179 if (type_has_user_provided_constructor (type))
40bb78ad 2180 return 0;
10ab8f62 2181
910ad8de 2182 for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
9d809e8f
FC
2183 {
2184 tree field_type;
2185
2186 if (TREE_CODE (field) != FIELD_DECL)
2187 continue;
2188
2189 field_type = strip_array_types (TREE_TYPE (field));
2190
1c682d06
FC
2191 if (type_has_user_provided_constructor (field_type))
2192 continue;
2193
9d809e8f
FC
2194 if (TREE_CODE (field_type) == REFERENCE_TYPE)
2195 {
40bb78ad
FC
2196 ++ error_count;
2197 if (complain)
2198 {
0e02d8e3
PC
2199 if (DECL_CONTEXT (field) == origin)
2200 {
2201 if (using_new)
2202 error ("uninitialized reference member in %q#T "
2203 "using %<new%> without new-initializer", origin);
2204 else
2205 error ("uninitialized reference member in %q#T", origin);
2206 }
40bb78ad 2207 else
0e02d8e3
PC
2208 {
2209 if (using_new)
2210 error ("uninitialized reference member in base %q#T "
2211 "of %q#T using %<new%> without new-initializer",
2212 DECL_CONTEXT (field), origin);
2213 else
2214 error ("uninitialized reference member in base %q#T "
2215 "of %q#T", DECL_CONTEXT (field), origin);
2216 }
40bb78ad 2217 inform (DECL_SOURCE_LOCATION (field),
816551fe 2218 "%q#D should be initialized", field);
40bb78ad 2219 }
9d809e8f
FC
2220 }
2221
2222 if (CP_TYPE_CONST_P (field_type))
2223 {
40bb78ad
FC
2224 ++ error_count;
2225 if (complain)
2226 {
0e02d8e3
PC
2227 if (DECL_CONTEXT (field) == origin)
2228 {
2229 if (using_new)
2230 error ("uninitialized const member in %q#T "
2231 "using %<new%> without new-initializer", origin);
2232 else
2233 error ("uninitialized const member in %q#T", origin);
2234 }
40bb78ad 2235 else
0e02d8e3
PC
2236 {
2237 if (using_new)
2238 error ("uninitialized const member in base %q#T "
2239 "of %q#T using %<new%> without new-initializer",
2240 DECL_CONTEXT (field), origin);
2241 else
2242 error ("uninitialized const member in base %q#T "
2243 "of %q#T", DECL_CONTEXT (field), origin);
2244 }
40bb78ad 2245 inform (DECL_SOURCE_LOCATION (field),
816551fe 2246 "%q#D should be initialized", field);
40bb78ad 2247 }
9d809e8f
FC
2248 }
2249
2250 if (CLASS_TYPE_P (field_type))
40bb78ad
FC
2251 error_count
2252 += diagnose_uninitialized_cst_or_ref_member_1 (field_type, origin,
2253 using_new, complain);
9d809e8f 2254 }
40bb78ad 2255 return error_count;
9d809e8f
FC
2256}
2257
40bb78ad
FC
2258int
2259diagnose_uninitialized_cst_or_ref_member (tree type, bool using_new, bool complain)
9d809e8f 2260{
40bb78ad 2261 return diagnose_uninitialized_cst_or_ref_member_1 (type, type, using_new, complain);
9d809e8f
FC
2262}
2263
7d5e76c8
JM
2264/* Call __cxa_bad_array_new_length to indicate that the size calculation
2265 overflowed. Pretend it returns sizetype so that it plays nicely in the
2266 COND_EXPR. */
2267
2268tree
2269throw_bad_array_new_length (void)
2270{
2271 tree fn = get_identifier ("__cxa_throw_bad_array_new_length");
2272 if (!get_global_value_if_present (fn, &fn))
2273 fn = push_throw_library_fn (fn, build_function_type_list (sizetype,
2274 NULL_TREE));
2275
2276 return build_cxx_call (fn, 0, NULL, tf_warning_or_error);
2277}
2278
e2f5cc96
MS
2279/* Attempt to verify that the argument, OPER, of a placement new expression
2280 refers to an object sufficiently large for an object of TYPE or an array
2281 of NELTS of such objects when NELTS is non-null, and issue a warning when
2282 it does not. SIZE specifies the size needed to construct the object or
2283 array and captures the result of NELTS * sizeof (TYPE). (SIZE could be
2284 greater when the array under construction requires a cookie to store
2285 NELTS. GCC's placement new expression stores the cookie when invoking
2286 a user-defined placement new operator function but not the default one.
2287 Placement new expressions with user-defined placement new operator are
2288 not diagnosed since we don't know how they use the buffer (this could
2289 be a future extension). */
2290static void
2291warn_placement_new_too_small (tree type, tree nelts, tree size, tree oper)
2292{
2293 location_t loc = EXPR_LOC_OR_LOC (oper, input_location);
2294
2295 /* The number of bytes to add to or subtract from the size of the provided
2296 buffer based on an offset into an array or an array element reference.
2297 Although intermediate results may be negative (as in a[3] - 2) the final
2298 result cannot be. */
2299 HOST_WIDE_INT adjust = 0;
2300 /* True when the size of the entire destination object should be used
2301 to compute the possibly optimistic estimate of the available space. */
2302 bool use_obj_size = false;
2303 /* True when the reference to the destination buffer is an ADDR_EXPR. */
2304 bool addr_expr = false;
2305
2306 STRIP_NOPS (oper);
2307
2308 /* Using a function argument or a (non-array) variable as an argument
2309 to placement new is not checked since it's unknown what it might
2310 point to. */
2311 if (TREE_CODE (oper) == PARM_DECL
2312 || TREE_CODE (oper) == VAR_DECL
2313 || TREE_CODE (oper) == COMPONENT_REF)
2314 return;
2315
2316 /* Evaluate any constant expressions. */
2317 size = fold_non_dependent_expr (size);
2318
2319 /* Handle the common case of array + offset expression when the offset
2320 is a constant. */
2321 if (TREE_CODE (oper) == POINTER_PLUS_EXPR)
2322 {
2323 /* If the offset is comple-time constant, use it to compute a more
eb11eb15
MS
2324 accurate estimate of the size of the buffer. Since the operand
2325 of POINTER_PLUS_EXPR is represented as an unsigned type, convert
2326 it to signed first.
2327 Otherwise, use the size of the entire array as an optimistic
2328 estimate (this may lead to false negatives). */
2329 tree adj = TREE_OPERAND (oper, 1);
e2f5cc96 2330 if (CONSTANT_CLASS_P (adj))
eb11eb15 2331 adjust += tree_to_shwi (convert (ssizetype, adj));
e2f5cc96
MS
2332 else
2333 use_obj_size = true;
2334
2335 oper = TREE_OPERAND (oper, 0);
2336
2337 STRIP_NOPS (oper);
2338 }
2339
2340 if (TREE_CODE (oper) == TARGET_EXPR)
2341 oper = TREE_OPERAND (oper, 1);
2342 else if (TREE_CODE (oper) == ADDR_EXPR)
2343 {
2344 addr_expr = true;
2345 oper = TREE_OPERAND (oper, 0);
2346 }
2347
2348 STRIP_NOPS (oper);
2349
2350 if (TREE_CODE (oper) == ARRAY_REF)
2351 {
2352 /* Similar to the offset computed above, see if the array index
2353 is a compile-time constant. If so, and unless the offset was
2354 not a compile-time constant, use the index to determine the
2355 size of the buffer. Otherwise, use the entire array as
2356 an optimistic estimate of the size. */
2357 const_tree adj = TREE_OPERAND (oper, 1);
2358 if (!use_obj_size && CONSTANT_CLASS_P (adj))
2359 adjust += tree_to_shwi (adj);
2360 else
2361 {
2362 use_obj_size = true;
2363 adjust = 0;
2364 }
2365
2366 oper = TREE_OPERAND (oper, 0);
2367 }
2368
2369 /* Descend into a struct or union to find the member whose address
2370 is being used as the agument. */
2371 while (TREE_CODE (oper) == COMPONENT_REF)
2372 oper = TREE_OPERAND (oper, 1);
2373
2374 if ((addr_expr || !POINTER_TYPE_P (TREE_TYPE (oper)))
2375 && (TREE_CODE (oper) == VAR_DECL
2376 || TREE_CODE (oper) == FIELD_DECL
2377 || TREE_CODE (oper) == PARM_DECL))
2378 {
2379 /* A possibly optimistic estimate of the number of bytes available
2380 in the destination buffer. */
2381 unsigned HOST_WIDE_INT bytes_avail;
2382 /* True when the estimate above is in fact the exact size
2383 of the destination buffer rather than an estimate. */
2384 bool exact_size = true;
2385
2386 /* Treat members of unions and members of structs uniformly, even
2387 though the size of a member of a union may be viewed as extending
2388 to the end of the union itself (it is by __builtin_object_size). */
906f9ad9
MS
2389 if ((TREE_CODE (oper) == VAR_DECL || use_obj_size)
2390 && DECL_SIZE_UNIT (oper))
e2f5cc96
MS
2391 {
2392 /* Use the size of the entire array object when the expression
2393 refers to a variable or its size depends on an expression
2394 that's not a compile-time constant. */
906f9ad9 2395 bytes_avail = tree_to_uhwi (DECL_SIZE_UNIT (oper));
e2f5cc96
MS
2396 exact_size = !use_obj_size;
2397 }
906f9ad9 2398 else if (TYPE_SIZE_UNIT (TREE_TYPE (oper)))
e2f5cc96
MS
2399 {
2400 /* Use the size of the type of the destination buffer object
2401 as the optimistic estimate of the available space in it. */
2402 bytes_avail = tree_to_uhwi (TYPE_SIZE_UNIT (TREE_TYPE (oper)));
2403 }
906f9ad9
MS
2404 else
2405 {
2406 /* Bail if neither the size of the object nor its type is known. */
2407 return;
2408 }
e2f5cc96
MS
2409
2410 /* Avoid diagnosing flexible array members (accepted as an extension
2411 and diagnosed with -Wpedantic).
2412 Constructing objects that appear to overflow the C99 equivalent of
2413 flexible array members (i.e., array members of size zero or one)
2414 are diagnosed in C++ since their declaration cannot be diagnosed. */
2415 if (bytes_avail == 0 && TREE_CODE (TREE_TYPE (oper)) == ARRAY_TYPE)
2416 return;
2417
2418 /* The size of the buffer can only be adjusted down but not up. */
2419 gcc_checking_assert (0 <= adjust);
2420
2421 /* Reduce the size of the buffer by the adjustment computed above
2422 from the offset and/or the index into the array. */
2423 if (bytes_avail < static_cast<unsigned HOST_WIDE_INT>(adjust))
2424 bytes_avail = 0;
2425 else
2426 bytes_avail -= adjust;
2427
2428 /* The minimum amount of space needed for the allocation. This
2429 is an optimistic estimate that makes it possible to detect
2430 placement new invocation for some undersize buffers but not
2431 others. */
2432 unsigned HOST_WIDE_INT bytes_need;
2433
2434 if (CONSTANT_CLASS_P (size))
2435 bytes_need = tree_to_uhwi (size);
2436 else if (nelts && CONSTANT_CLASS_P (nelts))
2437 bytes_need = tree_to_uhwi (nelts)
2438 * tree_to_uhwi (TYPE_SIZE_UNIT (type));
2439 else
2440 bytes_need = tree_to_uhwi (TYPE_SIZE_UNIT (type));
2441
2442 if (bytes_avail < bytes_need)
2443 {
2444 if (nelts)
2445 if (CONSTANT_CLASS_P (nelts))
2446 warning_at (loc, OPT_Wplacement_new,
2447 exact_size ?
2448 "placement new constructing an object of type "
2449 "%<%T [%wu]%> and size %qwu in a region of type %qT "
2450 "and size %qwi"
2451 : "placement new constructing an object of type "
c047b694 2452 "%<%T [%wu]%> and size %qwu in a region of type %qT "
e2f5cc96
MS
2453 "and size at most %qwu",
2454 type, tree_to_uhwi (nelts), bytes_need,
2455 TREE_TYPE (oper),
2456 bytes_avail);
2457 else
2458 warning_at (loc, OPT_Wplacement_new,
2459 exact_size ?
2460 "placement new constructing an array of objects "
2461 "of type %qT and size %qwu in a region of type %qT "
2462 "and size %qwi"
2463 : "placement new constructing an array of objects "
2464 "of type %qT and size %qwu in a region of type %qT "
2465 "and size at most %qwu",
2466 type, bytes_need, TREE_TYPE (oper),
2467 bytes_avail);
2468 else
2469 warning_at (loc, OPT_Wplacement_new,
2470 exact_size ?
2471 "placement new constructing an object of type %qT "
2472 "and size %qwu in a region of type %qT and size %qwi"
2473 : "placement new constructing an object of type %qT"
2474 "and size %qwu in a region of type %qT and size "
2475 "at most %qwu",
2476 type, bytes_need, TREE_TYPE (oper),
2477 bytes_avail);
2478 }
2479 }
2480}
2481
63c9a190
MM
2482/* Generate code for a new-expression, including calling the "operator
2483 new" function, initializing the object, and, if an exception occurs
2484 during construction, cleaning up. The arguments are as for
c166b898 2485 build_raw_new_expr. This may change PLACEMENT and INIT. */
a0d5fba7 2486
834c6dff 2487static tree
9771b263
DN
2488build_new_1 (vec<tree, va_gc> **placement, tree type, tree nelts,
2489 vec<tree, va_gc> **init, bool globally_qualified_p,
c166b898 2490 tsubst_flags_t complain)
a0d5fba7 2491{
d746e87d
MM
2492 tree size, rval;
2493 /* True iff this is a call to "operator new[]" instead of just
c8094d83 2494 "operator new". */
d746e87d 2495 bool array_p = false;
9207099b
JM
2496 /* If ARRAY_P is true, the element type of the array. This is never
2497 an ARRAY_TYPE; for something like "new int[3][4]", the
d746e87d 2498 ELT_TYPE is "int". If ARRAY_P is false, this is the same type as
9207099b 2499 TYPE. */
d746e87d 2500 tree elt_type;
f4f4610e
MM
2501 /* The type of the new-expression. (This type is always a pointer
2502 type.) */
2503 tree pointer_type;
25357d1e 2504 tree non_const_pointer_type;
a48cccea 2505 tree outer_nelts = NULL_TREE;
4a84253c
FW
2506 /* For arrays, a bounds checks on the NELTS parameter. */
2507 tree outer_nelts_check = NULL_TREE;
4ebc46e9 2508 bool outer_nelts_from_type = false;
807e902e 2509 offset_int inner_nelts_count = 1;
f4f4610e 2510 tree alloc_call, alloc_expr;
92d38f38 2511 /* Size of the inner array elements. */
807e902e 2512 offset_int inner_size;
f4f4610e
MM
2513 /* The address returned by the call to "operator new". This node is
2514 a VAR_DECL and is therefore reusable. */
2515 tree alloc_node;
46ff5047 2516 tree alloc_fn;
8b5e2ce4 2517 tree cookie_expr, init_expr;
089d6ea7 2518 int nothrow, check_new;
743f140d 2519 int use_java_new = 0;
834c6dff
MM
2520 /* If non-NULL, the number of extra bytes to allocate at the
2521 beginning of the storage allocated for an array-new expression in
2522 order to store the number of elements. */
2523 tree cookie_size = NULL_TREE;
c166b898 2524 tree placement_first;
a9de800a 2525 tree placement_expr = NULL_TREE;
3f41ffd8
MM
2526 /* True if the function we are calling is a placement allocation
2527 function. */
2528 bool placement_allocation_fn_p;
f4f4610e 2529 /* True if the storage must be initialized, either by a constructor
34cd5ae7 2530 or due to an explicit new-initializer. */
f4f4610e
MM
2531 bool is_initialized;
2532 /* The address of the thing allocated, not including any cookie. In
2533 particular, if an array cookie is in use, DATA_ADDR is the
2534 address of the first array element. This node is a VAR_DECL, and
2535 is therefore reusable. */
2536 tree data_addr;
6de9cd9a 2537 tree init_preeval_expr = NULL_TREE;
b75bf8b1 2538 tree orig_type = type;
a0d5fba7 2539
058b15c1 2540 if (nelts)
a0d5fba7 2541 {
058b15c1 2542 outer_nelts = nelts;
d746e87d 2543 array_p = true;
a0d5fba7 2544 }
9207099b 2545 else if (TREE_CODE (type) == ARRAY_TYPE)
d746e87d 2546 {
4ebc46e9
FW
2547 /* Transforms new (T[N]) to new T[N]. The former is a GNU
2548 extension for variable N. (This also covers new T where T is
2549 a VLA typedef.) */
9207099b
JM
2550 array_p = true;
2551 nelts = array_type_nelts_top (type);
2552 outer_nelts = nelts;
2553 type = TREE_TYPE (type);
4ebc46e9 2554 outer_nelts_from_type = true;
d746e87d 2555 }
834c6dff 2556
8d08fdba
MS
2557 /* If our base type is an array, then make sure we know how many elements
2558 it has. */
d746e87d
MM
2559 for (elt_type = type;
2560 TREE_CODE (elt_type) == ARRAY_TYPE;
2561 elt_type = TREE_TYPE (elt_type))
4ebc46e9
FW
2562 {
2563 tree inner_nelts = array_type_nelts_top (elt_type);
2564 tree inner_nelts_cst = maybe_constant_value (inner_nelts);
e1f10dd9 2565 if (TREE_CODE (inner_nelts_cst) == INTEGER_CST)
4a84253c 2566 {
9be0ac8c 2567 bool overflow;
807e902e
KZ
2568 offset_int result = wi::mul (wi::to_offset (inner_nelts_cst),
2569 inner_nelts_count, SIGNED, &overflow);
9be0ac8c 2570 if (overflow)
4a84253c
FW
2571 {
2572 if (complain & tf_error)
2573 error ("integer overflow in array size");
2574 nelts = error_mark_node;
2575 }
2576 inner_nelts_count = result;
2577 }
2578 else
4ebc46e9
FW
2579 {
2580 if (complain & tf_error)
2581 {
8400e75e 2582 error_at (EXPR_LOC_OR_LOC (inner_nelts, input_location),
b75bf8b1 2583 "array size in new-expression must be constant");
4ebc46e9
FW
2584 cxx_constant_value(inner_nelts);
2585 }
2586 nelts = error_mark_node;
2587 }
2588 if (nelts != error_mark_node)
2589 nelts = cp_build_binary_op (input_location,
2590 MULT_EXPR, nelts,
2591 inner_nelts_cst,
2592 complain);
2593 }
2594
2595 if (variably_modified_type_p (elt_type, NULL_TREE) && (complain & tf_error))
2596 {
b75bf8b1 2597 error ("variably modified type not allowed in new-expression");
4ebc46e9
FW
2598 return error_mark_node;
2599 }
2600
2601 if (nelts == error_mark_node)
2602 return error_mark_node;
2603
2604 /* Warn if we performed the (T[N]) to T[N] transformation and N is
2605 variable. */
2606 if (outer_nelts_from_type
2607 && !TREE_CONSTANT (maybe_constant_value (outer_nelts)))
2608 {
2609 if (complain & tf_warning_or_error)
b75bf8b1
JM
2610 {
2611 const char *msg;
2612 if (typedef_variant_p (orig_type))
2613 msg = ("non-constant array new length must be specified "
2614 "directly, not by typedef");
2615 else
2616 msg = ("non-constant array new length must be specified "
2617 "without parentheses around the type-id");
2618 pedwarn (EXPR_LOC_OR_LOC (outer_nelts, input_location),
2619 OPT_Wvla, msg);
2620 }
4ebc46e9
FW
2621 else
2622 return error_mark_node;
2623 }
5566b478 2624
50e10fa8 2625 if (VOID_TYPE_P (elt_type))
e1cd6e56 2626 {
5ade1ed2
DG
2627 if (complain & tf_error)
2628 error ("invalid type %<void%> for new");
e1cd6e56
MS
2629 return error_mark_node;
2630 }
2631
2df663cc 2632 if (abstract_virtuals_error_sfinae (ACU_NEW, elt_type, complain))
a7a64a77 2633 return error_mark_node;
8926095f 2634
95552437 2635 is_initialized = (type_build_ctor_call (elt_type) || *init != NULL);
b87d79e6 2636
eca7fc57 2637 if (*init == NULL && cxx_dialect < cxx11)
9d809e8f 2638 {
40bb78ad 2639 bool maybe_uninitialized_error = false;
9d809e8f
FC
2640 /* A program that calls for default-initialization [...] of an
2641 entity of reference type is ill-formed. */
2642 if (CLASSTYPE_REF_FIELDS_NEED_INIT (elt_type))
40bb78ad 2643 maybe_uninitialized_error = true;
9d809e8f
FC
2644
2645 /* A new-expression that creates an object of type T initializes
2646 that object as follows:
2647 - If the new-initializer is omitted:
2648 -- If T is a (possibly cv-qualified) non-POD class type
2649 (or array thereof), the object is default-initialized (8.5).
2650 [...]
2651 -- Otherwise, the object created has indeterminate
2652 value. If T is a const-qualified type, or a (possibly
2653 cv-qualified) POD class type (or array thereof)
2654 containing (directly or indirectly) a member of
2655 const-qualified type, the program is ill-formed; */
2656
2657 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (elt_type))
40bb78ad 2658 maybe_uninitialized_error = true;
9d809e8f 2659
40bb78ad
FC
2660 if (maybe_uninitialized_error
2661 && diagnose_uninitialized_cst_or_ref_member (elt_type,
2662 /*using_new=*/true,
2663 complain & tf_error))
2664 return error_mark_node;
9d809e8f
FC
2665 }
2666
c166b898 2667 if (CP_TYPE_CONST_P (elt_type) && *init == NULL
6132bdd7 2668 && default_init_uninitialized_part (elt_type))
f4f4610e 2669 {
5ade1ed2
DG
2670 if (complain & tf_error)
2671 error ("uninitialized const in %<new%> of %q#T", elt_type);
f4f4610e
MM
2672 return error_mark_node;
2673 }
2674
d746e87d
MM
2675 size = size_in_bytes (elt_type);
2676 if (array_p)
4a84253c
FW
2677 {
2678 /* Maximum available size in bytes. Half of the address space
2679 minus the cookie size. */
807e902e
KZ
2680 offset_int max_size
2681 = wi::set_bit_in_zero <offset_int> (TYPE_PRECISION (sizetype) - 1);
4a84253c 2682 /* Maximum number of outer elements which can be allocated. */
807e902e 2683 offset_int max_outer_nelts;
4a84253c
FW
2684 tree max_outer_nelts_tree;
2685
2686 gcc_assert (TREE_CODE (size) == INTEGER_CST);
2687 cookie_size = targetm.cxx.get_cookie_size (elt_type);
2688 gcc_assert (TREE_CODE (cookie_size) == INTEGER_CST);
807e902e 2689 gcc_checking_assert (wi::ltu_p (wi::to_offset (cookie_size), max_size));
c65cb8d1 2690 /* Unconditionally subtract the cookie size. This decreases the
4a84253c
FW
2691 maximum object size and is safe even if we choose not to use
2692 a cookie after all. */
807e902e 2693 max_size -= wi::to_offset (cookie_size);
9be0ac8c 2694 bool overflow;
807e902e
KZ
2695 inner_size = wi::mul (wi::to_offset (size), inner_nelts_count, SIGNED,
2696 &overflow);
2697 if (overflow || wi::gtu_p (inner_size, max_size))
4a84253c
FW
2698 {
2699 if (complain & tf_error)
2700 error ("size of array is too large");
2701 return error_mark_node;
2702 }
807e902e
KZ
2703
2704 max_outer_nelts = wi::udiv_trunc (max_size, inner_size);
4a84253c
FW
2705 /* Only keep the top-most seven bits, to simplify encoding the
2706 constant in the instruction stream. */
2707 {
807e902e
KZ
2708 unsigned shift = (max_outer_nelts.get_precision ()) - 7
2709 - wi::clz (max_outer_nelts);
2710 max_outer_nelts = wi::lshift (wi::lrshift (max_outer_nelts, shift),
2711 shift);
4a84253c 2712 }
807e902e 2713 max_outer_nelts_tree = wide_int_to_tree (sizetype, max_outer_nelts);
4a84253c
FW
2714
2715 size = size_binop (MULT_EXPR, size, convert (sizetype, nelts));
2716 outer_nelts_check = fold_build2 (LE_EXPR, boolean_type_node,
2717 outer_nelts,
2718 max_outer_nelts_tree);
2719 }
a28e3c7f 2720
63c9a190
MM
2721 alloc_fn = NULL_TREE;
2722
c166b898
ILT
2723 /* If PLACEMENT is a single simple pointer type not passed by
2724 reference, prepare to capture it in a temporary variable. Do
2725 this now, since PLACEMENT will change in the calls below. */
c166b898 2726 placement_first = NULL_TREE;
9771b263 2727 if (vec_safe_length (*placement) == 1
50e10fa8 2728 && (TYPE_PTR_P (TREE_TYPE ((**placement)[0]))))
9771b263 2729 placement_first = (**placement)[0];
c166b898 2730
e2f5cc96
MS
2731 bool member_new_p = false;
2732
e92cc029 2733 /* Allocate the object. */
9771b263 2734 if (vec_safe_is_empty (*placement) && TYPE_FOR_JAVA (elt_type))
743f140d 2735 {
63c9a190 2736 tree class_addr;
71b71b96 2737 tree class_decl;
8b60264b 2738 static const char alloc_name[] = "_Jv_AllocObject";
6de9cd9a 2739
71b71b96
PC
2740 if (!MAYBE_CLASS_TYPE_P (elt_type))
2741 {
2742 error ("%qT isn%'t a valid Java class type", elt_type);
2743 return error_mark_node;
2744 }
2745
2746 class_decl = build_java_class_ref (elt_type);
a3d536f1
VR
2747 if (class_decl == error_mark_node)
2748 return error_mark_node;
2749
743f140d 2750 use_java_new = 1;
c8094d83 2751 if (!get_global_value_if_present (get_identifier (alloc_name),
63c9a190 2752 &alloc_fn))
b1e5b86c 2753 {
5ade1ed2
DG
2754 if (complain & tf_error)
2755 error ("call to Java constructor with %qs undefined", alloc_name);
6961a592
GB
2756 return error_mark_node;
2757 }
63c9a190 2758 else if (really_overloaded_fn (alloc_fn))
b1e5b86c 2759 {
5ade1ed2
DG
2760 if (complain & tf_error)
2761 error ("%qD should never be overloaded", alloc_fn);
6961a592
GB
2762 return error_mark_node;
2763 }
63c9a190 2764 alloc_fn = OVL_CURRENT (alloc_fn);
743f140d 2765 class_addr = build1 (ADDR_EXPR, jclass_node, class_decl);
6998c7ed
NF
2766 alloc_call = cp_build_function_call_nary (alloc_fn, complain,
2767 class_addr, NULL_TREE);
743f140d 2768 }
9e1e64ec 2769 else if (TYPE_FOR_JAVA (elt_type) && MAYBE_CLASS_TYPE_P (elt_type))
360f866c
JJ
2770 {
2771 error ("Java class %q#T object allocated using placement new", elt_type);
2772 return error_mark_node;
2773 }
8d08fdba
MS
2774 else
2775 {
834c6dff 2776 tree fnname;
9f880ef9 2777 tree fns;
834c6dff 2778
d746e87d 2779 fnname = ansi_opname (array_p ? VEC_NEW_EXPR : NEW_EXPR);
834c6dff 2780
e2f5cc96 2781 member_new_p = !globally_qualified_p
d746e87d
MM
2782 && CLASS_TYPE_P (elt_type)
2783 && (array_p
2784 ? TYPE_HAS_ARRAY_NEW_OPERATOR (elt_type)
e2f5cc96
MS
2785 : TYPE_HAS_NEW_OPERATOR (elt_type));
2786
2787 if (member_new_p)
089d6ea7
MM
2788 {
2789 /* Use a class-specific operator new. */
2790 /* If a cookie is required, add some extra space. */
d746e87d 2791 if (array_p && TYPE_VEC_NEW_USES_COOKIE (elt_type))
4a84253c
FW
2792 size = size_binop (PLUS_EXPR, size, cookie_size);
2793 else
92d38f38
FW
2794 {
2795 cookie_size = NULL_TREE;
2796 /* No size arithmetic necessary, so the size check is
2797 not needed. */
807e902e 2798 if (outer_nelts_check != NULL && inner_size == 1)
92d38f38
FW
2799 outer_nelts_check = NULL_TREE;
2800 }
4a84253c 2801 /* Perform the overflow check. */
7d5e76c8 2802 tree errval = TYPE_MAX_VALUE (sizetype);
f391b44b 2803 if (cxx_dialect >= cxx11 && flag_exceptions)
7d5e76c8 2804 errval = throw_bad_array_new_length ();
4a84253c
FW
2805 if (outer_nelts_check != NULL_TREE)
2806 size = fold_build3 (COND_EXPR, sizetype, outer_nelts_check,
7d5e76c8 2807 size, errval);
089d6ea7 2808 /* Create the argument list. */
9771b263 2809 vec_safe_insert (*placement, 0, size);
9f880ef9 2810 /* Do name-lookup to find the appropriate operator. */
d746e87d 2811 fns = lookup_fnfields (elt_type, fnname, /*protect=*/2);
a85cb0d7
VR
2812 if (fns == NULL_TREE)
2813 {
5ade1ed2
DG
2814 if (complain & tf_error)
2815 error ("no suitable %qD found in class %qT", fnname, elt_type);
a85cb0d7
VR
2816 return error_mark_node;
2817 }
9f880ef9
MM
2818 if (TREE_CODE (fns) == TREE_LIST)
2819 {
5ade1ed2
DG
2820 if (complain & tf_error)
2821 {
2822 error ("request for member %qD is ambiguous", fnname);
2823 print_candidates (fns);
2824 }
9f880ef9
MM
2825 return error_mark_node;
2826 }
d746e87d 2827 alloc_call = build_new_method_call (build_dummy_object (elt_type),
c166b898 2828 fns, placement,
9f880ef9 2829 /*conversion_path=*/NULL_TREE,
63c9a190 2830 LOOKUP_NORMAL,
5ade1ed2
DG
2831 &alloc_fn,
2832 complain);
089d6ea7 2833 }
834c6dff 2834 else
089d6ea7
MM
2835 {
2836 /* Use a global operator new. */
125e6594 2837 /* See if a cookie might be required. */
4a84253c 2838 if (!(array_p && TYPE_VEC_NEW_USES_COOKIE (elt_type)))
92d38f38
FW
2839 {
2840 cookie_size = NULL_TREE;
2841 /* No size arithmetic necessary, so the size check is
2842 not needed. */
807e902e 2843 if (outer_nelts_check != NULL && inner_size == 1)
92d38f38
FW
2844 outer_nelts_check = NULL_TREE;
2845 }
125e6594 2846
c8094d83 2847 alloc_call = build_operator_new_call (fnname, placement,
63c9a190 2848 &size, &cookie_size,
4a84253c 2849 outer_nelts_check,
b40e334f 2850 &alloc_fn, complain);
089d6ea7 2851 }
8d08fdba
MS
2852 }
2853
96790071 2854 if (alloc_call == error_mark_node)
2bb5d995
JM
2855 return error_mark_node;
2856
63c9a190
MM
2857 gcc_assert (alloc_fn != NULL_TREE);
2858
c166b898
ILT
2859 /* If we found a simple case of PLACEMENT_EXPR above, then copy it
2860 into a temporary variable. */
a9de800a 2861 if (!processing_template_decl
a9de800a
JJ
2862 && TREE_CODE (alloc_call) == CALL_EXPR
2863 && call_expr_nargs (alloc_call) == 2
2864 && TREE_CODE (TREE_TYPE (CALL_EXPR_ARG (alloc_call, 0))) == INTEGER_TYPE
50e10fa8 2865 && TYPE_PTR_P (TREE_TYPE (CALL_EXPR_ARG (alloc_call, 1))))
a9de800a 2866 {
e2f5cc96 2867 tree placement = CALL_EXPR_ARG (alloc_call, 1);
a9de800a 2868
e2f5cc96
MS
2869 if (placement_first != NULL_TREE
2870 && (INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (TREE_TYPE (placement)))
2871 || VOID_TYPE_P (TREE_TYPE (TREE_TYPE (placement)))))
a9de800a 2872 {
c166b898 2873 placement_expr = get_target_expr (placement_first);
a9de800a 2874 CALL_EXPR_ARG (alloc_call, 1)
e2f5cc96
MS
2875 = convert (TREE_TYPE (placement), placement_expr);
2876 }
2877
2878 if (!member_new_p
2879 && VOID_TYPE_P (TREE_TYPE (TREE_TYPE (CALL_EXPR_ARG (alloc_call, 1)))))
2880 {
2881 /* Attempt to make the warning point at the operator new argument. */
2882 if (placement_first)
2883 placement = placement_first;
2884
2885 warn_placement_new_too_small (orig_type, nelts, size, placement);
a9de800a
JJ
2886 }
2887 }
2888
a6111661
JM
2889 /* In the simple case, we can stop now. */
2890 pointer_type = build_pointer_type (type);
2891 if (!cookie_size && !is_initialized)
4d7a65ea 2892 return build_nop (pointer_type, alloc_call);
a6111661 2893
10ee5386
JM
2894 /* Store the result of the allocation call in a variable so that we can
2895 use it more than once. */
2896 alloc_expr = get_target_expr (alloc_call);
a6111661
JM
2897 alloc_node = TARGET_EXPR_SLOT (alloc_expr);
2898
2899 /* Strip any COMPOUND_EXPRs from ALLOC_CALL. */
c8094d83 2900 while (TREE_CODE (alloc_call) == COMPOUND_EXPR)
a6111661 2901 alloc_call = TREE_OPERAND (alloc_call, 1);
089d6ea7 2902
3f41ffd8
MM
2903 /* Now, check to see if this function is actually a placement
2904 allocation function. This can happen even when PLACEMENT is NULL
2905 because we might have something like:
2906
2907 struct S { void* operator new (size_t, int i = 0); };
2908
2909 A call to `new S' will get this allocation function, even though
2910 there is no explicit placement argument. If there is more than
2911 one argument, or there are variable arguments, then this is a
2912 placement allocation function. */
c8094d83
MS
2913 placement_allocation_fn_p
2914 = (type_num_arguments (TREE_TYPE (alloc_fn)) > 1
46ff5047 2915 || varargs_function_p (alloc_fn));
96790071 2916
a6111661
JM
2917 /* Preevaluate the placement args so that we don't reevaluate them for a
2918 placement delete. */
2919 if (placement_allocation_fn_p)
2920 {
6de9cd9a
DN
2921 tree inits;
2922 stabilize_call (alloc_call, &inits);
a6111661 2923 if (inits)
f293ce4b
RS
2924 alloc_expr = build2 (COMPOUND_EXPR, TREE_TYPE (alloc_expr), inits,
2925 alloc_expr);
a6111661
JM
2926 }
2927
047f64a3
JM
2928 /* unless an allocation function is declared with an empty excep-
2929 tion-specification (_except.spec_), throw(), it indicates failure to
2930 allocate storage by throwing a bad_alloc exception (clause _except_,
2931 _lib.bad.alloc_); it returns a non-null pointer otherwise If the allo-
2932 cation function is declared with an empty exception-specification,
2933 throw(), it returns null to indicate failure to allocate storage and a
2934 non-null pointer otherwise.
2935
2936 So check for a null exception spec on the op new we just called. */
2937
46ff5047 2938 nothrow = TYPE_NOTHROW_P (TREE_TYPE (alloc_fn));
743f140d 2939 check_new = (flag_check_new || nothrow) && ! use_java_new;
047f64a3 2940
089d6ea7 2941 if (cookie_size)
8d08fdba 2942 {
96790071 2943 tree cookie;
46e995e0 2944 tree cookie_ptr;
b5119fa1 2945 tree size_ptr_type;
f4f4610e
MM
2946
2947 /* Adjust so we're pointing to the start of the object. */
5d49b6a7 2948 data_addr = fold_build_pointer_plus (alloc_node, cookie_size);
96790071 2949
834c6dff 2950 /* Store the number of bytes allocated so that we can know how
3461fba7
NS
2951 many elements to destroy later. We use the last sizeof
2952 (size_t) bytes to store the number of elements. */
10ee5386 2953 cookie_ptr = size_binop (MINUS_EXPR, cookie_size, size_in_bytes (sizetype));
5d49b6a7
RG
2954 cookie_ptr = fold_build_pointer_plus_loc (input_location,
2955 alloc_node, cookie_ptr);
b5119fa1 2956 size_ptr_type = build_pointer_type (sizetype);
10ee5386 2957 cookie_ptr = fold_convert (size_ptr_type, cookie_ptr);
dd865ef6 2958 cookie = cp_build_indirect_ref (cookie_ptr, RO_NULL, complain);
1f84ec23 2959
f293ce4b 2960 cookie_expr = build2 (MODIFY_EXPR, sizetype, cookie, nelts);
46e995e0
PB
2961
2962 if (targetm.cxx.cookie_has_size ())
2963 {
2964 /* Also store the element size. */
5d49b6a7 2965 cookie_ptr = fold_build_pointer_plus (cookie_ptr,
db3927fb 2966 fold_build1_loc (input_location,
5d49b6a7
RG
2967 NEGATE_EXPR, sizetype,
2968 size_in_bytes (sizetype)));
b2ec1738 2969
dd865ef6 2970 cookie = cp_build_indirect_ref (cookie_ptr, RO_NULL, complain);
f293ce4b 2971 cookie = build2 (MODIFY_EXPR, sizetype, cookie,
10ee5386 2972 size_in_bytes (elt_type));
f293ce4b
RS
2973 cookie_expr = build2 (COMPOUND_EXPR, TREE_TYPE (cookie_expr),
2974 cookie, cookie_expr);
46e995e0 2975 }
8d08fdba 2976 }
96790071 2977 else
8b5e2ce4
JM
2978 {
2979 cookie_expr = NULL_TREE;
2980 data_addr = alloc_node;
2981 }
8d08fdba 2982
10ee5386 2983 /* Now use a pointer to the type we've actually allocated. */
25357d1e
JM
2984
2985 /* But we want to operate on a non-const version to start with,
2986 since we'll be modifying the elements. */
2987 non_const_pointer_type = build_pointer_type
a3360e77 2988 (cp_build_qualified_type (type, cp_type_quals (type) & ~TYPE_QUAL_CONST));
25357d1e
JM
2989
2990 data_addr = fold_convert (non_const_pointer_type, data_addr);
9207099b 2991 /* Any further uses of alloc_node will want this type, too. */
25357d1e 2992 alloc_node = fold_convert (non_const_pointer_type, alloc_node);
10ee5386 2993
6de9cd9a
DN
2994 /* Now initialize the allocated object. Note that we preevaluate the
2995 initialization expression, apart from the actual constructor call or
2996 assignment--we do this because we want to delay the allocation as long
2997 as possible in order to minimize the size of the exception region for
2998 placement delete. */
f4f4610e 2999 if (is_initialized)
8d08fdba 3000 {
6de9cd9a 3001 bool stable;
844ae01d 3002 bool explicit_value_init_p = false;
6de9cd9a 3003
9771b263 3004 if (*init != NULL && (*init)->is_empty ())
6de9cd9a 3005 {
c166b898 3006 *init = NULL;
844ae01d
JM
3007 explicit_value_init_p = true;
3008 }
b84f4651 3009
a67e7daa
JM
3010 if (processing_template_decl && explicit_value_init_p)
3011 {
3012 /* build_value_init doesn't work in templates, and we don't need
3013 the initializer anyway since we're going to throw it away and
3014 rebuild it at instantiation time, so just build up a single
3015 constructor call to get any appropriate diagnostics. */
3016 init_expr = cp_build_indirect_ref (data_addr, RO_NULL, complain);
95552437 3017 if (type_build_ctor_call (elt_type))
a67e7daa
JM
3018 init_expr = build_special_member_call (init_expr,
3019 complete_ctor_identifier,
3020 init, elt_type,
3021 LOOKUP_NORMAL,
3022 complain);
3023 stable = stabilize_init (init_expr, &init_preeval_expr);
3024 }
3025 else if (array_p)
844ae01d 3026 {
25357d1e 3027 tree vecinit = NULL_TREE;
9771b263 3028 if (vec_safe_length (*init) == 1
014397c2 3029 && DIRECT_LIST_INIT_P ((**init)[0]))
25357d1e 3030 {
9771b263 3031 vecinit = (**init)[0];
1f65a8c8
JM
3032 if (CONSTRUCTOR_NELTS (vecinit) == 0)
3033 /* List-value-initialization, leave it alone. */;
25357d1e
JM
3034 else
3035 {
1f65a8c8
JM
3036 tree arraytype, domain;
3037 if (TREE_CONSTANT (nelts))
3038 domain = compute_array_index_type (NULL_TREE, nelts,
3039 complain);
3040 else
7d5e76c8
JM
3041 /* We'll check the length at runtime. */
3042 domain = NULL_TREE;
1f65a8c8
JM
3043 arraytype = build_cplus_array_type (type, domain);
3044 vecinit = digest_init (arraytype, vecinit, complain);
25357d1e 3045 }
25357d1e
JM
3046 }
3047 else if (*init)
5ade1ed2
DG
3048 {
3049 if (complain & tf_error)
1f65a8c8
JM
3050 permerror (input_location,
3051 "parenthesized initializer in array new");
5ade1ed2
DG
3052 else
3053 return error_mark_node;
25357d1e 3054 vecinit = build_tree_list_vec (*init);
5ade1ed2 3055 }
6de9cd9a 3056 init_expr
b73a4704
JM
3057 = build_vec_init (data_addr,
3058 cp_build_binary_op (input_location,
3059 MINUS_EXPR, outer_nelts,
3060 integer_one_node,
3061 complain),
3062 vecinit,
3063 explicit_value_init_p,
3064 /*from_array=*/0,
3065 complain);
6de9cd9a
DN
3066
3067 /* An array initialization is stable because the initialization
3068 of each element is a full-expression, so the temporaries don't
3069 leak out. */
3070 stable = true;
3071 }
f30efcb7 3072 else
8d08fdba 3073 {
dd865ef6 3074 init_expr = cp_build_indirect_ref (data_addr, RO_NULL, complain);
9207099b 3075
95552437 3076 if (type_build_ctor_call (type) && !explicit_value_init_p)
b84f4651
MM
3077 {
3078 init_expr = build_special_member_call (init_expr,
3079 complete_ctor_identifier,
3080 init, elt_type,
5ade1ed2
DG
3081 LOOKUP_NORMAL,
3082 complain);
844ae01d
JM
3083 }
3084 else if (explicit_value_init_p)
3085 {
a67e7daa
JM
3086 /* Something like `new int()'. */
3087 tree val = build_value_init (type, complain);
3088 if (val == error_mark_node)
3089 return error_mark_node;
3090 init_expr = build2 (INIT_EXPR, type, init_expr, val);
b84f4651 3091 }
8dc2b103 3092 else
b84f4651 3093 {
c166b898
ILT
3094 tree ie;
3095
b84f4651
MM
3096 /* We are processing something like `new int (10)', which
3097 means allocate an int, and initialize it with 10. */
3db45ab5 3098
e2e03032
PC
3099 ie = build_x_compound_expr_from_vec (*init, "new initializer",
3100 complain);
c166b898 3101 init_expr = cp_build_modify_expr (init_expr, INIT_EXPR, ie,
5ade1ed2 3102 complain);
b84f4651 3103 }
844ae01d 3104 stable = stabilize_init (init_expr, &init_preeval_expr);
96790071
JM
3105 }
3106
3107 if (init_expr == error_mark_node)
3108 return error_mark_node;
1f109f0f 3109
20c39572
JM
3110 /* If any part of the object initialization terminates by throwing an
3111 exception and a suitable deallocation function can be found, the
3112 deallocation function is called to free the memory in which the
3113 object was being constructed, after which the exception continues
3114 to propagate in the context of the new-expression. If no
3115 unambiguous matching deallocation function can be found,
3116 propagating the exception does not cause the object's memory to be
3117 freed. */
96790071 3118 if (flag_exceptions && ! use_java_new)
1f109f0f 3119 {
d746e87d 3120 enum tree_code dcode = array_p ? VEC_DELETE_EXPR : DELETE_EXPR;
96790071 3121 tree cleanup;
a7d87521 3122
5355deec 3123 /* The Standard is unclear here, but the right thing to do
f4f4610e
MM
3124 is to use the same method for finding deallocation
3125 functions that we use for finding allocation functions. */
10ee5386
JM
3126 cleanup = (build_op_delete_call
3127 (dcode,
9207099b 3128 alloc_node,
10ee5386
JM
3129 size,
3130 globally_qualified_p,
3131 placement_allocation_fn_p ? alloc_call : NULL_TREE,
4b978f96
PC
3132 alloc_fn,
3133 complain));
2bb14213 3134
6de9cd9a
DN
3135 if (!cleanup)
3136 /* We're done. */;
3137 else if (stable)
3138 /* This is much simpler if we were able to preevaluate all of
3139 the arguments to the constructor call. */
d665b6e5
MLI
3140 {
3141 /* CLEANUP is compiler-generated, so no diagnostics. */
3142 TREE_NO_WARNING (cleanup) = true;
3143 init_expr = build2 (TRY_CATCH_EXPR, void_type_node,
3144 init_expr, cleanup);
3145 /* Likewise, this try-catch is compiler-generated. */
3146 TREE_NO_WARNING (init_expr) = true;
3147 }
6de9cd9a
DN
3148 else
3149 /* Ack! First we allocate the memory. Then we set our sentry
3150 variable to true, and expand a cleanup that deletes the
3151 memory if sentry is true. Then we run the constructor, and
3152 finally clear the sentry.
3153
3154 We need to do this because we allocate the space first, so
3155 if there are any temporaries with cleanups in the
3156 constructor args and we weren't able to preevaluate them, we
3157 need this EH region to extend until end of full-expression
3158 to preserve nesting. */
da4768fe 3159 {
96790071 3160 tree end, sentry, begin;
2face519
JM
3161
3162 begin = get_target_expr (boolean_true_node);
659e5a7a 3163 CLEANUP_EH_ONLY (begin) = 1;
2face519 3164
659e5a7a
JM
3165 sentry = TARGET_EXPR_SLOT (begin);
3166
d665b6e5
MLI
3167 /* CLEANUP is compiler-generated, so no diagnostics. */
3168 TREE_NO_WARNING (cleanup) = true;
3169
659e5a7a 3170 TARGET_EXPR_CLEANUP (begin)
f293ce4b 3171 = build3 (COND_EXPR, void_type_node, sentry,
632f2871 3172 cleanup, void_node);
2face519 3173
f293ce4b
RS
3174 end = build2 (MODIFY_EXPR, TREE_TYPE (sentry),
3175 sentry, boolean_false_node);
2face519 3176
96790071 3177 init_expr
f293ce4b
RS
3178 = build2 (COMPOUND_EXPR, void_type_node, begin,
3179 build2 (COMPOUND_EXPR, void_type_node, init_expr,
3180 end));
d665b6e5
MLI
3181 /* Likewise, this is compiler-generated. */
3182 TREE_NO_WARNING (init_expr) = true;
da4768fe 3183 }
1f109f0f 3184 }
f4f4610e 3185 }
8b5e2ce4
JM
3186 else
3187 init_expr = NULL_TREE;
3188
3189 /* Now build up the return value in reverse order. */
96790071 3190
8b5e2ce4 3191 rval = data_addr;
2face519 3192
8b5e2ce4 3193 if (init_expr)
f293ce4b 3194 rval = build2 (COMPOUND_EXPR, TREE_TYPE (rval), init_expr, rval);
8b5e2ce4 3195 if (cookie_expr)
f293ce4b 3196 rval = build2 (COMPOUND_EXPR, TREE_TYPE (rval), cookie_expr, rval);
8b5e2ce4 3197
10ee5386 3198 if (rval == data_addr)
8b5e2ce4
JM
3199 /* If we don't have an initializer or a cookie, strip the TARGET_EXPR
3200 and return the call (which doesn't need to be adjusted). */
3201 rval = TARGET_EXPR_INITIAL (alloc_expr);
3202 else
d18c083e 3203 {
8b5e2ce4
JM
3204 if (check_new)
3205 {
ba47d38d
AH
3206 tree ifexp = cp_build_binary_op (input_location,
3207 NE_EXPR, alloc_node,
6d96d7ff 3208 nullptr_node,
5ade1ed2 3209 complain);
4cbc4bd7
PC
3210 rval = build_conditional_expr (input_location, ifexp, rval,
3211 alloc_node, complain);
8b5e2ce4 3212 }
d18c083e 3213
8b5e2ce4
JM
3214 /* Perform the allocation before anything else, so that ALLOC_NODE
3215 has been initialized before we start using it. */
f293ce4b 3216 rval = build2 (COMPOUND_EXPR, TREE_TYPE (rval), alloc_expr, rval);
8b5e2ce4 3217 }
51c184be 3218
6de9cd9a 3219 if (init_preeval_expr)
f293ce4b 3220 rval = build2 (COMPOUND_EXPR, TREE_TYPE (rval), init_preeval_expr, rval);
6de9cd9a 3221
d04a575f 3222 /* A new-expression is never an lvalue. */
41990f96 3223 gcc_assert (!lvalue_p (rval));
058dcc25 3224
25357d1e 3225 return convert (pointer_type, rval);
8d08fdba 3226}
63c9a190 3227
c166b898
ILT
3228/* Generate a representation for a C++ "new" expression. *PLACEMENT
3229 is a vector of placement-new arguments (or NULL if none). If NELTS
3230 is NULL, TYPE is the type of the storage to be allocated. If NELTS
3231 is not NULL, then this is an array-new allocation; TYPE is the type
3232 of the elements in the array and NELTS is the number of elements in
3233 the array. *INIT, if non-NULL, is the initializer for the new
3234 object, or an empty vector to indicate an initializer of "()". If
3235 USE_GLOBAL_NEW is true, then the user explicitly wrote "::new"
3236 rather than just "new". This may change PLACEMENT and INIT. */
63c9a190
MM
3237
3238tree
9771b263
DN
3239build_new (vec<tree, va_gc> **placement, tree type, tree nelts,
3240 vec<tree, va_gc> **init, int use_global_new, tsubst_flags_t complain)
63c9a190
MM
3241{
3242 tree rval;
9771b263 3243 vec<tree, va_gc> *orig_placement = NULL;
c166b898 3244 tree orig_nelts = NULL_TREE;
9771b263 3245 vec<tree, va_gc> *orig_init = NULL;
63c9a190 3246
c166b898 3247 if (type == error_mark_node)
63c9a190
MM
3248 return error_mark_node;
3249
9771b263 3250 if (nelts == NULL_TREE && vec_safe_length (*init) == 1
c19267cb
JM
3251 /* Don't do auto deduction where it might affect mangling. */
3252 && (!processing_template_decl || at_function_scope_p ()))
86a09a9e
JM
3253 {
3254 tree auto_node = type_uses_auto (type);
2e5748d2
JM
3255 if (auto_node)
3256 {
9771b263 3257 tree d_init = (**init)[0];
2e5748d2 3258 d_init = resolve_nondeduced_context (d_init);
d84572a4 3259 type = do_auto_deduction (type, d_init, auto_node);
2e5748d2 3260 }
86a09a9e
JM
3261 }
3262
63c9a190
MM
3263 if (processing_template_decl)
3264 {
3265 if (dependent_type_p (type)
c166b898 3266 || any_type_dependent_arguments_p (*placement)
63c9a190 3267 || (nelts && type_dependent_expression_p (nelts))
879b0a1d 3268 || (nelts && *init)
c166b898
ILT
3269 || any_type_dependent_arguments_p (*init))
3270 return build_raw_new_expr (*placement, type, nelts, *init,
63c9a190 3271 use_global_new);
c166b898
ILT
3272
3273 orig_placement = make_tree_vector_copy (*placement);
3274 orig_nelts = nelts;
a4bbf910
PC
3275 if (*init)
3276 orig_init = make_tree_vector_copy (*init);
c166b898
ILT
3277
3278 make_args_non_dependent (*placement);
63c9a190
MM
3279 if (nelts)
3280 nelts = build_non_dependent_expr (nelts);
c166b898 3281 make_args_non_dependent (*init);
63c9a190
MM
3282 }
3283
3284 if (nelts)
3285 {
3286 if (!build_expr_type_conversion (WANT_INT | WANT_ENUM, nelts, false))
5ade1ed2
DG
3287 {
3288 if (complain & tf_error)
cbe5f3b3 3289 permerror (input_location, "size in array new must have integral type");
5ade1ed2
DG
3290 else
3291 return error_mark_node;
3292 }
03a904b5 3293 nelts = mark_rvalue_use (nelts);
4b978f96 3294 nelts = cp_save_expr (cp_convert (sizetype, nelts, complain));
63c9a190
MM
3295 }
3296
3297 /* ``A reference cannot be created by the new operator. A reference
3298 is not an object (8.2.2, 8.4.3), so a pointer to it could not be
3299 returned by new.'' ARM 5.3.3 */
3300 if (TREE_CODE (type) == REFERENCE_TYPE)
3301 {
5ade1ed2
DG
3302 if (complain & tf_error)
3303 error ("new cannot be applied to a reference type");
3304 else
3305 return error_mark_node;
63c9a190
MM
3306 type = TREE_TYPE (type);
3307 }
3308
3309 if (TREE_CODE (type) == FUNCTION_TYPE)
3310 {
5ade1ed2
DG
3311 if (complain & tf_error)
3312 error ("new cannot be applied to a function type");
63c9a190
MM
3313 return error_mark_node;
3314 }
3315
57ccb546
MM
3316 /* The type allocated must be complete. If the new-type-id was
3317 "T[N]" then we are just checking that "T" is complete here, but
3318 that is equivalent, since the value of "N" doesn't matter. */
309714d4 3319 if (!complete_type_or_maybe_complain (type, NULL_TREE, complain))
39fb9d72
DB
3320 return error_mark_node;
3321
5ade1ed2 3322 rval = build_new_1 (placement, type, nelts, init, use_global_new, complain);
63c9a190
MM
3323 if (rval == error_mark_node)
3324 return error_mark_node;
3325
3326 if (processing_template_decl)
c166b898
ILT
3327 {
3328 tree ret = build_raw_new_expr (orig_placement, type, orig_nelts,
3329 orig_init, use_global_new);
3330 release_tree_vector (orig_placement);
3331 release_tree_vector (orig_init);
3332 return ret;
3333 }
63c9a190
MM
3334
3335 /* Wrap it in a NOP_EXPR so warn_if_unused_value doesn't complain. */
3336 rval = build1 (NOP_EXPR, TREE_TYPE (rval), rval);
3337 TREE_NO_WARNING (rval) = 1;
3338
3339 return rval;
3340}
3341
3342/* Given a Java class, return a decl for the corresponding java.lang.Class. */
3343
3344tree
3345build_java_class_ref (tree type)
3346{
3347 tree name = NULL_TREE, class_decl;
3348 static tree CL_suffix = NULL_TREE;
3349 if (CL_suffix == NULL_TREE)
3350 CL_suffix = get_identifier("class$");
3351 if (jclass_node == NULL_TREE)
3352 {
3353 jclass_node = IDENTIFIER_GLOBAL_VALUE (get_identifier ("jclass"));
3354 if (jclass_node == NULL_TREE)
a3d536f1
VR
3355 {
3356 error ("call to Java constructor, while %<jclass%> undefined");
3357 return error_mark_node;
3358 }
63c9a190
MM
3359 jclass_node = TREE_TYPE (jclass_node);
3360 }
3361
3362 /* Mangle the class$ field. */
3363 {
3364 tree field;
910ad8de 3365 for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
63c9a190
MM
3366 if (DECL_NAME (field) == CL_suffix)
3367 {
3368 mangle_decl (field);
3369 name = DECL_ASSEMBLER_NAME (field);
3370 break;
3371 }
3372 if (!field)
a3d536f1 3373 {
d8a07487 3374 error ("can%'t find %<class$%> in %qT", type);
a3d536f1
VR
3375 return error_mark_node;
3376 }
3377 }
63c9a190
MM
3378
3379 class_decl = IDENTIFIER_GLOBAL_VALUE (name);
3380 if (class_decl == NULL_TREE)
3381 {
c2255bc4
AH
3382 class_decl = build_decl (input_location,
3383 VAR_DECL, name, TREE_TYPE (jclass_node));
63c9a190
MM
3384 TREE_STATIC (class_decl) = 1;
3385 DECL_EXTERNAL (class_decl) = 1;
3386 TREE_PUBLIC (class_decl) = 1;
3387 DECL_ARTIFICIAL (class_decl) = 1;
3388 DECL_IGNORED_P (class_decl) = 1;
3389 pushdecl_top_level (class_decl);
3390 make_decl_rtl (class_decl);
3391 }
3392 return class_decl;
3393}
8d08fdba 3394\f
f30432d7 3395static tree
362efdc1 3396build_vec_delete_1 (tree base, tree maxindex, tree type,
574cfaa4
JM
3397 special_function_kind auto_delete_vec,
3398 int use_global_delete, tsubst_flags_t complain)
f30432d7
MS
3399{
3400 tree virtual_size;
e92cc029 3401 tree ptype = build_pointer_type (type = complete_type (type));
c9b0866a 3402 tree size_exp;
f30432d7
MS
3403
3404 /* Temporary variables used by the loop. */
3405 tree tbase, tbase_init;
3406
3407 /* This is the body of the loop that implements the deletion of a
3408 single element, and moves temp variables to next elements. */
3409 tree body;
3410
3411 /* This is the LOOP_EXPR that governs the deletion of the elements. */
c7b62f14 3412 tree loop = 0;
f30432d7
MS
3413
3414 /* This is the thing that governs what to do after the loop has run. */
3415 tree deallocate_expr = 0;
3416
3417 /* This is the BIND_EXPR which holds the outermost iterator of the
3418 loop. It is convenient to set this variable up and test it before
3419 executing any other code in the loop.
3420 This is also the containing expression returned by this function. */
3421 tree controller = NULL_TREE;
5be014d5 3422 tree tmp;
f30432d7 3423
b2153b98 3424 /* We should only have 1-D arrays here. */
8dc2b103 3425 gcc_assert (TREE_CODE (type) != ARRAY_TYPE);
b2153b98 3426
574cfaa4
JM
3427 if (base == error_mark_node || maxindex == error_mark_node)
3428 return error_mark_node;
3429
c9b0866a
PC
3430 if (!COMPLETE_TYPE_P (type))
3431 {
3432 if ((complain & tf_warning)
3433 && warning (OPT_Wdelete_incomplete,
3434 "possible problem detected in invocation of "
3435 "delete [] operator:"))
3436 {
3437 cxx_incomplete_type_diagnostic (base, type, DK_WARNING);
3438 inform (input_location, "neither the destructor nor the "
3439 "class-specific operator delete [] will be called, "
3440 "even if they are declared when the class is defined");
3441 }
20b06add
JM
3442 /* This size won't actually be used. */
3443 size_exp = size_one_node;
3444 goto no_destructor;
c9b0866a
PC
3445 }
3446
3447 size_exp = size_in_bytes (type);
3448
eca7fc57 3449 if (! MAYBE_CLASS_TYPE_P (type))
c7b62f14 3450 goto no_destructor;
eca7fc57
JM
3451 else if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
3452 {
3453 /* Make sure the destructor is callable. */
3454 if (type_build_dtor_call (type))
3455 {
3456 tmp = build_delete (ptype, base, sfk_complete_destructor,
3457 LOOKUP_NORMAL|LOOKUP_DESTRUCTOR, 1,
3458 complain);
3459 if (tmp == error_mark_node)
3460 return error_mark_node;
3461 }
3462 goto no_destructor;
3463 }
f30432d7 3464
708cae97 3465 /* The below is short by the cookie size. */
fed3cef0
RK
3466 virtual_size = size_binop (MULT_EXPR, size_exp,
3467 convert (sizetype, maxindex));
f30432d7 3468
46e8c075 3469 tbase = create_temporary_var (ptype);
5d49b6a7
RG
3470 tbase_init
3471 = cp_build_modify_expr (tbase, NOP_EXPR,
3472 fold_build_pointer_plus_loc (input_location,
3473 fold_convert (ptype,
3474 base),
3475 virtual_size),
3476 complain);
574cfaa4
JM
3477 if (tbase_init == error_mark_node)
3478 return error_mark_node;
f293ce4b
RS
3479 controller = build3 (BIND_EXPR, void_type_node, tbase,
3480 NULL_TREE, NULL_TREE);
f30432d7 3481 TREE_SIDE_EFFECTS (controller) = 1;
f30432d7 3482
f293ce4b 3483 body = build1 (EXIT_EXPR, void_type_node,
5cd88d68
RS
3484 build2 (EQ_EXPR, boolean_type_node, tbase,
3485 fold_convert (ptype, base)));
db3927fb 3486 tmp = fold_build1_loc (input_location, NEGATE_EXPR, sizetype, size_exp);
5d49b6a7 3487 tmp = fold_build_pointer_plus (tbase, tmp);
574cfaa4
JM
3488 tmp = cp_build_modify_expr (tbase, NOP_EXPR, tmp, complain);
3489 if (tmp == error_mark_node)
3490 return error_mark_node;
3491 body = build_compound_expr (input_location, body, tmp);
3492 tmp = build_delete (ptype, tbase, sfk_complete_destructor,
3493 LOOKUP_NORMAL|LOOKUP_DESTRUCTOR, 1,
3494 complain);
3495 if (tmp == error_mark_node)
3496 return error_mark_node;
3497 body = build_compound_expr (input_location, body, tmp);
f30432d7 3498
f293ce4b 3499 loop = build1 (LOOP_EXPR, void_type_node, body);
c2255bc4 3500 loop = build_compound_expr (input_location, tbase_init, loop);
f30432d7
MS
3501
3502 no_destructor:
e79a6b40
JM
3503 /* Delete the storage if appropriate. */
3504 if (auto_delete_vec == sfk_deleting_destructor)
f30432d7
MS
3505 {
3506 tree base_tbd;
3507
708cae97 3508 /* The below is short by the cookie size. */
fed3cef0
RK
3509 virtual_size = size_binop (MULT_EXPR, size_exp,
3510 convert (sizetype, maxindex));
f30432d7
MS
3511
3512 if (! TYPE_VEC_NEW_USES_COOKIE (type))
3513 /* no header */
3514 base_tbd = base;
3515 else
3516 {
834c6dff
MM
3517 tree cookie_size;
3518
46e995e0 3519 cookie_size = targetm.cxx.get_cookie_size (type);
574cfaa4
JM
3520 base_tbd = cp_build_binary_op (input_location,
3521 MINUS_EXPR,
3522 cp_convert (string_type_node,
4b978f96 3523 base, complain),
574cfaa4
JM
3524 cookie_size,
3525 complain);
3526 if (base_tbd == error_mark_node)
3527 return error_mark_node;
4b978f96 3528 base_tbd = cp_convert (ptype, base_tbd, complain);
e92cc029 3529 /* True size with header. */
834c6dff 3530 virtual_size = size_binop (PLUS_EXPR, virtual_size, cookie_size);
f30432d7 3531 }
86f45d2c 3532
e79a6b40
JM
3533 deallocate_expr = build_op_delete_call (VEC_DELETE_EXPR,
3534 base_tbd, virtual_size,
3535 use_global_delete & 1,
3536 /*placement=*/NULL_TREE,
4b978f96
PC
3537 /*alloc_fn=*/NULL_TREE,
3538 complain);
f30432d7
MS
3539 }
3540
c7b62f14
NS
3541 body = loop;
3542 if (!deallocate_expr)
3543 ;
3544 else if (!body)
3545 body = deallocate_expr;
f30432d7 3546 else
c2255bc4 3547 body = build_compound_expr (input_location, body, deallocate_expr);
c8094d83 3548
c7b62f14
NS
3549 if (!body)
3550 body = integer_zero_node;
c8094d83 3551
f30432d7 3552 /* Outermost wrapper: If pointer is null, punt. */
db3927fb
AH
3553 body = fold_build3_loc (input_location, COND_EXPR, void_type_node,
3554 fold_build2_loc (input_location,
3555 NE_EXPR, boolean_type_node, base,
7866705a 3556 convert (TREE_TYPE (base),
6d96d7ff 3557 nullptr_node)),
7866705a 3558 body, integer_zero_node);
f30432d7
MS
3559 body = build1 (NOP_EXPR, void_type_node, body);
3560
3561 if (controller)
3562 {
3563 TREE_OPERAND (controller, 1) = body;
4e8dca1c 3564 body = controller;
f30432d7 3565 }
4e8dca1c
JM
3566
3567 if (TREE_CODE (base) == SAVE_EXPR)
3568 /* Pre-evaluate the SAVE_EXPR outside of the BIND_EXPR. */
f293ce4b 3569 body = build2 (COMPOUND_EXPR, void_type_node, base, body);
4e8dca1c 3570
574cfaa4 3571 return convert_to_void (body, ICV_CAST, complain);
f30432d7
MS
3572}
3573
c8094d83 3574/* Create an unnamed variable of the indicated TYPE. */
c395453c 3575
f1dedc31 3576tree
362efdc1 3577create_temporary_var (tree type)
8a72a046 3578{
f1dedc31 3579 tree decl;
c8094d83 3580
c2255bc4
AH
3581 decl = build_decl (input_location,
3582 VAR_DECL, NULL_TREE, type);
f1dedc31
MM
3583 TREE_USED (decl) = 1;
3584 DECL_ARTIFICIAL (decl) = 1;
f1dedc31 3585 DECL_IGNORED_P (decl) = 1;
b35d4555 3586 DECL_CONTEXT (decl) = current_function_decl;
f1dedc31 3587
f1dedc31 3588 return decl;
8a72a046
MM
3589}
3590
f1dedc31
MM
3591/* Create a new temporary variable of the indicated TYPE, initialized
3592 to INIT.
8a72a046 3593
f1dedc31
MM
3594 It is not entered into current_binding_level, because that breaks
3595 things when it comes time to do final cleanups (which take place
3596 "outside" the binding contour of the function). */
3597
fe5b5c36 3598tree
362efdc1 3599get_temp_regvar (tree type, tree init)
f30432d7 3600{
f1dedc31 3601 tree decl;
8a72a046 3602
f1dedc31 3603 decl = create_temporary_var (type);
350fae66 3604 add_decl_expr (decl);
c8094d83 3605
5ade1ed2
DG
3606 finish_expr_stmt (cp_build_modify_expr (decl, INIT_EXPR, init,
3607 tf_warning_or_error));
8a72a046 3608
f1dedc31 3609 return decl;
f30432d7
MS
3610}
3611
024f2d89
JM
3612/* Subroutine of build_vec_init. Returns true if assigning to an array of
3613 INNER_ELT_TYPE from INIT is trivial. */
3614
3615static bool
3616vec_copy_assign_is_trivial (tree inner_elt_type, tree init)
3617{
3618 tree fromtype = inner_elt_type;
3619 if (real_lvalue_p (init))
3620 fromtype = cp_build_reference_type (fromtype, /*rval*/false);
3621 return is_trivially_xible (MODIFY_EXPR, inner_elt_type, fromtype);
3622}
3623
f1dedc31
MM
3624/* `build_vec_init' returns tree structure that performs
3625 initialization of a vector of aggregate types.
8d08fdba 3626
9207099b
JM
3627 BASE is a reference to the vector, of ARRAY_TYPE, or a pointer
3628 to the first element, of POINTER_TYPE.
a48cccea 3629 MAXINDEX is the maximum index of the array (one less than the
9207099b 3630 number of elements). It is only used if BASE is a pointer or
a48cccea 3631 TYPE_DOMAIN (TREE_TYPE (BASE)) == NULL_TREE.
b84f4651 3632
8d08fdba
MS
3633 INIT is the (possibly NULL) initializer.
3634
844ae01d
JM
3635 If EXPLICIT_VALUE_INIT_P is true, then INIT must be NULL. All
3636 elements in the array are value-initialized.
b84f4651 3637
8d08fdba
MS
3638 FROM_ARRAY is 0 if we should init everything with INIT
3639 (i.e., every element initialized from INIT).
3640 FROM_ARRAY is 1 if we should index into INIT in parallel
3641 with initialization of DECL.
3642 FROM_ARRAY is 2 if we should index into INIT in parallel,
3643 but use assignment instead of initialization. */
3644
3645tree
3db45ab5 3646build_vec_init (tree base, tree maxindex, tree init,
844ae01d 3647 bool explicit_value_init_p,
5ade1ed2 3648 int from_array, tsubst_flags_t complain)
8d08fdba
MS
3649{
3650 tree rval;
8a72a046 3651 tree base2 = NULL_TREE;
e833cb11 3652 tree itype = NULL_TREE;
8a72a046 3653 tree iterator;
9207099b 3654 /* The type of BASE. */
f30efcb7 3655 tree atype = TREE_TYPE (base);
f1dedc31 3656 /* The type of an element in the array. */
f30efcb7 3657 tree type = TREE_TYPE (atype);
c8094d83 3658 /* The element type reached after removing all outer array
b5af3133
MM
3659 types. */
3660 tree inner_elt_type;
f1dedc31
MM
3661 /* The type of a pointer to an element in the array. */
3662 tree ptype;
3663 tree stmt_expr;
3664 tree compound_stmt;
3665 int destroy_temps;
f5984164 3666 tree try_block = NULL_TREE;
8a72a046 3667 int num_initialized_elts = 0;
2a3398e1 3668 bool is_global;
fa2200cb 3669 tree obase = base;
f91352dc 3670 bool xvalue = false;
574cfaa4 3671 bool errors = false;
c8094d83 3672
9207099b 3673 if (TREE_CODE (atype) == ARRAY_TYPE && TYPE_DOMAIN (atype))
a48cccea
JM
3674 maxindex = array_type_nelts (atype);
3675
ddffee68 3676 if (maxindex == NULL_TREE || maxindex == error_mark_node)
8d08fdba
MS
3677 return error_mark_node;
3678
844ae01d 3679 if (explicit_value_init_p)
b84f4651
MM
3680 gcc_assert (!init);
3681
9207099b 3682 inner_elt_type = strip_array_types (type);
567ef749
JM
3683
3684 /* Look through the TARGET_EXPR around a compound literal. */
3685 if (init && TREE_CODE (init) == TARGET_EXPR
5a4d8044
JM
3686 && TREE_CODE (TARGET_EXPR_INITIAL (init)) == CONSTRUCTOR
3687 && from_array != 2)
567ef749
JM
3688 init = TARGET_EXPR_INITIAL (init);
3689
7d5e76c8
JM
3690 /* If we have a braced-init-list, make sure that the array
3691 is big enough for all the initializers. */
46621807
JM
3692 bool length_check = (init && TREE_CODE (init) == CONSTRUCTOR
3693 && CONSTRUCTOR_NELTS (init) > 0
3694 && !TREE_CONSTANT (maxindex));
7d5e76c8 3695
c8a3d889 3696 if (init
25357d1e 3697 && TREE_CODE (atype) == ARRAY_TYPE
06b76c7f 3698 && TREE_CONSTANT (maxindex)
c8a3d889 3699 && (from_array == 2
024f2d89 3700 ? vec_copy_assign_is_trivial (inner_elt_type, init)
c8a3d889 3701 : !TYPE_NEEDS_CONSTRUCTING (type))
f30efcb7
JM
3702 && ((TREE_CODE (init) == CONSTRUCTOR
3703 /* Don't do this if the CONSTRUCTOR might contain something
3704 that might throw and require us to clean up. */
9771b263 3705 && (vec_safe_is_empty (CONSTRUCTOR_ELTS (init))
b5af3133 3706 || ! TYPE_HAS_NONTRIVIAL_DESTRUCTOR (inner_elt_type)))
f30efcb7
JM
3707 || from_array))
3708 {
c32097d8 3709 /* Do non-default initialization of trivial arrays resulting from
f30efcb7
JM
3710 brace-enclosed initializers. In this case, digest_init and
3711 store_constructor will handle the semantics for us. */
3712
a47c2f62
JM
3713 if (BRACE_ENCLOSED_INITIALIZER_P (init))
3714 init = digest_init (atype, init, complain);
f293ce4b 3715 stmt_expr = build2 (INIT_EXPR, atype, base, init);
f30efcb7
JM
3716 return stmt_expr;
3717 }
3718
4b978f96 3719 maxindex = cp_convert (ptrdiff_type_node, maxindex, complain);
9207099b
JM
3720 if (TREE_CODE (atype) == ARRAY_TYPE)
3721 {
3722 ptype = build_pointer_type (type);
89fcabaf
PC
3723 base = decay_conversion (base, complain);
3724 if (base == error_mark_node)
3725 return error_mark_node;
4b978f96 3726 base = cp_convert (ptype, base, complain);
9207099b
JM
3727 }
3728 else
3729 ptype = atype;
8d08fdba 3730
f1dedc31 3731 /* The code we are generating looks like:
303b7406 3732 ({
f1dedc31 3733 T* t1 = (T*) base;
f30efcb7 3734 T* rval = t1;
f1dedc31
MM
3735 ptrdiff_t iterator = maxindex;
3736 try {
4977bab6 3737 for (; iterator != -1; --iterator) {
f30efcb7
JM
3738 ... initialize *t1 ...
3739 ++t1;
4977bab6 3740 }
f1dedc31 3741 } catch (...) {
0cbd7506 3742 ... destroy elements that were constructed ...
f1dedc31 3743 }
303b7406
NS
3744 rval;
3745 })
c8094d83 3746
f1dedc31
MM
3747 We can omit the try and catch blocks if we know that the
3748 initialization will never throw an exception, or if the array
f30efcb7 3749 elements do not have destructors. We can omit the loop completely if
c8094d83 3750 the elements of the array do not have constructors.
f1dedc31
MM
3751
3752 We actually wrap the entire body of the above in a STMT_EXPR, for
c8094d83 3753 tidiness.
f1dedc31
MM
3754
3755 When copying from array to another, when the array elements have
3756 only trivial copy constructors, we should use __builtin_memcpy
3757 rather than generating a loop. That way, we could take advantage
3b426391 3758 of whatever cleverness the back end has for dealing with copies
f1dedc31
MM
3759 of blocks of memory. */
3760
2a3398e1 3761 is_global = begin_init_stmts (&stmt_expr, &compound_stmt);
f2c5f623 3762 destroy_temps = stmts_are_full_exprs_p ();
ae499cce 3763 current_stmt_tree ()->stmts_are_full_exprs_p = 0;
f30efcb7 3764 rval = get_temp_regvar (ptype, base);
f1dedc31 3765 base = get_temp_regvar (ptype, rval);
8a72a046 3766 iterator = get_temp_regvar (ptrdiff_type_node, maxindex);
8d08fdba 3767
5a4d8044
JM
3768 /* If initializing one array from another, initialize element by
3769 element. We rely upon the below calls to do the argument
3770 checking. Evaluate the initializer before entering the try block. */
3771 if (from_array && init && TREE_CODE (init) != CONSTRUCTOR)
3772 {
f91352dc
JM
3773 if (lvalue_kind (init) & clk_rvalueref)
3774 xvalue = true;
89fcabaf
PC
3775 base2 = decay_conversion (init, complain);
3776 if (base2 == error_mark_node)
3777 return error_mark_node;
5a4d8044
JM
3778 itype = TREE_TYPE (base2);
3779 base2 = get_temp_regvar (itype, base2);
3780 itype = TREE_TYPE (itype);
3781 }
3782
8a72a046 3783 /* Protect the entire array initialization so that we can destroy
f30efcb7
JM
3784 the partially constructed array if an exception is thrown.
3785 But don't do this if we're assigning. */
3786 if (flag_exceptions && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
3787 && from_array != 2)
ed5511d9
MM
3788 {
3789 try_block = begin_try_block ();
ed5511d9 3790 }
8a72a046 3791
c0014b07
JM
3792 /* Should we try to create a constant initializer? */
3793 bool try_const = (TREE_CODE (atype) == ARRAY_TYPE
3794 && TREE_CONSTANT (maxindex)
a02f26f6
JM
3795 && (init ? TREE_CODE (init) == CONSTRUCTOR
3796 : (type_has_constexpr_default_constructor
3797 (inner_elt_type)))
c0014b07
JM
3798 && (literal_type_p (inner_elt_type)
3799 || TYPE_HAS_CONSTEXPR_CTOR (inner_elt_type)));
3800 vec<constructor_elt, va_gc> *const_vec = NULL;
3801 bool saw_non_const = false;
3802 /* If we're initializing a static array, we want to do static
3803 initialization of any elements with constant initializers even if
3804 some are non-constant. */
3805 bool do_static_init = (DECL_P (obase) && TREE_STATIC (obase));
3806
3bc63227 3807 bool empty_list = false;
1f65a8c8
JM
3808 if (init && BRACE_ENCLOSED_INITIALIZER_P (init)
3809 && CONSTRUCTOR_NELTS (init) == 0)
3bc63227
JM
3810 /* Skip over the handling of non-empty init lists. */
3811 empty_list = true;
1f65a8c8 3812
fa2200cb
JM
3813 /* Maybe pull out constant value when from_array? */
3814
1f65a8c8 3815 else if (init != NULL_TREE && TREE_CODE (init) == CONSTRUCTOR)
8d08fdba 3816 {
c32097d8 3817 /* Do non-default initialization of non-trivial arrays resulting from
f30efcb7 3818 brace-enclosed initializers. */
4038c495 3819 unsigned HOST_WIDE_INT idx;
fa2200cb 3820 tree field, elt;
b25dd954
JM
3821 /* If the constructor already has the array type, it's been through
3822 digest_init, so we shouldn't try to do anything more. */
3823 bool digested = same_type_p (atype, TREE_TYPE (init));
094fe153
JM
3824 from_array = 0;
3825
7d5e76c8
JM
3826 if (length_check)
3827 {
24f1db9c
RB
3828 tree nelts = build_int_cst (ptrdiff_type_node,
3829 CONSTRUCTOR_NELTS (init) - 1);
46621807
JM
3830 if (TREE_CODE (atype) != ARRAY_TYPE)
3831 {
3832 if (flag_exceptions)
3833 {
3834 tree c = fold_build2 (LT_EXPR, boolean_type_node, iterator,
3835 nelts);
3836 c = build3 (COND_EXPR, void_type_node, c,
3837 throw_bad_array_new_length (), void_node);
3838 finish_expr_stmt (c);
3839 }
3840 /* Don't check an array new when -fno-exceptions. */
3841 }
3842 else if (flag_sanitize & SANITIZE_BOUNDS
f5481fc4 3843 && do_ubsan_in_current_function ())
46621807
JM
3844 {
3845 /* Make sure the last element of the initializer is in bounds. */
3846 finish_expr_stmt
3847 (ubsan_instrument_bounds
3848 (input_location, obase, &nelts, /*ignore_off_by_one*/false));
3849 }
7d5e76c8
JM
3850 }
3851
fa2200cb 3852 if (try_const)
c0014b07 3853 vec_alloc (const_vec, CONSTRUCTOR_NELTS (init));
fa2200cb
JM
3854
3855 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (init), idx, field, elt)
8d08fdba 3856 {
f1dedc31 3857 tree baseref = build1 (INDIRECT_REF, type, base);
fa2200cb 3858 tree one_init;
8d08fdba 3859
8a72a046 3860 num_initialized_elts++;
8d08fdba 3861
67c03833 3862 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
b25dd954
JM
3863 if (digested)
3864 one_init = build2 (INIT_EXPR, type, baseref, elt);
3865 else if (MAYBE_CLASS_TYPE_P (type) || TREE_CODE (type) == ARRAY_TYPE)
fa2200cb 3866 one_init = build_aggr_init (baseref, elt, 0, complain);
8a72a046 3867 else
fa2200cb
JM
3868 one_init = cp_build_modify_expr (baseref, NOP_EXPR,
3869 elt, complain);
574cfaa4
JM
3870 if (one_init == error_mark_node)
3871 errors = true;
fa2200cb
JM
3872 if (try_const)
3873 {
c0014b07 3874 tree e = maybe_constant_init (one_init);
fa2200cb
JM
3875 if (reduced_constant_expression_p (e))
3876 {
c0014b07 3877 CONSTRUCTOR_APPEND_ELT (const_vec, field, e);
fa2200cb
JM
3878 if (do_static_init)
3879 one_init = NULL_TREE;
3880 else
3881 one_init = build2 (INIT_EXPR, type, baseref, e);
fa2200cb
JM
3882 }
3883 else
3884 {
3885 if (do_static_init)
f11c7048
JJ
3886 {
3887 tree value = build_zero_init (TREE_TYPE (e), NULL_TREE,
3888 true);
3889 if (value)
c0014b07 3890 CONSTRUCTOR_APPEND_ELT (const_vec, field, value);
f11c7048 3891 }
fa2200cb
JM
3892 saw_non_const = true;
3893 }
3894 }
3895
3896 if (one_init)
3897 finish_expr_stmt (one_init);
67c03833 3898 current_stmt_tree ()->stmts_are_full_exprs_p = 0;
8a72a046 3899
574cfaa4
JM
3900 one_init = cp_build_unary_op (PREINCREMENT_EXPR, base, 0, complain);
3901 if (one_init == error_mark_node)
3902 errors = true;
3903 else
3904 finish_expr_stmt (one_init);
3905
3906 one_init = cp_build_unary_op (PREDECREMENT_EXPR, iterator, 0,
3907 complain);
3908 if (one_init == error_mark_node)
3909 errors = true;
3910 else
3911 finish_expr_stmt (one_init);
8d08fdba 3912 }
8d08fdba 3913
3bc63227
JM
3914 /* Any elements without explicit initializers get T{}. */
3915 empty_list = true;
8d08fdba 3916 }
8a72a046 3917 else if (from_array)
8d08fdba 3918 {
8a72a046 3919 if (init)
5a4d8044 3920 /* OK, we set base2 above. */;
95552437 3921 else if (CLASS_TYPE_P (type)
8a72a046
MM
3922 && ! TYPE_HAS_DEFAULT_CONSTRUCTOR (type))
3923 {
5ade1ed2
DG
3924 if (complain & tf_error)
3925 error ("initializer ends prematurely");
574cfaa4 3926 errors = true;
8a72a046
MM
3927 }
3928 }
8d08fdba 3929
8a72a046
MM
3930 /* Now, default-initialize any remaining elements. We don't need to
3931 do that if a) the type does not need constructing, or b) we've
094fe153
JM
3932 already initialized all the elements.
3933
3934 We do need to keep going if we're copying an array. */
3935
a02f26f6
JM
3936 if (try_const && !init)
3937 /* With a constexpr default constructor, which we checked for when
3938 setting try_const above, default-initialization is equivalent to
3939 value-initialization, and build_value_init gives us something more
3940 friendly to maybe_constant_init. */
3941 explicit_value_init_p = true;
094fe153 3942 if (from_array
1f65a8c8 3943 || ((type_build_ctor_call (type) || init || explicit_value_init_p)
9541ffee 3944 && ! (tree_fits_shwi_p (maxindex)
05bccae2 3945 && (num_initialized_elts
9439e9a1 3946 == tree_to_shwi (maxindex) + 1))))
8a72a046 3947 {
37e05cd5 3948 /* If the ITERATOR is equal to -1, then we don't have to loop;
8a72a046 3949 we've already initialized all the elements. */
4977bab6 3950 tree for_stmt;
f1dedc31 3951 tree elt_init;
b84f4651 3952 tree to;
f1dedc31 3953
3f43ac31 3954 for_stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
4977bab6 3955 finish_for_init_stmt (for_stmt);
aab384ae
RG
3956 finish_for_cond (build2 (NE_EXPR, boolean_type_node, iterator,
3957 build_int_cst (TREE_TYPE (iterator), -1)),
c5028d80 3958 for_stmt, false);
574cfaa4
JM
3959 elt_init = cp_build_unary_op (PREDECREMENT_EXPR, iterator, 0,
3960 complain);
3961 if (elt_init == error_mark_node)
3962 errors = true;
3963 finish_for_expr (elt_init, for_stmt);
8d08fdba 3964
b84f4651
MM
3965 to = build1 (INDIRECT_REF, type, base);
3966
ced2fb08
JM
3967 /* If the initializer is {}, then all elements are initialized from T{}.
3968 But for non-classes, that's the same as value-initialization. */
3969 if (empty_list)
3970 {
3971 if (cxx_dialect >= cxx11 && AGGREGATE_TYPE_P (type))
3972 {
08227658 3973 init = build_constructor (init_list_type_node, NULL);
ced2fb08
JM
3974 }
3975 else
3976 {
3977 init = NULL_TREE;
3978 explicit_value_init_p = true;
3979 }
3980 }
3981
8d08fdba
MS
3982 if (from_array)
3983 {
8d08fdba
MS
3984 tree from;
3985
3986 if (base2)
f91352dc
JM
3987 {
3988 from = build1 (INDIRECT_REF, itype, base2);
3989 if (xvalue)
3990 from = move (from);
3991 }
8d08fdba
MS
3992 else
3993 from = NULL_TREE;
3994
3995 if (from_array == 2)
5ade1ed2
DG
3996 elt_init = cp_build_modify_expr (to, NOP_EXPR, from,
3997 complain);
95552437 3998 else if (type_build_ctor_call (type))
5ade1ed2 3999 elt_init = build_aggr_init (to, from, 0, complain);
8d08fdba 4000 else if (from)
5ade1ed2
DG
4001 elt_init = cp_build_modify_expr (to, NOP_EXPR, from,
4002 complain);
8d08fdba 4003 else
8dc2b103 4004 gcc_unreachable ();
8d08fdba
MS
4005 }
4006 else if (TREE_CODE (type) == ARRAY_TYPE)
4007 {
16b53405 4008 if (init && !BRACE_ENCLOSED_INITIALIZER_P (init))
f30efcb7
JM
4009 sorry
4010 ("cannot initialize multi-dimensional array with initializer");
4011 elt_init = build_vec_init (build1 (INDIRECT_REF, type, base),
16b53405 4012 0, init,
844ae01d 4013 explicit_value_init_p,
5ade1ed2 4014 0, complain);
f1dedc31 4015 }
844ae01d 4016 else if (explicit_value_init_p)
309714d4
JM
4017 {
4018 elt_init = build_value_init (type, complain);
574cfaa4 4019 if (elt_init != error_mark_node)
309714d4
JM
4020 elt_init = build2 (INIT_EXPR, type, to, elt_init);
4021 }
f1dedc31 4022 else
844ae01d 4023 {
1f65a8c8
JM
4024 gcc_assert (type_build_ctor_call (type) || init);
4025 if (CLASS_TYPE_P (type))
4026 elt_init = build_aggr_init (to, init, 0, complain);
4027 else
4028 {
4029 if (TREE_CODE (init) == TREE_LIST)
4030 init = build_x_compound_expr_from_list (init, ELK_INIT,
4031 complain);
4032 elt_init = build2 (INIT_EXPR, type, to, init);
4033 }
844ae01d 4034 }
c8094d83 4035
574cfaa4
JM
4036 if (elt_init == error_mark_node)
4037 errors = true;
4038
c0014b07
JM
4039 if (try_const)
4040 {
a02f26f6 4041 /* FIXME refs to earlier elts */
c0014b07
JM
4042 tree e = maybe_constant_init (elt_init);
4043 if (reduced_constant_expression_p (e))
4044 {
4045 if (initializer_zerop (e))
4046 /* Don't fill the CONSTRUCTOR with zeros. */
4047 e = NULL_TREE;
4048 if (do_static_init)
4049 elt_init = NULL_TREE;
4050 }
4051 else
4052 {
4053 saw_non_const = true;
4054 if (do_static_init)
4055 e = build_zero_init (TREE_TYPE (e), NULL_TREE, true);
a02f26f6
JM
4056 else
4057 e = NULL_TREE;
c0014b07
JM
4058 }
4059
4060 if (e)
4061 {
4062 int max = tree_to_shwi (maxindex)+1;
4063 for (; num_initialized_elts < max; ++num_initialized_elts)
4064 {
4065 tree field = size_int (num_initialized_elts);
4066 CONSTRUCTOR_APPEND_ELT (const_vec, field, e);
4067 }
4068 }
4069 }
4070
2a3398e1 4071 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
c0014b07
JM
4072 if (elt_init)
4073 finish_expr_stmt (elt_init);
2a3398e1 4074 current_stmt_tree ()->stmts_are_full_exprs_p = 0;
8d08fdba 4075
5ade1ed2
DG
4076 finish_expr_stmt (cp_build_unary_op (PREINCREMENT_EXPR, base, 0,
4077 complain));
8d08fdba 4078 if (base2)
5ade1ed2
DG
4079 finish_expr_stmt (cp_build_unary_op (PREINCREMENT_EXPR, base2, 0,
4080 complain));
0fac6b0b 4081
4977bab6 4082 finish_for_stmt (for_stmt);
8d08fdba 4083 }
8a72a046
MM
4084
4085 /* Make sure to cleanup any partially constructed elements. */
f30efcb7
JM
4086 if (flag_exceptions && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
4087 && from_array != 2)
f1dedc31
MM
4088 {
4089 tree e;
ba47d38d
AH
4090 tree m = cp_build_binary_op (input_location,
4091 MINUS_EXPR, maxindex, iterator,
5ade1ed2 4092 complain);
b2153b98
KL
4093
4094 /* Flatten multi-dimensional array since build_vec_delete only
4095 expects one-dimensional array. */
4096 if (TREE_CODE (type) == ARRAY_TYPE)
ba47d38d
AH
4097 m = cp_build_binary_op (input_location,
4098 MULT_EXPR, m,
99c4346a
JM
4099 /* Avoid mixing signed and unsigned. */
4100 convert (TREE_TYPE (m),
4101 array_type_nelts_total (type)),
5ade1ed2 4102 complain);
8d08fdba 4103
ed5511d9 4104 finish_cleanup_try_block (try_block);
c8094d83 4105 e = build_vec_delete_1 (rval, m,
e79a6b40 4106 inner_elt_type, sfk_complete_destructor,
574cfaa4
JM
4107 /*use_global_delete=*/0, complain);
4108 if (e == error_mark_node)
4109 errors = true;
f1dedc31
MM
4110 finish_cleanup (e, try_block);
4111 }
4112
303b7406
NS
4113 /* The value of the array initialization is the array itself, RVAL
4114 is a pointer to the first element. */
325c3691 4115 finish_stmt_expr_expr (rval, stmt_expr);
f1dedc31 4116
2a3398e1 4117 stmt_expr = finish_init_stmts (is_global, stmt_expr, compound_stmt);
303b7406 4118
5fb4d142
JM
4119 current_stmt_tree ()->stmts_are_full_exprs_p = destroy_temps;
4120
4121 if (errors)
4122 return error_mark_node;
c0014b07
JM
4123
4124 if (try_const)
4125 {
4126 if (!saw_non_const)
4127 {
4128 tree const_init = build_constructor (atype, const_vec);
4129 return build2 (INIT_EXPR, atype, obase, const_init);
4130 }
4131 else if (do_static_init && !vec_safe_is_empty (const_vec))
4132 DECL_INITIAL (obase) = build_constructor (atype, const_vec);
4133 else
4134 vec_free (const_vec);
4135 }
5fb4d142 4136
9207099b
JM
4137 /* Now make the result have the correct type. */
4138 if (TREE_CODE (atype) == ARRAY_TYPE)
4139 {
4140 atype = build_pointer_type (atype);
4141 stmt_expr = build1 (NOP_EXPR, atype, stmt_expr);
dd865ef6 4142 stmt_expr = cp_build_indirect_ref (stmt_expr, RO_NULL, complain);
311fa510 4143 TREE_NO_WARNING (stmt_expr) = 1;
9207099b 4144 }
c8094d83 4145
f1dedc31 4146 return stmt_expr;
8d08fdba
MS
4147}
4148
86f45d2c
MM
4149/* Call the DTOR_KIND destructor for EXP. FLAGS are as for
4150 build_delete. */
298d6f60
MM
4151
4152static tree
574cfaa4
JM
4153build_dtor_call (tree exp, special_function_kind dtor_kind, int flags,
4154 tsubst_flags_t complain)
298d6f60 4155{
86f45d2c 4156 tree name;
ee76b931 4157 tree fn;
86f45d2c
MM
4158 switch (dtor_kind)
4159 {
4160 case sfk_complete_destructor:
4161 name = complete_dtor_identifier;
4162 break;
4163
4164 case sfk_base_destructor:
4165 name = base_dtor_identifier;
4166 break;
4167
4168 case sfk_deleting_destructor:
4169 name = deleting_dtor_identifier;
4170 break;
4171
4172 default:
8dc2b103 4173 gcc_unreachable ();
86f45d2c 4174 }
ee76b931 4175 fn = lookup_fnfields (TREE_TYPE (exp), name, /*protect=*/2);
c8094d83 4176 return build_new_method_call (exp, fn,
c166b898 4177 /*args=*/NULL,
ee76b931 4178 /*conversion_path=*/NULL_TREE,
63c9a190 4179 flags,
5ade1ed2 4180 /*fn_p=*/NULL,
574cfaa4 4181 complain);
298d6f60
MM
4182}
4183
8d08fdba
MS
4184/* Generate a call to a destructor. TYPE is the type to cast ADDR to.
4185 ADDR is an expression which yields the store to be destroyed.
86f45d2c
MM
4186 AUTO_DELETE is the name of the destructor to call, i.e., either
4187 sfk_complete_destructor, sfk_base_destructor, or
4188 sfk_deleting_destructor.
8d08fdba
MS
4189
4190 FLAGS is the logical disjunction of zero or more LOOKUP_
ade3dc07 4191 flags. See cp-tree.h for more info. */
e92cc029 4192
8d08fdba 4193tree
eca7fc57 4194build_delete (tree otype, tree addr, special_function_kind auto_delete,
574cfaa4 4195 int flags, int use_global_delete, tsubst_flags_t complain)
8d08fdba 4196{
8d08fdba 4197 tree expr;
8d08fdba
MS
4198
4199 if (addr == error_mark_node)
4200 return error_mark_node;
4201
eca7fc57
JM
4202 tree type = TYPE_MAIN_VARIANT (otype);
4203
8d08fdba
MS
4204 /* Can happen when CURRENT_EXCEPTION_OBJECT gets its type
4205 set to `error_mark_node' before it gets properly cleaned up. */
4206 if (type == error_mark_node)
4207 return error_mark_node;
4208
eca7fc57
JM
4209 if (TREE_CODE (type) == POINTER_TYPE)
4210 type = TYPE_MAIN_VARIANT (TREE_TYPE (type));
8d08fdba 4211
eca7fc57
JM
4212 if (TREE_CODE (type) == ARRAY_TYPE)
4213 {
4214 if (TYPE_DOMAIN (type) == NULL_TREE)
4215 {
4216 if (complain & tf_error)
4217 error ("unknown array size in delete");
4218 return error_mark_node;
4219 }
4220 return build_vec_delete (addr, array_type_nelts (type),
4221 auto_delete, use_global_delete, complain);
4222 }
03a904b5 4223
eca7fc57 4224 if (TYPE_PTR_P (otype))
8d08fdba 4225 {
eca7fc57 4226 addr = mark_rvalue_use (addr);
23b4deba 4227
b1e5b86c
GB
4228 /* We don't want to warn about delete of void*, only other
4229 incomplete types. Deleting other incomplete types
4230 invokes undefined behavior, but it is not ill-formed, so
4231 compile to something that would even do The Right Thing
4232 (TM) should the type have a trivial dtor and no delete
4233 operator. */
4234 if (!VOID_TYPE_P (type))
8d08fdba 4235 {
b1e5b86c
GB
4236 complete_type (type);
4237 if (!COMPLETE_TYPE_P (type))
4238 {
574cfaa4 4239 if ((complain & tf_warning)
c9b0866a
PC
4240 && warning (OPT_Wdelete_incomplete,
4241 "possible problem detected in invocation of "
574cfaa4 4242 "delete operator:"))
71205d17
MLI
4243 {
4244 cxx_incomplete_type_diagnostic (addr, type, DK_WARNING);
c9b0866a
PC
4245 inform (input_location,
4246 "neither the destructor nor the class-specific "
71205d17 4247 "operator delete will be called, even if they are "
d8a07487 4248 "declared when the class is defined");
71205d17 4249 }
b1e5b86c 4250 }
e2ab8a0f
JW
4251 else if (auto_delete == sfk_deleting_destructor && warn_delnonvdtor
4252 && MAYBE_CLASS_TYPE_P (type) && !CLASSTYPE_FINAL (type)
4253 && TYPE_POLYMORPHIC_P (type))
014ab419
JW
4254 {
4255 tree dtor;
4256 dtor = CLASSTYPE_DESTRUCTORS (type);
4257 if (!dtor || !DECL_VINDEX (dtor))
4258 {
4259 if (CLASSTYPE_PURE_VIRTUALS (type))
4260 warning (OPT_Wdelete_non_virtual_dtor,
4261 "deleting object of abstract class type %qT"
4262 " which has non-virtual destructor"
4263 " will cause undefined behaviour", type);
4264 else
4265 warning (OPT_Wdelete_non_virtual_dtor,
4266 "deleting object of polymorphic class type %qT"
4267 " which has non-virtual destructor"
4268 " might cause undefined behaviour", type);
4269 }
4270 }
8d08fdba
MS
4271 }
4272 if (TREE_SIDE_EFFECTS (addr))
4273 addr = save_expr (addr);
2986ae00 4274
f4f206f4 4275 /* Throw away const and volatile on target type of addr. */
4b978f96 4276 addr = convert_force (build_pointer_type (type), addr, 0, complain);
8d08fdba 4277 }
8d08fdba
MS
4278 else
4279 {
4280 /* Don't check PROTECT here; leave that decision to the
4281 destructor. If the destructor is accessible, call it,
4282 else report error. */
574cfaa4
JM
4283 addr = cp_build_addr_expr (addr, complain);
4284 if (addr == error_mark_node)
4285 return error_mark_node;
8d08fdba
MS
4286 if (TREE_SIDE_EFFECTS (addr))
4287 addr = save_expr (addr);
4288
4b978f96 4289 addr = convert_force (build_pointer_type (type), addr, 0, complain);
8d08fdba
MS
4290 }
4291
834c6dff 4292 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
8d08fdba 4293 {
eca7fc57
JM
4294 /* Make sure the destructor is callable. */
4295 if (type_build_dtor_call (type))
4296 {
4297 expr = build_dtor_call (cp_build_indirect_ref (addr, RO_NULL,
4298 complain),
4299 sfk_complete_destructor, flags, complain);
4300 if (expr == error_mark_node)
4301 return error_mark_node;
4302 }
4303
60696c53 4304 if (auto_delete != sfk_deleting_destructor)
632f2871 4305 return void_node;
8d08fdba 4306
3db45ab5
MS
4307 return build_op_delete_call (DELETE_EXPR, addr,
4308 cxx_sizeof_nowarn (type),
63c9a190
MM
4309 use_global_delete,
4310 /*placement=*/NULL_TREE,
4b978f96
PC
4311 /*alloc_fn=*/NULL_TREE,
4312 complain);
8d08fdba 4313 }
ade3dc07 4314 else
8d08fdba 4315 {
6f06d231 4316 tree head = NULL_TREE;
700f8a87 4317 tree do_delete = NULL_TREE;
bd6dd845 4318 tree ifexp;
700f8a87 4319
9f4faeae
MM
4320 if (CLASSTYPE_LAZY_DESTRUCTOR (type))
4321 lazily_declare_fn (sfk_destructor, type);
ade3dc07 4322
52682a1b
MM
4323 /* For `::delete x', we must not use the deleting destructor
4324 since then we would not be sure to get the global `operator
4325 delete'. */
86f45d2c 4326 if (use_global_delete && auto_delete == sfk_deleting_destructor)
700f8a87 4327 {
1b4a93f7
MM
4328 /* We will use ADDR multiple times so we must save it. */
4329 addr = save_expr (addr);
6f06d231 4330 head = get_target_expr (build_headof (addr));
c6002625 4331 /* Delete the object. */
20b06add
JM
4332 do_delete = build_op_delete_call (DELETE_EXPR,
4333 head,
4334 cxx_sizeof_nowarn (type),
4335 /*global_p=*/true,
4336 /*placement=*/NULL_TREE,
4337 /*alloc_fn=*/NULL_TREE,
4338 complain);
86f45d2c
MM
4339 /* Otherwise, treat this like a complete object destructor
4340 call. */
4341 auto_delete = sfk_complete_destructor;
700f8a87 4342 }
52682a1b
MM
4343 /* If the destructor is non-virtual, there is no deleting
4344 variant. Instead, we must explicitly call the appropriate
4345 `operator delete' here. */
4346 else if (!DECL_VIRTUAL_P (CLASSTYPE_DESTRUCTORS (type))
4347 && auto_delete == sfk_deleting_destructor)
4348 {
1b4a93f7
MM
4349 /* We will use ADDR multiple times so we must save it. */
4350 addr = save_expr (addr);
4351 /* Build the call. */
52682a1b
MM
4352 do_delete = build_op_delete_call (DELETE_EXPR,
4353 addr,
ea793912 4354 cxx_sizeof_nowarn (type),
5bd61841 4355 /*global_p=*/false,
63c9a190 4356 /*placement=*/NULL_TREE,
4b978f96
PC
4357 /*alloc_fn=*/NULL_TREE,
4358 complain);
52682a1b
MM
4359 /* Call the complete object destructor. */
4360 auto_delete = sfk_complete_destructor;
4361 }
e3fe84e5
JM
4362 else if (auto_delete == sfk_deleting_destructor
4363 && TYPE_GETS_REG_DELETE (type))
4364 {
4365 /* Make sure we have access to the member op delete, even though
4366 we'll actually be calling it from the destructor. */
ea793912 4367 build_op_delete_call (DELETE_EXPR, addr, cxx_sizeof_nowarn (type),
3db45ab5 4368 /*global_p=*/false,
63c9a190 4369 /*placement=*/NULL_TREE,
4b978f96
PC
4370 /*alloc_fn=*/NULL_TREE,
4371 complain);
e3fe84e5 4372 }
8d08fdba 4373
574cfaa4
JM
4374 expr = build_dtor_call (cp_build_indirect_ref (addr, RO_NULL, complain),
4375 auto_delete, flags, complain);
4376 if (expr == error_mark_node)
4377 return error_mark_node;
bd6dd845 4378 if (do_delete)
f293ce4b 4379 expr = build2 (COMPOUND_EXPR, void_type_node, expr, do_delete);
9e9ff709 4380
6f06d231
JM
4381 /* We need to calculate this before the dtor changes the vptr. */
4382 if (head)
4383 expr = build2 (COMPOUND_EXPR, void_type_node, head, expr);
4384
bd6dd845
MS
4385 if (flags & LOOKUP_DESTRUCTOR)
4386 /* Explicit destructor call; don't check for null pointer. */
4387 ifexp = integer_one_node;
8d08fdba 4388 else
574cfaa4
JM
4389 {
4390 /* Handle deleting a null pointer. */
4391 ifexp = fold (cp_build_binary_op (input_location,
6d96d7ff 4392 NE_EXPR, addr, nullptr_node,
574cfaa4
JM
4393 complain));
4394 if (ifexp == error_mark_node)
4395 return error_mark_node;
4396 }
8d08fdba 4397
bd6dd845 4398 if (ifexp != integer_one_node)
632f2871 4399 expr = build3 (COND_EXPR, void_type_node, ifexp, expr, void_node);
8d08fdba 4400
8d08fdba
MS
4401 return expr;
4402 }
ade3dc07 4403}
8d08fdba 4404
ade3dc07
JM
4405/* At the beginning of a destructor, push cleanups that will call the
4406 destructors for our base classes and members.
2a2480e1 4407
a29e1034 4408 Called from begin_destructor_body. */
8d08fdba 4409
ade3dc07 4410void
edaf3e03 4411push_base_cleanups (void)
ade3dc07 4412{
fa743e8c
NS
4413 tree binfo, base_binfo;
4414 int i;
ade3dc07
JM
4415 tree member;
4416 tree expr;
9771b263 4417 vec<tree, va_gc> *vbases;
8d08fdba 4418
ade3dc07 4419 /* Run destructors for all virtual baseclasses. */
5775a06a 4420 if (CLASSTYPE_VBASECLASSES (current_class_type))
ade3dc07 4421 {
ade3dc07 4422 tree cond = (condition_conversion
f293ce4b
RS
4423 (build2 (BIT_AND_EXPR, integer_type_node,
4424 current_in_charge_parm,
4425 integer_two_node)));
8d08fdba 4426
58c42dc2 4427 /* The CLASSTYPE_VBASECLASSES vector is in initialization
ade3dc07 4428 order, which is also the right order for pushing cleanups. */
9ba5ff0f 4429 for (vbases = CLASSTYPE_VBASECLASSES (current_class_type), i = 0;
9771b263 4430 vec_safe_iterate (vbases, i, &base_binfo); i++)
8d08fdba 4431 {
eca7fc57 4432 if (type_build_dtor_call (BINFO_TYPE (base_binfo)))
8d08fdba 4433 {
c8094d83 4434 expr = build_special_member_call (current_class_ref,
4ba126e4 4435 base_dtor_identifier,
c166b898 4436 NULL,
9ba5ff0f 4437 base_binfo,
c8094d83 4438 (LOOKUP_NORMAL
5ade1ed2 4439 | LOOKUP_NONVIRTUAL),
eca7fc57
JM
4440 tf_warning_or_error);
4441 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (BINFO_TYPE (base_binfo)))
4442 {
4443 expr = build3 (COND_EXPR, void_type_node, cond,
632f2871 4444 expr, void_node);
eca7fc57
JM
4445 finish_decl_cleanup (NULL_TREE, expr);
4446 }
8d08fdba
MS
4447 }
4448 }
ade3dc07
JM
4449 }
4450
ade3dc07 4451 /* Take care of the remaining baseclasses. */
fa743e8c
NS
4452 for (binfo = TYPE_BINFO (current_class_type), i = 0;
4453 BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
ade3dc07 4454 {
eca7fc57
JM
4455 if (BINFO_VIRTUAL_P (base_binfo)
4456 || !type_build_dtor_call (BINFO_TYPE (base_binfo)))
ade3dc07
JM
4457 continue;
4458
c8094d83 4459 expr = build_special_member_call (current_class_ref,
4ba126e4 4460 base_dtor_identifier,
c166b898 4461 NULL, base_binfo,
5ade1ed2
DG
4462 LOOKUP_NORMAL | LOOKUP_NONVIRTUAL,
4463 tf_warning_or_error);
eca7fc57
JM
4464 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (BINFO_TYPE (base_binfo)))
4465 finish_decl_cleanup (NULL_TREE, expr);
ade3dc07
JM
4466 }
4467
57ece258
JM
4468 /* Don't automatically destroy union members. */
4469 if (TREE_CODE (current_class_type) == UNION_TYPE)
4470 return;
4471
ade3dc07 4472 for (member = TYPE_FIELDS (current_class_type); member;
910ad8de 4473 member = DECL_CHAIN (member))
ade3dc07 4474 {
57ece258
JM
4475 tree this_type = TREE_TYPE (member);
4476 if (this_type == error_mark_node
2e5d2970
VR
4477 || TREE_CODE (member) != FIELD_DECL
4478 || DECL_ARTIFICIAL (member))
ade3dc07 4479 continue;
04056396 4480 if (ANON_AGGR_TYPE_P (this_type))
57ece258 4481 continue;
eca7fc57 4482 if (type_build_dtor_call (this_type))
ade3dc07 4483 {
c8094d83
MS
4484 tree this_member = (build_class_member_access_expr
4485 (current_class_ref, member,
50ad9642 4486 /*access_path=*/NULL_TREE,
5ade1ed2
DG
4487 /*preserve_reference=*/false,
4488 tf_warning_or_error));
ade3dc07
JM
4489 expr = build_delete (this_type, this_member,
4490 sfk_complete_destructor,
4491 LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL,
574cfaa4 4492 0, tf_warning_or_error);
eca7fc57
JM
4493 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (this_type))
4494 finish_decl_cleanup (NULL_TREE, expr);
ade3dc07 4495 }
8d08fdba
MS
4496 }
4497}
4498
8d08fdba
MS
4499/* Build a C++ vector delete expression.
4500 MAXINDEX is the number of elements to be deleted.
4501 ELT_SIZE is the nominal size of each element in the vector.
4502 BASE is the expression that should yield the store to be deleted.
8d08fdba
MS
4503 This function expands (or synthesizes) these calls itself.
4504 AUTO_DELETE_VEC says whether the container (vector) should be deallocated.
8d08fdba
MS
4505
4506 This also calls delete for virtual baseclasses of elements of the vector.
4507
4508 Update: MAXINDEX is no longer needed. The size can be extracted from the
4509 start of the vector for pointers, and from the type for arrays. We still
4510 use MAXINDEX for arrays because it happens to already have one of the
4511 values we'd have to extract. (We could use MAXINDEX with pointers to
4512 confirm the size, and trap if the numbers differ; not clear that it'd
4513 be worth bothering.) */
e92cc029 4514
8d08fdba 4515tree
362efdc1 4516build_vec_delete (tree base, tree maxindex,
574cfaa4
JM
4517 special_function_kind auto_delete_vec,
4518 int use_global_delete, tsubst_flags_t complain)
8d08fdba 4519{
f30432d7 4520 tree type;
49b7aacb
JM
4521 tree rval;
4522 tree base_init = NULL_TREE;
8d08fdba 4523
f30432d7 4524 type = TREE_TYPE (base);
c407792d 4525
50e10fa8 4526 if (TYPE_PTR_P (type))
8d08fdba
MS
4527 {
4528 /* Step back one from start of vector, and read dimension. */
834c6dff 4529 tree cookie_addr;
726a989a 4530 tree size_ptr_type = build_pointer_type (sizetype);
834c6dff 4531
3c784bca 4532 base = mark_rvalue_use (base);
6742d92b 4533 if (TREE_SIDE_EFFECTS (base))
49b7aacb
JM
4534 {
4535 base_init = get_target_expr (base);
4536 base = TARGET_EXPR_SLOT (base_init);
4537 }
708cae97 4538 type = strip_array_types (TREE_TYPE (type));
db3927fb
AH
4539 cookie_addr = fold_build1_loc (input_location, NEGATE_EXPR,
4540 sizetype, TYPE_SIZE_UNIT (sizetype));
5d49b6a7
RG
4541 cookie_addr = fold_build_pointer_plus (fold_convert (size_ptr_type, base),
4542 cookie_addr);
574cfaa4 4543 maxindex = cp_build_indirect_ref (cookie_addr, RO_NULL, complain);
8d08fdba 4544 }
f30432d7 4545 else if (TREE_CODE (type) == ARRAY_TYPE)
8d08fdba 4546 {
f4f206f4
KH
4547 /* Get the total number of things in the array, maxindex is a
4548 bad name. */
f30432d7 4549 maxindex = array_type_nelts_total (type);
834c6dff 4550 type = strip_array_types (type);
16b53405 4551 base = decay_conversion (base, complain);
574cfaa4
JM
4552 if (base == error_mark_node)
4553 return error_mark_node;
6742d92b 4554 if (TREE_SIDE_EFFECTS (base))
49b7aacb
JM
4555 {
4556 base_init = get_target_expr (base);
4557 base = TARGET_EXPR_SLOT (base_init);
4558 }
8d08fdba
MS
4559 }
4560 else
4561 {
574cfaa4 4562 if (base != error_mark_node && !(complain & tf_error))
8251199e 4563 error ("type to vector delete is neither pointer or array type");
8d08fdba
MS
4564 return error_mark_node;
4565 }
8d08fdba 4566
49b7aacb 4567 rval = build_vec_delete_1 (base, maxindex, type, auto_delete_vec,
574cfaa4
JM
4568 use_global_delete, complain);
4569 if (base_init && rval != error_mark_node)
f293ce4b 4570 rval = build2 (COMPOUND_EXPR, TREE_TYPE (rval), base_init, rval);
49b7aacb
JM
4571
4572 return rval;
8d08fdba 4573}