Merge -r 127928:132243 from trunk
[official-gcc.git] / gcc / cp / init.c
blobec59207716da42025f636c8ca2e490707bd8d763
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
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 "rtl.h"
31 #include "expr.h"
32 #include "cp-tree.h"
33 #include "flags.h"
34 #include "output.h"
35 #include "except.h"
36 #include "toplev.h"
37 #include "target.h"
39 static bool begin_init_stmts (tree *, tree *);
40 static tree finish_init_stmts (bool, tree, tree);
41 static void construct_virtual_base (tree, tree);
42 static void expand_aggr_init_1 (tree, tree, tree, tree, int);
43 static void expand_default_init (tree, tree, tree, tree, int);
44 static tree build_vec_delete_1 (tree, tree, tree, special_function_kind, int);
45 static void perform_member_init (tree, tree);
46 static tree build_builtin_delete_call (tree);
47 static int member_init_ok_or_else (tree, tree, tree);
48 static void expand_virtual_init (tree, tree);
49 static tree sort_mem_initializers (tree, tree);
50 static tree initializing_context (tree);
51 static void expand_cleanup_for_base (tree, tree);
52 static tree get_temp_regvar (tree, tree);
53 static tree dfs_initialize_vtbl_ptrs (tree, void *);
54 static tree build_dtor_call (tree, special_function_kind, int);
55 static tree build_field_list (tree, tree, int *);
56 static tree build_vtbl_address (tree);
58 /* We are about to generate some complex initialization code.
59 Conceptually, it is all a single expression. However, we may want
60 to include conditionals, loops, and other such statement-level
61 constructs. Therefore, we build the initialization code inside a
62 statement-expression. This function starts such an expression.
63 STMT_EXPR_P and COMPOUND_STMT_P are filled in by this function;
64 pass them back to finish_init_stmts when the expression is
65 complete. */
67 static bool
68 begin_init_stmts (tree *stmt_expr_p, tree *compound_stmt_p)
70 bool is_global = !building_stmt_tree ();
72 *stmt_expr_p = begin_stmt_expr ();
73 *compound_stmt_p = begin_compound_stmt (BCS_NO_SCOPE);
75 return is_global;
78 /* Finish out the statement-expression begun by the previous call to
79 begin_init_stmts. Returns the statement-expression itself. */
81 static tree
82 finish_init_stmts (bool is_global, tree stmt_expr, tree compound_stmt)
84 finish_compound_stmt (compound_stmt);
86 stmt_expr = finish_stmt_expr (stmt_expr, true);
88 gcc_assert (!building_stmt_tree () == is_global);
90 return stmt_expr;
93 /* Constructors */
95 /* Called from initialize_vtbl_ptrs via dfs_walk. BINFO is the base
96 which we want to initialize the vtable pointer for, DATA is
97 TREE_LIST whose TREE_VALUE is the this ptr expression. */
99 static tree
100 dfs_initialize_vtbl_ptrs (tree binfo, void *data)
102 if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
103 return dfs_skip_bases;
105 if (!BINFO_PRIMARY_P (binfo) || BINFO_VIRTUAL_P (binfo))
107 tree base_ptr = TREE_VALUE ((tree) data);
109 base_ptr = build_base_path (PLUS_EXPR, base_ptr, binfo, /*nonnull=*/1);
111 expand_virtual_init (binfo, base_ptr);
114 return NULL_TREE;
117 /* Initialize all the vtable pointers in the object pointed to by
118 ADDR. */
120 void
121 initialize_vtbl_ptrs (tree addr)
123 tree list;
124 tree type;
126 type = TREE_TYPE (TREE_TYPE (addr));
127 list = build_tree_list (type, addr);
129 /* Walk through the hierarchy, initializing the vptr in each base
130 class. We do these in pre-order because we can't find the virtual
131 bases for a class until we've initialized the vtbl for that
132 class. */
133 dfs_walk_once (TYPE_BINFO (type), dfs_initialize_vtbl_ptrs, NULL, list);
136 /* Return an expression for the zero-initialization of an object with
137 type T. This expression will either be a constant (in the case
138 that T is a scalar), or a CONSTRUCTOR (in the case that T is an
139 aggregate), or NULL (in the case that T does not require
140 initialization). In either case, the value can be used as
141 DECL_INITIAL for a decl of the indicated TYPE; it is a valid static
142 initializer. If NELTS is non-NULL, and TYPE is an ARRAY_TYPE, NELTS
143 is the number of elements in the array. If STATIC_STORAGE_P is
144 TRUE, initializers are only generated for entities for which
145 zero-initialization does not simply mean filling the storage with
146 zero bytes. */
148 tree
149 build_zero_init (tree type, tree nelts, bool static_storage_p)
151 tree init = NULL_TREE;
153 /* [dcl.init]
155 To zero-initialize an object of type T means:
157 -- if T is a scalar type, the storage is set to the value of zero
158 converted to T.
160 -- if T is a non-union class type, the storage for each nonstatic
161 data member and each base-class subobject is zero-initialized.
163 -- if T is a union type, the storage for its first data member is
164 zero-initialized.
166 -- if T is an array type, the storage for each element is
167 zero-initialized.
169 -- if T is a reference type, no initialization is performed. */
171 gcc_assert (nelts == NULL_TREE || TREE_CODE (nelts) == INTEGER_CST);
173 if (type == error_mark_node)
175 else if (static_storage_p && zero_init_p (type))
176 /* In order to save space, we do not explicitly build initializers
177 for items that do not need them. GCC's semantics are that
178 items with static storage duration that are not otherwise
179 initialized are initialized to zero. */
181 else if (SCALAR_TYPE_P (type))
182 init = convert (type, integer_zero_node);
183 else if (CLASS_TYPE_P (type))
185 tree field;
186 VEC(constructor_elt,gc) *v = NULL;
188 /* Iterate over the fields, building initializations. */
189 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
191 if (TREE_CODE (field) != FIELD_DECL)
192 continue;
194 /* Note that for class types there will be FIELD_DECLs
195 corresponding to base classes as well. Thus, iterating
196 over TYPE_FIELDs will result in correct initialization of
197 all of the subobjects. */
198 if (!static_storage_p || !zero_init_p (TREE_TYPE (field)))
200 tree value = build_zero_init (TREE_TYPE (field),
201 /*nelts=*/NULL_TREE,
202 static_storage_p);
203 if (value)
204 CONSTRUCTOR_APPEND_ELT(v, field, value);
207 /* For unions, only the first field is initialized. */
208 if (TREE_CODE (type) == UNION_TYPE)
209 break;
212 /* Build a constructor to contain the initializations. */
213 init = build_constructor (type, v);
215 else if (TREE_CODE (type) == ARRAY_TYPE)
217 tree max_index;
218 VEC(constructor_elt,gc) *v = NULL;
220 /* Iterate over the array elements, building initializations. */
221 if (nelts)
222 max_index = fold_build2 (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)
265 TREE_CONSTANT (init) = 1;
266 TREE_INVARIANT (init) = 1;
269 return init;
272 /* Build an expression for the default-initialization of an object of
273 the indicated TYPE. If NELTS is non-NULL, and TYPE is an
274 ARRAY_TYPE, NELTS is the number of elements in the array. If
275 initialization of TYPE requires calling constructors, this function
276 returns NULL_TREE; the caller is responsible for arranging for the
277 constructors to be called. */
279 tree
280 build_default_init (tree type, tree nelts)
282 /* [dcl.init]:
284 To default-initialize an object of type T means:
286 --if T is a non-POD class type (clause _class_), the default construc-
287 tor for T is called (and the initialization is ill-formed if T has
288 no accessible default constructor);
290 --if T is an array type, each element is default-initialized;
292 --otherwise, the storage for the object is zero-initialized.
294 A program that calls for default-initialization of an entity of refer-
295 ence type is ill-formed. */
297 /* If TYPE_NEEDS_CONSTRUCTING is true, the caller is responsible for
298 performing the initialization. This is confusing in that some
299 non-PODs do not have TYPE_NEEDS_CONSTRUCTING set. (For example,
300 a class with a pointer-to-data member as a non-static data member
301 does not have TYPE_NEEDS_CONSTRUCTING set.) Therefore, we end up
302 passing non-PODs to build_zero_init below, which is contrary to
303 the semantics quoted above from [dcl.init].
305 It happens, however, that the behavior of the constructor the
306 standard says we should have generated would be precisely the
307 same as that obtained by calling build_zero_init below, so things
308 work out OK. */
309 if (TYPE_NEEDS_CONSTRUCTING (type)
310 || (nelts && TREE_CODE (nelts) != INTEGER_CST))
311 return NULL_TREE;
313 /* At this point, TYPE is either a POD class type, an array of POD
314 classes, or something even more innocuous. */
315 return build_zero_init (type, nelts, /*static_storage_p=*/false);
318 /* Return a suitable initializer for value-initializing an object of type
319 TYPE, as described in [dcl.init]. If HAVE_CTOR is true, the initializer
320 for an enclosing object is already calling the constructor for this
321 object. */
323 static tree
324 build_value_init_1 (tree type, bool have_ctor)
326 /* [dcl.init]
328 To value-initialize an object of type T means:
330 - if T is a class type (clause 9) with a user-provided constructor
331 (12.1), then the default constructor for T is called (and the
332 initialization is ill-formed if T has no accessible default
333 constructor);
335 - if T is a non-union class type without a user-provided constructor,
336 then every non-static data member and base-class component of T is
337 value-initialized;92)
339 - if T is an array type, then each element is value-initialized;
341 - otherwise, the object is zero-initialized.
343 A program that calls for default-initialization or
344 value-initialization of an entity of reference type is ill-formed.
346 92) Value-initialization for such a class object may be implemented by
347 zero-initializing the object and then calling the default
348 constructor. */
350 if (CLASS_TYPE_P (type))
352 if (TYPE_HAS_USER_CONSTRUCTOR (type) && !have_ctor)
353 return build_cplus_new
354 (type,
355 build_special_member_call (NULL_TREE, complete_ctor_identifier,
356 NULL_TREE, type, LOOKUP_NORMAL));
357 else if (TREE_CODE (type) != UNION_TYPE)
359 tree field, init;
360 VEC(constructor_elt,gc) *v = NULL;
361 bool call_ctor = !have_ctor && TYPE_NEEDS_CONSTRUCTING (type);
363 /* Iterate over the fields, building initializations. */
364 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
366 tree ftype, value;
368 if (TREE_CODE (field) != FIELD_DECL)
369 continue;
371 ftype = TREE_TYPE (field);
373 if (TREE_CODE (ftype) == REFERENCE_TYPE)
374 error ("value-initialization of reference");
376 /* We could skip vfields and fields of types with
377 user-defined constructors, but I think that won't improve
378 performance at all; it should be simpler in general just
379 to zero out the entire object than try to only zero the
380 bits that actually need it. */
382 /* Note that for class types there will be FIELD_DECLs
383 corresponding to base classes as well. Thus, iterating
384 over TYPE_FIELDs will result in correct initialization of
385 all of the subobjects. */
386 value = build_value_init_1 (ftype, have_ctor || call_ctor);
388 if (value)
389 CONSTRUCTOR_APPEND_ELT(v, field, value);
392 /* Build a constructor to contain the zero- initializations. */
393 init = build_constructor (type, v);
394 if (call_ctor)
396 /* This is a class that needs constructing, but doesn't have
397 a user-defined constructor. So we need to zero-initialize
398 the object and then call the implicitly defined ctor.
399 Implement this by sticking the zero-initialization inside
400 the TARGET_EXPR for the constructor call;
401 cp_gimplify_init_expr will know how to handle it. */
402 tree ctor = build_special_member_call
403 (NULL_TREE, complete_ctor_identifier,
404 NULL_TREE, type, LOOKUP_NORMAL);
406 ctor = build_cplus_new (type, ctor);
407 init = build2 (INIT_EXPR, void_type_node,
408 TARGET_EXPR_SLOT (ctor), init);
409 init = build2 (COMPOUND_EXPR, void_type_node, init,
410 TARGET_EXPR_INITIAL (ctor));
411 TARGET_EXPR_INITIAL (ctor) = init;
412 return ctor;
414 return init;
417 else if (TREE_CODE (type) == ARRAY_TYPE)
419 VEC(constructor_elt,gc) *v = NULL;
421 /* Iterate over the array elements, building initializations. */
422 tree max_index = array_type_nelts (type);
424 /* If we have an error_mark here, we should just return error mark
425 as we don't know the size of the array yet. */
426 if (max_index == error_mark_node)
427 return error_mark_node;
428 gcc_assert (TREE_CODE (max_index) == INTEGER_CST);
430 /* A zero-sized array, which is accepted as an extension, will
431 have an upper bound of -1. */
432 if (!tree_int_cst_equal (max_index, integer_minus_one_node))
434 constructor_elt *ce;
436 v = VEC_alloc (constructor_elt, gc, 1);
437 ce = VEC_quick_push (constructor_elt, v, NULL);
439 /* If this is a one element array, we just use a regular init. */
440 if (tree_int_cst_equal (size_zero_node, max_index))
441 ce->index = size_zero_node;
442 else
443 ce->index = build2 (RANGE_EXPR, sizetype, size_zero_node,
444 max_index);
446 ce->value = build_value_init_1 (TREE_TYPE (type), have_ctor);
449 /* Build a constructor to contain the initializations. */
450 return build_constructor (type, v);
453 return build_zero_init (type, NULL_TREE, /*static_storage_p=*/false);
456 /* Return a suitable initializer for value-initializing an object of type
457 TYPE, as described in [dcl.init]. */
459 tree
460 build_value_init (tree type)
462 return build_value_init_1 (type, false);
465 /* Initialize MEMBER, a FIELD_DECL, with INIT, a TREE_LIST of
466 arguments. If TREE_LIST is void_type_node, an empty initializer
467 list was given; if NULL_TREE no initializer was given. */
469 static void
470 perform_member_init (tree member, tree init)
472 tree decl;
473 tree type = TREE_TYPE (member);
474 bool explicit;
476 explicit = (init != NULL_TREE);
478 /* Effective C++ rule 12 requires that all data members be
479 initialized. */
480 if (warn_ecpp && !explicit && TREE_CODE (type) != ARRAY_TYPE)
481 warning (OPT_Weffc__, "%J%qD should be initialized in the member initialization "
482 "list", current_function_decl, member);
484 if (init == void_type_node)
485 init = NULL_TREE;
487 /* Get an lvalue for the data member. */
488 decl = build_class_member_access_expr (current_class_ref, member,
489 /*access_path=*/NULL_TREE,
490 /*preserve_reference=*/true);
491 if (decl == error_mark_node)
492 return;
494 /* Deal with this here, as we will get confused if we try to call the
495 assignment op for an anonymous union. This can happen in a
496 synthesized copy constructor. */
497 if (ANON_AGGR_TYPE_P (type))
499 if (init)
501 init = build2 (INIT_EXPR, type, decl, TREE_VALUE (init));
502 finish_expr_stmt (init);
505 else if (TYPE_NEEDS_CONSTRUCTING (type))
507 if (explicit
508 && TREE_CODE (type) == ARRAY_TYPE
509 && init != NULL_TREE
510 && TREE_CHAIN (init) == NULL_TREE
511 && TREE_CODE (TREE_TYPE (TREE_VALUE (init))) == ARRAY_TYPE)
513 /* Initialization of one array from another. */
514 finish_expr_stmt (build_vec_init (decl, NULL_TREE, TREE_VALUE (init),
515 /*explicit_default_init_p=*/false,
516 /* from_array=*/1));
518 else
519 finish_expr_stmt (build_aggr_init (decl, init, 0));
521 else
523 if (init == NULL_TREE)
525 if (explicit)
527 init = build_default_init (type, /*nelts=*/NULL_TREE);
528 if (TREE_CODE (type) == REFERENCE_TYPE)
529 warning (0, "%Jdefault-initialization of %q#D, "
530 "which has reference type",
531 current_function_decl, member);
533 /* member traversal: note it leaves init NULL */
534 else if (TREE_CODE (type) == REFERENCE_TYPE)
535 pedwarn ("%Juninitialized reference member %qD",
536 current_function_decl, member);
537 else if (CP_TYPE_CONST_P (type))
538 pedwarn ("%Juninitialized member %qD with %<const%> type %qT",
539 current_function_decl, member, type);
541 else if (TREE_CODE (init) == TREE_LIST)
542 /* There was an explicit member initialization. Do some work
543 in that case. */
544 init = build_x_compound_expr_from_list (init, "member initializer");
546 if (init)
547 finish_expr_stmt (build_modify_expr (decl, INIT_EXPR, init));
550 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
552 tree expr;
554 expr = build_class_member_access_expr (current_class_ref, member,
555 /*access_path=*/NULL_TREE,
556 /*preserve_reference=*/false);
557 expr = build_delete (type, expr, sfk_complete_destructor,
558 LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR, 0);
560 if (expr != error_mark_node)
561 finish_eh_cleanup (expr);
565 /* Returns a TREE_LIST containing (as the TREE_PURPOSE of each node) all
566 the FIELD_DECLs on the TYPE_FIELDS list for T, in reverse order. */
568 static tree
569 build_field_list (tree t, tree list, int *uses_unions_p)
571 tree fields;
573 *uses_unions_p = 0;
575 /* Note whether or not T is a union. */
576 if (TREE_CODE (t) == UNION_TYPE)
577 *uses_unions_p = 1;
579 for (fields = TYPE_FIELDS (t); fields; fields = TREE_CHAIN (fields))
581 /* Skip CONST_DECLs for enumeration constants and so forth. */
582 if (TREE_CODE (fields) != FIELD_DECL || DECL_ARTIFICIAL (fields))
583 continue;
585 /* Keep track of whether or not any fields are unions. */
586 if (TREE_CODE (TREE_TYPE (fields)) == UNION_TYPE)
587 *uses_unions_p = 1;
589 /* For an anonymous struct or union, we must recursively
590 consider the fields of the anonymous type. They can be
591 directly initialized from the constructor. */
592 if (ANON_AGGR_TYPE_P (TREE_TYPE (fields)))
594 /* Add this field itself. Synthesized copy constructors
595 initialize the entire aggregate. */
596 list = tree_cons (fields, NULL_TREE, list);
597 /* And now add the fields in the anonymous aggregate. */
598 list = build_field_list (TREE_TYPE (fields), list,
599 uses_unions_p);
601 /* Add this field. */
602 else if (DECL_NAME (fields))
603 list = tree_cons (fields, NULL_TREE, list);
606 return list;
609 /* The MEM_INITS are a TREE_LIST. The TREE_PURPOSE of each list gives
610 a FIELD_DECL or BINFO in T that needs initialization. The
611 TREE_VALUE gives the initializer, or list of initializer arguments.
613 Return a TREE_LIST containing all of the initializations required
614 for T, in the order in which they should be performed. The output
615 list has the same format as the input. */
617 static tree
618 sort_mem_initializers (tree t, tree mem_inits)
620 tree init;
621 tree base, binfo, base_binfo;
622 tree sorted_inits;
623 tree next_subobject;
624 VEC(tree,gc) *vbases;
625 int i;
626 int uses_unions_p;
628 /* Build up a list of initializations. The TREE_PURPOSE of entry
629 will be the subobject (a FIELD_DECL or BINFO) to initialize. The
630 TREE_VALUE will be the constructor arguments, or NULL if no
631 explicit initialization was provided. */
632 sorted_inits = NULL_TREE;
634 /* Process the virtual bases. */
635 for (vbases = CLASSTYPE_VBASECLASSES (t), i = 0;
636 VEC_iterate (tree, vbases, i, base); i++)
637 sorted_inits = tree_cons (base, NULL_TREE, sorted_inits);
639 /* Process the direct bases. */
640 for (binfo = TYPE_BINFO (t), i = 0;
641 BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
642 if (!BINFO_VIRTUAL_P (base_binfo))
643 sorted_inits = tree_cons (base_binfo, NULL_TREE, sorted_inits);
645 /* Process the non-static data members. */
646 sorted_inits = build_field_list (t, sorted_inits, &uses_unions_p);
647 /* Reverse the entire list of initializations, so that they are in
648 the order that they will actually be performed. */
649 sorted_inits = nreverse (sorted_inits);
651 /* If the user presented the initializers in an order different from
652 that in which they will actually occur, we issue a warning. Keep
653 track of the next subobject which can be explicitly initialized
654 without issuing a warning. */
655 next_subobject = sorted_inits;
657 /* Go through the explicit initializers, filling in TREE_PURPOSE in
658 the SORTED_INITS. */
659 for (init = mem_inits; init; init = TREE_CHAIN (init))
661 tree subobject;
662 tree subobject_init;
664 subobject = TREE_PURPOSE (init);
666 /* If the explicit initializers are in sorted order, then
667 SUBOBJECT will be NEXT_SUBOBJECT, or something following
668 it. */
669 for (subobject_init = next_subobject;
670 subobject_init;
671 subobject_init = TREE_CHAIN (subobject_init))
672 if (TREE_PURPOSE (subobject_init) == subobject)
673 break;
675 /* Issue a warning if the explicit initializer order does not
676 match that which will actually occur.
677 ??? Are all these on the correct lines? */
678 if (warn_reorder && !subobject_init)
680 if (TREE_CODE (TREE_PURPOSE (next_subobject)) == FIELD_DECL)
681 warning (OPT_Wreorder, "%q+D will be initialized after",
682 TREE_PURPOSE (next_subobject));
683 else
684 warning (OPT_Wreorder, "base %qT will be initialized after",
685 TREE_PURPOSE (next_subobject));
686 if (TREE_CODE (subobject) == FIELD_DECL)
687 warning (OPT_Wreorder, " %q+#D", subobject);
688 else
689 warning (OPT_Wreorder, " base %qT", subobject);
690 warning (OPT_Wreorder, "%J when initialized here", current_function_decl);
693 /* Look again, from the beginning of the list. */
694 if (!subobject_init)
696 subobject_init = sorted_inits;
697 while (TREE_PURPOSE (subobject_init) != subobject)
698 subobject_init = TREE_CHAIN (subobject_init);
701 /* It is invalid to initialize the same subobject more than
702 once. */
703 if (TREE_VALUE (subobject_init))
705 if (TREE_CODE (subobject) == FIELD_DECL)
706 error ("%Jmultiple initializations given for %qD",
707 current_function_decl, subobject);
708 else
709 error ("%Jmultiple initializations given for base %qT",
710 current_function_decl, subobject);
713 /* Record the initialization. */
714 TREE_VALUE (subobject_init) = TREE_VALUE (init);
715 next_subobject = subobject_init;
718 /* [class.base.init]
720 If a ctor-initializer specifies more than one mem-initializer for
721 multiple members of the same union (including members of
722 anonymous unions), the ctor-initializer is ill-formed. */
723 if (uses_unions_p)
725 tree last_field = NULL_TREE;
726 for (init = sorted_inits; init; init = TREE_CHAIN (init))
728 tree field;
729 tree field_type;
730 int done;
732 /* Skip uninitialized members and base classes. */
733 if (!TREE_VALUE (init)
734 || TREE_CODE (TREE_PURPOSE (init)) != FIELD_DECL)
735 continue;
736 /* See if this field is a member of a union, or a member of a
737 structure contained in a union, etc. */
738 field = TREE_PURPOSE (init);
739 for (field_type = DECL_CONTEXT (field);
740 !same_type_p (field_type, t);
741 field_type = TYPE_CONTEXT (field_type))
742 if (TREE_CODE (field_type) == UNION_TYPE)
743 break;
744 /* If this field is not a member of a union, skip it. */
745 if (TREE_CODE (field_type) != UNION_TYPE)
746 continue;
748 /* It's only an error if we have two initializers for the same
749 union type. */
750 if (!last_field)
752 last_field = field;
753 continue;
756 /* See if LAST_FIELD and the field initialized by INIT are
757 members of the same union. If so, there's a problem,
758 unless they're actually members of the same structure
759 which is itself a member of a union. For example, given:
761 union { struct { int i; int j; }; };
763 initializing both `i' and `j' makes sense. */
764 field_type = DECL_CONTEXT (field);
765 done = 0;
768 tree last_field_type;
770 last_field_type = DECL_CONTEXT (last_field);
771 while (1)
773 if (same_type_p (last_field_type, field_type))
775 if (TREE_CODE (field_type) == UNION_TYPE)
776 error ("%Jinitializations for multiple members of %qT",
777 current_function_decl, last_field_type);
778 done = 1;
779 break;
782 if (same_type_p (last_field_type, t))
783 break;
785 last_field_type = TYPE_CONTEXT (last_field_type);
788 /* If we've reached the outermost class, then we're
789 done. */
790 if (same_type_p (field_type, t))
791 break;
793 field_type = TYPE_CONTEXT (field_type);
795 while (!done);
797 last_field = field;
801 return sorted_inits;
804 /* Initialize all bases and members of CURRENT_CLASS_TYPE. MEM_INITS
805 is a TREE_LIST giving the explicit mem-initializer-list for the
806 constructor. The TREE_PURPOSE of each entry is a subobject (a
807 FIELD_DECL or a BINFO) of the CURRENT_CLASS_TYPE. The TREE_VALUE
808 is a TREE_LIST giving the arguments to the constructor or
809 void_type_node for an empty list of arguments. */
811 void
812 emit_mem_initializers (tree mem_inits)
814 /* We will already have issued an error message about the fact that
815 the type is incomplete. */
816 if (!COMPLETE_TYPE_P (current_class_type))
817 return;
819 /* Sort the mem-initializers into the order in which the
820 initializations should be performed. */
821 mem_inits = sort_mem_initializers (current_class_type, mem_inits);
823 in_base_initializer = 1;
825 /* Initialize base classes. */
826 while (mem_inits
827 && TREE_CODE (TREE_PURPOSE (mem_inits)) != FIELD_DECL)
829 tree subobject = TREE_PURPOSE (mem_inits);
830 tree arguments = TREE_VALUE (mem_inits);
832 /* If these initializations are taking place in a copy
833 constructor, the base class should probably be explicitly
834 initialized. */
835 if (extra_warnings && !arguments
836 && DECL_COPY_CONSTRUCTOR_P (current_function_decl)
837 && TYPE_NEEDS_CONSTRUCTING (BINFO_TYPE (subobject)))
838 warning (OPT_Wextra, "%Jbase class %q#T should be explicitly initialized in the "
839 "copy constructor",
840 current_function_decl, BINFO_TYPE (subobject));
842 /* If an explicit -- but empty -- initializer list was present,
843 treat it just like default initialization at this point. */
844 if (arguments == void_type_node)
845 arguments = NULL_TREE;
847 /* Initialize the base. */
848 if (BINFO_VIRTUAL_P (subobject))
849 construct_virtual_base (subobject, arguments);
850 else
852 tree base_addr;
854 base_addr = build_base_path (PLUS_EXPR, current_class_ptr,
855 subobject, 1);
856 expand_aggr_init_1 (subobject, NULL_TREE,
857 build_indirect_ref (base_addr, NULL),
858 arguments,
859 LOOKUP_NORMAL);
860 expand_cleanup_for_base (subobject, NULL_TREE);
863 mem_inits = TREE_CHAIN (mem_inits);
865 in_base_initializer = 0;
867 /* Initialize the vptrs. */
868 initialize_vtbl_ptrs (current_class_ptr);
870 /* Initialize the data members. */
871 while (mem_inits)
873 perform_member_init (TREE_PURPOSE (mem_inits),
874 TREE_VALUE (mem_inits));
875 mem_inits = TREE_CHAIN (mem_inits);
879 /* Returns the address of the vtable (i.e., the value that should be
880 assigned to the vptr) for BINFO. */
882 static tree
883 build_vtbl_address (tree binfo)
885 tree binfo_for = binfo;
886 tree vtbl;
888 if (BINFO_VPTR_INDEX (binfo) && BINFO_VIRTUAL_P (binfo))
889 /* If this is a virtual primary base, then the vtable we want to store
890 is that for the base this is being used as the primary base of. We
891 can't simply skip the initialization, because we may be expanding the
892 inits of a subobject constructor where the virtual base layout
893 can be different. */
894 while (BINFO_PRIMARY_P (binfo_for))
895 binfo_for = BINFO_INHERITANCE_CHAIN (binfo_for);
897 /* Figure out what vtable BINFO's vtable is based on, and mark it as
898 used. */
899 vtbl = get_vtbl_decl_for_binfo (binfo_for);
900 assemble_external (vtbl);
901 TREE_USED (vtbl) = 1;
903 /* Now compute the address to use when initializing the vptr. */
904 vtbl = unshare_expr (BINFO_VTABLE (binfo_for));
905 if (TREE_CODE (vtbl) == VAR_DECL)
906 vtbl = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (vtbl)), vtbl);
908 return vtbl;
911 /* This code sets up the virtual function tables appropriate for
912 the pointer DECL. It is a one-ply initialization.
914 BINFO is the exact type that DECL is supposed to be. In
915 multiple inheritance, this might mean "C's A" if C : A, B. */
917 static void
918 expand_virtual_init (tree binfo, tree decl)
920 tree vtbl, vtbl_ptr;
921 tree vtt_index;
923 /* Compute the initializer for vptr. */
924 vtbl = build_vtbl_address (binfo);
926 /* We may get this vptr from a VTT, if this is a subobject
927 constructor or subobject destructor. */
928 vtt_index = BINFO_VPTR_INDEX (binfo);
929 if (vtt_index)
931 tree vtbl2;
932 tree vtt_parm;
934 /* Compute the value to use, when there's a VTT. */
935 vtt_parm = current_vtt_parm;
936 vtbl2 = build2 (POINTER_PLUS_EXPR,
937 TREE_TYPE (vtt_parm),
938 vtt_parm,
939 vtt_index);
940 vtbl2 = build_indirect_ref (vtbl2, NULL);
941 vtbl2 = convert (TREE_TYPE (vtbl), vtbl2);
943 /* The actual initializer is the VTT value only in the subobject
944 constructor. In maybe_clone_body we'll substitute NULL for
945 the vtt_parm in the case of the non-subobject constructor. */
946 vtbl = build3 (COND_EXPR,
947 TREE_TYPE (vtbl),
948 build2 (EQ_EXPR, boolean_type_node,
949 current_in_charge_parm, integer_zero_node),
950 vtbl2,
951 vtbl);
954 /* Compute the location of the vtpr. */
955 vtbl_ptr = build_vfield_ref (build_indirect_ref (decl, NULL),
956 TREE_TYPE (binfo));
957 gcc_assert (vtbl_ptr != error_mark_node);
959 /* Assign the vtable to the vptr. */
960 vtbl = convert_force (TREE_TYPE (vtbl_ptr), vtbl, 0);
961 finish_expr_stmt (build_modify_expr (vtbl_ptr, NOP_EXPR, vtbl));
964 /* If an exception is thrown in a constructor, those base classes already
965 constructed must be destroyed. This function creates the cleanup
966 for BINFO, which has just been constructed. If FLAG is non-NULL,
967 it is a DECL which is nonzero when this base needs to be
968 destroyed. */
970 static void
971 expand_cleanup_for_base (tree binfo, tree flag)
973 tree expr;
975 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (BINFO_TYPE (binfo)))
976 return;
978 /* Call the destructor. */
979 expr = build_special_member_call (current_class_ref,
980 base_dtor_identifier,
981 NULL_TREE,
982 binfo,
983 LOOKUP_NORMAL | LOOKUP_NONVIRTUAL);
984 if (flag)
985 expr = fold_build3 (COND_EXPR, void_type_node,
986 c_common_truthvalue_conversion (flag),
987 expr, integer_zero_node);
989 finish_eh_cleanup (expr);
992 /* Construct the virtual base-class VBASE passing the ARGUMENTS to its
993 constructor. */
995 static void
996 construct_virtual_base (tree vbase, tree arguments)
998 tree inner_if_stmt;
999 tree exp;
1000 tree flag;
1002 /* If there are virtual base classes with destructors, we need to
1003 emit cleanups to destroy them if an exception is thrown during
1004 the construction process. These exception regions (i.e., the
1005 period during which the cleanups must occur) begin from the time
1006 the construction is complete to the end of the function. If we
1007 create a conditional block in which to initialize the
1008 base-classes, then the cleanup region for the virtual base begins
1009 inside a block, and ends outside of that block. This situation
1010 confuses the sjlj exception-handling code. Therefore, we do not
1011 create a single conditional block, but one for each
1012 initialization. (That way the cleanup regions always begin
1013 in the outer block.) We trust the back end to figure out
1014 that the FLAG will not change across initializations, and
1015 avoid doing multiple tests. */
1016 flag = TREE_CHAIN (DECL_ARGUMENTS (current_function_decl));
1017 inner_if_stmt = begin_if_stmt ();
1018 finish_if_stmt_cond (flag, inner_if_stmt);
1020 /* Compute the location of the virtual base. If we're
1021 constructing virtual bases, then we must be the most derived
1022 class. Therefore, we don't have to look up the virtual base;
1023 we already know where it is. */
1024 exp = convert_to_base_statically (current_class_ref, vbase);
1026 expand_aggr_init_1 (vbase, current_class_ref, exp, arguments,
1027 LOOKUP_COMPLAIN);
1028 finish_then_clause (inner_if_stmt);
1029 finish_if_stmt (inner_if_stmt);
1031 expand_cleanup_for_base (vbase, flag);
1034 /* Find the context in which this FIELD can be initialized. */
1036 static tree
1037 initializing_context (tree field)
1039 tree t = DECL_CONTEXT (field);
1041 /* Anonymous union members can be initialized in the first enclosing
1042 non-anonymous union context. */
1043 while (t && ANON_AGGR_TYPE_P (t))
1044 t = TYPE_CONTEXT (t);
1045 return t;
1048 /* Function to give error message if member initialization specification
1049 is erroneous. FIELD is the member we decided to initialize.
1050 TYPE is the type for which the initialization is being performed.
1051 FIELD must be a member of TYPE.
1053 MEMBER_NAME is the name of the member. */
1055 static int
1056 member_init_ok_or_else (tree field, tree type, tree member_name)
1058 if (field == error_mark_node)
1059 return 0;
1060 if (!field)
1062 error ("class %qT does not have any field named %qD", type,
1063 member_name);
1064 return 0;
1066 if (TREE_CODE (field) == VAR_DECL)
1068 error ("%q#D is a static data member; it can only be "
1069 "initialized at its definition",
1070 field);
1071 return 0;
1073 if (TREE_CODE (field) != FIELD_DECL)
1075 error ("%q#D is not a non-static data member of %qT",
1076 field, type);
1077 return 0;
1079 if (initializing_context (field) != type)
1081 error ("class %qT does not have any field named %qD", type,
1082 member_name);
1083 return 0;
1086 return 1;
1089 /* NAME is a FIELD_DECL, an IDENTIFIER_NODE which names a field, or it
1090 is a _TYPE node or TYPE_DECL which names a base for that type.
1091 Check the validity of NAME, and return either the base _TYPE, base
1092 binfo, or the FIELD_DECL of the member. If NAME is invalid, return
1093 NULL_TREE and issue a diagnostic.
1095 An old style unnamed direct single base construction is permitted,
1096 where NAME is NULL. */
1098 tree
1099 expand_member_init (tree name)
1101 tree basetype;
1102 tree field;
1104 if (!current_class_ref)
1105 return NULL_TREE;
1107 if (!name)
1109 /* This is an obsolete unnamed base class initializer. The
1110 parser will already have warned about its use. */
1111 switch (BINFO_N_BASE_BINFOS (TYPE_BINFO (current_class_type)))
1113 case 0:
1114 error ("unnamed initializer for %qT, which has no base classes",
1115 current_class_type);
1116 return NULL_TREE;
1117 case 1:
1118 basetype = BINFO_TYPE
1119 (BINFO_BASE_BINFO (TYPE_BINFO (current_class_type), 0));
1120 break;
1121 default:
1122 error ("unnamed initializer for %qT, which uses multiple inheritance",
1123 current_class_type);
1124 return NULL_TREE;
1127 else if (TYPE_P (name))
1129 basetype = TYPE_MAIN_VARIANT (name);
1130 name = TYPE_NAME (name);
1132 else if (TREE_CODE (name) == TYPE_DECL)
1133 basetype = TYPE_MAIN_VARIANT (TREE_TYPE (name));
1134 else
1135 basetype = NULL_TREE;
1137 if (basetype)
1139 tree class_binfo;
1140 tree direct_binfo;
1141 tree virtual_binfo;
1142 int i;
1144 if (current_template_parms)
1145 return basetype;
1147 class_binfo = TYPE_BINFO (current_class_type);
1148 direct_binfo = NULL_TREE;
1149 virtual_binfo = NULL_TREE;
1151 /* Look for a direct base. */
1152 for (i = 0; BINFO_BASE_ITERATE (class_binfo, i, direct_binfo); ++i)
1153 if (SAME_BINFO_TYPE_P (BINFO_TYPE (direct_binfo), basetype))
1154 break;
1156 /* Look for a virtual base -- unless the direct base is itself
1157 virtual. */
1158 if (!direct_binfo || !BINFO_VIRTUAL_P (direct_binfo))
1159 virtual_binfo = binfo_for_vbase (basetype, current_class_type);
1161 /* [class.base.init]
1163 If a mem-initializer-id is ambiguous because it designates
1164 both a direct non-virtual base class and an inherited virtual
1165 base class, the mem-initializer is ill-formed. */
1166 if (direct_binfo && virtual_binfo)
1168 error ("%qD is both a direct base and an indirect virtual base",
1169 basetype);
1170 return NULL_TREE;
1173 if (!direct_binfo && !virtual_binfo)
1175 if (CLASSTYPE_VBASECLASSES (current_class_type))
1176 error ("type %qT is not a direct or virtual base of %qT",
1177 basetype, current_class_type);
1178 else
1179 error ("type %qT is not a direct base of %qT",
1180 basetype, current_class_type);
1181 return NULL_TREE;
1184 return direct_binfo ? direct_binfo : virtual_binfo;
1186 else
1188 if (TREE_CODE (name) == IDENTIFIER_NODE)
1189 field = lookup_field (current_class_type, name, 1, false);
1190 else
1191 field = name;
1193 if (member_init_ok_or_else (field, current_class_type, name))
1194 return field;
1197 return NULL_TREE;
1200 /* This is like `expand_member_init', only it stores one aggregate
1201 value into another.
1203 INIT comes in two flavors: it is either a value which
1204 is to be stored in EXP, or it is a parameter list
1205 to go to a constructor, which will operate on EXP.
1206 If INIT is not a parameter list for a constructor, then set
1207 LOOKUP_ONLYCONVERTING.
1208 If FLAGS is LOOKUP_ONLYCONVERTING then it is the = init form of
1209 the initializer, if FLAGS is 0, then it is the (init) form.
1210 If `init' is a CONSTRUCTOR, then we emit a warning message,
1211 explaining that such initializations are invalid.
1213 If INIT resolves to a CALL_EXPR which happens to return
1214 something of the type we are looking for, then we know
1215 that we can safely use that call to perform the
1216 initialization.
1218 The virtual function table pointer cannot be set up here, because
1219 we do not really know its type.
1221 This never calls operator=().
1223 When initializing, nothing is CONST.
1225 A default copy constructor may have to be used to perform the
1226 initialization.
1228 A constructor or a conversion operator may have to be used to
1229 perform the initialization, but not both, as it would be ambiguous. */
1231 tree
1232 build_aggr_init (tree exp, tree init, int flags)
1234 tree stmt_expr;
1235 tree compound_stmt;
1236 int destroy_temps;
1237 tree type = TREE_TYPE (exp);
1238 int was_const = TREE_READONLY (exp);
1239 int was_volatile = TREE_THIS_VOLATILE (exp);
1240 int is_global;
1242 if (init == error_mark_node)
1243 return error_mark_node;
1245 TREE_READONLY (exp) = 0;
1246 TREE_THIS_VOLATILE (exp) = 0;
1248 if (init && TREE_CODE (init) != TREE_LIST)
1249 flags |= LOOKUP_ONLYCONVERTING;
1251 if (TREE_CODE (type) == ARRAY_TYPE)
1253 tree itype;
1255 /* An array may not be initialized use the parenthesized
1256 initialization form -- unless the initializer is "()". */
1257 if (init && TREE_CODE (init) == TREE_LIST)
1259 error ("bad array initializer");
1260 return error_mark_node;
1262 /* Must arrange to initialize each element of EXP
1263 from elements of INIT. */
1264 itype = init ? TREE_TYPE (init) : NULL_TREE;
1265 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
1266 TREE_TYPE (exp) = TYPE_MAIN_VARIANT (type);
1267 if (itype && cp_type_quals (itype) != TYPE_UNQUALIFIED)
1268 itype = TREE_TYPE (init) = TYPE_MAIN_VARIANT (itype);
1269 stmt_expr = build_vec_init (exp, NULL_TREE, init,
1270 /*explicit_default_init_p=*/false,
1271 itype && same_type_p (itype,
1272 TREE_TYPE (exp)));
1273 TREE_READONLY (exp) = was_const;
1274 TREE_THIS_VOLATILE (exp) = was_volatile;
1275 TREE_TYPE (exp) = type;
1276 if (init)
1277 TREE_TYPE (init) = itype;
1278 return stmt_expr;
1281 if (TREE_CODE (exp) == VAR_DECL || TREE_CODE (exp) == PARM_DECL)
1282 /* Just know that we've seen something for this node. */
1283 TREE_USED (exp) = 1;
1285 is_global = begin_init_stmts (&stmt_expr, &compound_stmt);
1286 destroy_temps = stmts_are_full_exprs_p ();
1287 current_stmt_tree ()->stmts_are_full_exprs_p = 0;
1288 expand_aggr_init_1 (TYPE_BINFO (type), exp, exp,
1289 init, LOOKUP_NORMAL|flags);
1290 stmt_expr = finish_init_stmts (is_global, stmt_expr, compound_stmt);
1291 current_stmt_tree ()->stmts_are_full_exprs_p = destroy_temps;
1292 TREE_READONLY (exp) = was_const;
1293 TREE_THIS_VOLATILE (exp) = was_volatile;
1295 return stmt_expr;
1298 static void
1299 expand_default_init (tree binfo, tree true_exp, tree exp, tree init, int flags)
1301 tree type = TREE_TYPE (exp);
1302 tree ctor_name;
1304 /* It fails because there may not be a constructor which takes
1305 its own type as the first (or only parameter), but which does
1306 take other types via a conversion. So, if the thing initializing
1307 the expression is a unit element of type X, first try X(X&),
1308 followed by initialization by X. If neither of these work
1309 out, then look hard. */
1310 tree rval;
1311 tree parms;
1313 if (init && TREE_CODE (init) != TREE_LIST
1314 && (flags & LOOKUP_ONLYCONVERTING))
1316 /* Base subobjects should only get direct-initialization. */
1317 gcc_assert (true_exp == exp);
1319 if (flags & DIRECT_BIND)
1320 /* Do nothing. We hit this in two cases: Reference initialization,
1321 where we aren't initializing a real variable, so we don't want
1322 to run a new constructor; and catching an exception, where we
1323 have already built up the constructor call so we could wrap it
1324 in an exception region. */;
1325 else if (BRACE_ENCLOSED_INITIALIZER_P (init))
1327 /* A brace-enclosed initializer for an aggregate. */
1328 gcc_assert (CP_AGGREGATE_TYPE_P (type));
1329 init = digest_init (type, init);
1331 else
1332 init = ocp_convert (type, init, CONV_IMPLICIT|CONV_FORCE_TEMP, flags);
1334 if (TREE_CODE (init) == MUST_NOT_THROW_EXPR)
1335 /* We need to protect the initialization of a catch parm with a
1336 call to terminate(), which shows up as a MUST_NOT_THROW_EXPR
1337 around the TARGET_EXPR for the copy constructor. See
1338 initialize_handler_parm. */
1340 TREE_OPERAND (init, 0) = build2 (INIT_EXPR, TREE_TYPE (exp), exp,
1341 TREE_OPERAND (init, 0));
1342 TREE_TYPE (init) = void_type_node;
1344 else
1345 init = build2 (INIT_EXPR, TREE_TYPE (exp), exp, init);
1346 TREE_SIDE_EFFECTS (init) = 1;
1347 finish_expr_stmt (init);
1348 return;
1351 if (init == NULL_TREE
1352 || (TREE_CODE (init) == TREE_LIST && ! TREE_TYPE (init)))
1354 parms = init;
1355 if (parms)
1356 init = TREE_VALUE (parms);
1358 else
1359 parms = build_tree_list (NULL_TREE, init);
1361 if (true_exp == exp)
1362 ctor_name = complete_ctor_identifier;
1363 else
1364 ctor_name = base_ctor_identifier;
1366 rval = build_special_member_call (exp, ctor_name, parms, binfo, flags);
1367 if (TREE_SIDE_EFFECTS (rval))
1368 finish_expr_stmt (convert_to_void (rval, NULL));
1371 /* This function is responsible for initializing EXP with INIT
1372 (if any).
1374 BINFO is the binfo of the type for who we are performing the
1375 initialization. For example, if W is a virtual base class of A and B,
1376 and C : A, B.
1377 If we are initializing B, then W must contain B's W vtable, whereas
1378 were we initializing C, W must contain C's W vtable.
1380 TRUE_EXP is nonzero if it is the true expression being initialized.
1381 In this case, it may be EXP, or may just contain EXP. The reason we
1382 need this is because if EXP is a base element of TRUE_EXP, we
1383 don't necessarily know by looking at EXP where its virtual
1384 baseclass fields should really be pointing. But we do know
1385 from TRUE_EXP. In constructors, we don't know anything about
1386 the value being initialized.
1388 FLAGS is just passed to `build_new_method_call'. See that function
1389 for its description. */
1391 static void
1392 expand_aggr_init_1 (tree binfo, tree true_exp, tree exp, tree init, int flags)
1394 tree type = TREE_TYPE (exp);
1396 gcc_assert (init != error_mark_node && type != error_mark_node);
1397 gcc_assert (building_stmt_tree ());
1399 /* Use a function returning the desired type to initialize EXP for us.
1400 If the function is a constructor, and its first argument is
1401 NULL_TREE, know that it was meant for us--just slide exp on
1402 in and expand the constructor. Constructors now come
1403 as TARGET_EXPRs. */
1405 if (init && TREE_CODE (exp) == VAR_DECL
1406 && COMPOUND_LITERAL_P (init))
1408 /* If store_init_value returns NULL_TREE, the INIT has been
1409 recorded as the DECL_INITIAL for EXP. That means there's
1410 nothing more we have to do. */
1411 init = store_init_value (exp, init);
1412 if (init)
1413 finish_expr_stmt (init);
1414 return;
1417 /* We know that expand_default_init can handle everything we want
1418 at this point. */
1419 expand_default_init (binfo, true_exp, exp, init, flags);
1422 /* Report an error if TYPE is not a user-defined, aggregate type. If
1423 OR_ELSE is nonzero, give an error message. */
1426 is_aggr_type (tree type, int or_else)
1428 if (type == error_mark_node)
1429 return 0;
1431 if (! IS_AGGR_TYPE (type))
1433 if (or_else)
1434 error ("%qT is not an aggregate type", type);
1435 return 0;
1437 return 1;
1440 tree
1441 get_type_value (tree name)
1443 if (name == error_mark_node)
1444 return NULL_TREE;
1446 if (IDENTIFIER_HAS_TYPE_VALUE (name))
1447 return IDENTIFIER_TYPE_VALUE (name);
1448 else
1449 return NULL_TREE;
1452 /* Build a reference to a member of an aggregate. This is not a C++
1453 `&', but really something which can have its address taken, and
1454 then act as a pointer to member, for example TYPE :: FIELD can have
1455 its address taken by saying & TYPE :: FIELD. ADDRESS_P is true if
1456 this expression is the operand of "&".
1458 @@ Prints out lousy diagnostics for operator <typename>
1459 @@ fields.
1461 @@ This function should be rewritten and placed in search.c. */
1463 tree
1464 build_offset_ref (tree type, tree member, bool address_p)
1466 tree decl;
1467 tree basebinfo = NULL_TREE;
1469 /* class templates can come in as TEMPLATE_DECLs here. */
1470 if (TREE_CODE (member) == TEMPLATE_DECL)
1471 return member;
1473 if (dependent_type_p (type) || type_dependent_expression_p (member))
1474 return build_qualified_name (NULL_TREE, type, member,
1475 /*template_p=*/false);
1477 gcc_assert (TYPE_P (type));
1478 if (! is_aggr_type (type, 1))
1479 return error_mark_node;
1481 gcc_assert (DECL_P (member) || BASELINK_P (member));
1482 /* Callers should call mark_used before this point. */
1483 gcc_assert (!DECL_P (member) || TREE_USED (member));
1485 if (!COMPLETE_TYPE_P (complete_type (type))
1486 && !TYPE_BEING_DEFINED (type))
1488 error ("incomplete type %qT does not have member %qD", type, member);
1489 return error_mark_node;
1492 /* Entities other than non-static members need no further
1493 processing. */
1494 if (TREE_CODE (member) == TYPE_DECL)
1495 return member;
1496 if (TREE_CODE (member) == VAR_DECL || TREE_CODE (member) == CONST_DECL)
1497 return convert_from_reference (member);
1499 if (TREE_CODE (member) == FIELD_DECL && DECL_C_BIT_FIELD (member))
1501 error ("invalid pointer to bit-field %qD", member);
1502 return error_mark_node;
1505 /* Set up BASEBINFO for member lookup. */
1506 decl = maybe_dummy_object (type, &basebinfo);
1508 /* A lot of this logic is now handled in lookup_member. */
1509 if (BASELINK_P (member))
1511 /* Go from the TREE_BASELINK to the member function info. */
1512 tree t = BASELINK_FUNCTIONS (member);
1514 if (TREE_CODE (t) != TEMPLATE_ID_EXPR && !really_overloaded_fn (t))
1516 /* Get rid of a potential OVERLOAD around it. */
1517 t = OVL_CURRENT (t);
1519 /* Unique functions are handled easily. */
1521 /* For non-static member of base class, we need a special rule
1522 for access checking [class.protected]:
1524 If the access is to form a pointer to member, the
1525 nested-name-specifier shall name the derived class
1526 (or any class derived from that class). */
1527 if (address_p && DECL_P (t)
1528 && DECL_NONSTATIC_MEMBER_P (t))
1529 perform_or_defer_access_check (TYPE_BINFO (type), t, t);
1530 else
1531 perform_or_defer_access_check (basebinfo, t, t);
1533 if (DECL_STATIC_FUNCTION_P (t))
1534 return t;
1535 member = t;
1537 else
1538 TREE_TYPE (member) = unknown_type_node;
1540 else if (address_p && TREE_CODE (member) == FIELD_DECL)
1541 /* We need additional test besides the one in
1542 check_accessibility_of_qualified_id in case it is
1543 a pointer to non-static member. */
1544 perform_or_defer_access_check (TYPE_BINFO (type), member, member);
1546 if (!address_p)
1548 /* If MEMBER is non-static, then the program has fallen afoul of
1549 [expr.prim]:
1551 An id-expression that denotes a nonstatic data member or
1552 nonstatic member function of a class can only be used:
1554 -- as part of a class member access (_expr.ref_) in which the
1555 object-expression refers to the member's class or a class
1556 derived from that class, or
1558 -- to form a pointer to member (_expr.unary.op_), or
1560 -- in the body of a nonstatic member function of that class or
1561 of a class derived from that class (_class.mfct.nonstatic_), or
1563 -- in a mem-initializer for a constructor for that class or for
1564 a class derived from that class (_class.base.init_). */
1565 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (member))
1567 /* Build a representation of a the qualified name suitable
1568 for use as the operand to "&" -- even though the "&" is
1569 not actually present. */
1570 member = build2 (OFFSET_REF, TREE_TYPE (member), decl, member);
1571 /* In Microsoft mode, treat a non-static member function as if
1572 it were a pointer-to-member. */
1573 if (flag_ms_extensions)
1575 PTRMEM_OK_P (member) = 1;
1576 return build_unary_op (ADDR_EXPR, member, 0);
1578 error ("invalid use of non-static member function %qD",
1579 TREE_OPERAND (member, 1));
1580 return error_mark_node;
1582 else if (TREE_CODE (member) == FIELD_DECL)
1584 error ("invalid use of non-static data member %qD", member);
1585 return error_mark_node;
1587 return member;
1590 member = build2 (OFFSET_REF, TREE_TYPE (member), decl, member);
1591 PTRMEM_OK_P (member) = 1;
1592 return member;
1595 /* If DECL is a scalar enumeration constant or variable with a
1596 constant initializer, return the initializer (or, its initializers,
1597 recursively); otherwise, return DECL. If INTEGRAL_P, the
1598 initializer is only returned if DECL is an integral
1599 constant-expression. */
1601 static tree
1602 constant_value_1 (tree decl, bool integral_p)
1604 while (TREE_CODE (decl) == CONST_DECL
1605 || (integral_p
1606 ? DECL_INTEGRAL_CONSTANT_VAR_P (decl)
1607 : (TREE_CODE (decl) == VAR_DECL
1608 && CP_TYPE_CONST_NON_VOLATILE_P (TREE_TYPE (decl)))))
1610 tree init;
1611 /* Static data members in template classes may have
1612 non-dependent initializers. References to such non-static
1613 data members are not value-dependent, so we must retrieve the
1614 initializer here. The DECL_INITIAL will have the right type,
1615 but will not have been folded because that would prevent us
1616 from performing all appropriate semantic checks at
1617 instantiation time. */
1618 if (DECL_CLASS_SCOPE_P (decl)
1619 && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl))
1620 && uses_template_parms (CLASSTYPE_TI_ARGS
1621 (DECL_CONTEXT (decl))))
1623 ++processing_template_decl;
1624 init = fold_non_dependent_expr (DECL_INITIAL (decl));
1625 --processing_template_decl;
1627 else
1629 /* If DECL is a static data member in a template
1630 specialization, we must instantiate it here. The
1631 initializer for the static data member is not processed
1632 until needed; we need it now. */
1633 mark_used (decl);
1634 init = DECL_INITIAL (decl);
1636 if (init == error_mark_node)
1637 return decl;
1638 if (!init
1639 || !TREE_TYPE (init)
1640 || (integral_p
1641 ? !INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (init))
1642 : (!TREE_CONSTANT (init)
1643 /* Do not return an aggregate constant (of which
1644 string literals are a special case), as we do not
1645 want to make inadvertent copies of such entities,
1646 and we must be sure that their addresses are the
1647 same everywhere. */
1648 || TREE_CODE (init) == CONSTRUCTOR
1649 || TREE_CODE (init) == STRING_CST)))
1650 break;
1651 decl = unshare_expr (init);
1653 return decl;
1656 /* If DECL is a CONST_DECL, or a constant VAR_DECL initialized by
1657 constant of integral or enumeration type, then return that value.
1658 These are those variables permitted in constant expressions by
1659 [5.19/1]. */
1661 tree
1662 integral_constant_value (tree decl)
1664 return constant_value_1 (decl, /*integral_p=*/true);
1667 /* A more relaxed version of integral_constant_value, used by the
1668 common C/C++ code and by the C++ front end for optimization
1669 purposes. */
1671 tree
1672 decl_constant_value (tree decl)
1674 return constant_value_1 (decl,
1675 /*integral_p=*/processing_template_decl);
1678 /* Common subroutines of build_new and build_vec_delete. */
1680 /* Call the global __builtin_delete to delete ADDR. */
1682 static tree
1683 build_builtin_delete_call (tree addr)
1685 mark_used (global_delete_fndecl);
1686 return build_call_n (global_delete_fndecl, 1, addr);
1689 /* Build and return a NEW_EXPR. If NELTS is non-NULL, TYPE[NELTS] is
1690 the type of the object being allocated; otherwise, it's just TYPE.
1691 INIT is the initializer, if any. USE_GLOBAL_NEW is true if the
1692 user explicitly wrote "::operator new". PLACEMENT, if non-NULL, is
1693 the TREE_LIST of arguments to be provided as arguments to a
1694 placement new operator. This routine performs no semantic checks;
1695 it just creates and returns a NEW_EXPR. */
1697 static tree
1698 build_raw_new_expr (tree placement, tree type, tree nelts, tree init,
1699 int use_global_new)
1701 tree new_expr;
1703 new_expr = build4 (NEW_EXPR, build_pointer_type (type), placement, type,
1704 nelts, init);
1705 NEW_EXPR_USE_GLOBAL (new_expr) = use_global_new;
1706 TREE_SIDE_EFFECTS (new_expr) = 1;
1708 return new_expr;
1711 /* Make sure that there are no aliasing issues with T, a placement new
1712 expression applied to PLACEMENT, by recording the change in dynamic
1713 type. If placement new is inlined, as it is with libstdc++, and if
1714 the type of the placement new differs from the type of the
1715 placement location itself, then alias analysis may think it is OK
1716 to interchange writes to the location from before the placement new
1717 and from after the placement new. We have to prevent type-based
1718 alias analysis from applying. PLACEMENT may be NULL, which means
1719 that we couldn't capture it in a temporary variable, in which case
1720 we use a memory clobber. */
1722 static tree
1723 avoid_placement_new_aliasing (tree t, tree placement)
1725 tree type_change;
1727 if (processing_template_decl)
1728 return t;
1730 /* If we are not using type based aliasing, we don't have to do
1731 anything. */
1732 if (!flag_strict_aliasing)
1733 return t;
1735 /* If we have a pointer and a location, record the change in dynamic
1736 type. Otherwise we need a general memory clobber. */
1737 if (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE
1738 && placement != NULL_TREE
1739 && TREE_CODE (TREE_TYPE (placement)) == POINTER_TYPE)
1740 type_change = build_stmt (CHANGE_DYNAMIC_TYPE_EXPR,
1741 TREE_TYPE (t),
1742 placement);
1743 else
1745 /* Build a memory clobber. */
1746 type_change = build_stmt (ASM_EXPR,
1747 build_string (0, ""),
1748 NULL_TREE,
1749 NULL_TREE,
1750 tree_cons (NULL_TREE,
1751 build_string (6, "memory"),
1752 NULL_TREE));
1754 ASM_VOLATILE_P (type_change) = 1;
1757 return build2 (COMPOUND_EXPR, TREE_TYPE (t), type_change, t);
1760 /* Generate code for a new-expression, including calling the "operator
1761 new" function, initializing the object, and, if an exception occurs
1762 during construction, cleaning up. The arguments are as for
1763 build_raw_new_expr. */
1765 static tree
1766 build_new_1 (tree placement, tree type, tree nelts, tree init,
1767 bool globally_qualified_p)
1769 tree size, rval;
1770 /* True iff this is a call to "operator new[]" instead of just
1771 "operator new". */
1772 bool array_p = false;
1773 /* True iff ARRAY_P is true and the bound of the array type is
1774 not necessarily a compile time constant. For example, VLA_P is
1775 true for "new int[f()]". */
1776 bool vla_p = false;
1777 /* The type being allocated. If ARRAY_P is true, this will be an
1778 ARRAY_TYPE. */
1779 tree full_type;
1780 /* If ARRAY_P is true, the element type of the array. This is an
1781 never ARRAY_TYPE; for something like "new int[3][4]", the
1782 ELT_TYPE is "int". If ARRAY_P is false, this is the same type as
1783 FULL_TYPE. */
1784 tree elt_type;
1785 /* The type of the new-expression. (This type is always a pointer
1786 type.) */
1787 tree pointer_type;
1788 /* A pointer type pointing to the FULL_TYPE. */
1789 tree full_pointer_type;
1790 tree outer_nelts = NULL_TREE;
1791 tree alloc_call, alloc_expr;
1792 /* The address returned by the call to "operator new". This node is
1793 a VAR_DECL and is therefore reusable. */
1794 tree alloc_node;
1795 tree alloc_fn;
1796 tree cookie_expr, init_expr;
1797 int nothrow, check_new;
1798 int use_java_new = 0;
1799 /* If non-NULL, the number of extra bytes to allocate at the
1800 beginning of the storage allocated for an array-new expression in
1801 order to store the number of elements. */
1802 tree cookie_size = NULL_TREE;
1803 tree placement_expr;
1804 /* True if the function we are calling is a placement allocation
1805 function. */
1806 bool placement_allocation_fn_p;
1807 tree args = NULL_TREE;
1808 /* True if the storage must be initialized, either by a constructor
1809 or due to an explicit new-initializer. */
1810 bool is_initialized;
1811 /* The address of the thing allocated, not including any cookie. In
1812 particular, if an array cookie is in use, DATA_ADDR is the
1813 address of the first array element. This node is a VAR_DECL, and
1814 is therefore reusable. */
1815 tree data_addr;
1816 tree init_preeval_expr = NULL_TREE;
1818 if (nelts)
1820 tree index;
1822 outer_nelts = nelts;
1823 array_p = true;
1825 /* ??? The middle-end will error on us for building a VLA outside a
1826 function context. Methinks that's not it's purvey. So we'll do
1827 our own VLA layout later. */
1828 vla_p = true;
1829 index = convert (sizetype, nelts);
1830 index = size_binop (MINUS_EXPR, index, size_one_node);
1831 index = build_index_type (index);
1832 full_type = build_cplus_array_type (type, NULL_TREE);
1833 /* We need a copy of the type as build_array_type will return a shared copy
1834 of the incomplete array type. */
1835 full_type = build_distinct_type_copy (full_type);
1836 TYPE_DOMAIN (full_type) = index;
1837 SET_TYPE_STRUCTURAL_EQUALITY (full_type);
1839 else
1841 full_type = type;
1842 if (TREE_CODE (type) == ARRAY_TYPE)
1844 array_p = true;
1845 nelts = array_type_nelts_top (type);
1846 outer_nelts = nelts;
1847 type = TREE_TYPE (type);
1851 /* If our base type is an array, then make sure we know how many elements
1852 it has. */
1853 for (elt_type = type;
1854 TREE_CODE (elt_type) == ARRAY_TYPE;
1855 elt_type = TREE_TYPE (elt_type))
1856 nelts = cp_build_binary_op (MULT_EXPR, nelts,
1857 array_type_nelts_top (elt_type));
1859 if (TREE_CODE (elt_type) == VOID_TYPE)
1861 error ("invalid type %<void%> for new");
1862 return error_mark_node;
1865 if (abstract_virtuals_error (NULL_TREE, elt_type))
1866 return error_mark_node;
1868 is_initialized = (TYPE_NEEDS_CONSTRUCTING (elt_type) || init);
1869 if (CP_TYPE_CONST_P (elt_type) && !is_initialized)
1871 error ("uninitialized const in %<new%> of %q#T", elt_type);
1872 return error_mark_node;
1875 size = size_in_bytes (elt_type);
1876 if (array_p)
1878 size = size_binop (MULT_EXPR, size, convert (sizetype, nelts));
1879 if (vla_p)
1881 tree n, bitsize;
1883 /* Do our own VLA layout. Setting TYPE_SIZE/_UNIT is
1884 necessary in order for the <INIT_EXPR <*foo> <CONSTRUCTOR
1885 ...>> to be valid. */
1886 TYPE_SIZE_UNIT (full_type) = size;
1887 n = convert (bitsizetype, nelts);
1888 bitsize = size_binop (MULT_EXPR, TYPE_SIZE (elt_type), n);
1889 TYPE_SIZE (full_type) = bitsize;
1893 alloc_fn = NULL_TREE;
1895 /* If PLACEMENT is a simple pointer type, then copy it into
1896 PLACEMENT_EXPR. */
1897 if (processing_template_decl
1898 || placement == NULL_TREE
1899 || TREE_CHAIN (placement) != NULL_TREE
1900 || TREE_CODE (TREE_TYPE (TREE_VALUE (placement))) != POINTER_TYPE)
1901 placement_expr = NULL_TREE;
1902 else
1904 placement_expr = get_target_expr (TREE_VALUE (placement));
1905 placement = tree_cons (NULL_TREE, placement_expr, NULL_TREE);
1908 /* Allocate the object. */
1909 if (! placement && TYPE_FOR_JAVA (elt_type))
1911 tree class_addr;
1912 tree class_decl = build_java_class_ref (elt_type);
1913 static const char alloc_name[] = "_Jv_AllocObject";
1915 if (class_decl == error_mark_node)
1916 return error_mark_node;
1918 use_java_new = 1;
1919 if (!get_global_value_if_present (get_identifier (alloc_name),
1920 &alloc_fn))
1922 error ("call to Java constructor with %qs undefined", alloc_name);
1923 return error_mark_node;
1925 else if (really_overloaded_fn (alloc_fn))
1927 error ("%qD should never be overloaded", alloc_fn);
1928 return error_mark_node;
1930 alloc_fn = OVL_CURRENT (alloc_fn);
1931 class_addr = build1 (ADDR_EXPR, jclass_node, class_decl);
1932 alloc_call = (build_function_call
1933 (alloc_fn,
1934 build_tree_list (NULL_TREE, class_addr)));
1936 else if (TYPE_FOR_JAVA (elt_type) && IS_AGGR_TYPE (elt_type))
1938 error ("Java class %q#T object allocated using placement new", elt_type);
1939 return error_mark_node;
1941 else
1943 tree fnname;
1944 tree fns;
1946 fnname = ansi_opname (array_p ? VEC_NEW_EXPR : NEW_EXPR);
1948 if (!globally_qualified_p
1949 && CLASS_TYPE_P (elt_type)
1950 && (array_p
1951 ? TYPE_HAS_ARRAY_NEW_OPERATOR (elt_type)
1952 : TYPE_HAS_NEW_OPERATOR (elt_type)))
1954 /* Use a class-specific operator new. */
1955 /* If a cookie is required, add some extra space. */
1956 if (array_p && TYPE_VEC_NEW_USES_COOKIE (elt_type))
1958 cookie_size = targetm.cxx.get_cookie_size (elt_type);
1959 size = size_binop (PLUS_EXPR, size, cookie_size);
1961 /* Create the argument list. */
1962 args = tree_cons (NULL_TREE, size, placement);
1963 /* Do name-lookup to find the appropriate operator. */
1964 fns = lookup_fnfields (elt_type, fnname, /*protect=*/2);
1965 if (fns == NULL_TREE)
1967 error ("no suitable %qD found in class %qT", fnname, elt_type);
1968 return error_mark_node;
1970 if (TREE_CODE (fns) == TREE_LIST)
1972 error ("request for member %qD is ambiguous", fnname);
1973 print_candidates (fns);
1974 return error_mark_node;
1976 alloc_call = build_new_method_call (build_dummy_object (elt_type),
1977 fns, args,
1978 /*conversion_path=*/NULL_TREE,
1979 LOOKUP_NORMAL,
1980 &alloc_fn);
1982 else
1984 /* Use a global operator new. */
1985 /* See if a cookie might be required. */
1986 if (array_p && TYPE_VEC_NEW_USES_COOKIE (elt_type))
1987 cookie_size = targetm.cxx.get_cookie_size (elt_type);
1988 else
1989 cookie_size = NULL_TREE;
1991 alloc_call = build_operator_new_call (fnname, placement,
1992 &size, &cookie_size,
1993 &alloc_fn);
1997 if (alloc_call == error_mark_node)
1998 return error_mark_node;
2000 gcc_assert (alloc_fn != NULL_TREE);
2002 /* In the simple case, we can stop now. */
2003 pointer_type = build_pointer_type (type);
2004 if (!cookie_size && !is_initialized)
2006 rval = build_nop (pointer_type, alloc_call);
2007 if (placement != NULL)
2008 rval = avoid_placement_new_aliasing (rval, placement_expr);
2009 return rval;
2012 /* While we're working, use a pointer to the type we've actually
2013 allocated. Store the result of the call in a variable so that we
2014 can use it more than once. */
2015 full_pointer_type = build_pointer_type (full_type);
2016 alloc_expr = get_target_expr (build_nop (full_pointer_type, alloc_call));
2017 alloc_node = TARGET_EXPR_SLOT (alloc_expr);
2019 /* Strip any COMPOUND_EXPRs from ALLOC_CALL. */
2020 while (TREE_CODE (alloc_call) == COMPOUND_EXPR)
2021 alloc_call = TREE_OPERAND (alloc_call, 1);
2023 /* Now, check to see if this function is actually a placement
2024 allocation function. This can happen even when PLACEMENT is NULL
2025 because we might have something like:
2027 struct S { void* operator new (size_t, int i = 0); };
2029 A call to `new S' will get this allocation function, even though
2030 there is no explicit placement argument. If there is more than
2031 one argument, or there are variable arguments, then this is a
2032 placement allocation function. */
2033 placement_allocation_fn_p
2034 = (type_num_arguments (TREE_TYPE (alloc_fn)) > 1
2035 || varargs_function_p (alloc_fn));
2037 /* Preevaluate the placement args so that we don't reevaluate them for a
2038 placement delete. */
2039 if (placement_allocation_fn_p)
2041 tree inits;
2042 stabilize_call (alloc_call, &inits);
2043 if (inits)
2044 alloc_expr = build2 (COMPOUND_EXPR, TREE_TYPE (alloc_expr), inits,
2045 alloc_expr);
2048 /* unless an allocation function is declared with an empty excep-
2049 tion-specification (_except.spec_), throw(), it indicates failure to
2050 allocate storage by throwing a bad_alloc exception (clause _except_,
2051 _lib.bad.alloc_); it returns a non-null pointer otherwise If the allo-
2052 cation function is declared with an empty exception-specification,
2053 throw(), it returns null to indicate failure to allocate storage and a
2054 non-null pointer otherwise.
2056 So check for a null exception spec on the op new we just called. */
2058 nothrow = TYPE_NOTHROW_P (TREE_TYPE (alloc_fn));
2059 check_new = (flag_check_new || nothrow) && ! use_java_new;
2061 if (cookie_size)
2063 tree cookie;
2064 tree cookie_ptr;
2065 tree size_ptr_type;
2067 /* Adjust so we're pointing to the start of the object. */
2068 data_addr = get_target_expr (build2 (POINTER_PLUS_EXPR, full_pointer_type,
2069 alloc_node, cookie_size));
2071 /* Store the number of bytes allocated so that we can know how
2072 many elements to destroy later. We use the last sizeof
2073 (size_t) bytes to store the number of elements. */
2074 cookie_ptr = fold_build1 (NEGATE_EXPR, sizetype, size_in_bytes (sizetype));
2075 size_ptr_type = build_pointer_type (sizetype);
2076 cookie_ptr = build2 (POINTER_PLUS_EXPR, size_ptr_type,
2077 fold_convert (size_ptr_type, data_addr), cookie_ptr);
2078 cookie = build_indirect_ref (cookie_ptr, NULL);
2080 cookie_expr = build2 (MODIFY_EXPR, sizetype, cookie, nelts);
2082 if (targetm.cxx.cookie_has_size ())
2084 /* Also store the element size. */
2085 cookie_ptr = build2 (POINTER_PLUS_EXPR, size_ptr_type, cookie_ptr,
2086 fold_build1 (NEGATE_EXPR, sizetype,
2087 size_in_bytes (sizetype)));
2089 cookie = build_indirect_ref (cookie_ptr, NULL);
2090 cookie = build2 (MODIFY_EXPR, sizetype, cookie,
2091 size_in_bytes(elt_type));
2092 cookie_expr = build2 (COMPOUND_EXPR, TREE_TYPE (cookie_expr),
2093 cookie, cookie_expr);
2095 data_addr = TARGET_EXPR_SLOT (data_addr);
2097 else
2099 cookie_expr = NULL_TREE;
2100 data_addr = alloc_node;
2103 /* Now initialize the allocated object. Note that we preevaluate the
2104 initialization expression, apart from the actual constructor call or
2105 assignment--we do this because we want to delay the allocation as long
2106 as possible in order to minimize the size of the exception region for
2107 placement delete. */
2108 if (is_initialized)
2110 bool stable;
2112 init_expr = build_indirect_ref (data_addr, NULL);
2114 if (array_p)
2116 bool explicit_default_init_p = false;
2118 if (init == void_zero_node)
2120 init = NULL_TREE;
2121 explicit_default_init_p = true;
2123 else if (init)
2124 pedwarn ("ISO C++ forbids initialization in array new");
2126 init_expr
2127 = build_vec_init (init_expr,
2128 cp_build_binary_op (MINUS_EXPR, outer_nelts,
2129 integer_one_node),
2130 init,
2131 explicit_default_init_p,
2132 /*from_array=*/0);
2134 /* An array initialization is stable because the initialization
2135 of each element is a full-expression, so the temporaries don't
2136 leak out. */
2137 stable = true;
2139 else
2141 if (init == void_zero_node)
2142 init = build_default_init (full_type, nelts);
2144 if (TYPE_NEEDS_CONSTRUCTING (type))
2146 init_expr = build_special_member_call (init_expr,
2147 complete_ctor_identifier,
2148 init, elt_type,
2149 LOOKUP_NORMAL);
2150 stable = stabilize_init (init_expr, &init_preeval_expr);
2152 else
2154 /* We are processing something like `new int (10)', which
2155 means allocate an int, and initialize it with 10. */
2157 if (TREE_CODE (init) == TREE_LIST)
2158 init = build_x_compound_expr_from_list (init,
2159 "new initializer");
2160 else
2161 gcc_assert (TREE_CODE (init) != CONSTRUCTOR
2162 || TREE_TYPE (init) != NULL_TREE);
2164 init_expr = build_modify_expr (init_expr, INIT_EXPR, init);
2165 stable = stabilize_init (init_expr, &init_preeval_expr);
2169 if (init_expr == error_mark_node)
2170 return error_mark_node;
2172 /* If any part of the object initialization terminates by throwing an
2173 exception and a suitable deallocation function can be found, the
2174 deallocation function is called to free the memory in which the
2175 object was being constructed, after which the exception continues
2176 to propagate in the context of the new-expression. If no
2177 unambiguous matching deallocation function can be found,
2178 propagating the exception does not cause the object's memory to be
2179 freed. */
2180 if (flag_exceptions && ! use_java_new)
2182 enum tree_code dcode = array_p ? VEC_DELETE_EXPR : DELETE_EXPR;
2183 tree cleanup;
2185 /* The Standard is unclear here, but the right thing to do
2186 is to use the same method for finding deallocation
2187 functions that we use for finding allocation functions. */
2188 cleanup = build_op_delete_call (dcode, alloc_node, size,
2189 globally_qualified_p,
2190 (placement_allocation_fn_p
2191 ? alloc_call : NULL_TREE),
2192 alloc_fn);
2194 if (!cleanup)
2195 /* We're done. */;
2196 else if (stable)
2197 /* This is much simpler if we were able to preevaluate all of
2198 the arguments to the constructor call. */
2199 init_expr = build2 (TRY_CATCH_EXPR, void_type_node,
2200 init_expr, cleanup);
2201 else
2202 /* Ack! First we allocate the memory. Then we set our sentry
2203 variable to true, and expand a cleanup that deletes the
2204 memory if sentry is true. Then we run the constructor, and
2205 finally clear the sentry.
2207 We need to do this because we allocate the space first, so
2208 if there are any temporaries with cleanups in the
2209 constructor args and we weren't able to preevaluate them, we
2210 need this EH region to extend until end of full-expression
2211 to preserve nesting. */
2213 tree end, sentry, begin;
2215 begin = get_target_expr (boolean_true_node);
2216 CLEANUP_EH_ONLY (begin) = 1;
2218 sentry = TARGET_EXPR_SLOT (begin);
2220 TARGET_EXPR_CLEANUP (begin)
2221 = build3 (COND_EXPR, void_type_node, sentry,
2222 cleanup, void_zero_node);
2224 end = build2 (MODIFY_EXPR, TREE_TYPE (sentry),
2225 sentry, boolean_false_node);
2227 init_expr
2228 = build2 (COMPOUND_EXPR, void_type_node, begin,
2229 build2 (COMPOUND_EXPR, void_type_node, init_expr,
2230 end));
2235 else
2236 init_expr = NULL_TREE;
2238 /* Now build up the return value in reverse order. */
2240 rval = data_addr;
2242 if (init_expr)
2243 rval = build2 (COMPOUND_EXPR, TREE_TYPE (rval), init_expr, rval);
2244 if (cookie_expr)
2245 rval = build2 (COMPOUND_EXPR, TREE_TYPE (rval), cookie_expr, rval);
2247 if (rval == alloc_node)
2248 /* If we don't have an initializer or a cookie, strip the TARGET_EXPR
2249 and return the call (which doesn't need to be adjusted). */
2250 rval = TARGET_EXPR_INITIAL (alloc_expr);
2251 else
2253 if (check_new)
2255 tree ifexp = cp_build_binary_op (NE_EXPR, alloc_node,
2256 integer_zero_node);
2257 rval = build_conditional_expr (ifexp, rval, alloc_node);
2260 /* Perform the allocation before anything else, so that ALLOC_NODE
2261 has been initialized before we start using it. */
2262 rval = build2 (COMPOUND_EXPR, TREE_TYPE (rval), alloc_expr, rval);
2265 if (init_preeval_expr)
2266 rval = build2 (COMPOUND_EXPR, TREE_TYPE (rval), init_preeval_expr, rval);
2268 /* Convert to the final type. */
2269 rval = build_nop (pointer_type, rval);
2271 /* A new-expression is never an lvalue. */
2272 gcc_assert (!lvalue_p (rval));
2274 if (placement != NULL)
2275 rval = avoid_placement_new_aliasing (rval, placement_expr);
2277 return rval;
2280 /* Generate a representation for a C++ "new" expression. PLACEMENT is
2281 a TREE_LIST of placement-new arguments (or NULL_TREE if none). If
2282 NELTS is NULL, TYPE is the type of the storage to be allocated. If
2283 NELTS is not NULL, then this is an array-new allocation; TYPE is
2284 the type of the elements in the array and NELTS is the number of
2285 elements in the array. INIT, if non-NULL, is the initializer for
2286 the new object, or void_zero_node to indicate an initializer of
2287 "()". If USE_GLOBAL_NEW is true, then the user explicitly wrote
2288 "::new" rather than just "new". */
2290 tree
2291 build_new (tree placement, tree type, tree nelts, tree init,
2292 int use_global_new)
2294 tree rval;
2295 tree orig_placement;
2296 tree orig_nelts;
2297 tree orig_init;
2299 if (placement == error_mark_node || type == error_mark_node
2300 || init == error_mark_node)
2301 return error_mark_node;
2303 orig_placement = placement;
2304 orig_nelts = nelts;
2305 orig_init = init;
2307 if (processing_template_decl)
2309 if (dependent_type_p (type)
2310 || any_type_dependent_arguments_p (placement)
2311 || (nelts && type_dependent_expression_p (nelts))
2312 || (init != void_zero_node
2313 && any_type_dependent_arguments_p (init)))
2314 return build_raw_new_expr (placement, type, nelts, init,
2315 use_global_new);
2316 placement = build_non_dependent_args (placement);
2317 if (nelts)
2318 nelts = build_non_dependent_expr (nelts);
2319 if (init != void_zero_node)
2320 init = build_non_dependent_args (init);
2323 if (nelts)
2325 if (!build_expr_type_conversion (WANT_INT | WANT_ENUM, nelts, false))
2326 pedwarn ("size in array new must have integral type");
2327 nelts = cp_save_expr (cp_convert (sizetype, nelts));
2330 /* ``A reference cannot be created by the new operator. A reference
2331 is not an object (8.2.2, 8.4.3), so a pointer to it could not be
2332 returned by new.'' ARM 5.3.3 */
2333 if (TREE_CODE (type) == REFERENCE_TYPE)
2335 error ("new cannot be applied to a reference type");
2336 type = TREE_TYPE (type);
2339 if (TREE_CODE (type) == FUNCTION_TYPE)
2341 error ("new cannot be applied to a function type");
2342 return error_mark_node;
2345 /* The type allocated must be complete. If the new-type-id was
2346 "T[N]" then we are just checking that "T" is complete here, but
2347 that is equivalent, since the value of "N" doesn't matter. */
2348 if (!complete_type_or_else (type, NULL_TREE))
2349 return error_mark_node;
2351 rval = build_new_1 (placement, type, nelts, init, use_global_new);
2352 if (rval == error_mark_node)
2353 return error_mark_node;
2355 if (processing_template_decl)
2356 return build_raw_new_expr (orig_placement, type, orig_nelts, orig_init,
2357 use_global_new);
2359 /* Wrap it in a NOP_EXPR so warn_if_unused_value doesn't complain. */
2360 rval = build1 (NOP_EXPR, TREE_TYPE (rval), rval);
2361 TREE_NO_WARNING (rval) = 1;
2363 return rval;
2366 /* Given a Java class, return a decl for the corresponding java.lang.Class. */
2368 tree
2369 build_java_class_ref (tree type)
2371 tree name = NULL_TREE, class_decl;
2372 static tree CL_suffix = NULL_TREE;
2373 if (CL_suffix == NULL_TREE)
2374 CL_suffix = get_identifier("class$");
2375 if (jclass_node == NULL_TREE)
2377 jclass_node = IDENTIFIER_GLOBAL_VALUE (get_identifier ("jclass"));
2378 if (jclass_node == NULL_TREE)
2380 error ("call to Java constructor, while %<jclass%> undefined");
2381 return error_mark_node;
2383 jclass_node = TREE_TYPE (jclass_node);
2386 /* Mangle the class$ field. */
2388 tree field;
2389 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
2390 if (DECL_NAME (field) == CL_suffix)
2392 mangle_decl (field);
2393 name = DECL_ASSEMBLER_NAME (field);
2394 break;
2396 if (!field)
2398 error ("can't find %<class$%> in %qT", type);
2399 return error_mark_node;
2403 class_decl = IDENTIFIER_GLOBAL_VALUE (name);
2404 if (class_decl == NULL_TREE)
2406 class_decl = build_decl (VAR_DECL, name, TREE_TYPE (jclass_node));
2407 TREE_STATIC (class_decl) = 1;
2408 DECL_EXTERNAL (class_decl) = 1;
2409 TREE_PUBLIC (class_decl) = 1;
2410 DECL_ARTIFICIAL (class_decl) = 1;
2411 DECL_IGNORED_P (class_decl) = 1;
2412 pushdecl_top_level (class_decl);
2413 make_decl_rtl (class_decl);
2415 return class_decl;
2418 static tree
2419 build_vec_delete_1 (tree base, tree maxindex, tree type,
2420 special_function_kind auto_delete_vec, int use_global_delete)
2422 tree virtual_size;
2423 tree ptype = build_pointer_type (type = complete_type (type));
2424 tree size_exp = size_in_bytes (type);
2426 /* Temporary variables used by the loop. */
2427 tree tbase, tbase_init;
2429 /* This is the body of the loop that implements the deletion of a
2430 single element, and moves temp variables to next elements. */
2431 tree body;
2433 /* This is the LOOP_EXPR that governs the deletion of the elements. */
2434 tree loop = 0;
2436 /* This is the thing that governs what to do after the loop has run. */
2437 tree deallocate_expr = 0;
2439 /* This is the BIND_EXPR which holds the outermost iterator of the
2440 loop. It is convenient to set this variable up and test it before
2441 executing any other code in the loop.
2442 This is also the containing expression returned by this function. */
2443 tree controller = NULL_TREE;
2444 tree tmp;
2446 /* We should only have 1-D arrays here. */
2447 gcc_assert (TREE_CODE (type) != ARRAY_TYPE);
2449 if (! IS_AGGR_TYPE (type) || TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
2450 goto no_destructor;
2452 /* The below is short by the cookie size. */
2453 virtual_size = size_binop (MULT_EXPR, size_exp,
2454 convert (sizetype, maxindex));
2456 tbase = create_temporary_var (ptype);
2457 tbase_init = build_modify_expr (tbase, NOP_EXPR,
2458 fold_build2 (POINTER_PLUS_EXPR, ptype,
2459 fold_convert (ptype, base),
2460 virtual_size));
2461 DECL_REGISTER (tbase) = 1;
2462 controller = build3 (BIND_EXPR, void_type_node, tbase,
2463 NULL_TREE, NULL_TREE);
2464 TREE_SIDE_EFFECTS (controller) = 1;
2466 body = build1 (EXIT_EXPR, void_type_node,
2467 build2 (EQ_EXPR, boolean_type_node, tbase,
2468 fold_convert (ptype, base)));
2469 tmp = fold_build1 (NEGATE_EXPR, sizetype, size_exp);
2470 body = build_compound_expr
2471 (body, build_modify_expr (tbase, NOP_EXPR,
2472 build2 (POINTER_PLUS_EXPR, ptype, tbase, tmp)));
2473 body = build_compound_expr
2474 (body, build_delete (ptype, tbase, sfk_complete_destructor,
2475 LOOKUP_NORMAL|LOOKUP_DESTRUCTOR, 1));
2477 loop = build1 (LOOP_EXPR, void_type_node, body);
2478 loop = build_compound_expr (tbase_init, loop);
2480 no_destructor:
2481 /* If the delete flag is one, or anything else with the low bit set,
2482 delete the storage. */
2483 if (auto_delete_vec != sfk_base_destructor)
2485 tree base_tbd;
2487 /* The below is short by the cookie size. */
2488 virtual_size = size_binop (MULT_EXPR, size_exp,
2489 convert (sizetype, maxindex));
2491 if (! TYPE_VEC_NEW_USES_COOKIE (type))
2492 /* no header */
2493 base_tbd = base;
2494 else
2496 tree cookie_size;
2498 cookie_size = targetm.cxx.get_cookie_size (type);
2499 base_tbd
2500 = cp_convert (ptype,
2501 cp_build_binary_op (MINUS_EXPR,
2502 cp_convert (string_type_node,
2503 base),
2504 cookie_size));
2505 /* True size with header. */
2506 virtual_size = size_binop (PLUS_EXPR, virtual_size, cookie_size);
2509 if (auto_delete_vec == sfk_deleting_destructor)
2510 deallocate_expr = build_op_delete_call (VEC_DELETE_EXPR,
2511 base_tbd, virtual_size,
2512 use_global_delete & 1,
2513 /*placement=*/NULL_TREE,
2514 /*alloc_fn=*/NULL_TREE);
2517 body = loop;
2518 if (!deallocate_expr)
2520 else if (!body)
2521 body = deallocate_expr;
2522 else
2523 body = build_compound_expr (body, deallocate_expr);
2525 if (!body)
2526 body = integer_zero_node;
2528 /* Outermost wrapper: If pointer is null, punt. */
2529 body = fold_build3 (COND_EXPR, void_type_node,
2530 fold_build2 (NE_EXPR, boolean_type_node, base,
2531 convert (TREE_TYPE (base),
2532 integer_zero_node)),
2533 body, integer_zero_node);
2534 body = build1 (NOP_EXPR, void_type_node, body);
2536 if (controller)
2538 TREE_OPERAND (controller, 1) = body;
2539 body = controller;
2542 if (TREE_CODE (base) == SAVE_EXPR)
2543 /* Pre-evaluate the SAVE_EXPR outside of the BIND_EXPR. */
2544 body = build2 (COMPOUND_EXPR, void_type_node, base, body);
2546 return convert_to_void (body, /*implicit=*/NULL);
2549 /* Create an unnamed variable of the indicated TYPE. */
2551 tree
2552 create_temporary_var (tree type)
2554 tree decl;
2556 decl = build_decl (VAR_DECL, NULL_TREE, type);
2557 TREE_USED (decl) = 1;
2558 DECL_ARTIFICIAL (decl) = 1;
2559 DECL_IGNORED_P (decl) = 1;
2560 DECL_SOURCE_LOCATION (decl) = input_location;
2561 DECL_CONTEXT (decl) = current_function_decl;
2563 return decl;
2566 /* Create a new temporary variable of the indicated TYPE, initialized
2567 to INIT.
2569 It is not entered into current_binding_level, because that breaks
2570 things when it comes time to do final cleanups (which take place
2571 "outside" the binding contour of the function). */
2573 static tree
2574 get_temp_regvar (tree type, tree init)
2576 tree decl;
2578 decl = create_temporary_var (type);
2579 add_decl_expr (decl);
2581 finish_expr_stmt (build_modify_expr (decl, INIT_EXPR, init));
2583 return decl;
2586 /* `build_vec_init' returns tree structure that performs
2587 initialization of a vector of aggregate types.
2589 BASE is a reference to the vector, of ARRAY_TYPE.
2590 MAXINDEX is the maximum index of the array (one less than the
2591 number of elements). It is only used if
2592 TYPE_DOMAIN (TREE_TYPE (BASE)) == NULL_TREE.
2594 INIT is the (possibly NULL) initializer.
2596 If EXPLICIT_DEFAULT_INIT_P is true, then INIT must be NULL. All
2597 elements in the array are default-initialized.
2599 FROM_ARRAY is 0 if we should init everything with INIT
2600 (i.e., every element initialized from INIT).
2601 FROM_ARRAY is 1 if we should index into INIT in parallel
2602 with initialization of DECL.
2603 FROM_ARRAY is 2 if we should index into INIT in parallel,
2604 but use assignment instead of initialization. */
2606 tree
2607 build_vec_init (tree base, tree maxindex, tree init,
2608 bool explicit_default_init_p,
2609 int from_array)
2611 tree rval;
2612 tree base2 = NULL_TREE;
2613 tree size;
2614 tree itype = NULL_TREE;
2615 tree iterator;
2616 /* The type of the array. */
2617 tree atype = TREE_TYPE (base);
2618 /* The type of an element in the array. */
2619 tree type = TREE_TYPE (atype);
2620 /* The element type reached after removing all outer array
2621 types. */
2622 tree inner_elt_type;
2623 /* The type of a pointer to an element in the array. */
2624 tree ptype;
2625 tree stmt_expr;
2626 tree compound_stmt;
2627 int destroy_temps;
2628 tree try_block = NULL_TREE;
2629 int num_initialized_elts = 0;
2630 bool is_global;
2632 if (TYPE_DOMAIN (atype))
2633 maxindex = array_type_nelts (atype);
2635 if (maxindex == NULL_TREE || maxindex == error_mark_node)
2636 return error_mark_node;
2638 if (explicit_default_init_p)
2639 gcc_assert (!init);
2641 inner_elt_type = strip_array_types (atype);
2642 if (init
2643 && (from_array == 2
2644 ? (!CLASS_TYPE_P (inner_elt_type)
2645 || !TYPE_HAS_COMPLEX_ASSIGN_REF (inner_elt_type))
2646 : !TYPE_NEEDS_CONSTRUCTING (type))
2647 && ((TREE_CODE (init) == CONSTRUCTOR
2648 /* Don't do this if the CONSTRUCTOR might contain something
2649 that might throw and require us to clean up. */
2650 && (VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (init))
2651 || ! TYPE_HAS_NONTRIVIAL_DESTRUCTOR (inner_elt_type)))
2652 || from_array))
2654 /* Do non-default initialization of POD arrays resulting from
2655 brace-enclosed initializers. In this case, digest_init and
2656 store_constructor will handle the semantics for us. */
2658 stmt_expr = build2 (INIT_EXPR, atype, base, init);
2659 return stmt_expr;
2662 maxindex = cp_convert (ptrdiff_type_node, maxindex);
2663 ptype = build_pointer_type (type);
2664 size = size_in_bytes (type);
2665 if (TREE_CODE (TREE_TYPE (base)) == ARRAY_TYPE)
2666 base = cp_convert (ptype, decay_conversion (base));
2668 /* The code we are generating looks like:
2670 T* t1 = (T*) base;
2671 T* rval = t1;
2672 ptrdiff_t iterator = maxindex;
2673 try {
2674 for (; iterator != -1; --iterator) {
2675 ... initialize *t1 ...
2676 ++t1;
2678 } catch (...) {
2679 ... destroy elements that were constructed ...
2681 rval;
2684 We can omit the try and catch blocks if we know that the
2685 initialization will never throw an exception, or if the array
2686 elements do not have destructors. We can omit the loop completely if
2687 the elements of the array do not have constructors.
2689 We actually wrap the entire body of the above in a STMT_EXPR, for
2690 tidiness.
2692 When copying from array to another, when the array elements have
2693 only trivial copy constructors, we should use __builtin_memcpy
2694 rather than generating a loop. That way, we could take advantage
2695 of whatever cleverness the back end has for dealing with copies
2696 of blocks of memory. */
2698 is_global = begin_init_stmts (&stmt_expr, &compound_stmt);
2699 destroy_temps = stmts_are_full_exprs_p ();
2700 current_stmt_tree ()->stmts_are_full_exprs_p = 0;
2701 rval = get_temp_regvar (ptype, base);
2702 base = get_temp_regvar (ptype, rval);
2703 iterator = get_temp_regvar (ptrdiff_type_node, maxindex);
2705 /* Protect the entire array initialization so that we can destroy
2706 the partially constructed array if an exception is thrown.
2707 But don't do this if we're assigning. */
2708 if (flag_exceptions && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
2709 && from_array != 2)
2711 try_block = begin_try_block ();
2714 if (init != NULL_TREE && TREE_CODE (init) == CONSTRUCTOR)
2716 /* Do non-default initialization of non-POD arrays resulting from
2717 brace-enclosed initializers. */
2718 unsigned HOST_WIDE_INT idx;
2719 tree elt;
2720 from_array = 0;
2722 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (init), idx, elt)
2724 tree baseref = build1 (INDIRECT_REF, type, base);
2726 num_initialized_elts++;
2728 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
2729 if (IS_AGGR_TYPE (type) || TREE_CODE (type) == ARRAY_TYPE)
2730 finish_expr_stmt (build_aggr_init (baseref, elt, 0));
2731 else
2732 finish_expr_stmt (build_modify_expr (baseref, NOP_EXPR,
2733 elt));
2734 current_stmt_tree ()->stmts_are_full_exprs_p = 0;
2736 finish_expr_stmt (build_unary_op (PREINCREMENT_EXPR, base, 0));
2737 finish_expr_stmt (build_unary_op (PREDECREMENT_EXPR, iterator, 0));
2740 /* Clear out INIT so that we don't get confused below. */
2741 init = NULL_TREE;
2743 else if (from_array)
2745 /* If initializing one array from another, initialize element by
2746 element. We rely upon the below calls the do argument
2747 checking. */
2748 if (init)
2750 base2 = decay_conversion (init);
2751 itype = TREE_TYPE (base2);
2752 base2 = get_temp_regvar (itype, base2);
2753 itype = TREE_TYPE (itype);
2755 else if (TYPE_LANG_SPECIFIC (type)
2756 && TYPE_NEEDS_CONSTRUCTING (type)
2757 && ! TYPE_HAS_DEFAULT_CONSTRUCTOR (type))
2759 error ("initializer ends prematurely");
2760 return error_mark_node;
2764 /* Now, default-initialize any remaining elements. We don't need to
2765 do that if a) the type does not need constructing, or b) we've
2766 already initialized all the elements.
2768 We do need to keep going if we're copying an array. */
2770 if (from_array
2771 || ((TYPE_NEEDS_CONSTRUCTING (type) || explicit_default_init_p)
2772 && ! (host_integerp (maxindex, 0)
2773 && (num_initialized_elts
2774 == tree_low_cst (maxindex, 0) + 1))))
2776 /* If the ITERATOR is equal to -1, then we don't have to loop;
2777 we've already initialized all the elements. */
2778 tree for_stmt;
2779 tree elt_init;
2780 tree to;
2782 for_stmt = begin_for_stmt ();
2783 finish_for_init_stmt (for_stmt);
2784 finish_for_cond (build2 (NE_EXPR, boolean_type_node, iterator,
2785 build_int_cst (TREE_TYPE (iterator), -1)),
2786 for_stmt);
2787 finish_for_expr (build_unary_op (PREDECREMENT_EXPR, iterator, 0),
2788 for_stmt);
2790 to = build1 (INDIRECT_REF, type, base);
2792 if (from_array)
2794 tree from;
2796 if (base2)
2797 from = build1 (INDIRECT_REF, itype, base2);
2798 else
2799 from = NULL_TREE;
2801 if (from_array == 2)
2802 elt_init = build_modify_expr (to, NOP_EXPR, from);
2803 else if (TYPE_NEEDS_CONSTRUCTING (type))
2804 elt_init = build_aggr_init (to, from, 0);
2805 else if (from)
2806 elt_init = build_modify_expr (to, NOP_EXPR, from);
2807 else
2808 gcc_unreachable ();
2810 else if (TREE_CODE (type) == ARRAY_TYPE)
2812 if (init != 0)
2813 sorry
2814 ("cannot initialize multi-dimensional array with initializer");
2815 elt_init = build_vec_init (build1 (INDIRECT_REF, type, base),
2816 0, 0,
2817 /*explicit_default_init_p=*/false,
2820 else if (!TYPE_NEEDS_CONSTRUCTING (type))
2821 elt_init = (build_modify_expr
2822 (to, INIT_EXPR,
2823 build_zero_init (type, size_one_node,
2824 /*static_storage_p=*/false)));
2825 else
2826 elt_init = build_aggr_init (to, init, 0);
2828 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
2829 finish_expr_stmt (elt_init);
2830 current_stmt_tree ()->stmts_are_full_exprs_p = 0;
2832 finish_expr_stmt (build_unary_op (PREINCREMENT_EXPR, base, 0));
2833 if (base2)
2834 finish_expr_stmt (build_unary_op (PREINCREMENT_EXPR, base2, 0));
2836 finish_for_stmt (for_stmt);
2839 /* Make sure to cleanup any partially constructed elements. */
2840 if (flag_exceptions && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
2841 && from_array != 2)
2843 tree e;
2844 tree m = cp_build_binary_op (MINUS_EXPR, maxindex, iterator);
2846 /* Flatten multi-dimensional array since build_vec_delete only
2847 expects one-dimensional array. */
2848 if (TREE_CODE (type) == ARRAY_TYPE)
2849 m = cp_build_binary_op (MULT_EXPR, m,
2850 array_type_nelts_total (type));
2852 finish_cleanup_try_block (try_block);
2853 e = build_vec_delete_1 (rval, m,
2854 inner_elt_type, sfk_base_destructor,
2855 /*use_global_delete=*/0);
2856 finish_cleanup (e, try_block);
2859 /* The value of the array initialization is the array itself, RVAL
2860 is a pointer to the first element. */
2861 finish_stmt_expr_expr (rval, stmt_expr);
2863 stmt_expr = finish_init_stmts (is_global, stmt_expr, compound_stmt);
2865 /* Now convert make the result have the correct type. */
2866 atype = build_pointer_type (atype);
2867 stmt_expr = build1 (NOP_EXPR, atype, stmt_expr);
2868 stmt_expr = build_indirect_ref (stmt_expr, NULL);
2870 current_stmt_tree ()->stmts_are_full_exprs_p = destroy_temps;
2871 return stmt_expr;
2874 /* Call the DTOR_KIND destructor for EXP. FLAGS are as for
2875 build_delete. */
2877 static tree
2878 build_dtor_call (tree exp, special_function_kind dtor_kind, int flags)
2880 tree name;
2881 tree fn;
2882 switch (dtor_kind)
2884 case sfk_complete_destructor:
2885 name = complete_dtor_identifier;
2886 break;
2888 case sfk_base_destructor:
2889 name = base_dtor_identifier;
2890 break;
2892 case sfk_deleting_destructor:
2893 name = deleting_dtor_identifier;
2894 break;
2896 default:
2897 gcc_unreachable ();
2899 fn = lookup_fnfields (TREE_TYPE (exp), name, /*protect=*/2);
2900 return build_new_method_call (exp, fn,
2901 /*args=*/NULL_TREE,
2902 /*conversion_path=*/NULL_TREE,
2903 flags,
2904 /*fn_p=*/NULL);
2907 /* Generate a call to a destructor. TYPE is the type to cast ADDR to.
2908 ADDR is an expression which yields the store to be destroyed.
2909 AUTO_DELETE is the name of the destructor to call, i.e., either
2910 sfk_complete_destructor, sfk_base_destructor, or
2911 sfk_deleting_destructor.
2913 FLAGS is the logical disjunction of zero or more LOOKUP_
2914 flags. See cp-tree.h for more info. */
2916 tree
2917 build_delete (tree type, tree addr, special_function_kind auto_delete,
2918 int flags, int use_global_delete)
2920 tree expr;
2922 if (addr == error_mark_node)
2923 return error_mark_node;
2925 /* Can happen when CURRENT_EXCEPTION_OBJECT gets its type
2926 set to `error_mark_node' before it gets properly cleaned up. */
2927 if (type == error_mark_node)
2928 return error_mark_node;
2930 type = TYPE_MAIN_VARIANT (type);
2932 if (TREE_CODE (type) == POINTER_TYPE)
2934 bool complete_p = true;
2936 type = TYPE_MAIN_VARIANT (TREE_TYPE (type));
2937 if (TREE_CODE (type) == ARRAY_TYPE)
2938 goto handle_array;
2940 /* We don't want to warn about delete of void*, only other
2941 incomplete types. Deleting other incomplete types
2942 invokes undefined behavior, but it is not ill-formed, so
2943 compile to something that would even do The Right Thing
2944 (TM) should the type have a trivial dtor and no delete
2945 operator. */
2946 if (!VOID_TYPE_P (type))
2948 complete_type (type);
2949 if (!COMPLETE_TYPE_P (type))
2951 warning (0, "possible problem detected in invocation of "
2952 "delete operator:");
2953 cxx_incomplete_type_diagnostic (addr, type, 1);
2954 inform ("neither the destructor nor the class-specific "
2955 "operator delete will be called, even if they are "
2956 "declared when the class is defined.");
2957 complete_p = false;
2960 if (VOID_TYPE_P (type) || !complete_p || !IS_AGGR_TYPE (type))
2961 /* Call the builtin operator delete. */
2962 return build_builtin_delete_call (addr);
2963 if (TREE_SIDE_EFFECTS (addr))
2964 addr = save_expr (addr);
2966 /* Throw away const and volatile on target type of addr. */
2967 addr = convert_force (build_pointer_type (type), addr, 0);
2969 else if (TREE_CODE (type) == ARRAY_TYPE)
2971 handle_array:
2973 if (TYPE_DOMAIN (type) == NULL_TREE)
2975 error ("unknown array size in delete");
2976 return error_mark_node;
2978 return build_vec_delete (addr, array_type_nelts (type),
2979 auto_delete, use_global_delete);
2981 else
2983 /* Don't check PROTECT here; leave that decision to the
2984 destructor. If the destructor is accessible, call it,
2985 else report error. */
2986 addr = build_unary_op (ADDR_EXPR, addr, 0);
2987 if (TREE_SIDE_EFFECTS (addr))
2988 addr = save_expr (addr);
2990 addr = convert_force (build_pointer_type (type), addr, 0);
2993 gcc_assert (IS_AGGR_TYPE (type));
2995 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
2997 if (auto_delete != sfk_deleting_destructor)
2998 return void_zero_node;
3000 return build_op_delete_call (DELETE_EXPR, addr,
3001 cxx_sizeof_nowarn (type),
3002 use_global_delete,
3003 /*placement=*/NULL_TREE,
3004 /*alloc_fn=*/NULL_TREE);
3006 else
3008 tree head = NULL_TREE;
3009 tree do_delete = NULL_TREE;
3010 tree ifexp;
3012 if (CLASSTYPE_LAZY_DESTRUCTOR (type))
3013 lazily_declare_fn (sfk_destructor, type);
3015 /* For `::delete x', we must not use the deleting destructor
3016 since then we would not be sure to get the global `operator
3017 delete'. */
3018 if (use_global_delete && auto_delete == sfk_deleting_destructor)
3020 /* We will use ADDR multiple times so we must save it. */
3021 addr = save_expr (addr);
3022 head = get_target_expr (build_headof (addr));
3023 /* Delete the object. */
3024 do_delete = build_builtin_delete_call (head);
3025 /* Otherwise, treat this like a complete object destructor
3026 call. */
3027 auto_delete = sfk_complete_destructor;
3029 /* If the destructor is non-virtual, there is no deleting
3030 variant. Instead, we must explicitly call the appropriate
3031 `operator delete' here. */
3032 else if (!DECL_VIRTUAL_P (CLASSTYPE_DESTRUCTORS (type))
3033 && auto_delete == sfk_deleting_destructor)
3035 /* We will use ADDR multiple times so we must save it. */
3036 addr = save_expr (addr);
3037 /* Build the call. */
3038 do_delete = build_op_delete_call (DELETE_EXPR,
3039 addr,
3040 cxx_sizeof_nowarn (type),
3041 /*global_p=*/false,
3042 /*placement=*/NULL_TREE,
3043 /*alloc_fn=*/NULL_TREE);
3044 /* Call the complete object destructor. */
3045 auto_delete = sfk_complete_destructor;
3047 else if (auto_delete == sfk_deleting_destructor
3048 && TYPE_GETS_REG_DELETE (type))
3050 /* Make sure we have access to the member op delete, even though
3051 we'll actually be calling it from the destructor. */
3052 build_op_delete_call (DELETE_EXPR, addr, cxx_sizeof_nowarn (type),
3053 /*global_p=*/false,
3054 /*placement=*/NULL_TREE,
3055 /*alloc_fn=*/NULL_TREE);
3058 expr = build_dtor_call (build_indirect_ref (addr, NULL),
3059 auto_delete, flags);
3060 if (do_delete)
3061 expr = build2 (COMPOUND_EXPR, void_type_node, expr, do_delete);
3063 /* We need to calculate this before the dtor changes the vptr. */
3064 if (head)
3065 expr = build2 (COMPOUND_EXPR, void_type_node, head, expr);
3067 if (flags & LOOKUP_DESTRUCTOR)
3068 /* Explicit destructor call; don't check for null pointer. */
3069 ifexp = integer_one_node;
3070 else
3071 /* Handle deleting a null pointer. */
3072 ifexp = fold (cp_build_binary_op (NE_EXPR, addr, integer_zero_node));
3074 if (ifexp != integer_one_node)
3075 expr = build3 (COND_EXPR, void_type_node,
3076 ifexp, expr, void_zero_node);
3078 return expr;
3082 /* At the beginning of a destructor, push cleanups that will call the
3083 destructors for our base classes and members.
3085 Called from begin_destructor_body. */
3087 void
3088 push_base_cleanups (void)
3090 tree binfo, base_binfo;
3091 int i;
3092 tree member;
3093 tree expr;
3094 VEC(tree,gc) *vbases;
3096 /* Run destructors for all virtual baseclasses. */
3097 if (CLASSTYPE_VBASECLASSES (current_class_type))
3099 tree cond = (condition_conversion
3100 (build2 (BIT_AND_EXPR, integer_type_node,
3101 current_in_charge_parm,
3102 integer_two_node)));
3104 /* The CLASSTYPE_VBASECLASSES vector is in initialization
3105 order, which is also the right order for pushing cleanups. */
3106 for (vbases = CLASSTYPE_VBASECLASSES (current_class_type), i = 0;
3107 VEC_iterate (tree, vbases, i, base_binfo); i++)
3109 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (BINFO_TYPE (base_binfo)))
3111 expr = build_special_member_call (current_class_ref,
3112 base_dtor_identifier,
3113 NULL_TREE,
3114 base_binfo,
3115 (LOOKUP_NORMAL
3116 | LOOKUP_NONVIRTUAL));
3117 expr = build3 (COND_EXPR, void_type_node, cond,
3118 expr, void_zero_node);
3119 finish_decl_cleanup (NULL_TREE, expr);
3124 /* Take care of the remaining baseclasses. */
3125 for (binfo = TYPE_BINFO (current_class_type), i = 0;
3126 BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
3128 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (BINFO_TYPE (base_binfo))
3129 || BINFO_VIRTUAL_P (base_binfo))
3130 continue;
3132 expr = build_special_member_call (current_class_ref,
3133 base_dtor_identifier,
3134 NULL_TREE, base_binfo,
3135 LOOKUP_NORMAL | LOOKUP_NONVIRTUAL);
3136 finish_decl_cleanup (NULL_TREE, expr);
3139 for (member = TYPE_FIELDS (current_class_type); member;
3140 member = TREE_CHAIN (member))
3142 if (TREE_TYPE (member) == error_mark_node
3143 || TREE_CODE (member) != FIELD_DECL
3144 || DECL_ARTIFICIAL (member))
3145 continue;
3146 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (member)))
3148 tree this_member = (build_class_member_access_expr
3149 (current_class_ref, member,
3150 /*access_path=*/NULL_TREE,
3151 /*preserve_reference=*/false));
3152 tree this_type = TREE_TYPE (member);
3153 expr = build_delete (this_type, this_member,
3154 sfk_complete_destructor,
3155 LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL,
3157 finish_decl_cleanup (NULL_TREE, expr);
3162 /* Build a C++ vector delete expression.
3163 MAXINDEX is the number of elements to be deleted.
3164 ELT_SIZE is the nominal size of each element in the vector.
3165 BASE is the expression that should yield the store to be deleted.
3166 This function expands (or synthesizes) these calls itself.
3167 AUTO_DELETE_VEC says whether the container (vector) should be deallocated.
3169 This also calls delete for virtual baseclasses of elements of the vector.
3171 Update: MAXINDEX is no longer needed. The size can be extracted from the
3172 start of the vector for pointers, and from the type for arrays. We still
3173 use MAXINDEX for arrays because it happens to already have one of the
3174 values we'd have to extract. (We could use MAXINDEX with pointers to
3175 confirm the size, and trap if the numbers differ; not clear that it'd
3176 be worth bothering.) */
3178 tree
3179 build_vec_delete (tree base, tree maxindex,
3180 special_function_kind auto_delete_vec, int use_global_delete)
3182 tree type;
3183 tree rval;
3184 tree base_init = NULL_TREE;
3186 type = TREE_TYPE (base);
3188 if (TREE_CODE (type) == POINTER_TYPE)
3190 /* Step back one from start of vector, and read dimension. */
3191 tree cookie_addr;
3193 if (TREE_SIDE_EFFECTS (base))
3195 base_init = get_target_expr (base);
3196 base = TARGET_EXPR_SLOT (base_init);
3198 type = strip_array_types (TREE_TYPE (type));
3199 cookie_addr = fold_build1 (NEGATE_EXPR, sizetype, TYPE_SIZE_UNIT (sizetype));
3200 cookie_addr = build2 (POINTER_PLUS_EXPR,
3201 build_pointer_type (sizetype),
3202 base,
3203 cookie_addr);
3204 maxindex = build_indirect_ref (cookie_addr, NULL);
3206 else if (TREE_CODE (type) == ARRAY_TYPE)
3208 /* Get the total number of things in the array, maxindex is a
3209 bad name. */
3210 maxindex = array_type_nelts_total (type);
3211 type = strip_array_types (type);
3212 base = build_unary_op (ADDR_EXPR, base, 1);
3213 if (TREE_SIDE_EFFECTS (base))
3215 base_init = get_target_expr (base);
3216 base = TARGET_EXPR_SLOT (base_init);
3219 else
3221 if (base != error_mark_node)
3222 error ("type to vector delete is neither pointer or array type");
3223 return error_mark_node;
3226 rval = build_vec_delete_1 (base, maxindex, type, auto_delete_vec,
3227 use_global_delete);
3228 if (base_init)
3229 rval = build2 (COMPOUND_EXPR, TREE_TYPE (rval), base_init, rval);
3231 return rval;