1 /* Handle initialization things in C++.
2 Copyright (C) 1987-2017 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)
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. */
25 #include "coretypes.h"
28 #include "stringpool.h"
31 #include "c-family/c-ubsan.h"
35 static bool begin_init_stmts (tree
*, tree
*);
36 static tree
finish_init_stmts (bool, tree
, tree
);
37 static void construct_virtual_base (tree
, tree
);
38 static void expand_aggr_init_1 (tree
, tree
, tree
, tree
, int, tsubst_flags_t
);
39 static void expand_default_init (tree
, tree
, tree
, tree
, int, tsubst_flags_t
);
40 static void perform_member_init (tree
, tree
);
41 static int member_init_ok_or_else (tree
, tree
, tree
);
42 static void expand_virtual_init (tree
, tree
);
43 static tree
sort_mem_initializers (tree
, tree
);
44 static tree
initializing_context (tree
);
45 static void expand_cleanup_for_base (tree
, tree
);
46 static tree
dfs_initialize_vtbl_ptrs (tree
, void *);
47 static tree
build_field_list (tree
, tree
, int *);
48 static int diagnose_uninitialized_cst_or_ref_member_1 (tree
, tree
, bool, bool);
50 static GTY(()) tree fn
;
52 /* We are about to generate some complex initialization code.
53 Conceptually, it is all a single expression. However, we may want
54 to include conditionals, loops, and other such statement-level
55 constructs. Therefore, we build the initialization code inside a
56 statement-expression. This function starts such an expression.
57 STMT_EXPR_P and COMPOUND_STMT_P are filled in by this function;
58 pass them back to finish_init_stmts when the expression is
62 begin_init_stmts (tree
*stmt_expr_p
, tree
*compound_stmt_p
)
64 bool is_global
= !building_stmt_list_p ();
66 *stmt_expr_p
= begin_stmt_expr ();
67 *compound_stmt_p
= begin_compound_stmt (BCS_NO_SCOPE
);
72 /* Finish out the statement-expression begun by the previous call to
73 begin_init_stmts. Returns the statement-expression itself. */
76 finish_init_stmts (bool is_global
, tree stmt_expr
, tree compound_stmt
)
78 finish_compound_stmt (compound_stmt
);
80 stmt_expr
= finish_stmt_expr (stmt_expr
, true);
82 gcc_assert (!building_stmt_list_p () == is_global
);
89 /* Called from initialize_vtbl_ptrs via dfs_walk. BINFO is the base
90 which we want to initialize the vtable pointer for, DATA is
91 TREE_LIST whose TREE_VALUE is the this ptr expression. */
94 dfs_initialize_vtbl_ptrs (tree binfo
, void *data
)
96 if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo
)))
97 return dfs_skip_bases
;
99 if (!BINFO_PRIMARY_P (binfo
) || BINFO_VIRTUAL_P (binfo
))
101 tree base_ptr
= TREE_VALUE ((tree
) data
);
103 base_ptr
= build_base_path (PLUS_EXPR
, base_ptr
, binfo
, /*nonnull=*/1,
104 tf_warning_or_error
);
106 expand_virtual_init (binfo
, base_ptr
);
112 /* Initialize all the vtable pointers in the object pointed to by
116 initialize_vtbl_ptrs (tree addr
)
121 type
= TREE_TYPE (TREE_TYPE (addr
));
122 list
= build_tree_list (type
, addr
);
124 /* Walk through the hierarchy, initializing the vptr in each base
125 class. We do these in pre-order because we can't find the virtual
126 bases for a class until we've initialized the vtbl for that
128 dfs_walk_once (TYPE_BINFO (type
), dfs_initialize_vtbl_ptrs
, NULL
, list
);
131 /* Return an expression for the zero-initialization of an object with
132 type T. This expression will either be a constant (in the case
133 that T is a scalar), or a CONSTRUCTOR (in the case that T is an
134 aggregate), or NULL (in the case that T does not require
135 initialization). In either case, the value can be used as
136 DECL_INITIAL for a decl of the indicated TYPE; it is a valid static
137 initializer. If NELTS is non-NULL, and TYPE is an ARRAY_TYPE, NELTS
138 is the number of elements in the array. If STATIC_STORAGE_P is
139 TRUE, initializers are only generated for entities for which
140 zero-initialization does not simply mean filling the storage with
141 zero bytes. FIELD_SIZE, if non-NULL, is the bit size of the field,
142 subfields with bit positions at or above that bit size shouldn't
143 be added. Note that this only works when the result is assigned
144 to a base COMPONENT_REF; if we only have a pointer to the base subobject,
145 expand_assignment will end up clearing the full size of TYPE. */
148 build_zero_init_1 (tree type
, tree nelts
, bool static_storage_p
,
151 tree init
= NULL_TREE
;
155 To zero-initialize an object of type T means:
157 -- if T is a scalar type, the storage is set to the value of zero
160 -- if T is a non-union class type, the storage for each nonstatic
161 data member and each base-class subobject is zero-initialized.
163 -- if T is a union type, the storage for its first data member is
166 -- if T is an array type, the storage for each element is
169 -- if T is a reference type, no initialization is performed. */
171 gcc_assert (nelts
== NULL_TREE
|| TREE_CODE (nelts
) == INTEGER_CST
);
173 if (type
== error_mark_node
)
175 else if (static_storage_p
&& zero_init_p (type
))
176 /* In order to save space, we do not explicitly build initializers
177 for items that do not need them. GCC's semantics are that
178 items with static storage duration that are not otherwise
179 initialized are initialized to zero. */
181 else if (TYPE_PTR_OR_PTRMEM_P (type
))
182 init
= fold (convert (type
, nullptr_node
));
183 else if (SCALAR_TYPE_P (type
))
184 init
= fold (convert (type
, integer_zero_node
));
185 else if (RECORD_OR_UNION_CODE_P (TREE_CODE (type
)))
188 vec
<constructor_elt
, va_gc
> *v
= NULL
;
190 /* Iterate over the fields, building initializations. */
191 for (field
= TYPE_FIELDS (type
); field
; field
= DECL_CHAIN (field
))
193 if (TREE_CODE (field
) != FIELD_DECL
)
196 if (TREE_TYPE (field
) == error_mark_node
)
199 /* Don't add virtual bases for base classes if they are beyond
200 the size of the current field, that means it is present
201 somewhere else in the object. */
204 tree bitpos
= bit_position (field
);
205 if (TREE_CODE (bitpos
) == INTEGER_CST
206 && !tree_int_cst_lt (bitpos
, field_size
))
210 /* Note that for class types there will be FIELD_DECLs
211 corresponding to base classes as well. Thus, iterating
212 over TYPE_FIELDs will result in correct initialization of
213 all of the subobjects. */
214 if (!static_storage_p
|| !zero_init_p (TREE_TYPE (field
)))
217 = (DECL_FIELD_IS_BASE (field
)
219 && TREE_CODE (DECL_SIZE (field
)) == INTEGER_CST
)
220 ? DECL_SIZE (field
) : NULL_TREE
;
221 tree value
= build_zero_init_1 (TREE_TYPE (field
),
226 CONSTRUCTOR_APPEND_ELT(v
, field
, value
);
229 /* For unions, only the first field is initialized. */
230 if (TREE_CODE (type
) == UNION_TYPE
)
234 /* Build a constructor to contain the initializations. */
235 init
= build_constructor (type
, v
);
237 else if (TREE_CODE (type
) == ARRAY_TYPE
)
240 vec
<constructor_elt
, va_gc
> *v
= NULL
;
242 /* Iterate over the array elements, building initializations. */
244 max_index
= fold_build2_loc (input_location
,
245 MINUS_EXPR
, TREE_TYPE (nelts
),
246 nelts
, integer_one_node
);
248 max_index
= array_type_nelts (type
);
250 /* If we have an error_mark here, we should just return error mark
251 as we don't know the size of the array yet. */
252 if (max_index
== error_mark_node
)
253 return error_mark_node
;
254 gcc_assert (TREE_CODE (max_index
) == INTEGER_CST
);
256 /* A zero-sized array, which is accepted as an extension, will
257 have an upper bound of -1. */
258 if (!tree_int_cst_equal (max_index
, integer_minus_one_node
))
262 /* If this is a one element array, we just use a regular init. */
263 if (tree_int_cst_equal (size_zero_node
, max_index
))
264 ce
.index
= size_zero_node
;
266 ce
.index
= build2 (RANGE_EXPR
, sizetype
, size_zero_node
,
269 ce
.value
= build_zero_init_1 (TREE_TYPE (type
),
271 static_storage_p
, NULL_TREE
);
279 /* Build a constructor to contain the initializations. */
280 init
= build_constructor (type
, v
);
282 else if (VECTOR_TYPE_P (type
))
283 init
= build_zero_cst (type
);
285 gcc_assert (TREE_CODE (type
) == REFERENCE_TYPE
);
287 /* In all cases, the initializer is a constant. */
289 TREE_CONSTANT (init
) = 1;
294 /* Return an expression for the zero-initialization of an object with
295 type T. This expression will either be a constant (in the case
296 that T is a scalar), or a CONSTRUCTOR (in the case that T is an
297 aggregate), or NULL (in the case that T does not require
298 initialization). In either case, the value can be used as
299 DECL_INITIAL for a decl of the indicated TYPE; it is a valid static
300 initializer. If NELTS is non-NULL, and TYPE is an ARRAY_TYPE, NELTS
301 is the number of elements in the array. If STATIC_STORAGE_P is
302 TRUE, initializers are only generated for entities for which
303 zero-initialization does not simply mean filling the storage with
307 build_zero_init (tree type
, tree nelts
, bool static_storage_p
)
309 return build_zero_init_1 (type
, nelts
, static_storage_p
, NULL_TREE
);
312 /* Return a suitable initializer for value-initializing an object of type
313 TYPE, as described in [dcl.init]. */
316 build_value_init (tree type
, tsubst_flags_t complain
)
320 To value-initialize an object of type T means:
322 - if T is a class type (clause 9) with either no default constructor
323 (12.1) or a default constructor that is user-provided or deleted,
324 then the object is default-initialized;
326 - if T is a (possibly cv-qualified) class type without a user-provided
327 or deleted default constructor, then the object is zero-initialized
328 and the semantic constraints for default-initialization are checked,
329 and if T has a non-trivial default constructor, the object is
332 - if T is an array type, then each element is value-initialized;
334 - otherwise, the object is zero-initialized.
336 A program that calls for default-initialization or
337 value-initialization of an entity of reference type is ill-formed. */
339 /* The AGGR_INIT_EXPR tweaking below breaks in templates. */
340 gcc_assert (!processing_template_decl
341 || (SCALAR_TYPE_P (type
) || TREE_CODE (type
) == ARRAY_TYPE
));
343 if (CLASS_TYPE_P (type
)
344 && type_build_ctor_call (type
))
347 build_special_member_call (NULL_TREE
, complete_ctor_identifier
,
348 NULL
, type
, LOOKUP_NORMAL
,
350 if (ctor
== error_mark_node
)
353 if (TREE_CODE (ctor
) == CALL_EXPR
)
354 fn
= get_callee_fndecl (ctor
);
355 ctor
= build_aggr_init_expr (type
, ctor
);
356 if (fn
&& user_provided_p (fn
))
358 else if (TYPE_HAS_COMPLEX_DFLT (type
))
360 /* This is a class that needs constructing, but doesn't have
361 a user-provided constructor. So we need to zero-initialize
362 the object and then call the implicitly defined ctor.
363 This will be handled in simplify_aggr_init_expr. */
364 AGGR_INIT_ZERO_FIRST (ctor
) = 1;
369 /* Discard any access checking during subobject initialization;
370 the checks are implied by the call to the ctor which we have
371 verified is OK (cpp0x/defaulted46.C). */
372 push_deferring_access_checks (dk_deferred
);
373 tree r
= build_value_init_noctor (type
, complain
);
374 pop_deferring_access_checks ();
378 /* Like build_value_init, but don't call the constructor for TYPE. Used
379 for base initializers. */
382 build_value_init_noctor (tree type
, tsubst_flags_t complain
)
384 if (!COMPLETE_TYPE_P (type
))
386 if (complain
& tf_error
)
387 error ("value-initialization of incomplete type %qT", type
);
388 return error_mark_node
;
390 /* FIXME the class and array cases should just use digest_init once it is
392 if (CLASS_TYPE_P (type
))
394 gcc_assert (!TYPE_HAS_COMPLEX_DFLT (type
)
397 if (TREE_CODE (type
) != UNION_TYPE
)
400 vec
<constructor_elt
, va_gc
> *v
= NULL
;
402 /* Iterate over the fields, building initializations. */
403 for (field
= TYPE_FIELDS (type
); field
; field
= DECL_CHAIN (field
))
407 if (TREE_CODE (field
) != FIELD_DECL
)
410 ftype
= TREE_TYPE (field
);
412 if (ftype
== error_mark_node
)
415 /* We could skip vfields and fields of types with
416 user-defined constructors, but I think that won't improve
417 performance at all; it should be simpler in general just
418 to zero out the entire object than try to only zero the
419 bits that actually need it. */
421 /* Note that for class types there will be FIELD_DECLs
422 corresponding to base classes as well. Thus, iterating
423 over TYPE_FIELDs will result in correct initialization of
424 all of the subobjects. */
425 value
= build_value_init (ftype
, complain
);
426 value
= maybe_constant_init (value
);
428 if (value
== error_mark_node
)
429 return error_mark_node
;
431 CONSTRUCTOR_APPEND_ELT(v
, field
, value
);
433 /* We shouldn't have gotten here for anything that would need
434 non-trivial initialization, and gimplify_init_ctor_preeval
435 would need to be fixed to allow it. */
436 gcc_assert (TREE_CODE (value
) != TARGET_EXPR
437 && TREE_CODE (value
) != AGGR_INIT_EXPR
);
440 /* Build a constructor to contain the zero- initializations. */
441 return build_constructor (type
, v
);
444 else if (TREE_CODE (type
) == ARRAY_TYPE
)
446 vec
<constructor_elt
, va_gc
> *v
= NULL
;
448 /* Iterate over the array elements, building initializations. */
449 tree max_index
= array_type_nelts (type
);
451 /* If we have an error_mark here, we should just return error mark
452 as we don't know the size of the array yet. */
453 if (max_index
== error_mark_node
)
455 if (complain
& tf_error
)
456 error ("cannot value-initialize array of unknown bound %qT",
458 return error_mark_node
;
460 gcc_assert (TREE_CODE (max_index
) == INTEGER_CST
);
462 /* A zero-sized array, which is accepted as an extension, will
463 have an upper bound of -1. */
464 if (!tree_int_cst_equal (max_index
, integer_minus_one_node
))
468 /* If this is a one element array, we just use a regular init. */
469 if (tree_int_cst_equal (size_zero_node
, max_index
))
470 ce
.index
= size_zero_node
;
472 ce
.index
= build2 (RANGE_EXPR
, sizetype
, size_zero_node
, max_index
);
474 ce
.value
= build_value_init (TREE_TYPE (type
), complain
);
475 ce
.value
= maybe_constant_init (ce
.value
);
476 if (ce
.value
== error_mark_node
)
477 return error_mark_node
;
482 /* We shouldn't have gotten here for anything that would need
483 non-trivial initialization, and gimplify_init_ctor_preeval
484 would need to be fixed to allow it. */
485 gcc_assert (TREE_CODE (ce
.value
) != TARGET_EXPR
486 && TREE_CODE (ce
.value
) != AGGR_INIT_EXPR
);
489 /* Build a constructor to contain the initializations. */
490 return build_constructor (type
, v
);
492 else if (TREE_CODE (type
) == FUNCTION_TYPE
)
494 if (complain
& tf_error
)
495 error ("value-initialization of function type %qT", type
);
496 return error_mark_node
;
498 else if (TREE_CODE (type
) == REFERENCE_TYPE
)
500 if (complain
& tf_error
)
501 error ("value-initialization of reference type %qT", type
);
502 return error_mark_node
;
505 return build_zero_init (type
, NULL_TREE
, /*static_storage_p=*/false);
508 /* Initialize current class with INIT, a TREE_LIST of
509 arguments for a target constructor. If TREE_LIST is void_type_node,
510 an empty initializer list was given. */
513 perform_target_ctor (tree init
)
515 tree decl
= current_class_ref
;
516 tree type
= current_class_type
;
518 finish_expr_stmt (build_aggr_init (decl
, init
,
519 LOOKUP_NORMAL
|LOOKUP_DELEGATING_CONS
,
520 tf_warning_or_error
));
521 if (type_build_dtor_call (type
))
523 tree expr
= build_delete (type
, decl
, sfk_complete_destructor
,
527 0, tf_warning_or_error
);
528 if (expr
!= error_mark_node
529 && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type
))
530 finish_eh_cleanup (expr
);
534 /* Return the non-static data initializer for FIELD_DECL MEMBER. */
537 get_nsdmi (tree member
, bool in_ctor
)
540 tree save_ccp
= current_class_ptr
;
541 tree save_ccr
= current_class_ref
;
545 /* Use a PLACEHOLDER_EXPR when we don't have a 'this' parameter to
546 refer to; constexpr evaluation knows what to do with it. */
547 current_class_ref
= build0 (PLACEHOLDER_EXPR
, DECL_CONTEXT (member
));
548 current_class_ptr
= build_address (current_class_ref
);
551 if (DECL_LANG_SPECIFIC (member
) && DECL_TEMPLATE_INFO (member
))
553 init
= DECL_INITIAL (DECL_TI_TEMPLATE (member
));
554 if (TREE_CODE (init
) == DEFAULT_ARG
)
557 /* Check recursive instantiation. */
558 if (DECL_INSTANTIATING_NSDMI_P (member
))
560 error ("recursive instantiation of non-static data member "
561 "initializer for %qD", member
);
562 init
= error_mark_node
;
566 DECL_INSTANTIATING_NSDMI_P (member
) = 1;
568 /* Do deferred instantiation of the NSDMI. */
569 init
= (tsubst_copy_and_build
570 (init
, DECL_TI_ARGS (member
),
571 tf_warning_or_error
, member
, /*function_p=*/false,
572 /*integral_constant_expression_p=*/false));
573 init
= digest_nsdmi_init (member
, init
);
575 DECL_INSTANTIATING_NSDMI_P (member
) = 0;
580 init
= DECL_INITIAL (member
);
581 if (init
&& TREE_CODE (init
) == DEFAULT_ARG
)
584 error ("constructor required before non-static data member "
585 "for %qD has been parsed", member
);
586 DECL_INITIAL (member
) = error_mark_node
;
587 init
= error_mark_node
;
589 /* Strip redundant TARGET_EXPR so we don't need to remap it, and
590 so the aggregate init code below will see a CONSTRUCTOR. */
591 bool simple_target
= (init
&& SIMPLE_TARGET_EXPR_P (init
));
593 init
= TARGET_EXPR_INITIAL (init
);
594 init
= break_out_target_exprs (init
);
595 if (simple_target
&& TREE_CODE (init
) != CONSTRUCTOR
)
596 /* Now put it back so C++17 copy elision works. */
597 init
= get_target_expr (init
);
599 current_class_ptr
= save_ccp
;
600 current_class_ref
= save_ccr
;
604 /* Diagnose the flexible array MEMBER if its INITializer is non-null
605 and return true if so. Otherwise return false. */
608 maybe_reject_flexarray_init (tree member
, tree init
)
610 tree type
= TREE_TYPE (member
);
613 || TREE_CODE (type
) != ARRAY_TYPE
614 || TYPE_DOMAIN (type
))
617 /* Point at the flexible array member declaration if it's initialized
618 in-class, and at the ctor if it's initialized in a ctor member
621 if (DECL_INITIAL (member
) == init
622 || !current_function_decl
623 || DECL_DEFAULTED_FN (current_function_decl
))
624 loc
= DECL_SOURCE_LOCATION (member
);
626 loc
= DECL_SOURCE_LOCATION (current_function_decl
);
628 error_at (loc
, "initializer for flexible array member %q#D", member
);
632 /* Initialize MEMBER, a FIELD_DECL, with INIT, a TREE_LIST of
633 arguments. If TREE_LIST is void_type_node, an empty initializer
634 list was given; if NULL_TREE no initializer was given. */
637 perform_member_init (tree member
, tree init
)
640 tree type
= TREE_TYPE (member
);
642 /* Use the non-static data member initializer if there was no
643 mem-initializer for this field. */
644 if (init
== NULL_TREE
)
645 init
= get_nsdmi (member
, /*ctor*/true);
647 if (init
== error_mark_node
)
650 /* Effective C++ rule 12 requires that all data members be
652 if (warn_ecpp
&& init
== NULL_TREE
&& TREE_CODE (type
) != ARRAY_TYPE
)
653 warning_at (DECL_SOURCE_LOCATION (current_function_decl
), OPT_Weffc__
,
654 "%qD should be initialized in the member initialization list",
657 /* Get an lvalue for the data member. */
658 decl
= build_class_member_access_expr (current_class_ref
, member
,
659 /*access_path=*/NULL_TREE
,
660 /*preserve_reference=*/true,
661 tf_warning_or_error
);
662 if (decl
== error_mark_node
)
665 if (warn_init_self
&& init
&& TREE_CODE (init
) == TREE_LIST
666 && TREE_CHAIN (init
) == NULL_TREE
)
668 tree val
= TREE_VALUE (init
);
669 /* Handle references. */
670 if (REFERENCE_REF_P (val
))
671 val
= TREE_OPERAND (val
, 0);
672 if (TREE_CODE (val
) == COMPONENT_REF
&& TREE_OPERAND (val
, 1) == member
673 && TREE_OPERAND (val
, 0) == current_class_ref
)
674 warning_at (DECL_SOURCE_LOCATION (current_function_decl
),
675 OPT_Winit_self
, "%qD is initialized with itself",
679 if (init
== void_type_node
)
681 /* mem() means value-initialization. */
682 if (TREE_CODE (type
) == ARRAY_TYPE
)
684 init
= build_vec_init_expr (type
, init
, tf_warning_or_error
);
685 init
= build2 (INIT_EXPR
, type
, decl
, init
);
686 finish_expr_stmt (init
);
690 tree value
= build_value_init (type
, tf_warning_or_error
);
691 if (value
== error_mark_node
)
693 init
= build2 (INIT_EXPR
, type
, decl
, value
);
694 finish_expr_stmt (init
);
697 /* Deal with this here, as we will get confused if we try to call the
698 assignment op for an anonymous union. This can happen in a
699 synthesized copy constructor. */
700 else if (ANON_AGGR_TYPE_P (type
))
704 init
= build2 (INIT_EXPR
, type
, decl
, TREE_VALUE (init
));
705 finish_expr_stmt (init
);
709 && (TREE_CODE (type
) == REFERENCE_TYPE
710 /* Pre-digested NSDMI. */
711 || (((TREE_CODE (init
) == CONSTRUCTOR
712 && TREE_TYPE (init
) == type
)
713 /* { } mem-initializer. */
714 || (TREE_CODE (init
) == TREE_LIST
715 && DIRECT_LIST_INIT_P (TREE_VALUE (init
))))
716 && (CP_AGGREGATE_TYPE_P (type
)
717 || is_std_init_list (type
)))))
719 /* With references and list-initialization, we need to deal with
720 extending temporary lifetimes. 12.2p5: "A temporary bound to a
721 reference member in a constructor’s ctor-initializer (12.6.2)
722 persists until the constructor exits." */
724 vec
<tree
, va_gc
> *cleanups
= make_tree_vector ();
725 if (TREE_CODE (init
) == TREE_LIST
)
726 init
= build_x_compound_expr_from_list (init
, ELK_MEM_INIT
,
727 tf_warning_or_error
);
728 if (TREE_TYPE (init
) != type
)
730 if (BRACE_ENCLOSED_INITIALIZER_P (init
)
731 && CP_AGGREGATE_TYPE_P (type
))
732 init
= reshape_init (type
, init
, tf_warning_or_error
);
733 init
= digest_init (type
, init
, tf_warning_or_error
);
735 if (init
== error_mark_node
)
737 /* A FIELD_DECL doesn't really have a suitable lifetime, but
738 make_temporary_var_for_ref_to_temp will treat it as automatic and
739 set_up_extended_ref_temp wants to use the decl in a warning. */
740 init
= extend_ref_init_temps (member
, init
, &cleanups
);
741 if (TREE_CODE (type
) == ARRAY_TYPE
742 && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (type
)))
743 init
= build_vec_init_expr (type
, init
, tf_warning_or_error
);
744 init
= build2 (INIT_EXPR
, type
, decl
, init
);
745 finish_expr_stmt (init
);
746 FOR_EACH_VEC_ELT (*cleanups
, i
, t
)
747 push_cleanup (decl
, t
, false);
748 release_tree_vector (cleanups
);
750 else if (type_build_ctor_call (type
)
751 || (init
&& CLASS_TYPE_P (strip_array_types (type
))))
753 if (TREE_CODE (type
) == ARRAY_TYPE
)
757 /* Check to make sure the member initializer is valid and
758 something like a CONSTRUCTOR in: T a[] = { 1, 2 } and
759 if it isn't, return early to avoid triggering another
761 if (maybe_reject_flexarray_init (member
, init
))
764 if (TREE_CODE (init
) != TREE_LIST
|| TREE_CHAIN (init
))
765 init
= error_mark_node
;
767 init
= TREE_VALUE (init
);
769 if (BRACE_ENCLOSED_INITIALIZER_P (init
))
770 init
= digest_init (type
, init
, tf_warning_or_error
);
772 if (init
== NULL_TREE
773 || same_type_ignoring_top_level_qualifiers_p (type
,
776 if (TYPE_DOMAIN (type
) && TYPE_MAX_VALUE (TYPE_DOMAIN (type
)))
778 /* Initialize the array only if it's not a flexible
779 array member (i.e., if it has an upper bound). */
780 init
= build_vec_init_expr (type
, init
, tf_warning_or_error
);
781 init
= build2 (INIT_EXPR
, type
, decl
, init
);
782 finish_expr_stmt (init
);
786 error ("invalid initializer for array member %q#D", member
);
790 int flags
= LOOKUP_NORMAL
;
791 if (DECL_DEFAULTED_FN (current_function_decl
))
792 flags
|= LOOKUP_DEFAULTED
;
793 if (CP_TYPE_CONST_P (type
)
795 && default_init_uninitialized_part (type
))
797 /* TYPE_NEEDS_CONSTRUCTING can be set just because we have a
798 vtable; still give this diagnostic. */
799 if (permerror (DECL_SOURCE_LOCATION (current_function_decl
),
800 "uninitialized const member in %q#T", type
))
801 inform (DECL_SOURCE_LOCATION (member
),
802 "%q#D should be initialized", member
);
804 finish_expr_stmt (build_aggr_init (decl
, init
, flags
,
805 tf_warning_or_error
));
810 if (init
== NULL_TREE
)
813 /* member traversal: note it leaves init NULL */
814 if (TREE_CODE (type
) == REFERENCE_TYPE
)
816 if (permerror (DECL_SOURCE_LOCATION (current_function_decl
),
817 "uninitialized reference member in %q#T", type
))
818 inform (DECL_SOURCE_LOCATION (member
),
819 "%q#D should be initialized", member
);
821 else if (CP_TYPE_CONST_P (type
))
823 if (permerror (DECL_SOURCE_LOCATION (current_function_decl
),
824 "uninitialized const member in %q#T", type
))
825 inform (DECL_SOURCE_LOCATION (member
),
826 "%q#D should be initialized", member
);
829 core_type
= strip_array_types (type
);
831 if (CLASS_TYPE_P (core_type
)
832 && (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type
)
833 || CLASSTYPE_REF_FIELDS_NEED_INIT (core_type
)))
834 diagnose_uninitialized_cst_or_ref_member (core_type
,
838 else if (TREE_CODE (init
) == TREE_LIST
)
839 /* There was an explicit member initialization. Do some work
841 init
= build_x_compound_expr_from_list (init
, ELK_MEM_INIT
,
842 tf_warning_or_error
);
844 /* Reject a member initializer for a flexible array member. */
845 if (init
&& !maybe_reject_flexarray_init (member
, init
))
846 finish_expr_stmt (cp_build_modify_expr (input_location
, decl
,
848 tf_warning_or_error
));
851 if (type_build_dtor_call (type
))
855 expr
= build_class_member_access_expr (current_class_ref
, member
,
856 /*access_path=*/NULL_TREE
,
857 /*preserve_reference=*/false,
858 tf_warning_or_error
);
859 expr
= build_delete (type
, expr
, sfk_complete_destructor
,
860 LOOKUP_NONVIRTUAL
|LOOKUP_DESTRUCTOR
, 0,
861 tf_warning_or_error
);
863 if (expr
!= error_mark_node
864 && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type
))
865 finish_eh_cleanup (expr
);
869 /* Returns a TREE_LIST containing (as the TREE_PURPOSE of each node) all
870 the FIELD_DECLs on the TYPE_FIELDS list for T, in reverse order. */
873 build_field_list (tree t
, tree list
, int *uses_unions_or_anon_p
)
877 /* Note whether or not T is a union. */
878 if (TREE_CODE (t
) == UNION_TYPE
)
879 *uses_unions_or_anon_p
= 1;
881 for (fields
= TYPE_FIELDS (t
); fields
; fields
= DECL_CHAIN (fields
))
885 /* Skip CONST_DECLs for enumeration constants and so forth. */
886 if (TREE_CODE (fields
) != FIELD_DECL
|| DECL_ARTIFICIAL (fields
))
889 fieldtype
= TREE_TYPE (fields
);
891 /* For an anonymous struct or union, we must recursively
892 consider the fields of the anonymous type. They can be
893 directly initialized from the constructor. */
894 if (ANON_AGGR_TYPE_P (fieldtype
))
896 /* Add this field itself. Synthesized copy constructors
897 initialize the entire aggregate. */
898 list
= tree_cons (fields
, NULL_TREE
, list
);
899 /* And now add the fields in the anonymous aggregate. */
900 list
= build_field_list (fieldtype
, list
, uses_unions_or_anon_p
);
901 *uses_unions_or_anon_p
= 1;
903 /* Add this field. */
904 else if (DECL_NAME (fields
))
905 list
= tree_cons (fields
, NULL_TREE
, list
);
911 /* Return the innermost aggregate scope for FIELD, whether that is
912 the enclosing class or an anonymous aggregate within it. */
915 innermost_aggr_scope (tree field
)
917 if (ANON_AGGR_TYPE_P (TREE_TYPE (field
)))
918 return TREE_TYPE (field
);
920 return DECL_CONTEXT (field
);
923 /* The MEM_INITS are a TREE_LIST. The TREE_PURPOSE of each list gives
924 a FIELD_DECL or BINFO in T that needs initialization. The
925 TREE_VALUE gives the initializer, or list of initializer arguments.
927 Return a TREE_LIST containing all of the initializations required
928 for T, in the order in which they should be performed. The output
929 list has the same format as the input. */
932 sort_mem_initializers (tree t
, tree mem_inits
)
935 tree base
, binfo
, base_binfo
;
938 vec
<tree
, va_gc
> *vbases
;
940 int uses_unions_or_anon_p
= 0;
942 /* Build up a list of initializations. The TREE_PURPOSE of entry
943 will be the subobject (a FIELD_DECL or BINFO) to initialize. The
944 TREE_VALUE will be the constructor arguments, or NULL if no
945 explicit initialization was provided. */
946 sorted_inits
= NULL_TREE
;
948 /* Process the virtual bases. */
949 for (vbases
= CLASSTYPE_VBASECLASSES (t
), i
= 0;
950 vec_safe_iterate (vbases
, i
, &base
); i
++)
951 sorted_inits
= tree_cons (base
, NULL_TREE
, sorted_inits
);
953 /* Process the direct bases. */
954 for (binfo
= TYPE_BINFO (t
), i
= 0;
955 BINFO_BASE_ITERATE (binfo
, i
, base_binfo
); ++i
)
956 if (!BINFO_VIRTUAL_P (base_binfo
))
957 sorted_inits
= tree_cons (base_binfo
, NULL_TREE
, sorted_inits
);
959 /* Process the non-static data members. */
960 sorted_inits
= build_field_list (t
, sorted_inits
, &uses_unions_or_anon_p
);
961 /* Reverse the entire list of initializations, so that they are in
962 the order that they will actually be performed. */
963 sorted_inits
= nreverse (sorted_inits
);
965 /* If the user presented the initializers in an order different from
966 that in which they will actually occur, we issue a warning. Keep
967 track of the next subobject which can be explicitly initialized
968 without issuing a warning. */
969 next_subobject
= sorted_inits
;
971 /* Go through the explicit initializers, filling in TREE_PURPOSE in
973 for (init
= mem_inits
; init
; init
= TREE_CHAIN (init
))
978 subobject
= TREE_PURPOSE (init
);
980 /* If the explicit initializers are in sorted order, then
981 SUBOBJECT will be NEXT_SUBOBJECT, or something following
983 for (subobject_init
= next_subobject
;
985 subobject_init
= TREE_CHAIN (subobject_init
))
986 if (TREE_PURPOSE (subobject_init
) == subobject
)
989 /* Issue a warning if the explicit initializer order does not
990 match that which will actually occur.
991 ??? Are all these on the correct lines? */
992 if (warn_reorder
&& !subobject_init
)
994 if (TREE_CODE (TREE_PURPOSE (next_subobject
)) == FIELD_DECL
)
995 warning_at (DECL_SOURCE_LOCATION (TREE_PURPOSE (next_subobject
)),
996 OPT_Wreorder
, "%qD will be initialized after",
997 TREE_PURPOSE (next_subobject
));
999 warning (OPT_Wreorder
, "base %qT will be initialized after",
1000 TREE_PURPOSE (next_subobject
));
1001 if (TREE_CODE (subobject
) == FIELD_DECL
)
1002 warning_at (DECL_SOURCE_LOCATION (subobject
),
1003 OPT_Wreorder
, " %q#D", subobject
);
1005 warning (OPT_Wreorder
, " base %qT", subobject
);
1006 warning_at (DECL_SOURCE_LOCATION (current_function_decl
),
1007 OPT_Wreorder
, " when initialized here");
1010 /* Look again, from the beginning of the list. */
1011 if (!subobject_init
)
1013 subobject_init
= sorted_inits
;
1014 while (TREE_PURPOSE (subobject_init
) != subobject
)
1015 subobject_init
= TREE_CHAIN (subobject_init
);
1018 /* It is invalid to initialize the same subobject more than
1020 if (TREE_VALUE (subobject_init
))
1022 if (TREE_CODE (subobject
) == FIELD_DECL
)
1023 error_at (DECL_SOURCE_LOCATION (current_function_decl
),
1024 "multiple initializations given for %qD",
1027 error_at (DECL_SOURCE_LOCATION (current_function_decl
),
1028 "multiple initializations given for base %qT",
1032 /* Record the initialization. */
1033 TREE_VALUE (subobject_init
) = TREE_VALUE (init
);
1034 next_subobject
= subobject_init
;
1037 /* [class.base.init]
1039 If a ctor-initializer specifies more than one mem-initializer for
1040 multiple members of the same union (including members of
1041 anonymous unions), the ctor-initializer is ill-formed.
1043 Here we also splice out uninitialized union members. */
1044 if (uses_unions_or_anon_p
)
1046 tree
*last_p
= NULL
;
1048 for (p
= &sorted_inits
; *p
; )
1055 field
= TREE_PURPOSE (init
);
1057 /* Skip base classes. */
1058 if (TREE_CODE (field
) != FIELD_DECL
)
1061 /* If this is an anonymous aggregate with no explicit initializer,
1063 if (!TREE_VALUE (init
) && ANON_AGGR_TYPE_P (TREE_TYPE (field
)))
1066 /* See if this field is a member of a union, or a member of a
1067 structure contained in a union, etc. */
1068 ctx
= innermost_aggr_scope (field
);
1070 /* If this field is not a member of a union, skip it. */
1071 if (TREE_CODE (ctx
) != UNION_TYPE
1072 && !ANON_AGGR_TYPE_P (ctx
))
1075 /* If this union member has no explicit initializer and no NSDMI,
1077 if (TREE_VALUE (init
) || DECL_INITIAL (field
))
1082 /* It's only an error if we have two initializers for the same
1090 /* See if LAST_FIELD and the field initialized by INIT are
1091 members of the same union (or the union itself). If so, there's
1092 a problem, unless they're actually members of the same structure
1093 which is itself a member of a union. For example, given:
1095 union { struct { int i; int j; }; };
1097 initializing both `i' and `j' makes sense. */
1098 ctx
= common_enclosing_class
1099 (innermost_aggr_scope (field
),
1100 innermost_aggr_scope (TREE_PURPOSE (*last_p
)));
1102 if (ctx
&& (TREE_CODE (ctx
) == UNION_TYPE
1103 || ctx
== TREE_TYPE (TREE_PURPOSE (*last_p
))))
1105 /* A mem-initializer hides an NSDMI. */
1106 if (TREE_VALUE (init
) && !TREE_VALUE (*last_p
))
1107 *last_p
= TREE_CHAIN (*last_p
);
1108 else if (TREE_VALUE (*last_p
) && !TREE_VALUE (init
))
1112 error_at (DECL_SOURCE_LOCATION (current_function_decl
),
1113 "initializations for multiple members of %qT",
1122 p
= &TREE_CHAIN (*p
);
1125 *p
= TREE_CHAIN (*p
);
1130 return sorted_inits
;
1133 /* Callback for cp_walk_tree to mark all PARM_DECLs in a tree as read. */
1136 mark_exp_read_r (tree
*tp
, int *, void *)
1139 if (TREE_CODE (t
) == PARM_DECL
)
1144 /* Initialize all bases and members of CURRENT_CLASS_TYPE. MEM_INITS
1145 is a TREE_LIST giving the explicit mem-initializer-list for the
1146 constructor. The TREE_PURPOSE of each entry is a subobject (a
1147 FIELD_DECL or a BINFO) of the CURRENT_CLASS_TYPE. The TREE_VALUE
1148 is a TREE_LIST giving the arguments to the constructor or
1149 void_type_node for an empty list of arguments. */
1152 emit_mem_initializers (tree mem_inits
)
1154 int flags
= LOOKUP_NORMAL
;
1156 /* We will already have issued an error message about the fact that
1157 the type is incomplete. */
1158 if (!COMPLETE_TYPE_P (current_class_type
))
1162 && TYPE_P (TREE_PURPOSE (mem_inits
))
1163 && same_type_p (TREE_PURPOSE (mem_inits
), current_class_type
))
1165 /* Delegating constructor. */
1166 gcc_assert (TREE_CHAIN (mem_inits
) == NULL_TREE
);
1167 perform_target_ctor (TREE_VALUE (mem_inits
));
1171 if (DECL_DEFAULTED_FN (current_function_decl
)
1172 && ! DECL_INHERITED_CTOR (current_function_decl
))
1173 flags
|= LOOKUP_DEFAULTED
;
1175 /* Sort the mem-initializers into the order in which the
1176 initializations should be performed. */
1177 mem_inits
= sort_mem_initializers (current_class_type
, mem_inits
);
1179 in_base_initializer
= 1;
1181 /* Initialize base classes. */
1183 && TREE_CODE (TREE_PURPOSE (mem_inits
)) != FIELD_DECL
);
1184 mem_inits
= TREE_CHAIN (mem_inits
))
1186 tree subobject
= TREE_PURPOSE (mem_inits
);
1187 tree arguments
= TREE_VALUE (mem_inits
);
1189 /* We already have issued an error message. */
1190 if (arguments
== error_mark_node
)
1193 /* Suppress access control when calling the inherited ctor. */
1194 bool inherited_base
= (DECL_INHERITED_CTOR (current_function_decl
)
1195 && flag_new_inheriting_ctors
1198 push_deferring_access_checks (dk_deferred
);
1200 if (arguments
== NULL_TREE
)
1202 /* If these initializations are taking place in a copy constructor,
1203 the base class should probably be explicitly initialized if there
1204 is a user-defined constructor in the base class (other than the
1205 default constructor, which will be called anyway). */
1207 && DECL_COPY_CONSTRUCTOR_P (current_function_decl
)
1208 && type_has_user_nondefault_constructor (BINFO_TYPE (subobject
)))
1209 warning_at (DECL_SOURCE_LOCATION (current_function_decl
),
1210 OPT_Wextra
, "base class %q#T should be explicitly "
1211 "initialized in the copy constructor",
1212 BINFO_TYPE (subobject
));
1215 /* Initialize the base. */
1216 if (!BINFO_VIRTUAL_P (subobject
))
1220 base_addr
= build_base_path (PLUS_EXPR
, current_class_ptr
,
1221 subobject
, 1, tf_warning_or_error
);
1222 expand_aggr_init_1 (subobject
, NULL_TREE
,
1223 cp_build_indirect_ref (base_addr
, RO_NULL
,
1224 tf_warning_or_error
),
1227 tf_warning_or_error
);
1228 expand_cleanup_for_base (subobject
, NULL_TREE
);
1230 else if (!ABSTRACT_CLASS_TYPE_P (current_class_type
))
1231 /* C++14 DR1658 Means we do not have to construct vbases of
1232 abstract classes. */
1233 construct_virtual_base (subobject
, arguments
);
1235 /* When not constructing vbases of abstract classes, at least mark
1236 the arguments expressions as read to avoid
1237 -Wunused-but-set-parameter false positives. */
1238 cp_walk_tree (&arguments
, mark_exp_read_r
, NULL
, NULL
);
1241 pop_deferring_access_checks ();
1243 in_base_initializer
= 0;
1245 /* Initialize the vptrs. */
1246 initialize_vtbl_ptrs (current_class_ptr
);
1248 /* Initialize the data members. */
1251 perform_member_init (TREE_PURPOSE (mem_inits
),
1252 TREE_VALUE (mem_inits
));
1253 mem_inits
= TREE_CHAIN (mem_inits
);
1257 /* Returns the address of the vtable (i.e., the value that should be
1258 assigned to the vptr) for BINFO. */
1261 build_vtbl_address (tree binfo
)
1263 tree binfo_for
= binfo
;
1266 if (BINFO_VPTR_INDEX (binfo
) && BINFO_VIRTUAL_P (binfo
))
1267 /* If this is a virtual primary base, then the vtable we want to store
1268 is that for the base this is being used as the primary base of. We
1269 can't simply skip the initialization, because we may be expanding the
1270 inits of a subobject constructor where the virtual base layout
1271 can be different. */
1272 while (BINFO_PRIMARY_P (binfo_for
))
1273 binfo_for
= BINFO_INHERITANCE_CHAIN (binfo_for
);
1275 /* Figure out what vtable BINFO's vtable is based on, and mark it as
1277 vtbl
= get_vtbl_decl_for_binfo (binfo_for
);
1278 TREE_USED (vtbl
) = true;
1280 /* Now compute the address to use when initializing the vptr. */
1281 vtbl
= unshare_expr (BINFO_VTABLE (binfo_for
));
1283 vtbl
= build1 (ADDR_EXPR
, build_pointer_type (TREE_TYPE (vtbl
)), vtbl
);
1288 /* This code sets up the virtual function tables appropriate for
1289 the pointer DECL. It is a one-ply initialization.
1291 BINFO is the exact type that DECL is supposed to be. In
1292 multiple inheritance, this might mean "C's A" if C : A, B. */
1295 expand_virtual_init (tree binfo
, tree decl
)
1297 tree vtbl
, vtbl_ptr
;
1300 /* Compute the initializer for vptr. */
1301 vtbl
= build_vtbl_address (binfo
);
1303 /* We may get this vptr from a VTT, if this is a subobject
1304 constructor or subobject destructor. */
1305 vtt_index
= BINFO_VPTR_INDEX (binfo
);
1311 /* Compute the value to use, when there's a VTT. */
1312 vtt_parm
= current_vtt_parm
;
1313 vtbl2
= fold_build_pointer_plus (vtt_parm
, vtt_index
);
1314 vtbl2
= cp_build_indirect_ref (vtbl2
, RO_NULL
, tf_warning_or_error
);
1315 vtbl2
= convert (TREE_TYPE (vtbl
), vtbl2
);
1317 /* The actual initializer is the VTT value only in the subobject
1318 constructor. In maybe_clone_body we'll substitute NULL for
1319 the vtt_parm in the case of the non-subobject constructor. */
1320 vtbl
= build_if_in_charge (vtbl
, vtbl2
);
1323 /* Compute the location of the vtpr. */
1324 vtbl_ptr
= build_vfield_ref (cp_build_indirect_ref (decl
, RO_NULL
,
1325 tf_warning_or_error
),
1327 gcc_assert (vtbl_ptr
!= error_mark_node
);
1329 /* Assign the vtable to the vptr. */
1330 vtbl
= convert_force (TREE_TYPE (vtbl_ptr
), vtbl
, 0, tf_warning_or_error
);
1331 finish_expr_stmt (cp_build_modify_expr (input_location
, vtbl_ptr
, NOP_EXPR
,
1332 vtbl
, tf_warning_or_error
));
1335 /* If an exception is thrown in a constructor, those base classes already
1336 constructed must be destroyed. This function creates the cleanup
1337 for BINFO, which has just been constructed. If FLAG is non-NULL,
1338 it is a DECL which is nonzero when this base needs to be
1342 expand_cleanup_for_base (tree binfo
, tree flag
)
1346 if (!type_build_dtor_call (BINFO_TYPE (binfo
)))
1349 /* Call the destructor. */
1350 expr
= build_special_member_call (current_class_ref
,
1351 base_dtor_identifier
,
1354 LOOKUP_NORMAL
| LOOKUP_NONVIRTUAL
,
1355 tf_warning_or_error
);
1357 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (BINFO_TYPE (binfo
)))
1361 expr
= fold_build3_loc (input_location
,
1362 COND_EXPR
, void_type_node
,
1363 c_common_truthvalue_conversion (input_location
, flag
),
1364 expr
, integer_zero_node
);
1366 finish_eh_cleanup (expr
);
1369 /* Construct the virtual base-class VBASE passing the ARGUMENTS to its
1373 construct_virtual_base (tree vbase
, tree arguments
)
1379 /* If there are virtual base classes with destructors, we need to
1380 emit cleanups to destroy them if an exception is thrown during
1381 the construction process. These exception regions (i.e., the
1382 period during which the cleanups must occur) begin from the time
1383 the construction is complete to the end of the function. If we
1384 create a conditional block in which to initialize the
1385 base-classes, then the cleanup region for the virtual base begins
1386 inside a block, and ends outside of that block. This situation
1387 confuses the sjlj exception-handling code. Therefore, we do not
1388 create a single conditional block, but one for each
1389 initialization. (That way the cleanup regions always begin
1390 in the outer block.) We trust the back end to figure out
1391 that the FLAG will not change across initializations, and
1392 avoid doing multiple tests. */
1393 flag
= DECL_CHAIN (DECL_ARGUMENTS (current_function_decl
));
1394 inner_if_stmt
= begin_if_stmt ();
1395 finish_if_stmt_cond (flag
, inner_if_stmt
);
1397 /* Compute the location of the virtual base. If we're
1398 constructing virtual bases, then we must be the most derived
1399 class. Therefore, we don't have to look up the virtual base;
1400 we already know where it is. */
1401 exp
= convert_to_base_statically (current_class_ref
, vbase
);
1403 expand_aggr_init_1 (vbase
, current_class_ref
, exp
, arguments
,
1404 0, tf_warning_or_error
);
1405 finish_then_clause (inner_if_stmt
);
1406 finish_if_stmt (inner_if_stmt
);
1408 expand_cleanup_for_base (vbase
, flag
);
1411 /* Find the context in which this FIELD can be initialized. */
1414 initializing_context (tree field
)
1416 tree t
= DECL_CONTEXT (field
);
1418 /* Anonymous union members can be initialized in the first enclosing
1419 non-anonymous union context. */
1420 while (t
&& ANON_AGGR_TYPE_P (t
))
1421 t
= TYPE_CONTEXT (t
);
1425 /* Function to give error message if member initialization specification
1426 is erroneous. FIELD is the member we decided to initialize.
1427 TYPE is the type for which the initialization is being performed.
1428 FIELD must be a member of TYPE.
1430 MEMBER_NAME is the name of the member. */
1433 member_init_ok_or_else (tree field
, tree type
, tree member_name
)
1435 if (field
== error_mark_node
)
1439 error ("class %qT does not have any field named %qD", type
,
1445 error ("%q#D is a static data member; it can only be "
1446 "initialized at its definition",
1450 if (TREE_CODE (field
) != FIELD_DECL
)
1452 error ("%q#D is not a non-static data member of %qT",
1456 if (initializing_context (field
) != type
)
1458 error ("class %qT does not have any field named %qD", type
,
1466 /* NAME is a FIELD_DECL, an IDENTIFIER_NODE which names a field, or it
1467 is a _TYPE node or TYPE_DECL which names a base for that type.
1468 Check the validity of NAME, and return either the base _TYPE, base
1469 binfo, or the FIELD_DECL of the member. If NAME is invalid, return
1470 NULL_TREE and issue a diagnostic.
1472 An old style unnamed direct single base construction is permitted,
1473 where NAME is NULL. */
1476 expand_member_init (tree name
)
1481 if (!current_class_ref
)
1486 /* This is an obsolete unnamed base class initializer. The
1487 parser will already have warned about its use. */
1488 switch (BINFO_N_BASE_BINFOS (TYPE_BINFO (current_class_type
)))
1491 error ("unnamed initializer for %qT, which has no base classes",
1492 current_class_type
);
1495 basetype
= BINFO_TYPE
1496 (BINFO_BASE_BINFO (TYPE_BINFO (current_class_type
), 0));
1499 error ("unnamed initializer for %qT, which uses multiple inheritance",
1500 current_class_type
);
1504 else if (TYPE_P (name
))
1506 basetype
= TYPE_MAIN_VARIANT (name
);
1507 name
= TYPE_NAME (name
);
1509 else if (TREE_CODE (name
) == TYPE_DECL
)
1510 basetype
= TYPE_MAIN_VARIANT (TREE_TYPE (name
));
1512 basetype
= NULL_TREE
;
1521 if (current_template_parms
1522 || same_type_p (basetype
, current_class_type
))
1525 class_binfo
= TYPE_BINFO (current_class_type
);
1526 direct_binfo
= NULL_TREE
;
1527 virtual_binfo
= NULL_TREE
;
1529 /* Look for a direct base. */
1530 for (i
= 0; BINFO_BASE_ITERATE (class_binfo
, i
, direct_binfo
); ++i
)
1531 if (SAME_BINFO_TYPE_P (BINFO_TYPE (direct_binfo
), basetype
))
1534 /* Look for a virtual base -- unless the direct base is itself
1536 if (!direct_binfo
|| !BINFO_VIRTUAL_P (direct_binfo
))
1537 virtual_binfo
= binfo_for_vbase (basetype
, current_class_type
);
1539 /* [class.base.init]
1541 If a mem-initializer-id is ambiguous because it designates
1542 both a direct non-virtual base class and an inherited virtual
1543 base class, the mem-initializer is ill-formed. */
1544 if (direct_binfo
&& virtual_binfo
)
1546 error ("%qD is both a direct base and an indirect virtual base",
1551 if (!direct_binfo
&& !virtual_binfo
)
1553 if (CLASSTYPE_VBASECLASSES (current_class_type
))
1554 error ("type %qT is not a direct or virtual base of %qT",
1555 basetype
, current_class_type
);
1557 error ("type %qT is not a direct base of %qT",
1558 basetype
, current_class_type
);
1562 return direct_binfo
? direct_binfo
: virtual_binfo
;
1566 if (identifier_p (name
))
1567 field
= lookup_field (current_class_type
, name
, 1, false);
1571 if (member_init_ok_or_else (field
, current_class_type
, name
))
1578 /* This is like `expand_member_init', only it stores one aggregate
1581 INIT comes in two flavors: it is either a value which
1582 is to be stored in EXP, or it is a parameter list
1583 to go to a constructor, which will operate on EXP.
1584 If INIT is not a parameter list for a constructor, then set
1585 LOOKUP_ONLYCONVERTING.
1586 If FLAGS is LOOKUP_ONLYCONVERTING then it is the = init form of
1587 the initializer, if FLAGS is 0, then it is the (init) form.
1588 If `init' is a CONSTRUCTOR, then we emit a warning message,
1589 explaining that such initializations are invalid.
1591 If INIT resolves to a CALL_EXPR which happens to return
1592 something of the type we are looking for, then we know
1593 that we can safely use that call to perform the
1596 The virtual function table pointer cannot be set up here, because
1597 we do not really know its type.
1599 This never calls operator=().
1601 When initializing, nothing is CONST.
1603 A default copy constructor may have to be used to perform the
1606 A constructor or a conversion operator may have to be used to
1607 perform the initialization, but not both, as it would be ambiguous. */
1610 build_aggr_init (tree exp
, tree init
, int flags
, tsubst_flags_t complain
)
1615 tree type
= TREE_TYPE (exp
);
1616 int was_const
= TREE_READONLY (exp
);
1617 int was_volatile
= TREE_THIS_VOLATILE (exp
);
1620 if (init
== error_mark_node
)
1621 return error_mark_node
;
1623 location_t init_loc
= (init
1624 ? EXPR_LOC_OR_LOC (init
, input_location
)
1625 : location_of (exp
));
1627 TREE_READONLY (exp
) = 0;
1628 TREE_THIS_VOLATILE (exp
) = 0;
1630 if (TREE_CODE (type
) == ARRAY_TYPE
)
1632 tree itype
= init
? TREE_TYPE (init
) : NULL_TREE
;
1635 if (VAR_P (exp
) && DECL_DECOMPOSITION_P (exp
))
1638 if (init
&& DECL_P (init
)
1639 && !(flags
& LOOKUP_ONLYCONVERTING
))
1641 /* Wrap the initializer in a CONSTRUCTOR so that build_vec_init
1642 recognizes it as direct-initialization. */
1643 init
= build_constructor_single (init_list_type_node
,
1645 CONSTRUCTOR_IS_DIRECT_INIT (init
) = true;
1650 /* An array may not be initialized use the parenthesized
1651 initialization form -- unless the initializer is "()". */
1652 if (init
&& TREE_CODE (init
) == TREE_LIST
)
1654 if (complain
& tf_error
)
1655 error ("bad array initializer");
1656 return error_mark_node
;
1658 /* Must arrange to initialize each element of EXP
1659 from elements of INIT. */
1660 if (cv_qualified_p (type
))
1661 TREE_TYPE (exp
) = cv_unqualified (type
);
1662 if (itype
&& cv_qualified_p (itype
))
1663 TREE_TYPE (init
) = cv_unqualified (itype
);
1664 from_array
= (itype
&& same_type_p (TREE_TYPE (init
),
1667 if (init
&& !from_array
1668 && !BRACE_ENCLOSED_INITIALIZER_P (init
))
1670 if (complain
& tf_error
)
1671 permerror (init_loc
, "array must be initialized "
1672 "with a brace-enclosed initializer");
1674 return error_mark_node
;
1678 stmt_expr
= build_vec_init (exp
, NULL_TREE
, init
,
1679 /*explicit_value_init_p=*/false,
1682 TREE_READONLY (exp
) = was_const
;
1683 TREE_THIS_VOLATILE (exp
) = was_volatile
;
1684 TREE_TYPE (exp
) = type
;
1685 /* Restore the type of init unless it was used directly. */
1686 if (init
&& TREE_CODE (stmt_expr
) != INIT_EXPR
)
1687 TREE_TYPE (init
) = itype
;
1691 if (init
&& init
!= void_type_node
1692 && TREE_CODE (init
) != TREE_LIST
1693 && !(TREE_CODE (init
) == TARGET_EXPR
1694 && TARGET_EXPR_DIRECT_INIT_P (init
))
1695 && !DIRECT_LIST_INIT_P (init
))
1696 flags
|= LOOKUP_ONLYCONVERTING
;
1698 if ((VAR_P (exp
) || TREE_CODE (exp
) == PARM_DECL
)
1699 && !lookup_attribute ("warn_unused", TYPE_ATTRIBUTES (type
)))
1700 /* Just know that we've seen something for this node. */
1701 TREE_USED (exp
) = 1;
1703 is_global
= begin_init_stmts (&stmt_expr
, &compound_stmt
);
1704 destroy_temps
= stmts_are_full_exprs_p ();
1705 current_stmt_tree ()->stmts_are_full_exprs_p
= 0;
1706 expand_aggr_init_1 (TYPE_BINFO (type
), exp
, exp
,
1707 init
, LOOKUP_NORMAL
|flags
, complain
);
1708 stmt_expr
= finish_init_stmts (is_global
, stmt_expr
, compound_stmt
);
1709 current_stmt_tree ()->stmts_are_full_exprs_p
= destroy_temps
;
1710 TREE_READONLY (exp
) = was_const
;
1711 TREE_THIS_VOLATILE (exp
) = was_volatile
;
1717 expand_default_init (tree binfo
, tree true_exp
, tree exp
, tree init
, int flags
,
1718 tsubst_flags_t complain
)
1720 tree type
= TREE_TYPE (exp
);
1722 /* It fails because there may not be a constructor which takes
1723 its own type as the first (or only parameter), but which does
1724 take other types via a conversion. So, if the thing initializing
1725 the expression is a unit element of type X, first try X(X&),
1726 followed by initialization by X. If neither of these work
1727 out, then look hard. */
1729 vec
<tree
, va_gc
> *parms
;
1731 /* If we have direct-initialization from an initializer list, pull
1732 it out of the TREE_LIST so the code below can see it. */
1733 if (init
&& TREE_CODE (init
) == TREE_LIST
1734 && DIRECT_LIST_INIT_P (TREE_VALUE (init
)))
1736 gcc_checking_assert ((flags
& LOOKUP_ONLYCONVERTING
) == 0
1737 && TREE_CHAIN (init
) == NULL_TREE
);
1738 init
= TREE_VALUE (init
);
1739 /* Only call reshape_init if it has not been called earlier
1741 if (BRACE_ENCLOSED_INITIALIZER_P (init
) && CP_AGGREGATE_TYPE_P (type
))
1742 init
= reshape_init (type
, init
, complain
);
1745 if (init
&& BRACE_ENCLOSED_INITIALIZER_P (init
)
1746 && CP_AGGREGATE_TYPE_P (type
))
1747 /* A brace-enclosed initializer for an aggregate. In C++0x this can
1748 happen for direct-initialization, too. */
1749 init
= digest_init (type
, init
, complain
);
1751 /* A CONSTRUCTOR of the target's type is a previously digested
1752 initializer, whether that happened just above or in
1753 cp_parser_late_parsing_nsdmi.
1755 A TARGET_EXPR with TARGET_EXPR_DIRECT_INIT_P or TARGET_EXPR_LIST_INIT_P
1756 set represents the whole initialization, so we shouldn't build up
1757 another ctor call. */
1759 && (TREE_CODE (init
) == CONSTRUCTOR
1760 || (TREE_CODE (init
) == TARGET_EXPR
1761 && (TARGET_EXPR_DIRECT_INIT_P (init
)
1762 || TARGET_EXPR_LIST_INIT_P (init
))))
1763 && same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (init
), type
))
1765 /* Early initialization via a TARGET_EXPR only works for
1766 complete objects. */
1767 gcc_assert (TREE_CODE (init
) == CONSTRUCTOR
|| true_exp
== exp
);
1769 init
= build2 (INIT_EXPR
, TREE_TYPE (exp
), exp
, init
);
1770 TREE_SIDE_EFFECTS (init
) = 1;
1771 finish_expr_stmt (init
);
1775 if (init
&& TREE_CODE (init
) != TREE_LIST
1776 && (flags
& LOOKUP_ONLYCONVERTING
))
1778 /* Base subobjects should only get direct-initialization. */
1779 gcc_assert (true_exp
== exp
);
1781 if (flags
& DIRECT_BIND
)
1782 /* Do nothing. We hit this in two cases: Reference initialization,
1783 where we aren't initializing a real variable, so we don't want
1784 to run a new constructor; and catching an exception, where we
1785 have already built up the constructor call so we could wrap it
1786 in an exception region. */;
1788 init
= ocp_convert (type
, init
, CONV_IMPLICIT
|CONV_FORCE_TEMP
,
1791 if (TREE_CODE (init
) == MUST_NOT_THROW_EXPR
)
1792 /* We need to protect the initialization of a catch parm with a
1793 call to terminate(), which shows up as a MUST_NOT_THROW_EXPR
1794 around the TARGET_EXPR for the copy constructor. See
1795 initialize_handler_parm. */
1797 TREE_OPERAND (init
, 0) = build2 (INIT_EXPR
, TREE_TYPE (exp
), exp
,
1798 TREE_OPERAND (init
, 0));
1799 TREE_TYPE (init
) = void_type_node
;
1802 init
= build2 (INIT_EXPR
, TREE_TYPE (exp
), exp
, init
);
1803 TREE_SIDE_EFFECTS (init
) = 1;
1804 finish_expr_stmt (init
);
1808 if (init
== NULL_TREE
)
1810 else if (TREE_CODE (init
) == TREE_LIST
&& !TREE_TYPE (init
))
1812 parms
= make_tree_vector ();
1813 for (; init
!= NULL_TREE
; init
= TREE_CHAIN (init
))
1814 vec_safe_push (parms
, TREE_VALUE (init
));
1817 parms
= make_tree_vector_single (init
);
1819 if (exp
== current_class_ref
&& current_function_decl
1820 && DECL_HAS_IN_CHARGE_PARM_P (current_function_decl
))
1822 /* Delegating constructor. */
1825 tree elt
; unsigned i
;
1827 /* Unshare the arguments for the second call. */
1828 vec
<tree
, va_gc
> *parms2
= make_tree_vector ();
1829 FOR_EACH_VEC_SAFE_ELT (parms
, i
, elt
)
1831 elt
= break_out_target_exprs (elt
);
1832 vec_safe_push (parms2
, elt
);
1834 complete
= build_special_member_call (exp
, complete_ctor_identifier
,
1835 &parms2
, binfo
, flags
,
1837 complete
= fold_build_cleanup_point_expr (void_type_node
, complete
);
1838 release_tree_vector (parms2
);
1840 base
= build_special_member_call (exp
, base_ctor_identifier
,
1841 &parms
, binfo
, flags
,
1843 base
= fold_build_cleanup_point_expr (void_type_node
, base
);
1844 rval
= build_if_in_charge (complete
, base
);
1848 tree ctor_name
= (true_exp
== exp
1849 ? complete_ctor_identifier
: base_ctor_identifier
);
1851 rval
= build_special_member_call (exp
, ctor_name
, &parms
, binfo
, flags
,
1856 release_tree_vector (parms
);
1858 if (exp
== true_exp
&& TREE_CODE (rval
) == CALL_EXPR
)
1860 tree fn
= get_callee_fndecl (rval
);
1861 if (fn
&& DECL_DECLARED_CONSTEXPR_P (fn
))
1863 tree e
= maybe_constant_init (rval
, exp
);
1864 if (TREE_CONSTANT (e
))
1865 rval
= build2 (INIT_EXPR
, type
, exp
, e
);
1869 /* FIXME put back convert_to_void? */
1870 if (TREE_SIDE_EFFECTS (rval
))
1871 finish_expr_stmt (rval
);
1874 /* This function is responsible for initializing EXP with INIT
1877 BINFO is the binfo of the type for who we are performing the
1878 initialization. For example, if W is a virtual base class of A and B,
1880 If we are initializing B, then W must contain B's W vtable, whereas
1881 were we initializing C, W must contain C's W vtable.
1883 TRUE_EXP is nonzero if it is the true expression being initialized.
1884 In this case, it may be EXP, or may just contain EXP. The reason we
1885 need this is because if EXP is a base element of TRUE_EXP, we
1886 don't necessarily know by looking at EXP where its virtual
1887 baseclass fields should really be pointing. But we do know
1888 from TRUE_EXP. In constructors, we don't know anything about
1889 the value being initialized.
1891 FLAGS is just passed to `build_new_method_call'. See that function
1892 for its description. */
1895 expand_aggr_init_1 (tree binfo
, tree true_exp
, tree exp
, tree init
, int flags
,
1896 tsubst_flags_t complain
)
1898 tree type
= TREE_TYPE (exp
);
1900 gcc_assert (init
!= error_mark_node
&& type
!= error_mark_node
);
1901 gcc_assert (building_stmt_list_p ());
1903 /* Use a function returning the desired type to initialize EXP for us.
1904 If the function is a constructor, and its first argument is
1905 NULL_TREE, know that it was meant for us--just slide exp on
1906 in and expand the constructor. Constructors now come
1909 if (init
&& VAR_P (exp
)
1910 && COMPOUND_LITERAL_P (init
))
1912 vec
<tree
, va_gc
> *cleanups
= NULL
;
1913 /* If store_init_value returns NULL_TREE, the INIT has been
1914 recorded as the DECL_INITIAL for EXP. That means there's
1915 nothing more we have to do. */
1916 init
= store_init_value (exp
, init
, &cleanups
, flags
);
1918 finish_expr_stmt (init
);
1919 gcc_assert (!cleanups
);
1923 /* List-initialization from {} becomes value-initialization for non-aggregate
1924 classes with default constructors. Handle this here when we're
1925 initializing a base, so protected access works. */
1926 if (exp
!= true_exp
&& init
&& TREE_CODE (init
) == TREE_LIST
)
1928 tree elt
= TREE_VALUE (init
);
1929 if (DIRECT_LIST_INIT_P (elt
)
1930 && CONSTRUCTOR_ELTS (elt
) == 0
1931 && CLASSTYPE_NON_AGGREGATE (type
)
1932 && TYPE_HAS_DEFAULT_CONSTRUCTOR (type
))
1933 init
= void_type_node
;
1936 /* If an explicit -- but empty -- initializer list was present,
1937 that's value-initialization. */
1938 if (init
== void_type_node
)
1940 /* If the type has data but no user-provided ctor, we need to zero
1942 if (!type_has_user_provided_constructor (type
)
1943 && !is_really_empty_class (type
))
1945 tree field_size
= NULL_TREE
;
1946 if (exp
!= true_exp
&& CLASSTYPE_AS_BASE (type
) != type
)
1947 /* Don't clobber already initialized virtual bases. */
1948 field_size
= TYPE_SIZE (CLASSTYPE_AS_BASE (type
));
1949 init
= build_zero_init_1 (type
, NULL_TREE
, /*static_storage_p=*/false,
1951 init
= build2 (INIT_EXPR
, type
, exp
, init
);
1952 finish_expr_stmt (init
);
1955 /* If we don't need to mess with the constructor at all,
1957 if (! type_build_ctor_call (type
))
1960 /* Otherwise fall through and call the constructor. */
1964 /* We know that expand_default_init can handle everything we want
1966 expand_default_init (binfo
, true_exp
, exp
, init
, flags
, complain
);
1969 /* Report an error if TYPE is not a user-defined, class type. If
1970 OR_ELSE is nonzero, give an error message. */
1973 is_class_type (tree type
, int or_else
)
1975 if (type
== error_mark_node
)
1978 if (! CLASS_TYPE_P (type
))
1981 error ("%qT is not a class type", type
);
1988 get_type_value (tree name
)
1990 if (name
== error_mark_node
)
1993 if (IDENTIFIER_HAS_TYPE_VALUE (name
))
1994 return IDENTIFIER_TYPE_VALUE (name
);
1999 /* Build a reference to a member of an aggregate. This is not a C++
2000 `&', but really something which can have its address taken, and
2001 then act as a pointer to member, for example TYPE :: FIELD can have
2002 its address taken by saying & TYPE :: FIELD. ADDRESS_P is true if
2003 this expression is the operand of "&".
2005 @@ Prints out lousy diagnostics for operator <typename>
2008 @@ This function should be rewritten and placed in search.c. */
2011 build_offset_ref (tree type
, tree member
, bool address_p
,
2012 tsubst_flags_t complain
)
2015 tree basebinfo
= NULL_TREE
;
2017 /* class templates can come in as TEMPLATE_DECLs here. */
2018 if (TREE_CODE (member
) == TEMPLATE_DECL
)
2021 if (dependent_scope_p (type
) || type_dependent_expression_p (member
))
2022 return build_qualified_name (NULL_TREE
, type
, member
,
2023 /*template_p=*/false);
2025 gcc_assert (TYPE_P (type
));
2026 if (! is_class_type (type
, 1))
2027 return error_mark_node
;
2029 gcc_assert (DECL_P (member
) || BASELINK_P (member
));
2030 /* Callers should call mark_used before this point. */
2031 gcc_assert (!DECL_P (member
) || TREE_USED (member
));
2033 type
= TYPE_MAIN_VARIANT (type
);
2034 if (!COMPLETE_OR_OPEN_TYPE_P (complete_type (type
)))
2036 if (complain
& tf_error
)
2037 error ("incomplete type %qT does not have member %qD", type
, member
);
2038 return error_mark_node
;
2041 /* Entities other than non-static members need no further
2043 if (TREE_CODE (member
) == TYPE_DECL
)
2045 if (VAR_P (member
) || TREE_CODE (member
) == CONST_DECL
)
2046 return convert_from_reference (member
);
2048 if (TREE_CODE (member
) == FIELD_DECL
&& DECL_C_BIT_FIELD (member
))
2050 if (complain
& tf_error
)
2051 error ("invalid pointer to bit-field %qD", member
);
2052 return error_mark_node
;
2055 /* Set up BASEBINFO for member lookup. */
2056 decl
= maybe_dummy_object (type
, &basebinfo
);
2058 /* A lot of this logic is now handled in lookup_member. */
2059 if (BASELINK_P (member
))
2061 /* Go from the TREE_BASELINK to the member function info. */
2062 tree t
= BASELINK_FUNCTIONS (member
);
2064 if (TREE_CODE (t
) != TEMPLATE_ID_EXPR
&& !really_overloaded_fn (t
))
2066 /* Get rid of a potential OVERLOAD around it. */
2069 /* Unique functions are handled easily. */
2071 /* For non-static member of base class, we need a special rule
2072 for access checking [class.protected]:
2074 If the access is to form a pointer to member, the
2075 nested-name-specifier shall name the derived class
2076 (or any class derived from that class). */
2078 if (address_p
&& DECL_P (t
)
2079 && DECL_NONSTATIC_MEMBER_P (t
))
2080 ok
= perform_or_defer_access_check (TYPE_BINFO (type
), t
, t
,
2083 ok
= perform_or_defer_access_check (basebinfo
, t
, t
,
2086 return error_mark_node
;
2087 if (DECL_STATIC_FUNCTION_P (t
))
2092 TREE_TYPE (member
) = unknown_type_node
;
2094 else if (address_p
&& TREE_CODE (member
) == FIELD_DECL
)
2096 /* We need additional test besides the one in
2097 check_accessibility_of_qualified_id in case it is
2098 a pointer to non-static member. */
2099 if (!perform_or_defer_access_check (TYPE_BINFO (type
), member
, member
,
2101 return error_mark_node
;
2106 /* If MEMBER is non-static, then the program has fallen afoul of
2109 An id-expression that denotes a nonstatic data member or
2110 nonstatic member function of a class can only be used:
2112 -- as part of a class member access (_expr.ref_) in which the
2113 object-expression refers to the member's class or a class
2114 derived from that class, or
2116 -- to form a pointer to member (_expr.unary.op_), or
2118 -- in the body of a nonstatic member function of that class or
2119 of a class derived from that class (_class.mfct.nonstatic_), or
2121 -- in a mem-initializer for a constructor for that class or for
2122 a class derived from that class (_class.base.init_). */
2123 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (member
))
2125 /* Build a representation of the qualified name suitable
2126 for use as the operand to "&" -- even though the "&" is
2127 not actually present. */
2128 member
= build2 (OFFSET_REF
, TREE_TYPE (member
), decl
, member
);
2129 /* In Microsoft mode, treat a non-static member function as if
2130 it were a pointer-to-member. */
2131 if (flag_ms_extensions
)
2133 PTRMEM_OK_P (member
) = 1;
2134 return cp_build_addr_expr (member
, complain
);
2136 if (complain
& tf_error
)
2137 error ("invalid use of non-static member function %qD",
2138 TREE_OPERAND (member
, 1));
2139 return error_mark_node
;
2141 else if (TREE_CODE (member
) == FIELD_DECL
)
2143 if (complain
& tf_error
)
2144 error ("invalid use of non-static data member %qD", member
);
2145 return error_mark_node
;
2150 member
= build2 (OFFSET_REF
, TREE_TYPE (member
), decl
, member
);
2151 PTRMEM_OK_P (member
) = 1;
2155 /* If DECL is a scalar enumeration constant or variable with a
2156 constant initializer, return the initializer (or, its initializers,
2157 recursively); otherwise, return DECL. If STRICT_P, the
2158 initializer is only returned if DECL is a
2159 constant-expression. If RETURN_AGGREGATE_CST_OK_P, it is ok to
2160 return an aggregate constant. */
2163 constant_value_1 (tree decl
, bool strict_p
, bool return_aggregate_cst_ok_p
)
2165 while (TREE_CODE (decl
) == CONST_DECL
2166 || decl_constant_var_p (decl
)
2167 || (!strict_p
&& VAR_P (decl
)
2168 && CP_TYPE_CONST_NON_VOLATILE_P (TREE_TYPE (decl
))))
2171 /* If DECL is a static data member in a template
2172 specialization, we must instantiate it here. The
2173 initializer for the static data member is not processed
2174 until needed; we need it now. */
2175 mark_used (decl
, tf_none
);
2176 mark_rvalue_use (decl
);
2177 init
= DECL_INITIAL (decl
);
2178 if (init
== error_mark_node
)
2180 if (TREE_CODE (decl
) == CONST_DECL
2181 || DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl
))
2182 /* Treat the error as a constant to avoid cascading errors on
2183 excessively recursive template instantiation (c++/9335). */
2188 /* Initializers in templates are generally expanded during
2189 instantiation, so before that for const int i(2)
2190 INIT is a TREE_LIST with the actual initializer as
2192 if (processing_template_decl
2194 && TREE_CODE (init
) == TREE_LIST
2195 && TREE_CHAIN (init
) == NULL_TREE
)
2196 init
= TREE_VALUE (init
);
2197 /* Instantiate a non-dependent initializer for user variables. We
2198 mustn't do this for the temporary for an array compound literal;
2199 trying to instatiate the initializer will keep creating new
2200 temporaries until we crash. Probably it's not useful to do it for
2201 other artificial variables, either. */
2202 if (!DECL_ARTIFICIAL (decl
))
2203 init
= instantiate_non_dependent_or_null (init
);
2205 || !TREE_TYPE (init
)
2206 || !TREE_CONSTANT (init
)
2207 || (!return_aggregate_cst_ok_p
2208 /* Unless RETURN_AGGREGATE_CST_OK_P is true, do not
2209 return an aggregate constant (of which string
2210 literals are a special case), as we do not want
2211 to make inadvertent copies of such entities, and
2212 we must be sure that their addresses are the
2214 && (TREE_CODE (init
) == CONSTRUCTOR
2215 || TREE_CODE (init
) == STRING_CST
)))
2217 /* Don't return a CONSTRUCTOR for a variable with partial run-time
2218 initialization, since it doesn't represent the entire value. */
2219 if (TREE_CODE (init
) == CONSTRUCTOR
2220 && !DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl
))
2222 /* If the variable has a dynamic initializer, don't use its
2223 DECL_INITIAL which doesn't reflect the real value. */
2225 && TREE_STATIC (decl
)
2226 && !DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl
)
2227 && DECL_NONTRIVIALLY_INITIALIZED_P (decl
))
2229 decl
= unshare_expr (init
);
2234 /* If DECL is a CONST_DECL, or a constant VAR_DECL initialized by constant
2235 of integral or enumeration type, or a constexpr variable of scalar type,
2236 then return that value. These are those variables permitted in constant
2237 expressions by [5.19/1]. */
2240 scalar_constant_value (tree decl
)
2242 return constant_value_1 (decl
, /*strict_p=*/true,
2243 /*return_aggregate_cst_ok_p=*/false);
2246 /* Like scalar_constant_value, but can also return aggregate initializers. */
2249 decl_really_constant_value (tree decl
)
2251 return constant_value_1 (decl
, /*strict_p=*/true,
2252 /*return_aggregate_cst_ok_p=*/true);
2255 /* A more relaxed version of scalar_constant_value, used by the
2256 common C/C++ code. */
2259 decl_constant_value (tree decl
)
2261 return constant_value_1 (decl
, /*strict_p=*/processing_template_decl
,
2262 /*return_aggregate_cst_ok_p=*/true);
2265 /* Common subroutines of build_new and build_vec_delete. */
2267 /* Build and return a NEW_EXPR. If NELTS is non-NULL, TYPE[NELTS] is
2268 the type of the object being allocated; otherwise, it's just TYPE.
2269 INIT is the initializer, if any. USE_GLOBAL_NEW is true if the
2270 user explicitly wrote "::operator new". PLACEMENT, if non-NULL, is
2271 a vector of arguments to be provided as arguments to a placement
2272 new operator. This routine performs no semantic checks; it just
2273 creates and returns a NEW_EXPR. */
2276 build_raw_new_expr (vec
<tree
, va_gc
> *placement
, tree type
, tree nelts
,
2277 vec
<tree
, va_gc
> *init
, int use_global_new
)
2282 /* If INIT is NULL, the we want to store NULL_TREE in the NEW_EXPR.
2283 If INIT is not NULL, then we want to store VOID_ZERO_NODE. This
2284 permits us to distinguish the case of a missing initializer "new
2285 int" from an empty initializer "new int()". */
2287 init_list
= NULL_TREE
;
2288 else if (init
->is_empty ())
2289 init_list
= void_node
;
2291 init_list
= build_tree_list_vec (init
);
2293 new_expr
= build4 (NEW_EXPR
, build_pointer_type (type
),
2294 build_tree_list_vec (placement
), type
, nelts
,
2296 NEW_EXPR_USE_GLOBAL (new_expr
) = use_global_new
;
2297 TREE_SIDE_EFFECTS (new_expr
) = 1;
2302 /* Diagnose uninitialized const members or reference members of type
2303 TYPE. USING_NEW is used to disambiguate the diagnostic between a
2304 new expression without a new-initializer and a declaration. Returns
2308 diagnose_uninitialized_cst_or_ref_member_1 (tree type
, tree origin
,
2309 bool using_new
, bool complain
)
2312 int error_count
= 0;
2314 if (type_has_user_provided_constructor (type
))
2317 for (field
= TYPE_FIELDS (type
); field
; field
= DECL_CHAIN (field
))
2321 if (TREE_CODE (field
) != FIELD_DECL
)
2324 field_type
= strip_array_types (TREE_TYPE (field
));
2326 if (type_has_user_provided_constructor (field_type
))
2329 if (TREE_CODE (field_type
) == REFERENCE_TYPE
)
2334 if (DECL_CONTEXT (field
) == origin
)
2337 error ("uninitialized reference member in %q#T "
2338 "using %<new%> without new-initializer", origin
);
2340 error ("uninitialized reference member in %q#T", origin
);
2345 error ("uninitialized reference member in base %q#T "
2346 "of %q#T using %<new%> without new-initializer",
2347 DECL_CONTEXT (field
), origin
);
2349 error ("uninitialized reference member in base %q#T "
2350 "of %q#T", DECL_CONTEXT (field
), origin
);
2352 inform (DECL_SOURCE_LOCATION (field
),
2353 "%q#D should be initialized", field
);
2357 if (CP_TYPE_CONST_P (field_type
))
2362 if (DECL_CONTEXT (field
) == origin
)
2365 error ("uninitialized const member in %q#T "
2366 "using %<new%> without new-initializer", origin
);
2368 error ("uninitialized const member in %q#T", origin
);
2373 error ("uninitialized const member in base %q#T "
2374 "of %q#T using %<new%> without new-initializer",
2375 DECL_CONTEXT (field
), origin
);
2377 error ("uninitialized const member in base %q#T "
2378 "of %q#T", DECL_CONTEXT (field
), origin
);
2380 inform (DECL_SOURCE_LOCATION (field
),
2381 "%q#D should be initialized", field
);
2385 if (CLASS_TYPE_P (field_type
))
2387 += diagnose_uninitialized_cst_or_ref_member_1 (field_type
, origin
,
2388 using_new
, complain
);
2394 diagnose_uninitialized_cst_or_ref_member (tree type
, bool using_new
, bool complain
)
2396 return diagnose_uninitialized_cst_or_ref_member_1 (type
, type
, using_new
, complain
);
2399 /* Call __cxa_bad_array_new_length to indicate that the size calculation
2400 overflowed. Pretend it returns sizetype so that it plays nicely in the
2404 throw_bad_array_new_length (void)
2408 tree name
= get_identifier ("__cxa_throw_bad_array_new_length");
2410 fn
= IDENTIFIER_GLOBAL_VALUE (name
);
2412 fn
= push_throw_library_fn
2413 (name
, build_function_type_list (sizetype
, NULL_TREE
));
2416 return build_cxx_call (fn
, 0, NULL
, tf_warning_or_error
);
2419 /* Attempt to find the initializer for field T in the initializer INIT,
2420 when non-null. Returns the initializer when successful and NULL
2423 find_field_init (tree t
, tree init
)
2428 unsigned HOST_WIDE_INT idx
;
2431 /* Iterate over all top-level initializer elements. */
2432 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (init
), idx
, field
, elt
)
2434 /* If the member T is found, return it. */
2438 /* Otherwise continue and/or recurse into nested initializers. */
2439 if (TREE_CODE (elt
) == CONSTRUCTOR
2440 && (init
= find_field_init (t
, elt
)))
2446 /* Attempt to verify that the argument, OPER, of a placement new expression
2447 refers to an object sufficiently large for an object of TYPE or an array
2448 of NELTS of such objects when NELTS is non-null, and issue a warning when
2449 it does not. SIZE specifies the size needed to construct the object or
2450 array and captures the result of NELTS * sizeof (TYPE). (SIZE could be
2451 greater when the array under construction requires a cookie to store
2452 NELTS. GCC's placement new expression stores the cookie when invoking
2453 a user-defined placement new operator function but not the default one.
2454 Placement new expressions with user-defined placement new operator are
2455 not diagnosed since we don't know how they use the buffer (this could
2456 be a future extension). */
2458 warn_placement_new_too_small (tree type
, tree nelts
, tree size
, tree oper
)
2460 location_t loc
= EXPR_LOC_OR_LOC (oper
, input_location
);
2462 /* The number of bytes to add to or subtract from the size of the provided
2463 buffer based on an offset into an array or an array element reference.
2464 Although intermediate results may be negative (as in a[3] - 2) the final
2465 result cannot be. */
2466 HOST_WIDE_INT adjust
= 0;
2467 /* True when the size of the entire destination object should be used
2468 to compute the possibly optimistic estimate of the available space. */
2469 bool use_obj_size
= false;
2470 /* True when the reference to the destination buffer is an ADDR_EXPR. */
2471 bool addr_expr
= false;
2475 /* Using a function argument or a (non-array) variable as an argument
2476 to placement new is not checked since it's unknown what it might
2478 if (TREE_CODE (oper
) == PARM_DECL
2480 || TREE_CODE (oper
) == COMPONENT_REF
)
2483 /* Evaluate any constant expressions. */
2484 size
= fold_non_dependent_expr (size
);
2486 /* Handle the common case of array + offset expression when the offset
2488 if (TREE_CODE (oper
) == POINTER_PLUS_EXPR
)
2490 /* If the offset is comple-time constant, use it to compute a more
2491 accurate estimate of the size of the buffer. Since the operand
2492 of POINTER_PLUS_EXPR is represented as an unsigned type, convert
2494 Otherwise, use the size of the entire array as an optimistic
2495 estimate (this may lead to false negatives). */
2496 tree adj
= TREE_OPERAND (oper
, 1);
2497 if (CONSTANT_CLASS_P (adj
))
2498 adjust
+= tree_to_shwi (convert (ssizetype
, adj
));
2500 use_obj_size
= true;
2502 oper
= TREE_OPERAND (oper
, 0);
2507 if (TREE_CODE (oper
) == TARGET_EXPR
)
2508 oper
= TREE_OPERAND (oper
, 1);
2509 else if (TREE_CODE (oper
) == ADDR_EXPR
)
2512 oper
= TREE_OPERAND (oper
, 0);
2517 if (TREE_CODE (oper
) == ARRAY_REF
2518 && (addr_expr
|| TREE_CODE (TREE_TYPE (oper
)) == ARRAY_TYPE
))
2520 /* Similar to the offset computed above, see if the array index
2521 is a compile-time constant. If so, and unless the offset was
2522 not a compile-time constant, use the index to determine the
2523 size of the buffer. Otherwise, use the entire array as
2524 an optimistic estimate of the size. */
2525 const_tree adj
= TREE_OPERAND (oper
, 1);
2526 if (!use_obj_size
&& CONSTANT_CLASS_P (adj
))
2527 adjust
+= tree_to_shwi (adj
);
2530 use_obj_size
= true;
2534 oper
= TREE_OPERAND (oper
, 0);
2537 /* Refers to the declared object that constains the subobject referenced
2538 by OPER. When the object is initialized, makes it possible to determine
2539 the actual size of a flexible array member used as the buffer passed
2540 as OPER to placement new. */
2541 tree var_decl
= NULL_TREE
;
2542 /* True when operand is a COMPONENT_REF, to distinguish flexible array
2543 members from arrays of unspecified size. */
2544 bool compref
= TREE_CODE (oper
) == COMPONENT_REF
;
2546 /* Descend into a struct or union to find the member whose address
2547 is being used as the argument. */
2548 if (TREE_CODE (oper
) == COMPONENT_REF
)
2551 while (TREE_CODE (op0
= TREE_OPERAND (op0
, 0)) == COMPONENT_REF
);
2554 oper
= TREE_OPERAND (oper
, 1);
2557 if ((addr_expr
|| !POINTER_TYPE_P (TREE_TYPE (oper
)))
2559 || TREE_CODE (oper
) == FIELD_DECL
2560 || TREE_CODE (oper
) == PARM_DECL
))
2562 /* A possibly optimistic estimate of the number of bytes available
2563 in the destination buffer. */
2564 unsigned HOST_WIDE_INT bytes_avail
= 0;
2565 /* True when the estimate above is in fact the exact size
2566 of the destination buffer rather than an estimate. */
2567 bool exact_size
= true;
2569 /* Treat members of unions and members of structs uniformly, even
2570 though the size of a member of a union may be viewed as extending
2571 to the end of the union itself (it is by __builtin_object_size). */
2572 if ((VAR_P (oper
) || use_obj_size
)
2573 && DECL_SIZE_UNIT (oper
)
2574 && tree_fits_uhwi_p (DECL_SIZE_UNIT (oper
)))
2576 /* Use the size of the entire array object when the expression
2577 refers to a variable or its size depends on an expression
2578 that's not a compile-time constant. */
2579 bytes_avail
= tree_to_uhwi (DECL_SIZE_UNIT (oper
));
2580 exact_size
= !use_obj_size
;
2582 else if (TYPE_SIZE_UNIT (TREE_TYPE (oper
))
2583 && tree_fits_uhwi_p (TYPE_SIZE_UNIT (TREE_TYPE (oper
))))
2585 /* Use the size of the type of the destination buffer object
2586 as the optimistic estimate of the available space in it. */
2587 bytes_avail
= tree_to_uhwi (TYPE_SIZE_UNIT (TREE_TYPE (oper
)));
2591 /* Constructing into a buffer provided by the flexible array
2592 member of a declared object (which is permitted as a G++
2593 extension). If the array member has been initialized,
2594 determine its size from the initializer. Otherwise,
2595 the array size is zero. */
2598 if (tree init
= find_field_init (oper
, DECL_INITIAL (var_decl
)))
2599 bytes_avail
= tree_to_uhwi (TYPE_SIZE_UNIT (TREE_TYPE (init
)));
2603 /* Bail if neither the size of the object nor its type is known. */
2607 tree_code oper_code
= TREE_CODE (TREE_TYPE (oper
));
2609 if (compref
&& oper_code
== ARRAY_TYPE
)
2611 /* Avoid diagnosing flexible array members (which are accepted
2612 as an extension and diagnosed with -Wpedantic) and zero-length
2613 arrays (also an extension).
2614 Overflowing construction in one-element arrays is diagnosed
2616 if (bytes_avail
== 0 && !var_decl
)
2619 tree nelts
= array_type_nelts_top (TREE_TYPE (oper
));
2620 tree nelts_cst
= maybe_constant_value (nelts
);
2621 if (TREE_CODE (nelts_cst
) == INTEGER_CST
2622 && integer_onep (nelts_cst
)
2624 && warn_placement_new
< 2)
2628 /* The size of the buffer can only be adjusted down but not up. */
2629 gcc_checking_assert (0 <= adjust
);
2631 /* Reduce the size of the buffer by the adjustment computed above
2632 from the offset and/or the index into the array. */
2633 if (bytes_avail
< static_cast<unsigned HOST_WIDE_INT
>(adjust
))
2636 bytes_avail
-= adjust
;
2638 /* The minimum amount of space needed for the allocation. This
2639 is an optimistic estimate that makes it possible to detect
2640 placement new invocation for some undersize buffers but not
2642 unsigned HOST_WIDE_INT bytes_need
;
2644 if (CONSTANT_CLASS_P (size
))
2645 bytes_need
= tree_to_uhwi (size
);
2646 else if (nelts
&& CONSTANT_CLASS_P (nelts
))
2647 bytes_need
= tree_to_uhwi (nelts
)
2648 * tree_to_uhwi (TYPE_SIZE_UNIT (type
));
2649 else if (tree_fits_uhwi_p (TYPE_SIZE_UNIT (type
)))
2650 bytes_need
= tree_to_uhwi (TYPE_SIZE_UNIT (type
));
2653 /* The type is a VLA. */
2657 if (bytes_avail
< bytes_need
)
2660 if (CONSTANT_CLASS_P (nelts
))
2661 warning_at (loc
, OPT_Wplacement_new_
,
2663 "placement new constructing an object of type "
2664 "%<%T [%wu]%> and size %qwu in a region of type %qT "
2666 : "placement new constructing an object of type "
2667 "%<%T [%wu]%> and size %qwu in a region of type %qT "
2668 "and size at most %qwu",
2669 type
, tree_to_uhwi (nelts
), bytes_need
,
2673 warning_at (loc
, OPT_Wplacement_new_
,
2675 "placement new constructing an array of objects "
2676 "of type %qT and size %qwu in a region of type %qT "
2678 : "placement new constructing an array of objects "
2679 "of type %qT and size %qwu in a region of type %qT "
2680 "and size at most %qwu",
2681 type
, bytes_need
, TREE_TYPE (oper
),
2684 warning_at (loc
, OPT_Wplacement_new_
,
2686 "placement new constructing an object of type %qT "
2687 "and size %qwu in a region of type %qT and size %qwi"
2688 : "placement new constructing an object of type %qT "
2689 "and size %qwu in a region of type %qT and size "
2691 type
, bytes_need
, TREE_TYPE (oper
),
2697 /* True if alignof(T) > __STDCPP_DEFAULT_NEW_ALIGNMENT__. */
2700 type_has_new_extended_alignment (tree t
)
2702 return (aligned_new_threshold
2703 && TYPE_ALIGN_UNIT (t
) > (unsigned)aligned_new_threshold
);
2706 /* Return the alignment we expect malloc to guarantee. This should just be
2707 MALLOC_ABI_ALIGNMENT, but that macro defaults to only BITS_PER_WORD for some
2708 reason, so don't let the threshold be smaller than max_align_t_align. */
2713 return MAX (max_align_t_align(), MALLOC_ABI_ALIGNMENT
);
2716 /* Determine whether an allocation function is a namespace-scope
2717 non-replaceable placement new function. See DR 1748.
2718 TODO: Enable in all standard modes. */
2720 std_placement_new_fn_p (tree alloc_fn
)
2722 if ((cxx_dialect
> cxx14
) && DECL_NAMESPACE_SCOPE_P (alloc_fn
))
2724 tree first_arg
= TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (alloc_fn
)));
2725 if ((TREE_VALUE (first_arg
) == ptr_type_node
)
2726 && TREE_CHAIN (first_arg
) == void_list_node
)
2732 /* Generate code for a new-expression, including calling the "operator
2733 new" function, initializing the object, and, if an exception occurs
2734 during construction, cleaning up. The arguments are as for
2735 build_raw_new_expr. This may change PLACEMENT and INIT.
2736 TYPE is the type of the object being constructed, possibly an array
2737 of NELTS elements when NELTS is non-null (in "new T[NELTS]", T may
2738 be an array of the form U[inner], with the whole expression being
2739 "new U[NELTS][inner]"). */
2742 build_new_1 (vec
<tree
, va_gc
> **placement
, tree type
, tree nelts
,
2743 vec
<tree
, va_gc
> **init
, bool globally_qualified_p
,
2744 tsubst_flags_t complain
)
2747 /* True iff this is a call to "operator new[]" instead of just
2749 bool array_p
= false;
2750 /* If ARRAY_P is true, the element type of the array. This is never
2751 an ARRAY_TYPE; for something like "new int[3][4]", the
2752 ELT_TYPE is "int". If ARRAY_P is false, this is the same type as
2755 /* The type of the new-expression. (This type is always a pointer
2758 tree non_const_pointer_type
;
2759 /* The most significant array bound in int[OUTER_NELTS][inner]. */
2760 tree outer_nelts
= NULL_TREE
;
2761 /* For arrays with a non-constant number of elements, a bounds checks
2762 on the NELTS parameter to avoid integer overflow at runtime. */
2763 tree outer_nelts_check
= NULL_TREE
;
2764 bool outer_nelts_from_type
= false;
2765 /* Number of the "inner" elements in "new T[OUTER_NELTS][inner]". */
2766 offset_int inner_nelts_count
= 1;
2767 tree alloc_call
, alloc_expr
;
2768 /* Size of the inner array elements (those with constant dimensions). */
2769 offset_int inner_size
;
2770 /* The address returned by the call to "operator new". This node is
2771 a VAR_DECL and is therefore reusable. */
2774 tree cookie_expr
, init_expr
;
2775 int nothrow
, check_new
;
2776 /* If non-NULL, the number of extra bytes to allocate at the
2777 beginning of the storage allocated for an array-new expression in
2778 order to store the number of elements. */
2779 tree cookie_size
= NULL_TREE
;
2780 tree placement_first
;
2781 tree placement_expr
= NULL_TREE
;
2782 /* True if the function we are calling is a placement allocation
2784 bool placement_allocation_fn_p
;
2785 /* True if the storage must be initialized, either by a constructor
2786 or due to an explicit new-initializer. */
2787 bool is_initialized
;
2788 /* The address of the thing allocated, not including any cookie. In
2789 particular, if an array cookie is in use, DATA_ADDR is the
2790 address of the first array element. This node is a VAR_DECL, and
2791 is therefore reusable. */
2793 tree init_preeval_expr
= NULL_TREE
;
2794 tree orig_type
= type
;
2798 outer_nelts
= nelts
;
2801 else if (TREE_CODE (type
) == ARRAY_TYPE
)
2803 /* Transforms new (T[N]) to new T[N]. The former is a GNU
2804 extension for variable N. (This also covers new T where T is
2807 nelts
= array_type_nelts_top (type
);
2808 outer_nelts
= nelts
;
2809 type
= TREE_TYPE (type
);
2810 outer_nelts_from_type
= true;
2813 /* Lots of logic below. depends on whether we have a constant number of
2814 elements, so go ahead and fold it now. */
2816 outer_nelts
= maybe_constant_value (outer_nelts
);
2818 /* If our base type is an array, then make sure we know how many elements
2820 for (elt_type
= type
;
2821 TREE_CODE (elt_type
) == ARRAY_TYPE
;
2822 elt_type
= TREE_TYPE (elt_type
))
2824 tree inner_nelts
= array_type_nelts_top (elt_type
);
2825 tree inner_nelts_cst
= maybe_constant_value (inner_nelts
);
2826 if (TREE_CODE (inner_nelts_cst
) == INTEGER_CST
)
2829 offset_int result
= wi::mul (wi::to_offset (inner_nelts_cst
),
2830 inner_nelts_count
, SIGNED
, &overflow
);
2833 if (complain
& tf_error
)
2834 error ("integer overflow in array size");
2835 nelts
= error_mark_node
;
2837 inner_nelts_count
= result
;
2841 if (complain
& tf_error
)
2843 error_at (EXPR_LOC_OR_LOC (inner_nelts
, input_location
),
2844 "array size in new-expression must be constant");
2845 cxx_constant_value(inner_nelts
);
2847 nelts
= error_mark_node
;
2849 if (nelts
!= error_mark_node
)
2850 nelts
= cp_build_binary_op (input_location
,
2856 if (variably_modified_type_p (elt_type
, NULL_TREE
) && (complain
& tf_error
))
2858 error ("variably modified type not allowed in new-expression");
2859 return error_mark_node
;
2862 if (nelts
== error_mark_node
)
2863 return error_mark_node
;
2865 /* Warn if we performed the (T[N]) to T[N] transformation and N is
2867 if (outer_nelts_from_type
2868 && !TREE_CONSTANT (outer_nelts
))
2870 if (complain
& tf_warning_or_error
)
2872 pedwarn (EXPR_LOC_OR_LOC (outer_nelts
, input_location
), OPT_Wvla
,
2873 typedef_variant_p (orig_type
)
2874 ? G_("non-constant array new length must be specified "
2875 "directly, not by typedef")
2876 : G_("non-constant array new length must be specified "
2877 "without parentheses around the type-id"));
2880 return error_mark_node
;
2883 if (VOID_TYPE_P (elt_type
))
2885 if (complain
& tf_error
)
2886 error ("invalid type %<void%> for new");
2887 return error_mark_node
;
2890 if (abstract_virtuals_error_sfinae (ACU_NEW
, elt_type
, complain
))
2891 return error_mark_node
;
2893 is_initialized
= (type_build_ctor_call (elt_type
) || *init
!= NULL
);
2895 if (*init
== NULL
&& cxx_dialect
< cxx11
)
2897 bool maybe_uninitialized_error
= false;
2898 /* A program that calls for default-initialization [...] of an
2899 entity of reference type is ill-formed. */
2900 if (CLASSTYPE_REF_FIELDS_NEED_INIT (elt_type
))
2901 maybe_uninitialized_error
= true;
2903 /* A new-expression that creates an object of type T initializes
2904 that object as follows:
2905 - If the new-initializer is omitted:
2906 -- If T is a (possibly cv-qualified) non-POD class type
2907 (or array thereof), the object is default-initialized (8.5).
2909 -- Otherwise, the object created has indeterminate
2910 value. If T is a const-qualified type, or a (possibly
2911 cv-qualified) POD class type (or array thereof)
2912 containing (directly or indirectly) a member of
2913 const-qualified type, the program is ill-formed; */
2915 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (elt_type
))
2916 maybe_uninitialized_error
= true;
2918 if (maybe_uninitialized_error
2919 && diagnose_uninitialized_cst_or_ref_member (elt_type
,
2921 complain
& tf_error
))
2922 return error_mark_node
;
2925 if (CP_TYPE_CONST_P (elt_type
) && *init
== NULL
2926 && default_init_uninitialized_part (elt_type
))
2928 if (complain
& tf_error
)
2929 error ("uninitialized const in %<new%> of %q#T", elt_type
);
2930 return error_mark_node
;
2933 size
= size_in_bytes (elt_type
);
2936 /* Maximum available size in bytes. Half of the address space
2937 minus the cookie size. */
2939 = wi::set_bit_in_zero
<offset_int
> (TYPE_PRECISION (sizetype
) - 1);
2940 /* Maximum number of outer elements which can be allocated. */
2941 offset_int max_outer_nelts
;
2942 tree max_outer_nelts_tree
;
2944 gcc_assert (TREE_CODE (size
) == INTEGER_CST
);
2945 cookie_size
= targetm
.cxx
.get_cookie_size (elt_type
);
2946 gcc_assert (TREE_CODE (cookie_size
) == INTEGER_CST
);
2947 gcc_checking_assert (wi::ltu_p (wi::to_offset (cookie_size
), max_size
));
2948 /* Unconditionally subtract the cookie size. This decreases the
2949 maximum object size and is safe even if we choose not to use
2950 a cookie after all. */
2951 max_size
-= wi::to_offset (cookie_size
);
2953 inner_size
= wi::mul (wi::to_offset (size
), inner_nelts_count
, SIGNED
,
2955 if (overflow
|| wi::gtu_p (inner_size
, max_size
))
2957 if (complain
& tf_error
)
2958 error ("size of array is too large");
2959 return error_mark_node
;
2962 max_outer_nelts
= wi::udiv_trunc (max_size
, inner_size
);
2963 max_outer_nelts_tree
= wide_int_to_tree (sizetype
, max_outer_nelts
);
2965 size
= size_binop (MULT_EXPR
, size
, fold_convert (sizetype
, nelts
));
2967 if (INTEGER_CST
== TREE_CODE (outer_nelts
))
2969 if (tree_int_cst_lt (max_outer_nelts_tree
, outer_nelts
))
2971 /* When the array size is constant, check it at compile time
2972 to make sure it doesn't exceed the implementation-defined
2973 maximum, as required by C++ 14 (in C++ 11 this requirement
2974 isn't explicitly stated but it's enforced anyway -- see
2975 grokdeclarator in cp/decl.c). */
2976 if (complain
& tf_error
)
2977 error ("size of array is too large");
2978 return error_mark_node
;
2983 /* When a runtime check is necessary because the array size
2984 isn't constant, keep only the top-most seven bits (starting
2985 with the most significant non-zero bit) of the maximum size
2986 to compare the array size against, to simplify encoding the
2987 constant maximum size in the instruction stream. */
2989 unsigned shift
= (max_outer_nelts
.get_precision ()) - 7
2990 - wi::clz (max_outer_nelts
);
2991 max_outer_nelts
= (max_outer_nelts
>> shift
) << shift
;
2993 outer_nelts_check
= fold_build2 (LE_EXPR
, boolean_type_node
,
2995 max_outer_nelts_tree
);
2999 tree align_arg
= NULL_TREE
;
3000 if (type_has_new_extended_alignment (elt_type
))
3001 align_arg
= build_int_cst (align_type_node
, TYPE_ALIGN_UNIT (elt_type
));
3003 alloc_fn
= NULL_TREE
;
3005 /* If PLACEMENT is a single simple pointer type not passed by
3006 reference, prepare to capture it in a temporary variable. Do
3007 this now, since PLACEMENT will change in the calls below. */
3008 placement_first
= NULL_TREE
;
3009 if (vec_safe_length (*placement
) == 1
3010 && (TYPE_PTR_P (TREE_TYPE ((**placement
)[0]))))
3011 placement_first
= (**placement
)[0];
3013 bool member_new_p
= false;
3015 /* Allocate the object. */
3019 fnname
= cp_operator_id (array_p
? VEC_NEW_EXPR
: NEW_EXPR
);
3021 member_new_p
= !globally_qualified_p
3022 && CLASS_TYPE_P (elt_type
)
3024 ? TYPE_HAS_ARRAY_NEW_OPERATOR (elt_type
)
3025 : TYPE_HAS_NEW_OPERATOR (elt_type
));
3029 /* Use a class-specific operator new. */
3030 /* If a cookie is required, add some extra space. */
3031 if (array_p
&& TYPE_VEC_NEW_USES_COOKIE (elt_type
))
3032 size
= size_binop (PLUS_EXPR
, size
, cookie_size
);
3035 cookie_size
= NULL_TREE
;
3036 /* No size arithmetic necessary, so the size check is
3038 if (outer_nelts_check
!= NULL
&& inner_size
== 1)
3039 outer_nelts_check
= NULL_TREE
;
3041 /* Perform the overflow check. */
3042 tree errval
= TYPE_MAX_VALUE (sizetype
);
3043 if (cxx_dialect
>= cxx11
&& flag_exceptions
)
3044 errval
= throw_bad_array_new_length ();
3045 if (outer_nelts_check
!= NULL_TREE
)
3046 size
= fold_build3 (COND_EXPR
, sizetype
, outer_nelts_check
,
3048 /* Create the argument list. */
3049 vec_safe_insert (*placement
, 0, size
);
3050 /* Do name-lookup to find the appropriate operator. */
3051 fns
= lookup_fnfields (elt_type
, fnname
, /*protect=*/2);
3052 if (fns
== NULL_TREE
)
3054 if (complain
& tf_error
)
3055 error ("no suitable %qD found in class %qT", fnname
, elt_type
);
3056 return error_mark_node
;
3058 if (TREE_CODE (fns
) == TREE_LIST
)
3060 if (complain
& tf_error
)
3062 error ("request for member %qD is ambiguous", fnname
);
3063 print_candidates (fns
);
3065 return error_mark_node
;
3067 tree dummy
= build_dummy_object (elt_type
);
3068 alloc_call
= NULL_TREE
;
3071 vec
<tree
, va_gc
> *align_args
3072 = vec_copy_and_insert (*placement
, align_arg
, 1);
3074 = build_new_method_call (dummy
, fns
, &align_args
,
3075 /*conversion_path=*/NULL_TREE
,
3076 LOOKUP_NORMAL
, &alloc_fn
, tf_none
);
3077 /* If no matching function is found and the allocated object type
3078 has new-extended alignment, the alignment argument is removed
3079 from the argument list, and overload resolution is performed
3081 if (alloc_call
== error_mark_node
)
3082 alloc_call
= NULL_TREE
;
3085 alloc_call
= build_new_method_call (dummy
, fns
, placement
,
3086 /*conversion_path=*/NULL_TREE
,
3088 &alloc_fn
, complain
);
3092 /* Use a global operator new. */
3093 /* See if a cookie might be required. */
3094 if (!(array_p
&& TYPE_VEC_NEW_USES_COOKIE (elt_type
)))
3096 cookie_size
= NULL_TREE
;
3097 /* No size arithmetic necessary, so the size check is
3099 if (outer_nelts_check
!= NULL
&& inner_size
== 1)
3100 outer_nelts_check
= NULL_TREE
;
3103 alloc_call
= build_operator_new_call (fnname
, placement
,
3104 &size
, &cookie_size
,
3105 align_arg
, outer_nelts_check
,
3106 &alloc_fn
, complain
);
3109 if (alloc_call
== error_mark_node
)
3110 return error_mark_node
;
3112 gcc_assert (alloc_fn
!= NULL_TREE
);
3114 /* Now, check to see if this function is actually a placement
3115 allocation function. This can happen even when PLACEMENT is NULL
3116 because we might have something like:
3118 struct S { void* operator new (size_t, int i = 0); };
3120 A call to `new S' will get this allocation function, even though
3121 there is no explicit placement argument. If there is more than
3122 one argument, or there are variable arguments, then this is a
3123 placement allocation function. */
3124 placement_allocation_fn_p
3125 = (type_num_arguments (TREE_TYPE (alloc_fn
)) > 1
3126 || varargs_function_p (alloc_fn
));
3128 if (warn_aligned_new
3129 && !placement_allocation_fn_p
3130 && TYPE_ALIGN (elt_type
) > malloc_alignment ()
3131 && (warn_aligned_new
> 1
3132 || CP_DECL_CONTEXT (alloc_fn
) == global_namespace
)
3133 && !aligned_allocation_fn_p (alloc_fn
))
3135 if (warning (OPT_Waligned_new_
, "%<new%> of type %qT with extended "
3136 "alignment %d", elt_type
, TYPE_ALIGN_UNIT (elt_type
)))
3138 inform (input_location
, "uses %qD, which does not have an alignment "
3139 "parameter", alloc_fn
);
3140 if (!aligned_new_threshold
)
3141 inform (input_location
, "use %<-faligned-new%> to enable C++17 "
3142 "over-aligned new support");
3146 /* If we found a simple case of PLACEMENT_EXPR above, then copy it
3147 into a temporary variable. */
3148 if (!processing_template_decl
3149 && TREE_CODE (alloc_call
) == CALL_EXPR
3150 && call_expr_nargs (alloc_call
) == 2
3151 && TREE_CODE (TREE_TYPE (CALL_EXPR_ARG (alloc_call
, 0))) == INTEGER_TYPE
3152 && TYPE_PTR_P (TREE_TYPE (CALL_EXPR_ARG (alloc_call
, 1))))
3154 tree placement
= CALL_EXPR_ARG (alloc_call
, 1);
3156 if (placement_first
!= NULL_TREE
3157 && (INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (TREE_TYPE (placement
)))
3158 || VOID_TYPE_P (TREE_TYPE (TREE_TYPE (placement
)))))
3160 placement_expr
= get_target_expr (placement_first
);
3161 CALL_EXPR_ARG (alloc_call
, 1)
3162 = fold_convert (TREE_TYPE (placement
), placement_expr
);
3166 && VOID_TYPE_P (TREE_TYPE (TREE_TYPE (CALL_EXPR_ARG (alloc_call
, 1)))))
3168 /* Attempt to make the warning point at the operator new argument. */
3169 if (placement_first
)
3170 placement
= placement_first
;
3172 warn_placement_new_too_small (orig_type
, nelts
, size
, placement
);
3176 /* In the simple case, we can stop now. */
3177 pointer_type
= build_pointer_type (type
);
3178 if (!cookie_size
&& !is_initialized
)
3179 return build_nop (pointer_type
, alloc_call
);
3181 /* Store the result of the allocation call in a variable so that we can
3182 use it more than once. */
3183 alloc_expr
= get_target_expr (alloc_call
);
3184 alloc_node
= TARGET_EXPR_SLOT (alloc_expr
);
3186 /* Strip any COMPOUND_EXPRs from ALLOC_CALL. */
3187 while (TREE_CODE (alloc_call
) == COMPOUND_EXPR
)
3188 alloc_call
= TREE_OPERAND (alloc_call
, 1);
3190 /* Preevaluate the placement args so that we don't reevaluate them for a
3191 placement delete. */
3192 if (placement_allocation_fn_p
)
3195 stabilize_call (alloc_call
, &inits
);
3197 alloc_expr
= build2 (COMPOUND_EXPR
, TREE_TYPE (alloc_expr
), inits
,
3201 /* unless an allocation function is declared with an empty excep-
3202 tion-specification (_except.spec_), throw(), it indicates failure to
3203 allocate storage by throwing a bad_alloc exception (clause _except_,
3204 _lib.bad.alloc_); it returns a non-null pointer otherwise If the allo-
3205 cation function is declared with an empty exception-specification,
3206 throw(), it returns null to indicate failure to allocate storage and a
3207 non-null pointer otherwise.
3209 So check for a null exception spec on the op new we just called. */
3211 nothrow
= TYPE_NOTHROW_P (TREE_TYPE (alloc_fn
));
3213 = flag_check_new
|| (nothrow
&& !std_placement_new_fn_p (alloc_fn
));
3221 /* Adjust so we're pointing to the start of the object. */
3222 data_addr
= fold_build_pointer_plus (alloc_node
, cookie_size
);
3224 /* Store the number of bytes allocated so that we can know how
3225 many elements to destroy later. We use the last sizeof
3226 (size_t) bytes to store the number of elements. */
3227 cookie_ptr
= size_binop (MINUS_EXPR
, cookie_size
, size_in_bytes (sizetype
));
3228 cookie_ptr
= fold_build_pointer_plus_loc (input_location
,
3229 alloc_node
, cookie_ptr
);
3230 size_ptr_type
= build_pointer_type (sizetype
);
3231 cookie_ptr
= fold_convert (size_ptr_type
, cookie_ptr
);
3232 cookie
= cp_build_indirect_ref (cookie_ptr
, RO_NULL
, complain
);
3234 cookie_expr
= build2 (MODIFY_EXPR
, sizetype
, cookie
, nelts
);
3236 if (targetm
.cxx
.cookie_has_size ())
3238 /* Also store the element size. */
3239 cookie_ptr
= fold_build_pointer_plus (cookie_ptr
,
3240 fold_build1_loc (input_location
,
3241 NEGATE_EXPR
, sizetype
,
3242 size_in_bytes (sizetype
)));
3244 cookie
= cp_build_indirect_ref (cookie_ptr
, RO_NULL
, complain
);
3245 cookie
= build2 (MODIFY_EXPR
, sizetype
, cookie
,
3246 size_in_bytes (elt_type
));
3247 cookie_expr
= build2 (COMPOUND_EXPR
, TREE_TYPE (cookie_expr
),
3248 cookie
, cookie_expr
);
3253 cookie_expr
= NULL_TREE
;
3254 data_addr
= alloc_node
;
3257 /* Now use a pointer to the type we've actually allocated. */
3259 /* But we want to operate on a non-const version to start with,
3260 since we'll be modifying the elements. */
3261 non_const_pointer_type
= build_pointer_type
3262 (cp_build_qualified_type (type
, cp_type_quals (type
) & ~TYPE_QUAL_CONST
));
3264 data_addr
= fold_convert (non_const_pointer_type
, data_addr
);
3265 /* Any further uses of alloc_node will want this type, too. */
3266 alloc_node
= fold_convert (non_const_pointer_type
, alloc_node
);
3268 /* Now initialize the allocated object. Note that we preevaluate the
3269 initialization expression, apart from the actual constructor call or
3270 assignment--we do this because we want to delay the allocation as long
3271 as possible in order to minimize the size of the exception region for
3272 placement delete. */
3276 bool explicit_value_init_p
= false;
3278 if (*init
!= NULL
&& (*init
)->is_empty ())
3281 explicit_value_init_p
= true;
3284 if (processing_template_decl
&& explicit_value_init_p
)
3286 /* build_value_init doesn't work in templates, and we don't need
3287 the initializer anyway since we're going to throw it away and
3288 rebuild it at instantiation time, so just build up a single
3289 constructor call to get any appropriate diagnostics. */
3290 init_expr
= cp_build_indirect_ref (data_addr
, RO_NULL
, complain
);
3291 if (type_build_ctor_call (elt_type
))
3292 init_expr
= build_special_member_call (init_expr
,
3293 complete_ctor_identifier
,
3297 stable
= stabilize_init (init_expr
, &init_preeval_expr
);
3301 tree vecinit
= NULL_TREE
;
3302 if (vec_safe_length (*init
) == 1
3303 && DIRECT_LIST_INIT_P ((**init
)[0]))
3305 vecinit
= (**init
)[0];
3306 if (CONSTRUCTOR_NELTS (vecinit
) == 0)
3307 /* List-value-initialization, leave it alone. */;
3310 tree arraytype
, domain
;
3311 if (TREE_CONSTANT (nelts
))
3312 domain
= compute_array_index_type (NULL_TREE
, nelts
,
3315 /* We'll check the length at runtime. */
3317 arraytype
= build_cplus_array_type (type
, domain
);
3318 vecinit
= digest_init (arraytype
, vecinit
, complain
);
3323 if (complain
& tf_error
)
3324 permerror (input_location
,
3325 "parenthesized initializer in array new");
3327 return error_mark_node
;
3328 vecinit
= build_tree_list_vec (*init
);
3331 = build_vec_init (data_addr
,
3332 cp_build_binary_op (input_location
,
3333 MINUS_EXPR
, outer_nelts
,
3337 explicit_value_init_p
,
3341 /* An array initialization is stable because the initialization
3342 of each element is a full-expression, so the temporaries don't
3348 init_expr
= cp_build_indirect_ref (data_addr
, RO_NULL
, complain
);
3350 if (type_build_ctor_call (type
) && !explicit_value_init_p
)
3352 init_expr
= build_special_member_call (init_expr
,
3353 complete_ctor_identifier
,
3358 else if (explicit_value_init_p
)
3360 /* Something like `new int()'. NO_CLEANUP is needed so
3361 we don't try and build a (possibly ill-formed)
3363 tree val
= build_value_init (type
, complain
| tf_no_cleanup
);
3364 if (val
== error_mark_node
)
3365 return error_mark_node
;
3366 init_expr
= build2 (INIT_EXPR
, type
, init_expr
, val
);
3372 /* We are processing something like `new int (10)', which
3373 means allocate an int, and initialize it with 10. */
3375 ie
= build_x_compound_expr_from_vec (*init
, "new initializer",
3377 init_expr
= cp_build_modify_expr (input_location
, init_expr
,
3378 INIT_EXPR
, ie
, complain
);
3380 /* If the initializer uses C++14 aggregate NSDMI that refer to the
3381 object being initialized, replace them now and don't try to
3383 bool had_placeholder
= false;
3384 if (!processing_template_decl
3385 && TREE_CODE (init_expr
) == INIT_EXPR
)
3386 TREE_OPERAND (init_expr
, 1)
3387 = replace_placeholders (TREE_OPERAND (init_expr
, 1),
3388 TREE_OPERAND (init_expr
, 0),
3390 stable
= (!had_placeholder
3391 && stabilize_init (init_expr
, &init_preeval_expr
));
3394 if (init_expr
== error_mark_node
)
3395 return error_mark_node
;
3397 /* If any part of the object initialization terminates by throwing an
3398 exception and a suitable deallocation function can be found, the
3399 deallocation function is called to free the memory in which the
3400 object was being constructed, after which the exception continues
3401 to propagate in the context of the new-expression. If no
3402 unambiguous matching deallocation function can be found,
3403 propagating the exception does not cause the object's memory to be
3405 if (flag_exceptions
)
3407 enum tree_code dcode
= array_p
? VEC_DELETE_EXPR
: DELETE_EXPR
;
3410 /* The Standard is unclear here, but the right thing to do
3411 is to use the same method for finding deallocation
3412 functions that we use for finding allocation functions. */
3413 cleanup
= (build_op_delete_call
3417 globally_qualified_p
,
3418 placement_allocation_fn_p
? alloc_call
: NULL_TREE
,
3425 /* This is much simpler if we were able to preevaluate all of
3426 the arguments to the constructor call. */
3428 /* CLEANUP is compiler-generated, so no diagnostics. */
3429 TREE_NO_WARNING (cleanup
) = true;
3430 init_expr
= build2 (TRY_CATCH_EXPR
, void_type_node
,
3431 init_expr
, cleanup
);
3432 /* Likewise, this try-catch is compiler-generated. */
3433 TREE_NO_WARNING (init_expr
) = true;
3436 /* Ack! First we allocate the memory. Then we set our sentry
3437 variable to true, and expand a cleanup that deletes the
3438 memory if sentry is true. Then we run the constructor, and
3439 finally clear the sentry.
3441 We need to do this because we allocate the space first, so
3442 if there are any temporaries with cleanups in the
3443 constructor args and we weren't able to preevaluate them, we
3444 need this EH region to extend until end of full-expression
3445 to preserve nesting. */
3447 tree end
, sentry
, begin
;
3449 begin
= get_target_expr (boolean_true_node
);
3450 CLEANUP_EH_ONLY (begin
) = 1;
3452 sentry
= TARGET_EXPR_SLOT (begin
);
3454 /* CLEANUP is compiler-generated, so no diagnostics. */
3455 TREE_NO_WARNING (cleanup
) = true;
3457 TARGET_EXPR_CLEANUP (begin
)
3458 = build3 (COND_EXPR
, void_type_node
, sentry
,
3459 cleanup
, void_node
);
3461 end
= build2 (MODIFY_EXPR
, TREE_TYPE (sentry
),
3462 sentry
, boolean_false_node
);
3465 = build2 (COMPOUND_EXPR
, void_type_node
, begin
,
3466 build2 (COMPOUND_EXPR
, void_type_node
, init_expr
,
3468 /* Likewise, this is compiler-generated. */
3469 TREE_NO_WARNING (init_expr
) = true;
3474 init_expr
= NULL_TREE
;
3476 /* Now build up the return value in reverse order. */
3481 rval
= build2 (COMPOUND_EXPR
, TREE_TYPE (rval
), init_expr
, rval
);
3483 rval
= build2 (COMPOUND_EXPR
, TREE_TYPE (rval
), cookie_expr
, rval
);
3485 if (rval
== data_addr
)
3486 /* If we don't have an initializer or a cookie, strip the TARGET_EXPR
3487 and return the call (which doesn't need to be adjusted). */
3488 rval
= TARGET_EXPR_INITIAL (alloc_expr
);
3493 tree ifexp
= cp_build_binary_op (input_location
,
3494 NE_EXPR
, alloc_node
,
3497 rval
= build_conditional_expr (input_location
, ifexp
, rval
,
3498 alloc_node
, complain
);
3501 /* Perform the allocation before anything else, so that ALLOC_NODE
3502 has been initialized before we start using it. */
3503 rval
= build2 (COMPOUND_EXPR
, TREE_TYPE (rval
), alloc_expr
, rval
);
3506 if (init_preeval_expr
)
3507 rval
= build2 (COMPOUND_EXPR
, TREE_TYPE (rval
), init_preeval_expr
, rval
);
3509 /* A new-expression is never an lvalue. */
3510 gcc_assert (!obvalue_p (rval
));
3512 return convert (pointer_type
, rval
);
3515 /* Generate a representation for a C++ "new" expression. *PLACEMENT
3516 is a vector of placement-new arguments (or NULL if none). If NELTS
3517 is NULL, TYPE is the type of the storage to be allocated. If NELTS
3518 is not NULL, then this is an array-new allocation; TYPE is the type
3519 of the elements in the array and NELTS is the number of elements in
3520 the array. *INIT, if non-NULL, is the initializer for the new
3521 object, or an empty vector to indicate an initializer of "()". If
3522 USE_GLOBAL_NEW is true, then the user explicitly wrote "::new"
3523 rather than just "new". This may change PLACEMENT and INIT. */
3526 build_new (vec
<tree
, va_gc
> **placement
, tree type
, tree nelts
,
3527 vec
<tree
, va_gc
> **init
, int use_global_new
, tsubst_flags_t complain
)
3530 vec
<tree
, va_gc
> *orig_placement
= NULL
;
3531 tree orig_nelts
= NULL_TREE
;
3532 vec
<tree
, va_gc
> *orig_init
= NULL
;
3534 if (type
== error_mark_node
)
3535 return error_mark_node
;
3537 if (nelts
== NULL_TREE
3538 /* Don't do auto deduction where it might affect mangling. */
3539 && (!processing_template_decl
|| at_function_scope_p ()))
3541 tree auto_node
= type_uses_auto (type
);
3544 tree d_init
= NULL_TREE
;
3545 if (vec_safe_length (*init
) == 1)
3547 d_init
= (**init
)[0];
3548 d_init
= resolve_nondeduced_context (d_init
, complain
);
3550 type
= do_auto_deduction (type
, d_init
, auto_node
);
3554 if (processing_template_decl
)
3556 if (dependent_type_p (type
)
3557 || any_type_dependent_arguments_p (*placement
)
3558 || (nelts
&& type_dependent_expression_p (nelts
))
3560 || any_type_dependent_arguments_p (*init
))
3561 return build_raw_new_expr (*placement
, type
, nelts
, *init
,
3564 orig_placement
= make_tree_vector_copy (*placement
);
3568 orig_init
= make_tree_vector_copy (*init
);
3569 /* Also copy any CONSTRUCTORs in *init, since reshape_init and
3570 digest_init clobber them in place. */
3571 for (unsigned i
= 0; i
< orig_init
->length(); ++i
)
3573 tree e
= (**init
)[i
];
3574 if (TREE_CODE (e
) == CONSTRUCTOR
)
3575 (**init
)[i
] = copy_node (e
);
3579 make_args_non_dependent (*placement
);
3581 nelts
= build_non_dependent_expr (nelts
);
3582 make_args_non_dependent (*init
);
3587 if (!build_expr_type_conversion (WANT_INT
| WANT_ENUM
, nelts
, false))
3589 if (complain
& tf_error
)
3590 permerror (input_location
, "size in array new must have integral type");
3592 return error_mark_node
;
3595 /* Try to determine the constant value only for the purposes
3596 of the diagnostic below but continue to use the original
3597 value and handle const folding later. */
3598 const_tree cst_nelts
= maybe_constant_value (nelts
);
3600 /* The expression in a noptr-new-declarator is erroneous if it's of
3601 non-class type and its value before converting to std::size_t is
3602 less than zero. ... If the expression is a constant expression,
3603 the program is ill-fomed. */
3604 if (INTEGER_CST
== TREE_CODE (cst_nelts
)
3605 && tree_int_cst_sgn (cst_nelts
) == -1)
3607 if (complain
& tf_error
)
3608 error ("size of array is negative");
3609 return error_mark_node
;
3612 nelts
= mark_rvalue_use (nelts
);
3613 nelts
= cp_save_expr (cp_convert (sizetype
, nelts
, complain
));
3616 /* ``A reference cannot be created by the new operator. A reference
3617 is not an object (8.2.2, 8.4.3), so a pointer to it could not be
3618 returned by new.'' ARM 5.3.3 */
3619 if (TREE_CODE (type
) == REFERENCE_TYPE
)
3621 if (complain
& tf_error
)
3622 error ("new cannot be applied to a reference type");
3624 return error_mark_node
;
3625 type
= TREE_TYPE (type
);
3628 if (TREE_CODE (type
) == FUNCTION_TYPE
)
3630 if (complain
& tf_error
)
3631 error ("new cannot be applied to a function type");
3632 return error_mark_node
;
3635 /* The type allocated must be complete. If the new-type-id was
3636 "T[N]" then we are just checking that "T" is complete here, but
3637 that is equivalent, since the value of "N" doesn't matter. */
3638 if (!complete_type_or_maybe_complain (type
, NULL_TREE
, complain
))
3639 return error_mark_node
;
3641 rval
= build_new_1 (placement
, type
, nelts
, init
, use_global_new
, complain
);
3642 if (rval
== error_mark_node
)
3643 return error_mark_node
;
3645 if (processing_template_decl
)
3647 tree ret
= build_raw_new_expr (orig_placement
, type
, orig_nelts
,
3648 orig_init
, use_global_new
);
3649 release_tree_vector (orig_placement
);
3650 release_tree_vector (orig_init
);
3654 /* Wrap it in a NOP_EXPR so warn_if_unused_value doesn't complain. */
3655 rval
= build1 (NOP_EXPR
, TREE_TYPE (rval
), rval
);
3656 TREE_NO_WARNING (rval
) = 1;
3662 build_vec_delete_1 (tree base
, tree maxindex
, tree type
,
3663 special_function_kind auto_delete_vec
,
3664 int use_global_delete
, tsubst_flags_t complain
)
3667 tree ptype
= build_pointer_type (type
= complete_type (type
));
3670 /* Temporary variables used by the loop. */
3671 tree tbase
, tbase_init
;
3673 /* This is the body of the loop that implements the deletion of a
3674 single element, and moves temp variables to next elements. */
3677 /* This is the LOOP_EXPR that governs the deletion of the elements. */
3680 /* This is the thing that governs what to do after the loop has run. */
3681 tree deallocate_expr
= 0;
3683 /* This is the BIND_EXPR which holds the outermost iterator of the
3684 loop. It is convenient to set this variable up and test it before
3685 executing any other code in the loop.
3686 This is also the containing expression returned by this function. */
3687 tree controller
= NULL_TREE
;
3690 /* We should only have 1-D arrays here. */
3691 gcc_assert (TREE_CODE (type
) != ARRAY_TYPE
);
3693 if (base
== error_mark_node
|| maxindex
== error_mark_node
)
3694 return error_mark_node
;
3696 if (!COMPLETE_TYPE_P (type
))
3698 if ((complain
& tf_warning
)
3699 && warning (OPT_Wdelete_incomplete
,
3700 "possible problem detected in invocation of "
3701 "delete [] operator:"))
3703 cxx_incomplete_type_diagnostic (base
, type
, DK_WARNING
);
3704 inform (input_location
, "neither the destructor nor the "
3705 "class-specific operator delete [] will be called, "
3706 "even if they are declared when the class is defined");
3708 /* This size won't actually be used. */
3709 size_exp
= size_one_node
;
3713 size_exp
= size_in_bytes (type
);
3715 if (! MAYBE_CLASS_TYPE_P (type
))
3717 else if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type
))
3719 /* Make sure the destructor is callable. */
3720 if (type_build_dtor_call (type
))
3722 tmp
= build_delete (ptype
, base
, sfk_complete_destructor
,
3723 LOOKUP_NORMAL
|LOOKUP_DESTRUCTOR
, 1,
3725 if (tmp
== error_mark_node
)
3726 return error_mark_node
;
3731 /* The below is short by the cookie size. */
3732 virtual_size
= size_binop (MULT_EXPR
, size_exp
,
3733 fold_convert (sizetype
, maxindex
));
3735 tbase
= create_temporary_var (ptype
);
3737 = cp_build_modify_expr (input_location
, tbase
, NOP_EXPR
,
3738 fold_build_pointer_plus_loc (input_location
,
3739 fold_convert (ptype
,
3743 if (tbase_init
== error_mark_node
)
3744 return error_mark_node
;
3745 controller
= build3 (BIND_EXPR
, void_type_node
, tbase
,
3746 NULL_TREE
, NULL_TREE
);
3747 TREE_SIDE_EFFECTS (controller
) = 1;
3749 body
= build1 (EXIT_EXPR
, void_type_node
,
3750 build2 (EQ_EXPR
, boolean_type_node
, tbase
,
3751 fold_convert (ptype
, base
)));
3752 tmp
= fold_build1_loc (input_location
, NEGATE_EXPR
, sizetype
, size_exp
);
3753 tmp
= fold_build_pointer_plus (tbase
, tmp
);
3754 tmp
= cp_build_modify_expr (input_location
, tbase
, NOP_EXPR
, tmp
, complain
);
3755 if (tmp
== error_mark_node
)
3756 return error_mark_node
;
3757 body
= build_compound_expr (input_location
, body
, tmp
);
3758 tmp
= build_delete (ptype
, tbase
, sfk_complete_destructor
,
3759 LOOKUP_NORMAL
|LOOKUP_DESTRUCTOR
, 1,
3761 if (tmp
== error_mark_node
)
3762 return error_mark_node
;
3763 body
= build_compound_expr (input_location
, body
, tmp
);
3765 loop
= build1 (LOOP_EXPR
, void_type_node
, body
);
3766 loop
= build_compound_expr (input_location
, tbase_init
, loop
);
3769 /* Delete the storage if appropriate. */
3770 if (auto_delete_vec
== sfk_deleting_destructor
)
3774 /* The below is short by the cookie size. */
3775 virtual_size
= size_binop (MULT_EXPR
, size_exp
,
3776 fold_convert (sizetype
, maxindex
));
3778 if (! TYPE_VEC_NEW_USES_COOKIE (type
))
3785 cookie_size
= targetm
.cxx
.get_cookie_size (type
);
3786 base_tbd
= cp_build_binary_op (input_location
,
3788 cp_convert (string_type_node
,
3792 if (base_tbd
== error_mark_node
)
3793 return error_mark_node
;
3794 base_tbd
= cp_convert (ptype
, base_tbd
, complain
);
3795 /* True size with header. */
3796 virtual_size
= size_binop (PLUS_EXPR
, virtual_size
, cookie_size
);
3799 deallocate_expr
= build_op_delete_call (VEC_DELETE_EXPR
,
3800 base_tbd
, virtual_size
,
3801 use_global_delete
& 1,
3802 /*placement=*/NULL_TREE
,
3803 /*alloc_fn=*/NULL_TREE
,
3808 if (!deallocate_expr
)
3811 body
= deallocate_expr
;
3813 /* The delete operator mist be called, even if a destructor
3815 body
= build2 (TRY_FINALLY_EXPR
, void_type_node
, body
, deallocate_expr
);
3818 body
= integer_zero_node
;
3820 /* Outermost wrapper: If pointer is null, punt. */
3821 tree cond
= build2_loc (input_location
, NE_EXPR
, boolean_type_node
, base
,
3822 fold_convert (TREE_TYPE (base
), nullptr_node
));
3823 /* This is a compiler generated comparison, don't emit
3824 e.g. -Wnonnull-compare warning for it. */
3825 TREE_NO_WARNING (cond
) = 1;
3826 body
= build3_loc (input_location
, COND_EXPR
, void_type_node
,
3827 cond
, body
, integer_zero_node
);
3828 COND_EXPR_IS_VEC_DELETE (body
) = true;
3829 body
= build1 (NOP_EXPR
, void_type_node
, body
);
3833 TREE_OPERAND (controller
, 1) = body
;
3837 if (TREE_CODE (base
) == SAVE_EXPR
)
3838 /* Pre-evaluate the SAVE_EXPR outside of the BIND_EXPR. */
3839 body
= build2 (COMPOUND_EXPR
, void_type_node
, base
, body
);
3841 return convert_to_void (body
, ICV_CAST
, complain
);
3844 /* Create an unnamed variable of the indicated TYPE. */
3847 create_temporary_var (tree type
)
3851 decl
= build_decl (input_location
,
3852 VAR_DECL
, NULL_TREE
, type
);
3853 TREE_USED (decl
) = 1;
3854 DECL_ARTIFICIAL (decl
) = 1;
3855 DECL_IGNORED_P (decl
) = 1;
3856 DECL_CONTEXT (decl
) = current_function_decl
;
3861 /* Create a new temporary variable of the indicated TYPE, initialized
3864 It is not entered into current_binding_level, because that breaks
3865 things when it comes time to do final cleanups (which take place
3866 "outside" the binding contour of the function). */
3869 get_temp_regvar (tree type
, tree init
)
3873 decl
= create_temporary_var (type
);
3874 add_decl_expr (decl
);
3876 finish_expr_stmt (cp_build_modify_expr (input_location
, decl
, INIT_EXPR
,
3877 init
, tf_warning_or_error
));
3882 /* Subroutine of build_vec_init. Returns true if assigning to an array of
3883 INNER_ELT_TYPE from INIT is trivial. */
3886 vec_copy_assign_is_trivial (tree inner_elt_type
, tree init
)
3888 tree fromtype
= inner_elt_type
;
3889 if (lvalue_p (init
))
3890 fromtype
= cp_build_reference_type (fromtype
, /*rval*/false);
3891 return is_trivially_xible (MODIFY_EXPR
, inner_elt_type
, fromtype
);
3894 /* Subroutine of build_vec_init: Check that the array has at least N
3895 elements. Other parameters are local variables in build_vec_init. */
3898 finish_length_check (tree atype
, tree iterator
, tree obase
, unsigned n
)
3900 tree nelts
= build_int_cst (ptrdiff_type_node
, n
- 1);
3901 if (TREE_CODE (atype
) != ARRAY_TYPE
)
3903 if (flag_exceptions
)
3905 tree c
= fold_build2 (LT_EXPR
, boolean_type_node
, iterator
,
3907 c
= build3 (COND_EXPR
, void_type_node
, c
,
3908 throw_bad_array_new_length (), void_node
);
3909 finish_expr_stmt (c
);
3911 /* Don't check an array new when -fno-exceptions. */
3913 else if (sanitize_flags_p (SANITIZE_BOUNDS
))
3915 /* Make sure the last element of the initializer is in bounds. */
3917 (ubsan_instrument_bounds
3918 (input_location
, obase
, &nelts
, /*ignore_off_by_one*/false));
3922 /* `build_vec_init' returns tree structure that performs
3923 initialization of a vector of aggregate types.
3925 BASE is a reference to the vector, of ARRAY_TYPE, or a pointer
3926 to the first element, of POINTER_TYPE.
3927 MAXINDEX is the maximum index of the array (one less than the
3928 number of elements). It is only used if BASE is a pointer or
3929 TYPE_DOMAIN (TREE_TYPE (BASE)) == NULL_TREE.
3931 INIT is the (possibly NULL) initializer.
3933 If EXPLICIT_VALUE_INIT_P is true, then INIT must be NULL. All
3934 elements in the array are value-initialized.
3936 FROM_ARRAY is 0 if we should init everything with INIT
3937 (i.e., every element initialized from INIT).
3938 FROM_ARRAY is 1 if we should index into INIT in parallel
3939 with initialization of DECL.
3940 FROM_ARRAY is 2 if we should index into INIT in parallel,
3941 but use assignment instead of initialization. */
3944 build_vec_init (tree base
, tree maxindex
, tree init
,
3945 bool explicit_value_init_p
,
3946 int from_array
, tsubst_flags_t complain
)
3949 tree base2
= NULL_TREE
;
3950 tree itype
= NULL_TREE
;
3952 /* The type of BASE. */
3953 tree atype
= TREE_TYPE (base
);
3954 /* The type of an element in the array. */
3955 tree type
= TREE_TYPE (atype
);
3956 /* The element type reached after removing all outer array
3958 tree inner_elt_type
;
3959 /* The type of a pointer to an element in the array. */
3964 tree try_block
= NULL_TREE
;
3965 int num_initialized_elts
= 0;
3968 bool xvalue
= false;
3969 bool errors
= false;
3970 location_t loc
= (init
? EXPR_LOC_OR_LOC (init
, input_location
)
3971 : location_of (base
));
3973 if (TREE_CODE (atype
) == ARRAY_TYPE
&& TYPE_DOMAIN (atype
))
3974 maxindex
= array_type_nelts (atype
);
3976 if (maxindex
== NULL_TREE
|| maxindex
== error_mark_node
)
3977 return error_mark_node
;
3979 maxindex
= maybe_constant_value (maxindex
);
3980 if (explicit_value_init_p
)
3983 inner_elt_type
= strip_array_types (type
);
3985 /* Look through the TARGET_EXPR around a compound literal. */
3986 if (init
&& TREE_CODE (init
) == TARGET_EXPR
3987 && TREE_CODE (TARGET_EXPR_INITIAL (init
)) == CONSTRUCTOR
3989 init
= TARGET_EXPR_INITIAL (init
);
3991 bool direct_init
= false;
3992 if (from_array
&& init
&& BRACE_ENCLOSED_INITIALIZER_P (init
)
3993 && CONSTRUCTOR_NELTS (init
) == 1)
3995 tree elt
= CONSTRUCTOR_ELT (init
, 0)->value
;
3996 if (TREE_CODE (TREE_TYPE (elt
)) == ARRAY_TYPE
)
3998 direct_init
= DIRECT_LIST_INIT_P (init
);
4003 /* If we have a braced-init-list or string constant, make sure that the array
4004 is big enough for all the initializers. */
4005 bool length_check
= (init
4006 && (TREE_CODE (init
) == STRING_CST
4007 || (TREE_CODE (init
) == CONSTRUCTOR
4008 && CONSTRUCTOR_NELTS (init
) > 0))
4009 && !TREE_CONSTANT (maxindex
));
4012 && TREE_CODE (atype
) == ARRAY_TYPE
4013 && TREE_CONSTANT (maxindex
)
4015 ? vec_copy_assign_is_trivial (inner_elt_type
, init
)
4016 : !TYPE_NEEDS_CONSTRUCTING (type
))
4017 && ((TREE_CODE (init
) == CONSTRUCTOR
4018 && (BRACE_ENCLOSED_INITIALIZER_P (init
)
4019 || (same_type_ignoring_top_level_qualifiers_p
4020 (atype
, TREE_TYPE (init
))))
4021 /* Don't do this if the CONSTRUCTOR might contain something
4022 that might throw and require us to clean up. */
4023 && (vec_safe_is_empty (CONSTRUCTOR_ELTS (init
))
4024 || ! TYPE_HAS_NONTRIVIAL_DESTRUCTOR (inner_elt_type
)))
4027 /* Do non-default initialization of trivial arrays resulting from
4028 brace-enclosed initializers. In this case, digest_init and
4029 store_constructor will handle the semantics for us. */
4031 if (BRACE_ENCLOSED_INITIALIZER_P (init
))
4032 init
= digest_init (atype
, init
, complain
);
4033 stmt_expr
= build2 (INIT_EXPR
, atype
, base
, init
);
4037 maxindex
= cp_convert (ptrdiff_type_node
, maxindex
, complain
);
4038 maxindex
= fold_simple (maxindex
);
4040 if (TREE_CODE (atype
) == ARRAY_TYPE
)
4042 ptype
= build_pointer_type (type
);
4043 base
= decay_conversion (base
, complain
);
4044 if (base
== error_mark_node
)
4045 return error_mark_node
;
4046 base
= cp_convert (ptype
, base
, complain
);
4051 /* The code we are generating looks like:
4055 ptrdiff_t iterator = maxindex;
4057 for (; iterator != -1; --iterator) {
4058 ... initialize *t1 ...
4062 ... destroy elements that were constructed ...
4067 We can omit the try and catch blocks if we know that the
4068 initialization will never throw an exception, or if the array
4069 elements do not have destructors. We can omit the loop completely if
4070 the elements of the array do not have constructors.
4072 We actually wrap the entire body of the above in a STMT_EXPR, for
4075 When copying from array to another, when the array elements have
4076 only trivial copy constructors, we should use __builtin_memcpy
4077 rather than generating a loop. That way, we could take advantage
4078 of whatever cleverness the back end has for dealing with copies
4079 of blocks of memory. */
4081 is_global
= begin_init_stmts (&stmt_expr
, &compound_stmt
);
4082 destroy_temps
= stmts_are_full_exprs_p ();
4083 current_stmt_tree ()->stmts_are_full_exprs_p
= 0;
4084 rval
= get_temp_regvar (ptype
, base
);
4085 base
= get_temp_regvar (ptype
, rval
);
4086 iterator
= get_temp_regvar (ptrdiff_type_node
, maxindex
);
4088 /* If initializing one array from another, initialize element by
4089 element. We rely upon the below calls to do the argument
4090 checking. Evaluate the initializer before entering the try block. */
4091 if (from_array
&& init
&& TREE_CODE (init
) != CONSTRUCTOR
)
4093 if (lvalue_kind (init
) & clk_rvalueref
)
4095 base2
= decay_conversion (init
, complain
);
4096 if (base2
== error_mark_node
)
4097 return error_mark_node
;
4098 itype
= TREE_TYPE (base2
);
4099 base2
= get_temp_regvar (itype
, base2
);
4100 itype
= TREE_TYPE (itype
);
4103 /* Protect the entire array initialization so that we can destroy
4104 the partially constructed array if an exception is thrown.
4105 But don't do this if we're assigning. */
4106 if (flag_exceptions
&& TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type
)
4109 try_block
= begin_try_block ();
4112 /* Should we try to create a constant initializer? */
4113 bool try_const
= (TREE_CODE (atype
) == ARRAY_TYPE
4114 && TREE_CONSTANT (maxindex
)
4115 && (init
? TREE_CODE (init
) == CONSTRUCTOR
4116 : (type_has_constexpr_default_constructor
4118 && (literal_type_p (inner_elt_type
)
4119 || TYPE_HAS_CONSTEXPR_CTOR (inner_elt_type
)));
4120 vec
<constructor_elt
, va_gc
> *const_vec
= NULL
;
4121 bool saw_non_const
= false;
4122 /* If we're initializing a static array, we want to do static
4123 initialization of any elements with constant initializers even if
4124 some are non-constant. */
4125 bool do_static_init
= (DECL_P (obase
) && TREE_STATIC (obase
));
4127 bool empty_list
= false;
4128 if (init
&& BRACE_ENCLOSED_INITIALIZER_P (init
)
4129 && CONSTRUCTOR_NELTS (init
) == 0)
4130 /* Skip over the handling of non-empty init lists. */
4133 /* Maybe pull out constant value when from_array? */
4135 else if (init
!= NULL_TREE
&& TREE_CODE (init
) == CONSTRUCTOR
)
4137 /* Do non-default initialization of non-trivial arrays resulting from
4138 brace-enclosed initializers. */
4139 unsigned HOST_WIDE_INT idx
;
4141 /* If the constructor already has the array type, it's been through
4142 digest_init, so we shouldn't try to do anything more. */
4143 bool digested
= same_type_p (atype
, TREE_TYPE (init
));
4147 finish_length_check (atype
, iterator
, obase
, CONSTRUCTOR_NELTS (init
));
4150 vec_alloc (const_vec
, CONSTRUCTOR_NELTS (init
));
4152 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (init
), idx
, field
, elt
)
4154 tree baseref
= build1 (INDIRECT_REF
, type
, base
);
4157 num_initialized_elts
++;
4159 current_stmt_tree ()->stmts_are_full_exprs_p
= 1;
4161 one_init
= build2 (INIT_EXPR
, type
, baseref
, elt
);
4162 else if (MAYBE_CLASS_TYPE_P (type
) || TREE_CODE (type
) == ARRAY_TYPE
)
4163 one_init
= build_aggr_init (baseref
, elt
, 0, complain
);
4165 one_init
= cp_build_modify_expr (input_location
, baseref
,
4166 NOP_EXPR
, elt
, complain
);
4167 if (one_init
== error_mark_node
)
4171 tree e
= maybe_constant_init (one_init
);
4172 if (reduced_constant_expression_p (e
))
4174 CONSTRUCTOR_APPEND_ELT (const_vec
, field
, e
);
4176 one_init
= NULL_TREE
;
4178 one_init
= build2 (INIT_EXPR
, type
, baseref
, e
);
4184 tree value
= build_zero_init (TREE_TYPE (e
), NULL_TREE
,
4187 CONSTRUCTOR_APPEND_ELT (const_vec
, field
, value
);
4189 saw_non_const
= true;
4194 finish_expr_stmt (one_init
);
4195 current_stmt_tree ()->stmts_are_full_exprs_p
= 0;
4197 one_init
= cp_build_unary_op (PREINCREMENT_EXPR
, base
, false,
4199 if (one_init
== error_mark_node
)
4202 finish_expr_stmt (one_init
);
4204 one_init
= cp_build_unary_op (PREDECREMENT_EXPR
, iterator
, false,
4206 if (one_init
== error_mark_node
)
4209 finish_expr_stmt (one_init
);
4212 /* Any elements without explicit initializers get T{}. */
4215 else if (init
&& TREE_CODE (init
) == STRING_CST
)
4217 /* Check that the array is at least as long as the string. */
4219 finish_length_check (atype
, iterator
, obase
,
4220 TREE_STRING_LENGTH (init
));
4221 tree length
= build_int_cst (ptrdiff_type_node
,
4222 TREE_STRING_LENGTH (init
));
4224 /* Copy the string to the first part of the array. */
4225 tree alias_set
= build_int_cst (build_pointer_type (type
), 0);
4226 tree lhs
= build2 (MEM_REF
, TREE_TYPE (init
), base
, alias_set
);
4227 tree stmt
= build2 (MODIFY_EXPR
, void_type_node
, lhs
, init
);
4228 finish_expr_stmt (stmt
);
4230 /* Adjust the counter and pointer. */
4231 stmt
= cp_build_binary_op (loc
, MINUS_EXPR
, iterator
, length
, complain
);
4232 stmt
= build2 (MODIFY_EXPR
, void_type_node
, iterator
, stmt
);
4233 finish_expr_stmt (stmt
);
4235 stmt
= cp_build_binary_op (loc
, PLUS_EXPR
, base
, length
, complain
);
4236 stmt
= build2 (MODIFY_EXPR
, void_type_node
, base
, stmt
);
4237 finish_expr_stmt (stmt
);
4239 /* And set the rest of the array to NUL. */
4241 explicit_value_init_p
= true;
4243 else if (from_array
)
4246 /* OK, we set base2 above. */;
4247 else if (CLASS_TYPE_P (type
)
4248 && ! TYPE_HAS_DEFAULT_CONSTRUCTOR (type
))
4250 if (complain
& tf_error
)
4251 error ("initializer ends prematurely");
4256 /* Now, default-initialize any remaining elements. We don't need to
4257 do that if a) the type does not need constructing, or b) we've
4258 already initialized all the elements.
4260 We do need to keep going if we're copying an array. */
4262 if (try_const
&& !init
)
4263 /* With a constexpr default constructor, which we checked for when
4264 setting try_const above, default-initialization is equivalent to
4265 value-initialization, and build_value_init gives us something more
4266 friendly to maybe_constant_init. */
4267 explicit_value_init_p
= true;
4269 || ((type_build_ctor_call (type
) || init
|| explicit_value_init_p
)
4270 && ! (tree_fits_shwi_p (maxindex
)
4271 && (num_initialized_elts
4272 == tree_to_shwi (maxindex
) + 1))))
4274 /* If the ITERATOR is lesser or equal to -1, then we don't have to loop;
4275 we've already initialized all the elements. */
4280 for_stmt
= begin_for_stmt (NULL_TREE
, NULL_TREE
);
4281 finish_init_stmt (for_stmt
);
4282 finish_for_cond (build2 (GT_EXPR
, boolean_type_node
, iterator
,
4283 build_int_cst (TREE_TYPE (iterator
), -1)),
4285 elt_init
= cp_build_unary_op (PREDECREMENT_EXPR
, iterator
, false,
4287 if (elt_init
== error_mark_node
)
4289 finish_for_expr (elt_init
, for_stmt
);
4291 to
= build1 (INDIRECT_REF
, type
, base
);
4293 /* If the initializer is {}, then all elements are initialized from T{}.
4294 But for non-classes, that's the same as value-initialization. */
4297 if (cxx_dialect
>= cxx11
&& AGGREGATE_TYPE_P (type
))
4299 init
= build_constructor (init_list_type_node
, NULL
);
4304 explicit_value_init_p
= true;
4314 from
= build1 (INDIRECT_REF
, itype
, base2
);
4318 from
= build_tree_list (NULL_TREE
, from
);
4323 if (from_array
== 2)
4324 elt_init
= cp_build_modify_expr (input_location
, to
, NOP_EXPR
,
4326 else if (type_build_ctor_call (type
))
4327 elt_init
= build_aggr_init (to
, from
, 0, complain
);
4329 elt_init
= cp_build_modify_expr (input_location
, to
, NOP_EXPR
, from
,
4334 else if (TREE_CODE (type
) == ARRAY_TYPE
)
4336 if (init
&& !BRACE_ENCLOSED_INITIALIZER_P (init
))
4338 ("cannot initialize multi-dimensional array with initializer");
4339 elt_init
= build_vec_init (build1 (INDIRECT_REF
, type
, base
),
4341 explicit_value_init_p
,
4344 else if (explicit_value_init_p
)
4346 elt_init
= build_value_init (type
, complain
);
4347 if (elt_init
!= error_mark_node
)
4348 elt_init
= build2 (INIT_EXPR
, type
, to
, elt_init
);
4352 gcc_assert (type_build_ctor_call (type
) || init
);
4353 if (CLASS_TYPE_P (type
))
4354 elt_init
= build_aggr_init (to
, init
, 0, complain
);
4357 if (TREE_CODE (init
) == TREE_LIST
)
4358 init
= build_x_compound_expr_from_list (init
, ELK_INIT
,
4360 elt_init
= build2 (INIT_EXPR
, type
, to
, init
);
4364 if (elt_init
== error_mark_node
)
4369 /* FIXME refs to earlier elts */
4370 tree e
= maybe_constant_init (elt_init
);
4371 if (reduced_constant_expression_p (e
))
4373 if (initializer_zerop (e
))
4374 /* Don't fill the CONSTRUCTOR with zeros. */
4377 elt_init
= NULL_TREE
;
4381 saw_non_const
= true;
4383 e
= build_zero_init (TREE_TYPE (e
), NULL_TREE
, true);
4390 int max
= tree_to_shwi (maxindex
)+1;
4391 for (; num_initialized_elts
< max
; ++num_initialized_elts
)
4393 tree field
= size_int (num_initialized_elts
);
4394 CONSTRUCTOR_APPEND_ELT (const_vec
, field
, e
);
4399 current_stmt_tree ()->stmts_are_full_exprs_p
= 1;
4401 finish_expr_stmt (elt_init
);
4402 current_stmt_tree ()->stmts_are_full_exprs_p
= 0;
4404 finish_expr_stmt (cp_build_unary_op (PREINCREMENT_EXPR
, base
, false,
4407 finish_expr_stmt (cp_build_unary_op (PREINCREMENT_EXPR
, base2
, false,
4410 finish_for_stmt (for_stmt
);
4413 /* Make sure to cleanup any partially constructed elements. */
4414 if (flag_exceptions
&& TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type
)
4418 tree m
= cp_build_binary_op (input_location
,
4419 MINUS_EXPR
, maxindex
, iterator
,
4422 /* Flatten multi-dimensional array since build_vec_delete only
4423 expects one-dimensional array. */
4424 if (TREE_CODE (type
) == ARRAY_TYPE
)
4425 m
= cp_build_binary_op (input_location
,
4427 /* Avoid mixing signed and unsigned. */
4428 convert (TREE_TYPE (m
),
4429 array_type_nelts_total (type
)),
4432 finish_cleanup_try_block (try_block
);
4433 e
= build_vec_delete_1 (rval
, m
,
4434 inner_elt_type
, sfk_complete_destructor
,
4435 /*use_global_delete=*/0, complain
);
4436 if (e
== error_mark_node
)
4438 finish_cleanup (e
, try_block
);
4441 /* The value of the array initialization is the array itself, RVAL
4442 is a pointer to the first element. */
4443 finish_stmt_expr_expr (rval
, stmt_expr
);
4445 stmt_expr
= finish_init_stmts (is_global
, stmt_expr
, compound_stmt
);
4447 current_stmt_tree ()->stmts_are_full_exprs_p
= destroy_temps
;
4450 return error_mark_node
;
4456 tree const_init
= build_constructor (atype
, const_vec
);
4457 return build2 (INIT_EXPR
, atype
, obase
, const_init
);
4459 else if (do_static_init
&& !vec_safe_is_empty (const_vec
))
4460 DECL_INITIAL (obase
) = build_constructor (atype
, const_vec
);
4462 vec_free (const_vec
);
4465 /* Now make the result have the correct type. */
4466 if (TREE_CODE (atype
) == ARRAY_TYPE
)
4468 atype
= build_pointer_type (atype
);
4469 stmt_expr
= build1 (NOP_EXPR
, atype
, stmt_expr
);
4470 stmt_expr
= cp_build_indirect_ref (stmt_expr
, RO_NULL
, complain
);
4471 TREE_NO_WARNING (stmt_expr
) = 1;
4477 /* Call the DTOR_KIND destructor for EXP. FLAGS are as for
4481 build_dtor_call (tree exp
, special_function_kind dtor_kind
, int flags
,
4482 tsubst_flags_t complain
)
4488 case sfk_complete_destructor
:
4489 name
= complete_dtor_identifier
;
4492 case sfk_base_destructor
:
4493 name
= base_dtor_identifier
;
4496 case sfk_deleting_destructor
:
4497 name
= deleting_dtor_identifier
;
4503 fn
= lookup_fnfields (TREE_TYPE (exp
), name
, /*protect=*/2);
4504 return build_new_method_call (exp
, fn
,
4506 /*conversion_path=*/NULL_TREE
,
4512 /* Generate a call to a destructor. TYPE is the type to cast ADDR to.
4513 ADDR is an expression which yields the store to be destroyed.
4514 AUTO_DELETE is the name of the destructor to call, i.e., either
4515 sfk_complete_destructor, sfk_base_destructor, or
4516 sfk_deleting_destructor.
4518 FLAGS is the logical disjunction of zero or more LOOKUP_
4519 flags. See cp-tree.h for more info. */
4522 build_delete (tree otype
, tree addr
, special_function_kind auto_delete
,
4523 int flags
, int use_global_delete
, tsubst_flags_t complain
)
4527 if (addr
== error_mark_node
)
4528 return error_mark_node
;
4530 tree type
= TYPE_MAIN_VARIANT (otype
);
4532 /* Can happen when CURRENT_EXCEPTION_OBJECT gets its type
4533 set to `error_mark_node' before it gets properly cleaned up. */
4534 if (type
== error_mark_node
)
4535 return error_mark_node
;
4537 if (TREE_CODE (type
) == POINTER_TYPE
)
4538 type
= TYPE_MAIN_VARIANT (TREE_TYPE (type
));
4540 if (TREE_CODE (type
) == ARRAY_TYPE
)
4542 if (TYPE_DOMAIN (type
) == NULL_TREE
)
4544 if (complain
& tf_error
)
4545 error ("unknown array size in delete");
4546 return error_mark_node
;
4548 return build_vec_delete (addr
, array_type_nelts (type
),
4549 auto_delete
, use_global_delete
, complain
);
4552 if (TYPE_PTR_P (otype
))
4554 addr
= mark_rvalue_use (addr
);
4556 /* We don't want to warn about delete of void*, only other
4557 incomplete types. Deleting other incomplete types
4558 invokes undefined behavior, but it is not ill-formed, so
4559 compile to something that would even do The Right Thing
4560 (TM) should the type have a trivial dtor and no delete
4562 if (!VOID_TYPE_P (type
))
4564 complete_type (type
);
4565 if (!COMPLETE_TYPE_P (type
))
4567 if ((complain
& tf_warning
)
4568 && warning (OPT_Wdelete_incomplete
,
4569 "possible problem detected in invocation of "
4570 "delete operator:"))
4572 cxx_incomplete_type_diagnostic (addr
, type
, DK_WARNING
);
4573 inform (input_location
,
4574 "neither the destructor nor the class-specific "
4575 "operator delete will be called, even if they are "
4576 "declared when the class is defined");
4579 else if (auto_delete
== sfk_deleting_destructor
&& warn_delnonvdtor
4580 && MAYBE_CLASS_TYPE_P (type
) && !CLASSTYPE_FINAL (type
)
4581 && TYPE_POLYMORPHIC_P (type
))
4583 tree dtor
= CLASSTYPE_DESTRUCTOR (type
);
4584 if (!dtor
|| !DECL_VINDEX (dtor
))
4586 if (CLASSTYPE_PURE_VIRTUALS (type
))
4587 warning (OPT_Wdelete_non_virtual_dtor
,
4588 "deleting object of abstract class type %qT"
4589 " which has non-virtual destructor"
4590 " will cause undefined behavior", type
);
4592 warning (OPT_Wdelete_non_virtual_dtor
,
4593 "deleting object of polymorphic class type %qT"
4594 " which has non-virtual destructor"
4595 " might cause undefined behavior", type
);
4599 if (TREE_SIDE_EFFECTS (addr
))
4600 addr
= save_expr (addr
);
4602 /* Throw away const and volatile on target type of addr. */
4603 addr
= convert_force (build_pointer_type (type
), addr
, 0, complain
);
4607 /* Don't check PROTECT here; leave that decision to the
4608 destructor. If the destructor is accessible, call it,
4609 else report error. */
4610 addr
= cp_build_addr_expr (addr
, complain
);
4611 if (addr
== error_mark_node
)
4612 return error_mark_node
;
4613 if (TREE_SIDE_EFFECTS (addr
))
4614 addr
= save_expr (addr
);
4616 addr
= convert_force (build_pointer_type (type
), addr
, 0, complain
);
4619 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type
))
4621 /* Make sure the destructor is callable. */
4622 if (type_build_dtor_call (type
))
4624 expr
= build_dtor_call (cp_build_indirect_ref (addr
, RO_NULL
,
4626 sfk_complete_destructor
, flags
, complain
);
4627 if (expr
== error_mark_node
)
4628 return error_mark_node
;
4631 if (auto_delete
!= sfk_deleting_destructor
)
4634 return build_op_delete_call (DELETE_EXPR
, addr
,
4635 cxx_sizeof_nowarn (type
),
4637 /*placement=*/NULL_TREE
,
4638 /*alloc_fn=*/NULL_TREE
,
4643 tree head
= NULL_TREE
;
4644 tree do_delete
= NULL_TREE
;
4647 if (CLASSTYPE_LAZY_DESTRUCTOR (type
))
4648 lazily_declare_fn (sfk_destructor
, type
);
4650 /* For `::delete x', we must not use the deleting destructor
4651 since then we would not be sure to get the global `operator
4653 if (use_global_delete
&& auto_delete
== sfk_deleting_destructor
)
4655 /* We will use ADDR multiple times so we must save it. */
4656 addr
= save_expr (addr
);
4657 head
= get_target_expr (build_headof (addr
));
4658 /* Delete the object. */
4659 do_delete
= build_op_delete_call (DELETE_EXPR
,
4661 cxx_sizeof_nowarn (type
),
4663 /*placement=*/NULL_TREE
,
4664 /*alloc_fn=*/NULL_TREE
,
4666 /* Otherwise, treat this like a complete object destructor
4668 auto_delete
= sfk_complete_destructor
;
4670 /* If the destructor is non-virtual, there is no deleting
4671 variant. Instead, we must explicitly call the appropriate
4672 `operator delete' here. */
4673 else if (!DECL_VIRTUAL_P (CLASSTYPE_DESTRUCTOR (type
))
4674 && auto_delete
== sfk_deleting_destructor
)
4676 /* We will use ADDR multiple times so we must save it. */
4677 addr
= save_expr (addr
);
4678 /* Build the call. */
4679 do_delete
= build_op_delete_call (DELETE_EXPR
,
4681 cxx_sizeof_nowarn (type
),
4683 /*placement=*/NULL_TREE
,
4684 /*alloc_fn=*/NULL_TREE
,
4686 /* Call the complete object destructor. */
4687 auto_delete
= sfk_complete_destructor
;
4689 else if (auto_delete
== sfk_deleting_destructor
4690 && TYPE_GETS_REG_DELETE (type
))
4692 /* Make sure we have access to the member op delete, even though
4693 we'll actually be calling it from the destructor. */
4694 build_op_delete_call (DELETE_EXPR
, addr
, cxx_sizeof_nowarn (type
),
4696 /*placement=*/NULL_TREE
,
4697 /*alloc_fn=*/NULL_TREE
,
4701 expr
= build_dtor_call (cp_build_indirect_ref (addr
, RO_NULL
, complain
),
4702 auto_delete
, flags
, complain
);
4703 if (expr
== error_mark_node
)
4704 return error_mark_node
;
4706 /* The delete operator must be called, regardless of whether
4707 the destructor throws.
4709 [expr.delete]/7 The deallocation function is called
4710 regardless of whether the destructor for the object or some
4711 element of the array throws an exception. */
4712 expr
= build2 (TRY_FINALLY_EXPR
, void_type_node
, expr
, do_delete
);
4714 /* We need to calculate this before the dtor changes the vptr. */
4716 expr
= build2 (COMPOUND_EXPR
, void_type_node
, head
, expr
);
4718 if (flags
& LOOKUP_DESTRUCTOR
)
4719 /* Explicit destructor call; don't check for null pointer. */
4720 ifexp
= integer_one_node
;
4723 /* Handle deleting a null pointer. */
4724 warning_sentinel
s (warn_address
);
4725 ifexp
= cp_build_binary_op (input_location
, NE_EXPR
, addr
,
4726 nullptr_node
, complain
);
4727 if (ifexp
== error_mark_node
)
4728 return error_mark_node
;
4729 /* This is a compiler generated comparison, don't emit
4730 e.g. -Wnonnull-compare warning for it. */
4731 else if (TREE_CODE (ifexp
) == NE_EXPR
)
4732 TREE_NO_WARNING (ifexp
) = 1;
4735 if (ifexp
!= integer_one_node
)
4736 expr
= build3 (COND_EXPR
, void_type_node
, ifexp
, expr
, void_node
);
4742 /* At the beginning of a destructor, push cleanups that will call the
4743 destructors for our base classes and members.
4745 Called from begin_destructor_body. */
4748 push_base_cleanups (void)
4750 tree binfo
, base_binfo
;
4754 vec
<tree
, va_gc
> *vbases
;
4756 /* Run destructors for all virtual baseclasses. */
4757 if (!ABSTRACT_CLASS_TYPE_P (current_class_type
)
4758 && CLASSTYPE_VBASECLASSES (current_class_type
))
4760 tree cond
= (condition_conversion
4761 (build2 (BIT_AND_EXPR
, integer_type_node
,
4762 current_in_charge_parm
,
4763 integer_two_node
)));
4765 /* The CLASSTYPE_VBASECLASSES vector is in initialization
4766 order, which is also the right order for pushing cleanups. */
4767 for (vbases
= CLASSTYPE_VBASECLASSES (current_class_type
), i
= 0;
4768 vec_safe_iterate (vbases
, i
, &base_binfo
); i
++)
4770 if (type_build_dtor_call (BINFO_TYPE (base_binfo
)))
4772 expr
= build_special_member_call (current_class_ref
,
4773 base_dtor_identifier
,
4777 | LOOKUP_NONVIRTUAL
),
4778 tf_warning_or_error
);
4779 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (BINFO_TYPE (base_binfo
)))
4781 expr
= build3 (COND_EXPR
, void_type_node
, cond
,
4783 finish_decl_cleanup (NULL_TREE
, expr
);
4789 /* Take care of the remaining baseclasses. */
4790 for (binfo
= TYPE_BINFO (current_class_type
), i
= 0;
4791 BINFO_BASE_ITERATE (binfo
, i
, base_binfo
); i
++)
4793 if (BINFO_VIRTUAL_P (base_binfo
)
4794 || !type_build_dtor_call (BINFO_TYPE (base_binfo
)))
4797 expr
= build_special_member_call (current_class_ref
,
4798 base_dtor_identifier
,
4800 LOOKUP_NORMAL
| LOOKUP_NONVIRTUAL
,
4801 tf_warning_or_error
);
4802 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (BINFO_TYPE (base_binfo
)))
4803 finish_decl_cleanup (NULL_TREE
, expr
);
4806 /* Don't automatically destroy union members. */
4807 if (TREE_CODE (current_class_type
) == UNION_TYPE
)
4810 for (member
= TYPE_FIELDS (current_class_type
); member
;
4811 member
= DECL_CHAIN (member
))
4813 tree this_type
= TREE_TYPE (member
);
4814 if (this_type
== error_mark_node
4815 || TREE_CODE (member
) != FIELD_DECL
4816 || DECL_ARTIFICIAL (member
))
4818 if (ANON_AGGR_TYPE_P (this_type
))
4820 if (type_build_dtor_call (this_type
))
4822 tree this_member
= (build_class_member_access_expr
4823 (current_class_ref
, member
,
4824 /*access_path=*/NULL_TREE
,
4825 /*preserve_reference=*/false,
4826 tf_warning_or_error
));
4827 expr
= build_delete (this_type
, this_member
,
4828 sfk_complete_destructor
,
4829 LOOKUP_NONVIRTUAL
|LOOKUP_DESTRUCTOR
|LOOKUP_NORMAL
,
4830 0, tf_warning_or_error
);
4831 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (this_type
))
4832 finish_decl_cleanup (NULL_TREE
, expr
);
4837 /* Build a C++ vector delete expression.
4838 MAXINDEX is the number of elements to be deleted.
4839 ELT_SIZE is the nominal size of each element in the vector.
4840 BASE is the expression that should yield the store to be deleted.
4841 This function expands (or synthesizes) these calls itself.
4842 AUTO_DELETE_VEC says whether the container (vector) should be deallocated.
4844 This also calls delete for virtual baseclasses of elements of the vector.
4846 Update: MAXINDEX is no longer needed. The size can be extracted from the
4847 start of the vector for pointers, and from the type for arrays. We still
4848 use MAXINDEX for arrays because it happens to already have one of the
4849 values we'd have to extract. (We could use MAXINDEX with pointers to
4850 confirm the size, and trap if the numbers differ; not clear that it'd
4851 be worth bothering.) */
4854 build_vec_delete (tree base
, tree maxindex
,
4855 special_function_kind auto_delete_vec
,
4856 int use_global_delete
, tsubst_flags_t complain
)
4860 tree base_init
= NULL_TREE
;
4862 type
= TREE_TYPE (base
);
4864 if (TYPE_PTR_P (type
))
4866 /* Step back one from start of vector, and read dimension. */
4868 tree size_ptr_type
= build_pointer_type (sizetype
);
4870 base
= mark_rvalue_use (base
);
4871 if (TREE_SIDE_EFFECTS (base
))
4873 base_init
= get_target_expr (base
);
4874 base
= TARGET_EXPR_SLOT (base_init
);
4876 type
= strip_array_types (TREE_TYPE (type
));
4877 cookie_addr
= fold_build1_loc (input_location
, NEGATE_EXPR
,
4878 sizetype
, TYPE_SIZE_UNIT (sizetype
));
4879 cookie_addr
= fold_build_pointer_plus (fold_convert (size_ptr_type
, base
),
4881 maxindex
= cp_build_indirect_ref (cookie_addr
, RO_NULL
, complain
);
4883 else if (TREE_CODE (type
) == ARRAY_TYPE
)
4885 /* Get the total number of things in the array, maxindex is a
4887 maxindex
= array_type_nelts_total (type
);
4888 type
= strip_array_types (type
);
4889 base
= decay_conversion (base
, complain
);
4890 if (base
== error_mark_node
)
4891 return error_mark_node
;
4892 if (TREE_SIDE_EFFECTS (base
))
4894 base_init
= get_target_expr (base
);
4895 base
= TARGET_EXPR_SLOT (base_init
);
4900 if (base
!= error_mark_node
&& !(complain
& tf_error
))
4901 error ("type to vector delete is neither pointer or array type");
4902 return error_mark_node
;
4905 rval
= build_vec_delete_1 (base
, maxindex
, type
, auto_delete_vec
,
4906 use_global_delete
, complain
);
4907 if (base_init
&& rval
!= error_mark_node
)
4908 rval
= build2 (COMPOUND_EXPR
, TREE_TYPE (rval
), base_init
, rval
);
4913 #include "gt-cp-init.h"