* include/bits/stl_list.h (_M_resize_pos(size_type&)): Declare.
[official-gcc.git] / gcc / cp / init.c
blobc41e30cff5c807836efb2c486b292ddb3471d732
1 /* Handle initialization things in C++.
2 Copyright (C) 1987-2015 Free Software Foundation, Inc.
3 Contributed by Michael Tiemann (tiemann@cygnus.com)
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3, or (at your option)
10 any later version.
12 GCC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3. If not see
19 <http://www.gnu.org/licenses/>. */
21 /* High-level class interface. */
23 #include "config.h"
24 #include "system.h"
25 #include "coretypes.h"
26 #include "tm.h"
27 #include "hash-set.h"
28 #include "machmode.h"
29 #include "vec.h"
30 #include "double-int.h"
31 #include "input.h"
32 #include "alias.h"
33 #include "symtab.h"
34 #include "wide-int.h"
35 #include "inchash.h"
36 #include "tree.h"
37 #include "stringpool.h"
38 #include "varasm.h"
39 #include "cp-tree.h"
40 #include "flags.h"
41 #include "target.h"
42 #include "gimplify.h"
43 #include "wide-int.h"
44 #include "c-family/c-ubsan.h"
46 static bool begin_init_stmts (tree *, tree *);
47 static tree finish_init_stmts (bool, tree, tree);
48 static void construct_virtual_base (tree, tree);
49 static void expand_aggr_init_1 (tree, tree, tree, tree, int, tsubst_flags_t);
50 static void expand_default_init (tree, tree, tree, tree, int, tsubst_flags_t);
51 static void perform_member_init (tree, tree);
52 static int member_init_ok_or_else (tree, tree, tree);
53 static void expand_virtual_init (tree, tree);
54 static tree sort_mem_initializers (tree, tree);
55 static tree initializing_context (tree);
56 static void expand_cleanup_for_base (tree, tree);
57 static tree dfs_initialize_vtbl_ptrs (tree, void *);
58 static tree build_field_list (tree, tree, int *);
59 static int diagnose_uninitialized_cst_or_ref_member_1 (tree, tree, bool, bool);
61 /* We are about to generate some complex initialization code.
62 Conceptually, it is all a single expression. However, we may want
63 to include conditionals, loops, and other such statement-level
64 constructs. Therefore, we build the initialization code inside a
65 statement-expression. This function starts such an expression.
66 STMT_EXPR_P and COMPOUND_STMT_P are filled in by this function;
67 pass them back to finish_init_stmts when the expression is
68 complete. */
70 static bool
71 begin_init_stmts (tree *stmt_expr_p, tree *compound_stmt_p)
73 bool is_global = !building_stmt_list_p ();
75 *stmt_expr_p = begin_stmt_expr ();
76 *compound_stmt_p = begin_compound_stmt (BCS_NO_SCOPE);
78 return is_global;
81 /* Finish out the statement-expression begun by the previous call to
82 begin_init_stmts. Returns the statement-expression itself. */
84 static tree
85 finish_init_stmts (bool is_global, tree stmt_expr, tree compound_stmt)
87 finish_compound_stmt (compound_stmt);
89 stmt_expr = finish_stmt_expr (stmt_expr, true);
91 gcc_assert (!building_stmt_list_p () == is_global);
93 return stmt_expr;
96 /* Constructors */
98 /* Called from initialize_vtbl_ptrs via dfs_walk. BINFO is the base
99 which we want to initialize the vtable pointer for, DATA is
100 TREE_LIST whose TREE_VALUE is the this ptr expression. */
102 static tree
103 dfs_initialize_vtbl_ptrs (tree binfo, void *data)
105 if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
106 return dfs_skip_bases;
108 if (!BINFO_PRIMARY_P (binfo) || BINFO_VIRTUAL_P (binfo))
110 tree base_ptr = TREE_VALUE ((tree) data);
112 base_ptr = build_base_path (PLUS_EXPR, base_ptr, binfo, /*nonnull=*/1,
113 tf_warning_or_error);
115 expand_virtual_init (binfo, base_ptr);
118 return NULL_TREE;
121 /* Initialize all the vtable pointers in the object pointed to by
122 ADDR. */
124 void
125 initialize_vtbl_ptrs (tree addr)
127 tree list;
128 tree type;
130 type = TREE_TYPE (TREE_TYPE (addr));
131 list = build_tree_list (type, addr);
133 /* Walk through the hierarchy, initializing the vptr in each base
134 class. We do these in pre-order because we can't find the virtual
135 bases for a class until we've initialized the vtbl for that
136 class. */
137 dfs_walk_once (TYPE_BINFO (type), dfs_initialize_vtbl_ptrs, NULL, list);
140 /* Return an expression for the zero-initialization of an object with
141 type T. This expression will either be a constant (in the case
142 that T is a scalar), or a CONSTRUCTOR (in the case that T is an
143 aggregate), or NULL (in the case that T does not require
144 initialization). In either case, the value can be used as
145 DECL_INITIAL for a decl of the indicated TYPE; it is a valid static
146 initializer. If NELTS is non-NULL, and TYPE is an ARRAY_TYPE, NELTS
147 is the number of elements in the array. If STATIC_STORAGE_P is
148 TRUE, initializers are only generated for entities for which
149 zero-initialization does not simply mean filling the storage with
150 zero bytes. FIELD_SIZE, if non-NULL, is the bit size of the field,
151 subfields with bit positions at or above that bit size shouldn't
152 be added. Note that this only works when the result is assigned
153 to a base COMPONENT_REF; if we only have a pointer to the base subobject,
154 expand_assignment will end up clearing the full size of TYPE. */
156 static tree
157 build_zero_init_1 (tree type, tree nelts, bool static_storage_p,
158 tree field_size)
160 tree init = NULL_TREE;
162 /* [dcl.init]
164 To zero-initialize an object of type T means:
166 -- if T is a scalar type, the storage is set to the value of zero
167 converted to T.
169 -- if T is a non-union class type, the storage for each nonstatic
170 data member and each base-class subobject is zero-initialized.
172 -- if T is a union type, the storage for its first data member is
173 zero-initialized.
175 -- if T is an array type, the storage for each element is
176 zero-initialized.
178 -- if T is a reference type, no initialization is performed. */
180 gcc_assert (nelts == NULL_TREE || TREE_CODE (nelts) == INTEGER_CST);
182 if (type == error_mark_node)
184 else if (static_storage_p && zero_init_p (type))
185 /* In order to save space, we do not explicitly build initializers
186 for items that do not need them. GCC's semantics are that
187 items with static storage duration that are not otherwise
188 initialized are initialized to zero. */
190 else if (TYPE_PTR_OR_PTRMEM_P (type))
191 init = convert (type, nullptr_node);
192 else if (SCALAR_TYPE_P (type))
193 init = convert (type, integer_zero_node);
194 else if (RECORD_OR_UNION_CODE_P (TREE_CODE (type)))
196 tree field;
197 vec<constructor_elt, va_gc> *v = NULL;
199 /* Iterate over the fields, building initializations. */
200 for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
202 if (TREE_CODE (field) != FIELD_DECL)
203 continue;
205 if (TREE_TYPE (field) == error_mark_node)
206 continue;
208 /* Don't add virtual bases for base classes if they are beyond
209 the size of the current field, that means it is present
210 somewhere else in the object. */
211 if (field_size)
213 tree bitpos = bit_position (field);
214 if (TREE_CODE (bitpos) == INTEGER_CST
215 && !tree_int_cst_lt (bitpos, field_size))
216 continue;
219 /* Note that for class types there will be FIELD_DECLs
220 corresponding to base classes as well. Thus, iterating
221 over TYPE_FIELDs will result in correct initialization of
222 all of the subobjects. */
223 if (!static_storage_p || !zero_init_p (TREE_TYPE (field)))
225 tree new_field_size
226 = (DECL_FIELD_IS_BASE (field)
227 && DECL_SIZE (field)
228 && TREE_CODE (DECL_SIZE (field)) == INTEGER_CST)
229 ? DECL_SIZE (field) : NULL_TREE;
230 tree value = build_zero_init_1 (TREE_TYPE (field),
231 /*nelts=*/NULL_TREE,
232 static_storage_p,
233 new_field_size);
234 if (value)
235 CONSTRUCTOR_APPEND_ELT(v, field, value);
238 /* For unions, only the first field is initialized. */
239 if (TREE_CODE (type) == UNION_TYPE)
240 break;
243 /* Build a constructor to contain the initializations. */
244 init = build_constructor (type, v);
246 else if (TREE_CODE (type) == ARRAY_TYPE)
248 tree max_index;
249 vec<constructor_elt, va_gc> *v = NULL;
251 /* Iterate over the array elements, building initializations. */
252 if (nelts)
253 max_index = fold_build2_loc (input_location,
254 MINUS_EXPR, TREE_TYPE (nelts),
255 nelts, integer_one_node);
256 else
257 max_index = array_type_nelts (type);
259 /* If we have an error_mark here, we should just return error mark
260 as we don't know the size of the array yet. */
261 if (max_index == error_mark_node)
262 return error_mark_node;
263 gcc_assert (TREE_CODE (max_index) == INTEGER_CST);
265 /* A zero-sized array, which is accepted as an extension, will
266 have an upper bound of -1. */
267 if (!tree_int_cst_equal (max_index, integer_minus_one_node))
269 constructor_elt ce;
271 /* If this is a one element array, we just use a regular init. */
272 if (tree_int_cst_equal (size_zero_node, max_index))
273 ce.index = size_zero_node;
274 else
275 ce.index = build2 (RANGE_EXPR, sizetype, size_zero_node,
276 max_index);
278 ce.value = build_zero_init_1 (TREE_TYPE (type),
279 /*nelts=*/NULL_TREE,
280 static_storage_p, NULL_TREE);
281 if (ce.value)
283 vec_alloc (v, 1);
284 v->quick_push (ce);
288 /* Build a constructor to contain the initializations. */
289 init = build_constructor (type, v);
291 else if (TREE_CODE (type) == VECTOR_TYPE)
292 init = build_zero_cst (type);
293 else
294 gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
296 /* In all cases, the initializer is a constant. */
297 if (init)
298 TREE_CONSTANT (init) = 1;
300 return init;
303 /* Return an expression for the zero-initialization of an object with
304 type T. This expression will either be a constant (in the case
305 that T is a scalar), or a CONSTRUCTOR (in the case that T is an
306 aggregate), or NULL (in the case that T does not require
307 initialization). In either case, the value can be used as
308 DECL_INITIAL for a decl of the indicated TYPE; it is a valid static
309 initializer. If NELTS is non-NULL, and TYPE is an ARRAY_TYPE, NELTS
310 is the number of elements in the array. If STATIC_STORAGE_P is
311 TRUE, initializers are only generated for entities for which
312 zero-initialization does not simply mean filling the storage with
313 zero bytes. */
315 tree
316 build_zero_init (tree type, tree nelts, bool static_storage_p)
318 return build_zero_init_1 (type, nelts, static_storage_p, NULL_TREE);
321 /* Return a suitable initializer for value-initializing an object of type
322 TYPE, as described in [dcl.init]. */
324 tree
325 build_value_init (tree type, tsubst_flags_t complain)
327 /* [dcl.init]
329 To value-initialize an object of type T means:
331 - if T is a class type (clause 9) with either no default constructor
332 (12.1) or a default constructor that is user-provided or deleted,
333 then then the object is default-initialized;
335 - if T is a (possibly cv-qualified) class type without a user-provided
336 or deleted default constructor, then the object is zero-initialized
337 and the semantic constraints for default-initialization are checked,
338 and if T has a non-trivial default constructor, the object is
339 default-initialized;
341 - if T is an array type, then each element is value-initialized;
343 - otherwise, the object is zero-initialized.
345 A program that calls for default-initialization or
346 value-initialization of an entity of reference type is ill-formed. */
348 /* The AGGR_INIT_EXPR tweaking below breaks in templates. */
349 gcc_assert (!processing_template_decl
350 || (SCALAR_TYPE_P (type) || TREE_CODE (type) == ARRAY_TYPE));
352 if (CLASS_TYPE_P (type)
353 && type_build_ctor_call (type))
355 tree ctor =
356 build_special_member_call (NULL_TREE, complete_ctor_identifier,
357 NULL, type, LOOKUP_NORMAL,
358 complain);
359 if (ctor == error_mark_node)
360 return ctor;
361 tree fn = NULL_TREE;
362 if (TREE_CODE (ctor) == CALL_EXPR)
363 fn = get_callee_fndecl (ctor);
364 ctor = build_aggr_init_expr (type, ctor);
365 if (fn && user_provided_p (fn))
366 return ctor;
367 else if (TYPE_HAS_COMPLEX_DFLT (type))
369 /* This is a class that needs constructing, but doesn't have
370 a user-provided constructor. So we need to zero-initialize
371 the object and then call the implicitly defined ctor.
372 This will be handled in simplify_aggr_init_expr. */
373 AGGR_INIT_ZERO_FIRST (ctor) = 1;
374 return ctor;
378 /* Discard any access checking during subobject initialization;
379 the checks are implied by the call to the ctor which we have
380 verified is OK (cpp0x/defaulted46.C). */
381 push_deferring_access_checks (dk_deferred);
382 tree r = build_value_init_noctor (type, complain);
383 pop_deferring_access_checks ();
384 return r;
387 /* Like build_value_init, but don't call the constructor for TYPE. Used
388 for base initializers. */
390 tree
391 build_value_init_noctor (tree type, tsubst_flags_t complain)
393 if (!COMPLETE_TYPE_P (type))
395 if (complain & tf_error)
396 error ("value-initialization of incomplete type %qT", type);
397 return error_mark_node;
399 /* FIXME the class and array cases should just use digest_init once it is
400 SFINAE-enabled. */
401 if (CLASS_TYPE_P (type))
403 gcc_assert (!TYPE_HAS_COMPLEX_DFLT (type)
404 || errorcount != 0);
406 if (TREE_CODE (type) != UNION_TYPE)
408 tree field;
409 vec<constructor_elt, va_gc> *v = NULL;
411 /* Iterate over the fields, building initializations. */
412 for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
414 tree ftype, value;
416 if (TREE_CODE (field) != FIELD_DECL)
417 continue;
419 ftype = TREE_TYPE (field);
421 if (ftype == error_mark_node)
422 continue;
424 /* We could skip vfields and fields of types with
425 user-defined constructors, but I think that won't improve
426 performance at all; it should be simpler in general just
427 to zero out the entire object than try to only zero the
428 bits that actually need it. */
430 /* Note that for class types there will be FIELD_DECLs
431 corresponding to base classes as well. Thus, iterating
432 over TYPE_FIELDs will result in correct initialization of
433 all of the subobjects. */
434 value = build_value_init (ftype, complain);
435 value = maybe_constant_init (value);
437 if (value == error_mark_node)
438 return error_mark_node;
440 CONSTRUCTOR_APPEND_ELT(v, field, value);
442 /* We shouldn't have gotten here for anything that would need
443 non-trivial initialization, and gimplify_init_ctor_preeval
444 would need to be fixed to allow it. */
445 gcc_assert (TREE_CODE (value) != TARGET_EXPR
446 && TREE_CODE (value) != AGGR_INIT_EXPR);
449 /* Build a constructor to contain the zero- initializations. */
450 return build_constructor (type, v);
453 else if (TREE_CODE (type) == ARRAY_TYPE)
455 vec<constructor_elt, va_gc> *v = NULL;
457 /* Iterate over the array elements, building initializations. */
458 tree max_index = array_type_nelts (type);
460 /* If we have an error_mark here, we should just return error mark
461 as we don't know the size of the array yet. */
462 if (max_index == error_mark_node)
464 if (complain & tf_error)
465 error ("cannot value-initialize array of unknown bound %qT",
466 type);
467 return error_mark_node;
469 gcc_assert (TREE_CODE (max_index) == INTEGER_CST);
471 /* A zero-sized array, which is accepted as an extension, will
472 have an upper bound of -1. */
473 if (!tree_int_cst_equal (max_index, integer_minus_one_node))
475 constructor_elt ce;
477 /* If this is a one element array, we just use a regular init. */
478 if (tree_int_cst_equal (size_zero_node, max_index))
479 ce.index = size_zero_node;
480 else
481 ce.index = build2 (RANGE_EXPR, sizetype, size_zero_node, max_index);
483 ce.value = build_value_init (TREE_TYPE (type), complain);
484 ce.value = maybe_constant_init (ce.value);
485 if (ce.value == error_mark_node)
486 return error_mark_node;
488 vec_alloc (v, 1);
489 v->quick_push (ce);
491 /* We shouldn't have gotten here for anything that would need
492 non-trivial initialization, and gimplify_init_ctor_preeval
493 would need to be fixed to allow it. */
494 gcc_assert (TREE_CODE (ce.value) != TARGET_EXPR
495 && TREE_CODE (ce.value) != AGGR_INIT_EXPR);
498 /* Build a constructor to contain the initializations. */
499 return build_constructor (type, v);
501 else if (TREE_CODE (type) == FUNCTION_TYPE)
503 if (complain & tf_error)
504 error ("value-initialization of function type %qT", type);
505 return error_mark_node;
507 else if (TREE_CODE (type) == REFERENCE_TYPE)
509 if (complain & tf_error)
510 error ("value-initialization of reference type %qT", type);
511 return error_mark_node;
514 return build_zero_init (type, NULL_TREE, /*static_storage_p=*/false);
517 /* Initialize current class with INIT, a TREE_LIST of
518 arguments for a target constructor. If TREE_LIST is void_type_node,
519 an empty initializer list was given. */
521 static void
522 perform_target_ctor (tree init)
524 tree decl = current_class_ref;
525 tree type = current_class_type;
527 finish_expr_stmt (build_aggr_init (decl, init,
528 LOOKUP_NORMAL|LOOKUP_DELEGATING_CONS,
529 tf_warning_or_error));
530 if (type_build_dtor_call (type))
532 tree expr = build_delete (type, decl, sfk_complete_destructor,
533 LOOKUP_NORMAL
534 |LOOKUP_NONVIRTUAL
535 |LOOKUP_DESTRUCTOR,
536 0, tf_warning_or_error);
537 if (expr != error_mark_node
538 && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
539 finish_eh_cleanup (expr);
543 /* Return the non-static data initializer for FIELD_DECL MEMBER. */
545 tree
546 get_nsdmi (tree member, bool in_ctor)
548 tree init;
549 tree save_ccp = current_class_ptr;
550 tree save_ccr = current_class_ref;
551 if (!in_ctor)
553 /* Use a PLACEHOLDER_EXPR when we don't have a 'this' parameter to
554 refer to; constexpr evaluation knows what to do with it. */
555 current_class_ref = build0 (PLACEHOLDER_EXPR, DECL_CONTEXT (member));
556 current_class_ptr = build_address (current_class_ref);
558 if (DECL_LANG_SPECIFIC (member) && DECL_TEMPLATE_INFO (member))
560 /* Do deferred instantiation of the NSDMI. */
561 init = (tsubst_copy_and_build
562 (DECL_INITIAL (DECL_TI_TEMPLATE (member)),
563 DECL_TI_ARGS (member),
564 tf_warning_or_error, member, /*function_p=*/false,
565 /*integral_constant_expression_p=*/false));
567 init = digest_nsdmi_init (member, init);
569 else
571 init = DECL_INITIAL (member);
572 if (init && TREE_CODE (init) == DEFAULT_ARG)
574 error ("constructor required before non-static data member "
575 "for %qD has been parsed", member);
576 DECL_INITIAL (member) = error_mark_node;
577 init = error_mark_node;
579 /* Strip redundant TARGET_EXPR so we don't need to remap it, and
580 so the aggregate init code below will see a CONSTRUCTOR. */
581 if (init && TREE_CODE (init) == TARGET_EXPR
582 && !VOID_TYPE_P (TREE_TYPE (TARGET_EXPR_INITIAL (init))))
583 init = TARGET_EXPR_INITIAL (init);
584 init = break_out_target_exprs (init);
586 current_class_ptr = save_ccp;
587 current_class_ref = save_ccr;
588 return init;
591 /* Initialize MEMBER, a FIELD_DECL, with INIT, a TREE_LIST of
592 arguments. If TREE_LIST is void_type_node, an empty initializer
593 list was given; if NULL_TREE no initializer was given. */
595 static void
596 perform_member_init (tree member, tree init)
598 tree decl;
599 tree type = TREE_TYPE (member);
601 /* Use the non-static data member initializer if there was no
602 mem-initializer for this field. */
603 if (init == NULL_TREE)
604 init = get_nsdmi (member, /*ctor*/true);
606 if (init == error_mark_node)
607 return;
609 /* Effective C++ rule 12 requires that all data members be
610 initialized. */
611 if (warn_ecpp && init == NULL_TREE && TREE_CODE (type) != ARRAY_TYPE)
612 warning_at (DECL_SOURCE_LOCATION (current_function_decl), OPT_Weffc__,
613 "%qD should be initialized in the member initialization list",
614 member);
616 /* Get an lvalue for the data member. */
617 decl = build_class_member_access_expr (current_class_ref, member,
618 /*access_path=*/NULL_TREE,
619 /*preserve_reference=*/true,
620 tf_warning_or_error);
621 if (decl == error_mark_node)
622 return;
624 if (warn_init_self && init && TREE_CODE (init) == TREE_LIST
625 && TREE_CHAIN (init) == NULL_TREE)
627 tree val = TREE_VALUE (init);
628 /* Handle references. */
629 if (REFERENCE_REF_P (val))
630 val = TREE_OPERAND (val, 0);
631 if (TREE_CODE (val) == COMPONENT_REF && TREE_OPERAND (val, 1) == member
632 && TREE_OPERAND (val, 0) == current_class_ref)
633 warning_at (DECL_SOURCE_LOCATION (current_function_decl),
634 OPT_Winit_self, "%qD is initialized with itself",
635 member);
638 if (init == void_type_node)
640 /* mem() means value-initialization. */
641 if (TREE_CODE (type) == ARRAY_TYPE)
643 init = build_vec_init_expr (type, init, tf_warning_or_error);
644 init = build2 (INIT_EXPR, type, decl, init);
645 finish_expr_stmt (init);
647 else
649 tree value = build_value_init (type, tf_warning_or_error);
650 if (value == error_mark_node)
651 return;
652 init = build2 (INIT_EXPR, type, decl, value);
653 finish_expr_stmt (init);
656 /* Deal with this here, as we will get confused if we try to call the
657 assignment op for an anonymous union. This can happen in a
658 synthesized copy constructor. */
659 else if (ANON_AGGR_TYPE_P (type))
661 if (init)
663 init = build2 (INIT_EXPR, type, decl, TREE_VALUE (init));
664 finish_expr_stmt (init);
667 else if (init
668 && (TREE_CODE (type) == REFERENCE_TYPE
669 /* Pre-digested NSDMI. */
670 || (((TREE_CODE (init) == CONSTRUCTOR
671 && TREE_TYPE (init) == type)
672 /* { } mem-initializer. */
673 || (TREE_CODE (init) == TREE_LIST
674 && DIRECT_LIST_INIT_P (TREE_VALUE (init))))
675 && (CP_AGGREGATE_TYPE_P (type)
676 || is_std_init_list (type)))))
678 /* With references and list-initialization, we need to deal with
679 extending temporary lifetimes. 12.2p5: "A temporary bound to a
680 reference member in a constructor’s ctor-initializer (12.6.2)
681 persists until the constructor exits." */
682 unsigned i; tree t;
683 vec<tree, va_gc> *cleanups = make_tree_vector ();
684 if (TREE_CODE (init) == TREE_LIST)
685 init = build_x_compound_expr_from_list (init, ELK_MEM_INIT,
686 tf_warning_or_error);
687 if (TREE_TYPE (init) != type)
689 if (BRACE_ENCLOSED_INITIALIZER_P (init)
690 && CP_AGGREGATE_TYPE_P (type))
691 init = reshape_init (type, init, tf_warning_or_error);
692 init = digest_init (type, init, tf_warning_or_error);
694 if (init == error_mark_node)
695 return;
696 /* A FIELD_DECL doesn't really have a suitable lifetime, but
697 make_temporary_var_for_ref_to_temp will treat it as automatic and
698 set_up_extended_ref_temp wants to use the decl in a warning. */
699 init = extend_ref_init_temps (member, init, &cleanups);
700 if (TREE_CODE (type) == ARRAY_TYPE
701 && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (type)))
702 init = build_vec_init_expr (type, init, tf_warning_or_error);
703 init = build2 (INIT_EXPR, type, decl, init);
704 finish_expr_stmt (init);
705 FOR_EACH_VEC_ELT (*cleanups, i, t)
706 push_cleanup (decl, t, false);
707 release_tree_vector (cleanups);
709 else if (type_build_ctor_call (type)
710 || (init && CLASS_TYPE_P (strip_array_types (type))))
712 if (TREE_CODE (type) == ARRAY_TYPE)
714 if (init)
716 if (TREE_CHAIN (init))
717 init = error_mark_node;
718 else
719 init = TREE_VALUE (init);
720 if (BRACE_ENCLOSED_INITIALIZER_P (init))
721 init = digest_init (type, init, tf_warning_or_error);
723 if (init == NULL_TREE
724 || same_type_ignoring_top_level_qualifiers_p (type,
725 TREE_TYPE (init)))
727 init = build_vec_init_expr (type, init, tf_warning_or_error);
728 init = build2 (INIT_EXPR, type, decl, init);
729 finish_expr_stmt (init);
731 else
732 error ("invalid initializer for array member %q#D", member);
734 else
736 int flags = LOOKUP_NORMAL;
737 if (DECL_DEFAULTED_FN (current_function_decl))
738 flags |= LOOKUP_DEFAULTED;
739 if (CP_TYPE_CONST_P (type)
740 && init == NULL_TREE
741 && default_init_uninitialized_part (type))
743 /* TYPE_NEEDS_CONSTRUCTING can be set just because we have a
744 vtable; still give this diagnostic. */
745 if (permerror (DECL_SOURCE_LOCATION (current_function_decl),
746 "uninitialized const member in %q#T", type))
747 inform (DECL_SOURCE_LOCATION (member),
748 "%q#D should be initialized", member );
750 finish_expr_stmt (build_aggr_init (decl, init, flags,
751 tf_warning_or_error));
754 else
756 if (init == NULL_TREE)
758 tree core_type;
759 /* member traversal: note it leaves init NULL */
760 if (TREE_CODE (type) == REFERENCE_TYPE)
762 if (permerror (DECL_SOURCE_LOCATION (current_function_decl),
763 "uninitialized reference member in %q#T", type))
764 inform (DECL_SOURCE_LOCATION (member),
765 "%q#D should be initialized", member);
767 else if (CP_TYPE_CONST_P (type))
769 if (permerror (DECL_SOURCE_LOCATION (current_function_decl),
770 "uninitialized const member in %q#T", type))
771 inform (DECL_SOURCE_LOCATION (member),
772 "%q#D should be initialized", member );
775 core_type = strip_array_types (type);
777 if (CLASS_TYPE_P (core_type)
778 && (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type)
779 || CLASSTYPE_REF_FIELDS_NEED_INIT (core_type)))
780 diagnose_uninitialized_cst_or_ref_member (core_type,
781 /*using_new=*/false,
782 /*complain=*/true);
784 else if (TREE_CODE (init) == TREE_LIST)
785 /* There was an explicit member initialization. Do some work
786 in that case. */
787 init = build_x_compound_expr_from_list (init, ELK_MEM_INIT,
788 tf_warning_or_error);
790 if (init)
791 finish_expr_stmt (cp_build_modify_expr (decl, INIT_EXPR, init,
792 tf_warning_or_error));
795 if (type_build_dtor_call (type))
797 tree expr;
799 expr = build_class_member_access_expr (current_class_ref, member,
800 /*access_path=*/NULL_TREE,
801 /*preserve_reference=*/false,
802 tf_warning_or_error);
803 expr = build_delete (type, expr, sfk_complete_destructor,
804 LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR, 0,
805 tf_warning_or_error);
807 if (expr != error_mark_node
808 && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
809 finish_eh_cleanup (expr);
813 /* Returns a TREE_LIST containing (as the TREE_PURPOSE of each node) all
814 the FIELD_DECLs on the TYPE_FIELDS list for T, in reverse order. */
816 static tree
817 build_field_list (tree t, tree list, int *uses_unions_p)
819 tree fields;
821 /* Note whether or not T is a union. */
822 if (TREE_CODE (t) == UNION_TYPE)
823 *uses_unions_p = 1;
825 for (fields = TYPE_FIELDS (t); fields; fields = DECL_CHAIN (fields))
827 tree fieldtype;
829 /* Skip CONST_DECLs for enumeration constants and so forth. */
830 if (TREE_CODE (fields) != FIELD_DECL || DECL_ARTIFICIAL (fields))
831 continue;
833 fieldtype = TREE_TYPE (fields);
834 /* Keep track of whether or not any fields are unions. */
835 if (TREE_CODE (fieldtype) == UNION_TYPE)
836 *uses_unions_p = 1;
838 /* For an anonymous struct or union, we must recursively
839 consider the fields of the anonymous type. They can be
840 directly initialized from the constructor. */
841 if (ANON_AGGR_TYPE_P (fieldtype))
843 /* Add this field itself. Synthesized copy constructors
844 initialize the entire aggregate. */
845 list = tree_cons (fields, NULL_TREE, list);
846 /* And now add the fields in the anonymous aggregate. */
847 list = build_field_list (fieldtype, list, uses_unions_p);
849 /* Add this field. */
850 else if (DECL_NAME (fields))
851 list = tree_cons (fields, NULL_TREE, list);
854 return list;
857 /* The MEM_INITS are a TREE_LIST. The TREE_PURPOSE of each list gives
858 a FIELD_DECL or BINFO in T that needs initialization. The
859 TREE_VALUE gives the initializer, or list of initializer arguments.
861 Return a TREE_LIST containing all of the initializations required
862 for T, in the order in which they should be performed. The output
863 list has the same format as the input. */
865 static tree
866 sort_mem_initializers (tree t, tree mem_inits)
868 tree init;
869 tree base, binfo, base_binfo;
870 tree sorted_inits;
871 tree next_subobject;
872 vec<tree, va_gc> *vbases;
873 int i;
874 int uses_unions_p = 0;
876 /* Build up a list of initializations. The TREE_PURPOSE of entry
877 will be the subobject (a FIELD_DECL or BINFO) to initialize. The
878 TREE_VALUE will be the constructor arguments, or NULL if no
879 explicit initialization was provided. */
880 sorted_inits = NULL_TREE;
882 /* Process the virtual bases. */
883 for (vbases = CLASSTYPE_VBASECLASSES (t), i = 0;
884 vec_safe_iterate (vbases, i, &base); i++)
885 sorted_inits = tree_cons (base, NULL_TREE, sorted_inits);
887 /* Process the direct bases. */
888 for (binfo = TYPE_BINFO (t), i = 0;
889 BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
890 if (!BINFO_VIRTUAL_P (base_binfo))
891 sorted_inits = tree_cons (base_binfo, NULL_TREE, sorted_inits);
893 /* Process the non-static data members. */
894 sorted_inits = build_field_list (t, sorted_inits, &uses_unions_p);
895 /* Reverse the entire list of initializations, so that they are in
896 the order that they will actually be performed. */
897 sorted_inits = nreverse (sorted_inits);
899 /* If the user presented the initializers in an order different from
900 that in which they will actually occur, we issue a warning. Keep
901 track of the next subobject which can be explicitly initialized
902 without issuing a warning. */
903 next_subobject = sorted_inits;
905 /* Go through the explicit initializers, filling in TREE_PURPOSE in
906 the SORTED_INITS. */
907 for (init = mem_inits; init; init = TREE_CHAIN (init))
909 tree subobject;
910 tree subobject_init;
912 subobject = TREE_PURPOSE (init);
914 /* If the explicit initializers are in sorted order, then
915 SUBOBJECT will be NEXT_SUBOBJECT, or something following
916 it. */
917 for (subobject_init = next_subobject;
918 subobject_init;
919 subobject_init = TREE_CHAIN (subobject_init))
920 if (TREE_PURPOSE (subobject_init) == subobject)
921 break;
923 /* Issue a warning if the explicit initializer order does not
924 match that which will actually occur.
925 ??? Are all these on the correct lines? */
926 if (warn_reorder && !subobject_init)
928 if (TREE_CODE (TREE_PURPOSE (next_subobject)) == FIELD_DECL)
929 warning (OPT_Wreorder, "%q+D will be initialized after",
930 TREE_PURPOSE (next_subobject));
931 else
932 warning (OPT_Wreorder, "base %qT will be initialized after",
933 TREE_PURPOSE (next_subobject));
934 if (TREE_CODE (subobject) == FIELD_DECL)
935 warning (OPT_Wreorder, " %q+#D", subobject);
936 else
937 warning (OPT_Wreorder, " base %qT", subobject);
938 warning_at (DECL_SOURCE_LOCATION (current_function_decl),
939 OPT_Wreorder, " when initialized here");
942 /* Look again, from the beginning of the list. */
943 if (!subobject_init)
945 subobject_init = sorted_inits;
946 while (TREE_PURPOSE (subobject_init) != subobject)
947 subobject_init = TREE_CHAIN (subobject_init);
950 /* It is invalid to initialize the same subobject more than
951 once. */
952 if (TREE_VALUE (subobject_init))
954 if (TREE_CODE (subobject) == FIELD_DECL)
955 error_at (DECL_SOURCE_LOCATION (current_function_decl),
956 "multiple initializations given for %qD",
957 subobject);
958 else
959 error_at (DECL_SOURCE_LOCATION (current_function_decl),
960 "multiple initializations given for base %qT",
961 subobject);
964 /* Record the initialization. */
965 TREE_VALUE (subobject_init) = TREE_VALUE (init);
966 next_subobject = subobject_init;
969 /* [class.base.init]
971 If a ctor-initializer specifies more than one mem-initializer for
972 multiple members of the same union (including members of
973 anonymous unions), the ctor-initializer is ill-formed.
975 Here we also splice out uninitialized union members. */
976 if (uses_unions_p)
978 tree *last_p = NULL;
979 tree *p;
980 for (p = &sorted_inits; *p; )
982 tree field;
983 tree ctx;
985 init = *p;
987 field = TREE_PURPOSE (init);
989 /* Skip base classes. */
990 if (TREE_CODE (field) != FIELD_DECL)
991 goto next;
993 /* If this is an anonymous union with no explicit initializer,
994 splice it out. */
995 if (!TREE_VALUE (init) && ANON_UNION_TYPE_P (TREE_TYPE (field)))
996 goto splice;
998 /* See if this field is a member of a union, or a member of a
999 structure contained in a union, etc. */
1000 for (ctx = DECL_CONTEXT (field);
1001 !same_type_p (ctx, t);
1002 ctx = TYPE_CONTEXT (ctx))
1003 if (TREE_CODE (ctx) == UNION_TYPE
1004 || !ANON_AGGR_TYPE_P (ctx))
1005 break;
1006 /* If this field is not a member of a union, skip it. */
1007 if (TREE_CODE (ctx) != UNION_TYPE)
1008 goto next;
1010 /* If this union member has no explicit initializer and no NSDMI,
1011 splice it out. */
1012 if (TREE_VALUE (init) || DECL_INITIAL (field))
1013 /* OK. */;
1014 else
1015 goto splice;
1017 /* It's only an error if we have two initializers for the same
1018 union type. */
1019 if (!last_p)
1021 last_p = p;
1022 goto next;
1025 /* See if LAST_FIELD and the field initialized by INIT are
1026 members of the same union. If so, there's a problem,
1027 unless they're actually members of the same structure
1028 which is itself a member of a union. For example, given:
1030 union { struct { int i; int j; }; };
1032 initializing both `i' and `j' makes sense. */
1033 ctx = common_enclosing_class (DECL_CONTEXT (field),
1034 DECL_CONTEXT (TREE_PURPOSE (*last_p)));
1036 if (ctx && TREE_CODE (ctx) == UNION_TYPE)
1038 /* A mem-initializer hides an NSDMI. */
1039 if (TREE_VALUE (init) && !TREE_VALUE (*last_p))
1040 *last_p = TREE_CHAIN (*last_p);
1041 else if (TREE_VALUE (*last_p) && !TREE_VALUE (init))
1042 goto splice;
1043 else
1045 error_at (DECL_SOURCE_LOCATION (current_function_decl),
1046 "initializations for multiple members of %qT",
1047 ctx);
1048 goto splice;
1052 last_p = p;
1054 next:
1055 p = &TREE_CHAIN (*p);
1056 continue;
1057 splice:
1058 *p = TREE_CHAIN (*p);
1059 continue;
1063 return sorted_inits;
1066 /* Initialize all bases and members of CURRENT_CLASS_TYPE. MEM_INITS
1067 is a TREE_LIST giving the explicit mem-initializer-list for the
1068 constructor. The TREE_PURPOSE of each entry is a subobject (a
1069 FIELD_DECL or a BINFO) of the CURRENT_CLASS_TYPE. The TREE_VALUE
1070 is a TREE_LIST giving the arguments to the constructor or
1071 void_type_node for an empty list of arguments. */
1073 void
1074 emit_mem_initializers (tree mem_inits)
1076 int flags = LOOKUP_NORMAL;
1078 /* We will already have issued an error message about the fact that
1079 the type is incomplete. */
1080 if (!COMPLETE_TYPE_P (current_class_type))
1081 return;
1083 if (mem_inits
1084 && TYPE_P (TREE_PURPOSE (mem_inits))
1085 && same_type_p (TREE_PURPOSE (mem_inits), current_class_type))
1087 /* Delegating constructor. */
1088 gcc_assert (TREE_CHAIN (mem_inits) == NULL_TREE);
1089 perform_target_ctor (TREE_VALUE (mem_inits));
1090 return;
1093 if (DECL_DEFAULTED_FN (current_function_decl)
1094 && ! DECL_INHERITED_CTOR_BASE (current_function_decl))
1095 flags |= LOOKUP_DEFAULTED;
1097 /* Sort the mem-initializers into the order in which the
1098 initializations should be performed. */
1099 mem_inits = sort_mem_initializers (current_class_type, mem_inits);
1101 in_base_initializer = 1;
1103 /* Initialize base classes. */
1104 for (; (mem_inits
1105 && TREE_CODE (TREE_PURPOSE (mem_inits)) != FIELD_DECL);
1106 mem_inits = TREE_CHAIN (mem_inits))
1108 tree subobject = TREE_PURPOSE (mem_inits);
1109 tree arguments = TREE_VALUE (mem_inits);
1111 /* We already have issued an error message. */
1112 if (arguments == error_mark_node)
1113 continue;
1115 if (arguments == NULL_TREE)
1117 /* If these initializations are taking place in a copy constructor,
1118 the base class should probably be explicitly initialized if there
1119 is a user-defined constructor in the base class (other than the
1120 default constructor, which will be called anyway). */
1121 if (extra_warnings
1122 && DECL_COPY_CONSTRUCTOR_P (current_function_decl)
1123 && type_has_user_nondefault_constructor (BINFO_TYPE (subobject)))
1124 warning_at (DECL_SOURCE_LOCATION (current_function_decl),
1125 OPT_Wextra, "base class %q#T should be explicitly "
1126 "initialized in the copy constructor",
1127 BINFO_TYPE (subobject));
1130 /* Initialize the base. */
1131 if (BINFO_VIRTUAL_P (subobject))
1132 construct_virtual_base (subobject, arguments);
1133 else
1135 tree base_addr;
1137 base_addr = build_base_path (PLUS_EXPR, current_class_ptr,
1138 subobject, 1, tf_warning_or_error);
1139 expand_aggr_init_1 (subobject, NULL_TREE,
1140 cp_build_indirect_ref (base_addr, RO_NULL,
1141 tf_warning_or_error),
1142 arguments,
1143 flags,
1144 tf_warning_or_error);
1145 expand_cleanup_for_base (subobject, NULL_TREE);
1148 in_base_initializer = 0;
1150 /* Initialize the vptrs. */
1151 initialize_vtbl_ptrs (current_class_ptr);
1153 /* Initialize the data members. */
1154 while (mem_inits)
1156 perform_member_init (TREE_PURPOSE (mem_inits),
1157 TREE_VALUE (mem_inits));
1158 mem_inits = TREE_CHAIN (mem_inits);
1162 /* Returns the address of the vtable (i.e., the value that should be
1163 assigned to the vptr) for BINFO. */
1165 tree
1166 build_vtbl_address (tree binfo)
1168 tree binfo_for = binfo;
1169 tree vtbl;
1171 if (BINFO_VPTR_INDEX (binfo) && BINFO_VIRTUAL_P (binfo))
1172 /* If this is a virtual primary base, then the vtable we want to store
1173 is that for the base this is being used as the primary base of. We
1174 can't simply skip the initialization, because we may be expanding the
1175 inits of a subobject constructor where the virtual base layout
1176 can be different. */
1177 while (BINFO_PRIMARY_P (binfo_for))
1178 binfo_for = BINFO_INHERITANCE_CHAIN (binfo_for);
1180 /* Figure out what vtable BINFO's vtable is based on, and mark it as
1181 used. */
1182 vtbl = get_vtbl_decl_for_binfo (binfo_for);
1183 TREE_USED (vtbl) = true;
1185 /* Now compute the address to use when initializing the vptr. */
1186 vtbl = unshare_expr (BINFO_VTABLE (binfo_for));
1187 if (VAR_P (vtbl))
1188 vtbl = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (vtbl)), vtbl);
1190 return vtbl;
1193 /* This code sets up the virtual function tables appropriate for
1194 the pointer DECL. It is a one-ply initialization.
1196 BINFO is the exact type that DECL is supposed to be. In
1197 multiple inheritance, this might mean "C's A" if C : A, B. */
1199 static void
1200 expand_virtual_init (tree binfo, tree decl)
1202 tree vtbl, vtbl_ptr;
1203 tree vtt_index;
1205 /* Compute the initializer for vptr. */
1206 vtbl = build_vtbl_address (binfo);
1208 /* We may get this vptr from a VTT, if this is a subobject
1209 constructor or subobject destructor. */
1210 vtt_index = BINFO_VPTR_INDEX (binfo);
1211 if (vtt_index)
1213 tree vtbl2;
1214 tree vtt_parm;
1216 /* Compute the value to use, when there's a VTT. */
1217 vtt_parm = current_vtt_parm;
1218 vtbl2 = fold_build_pointer_plus (vtt_parm, vtt_index);
1219 vtbl2 = cp_build_indirect_ref (vtbl2, RO_NULL, tf_warning_or_error);
1220 vtbl2 = convert (TREE_TYPE (vtbl), vtbl2);
1222 /* The actual initializer is the VTT value only in the subobject
1223 constructor. In maybe_clone_body we'll substitute NULL for
1224 the vtt_parm in the case of the non-subobject constructor. */
1225 vtbl = build3 (COND_EXPR,
1226 TREE_TYPE (vtbl),
1227 build2 (EQ_EXPR, boolean_type_node,
1228 current_in_charge_parm, integer_zero_node),
1229 vtbl2,
1230 vtbl);
1233 /* Compute the location of the vtpr. */
1234 vtbl_ptr = build_vfield_ref (cp_build_indirect_ref (decl, RO_NULL,
1235 tf_warning_or_error),
1236 TREE_TYPE (binfo));
1237 gcc_assert (vtbl_ptr != error_mark_node);
1239 /* Assign the vtable to the vptr. */
1240 vtbl = convert_force (TREE_TYPE (vtbl_ptr), vtbl, 0, tf_warning_or_error);
1241 finish_expr_stmt (cp_build_modify_expr (vtbl_ptr, NOP_EXPR, vtbl,
1242 tf_warning_or_error));
1245 /* If an exception is thrown in a constructor, those base classes already
1246 constructed must be destroyed. This function creates the cleanup
1247 for BINFO, which has just been constructed. If FLAG is non-NULL,
1248 it is a DECL which is nonzero when this base needs to be
1249 destroyed. */
1251 static void
1252 expand_cleanup_for_base (tree binfo, tree flag)
1254 tree expr;
1256 if (!type_build_dtor_call (BINFO_TYPE (binfo)))
1257 return;
1259 /* Call the destructor. */
1260 expr = build_special_member_call (current_class_ref,
1261 base_dtor_identifier,
1262 NULL,
1263 binfo,
1264 LOOKUP_NORMAL | LOOKUP_NONVIRTUAL,
1265 tf_warning_or_error);
1267 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (BINFO_TYPE (binfo)))
1268 return;
1270 if (flag)
1271 expr = fold_build3_loc (input_location,
1272 COND_EXPR, void_type_node,
1273 c_common_truthvalue_conversion (input_location, flag),
1274 expr, integer_zero_node);
1276 finish_eh_cleanup (expr);
1279 /* Construct the virtual base-class VBASE passing the ARGUMENTS to its
1280 constructor. */
1282 static void
1283 construct_virtual_base (tree vbase, tree arguments)
1285 tree inner_if_stmt;
1286 tree exp;
1287 tree flag;
1289 /* If there are virtual base classes with destructors, we need to
1290 emit cleanups to destroy them if an exception is thrown during
1291 the construction process. These exception regions (i.e., the
1292 period during which the cleanups must occur) begin from the time
1293 the construction is complete to the end of the function. If we
1294 create a conditional block in which to initialize the
1295 base-classes, then the cleanup region for the virtual base begins
1296 inside a block, and ends outside of that block. This situation
1297 confuses the sjlj exception-handling code. Therefore, we do not
1298 create a single conditional block, but one for each
1299 initialization. (That way the cleanup regions always begin
1300 in the outer block.) We trust the back end to figure out
1301 that the FLAG will not change across initializations, and
1302 avoid doing multiple tests. */
1303 flag = DECL_CHAIN (DECL_ARGUMENTS (current_function_decl));
1304 inner_if_stmt = begin_if_stmt ();
1305 finish_if_stmt_cond (flag, inner_if_stmt);
1307 /* Compute the location of the virtual base. If we're
1308 constructing virtual bases, then we must be the most derived
1309 class. Therefore, we don't have to look up the virtual base;
1310 we already know where it is. */
1311 exp = convert_to_base_statically (current_class_ref, vbase);
1313 expand_aggr_init_1 (vbase, current_class_ref, exp, arguments,
1314 0, tf_warning_or_error);
1315 finish_then_clause (inner_if_stmt);
1316 finish_if_stmt (inner_if_stmt);
1318 expand_cleanup_for_base (vbase, flag);
1321 /* Find the context in which this FIELD can be initialized. */
1323 static tree
1324 initializing_context (tree field)
1326 tree t = DECL_CONTEXT (field);
1328 /* Anonymous union members can be initialized in the first enclosing
1329 non-anonymous union context. */
1330 while (t && ANON_AGGR_TYPE_P (t))
1331 t = TYPE_CONTEXT (t);
1332 return t;
1335 /* Function to give error message if member initialization specification
1336 is erroneous. FIELD is the member we decided to initialize.
1337 TYPE is the type for which the initialization is being performed.
1338 FIELD must be a member of TYPE.
1340 MEMBER_NAME is the name of the member. */
1342 static int
1343 member_init_ok_or_else (tree field, tree type, tree member_name)
1345 if (field == error_mark_node)
1346 return 0;
1347 if (!field)
1349 error ("class %qT does not have any field named %qD", type,
1350 member_name);
1351 return 0;
1353 if (VAR_P (field))
1355 error ("%q#D is a static data member; it can only be "
1356 "initialized at its definition",
1357 field);
1358 return 0;
1360 if (TREE_CODE (field) != FIELD_DECL)
1362 error ("%q#D is not a non-static data member of %qT",
1363 field, type);
1364 return 0;
1366 if (initializing_context (field) != type)
1368 error ("class %qT does not have any field named %qD", type,
1369 member_name);
1370 return 0;
1373 return 1;
1376 /* NAME is a FIELD_DECL, an IDENTIFIER_NODE which names a field, or it
1377 is a _TYPE node or TYPE_DECL which names a base for that type.
1378 Check the validity of NAME, and return either the base _TYPE, base
1379 binfo, or the FIELD_DECL of the member. If NAME is invalid, return
1380 NULL_TREE and issue a diagnostic.
1382 An old style unnamed direct single base construction is permitted,
1383 where NAME is NULL. */
1385 tree
1386 expand_member_init (tree name)
1388 tree basetype;
1389 tree field;
1391 if (!current_class_ref)
1392 return NULL_TREE;
1394 if (!name)
1396 /* This is an obsolete unnamed base class initializer. The
1397 parser will already have warned about its use. */
1398 switch (BINFO_N_BASE_BINFOS (TYPE_BINFO (current_class_type)))
1400 case 0:
1401 error ("unnamed initializer for %qT, which has no base classes",
1402 current_class_type);
1403 return NULL_TREE;
1404 case 1:
1405 basetype = BINFO_TYPE
1406 (BINFO_BASE_BINFO (TYPE_BINFO (current_class_type), 0));
1407 break;
1408 default:
1409 error ("unnamed initializer for %qT, which uses multiple inheritance",
1410 current_class_type);
1411 return NULL_TREE;
1414 else if (TYPE_P (name))
1416 basetype = TYPE_MAIN_VARIANT (name);
1417 name = TYPE_NAME (name);
1419 else if (TREE_CODE (name) == TYPE_DECL)
1420 basetype = TYPE_MAIN_VARIANT (TREE_TYPE (name));
1421 else
1422 basetype = NULL_TREE;
1424 if (basetype)
1426 tree class_binfo;
1427 tree direct_binfo;
1428 tree virtual_binfo;
1429 int i;
1431 if (current_template_parms
1432 || same_type_p (basetype, current_class_type))
1433 return basetype;
1435 class_binfo = TYPE_BINFO (current_class_type);
1436 direct_binfo = NULL_TREE;
1437 virtual_binfo = NULL_TREE;
1439 /* Look for a direct base. */
1440 for (i = 0; BINFO_BASE_ITERATE (class_binfo, i, direct_binfo); ++i)
1441 if (SAME_BINFO_TYPE_P (BINFO_TYPE (direct_binfo), basetype))
1442 break;
1444 /* Look for a virtual base -- unless the direct base is itself
1445 virtual. */
1446 if (!direct_binfo || !BINFO_VIRTUAL_P (direct_binfo))
1447 virtual_binfo = binfo_for_vbase (basetype, current_class_type);
1449 /* [class.base.init]
1451 If a mem-initializer-id is ambiguous because it designates
1452 both a direct non-virtual base class and an inherited virtual
1453 base class, the mem-initializer is ill-formed. */
1454 if (direct_binfo && virtual_binfo)
1456 error ("%qD is both a direct base and an indirect virtual base",
1457 basetype);
1458 return NULL_TREE;
1461 if (!direct_binfo && !virtual_binfo)
1463 if (CLASSTYPE_VBASECLASSES (current_class_type))
1464 error ("type %qT is not a direct or virtual base of %qT",
1465 basetype, current_class_type);
1466 else
1467 error ("type %qT is not a direct base of %qT",
1468 basetype, current_class_type);
1469 return NULL_TREE;
1472 return direct_binfo ? direct_binfo : virtual_binfo;
1474 else
1476 if (identifier_p (name))
1477 field = lookup_field (current_class_type, name, 1, false);
1478 else
1479 field = name;
1481 if (member_init_ok_or_else (field, current_class_type, name))
1482 return field;
1485 return NULL_TREE;
1488 /* This is like `expand_member_init', only it stores one aggregate
1489 value into another.
1491 INIT comes in two flavors: it is either a value which
1492 is to be stored in EXP, or it is a parameter list
1493 to go to a constructor, which will operate on EXP.
1494 If INIT is not a parameter list for a constructor, then set
1495 LOOKUP_ONLYCONVERTING.
1496 If FLAGS is LOOKUP_ONLYCONVERTING then it is the = init form of
1497 the initializer, if FLAGS is 0, then it is the (init) form.
1498 If `init' is a CONSTRUCTOR, then we emit a warning message,
1499 explaining that such initializations are invalid.
1501 If INIT resolves to a CALL_EXPR which happens to return
1502 something of the type we are looking for, then we know
1503 that we can safely use that call to perform the
1504 initialization.
1506 The virtual function table pointer cannot be set up here, because
1507 we do not really know its type.
1509 This never calls operator=().
1511 When initializing, nothing is CONST.
1513 A default copy constructor may have to be used to perform the
1514 initialization.
1516 A constructor or a conversion operator may have to be used to
1517 perform the initialization, but not both, as it would be ambiguous. */
1519 tree
1520 build_aggr_init (tree exp, tree init, int flags, tsubst_flags_t complain)
1522 tree stmt_expr;
1523 tree compound_stmt;
1524 int destroy_temps;
1525 tree type = TREE_TYPE (exp);
1526 int was_const = TREE_READONLY (exp);
1527 int was_volatile = TREE_THIS_VOLATILE (exp);
1528 int is_global;
1530 if (init == error_mark_node)
1531 return error_mark_node;
1533 TREE_READONLY (exp) = 0;
1534 TREE_THIS_VOLATILE (exp) = 0;
1536 if (init && init != void_type_node
1537 && TREE_CODE (init) != TREE_LIST
1538 && !(TREE_CODE (init) == TARGET_EXPR
1539 && TARGET_EXPR_DIRECT_INIT_P (init))
1540 && !DIRECT_LIST_INIT_P (init))
1541 flags |= LOOKUP_ONLYCONVERTING;
1543 if (TREE_CODE (type) == ARRAY_TYPE)
1545 tree itype;
1547 /* An array may not be initialized use the parenthesized
1548 initialization form -- unless the initializer is "()". */
1549 if (init && TREE_CODE (init) == TREE_LIST)
1551 if (complain & tf_error)
1552 error ("bad array initializer");
1553 return error_mark_node;
1555 /* Must arrange to initialize each element of EXP
1556 from elements of INIT. */
1557 itype = init ? TREE_TYPE (init) : NULL_TREE;
1558 if (cv_qualified_p (type))
1559 TREE_TYPE (exp) = cv_unqualified (type);
1560 if (itype && cv_qualified_p (itype))
1561 TREE_TYPE (init) = cv_unqualified (itype);
1562 stmt_expr = build_vec_init (exp, NULL_TREE, init,
1563 /*explicit_value_init_p=*/false,
1564 itype && same_type_p (TREE_TYPE (init),
1565 TREE_TYPE (exp)),
1566 complain);
1567 TREE_READONLY (exp) = was_const;
1568 TREE_THIS_VOLATILE (exp) = was_volatile;
1569 TREE_TYPE (exp) = type;
1570 /* Restore the type of init unless it was used directly. */
1571 if (init && TREE_CODE (stmt_expr) != INIT_EXPR)
1572 TREE_TYPE (init) = itype;
1573 return stmt_expr;
1576 if ((VAR_P (exp) || TREE_CODE (exp) == PARM_DECL)
1577 && !lookup_attribute ("warn_unused", TYPE_ATTRIBUTES (type)))
1578 /* Just know that we've seen something for this node. */
1579 TREE_USED (exp) = 1;
1581 is_global = begin_init_stmts (&stmt_expr, &compound_stmt);
1582 destroy_temps = stmts_are_full_exprs_p ();
1583 current_stmt_tree ()->stmts_are_full_exprs_p = 0;
1584 expand_aggr_init_1 (TYPE_BINFO (type), exp, exp,
1585 init, LOOKUP_NORMAL|flags, complain);
1586 stmt_expr = finish_init_stmts (is_global, stmt_expr, compound_stmt);
1587 current_stmt_tree ()->stmts_are_full_exprs_p = destroy_temps;
1588 TREE_READONLY (exp) = was_const;
1589 TREE_THIS_VOLATILE (exp) = was_volatile;
1591 return stmt_expr;
1594 static void
1595 expand_default_init (tree binfo, tree true_exp, tree exp, tree init, int flags,
1596 tsubst_flags_t complain)
1598 tree type = TREE_TYPE (exp);
1599 tree ctor_name;
1601 /* It fails because there may not be a constructor which takes
1602 its own type as the first (or only parameter), but which does
1603 take other types via a conversion. So, if the thing initializing
1604 the expression is a unit element of type X, first try X(X&),
1605 followed by initialization by X. If neither of these work
1606 out, then look hard. */
1607 tree rval;
1608 vec<tree, va_gc> *parms;
1610 /* If we have direct-initialization from an initializer list, pull
1611 it out of the TREE_LIST so the code below can see it. */
1612 if (init && TREE_CODE (init) == TREE_LIST
1613 && DIRECT_LIST_INIT_P (TREE_VALUE (init)))
1615 gcc_checking_assert ((flags & LOOKUP_ONLYCONVERTING) == 0
1616 && TREE_CHAIN (init) == NULL_TREE);
1617 init = TREE_VALUE (init);
1620 if (init && BRACE_ENCLOSED_INITIALIZER_P (init)
1621 && CP_AGGREGATE_TYPE_P (type))
1622 /* A brace-enclosed initializer for an aggregate. In C++0x this can
1623 happen for direct-initialization, too. */
1624 init = digest_init (type, init, complain);
1626 /* A CONSTRUCTOR of the target's type is a previously digested
1627 initializer, whether that happened just above or in
1628 cp_parser_late_parsing_nsdmi.
1630 A TARGET_EXPR with TARGET_EXPR_DIRECT_INIT_P or TARGET_EXPR_LIST_INIT_P
1631 set represents the whole initialization, so we shouldn't build up
1632 another ctor call. */
1633 if (init
1634 && (TREE_CODE (init) == CONSTRUCTOR
1635 || (TREE_CODE (init) == TARGET_EXPR
1636 && (TARGET_EXPR_DIRECT_INIT_P (init)
1637 || TARGET_EXPR_LIST_INIT_P (init))))
1638 && same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (init), type))
1640 /* Early initialization via a TARGET_EXPR only works for
1641 complete objects. */
1642 gcc_assert (TREE_CODE (init) == CONSTRUCTOR || true_exp == exp);
1644 init = build2 (INIT_EXPR, TREE_TYPE (exp), exp, init);
1645 TREE_SIDE_EFFECTS (init) = 1;
1646 finish_expr_stmt (init);
1647 return;
1650 if (init && TREE_CODE (init) != TREE_LIST
1651 && (flags & LOOKUP_ONLYCONVERTING))
1653 /* Base subobjects should only get direct-initialization. */
1654 gcc_assert (true_exp == exp);
1656 if (flags & DIRECT_BIND)
1657 /* Do nothing. We hit this in two cases: Reference initialization,
1658 where we aren't initializing a real variable, so we don't want
1659 to run a new constructor; and catching an exception, where we
1660 have already built up the constructor call so we could wrap it
1661 in an exception region. */;
1662 else
1663 init = ocp_convert (type, init, CONV_IMPLICIT|CONV_FORCE_TEMP,
1664 flags, complain);
1666 if (TREE_CODE (init) == MUST_NOT_THROW_EXPR)
1667 /* We need to protect the initialization of a catch parm with a
1668 call to terminate(), which shows up as a MUST_NOT_THROW_EXPR
1669 around the TARGET_EXPR for the copy constructor. See
1670 initialize_handler_parm. */
1672 TREE_OPERAND (init, 0) = build2 (INIT_EXPR, TREE_TYPE (exp), exp,
1673 TREE_OPERAND (init, 0));
1674 TREE_TYPE (init) = void_type_node;
1676 else
1677 init = build2 (INIT_EXPR, TREE_TYPE (exp), exp, init);
1678 TREE_SIDE_EFFECTS (init) = 1;
1679 finish_expr_stmt (init);
1680 return;
1683 if (init == NULL_TREE)
1684 parms = NULL;
1685 else if (TREE_CODE (init) == TREE_LIST && !TREE_TYPE (init))
1687 parms = make_tree_vector ();
1688 for (; init != NULL_TREE; init = TREE_CHAIN (init))
1689 vec_safe_push (parms, TREE_VALUE (init));
1691 else
1692 parms = make_tree_vector_single (init);
1694 if (exp == current_class_ref && current_function_decl
1695 && DECL_HAS_IN_CHARGE_PARM_P (current_function_decl))
1697 /* Delegating constructor. */
1698 tree complete;
1699 tree base;
1700 tree elt; unsigned i;
1702 /* Unshare the arguments for the second call. */
1703 vec<tree, va_gc> *parms2 = make_tree_vector ();
1704 FOR_EACH_VEC_SAFE_ELT (parms, i, elt)
1706 elt = break_out_target_exprs (elt);
1707 vec_safe_push (parms2, elt);
1709 complete = build_special_member_call (exp, complete_ctor_identifier,
1710 &parms2, binfo, flags,
1711 complain);
1712 complete = fold_build_cleanup_point_expr (void_type_node, complete);
1713 release_tree_vector (parms2);
1715 base = build_special_member_call (exp, base_ctor_identifier,
1716 &parms, binfo, flags,
1717 complain);
1718 base = fold_build_cleanup_point_expr (void_type_node, base);
1719 rval = build3 (COND_EXPR, void_type_node,
1720 build2 (EQ_EXPR, boolean_type_node,
1721 current_in_charge_parm, integer_zero_node),
1722 base,
1723 complete);
1725 else
1727 if (true_exp == exp)
1728 ctor_name = complete_ctor_identifier;
1729 else
1730 ctor_name = base_ctor_identifier;
1731 rval = build_special_member_call (exp, ctor_name, &parms, binfo, flags,
1732 complain);
1735 if (parms != NULL)
1736 release_tree_vector (parms);
1738 if (exp == true_exp && TREE_CODE (rval) == CALL_EXPR)
1740 tree fn = get_callee_fndecl (rval);
1741 if (fn && DECL_DECLARED_CONSTEXPR_P (fn))
1743 tree e = maybe_constant_init (rval, exp);
1744 if (TREE_CONSTANT (e))
1745 rval = build2 (INIT_EXPR, type, exp, e);
1749 /* FIXME put back convert_to_void? */
1750 if (TREE_SIDE_EFFECTS (rval))
1751 finish_expr_stmt (rval);
1754 /* This function is responsible for initializing EXP with INIT
1755 (if any).
1757 BINFO is the binfo of the type for who we are performing the
1758 initialization. For example, if W is a virtual base class of A and B,
1759 and C : A, B.
1760 If we are initializing B, then W must contain B's W vtable, whereas
1761 were we initializing C, W must contain C's W vtable.
1763 TRUE_EXP is nonzero if it is the true expression being initialized.
1764 In this case, it may be EXP, or may just contain EXP. The reason we
1765 need this is because if EXP is a base element of TRUE_EXP, we
1766 don't necessarily know by looking at EXP where its virtual
1767 baseclass fields should really be pointing. But we do know
1768 from TRUE_EXP. In constructors, we don't know anything about
1769 the value being initialized.
1771 FLAGS is just passed to `build_new_method_call'. See that function
1772 for its description. */
1774 static void
1775 expand_aggr_init_1 (tree binfo, tree true_exp, tree exp, tree init, int flags,
1776 tsubst_flags_t complain)
1778 tree type = TREE_TYPE (exp);
1780 gcc_assert (init != error_mark_node && type != error_mark_node);
1781 gcc_assert (building_stmt_list_p ());
1783 /* Use a function returning the desired type to initialize EXP for us.
1784 If the function is a constructor, and its first argument is
1785 NULL_TREE, know that it was meant for us--just slide exp on
1786 in and expand the constructor. Constructors now come
1787 as TARGET_EXPRs. */
1789 if (init && VAR_P (exp)
1790 && COMPOUND_LITERAL_P (init))
1792 vec<tree, va_gc> *cleanups = NULL;
1793 /* If store_init_value returns NULL_TREE, the INIT has been
1794 recorded as the DECL_INITIAL for EXP. That means there's
1795 nothing more we have to do. */
1796 init = store_init_value (exp, init, &cleanups, flags);
1797 if (init)
1798 finish_expr_stmt (init);
1799 gcc_assert (!cleanups);
1800 return;
1803 /* If an explicit -- but empty -- initializer list was present,
1804 that's value-initialization. */
1805 if (init == void_type_node)
1807 /* If the type has data but no user-provided ctor, we need to zero
1808 out the object. */
1809 if (!type_has_user_provided_constructor (type)
1810 && !is_really_empty_class (type))
1812 tree field_size = NULL_TREE;
1813 if (exp != true_exp && CLASSTYPE_AS_BASE (type) != type)
1814 /* Don't clobber already initialized virtual bases. */
1815 field_size = TYPE_SIZE (CLASSTYPE_AS_BASE (type));
1816 init = build_zero_init_1 (type, NULL_TREE, /*static_storage_p=*/false,
1817 field_size);
1818 init = build2 (INIT_EXPR, type, exp, init);
1819 finish_expr_stmt (init);
1822 /* If we don't need to mess with the constructor at all,
1823 then we're done. */
1824 if (! type_build_ctor_call (type))
1825 return;
1827 /* Otherwise fall through and call the constructor. */
1828 init = NULL_TREE;
1831 /* We know that expand_default_init can handle everything we want
1832 at this point. */
1833 expand_default_init (binfo, true_exp, exp, init, flags, complain);
1836 /* Report an error if TYPE is not a user-defined, class type. If
1837 OR_ELSE is nonzero, give an error message. */
1840 is_class_type (tree type, int or_else)
1842 if (type == error_mark_node)
1843 return 0;
1845 if (! CLASS_TYPE_P (type))
1847 if (or_else)
1848 error ("%qT is not a class type", type);
1849 return 0;
1851 return 1;
1854 tree
1855 get_type_value (tree name)
1857 if (name == error_mark_node)
1858 return NULL_TREE;
1860 if (IDENTIFIER_HAS_TYPE_VALUE (name))
1861 return IDENTIFIER_TYPE_VALUE (name);
1862 else
1863 return NULL_TREE;
1866 /* Build a reference to a member of an aggregate. This is not a C++
1867 `&', but really something which can have its address taken, and
1868 then act as a pointer to member, for example TYPE :: FIELD can have
1869 its address taken by saying & TYPE :: FIELD. ADDRESS_P is true if
1870 this expression is the operand of "&".
1872 @@ Prints out lousy diagnostics for operator <typename>
1873 @@ fields.
1875 @@ This function should be rewritten and placed in search.c. */
1877 tree
1878 build_offset_ref (tree type, tree member, bool address_p,
1879 tsubst_flags_t complain)
1881 tree decl;
1882 tree basebinfo = NULL_TREE;
1884 /* class templates can come in as TEMPLATE_DECLs here. */
1885 if (TREE_CODE (member) == TEMPLATE_DECL)
1886 return member;
1888 if (dependent_scope_p (type) || type_dependent_expression_p (member))
1889 return build_qualified_name (NULL_TREE, type, member,
1890 /*template_p=*/false);
1892 gcc_assert (TYPE_P (type));
1893 if (! is_class_type (type, 1))
1894 return error_mark_node;
1896 gcc_assert (DECL_P (member) || BASELINK_P (member));
1897 /* Callers should call mark_used before this point. */
1898 gcc_assert (!DECL_P (member) || TREE_USED (member));
1900 type = TYPE_MAIN_VARIANT (type);
1901 if (!COMPLETE_OR_OPEN_TYPE_P (complete_type (type)))
1903 if (complain & tf_error)
1904 error ("incomplete type %qT does not have member %qD", type, member);
1905 return error_mark_node;
1908 /* Entities other than non-static members need no further
1909 processing. */
1910 if (TREE_CODE (member) == TYPE_DECL)
1911 return member;
1912 if (VAR_P (member) || TREE_CODE (member) == CONST_DECL)
1913 return convert_from_reference (member);
1915 if (TREE_CODE (member) == FIELD_DECL && DECL_C_BIT_FIELD (member))
1917 if (complain & tf_error)
1918 error ("invalid pointer to bit-field %qD", member);
1919 return error_mark_node;
1922 /* Set up BASEBINFO for member lookup. */
1923 decl = maybe_dummy_object (type, &basebinfo);
1925 /* A lot of this logic is now handled in lookup_member. */
1926 if (BASELINK_P (member))
1928 /* Go from the TREE_BASELINK to the member function info. */
1929 tree t = BASELINK_FUNCTIONS (member);
1931 if (TREE_CODE (t) != TEMPLATE_ID_EXPR && !really_overloaded_fn (t))
1933 /* Get rid of a potential OVERLOAD around it. */
1934 t = OVL_CURRENT (t);
1936 /* Unique functions are handled easily. */
1938 /* For non-static member of base class, we need a special rule
1939 for access checking [class.protected]:
1941 If the access is to form a pointer to member, the
1942 nested-name-specifier shall name the derived class
1943 (or any class derived from that class). */
1944 if (address_p && DECL_P (t)
1945 && DECL_NONSTATIC_MEMBER_P (t))
1946 perform_or_defer_access_check (TYPE_BINFO (type), t, t,
1947 complain);
1948 else
1949 perform_or_defer_access_check (basebinfo, t, t,
1950 complain);
1952 if (DECL_STATIC_FUNCTION_P (t))
1953 return t;
1954 member = t;
1956 else
1957 TREE_TYPE (member) = unknown_type_node;
1959 else if (address_p && TREE_CODE (member) == FIELD_DECL)
1960 /* We need additional test besides the one in
1961 check_accessibility_of_qualified_id in case it is
1962 a pointer to non-static member. */
1963 perform_or_defer_access_check (TYPE_BINFO (type), member, member,
1964 complain);
1966 if (!address_p)
1968 /* If MEMBER is non-static, then the program has fallen afoul of
1969 [expr.prim]:
1971 An id-expression that denotes a nonstatic data member or
1972 nonstatic member function of a class can only be used:
1974 -- as part of a class member access (_expr.ref_) in which the
1975 object-expression refers to the member's class or a class
1976 derived from that class, or
1978 -- to form a pointer to member (_expr.unary.op_), or
1980 -- in the body of a nonstatic member function of that class or
1981 of a class derived from that class (_class.mfct.nonstatic_), or
1983 -- in a mem-initializer for a constructor for that class or for
1984 a class derived from that class (_class.base.init_). */
1985 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (member))
1987 /* Build a representation of the qualified name suitable
1988 for use as the operand to "&" -- even though the "&" is
1989 not actually present. */
1990 member = build2 (OFFSET_REF, TREE_TYPE (member), decl, member);
1991 /* In Microsoft mode, treat a non-static member function as if
1992 it were a pointer-to-member. */
1993 if (flag_ms_extensions)
1995 PTRMEM_OK_P (member) = 1;
1996 return cp_build_addr_expr (member, complain);
1998 if (complain & tf_error)
1999 error ("invalid use of non-static member function %qD",
2000 TREE_OPERAND (member, 1));
2001 return error_mark_node;
2003 else if (TREE_CODE (member) == FIELD_DECL)
2005 if (complain & tf_error)
2006 error ("invalid use of non-static data member %qD", member);
2007 return error_mark_node;
2009 return member;
2012 member = build2 (OFFSET_REF, TREE_TYPE (member), decl, member);
2013 PTRMEM_OK_P (member) = 1;
2014 return member;
2017 /* If DECL is a scalar enumeration constant or variable with a
2018 constant initializer, return the initializer (or, its initializers,
2019 recursively); otherwise, return DECL. If STRICT_P, the
2020 initializer is only returned if DECL is a
2021 constant-expression. If RETURN_AGGREGATE_CST_OK_P, it is ok to
2022 return an aggregate constant. */
2024 static tree
2025 constant_value_1 (tree decl, bool strict_p, bool return_aggregate_cst_ok_p)
2027 while (TREE_CODE (decl) == CONST_DECL
2028 || (strict_p
2029 ? decl_constant_var_p (decl)
2030 : (VAR_P (decl)
2031 && CP_TYPE_CONST_NON_VOLATILE_P (TREE_TYPE (decl)))))
2033 tree init;
2034 /* If DECL is a static data member in a template
2035 specialization, we must instantiate it here. The
2036 initializer for the static data member is not processed
2037 until needed; we need it now. */
2038 mark_used (decl);
2039 mark_rvalue_use (decl);
2040 init = DECL_INITIAL (decl);
2041 if (init == error_mark_node)
2043 if (DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl))
2044 /* Treat the error as a constant to avoid cascading errors on
2045 excessively recursive template instantiation (c++/9335). */
2046 return init;
2047 else
2048 return decl;
2050 /* Initializers in templates are generally expanded during
2051 instantiation, so before that for const int i(2)
2052 INIT is a TREE_LIST with the actual initializer as
2053 TREE_VALUE. */
2054 if (processing_template_decl
2055 && init
2056 && TREE_CODE (init) == TREE_LIST
2057 && TREE_CHAIN (init) == NULL_TREE)
2058 init = TREE_VALUE (init);
2059 if (!init
2060 || !TREE_TYPE (init)
2061 || !TREE_CONSTANT (init)
2062 || (!return_aggregate_cst_ok_p
2063 /* Unless RETURN_AGGREGATE_CST_OK_P is true, do not
2064 return an aggregate constant (of which string
2065 literals are a special case), as we do not want
2066 to make inadvertent copies of such entities, and
2067 we must be sure that their addresses are the
2068 same everywhere. */
2069 && (TREE_CODE (init) == CONSTRUCTOR
2070 || TREE_CODE (init) == STRING_CST)))
2071 break;
2072 decl = unshare_expr (init);
2074 return decl;
2077 /* If DECL is a CONST_DECL, or a constant VAR_DECL initialized by constant
2078 of integral or enumeration type, or a constexpr variable of scalar type,
2079 then return that value. These are those variables permitted in constant
2080 expressions by [5.19/1]. */
2082 tree
2083 scalar_constant_value (tree decl)
2085 return constant_value_1 (decl, /*strict_p=*/true,
2086 /*return_aggregate_cst_ok_p=*/false);
2089 /* Like scalar_constant_value, but can also return aggregate initializers. */
2091 tree
2092 decl_really_constant_value (tree decl)
2094 return constant_value_1 (decl, /*strict_p=*/true,
2095 /*return_aggregate_cst_ok_p=*/true);
2098 /* A more relaxed version of scalar_constant_value, used by the
2099 common C/C++ code. */
2101 tree
2102 decl_constant_value (tree decl)
2104 return constant_value_1 (decl, /*strict_p=*/processing_template_decl,
2105 /*return_aggregate_cst_ok_p=*/true);
2108 /* Common subroutines of build_new and build_vec_delete. */
2110 /* Build and return a NEW_EXPR. If NELTS is non-NULL, TYPE[NELTS] is
2111 the type of the object being allocated; otherwise, it's just TYPE.
2112 INIT is the initializer, if any. USE_GLOBAL_NEW is true if the
2113 user explicitly wrote "::operator new". PLACEMENT, if non-NULL, is
2114 a vector of arguments to be provided as arguments to a placement
2115 new operator. This routine performs no semantic checks; it just
2116 creates and returns a NEW_EXPR. */
2118 static tree
2119 build_raw_new_expr (vec<tree, va_gc> *placement, tree type, tree nelts,
2120 vec<tree, va_gc> *init, int use_global_new)
2122 tree init_list;
2123 tree new_expr;
2125 /* If INIT is NULL, the we want to store NULL_TREE in the NEW_EXPR.
2126 If INIT is not NULL, then we want to store VOID_ZERO_NODE. This
2127 permits us to distinguish the case of a missing initializer "new
2128 int" from an empty initializer "new int()". */
2129 if (init == NULL)
2130 init_list = NULL_TREE;
2131 else if (init->is_empty ())
2132 init_list = void_node;
2133 else
2134 init_list = build_tree_list_vec (init);
2136 new_expr = build4 (NEW_EXPR, build_pointer_type (type),
2137 build_tree_list_vec (placement), type, nelts,
2138 init_list);
2139 NEW_EXPR_USE_GLOBAL (new_expr) = use_global_new;
2140 TREE_SIDE_EFFECTS (new_expr) = 1;
2142 return new_expr;
2145 /* Diagnose uninitialized const members or reference members of type
2146 TYPE. USING_NEW is used to disambiguate the diagnostic between a
2147 new expression without a new-initializer and a declaration. Returns
2148 the error count. */
2150 static int
2151 diagnose_uninitialized_cst_or_ref_member_1 (tree type, tree origin,
2152 bool using_new, bool complain)
2154 tree field;
2155 int error_count = 0;
2157 if (type_has_user_provided_constructor (type))
2158 return 0;
2160 for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
2162 tree field_type;
2164 if (TREE_CODE (field) != FIELD_DECL)
2165 continue;
2167 field_type = strip_array_types (TREE_TYPE (field));
2169 if (type_has_user_provided_constructor (field_type))
2170 continue;
2172 if (TREE_CODE (field_type) == REFERENCE_TYPE)
2174 ++ error_count;
2175 if (complain)
2177 if (DECL_CONTEXT (field) == origin)
2179 if (using_new)
2180 error ("uninitialized reference member in %q#T "
2181 "using %<new%> without new-initializer", origin);
2182 else
2183 error ("uninitialized reference member in %q#T", origin);
2185 else
2187 if (using_new)
2188 error ("uninitialized reference member in base %q#T "
2189 "of %q#T using %<new%> without new-initializer",
2190 DECL_CONTEXT (field), origin);
2191 else
2192 error ("uninitialized reference member in base %q#T "
2193 "of %q#T", DECL_CONTEXT (field), origin);
2195 inform (DECL_SOURCE_LOCATION (field),
2196 "%q#D should be initialized", field);
2200 if (CP_TYPE_CONST_P (field_type))
2202 ++ error_count;
2203 if (complain)
2205 if (DECL_CONTEXT (field) == origin)
2207 if (using_new)
2208 error ("uninitialized const member in %q#T "
2209 "using %<new%> without new-initializer", origin);
2210 else
2211 error ("uninitialized const member in %q#T", origin);
2213 else
2215 if (using_new)
2216 error ("uninitialized const member in base %q#T "
2217 "of %q#T using %<new%> without new-initializer",
2218 DECL_CONTEXT (field), origin);
2219 else
2220 error ("uninitialized const member in base %q#T "
2221 "of %q#T", DECL_CONTEXT (field), origin);
2223 inform (DECL_SOURCE_LOCATION (field),
2224 "%q#D should be initialized", field);
2228 if (CLASS_TYPE_P (field_type))
2229 error_count
2230 += diagnose_uninitialized_cst_or_ref_member_1 (field_type, origin,
2231 using_new, complain);
2233 return error_count;
2237 diagnose_uninitialized_cst_or_ref_member (tree type, bool using_new, bool complain)
2239 return diagnose_uninitialized_cst_or_ref_member_1 (type, type, using_new, complain);
2242 /* Call __cxa_bad_array_new_length to indicate that the size calculation
2243 overflowed. Pretend it returns sizetype so that it plays nicely in the
2244 COND_EXPR. */
2246 tree
2247 throw_bad_array_new_length (void)
2249 tree fn = get_identifier ("__cxa_throw_bad_array_new_length");
2250 if (!get_global_value_if_present (fn, &fn))
2251 fn = push_throw_library_fn (fn, build_function_type_list (sizetype,
2252 NULL_TREE));
2254 return build_cxx_call (fn, 0, NULL, tf_warning_or_error);
2257 /* Generate code for a new-expression, including calling the "operator
2258 new" function, initializing the object, and, if an exception occurs
2259 during construction, cleaning up. The arguments are as for
2260 build_raw_new_expr. This may change PLACEMENT and INIT. */
2262 static tree
2263 build_new_1 (vec<tree, va_gc> **placement, tree type, tree nelts,
2264 vec<tree, va_gc> **init, bool globally_qualified_p,
2265 tsubst_flags_t complain)
2267 tree size, rval;
2268 /* True iff this is a call to "operator new[]" instead of just
2269 "operator new". */
2270 bool array_p = false;
2271 /* If ARRAY_P is true, the element type of the array. This is never
2272 an ARRAY_TYPE; for something like "new int[3][4]", the
2273 ELT_TYPE is "int". If ARRAY_P is false, this is the same type as
2274 TYPE. */
2275 tree elt_type;
2276 /* The type of the new-expression. (This type is always a pointer
2277 type.) */
2278 tree pointer_type;
2279 tree non_const_pointer_type;
2280 tree outer_nelts = NULL_TREE;
2281 /* For arrays, a bounds checks on the NELTS parameter. */
2282 tree outer_nelts_check = NULL_TREE;
2283 bool outer_nelts_from_type = false;
2284 offset_int inner_nelts_count = 1;
2285 tree alloc_call, alloc_expr;
2286 /* Size of the inner array elements. */
2287 offset_int inner_size;
2288 /* The address returned by the call to "operator new". This node is
2289 a VAR_DECL and is therefore reusable. */
2290 tree alloc_node;
2291 tree alloc_fn;
2292 tree cookie_expr, init_expr;
2293 int nothrow, check_new;
2294 int use_java_new = 0;
2295 /* If non-NULL, the number of extra bytes to allocate at the
2296 beginning of the storage allocated for an array-new expression in
2297 order to store the number of elements. */
2298 tree cookie_size = NULL_TREE;
2299 tree placement_first;
2300 tree placement_expr = NULL_TREE;
2301 /* True if the function we are calling is a placement allocation
2302 function. */
2303 bool placement_allocation_fn_p;
2304 /* True if the storage must be initialized, either by a constructor
2305 or due to an explicit new-initializer. */
2306 bool is_initialized;
2307 /* The address of the thing allocated, not including any cookie. In
2308 particular, if an array cookie is in use, DATA_ADDR is the
2309 address of the first array element. This node is a VAR_DECL, and
2310 is therefore reusable. */
2311 tree data_addr;
2312 tree init_preeval_expr = NULL_TREE;
2313 tree orig_type = type;
2315 if (nelts)
2317 outer_nelts = nelts;
2318 array_p = true;
2320 else if (TREE_CODE (type) == ARRAY_TYPE)
2322 /* Transforms new (T[N]) to new T[N]. The former is a GNU
2323 extension for variable N. (This also covers new T where T is
2324 a VLA typedef.) */
2325 array_p = true;
2326 nelts = array_type_nelts_top (type);
2327 outer_nelts = nelts;
2328 type = TREE_TYPE (type);
2329 outer_nelts_from_type = true;
2332 /* If our base type is an array, then make sure we know how many elements
2333 it has. */
2334 for (elt_type = type;
2335 TREE_CODE (elt_type) == ARRAY_TYPE;
2336 elt_type = TREE_TYPE (elt_type))
2338 tree inner_nelts = array_type_nelts_top (elt_type);
2339 tree inner_nelts_cst = maybe_constant_value (inner_nelts);
2340 if (TREE_CODE (inner_nelts_cst) == INTEGER_CST)
2342 bool overflow;
2343 offset_int result = wi::mul (wi::to_offset (inner_nelts_cst),
2344 inner_nelts_count, SIGNED, &overflow);
2345 if (overflow)
2347 if (complain & tf_error)
2348 error ("integer overflow in array size");
2349 nelts = error_mark_node;
2351 inner_nelts_count = result;
2353 else
2355 if (complain & tf_error)
2357 error_at (EXPR_LOC_OR_LOC (inner_nelts, input_location),
2358 "array size in new-expression must be constant");
2359 cxx_constant_value(inner_nelts);
2361 nelts = error_mark_node;
2363 if (nelts != error_mark_node)
2364 nelts = cp_build_binary_op (input_location,
2365 MULT_EXPR, nelts,
2366 inner_nelts_cst,
2367 complain);
2370 if (variably_modified_type_p (elt_type, NULL_TREE) && (complain & tf_error))
2372 error ("variably modified type not allowed in new-expression");
2373 return error_mark_node;
2376 if (nelts == error_mark_node)
2377 return error_mark_node;
2379 /* Warn if we performed the (T[N]) to T[N] transformation and N is
2380 variable. */
2381 if (outer_nelts_from_type
2382 && !TREE_CONSTANT (maybe_constant_value (outer_nelts)))
2384 if (complain & tf_warning_or_error)
2386 const char *msg;
2387 if (typedef_variant_p (orig_type))
2388 msg = ("non-constant array new length must be specified "
2389 "directly, not by typedef");
2390 else
2391 msg = ("non-constant array new length must be specified "
2392 "without parentheses around the type-id");
2393 pedwarn (EXPR_LOC_OR_LOC (outer_nelts, input_location),
2394 OPT_Wvla, msg);
2396 else
2397 return error_mark_node;
2400 if (VOID_TYPE_P (elt_type))
2402 if (complain & tf_error)
2403 error ("invalid type %<void%> for new");
2404 return error_mark_node;
2407 if (abstract_virtuals_error_sfinae (ACU_NEW, elt_type, complain))
2408 return error_mark_node;
2410 is_initialized = (type_build_ctor_call (elt_type) || *init != NULL);
2412 if (*init == NULL && cxx_dialect < cxx11)
2414 bool maybe_uninitialized_error = false;
2415 /* A program that calls for default-initialization [...] of an
2416 entity of reference type is ill-formed. */
2417 if (CLASSTYPE_REF_FIELDS_NEED_INIT (elt_type))
2418 maybe_uninitialized_error = true;
2420 /* A new-expression that creates an object of type T initializes
2421 that object as follows:
2422 - If the new-initializer is omitted:
2423 -- If T is a (possibly cv-qualified) non-POD class type
2424 (or array thereof), the object is default-initialized (8.5).
2425 [...]
2426 -- Otherwise, the object created has indeterminate
2427 value. If T is a const-qualified type, or a (possibly
2428 cv-qualified) POD class type (or array thereof)
2429 containing (directly or indirectly) a member of
2430 const-qualified type, the program is ill-formed; */
2432 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (elt_type))
2433 maybe_uninitialized_error = true;
2435 if (maybe_uninitialized_error
2436 && diagnose_uninitialized_cst_or_ref_member (elt_type,
2437 /*using_new=*/true,
2438 complain & tf_error))
2439 return error_mark_node;
2442 if (CP_TYPE_CONST_P (elt_type) && *init == NULL
2443 && default_init_uninitialized_part (elt_type))
2445 if (complain & tf_error)
2446 error ("uninitialized const in %<new%> of %q#T", elt_type);
2447 return error_mark_node;
2450 size = size_in_bytes (elt_type);
2451 if (array_p)
2453 /* Maximum available size in bytes. Half of the address space
2454 minus the cookie size. */
2455 offset_int max_size
2456 = wi::set_bit_in_zero <offset_int> (TYPE_PRECISION (sizetype) - 1);
2457 /* Maximum number of outer elements which can be allocated. */
2458 offset_int max_outer_nelts;
2459 tree max_outer_nelts_tree;
2461 gcc_assert (TREE_CODE (size) == INTEGER_CST);
2462 cookie_size = targetm.cxx.get_cookie_size (elt_type);
2463 gcc_assert (TREE_CODE (cookie_size) == INTEGER_CST);
2464 gcc_checking_assert (wi::ltu_p (wi::to_offset (cookie_size), max_size));
2465 /* Unconditionally subtract the cookie size. This decreases the
2466 maximum object size and is safe even if we choose not to use
2467 a cookie after all. */
2468 max_size -= wi::to_offset (cookie_size);
2469 bool overflow;
2470 inner_size = wi::mul (wi::to_offset (size), inner_nelts_count, SIGNED,
2471 &overflow);
2472 if (overflow || wi::gtu_p (inner_size, max_size))
2474 if (complain & tf_error)
2475 error ("size of array is too large");
2476 return error_mark_node;
2479 max_outer_nelts = wi::udiv_trunc (max_size, inner_size);
2480 /* Only keep the top-most seven bits, to simplify encoding the
2481 constant in the instruction stream. */
2483 unsigned shift = (max_outer_nelts.get_precision ()) - 7
2484 - wi::clz (max_outer_nelts);
2485 max_outer_nelts = wi::lshift (wi::lrshift (max_outer_nelts, shift),
2486 shift);
2488 max_outer_nelts_tree = wide_int_to_tree (sizetype, max_outer_nelts);
2490 size = size_binop (MULT_EXPR, size, convert (sizetype, nelts));
2491 outer_nelts_check = fold_build2 (LE_EXPR, boolean_type_node,
2492 outer_nelts,
2493 max_outer_nelts_tree);
2496 alloc_fn = NULL_TREE;
2498 /* If PLACEMENT is a single simple pointer type not passed by
2499 reference, prepare to capture it in a temporary variable. Do
2500 this now, since PLACEMENT will change in the calls below. */
2501 placement_first = NULL_TREE;
2502 if (vec_safe_length (*placement) == 1
2503 && (TYPE_PTR_P (TREE_TYPE ((**placement)[0]))))
2504 placement_first = (**placement)[0];
2506 /* Allocate the object. */
2507 if (vec_safe_is_empty (*placement) && TYPE_FOR_JAVA (elt_type))
2509 tree class_addr;
2510 tree class_decl;
2511 static const char alloc_name[] = "_Jv_AllocObject";
2513 if (!MAYBE_CLASS_TYPE_P (elt_type))
2515 error ("%qT isn%'t a valid Java class type", elt_type);
2516 return error_mark_node;
2519 class_decl = build_java_class_ref (elt_type);
2520 if (class_decl == error_mark_node)
2521 return error_mark_node;
2523 use_java_new = 1;
2524 if (!get_global_value_if_present (get_identifier (alloc_name),
2525 &alloc_fn))
2527 if (complain & tf_error)
2528 error ("call to Java constructor with %qs undefined", alloc_name);
2529 return error_mark_node;
2531 else if (really_overloaded_fn (alloc_fn))
2533 if (complain & tf_error)
2534 error ("%qD should never be overloaded", alloc_fn);
2535 return error_mark_node;
2537 alloc_fn = OVL_CURRENT (alloc_fn);
2538 class_addr = build1 (ADDR_EXPR, jclass_node, class_decl);
2539 alloc_call = cp_build_function_call_nary (alloc_fn, complain,
2540 class_addr, NULL_TREE);
2542 else if (TYPE_FOR_JAVA (elt_type) && MAYBE_CLASS_TYPE_P (elt_type))
2544 error ("Java class %q#T object allocated using placement new", elt_type);
2545 return error_mark_node;
2547 else
2549 tree fnname;
2550 tree fns;
2552 fnname = ansi_opname (array_p ? VEC_NEW_EXPR : NEW_EXPR);
2554 if (!globally_qualified_p
2555 && CLASS_TYPE_P (elt_type)
2556 && (array_p
2557 ? TYPE_HAS_ARRAY_NEW_OPERATOR (elt_type)
2558 : TYPE_HAS_NEW_OPERATOR (elt_type)))
2560 /* Use a class-specific operator new. */
2561 /* If a cookie is required, add some extra space. */
2562 if (array_p && TYPE_VEC_NEW_USES_COOKIE (elt_type))
2563 size = size_binop (PLUS_EXPR, size, cookie_size);
2564 else
2566 cookie_size = NULL_TREE;
2567 /* No size arithmetic necessary, so the size check is
2568 not needed. */
2569 if (outer_nelts_check != NULL && inner_size == 1)
2570 outer_nelts_check = NULL_TREE;
2572 /* Perform the overflow check. */
2573 tree errval = TYPE_MAX_VALUE (sizetype);
2574 if (cxx_dialect >= cxx11 && flag_exceptions)
2575 errval = throw_bad_array_new_length ();
2576 if (outer_nelts_check != NULL_TREE)
2577 size = fold_build3 (COND_EXPR, sizetype, outer_nelts_check,
2578 size, errval);
2579 /* Create the argument list. */
2580 vec_safe_insert (*placement, 0, size);
2581 /* Do name-lookup to find the appropriate operator. */
2582 fns = lookup_fnfields (elt_type, fnname, /*protect=*/2);
2583 if (fns == NULL_TREE)
2585 if (complain & tf_error)
2586 error ("no suitable %qD found in class %qT", fnname, elt_type);
2587 return error_mark_node;
2589 if (TREE_CODE (fns) == TREE_LIST)
2591 if (complain & tf_error)
2593 error ("request for member %qD is ambiguous", fnname);
2594 print_candidates (fns);
2596 return error_mark_node;
2598 alloc_call = build_new_method_call (build_dummy_object (elt_type),
2599 fns, placement,
2600 /*conversion_path=*/NULL_TREE,
2601 LOOKUP_NORMAL,
2602 &alloc_fn,
2603 complain);
2605 else
2607 /* Use a global operator new. */
2608 /* See if a cookie might be required. */
2609 if (!(array_p && TYPE_VEC_NEW_USES_COOKIE (elt_type)))
2611 cookie_size = NULL_TREE;
2612 /* No size arithmetic necessary, so the size check is
2613 not needed. */
2614 if (outer_nelts_check != NULL && inner_size == 1)
2615 outer_nelts_check = NULL_TREE;
2618 alloc_call = build_operator_new_call (fnname, placement,
2619 &size, &cookie_size,
2620 outer_nelts_check,
2621 &alloc_fn, complain);
2625 if (alloc_call == error_mark_node)
2626 return error_mark_node;
2628 gcc_assert (alloc_fn != NULL_TREE);
2630 /* If we found a simple case of PLACEMENT_EXPR above, then copy it
2631 into a temporary variable. */
2632 if (!processing_template_decl
2633 && placement_first != NULL_TREE
2634 && TREE_CODE (alloc_call) == CALL_EXPR
2635 && call_expr_nargs (alloc_call) == 2
2636 && TREE_CODE (TREE_TYPE (CALL_EXPR_ARG (alloc_call, 0))) == INTEGER_TYPE
2637 && TYPE_PTR_P (TREE_TYPE (CALL_EXPR_ARG (alloc_call, 1))))
2639 tree placement_arg = CALL_EXPR_ARG (alloc_call, 1);
2641 if (INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (TREE_TYPE (placement_arg)))
2642 || VOID_TYPE_P (TREE_TYPE (TREE_TYPE (placement_arg))))
2644 placement_expr = get_target_expr (placement_first);
2645 CALL_EXPR_ARG (alloc_call, 1)
2646 = convert (TREE_TYPE (placement_arg), placement_expr);
2650 /* In the simple case, we can stop now. */
2651 pointer_type = build_pointer_type (type);
2652 if (!cookie_size && !is_initialized)
2653 return build_nop (pointer_type, alloc_call);
2655 /* Store the result of the allocation call in a variable so that we can
2656 use it more than once. */
2657 alloc_expr = get_target_expr (alloc_call);
2658 alloc_node = TARGET_EXPR_SLOT (alloc_expr);
2660 /* Strip any COMPOUND_EXPRs from ALLOC_CALL. */
2661 while (TREE_CODE (alloc_call) == COMPOUND_EXPR)
2662 alloc_call = TREE_OPERAND (alloc_call, 1);
2664 /* Now, check to see if this function is actually a placement
2665 allocation function. This can happen even when PLACEMENT is NULL
2666 because we might have something like:
2668 struct S { void* operator new (size_t, int i = 0); };
2670 A call to `new S' will get this allocation function, even though
2671 there is no explicit placement argument. If there is more than
2672 one argument, or there are variable arguments, then this is a
2673 placement allocation function. */
2674 placement_allocation_fn_p
2675 = (type_num_arguments (TREE_TYPE (alloc_fn)) > 1
2676 || varargs_function_p (alloc_fn));
2678 /* Preevaluate the placement args so that we don't reevaluate them for a
2679 placement delete. */
2680 if (placement_allocation_fn_p)
2682 tree inits;
2683 stabilize_call (alloc_call, &inits);
2684 if (inits)
2685 alloc_expr = build2 (COMPOUND_EXPR, TREE_TYPE (alloc_expr), inits,
2686 alloc_expr);
2689 /* unless an allocation function is declared with an empty excep-
2690 tion-specification (_except.spec_), throw(), it indicates failure to
2691 allocate storage by throwing a bad_alloc exception (clause _except_,
2692 _lib.bad.alloc_); it returns a non-null pointer otherwise If the allo-
2693 cation function is declared with an empty exception-specification,
2694 throw(), it returns null to indicate failure to allocate storage and a
2695 non-null pointer otherwise.
2697 So check for a null exception spec on the op new we just called. */
2699 nothrow = TYPE_NOTHROW_P (TREE_TYPE (alloc_fn));
2700 check_new = (flag_check_new || nothrow) && ! use_java_new;
2702 if (cookie_size)
2704 tree cookie;
2705 tree cookie_ptr;
2706 tree size_ptr_type;
2708 /* Adjust so we're pointing to the start of the object. */
2709 data_addr = fold_build_pointer_plus (alloc_node, cookie_size);
2711 /* Store the number of bytes allocated so that we can know how
2712 many elements to destroy later. We use the last sizeof
2713 (size_t) bytes to store the number of elements. */
2714 cookie_ptr = size_binop (MINUS_EXPR, cookie_size, size_in_bytes (sizetype));
2715 cookie_ptr = fold_build_pointer_plus_loc (input_location,
2716 alloc_node, cookie_ptr);
2717 size_ptr_type = build_pointer_type (sizetype);
2718 cookie_ptr = fold_convert (size_ptr_type, cookie_ptr);
2719 cookie = cp_build_indirect_ref (cookie_ptr, RO_NULL, complain);
2721 cookie_expr = build2 (MODIFY_EXPR, sizetype, cookie, nelts);
2723 if (targetm.cxx.cookie_has_size ())
2725 /* Also store the element size. */
2726 cookie_ptr = fold_build_pointer_plus (cookie_ptr,
2727 fold_build1_loc (input_location,
2728 NEGATE_EXPR, sizetype,
2729 size_in_bytes (sizetype)));
2731 cookie = cp_build_indirect_ref (cookie_ptr, RO_NULL, complain);
2732 cookie = build2 (MODIFY_EXPR, sizetype, cookie,
2733 size_in_bytes (elt_type));
2734 cookie_expr = build2 (COMPOUND_EXPR, TREE_TYPE (cookie_expr),
2735 cookie, cookie_expr);
2738 else
2740 cookie_expr = NULL_TREE;
2741 data_addr = alloc_node;
2744 /* Now use a pointer to the type we've actually allocated. */
2746 /* But we want to operate on a non-const version to start with,
2747 since we'll be modifying the elements. */
2748 non_const_pointer_type = build_pointer_type
2749 (cp_build_qualified_type (type, cp_type_quals (type) & ~TYPE_QUAL_CONST));
2751 data_addr = fold_convert (non_const_pointer_type, data_addr);
2752 /* Any further uses of alloc_node will want this type, too. */
2753 alloc_node = fold_convert (non_const_pointer_type, alloc_node);
2755 /* Now initialize the allocated object. Note that we preevaluate the
2756 initialization expression, apart from the actual constructor call or
2757 assignment--we do this because we want to delay the allocation as long
2758 as possible in order to minimize the size of the exception region for
2759 placement delete. */
2760 if (is_initialized)
2762 bool stable;
2763 bool explicit_value_init_p = false;
2765 if (*init != NULL && (*init)->is_empty ())
2767 *init = NULL;
2768 explicit_value_init_p = true;
2771 if (processing_template_decl && explicit_value_init_p)
2773 /* build_value_init doesn't work in templates, and we don't need
2774 the initializer anyway since we're going to throw it away and
2775 rebuild it at instantiation time, so just build up a single
2776 constructor call to get any appropriate diagnostics. */
2777 init_expr = cp_build_indirect_ref (data_addr, RO_NULL, complain);
2778 if (type_build_ctor_call (elt_type))
2779 init_expr = build_special_member_call (init_expr,
2780 complete_ctor_identifier,
2781 init, elt_type,
2782 LOOKUP_NORMAL,
2783 complain);
2784 stable = stabilize_init (init_expr, &init_preeval_expr);
2786 else if (array_p)
2788 tree vecinit = NULL_TREE;
2789 if (vec_safe_length (*init) == 1
2790 && DIRECT_LIST_INIT_P ((**init)[0]))
2792 vecinit = (**init)[0];
2793 if (CONSTRUCTOR_NELTS (vecinit) == 0)
2794 /* List-value-initialization, leave it alone. */;
2795 else
2797 tree arraytype, domain;
2798 if (TREE_CONSTANT (nelts))
2799 domain = compute_array_index_type (NULL_TREE, nelts,
2800 complain);
2801 else
2802 /* We'll check the length at runtime. */
2803 domain = NULL_TREE;
2804 arraytype = build_cplus_array_type (type, domain);
2805 vecinit = digest_init (arraytype, vecinit, complain);
2808 else if (*init)
2810 if (complain & tf_error)
2811 permerror (input_location,
2812 "parenthesized initializer in array new");
2813 else
2814 return error_mark_node;
2815 vecinit = build_tree_list_vec (*init);
2817 init_expr
2818 = build_vec_init (data_addr,
2819 cp_build_binary_op (input_location,
2820 MINUS_EXPR, outer_nelts,
2821 integer_one_node,
2822 complain),
2823 vecinit,
2824 explicit_value_init_p,
2825 /*from_array=*/0,
2826 complain);
2828 /* An array initialization is stable because the initialization
2829 of each element is a full-expression, so the temporaries don't
2830 leak out. */
2831 stable = true;
2833 else
2835 init_expr = cp_build_indirect_ref (data_addr, RO_NULL, complain);
2837 if (type_build_ctor_call (type) && !explicit_value_init_p)
2839 init_expr = build_special_member_call (init_expr,
2840 complete_ctor_identifier,
2841 init, elt_type,
2842 LOOKUP_NORMAL,
2843 complain);
2845 else if (explicit_value_init_p)
2847 /* Something like `new int()'. */
2848 tree val = build_value_init (type, complain);
2849 if (val == error_mark_node)
2850 return error_mark_node;
2851 init_expr = build2 (INIT_EXPR, type, init_expr, val);
2853 else
2855 tree ie;
2857 /* We are processing something like `new int (10)', which
2858 means allocate an int, and initialize it with 10. */
2860 ie = build_x_compound_expr_from_vec (*init, "new initializer",
2861 complain);
2862 init_expr = cp_build_modify_expr (init_expr, INIT_EXPR, ie,
2863 complain);
2865 stable = stabilize_init (init_expr, &init_preeval_expr);
2868 if (init_expr == error_mark_node)
2869 return error_mark_node;
2871 /* If any part of the object initialization terminates by throwing an
2872 exception and a suitable deallocation function can be found, the
2873 deallocation function is called to free the memory in which the
2874 object was being constructed, after which the exception continues
2875 to propagate in the context of the new-expression. If no
2876 unambiguous matching deallocation function can be found,
2877 propagating the exception does not cause the object's memory to be
2878 freed. */
2879 if (flag_exceptions && ! use_java_new)
2881 enum tree_code dcode = array_p ? VEC_DELETE_EXPR : DELETE_EXPR;
2882 tree cleanup;
2884 /* The Standard is unclear here, but the right thing to do
2885 is to use the same method for finding deallocation
2886 functions that we use for finding allocation functions. */
2887 cleanup = (build_op_delete_call
2888 (dcode,
2889 alloc_node,
2890 size,
2891 globally_qualified_p,
2892 placement_allocation_fn_p ? alloc_call : NULL_TREE,
2893 alloc_fn,
2894 complain));
2896 if (!cleanup)
2897 /* We're done. */;
2898 else if (stable)
2899 /* This is much simpler if we were able to preevaluate all of
2900 the arguments to the constructor call. */
2902 /* CLEANUP is compiler-generated, so no diagnostics. */
2903 TREE_NO_WARNING (cleanup) = true;
2904 init_expr = build2 (TRY_CATCH_EXPR, void_type_node,
2905 init_expr, cleanup);
2906 /* Likewise, this try-catch is compiler-generated. */
2907 TREE_NO_WARNING (init_expr) = true;
2909 else
2910 /* Ack! First we allocate the memory. Then we set our sentry
2911 variable to true, and expand a cleanup that deletes the
2912 memory if sentry is true. Then we run the constructor, and
2913 finally clear the sentry.
2915 We need to do this because we allocate the space first, so
2916 if there are any temporaries with cleanups in the
2917 constructor args and we weren't able to preevaluate them, we
2918 need this EH region to extend until end of full-expression
2919 to preserve nesting. */
2921 tree end, sentry, begin;
2923 begin = get_target_expr (boolean_true_node);
2924 CLEANUP_EH_ONLY (begin) = 1;
2926 sentry = TARGET_EXPR_SLOT (begin);
2928 /* CLEANUP is compiler-generated, so no diagnostics. */
2929 TREE_NO_WARNING (cleanup) = true;
2931 TARGET_EXPR_CLEANUP (begin)
2932 = build3 (COND_EXPR, void_type_node, sentry,
2933 cleanup, void_node);
2935 end = build2 (MODIFY_EXPR, TREE_TYPE (sentry),
2936 sentry, boolean_false_node);
2938 init_expr
2939 = build2 (COMPOUND_EXPR, void_type_node, begin,
2940 build2 (COMPOUND_EXPR, void_type_node, init_expr,
2941 end));
2942 /* Likewise, this is compiler-generated. */
2943 TREE_NO_WARNING (init_expr) = true;
2947 else
2948 init_expr = NULL_TREE;
2950 /* Now build up the return value in reverse order. */
2952 rval = data_addr;
2954 if (init_expr)
2955 rval = build2 (COMPOUND_EXPR, TREE_TYPE (rval), init_expr, rval);
2956 if (cookie_expr)
2957 rval = build2 (COMPOUND_EXPR, TREE_TYPE (rval), cookie_expr, rval);
2959 if (rval == data_addr)
2960 /* If we don't have an initializer or a cookie, strip the TARGET_EXPR
2961 and return the call (which doesn't need to be adjusted). */
2962 rval = TARGET_EXPR_INITIAL (alloc_expr);
2963 else
2965 if (check_new)
2967 tree ifexp = cp_build_binary_op (input_location,
2968 NE_EXPR, alloc_node,
2969 nullptr_node,
2970 complain);
2971 rval = build_conditional_expr (input_location, ifexp, rval,
2972 alloc_node, complain);
2975 /* Perform the allocation before anything else, so that ALLOC_NODE
2976 has been initialized before we start using it. */
2977 rval = build2 (COMPOUND_EXPR, TREE_TYPE (rval), alloc_expr, rval);
2980 if (init_preeval_expr)
2981 rval = build2 (COMPOUND_EXPR, TREE_TYPE (rval), init_preeval_expr, rval);
2983 /* A new-expression is never an lvalue. */
2984 gcc_assert (!lvalue_p (rval));
2986 return convert (pointer_type, rval);
2989 /* Generate a representation for a C++ "new" expression. *PLACEMENT
2990 is a vector of placement-new arguments (or NULL if none). If NELTS
2991 is NULL, TYPE is the type of the storage to be allocated. If NELTS
2992 is not NULL, then this is an array-new allocation; TYPE is the type
2993 of the elements in the array and NELTS is the number of elements in
2994 the array. *INIT, if non-NULL, is the initializer for the new
2995 object, or an empty vector to indicate an initializer of "()". If
2996 USE_GLOBAL_NEW is true, then the user explicitly wrote "::new"
2997 rather than just "new". This may change PLACEMENT and INIT. */
2999 tree
3000 build_new (vec<tree, va_gc> **placement, tree type, tree nelts,
3001 vec<tree, va_gc> **init, int use_global_new, tsubst_flags_t complain)
3003 tree rval;
3004 vec<tree, va_gc> *orig_placement = NULL;
3005 tree orig_nelts = NULL_TREE;
3006 vec<tree, va_gc> *orig_init = NULL;
3008 if (type == error_mark_node)
3009 return error_mark_node;
3011 if (nelts == NULL_TREE && vec_safe_length (*init) == 1
3012 /* Don't do auto deduction where it might affect mangling. */
3013 && (!processing_template_decl || at_function_scope_p ()))
3015 tree auto_node = type_uses_auto (type);
3016 if (auto_node)
3018 tree d_init = (**init)[0];
3019 d_init = resolve_nondeduced_context (d_init);
3020 type = do_auto_deduction (type, d_init, auto_node);
3024 if (processing_template_decl)
3026 if (dependent_type_p (type)
3027 || any_type_dependent_arguments_p (*placement)
3028 || (nelts && type_dependent_expression_p (nelts))
3029 || (nelts && *init)
3030 || any_type_dependent_arguments_p (*init))
3031 return build_raw_new_expr (*placement, type, nelts, *init,
3032 use_global_new);
3034 orig_placement = make_tree_vector_copy (*placement);
3035 orig_nelts = nelts;
3036 if (*init)
3037 orig_init = make_tree_vector_copy (*init);
3039 make_args_non_dependent (*placement);
3040 if (nelts)
3041 nelts = build_non_dependent_expr (nelts);
3042 make_args_non_dependent (*init);
3045 if (nelts)
3047 if (!build_expr_type_conversion (WANT_INT | WANT_ENUM, nelts, false))
3049 if (complain & tf_error)
3050 permerror (input_location, "size in array new must have integral type");
3051 else
3052 return error_mark_node;
3054 nelts = mark_rvalue_use (nelts);
3055 nelts = cp_save_expr (cp_convert (sizetype, nelts, complain));
3058 /* ``A reference cannot be created by the new operator. A reference
3059 is not an object (8.2.2, 8.4.3), so a pointer to it could not be
3060 returned by new.'' ARM 5.3.3 */
3061 if (TREE_CODE (type) == REFERENCE_TYPE)
3063 if (complain & tf_error)
3064 error ("new cannot be applied to a reference type");
3065 else
3066 return error_mark_node;
3067 type = TREE_TYPE (type);
3070 if (TREE_CODE (type) == FUNCTION_TYPE)
3072 if (complain & tf_error)
3073 error ("new cannot be applied to a function type");
3074 return error_mark_node;
3077 /* The type allocated must be complete. If the new-type-id was
3078 "T[N]" then we are just checking that "T" is complete here, but
3079 that is equivalent, since the value of "N" doesn't matter. */
3080 if (!complete_type_or_maybe_complain (type, NULL_TREE, complain))
3081 return error_mark_node;
3083 rval = build_new_1 (placement, type, nelts, init, use_global_new, complain);
3084 if (rval == error_mark_node)
3085 return error_mark_node;
3087 if (processing_template_decl)
3089 tree ret = build_raw_new_expr (orig_placement, type, orig_nelts,
3090 orig_init, use_global_new);
3091 release_tree_vector (orig_placement);
3092 release_tree_vector (orig_init);
3093 return ret;
3096 /* Wrap it in a NOP_EXPR so warn_if_unused_value doesn't complain. */
3097 rval = build1 (NOP_EXPR, TREE_TYPE (rval), rval);
3098 TREE_NO_WARNING (rval) = 1;
3100 return rval;
3103 /* Given a Java class, return a decl for the corresponding java.lang.Class. */
3105 tree
3106 build_java_class_ref (tree type)
3108 tree name = NULL_TREE, class_decl;
3109 static tree CL_suffix = NULL_TREE;
3110 if (CL_suffix == NULL_TREE)
3111 CL_suffix = get_identifier("class$");
3112 if (jclass_node == NULL_TREE)
3114 jclass_node = IDENTIFIER_GLOBAL_VALUE (get_identifier ("jclass"));
3115 if (jclass_node == NULL_TREE)
3117 error ("call to Java constructor, while %<jclass%> undefined");
3118 return error_mark_node;
3120 jclass_node = TREE_TYPE (jclass_node);
3123 /* Mangle the class$ field. */
3125 tree field;
3126 for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
3127 if (DECL_NAME (field) == CL_suffix)
3129 mangle_decl (field);
3130 name = DECL_ASSEMBLER_NAME (field);
3131 break;
3133 if (!field)
3135 error ("can%'t find %<class$%> in %qT", type);
3136 return error_mark_node;
3140 class_decl = IDENTIFIER_GLOBAL_VALUE (name);
3141 if (class_decl == NULL_TREE)
3143 class_decl = build_decl (input_location,
3144 VAR_DECL, name, TREE_TYPE (jclass_node));
3145 TREE_STATIC (class_decl) = 1;
3146 DECL_EXTERNAL (class_decl) = 1;
3147 TREE_PUBLIC (class_decl) = 1;
3148 DECL_ARTIFICIAL (class_decl) = 1;
3149 DECL_IGNORED_P (class_decl) = 1;
3150 pushdecl_top_level (class_decl);
3151 make_decl_rtl (class_decl);
3153 return class_decl;
3156 static tree
3157 build_vec_delete_1 (tree base, tree maxindex, tree type,
3158 special_function_kind auto_delete_vec,
3159 int use_global_delete, tsubst_flags_t complain)
3161 tree virtual_size;
3162 tree ptype = build_pointer_type (type = complete_type (type));
3163 tree size_exp;
3165 /* Temporary variables used by the loop. */
3166 tree tbase, tbase_init;
3168 /* This is the body of the loop that implements the deletion of a
3169 single element, and moves temp variables to next elements. */
3170 tree body;
3172 /* This is the LOOP_EXPR that governs the deletion of the elements. */
3173 tree loop = 0;
3175 /* This is the thing that governs what to do after the loop has run. */
3176 tree deallocate_expr = 0;
3178 /* This is the BIND_EXPR which holds the outermost iterator of the
3179 loop. It is convenient to set this variable up and test it before
3180 executing any other code in the loop.
3181 This is also the containing expression returned by this function. */
3182 tree controller = NULL_TREE;
3183 tree tmp;
3185 /* We should only have 1-D arrays here. */
3186 gcc_assert (TREE_CODE (type) != ARRAY_TYPE);
3188 if (base == error_mark_node || maxindex == error_mark_node)
3189 return error_mark_node;
3191 if (!COMPLETE_TYPE_P (type))
3193 if ((complain & tf_warning)
3194 && warning (OPT_Wdelete_incomplete,
3195 "possible problem detected in invocation of "
3196 "delete [] operator:"))
3198 cxx_incomplete_type_diagnostic (base, type, DK_WARNING);
3199 inform (input_location, "neither the destructor nor the "
3200 "class-specific operator delete [] will be called, "
3201 "even if they are declared when the class is defined");
3203 /* This size won't actually be used. */
3204 size_exp = size_one_node;
3205 goto no_destructor;
3208 size_exp = size_in_bytes (type);
3210 if (! MAYBE_CLASS_TYPE_P (type))
3211 goto no_destructor;
3212 else if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
3214 /* Make sure the destructor is callable. */
3215 if (type_build_dtor_call (type))
3217 tmp = build_delete (ptype, base, sfk_complete_destructor,
3218 LOOKUP_NORMAL|LOOKUP_DESTRUCTOR, 1,
3219 complain);
3220 if (tmp == error_mark_node)
3221 return error_mark_node;
3223 goto no_destructor;
3226 /* The below is short by the cookie size. */
3227 virtual_size = size_binop (MULT_EXPR, size_exp,
3228 convert (sizetype, maxindex));
3230 tbase = create_temporary_var (ptype);
3231 tbase_init
3232 = cp_build_modify_expr (tbase, NOP_EXPR,
3233 fold_build_pointer_plus_loc (input_location,
3234 fold_convert (ptype,
3235 base),
3236 virtual_size),
3237 complain);
3238 if (tbase_init == error_mark_node)
3239 return error_mark_node;
3240 controller = build3 (BIND_EXPR, void_type_node, tbase,
3241 NULL_TREE, NULL_TREE);
3242 TREE_SIDE_EFFECTS (controller) = 1;
3244 body = build1 (EXIT_EXPR, void_type_node,
3245 build2 (EQ_EXPR, boolean_type_node, tbase,
3246 fold_convert (ptype, base)));
3247 tmp = fold_build1_loc (input_location, NEGATE_EXPR, sizetype, size_exp);
3248 tmp = fold_build_pointer_plus (tbase, tmp);
3249 tmp = cp_build_modify_expr (tbase, NOP_EXPR, tmp, complain);
3250 if (tmp == error_mark_node)
3251 return error_mark_node;
3252 body = build_compound_expr (input_location, body, tmp);
3253 tmp = build_delete (ptype, tbase, sfk_complete_destructor,
3254 LOOKUP_NORMAL|LOOKUP_DESTRUCTOR, 1,
3255 complain);
3256 if (tmp == error_mark_node)
3257 return error_mark_node;
3258 body = build_compound_expr (input_location, body, tmp);
3260 loop = build1 (LOOP_EXPR, void_type_node, body);
3261 loop = build_compound_expr (input_location, tbase_init, loop);
3263 no_destructor:
3264 /* Delete the storage if appropriate. */
3265 if (auto_delete_vec == sfk_deleting_destructor)
3267 tree base_tbd;
3269 /* The below is short by the cookie size. */
3270 virtual_size = size_binop (MULT_EXPR, size_exp,
3271 convert (sizetype, maxindex));
3273 if (! TYPE_VEC_NEW_USES_COOKIE (type))
3274 /* no header */
3275 base_tbd = base;
3276 else
3278 tree cookie_size;
3280 cookie_size = targetm.cxx.get_cookie_size (type);
3281 base_tbd = cp_build_binary_op (input_location,
3282 MINUS_EXPR,
3283 cp_convert (string_type_node,
3284 base, complain),
3285 cookie_size,
3286 complain);
3287 if (base_tbd == error_mark_node)
3288 return error_mark_node;
3289 base_tbd = cp_convert (ptype, base_tbd, complain);
3290 /* True size with header. */
3291 virtual_size = size_binop (PLUS_EXPR, virtual_size, cookie_size);
3294 deallocate_expr = build_op_delete_call (VEC_DELETE_EXPR,
3295 base_tbd, virtual_size,
3296 use_global_delete & 1,
3297 /*placement=*/NULL_TREE,
3298 /*alloc_fn=*/NULL_TREE,
3299 complain);
3302 body = loop;
3303 if (!deallocate_expr)
3305 else if (!body)
3306 body = deallocate_expr;
3307 else
3308 body = build_compound_expr (input_location, body, deallocate_expr);
3310 if (!body)
3311 body = integer_zero_node;
3313 /* Outermost wrapper: If pointer is null, punt. */
3314 body = fold_build3_loc (input_location, COND_EXPR, void_type_node,
3315 fold_build2_loc (input_location,
3316 NE_EXPR, boolean_type_node, base,
3317 convert (TREE_TYPE (base),
3318 nullptr_node)),
3319 body, integer_zero_node);
3320 body = build1 (NOP_EXPR, void_type_node, body);
3322 if (controller)
3324 TREE_OPERAND (controller, 1) = body;
3325 body = controller;
3328 if (TREE_CODE (base) == SAVE_EXPR)
3329 /* Pre-evaluate the SAVE_EXPR outside of the BIND_EXPR. */
3330 body = build2 (COMPOUND_EXPR, void_type_node, base, body);
3332 return convert_to_void (body, ICV_CAST, complain);
3335 /* Create an unnamed variable of the indicated TYPE. */
3337 tree
3338 create_temporary_var (tree type)
3340 tree decl;
3342 decl = build_decl (input_location,
3343 VAR_DECL, NULL_TREE, type);
3344 TREE_USED (decl) = 1;
3345 DECL_ARTIFICIAL (decl) = 1;
3346 DECL_IGNORED_P (decl) = 1;
3347 DECL_CONTEXT (decl) = current_function_decl;
3349 return decl;
3352 /* Create a new temporary variable of the indicated TYPE, initialized
3353 to INIT.
3355 It is not entered into current_binding_level, because that breaks
3356 things when it comes time to do final cleanups (which take place
3357 "outside" the binding contour of the function). */
3359 tree
3360 get_temp_regvar (tree type, tree init)
3362 tree decl;
3364 decl = create_temporary_var (type);
3365 add_decl_expr (decl);
3367 finish_expr_stmt (cp_build_modify_expr (decl, INIT_EXPR, init,
3368 tf_warning_or_error));
3370 return decl;
3373 /* `build_vec_init' returns tree structure that performs
3374 initialization of a vector of aggregate types.
3376 BASE is a reference to the vector, of ARRAY_TYPE, or a pointer
3377 to the first element, of POINTER_TYPE.
3378 MAXINDEX is the maximum index of the array (one less than the
3379 number of elements). It is only used if BASE is a pointer or
3380 TYPE_DOMAIN (TREE_TYPE (BASE)) == NULL_TREE.
3382 INIT is the (possibly NULL) initializer.
3384 If EXPLICIT_VALUE_INIT_P is true, then INIT must be NULL. All
3385 elements in the array are value-initialized.
3387 FROM_ARRAY is 0 if we should init everything with INIT
3388 (i.e., every element initialized from INIT).
3389 FROM_ARRAY is 1 if we should index into INIT in parallel
3390 with initialization of DECL.
3391 FROM_ARRAY is 2 if we should index into INIT in parallel,
3392 but use assignment instead of initialization. */
3394 tree
3395 build_vec_init (tree base, tree maxindex, tree init,
3396 bool explicit_value_init_p,
3397 int from_array, tsubst_flags_t complain)
3399 tree rval;
3400 tree base2 = NULL_TREE;
3401 tree itype = NULL_TREE;
3402 tree iterator;
3403 /* The type of BASE. */
3404 tree atype = TREE_TYPE (base);
3405 /* The type of an element in the array. */
3406 tree type = TREE_TYPE (atype);
3407 /* The element type reached after removing all outer array
3408 types. */
3409 tree inner_elt_type;
3410 /* The type of a pointer to an element in the array. */
3411 tree ptype;
3412 tree stmt_expr;
3413 tree compound_stmt;
3414 int destroy_temps;
3415 tree try_block = NULL_TREE;
3416 int num_initialized_elts = 0;
3417 bool is_global;
3418 tree obase = base;
3419 bool xvalue = false;
3420 bool errors = false;
3422 if (TREE_CODE (atype) == ARRAY_TYPE && TYPE_DOMAIN (atype))
3423 maxindex = array_type_nelts (atype);
3425 if (maxindex == NULL_TREE || maxindex == error_mark_node)
3426 return error_mark_node;
3428 if (explicit_value_init_p)
3429 gcc_assert (!init);
3431 inner_elt_type = strip_array_types (type);
3433 /* Look through the TARGET_EXPR around a compound literal. */
3434 if (init && TREE_CODE (init) == TARGET_EXPR
3435 && TREE_CODE (TARGET_EXPR_INITIAL (init)) == CONSTRUCTOR
3436 && from_array != 2)
3437 init = TARGET_EXPR_INITIAL (init);
3439 /* If we have a braced-init-list, make sure that the array
3440 is big enough for all the initializers. */
3441 bool length_check = (init && TREE_CODE (init) == CONSTRUCTOR
3442 && CONSTRUCTOR_NELTS (init) > 0
3443 && !TREE_CONSTANT (maxindex));
3445 if (init
3446 && TREE_CODE (atype) == ARRAY_TYPE
3447 && TREE_CONSTANT (maxindex)
3448 && (from_array == 2
3449 ? (!CLASS_TYPE_P (inner_elt_type)
3450 || !TYPE_HAS_COMPLEX_COPY_ASSIGN (inner_elt_type))
3451 : !TYPE_NEEDS_CONSTRUCTING (type))
3452 && ((TREE_CODE (init) == CONSTRUCTOR
3453 /* Don't do this if the CONSTRUCTOR might contain something
3454 that might throw and require us to clean up. */
3455 && (vec_safe_is_empty (CONSTRUCTOR_ELTS (init))
3456 || ! TYPE_HAS_NONTRIVIAL_DESTRUCTOR (inner_elt_type)))
3457 || from_array))
3459 /* Do non-default initialization of trivial arrays resulting from
3460 brace-enclosed initializers. In this case, digest_init and
3461 store_constructor will handle the semantics for us. */
3463 if (BRACE_ENCLOSED_INITIALIZER_P (init))
3464 init = digest_init (atype, init, complain);
3465 stmt_expr = build2 (INIT_EXPR, atype, base, init);
3466 return stmt_expr;
3469 maxindex = cp_convert (ptrdiff_type_node, maxindex, complain);
3470 if (TREE_CODE (atype) == ARRAY_TYPE)
3472 ptype = build_pointer_type (type);
3473 base = decay_conversion (base, complain);
3474 if (base == error_mark_node)
3475 return error_mark_node;
3476 base = cp_convert (ptype, base, complain);
3478 else
3479 ptype = atype;
3481 /* The code we are generating looks like:
3483 T* t1 = (T*) base;
3484 T* rval = t1;
3485 ptrdiff_t iterator = maxindex;
3486 try {
3487 for (; iterator != -1; --iterator) {
3488 ... initialize *t1 ...
3489 ++t1;
3491 } catch (...) {
3492 ... destroy elements that were constructed ...
3494 rval;
3497 We can omit the try and catch blocks if we know that the
3498 initialization will never throw an exception, or if the array
3499 elements do not have destructors. We can omit the loop completely if
3500 the elements of the array do not have constructors.
3502 We actually wrap the entire body of the above in a STMT_EXPR, for
3503 tidiness.
3505 When copying from array to another, when the array elements have
3506 only trivial copy constructors, we should use __builtin_memcpy
3507 rather than generating a loop. That way, we could take advantage
3508 of whatever cleverness the back end has for dealing with copies
3509 of blocks of memory. */
3511 is_global = begin_init_stmts (&stmt_expr, &compound_stmt);
3512 destroy_temps = stmts_are_full_exprs_p ();
3513 current_stmt_tree ()->stmts_are_full_exprs_p = 0;
3514 rval = get_temp_regvar (ptype, base);
3515 base = get_temp_regvar (ptype, rval);
3516 iterator = get_temp_regvar (ptrdiff_type_node, maxindex);
3518 /* If initializing one array from another, initialize element by
3519 element. We rely upon the below calls to do the argument
3520 checking. Evaluate the initializer before entering the try block. */
3521 if (from_array && init && TREE_CODE (init) != CONSTRUCTOR)
3523 if (lvalue_kind (init) & clk_rvalueref)
3524 xvalue = true;
3525 base2 = decay_conversion (init, complain);
3526 if (base2 == error_mark_node)
3527 return error_mark_node;
3528 itype = TREE_TYPE (base2);
3529 base2 = get_temp_regvar (itype, base2);
3530 itype = TREE_TYPE (itype);
3533 /* Protect the entire array initialization so that we can destroy
3534 the partially constructed array if an exception is thrown.
3535 But don't do this if we're assigning. */
3536 if (flag_exceptions && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
3537 && from_array != 2)
3539 try_block = begin_try_block ();
3542 /* Should we try to create a constant initializer? */
3543 bool try_const = (TREE_CODE (atype) == ARRAY_TYPE
3544 && TREE_CONSTANT (maxindex)
3545 && (init ? TREE_CODE (init) == CONSTRUCTOR
3546 : (type_has_constexpr_default_constructor
3547 (inner_elt_type)))
3548 && (literal_type_p (inner_elt_type)
3549 || TYPE_HAS_CONSTEXPR_CTOR (inner_elt_type)));
3550 vec<constructor_elt, va_gc> *const_vec = NULL;
3551 bool saw_non_const = false;
3552 /* If we're initializing a static array, we want to do static
3553 initialization of any elements with constant initializers even if
3554 some are non-constant. */
3555 bool do_static_init = (DECL_P (obase) && TREE_STATIC (obase));
3557 bool empty_list = false;
3558 if (init && BRACE_ENCLOSED_INITIALIZER_P (init)
3559 && CONSTRUCTOR_NELTS (init) == 0)
3560 /* Skip over the handling of non-empty init lists. */
3561 empty_list = true;
3563 /* Maybe pull out constant value when from_array? */
3565 else if (init != NULL_TREE && TREE_CODE (init) == CONSTRUCTOR)
3567 /* Do non-default initialization of non-trivial arrays resulting from
3568 brace-enclosed initializers. */
3569 unsigned HOST_WIDE_INT idx;
3570 tree field, elt;
3571 /* If the constructor already has the array type, it's been through
3572 digest_init, so we shouldn't try to do anything more. */
3573 bool digested = same_type_p (atype, TREE_TYPE (init));
3574 from_array = 0;
3576 if (length_check)
3578 tree nelts = size_int (CONSTRUCTOR_NELTS (init) - 1);
3579 if (TREE_CODE (atype) != ARRAY_TYPE)
3581 if (flag_exceptions)
3583 tree c = fold_build2 (LT_EXPR, boolean_type_node, iterator,
3584 nelts);
3585 c = build3 (COND_EXPR, void_type_node, c,
3586 throw_bad_array_new_length (), void_node);
3587 finish_expr_stmt (c);
3589 /* Don't check an array new when -fno-exceptions. */
3591 else if (flag_sanitize & SANITIZE_BOUNDS
3592 && do_ubsan_in_current_function ())
3594 /* Make sure the last element of the initializer is in bounds. */
3595 finish_expr_stmt
3596 (ubsan_instrument_bounds
3597 (input_location, obase, &nelts, /*ignore_off_by_one*/false));
3601 if (try_const)
3602 vec_alloc (const_vec, CONSTRUCTOR_NELTS (init));
3604 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (init), idx, field, elt)
3606 tree baseref = build1 (INDIRECT_REF, type, base);
3607 tree one_init;
3609 num_initialized_elts++;
3611 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
3612 if (digested)
3613 one_init = build2 (INIT_EXPR, type, baseref, elt);
3614 else if (MAYBE_CLASS_TYPE_P (type) || TREE_CODE (type) == ARRAY_TYPE)
3615 one_init = build_aggr_init (baseref, elt, 0, complain);
3616 else
3617 one_init = cp_build_modify_expr (baseref, NOP_EXPR,
3618 elt, complain);
3619 if (one_init == error_mark_node)
3620 errors = true;
3621 if (try_const)
3623 tree e = maybe_constant_init (one_init);
3624 if (reduced_constant_expression_p (e))
3626 CONSTRUCTOR_APPEND_ELT (const_vec, field, e);
3627 if (do_static_init)
3628 one_init = NULL_TREE;
3629 else
3630 one_init = build2 (INIT_EXPR, type, baseref, e);
3632 else
3634 if (do_static_init)
3636 tree value = build_zero_init (TREE_TYPE (e), NULL_TREE,
3637 true);
3638 if (value)
3639 CONSTRUCTOR_APPEND_ELT (const_vec, field, value);
3641 saw_non_const = true;
3645 if (one_init)
3646 finish_expr_stmt (one_init);
3647 current_stmt_tree ()->stmts_are_full_exprs_p = 0;
3649 one_init = cp_build_unary_op (PREINCREMENT_EXPR, base, 0, complain);
3650 if (one_init == error_mark_node)
3651 errors = true;
3652 else
3653 finish_expr_stmt (one_init);
3655 one_init = cp_build_unary_op (PREDECREMENT_EXPR, iterator, 0,
3656 complain);
3657 if (one_init == error_mark_node)
3658 errors = true;
3659 else
3660 finish_expr_stmt (one_init);
3663 /* Any elements without explicit initializers get T{}. */
3664 empty_list = true;
3666 else if (from_array)
3668 if (init)
3669 /* OK, we set base2 above. */;
3670 else if (CLASS_TYPE_P (type)
3671 && ! TYPE_HAS_DEFAULT_CONSTRUCTOR (type))
3673 if (complain & tf_error)
3674 error ("initializer ends prematurely");
3675 errors = true;
3679 /* Now, default-initialize any remaining elements. We don't need to
3680 do that if a) the type does not need constructing, or b) we've
3681 already initialized all the elements.
3683 We do need to keep going if we're copying an array. */
3685 if (try_const && !init)
3686 /* With a constexpr default constructor, which we checked for when
3687 setting try_const above, default-initialization is equivalent to
3688 value-initialization, and build_value_init gives us something more
3689 friendly to maybe_constant_init. */
3690 explicit_value_init_p = true;
3691 if (from_array
3692 || ((type_build_ctor_call (type) || init || explicit_value_init_p)
3693 && ! (tree_fits_shwi_p (maxindex)
3694 && (num_initialized_elts
3695 == tree_to_shwi (maxindex) + 1))))
3697 /* If the ITERATOR is equal to -1, then we don't have to loop;
3698 we've already initialized all the elements. */
3699 tree for_stmt;
3700 tree elt_init;
3701 tree to;
3703 for_stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
3704 finish_for_init_stmt (for_stmt);
3705 finish_for_cond (build2 (NE_EXPR, boolean_type_node, iterator,
3706 build_int_cst (TREE_TYPE (iterator), -1)),
3707 for_stmt, false);
3708 elt_init = cp_build_unary_op (PREDECREMENT_EXPR, iterator, 0,
3709 complain);
3710 if (elt_init == error_mark_node)
3711 errors = true;
3712 finish_for_expr (elt_init, for_stmt);
3714 to = build1 (INDIRECT_REF, type, base);
3716 /* If the initializer is {}, then all elements are initialized from T{}.
3717 But for non-classes, that's the same as value-initialization. */
3718 if (empty_list)
3720 if (cxx_dialect >= cxx11 && AGGREGATE_TYPE_P (type))
3722 init = build_constructor (init_list_type_node, NULL);
3724 else
3726 init = NULL_TREE;
3727 explicit_value_init_p = true;
3731 if (from_array)
3733 tree from;
3735 if (base2)
3737 from = build1 (INDIRECT_REF, itype, base2);
3738 if (xvalue)
3739 from = move (from);
3741 else
3742 from = NULL_TREE;
3744 if (from_array == 2)
3745 elt_init = cp_build_modify_expr (to, NOP_EXPR, from,
3746 complain);
3747 else if (type_build_ctor_call (type))
3748 elt_init = build_aggr_init (to, from, 0, complain);
3749 else if (from)
3750 elt_init = cp_build_modify_expr (to, NOP_EXPR, from,
3751 complain);
3752 else
3753 gcc_unreachable ();
3755 else if (TREE_CODE (type) == ARRAY_TYPE)
3757 if (init && !BRACE_ENCLOSED_INITIALIZER_P (init))
3758 sorry
3759 ("cannot initialize multi-dimensional array with initializer");
3760 elt_init = build_vec_init (build1 (INDIRECT_REF, type, base),
3761 0, init,
3762 explicit_value_init_p,
3763 0, complain);
3765 else if (explicit_value_init_p)
3767 elt_init = build_value_init (type, complain);
3768 if (elt_init != error_mark_node)
3769 elt_init = build2 (INIT_EXPR, type, to, elt_init);
3771 else
3773 gcc_assert (type_build_ctor_call (type) || init);
3774 if (CLASS_TYPE_P (type))
3775 elt_init = build_aggr_init (to, init, 0, complain);
3776 else
3778 if (TREE_CODE (init) == TREE_LIST)
3779 init = build_x_compound_expr_from_list (init, ELK_INIT,
3780 complain);
3781 elt_init = build2 (INIT_EXPR, type, to, init);
3785 if (elt_init == error_mark_node)
3786 errors = true;
3788 if (try_const)
3790 /* FIXME refs to earlier elts */
3791 tree e = maybe_constant_init (elt_init);
3792 if (reduced_constant_expression_p (e))
3794 if (initializer_zerop (e))
3795 /* Don't fill the CONSTRUCTOR with zeros. */
3796 e = NULL_TREE;
3797 if (do_static_init)
3798 elt_init = NULL_TREE;
3800 else
3802 saw_non_const = true;
3803 if (do_static_init)
3804 e = build_zero_init (TREE_TYPE (e), NULL_TREE, true);
3805 else
3806 e = NULL_TREE;
3809 if (e)
3811 int max = tree_to_shwi (maxindex)+1;
3812 for (; num_initialized_elts < max; ++num_initialized_elts)
3814 tree field = size_int (num_initialized_elts);
3815 CONSTRUCTOR_APPEND_ELT (const_vec, field, e);
3820 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
3821 if (elt_init)
3822 finish_expr_stmt (elt_init);
3823 current_stmt_tree ()->stmts_are_full_exprs_p = 0;
3825 finish_expr_stmt (cp_build_unary_op (PREINCREMENT_EXPR, base, 0,
3826 complain));
3827 if (base2)
3828 finish_expr_stmt (cp_build_unary_op (PREINCREMENT_EXPR, base2, 0,
3829 complain));
3831 finish_for_stmt (for_stmt);
3834 /* Make sure to cleanup any partially constructed elements. */
3835 if (flag_exceptions && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
3836 && from_array != 2)
3838 tree e;
3839 tree m = cp_build_binary_op (input_location,
3840 MINUS_EXPR, maxindex, iterator,
3841 complain);
3843 /* Flatten multi-dimensional array since build_vec_delete only
3844 expects one-dimensional array. */
3845 if (TREE_CODE (type) == ARRAY_TYPE)
3846 m = cp_build_binary_op (input_location,
3847 MULT_EXPR, m,
3848 /* Avoid mixing signed and unsigned. */
3849 convert (TREE_TYPE (m),
3850 array_type_nelts_total (type)),
3851 complain);
3853 finish_cleanup_try_block (try_block);
3854 e = build_vec_delete_1 (rval, m,
3855 inner_elt_type, sfk_complete_destructor,
3856 /*use_global_delete=*/0, complain);
3857 if (e == error_mark_node)
3858 errors = true;
3859 finish_cleanup (e, try_block);
3862 /* The value of the array initialization is the array itself, RVAL
3863 is a pointer to the first element. */
3864 finish_stmt_expr_expr (rval, stmt_expr);
3866 stmt_expr = finish_init_stmts (is_global, stmt_expr, compound_stmt);
3868 current_stmt_tree ()->stmts_are_full_exprs_p = destroy_temps;
3870 if (errors)
3871 return error_mark_node;
3873 if (try_const)
3875 if (!saw_non_const)
3877 tree const_init = build_constructor (atype, const_vec);
3878 return build2 (INIT_EXPR, atype, obase, const_init);
3880 else if (do_static_init && !vec_safe_is_empty (const_vec))
3881 DECL_INITIAL (obase) = build_constructor (atype, const_vec);
3882 else
3883 vec_free (const_vec);
3886 /* Now make the result have the correct type. */
3887 if (TREE_CODE (atype) == ARRAY_TYPE)
3889 atype = build_pointer_type (atype);
3890 stmt_expr = build1 (NOP_EXPR, atype, stmt_expr);
3891 stmt_expr = cp_build_indirect_ref (stmt_expr, RO_NULL, complain);
3892 TREE_NO_WARNING (stmt_expr) = 1;
3895 return stmt_expr;
3898 /* Call the DTOR_KIND destructor for EXP. FLAGS are as for
3899 build_delete. */
3901 static tree
3902 build_dtor_call (tree exp, special_function_kind dtor_kind, int flags,
3903 tsubst_flags_t complain)
3905 tree name;
3906 tree fn;
3907 switch (dtor_kind)
3909 case sfk_complete_destructor:
3910 name = complete_dtor_identifier;
3911 break;
3913 case sfk_base_destructor:
3914 name = base_dtor_identifier;
3915 break;
3917 case sfk_deleting_destructor:
3918 name = deleting_dtor_identifier;
3919 break;
3921 default:
3922 gcc_unreachable ();
3924 fn = lookup_fnfields (TREE_TYPE (exp), name, /*protect=*/2);
3925 return build_new_method_call (exp, fn,
3926 /*args=*/NULL,
3927 /*conversion_path=*/NULL_TREE,
3928 flags,
3929 /*fn_p=*/NULL,
3930 complain);
3933 /* Generate a call to a destructor. TYPE is the type to cast ADDR to.
3934 ADDR is an expression which yields the store to be destroyed.
3935 AUTO_DELETE is the name of the destructor to call, i.e., either
3936 sfk_complete_destructor, sfk_base_destructor, or
3937 sfk_deleting_destructor.
3939 FLAGS is the logical disjunction of zero or more LOOKUP_
3940 flags. See cp-tree.h for more info. */
3942 tree
3943 build_delete (tree otype, tree addr, special_function_kind auto_delete,
3944 int flags, int use_global_delete, tsubst_flags_t complain)
3946 tree expr;
3948 if (addr == error_mark_node)
3949 return error_mark_node;
3951 tree type = TYPE_MAIN_VARIANT (otype);
3953 /* Can happen when CURRENT_EXCEPTION_OBJECT gets its type
3954 set to `error_mark_node' before it gets properly cleaned up. */
3955 if (type == error_mark_node)
3956 return error_mark_node;
3958 if (TREE_CODE (type) == POINTER_TYPE)
3959 type = TYPE_MAIN_VARIANT (TREE_TYPE (type));
3961 if (TREE_CODE (type) == ARRAY_TYPE)
3963 if (TYPE_DOMAIN (type) == NULL_TREE)
3965 if (complain & tf_error)
3966 error ("unknown array size in delete");
3967 return error_mark_node;
3969 return build_vec_delete (addr, array_type_nelts (type),
3970 auto_delete, use_global_delete, complain);
3973 if (TYPE_PTR_P (otype))
3975 addr = mark_rvalue_use (addr);
3977 /* We don't want to warn about delete of void*, only other
3978 incomplete types. Deleting other incomplete types
3979 invokes undefined behavior, but it is not ill-formed, so
3980 compile to something that would even do The Right Thing
3981 (TM) should the type have a trivial dtor and no delete
3982 operator. */
3983 if (!VOID_TYPE_P (type))
3985 complete_type (type);
3986 if (!COMPLETE_TYPE_P (type))
3988 if ((complain & tf_warning)
3989 && warning (OPT_Wdelete_incomplete,
3990 "possible problem detected in invocation of "
3991 "delete operator:"))
3993 cxx_incomplete_type_diagnostic (addr, type, DK_WARNING);
3994 inform (input_location,
3995 "neither the destructor nor the class-specific "
3996 "operator delete will be called, even if they are "
3997 "declared when the class is defined");
4000 else if (auto_delete == sfk_deleting_destructor && warn_delnonvdtor
4001 && MAYBE_CLASS_TYPE_P (type) && !CLASSTYPE_FINAL (type)
4002 && TYPE_POLYMORPHIC_P (type))
4004 tree dtor;
4005 dtor = CLASSTYPE_DESTRUCTORS (type);
4006 if (!dtor || !DECL_VINDEX (dtor))
4008 if (CLASSTYPE_PURE_VIRTUALS (type))
4009 warning (OPT_Wdelete_non_virtual_dtor,
4010 "deleting object of abstract class type %qT"
4011 " which has non-virtual destructor"
4012 " will cause undefined behaviour", type);
4013 else
4014 warning (OPT_Wdelete_non_virtual_dtor,
4015 "deleting object of polymorphic class type %qT"
4016 " which has non-virtual destructor"
4017 " might cause undefined behaviour", type);
4021 if (TREE_SIDE_EFFECTS (addr))
4022 addr = save_expr (addr);
4024 /* Throw away const and volatile on target type of addr. */
4025 addr = convert_force (build_pointer_type (type), addr, 0, complain);
4027 else
4029 /* Don't check PROTECT here; leave that decision to the
4030 destructor. If the destructor is accessible, call it,
4031 else report error. */
4032 addr = cp_build_addr_expr (addr, complain);
4033 if (addr == error_mark_node)
4034 return error_mark_node;
4035 if (TREE_SIDE_EFFECTS (addr))
4036 addr = save_expr (addr);
4038 addr = convert_force (build_pointer_type (type), addr, 0, complain);
4041 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
4043 /* Make sure the destructor is callable. */
4044 if (type_build_dtor_call (type))
4046 expr = build_dtor_call (cp_build_indirect_ref (addr, RO_NULL,
4047 complain),
4048 sfk_complete_destructor, flags, complain);
4049 if (expr == error_mark_node)
4050 return error_mark_node;
4053 if (auto_delete != sfk_deleting_destructor)
4054 return void_node;
4056 return build_op_delete_call (DELETE_EXPR, addr,
4057 cxx_sizeof_nowarn (type),
4058 use_global_delete,
4059 /*placement=*/NULL_TREE,
4060 /*alloc_fn=*/NULL_TREE,
4061 complain);
4063 else
4065 tree head = NULL_TREE;
4066 tree do_delete = NULL_TREE;
4067 tree ifexp;
4069 if (CLASSTYPE_LAZY_DESTRUCTOR (type))
4070 lazily_declare_fn (sfk_destructor, type);
4072 /* For `::delete x', we must not use the deleting destructor
4073 since then we would not be sure to get the global `operator
4074 delete'. */
4075 if (use_global_delete && auto_delete == sfk_deleting_destructor)
4077 /* We will use ADDR multiple times so we must save it. */
4078 addr = save_expr (addr);
4079 head = get_target_expr (build_headof (addr));
4080 /* Delete the object. */
4081 do_delete = build_op_delete_call (DELETE_EXPR,
4082 head,
4083 cxx_sizeof_nowarn (type),
4084 /*global_p=*/true,
4085 /*placement=*/NULL_TREE,
4086 /*alloc_fn=*/NULL_TREE,
4087 complain);
4088 /* Otherwise, treat this like a complete object destructor
4089 call. */
4090 auto_delete = sfk_complete_destructor;
4092 /* If the destructor is non-virtual, there is no deleting
4093 variant. Instead, we must explicitly call the appropriate
4094 `operator delete' here. */
4095 else if (!DECL_VIRTUAL_P (CLASSTYPE_DESTRUCTORS (type))
4096 && auto_delete == sfk_deleting_destructor)
4098 /* We will use ADDR multiple times so we must save it. */
4099 addr = save_expr (addr);
4100 /* Build the call. */
4101 do_delete = build_op_delete_call (DELETE_EXPR,
4102 addr,
4103 cxx_sizeof_nowarn (type),
4104 /*global_p=*/false,
4105 /*placement=*/NULL_TREE,
4106 /*alloc_fn=*/NULL_TREE,
4107 complain);
4108 /* Call the complete object destructor. */
4109 auto_delete = sfk_complete_destructor;
4111 else if (auto_delete == sfk_deleting_destructor
4112 && TYPE_GETS_REG_DELETE (type))
4114 /* Make sure we have access to the member op delete, even though
4115 we'll actually be calling it from the destructor. */
4116 build_op_delete_call (DELETE_EXPR, addr, cxx_sizeof_nowarn (type),
4117 /*global_p=*/false,
4118 /*placement=*/NULL_TREE,
4119 /*alloc_fn=*/NULL_TREE,
4120 complain);
4123 expr = build_dtor_call (cp_build_indirect_ref (addr, RO_NULL, complain),
4124 auto_delete, flags, complain);
4125 if (expr == error_mark_node)
4126 return error_mark_node;
4127 if (do_delete)
4128 expr = build2 (COMPOUND_EXPR, void_type_node, expr, do_delete);
4130 /* We need to calculate this before the dtor changes the vptr. */
4131 if (head)
4132 expr = build2 (COMPOUND_EXPR, void_type_node, head, expr);
4134 if (flags & LOOKUP_DESTRUCTOR)
4135 /* Explicit destructor call; don't check for null pointer. */
4136 ifexp = integer_one_node;
4137 else
4139 /* Handle deleting a null pointer. */
4140 ifexp = fold (cp_build_binary_op (input_location,
4141 NE_EXPR, addr, nullptr_node,
4142 complain));
4143 if (ifexp == error_mark_node)
4144 return error_mark_node;
4147 if (ifexp != integer_one_node)
4148 expr = build3 (COND_EXPR, void_type_node, ifexp, expr, void_node);
4150 return expr;
4154 /* At the beginning of a destructor, push cleanups that will call the
4155 destructors for our base classes and members.
4157 Called from begin_destructor_body. */
4159 void
4160 push_base_cleanups (void)
4162 tree binfo, base_binfo;
4163 int i;
4164 tree member;
4165 tree expr;
4166 vec<tree, va_gc> *vbases;
4168 /* Run destructors for all virtual baseclasses. */
4169 if (CLASSTYPE_VBASECLASSES (current_class_type))
4171 tree cond = (condition_conversion
4172 (build2 (BIT_AND_EXPR, integer_type_node,
4173 current_in_charge_parm,
4174 integer_two_node)));
4176 /* The CLASSTYPE_VBASECLASSES vector is in initialization
4177 order, which is also the right order for pushing cleanups. */
4178 for (vbases = CLASSTYPE_VBASECLASSES (current_class_type), i = 0;
4179 vec_safe_iterate (vbases, i, &base_binfo); i++)
4181 if (type_build_dtor_call (BINFO_TYPE (base_binfo)))
4183 expr = build_special_member_call (current_class_ref,
4184 base_dtor_identifier,
4185 NULL,
4186 base_binfo,
4187 (LOOKUP_NORMAL
4188 | LOOKUP_NONVIRTUAL),
4189 tf_warning_or_error);
4190 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (BINFO_TYPE (base_binfo)))
4192 expr = build3 (COND_EXPR, void_type_node, cond,
4193 expr, void_node);
4194 finish_decl_cleanup (NULL_TREE, expr);
4200 /* Take care of the remaining baseclasses. */
4201 for (binfo = TYPE_BINFO (current_class_type), i = 0;
4202 BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
4204 if (BINFO_VIRTUAL_P (base_binfo)
4205 || !type_build_dtor_call (BINFO_TYPE (base_binfo)))
4206 continue;
4208 expr = build_special_member_call (current_class_ref,
4209 base_dtor_identifier,
4210 NULL, base_binfo,
4211 LOOKUP_NORMAL | LOOKUP_NONVIRTUAL,
4212 tf_warning_or_error);
4213 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (BINFO_TYPE (base_binfo)))
4214 finish_decl_cleanup (NULL_TREE, expr);
4217 /* Don't automatically destroy union members. */
4218 if (TREE_CODE (current_class_type) == UNION_TYPE)
4219 return;
4221 for (member = TYPE_FIELDS (current_class_type); member;
4222 member = DECL_CHAIN (member))
4224 tree this_type = TREE_TYPE (member);
4225 if (this_type == error_mark_node
4226 || TREE_CODE (member) != FIELD_DECL
4227 || DECL_ARTIFICIAL (member))
4228 continue;
4229 if (ANON_AGGR_TYPE_P (this_type))
4230 continue;
4231 if (type_build_dtor_call (this_type))
4233 tree this_member = (build_class_member_access_expr
4234 (current_class_ref, member,
4235 /*access_path=*/NULL_TREE,
4236 /*preserve_reference=*/false,
4237 tf_warning_or_error));
4238 expr = build_delete (this_type, this_member,
4239 sfk_complete_destructor,
4240 LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL,
4241 0, tf_warning_or_error);
4242 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (this_type))
4243 finish_decl_cleanup (NULL_TREE, expr);
4248 /* Build a C++ vector delete expression.
4249 MAXINDEX is the number of elements to be deleted.
4250 ELT_SIZE is the nominal size of each element in the vector.
4251 BASE is the expression that should yield the store to be deleted.
4252 This function expands (or synthesizes) these calls itself.
4253 AUTO_DELETE_VEC says whether the container (vector) should be deallocated.
4255 This also calls delete for virtual baseclasses of elements of the vector.
4257 Update: MAXINDEX is no longer needed. The size can be extracted from the
4258 start of the vector for pointers, and from the type for arrays. We still
4259 use MAXINDEX for arrays because it happens to already have one of the
4260 values we'd have to extract. (We could use MAXINDEX with pointers to
4261 confirm the size, and trap if the numbers differ; not clear that it'd
4262 be worth bothering.) */
4264 tree
4265 build_vec_delete (tree base, tree maxindex,
4266 special_function_kind auto_delete_vec,
4267 int use_global_delete, tsubst_flags_t complain)
4269 tree type;
4270 tree rval;
4271 tree base_init = NULL_TREE;
4273 type = TREE_TYPE (base);
4275 if (TYPE_PTR_P (type))
4277 /* Step back one from start of vector, and read dimension. */
4278 tree cookie_addr;
4279 tree size_ptr_type = build_pointer_type (sizetype);
4281 base = mark_rvalue_use (base);
4282 if (TREE_SIDE_EFFECTS (base))
4284 base_init = get_target_expr (base);
4285 base = TARGET_EXPR_SLOT (base_init);
4287 type = strip_array_types (TREE_TYPE (type));
4288 cookie_addr = fold_build1_loc (input_location, NEGATE_EXPR,
4289 sizetype, TYPE_SIZE_UNIT (sizetype));
4290 cookie_addr = fold_build_pointer_plus (fold_convert (size_ptr_type, base),
4291 cookie_addr);
4292 maxindex = cp_build_indirect_ref (cookie_addr, RO_NULL, complain);
4294 else if (TREE_CODE (type) == ARRAY_TYPE)
4296 /* Get the total number of things in the array, maxindex is a
4297 bad name. */
4298 maxindex = array_type_nelts_total (type);
4299 type = strip_array_types (type);
4300 base = decay_conversion (base, complain);
4301 if (base == error_mark_node)
4302 return error_mark_node;
4303 if (TREE_SIDE_EFFECTS (base))
4305 base_init = get_target_expr (base);
4306 base = TARGET_EXPR_SLOT (base_init);
4309 else
4311 if (base != error_mark_node && !(complain & tf_error))
4312 error ("type to vector delete is neither pointer or array type");
4313 return error_mark_node;
4316 rval = build_vec_delete_1 (base, maxindex, type, auto_delete_vec,
4317 use_global_delete, complain);
4318 if (base_init && rval != error_mark_node)
4319 rval = build2 (COMPOUND_EXPR, TREE_TYPE (rval), base_init, rval);
4321 return rval;