gcc/
[official-gcc.git] / gcc / cp / init.c
blob66451b1e356daf4a0f12fd47496dda007c6058be
1 /* Handle initialization things in C++.
2 Copyright (C) 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
4 Free Software Foundation, Inc.
5 Contributed by Michael Tiemann (tiemann@cygnus.com)
7 This file is part of GCC.
9 GCC is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3, or (at your option)
12 any later version.
14 GCC is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with GCC; see the file COPYING3. If not see
21 <http://www.gnu.org/licenses/>. */
23 /* High-level class interface. */
25 #include "config.h"
26 #include "system.h"
27 #include "coretypes.h"
28 #include "tm.h"
29 #include "tree.h"
30 #include "cp-tree.h"
31 #include "flags.h"
32 #include "output.h"
33 #include "except.h"
34 #include "toplev.h"
35 #include "target.h"
37 static bool begin_init_stmts (tree *, tree *);
38 static tree finish_init_stmts (bool, tree, tree);
39 static void construct_virtual_base (tree, tree);
40 static void expand_aggr_init_1 (tree, tree, tree, tree, int, tsubst_flags_t);
41 static void expand_default_init (tree, tree, tree, tree, int, tsubst_flags_t);
42 static tree build_vec_delete_1 (tree, tree, tree, special_function_kind, int);
43 static void perform_member_init (tree, tree);
44 static tree build_builtin_delete_call (tree);
45 static int member_init_ok_or_else (tree, tree, tree);
46 static void expand_virtual_init (tree, tree);
47 static tree sort_mem_initializers (tree, tree);
48 static tree initializing_context (tree);
49 static void expand_cleanup_for_base (tree, tree);
50 static tree get_temp_regvar (tree, tree);
51 static tree dfs_initialize_vtbl_ptrs (tree, void *);
52 static tree build_dtor_call (tree, special_function_kind, int);
53 static tree build_field_list (tree, tree, int *);
54 static tree build_vtbl_address (tree);
55 static int diagnose_uninitialized_cst_or_ref_member_1 (tree, tree, bool, bool);
57 /* We are about to generate some complex initialization code.
58 Conceptually, it is all a single expression. However, we may want
59 to include conditionals, loops, and other such statement-level
60 constructs. Therefore, we build the initialization code inside a
61 statement-expression. This function starts such an expression.
62 STMT_EXPR_P and COMPOUND_STMT_P are filled in by this function;
63 pass them back to finish_init_stmts when the expression is
64 complete. */
66 static bool
67 begin_init_stmts (tree *stmt_expr_p, tree *compound_stmt_p)
69 bool is_global = !building_stmt_tree ();
71 *stmt_expr_p = begin_stmt_expr ();
72 *compound_stmt_p = begin_compound_stmt (BCS_NO_SCOPE);
74 return is_global;
77 /* Finish out the statement-expression begun by the previous call to
78 begin_init_stmts. Returns the statement-expression itself. */
80 static tree
81 finish_init_stmts (bool is_global, tree stmt_expr, tree compound_stmt)
83 finish_compound_stmt (compound_stmt);
85 stmt_expr = finish_stmt_expr (stmt_expr, true);
87 gcc_assert (!building_stmt_tree () == is_global);
89 return stmt_expr;
92 /* Constructors */
94 /* Called from initialize_vtbl_ptrs via dfs_walk. BINFO is the base
95 which we want to initialize the vtable pointer for, DATA is
96 TREE_LIST whose TREE_VALUE is the this ptr expression. */
98 static tree
99 dfs_initialize_vtbl_ptrs (tree binfo, void *data)
101 if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
102 return dfs_skip_bases;
104 if (!BINFO_PRIMARY_P (binfo) || BINFO_VIRTUAL_P (binfo))
106 tree base_ptr = TREE_VALUE ((tree) data);
108 base_ptr = build_base_path (PLUS_EXPR, base_ptr, binfo, /*nonnull=*/1);
110 expand_virtual_init (binfo, base_ptr);
113 return NULL_TREE;
116 /* Initialize all the vtable pointers in the object pointed to by
117 ADDR. */
119 void
120 initialize_vtbl_ptrs (tree addr)
122 tree list;
123 tree type;
125 type = TREE_TYPE (TREE_TYPE (addr));
126 list = build_tree_list (type, addr);
128 /* Walk through the hierarchy, initializing the vptr in each base
129 class. We do these in pre-order because we can't find the virtual
130 bases for a class until we've initialized the vtbl for that
131 class. */
132 dfs_walk_once (TYPE_BINFO (type), dfs_initialize_vtbl_ptrs, NULL, list);
135 /* Return an expression for the zero-initialization of an object with
136 type T. This expression will either be a constant (in the case
137 that T is a scalar), or a CONSTRUCTOR (in the case that T is an
138 aggregate), or NULL (in the case that T does not require
139 initialization). In either case, the value can be used as
140 DECL_INITIAL for a decl of the indicated TYPE; it is a valid static
141 initializer. If NELTS is non-NULL, and TYPE is an ARRAY_TYPE, NELTS
142 is the number of elements in the array. If STATIC_STORAGE_P is
143 TRUE, initializers are only generated for entities for which
144 zero-initialization does not simply mean filling the storage with
145 zero bytes. */
147 tree
148 build_zero_init (tree type, tree nelts, bool static_storage_p)
150 tree init = NULL_TREE;
152 /* [dcl.init]
154 To zero-initialize an object of type T means:
156 -- if T is a scalar type, the storage is set to the value of zero
157 converted to T.
159 -- if T is a non-union class type, the storage for each nonstatic
160 data member and each base-class subobject is zero-initialized.
162 -- if T is a union type, the storage for its first data member is
163 zero-initialized.
165 -- if T is an array type, the storage for each element is
166 zero-initialized.
168 -- if T is a reference type, no initialization is performed. */
170 gcc_assert (nelts == NULL_TREE || TREE_CODE (nelts) == INTEGER_CST);
172 if (type == error_mark_node)
174 else if (static_storage_p && zero_init_p (type))
175 /* In order to save space, we do not explicitly build initializers
176 for items that do not need them. GCC's semantics are that
177 items with static storage duration that are not otherwise
178 initialized are initialized to zero. */
180 else if (SCALAR_TYPE_P (type))
181 init = convert (type, integer_zero_node);
182 else if (CLASS_TYPE_P (type))
184 tree field;
185 VEC(constructor_elt,gc) *v = NULL;
187 /* Iterate over the fields, building initializations. */
188 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
190 if (TREE_CODE (field) != FIELD_DECL)
191 continue;
193 /* Note that for class types there will be FIELD_DECLs
194 corresponding to base classes as well. Thus, iterating
195 over TYPE_FIELDs will result in correct initialization of
196 all of the subobjects. */
197 if (!static_storage_p || !zero_init_p (TREE_TYPE (field)))
199 tree value = build_zero_init (TREE_TYPE (field),
200 /*nelts=*/NULL_TREE,
201 static_storage_p);
202 if (value)
203 CONSTRUCTOR_APPEND_ELT(v, field, value);
206 /* For unions, only the first field is initialized. */
207 if (TREE_CODE (type) == UNION_TYPE)
208 break;
211 /* Build a constructor to contain the initializations. */
212 init = build_constructor (type, v);
214 else if (TREE_CODE (type) == ARRAY_TYPE)
216 tree max_index;
217 VEC(constructor_elt,gc) *v = NULL;
219 /* Iterate over the array elements, building initializations. */
220 if (nelts)
221 max_index = fold_build2_loc (input_location,
222 MINUS_EXPR, TREE_TYPE (nelts),
223 nelts, integer_one_node);
224 else
225 max_index = array_type_nelts (type);
227 /* If we have an error_mark here, we should just return error mark
228 as we don't know the size of the array yet. */
229 if (max_index == error_mark_node)
230 return error_mark_node;
231 gcc_assert (TREE_CODE (max_index) == INTEGER_CST);
233 /* A zero-sized array, which is accepted as an extension, will
234 have an upper bound of -1. */
235 if (!tree_int_cst_equal (max_index, integer_minus_one_node))
237 constructor_elt *ce;
239 v = VEC_alloc (constructor_elt, gc, 1);
240 ce = VEC_quick_push (constructor_elt, v, NULL);
242 /* If this is a one element array, we just use a regular init. */
243 if (tree_int_cst_equal (size_zero_node, max_index))
244 ce->index = size_zero_node;
245 else
246 ce->index = build2 (RANGE_EXPR, sizetype, size_zero_node,
247 max_index);
249 ce->value = build_zero_init (TREE_TYPE (type),
250 /*nelts=*/NULL_TREE,
251 static_storage_p);
254 /* Build a constructor to contain the initializations. */
255 init = build_constructor (type, v);
257 else if (TREE_CODE (type) == VECTOR_TYPE)
258 init = fold_convert (type, integer_zero_node);
259 else
260 gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
262 /* In all cases, the initializer is a constant. */
263 if (init)
264 TREE_CONSTANT (init) = 1;
266 return init;
269 /* Return a suitable initializer for value-initializing an object of type
270 TYPE, as described in [dcl.init]. */
272 tree
273 build_value_init (tree type)
275 /* [dcl.init]
277 To value-initialize an object of type T means:
279 - if T is a class type (clause 9) with a user-provided constructor
280 (12.1), then the default constructor for T is called (and the
281 initialization is ill-formed if T has no accessible default
282 constructor);
284 - if T is a non-union class type without a user-provided constructor,
285 then every non-static data member and base-class component of T is
286 value-initialized;92)
288 - if T is an array type, then each element is value-initialized;
290 - otherwise, the object is zero-initialized.
292 A program that calls for default-initialization or
293 value-initialization of an entity of reference type is ill-formed.
295 92) Value-initialization for such a class object may be implemented by
296 zero-initializing the object and then calling the default
297 constructor. */
299 if (CLASS_TYPE_P (type))
301 if (type_has_user_provided_constructor (type))
302 return build_aggr_init_expr
303 (type,
304 build_special_member_call (NULL_TREE, complete_ctor_identifier,
305 NULL, type, LOOKUP_NORMAL,
306 tf_warning_or_error));
307 else if (TREE_CODE (type) != UNION_TYPE && TYPE_NEEDS_CONSTRUCTING (type))
309 /* This is a class that needs constructing, but doesn't have
310 a user-provided constructor. So we need to zero-initialize
311 the object and then call the implicitly defined ctor.
312 This will be handled in simplify_aggr_init_expr. */
313 tree ctor = build_special_member_call
314 (NULL_TREE, complete_ctor_identifier,
315 NULL, type, LOOKUP_NORMAL, tf_warning_or_error);
317 ctor = build_aggr_init_expr (type, ctor);
318 AGGR_INIT_ZERO_FIRST (ctor) = 1;
319 return ctor;
322 return build_value_init_noctor (type);
325 /* Like build_value_init, but don't call the constructor for TYPE. Used
326 for base initializers. */
328 tree
329 build_value_init_noctor (tree type)
331 if (CLASS_TYPE_P (type))
333 gcc_assert (!TYPE_NEEDS_CONSTRUCTING (type));
335 if (TREE_CODE (type) != UNION_TYPE)
337 tree field;
338 VEC(constructor_elt,gc) *v = NULL;
340 /* Iterate over the fields, building initializations. */
341 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
343 tree ftype, value;
345 if (TREE_CODE (field) != FIELD_DECL)
346 continue;
348 ftype = TREE_TYPE (field);
350 if (TREE_CODE (ftype) == REFERENCE_TYPE)
351 error ("value-initialization of reference");
353 /* We could skip vfields and fields of types with
354 user-defined constructors, but I think that won't improve
355 performance at all; it should be simpler in general just
356 to zero out the entire object than try to only zero the
357 bits that actually need it. */
359 /* Note that for class types there will be FIELD_DECLs
360 corresponding to base classes as well. Thus, iterating
361 over TYPE_FIELDs will result in correct initialization of
362 all of the subobjects. */
363 value = build_value_init (ftype);
365 if (value)
366 CONSTRUCTOR_APPEND_ELT(v, field, value);
369 /* Build a constructor to contain the zero- initializations. */
370 return build_constructor (type, v);
373 else if (TREE_CODE (type) == ARRAY_TYPE)
375 VEC(constructor_elt,gc) *v = NULL;
377 /* Iterate over the array elements, building initializations. */
378 tree max_index = array_type_nelts (type);
380 /* If we have an error_mark here, we should just return error mark
381 as we don't know the size of the array yet. */
382 if (max_index == error_mark_node)
383 return error_mark_node;
384 gcc_assert (TREE_CODE (max_index) == INTEGER_CST);
386 /* A zero-sized array, which is accepted as an extension, will
387 have an upper bound of -1. */
388 if (!tree_int_cst_equal (max_index, integer_minus_one_node))
390 constructor_elt *ce;
392 v = VEC_alloc (constructor_elt, gc, 1);
393 ce = VEC_quick_push (constructor_elt, v, NULL);
395 /* If this is a one element array, we just use a regular init. */
396 if (tree_int_cst_equal (size_zero_node, max_index))
397 ce->index = size_zero_node;
398 else
399 ce->index = build2 (RANGE_EXPR, sizetype, size_zero_node,
400 max_index);
402 ce->value = build_value_init (TREE_TYPE (type));
404 /* The gimplifier can't deal with a RANGE_EXPR of TARGET_EXPRs. */
405 gcc_assert (TREE_CODE (ce->value) != TARGET_EXPR
406 && TREE_CODE (ce->value) != AGGR_INIT_EXPR);
409 /* Build a constructor to contain the initializations. */
410 return build_constructor (type, v);
413 return build_zero_init (type, NULL_TREE, /*static_storage_p=*/false);
416 /* Initialize MEMBER, a FIELD_DECL, with INIT, a TREE_LIST of
417 arguments. If TREE_LIST is void_type_node, an empty initializer
418 list was given; if NULL_TREE no initializer was given. */
420 static void
421 perform_member_init (tree member, tree init)
423 tree decl;
424 tree type = TREE_TYPE (member);
426 /* Effective C++ rule 12 requires that all data members be
427 initialized. */
428 if (warn_ecpp && init == NULL_TREE && TREE_CODE (type) != ARRAY_TYPE)
429 warning_at (DECL_SOURCE_LOCATION (current_function_decl), OPT_Weffc__,
430 "%qD should be initialized in the member initialization list",
431 member);
433 /* Get an lvalue for the data member. */
434 decl = build_class_member_access_expr (current_class_ref, member,
435 /*access_path=*/NULL_TREE,
436 /*preserve_reference=*/true,
437 tf_warning_or_error);
438 if (decl == error_mark_node)
439 return;
441 if (init == void_type_node)
443 /* mem() means value-initialization. */
444 if (TREE_CODE (type) == ARRAY_TYPE)
446 init = build_vec_init (decl, NULL_TREE, NULL_TREE,
447 /*explicit_value_init_p=*/true,
448 /* from_array=*/0,
449 tf_warning_or_error);
450 finish_expr_stmt (init);
452 else
454 if (TREE_CODE (type) == REFERENCE_TYPE)
455 permerror (DECL_SOURCE_LOCATION (current_function_decl),
456 "value-initialization of %q#D, which has reference type",
457 member);
458 else
460 init = build2 (INIT_EXPR, type, decl, build_value_init (type));
461 finish_expr_stmt (init);
465 /* Deal with this here, as we will get confused if we try to call the
466 assignment op for an anonymous union. This can happen in a
467 synthesized copy constructor. */
468 else if (ANON_AGGR_TYPE_P (type))
470 if (init)
472 init = build2 (INIT_EXPR, type, decl, TREE_VALUE (init));
473 finish_expr_stmt (init);
476 else if (TYPE_NEEDS_CONSTRUCTING (type))
478 if (init != NULL_TREE
479 && TREE_CODE (type) == ARRAY_TYPE
480 && TREE_CHAIN (init) == NULL_TREE
481 && TREE_CODE (TREE_TYPE (TREE_VALUE (init))) == ARRAY_TYPE)
483 /* Initialization of one array from another. */
484 finish_expr_stmt (build_vec_init (decl, NULL_TREE, TREE_VALUE (init),
485 /*explicit_value_init_p=*/false,
486 /* from_array=*/1,
487 tf_warning_or_error));
489 else
491 if (CP_TYPE_CONST_P (type)
492 && init == NULL_TREE
493 && !type_has_user_provided_default_constructor (type))
494 /* TYPE_NEEDS_CONSTRUCTING can be set just because we have a
495 vtable; still give this diagnostic. */
496 permerror (DECL_SOURCE_LOCATION (current_function_decl),
497 "uninitialized member %qD with %<const%> type %qT",
498 member, type);
499 finish_expr_stmt (build_aggr_init (decl, init, 0,
500 tf_warning_or_error));
503 else
505 if (init == NULL_TREE)
507 tree core_type;
508 /* member traversal: note it leaves init NULL */
509 if (TREE_CODE (type) == REFERENCE_TYPE)
510 permerror (DECL_SOURCE_LOCATION (current_function_decl),
511 "uninitialized reference member %qD",
512 member);
513 else if (CP_TYPE_CONST_P (type))
514 permerror (DECL_SOURCE_LOCATION (current_function_decl),
515 "uninitialized member %qD with %<const%> type %qT",
516 member, type);
518 core_type = strip_array_types (type);
519 if (CLASS_TYPE_P (core_type)
520 && (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type)
521 || CLASSTYPE_REF_FIELDS_NEED_INIT (core_type)))
522 diagnose_uninitialized_cst_or_ref_member (core_type,
523 /*using_new=*/false,
524 /*complain=*/true);
526 else if (TREE_CODE (init) == TREE_LIST)
527 /* There was an explicit member initialization. Do some work
528 in that case. */
529 init = build_x_compound_expr_from_list (init, "member initializer");
531 if (init)
532 finish_expr_stmt (cp_build_modify_expr (decl, INIT_EXPR, init,
533 tf_warning_or_error));
536 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
538 tree expr;
540 expr = build_class_member_access_expr (current_class_ref, member,
541 /*access_path=*/NULL_TREE,
542 /*preserve_reference=*/false,
543 tf_warning_or_error);
544 expr = build_delete (type, expr, sfk_complete_destructor,
545 LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR, 0);
547 if (expr != error_mark_node)
548 finish_eh_cleanup (expr);
552 /* Returns a TREE_LIST containing (as the TREE_PURPOSE of each node) all
553 the FIELD_DECLs on the TYPE_FIELDS list for T, in reverse order. */
555 static tree
556 build_field_list (tree t, tree list, int *uses_unions_p)
558 tree fields;
560 *uses_unions_p = 0;
562 /* Note whether or not T is a union. */
563 if (TREE_CODE (t) == UNION_TYPE)
564 *uses_unions_p = 1;
566 for (fields = TYPE_FIELDS (t); fields; fields = TREE_CHAIN (fields))
568 /* Skip CONST_DECLs for enumeration constants and so forth. */
569 if (TREE_CODE (fields) != FIELD_DECL || DECL_ARTIFICIAL (fields))
570 continue;
572 /* Keep track of whether or not any fields are unions. */
573 if (TREE_CODE (TREE_TYPE (fields)) == UNION_TYPE)
574 *uses_unions_p = 1;
576 /* For an anonymous struct or union, we must recursively
577 consider the fields of the anonymous type. They can be
578 directly initialized from the constructor. */
579 if (ANON_AGGR_TYPE_P (TREE_TYPE (fields)))
581 /* Add this field itself. Synthesized copy constructors
582 initialize the entire aggregate. */
583 list = tree_cons (fields, NULL_TREE, list);
584 /* And now add the fields in the anonymous aggregate. */
585 list = build_field_list (TREE_TYPE (fields), list,
586 uses_unions_p);
588 /* Add this field. */
589 else if (DECL_NAME (fields))
590 list = tree_cons (fields, NULL_TREE, list);
593 return list;
596 /* The MEM_INITS are a TREE_LIST. The TREE_PURPOSE of each list gives
597 a FIELD_DECL or BINFO in T that needs initialization. The
598 TREE_VALUE gives the initializer, or list of initializer arguments.
600 Return a TREE_LIST containing all of the initializations required
601 for T, in the order in which they should be performed. The output
602 list has the same format as the input. */
604 static tree
605 sort_mem_initializers (tree t, tree mem_inits)
607 tree init;
608 tree base, binfo, base_binfo;
609 tree sorted_inits;
610 tree next_subobject;
611 VEC(tree,gc) *vbases;
612 int i;
613 int uses_unions_p;
615 /* Build up a list of initializations. The TREE_PURPOSE of entry
616 will be the subobject (a FIELD_DECL or BINFO) to initialize. The
617 TREE_VALUE will be the constructor arguments, or NULL if no
618 explicit initialization was provided. */
619 sorted_inits = NULL_TREE;
621 /* Process the virtual bases. */
622 for (vbases = CLASSTYPE_VBASECLASSES (t), i = 0;
623 VEC_iterate (tree, vbases, i, base); i++)
624 sorted_inits = tree_cons (base, NULL_TREE, sorted_inits);
626 /* Process the direct bases. */
627 for (binfo = TYPE_BINFO (t), i = 0;
628 BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
629 if (!BINFO_VIRTUAL_P (base_binfo))
630 sorted_inits = tree_cons (base_binfo, NULL_TREE, sorted_inits);
632 /* Process the non-static data members. */
633 sorted_inits = build_field_list (t, sorted_inits, &uses_unions_p);
634 /* Reverse the entire list of initializations, so that they are in
635 the order that they will actually be performed. */
636 sorted_inits = nreverse (sorted_inits);
638 /* If the user presented the initializers in an order different from
639 that in which they will actually occur, we issue a warning. Keep
640 track of the next subobject which can be explicitly initialized
641 without issuing a warning. */
642 next_subobject = sorted_inits;
644 /* Go through the explicit initializers, filling in TREE_PURPOSE in
645 the SORTED_INITS. */
646 for (init = mem_inits; init; init = TREE_CHAIN (init))
648 tree subobject;
649 tree subobject_init;
651 subobject = TREE_PURPOSE (init);
653 /* If the explicit initializers are in sorted order, then
654 SUBOBJECT will be NEXT_SUBOBJECT, or something following
655 it. */
656 for (subobject_init = next_subobject;
657 subobject_init;
658 subobject_init = TREE_CHAIN (subobject_init))
659 if (TREE_PURPOSE (subobject_init) == subobject)
660 break;
662 /* Issue a warning if the explicit initializer order does not
663 match that which will actually occur.
664 ??? Are all these on the correct lines? */
665 if (warn_reorder && !subobject_init)
667 if (TREE_CODE (TREE_PURPOSE (next_subobject)) == FIELD_DECL)
668 warning (OPT_Wreorder, "%q+D will be initialized after",
669 TREE_PURPOSE (next_subobject));
670 else
671 warning (OPT_Wreorder, "base %qT will be initialized after",
672 TREE_PURPOSE (next_subobject));
673 if (TREE_CODE (subobject) == FIELD_DECL)
674 warning (OPT_Wreorder, " %q+#D", subobject);
675 else
676 warning (OPT_Wreorder, " base %qT", subobject);
677 warning_at (DECL_SOURCE_LOCATION (current_function_decl),
678 OPT_Wreorder, " when initialized here");
681 /* Look again, from the beginning of the list. */
682 if (!subobject_init)
684 subobject_init = sorted_inits;
685 while (TREE_PURPOSE (subobject_init) != subobject)
686 subobject_init = TREE_CHAIN (subobject_init);
689 /* It is invalid to initialize the same subobject more than
690 once. */
691 if (TREE_VALUE (subobject_init))
693 if (TREE_CODE (subobject) == FIELD_DECL)
694 error_at (DECL_SOURCE_LOCATION (current_function_decl),
695 "multiple initializations given for %qD",
696 subobject);
697 else
698 error_at (DECL_SOURCE_LOCATION (current_function_decl),
699 "multiple initializations given for base %qT",
700 subobject);
703 /* Record the initialization. */
704 TREE_VALUE (subobject_init) = TREE_VALUE (init);
705 next_subobject = subobject_init;
708 /* [class.base.init]
710 If a ctor-initializer specifies more than one mem-initializer for
711 multiple members of the same union (including members of
712 anonymous unions), the ctor-initializer is ill-formed. */
713 if (uses_unions_p)
715 tree last_field = NULL_TREE;
716 for (init = sorted_inits; init; init = TREE_CHAIN (init))
718 tree field;
719 tree field_type;
720 int done;
722 /* Skip uninitialized members and base classes. */
723 if (!TREE_VALUE (init)
724 || TREE_CODE (TREE_PURPOSE (init)) != FIELD_DECL)
725 continue;
726 /* See if this field is a member of a union, or a member of a
727 structure contained in a union, etc. */
728 field = TREE_PURPOSE (init);
729 for (field_type = DECL_CONTEXT (field);
730 !same_type_p (field_type, t);
731 field_type = TYPE_CONTEXT (field_type))
732 if (TREE_CODE (field_type) == UNION_TYPE)
733 break;
734 /* If this field is not a member of a union, skip it. */
735 if (TREE_CODE (field_type) != UNION_TYPE)
736 continue;
738 /* It's only an error if we have two initializers for the same
739 union type. */
740 if (!last_field)
742 last_field = field;
743 continue;
746 /* See if LAST_FIELD and the field initialized by INIT are
747 members of the same union. If so, there's a problem,
748 unless they're actually members of the same structure
749 which is itself a member of a union. For example, given:
751 union { struct { int i; int j; }; };
753 initializing both `i' and `j' makes sense. */
754 field_type = DECL_CONTEXT (field);
755 done = 0;
758 tree last_field_type;
760 last_field_type = DECL_CONTEXT (last_field);
761 while (1)
763 if (same_type_p (last_field_type, field_type))
765 if (TREE_CODE (field_type) == UNION_TYPE)
766 error_at (DECL_SOURCE_LOCATION (current_function_decl),
767 "initializations for multiple members of %qT",
768 last_field_type);
769 done = 1;
770 break;
773 if (same_type_p (last_field_type, t))
774 break;
776 last_field_type = TYPE_CONTEXT (last_field_type);
779 /* If we've reached the outermost class, then we're
780 done. */
781 if (same_type_p (field_type, t))
782 break;
784 field_type = TYPE_CONTEXT (field_type);
786 while (!done);
788 last_field = field;
792 return sorted_inits;
795 /* Initialize all bases and members of CURRENT_CLASS_TYPE. MEM_INITS
796 is a TREE_LIST giving the explicit mem-initializer-list for the
797 constructor. The TREE_PURPOSE of each entry is a subobject (a
798 FIELD_DECL or a BINFO) of the CURRENT_CLASS_TYPE. The TREE_VALUE
799 is a TREE_LIST giving the arguments to the constructor or
800 void_type_node for an empty list of arguments. */
802 void
803 emit_mem_initializers (tree mem_inits)
805 /* We will already have issued an error message about the fact that
806 the type is incomplete. */
807 if (!COMPLETE_TYPE_P (current_class_type))
808 return;
810 /* Sort the mem-initializers into the order in which the
811 initializations should be performed. */
812 mem_inits = sort_mem_initializers (current_class_type, mem_inits);
814 in_base_initializer = 1;
816 /* Initialize base classes. */
817 while (mem_inits
818 && TREE_CODE (TREE_PURPOSE (mem_inits)) != FIELD_DECL)
820 tree subobject = TREE_PURPOSE (mem_inits);
821 tree arguments = TREE_VALUE (mem_inits);
823 /* If these initializations are taking place in a copy constructor,
824 the base class should probably be explicitly initialized if there
825 is a user-defined constructor in the base class (other than the
826 default constructor, which will be called anyway). */
827 if (extra_warnings && !arguments
828 && DECL_COPY_CONSTRUCTOR_P (current_function_decl)
829 && type_has_user_nondefault_constructor (BINFO_TYPE (subobject)))
830 warning_at (DECL_SOURCE_LOCATION (current_function_decl), OPT_Wextra,
831 "base class %q#T should be explicitly initialized in the "
832 "copy constructor",
833 BINFO_TYPE (subobject));
835 /* Initialize the base. */
836 if (BINFO_VIRTUAL_P (subobject))
837 construct_virtual_base (subobject, arguments);
838 else
840 tree base_addr;
842 base_addr = build_base_path (PLUS_EXPR, current_class_ptr,
843 subobject, 1);
844 expand_aggr_init_1 (subobject, NULL_TREE,
845 cp_build_indirect_ref (base_addr, RO_NULL,
846 tf_warning_or_error),
847 arguments,
848 LOOKUP_NORMAL,
849 tf_warning_or_error);
850 expand_cleanup_for_base (subobject, NULL_TREE);
853 mem_inits = TREE_CHAIN (mem_inits);
855 in_base_initializer = 0;
857 /* Initialize the vptrs. */
858 initialize_vtbl_ptrs (current_class_ptr);
860 /* Initialize the data members. */
861 while (mem_inits)
863 perform_member_init (TREE_PURPOSE (mem_inits),
864 TREE_VALUE (mem_inits));
865 mem_inits = TREE_CHAIN (mem_inits);
869 /* Returns the address of the vtable (i.e., the value that should be
870 assigned to the vptr) for BINFO. */
872 static tree
873 build_vtbl_address (tree binfo)
875 tree binfo_for = binfo;
876 tree vtbl;
878 if (BINFO_VPTR_INDEX (binfo) && BINFO_VIRTUAL_P (binfo))
879 /* If this is a virtual primary base, then the vtable we want to store
880 is that for the base this is being used as the primary base of. We
881 can't simply skip the initialization, because we may be expanding the
882 inits of a subobject constructor where the virtual base layout
883 can be different. */
884 while (BINFO_PRIMARY_P (binfo_for))
885 binfo_for = BINFO_INHERITANCE_CHAIN (binfo_for);
887 /* Figure out what vtable BINFO's vtable is based on, and mark it as
888 used. */
889 vtbl = get_vtbl_decl_for_binfo (binfo_for);
890 TREE_USED (vtbl) = 1;
892 /* Now compute the address to use when initializing the vptr. */
893 vtbl = unshare_expr (BINFO_VTABLE (binfo_for));
894 if (TREE_CODE (vtbl) == VAR_DECL)
895 vtbl = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (vtbl)), vtbl);
897 return vtbl;
900 /* This code sets up the virtual function tables appropriate for
901 the pointer DECL. It is a one-ply initialization.
903 BINFO is the exact type that DECL is supposed to be. In
904 multiple inheritance, this might mean "C's A" if C : A, B. */
906 static void
907 expand_virtual_init (tree binfo, tree decl)
909 tree vtbl, vtbl_ptr;
910 tree vtt_index;
912 /* Compute the initializer for vptr. */
913 vtbl = build_vtbl_address (binfo);
915 /* We may get this vptr from a VTT, if this is a subobject
916 constructor or subobject destructor. */
917 vtt_index = BINFO_VPTR_INDEX (binfo);
918 if (vtt_index)
920 tree vtbl2;
921 tree vtt_parm;
923 /* Compute the value to use, when there's a VTT. */
924 vtt_parm = current_vtt_parm;
925 vtbl2 = build2 (POINTER_PLUS_EXPR,
926 TREE_TYPE (vtt_parm),
927 vtt_parm,
928 vtt_index);
929 vtbl2 = cp_build_indirect_ref (vtbl2, RO_NULL, tf_warning_or_error);
930 vtbl2 = convert (TREE_TYPE (vtbl), vtbl2);
932 /* The actual initializer is the VTT value only in the subobject
933 constructor. In maybe_clone_body we'll substitute NULL for
934 the vtt_parm in the case of the non-subobject constructor. */
935 vtbl = build3 (COND_EXPR,
936 TREE_TYPE (vtbl),
937 build2 (EQ_EXPR, boolean_type_node,
938 current_in_charge_parm, integer_zero_node),
939 vtbl2,
940 vtbl);
943 /* Compute the location of the vtpr. */
944 vtbl_ptr = build_vfield_ref (cp_build_indirect_ref (decl, RO_NULL,
945 tf_warning_or_error),
946 TREE_TYPE (binfo));
947 gcc_assert (vtbl_ptr != error_mark_node);
949 /* Assign the vtable to the vptr. */
950 vtbl = convert_force (TREE_TYPE (vtbl_ptr), vtbl, 0);
951 finish_expr_stmt (cp_build_modify_expr (vtbl_ptr, NOP_EXPR, vtbl,
952 tf_warning_or_error));
955 /* If an exception is thrown in a constructor, those base classes already
956 constructed must be destroyed. This function creates the cleanup
957 for BINFO, which has just been constructed. If FLAG is non-NULL,
958 it is a DECL which is nonzero when this base needs to be
959 destroyed. */
961 static void
962 expand_cleanup_for_base (tree binfo, tree flag)
964 tree expr;
966 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (BINFO_TYPE (binfo)))
967 return;
969 /* Call the destructor. */
970 expr = build_special_member_call (current_class_ref,
971 base_dtor_identifier,
972 NULL,
973 binfo,
974 LOOKUP_NORMAL | LOOKUP_NONVIRTUAL,
975 tf_warning_or_error);
976 if (flag)
977 expr = fold_build3_loc (input_location,
978 COND_EXPR, void_type_node,
979 c_common_truthvalue_conversion (input_location, flag),
980 expr, integer_zero_node);
982 finish_eh_cleanup (expr);
985 /* Construct the virtual base-class VBASE passing the ARGUMENTS to its
986 constructor. */
988 static void
989 construct_virtual_base (tree vbase, tree arguments)
991 tree inner_if_stmt;
992 tree exp;
993 tree flag;
995 /* If there are virtual base classes with destructors, we need to
996 emit cleanups to destroy them if an exception is thrown during
997 the construction process. These exception regions (i.e., the
998 period during which the cleanups must occur) begin from the time
999 the construction is complete to the end of the function. If we
1000 create a conditional block in which to initialize the
1001 base-classes, then the cleanup region for the virtual base begins
1002 inside a block, and ends outside of that block. This situation
1003 confuses the sjlj exception-handling code. Therefore, we do not
1004 create a single conditional block, but one for each
1005 initialization. (That way the cleanup regions always begin
1006 in the outer block.) We trust the back end to figure out
1007 that the FLAG will not change across initializations, and
1008 avoid doing multiple tests. */
1009 flag = TREE_CHAIN (DECL_ARGUMENTS (current_function_decl));
1010 inner_if_stmt = begin_if_stmt ();
1011 finish_if_stmt_cond (flag, inner_if_stmt);
1013 /* Compute the location of the virtual base. If we're
1014 constructing virtual bases, then we must be the most derived
1015 class. Therefore, we don't have to look up the virtual base;
1016 we already know where it is. */
1017 exp = convert_to_base_statically (current_class_ref, vbase);
1019 expand_aggr_init_1 (vbase, current_class_ref, exp, arguments,
1020 LOOKUP_COMPLAIN, tf_warning_or_error);
1021 finish_then_clause (inner_if_stmt);
1022 finish_if_stmt (inner_if_stmt);
1024 expand_cleanup_for_base (vbase, flag);
1027 /* Find the context in which this FIELD can be initialized. */
1029 static tree
1030 initializing_context (tree field)
1032 tree t = DECL_CONTEXT (field);
1034 /* Anonymous union members can be initialized in the first enclosing
1035 non-anonymous union context. */
1036 while (t && ANON_AGGR_TYPE_P (t))
1037 t = TYPE_CONTEXT (t);
1038 return t;
1041 /* Function to give error message if member initialization specification
1042 is erroneous. FIELD is the member we decided to initialize.
1043 TYPE is the type for which the initialization is being performed.
1044 FIELD must be a member of TYPE.
1046 MEMBER_NAME is the name of the member. */
1048 static int
1049 member_init_ok_or_else (tree field, tree type, tree member_name)
1051 if (field == error_mark_node)
1052 return 0;
1053 if (!field)
1055 error ("class %qT does not have any field named %qD", type,
1056 member_name);
1057 return 0;
1059 if (TREE_CODE (field) == VAR_DECL)
1061 error ("%q#D is a static data member; it can only be "
1062 "initialized at its definition",
1063 field);
1064 return 0;
1066 if (TREE_CODE (field) != FIELD_DECL)
1068 error ("%q#D is not a non-static data member of %qT",
1069 field, type);
1070 return 0;
1072 if (initializing_context (field) != type)
1074 error ("class %qT does not have any field named %qD", type,
1075 member_name);
1076 return 0;
1079 return 1;
1082 /* NAME is a FIELD_DECL, an IDENTIFIER_NODE which names a field, or it
1083 is a _TYPE node or TYPE_DECL which names a base for that type.
1084 Check the validity of NAME, and return either the base _TYPE, base
1085 binfo, or the FIELD_DECL of the member. If NAME is invalid, return
1086 NULL_TREE and issue a diagnostic.
1088 An old style unnamed direct single base construction is permitted,
1089 where NAME is NULL. */
1091 tree
1092 expand_member_init (tree name)
1094 tree basetype;
1095 tree field;
1097 if (!current_class_ref)
1098 return NULL_TREE;
1100 if (!name)
1102 /* This is an obsolete unnamed base class initializer. The
1103 parser will already have warned about its use. */
1104 switch (BINFO_N_BASE_BINFOS (TYPE_BINFO (current_class_type)))
1106 case 0:
1107 error ("unnamed initializer for %qT, which has no base classes",
1108 current_class_type);
1109 return NULL_TREE;
1110 case 1:
1111 basetype = BINFO_TYPE
1112 (BINFO_BASE_BINFO (TYPE_BINFO (current_class_type), 0));
1113 break;
1114 default:
1115 error ("unnamed initializer for %qT, which uses multiple inheritance",
1116 current_class_type);
1117 return NULL_TREE;
1120 else if (TYPE_P (name))
1122 basetype = TYPE_MAIN_VARIANT (name);
1123 name = TYPE_NAME (name);
1125 else if (TREE_CODE (name) == TYPE_DECL)
1126 basetype = TYPE_MAIN_VARIANT (TREE_TYPE (name));
1127 else
1128 basetype = NULL_TREE;
1130 if (basetype)
1132 tree class_binfo;
1133 tree direct_binfo;
1134 tree virtual_binfo;
1135 int i;
1137 if (current_template_parms)
1138 return basetype;
1140 class_binfo = TYPE_BINFO (current_class_type);
1141 direct_binfo = NULL_TREE;
1142 virtual_binfo = NULL_TREE;
1144 /* Look for a direct base. */
1145 for (i = 0; BINFO_BASE_ITERATE (class_binfo, i, direct_binfo); ++i)
1146 if (SAME_BINFO_TYPE_P (BINFO_TYPE (direct_binfo), basetype))
1147 break;
1149 /* Look for a virtual base -- unless the direct base is itself
1150 virtual. */
1151 if (!direct_binfo || !BINFO_VIRTUAL_P (direct_binfo))
1152 virtual_binfo = binfo_for_vbase (basetype, current_class_type);
1154 /* [class.base.init]
1156 If a mem-initializer-id is ambiguous because it designates
1157 both a direct non-virtual base class and an inherited virtual
1158 base class, the mem-initializer is ill-formed. */
1159 if (direct_binfo && virtual_binfo)
1161 error ("%qD is both a direct base and an indirect virtual base",
1162 basetype);
1163 return NULL_TREE;
1166 if (!direct_binfo && !virtual_binfo)
1168 if (CLASSTYPE_VBASECLASSES (current_class_type))
1169 error ("type %qT is not a direct or virtual base of %qT",
1170 basetype, current_class_type);
1171 else
1172 error ("type %qT is not a direct base of %qT",
1173 basetype, current_class_type);
1174 return NULL_TREE;
1177 return direct_binfo ? direct_binfo : virtual_binfo;
1179 else
1181 if (TREE_CODE (name) == IDENTIFIER_NODE)
1182 field = lookup_field (current_class_type, name, 1, false);
1183 else
1184 field = name;
1186 if (member_init_ok_or_else (field, current_class_type, name))
1187 return field;
1190 return NULL_TREE;
1193 /* This is like `expand_member_init', only it stores one aggregate
1194 value into another.
1196 INIT comes in two flavors: it is either a value which
1197 is to be stored in EXP, or it is a parameter list
1198 to go to a constructor, which will operate on EXP.
1199 If INIT is not a parameter list for a constructor, then set
1200 LOOKUP_ONLYCONVERTING.
1201 If FLAGS is LOOKUP_ONLYCONVERTING then it is the = init form of
1202 the initializer, if FLAGS is 0, then it is the (init) form.
1203 If `init' is a CONSTRUCTOR, then we emit a warning message,
1204 explaining that such initializations are invalid.
1206 If INIT resolves to a CALL_EXPR which happens to return
1207 something of the type we are looking for, then we know
1208 that we can safely use that call to perform the
1209 initialization.
1211 The virtual function table pointer cannot be set up here, because
1212 we do not really know its type.
1214 This never calls operator=().
1216 When initializing, nothing is CONST.
1218 A default copy constructor may have to be used to perform the
1219 initialization.
1221 A constructor or a conversion operator may have to be used to
1222 perform the initialization, but not both, as it would be ambiguous. */
1224 tree
1225 build_aggr_init (tree exp, tree init, int flags, tsubst_flags_t complain)
1227 tree stmt_expr;
1228 tree compound_stmt;
1229 int destroy_temps;
1230 tree type = TREE_TYPE (exp);
1231 int was_const = TREE_READONLY (exp);
1232 int was_volatile = TREE_THIS_VOLATILE (exp);
1233 int is_global;
1235 if (init == error_mark_node)
1236 return error_mark_node;
1238 TREE_READONLY (exp) = 0;
1239 TREE_THIS_VOLATILE (exp) = 0;
1241 if (init && TREE_CODE (init) != TREE_LIST
1242 && !(BRACE_ENCLOSED_INITIALIZER_P (init)
1243 && CONSTRUCTOR_IS_DIRECT_INIT (init)))
1244 flags |= LOOKUP_ONLYCONVERTING;
1246 if (TREE_CODE (type) == ARRAY_TYPE)
1248 tree itype;
1250 /* An array may not be initialized use the parenthesized
1251 initialization form -- unless the initializer is "()". */
1252 if (init && TREE_CODE (init) == TREE_LIST)
1254 if (complain & tf_error)
1255 error ("bad array initializer");
1256 return error_mark_node;
1258 /* Must arrange to initialize each element of EXP
1259 from elements of INIT. */
1260 itype = init ? TREE_TYPE (init) : NULL_TREE;
1261 if (cv_qualified_p (type))
1262 TREE_TYPE (exp) = cv_unqualified (type);
1263 if (itype && cv_qualified_p (itype))
1264 TREE_TYPE (init) = cv_unqualified (itype);
1265 stmt_expr = build_vec_init (exp, NULL_TREE, init,
1266 /*explicit_value_init_p=*/false,
1267 itype && same_type_p (TREE_TYPE (init),
1268 TREE_TYPE (exp)),
1269 complain);
1270 TREE_READONLY (exp) = was_const;
1271 TREE_THIS_VOLATILE (exp) = was_volatile;
1272 TREE_TYPE (exp) = type;
1273 if (init)
1274 TREE_TYPE (init) = itype;
1275 return stmt_expr;
1278 if (TREE_CODE (exp) == VAR_DECL || TREE_CODE (exp) == PARM_DECL)
1279 /* Just know that we've seen something for this node. */
1280 TREE_USED (exp) = 1;
1282 is_global = begin_init_stmts (&stmt_expr, &compound_stmt);
1283 destroy_temps = stmts_are_full_exprs_p ();
1284 current_stmt_tree ()->stmts_are_full_exprs_p = 0;
1285 expand_aggr_init_1 (TYPE_BINFO (type), exp, exp,
1286 init, LOOKUP_NORMAL|flags, complain);
1287 stmt_expr = finish_init_stmts (is_global, stmt_expr, compound_stmt);
1288 current_stmt_tree ()->stmts_are_full_exprs_p = destroy_temps;
1289 TREE_READONLY (exp) = was_const;
1290 TREE_THIS_VOLATILE (exp) = was_volatile;
1292 return stmt_expr;
1295 static void
1296 expand_default_init (tree binfo, tree true_exp, tree exp, tree init, int flags,
1297 tsubst_flags_t complain)
1299 tree type = TREE_TYPE (exp);
1300 tree ctor_name;
1302 /* It fails because there may not be a constructor which takes
1303 its own type as the first (or only parameter), but which does
1304 take other types via a conversion. So, if the thing initializing
1305 the expression is a unit element of type X, first try X(X&),
1306 followed by initialization by X. If neither of these work
1307 out, then look hard. */
1308 tree rval;
1309 VEC(tree,gc) *parms;
1311 if (init && BRACE_ENCLOSED_INITIALIZER_P (init)
1312 && CP_AGGREGATE_TYPE_P (type))
1314 /* A brace-enclosed initializer for an aggregate. In C++0x this can
1315 happen for direct-initialization, too. */
1316 init = digest_init (type, init);
1317 init = build2 (INIT_EXPR, TREE_TYPE (exp), exp, init);
1318 TREE_SIDE_EFFECTS (init) = 1;
1319 finish_expr_stmt (init);
1320 return;
1323 if (init && TREE_CODE (init) != TREE_LIST
1324 && (flags & LOOKUP_ONLYCONVERTING))
1326 /* Base subobjects should only get direct-initialization. */
1327 gcc_assert (true_exp == exp);
1329 if (flags & DIRECT_BIND)
1330 /* Do nothing. We hit this in two cases: Reference initialization,
1331 where we aren't initializing a real variable, so we don't want
1332 to run a new constructor; and catching an exception, where we
1333 have already built up the constructor call so we could wrap it
1334 in an exception region. */;
1335 else
1336 init = ocp_convert (type, init, CONV_IMPLICIT|CONV_FORCE_TEMP, flags);
1338 if (TREE_CODE (init) == MUST_NOT_THROW_EXPR)
1339 /* We need to protect the initialization of a catch parm with a
1340 call to terminate(), which shows up as a MUST_NOT_THROW_EXPR
1341 around the TARGET_EXPR for the copy constructor. See
1342 initialize_handler_parm. */
1344 TREE_OPERAND (init, 0) = build2 (INIT_EXPR, TREE_TYPE (exp), exp,
1345 TREE_OPERAND (init, 0));
1346 TREE_TYPE (init) = void_type_node;
1348 else
1349 init = build2 (INIT_EXPR, TREE_TYPE (exp), exp, init);
1350 TREE_SIDE_EFFECTS (init) = 1;
1351 finish_expr_stmt (init);
1352 return;
1355 if (init == NULL_TREE)
1356 parms = NULL;
1357 else if (TREE_CODE (init) == TREE_LIST && !TREE_TYPE (init))
1359 parms = make_tree_vector ();
1360 for (; init != NULL_TREE; init = TREE_CHAIN (init))
1361 VEC_safe_push (tree, gc, parms, TREE_VALUE (init));
1363 else
1364 parms = make_tree_vector_single (init);
1366 if (true_exp == exp)
1367 ctor_name = complete_ctor_identifier;
1368 else
1369 ctor_name = base_ctor_identifier;
1371 rval = build_special_member_call (exp, ctor_name, &parms, binfo, flags,
1372 complain);
1374 if (parms != NULL)
1375 release_tree_vector (parms);
1377 if (TREE_SIDE_EFFECTS (rval))
1378 finish_expr_stmt (convert_to_void (rval, NULL, complain));
1381 /* This function is responsible for initializing EXP with INIT
1382 (if any).
1384 BINFO is the binfo of the type for who we are performing the
1385 initialization. For example, if W is a virtual base class of A and B,
1386 and C : A, B.
1387 If we are initializing B, then W must contain B's W vtable, whereas
1388 were we initializing C, W must contain C's W vtable.
1390 TRUE_EXP is nonzero if it is the true expression being initialized.
1391 In this case, it may be EXP, or may just contain EXP. The reason we
1392 need this is because if EXP is a base element of TRUE_EXP, we
1393 don't necessarily know by looking at EXP where its virtual
1394 baseclass fields should really be pointing. But we do know
1395 from TRUE_EXP. In constructors, we don't know anything about
1396 the value being initialized.
1398 FLAGS is just passed to `build_new_method_call'. See that function
1399 for its description. */
1401 static void
1402 expand_aggr_init_1 (tree binfo, tree true_exp, tree exp, tree init, int flags,
1403 tsubst_flags_t complain)
1405 tree type = TREE_TYPE (exp);
1407 gcc_assert (init != error_mark_node && type != error_mark_node);
1408 gcc_assert (building_stmt_tree ());
1410 /* Use a function returning the desired type to initialize EXP for us.
1411 If the function is a constructor, and its first argument is
1412 NULL_TREE, know that it was meant for us--just slide exp on
1413 in and expand the constructor. Constructors now come
1414 as TARGET_EXPRs. */
1416 if (init && TREE_CODE (exp) == VAR_DECL
1417 && COMPOUND_LITERAL_P (init))
1419 /* If store_init_value returns NULL_TREE, the INIT has been
1420 recorded as the DECL_INITIAL for EXP. That means there's
1421 nothing more we have to do. */
1422 init = store_init_value (exp, init, flags);
1423 if (init)
1424 finish_expr_stmt (init);
1425 return;
1428 /* If an explicit -- but empty -- initializer list was present,
1429 that's value-initialization. */
1430 if (init == void_type_node)
1432 /* If there's a user-provided constructor, we just call that. */
1433 if (type_has_user_provided_constructor (type))
1434 /* Fall through. */;
1435 /* If there isn't, but we still need to call the constructor,
1436 zero out the object first. */
1437 else if (TYPE_NEEDS_CONSTRUCTING (type))
1439 init = build_zero_init (type, NULL_TREE, /*static_storage_p=*/false);
1440 init = build2 (INIT_EXPR, type, exp, init);
1441 finish_expr_stmt (init);
1442 /* And then call the constructor. */
1444 /* If we don't need to mess with the constructor at all,
1445 then just zero out the object and we're done. */
1446 else
1448 init = build2 (INIT_EXPR, type, exp, build_value_init_noctor (type));
1449 finish_expr_stmt (init);
1450 return;
1452 init = NULL_TREE;
1455 /* We know that expand_default_init can handle everything we want
1456 at this point. */
1457 expand_default_init (binfo, true_exp, exp, init, flags, complain);
1460 /* Report an error if TYPE is not a user-defined, class type. If
1461 OR_ELSE is nonzero, give an error message. */
1464 is_class_type (tree type, int or_else)
1466 if (type == error_mark_node)
1467 return 0;
1469 if (! CLASS_TYPE_P (type))
1471 if (or_else)
1472 error ("%qT is not a class type", type);
1473 return 0;
1475 return 1;
1478 tree
1479 get_type_value (tree name)
1481 if (name == error_mark_node)
1482 return NULL_TREE;
1484 if (IDENTIFIER_HAS_TYPE_VALUE (name))
1485 return IDENTIFIER_TYPE_VALUE (name);
1486 else
1487 return NULL_TREE;
1490 /* Build a reference to a member of an aggregate. This is not a C++
1491 `&', but really something which can have its address taken, and
1492 then act as a pointer to member, for example TYPE :: FIELD can have
1493 its address taken by saying & TYPE :: FIELD. ADDRESS_P is true if
1494 this expression is the operand of "&".
1496 @@ Prints out lousy diagnostics for operator <typename>
1497 @@ fields.
1499 @@ This function should be rewritten and placed in search.c. */
1501 tree
1502 build_offset_ref (tree type, tree member, bool address_p)
1504 tree decl;
1505 tree basebinfo = NULL_TREE;
1507 /* class templates can come in as TEMPLATE_DECLs here. */
1508 if (TREE_CODE (member) == TEMPLATE_DECL)
1509 return member;
1511 if (dependent_type_p (type) || type_dependent_expression_p (member))
1512 return build_qualified_name (NULL_TREE, type, member,
1513 /*template_p=*/false);
1515 gcc_assert (TYPE_P (type));
1516 if (! is_class_type (type, 1))
1517 return error_mark_node;
1519 gcc_assert (DECL_P (member) || BASELINK_P (member));
1520 /* Callers should call mark_used before this point. */
1521 gcc_assert (!DECL_P (member) || TREE_USED (member));
1523 if (!COMPLETE_OR_OPEN_TYPE_P (complete_type (type)))
1525 error ("incomplete type %qT does not have member %qD", type, member);
1526 return error_mark_node;
1529 /* Entities other than non-static members need no further
1530 processing. */
1531 if (TREE_CODE (member) == TYPE_DECL)
1532 return member;
1533 if (TREE_CODE (member) == VAR_DECL || TREE_CODE (member) == CONST_DECL)
1534 return convert_from_reference (member);
1536 if (TREE_CODE (member) == FIELD_DECL && DECL_C_BIT_FIELD (member))
1538 error ("invalid pointer to bit-field %qD", member);
1539 return error_mark_node;
1542 /* Set up BASEBINFO for member lookup. */
1543 decl = maybe_dummy_object (type, &basebinfo);
1545 /* A lot of this logic is now handled in lookup_member. */
1546 if (BASELINK_P (member))
1548 /* Go from the TREE_BASELINK to the member function info. */
1549 tree t = BASELINK_FUNCTIONS (member);
1551 if (TREE_CODE (t) != TEMPLATE_ID_EXPR && !really_overloaded_fn (t))
1553 /* Get rid of a potential OVERLOAD around it. */
1554 t = OVL_CURRENT (t);
1556 /* Unique functions are handled easily. */
1558 /* For non-static member of base class, we need a special rule
1559 for access checking [class.protected]:
1561 If the access is to form a pointer to member, the
1562 nested-name-specifier shall name the derived class
1563 (or any class derived from that class). */
1564 if (address_p && DECL_P (t)
1565 && DECL_NONSTATIC_MEMBER_P (t))
1566 perform_or_defer_access_check (TYPE_BINFO (type), t, t);
1567 else
1568 perform_or_defer_access_check (basebinfo, t, t);
1570 if (DECL_STATIC_FUNCTION_P (t))
1571 return t;
1572 member = t;
1574 else
1575 TREE_TYPE (member) = unknown_type_node;
1577 else if (address_p && TREE_CODE (member) == FIELD_DECL)
1578 /* We need additional test besides the one in
1579 check_accessibility_of_qualified_id in case it is
1580 a pointer to non-static member. */
1581 perform_or_defer_access_check (TYPE_BINFO (type), member, member);
1583 if (!address_p)
1585 /* If MEMBER is non-static, then the program has fallen afoul of
1586 [expr.prim]:
1588 An id-expression that denotes a nonstatic data member or
1589 nonstatic member function of a class can only be used:
1591 -- as part of a class member access (_expr.ref_) in which the
1592 object-expression refers to the member's class or a class
1593 derived from that class, or
1595 -- to form a pointer to member (_expr.unary.op_), or
1597 -- in the body of a nonstatic member function of that class or
1598 of a class derived from that class (_class.mfct.nonstatic_), or
1600 -- in a mem-initializer for a constructor for that class or for
1601 a class derived from that class (_class.base.init_). */
1602 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (member))
1604 /* Build a representation of the qualified name suitable
1605 for use as the operand to "&" -- even though the "&" is
1606 not actually present. */
1607 member = build2 (OFFSET_REF, TREE_TYPE (member), decl, member);
1608 /* In Microsoft mode, treat a non-static member function as if
1609 it were a pointer-to-member. */
1610 if (flag_ms_extensions)
1612 PTRMEM_OK_P (member) = 1;
1613 return cp_build_unary_op (ADDR_EXPR, member, 0,
1614 tf_warning_or_error);
1616 error ("invalid use of non-static member function %qD",
1617 TREE_OPERAND (member, 1));
1618 return error_mark_node;
1620 else if (TREE_CODE (member) == FIELD_DECL)
1622 error ("invalid use of non-static data member %qD", member);
1623 return error_mark_node;
1625 return member;
1628 member = build2 (OFFSET_REF, TREE_TYPE (member), decl, member);
1629 PTRMEM_OK_P (member) = 1;
1630 return member;
1633 /* If DECL is a scalar enumeration constant or variable with a
1634 constant initializer, return the initializer (or, its initializers,
1635 recursively); otherwise, return DECL. If INTEGRAL_P, the
1636 initializer is only returned if DECL is an integral
1637 constant-expression. */
1639 static tree
1640 constant_value_1 (tree decl, bool integral_p)
1642 while (TREE_CODE (decl) == CONST_DECL
1643 || (integral_p
1644 ? DECL_INTEGRAL_CONSTANT_VAR_P (decl)
1645 : (TREE_CODE (decl) == VAR_DECL
1646 && CP_TYPE_CONST_NON_VOLATILE_P (TREE_TYPE (decl)))))
1648 tree init;
1649 /* Static data members in template classes may have
1650 non-dependent initializers. References to such non-static
1651 data members are not value-dependent, so we must retrieve the
1652 initializer here. The DECL_INITIAL will have the right type,
1653 but will not have been folded because that would prevent us
1654 from performing all appropriate semantic checks at
1655 instantiation time. */
1656 if (DECL_CLASS_SCOPE_P (decl)
1657 && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl))
1658 && uses_template_parms (CLASSTYPE_TI_ARGS
1659 (DECL_CONTEXT (decl))))
1661 ++processing_template_decl;
1662 init = fold_non_dependent_expr (DECL_INITIAL (decl));
1663 --processing_template_decl;
1665 else
1667 /* If DECL is a static data member in a template
1668 specialization, we must instantiate it here. The
1669 initializer for the static data member is not processed
1670 until needed; we need it now. */
1671 mark_used (decl);
1672 init = DECL_INITIAL (decl);
1674 if (init == error_mark_node)
1676 if (DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl))
1677 /* Treat the error as a constant to avoid cascading errors on
1678 excessively recursive template instantiation (c++/9335). */
1679 return init;
1680 else
1681 return decl;
1683 /* Initializers in templates are generally expanded during
1684 instantiation, so before that for const int i(2)
1685 INIT is a TREE_LIST with the actual initializer as
1686 TREE_VALUE. */
1687 if (processing_template_decl
1688 && init
1689 && TREE_CODE (init) == TREE_LIST
1690 && TREE_CHAIN (init) == NULL_TREE)
1691 init = TREE_VALUE (init);
1692 if (!init
1693 || !TREE_TYPE (init)
1694 || (integral_p
1695 ? !INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (init))
1696 : (!TREE_CONSTANT (init)
1697 /* Do not return an aggregate constant (of which
1698 string literals are a special case), as we do not
1699 want to make inadvertent copies of such entities,
1700 and we must be sure that their addresses are the
1701 same everywhere. */
1702 || TREE_CODE (init) == CONSTRUCTOR
1703 || TREE_CODE (init) == STRING_CST)))
1704 break;
1705 decl = unshare_expr (init);
1707 return decl;
1710 /* If DECL is a CONST_DECL, or a constant VAR_DECL initialized by
1711 constant of integral or enumeration type, then return that value.
1712 These are those variables permitted in constant expressions by
1713 [5.19/1]. */
1715 tree
1716 integral_constant_value (tree decl)
1718 return constant_value_1 (decl, /*integral_p=*/true);
1721 /* A more relaxed version of integral_constant_value, used by the
1722 common C/C++ code and by the C++ front end for optimization
1723 purposes. */
1725 tree
1726 decl_constant_value (tree decl)
1728 return constant_value_1 (decl,
1729 /*integral_p=*/processing_template_decl);
1732 /* Common subroutines of build_new and build_vec_delete. */
1734 /* Call the global __builtin_delete to delete ADDR. */
1736 static tree
1737 build_builtin_delete_call (tree addr)
1739 mark_used (global_delete_fndecl);
1740 return build_call_n (global_delete_fndecl, 1, addr);
1743 /* Build and return a NEW_EXPR. If NELTS is non-NULL, TYPE[NELTS] is
1744 the type of the object being allocated; otherwise, it's just TYPE.
1745 INIT is the initializer, if any. USE_GLOBAL_NEW is true if the
1746 user explicitly wrote "::operator new". PLACEMENT, if non-NULL, is
1747 a vector of arguments to be provided as arguments to a placement
1748 new operator. This routine performs no semantic checks; it just
1749 creates and returns a NEW_EXPR. */
1751 static tree
1752 build_raw_new_expr (VEC(tree,gc) *placement, tree type, tree nelts,
1753 VEC(tree,gc) *init, int use_global_new)
1755 tree init_list;
1756 tree new_expr;
1758 /* If INIT is NULL, the we want to store NULL_TREE in the NEW_EXPR.
1759 If INIT is not NULL, then we want to store VOID_ZERO_NODE. This
1760 permits us to distinguish the case of a missing initializer "new
1761 int" from an empty initializer "new int()". */
1762 if (init == NULL)
1763 init_list = NULL_TREE;
1764 else if (VEC_empty (tree, init))
1765 init_list = void_zero_node;
1766 else
1767 init_list = build_tree_list_vec (init);
1769 new_expr = build4 (NEW_EXPR, build_pointer_type (type),
1770 build_tree_list_vec (placement), type, nelts,
1771 init_list);
1772 NEW_EXPR_USE_GLOBAL (new_expr) = use_global_new;
1773 TREE_SIDE_EFFECTS (new_expr) = 1;
1775 return new_expr;
1778 /* Diagnose uninitialized const members or reference members of type
1779 TYPE. USING_NEW is used to disambiguate the diagnostic between a
1780 new expression without a new-initializer and a declaration. Returns
1781 the error count. */
1783 static int
1784 diagnose_uninitialized_cst_or_ref_member_1 (tree type, tree origin,
1785 bool using_new, bool complain)
1787 tree field;
1788 int error_count = 0;
1790 if (type_has_user_provided_constructor (type))
1791 return 0;
1793 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
1795 tree field_type;
1797 if (TREE_CODE (field) != FIELD_DECL)
1798 continue;
1800 field_type = strip_array_types (TREE_TYPE (field));
1802 if (TREE_CODE (field_type) == REFERENCE_TYPE)
1804 ++ error_count;
1805 if (complain)
1807 if (using_new)
1808 error ("uninitialized reference member in %q#T "
1809 "using %<new%> without new-initializer", origin);
1810 else
1811 error ("uninitialized reference member in %q#T", origin);
1812 inform (DECL_SOURCE_LOCATION (field),
1813 "%qD should be initialized", field);
1817 if (CP_TYPE_CONST_P (field_type))
1819 ++ error_count;
1820 if (complain)
1822 if (using_new)
1823 error ("uninitialized const member in %q#T "
1824 "using %<new%> without new-initializer", origin);
1825 else
1826 error ("uninitialized const member in %q#T", origin);
1827 inform (DECL_SOURCE_LOCATION (field),
1828 "%qD should be initialized", field);
1832 if (CLASS_TYPE_P (field_type))
1833 error_count
1834 += diagnose_uninitialized_cst_or_ref_member_1 (field_type, origin,
1835 using_new, complain);
1837 return error_count;
1841 diagnose_uninitialized_cst_or_ref_member (tree type, bool using_new, bool complain)
1843 return diagnose_uninitialized_cst_or_ref_member_1 (type, type, using_new, complain);
1846 /* Generate code for a new-expression, including calling the "operator
1847 new" function, initializing the object, and, if an exception occurs
1848 during construction, cleaning up. The arguments are as for
1849 build_raw_new_expr. This may change PLACEMENT and INIT. */
1851 static tree
1852 build_new_1 (VEC(tree,gc) **placement, tree type, tree nelts,
1853 VEC(tree,gc) **init, bool globally_qualified_p,
1854 tsubst_flags_t complain)
1856 tree size, rval;
1857 /* True iff this is a call to "operator new[]" instead of just
1858 "operator new". */
1859 bool array_p = false;
1860 /* If ARRAY_P is true, the element type of the array. This is never
1861 an ARRAY_TYPE; for something like "new int[3][4]", the
1862 ELT_TYPE is "int". If ARRAY_P is false, this is the same type as
1863 TYPE. */
1864 tree elt_type;
1865 /* The type of the new-expression. (This type is always a pointer
1866 type.) */
1867 tree pointer_type;
1868 tree non_const_pointer_type;
1869 tree outer_nelts = NULL_TREE;
1870 tree alloc_call, alloc_expr;
1871 /* The address returned by the call to "operator new". This node is
1872 a VAR_DECL and is therefore reusable. */
1873 tree alloc_node;
1874 tree alloc_fn;
1875 tree cookie_expr, init_expr;
1876 int nothrow, check_new;
1877 int use_java_new = 0;
1878 /* If non-NULL, the number of extra bytes to allocate at the
1879 beginning of the storage allocated for an array-new expression in
1880 order to store the number of elements. */
1881 tree cookie_size = NULL_TREE;
1882 tree placement_first;
1883 tree placement_expr = NULL_TREE;
1884 /* True if the function we are calling is a placement allocation
1885 function. */
1886 bool placement_allocation_fn_p;
1887 /* True if the storage must be initialized, either by a constructor
1888 or due to an explicit new-initializer. */
1889 bool is_initialized;
1890 /* The address of the thing allocated, not including any cookie. In
1891 particular, if an array cookie is in use, DATA_ADDR is the
1892 address of the first array element. This node is a VAR_DECL, and
1893 is therefore reusable. */
1894 tree data_addr;
1895 tree init_preeval_expr = NULL_TREE;
1897 if (nelts)
1899 outer_nelts = nelts;
1900 array_p = true;
1902 else if (TREE_CODE (type) == ARRAY_TYPE)
1904 array_p = true;
1905 nelts = array_type_nelts_top (type);
1906 outer_nelts = nelts;
1907 type = TREE_TYPE (type);
1910 /* If our base type is an array, then make sure we know how many elements
1911 it has. */
1912 for (elt_type = type;
1913 TREE_CODE (elt_type) == ARRAY_TYPE;
1914 elt_type = TREE_TYPE (elt_type))
1915 nelts = cp_build_binary_op (input_location,
1916 MULT_EXPR, nelts,
1917 array_type_nelts_top (elt_type),
1918 complain);
1920 if (TREE_CODE (elt_type) == VOID_TYPE)
1922 if (complain & tf_error)
1923 error ("invalid type %<void%> for new");
1924 return error_mark_node;
1927 if (abstract_virtuals_error (NULL_TREE, elt_type))
1928 return error_mark_node;
1930 is_initialized = (TYPE_NEEDS_CONSTRUCTING (elt_type) || *init != NULL);
1932 if (*init == NULL)
1934 bool maybe_uninitialized_error = false;
1935 /* A program that calls for default-initialization [...] of an
1936 entity of reference type is ill-formed. */
1937 if (CLASSTYPE_REF_FIELDS_NEED_INIT (elt_type))
1938 maybe_uninitialized_error = true;
1940 /* A new-expression that creates an object of type T initializes
1941 that object as follows:
1942 - If the new-initializer is omitted:
1943 -- If T is a (possibly cv-qualified) non-POD class type
1944 (or array thereof), the object is default-initialized (8.5).
1945 [...]
1946 -- Otherwise, the object created has indeterminate
1947 value. If T is a const-qualified type, or a (possibly
1948 cv-qualified) POD class type (or array thereof)
1949 containing (directly or indirectly) a member of
1950 const-qualified type, the program is ill-formed; */
1952 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (elt_type))
1953 maybe_uninitialized_error = true;
1955 if (maybe_uninitialized_error
1956 && diagnose_uninitialized_cst_or_ref_member (elt_type,
1957 /*using_new=*/true,
1958 complain & tf_error))
1959 return error_mark_node;
1962 if (CP_TYPE_CONST_P (elt_type) && *init == NULL
1963 && !type_has_user_provided_default_constructor (elt_type))
1965 if (complain & tf_error)
1966 error ("uninitialized const in %<new%> of %q#T", elt_type);
1967 return error_mark_node;
1970 size = size_in_bytes (elt_type);
1971 if (array_p)
1972 size = size_binop (MULT_EXPR, size, convert (sizetype, nelts));
1974 alloc_fn = NULL_TREE;
1976 /* If PLACEMENT is a single simple pointer type not passed by
1977 reference, prepare to capture it in a temporary variable. Do
1978 this now, since PLACEMENT will change in the calls below. */
1979 placement_first = NULL_TREE;
1980 if (VEC_length (tree, *placement) == 1
1981 && (TREE_CODE (TREE_TYPE (VEC_index (tree, *placement, 0)))
1982 == POINTER_TYPE))
1983 placement_first = VEC_index (tree, *placement, 0);
1985 /* Allocate the object. */
1986 if (VEC_empty (tree, *placement) && TYPE_FOR_JAVA (elt_type))
1988 tree class_addr;
1989 tree class_decl = build_java_class_ref (elt_type);
1990 static const char alloc_name[] = "_Jv_AllocObject";
1992 if (class_decl == error_mark_node)
1993 return error_mark_node;
1995 use_java_new = 1;
1996 if (!get_global_value_if_present (get_identifier (alloc_name),
1997 &alloc_fn))
1999 if (complain & tf_error)
2000 error ("call to Java constructor with %qs undefined", alloc_name);
2001 return error_mark_node;
2003 else if (really_overloaded_fn (alloc_fn))
2005 if (complain & tf_error)
2006 error ("%qD should never be overloaded", alloc_fn);
2007 return error_mark_node;
2009 alloc_fn = OVL_CURRENT (alloc_fn);
2010 class_addr = build1 (ADDR_EXPR, jclass_node, class_decl);
2011 alloc_call = (cp_build_function_call
2012 (alloc_fn,
2013 build_tree_list (NULL_TREE, class_addr),
2014 complain));
2016 else if (TYPE_FOR_JAVA (elt_type) && MAYBE_CLASS_TYPE_P (elt_type))
2018 error ("Java class %q#T object allocated using placement new", elt_type);
2019 return error_mark_node;
2021 else
2023 tree fnname;
2024 tree fns;
2026 fnname = ansi_opname (array_p ? VEC_NEW_EXPR : NEW_EXPR);
2028 if (!globally_qualified_p
2029 && CLASS_TYPE_P (elt_type)
2030 && (array_p
2031 ? TYPE_HAS_ARRAY_NEW_OPERATOR (elt_type)
2032 : TYPE_HAS_NEW_OPERATOR (elt_type)))
2034 /* Use a class-specific operator new. */
2035 /* If a cookie is required, add some extra space. */
2036 if (array_p && TYPE_VEC_NEW_USES_COOKIE (elt_type))
2038 cookie_size = targetm.cxx.get_cookie_size (elt_type);
2039 size = size_binop (PLUS_EXPR, size, cookie_size);
2041 /* Create the argument list. */
2042 VEC_safe_insert (tree, gc, *placement, 0, size);
2043 /* Do name-lookup to find the appropriate operator. */
2044 fns = lookup_fnfields (elt_type, fnname, /*protect=*/2);
2045 if (fns == NULL_TREE)
2047 if (complain & tf_error)
2048 error ("no suitable %qD found in class %qT", fnname, elt_type);
2049 return error_mark_node;
2051 if (TREE_CODE (fns) == TREE_LIST)
2053 if (complain & tf_error)
2055 error ("request for member %qD is ambiguous", fnname);
2056 print_candidates (fns);
2058 return error_mark_node;
2060 alloc_call = build_new_method_call (build_dummy_object (elt_type),
2061 fns, placement,
2062 /*conversion_path=*/NULL_TREE,
2063 LOOKUP_NORMAL,
2064 &alloc_fn,
2065 complain);
2067 else
2069 /* Use a global operator new. */
2070 /* See if a cookie might be required. */
2071 if (array_p && TYPE_VEC_NEW_USES_COOKIE (elt_type))
2072 cookie_size = targetm.cxx.get_cookie_size (elt_type);
2073 else
2074 cookie_size = NULL_TREE;
2076 alloc_call = build_operator_new_call (fnname, placement,
2077 &size, &cookie_size,
2078 &alloc_fn);
2082 if (alloc_call == error_mark_node)
2083 return error_mark_node;
2085 gcc_assert (alloc_fn != NULL_TREE);
2087 /* If we found a simple case of PLACEMENT_EXPR above, then copy it
2088 into a temporary variable. */
2089 if (!processing_template_decl
2090 && placement_first != NULL_TREE
2091 && TREE_CODE (alloc_call) == CALL_EXPR
2092 && call_expr_nargs (alloc_call) == 2
2093 && TREE_CODE (TREE_TYPE (CALL_EXPR_ARG (alloc_call, 0))) == INTEGER_TYPE
2094 && TREE_CODE (TREE_TYPE (CALL_EXPR_ARG (alloc_call, 1))) == POINTER_TYPE)
2096 tree placement_arg = CALL_EXPR_ARG (alloc_call, 1);
2098 if (INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (TREE_TYPE (placement_arg)))
2099 || VOID_TYPE_P (TREE_TYPE (TREE_TYPE (placement_arg))))
2101 placement_expr = get_target_expr (placement_first);
2102 CALL_EXPR_ARG (alloc_call, 1)
2103 = convert (TREE_TYPE (placement_arg), placement_expr);
2107 /* In the simple case, we can stop now. */
2108 pointer_type = build_pointer_type (type);
2109 if (!cookie_size && !is_initialized)
2110 return build_nop (pointer_type, alloc_call);
2112 /* Store the result of the allocation call in a variable so that we can
2113 use it more than once. */
2114 alloc_expr = get_target_expr (alloc_call);
2115 alloc_node = TARGET_EXPR_SLOT (alloc_expr);
2117 /* Strip any COMPOUND_EXPRs from ALLOC_CALL. */
2118 while (TREE_CODE (alloc_call) == COMPOUND_EXPR)
2119 alloc_call = TREE_OPERAND (alloc_call, 1);
2121 /* Now, check to see if this function is actually a placement
2122 allocation function. This can happen even when PLACEMENT is NULL
2123 because we might have something like:
2125 struct S { void* operator new (size_t, int i = 0); };
2127 A call to `new S' will get this allocation function, even though
2128 there is no explicit placement argument. If there is more than
2129 one argument, or there are variable arguments, then this is a
2130 placement allocation function. */
2131 placement_allocation_fn_p
2132 = (type_num_arguments (TREE_TYPE (alloc_fn)) > 1
2133 || varargs_function_p (alloc_fn));
2135 /* Preevaluate the placement args so that we don't reevaluate them for a
2136 placement delete. */
2137 if (placement_allocation_fn_p)
2139 tree inits;
2140 stabilize_call (alloc_call, &inits);
2141 if (inits)
2142 alloc_expr = build2 (COMPOUND_EXPR, TREE_TYPE (alloc_expr), inits,
2143 alloc_expr);
2146 /* unless an allocation function is declared with an empty excep-
2147 tion-specification (_except.spec_), throw(), it indicates failure to
2148 allocate storage by throwing a bad_alloc exception (clause _except_,
2149 _lib.bad.alloc_); it returns a non-null pointer otherwise If the allo-
2150 cation function is declared with an empty exception-specification,
2151 throw(), it returns null to indicate failure to allocate storage and a
2152 non-null pointer otherwise.
2154 So check for a null exception spec on the op new we just called. */
2156 nothrow = TYPE_NOTHROW_P (TREE_TYPE (alloc_fn));
2157 check_new = (flag_check_new || nothrow) && ! use_java_new;
2159 if (cookie_size)
2161 tree cookie;
2162 tree cookie_ptr;
2163 tree size_ptr_type;
2165 /* Adjust so we're pointing to the start of the object. */
2166 data_addr = build2 (POINTER_PLUS_EXPR, TREE_TYPE (alloc_node),
2167 alloc_node, cookie_size);
2169 /* Store the number of bytes allocated so that we can know how
2170 many elements to destroy later. We use the last sizeof
2171 (size_t) bytes to store the number of elements. */
2172 cookie_ptr = size_binop (MINUS_EXPR, cookie_size, size_in_bytes (sizetype));
2173 cookie_ptr = fold_build2_loc (input_location,
2174 POINTER_PLUS_EXPR, TREE_TYPE (alloc_node),
2175 alloc_node, cookie_ptr);
2176 size_ptr_type = build_pointer_type (sizetype);
2177 cookie_ptr = fold_convert (size_ptr_type, cookie_ptr);
2178 cookie = cp_build_indirect_ref (cookie_ptr, RO_NULL, complain);
2180 cookie_expr = build2 (MODIFY_EXPR, sizetype, cookie, nelts);
2182 if (targetm.cxx.cookie_has_size ())
2184 /* Also store the element size. */
2185 cookie_ptr = build2 (POINTER_PLUS_EXPR, size_ptr_type, cookie_ptr,
2186 fold_build1_loc (input_location,
2187 NEGATE_EXPR, sizetype,
2188 size_in_bytes (sizetype)));
2190 cookie = cp_build_indirect_ref (cookie_ptr, RO_NULL, complain);
2191 cookie = build2 (MODIFY_EXPR, sizetype, cookie,
2192 size_in_bytes (elt_type));
2193 cookie_expr = build2 (COMPOUND_EXPR, TREE_TYPE (cookie_expr),
2194 cookie, cookie_expr);
2197 else
2199 cookie_expr = NULL_TREE;
2200 data_addr = alloc_node;
2203 /* Now use a pointer to the type we've actually allocated. */
2205 /* But we want to operate on a non-const version to start with,
2206 since we'll be modifying the elements. */
2207 non_const_pointer_type = build_pointer_type
2208 (cp_build_qualified_type (type, cp_type_quals (type) & ~TYPE_QUAL_CONST));
2210 data_addr = fold_convert (non_const_pointer_type, data_addr);
2211 /* Any further uses of alloc_node will want this type, too. */
2212 alloc_node = fold_convert (non_const_pointer_type, alloc_node);
2214 /* Now initialize the allocated object. Note that we preevaluate the
2215 initialization expression, apart from the actual constructor call or
2216 assignment--we do this because we want to delay the allocation as long
2217 as possible in order to minimize the size of the exception region for
2218 placement delete. */
2219 if (is_initialized)
2221 bool stable;
2222 bool explicit_value_init_p = false;
2224 if (*init != NULL && VEC_empty (tree, *init))
2226 *init = NULL;
2227 explicit_value_init_p = true;
2230 if (array_p)
2232 tree vecinit = NULL_TREE;
2233 if (*init && VEC_length (tree, *init) == 1
2234 && BRACE_ENCLOSED_INITIALIZER_P (VEC_index (tree, *init, 0))
2235 && CONSTRUCTOR_IS_DIRECT_INIT (VEC_index (tree, *init, 0)))
2237 tree arraytype, domain;
2238 vecinit = VEC_index (tree, *init, 0);
2239 if (TREE_CONSTANT (nelts))
2240 domain = compute_array_index_type (NULL_TREE, nelts);
2241 else
2243 domain = NULL_TREE;
2244 if (CONSTRUCTOR_NELTS (vecinit) > 0)
2245 warning (0, "non-constant array size in new, unable to "
2246 "verify length of initializer-list");
2248 arraytype = build_cplus_array_type (type, domain);
2249 vecinit = digest_init (arraytype, vecinit);
2251 else if (*init)
2253 if (complain & tf_error)
2254 permerror (input_location, "ISO C++ forbids initialization in array new");
2255 else
2256 return error_mark_node;
2257 vecinit = build_tree_list_vec (*init);
2259 init_expr
2260 = build_vec_init (data_addr,
2261 cp_build_binary_op (input_location,
2262 MINUS_EXPR, outer_nelts,
2263 integer_one_node,
2264 complain),
2265 vecinit,
2266 explicit_value_init_p,
2267 /*from_array=*/0,
2268 complain);
2270 /* An array initialization is stable because the initialization
2271 of each element is a full-expression, so the temporaries don't
2272 leak out. */
2273 stable = true;
2275 else
2277 init_expr = cp_build_indirect_ref (data_addr, RO_NULL, complain);
2279 if (TYPE_NEEDS_CONSTRUCTING (type) && !explicit_value_init_p)
2281 init_expr = build_special_member_call (init_expr,
2282 complete_ctor_identifier,
2283 init, elt_type,
2284 LOOKUP_NORMAL,
2285 complain);
2287 else if (explicit_value_init_p)
2289 /* Something like `new int()'. */
2290 init_expr = build2 (INIT_EXPR, type,
2291 init_expr, build_value_init (type));
2293 else
2295 tree ie;
2297 /* We are processing something like `new int (10)', which
2298 means allocate an int, and initialize it with 10. */
2300 ie = build_x_compound_expr_from_vec (*init, "new initializer");
2301 init_expr = cp_build_modify_expr (init_expr, INIT_EXPR, ie,
2302 complain);
2304 stable = stabilize_init (init_expr, &init_preeval_expr);
2307 if (init_expr == error_mark_node)
2308 return error_mark_node;
2310 /* If any part of the object initialization terminates by throwing an
2311 exception and a suitable deallocation function can be found, the
2312 deallocation function is called to free the memory in which the
2313 object was being constructed, after which the exception continues
2314 to propagate in the context of the new-expression. If no
2315 unambiguous matching deallocation function can be found,
2316 propagating the exception does not cause the object's memory to be
2317 freed. */
2318 if (flag_exceptions && ! use_java_new)
2320 enum tree_code dcode = array_p ? VEC_DELETE_EXPR : DELETE_EXPR;
2321 tree cleanup;
2323 /* The Standard is unclear here, but the right thing to do
2324 is to use the same method for finding deallocation
2325 functions that we use for finding allocation functions. */
2326 cleanup = (build_op_delete_call
2327 (dcode,
2328 alloc_node,
2329 size,
2330 globally_qualified_p,
2331 placement_allocation_fn_p ? alloc_call : NULL_TREE,
2332 alloc_fn));
2334 if (!cleanup)
2335 /* We're done. */;
2336 else if (stable)
2337 /* This is much simpler if we were able to preevaluate all of
2338 the arguments to the constructor call. */
2340 /* CLEANUP is compiler-generated, so no diagnostics. */
2341 TREE_NO_WARNING (cleanup) = true;
2342 init_expr = build2 (TRY_CATCH_EXPR, void_type_node,
2343 init_expr, cleanup);
2344 /* Likewise, this try-catch is compiler-generated. */
2345 TREE_NO_WARNING (init_expr) = true;
2347 else
2348 /* Ack! First we allocate the memory. Then we set our sentry
2349 variable to true, and expand a cleanup that deletes the
2350 memory if sentry is true. Then we run the constructor, and
2351 finally clear the sentry.
2353 We need to do this because we allocate the space first, so
2354 if there are any temporaries with cleanups in the
2355 constructor args and we weren't able to preevaluate them, we
2356 need this EH region to extend until end of full-expression
2357 to preserve nesting. */
2359 tree end, sentry, begin;
2361 begin = get_target_expr (boolean_true_node);
2362 CLEANUP_EH_ONLY (begin) = 1;
2364 sentry = TARGET_EXPR_SLOT (begin);
2366 /* CLEANUP is compiler-generated, so no diagnostics. */
2367 TREE_NO_WARNING (cleanup) = true;
2369 TARGET_EXPR_CLEANUP (begin)
2370 = build3 (COND_EXPR, void_type_node, sentry,
2371 cleanup, void_zero_node);
2373 end = build2 (MODIFY_EXPR, TREE_TYPE (sentry),
2374 sentry, boolean_false_node);
2376 init_expr
2377 = build2 (COMPOUND_EXPR, void_type_node, begin,
2378 build2 (COMPOUND_EXPR, void_type_node, init_expr,
2379 end));
2380 /* Likewise, this is compiler-generated. */
2381 TREE_NO_WARNING (init_expr) = true;
2385 else
2386 init_expr = NULL_TREE;
2388 /* Now build up the return value in reverse order. */
2390 rval = data_addr;
2392 if (init_expr)
2393 rval = build2 (COMPOUND_EXPR, TREE_TYPE (rval), init_expr, rval);
2394 if (cookie_expr)
2395 rval = build2 (COMPOUND_EXPR, TREE_TYPE (rval), cookie_expr, rval);
2397 if (rval == data_addr)
2398 /* If we don't have an initializer or a cookie, strip the TARGET_EXPR
2399 and return the call (which doesn't need to be adjusted). */
2400 rval = TARGET_EXPR_INITIAL (alloc_expr);
2401 else
2403 if (check_new)
2405 tree ifexp = cp_build_binary_op (input_location,
2406 NE_EXPR, alloc_node,
2407 integer_zero_node,
2408 complain);
2409 rval = build_conditional_expr (ifexp, rval, alloc_node,
2410 complain);
2413 /* Perform the allocation before anything else, so that ALLOC_NODE
2414 has been initialized before we start using it. */
2415 rval = build2 (COMPOUND_EXPR, TREE_TYPE (rval), alloc_expr, rval);
2418 if (init_preeval_expr)
2419 rval = build2 (COMPOUND_EXPR, TREE_TYPE (rval), init_preeval_expr, rval);
2421 /* A new-expression is never an lvalue. */
2422 gcc_assert (!lvalue_p (rval));
2424 return convert (pointer_type, rval);
2427 /* Generate a representation for a C++ "new" expression. *PLACEMENT
2428 is a vector of placement-new arguments (or NULL if none). If NELTS
2429 is NULL, TYPE is the type of the storage to be allocated. If NELTS
2430 is not NULL, then this is an array-new allocation; TYPE is the type
2431 of the elements in the array and NELTS is the number of elements in
2432 the array. *INIT, if non-NULL, is the initializer for the new
2433 object, or an empty vector to indicate an initializer of "()". If
2434 USE_GLOBAL_NEW is true, then the user explicitly wrote "::new"
2435 rather than just "new". This may change PLACEMENT and INIT. */
2437 tree
2438 build_new (VEC(tree,gc) **placement, tree type, tree nelts,
2439 VEC(tree,gc) **init, int use_global_new, tsubst_flags_t complain)
2441 tree rval;
2442 VEC(tree,gc) *orig_placement = NULL;
2443 tree orig_nelts = NULL_TREE;
2444 VEC(tree,gc) *orig_init = NULL;
2446 if (type == error_mark_node)
2447 return error_mark_node;
2449 if (nelts == NULL_TREE && VEC_length (tree, *init) == 1)
2451 tree auto_node = type_uses_auto (type);
2452 if (auto_node && describable_type (VEC_index (tree, *init, 0)))
2453 type = do_auto_deduction (type, VEC_index (tree, *init, 0), auto_node);
2456 if (processing_template_decl)
2458 if (dependent_type_p (type)
2459 || any_type_dependent_arguments_p (*placement)
2460 || (nelts && type_dependent_expression_p (nelts))
2461 || any_type_dependent_arguments_p (*init))
2462 return build_raw_new_expr (*placement, type, nelts, *init,
2463 use_global_new);
2465 orig_placement = make_tree_vector_copy (*placement);
2466 orig_nelts = nelts;
2467 orig_init = make_tree_vector_copy (*init);
2469 make_args_non_dependent (*placement);
2470 if (nelts)
2471 nelts = build_non_dependent_expr (nelts);
2472 make_args_non_dependent (*init);
2475 if (nelts)
2477 if (!build_expr_type_conversion (WANT_INT | WANT_ENUM, nelts, false))
2479 if (complain & tf_error)
2480 permerror (input_location, "size in array new must have integral type");
2481 else
2482 return error_mark_node;
2484 nelts = mark_rvalue_use (nelts);
2485 nelts = cp_save_expr (cp_convert (sizetype, nelts));
2488 /* ``A reference cannot be created by the new operator. A reference
2489 is not an object (8.2.2, 8.4.3), so a pointer to it could not be
2490 returned by new.'' ARM 5.3.3 */
2491 if (TREE_CODE (type) == REFERENCE_TYPE)
2493 if (complain & tf_error)
2494 error ("new cannot be applied to a reference type");
2495 else
2496 return error_mark_node;
2497 type = TREE_TYPE (type);
2500 if (TREE_CODE (type) == FUNCTION_TYPE)
2502 if (complain & tf_error)
2503 error ("new cannot be applied to a function type");
2504 return error_mark_node;
2507 /* The type allocated must be complete. If the new-type-id was
2508 "T[N]" then we are just checking that "T" is complete here, but
2509 that is equivalent, since the value of "N" doesn't matter. */
2510 if (!complete_type_or_else (type, NULL_TREE))
2511 return error_mark_node;
2513 rval = build_new_1 (placement, type, nelts, init, use_global_new, complain);
2514 if (rval == error_mark_node)
2515 return error_mark_node;
2517 if (processing_template_decl)
2519 tree ret = build_raw_new_expr (orig_placement, type, orig_nelts,
2520 orig_init, use_global_new);
2521 release_tree_vector (orig_placement);
2522 release_tree_vector (orig_init);
2523 return ret;
2526 /* Wrap it in a NOP_EXPR so warn_if_unused_value doesn't complain. */
2527 rval = build1 (NOP_EXPR, TREE_TYPE (rval), rval);
2528 TREE_NO_WARNING (rval) = 1;
2530 return rval;
2533 /* Given a Java class, return a decl for the corresponding java.lang.Class. */
2535 tree
2536 build_java_class_ref (tree type)
2538 tree name = NULL_TREE, class_decl;
2539 static tree CL_suffix = NULL_TREE;
2540 if (CL_suffix == NULL_TREE)
2541 CL_suffix = get_identifier("class$");
2542 if (jclass_node == NULL_TREE)
2544 jclass_node = IDENTIFIER_GLOBAL_VALUE (get_identifier ("jclass"));
2545 if (jclass_node == NULL_TREE)
2547 error ("call to Java constructor, while %<jclass%> undefined");
2548 return error_mark_node;
2550 jclass_node = TREE_TYPE (jclass_node);
2553 /* Mangle the class$ field. */
2555 tree field;
2556 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
2557 if (DECL_NAME (field) == CL_suffix)
2559 mangle_decl (field);
2560 name = DECL_ASSEMBLER_NAME (field);
2561 break;
2563 if (!field)
2565 error ("can't find %<class$%> in %qT", type);
2566 return error_mark_node;
2570 class_decl = IDENTIFIER_GLOBAL_VALUE (name);
2571 if (class_decl == NULL_TREE)
2573 class_decl = build_decl (input_location,
2574 VAR_DECL, name, TREE_TYPE (jclass_node));
2575 TREE_STATIC (class_decl) = 1;
2576 DECL_EXTERNAL (class_decl) = 1;
2577 TREE_PUBLIC (class_decl) = 1;
2578 DECL_ARTIFICIAL (class_decl) = 1;
2579 DECL_IGNORED_P (class_decl) = 1;
2580 pushdecl_top_level (class_decl);
2581 make_decl_rtl (class_decl);
2583 return class_decl;
2586 static tree
2587 build_vec_delete_1 (tree base, tree maxindex, tree type,
2588 special_function_kind auto_delete_vec, int use_global_delete)
2590 tree virtual_size;
2591 tree ptype = build_pointer_type (type = complete_type (type));
2592 tree size_exp = size_in_bytes (type);
2594 /* Temporary variables used by the loop. */
2595 tree tbase, tbase_init;
2597 /* This is the body of the loop that implements the deletion of a
2598 single element, and moves temp variables to next elements. */
2599 tree body;
2601 /* This is the LOOP_EXPR that governs the deletion of the elements. */
2602 tree loop = 0;
2604 /* This is the thing that governs what to do after the loop has run. */
2605 tree deallocate_expr = 0;
2607 /* This is the BIND_EXPR which holds the outermost iterator of the
2608 loop. It is convenient to set this variable up and test it before
2609 executing any other code in the loop.
2610 This is also the containing expression returned by this function. */
2611 tree controller = NULL_TREE;
2612 tree tmp;
2614 /* We should only have 1-D arrays here. */
2615 gcc_assert (TREE_CODE (type) != ARRAY_TYPE);
2617 if (! MAYBE_CLASS_TYPE_P (type) || TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
2618 goto no_destructor;
2620 /* The below is short by the cookie size. */
2621 virtual_size = size_binop (MULT_EXPR, size_exp,
2622 convert (sizetype, maxindex));
2624 tbase = create_temporary_var (ptype);
2625 tbase_init = cp_build_modify_expr (tbase, NOP_EXPR,
2626 fold_build2_loc (input_location,
2627 POINTER_PLUS_EXPR, ptype,
2628 fold_convert (ptype, base),
2629 virtual_size),
2630 tf_warning_or_error);
2631 controller = build3 (BIND_EXPR, void_type_node, tbase,
2632 NULL_TREE, NULL_TREE);
2633 TREE_SIDE_EFFECTS (controller) = 1;
2635 body = build1 (EXIT_EXPR, void_type_node,
2636 build2 (EQ_EXPR, boolean_type_node, tbase,
2637 fold_convert (ptype, base)));
2638 tmp = fold_build1_loc (input_location, NEGATE_EXPR, sizetype, size_exp);
2639 body = build_compound_expr
2640 (input_location,
2641 body, cp_build_modify_expr (tbase, NOP_EXPR,
2642 build2 (POINTER_PLUS_EXPR, ptype, tbase, tmp),
2643 tf_warning_or_error));
2644 body = build_compound_expr
2645 (input_location,
2646 body, build_delete (ptype, tbase, sfk_complete_destructor,
2647 LOOKUP_NORMAL|LOOKUP_DESTRUCTOR, 1));
2649 loop = build1 (LOOP_EXPR, void_type_node, body);
2650 loop = build_compound_expr (input_location, tbase_init, loop);
2652 no_destructor:
2653 /* If the delete flag is one, or anything else with the low bit set,
2654 delete the storage. */
2655 if (auto_delete_vec != sfk_base_destructor)
2657 tree base_tbd;
2659 /* The below is short by the cookie size. */
2660 virtual_size = size_binop (MULT_EXPR, size_exp,
2661 convert (sizetype, maxindex));
2663 if (! TYPE_VEC_NEW_USES_COOKIE (type))
2664 /* no header */
2665 base_tbd = base;
2666 else
2668 tree cookie_size;
2670 cookie_size = targetm.cxx.get_cookie_size (type);
2671 base_tbd
2672 = cp_convert (ptype,
2673 cp_build_binary_op (input_location,
2674 MINUS_EXPR,
2675 cp_convert (string_type_node,
2676 base),
2677 cookie_size,
2678 tf_warning_or_error));
2679 /* True size with header. */
2680 virtual_size = size_binop (PLUS_EXPR, virtual_size, cookie_size);
2683 if (auto_delete_vec == sfk_deleting_destructor)
2684 deallocate_expr = build_op_delete_call (VEC_DELETE_EXPR,
2685 base_tbd, virtual_size,
2686 use_global_delete & 1,
2687 /*placement=*/NULL_TREE,
2688 /*alloc_fn=*/NULL_TREE);
2691 body = loop;
2692 if (!deallocate_expr)
2694 else if (!body)
2695 body = deallocate_expr;
2696 else
2697 body = build_compound_expr (input_location, body, deallocate_expr);
2699 if (!body)
2700 body = integer_zero_node;
2702 /* Outermost wrapper: If pointer is null, punt. */
2703 body = fold_build3_loc (input_location, COND_EXPR, void_type_node,
2704 fold_build2_loc (input_location,
2705 NE_EXPR, boolean_type_node, base,
2706 convert (TREE_TYPE (base),
2707 integer_zero_node)),
2708 body, integer_zero_node);
2709 body = build1 (NOP_EXPR, void_type_node, body);
2711 if (controller)
2713 TREE_OPERAND (controller, 1) = body;
2714 body = controller;
2717 if (TREE_CODE (base) == SAVE_EXPR)
2718 /* Pre-evaluate the SAVE_EXPR outside of the BIND_EXPR. */
2719 body = build2 (COMPOUND_EXPR, void_type_node, base, body);
2721 return convert_to_void (body, /*implicit=*/NULL, tf_warning_or_error);
2724 /* Create an unnamed variable of the indicated TYPE. */
2726 tree
2727 create_temporary_var (tree type)
2729 tree decl;
2731 decl = build_decl (input_location,
2732 VAR_DECL, NULL_TREE, type);
2733 TREE_USED (decl) = 1;
2734 DECL_ARTIFICIAL (decl) = 1;
2735 DECL_IGNORED_P (decl) = 1;
2736 DECL_CONTEXT (decl) = current_function_decl;
2738 return decl;
2741 /* Create a new temporary variable of the indicated TYPE, initialized
2742 to INIT.
2744 It is not entered into current_binding_level, because that breaks
2745 things when it comes time to do final cleanups (which take place
2746 "outside" the binding contour of the function). */
2748 static tree
2749 get_temp_regvar (tree type, tree init)
2751 tree decl;
2753 decl = create_temporary_var (type);
2754 add_decl_expr (decl);
2756 finish_expr_stmt (cp_build_modify_expr (decl, INIT_EXPR, init,
2757 tf_warning_or_error));
2759 return decl;
2762 /* `build_vec_init' returns tree structure that performs
2763 initialization of a vector of aggregate types.
2765 BASE is a reference to the vector, of ARRAY_TYPE, or a pointer
2766 to the first element, of POINTER_TYPE.
2767 MAXINDEX is the maximum index of the array (one less than the
2768 number of elements). It is only used if BASE is a pointer or
2769 TYPE_DOMAIN (TREE_TYPE (BASE)) == NULL_TREE.
2771 INIT is the (possibly NULL) initializer.
2773 If EXPLICIT_VALUE_INIT_P is true, then INIT must be NULL. All
2774 elements in the array are value-initialized.
2776 FROM_ARRAY is 0 if we should init everything with INIT
2777 (i.e., every element initialized from INIT).
2778 FROM_ARRAY is 1 if we should index into INIT in parallel
2779 with initialization of DECL.
2780 FROM_ARRAY is 2 if we should index into INIT in parallel,
2781 but use assignment instead of initialization. */
2783 tree
2784 build_vec_init (tree base, tree maxindex, tree init,
2785 bool explicit_value_init_p,
2786 int from_array, tsubst_flags_t complain)
2788 tree rval;
2789 tree base2 = NULL_TREE;
2790 tree itype = NULL_TREE;
2791 tree iterator;
2792 /* The type of BASE. */
2793 tree atype = TREE_TYPE (base);
2794 /* The type of an element in the array. */
2795 tree type = TREE_TYPE (atype);
2796 /* The element type reached after removing all outer array
2797 types. */
2798 tree inner_elt_type;
2799 /* The type of a pointer to an element in the array. */
2800 tree ptype;
2801 tree stmt_expr;
2802 tree compound_stmt;
2803 int destroy_temps;
2804 tree try_block = NULL_TREE;
2805 int num_initialized_elts = 0;
2806 bool is_global;
2808 if (TREE_CODE (atype) == ARRAY_TYPE && TYPE_DOMAIN (atype))
2809 maxindex = array_type_nelts (atype);
2811 if (maxindex == NULL_TREE || maxindex == error_mark_node)
2812 return error_mark_node;
2814 if (explicit_value_init_p)
2815 gcc_assert (!init);
2817 inner_elt_type = strip_array_types (type);
2819 /* Look through the TARGET_EXPR around a compound literal. */
2820 if (init && TREE_CODE (init) == TARGET_EXPR
2821 && TREE_CODE (TARGET_EXPR_INITIAL (init)) == CONSTRUCTOR
2822 && from_array != 2)
2823 init = TARGET_EXPR_INITIAL (init);
2825 if (init
2826 && TREE_CODE (atype) == ARRAY_TYPE
2827 && (from_array == 2
2828 ? (!CLASS_TYPE_P (inner_elt_type)
2829 || !TYPE_HAS_COMPLEX_ASSIGN_REF (inner_elt_type))
2830 : !TYPE_NEEDS_CONSTRUCTING (type))
2831 && ((TREE_CODE (init) == CONSTRUCTOR
2832 /* Don't do this if the CONSTRUCTOR might contain something
2833 that might throw and require us to clean up. */
2834 && (VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (init))
2835 || ! TYPE_HAS_NONTRIVIAL_DESTRUCTOR (inner_elt_type)))
2836 || from_array))
2838 /* Do non-default initialization of trivial arrays resulting from
2839 brace-enclosed initializers. In this case, digest_init and
2840 store_constructor will handle the semantics for us. */
2842 stmt_expr = build2 (INIT_EXPR, atype, base, init);
2843 return stmt_expr;
2846 maxindex = cp_convert (ptrdiff_type_node, maxindex);
2847 if (TREE_CODE (atype) == ARRAY_TYPE)
2849 ptype = build_pointer_type (type);
2850 base = cp_convert (ptype, decay_conversion (base));
2852 else
2853 ptype = atype;
2855 /* The code we are generating looks like:
2857 T* t1 = (T*) base;
2858 T* rval = t1;
2859 ptrdiff_t iterator = maxindex;
2860 try {
2861 for (; iterator != -1; --iterator) {
2862 ... initialize *t1 ...
2863 ++t1;
2865 } catch (...) {
2866 ... destroy elements that were constructed ...
2868 rval;
2871 We can omit the try and catch blocks if we know that the
2872 initialization will never throw an exception, or if the array
2873 elements do not have destructors. We can omit the loop completely if
2874 the elements of the array do not have constructors.
2876 We actually wrap the entire body of the above in a STMT_EXPR, for
2877 tidiness.
2879 When copying from array to another, when the array elements have
2880 only trivial copy constructors, we should use __builtin_memcpy
2881 rather than generating a loop. That way, we could take advantage
2882 of whatever cleverness the back end has for dealing with copies
2883 of blocks of memory. */
2885 is_global = begin_init_stmts (&stmt_expr, &compound_stmt);
2886 destroy_temps = stmts_are_full_exprs_p ();
2887 current_stmt_tree ()->stmts_are_full_exprs_p = 0;
2888 rval = get_temp_regvar (ptype, base);
2889 base = get_temp_regvar (ptype, rval);
2890 iterator = get_temp_regvar (ptrdiff_type_node, maxindex);
2892 /* If initializing one array from another, initialize element by
2893 element. We rely upon the below calls to do the argument
2894 checking. Evaluate the initializer before entering the try block. */
2895 if (from_array && init && TREE_CODE (init) != CONSTRUCTOR)
2897 base2 = decay_conversion (init);
2898 itype = TREE_TYPE (base2);
2899 base2 = get_temp_regvar (itype, base2);
2900 itype = TREE_TYPE (itype);
2903 /* Protect the entire array initialization so that we can destroy
2904 the partially constructed array if an exception is thrown.
2905 But don't do this if we're assigning. */
2906 if (flag_exceptions && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
2907 && from_array != 2)
2909 try_block = begin_try_block ();
2912 if (init != NULL_TREE && TREE_CODE (init) == CONSTRUCTOR)
2914 /* Do non-default initialization of non-trivial arrays resulting from
2915 brace-enclosed initializers. */
2916 unsigned HOST_WIDE_INT idx;
2917 tree elt;
2918 from_array = 0;
2920 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (init), idx, elt)
2922 tree baseref = build1 (INDIRECT_REF, type, base);
2924 num_initialized_elts++;
2926 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
2927 if (MAYBE_CLASS_TYPE_P (type) || TREE_CODE (type) == ARRAY_TYPE)
2928 finish_expr_stmt (build_aggr_init (baseref, elt, 0, complain));
2929 else
2930 finish_expr_stmt (cp_build_modify_expr (baseref, NOP_EXPR,
2931 elt, complain));
2932 current_stmt_tree ()->stmts_are_full_exprs_p = 0;
2934 finish_expr_stmt (cp_build_unary_op (PREINCREMENT_EXPR, base, 0,
2935 complain));
2936 finish_expr_stmt (cp_build_unary_op (PREDECREMENT_EXPR, iterator, 0,
2937 complain));
2940 /* Clear out INIT so that we don't get confused below. */
2941 init = NULL_TREE;
2943 else if (from_array)
2945 if (init)
2946 /* OK, we set base2 above. */;
2947 else if (TYPE_LANG_SPECIFIC (type)
2948 && TYPE_NEEDS_CONSTRUCTING (type)
2949 && ! TYPE_HAS_DEFAULT_CONSTRUCTOR (type))
2951 if (complain & tf_error)
2952 error ("initializer ends prematurely");
2953 return error_mark_node;
2957 /* Now, default-initialize any remaining elements. We don't need to
2958 do that if a) the type does not need constructing, or b) we've
2959 already initialized all the elements.
2961 We do need to keep going if we're copying an array. */
2963 if (from_array
2964 || ((TYPE_NEEDS_CONSTRUCTING (type) || explicit_value_init_p)
2965 && ! (host_integerp (maxindex, 0)
2966 && (num_initialized_elts
2967 == tree_low_cst (maxindex, 0) + 1))))
2969 /* If the ITERATOR is equal to -1, then we don't have to loop;
2970 we've already initialized all the elements. */
2971 tree for_stmt;
2972 tree elt_init;
2973 tree to;
2975 for_stmt = begin_for_stmt ();
2976 finish_for_init_stmt (for_stmt);
2977 finish_for_cond (build2 (NE_EXPR, boolean_type_node, iterator,
2978 build_int_cst (TREE_TYPE (iterator), -1)),
2979 for_stmt);
2980 finish_for_expr (cp_build_unary_op (PREDECREMENT_EXPR, iterator, 0,
2981 complain),
2982 for_stmt);
2984 to = build1 (INDIRECT_REF, type, base);
2986 if (from_array)
2988 tree from;
2990 if (base2)
2991 from = build1 (INDIRECT_REF, itype, base2);
2992 else
2993 from = NULL_TREE;
2995 if (from_array == 2)
2996 elt_init = cp_build_modify_expr (to, NOP_EXPR, from,
2997 complain);
2998 else if (TYPE_NEEDS_CONSTRUCTING (type))
2999 elt_init = build_aggr_init (to, from, 0, complain);
3000 else if (from)
3001 elt_init = cp_build_modify_expr (to, NOP_EXPR, from,
3002 complain);
3003 else
3004 gcc_unreachable ();
3006 else if (TREE_CODE (type) == ARRAY_TYPE)
3008 if (init != 0)
3009 sorry
3010 ("cannot initialize multi-dimensional array with initializer");
3011 elt_init = build_vec_init (build1 (INDIRECT_REF, type, base),
3012 0, 0,
3013 explicit_value_init_p,
3014 0, complain);
3016 else if (explicit_value_init_p)
3017 elt_init = build2 (INIT_EXPR, type, to,
3018 build_value_init (type));
3019 else
3021 gcc_assert (TYPE_NEEDS_CONSTRUCTING (type));
3022 elt_init = build_aggr_init (to, init, 0, complain);
3025 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
3026 finish_expr_stmt (elt_init);
3027 current_stmt_tree ()->stmts_are_full_exprs_p = 0;
3029 finish_expr_stmt (cp_build_unary_op (PREINCREMENT_EXPR, base, 0,
3030 complain));
3031 if (base2)
3032 finish_expr_stmt (cp_build_unary_op (PREINCREMENT_EXPR, base2, 0,
3033 complain));
3035 finish_for_stmt (for_stmt);
3038 /* Make sure to cleanup any partially constructed elements. */
3039 if (flag_exceptions && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
3040 && from_array != 2)
3042 tree e;
3043 tree m = cp_build_binary_op (input_location,
3044 MINUS_EXPR, maxindex, iterator,
3045 complain);
3047 /* Flatten multi-dimensional array since build_vec_delete only
3048 expects one-dimensional array. */
3049 if (TREE_CODE (type) == ARRAY_TYPE)
3050 m = cp_build_binary_op (input_location,
3051 MULT_EXPR, m,
3052 array_type_nelts_total (type),
3053 complain);
3055 finish_cleanup_try_block (try_block);
3056 e = build_vec_delete_1 (rval, m,
3057 inner_elt_type, sfk_base_destructor,
3058 /*use_global_delete=*/0);
3059 finish_cleanup (e, try_block);
3062 /* The value of the array initialization is the array itself, RVAL
3063 is a pointer to the first element. */
3064 finish_stmt_expr_expr (rval, stmt_expr);
3066 stmt_expr = finish_init_stmts (is_global, stmt_expr, compound_stmt);
3068 /* Now make the result have the correct type. */
3069 if (TREE_CODE (atype) == ARRAY_TYPE)
3071 atype = build_pointer_type (atype);
3072 stmt_expr = build1 (NOP_EXPR, atype, stmt_expr);
3073 stmt_expr = cp_build_indirect_ref (stmt_expr, RO_NULL, complain);
3074 TREE_NO_WARNING (stmt_expr) = 1;
3077 current_stmt_tree ()->stmts_are_full_exprs_p = destroy_temps;
3078 return stmt_expr;
3081 /* Call the DTOR_KIND destructor for EXP. FLAGS are as for
3082 build_delete. */
3084 static tree
3085 build_dtor_call (tree exp, special_function_kind dtor_kind, int flags)
3087 tree name;
3088 tree fn;
3089 switch (dtor_kind)
3091 case sfk_complete_destructor:
3092 name = complete_dtor_identifier;
3093 break;
3095 case sfk_base_destructor:
3096 name = base_dtor_identifier;
3097 break;
3099 case sfk_deleting_destructor:
3100 name = deleting_dtor_identifier;
3101 break;
3103 default:
3104 gcc_unreachable ();
3106 fn = lookup_fnfields (TREE_TYPE (exp), name, /*protect=*/2);
3107 return build_new_method_call (exp, fn,
3108 /*args=*/NULL,
3109 /*conversion_path=*/NULL_TREE,
3110 flags,
3111 /*fn_p=*/NULL,
3112 tf_warning_or_error);
3115 /* Generate a call to a destructor. TYPE is the type to cast ADDR to.
3116 ADDR is an expression which yields the store to be destroyed.
3117 AUTO_DELETE is the name of the destructor to call, i.e., either
3118 sfk_complete_destructor, sfk_base_destructor, or
3119 sfk_deleting_destructor.
3121 FLAGS is the logical disjunction of zero or more LOOKUP_
3122 flags. See cp-tree.h for more info. */
3124 tree
3125 build_delete (tree type, tree addr, special_function_kind auto_delete,
3126 int flags, int use_global_delete)
3128 tree expr;
3130 if (addr == error_mark_node)
3131 return error_mark_node;
3133 /* Can happen when CURRENT_EXCEPTION_OBJECT gets its type
3134 set to `error_mark_node' before it gets properly cleaned up. */
3135 if (type == error_mark_node)
3136 return error_mark_node;
3138 type = TYPE_MAIN_VARIANT (type);
3140 addr = mark_rvalue_use (addr);
3142 if (TREE_CODE (type) == POINTER_TYPE)
3144 bool complete_p = true;
3146 type = TYPE_MAIN_VARIANT (TREE_TYPE (type));
3147 if (TREE_CODE (type) == ARRAY_TYPE)
3148 goto handle_array;
3150 /* We don't want to warn about delete of void*, only other
3151 incomplete types. Deleting other incomplete types
3152 invokes undefined behavior, but it is not ill-formed, so
3153 compile to something that would even do The Right Thing
3154 (TM) should the type have a trivial dtor and no delete
3155 operator. */
3156 if (!VOID_TYPE_P (type))
3158 complete_type (type);
3159 if (!COMPLETE_TYPE_P (type))
3161 if (warning (0, "possible problem detected in invocation of "
3162 "delete operator:"))
3164 cxx_incomplete_type_diagnostic (addr, type, DK_WARNING);
3165 inform (input_location, "neither the destructor nor the class-specific "
3166 "operator delete will be called, even if they are "
3167 "declared when the class is defined.");
3169 complete_p = false;
3172 if (VOID_TYPE_P (type) || !complete_p || !MAYBE_CLASS_TYPE_P (type))
3173 /* Call the builtin operator delete. */
3174 return build_builtin_delete_call (addr);
3175 if (TREE_SIDE_EFFECTS (addr))
3176 addr = save_expr (addr);
3178 /* Throw away const and volatile on target type of addr. */
3179 addr = convert_force (build_pointer_type (type), addr, 0);
3181 else if (TREE_CODE (type) == ARRAY_TYPE)
3183 handle_array:
3185 if (TYPE_DOMAIN (type) == NULL_TREE)
3187 error ("unknown array size in delete");
3188 return error_mark_node;
3190 return build_vec_delete (addr, array_type_nelts (type),
3191 auto_delete, use_global_delete);
3193 else
3195 /* Don't check PROTECT here; leave that decision to the
3196 destructor. If the destructor is accessible, call it,
3197 else report error. */
3198 addr = cp_build_unary_op (ADDR_EXPR, addr, 0, tf_warning_or_error);
3199 if (TREE_SIDE_EFFECTS (addr))
3200 addr = save_expr (addr);
3202 addr = convert_force (build_pointer_type (type), addr, 0);
3205 gcc_assert (MAYBE_CLASS_TYPE_P (type));
3207 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
3209 if (auto_delete != sfk_deleting_destructor)
3210 return void_zero_node;
3212 return build_op_delete_call (DELETE_EXPR, addr,
3213 cxx_sizeof_nowarn (type),
3214 use_global_delete,
3215 /*placement=*/NULL_TREE,
3216 /*alloc_fn=*/NULL_TREE);
3218 else
3220 tree head = NULL_TREE;
3221 tree do_delete = NULL_TREE;
3222 tree ifexp;
3224 if (CLASSTYPE_LAZY_DESTRUCTOR (type))
3225 lazily_declare_fn (sfk_destructor, type);
3227 /* For `::delete x', we must not use the deleting destructor
3228 since then we would not be sure to get the global `operator
3229 delete'. */
3230 if (use_global_delete && auto_delete == sfk_deleting_destructor)
3232 /* We will use ADDR multiple times so we must save it. */
3233 addr = save_expr (addr);
3234 head = get_target_expr (build_headof (addr));
3235 /* Delete the object. */
3236 do_delete = build_builtin_delete_call (head);
3237 /* Otherwise, treat this like a complete object destructor
3238 call. */
3239 auto_delete = sfk_complete_destructor;
3241 /* If the destructor is non-virtual, there is no deleting
3242 variant. Instead, we must explicitly call the appropriate
3243 `operator delete' here. */
3244 else if (!DECL_VIRTUAL_P (CLASSTYPE_DESTRUCTORS (type))
3245 && auto_delete == sfk_deleting_destructor)
3247 /* We will use ADDR multiple times so we must save it. */
3248 addr = save_expr (addr);
3249 /* Build the call. */
3250 do_delete = build_op_delete_call (DELETE_EXPR,
3251 addr,
3252 cxx_sizeof_nowarn (type),
3253 /*global_p=*/false,
3254 /*placement=*/NULL_TREE,
3255 /*alloc_fn=*/NULL_TREE);
3256 /* Call the complete object destructor. */
3257 auto_delete = sfk_complete_destructor;
3259 else if (auto_delete == sfk_deleting_destructor
3260 && TYPE_GETS_REG_DELETE (type))
3262 /* Make sure we have access to the member op delete, even though
3263 we'll actually be calling it from the destructor. */
3264 build_op_delete_call (DELETE_EXPR, addr, cxx_sizeof_nowarn (type),
3265 /*global_p=*/false,
3266 /*placement=*/NULL_TREE,
3267 /*alloc_fn=*/NULL_TREE);
3270 expr = build_dtor_call (cp_build_indirect_ref (addr, RO_NULL,
3271 tf_warning_or_error),
3272 auto_delete, flags);
3273 if (do_delete)
3274 expr = build2 (COMPOUND_EXPR, void_type_node, expr, do_delete);
3276 /* We need to calculate this before the dtor changes the vptr. */
3277 if (head)
3278 expr = build2 (COMPOUND_EXPR, void_type_node, head, expr);
3280 if (flags & LOOKUP_DESTRUCTOR)
3281 /* Explicit destructor call; don't check for null pointer. */
3282 ifexp = integer_one_node;
3283 else
3284 /* Handle deleting a null pointer. */
3285 ifexp = fold (cp_build_binary_op (input_location,
3286 NE_EXPR, addr, integer_zero_node,
3287 tf_warning_or_error));
3289 if (ifexp != integer_one_node)
3290 expr = build3 (COND_EXPR, void_type_node,
3291 ifexp, expr, void_zero_node);
3293 return expr;
3297 /* At the beginning of a destructor, push cleanups that will call the
3298 destructors for our base classes and members.
3300 Called from begin_destructor_body. */
3302 void
3303 push_base_cleanups (void)
3305 tree binfo, base_binfo;
3306 int i;
3307 tree member;
3308 tree expr;
3309 VEC(tree,gc) *vbases;
3311 /* Run destructors for all virtual baseclasses. */
3312 if (CLASSTYPE_VBASECLASSES (current_class_type))
3314 tree cond = (condition_conversion
3315 (build2 (BIT_AND_EXPR, integer_type_node,
3316 current_in_charge_parm,
3317 integer_two_node)));
3319 /* The CLASSTYPE_VBASECLASSES vector is in initialization
3320 order, which is also the right order for pushing cleanups. */
3321 for (vbases = CLASSTYPE_VBASECLASSES (current_class_type), i = 0;
3322 VEC_iterate (tree, vbases, i, base_binfo); i++)
3324 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (BINFO_TYPE (base_binfo)))
3326 expr = build_special_member_call (current_class_ref,
3327 base_dtor_identifier,
3328 NULL,
3329 base_binfo,
3330 (LOOKUP_NORMAL
3331 | LOOKUP_NONVIRTUAL),
3332 tf_warning_or_error);
3333 expr = build3 (COND_EXPR, void_type_node, cond,
3334 expr, void_zero_node);
3335 finish_decl_cleanup (NULL_TREE, expr);
3340 /* Take care of the remaining baseclasses. */
3341 for (binfo = TYPE_BINFO (current_class_type), i = 0;
3342 BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
3344 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (BINFO_TYPE (base_binfo))
3345 || BINFO_VIRTUAL_P (base_binfo))
3346 continue;
3348 expr = build_special_member_call (current_class_ref,
3349 base_dtor_identifier,
3350 NULL, base_binfo,
3351 LOOKUP_NORMAL | LOOKUP_NONVIRTUAL,
3352 tf_warning_or_error);
3353 finish_decl_cleanup (NULL_TREE, expr);
3356 for (member = TYPE_FIELDS (current_class_type); member;
3357 member = TREE_CHAIN (member))
3359 if (TREE_TYPE (member) == error_mark_node
3360 || TREE_CODE (member) != FIELD_DECL
3361 || DECL_ARTIFICIAL (member))
3362 continue;
3363 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (member)))
3365 tree this_member = (build_class_member_access_expr
3366 (current_class_ref, member,
3367 /*access_path=*/NULL_TREE,
3368 /*preserve_reference=*/false,
3369 tf_warning_or_error));
3370 tree this_type = TREE_TYPE (member);
3371 expr = build_delete (this_type, this_member,
3372 sfk_complete_destructor,
3373 LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL,
3375 finish_decl_cleanup (NULL_TREE, expr);
3380 /* Build a C++ vector delete expression.
3381 MAXINDEX is the number of elements to be deleted.
3382 ELT_SIZE is the nominal size of each element in the vector.
3383 BASE is the expression that should yield the store to be deleted.
3384 This function expands (or synthesizes) these calls itself.
3385 AUTO_DELETE_VEC says whether the container (vector) should be deallocated.
3387 This also calls delete for virtual baseclasses of elements of the vector.
3389 Update: MAXINDEX is no longer needed. The size can be extracted from the
3390 start of the vector for pointers, and from the type for arrays. We still
3391 use MAXINDEX for arrays because it happens to already have one of the
3392 values we'd have to extract. (We could use MAXINDEX with pointers to
3393 confirm the size, and trap if the numbers differ; not clear that it'd
3394 be worth bothering.) */
3396 tree
3397 build_vec_delete (tree base, tree maxindex,
3398 special_function_kind auto_delete_vec, int use_global_delete)
3400 tree type;
3401 tree rval;
3402 tree base_init = NULL_TREE;
3404 type = TREE_TYPE (base);
3406 if (TREE_CODE (type) == POINTER_TYPE)
3408 /* Step back one from start of vector, and read dimension. */
3409 tree cookie_addr;
3410 tree size_ptr_type = build_pointer_type (sizetype);
3412 if (TREE_SIDE_EFFECTS (base))
3414 base_init = get_target_expr (base);
3415 base = TARGET_EXPR_SLOT (base_init);
3417 type = strip_array_types (TREE_TYPE (type));
3418 cookie_addr = fold_build1_loc (input_location, NEGATE_EXPR,
3419 sizetype, TYPE_SIZE_UNIT (sizetype));
3420 cookie_addr = build2 (POINTER_PLUS_EXPR,
3421 size_ptr_type,
3422 fold_convert (size_ptr_type, base),
3423 cookie_addr);
3424 maxindex = cp_build_indirect_ref (cookie_addr, RO_NULL, tf_warning_or_error);
3426 else if (TREE_CODE (type) == ARRAY_TYPE)
3428 /* Get the total number of things in the array, maxindex is a
3429 bad name. */
3430 maxindex = array_type_nelts_total (type);
3431 type = strip_array_types (type);
3432 base = cp_build_unary_op (ADDR_EXPR, base, 1, tf_warning_or_error);
3433 if (TREE_SIDE_EFFECTS (base))
3435 base_init = get_target_expr (base);
3436 base = TARGET_EXPR_SLOT (base_init);
3439 else
3441 if (base != error_mark_node)
3442 error ("type to vector delete is neither pointer or array type");
3443 return error_mark_node;
3446 rval = build_vec_delete_1 (base, maxindex, type, auto_delete_vec,
3447 use_global_delete);
3448 if (base_init)
3449 rval = build2 (COMPOUND_EXPR, TREE_TYPE (rval), base_init, rval);
3451 return rval;