1 /* Handle initialization things in C++.
2 Copyright (C) 1987-2015 Free Software Foundation, Inc.
3 Contributed by Michael Tiemann (tiemann@cygnus.com)
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3, or (at your option)
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"
30 #include "stringpool.h"
36 #include "c-family/c-ubsan.h"
38 static bool begin_init_stmts (tree
*, tree
*);
39 static tree
finish_init_stmts (bool, tree
, tree
);
40 static void construct_virtual_base (tree
, tree
);
41 static void expand_aggr_init_1 (tree
, tree
, tree
, tree
, int, tsubst_flags_t
);
42 static void expand_default_init (tree
, tree
, tree
, tree
, int, tsubst_flags_t
);
43 static void perform_member_init (tree
, tree
);
44 static int member_init_ok_or_else (tree
, tree
, tree
);
45 static void expand_virtual_init (tree
, tree
);
46 static tree
sort_mem_initializers (tree
, tree
);
47 static tree
initializing_context (tree
);
48 static void expand_cleanup_for_base (tree
, tree
);
49 static tree
dfs_initialize_vtbl_ptrs (tree
, void *);
50 static tree
build_field_list (tree
, tree
, int *);
51 static int diagnose_uninitialized_cst_or_ref_member_1 (tree
, tree
, bool, bool);
53 /* We are about to generate some complex initialization code.
54 Conceptually, it is all a single expression. However, we may want
55 to include conditionals, loops, and other such statement-level
56 constructs. Therefore, we build the initialization code inside a
57 statement-expression. This function starts such an expression.
58 STMT_EXPR_P and COMPOUND_STMT_P are filled in by this function;
59 pass them back to finish_init_stmts when the expression is
63 begin_init_stmts (tree
*stmt_expr_p
, tree
*compound_stmt_p
)
65 bool is_global
= !building_stmt_list_p ();
67 *stmt_expr_p
= begin_stmt_expr ();
68 *compound_stmt_p
= begin_compound_stmt (BCS_NO_SCOPE
);
73 /* Finish out the statement-expression begun by the previous call to
74 begin_init_stmts. Returns the statement-expression itself. */
77 finish_init_stmts (bool is_global
, tree stmt_expr
, tree compound_stmt
)
79 finish_compound_stmt (compound_stmt
);
81 stmt_expr
= finish_stmt_expr (stmt_expr
, true);
83 gcc_assert (!building_stmt_list_p () == is_global
);
90 /* Called from initialize_vtbl_ptrs via dfs_walk. BINFO is the base
91 which we want to initialize the vtable pointer for, DATA is
92 TREE_LIST whose TREE_VALUE is the this ptr expression. */
95 dfs_initialize_vtbl_ptrs (tree binfo
, void *data
)
97 if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo
)))
98 return dfs_skip_bases
;
100 if (!BINFO_PRIMARY_P (binfo
) || BINFO_VIRTUAL_P (binfo
))
102 tree base_ptr
= TREE_VALUE ((tree
) data
);
104 base_ptr
= build_base_path (PLUS_EXPR
, base_ptr
, binfo
, /*nonnull=*/1,
105 tf_warning_or_error
);
107 expand_virtual_init (binfo
, base_ptr
);
113 /* Initialize all the vtable pointers in the object pointed to by
117 initialize_vtbl_ptrs (tree addr
)
122 type
= TREE_TYPE (TREE_TYPE (addr
));
123 list
= build_tree_list (type
, addr
);
125 /* Walk through the hierarchy, initializing the vptr in each base
126 class. We do these in pre-order because we can't find the virtual
127 bases for a class until we've initialized the vtbl for that
129 dfs_walk_once (TYPE_BINFO (type
), dfs_initialize_vtbl_ptrs
, NULL
, list
);
132 /* Return an expression for the zero-initialization of an object with
133 type T. This expression will either be a constant (in the case
134 that T is a scalar), or a CONSTRUCTOR (in the case that T is an
135 aggregate), or NULL (in the case that T does not require
136 initialization). In either case, the value can be used as
137 DECL_INITIAL for a decl of the indicated TYPE; it is a valid static
138 initializer. If NELTS is non-NULL, and TYPE is an ARRAY_TYPE, NELTS
139 is the number of elements in the array. If STATIC_STORAGE_P is
140 TRUE, initializers are only generated for entities for which
141 zero-initialization does not simply mean filling the storage with
142 zero bytes. FIELD_SIZE, if non-NULL, is the bit size of the field,
143 subfields with bit positions at or above that bit size shouldn't
144 be added. Note that this only works when the result is assigned
145 to a base COMPONENT_REF; if we only have a pointer to the base subobject,
146 expand_assignment will end up clearing the full size of TYPE. */
149 build_zero_init_1 (tree type
, tree nelts
, bool static_storage_p
,
152 tree init
= NULL_TREE
;
156 To zero-initialize an object of type T means:
158 -- if T is a scalar type, the storage is set to the value of zero
161 -- if T is a non-union class type, the storage for each nonstatic
162 data member and each base-class subobject is zero-initialized.
164 -- if T is a union type, the storage for its first data member is
167 -- if T is an array type, the storage for each element is
170 -- if T is a reference type, no initialization is performed. */
172 gcc_assert (nelts
== NULL_TREE
|| TREE_CODE (nelts
) == INTEGER_CST
);
174 if (type
== error_mark_node
)
176 else if (static_storage_p
&& zero_init_p (type
))
177 /* In order to save space, we do not explicitly build initializers
178 for items that do not need them. GCC's semantics are that
179 items with static storage duration that are not otherwise
180 initialized are initialized to zero. */
182 else if (TYPE_PTR_OR_PTRMEM_P (type
))
183 init
= convert (type
, nullptr_node
);
184 else if (SCALAR_TYPE_P (type
))
185 init
= convert (type
, integer_zero_node
);
186 else if (RECORD_OR_UNION_CODE_P (TREE_CODE (type
)))
189 vec
<constructor_elt
, va_gc
> *v
= NULL
;
191 /* Iterate over the fields, building initializations. */
192 for (field
= TYPE_FIELDS (type
); field
; field
= DECL_CHAIN (field
))
194 if (TREE_CODE (field
) != FIELD_DECL
)
197 if (TREE_TYPE (field
) == error_mark_node
)
200 /* Don't add virtual bases for base classes if they are beyond
201 the size of the current field, that means it is present
202 somewhere else in the object. */
205 tree bitpos
= bit_position (field
);
206 if (TREE_CODE (bitpos
) == INTEGER_CST
207 && !tree_int_cst_lt (bitpos
, field_size
))
211 /* Note that for class types there will be FIELD_DECLs
212 corresponding to base classes as well. Thus, iterating
213 over TYPE_FIELDs will result in correct initialization of
214 all of the subobjects. */
215 if (!static_storage_p
|| !zero_init_p (TREE_TYPE (field
)))
218 = (DECL_FIELD_IS_BASE (field
)
220 && TREE_CODE (DECL_SIZE (field
)) == INTEGER_CST
)
221 ? DECL_SIZE (field
) : NULL_TREE
;
222 tree value
= build_zero_init_1 (TREE_TYPE (field
),
227 CONSTRUCTOR_APPEND_ELT(v
, field
, value
);
230 /* For unions, only the first field is initialized. */
231 if (TREE_CODE (type
) == UNION_TYPE
)
235 /* Build a constructor to contain the initializations. */
236 init
= build_constructor (type
, v
);
238 else if (TREE_CODE (type
) == ARRAY_TYPE
)
241 vec
<constructor_elt
, va_gc
> *v
= NULL
;
243 /* Iterate over the array elements, building initializations. */
245 max_index
= fold_build2_loc (input_location
,
246 MINUS_EXPR
, TREE_TYPE (nelts
),
247 nelts
, integer_one_node
);
249 max_index
= array_type_nelts (type
);
251 /* If we have an error_mark here, we should just return error mark
252 as we don't know the size of the array yet. */
253 if (max_index
== error_mark_node
)
254 return error_mark_node
;
255 gcc_assert (TREE_CODE (max_index
) == INTEGER_CST
);
257 /* A zero-sized array, which is accepted as an extension, will
258 have an upper bound of -1. */
259 if (!tree_int_cst_equal (max_index
, integer_minus_one_node
))
263 /* If this is a one element array, we just use a regular init. */
264 if (tree_int_cst_equal (size_zero_node
, max_index
))
265 ce
.index
= size_zero_node
;
267 ce
.index
= build2 (RANGE_EXPR
, sizetype
, size_zero_node
,
270 ce
.value
= build_zero_init_1 (TREE_TYPE (type
),
272 static_storage_p
, NULL_TREE
);
280 /* Build a constructor to contain the initializations. */
281 init
= build_constructor (type
, v
);
283 else if (VECTOR_TYPE_P (type
))
284 init
= build_zero_cst (type
);
286 gcc_assert (TREE_CODE (type
) == REFERENCE_TYPE
);
288 /* In all cases, the initializer is a constant. */
290 TREE_CONSTANT (init
) = 1;
295 /* Return an expression for the zero-initialization of an object with
296 type T. This expression will either be a constant (in the case
297 that T is a scalar), or a CONSTRUCTOR (in the case that T is an
298 aggregate), or NULL (in the case that T does not require
299 initialization). In either case, the value can be used as
300 DECL_INITIAL for a decl of the indicated TYPE; it is a valid static
301 initializer. If NELTS is non-NULL, and TYPE is an ARRAY_TYPE, NELTS
302 is the number of elements in the array. If STATIC_STORAGE_P is
303 TRUE, initializers are only generated for entities for which
304 zero-initialization does not simply mean filling the storage with
308 build_zero_init (tree type
, tree nelts
, bool static_storage_p
)
310 return build_zero_init_1 (type
, nelts
, static_storage_p
, NULL_TREE
);
313 /* Return a suitable initializer for value-initializing an object of type
314 TYPE, as described in [dcl.init]. */
317 build_value_init (tree type
, tsubst_flags_t complain
)
321 To value-initialize an object of type T means:
323 - if T is a class type (clause 9) with either no default constructor
324 (12.1) or a default constructor that is user-provided or deleted,
325 then then the object is default-initialized;
327 - if T is a (possibly cv-qualified) class type without a user-provided
328 or deleted default constructor, then the object is zero-initialized
329 and the semantic constraints for default-initialization are checked,
330 and if T has a non-trivial default constructor, the object is
333 - if T is an array type, then each element is value-initialized;
335 - otherwise, the object is zero-initialized.
337 A program that calls for default-initialization or
338 value-initialization of an entity of reference type is ill-formed. */
340 /* The AGGR_INIT_EXPR tweaking below breaks in templates. */
341 gcc_assert (!processing_template_decl
342 || (SCALAR_TYPE_P (type
) || TREE_CODE (type
) == ARRAY_TYPE
));
344 if (CLASS_TYPE_P (type
)
345 && type_build_ctor_call (type
))
348 build_special_member_call (NULL_TREE
, complete_ctor_identifier
,
349 NULL
, type
, LOOKUP_NORMAL
,
351 if (ctor
== error_mark_node
)
354 if (TREE_CODE (ctor
) == CALL_EXPR
)
355 fn
= get_callee_fndecl (ctor
);
356 ctor
= build_aggr_init_expr (type
, ctor
);
357 if (fn
&& user_provided_p (fn
))
359 else if (TYPE_HAS_COMPLEX_DFLT (type
))
361 /* This is a class that needs constructing, but doesn't have
362 a user-provided constructor. So we need to zero-initialize
363 the object and then call the implicitly defined ctor.
364 This will be handled in simplify_aggr_init_expr. */
365 AGGR_INIT_ZERO_FIRST (ctor
) = 1;
370 /* Discard any access checking during subobject initialization;
371 the checks are implied by the call to the ctor which we have
372 verified is OK (cpp0x/defaulted46.C). */
373 push_deferring_access_checks (dk_deferred
);
374 tree r
= build_value_init_noctor (type
, complain
);
375 pop_deferring_access_checks ();
379 /* Like build_value_init, but don't call the constructor for TYPE. Used
380 for base initializers. */
383 build_value_init_noctor (tree type
, tsubst_flags_t complain
)
385 if (!COMPLETE_TYPE_P (type
))
387 if (complain
& tf_error
)
388 error ("value-initialization of incomplete type %qT", type
);
389 return error_mark_node
;
391 /* FIXME the class and array cases should just use digest_init once it is
393 if (CLASS_TYPE_P (type
))
395 gcc_assert (!TYPE_HAS_COMPLEX_DFLT (type
)
398 if (TREE_CODE (type
) != UNION_TYPE
)
401 vec
<constructor_elt
, va_gc
> *v
= NULL
;
403 /* Iterate over the fields, building initializations. */
404 for (field
= TYPE_FIELDS (type
); field
; field
= DECL_CHAIN (field
))
408 if (TREE_CODE (field
) != FIELD_DECL
)
411 ftype
= TREE_TYPE (field
);
413 if (ftype
== error_mark_node
)
416 /* We could skip vfields and fields of types with
417 user-defined constructors, but I think that won't improve
418 performance at all; it should be simpler in general just
419 to zero out the entire object than try to only zero the
420 bits that actually need it. */
422 /* Note that for class types there will be FIELD_DECLs
423 corresponding to base classes as well. Thus, iterating
424 over TYPE_FIELDs will result in correct initialization of
425 all of the subobjects. */
426 value
= build_value_init (ftype
, complain
);
427 value
= maybe_constant_init (value
);
429 if (value
== error_mark_node
)
430 return error_mark_node
;
432 CONSTRUCTOR_APPEND_ELT(v
, field
, value
);
434 /* We shouldn't have gotten here for anything that would need
435 non-trivial initialization, and gimplify_init_ctor_preeval
436 would need to be fixed to allow it. */
437 gcc_assert (TREE_CODE (value
) != TARGET_EXPR
438 && TREE_CODE (value
) != AGGR_INIT_EXPR
);
441 /* Build a constructor to contain the zero- initializations. */
442 return build_constructor (type
, v
);
445 else if (TREE_CODE (type
) == ARRAY_TYPE
)
447 vec
<constructor_elt
, va_gc
> *v
= NULL
;
449 /* Iterate over the array elements, building initializations. */
450 tree max_index
= array_type_nelts (type
);
452 /* If we have an error_mark here, we should just return error mark
453 as we don't know the size of the array yet. */
454 if (max_index
== error_mark_node
)
456 if (complain
& tf_error
)
457 error ("cannot value-initialize array of unknown bound %qT",
459 return error_mark_node
;
461 gcc_assert (TREE_CODE (max_index
) == INTEGER_CST
);
463 /* A zero-sized array, which is accepted as an extension, will
464 have an upper bound of -1. */
465 if (!tree_int_cst_equal (max_index
, integer_minus_one_node
))
469 /* If this is a one element array, we just use a regular init. */
470 if (tree_int_cst_equal (size_zero_node
, max_index
))
471 ce
.index
= size_zero_node
;
473 ce
.index
= build2 (RANGE_EXPR
, sizetype
, size_zero_node
, max_index
);
475 ce
.value
= build_value_init (TREE_TYPE (type
), complain
);
476 ce
.value
= maybe_constant_init (ce
.value
);
477 if (ce
.value
== error_mark_node
)
478 return error_mark_node
;
483 /* We shouldn't have gotten here for anything that would need
484 non-trivial initialization, and gimplify_init_ctor_preeval
485 would need to be fixed to allow it. */
486 gcc_assert (TREE_CODE (ce
.value
) != TARGET_EXPR
487 && TREE_CODE (ce
.value
) != AGGR_INIT_EXPR
);
490 /* Build a constructor to contain the initializations. */
491 return build_constructor (type
, v
);
493 else if (TREE_CODE (type
) == FUNCTION_TYPE
)
495 if (complain
& tf_error
)
496 error ("value-initialization of function type %qT", type
);
497 return error_mark_node
;
499 else if (TREE_CODE (type
) == REFERENCE_TYPE
)
501 if (complain
& tf_error
)
502 error ("value-initialization of reference type %qT", type
);
503 return error_mark_node
;
506 return build_zero_init (type
, NULL_TREE
, /*static_storage_p=*/false);
509 /* Initialize current class with INIT, a TREE_LIST of
510 arguments for a target constructor. If TREE_LIST is void_type_node,
511 an empty initializer list was given. */
514 perform_target_ctor (tree init
)
516 tree decl
= current_class_ref
;
517 tree type
= current_class_type
;
519 finish_expr_stmt (build_aggr_init (decl
, init
,
520 LOOKUP_NORMAL
|LOOKUP_DELEGATING_CONS
,
521 tf_warning_or_error
));
522 if (type_build_dtor_call (type
))
524 tree expr
= build_delete (type
, decl
, sfk_complete_destructor
,
528 0, tf_warning_or_error
);
529 if (expr
!= error_mark_node
530 && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type
))
531 finish_eh_cleanup (expr
);
535 /* Return the non-static data initializer for FIELD_DECL MEMBER. */
538 get_nsdmi (tree member
, bool in_ctor
)
541 tree save_ccp
= current_class_ptr
;
542 tree save_ccr
= current_class_ref
;
546 /* Use a PLACEHOLDER_EXPR when we don't have a 'this' parameter to
547 refer to; constexpr evaluation knows what to do with it. */
548 current_class_ref
= build0 (PLACEHOLDER_EXPR
, DECL_CONTEXT (member
));
549 current_class_ptr
= build_address (current_class_ref
);
552 if (DECL_LANG_SPECIFIC (member
) && DECL_TEMPLATE_INFO (member
))
554 init
= DECL_INITIAL (DECL_TI_TEMPLATE (member
));
555 if (TREE_CODE (init
) == DEFAULT_ARG
)
558 /* Check recursive instantiation. */
559 if (DECL_INSTANTIATING_NSDMI_P (member
))
561 error ("recursive instantiation of non-static data member "
562 "initializer for %qD", member
);
563 init
= error_mark_node
;
567 DECL_INSTANTIATING_NSDMI_P (member
) = 1;
569 /* Do deferred instantiation of the NSDMI. */
570 init
= (tsubst_copy_and_build
571 (init
, DECL_TI_ARGS (member
),
572 tf_warning_or_error
, member
, /*function_p=*/false,
573 /*integral_constant_expression_p=*/false));
574 init
= digest_nsdmi_init (member
, init
);
576 DECL_INSTANTIATING_NSDMI_P (member
) = 0;
581 init
= DECL_INITIAL (member
);
582 if (init
&& TREE_CODE (init
) == DEFAULT_ARG
)
585 error ("constructor required before non-static data member "
586 "for %qD has been parsed", member
);
587 DECL_INITIAL (member
) = error_mark_node
;
588 init
= error_mark_node
;
590 /* Strip redundant TARGET_EXPR so we don't need to remap it, and
591 so the aggregate init code below will see a CONSTRUCTOR. */
592 if (init
&& TREE_CODE (init
) == TARGET_EXPR
593 && !VOID_TYPE_P (TREE_TYPE (TARGET_EXPR_INITIAL (init
))))
594 init
= TARGET_EXPR_INITIAL (init
);
595 init
= break_out_target_exprs (init
);
597 current_class_ptr
= save_ccp
;
598 current_class_ref
= save_ccr
;
602 /* Initialize MEMBER, a FIELD_DECL, with INIT, a TREE_LIST of
603 arguments. If TREE_LIST is void_type_node, an empty initializer
604 list was given; if NULL_TREE no initializer was given. */
607 perform_member_init (tree member
, tree init
)
610 tree type
= TREE_TYPE (member
);
612 /* Use the non-static data member initializer if there was no
613 mem-initializer for this field. */
614 if (init
== NULL_TREE
)
615 init
= get_nsdmi (member
, /*ctor*/true);
617 if (init
== error_mark_node
)
620 /* Effective C++ rule 12 requires that all data members be
622 if (warn_ecpp
&& init
== NULL_TREE
&& TREE_CODE (type
) != ARRAY_TYPE
)
623 warning_at (DECL_SOURCE_LOCATION (current_function_decl
), OPT_Weffc__
,
624 "%qD should be initialized in the member initialization list",
627 /* Get an lvalue for the data member. */
628 decl
= build_class_member_access_expr (current_class_ref
, member
,
629 /*access_path=*/NULL_TREE
,
630 /*preserve_reference=*/true,
631 tf_warning_or_error
);
632 if (decl
== error_mark_node
)
635 if (warn_init_self
&& init
&& TREE_CODE (init
) == TREE_LIST
636 && TREE_CHAIN (init
) == NULL_TREE
)
638 tree val
= TREE_VALUE (init
);
639 /* Handle references. */
640 if (REFERENCE_REF_P (val
))
641 val
= TREE_OPERAND (val
, 0);
642 if (TREE_CODE (val
) == COMPONENT_REF
&& TREE_OPERAND (val
, 1) == member
643 && TREE_OPERAND (val
, 0) == current_class_ref
)
644 warning_at (DECL_SOURCE_LOCATION (current_function_decl
),
645 OPT_Winit_self
, "%qD is initialized with itself",
649 if (init
== void_type_node
)
651 /* mem() means value-initialization. */
652 if (TREE_CODE (type
) == ARRAY_TYPE
)
654 init
= build_vec_init_expr (type
, init
, tf_warning_or_error
);
655 init
= build2 (INIT_EXPR
, type
, decl
, init
);
656 finish_expr_stmt (init
);
660 tree value
= build_value_init (type
, tf_warning_or_error
);
661 if (value
== error_mark_node
)
663 init
= build2 (INIT_EXPR
, type
, decl
, value
);
664 finish_expr_stmt (init
);
667 /* Deal with this here, as we will get confused if we try to call the
668 assignment op for an anonymous union. This can happen in a
669 synthesized copy constructor. */
670 else if (ANON_AGGR_TYPE_P (type
))
674 init
= build2 (INIT_EXPR
, type
, decl
, TREE_VALUE (init
));
675 finish_expr_stmt (init
);
679 && (TREE_CODE (type
) == REFERENCE_TYPE
680 /* Pre-digested NSDMI. */
681 || (((TREE_CODE (init
) == CONSTRUCTOR
682 && TREE_TYPE (init
) == type
)
683 /* { } mem-initializer. */
684 || (TREE_CODE (init
) == TREE_LIST
685 && DIRECT_LIST_INIT_P (TREE_VALUE (init
))))
686 && (CP_AGGREGATE_TYPE_P (type
)
687 || is_std_init_list (type
)))))
689 /* With references and list-initialization, we need to deal with
690 extending temporary lifetimes. 12.2p5: "A temporary bound to a
691 reference member in a constructor’s ctor-initializer (12.6.2)
692 persists until the constructor exits." */
694 vec
<tree
, va_gc
> *cleanups
= make_tree_vector ();
695 if (TREE_CODE (init
) == TREE_LIST
)
696 init
= build_x_compound_expr_from_list (init
, ELK_MEM_INIT
,
697 tf_warning_or_error
);
698 if (TREE_TYPE (init
) != type
)
700 if (BRACE_ENCLOSED_INITIALIZER_P (init
)
701 && CP_AGGREGATE_TYPE_P (type
))
702 init
= reshape_init (type
, init
, tf_warning_or_error
);
703 init
= digest_init (type
, init
, tf_warning_or_error
);
705 if (init
== error_mark_node
)
707 /* A FIELD_DECL doesn't really have a suitable lifetime, but
708 make_temporary_var_for_ref_to_temp will treat it as automatic and
709 set_up_extended_ref_temp wants to use the decl in a warning. */
710 init
= extend_ref_init_temps (member
, init
, &cleanups
);
711 if (TREE_CODE (type
) == ARRAY_TYPE
712 && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (type
)))
713 init
= build_vec_init_expr (type
, init
, tf_warning_or_error
);
714 init
= build2 (INIT_EXPR
, type
, decl
, init
);
715 finish_expr_stmt (init
);
716 FOR_EACH_VEC_ELT (*cleanups
, i
, t
)
717 push_cleanup (decl
, t
, false);
718 release_tree_vector (cleanups
);
720 else if (type_build_ctor_call (type
)
721 || (init
&& CLASS_TYPE_P (strip_array_types (type
))))
723 if (TREE_CODE (type
) == ARRAY_TYPE
)
727 if (TREE_CHAIN (init
))
728 init
= error_mark_node
;
730 init
= TREE_VALUE (init
);
731 if (BRACE_ENCLOSED_INITIALIZER_P (init
))
732 init
= digest_init (type
, init
, tf_warning_or_error
);
734 if (init
== NULL_TREE
735 || same_type_ignoring_top_level_qualifiers_p (type
,
738 init
= build_vec_init_expr (type
, init
, tf_warning_or_error
);
739 init
= build2 (INIT_EXPR
, type
, decl
, init
);
740 finish_expr_stmt (init
);
743 error ("invalid initializer for array member %q#D", member
);
747 int flags
= LOOKUP_NORMAL
;
748 if (DECL_DEFAULTED_FN (current_function_decl
))
749 flags
|= LOOKUP_DEFAULTED
;
750 if (CP_TYPE_CONST_P (type
)
752 && default_init_uninitialized_part (type
))
754 /* TYPE_NEEDS_CONSTRUCTING can be set just because we have a
755 vtable; still give this diagnostic. */
756 if (permerror (DECL_SOURCE_LOCATION (current_function_decl
),
757 "uninitialized const member in %q#T", type
))
758 inform (DECL_SOURCE_LOCATION (member
),
759 "%q#D should be initialized", member
);
761 finish_expr_stmt (build_aggr_init (decl
, init
, flags
,
762 tf_warning_or_error
));
767 if (init
== NULL_TREE
)
770 /* member traversal: note it leaves init NULL */
771 if (TREE_CODE (type
) == REFERENCE_TYPE
)
773 if (permerror (DECL_SOURCE_LOCATION (current_function_decl
),
774 "uninitialized reference member in %q#T", type
))
775 inform (DECL_SOURCE_LOCATION (member
),
776 "%q#D should be initialized", member
);
778 else if (CP_TYPE_CONST_P (type
))
780 if (permerror (DECL_SOURCE_LOCATION (current_function_decl
),
781 "uninitialized const member in %q#T", type
))
782 inform (DECL_SOURCE_LOCATION (member
),
783 "%q#D should be initialized", member
);
786 core_type
= strip_array_types (type
);
788 if (CLASS_TYPE_P (core_type
)
789 && (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type
)
790 || CLASSTYPE_REF_FIELDS_NEED_INIT (core_type
)))
791 diagnose_uninitialized_cst_or_ref_member (core_type
,
795 else if (TREE_CODE (init
) == TREE_LIST
)
796 /* There was an explicit member initialization. Do some work
798 init
= build_x_compound_expr_from_list (init
, ELK_MEM_INIT
,
799 tf_warning_or_error
);
802 finish_expr_stmt (cp_build_modify_expr (decl
, INIT_EXPR
, init
,
803 tf_warning_or_error
));
806 if (type_build_dtor_call (type
))
810 expr
= build_class_member_access_expr (current_class_ref
, member
,
811 /*access_path=*/NULL_TREE
,
812 /*preserve_reference=*/false,
813 tf_warning_or_error
);
814 expr
= build_delete (type
, expr
, sfk_complete_destructor
,
815 LOOKUP_NONVIRTUAL
|LOOKUP_DESTRUCTOR
, 0,
816 tf_warning_or_error
);
818 if (expr
!= error_mark_node
819 && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type
))
820 finish_eh_cleanup (expr
);
824 /* Returns a TREE_LIST containing (as the TREE_PURPOSE of each node) all
825 the FIELD_DECLs on the TYPE_FIELDS list for T, in reverse order. */
828 build_field_list (tree t
, tree list
, int *uses_unions_p
)
832 /* Note whether or not T is a union. */
833 if (TREE_CODE (t
) == UNION_TYPE
)
836 for (fields
= TYPE_FIELDS (t
); fields
; fields
= DECL_CHAIN (fields
))
840 /* Skip CONST_DECLs for enumeration constants and so forth. */
841 if (TREE_CODE (fields
) != FIELD_DECL
|| DECL_ARTIFICIAL (fields
))
844 fieldtype
= TREE_TYPE (fields
);
845 /* Keep track of whether or not any fields are unions. */
846 if (TREE_CODE (fieldtype
) == UNION_TYPE
)
849 /* For an anonymous struct or union, we must recursively
850 consider the fields of the anonymous type. They can be
851 directly initialized from the constructor. */
852 if (ANON_AGGR_TYPE_P (fieldtype
))
854 /* Add this field itself. Synthesized copy constructors
855 initialize the entire aggregate. */
856 list
= tree_cons (fields
, NULL_TREE
, list
);
857 /* And now add the fields in the anonymous aggregate. */
858 list
= build_field_list (fieldtype
, list
, uses_unions_p
);
860 /* Add this field. */
861 else if (DECL_NAME (fields
))
862 list
= tree_cons (fields
, NULL_TREE
, list
);
868 /* The MEM_INITS are a TREE_LIST. The TREE_PURPOSE of each list gives
869 a FIELD_DECL or BINFO in T that needs initialization. The
870 TREE_VALUE gives the initializer, or list of initializer arguments.
872 Return a TREE_LIST containing all of the initializations required
873 for T, in the order in which they should be performed. The output
874 list has the same format as the input. */
877 sort_mem_initializers (tree t
, tree mem_inits
)
880 tree base
, binfo
, base_binfo
;
883 vec
<tree
, va_gc
> *vbases
;
885 int uses_unions_p
= 0;
887 /* Build up a list of initializations. The TREE_PURPOSE of entry
888 will be the subobject (a FIELD_DECL or BINFO) to initialize. The
889 TREE_VALUE will be the constructor arguments, or NULL if no
890 explicit initialization was provided. */
891 sorted_inits
= NULL_TREE
;
893 /* Process the virtual bases. */
894 for (vbases
= CLASSTYPE_VBASECLASSES (t
), i
= 0;
895 vec_safe_iterate (vbases
, i
, &base
); i
++)
896 sorted_inits
= tree_cons (base
, NULL_TREE
, sorted_inits
);
898 /* Process the direct bases. */
899 for (binfo
= TYPE_BINFO (t
), i
= 0;
900 BINFO_BASE_ITERATE (binfo
, i
, base_binfo
); ++i
)
901 if (!BINFO_VIRTUAL_P (base_binfo
))
902 sorted_inits
= tree_cons (base_binfo
, NULL_TREE
, sorted_inits
);
904 /* Process the non-static data members. */
905 sorted_inits
= build_field_list (t
, sorted_inits
, &uses_unions_p
);
906 /* Reverse the entire list of initializations, so that they are in
907 the order that they will actually be performed. */
908 sorted_inits
= nreverse (sorted_inits
);
910 /* If the user presented the initializers in an order different from
911 that in which they will actually occur, we issue a warning. Keep
912 track of the next subobject which can be explicitly initialized
913 without issuing a warning. */
914 next_subobject
= sorted_inits
;
916 /* Go through the explicit initializers, filling in TREE_PURPOSE in
918 for (init
= mem_inits
; init
; init
= TREE_CHAIN (init
))
923 subobject
= TREE_PURPOSE (init
);
925 /* If the explicit initializers are in sorted order, then
926 SUBOBJECT will be NEXT_SUBOBJECT, or something following
928 for (subobject_init
= next_subobject
;
930 subobject_init
= TREE_CHAIN (subobject_init
))
931 if (TREE_PURPOSE (subobject_init
) == subobject
)
934 /* Issue a warning if the explicit initializer order does not
935 match that which will actually occur.
936 ??? Are all these on the correct lines? */
937 if (warn_reorder
&& !subobject_init
)
939 if (TREE_CODE (TREE_PURPOSE (next_subobject
)) == FIELD_DECL
)
940 warning (OPT_Wreorder
, "%q+D will be initialized after",
941 TREE_PURPOSE (next_subobject
));
943 warning (OPT_Wreorder
, "base %qT will be initialized after",
944 TREE_PURPOSE (next_subobject
));
945 if (TREE_CODE (subobject
) == FIELD_DECL
)
946 warning (OPT_Wreorder
, " %q+#D", subobject
);
948 warning (OPT_Wreorder
, " base %qT", subobject
);
949 warning_at (DECL_SOURCE_LOCATION (current_function_decl
),
950 OPT_Wreorder
, " when initialized here");
953 /* Look again, from the beginning of the list. */
956 subobject_init
= sorted_inits
;
957 while (TREE_PURPOSE (subobject_init
) != subobject
)
958 subobject_init
= TREE_CHAIN (subobject_init
);
961 /* It is invalid to initialize the same subobject more than
963 if (TREE_VALUE (subobject_init
))
965 if (TREE_CODE (subobject
) == FIELD_DECL
)
966 error_at (DECL_SOURCE_LOCATION (current_function_decl
),
967 "multiple initializations given for %qD",
970 error_at (DECL_SOURCE_LOCATION (current_function_decl
),
971 "multiple initializations given for base %qT",
975 /* Record the initialization. */
976 TREE_VALUE (subobject_init
) = TREE_VALUE (init
);
977 next_subobject
= subobject_init
;
982 If a ctor-initializer specifies more than one mem-initializer for
983 multiple members of the same union (including members of
984 anonymous unions), the ctor-initializer is ill-formed.
986 Here we also splice out uninitialized union members. */
991 for (p
= &sorted_inits
; *p
; )
998 field
= TREE_PURPOSE (init
);
1000 /* Skip base classes. */
1001 if (TREE_CODE (field
) != FIELD_DECL
)
1004 /* If this is an anonymous union with no explicit initializer,
1006 if (!TREE_VALUE (init
) && ANON_UNION_TYPE_P (TREE_TYPE (field
)))
1009 /* See if this field is a member of a union, or a member of a
1010 structure contained in a union, etc. */
1011 for (ctx
= DECL_CONTEXT (field
);
1012 !same_type_p (ctx
, t
);
1013 ctx
= TYPE_CONTEXT (ctx
))
1014 if (TREE_CODE (ctx
) == UNION_TYPE
1015 || !ANON_AGGR_TYPE_P (ctx
))
1017 /* If this field is not a member of a union, skip it. */
1018 if (TREE_CODE (ctx
) != UNION_TYPE
)
1021 /* If this union member has no explicit initializer and no NSDMI,
1023 if (TREE_VALUE (init
) || DECL_INITIAL (field
))
1028 /* It's only an error if we have two initializers for the same
1036 /* See if LAST_FIELD and the field initialized by INIT are
1037 members of the same union. If so, there's a problem,
1038 unless they're actually members of the same structure
1039 which is itself a member of a union. For example, given:
1041 union { struct { int i; int j; }; };
1043 initializing both `i' and `j' makes sense. */
1044 ctx
= common_enclosing_class (DECL_CONTEXT (field
),
1045 DECL_CONTEXT (TREE_PURPOSE (*last_p
)));
1047 if (ctx
&& TREE_CODE (ctx
) == UNION_TYPE
)
1049 /* A mem-initializer hides an NSDMI. */
1050 if (TREE_VALUE (init
) && !TREE_VALUE (*last_p
))
1051 *last_p
= TREE_CHAIN (*last_p
);
1052 else if (TREE_VALUE (*last_p
) && !TREE_VALUE (init
))
1056 error_at (DECL_SOURCE_LOCATION (current_function_decl
),
1057 "initializations for multiple members of %qT",
1066 p
= &TREE_CHAIN (*p
);
1069 *p
= TREE_CHAIN (*p
);
1074 return sorted_inits
;
1077 /* Initialize all bases and members of CURRENT_CLASS_TYPE. MEM_INITS
1078 is a TREE_LIST giving the explicit mem-initializer-list for the
1079 constructor. The TREE_PURPOSE of each entry is a subobject (a
1080 FIELD_DECL or a BINFO) of the CURRENT_CLASS_TYPE. The TREE_VALUE
1081 is a TREE_LIST giving the arguments to the constructor or
1082 void_type_node for an empty list of arguments. */
1085 emit_mem_initializers (tree mem_inits
)
1087 int flags
= LOOKUP_NORMAL
;
1089 /* We will already have issued an error message about the fact that
1090 the type is incomplete. */
1091 if (!COMPLETE_TYPE_P (current_class_type
))
1095 && TYPE_P (TREE_PURPOSE (mem_inits
))
1096 && same_type_p (TREE_PURPOSE (mem_inits
), current_class_type
))
1098 /* Delegating constructor. */
1099 gcc_assert (TREE_CHAIN (mem_inits
) == NULL_TREE
);
1100 perform_target_ctor (TREE_VALUE (mem_inits
));
1104 if (DECL_DEFAULTED_FN (current_function_decl
)
1105 && ! DECL_INHERITED_CTOR_BASE (current_function_decl
))
1106 flags
|= LOOKUP_DEFAULTED
;
1108 /* Sort the mem-initializers into the order in which the
1109 initializations should be performed. */
1110 mem_inits
= sort_mem_initializers (current_class_type
, mem_inits
);
1112 in_base_initializer
= 1;
1114 /* Initialize base classes. */
1116 && TREE_CODE (TREE_PURPOSE (mem_inits
)) != FIELD_DECL
);
1117 mem_inits
= TREE_CHAIN (mem_inits
))
1119 tree subobject
= TREE_PURPOSE (mem_inits
);
1120 tree arguments
= TREE_VALUE (mem_inits
);
1122 /* We already have issued an error message. */
1123 if (arguments
== error_mark_node
)
1126 if (arguments
== NULL_TREE
)
1128 /* If these initializations are taking place in a copy constructor,
1129 the base class should probably be explicitly initialized if there
1130 is a user-defined constructor in the base class (other than the
1131 default constructor, which will be called anyway). */
1133 && DECL_COPY_CONSTRUCTOR_P (current_function_decl
)
1134 && type_has_user_nondefault_constructor (BINFO_TYPE (subobject
)))
1135 warning_at (DECL_SOURCE_LOCATION (current_function_decl
),
1136 OPT_Wextra
, "base class %q#T should be explicitly "
1137 "initialized in the copy constructor",
1138 BINFO_TYPE (subobject
));
1141 /* Initialize the base. */
1142 if (BINFO_VIRTUAL_P (subobject
))
1143 construct_virtual_base (subobject
, arguments
);
1148 base_addr
= build_base_path (PLUS_EXPR
, current_class_ptr
,
1149 subobject
, 1, tf_warning_or_error
);
1150 expand_aggr_init_1 (subobject
, NULL_TREE
,
1151 cp_build_indirect_ref (base_addr
, RO_NULL
,
1152 tf_warning_or_error
),
1155 tf_warning_or_error
);
1156 expand_cleanup_for_base (subobject
, NULL_TREE
);
1159 in_base_initializer
= 0;
1161 /* Initialize the vptrs. */
1162 initialize_vtbl_ptrs (current_class_ptr
);
1164 /* Initialize the data members. */
1167 perform_member_init (TREE_PURPOSE (mem_inits
),
1168 TREE_VALUE (mem_inits
));
1169 mem_inits
= TREE_CHAIN (mem_inits
);
1173 /* Returns the address of the vtable (i.e., the value that should be
1174 assigned to the vptr) for BINFO. */
1177 build_vtbl_address (tree binfo
)
1179 tree binfo_for
= binfo
;
1182 if (BINFO_VPTR_INDEX (binfo
) && BINFO_VIRTUAL_P (binfo
))
1183 /* If this is a virtual primary base, then the vtable we want to store
1184 is that for the base this is being used as the primary base of. We
1185 can't simply skip the initialization, because we may be expanding the
1186 inits of a subobject constructor where the virtual base layout
1187 can be different. */
1188 while (BINFO_PRIMARY_P (binfo_for
))
1189 binfo_for
= BINFO_INHERITANCE_CHAIN (binfo_for
);
1191 /* Figure out what vtable BINFO's vtable is based on, and mark it as
1193 vtbl
= get_vtbl_decl_for_binfo (binfo_for
);
1194 TREE_USED (vtbl
) = true;
1196 /* Now compute the address to use when initializing the vptr. */
1197 vtbl
= unshare_expr (BINFO_VTABLE (binfo_for
));
1199 vtbl
= build1 (ADDR_EXPR
, build_pointer_type (TREE_TYPE (vtbl
)), vtbl
);
1204 /* This code sets up the virtual function tables appropriate for
1205 the pointer DECL. It is a one-ply initialization.
1207 BINFO is the exact type that DECL is supposed to be. In
1208 multiple inheritance, this might mean "C's A" if C : A, B. */
1211 expand_virtual_init (tree binfo
, tree decl
)
1213 tree vtbl
, vtbl_ptr
;
1216 /* Compute the initializer for vptr. */
1217 vtbl
= build_vtbl_address (binfo
);
1219 /* We may get this vptr from a VTT, if this is a subobject
1220 constructor or subobject destructor. */
1221 vtt_index
= BINFO_VPTR_INDEX (binfo
);
1227 /* Compute the value to use, when there's a VTT. */
1228 vtt_parm
= current_vtt_parm
;
1229 vtbl2
= fold_build_pointer_plus (vtt_parm
, vtt_index
);
1230 vtbl2
= cp_build_indirect_ref (vtbl2
, RO_NULL
, tf_warning_or_error
);
1231 vtbl2
= convert (TREE_TYPE (vtbl
), vtbl2
);
1233 /* The actual initializer is the VTT value only in the subobject
1234 constructor. In maybe_clone_body we'll substitute NULL for
1235 the vtt_parm in the case of the non-subobject constructor. */
1236 vtbl
= build3 (COND_EXPR
,
1238 build2 (EQ_EXPR
, boolean_type_node
,
1239 current_in_charge_parm
, integer_zero_node
),
1244 /* Compute the location of the vtpr. */
1245 vtbl_ptr
= build_vfield_ref (cp_build_indirect_ref (decl
, RO_NULL
,
1246 tf_warning_or_error
),
1248 gcc_assert (vtbl_ptr
!= error_mark_node
);
1250 /* Assign the vtable to the vptr. */
1251 vtbl
= convert_force (TREE_TYPE (vtbl_ptr
), vtbl
, 0, tf_warning_or_error
);
1252 finish_expr_stmt (cp_build_modify_expr (vtbl_ptr
, NOP_EXPR
, vtbl
,
1253 tf_warning_or_error
));
1256 /* If an exception is thrown in a constructor, those base classes already
1257 constructed must be destroyed. This function creates the cleanup
1258 for BINFO, which has just been constructed. If FLAG is non-NULL,
1259 it is a DECL which is nonzero when this base needs to be
1263 expand_cleanup_for_base (tree binfo
, tree flag
)
1267 if (!type_build_dtor_call (BINFO_TYPE (binfo
)))
1270 /* Call the destructor. */
1271 expr
= build_special_member_call (current_class_ref
,
1272 base_dtor_identifier
,
1275 LOOKUP_NORMAL
| LOOKUP_NONVIRTUAL
,
1276 tf_warning_or_error
);
1278 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (BINFO_TYPE (binfo
)))
1282 expr
= fold_build3_loc (input_location
,
1283 COND_EXPR
, void_type_node
,
1284 c_common_truthvalue_conversion (input_location
, flag
),
1285 expr
, integer_zero_node
);
1287 finish_eh_cleanup (expr
);
1290 /* Construct the virtual base-class VBASE passing the ARGUMENTS to its
1294 construct_virtual_base (tree vbase
, tree arguments
)
1300 /* If there are virtual base classes with destructors, we need to
1301 emit cleanups to destroy them if an exception is thrown during
1302 the construction process. These exception regions (i.e., the
1303 period during which the cleanups must occur) begin from the time
1304 the construction is complete to the end of the function. If we
1305 create a conditional block in which to initialize the
1306 base-classes, then the cleanup region for the virtual base begins
1307 inside a block, and ends outside of that block. This situation
1308 confuses the sjlj exception-handling code. Therefore, we do not
1309 create a single conditional block, but one for each
1310 initialization. (That way the cleanup regions always begin
1311 in the outer block.) We trust the back end to figure out
1312 that the FLAG will not change across initializations, and
1313 avoid doing multiple tests. */
1314 flag
= DECL_CHAIN (DECL_ARGUMENTS (current_function_decl
));
1315 inner_if_stmt
= begin_if_stmt ();
1316 finish_if_stmt_cond (flag
, inner_if_stmt
);
1318 /* Compute the location of the virtual base. If we're
1319 constructing virtual bases, then we must be the most derived
1320 class. Therefore, we don't have to look up the virtual base;
1321 we already know where it is. */
1322 exp
= convert_to_base_statically (current_class_ref
, vbase
);
1324 expand_aggr_init_1 (vbase
, current_class_ref
, exp
, arguments
,
1325 0, tf_warning_or_error
);
1326 finish_then_clause (inner_if_stmt
);
1327 finish_if_stmt (inner_if_stmt
);
1329 expand_cleanup_for_base (vbase
, flag
);
1332 /* Find the context in which this FIELD can be initialized. */
1335 initializing_context (tree field
)
1337 tree t
= DECL_CONTEXT (field
);
1339 /* Anonymous union members can be initialized in the first enclosing
1340 non-anonymous union context. */
1341 while (t
&& ANON_AGGR_TYPE_P (t
))
1342 t
= TYPE_CONTEXT (t
);
1346 /* Function to give error message if member initialization specification
1347 is erroneous. FIELD is the member we decided to initialize.
1348 TYPE is the type for which the initialization is being performed.
1349 FIELD must be a member of TYPE.
1351 MEMBER_NAME is the name of the member. */
1354 member_init_ok_or_else (tree field
, tree type
, tree member_name
)
1356 if (field
== error_mark_node
)
1360 error ("class %qT does not have any field named %qD", type
,
1366 error ("%q#D is a static data member; it can only be "
1367 "initialized at its definition",
1371 if (TREE_CODE (field
) != FIELD_DECL
)
1373 error ("%q#D is not a non-static data member of %qT",
1377 if (initializing_context (field
) != type
)
1379 error ("class %qT does not have any field named %qD", type
,
1387 /* NAME is a FIELD_DECL, an IDENTIFIER_NODE which names a field, or it
1388 is a _TYPE node or TYPE_DECL which names a base for that type.
1389 Check the validity of NAME, and return either the base _TYPE, base
1390 binfo, or the FIELD_DECL of the member. If NAME is invalid, return
1391 NULL_TREE and issue a diagnostic.
1393 An old style unnamed direct single base construction is permitted,
1394 where NAME is NULL. */
1397 expand_member_init (tree name
)
1402 if (!current_class_ref
)
1407 /* This is an obsolete unnamed base class initializer. The
1408 parser will already have warned about its use. */
1409 switch (BINFO_N_BASE_BINFOS (TYPE_BINFO (current_class_type
)))
1412 error ("unnamed initializer for %qT, which has no base classes",
1413 current_class_type
);
1416 basetype
= BINFO_TYPE
1417 (BINFO_BASE_BINFO (TYPE_BINFO (current_class_type
), 0));
1420 error ("unnamed initializer for %qT, which uses multiple inheritance",
1421 current_class_type
);
1425 else if (TYPE_P (name
))
1427 basetype
= TYPE_MAIN_VARIANT (name
);
1428 name
= TYPE_NAME (name
);
1430 else if (TREE_CODE (name
) == TYPE_DECL
)
1431 basetype
= TYPE_MAIN_VARIANT (TREE_TYPE (name
));
1433 basetype
= NULL_TREE
;
1442 if (current_template_parms
1443 || same_type_p (basetype
, current_class_type
))
1446 class_binfo
= TYPE_BINFO (current_class_type
);
1447 direct_binfo
= NULL_TREE
;
1448 virtual_binfo
= NULL_TREE
;
1450 /* Look for a direct base. */
1451 for (i
= 0; BINFO_BASE_ITERATE (class_binfo
, i
, direct_binfo
); ++i
)
1452 if (SAME_BINFO_TYPE_P (BINFO_TYPE (direct_binfo
), basetype
))
1455 /* Look for a virtual base -- unless the direct base is itself
1457 if (!direct_binfo
|| !BINFO_VIRTUAL_P (direct_binfo
))
1458 virtual_binfo
= binfo_for_vbase (basetype
, current_class_type
);
1460 /* [class.base.init]
1462 If a mem-initializer-id is ambiguous because it designates
1463 both a direct non-virtual base class and an inherited virtual
1464 base class, the mem-initializer is ill-formed. */
1465 if (direct_binfo
&& virtual_binfo
)
1467 error ("%qD is both a direct base and an indirect virtual base",
1472 if (!direct_binfo
&& !virtual_binfo
)
1474 if (CLASSTYPE_VBASECLASSES (current_class_type
))
1475 error ("type %qT is not a direct or virtual base of %qT",
1476 basetype
, current_class_type
);
1478 error ("type %qT is not a direct base of %qT",
1479 basetype
, current_class_type
);
1483 return direct_binfo
? direct_binfo
: virtual_binfo
;
1487 if (identifier_p (name
))
1488 field
= lookup_field (current_class_type
, name
, 1, false);
1492 if (member_init_ok_or_else (field
, current_class_type
, name
))
1499 /* This is like `expand_member_init', only it stores one aggregate
1502 INIT comes in two flavors: it is either a value which
1503 is to be stored in EXP, or it is a parameter list
1504 to go to a constructor, which will operate on EXP.
1505 If INIT is not a parameter list for a constructor, then set
1506 LOOKUP_ONLYCONVERTING.
1507 If FLAGS is LOOKUP_ONLYCONVERTING then it is the = init form of
1508 the initializer, if FLAGS is 0, then it is the (init) form.
1509 If `init' is a CONSTRUCTOR, then we emit a warning message,
1510 explaining that such initializations are invalid.
1512 If INIT resolves to a CALL_EXPR which happens to return
1513 something of the type we are looking for, then we know
1514 that we can safely use that call to perform the
1517 The virtual function table pointer cannot be set up here, because
1518 we do not really know its type.
1520 This never calls operator=().
1522 When initializing, nothing is CONST.
1524 A default copy constructor may have to be used to perform the
1527 A constructor or a conversion operator may have to be used to
1528 perform the initialization, but not both, as it would be ambiguous. */
1531 build_aggr_init (tree exp
, tree init
, int flags
, tsubst_flags_t complain
)
1536 tree type
= TREE_TYPE (exp
);
1537 int was_const
= TREE_READONLY (exp
);
1538 int was_volatile
= TREE_THIS_VOLATILE (exp
);
1541 if (init
== error_mark_node
)
1542 return error_mark_node
;
1544 TREE_READONLY (exp
) = 0;
1545 TREE_THIS_VOLATILE (exp
) = 0;
1547 if (init
&& init
!= void_type_node
1548 && TREE_CODE (init
) != TREE_LIST
1549 && !(TREE_CODE (init
) == TARGET_EXPR
1550 && TARGET_EXPR_DIRECT_INIT_P (init
))
1551 && !DIRECT_LIST_INIT_P (init
))
1552 flags
|= LOOKUP_ONLYCONVERTING
;
1554 if (TREE_CODE (type
) == ARRAY_TYPE
)
1558 /* An array may not be initialized use the parenthesized
1559 initialization form -- unless the initializer is "()". */
1560 if (init
&& TREE_CODE (init
) == TREE_LIST
)
1562 if (complain
& tf_error
)
1563 error ("bad array initializer");
1564 return error_mark_node
;
1566 /* Must arrange to initialize each element of EXP
1567 from elements of INIT. */
1568 itype
= init
? TREE_TYPE (init
) : NULL_TREE
;
1569 if (cv_qualified_p (type
))
1570 TREE_TYPE (exp
) = cv_unqualified (type
);
1571 if (itype
&& cv_qualified_p (itype
))
1572 TREE_TYPE (init
) = cv_unqualified (itype
);
1573 stmt_expr
= build_vec_init (exp
, NULL_TREE
, init
,
1574 /*explicit_value_init_p=*/false,
1575 itype
&& same_type_p (TREE_TYPE (init
),
1578 TREE_READONLY (exp
) = was_const
;
1579 TREE_THIS_VOLATILE (exp
) = was_volatile
;
1580 TREE_TYPE (exp
) = type
;
1581 /* Restore the type of init unless it was used directly. */
1582 if (init
&& TREE_CODE (stmt_expr
) != INIT_EXPR
)
1583 TREE_TYPE (init
) = itype
;
1587 if ((VAR_P (exp
) || TREE_CODE (exp
) == PARM_DECL
)
1588 && !lookup_attribute ("warn_unused", TYPE_ATTRIBUTES (type
)))
1589 /* Just know that we've seen something for this node. */
1590 TREE_USED (exp
) = 1;
1592 is_global
= begin_init_stmts (&stmt_expr
, &compound_stmt
);
1593 destroy_temps
= stmts_are_full_exprs_p ();
1594 current_stmt_tree ()->stmts_are_full_exprs_p
= 0;
1595 expand_aggr_init_1 (TYPE_BINFO (type
), exp
, exp
,
1596 init
, LOOKUP_NORMAL
|flags
, complain
);
1597 stmt_expr
= finish_init_stmts (is_global
, stmt_expr
, compound_stmt
);
1598 current_stmt_tree ()->stmts_are_full_exprs_p
= destroy_temps
;
1599 TREE_READONLY (exp
) = was_const
;
1600 TREE_THIS_VOLATILE (exp
) = was_volatile
;
1606 expand_default_init (tree binfo
, tree true_exp
, tree exp
, tree init
, int flags
,
1607 tsubst_flags_t complain
)
1609 tree type
= TREE_TYPE (exp
);
1612 /* It fails because there may not be a constructor which takes
1613 its own type as the first (or only parameter), but which does
1614 take other types via a conversion. So, if the thing initializing
1615 the expression is a unit element of type X, first try X(X&),
1616 followed by initialization by X. If neither of these work
1617 out, then look hard. */
1619 vec
<tree
, va_gc
> *parms
;
1621 /* If we have direct-initialization from an initializer list, pull
1622 it out of the TREE_LIST so the code below can see it. */
1623 if (init
&& TREE_CODE (init
) == TREE_LIST
1624 && DIRECT_LIST_INIT_P (TREE_VALUE (init
)))
1626 gcc_checking_assert ((flags
& LOOKUP_ONLYCONVERTING
) == 0
1627 && TREE_CHAIN (init
) == NULL_TREE
);
1628 init
= TREE_VALUE (init
);
1631 if (init
&& BRACE_ENCLOSED_INITIALIZER_P (init
)
1632 && CP_AGGREGATE_TYPE_P (type
))
1633 /* A brace-enclosed initializer for an aggregate. In C++0x this can
1634 happen for direct-initialization, too. */
1636 init
= reshape_init (type
, init
, complain
);
1637 init
= digest_init (type
, init
, complain
);
1640 /* A CONSTRUCTOR of the target's type is a previously digested
1641 initializer, whether that happened just above or in
1642 cp_parser_late_parsing_nsdmi.
1644 A TARGET_EXPR with TARGET_EXPR_DIRECT_INIT_P or TARGET_EXPR_LIST_INIT_P
1645 set represents the whole initialization, so we shouldn't build up
1646 another ctor call. */
1648 && (TREE_CODE (init
) == CONSTRUCTOR
1649 || (TREE_CODE (init
) == TARGET_EXPR
1650 && (TARGET_EXPR_DIRECT_INIT_P (init
)
1651 || TARGET_EXPR_LIST_INIT_P (init
))))
1652 && same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (init
), type
))
1654 /* Early initialization via a TARGET_EXPR only works for
1655 complete objects. */
1656 gcc_assert (TREE_CODE (init
) == CONSTRUCTOR
|| true_exp
== exp
);
1658 init
= build2 (INIT_EXPR
, TREE_TYPE (exp
), exp
, init
);
1659 TREE_SIDE_EFFECTS (init
) = 1;
1660 finish_expr_stmt (init
);
1664 if (init
&& TREE_CODE (init
) != TREE_LIST
1665 && (flags
& LOOKUP_ONLYCONVERTING
))
1667 /* Base subobjects should only get direct-initialization. */
1668 gcc_assert (true_exp
== exp
);
1670 if (flags
& DIRECT_BIND
)
1671 /* Do nothing. We hit this in two cases: Reference initialization,
1672 where we aren't initializing a real variable, so we don't want
1673 to run a new constructor; and catching an exception, where we
1674 have already built up the constructor call so we could wrap it
1675 in an exception region. */;
1677 init
= ocp_convert (type
, init
, CONV_IMPLICIT
|CONV_FORCE_TEMP
,
1680 if (TREE_CODE (init
) == MUST_NOT_THROW_EXPR
)
1681 /* We need to protect the initialization of a catch parm with a
1682 call to terminate(), which shows up as a MUST_NOT_THROW_EXPR
1683 around the TARGET_EXPR for the copy constructor. See
1684 initialize_handler_parm. */
1686 TREE_OPERAND (init
, 0) = build2 (INIT_EXPR
, TREE_TYPE (exp
), exp
,
1687 TREE_OPERAND (init
, 0));
1688 TREE_TYPE (init
) = void_type_node
;
1691 init
= build2 (INIT_EXPR
, TREE_TYPE (exp
), exp
, init
);
1692 TREE_SIDE_EFFECTS (init
) = 1;
1693 finish_expr_stmt (init
);
1697 if (init
== NULL_TREE
)
1699 else if (TREE_CODE (init
) == TREE_LIST
&& !TREE_TYPE (init
))
1701 parms
= make_tree_vector ();
1702 for (; init
!= NULL_TREE
; init
= TREE_CHAIN (init
))
1703 vec_safe_push (parms
, TREE_VALUE (init
));
1706 parms
= make_tree_vector_single (init
);
1708 if (exp
== current_class_ref
&& current_function_decl
1709 && DECL_HAS_IN_CHARGE_PARM_P (current_function_decl
))
1711 /* Delegating constructor. */
1714 tree elt
; unsigned i
;
1716 /* Unshare the arguments for the second call. */
1717 vec
<tree
, va_gc
> *parms2
= make_tree_vector ();
1718 FOR_EACH_VEC_SAFE_ELT (parms
, i
, elt
)
1720 elt
= break_out_target_exprs (elt
);
1721 vec_safe_push (parms2
, elt
);
1723 complete
= build_special_member_call (exp
, complete_ctor_identifier
,
1724 &parms2
, binfo
, flags
,
1726 complete
= fold_build_cleanup_point_expr (void_type_node
, complete
);
1727 release_tree_vector (parms2
);
1729 base
= build_special_member_call (exp
, base_ctor_identifier
,
1730 &parms
, binfo
, flags
,
1732 base
= fold_build_cleanup_point_expr (void_type_node
, base
);
1733 rval
= build3 (COND_EXPR
, void_type_node
,
1734 build2 (EQ_EXPR
, boolean_type_node
,
1735 current_in_charge_parm
, integer_zero_node
),
1741 if (true_exp
== exp
)
1742 ctor_name
= complete_ctor_identifier
;
1744 ctor_name
= base_ctor_identifier
;
1745 rval
= build_special_member_call (exp
, ctor_name
, &parms
, binfo
, flags
,
1750 release_tree_vector (parms
);
1752 if (exp
== true_exp
&& TREE_CODE (rval
) == CALL_EXPR
)
1754 tree fn
= get_callee_fndecl (rval
);
1755 if (fn
&& DECL_DECLARED_CONSTEXPR_P (fn
))
1757 tree e
= maybe_constant_init (rval
, exp
);
1758 if (TREE_CONSTANT (e
))
1759 rval
= build2 (INIT_EXPR
, type
, exp
, e
);
1763 /* FIXME put back convert_to_void? */
1764 if (TREE_SIDE_EFFECTS (rval
))
1765 finish_expr_stmt (rval
);
1768 /* This function is responsible for initializing EXP with INIT
1771 BINFO is the binfo of the type for who we are performing the
1772 initialization. For example, if W is a virtual base class of A and B,
1774 If we are initializing B, then W must contain B's W vtable, whereas
1775 were we initializing C, W must contain C's W vtable.
1777 TRUE_EXP is nonzero if it is the true expression being initialized.
1778 In this case, it may be EXP, or may just contain EXP. The reason we
1779 need this is because if EXP is a base element of TRUE_EXP, we
1780 don't necessarily know by looking at EXP where its virtual
1781 baseclass fields should really be pointing. But we do know
1782 from TRUE_EXP. In constructors, we don't know anything about
1783 the value being initialized.
1785 FLAGS is just passed to `build_new_method_call'. See that function
1786 for its description. */
1789 expand_aggr_init_1 (tree binfo
, tree true_exp
, tree exp
, tree init
, int flags
,
1790 tsubst_flags_t complain
)
1792 tree type
= TREE_TYPE (exp
);
1794 gcc_assert (init
!= error_mark_node
&& type
!= error_mark_node
);
1795 gcc_assert (building_stmt_list_p ());
1797 /* Use a function returning the desired type to initialize EXP for us.
1798 If the function is a constructor, and its first argument is
1799 NULL_TREE, know that it was meant for us--just slide exp on
1800 in and expand the constructor. Constructors now come
1803 if (init
&& VAR_P (exp
)
1804 && COMPOUND_LITERAL_P (init
))
1806 vec
<tree
, va_gc
> *cleanups
= NULL
;
1807 /* If store_init_value returns NULL_TREE, the INIT has been
1808 recorded as the DECL_INITIAL for EXP. That means there's
1809 nothing more we have to do. */
1810 init
= store_init_value (exp
, init
, &cleanups
, flags
);
1812 finish_expr_stmt (init
);
1813 gcc_assert (!cleanups
);
1817 /* If an explicit -- but empty -- initializer list was present,
1818 that's value-initialization. */
1819 if (init
== void_type_node
)
1821 /* If the type has data but no user-provided ctor, we need to zero
1823 if (!type_has_user_provided_constructor (type
)
1824 && !is_really_empty_class (type
))
1826 tree field_size
= NULL_TREE
;
1827 if (exp
!= true_exp
&& CLASSTYPE_AS_BASE (type
) != type
)
1828 /* Don't clobber already initialized virtual bases. */
1829 field_size
= TYPE_SIZE (CLASSTYPE_AS_BASE (type
));
1830 init
= build_zero_init_1 (type
, NULL_TREE
, /*static_storage_p=*/false,
1832 init
= build2 (INIT_EXPR
, type
, exp
, init
);
1833 finish_expr_stmt (init
);
1836 /* If we don't need to mess with the constructor at all,
1838 if (! type_build_ctor_call (type
))
1841 /* Otherwise fall through and call the constructor. */
1845 /* We know that expand_default_init can handle everything we want
1847 expand_default_init (binfo
, true_exp
, exp
, init
, flags
, complain
);
1850 /* Report an error if TYPE is not a user-defined, class type. If
1851 OR_ELSE is nonzero, give an error message. */
1854 is_class_type (tree type
, int or_else
)
1856 if (type
== error_mark_node
)
1859 if (! CLASS_TYPE_P (type
))
1862 error ("%qT is not a class type", type
);
1869 get_type_value (tree name
)
1871 if (name
== error_mark_node
)
1874 if (IDENTIFIER_HAS_TYPE_VALUE (name
))
1875 return IDENTIFIER_TYPE_VALUE (name
);
1880 /* Build a reference to a member of an aggregate. This is not a C++
1881 `&', but really something which can have its address taken, and
1882 then act as a pointer to member, for example TYPE :: FIELD can have
1883 its address taken by saying & TYPE :: FIELD. ADDRESS_P is true if
1884 this expression is the operand of "&".
1886 @@ Prints out lousy diagnostics for operator <typename>
1889 @@ This function should be rewritten and placed in search.c. */
1892 build_offset_ref (tree type
, tree member
, bool address_p
,
1893 tsubst_flags_t complain
)
1896 tree basebinfo
= NULL_TREE
;
1898 /* class templates can come in as TEMPLATE_DECLs here. */
1899 if (TREE_CODE (member
) == TEMPLATE_DECL
)
1902 if (dependent_scope_p (type
) || type_dependent_expression_p (member
))
1903 return build_qualified_name (NULL_TREE
, type
, member
,
1904 /*template_p=*/false);
1906 gcc_assert (TYPE_P (type
));
1907 if (! is_class_type (type
, 1))
1908 return error_mark_node
;
1910 gcc_assert (DECL_P (member
) || BASELINK_P (member
));
1911 /* Callers should call mark_used before this point. */
1912 gcc_assert (!DECL_P (member
) || TREE_USED (member
));
1914 type
= TYPE_MAIN_VARIANT (type
);
1915 if (!COMPLETE_OR_OPEN_TYPE_P (complete_type (type
)))
1917 if (complain
& tf_error
)
1918 error ("incomplete type %qT does not have member %qD", type
, member
);
1919 return error_mark_node
;
1922 /* Entities other than non-static members need no further
1924 if (TREE_CODE (member
) == TYPE_DECL
)
1926 if (VAR_P (member
) || TREE_CODE (member
) == CONST_DECL
)
1927 return convert_from_reference (member
);
1929 if (TREE_CODE (member
) == FIELD_DECL
&& DECL_C_BIT_FIELD (member
))
1931 if (complain
& tf_error
)
1932 error ("invalid pointer to bit-field %qD", member
);
1933 return error_mark_node
;
1936 /* Set up BASEBINFO for member lookup. */
1937 decl
= maybe_dummy_object (type
, &basebinfo
);
1939 /* A lot of this logic is now handled in lookup_member. */
1940 if (BASELINK_P (member
))
1942 /* Go from the TREE_BASELINK to the member function info. */
1943 tree t
= BASELINK_FUNCTIONS (member
);
1945 if (TREE_CODE (t
) != TEMPLATE_ID_EXPR
&& !really_overloaded_fn (t
))
1947 /* Get rid of a potential OVERLOAD around it. */
1948 t
= OVL_CURRENT (t
);
1950 /* Unique functions are handled easily. */
1952 /* For non-static member of base class, we need a special rule
1953 for access checking [class.protected]:
1955 If the access is to form a pointer to member, the
1956 nested-name-specifier shall name the derived class
1957 (or any class derived from that class). */
1958 if (address_p
&& DECL_P (t
)
1959 && DECL_NONSTATIC_MEMBER_P (t
))
1960 perform_or_defer_access_check (TYPE_BINFO (type
), t
, t
,
1963 perform_or_defer_access_check (basebinfo
, t
, t
,
1966 if (DECL_STATIC_FUNCTION_P (t
))
1971 TREE_TYPE (member
) = unknown_type_node
;
1973 else if (address_p
&& TREE_CODE (member
) == FIELD_DECL
)
1974 /* We need additional test besides the one in
1975 check_accessibility_of_qualified_id in case it is
1976 a pointer to non-static member. */
1977 perform_or_defer_access_check (TYPE_BINFO (type
), member
, member
,
1982 /* If MEMBER is non-static, then the program has fallen afoul of
1985 An id-expression that denotes a nonstatic data member or
1986 nonstatic member function of a class can only be used:
1988 -- as part of a class member access (_expr.ref_) in which the
1989 object-expression refers to the member's class or a class
1990 derived from that class, or
1992 -- to form a pointer to member (_expr.unary.op_), or
1994 -- in the body of a nonstatic member function of that class or
1995 of a class derived from that class (_class.mfct.nonstatic_), or
1997 -- in a mem-initializer for a constructor for that class or for
1998 a class derived from that class (_class.base.init_). */
1999 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (member
))
2001 /* Build a representation of the qualified name suitable
2002 for use as the operand to "&" -- even though the "&" is
2003 not actually present. */
2004 member
= build2 (OFFSET_REF
, TREE_TYPE (member
), decl
, member
);
2005 /* In Microsoft mode, treat a non-static member function as if
2006 it were a pointer-to-member. */
2007 if (flag_ms_extensions
)
2009 PTRMEM_OK_P (member
) = 1;
2010 return cp_build_addr_expr (member
, complain
);
2012 if (complain
& tf_error
)
2013 error ("invalid use of non-static member function %qD",
2014 TREE_OPERAND (member
, 1));
2015 return error_mark_node
;
2017 else if (TREE_CODE (member
) == FIELD_DECL
)
2019 if (complain
& tf_error
)
2020 error ("invalid use of non-static data member %qD", member
);
2021 return error_mark_node
;
2026 member
= build2 (OFFSET_REF
, TREE_TYPE (member
), decl
, member
);
2027 PTRMEM_OK_P (member
) = 1;
2031 /* If DECL is a scalar enumeration constant or variable with a
2032 constant initializer, return the initializer (or, its initializers,
2033 recursively); otherwise, return DECL. If STRICT_P, the
2034 initializer is only returned if DECL is a
2035 constant-expression. If RETURN_AGGREGATE_CST_OK_P, it is ok to
2036 return an aggregate constant. */
2039 constant_value_1 (tree decl
, bool strict_p
, bool return_aggregate_cst_ok_p
)
2041 while (TREE_CODE (decl
) == CONST_DECL
2043 ? decl_constant_var_p (decl
)
2045 && CP_TYPE_CONST_NON_VOLATILE_P (TREE_TYPE (decl
)))))
2048 /* If DECL is a static data member in a template
2049 specialization, we must instantiate it here. The
2050 initializer for the static data member is not processed
2051 until needed; we need it now. */
2052 mark_used (decl
, tf_none
);
2053 mark_rvalue_use (decl
);
2054 init
= DECL_INITIAL (decl
);
2055 if (init
== error_mark_node
)
2057 if (DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl
))
2058 /* Treat the error as a constant to avoid cascading errors on
2059 excessively recursive template instantiation (c++/9335). */
2064 /* Initializers in templates are generally expanded during
2065 instantiation, so before that for const int i(2)
2066 INIT is a TREE_LIST with the actual initializer as
2068 if (processing_template_decl
2070 && TREE_CODE (init
) == TREE_LIST
2071 && TREE_CHAIN (init
) == NULL_TREE
)
2072 init
= TREE_VALUE (init
);
2074 || !TREE_TYPE (init
)
2075 || !TREE_CONSTANT (init
)
2076 || (!return_aggregate_cst_ok_p
2077 /* Unless RETURN_AGGREGATE_CST_OK_P is true, do not
2078 return an aggregate constant (of which string
2079 literals are a special case), as we do not want
2080 to make inadvertent copies of such entities, and
2081 we must be sure that their addresses are the
2083 && (TREE_CODE (init
) == CONSTRUCTOR
2084 || TREE_CODE (init
) == STRING_CST
)))
2086 decl
= unshare_expr (init
);
2091 /* If DECL is a CONST_DECL, or a constant VAR_DECL initialized by constant
2092 of integral or enumeration type, or a constexpr variable of scalar type,
2093 then return that value. These are those variables permitted in constant
2094 expressions by [5.19/1]. */
2097 scalar_constant_value (tree decl
)
2099 return constant_value_1 (decl
, /*strict_p=*/true,
2100 /*return_aggregate_cst_ok_p=*/false);
2103 /* Like scalar_constant_value, but can also return aggregate initializers. */
2106 decl_really_constant_value (tree decl
)
2108 return constant_value_1 (decl
, /*strict_p=*/true,
2109 /*return_aggregate_cst_ok_p=*/true);
2112 /* A more relaxed version of scalar_constant_value, used by the
2113 common C/C++ code. */
2116 decl_constant_value (tree decl
)
2118 return constant_value_1 (decl
, /*strict_p=*/processing_template_decl
,
2119 /*return_aggregate_cst_ok_p=*/true);
2122 /* Common subroutines of build_new and build_vec_delete. */
2124 /* Build and return a NEW_EXPR. If NELTS is non-NULL, TYPE[NELTS] is
2125 the type of the object being allocated; otherwise, it's just TYPE.
2126 INIT is the initializer, if any. USE_GLOBAL_NEW is true if the
2127 user explicitly wrote "::operator new". PLACEMENT, if non-NULL, is
2128 a vector of arguments to be provided as arguments to a placement
2129 new operator. This routine performs no semantic checks; it just
2130 creates and returns a NEW_EXPR. */
2133 build_raw_new_expr (vec
<tree
, va_gc
> *placement
, tree type
, tree nelts
,
2134 vec
<tree
, va_gc
> *init
, int use_global_new
)
2139 /* If INIT is NULL, the we want to store NULL_TREE in the NEW_EXPR.
2140 If INIT is not NULL, then we want to store VOID_ZERO_NODE. This
2141 permits us to distinguish the case of a missing initializer "new
2142 int" from an empty initializer "new int()". */
2144 init_list
= NULL_TREE
;
2145 else if (init
->is_empty ())
2146 init_list
= void_node
;
2148 init_list
= build_tree_list_vec (init
);
2150 new_expr
= build4 (NEW_EXPR
, build_pointer_type (type
),
2151 build_tree_list_vec (placement
), type
, nelts
,
2153 NEW_EXPR_USE_GLOBAL (new_expr
) = use_global_new
;
2154 TREE_SIDE_EFFECTS (new_expr
) = 1;
2159 /* Diagnose uninitialized const members or reference members of type
2160 TYPE. USING_NEW is used to disambiguate the diagnostic between a
2161 new expression without a new-initializer and a declaration. Returns
2165 diagnose_uninitialized_cst_or_ref_member_1 (tree type
, tree origin
,
2166 bool using_new
, bool complain
)
2169 int error_count
= 0;
2171 if (type_has_user_provided_constructor (type
))
2174 for (field
= TYPE_FIELDS (type
); field
; field
= DECL_CHAIN (field
))
2178 if (TREE_CODE (field
) != FIELD_DECL
)
2181 field_type
= strip_array_types (TREE_TYPE (field
));
2183 if (type_has_user_provided_constructor (field_type
))
2186 if (TREE_CODE (field_type
) == REFERENCE_TYPE
)
2191 if (DECL_CONTEXT (field
) == origin
)
2194 error ("uninitialized reference member in %q#T "
2195 "using %<new%> without new-initializer", origin
);
2197 error ("uninitialized reference member in %q#T", origin
);
2202 error ("uninitialized reference member in base %q#T "
2203 "of %q#T using %<new%> without new-initializer",
2204 DECL_CONTEXT (field
), origin
);
2206 error ("uninitialized reference member in base %q#T "
2207 "of %q#T", DECL_CONTEXT (field
), origin
);
2209 inform (DECL_SOURCE_LOCATION (field
),
2210 "%q#D should be initialized", field
);
2214 if (CP_TYPE_CONST_P (field_type
))
2219 if (DECL_CONTEXT (field
) == origin
)
2222 error ("uninitialized const member in %q#T "
2223 "using %<new%> without new-initializer", origin
);
2225 error ("uninitialized const member in %q#T", origin
);
2230 error ("uninitialized const member in base %q#T "
2231 "of %q#T using %<new%> without new-initializer",
2232 DECL_CONTEXT (field
), origin
);
2234 error ("uninitialized const member in base %q#T "
2235 "of %q#T", DECL_CONTEXT (field
), origin
);
2237 inform (DECL_SOURCE_LOCATION (field
),
2238 "%q#D should be initialized", field
);
2242 if (CLASS_TYPE_P (field_type
))
2244 += diagnose_uninitialized_cst_or_ref_member_1 (field_type
, origin
,
2245 using_new
, complain
);
2251 diagnose_uninitialized_cst_or_ref_member (tree type
, bool using_new
, bool complain
)
2253 return diagnose_uninitialized_cst_or_ref_member_1 (type
, type
, using_new
, complain
);
2256 /* Call __cxa_bad_array_new_length to indicate that the size calculation
2257 overflowed. Pretend it returns sizetype so that it plays nicely in the
2261 throw_bad_array_new_length (void)
2263 tree fn
= get_identifier ("__cxa_throw_bad_array_new_length");
2264 if (!get_global_value_if_present (fn
, &fn
))
2265 fn
= push_throw_library_fn (fn
, build_function_type_list (sizetype
,
2268 return build_cxx_call (fn
, 0, NULL
, tf_warning_or_error
);
2271 /* Generate code for a new-expression, including calling the "operator
2272 new" function, initializing the object, and, if an exception occurs
2273 during construction, cleaning up. The arguments are as for
2274 build_raw_new_expr. This may change PLACEMENT and INIT. */
2277 build_new_1 (vec
<tree
, va_gc
> **placement
, tree type
, tree nelts
,
2278 vec
<tree
, va_gc
> **init
, bool globally_qualified_p
,
2279 tsubst_flags_t complain
)
2282 /* True iff this is a call to "operator new[]" instead of just
2284 bool array_p
= false;
2285 /* If ARRAY_P is true, the element type of the array. This is never
2286 an ARRAY_TYPE; for something like "new int[3][4]", the
2287 ELT_TYPE is "int". If ARRAY_P is false, this is the same type as
2290 /* The type of the new-expression. (This type is always a pointer
2293 tree non_const_pointer_type
;
2294 tree outer_nelts
= NULL_TREE
;
2295 /* For arrays, a bounds checks on the NELTS parameter. */
2296 tree outer_nelts_check
= NULL_TREE
;
2297 bool outer_nelts_from_type
= false;
2298 offset_int inner_nelts_count
= 1;
2299 tree alloc_call
, alloc_expr
;
2300 /* Size of the inner array elements. */
2301 offset_int inner_size
;
2302 /* The address returned by the call to "operator new". This node is
2303 a VAR_DECL and is therefore reusable. */
2306 tree cookie_expr
, init_expr
;
2307 int nothrow
, check_new
;
2308 int use_java_new
= 0;
2309 /* If non-NULL, the number of extra bytes to allocate at the
2310 beginning of the storage allocated for an array-new expression in
2311 order to store the number of elements. */
2312 tree cookie_size
= NULL_TREE
;
2313 tree placement_first
;
2314 tree placement_expr
= NULL_TREE
;
2315 /* True if the function we are calling is a placement allocation
2317 bool placement_allocation_fn_p
;
2318 /* True if the storage must be initialized, either by a constructor
2319 or due to an explicit new-initializer. */
2320 bool is_initialized
;
2321 /* The address of the thing allocated, not including any cookie. In
2322 particular, if an array cookie is in use, DATA_ADDR is the
2323 address of the first array element. This node is a VAR_DECL, and
2324 is therefore reusable. */
2326 tree init_preeval_expr
= NULL_TREE
;
2327 tree orig_type
= type
;
2331 outer_nelts
= nelts
;
2334 else if (TREE_CODE (type
) == ARRAY_TYPE
)
2336 /* Transforms new (T[N]) to new T[N]. The former is a GNU
2337 extension for variable N. (This also covers new T where T is
2340 nelts
= array_type_nelts_top (type
);
2341 outer_nelts
= nelts
;
2342 type
= TREE_TYPE (type
);
2343 outer_nelts_from_type
= true;
2346 /* If our base type is an array, then make sure we know how many elements
2348 for (elt_type
= type
;
2349 TREE_CODE (elt_type
) == ARRAY_TYPE
;
2350 elt_type
= TREE_TYPE (elt_type
))
2352 tree inner_nelts
= array_type_nelts_top (elt_type
);
2353 tree inner_nelts_cst
= maybe_constant_value (inner_nelts
);
2354 if (TREE_CODE (inner_nelts_cst
) == INTEGER_CST
)
2357 offset_int result
= wi::mul (wi::to_offset (inner_nelts_cst
),
2358 inner_nelts_count
, SIGNED
, &overflow
);
2361 if (complain
& tf_error
)
2362 error ("integer overflow in array size");
2363 nelts
= error_mark_node
;
2365 inner_nelts_count
= result
;
2369 if (complain
& tf_error
)
2371 error_at (EXPR_LOC_OR_LOC (inner_nelts
, input_location
),
2372 "array size in new-expression must be constant");
2373 cxx_constant_value(inner_nelts
);
2375 nelts
= error_mark_node
;
2377 if (nelts
!= error_mark_node
)
2378 nelts
= cp_build_binary_op (input_location
,
2384 if (variably_modified_type_p (elt_type
, NULL_TREE
) && (complain
& tf_error
))
2386 error ("variably modified type not allowed in new-expression");
2387 return error_mark_node
;
2390 if (nelts
== error_mark_node
)
2391 return error_mark_node
;
2393 /* Warn if we performed the (T[N]) to T[N] transformation and N is
2395 if (outer_nelts_from_type
2396 && !TREE_CONSTANT (maybe_constant_value (outer_nelts
)))
2398 if (complain
& tf_warning_or_error
)
2401 if (typedef_variant_p (orig_type
))
2402 msg
= ("non-constant array new length must be specified "
2403 "directly, not by typedef");
2405 msg
= ("non-constant array new length must be specified "
2406 "without parentheses around the type-id");
2407 pedwarn (EXPR_LOC_OR_LOC (outer_nelts
, input_location
),
2411 return error_mark_node
;
2414 if (VOID_TYPE_P (elt_type
))
2416 if (complain
& tf_error
)
2417 error ("invalid type %<void%> for new");
2418 return error_mark_node
;
2421 if (abstract_virtuals_error_sfinae (ACU_NEW
, elt_type
, complain
))
2422 return error_mark_node
;
2424 is_initialized
= (type_build_ctor_call (elt_type
) || *init
!= NULL
);
2426 if (*init
== NULL
&& cxx_dialect
< cxx11
)
2428 bool maybe_uninitialized_error
= false;
2429 /* A program that calls for default-initialization [...] of an
2430 entity of reference type is ill-formed. */
2431 if (CLASSTYPE_REF_FIELDS_NEED_INIT (elt_type
))
2432 maybe_uninitialized_error
= true;
2434 /* A new-expression that creates an object of type T initializes
2435 that object as follows:
2436 - If the new-initializer is omitted:
2437 -- If T is a (possibly cv-qualified) non-POD class type
2438 (or array thereof), the object is default-initialized (8.5).
2440 -- Otherwise, the object created has indeterminate
2441 value. If T is a const-qualified type, or a (possibly
2442 cv-qualified) POD class type (or array thereof)
2443 containing (directly or indirectly) a member of
2444 const-qualified type, the program is ill-formed; */
2446 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (elt_type
))
2447 maybe_uninitialized_error
= true;
2449 if (maybe_uninitialized_error
2450 && diagnose_uninitialized_cst_or_ref_member (elt_type
,
2452 complain
& tf_error
))
2453 return error_mark_node
;
2456 if (CP_TYPE_CONST_P (elt_type
) && *init
== NULL
2457 && default_init_uninitialized_part (elt_type
))
2459 if (complain
& tf_error
)
2460 error ("uninitialized const in %<new%> of %q#T", elt_type
);
2461 return error_mark_node
;
2464 size
= size_in_bytes (elt_type
);
2467 /* Maximum available size in bytes. Half of the address space
2468 minus the cookie size. */
2470 = wi::set_bit_in_zero
<offset_int
> (TYPE_PRECISION (sizetype
) - 1);
2471 /* Maximum number of outer elements which can be allocated. */
2472 offset_int max_outer_nelts
;
2473 tree max_outer_nelts_tree
;
2475 gcc_assert (TREE_CODE (size
) == INTEGER_CST
);
2476 cookie_size
= targetm
.cxx
.get_cookie_size (elt_type
);
2477 gcc_assert (TREE_CODE (cookie_size
) == INTEGER_CST
);
2478 gcc_checking_assert (wi::ltu_p (wi::to_offset (cookie_size
), max_size
));
2479 /* Unconditionally subtract the cookie size. This decreases the
2480 maximum object size and is safe even if we choose not to use
2481 a cookie after all. */
2482 max_size
-= wi::to_offset (cookie_size
);
2484 inner_size
= wi::mul (wi::to_offset (size
), inner_nelts_count
, SIGNED
,
2486 if (overflow
|| wi::gtu_p (inner_size
, max_size
))
2488 if (complain
& tf_error
)
2489 error ("size of array is too large");
2490 return error_mark_node
;
2493 max_outer_nelts
= wi::udiv_trunc (max_size
, inner_size
);
2494 /* Only keep the top-most seven bits, to simplify encoding the
2495 constant in the instruction stream. */
2497 unsigned shift
= (max_outer_nelts
.get_precision ()) - 7
2498 - wi::clz (max_outer_nelts
);
2499 max_outer_nelts
= wi::lshift (wi::lrshift (max_outer_nelts
, shift
),
2502 max_outer_nelts_tree
= wide_int_to_tree (sizetype
, max_outer_nelts
);
2504 size
= size_binop (MULT_EXPR
, size
, convert (sizetype
, nelts
));
2505 outer_nelts_check
= fold_build2 (LE_EXPR
, boolean_type_node
,
2507 max_outer_nelts_tree
);
2510 alloc_fn
= NULL_TREE
;
2512 /* If PLACEMENT is a single simple pointer type not passed by
2513 reference, prepare to capture it in a temporary variable. Do
2514 this now, since PLACEMENT will change in the calls below. */
2515 placement_first
= NULL_TREE
;
2516 if (vec_safe_length (*placement
) == 1
2517 && (TYPE_PTR_P (TREE_TYPE ((**placement
)[0]))))
2518 placement_first
= (**placement
)[0];
2520 /* Allocate the object. */
2521 if (vec_safe_is_empty (*placement
) && TYPE_FOR_JAVA (elt_type
))
2525 static const char alloc_name
[] = "_Jv_AllocObject";
2527 if (!MAYBE_CLASS_TYPE_P (elt_type
))
2529 error ("%qT isn%'t a valid Java class type", elt_type
);
2530 return error_mark_node
;
2533 class_decl
= build_java_class_ref (elt_type
);
2534 if (class_decl
== error_mark_node
)
2535 return error_mark_node
;
2538 if (!get_global_value_if_present (get_identifier (alloc_name
),
2541 if (complain
& tf_error
)
2542 error ("call to Java constructor with %qs undefined", alloc_name
);
2543 return error_mark_node
;
2545 else if (really_overloaded_fn (alloc_fn
))
2547 if (complain
& tf_error
)
2548 error ("%qD should never be overloaded", alloc_fn
);
2549 return error_mark_node
;
2551 alloc_fn
= OVL_CURRENT (alloc_fn
);
2552 class_addr
= build1 (ADDR_EXPR
, jclass_node
, class_decl
);
2553 alloc_call
= cp_build_function_call_nary (alloc_fn
, complain
,
2554 class_addr
, NULL_TREE
);
2556 else if (TYPE_FOR_JAVA (elt_type
) && MAYBE_CLASS_TYPE_P (elt_type
))
2558 error ("Java class %q#T object allocated using placement new", elt_type
);
2559 return error_mark_node
;
2566 fnname
= ansi_opname (array_p
? VEC_NEW_EXPR
: NEW_EXPR
);
2568 if (!globally_qualified_p
2569 && CLASS_TYPE_P (elt_type
)
2571 ? TYPE_HAS_ARRAY_NEW_OPERATOR (elt_type
)
2572 : TYPE_HAS_NEW_OPERATOR (elt_type
)))
2574 /* Use a class-specific operator new. */
2575 /* If a cookie is required, add some extra space. */
2576 if (array_p
&& TYPE_VEC_NEW_USES_COOKIE (elt_type
))
2577 size
= size_binop (PLUS_EXPR
, size
, cookie_size
);
2580 cookie_size
= NULL_TREE
;
2581 /* No size arithmetic necessary, so the size check is
2583 if (outer_nelts_check
!= NULL
&& inner_size
== 1)
2584 outer_nelts_check
= NULL_TREE
;
2586 /* Perform the overflow check. */
2587 tree errval
= TYPE_MAX_VALUE (sizetype
);
2588 if (cxx_dialect
>= cxx11
&& flag_exceptions
)
2589 errval
= throw_bad_array_new_length ();
2590 if (outer_nelts_check
!= NULL_TREE
)
2591 size
= fold_build3 (COND_EXPR
, sizetype
, outer_nelts_check
,
2593 /* Create the argument list. */
2594 vec_safe_insert (*placement
, 0, size
);
2595 /* Do name-lookup to find the appropriate operator. */
2596 fns
= lookup_fnfields (elt_type
, fnname
, /*protect=*/2);
2597 if (fns
== NULL_TREE
)
2599 if (complain
& tf_error
)
2600 error ("no suitable %qD found in class %qT", fnname
, elt_type
);
2601 return error_mark_node
;
2603 if (TREE_CODE (fns
) == TREE_LIST
)
2605 if (complain
& tf_error
)
2607 error ("request for member %qD is ambiguous", fnname
);
2608 print_candidates (fns
);
2610 return error_mark_node
;
2612 alloc_call
= build_new_method_call (build_dummy_object (elt_type
),
2614 /*conversion_path=*/NULL_TREE
,
2621 /* Use a global operator new. */
2622 /* See if a cookie might be required. */
2623 if (!(array_p
&& TYPE_VEC_NEW_USES_COOKIE (elt_type
)))
2625 cookie_size
= NULL_TREE
;
2626 /* No size arithmetic necessary, so the size check is
2628 if (outer_nelts_check
!= NULL
&& inner_size
== 1)
2629 outer_nelts_check
= NULL_TREE
;
2632 alloc_call
= build_operator_new_call (fnname
, placement
,
2633 &size
, &cookie_size
,
2635 &alloc_fn
, complain
);
2639 if (alloc_call
== error_mark_node
)
2640 return error_mark_node
;
2642 gcc_assert (alloc_fn
!= NULL_TREE
);
2644 /* If we found a simple case of PLACEMENT_EXPR above, then copy it
2645 into a temporary variable. */
2646 if (!processing_template_decl
2647 && placement_first
!= NULL_TREE
2648 && TREE_CODE (alloc_call
) == CALL_EXPR
2649 && call_expr_nargs (alloc_call
) == 2
2650 && TREE_CODE (TREE_TYPE (CALL_EXPR_ARG (alloc_call
, 0))) == INTEGER_TYPE
2651 && TYPE_PTR_P (TREE_TYPE (CALL_EXPR_ARG (alloc_call
, 1))))
2653 tree placement_arg
= CALL_EXPR_ARG (alloc_call
, 1);
2655 if (INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (TREE_TYPE (placement_arg
)))
2656 || VOID_TYPE_P (TREE_TYPE (TREE_TYPE (placement_arg
))))
2658 placement_expr
= get_target_expr (placement_first
);
2659 CALL_EXPR_ARG (alloc_call
, 1)
2660 = convert (TREE_TYPE (placement_arg
), placement_expr
);
2664 /* In the simple case, we can stop now. */
2665 pointer_type
= build_pointer_type (type
);
2666 if (!cookie_size
&& !is_initialized
)
2667 return build_nop (pointer_type
, alloc_call
);
2669 /* Store the result of the allocation call in a variable so that we can
2670 use it more than once. */
2671 alloc_expr
= get_target_expr (alloc_call
);
2672 alloc_node
= TARGET_EXPR_SLOT (alloc_expr
);
2674 /* Strip any COMPOUND_EXPRs from ALLOC_CALL. */
2675 while (TREE_CODE (alloc_call
) == COMPOUND_EXPR
)
2676 alloc_call
= TREE_OPERAND (alloc_call
, 1);
2678 /* Now, check to see if this function is actually a placement
2679 allocation function. This can happen even when PLACEMENT is NULL
2680 because we might have something like:
2682 struct S { void* operator new (size_t, int i = 0); };
2684 A call to `new S' will get this allocation function, even though
2685 there is no explicit placement argument. If there is more than
2686 one argument, or there are variable arguments, then this is a
2687 placement allocation function. */
2688 placement_allocation_fn_p
2689 = (type_num_arguments (TREE_TYPE (alloc_fn
)) > 1
2690 || varargs_function_p (alloc_fn
));
2692 /* Preevaluate the placement args so that we don't reevaluate them for a
2693 placement delete. */
2694 if (placement_allocation_fn_p
)
2697 stabilize_call (alloc_call
, &inits
);
2699 alloc_expr
= build2 (COMPOUND_EXPR
, TREE_TYPE (alloc_expr
), inits
,
2703 /* unless an allocation function is declared with an empty excep-
2704 tion-specification (_except.spec_), throw(), it indicates failure to
2705 allocate storage by throwing a bad_alloc exception (clause _except_,
2706 _lib.bad.alloc_); it returns a non-null pointer otherwise If the allo-
2707 cation function is declared with an empty exception-specification,
2708 throw(), it returns null to indicate failure to allocate storage and a
2709 non-null pointer otherwise.
2711 So check for a null exception spec on the op new we just called. */
2713 nothrow
= TYPE_NOTHROW_P (TREE_TYPE (alloc_fn
));
2714 check_new
= (flag_check_new
|| nothrow
) && ! use_java_new
;
2722 /* Adjust so we're pointing to the start of the object. */
2723 data_addr
= fold_build_pointer_plus (alloc_node
, cookie_size
);
2725 /* Store the number of bytes allocated so that we can know how
2726 many elements to destroy later. We use the last sizeof
2727 (size_t) bytes to store the number of elements. */
2728 cookie_ptr
= size_binop (MINUS_EXPR
, cookie_size
, size_in_bytes (sizetype
));
2729 cookie_ptr
= fold_build_pointer_plus_loc (input_location
,
2730 alloc_node
, cookie_ptr
);
2731 size_ptr_type
= build_pointer_type (sizetype
);
2732 cookie_ptr
= fold_convert (size_ptr_type
, cookie_ptr
);
2733 cookie
= cp_build_indirect_ref (cookie_ptr
, RO_NULL
, complain
);
2735 cookie_expr
= build2 (MODIFY_EXPR
, sizetype
, cookie
, nelts
);
2737 if (targetm
.cxx
.cookie_has_size ())
2739 /* Also store the element size. */
2740 cookie_ptr
= fold_build_pointer_plus (cookie_ptr
,
2741 fold_build1_loc (input_location
,
2742 NEGATE_EXPR
, sizetype
,
2743 size_in_bytes (sizetype
)));
2745 cookie
= cp_build_indirect_ref (cookie_ptr
, RO_NULL
, complain
);
2746 cookie
= build2 (MODIFY_EXPR
, sizetype
, cookie
,
2747 size_in_bytes (elt_type
));
2748 cookie_expr
= build2 (COMPOUND_EXPR
, TREE_TYPE (cookie_expr
),
2749 cookie
, cookie_expr
);
2754 cookie_expr
= NULL_TREE
;
2755 data_addr
= alloc_node
;
2758 /* Now use a pointer to the type we've actually allocated. */
2760 /* But we want to operate on a non-const version to start with,
2761 since we'll be modifying the elements. */
2762 non_const_pointer_type
= build_pointer_type
2763 (cp_build_qualified_type (type
, cp_type_quals (type
) & ~TYPE_QUAL_CONST
));
2765 data_addr
= fold_convert (non_const_pointer_type
, data_addr
);
2766 /* Any further uses of alloc_node will want this type, too. */
2767 alloc_node
= fold_convert (non_const_pointer_type
, alloc_node
);
2769 /* Now initialize the allocated object. Note that we preevaluate the
2770 initialization expression, apart from the actual constructor call or
2771 assignment--we do this because we want to delay the allocation as long
2772 as possible in order to minimize the size of the exception region for
2773 placement delete. */
2777 bool explicit_value_init_p
= false;
2779 if (*init
!= NULL
&& (*init
)->is_empty ())
2782 explicit_value_init_p
= true;
2785 if (processing_template_decl
&& explicit_value_init_p
)
2787 /* build_value_init doesn't work in templates, and we don't need
2788 the initializer anyway since we're going to throw it away and
2789 rebuild it at instantiation time, so just build up a single
2790 constructor call to get any appropriate diagnostics. */
2791 init_expr
= cp_build_indirect_ref (data_addr
, RO_NULL
, complain
);
2792 if (type_build_ctor_call (elt_type
))
2793 init_expr
= build_special_member_call (init_expr
,
2794 complete_ctor_identifier
,
2798 stable
= stabilize_init (init_expr
, &init_preeval_expr
);
2802 tree vecinit
= NULL_TREE
;
2803 if (vec_safe_length (*init
) == 1
2804 && DIRECT_LIST_INIT_P ((**init
)[0]))
2806 vecinit
= (**init
)[0];
2807 if (CONSTRUCTOR_NELTS (vecinit
) == 0)
2808 /* List-value-initialization, leave it alone. */;
2811 tree arraytype
, domain
;
2812 if (TREE_CONSTANT (nelts
))
2813 domain
= compute_array_index_type (NULL_TREE
, nelts
,
2816 /* We'll check the length at runtime. */
2818 arraytype
= build_cplus_array_type (type
, domain
);
2819 vecinit
= digest_init (arraytype
, vecinit
, complain
);
2824 if (complain
& tf_error
)
2825 permerror (input_location
,
2826 "parenthesized initializer in array new");
2828 return error_mark_node
;
2829 vecinit
= build_tree_list_vec (*init
);
2832 = build_vec_init (data_addr
,
2833 cp_build_binary_op (input_location
,
2834 MINUS_EXPR
, outer_nelts
,
2838 explicit_value_init_p
,
2842 /* An array initialization is stable because the initialization
2843 of each element is a full-expression, so the temporaries don't
2849 init_expr
= cp_build_indirect_ref (data_addr
, RO_NULL
, complain
);
2851 if (type_build_ctor_call (type
) && !explicit_value_init_p
)
2853 init_expr
= build_special_member_call (init_expr
,
2854 complete_ctor_identifier
,
2859 else if (explicit_value_init_p
)
2861 /* Something like `new int()'. */
2862 tree val
= build_value_init (type
, complain
);
2863 if (val
== error_mark_node
)
2864 return error_mark_node
;
2865 init_expr
= build2 (INIT_EXPR
, type
, init_expr
, val
);
2871 /* We are processing something like `new int (10)', which
2872 means allocate an int, and initialize it with 10. */
2874 ie
= build_x_compound_expr_from_vec (*init
, "new initializer",
2876 init_expr
= cp_build_modify_expr (init_expr
, INIT_EXPR
, ie
,
2879 stable
= stabilize_init (init_expr
, &init_preeval_expr
);
2882 if (init_expr
== error_mark_node
)
2883 return error_mark_node
;
2885 /* If any part of the object initialization terminates by throwing an
2886 exception and a suitable deallocation function can be found, the
2887 deallocation function is called to free the memory in which the
2888 object was being constructed, after which the exception continues
2889 to propagate in the context of the new-expression. If no
2890 unambiguous matching deallocation function can be found,
2891 propagating the exception does not cause the object's memory to be
2893 if (flag_exceptions
&& ! use_java_new
)
2895 enum tree_code dcode
= array_p
? VEC_DELETE_EXPR
: DELETE_EXPR
;
2898 /* The Standard is unclear here, but the right thing to do
2899 is to use the same method for finding deallocation
2900 functions that we use for finding allocation functions. */
2901 cleanup
= (build_op_delete_call
2905 globally_qualified_p
,
2906 placement_allocation_fn_p
? alloc_call
: NULL_TREE
,
2913 /* This is much simpler if we were able to preevaluate all of
2914 the arguments to the constructor call. */
2916 /* CLEANUP is compiler-generated, so no diagnostics. */
2917 TREE_NO_WARNING (cleanup
) = true;
2918 init_expr
= build2 (TRY_CATCH_EXPR
, void_type_node
,
2919 init_expr
, cleanup
);
2920 /* Likewise, this try-catch is compiler-generated. */
2921 TREE_NO_WARNING (init_expr
) = true;
2924 /* Ack! First we allocate the memory. Then we set our sentry
2925 variable to true, and expand a cleanup that deletes the
2926 memory if sentry is true. Then we run the constructor, and
2927 finally clear the sentry.
2929 We need to do this because we allocate the space first, so
2930 if there are any temporaries with cleanups in the
2931 constructor args and we weren't able to preevaluate them, we
2932 need this EH region to extend until end of full-expression
2933 to preserve nesting. */
2935 tree end
, sentry
, begin
;
2937 begin
= get_target_expr (boolean_true_node
);
2938 CLEANUP_EH_ONLY (begin
) = 1;
2940 sentry
= TARGET_EXPR_SLOT (begin
);
2942 /* CLEANUP is compiler-generated, so no diagnostics. */
2943 TREE_NO_WARNING (cleanup
) = true;
2945 TARGET_EXPR_CLEANUP (begin
)
2946 = build3 (COND_EXPR
, void_type_node
, sentry
,
2947 cleanup
, void_node
);
2949 end
= build2 (MODIFY_EXPR
, TREE_TYPE (sentry
),
2950 sentry
, boolean_false_node
);
2953 = build2 (COMPOUND_EXPR
, void_type_node
, begin
,
2954 build2 (COMPOUND_EXPR
, void_type_node
, init_expr
,
2956 /* Likewise, this is compiler-generated. */
2957 TREE_NO_WARNING (init_expr
) = true;
2962 init_expr
= NULL_TREE
;
2964 /* Now build up the return value in reverse order. */
2969 rval
= build2 (COMPOUND_EXPR
, TREE_TYPE (rval
), init_expr
, rval
);
2971 rval
= build2 (COMPOUND_EXPR
, TREE_TYPE (rval
), cookie_expr
, rval
);
2973 if (rval
== data_addr
)
2974 /* If we don't have an initializer or a cookie, strip the TARGET_EXPR
2975 and return the call (which doesn't need to be adjusted). */
2976 rval
= TARGET_EXPR_INITIAL (alloc_expr
);
2981 tree ifexp
= cp_build_binary_op (input_location
,
2982 NE_EXPR
, alloc_node
,
2985 rval
= build_conditional_expr (input_location
, ifexp
, rval
,
2986 alloc_node
, complain
);
2989 /* Perform the allocation before anything else, so that ALLOC_NODE
2990 has been initialized before we start using it. */
2991 rval
= build2 (COMPOUND_EXPR
, TREE_TYPE (rval
), alloc_expr
, rval
);
2994 if (init_preeval_expr
)
2995 rval
= build2 (COMPOUND_EXPR
, TREE_TYPE (rval
), init_preeval_expr
, rval
);
2997 /* A new-expression is never an lvalue. */
2998 gcc_assert (!lvalue_p (rval
));
3000 return convert (pointer_type
, rval
);
3003 /* Generate a representation for a C++ "new" expression. *PLACEMENT
3004 is a vector of placement-new arguments (or NULL if none). If NELTS
3005 is NULL, TYPE is the type of the storage to be allocated. If NELTS
3006 is not NULL, then this is an array-new allocation; TYPE is the type
3007 of the elements in the array and NELTS is the number of elements in
3008 the array. *INIT, if non-NULL, is the initializer for the new
3009 object, or an empty vector to indicate an initializer of "()". If
3010 USE_GLOBAL_NEW is true, then the user explicitly wrote "::new"
3011 rather than just "new". This may change PLACEMENT and INIT. */
3014 build_new (vec
<tree
, va_gc
> **placement
, tree type
, tree nelts
,
3015 vec
<tree
, va_gc
> **init
, int use_global_new
, tsubst_flags_t complain
)
3018 vec
<tree
, va_gc
> *orig_placement
= NULL
;
3019 tree orig_nelts
= NULL_TREE
;
3020 vec
<tree
, va_gc
> *orig_init
= NULL
;
3022 if (type
== error_mark_node
)
3023 return error_mark_node
;
3025 if (nelts
== NULL_TREE
&& vec_safe_length (*init
) == 1
3026 /* Don't do auto deduction where it might affect mangling. */
3027 && (!processing_template_decl
|| at_function_scope_p ()))
3029 tree auto_node
= type_uses_auto (type
);
3032 tree d_init
= (**init
)[0];
3033 d_init
= resolve_nondeduced_context (d_init
);
3034 type
= do_auto_deduction (type
, d_init
, auto_node
);
3038 if (processing_template_decl
)
3040 if (dependent_type_p (type
)
3041 || any_type_dependent_arguments_p (*placement
)
3042 || (nelts
&& type_dependent_expression_p (nelts
))
3044 || any_type_dependent_arguments_p (*init
))
3045 return build_raw_new_expr (*placement
, type
, nelts
, *init
,
3048 orig_placement
= make_tree_vector_copy (*placement
);
3051 orig_init
= make_tree_vector_copy (*init
);
3053 make_args_non_dependent (*placement
);
3055 nelts
= build_non_dependent_expr (nelts
);
3056 make_args_non_dependent (*init
);
3061 if (!build_expr_type_conversion (WANT_INT
| WANT_ENUM
, nelts
, false))
3063 if (complain
& tf_error
)
3064 permerror (input_location
, "size in array new must have integral type");
3066 return error_mark_node
;
3068 nelts
= mark_rvalue_use (nelts
);
3069 nelts
= cp_save_expr (cp_convert (sizetype
, nelts
, complain
));
3072 /* ``A reference cannot be created by the new operator. A reference
3073 is not an object (8.2.2, 8.4.3), so a pointer to it could not be
3074 returned by new.'' ARM 5.3.3 */
3075 if (TREE_CODE (type
) == REFERENCE_TYPE
)
3077 if (complain
& tf_error
)
3078 error ("new cannot be applied to a reference type");
3080 return error_mark_node
;
3081 type
= TREE_TYPE (type
);
3084 if (TREE_CODE (type
) == FUNCTION_TYPE
)
3086 if (complain
& tf_error
)
3087 error ("new cannot be applied to a function type");
3088 return error_mark_node
;
3091 /* The type allocated must be complete. If the new-type-id was
3092 "T[N]" then we are just checking that "T" is complete here, but
3093 that is equivalent, since the value of "N" doesn't matter. */
3094 if (!complete_type_or_maybe_complain (type
, NULL_TREE
, complain
))
3095 return error_mark_node
;
3097 rval
= build_new_1 (placement
, type
, nelts
, init
, use_global_new
, complain
);
3098 if (rval
== error_mark_node
)
3099 return error_mark_node
;
3101 if (processing_template_decl
)
3103 tree ret
= build_raw_new_expr (orig_placement
, type
, orig_nelts
,
3104 orig_init
, use_global_new
);
3105 release_tree_vector (orig_placement
);
3106 release_tree_vector (orig_init
);
3110 /* Wrap it in a NOP_EXPR so warn_if_unused_value doesn't complain. */
3111 rval
= build1 (NOP_EXPR
, TREE_TYPE (rval
), rval
);
3112 TREE_NO_WARNING (rval
) = 1;
3117 /* Given a Java class, return a decl for the corresponding java.lang.Class. */
3120 build_java_class_ref (tree type
)
3122 tree name
= NULL_TREE
, class_decl
;
3123 static tree CL_suffix
= NULL_TREE
;
3124 if (CL_suffix
== NULL_TREE
)
3125 CL_suffix
= get_identifier("class$");
3126 if (jclass_node
== NULL_TREE
)
3128 jclass_node
= IDENTIFIER_GLOBAL_VALUE (get_identifier ("jclass"));
3129 if (jclass_node
== NULL_TREE
)
3131 error ("call to Java constructor, while %<jclass%> undefined");
3132 return error_mark_node
;
3134 jclass_node
= TREE_TYPE (jclass_node
);
3137 /* Mangle the class$ field. */
3140 for (field
= TYPE_FIELDS (type
); field
; field
= DECL_CHAIN (field
))
3141 if (DECL_NAME (field
) == CL_suffix
)
3143 mangle_decl (field
);
3144 name
= DECL_ASSEMBLER_NAME (field
);
3149 error ("can%'t find %<class$%> in %qT", type
);
3150 return error_mark_node
;
3154 class_decl
= IDENTIFIER_GLOBAL_VALUE (name
);
3155 if (class_decl
== NULL_TREE
)
3157 class_decl
= build_decl (input_location
,
3158 VAR_DECL
, name
, TREE_TYPE (jclass_node
));
3159 TREE_STATIC (class_decl
) = 1;
3160 DECL_EXTERNAL (class_decl
) = 1;
3161 TREE_PUBLIC (class_decl
) = 1;
3162 DECL_ARTIFICIAL (class_decl
) = 1;
3163 DECL_IGNORED_P (class_decl
) = 1;
3164 pushdecl_top_level (class_decl
);
3165 make_decl_rtl (class_decl
);
3171 build_vec_delete_1 (tree base
, tree maxindex
, tree type
,
3172 special_function_kind auto_delete_vec
,
3173 int use_global_delete
, tsubst_flags_t complain
)
3176 tree ptype
= build_pointer_type (type
= complete_type (type
));
3179 /* Temporary variables used by the loop. */
3180 tree tbase
, tbase_init
;
3182 /* This is the body of the loop that implements the deletion of a
3183 single element, and moves temp variables to next elements. */
3186 /* This is the LOOP_EXPR that governs the deletion of the elements. */
3189 /* This is the thing that governs what to do after the loop has run. */
3190 tree deallocate_expr
= 0;
3192 /* This is the BIND_EXPR which holds the outermost iterator of the
3193 loop. It is convenient to set this variable up and test it before
3194 executing any other code in the loop.
3195 This is also the containing expression returned by this function. */
3196 tree controller
= NULL_TREE
;
3199 /* We should only have 1-D arrays here. */
3200 gcc_assert (TREE_CODE (type
) != ARRAY_TYPE
);
3202 if (base
== error_mark_node
|| maxindex
== error_mark_node
)
3203 return error_mark_node
;
3205 if (!COMPLETE_TYPE_P (type
))
3207 if ((complain
& tf_warning
)
3208 && warning (OPT_Wdelete_incomplete
,
3209 "possible problem detected in invocation of "
3210 "delete [] operator:"))
3212 cxx_incomplete_type_diagnostic (base
, type
, DK_WARNING
);
3213 inform (input_location
, "neither the destructor nor the "
3214 "class-specific operator delete [] will be called, "
3215 "even if they are declared when the class is defined");
3217 /* This size won't actually be used. */
3218 size_exp
= size_one_node
;
3222 size_exp
= size_in_bytes (type
);
3224 if (! MAYBE_CLASS_TYPE_P (type
))
3226 else if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type
))
3228 /* Make sure the destructor is callable. */
3229 if (type_build_dtor_call (type
))
3231 tmp
= build_delete (ptype
, base
, sfk_complete_destructor
,
3232 LOOKUP_NORMAL
|LOOKUP_DESTRUCTOR
, 1,
3234 if (tmp
== error_mark_node
)
3235 return error_mark_node
;
3240 /* The below is short by the cookie size. */
3241 virtual_size
= size_binop (MULT_EXPR
, size_exp
,
3242 convert (sizetype
, maxindex
));
3244 tbase
= create_temporary_var (ptype
);
3246 = cp_build_modify_expr (tbase
, NOP_EXPR
,
3247 fold_build_pointer_plus_loc (input_location
,
3248 fold_convert (ptype
,
3252 if (tbase_init
== error_mark_node
)
3253 return error_mark_node
;
3254 controller
= build3 (BIND_EXPR
, void_type_node
, tbase
,
3255 NULL_TREE
, NULL_TREE
);
3256 TREE_SIDE_EFFECTS (controller
) = 1;
3258 body
= build1 (EXIT_EXPR
, void_type_node
,
3259 build2 (EQ_EXPR
, boolean_type_node
, tbase
,
3260 fold_convert (ptype
, base
)));
3261 tmp
= fold_build1_loc (input_location
, NEGATE_EXPR
, sizetype
, size_exp
);
3262 tmp
= fold_build_pointer_plus (tbase
, tmp
);
3263 tmp
= cp_build_modify_expr (tbase
, NOP_EXPR
, tmp
, complain
);
3264 if (tmp
== error_mark_node
)
3265 return error_mark_node
;
3266 body
= build_compound_expr (input_location
, body
, tmp
);
3267 tmp
= build_delete (ptype
, tbase
, sfk_complete_destructor
,
3268 LOOKUP_NORMAL
|LOOKUP_DESTRUCTOR
, 1,
3270 if (tmp
== error_mark_node
)
3271 return error_mark_node
;
3272 body
= build_compound_expr (input_location
, body
, tmp
);
3274 loop
= build1 (LOOP_EXPR
, void_type_node
, body
);
3275 loop
= build_compound_expr (input_location
, tbase_init
, loop
);
3278 /* Delete the storage if appropriate. */
3279 if (auto_delete_vec
== sfk_deleting_destructor
)
3283 /* The below is short by the cookie size. */
3284 virtual_size
= size_binop (MULT_EXPR
, size_exp
,
3285 convert (sizetype
, maxindex
));
3287 if (! TYPE_VEC_NEW_USES_COOKIE (type
))
3294 cookie_size
= targetm
.cxx
.get_cookie_size (type
);
3295 base_tbd
= cp_build_binary_op (input_location
,
3297 cp_convert (string_type_node
,
3301 if (base_tbd
== error_mark_node
)
3302 return error_mark_node
;
3303 base_tbd
= cp_convert (ptype
, base_tbd
, complain
);
3304 /* True size with header. */
3305 virtual_size
= size_binop (PLUS_EXPR
, virtual_size
, cookie_size
);
3308 deallocate_expr
= build_op_delete_call (VEC_DELETE_EXPR
,
3309 base_tbd
, virtual_size
,
3310 use_global_delete
& 1,
3311 /*placement=*/NULL_TREE
,
3312 /*alloc_fn=*/NULL_TREE
,
3317 if (!deallocate_expr
)
3320 body
= deallocate_expr
;
3322 body
= build_compound_expr (input_location
, body
, deallocate_expr
);
3325 body
= integer_zero_node
;
3327 /* Outermost wrapper: If pointer is null, punt. */
3328 body
= fold_build3_loc (input_location
, COND_EXPR
, void_type_node
,
3329 fold_build2_loc (input_location
,
3330 NE_EXPR
, boolean_type_node
, base
,
3331 convert (TREE_TYPE (base
),
3333 body
, integer_zero_node
);
3334 body
= build1 (NOP_EXPR
, void_type_node
, body
);
3338 TREE_OPERAND (controller
, 1) = body
;
3342 if (TREE_CODE (base
) == SAVE_EXPR
)
3343 /* Pre-evaluate the SAVE_EXPR outside of the BIND_EXPR. */
3344 body
= build2 (COMPOUND_EXPR
, void_type_node
, base
, body
);
3346 return convert_to_void (body
, ICV_CAST
, complain
);
3349 /* Create an unnamed variable of the indicated TYPE. */
3352 create_temporary_var (tree type
)
3356 decl
= build_decl (input_location
,
3357 VAR_DECL
, NULL_TREE
, type
);
3358 TREE_USED (decl
) = 1;
3359 DECL_ARTIFICIAL (decl
) = 1;
3360 DECL_IGNORED_P (decl
) = 1;
3361 DECL_CONTEXT (decl
) = current_function_decl
;
3366 /* Create a new temporary variable of the indicated TYPE, initialized
3369 It is not entered into current_binding_level, because that breaks
3370 things when it comes time to do final cleanups (which take place
3371 "outside" the binding contour of the function). */
3374 get_temp_regvar (tree type
, tree init
)
3378 decl
= create_temporary_var (type
);
3379 add_decl_expr (decl
);
3381 finish_expr_stmt (cp_build_modify_expr (decl
, INIT_EXPR
, init
,
3382 tf_warning_or_error
));
3387 /* Subroutine of build_vec_init. Returns true if assigning to an array of
3388 INNER_ELT_TYPE from INIT is trivial. */
3391 vec_copy_assign_is_trivial (tree inner_elt_type
, tree init
)
3393 tree fromtype
= inner_elt_type
;
3394 if (real_lvalue_p (init
))
3395 fromtype
= cp_build_reference_type (fromtype
, /*rval*/false);
3396 return is_trivially_xible (MODIFY_EXPR
, inner_elt_type
, fromtype
);
3399 /* `build_vec_init' returns tree structure that performs
3400 initialization of a vector of aggregate types.
3402 BASE is a reference to the vector, of ARRAY_TYPE, or a pointer
3403 to the first element, of POINTER_TYPE.
3404 MAXINDEX is the maximum index of the array (one less than the
3405 number of elements). It is only used if BASE is a pointer or
3406 TYPE_DOMAIN (TREE_TYPE (BASE)) == NULL_TREE.
3408 INIT is the (possibly NULL) initializer.
3410 If EXPLICIT_VALUE_INIT_P is true, then INIT must be NULL. All
3411 elements in the array are value-initialized.
3413 FROM_ARRAY is 0 if we should init everything with INIT
3414 (i.e., every element initialized from INIT).
3415 FROM_ARRAY is 1 if we should index into INIT in parallel
3416 with initialization of DECL.
3417 FROM_ARRAY is 2 if we should index into INIT in parallel,
3418 but use assignment instead of initialization. */
3421 build_vec_init (tree base
, tree maxindex
, tree init
,
3422 bool explicit_value_init_p
,
3423 int from_array
, tsubst_flags_t complain
)
3426 tree base2
= NULL_TREE
;
3427 tree itype
= NULL_TREE
;
3429 /* The type of BASE. */
3430 tree atype
= TREE_TYPE (base
);
3431 /* The type of an element in the array. */
3432 tree type
= TREE_TYPE (atype
);
3433 /* The element type reached after removing all outer array
3435 tree inner_elt_type
;
3436 /* The type of a pointer to an element in the array. */
3441 tree try_block
= NULL_TREE
;
3442 int num_initialized_elts
= 0;
3445 bool xvalue
= false;
3446 bool errors
= false;
3448 if (TREE_CODE (atype
) == ARRAY_TYPE
&& TYPE_DOMAIN (atype
))
3449 maxindex
= array_type_nelts (atype
);
3451 if (maxindex
== NULL_TREE
|| maxindex
== error_mark_node
)
3452 return error_mark_node
;
3454 if (explicit_value_init_p
)
3457 inner_elt_type
= strip_array_types (type
);
3459 /* Look through the TARGET_EXPR around a compound literal. */
3460 if (init
&& TREE_CODE (init
) == TARGET_EXPR
3461 && TREE_CODE (TARGET_EXPR_INITIAL (init
)) == CONSTRUCTOR
3463 init
= TARGET_EXPR_INITIAL (init
);
3465 /* If we have a braced-init-list, make sure that the array
3466 is big enough for all the initializers. */
3467 bool length_check
= (init
&& TREE_CODE (init
) == CONSTRUCTOR
3468 && CONSTRUCTOR_NELTS (init
) > 0
3469 && !TREE_CONSTANT (maxindex
));
3472 && TREE_CODE (atype
) == ARRAY_TYPE
3473 && TREE_CONSTANT (maxindex
)
3475 ? vec_copy_assign_is_trivial (inner_elt_type
, init
)
3476 : !TYPE_NEEDS_CONSTRUCTING (type
))
3477 && ((TREE_CODE (init
) == CONSTRUCTOR
3478 /* Don't do this if the CONSTRUCTOR might contain something
3479 that might throw and require us to clean up. */
3480 && (vec_safe_is_empty (CONSTRUCTOR_ELTS (init
))
3481 || ! TYPE_HAS_NONTRIVIAL_DESTRUCTOR (inner_elt_type
)))
3484 /* Do non-default initialization of trivial arrays resulting from
3485 brace-enclosed initializers. In this case, digest_init and
3486 store_constructor will handle the semantics for us. */
3488 if (BRACE_ENCLOSED_INITIALIZER_P (init
))
3489 init
= digest_init (atype
, init
, complain
);
3490 stmt_expr
= build2 (INIT_EXPR
, atype
, base
, init
);
3494 maxindex
= cp_convert (ptrdiff_type_node
, maxindex
, complain
);
3495 if (TREE_CODE (atype
) == ARRAY_TYPE
)
3497 ptype
= build_pointer_type (type
);
3498 base
= decay_conversion (base
, complain
);
3499 if (base
== error_mark_node
)
3500 return error_mark_node
;
3501 base
= cp_convert (ptype
, base
, complain
);
3506 /* The code we are generating looks like:
3510 ptrdiff_t iterator = maxindex;
3512 for (; iterator != -1; --iterator) {
3513 ... initialize *t1 ...
3517 ... destroy elements that were constructed ...
3522 We can omit the try and catch blocks if we know that the
3523 initialization will never throw an exception, or if the array
3524 elements do not have destructors. We can omit the loop completely if
3525 the elements of the array do not have constructors.
3527 We actually wrap the entire body of the above in a STMT_EXPR, for
3530 When copying from array to another, when the array elements have
3531 only trivial copy constructors, we should use __builtin_memcpy
3532 rather than generating a loop. That way, we could take advantage
3533 of whatever cleverness the back end has for dealing with copies
3534 of blocks of memory. */
3536 is_global
= begin_init_stmts (&stmt_expr
, &compound_stmt
);
3537 destroy_temps
= stmts_are_full_exprs_p ();
3538 current_stmt_tree ()->stmts_are_full_exprs_p
= 0;
3539 rval
= get_temp_regvar (ptype
, base
);
3540 base
= get_temp_regvar (ptype
, rval
);
3541 iterator
= get_temp_regvar (ptrdiff_type_node
, maxindex
);
3543 /* If initializing one array from another, initialize element by
3544 element. We rely upon the below calls to do the argument
3545 checking. Evaluate the initializer before entering the try block. */
3546 if (from_array
&& init
&& TREE_CODE (init
) != CONSTRUCTOR
)
3548 if (lvalue_kind (init
) & clk_rvalueref
)
3550 base2
= decay_conversion (init
, complain
);
3551 if (base2
== error_mark_node
)
3552 return error_mark_node
;
3553 itype
= TREE_TYPE (base2
);
3554 base2
= get_temp_regvar (itype
, base2
);
3555 itype
= TREE_TYPE (itype
);
3558 /* Protect the entire array initialization so that we can destroy
3559 the partially constructed array if an exception is thrown.
3560 But don't do this if we're assigning. */
3561 if (flag_exceptions
&& TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type
)
3564 try_block
= begin_try_block ();
3567 /* Should we try to create a constant initializer? */
3568 bool try_const
= (TREE_CODE (atype
) == ARRAY_TYPE
3569 && TREE_CONSTANT (maxindex
)
3570 && (init
? TREE_CODE (init
) == CONSTRUCTOR
3571 : (type_has_constexpr_default_constructor
3573 && (literal_type_p (inner_elt_type
)
3574 || TYPE_HAS_CONSTEXPR_CTOR (inner_elt_type
)));
3575 vec
<constructor_elt
, va_gc
> *const_vec
= NULL
;
3576 bool saw_non_const
= false;
3577 /* If we're initializing a static array, we want to do static
3578 initialization of any elements with constant initializers even if
3579 some are non-constant. */
3580 bool do_static_init
= (DECL_P (obase
) && TREE_STATIC (obase
));
3582 bool empty_list
= false;
3583 if (init
&& BRACE_ENCLOSED_INITIALIZER_P (init
)
3584 && CONSTRUCTOR_NELTS (init
) == 0)
3585 /* Skip over the handling of non-empty init lists. */
3588 /* Maybe pull out constant value when from_array? */
3590 else if (init
!= NULL_TREE
&& TREE_CODE (init
) == CONSTRUCTOR
)
3592 /* Do non-default initialization of non-trivial arrays resulting from
3593 brace-enclosed initializers. */
3594 unsigned HOST_WIDE_INT idx
;
3596 /* If the constructor already has the array type, it's been through
3597 digest_init, so we shouldn't try to do anything more. */
3598 bool digested
= same_type_p (atype
, TREE_TYPE (init
));
3603 tree nelts
= size_int (CONSTRUCTOR_NELTS (init
) - 1);
3604 if (TREE_CODE (atype
) != ARRAY_TYPE
)
3606 if (flag_exceptions
)
3608 tree c
= fold_build2 (LT_EXPR
, boolean_type_node
, iterator
,
3610 c
= build3 (COND_EXPR
, void_type_node
, c
,
3611 throw_bad_array_new_length (), void_node
);
3612 finish_expr_stmt (c
);
3614 /* Don't check an array new when -fno-exceptions. */
3616 else if (flag_sanitize
& SANITIZE_BOUNDS
3617 && do_ubsan_in_current_function ())
3619 /* Make sure the last element of the initializer is in bounds. */
3621 (ubsan_instrument_bounds
3622 (input_location
, obase
, &nelts
, /*ignore_off_by_one*/false));
3627 vec_alloc (const_vec
, CONSTRUCTOR_NELTS (init
));
3629 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (init
), idx
, field
, elt
)
3631 tree baseref
= build1 (INDIRECT_REF
, type
, base
);
3634 num_initialized_elts
++;
3636 current_stmt_tree ()->stmts_are_full_exprs_p
= 1;
3638 one_init
= build2 (INIT_EXPR
, type
, baseref
, elt
);
3639 else if (MAYBE_CLASS_TYPE_P (type
) || TREE_CODE (type
) == ARRAY_TYPE
)
3640 one_init
= build_aggr_init (baseref
, elt
, 0, complain
);
3642 one_init
= cp_build_modify_expr (baseref
, NOP_EXPR
,
3644 if (one_init
== error_mark_node
)
3648 tree e
= maybe_constant_init (one_init
);
3649 if (reduced_constant_expression_p (e
))
3651 CONSTRUCTOR_APPEND_ELT (const_vec
, field
, e
);
3653 one_init
= NULL_TREE
;
3655 one_init
= build2 (INIT_EXPR
, type
, baseref
, e
);
3661 tree value
= build_zero_init (TREE_TYPE (e
), NULL_TREE
,
3664 CONSTRUCTOR_APPEND_ELT (const_vec
, field
, value
);
3666 saw_non_const
= true;
3671 finish_expr_stmt (one_init
);
3672 current_stmt_tree ()->stmts_are_full_exprs_p
= 0;
3674 one_init
= cp_build_unary_op (PREINCREMENT_EXPR
, base
, 0, complain
);
3675 if (one_init
== error_mark_node
)
3678 finish_expr_stmt (one_init
);
3680 one_init
= cp_build_unary_op (PREDECREMENT_EXPR
, iterator
, 0,
3682 if (one_init
== error_mark_node
)
3685 finish_expr_stmt (one_init
);
3688 /* Any elements without explicit initializers get T{}. */
3691 else if (from_array
)
3694 /* OK, we set base2 above. */;
3695 else if (CLASS_TYPE_P (type
)
3696 && ! TYPE_HAS_DEFAULT_CONSTRUCTOR (type
))
3698 if (complain
& tf_error
)
3699 error ("initializer ends prematurely");
3704 /* Now, default-initialize any remaining elements. We don't need to
3705 do that if a) the type does not need constructing, or b) we've
3706 already initialized all the elements.
3708 We do need to keep going if we're copying an array. */
3710 if (try_const
&& !init
)
3711 /* With a constexpr default constructor, which we checked for when
3712 setting try_const above, default-initialization is equivalent to
3713 value-initialization, and build_value_init gives us something more
3714 friendly to maybe_constant_init. */
3715 explicit_value_init_p
= true;
3717 || ((type_build_ctor_call (type
) || init
|| explicit_value_init_p
)
3718 && ! (tree_fits_shwi_p (maxindex
)
3719 && (num_initialized_elts
3720 == tree_to_shwi (maxindex
) + 1))))
3722 /* If the ITERATOR is equal to -1, then we don't have to loop;
3723 we've already initialized all the elements. */
3728 for_stmt
= begin_for_stmt (NULL_TREE
, NULL_TREE
);
3729 finish_for_init_stmt (for_stmt
);
3730 finish_for_cond (build2 (NE_EXPR
, boolean_type_node
, iterator
,
3731 build_int_cst (TREE_TYPE (iterator
), -1)),
3733 elt_init
= cp_build_unary_op (PREDECREMENT_EXPR
, iterator
, 0,
3735 if (elt_init
== error_mark_node
)
3737 finish_for_expr (elt_init
, for_stmt
);
3739 to
= build1 (INDIRECT_REF
, type
, base
);
3741 /* If the initializer is {}, then all elements are initialized from T{}.
3742 But for non-classes, that's the same as value-initialization. */
3745 if (cxx_dialect
>= cxx11
&& AGGREGATE_TYPE_P (type
))
3747 init
= build_constructor (init_list_type_node
, NULL
);
3752 explicit_value_init_p
= true;
3762 from
= build1 (INDIRECT_REF
, itype
, base2
);
3769 if (from_array
== 2)
3770 elt_init
= cp_build_modify_expr (to
, NOP_EXPR
, from
,
3772 else if (type_build_ctor_call (type
))
3773 elt_init
= build_aggr_init (to
, from
, 0, complain
);
3775 elt_init
= cp_build_modify_expr (to
, NOP_EXPR
, from
,
3780 else if (TREE_CODE (type
) == ARRAY_TYPE
)
3782 if (init
&& !BRACE_ENCLOSED_INITIALIZER_P (init
))
3784 ("cannot initialize multi-dimensional array with initializer");
3785 elt_init
= build_vec_init (build1 (INDIRECT_REF
, type
, base
),
3787 explicit_value_init_p
,
3790 else if (explicit_value_init_p
)
3792 elt_init
= build_value_init (type
, complain
);
3793 if (elt_init
!= error_mark_node
)
3794 elt_init
= build2 (INIT_EXPR
, type
, to
, elt_init
);
3798 gcc_assert (type_build_ctor_call (type
) || init
);
3799 if (CLASS_TYPE_P (type
))
3800 elt_init
= build_aggr_init (to
, init
, 0, complain
);
3803 if (TREE_CODE (init
) == TREE_LIST
)
3804 init
= build_x_compound_expr_from_list (init
, ELK_INIT
,
3806 elt_init
= build2 (INIT_EXPR
, type
, to
, init
);
3810 if (elt_init
== error_mark_node
)
3815 /* FIXME refs to earlier elts */
3816 tree e
= maybe_constant_init (elt_init
);
3817 if (reduced_constant_expression_p (e
))
3819 if (initializer_zerop (e
))
3820 /* Don't fill the CONSTRUCTOR with zeros. */
3823 elt_init
= NULL_TREE
;
3827 saw_non_const
= true;
3829 e
= build_zero_init (TREE_TYPE (e
), NULL_TREE
, true);
3836 int max
= tree_to_shwi (maxindex
)+1;
3837 for (; num_initialized_elts
< max
; ++num_initialized_elts
)
3839 tree field
= size_int (num_initialized_elts
);
3840 CONSTRUCTOR_APPEND_ELT (const_vec
, field
, e
);
3845 current_stmt_tree ()->stmts_are_full_exprs_p
= 1;
3847 finish_expr_stmt (elt_init
);
3848 current_stmt_tree ()->stmts_are_full_exprs_p
= 0;
3850 finish_expr_stmt (cp_build_unary_op (PREINCREMENT_EXPR
, base
, 0,
3853 finish_expr_stmt (cp_build_unary_op (PREINCREMENT_EXPR
, base2
, 0,
3856 finish_for_stmt (for_stmt
);
3859 /* Make sure to cleanup any partially constructed elements. */
3860 if (flag_exceptions
&& TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type
)
3864 tree m
= cp_build_binary_op (input_location
,
3865 MINUS_EXPR
, maxindex
, iterator
,
3868 /* Flatten multi-dimensional array since build_vec_delete only
3869 expects one-dimensional array. */
3870 if (TREE_CODE (type
) == ARRAY_TYPE
)
3871 m
= cp_build_binary_op (input_location
,
3873 /* Avoid mixing signed and unsigned. */
3874 convert (TREE_TYPE (m
),
3875 array_type_nelts_total (type
)),
3878 finish_cleanup_try_block (try_block
);
3879 e
= build_vec_delete_1 (rval
, m
,
3880 inner_elt_type
, sfk_complete_destructor
,
3881 /*use_global_delete=*/0, complain
);
3882 if (e
== error_mark_node
)
3884 finish_cleanup (e
, try_block
);
3887 /* The value of the array initialization is the array itself, RVAL
3888 is a pointer to the first element. */
3889 finish_stmt_expr_expr (rval
, stmt_expr
);
3891 stmt_expr
= finish_init_stmts (is_global
, stmt_expr
, compound_stmt
);
3893 current_stmt_tree ()->stmts_are_full_exprs_p
= destroy_temps
;
3896 return error_mark_node
;
3902 tree const_init
= build_constructor (atype
, const_vec
);
3903 return build2 (INIT_EXPR
, atype
, obase
, const_init
);
3905 else if (do_static_init
&& !vec_safe_is_empty (const_vec
))
3906 DECL_INITIAL (obase
) = build_constructor (atype
, const_vec
);
3908 vec_free (const_vec
);
3911 /* Now make the result have the correct type. */
3912 if (TREE_CODE (atype
) == ARRAY_TYPE
)
3914 atype
= build_pointer_type (atype
);
3915 stmt_expr
= build1 (NOP_EXPR
, atype
, stmt_expr
);
3916 stmt_expr
= cp_build_indirect_ref (stmt_expr
, RO_NULL
, complain
);
3917 TREE_NO_WARNING (stmt_expr
) = 1;
3923 /* Call the DTOR_KIND destructor for EXP. FLAGS are as for
3927 build_dtor_call (tree exp
, special_function_kind dtor_kind
, int flags
,
3928 tsubst_flags_t complain
)
3934 case sfk_complete_destructor
:
3935 name
= complete_dtor_identifier
;
3938 case sfk_base_destructor
:
3939 name
= base_dtor_identifier
;
3942 case sfk_deleting_destructor
:
3943 name
= deleting_dtor_identifier
;
3949 fn
= lookup_fnfields (TREE_TYPE (exp
), name
, /*protect=*/2);
3950 return build_new_method_call (exp
, fn
,
3952 /*conversion_path=*/NULL_TREE
,
3958 /* Generate a call to a destructor. TYPE is the type to cast ADDR to.
3959 ADDR is an expression which yields the store to be destroyed.
3960 AUTO_DELETE is the name of the destructor to call, i.e., either
3961 sfk_complete_destructor, sfk_base_destructor, or
3962 sfk_deleting_destructor.
3964 FLAGS is the logical disjunction of zero or more LOOKUP_
3965 flags. See cp-tree.h for more info. */
3968 build_delete (tree otype
, tree addr
, special_function_kind auto_delete
,
3969 int flags
, int use_global_delete
, tsubst_flags_t complain
)
3973 if (addr
== error_mark_node
)
3974 return error_mark_node
;
3976 tree type
= TYPE_MAIN_VARIANT (otype
);
3978 /* Can happen when CURRENT_EXCEPTION_OBJECT gets its type
3979 set to `error_mark_node' before it gets properly cleaned up. */
3980 if (type
== error_mark_node
)
3981 return error_mark_node
;
3983 if (TREE_CODE (type
) == POINTER_TYPE
)
3984 type
= TYPE_MAIN_VARIANT (TREE_TYPE (type
));
3986 if (TREE_CODE (type
) == ARRAY_TYPE
)
3988 if (TYPE_DOMAIN (type
) == NULL_TREE
)
3990 if (complain
& tf_error
)
3991 error ("unknown array size in delete");
3992 return error_mark_node
;
3994 return build_vec_delete (addr
, array_type_nelts (type
),
3995 auto_delete
, use_global_delete
, complain
);
3998 if (TYPE_PTR_P (otype
))
4000 addr
= mark_rvalue_use (addr
);
4002 /* We don't want to warn about delete of void*, only other
4003 incomplete types. Deleting other incomplete types
4004 invokes undefined behavior, but it is not ill-formed, so
4005 compile to something that would even do The Right Thing
4006 (TM) should the type have a trivial dtor and no delete
4008 if (!VOID_TYPE_P (type
))
4010 complete_type (type
);
4011 if (!COMPLETE_TYPE_P (type
))
4013 if ((complain
& tf_warning
)
4014 && warning (OPT_Wdelete_incomplete
,
4015 "possible problem detected in invocation of "
4016 "delete operator:"))
4018 cxx_incomplete_type_diagnostic (addr
, type
, DK_WARNING
);
4019 inform (input_location
,
4020 "neither the destructor nor the class-specific "
4021 "operator delete will be called, even if they are "
4022 "declared when the class is defined");
4025 else if (auto_delete
== sfk_deleting_destructor
&& warn_delnonvdtor
4026 && MAYBE_CLASS_TYPE_P (type
) && !CLASSTYPE_FINAL (type
)
4027 && TYPE_POLYMORPHIC_P (type
))
4030 dtor
= CLASSTYPE_DESTRUCTORS (type
);
4031 if (!dtor
|| !DECL_VINDEX (dtor
))
4033 if (CLASSTYPE_PURE_VIRTUALS (type
))
4034 warning (OPT_Wdelete_non_virtual_dtor
,
4035 "deleting object of abstract class type %qT"
4036 " which has non-virtual destructor"
4037 " will cause undefined behaviour", type
);
4039 warning (OPT_Wdelete_non_virtual_dtor
,
4040 "deleting object of polymorphic class type %qT"
4041 " which has non-virtual destructor"
4042 " might cause undefined behaviour", type
);
4046 if (TREE_SIDE_EFFECTS (addr
))
4047 addr
= save_expr (addr
);
4049 /* Throw away const and volatile on target type of addr. */
4050 addr
= convert_force (build_pointer_type (type
), addr
, 0, complain
);
4054 /* Don't check PROTECT here; leave that decision to the
4055 destructor. If the destructor is accessible, call it,
4056 else report error. */
4057 addr
= cp_build_addr_expr (addr
, complain
);
4058 if (addr
== error_mark_node
)
4059 return error_mark_node
;
4060 if (TREE_SIDE_EFFECTS (addr
))
4061 addr
= save_expr (addr
);
4063 addr
= convert_force (build_pointer_type (type
), addr
, 0, complain
);
4066 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type
))
4068 /* Make sure the destructor is callable. */
4069 if (type_build_dtor_call (type
))
4071 expr
= build_dtor_call (cp_build_indirect_ref (addr
, RO_NULL
,
4073 sfk_complete_destructor
, flags
, complain
);
4074 if (expr
== error_mark_node
)
4075 return error_mark_node
;
4078 if (auto_delete
!= sfk_deleting_destructor
)
4081 return build_op_delete_call (DELETE_EXPR
, addr
,
4082 cxx_sizeof_nowarn (type
),
4084 /*placement=*/NULL_TREE
,
4085 /*alloc_fn=*/NULL_TREE
,
4090 tree head
= NULL_TREE
;
4091 tree do_delete
= NULL_TREE
;
4094 if (CLASSTYPE_LAZY_DESTRUCTOR (type
))
4095 lazily_declare_fn (sfk_destructor
, type
);
4097 /* For `::delete x', we must not use the deleting destructor
4098 since then we would not be sure to get the global `operator
4100 if (use_global_delete
&& auto_delete
== sfk_deleting_destructor
)
4102 /* We will use ADDR multiple times so we must save it. */
4103 addr
= save_expr (addr
);
4104 head
= get_target_expr (build_headof (addr
));
4105 /* Delete the object. */
4106 do_delete
= build_op_delete_call (DELETE_EXPR
,
4108 cxx_sizeof_nowarn (type
),
4110 /*placement=*/NULL_TREE
,
4111 /*alloc_fn=*/NULL_TREE
,
4113 /* Otherwise, treat this like a complete object destructor
4115 auto_delete
= sfk_complete_destructor
;
4117 /* If the destructor is non-virtual, there is no deleting
4118 variant. Instead, we must explicitly call the appropriate
4119 `operator delete' here. */
4120 else if (!DECL_VIRTUAL_P (CLASSTYPE_DESTRUCTORS (type
))
4121 && auto_delete
== sfk_deleting_destructor
)
4123 /* We will use ADDR multiple times so we must save it. */
4124 addr
= save_expr (addr
);
4125 /* Build the call. */
4126 do_delete
= build_op_delete_call (DELETE_EXPR
,
4128 cxx_sizeof_nowarn (type
),
4130 /*placement=*/NULL_TREE
,
4131 /*alloc_fn=*/NULL_TREE
,
4133 /* Call the complete object destructor. */
4134 auto_delete
= sfk_complete_destructor
;
4136 else if (auto_delete
== sfk_deleting_destructor
4137 && TYPE_GETS_REG_DELETE (type
))
4139 /* Make sure we have access to the member op delete, even though
4140 we'll actually be calling it from the destructor. */
4141 build_op_delete_call (DELETE_EXPR
, addr
, cxx_sizeof_nowarn (type
),
4143 /*placement=*/NULL_TREE
,
4144 /*alloc_fn=*/NULL_TREE
,
4148 expr
= build_dtor_call (cp_build_indirect_ref (addr
, RO_NULL
, complain
),
4149 auto_delete
, flags
, complain
);
4150 if (expr
== error_mark_node
)
4151 return error_mark_node
;
4153 expr
= build2 (COMPOUND_EXPR
, void_type_node
, expr
, do_delete
);
4155 /* We need to calculate this before the dtor changes the vptr. */
4157 expr
= build2 (COMPOUND_EXPR
, void_type_node
, head
, expr
);
4159 if (flags
& LOOKUP_DESTRUCTOR
)
4160 /* Explicit destructor call; don't check for null pointer. */
4161 ifexp
= integer_one_node
;
4164 /* Handle deleting a null pointer. */
4165 ifexp
= fold (cp_build_binary_op (input_location
,
4166 NE_EXPR
, addr
, nullptr_node
,
4168 if (ifexp
== error_mark_node
)
4169 return error_mark_node
;
4172 if (ifexp
!= integer_one_node
)
4173 expr
= build3 (COND_EXPR
, void_type_node
, ifexp
, expr
, void_node
);
4179 /* At the beginning of a destructor, push cleanups that will call the
4180 destructors for our base classes and members.
4182 Called from begin_destructor_body. */
4185 push_base_cleanups (void)
4187 tree binfo
, base_binfo
;
4191 vec
<tree
, va_gc
> *vbases
;
4193 /* Run destructors for all virtual baseclasses. */
4194 if (CLASSTYPE_VBASECLASSES (current_class_type
))
4196 tree cond
= (condition_conversion
4197 (build2 (BIT_AND_EXPR
, integer_type_node
,
4198 current_in_charge_parm
,
4199 integer_two_node
)));
4201 /* The CLASSTYPE_VBASECLASSES vector is in initialization
4202 order, which is also the right order for pushing cleanups. */
4203 for (vbases
= CLASSTYPE_VBASECLASSES (current_class_type
), i
= 0;
4204 vec_safe_iterate (vbases
, i
, &base_binfo
); i
++)
4206 if (type_build_dtor_call (BINFO_TYPE (base_binfo
)))
4208 expr
= build_special_member_call (current_class_ref
,
4209 base_dtor_identifier
,
4213 | LOOKUP_NONVIRTUAL
),
4214 tf_warning_or_error
);
4215 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (BINFO_TYPE (base_binfo
)))
4217 expr
= build3 (COND_EXPR
, void_type_node
, cond
,
4219 finish_decl_cleanup (NULL_TREE
, expr
);
4225 /* Take care of the remaining baseclasses. */
4226 for (binfo
= TYPE_BINFO (current_class_type
), i
= 0;
4227 BINFO_BASE_ITERATE (binfo
, i
, base_binfo
); i
++)
4229 if (BINFO_VIRTUAL_P (base_binfo
)
4230 || !type_build_dtor_call (BINFO_TYPE (base_binfo
)))
4233 expr
= build_special_member_call (current_class_ref
,
4234 base_dtor_identifier
,
4236 LOOKUP_NORMAL
| LOOKUP_NONVIRTUAL
,
4237 tf_warning_or_error
);
4238 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (BINFO_TYPE (base_binfo
)))
4239 finish_decl_cleanup (NULL_TREE
, expr
);
4242 /* Don't automatically destroy union members. */
4243 if (TREE_CODE (current_class_type
) == UNION_TYPE
)
4246 for (member
= TYPE_FIELDS (current_class_type
); member
;
4247 member
= DECL_CHAIN (member
))
4249 tree this_type
= TREE_TYPE (member
);
4250 if (this_type
== error_mark_node
4251 || TREE_CODE (member
) != FIELD_DECL
4252 || DECL_ARTIFICIAL (member
))
4254 if (ANON_AGGR_TYPE_P (this_type
))
4256 if (type_build_dtor_call (this_type
))
4258 tree this_member
= (build_class_member_access_expr
4259 (current_class_ref
, member
,
4260 /*access_path=*/NULL_TREE
,
4261 /*preserve_reference=*/false,
4262 tf_warning_or_error
));
4263 expr
= build_delete (this_type
, this_member
,
4264 sfk_complete_destructor
,
4265 LOOKUP_NONVIRTUAL
|LOOKUP_DESTRUCTOR
|LOOKUP_NORMAL
,
4266 0, tf_warning_or_error
);
4267 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (this_type
))
4268 finish_decl_cleanup (NULL_TREE
, expr
);
4273 /* Build a C++ vector delete expression.
4274 MAXINDEX is the number of elements to be deleted.
4275 ELT_SIZE is the nominal size of each element in the vector.
4276 BASE is the expression that should yield the store to be deleted.
4277 This function expands (or synthesizes) these calls itself.
4278 AUTO_DELETE_VEC says whether the container (vector) should be deallocated.
4280 This also calls delete for virtual baseclasses of elements of the vector.
4282 Update: MAXINDEX is no longer needed. The size can be extracted from the
4283 start of the vector for pointers, and from the type for arrays. We still
4284 use MAXINDEX for arrays because it happens to already have one of the
4285 values we'd have to extract. (We could use MAXINDEX with pointers to
4286 confirm the size, and trap if the numbers differ; not clear that it'd
4287 be worth bothering.) */
4290 build_vec_delete (tree base
, tree maxindex
,
4291 special_function_kind auto_delete_vec
,
4292 int use_global_delete
, tsubst_flags_t complain
)
4296 tree base_init
= NULL_TREE
;
4298 type
= TREE_TYPE (base
);
4300 if (TYPE_PTR_P (type
))
4302 /* Step back one from start of vector, and read dimension. */
4304 tree size_ptr_type
= build_pointer_type (sizetype
);
4306 base
= mark_rvalue_use (base
);
4307 if (TREE_SIDE_EFFECTS (base
))
4309 base_init
= get_target_expr (base
);
4310 base
= TARGET_EXPR_SLOT (base_init
);
4312 type
= strip_array_types (TREE_TYPE (type
));
4313 cookie_addr
= fold_build1_loc (input_location
, NEGATE_EXPR
,
4314 sizetype
, TYPE_SIZE_UNIT (sizetype
));
4315 cookie_addr
= fold_build_pointer_plus (fold_convert (size_ptr_type
, base
),
4317 maxindex
= cp_build_indirect_ref (cookie_addr
, RO_NULL
, complain
);
4319 else if (TREE_CODE (type
) == ARRAY_TYPE
)
4321 /* Get the total number of things in the array, maxindex is a
4323 maxindex
= array_type_nelts_total (type
);
4324 type
= strip_array_types (type
);
4325 base
= decay_conversion (base
, complain
);
4326 if (base
== error_mark_node
)
4327 return error_mark_node
;
4328 if (TREE_SIDE_EFFECTS (base
))
4330 base_init
= get_target_expr (base
);
4331 base
= TARGET_EXPR_SLOT (base_init
);
4336 if (base
!= error_mark_node
&& !(complain
& tf_error
))
4337 error ("type to vector delete is neither pointer or array type");
4338 return error_mark_node
;
4341 rval
= build_vec_delete_1 (base
, maxindex
, type
, auto_delete_vec
,
4342 use_global_delete
, complain
);
4343 if (base_init
&& rval
!= error_mark_node
)
4344 rval
= build2 (COMPOUND_EXPR
, TREE_TYPE (rval
), base_init
, rval
);