]> gcc.gnu.org Git - gcc.git/blame - gcc/cp/init.c
re PR target/26826 (ICE in reg_or_subregno, at jump.c:2011)
[gcc.git] / gcc / cp / init.c
CommitLineData
8d08fdba 1/* Handle initialization things in C++.
d6a8bdff 2 Copyright (C) 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3638a282 3 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
8d08fdba
MS
4 Contributed by Michael Tiemann (tiemann@cygnus.com)
5
f5adbb8d 6This file is part of GCC.
8d08fdba 7
f5adbb8d 8GCC is free software; you can redistribute it and/or modify
8d08fdba
MS
9it under the terms of the GNU General Public License as published by
10the Free Software Foundation; either version 2, or (at your option)
11any later version.
12
f5adbb8d 13GCC is distributed in the hope that it will be useful,
8d08fdba
MS
14but WITHOUT ANY WARRANTY; without even the implied warranty of
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16GNU General Public License for more details.
17
18You should have received a copy of the GNU General Public License
f5adbb8d 19along with GCC; see the file COPYING. If not, write to
1788952f
KC
20the Free Software Foundation, 51 Franklin Street, Fifth Floor,
21Boston, MA 02110-1301, USA. */
8d08fdba 22
e92cc029 23/* High-level class interface. */
8d08fdba
MS
24
25#include "config.h"
8d052bc7 26#include "system.h"
4977bab6
ZW
27#include "coretypes.h"
28#include "tm.h"
8d08fdba
MS
29#include "tree.h"
30#include "rtl.h"
8f17b5c5 31#include "expr.h"
8d08fdba
MS
32#include "cp-tree.h"
33#include "flags.h"
e8abc66f 34#include "output.h"
eb66be0e 35#include "except.h"
54f92bfb 36#include "toplev.h"
46e995e0 37#include "target.h"
8d08fdba 38
2a3398e1
NS
39static bool begin_init_stmts (tree *, tree *);
40static tree finish_init_stmts (bool, tree, tree);
2282d28d 41static void construct_virtual_base (tree, tree);
362efdc1
NN
42static void expand_aggr_init_1 (tree, tree, tree, tree, int);
43static void expand_default_init (tree, tree, tree, tree, int);
44static tree build_vec_delete_1 (tree, tree, tree, special_function_kind, int);
2282d28d 45static void perform_member_init (tree, tree);
362efdc1
NN
46static tree build_builtin_delete_call (tree);
47static int member_init_ok_or_else (tree, tree, tree);
48static void expand_virtual_init (tree, tree);
2282d28d 49static tree sort_mem_initializers (tree, tree);
362efdc1
NN
50static tree initializing_context (tree);
51static void expand_cleanup_for_base (tree, tree);
52static tree get_temp_regvar (tree, tree);
53static tree dfs_initialize_vtbl_ptrs (tree, void *);
54static tree build_default_init (tree, tree);
362efdc1
NN
55static tree build_dtor_call (tree, special_function_kind, int);
56static tree build_field_list (tree, tree, int *);
57static tree build_vtbl_address (tree);
8d08fdba 58
3dbc07b6
MM
59/* We are about to generate some complex initialization code.
60 Conceptually, it is all a single expression. However, we may want
61 to include conditionals, loops, and other such statement-level
62 constructs. Therefore, we build the initialization code inside a
63 statement-expression. This function starts such an expression.
64 STMT_EXPR_P and COMPOUND_STMT_P are filled in by this function;
65 pass them back to finish_init_stmts when the expression is
66 complete. */
67
2a3398e1 68static bool
362efdc1 69begin_init_stmts (tree *stmt_expr_p, tree *compound_stmt_p)
3dbc07b6 70{
2a3398e1 71 bool is_global = !building_stmt_tree ();
c8094d83 72
2a3398e1 73 *stmt_expr_p = begin_stmt_expr ();
325c3691 74 *compound_stmt_p = begin_compound_stmt (BCS_NO_SCOPE);
2a3398e1
NS
75
76 return is_global;
3dbc07b6
MM
77}
78
79/* Finish out the statement-expression begun by the previous call to
80 begin_init_stmts. Returns the statement-expression itself. */
81
2a3398e1
NS
82static tree
83finish_init_stmts (bool is_global, tree stmt_expr, tree compound_stmt)
c8094d83 84{
7a3397c7 85 finish_compound_stmt (compound_stmt);
c8094d83 86
303b7406 87 stmt_expr = finish_stmt_expr (stmt_expr, true);
3dbc07b6 88
50bc768d 89 gcc_assert (!building_stmt_tree () == is_global);
c8094d83 90
3dbc07b6
MM
91 return stmt_expr;
92}
93
94/* Constructors */
95
338d90b8
NS
96/* Called from initialize_vtbl_ptrs via dfs_walk. BINFO is the base
97 which we want to initialize the vtable pointer for, DATA is
98 TREE_LIST whose TREE_VALUE is the this ptr expression. */
7177d104 99
d569399b 100static tree
362efdc1 101dfs_initialize_vtbl_ptrs (tree binfo, void *data)
d569399b 102{
5d5a519f
NS
103 if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
104 return dfs_skip_bases;
c8094d83 105
5d5a519f 106 if (!BINFO_PRIMARY_P (binfo) || BINFO_VIRTUAL_P (binfo))
d569399b
MM
107 {
108 tree base_ptr = TREE_VALUE ((tree) data);
7177d104 109
338d90b8 110 base_ptr = build_base_path (PLUS_EXPR, base_ptr, binfo, /*nonnull=*/1);
d569399b
MM
111
112 expand_virtual_init (binfo, base_ptr);
113 }
7177d104 114
d569399b
MM
115 return NULL_TREE;
116}
117
cf2e003b
MM
118/* Initialize all the vtable pointers in the object pointed to by
119 ADDR. */
e92cc029 120
8d08fdba 121void
362efdc1 122initialize_vtbl_ptrs (tree addr)
8d08fdba 123{
cf2e003b
MM
124 tree list;
125 tree type;
126
127 type = TREE_TYPE (TREE_TYPE (addr));
128 list = build_tree_list (type, addr);
d569399b 129
bbd15aac 130 /* Walk through the hierarchy, initializing the vptr in each base
1f5a253a 131 class. We do these in pre-order because we can't find the virtual
3461fba7
NS
132 bases for a class until we've initialized the vtbl for that
133 class. */
5d5a519f 134 dfs_walk_once (TYPE_BINFO (type), dfs_initialize_vtbl_ptrs, NULL, list);
8d08fdba 135}
d569399b 136
17bbb839
MM
137/* Return an expression for the zero-initialization of an object with
138 type T. This expression will either be a constant (in the case
139 that T is a scalar), or a CONSTRUCTOR (in the case that T is an
140 aggregate). In either case, the value can be used as DECL_INITIAL
141 for a decl of the indicated TYPE; it is a valid static initializer.
1cb8292f
MM
142 If NELTS is non-NULL, and TYPE is an ARRAY_TYPE, NELTS is the
143 number of elements in the array. If STATIC_STORAGE_P is TRUE,
144 initializers are only generated for entities for which
145 zero-initialization does not simply mean filling the storage with
146 zero bytes. */
94e6e4c4
AO
147
148tree
1cb8292f 149build_zero_init (tree type, tree nelts, bool static_storage_p)
94e6e4c4 150{
17bbb839
MM
151 tree init = NULL_TREE;
152
153 /* [dcl.init]
154
155 To zero-initialization storage for an object of type T means:
156
157 -- if T is a scalar type, the storage is set to the value of zero
0cbd7506 158 converted to T.
17bbb839
MM
159
160 -- if T is a non-union class type, the storage for each nonstatic
0cbd7506 161 data member and each base-class subobject is zero-initialized.
17bbb839
MM
162
163 -- if T is a union type, the storage for its first data member is
0cbd7506 164 zero-initialized.
17bbb839
MM
165
166 -- if T is an array type, the storage for each element is
0cbd7506 167 zero-initialized.
17bbb839
MM
168
169 -- if T is a reference type, no initialization is performed. */
94e6e4c4 170
50bc768d 171 gcc_assert (nelts == NULL_TREE || TREE_CODE (nelts) == INTEGER_CST);
7a1d37e9 172
17bbb839
MM
173 if (type == error_mark_node)
174 ;
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. */
180 ;
181 else if (SCALAR_TYPE_P (type))
182 init = convert (type, integer_zero_node);
183 else if (CLASS_TYPE_P (type))
184 {
185 tree field;
4038c495 186 VEC(constructor_elt,gc) *v = NULL;
17bbb839 187
17bbb839 188 /* Iterate over the fields, building initializations. */
17bbb839
MM
189 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
190 {
191 if (TREE_CODE (field) != FIELD_DECL)
192 continue;
193
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)))
4038c495
GB
199 {
200 tree value = build_zero_init (TREE_TYPE (field),
201 /*nelts=*/NULL_TREE,
202 static_storage_p);
203 CONSTRUCTOR_APPEND_ELT(v, field, value);
204 }
17bbb839
MM
205
206 /* For unions, only the first field is initialized. */
207 if (TREE_CODE (type) == UNION_TYPE)
208 break;
209 }
4038c495
GB
210
211 /* Build a constructor to contain the initializations. */
212 init = build_constructor (type, v);
17bbb839
MM
213 }
214 else if (TREE_CODE (type) == ARRAY_TYPE)
94e6e4c4 215 {
17bbb839 216 tree max_index;
4038c495 217 VEC(constructor_elt,gc) *v = NULL;
17bbb839 218
17bbb839 219 /* Iterate over the array elements, building initializations. */
6b6c8106 220 if (nelts)
7866705a
SB
221 max_index = fold_build2 (MINUS_EXPR, TREE_TYPE (nelts),
222 nelts, integer_one_node);
6b6c8106
SB
223 else
224 max_index = array_type_nelts (type);
50bc768d 225 gcc_assert (TREE_CODE (max_index) == INTEGER_CST);
7a1d37e9 226
a8e6c82a
MM
227 /* A zero-sized array, which is accepted as an extension, will
228 have an upper bound of -1. */
229 if (!tree_int_cst_equal (max_index, integer_minus_one_node))
94763647 230 {
4038c495
GB
231 constructor_elt *ce;
232
233 v = VEC_alloc (constructor_elt, gc, 1);
234 ce = VEC_quick_push (constructor_elt, v, NULL);
c8094d83 235
b01f0d13
AP
236 /* If this is a one element array, we just use a regular init. */
237 if (tree_int_cst_equal (size_zero_node, max_index))
4038c495 238 ce->index = size_zero_node;
b01f0d13 239 else
4038c495
GB
240 ce->index = build2 (RANGE_EXPR, sizetype, size_zero_node,
241 max_index);
c8094d83 242
4038c495
GB
243 ce->value = build_zero_init (TREE_TYPE (type),
244 /*nelts=*/NULL_TREE,
245 static_storage_p);
94763647 246 }
c8094d83 247
4038c495
GB
248 /* Build a constructor to contain the initializations. */
249 init = build_constructor (type, v);
94e6e4c4 250 }
94e6e4c4 251 else
8dc2b103 252 gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
94e6e4c4 253
17bbb839
MM
254 /* In all cases, the initializer is a constant. */
255 if (init)
6de9cd9a
DN
256 {
257 TREE_CONSTANT (init) = 1;
258 TREE_INVARIANT (init) = 1;
259 }
94e6e4c4
AO
260
261 return init;
262}
263
1cb8292f
MM
264/* Build an expression for the default-initialization of an object of
265 the indicated TYPE. If NELTS is non-NULL, and TYPE is an
266 ARRAY_TYPE, NELTS is the number of elements in the array. If
267 initialization of TYPE requires calling constructors, this function
268 returns NULL_TREE; the caller is responsible for arranging for the
269 constructors to be called. */
f30efcb7 270
17bbb839 271static tree
362efdc1 272build_default_init (tree type, tree nelts)
17bbb839
MM
273{
274 /* [dcl.init]:
f30efcb7 275
17bbb839 276 To default-initialize an object of type T means:
f30efcb7 277
17bbb839
MM
278 --if T is a non-POD class type (clause _class_), the default construc-
279 tor for T is called (and the initialization is ill-formed if T has
280 no accessible default constructor);
f30efcb7 281
17bbb839 282 --if T is an array type, each element is default-initialized;
f30efcb7 283
17bbb839 284 --otherwise, the storage for the object is zero-initialized.
f30efcb7 285
17bbb839
MM
286 A program that calls for default-initialization of an entity of refer-
287 ence type is ill-formed. */
288
289 /* If TYPE_NEEDS_CONSTRUCTING is true, the caller is responsible for
290 performing the initialization. This is confusing in that some
291 non-PODs do not have TYPE_NEEDS_CONSTRUCTING set. (For example,
292 a class with a pointer-to-data member as a non-static data member
293 does not have TYPE_NEEDS_CONSTRUCTING set.) Therefore, we end up
294 passing non-PODs to build_zero_init below, which is contrary to
c8094d83 295 the semantics quoted above from [dcl.init].
17bbb839
MM
296
297 It happens, however, that the behavior of the constructor the
298 standard says we should have generated would be precisely the
299 same as that obtained by calling build_zero_init below, so things
300 work out OK. */
7a1d37e9
MA
301 if (TYPE_NEEDS_CONSTRUCTING (type)
302 || (nelts && TREE_CODE (nelts) != INTEGER_CST))
f30efcb7 303 return NULL_TREE;
c8094d83 304
17bbb839 305 /* At this point, TYPE is either a POD class type, an array of POD
cd0be382 306 classes, or something even more innocuous. */
1cb8292f 307 return build_zero_init (type, nelts, /*static_storage_p=*/false);
f30efcb7
JM
308}
309
2282d28d
MM
310/* Initialize MEMBER, a FIELD_DECL, with INIT, a TREE_LIST of
311 arguments. If TREE_LIST is void_type_node, an empty initializer
312 list was given; if NULL_TREE no initializer was given. */
e92cc029 313
8d08fdba 314static void
2282d28d 315perform_member_init (tree member, tree init)
8d08fdba
MS
316{
317 tree decl;
318 tree type = TREE_TYPE (member);
2282d28d 319 bool explicit;
eb66be0e 320
2282d28d
MM
321 explicit = (init != NULL_TREE);
322
323 /* Effective C++ rule 12 requires that all data members be
324 initialized. */
325 if (warn_ecpp && !explicit && TREE_CODE (type) != ARRAY_TYPE)
b323323f 326 warning (OPT_Weffc__, "%J%qD should be initialized in the member initialization "
2cfe82fe 327 "list", current_function_decl, member);
2282d28d
MM
328
329 if (init == void_type_node)
330 init = NULL_TREE;
331
332 /* Get an lvalue for the data member. */
50ad9642
MM
333 decl = build_class_member_access_expr (current_class_ref, member,
334 /*access_path=*/NULL_TREE,
335 /*preserve_reference=*/true);
2fbfe9b8
MS
336 if (decl == error_mark_node)
337 return;
338
6bdb8141
JM
339 /* Deal with this here, as we will get confused if we try to call the
340 assignment op for an anonymous union. This can happen in a
341 synthesized copy constructor. */
342 if (ANON_AGGR_TYPE_P (type))
343 {
ff9f1a5d
MM
344 if (init)
345 {
f293ce4b 346 init = build2 (INIT_EXPR, type, decl, TREE_VALUE (init));
ff9f1a5d
MM
347 finish_expr_stmt (init);
348 }
6bdb8141 349 }
92a62aad 350 else if (TYPE_NEEDS_CONSTRUCTING (type))
8d08fdba 351 {
8d08fdba
MS
352 if (explicit
353 && TREE_CODE (type) == ARRAY_TYPE
354 && init != NULL_TREE
355 && TREE_CHAIN (init) == NULL_TREE
356 && TREE_CODE (TREE_TYPE (TREE_VALUE (init))) == ARRAY_TYPE)
357 {
358 /* Initialization of one array from another. */
a48cccea 359 finish_expr_stmt (build_vec_init (decl, NULL_TREE, TREE_VALUE (init),
b84f4651 360 /*explicit_default_init_p=*/false,
a48cccea 361 /* from_array=*/1));
8d08fdba
MS
362 }
363 else
f1dedc31 364 finish_expr_stmt (build_aggr_init (decl, init, 0));
8d08fdba
MS
365 }
366 else
367 {
368 if (init == NULL_TREE)
369 {
370 if (explicit)
371 {
1cb8292f 372 init = build_default_init (type, /*nelts=*/NULL_TREE);
f30efcb7 373 if (TREE_CODE (type) == REFERENCE_TYPE)
d4ee4d25 374 warning (0, "%Jdefault-initialization of %q#D, "
2cfe82fe
ZW
375 "which has reference type",
376 current_function_decl, member);
8d08fdba
MS
377 }
378 /* member traversal: note it leaves init NULL */
f30efcb7 379 else if (TREE_CODE (type) == REFERENCE_TYPE)
2cfe82fe
ZW
380 pedwarn ("%Juninitialized reference member %qD",
381 current_function_decl, member);
58ec3cc5 382 else if (CP_TYPE_CONST_P (type))
2cfe82fe
ZW
383 pedwarn ("%Juninitialized member %qD with %<const%> type %qT",
384 current_function_decl, member, type);
8d08fdba
MS
385 }
386 else if (TREE_CODE (init) == TREE_LIST)
c7b62f14
NS
387 /* There was an explicit member initialization. Do some work
388 in that case. */
389 init = build_x_compound_expr_from_list (init, "member initializer");
8d08fdba 390
4f0aa416 391 if (init)
f1dedc31 392 finish_expr_stmt (build_modify_expr (decl, INIT_EXPR, init));
8d08fdba 393 }
eb66be0e 394
834c6dff 395 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
b7484fbe 396 {
de22184b
MS
397 tree expr;
398
50ad9642
MM
399 expr = build_class_member_access_expr (current_class_ref, member,
400 /*access_path=*/NULL_TREE,
401 /*preserve_reference=*/false);
3ec6bad3 402 expr = build_delete (type, expr, sfk_complete_destructor,
b7484fbe
MS
403 LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR, 0);
404
405 if (expr != error_mark_node)
659e5a7a 406 finish_eh_cleanup (expr);
b7484fbe 407 }
8d08fdba
MS
408}
409
ff9f1a5d
MM
410/* Returns a TREE_LIST containing (as the TREE_PURPOSE of each node) all
411 the FIELD_DECLs on the TYPE_FIELDS list for T, in reverse order. */
412
c8094d83 413static tree
362efdc1 414build_field_list (tree t, tree list, int *uses_unions_p)
ff9f1a5d
MM
415{
416 tree fields;
417
01c3fb15
JM
418 *uses_unions_p = 0;
419
ff9f1a5d
MM
420 /* Note whether or not T is a union. */
421 if (TREE_CODE (t) == UNION_TYPE)
422 *uses_unions_p = 1;
423
424 for (fields = TYPE_FIELDS (t); fields; fields = TREE_CHAIN (fields))
425 {
426 /* Skip CONST_DECLs for enumeration constants and so forth. */
17bbb839 427 if (TREE_CODE (fields) != FIELD_DECL || DECL_ARTIFICIAL (fields))
ff9f1a5d 428 continue;
c8094d83 429
ff9f1a5d
MM
430 /* Keep track of whether or not any fields are unions. */
431 if (TREE_CODE (TREE_TYPE (fields)) == UNION_TYPE)
432 *uses_unions_p = 1;
433
434 /* For an anonymous struct or union, we must recursively
435 consider the fields of the anonymous type. They can be
436 directly initialized from the constructor. */
437 if (ANON_AGGR_TYPE_P (TREE_TYPE (fields)))
438 {
439 /* Add this field itself. Synthesized copy constructors
440 initialize the entire aggregate. */
441 list = tree_cons (fields, NULL_TREE, list);
442 /* And now add the fields in the anonymous aggregate. */
c8094d83 443 list = build_field_list (TREE_TYPE (fields), list,
ff9f1a5d
MM
444 uses_unions_p);
445 }
446 /* Add this field. */
447 else if (DECL_NAME (fields))
448 list = tree_cons (fields, NULL_TREE, list);
449 }
450
451 return list;
452}
453
2282d28d
MM
454/* The MEM_INITS are a TREE_LIST. The TREE_PURPOSE of each list gives
455 a FIELD_DECL or BINFO in T that needs initialization. The
456 TREE_VALUE gives the initializer, or list of initializer arguments.
457
458 Return a TREE_LIST containing all of the initializations required
459 for T, in the order in which they should be performed. The output
460 list has the same format as the input. */
e92cc029 461
8d08fdba 462static tree
2282d28d 463sort_mem_initializers (tree t, tree mem_inits)
8d08fdba 464{
ff9f1a5d 465 tree init;
fa743e8c 466 tree base, binfo, base_binfo;
2282d28d
MM
467 tree sorted_inits;
468 tree next_subobject;
d4e6fecb 469 VEC(tree,gc) *vbases;
2282d28d 470 int i;
ff9f1a5d
MM
471 int uses_unions_p;
472
2282d28d
MM
473 /* Build up a list of initializations. The TREE_PURPOSE of entry
474 will be the subobject (a FIELD_DECL or BINFO) to initialize. The
475 TREE_VALUE will be the constructor arguments, or NULL if no
476 explicit initialization was provided. */
477 sorted_inits = NULL_TREE;
c8094d83 478
2282d28d 479 /* Process the virtual bases. */
9ba5ff0f
NS
480 for (vbases = CLASSTYPE_VBASECLASSES (t), i = 0;
481 VEC_iterate (tree, vbases, i, base); i++)
58c42dc2 482 sorted_inits = tree_cons (base, NULL_TREE, sorted_inits);
c8094d83 483
2282d28d 484 /* Process the direct bases. */
fa743e8c
NS
485 for (binfo = TYPE_BINFO (t), i = 0;
486 BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
487 if (!BINFO_VIRTUAL_P (base_binfo))
488 sorted_inits = tree_cons (base_binfo, NULL_TREE, sorted_inits);
489
2282d28d
MM
490 /* Process the non-static data members. */
491 sorted_inits = build_field_list (t, sorted_inits, &uses_unions_p);
492 /* Reverse the entire list of initializations, so that they are in
493 the order that they will actually be performed. */
494 sorted_inits = nreverse (sorted_inits);
495
496 /* If the user presented the initializers in an order different from
497 that in which they will actually occur, we issue a warning. Keep
498 track of the next subobject which can be explicitly initialized
499 without issuing a warning. */
500 next_subobject = sorted_inits;
501
502 /* Go through the explicit initializers, filling in TREE_PURPOSE in
503 the SORTED_INITS. */
504 for (init = mem_inits; init; init = TREE_CHAIN (init))
505 {
506 tree subobject;
507 tree subobject_init;
508
509 subobject = TREE_PURPOSE (init);
510
511 /* If the explicit initializers are in sorted order, then
c8094d83 512 SUBOBJECT will be NEXT_SUBOBJECT, or something following
2282d28d 513 it. */
c8094d83
MS
514 for (subobject_init = next_subobject;
515 subobject_init;
2282d28d
MM
516 subobject_init = TREE_CHAIN (subobject_init))
517 if (TREE_PURPOSE (subobject_init) == subobject)
ff9f1a5d
MM
518 break;
519
2282d28d 520 /* Issue a warning if the explicit initializer order does not
2cfe82fe 521 match that which will actually occur.
0cbd7506 522 ??? Are all these on the correct lines? */
2282d28d 523 if (warn_reorder && !subobject_init)
ff9f1a5d 524 {
2282d28d 525 if (TREE_CODE (TREE_PURPOSE (next_subobject)) == FIELD_DECL)
b323323f 526 warning (OPT_Wreorder, "%q+D will be initialized after",
dee15844 527 TREE_PURPOSE (next_subobject));
2282d28d 528 else
b323323f 529 warning (OPT_Wreorder, "base %qT will be initialized after",
2282d28d
MM
530 TREE_PURPOSE (next_subobject));
531 if (TREE_CODE (subobject) == FIELD_DECL)
b323323f 532 warning (OPT_Wreorder, " %q+#D", subobject);
2282d28d 533 else
b323323f
LM
534 warning (OPT_Wreorder, " base %qT", subobject);
535 warning (OPT_Wreorder, "%J when initialized here", current_function_decl);
ff9f1a5d 536 }
b7484fbe 537
2282d28d
MM
538 /* Look again, from the beginning of the list. */
539 if (!subobject_init)
ff9f1a5d 540 {
2282d28d
MM
541 subobject_init = sorted_inits;
542 while (TREE_PURPOSE (subobject_init) != subobject)
543 subobject_init = TREE_CHAIN (subobject_init);
ff9f1a5d 544 }
c8094d83 545
2282d28d
MM
546 /* It is invalid to initialize the same subobject more than
547 once. */
548 if (TREE_VALUE (subobject_init))
ff9f1a5d 549 {
2282d28d 550 if (TREE_CODE (subobject) == FIELD_DECL)
2cfe82fe
ZW
551 error ("%Jmultiple initializations given for %qD",
552 current_function_decl, subobject);
2282d28d 553 else
c8094d83 554 error ("%Jmultiple initializations given for base %qT",
2cfe82fe 555 current_function_decl, subobject);
ff9f1a5d
MM
556 }
557
2282d28d
MM
558 /* Record the initialization. */
559 TREE_VALUE (subobject_init) = TREE_VALUE (init);
560 next_subobject = subobject_init;
ff9f1a5d
MM
561 }
562
563 /* [class.base.init]
b7484fbe 564
ff9f1a5d
MM
565 If a ctor-initializer specifies more than one mem-initializer for
566 multiple members of the same union (including members of
567 anonymous unions), the ctor-initializer is ill-formed. */
568 if (uses_unions_p)
569 {
2282d28d
MM
570 tree last_field = NULL_TREE;
571 for (init = sorted_inits; init; init = TREE_CHAIN (init))
8d08fdba 572 {
ff9f1a5d
MM
573 tree field;
574 tree field_type;
575 int done;
576
2282d28d 577 /* Skip uninitialized members and base classes. */
c8094d83 578 if (!TREE_VALUE (init)
2282d28d 579 || TREE_CODE (TREE_PURPOSE (init)) != FIELD_DECL)
ff9f1a5d
MM
580 continue;
581 /* See if this field is a member of a union, or a member of a
582 structure contained in a union, etc. */
583 field = TREE_PURPOSE (init);
584 for (field_type = DECL_CONTEXT (field);
585 !same_type_p (field_type, t);
586 field_type = TYPE_CONTEXT (field_type))
587 if (TREE_CODE (field_type) == UNION_TYPE)
588 break;
589 /* If this field is not a member of a union, skip it. */
590 if (TREE_CODE (field_type) != UNION_TYPE)
8d08fdba 591 continue;
8d08fdba 592
ff9f1a5d
MM
593 /* It's only an error if we have two initializers for the same
594 union type. */
595 if (!last_field)
6bdb8141 596 {
ff9f1a5d
MM
597 last_field = field;
598 continue;
6bdb8141 599 }
8d08fdba 600
ff9f1a5d
MM
601 /* See if LAST_FIELD and the field initialized by INIT are
602 members of the same union. If so, there's a problem,
603 unless they're actually members of the same structure
604 which is itself a member of a union. For example, given:
8d08fdba 605
ff9f1a5d
MM
606 union { struct { int i; int j; }; };
607
608 initializing both `i' and `j' makes sense. */
609 field_type = DECL_CONTEXT (field);
610 done = 0;
611 do
8d08fdba 612 {
ff9f1a5d
MM
613 tree last_field_type;
614
615 last_field_type = DECL_CONTEXT (last_field);
616 while (1)
00595019 617 {
ff9f1a5d 618 if (same_type_p (last_field_type, field_type))
00595019 619 {
ff9f1a5d 620 if (TREE_CODE (field_type) == UNION_TYPE)
2cfe82fe
ZW
621 error ("%Jinitializations for multiple members of %qT",
622 current_function_decl, last_field_type);
ff9f1a5d
MM
623 done = 1;
624 break;
00595019 625 }
8d08fdba 626
ff9f1a5d
MM
627 if (same_type_p (last_field_type, t))
628 break;
8d08fdba 629
ff9f1a5d
MM
630 last_field_type = TYPE_CONTEXT (last_field_type);
631 }
c8094d83 632
ff9f1a5d
MM
633 /* If we've reached the outermost class, then we're
634 done. */
635 if (same_type_p (field_type, t))
636 break;
8d08fdba 637
ff9f1a5d 638 field_type = TYPE_CONTEXT (field_type);
8d08fdba 639 }
ff9f1a5d
MM
640 while (!done);
641
642 last_field = field;
b7484fbe
MS
643 }
644 }
8d08fdba 645
2282d28d 646 return sorted_inits;
b7484fbe
MS
647}
648
2282d28d
MM
649/* Initialize all bases and members of CURRENT_CLASS_TYPE. MEM_INITS
650 is a TREE_LIST giving the explicit mem-initializer-list for the
651 constructor. The TREE_PURPOSE of each entry is a subobject (a
652 FIELD_DECL or a BINFO) of the CURRENT_CLASS_TYPE. The TREE_VALUE
653 is a TREE_LIST giving the arguments to the constructor or
654 void_type_node for an empty list of arguments. */
a9aedbc2 655
3dbc07b6 656void
2282d28d 657emit_mem_initializers (tree mem_inits)
8d08fdba 658{
72e4661a
PC
659 /* We will already have issued an error message about the fact that
660 the type is incomplete. */
661 if (!COMPLETE_TYPE_P (current_class_type))
662 return;
c8094d83 663
2282d28d
MM
664 /* Sort the mem-initializers into the order in which the
665 initializations should be performed. */
666 mem_inits = sort_mem_initializers (current_class_type, mem_inits);
8d08fdba 667
1f5a253a 668 in_base_initializer = 1;
c8094d83 669
2282d28d 670 /* Initialize base classes. */
c8094d83 671 while (mem_inits
2282d28d 672 && TREE_CODE (TREE_PURPOSE (mem_inits)) != FIELD_DECL)
8d08fdba 673 {
2282d28d
MM
674 tree subobject = TREE_PURPOSE (mem_inits);
675 tree arguments = TREE_VALUE (mem_inits);
676
677 /* If these initializations are taking place in a copy
678 constructor, the base class should probably be explicitly
679 initialized. */
c8094d83 680 if (extra_warnings && !arguments
2282d28d
MM
681 && DECL_COPY_CONSTRUCTOR_P (current_function_decl)
682 && TYPE_NEEDS_CONSTRUCTING (BINFO_TYPE (subobject)))
b323323f 683 warning (OPT_Wextra, "%Jbase class %q#T should be explicitly initialized in the "
2282d28d 684 "copy constructor",
2cfe82fe 685 current_function_decl, BINFO_TYPE (subobject));
2282d28d
MM
686
687 /* If an explicit -- but empty -- initializer list was present,
688 treat it just like default initialization at this point. */
689 if (arguments == void_type_node)
690 arguments = NULL_TREE;
691
692 /* Initialize the base. */
809e3e7f 693 if (BINFO_VIRTUAL_P (subobject))
2282d28d
MM
694 construct_virtual_base (subobject, arguments);
695 else
b7484fbe 696 {
2282d28d 697 tree base_addr;
c8094d83 698
2282d28d
MM
699 base_addr = build_base_path (PLUS_EXPR, current_class_ptr,
700 subobject, 1);
701 expand_aggr_init_1 (subobject, NULL_TREE,
c8094d83 702 build_indirect_ref (base_addr, NULL),
2282d28d 703 arguments,
b370501f 704 LOOKUP_NORMAL);
2282d28d 705 expand_cleanup_for_base (subobject, NULL_TREE);
8d08fdba 706 }
8d08fdba 707
2282d28d 708 mem_inits = TREE_CHAIN (mem_inits);
8d08fdba 709 }
1f5a253a 710 in_base_initializer = 0;
8d08fdba 711
2282d28d 712 /* Initialize the vptrs. */
cf2e003b 713 initialize_vtbl_ptrs (current_class_ptr);
c8094d83 714
2282d28d
MM
715 /* Initialize the data members. */
716 while (mem_inits)
8d08fdba 717 {
2282d28d
MM
718 perform_member_init (TREE_PURPOSE (mem_inits),
719 TREE_VALUE (mem_inits));
720 mem_inits = TREE_CHAIN (mem_inits);
b7484fbe 721 }
8d08fdba
MS
722}
723
3ec6bad3
MM
724/* Returns the address of the vtable (i.e., the value that should be
725 assigned to the vptr) for BINFO. */
726
727static tree
362efdc1 728build_vtbl_address (tree binfo)
3ec6bad3 729{
9965d119 730 tree binfo_for = binfo;
3ec6bad3
MM
731 tree vtbl;
732
fc6633e0 733 if (BINFO_VPTR_INDEX (binfo) && BINFO_VIRTUAL_P (binfo))
9965d119
NS
734 /* If this is a virtual primary base, then the vtable we want to store
735 is that for the base this is being used as the primary base of. We
736 can't simply skip the initialization, because we may be expanding the
737 inits of a subobject constructor where the virtual base layout
738 can be different. */
fc6633e0
NS
739 while (BINFO_PRIMARY_P (binfo_for))
740 binfo_for = BINFO_INHERITANCE_CHAIN (binfo_for);
9965d119 741
3ec6bad3
MM
742 /* Figure out what vtable BINFO's vtable is based on, and mark it as
743 used. */
9965d119 744 vtbl = get_vtbl_decl_for_binfo (binfo_for);
3ec6bad3
MM
745 assemble_external (vtbl);
746 TREE_USED (vtbl) = 1;
747
748 /* Now compute the address to use when initializing the vptr. */
6de9cd9a 749 vtbl = unshare_expr (BINFO_VTABLE (binfo_for));
3ec6bad3 750 if (TREE_CODE (vtbl) == VAR_DECL)
6de9cd9a 751 vtbl = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (vtbl)), vtbl);
3ec6bad3
MM
752
753 return vtbl;
754}
755
8d08fdba
MS
756/* This code sets up the virtual function tables appropriate for
757 the pointer DECL. It is a one-ply initialization.
758
759 BINFO is the exact type that DECL is supposed to be. In
760 multiple inheritance, this might mean "C's A" if C : A, B. */
e92cc029 761
8926095f 762static void
362efdc1 763expand_virtual_init (tree binfo, tree decl)
8d08fdba 764{
8d08fdba 765 tree vtbl, vtbl_ptr;
3ec6bad3 766 tree vtt_index;
8d08fdba 767
3ec6bad3
MM
768 /* Compute the initializer for vptr. */
769 vtbl = build_vtbl_address (binfo);
770
3461fba7
NS
771 /* We may get this vptr from a VTT, if this is a subobject
772 constructor or subobject destructor. */
3ec6bad3
MM
773 vtt_index = BINFO_VPTR_INDEX (binfo);
774 if (vtt_index)
775 {
776 tree vtbl2;
777 tree vtt_parm;
778
779 /* Compute the value to use, when there's a VTT. */
e0fff4b3 780 vtt_parm = current_vtt_parm;
c8094d83
MS
781 vtbl2 = build2 (PLUS_EXPR,
782 TREE_TYPE (vtt_parm),
f293ce4b
RS
783 vtt_parm,
784 vtt_index);
6de9cd9a
DN
785 vtbl2 = build_indirect_ref (vtbl2, NULL);
786 vtbl2 = convert (TREE_TYPE (vtbl), vtbl2);
3ec6bad3
MM
787
788 /* The actual initializer is the VTT value only in the subobject
789 constructor. In maybe_clone_body we'll substitute NULL for
790 the vtt_parm in the case of the non-subobject constructor. */
c8094d83
MS
791 vtbl = build3 (COND_EXPR,
792 TREE_TYPE (vtbl),
f293ce4b
RS
793 build2 (EQ_EXPR, boolean_type_node,
794 current_in_charge_parm, integer_zero_node),
c8094d83 795 vtbl2,
f293ce4b 796 vtbl);
3ec6bad3 797 }
70ae3201
MM
798
799 /* Compute the location of the vtpr. */
338d90b8
NS
800 vtbl_ptr = build_vfield_ref (build_indirect_ref (decl, NULL),
801 TREE_TYPE (binfo));
50bc768d 802 gcc_assert (vtbl_ptr != error_mark_node);
8d08fdba 803
70ae3201 804 /* Assign the vtable to the vptr. */
6060a796 805 vtbl = convert_force (TREE_TYPE (vtbl_ptr), vtbl, 0);
f1dedc31 806 finish_expr_stmt (build_modify_expr (vtbl_ptr, NOP_EXPR, vtbl));
8d08fdba
MS
807}
808
f33e32a8
MM
809/* If an exception is thrown in a constructor, those base classes already
810 constructed must be destroyed. This function creates the cleanup
0b8a1e58 811 for BINFO, which has just been constructed. If FLAG is non-NULL,
838dfd8a 812 it is a DECL which is nonzero when this base needs to be
0b8a1e58 813 destroyed. */
f33e32a8
MM
814
815static void
362efdc1 816expand_cleanup_for_base (tree binfo, tree flag)
f33e32a8
MM
817{
818 tree expr;
819
834c6dff 820 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (BINFO_TYPE (binfo)))
f33e32a8
MM
821 return;
822
0b8a1e58 823 /* Call the destructor. */
c8094d83 824 expr = build_special_member_call (current_class_ref,
4ba126e4
MM
825 base_dtor_identifier,
826 NULL_TREE,
827 binfo,
828 LOOKUP_NORMAL | LOOKUP_NONVIRTUAL);
0b8a1e58 829 if (flag)
7866705a
SB
830 expr = fold_build3 (COND_EXPR, void_type_node,
831 c_common_truthvalue_conversion (flag),
832 expr, integer_zero_node);
0b8a1e58 833
659e5a7a 834 finish_eh_cleanup (expr);
f33e32a8
MM
835}
836
2282d28d
MM
837/* Construct the virtual base-class VBASE passing the ARGUMENTS to its
838 constructor. */
e92cc029 839
8d08fdba 840static void
2282d28d 841construct_virtual_base (tree vbase, tree arguments)
8d08fdba 842{
2282d28d 843 tree inner_if_stmt;
2282d28d 844 tree exp;
c8094d83 845 tree flag;
2282d28d
MM
846
847 /* If there are virtual base classes with destructors, we need to
848 emit cleanups to destroy them if an exception is thrown during
849 the construction process. These exception regions (i.e., the
850 period during which the cleanups must occur) begin from the time
851 the construction is complete to the end of the function. If we
852 create a conditional block in which to initialize the
853 base-classes, then the cleanup region for the virtual base begins
854 inside a block, and ends outside of that block. This situation
855 confuses the sjlj exception-handling code. Therefore, we do not
856 create a single conditional block, but one for each
857 initialization. (That way the cleanup regions always begin
858 in the outer block.) We trust the back-end to figure out
859 that the FLAG will not change across initializations, and
860 avoid doing multiple tests. */
861 flag = TREE_CHAIN (DECL_ARGUMENTS (current_function_decl));
862 inner_if_stmt = begin_if_stmt ();
863 finish_if_stmt_cond (flag, inner_if_stmt);
2282d28d
MM
864
865 /* Compute the location of the virtual base. If we're
866 constructing virtual bases, then we must be the most derived
867 class. Therefore, we don't have to look up the virtual base;
868 we already know where it is. */
22ed7e5f
MM
869 exp = convert_to_base_statically (current_class_ref, vbase);
870
c8094d83 871 expand_aggr_init_1 (vbase, current_class_ref, exp, arguments,
22ed7e5f 872 LOOKUP_COMPLAIN);
2282d28d 873 finish_then_clause (inner_if_stmt);
325c3691 874 finish_if_stmt (inner_if_stmt);
2282d28d
MM
875
876 expand_cleanup_for_base (vbase, flag);
8d08fdba
MS
877}
878
2ee887f2 879/* Find the context in which this FIELD can be initialized. */
e92cc029 880
2ee887f2 881static tree
362efdc1 882initializing_context (tree field)
2ee887f2
MS
883{
884 tree t = DECL_CONTEXT (field);
885
886 /* Anonymous union members can be initialized in the first enclosing
887 non-anonymous union context. */
6bdb8141 888 while (t && ANON_AGGR_TYPE_P (t))
2ee887f2
MS
889 t = TYPE_CONTEXT (t);
890 return t;
891}
892
8d08fdba
MS
893/* Function to give error message if member initialization specification
894 is erroneous. FIELD is the member we decided to initialize.
895 TYPE is the type for which the initialization is being performed.
72b7eeff 896 FIELD must be a member of TYPE.
c8094d83 897
8d08fdba
MS
898 MEMBER_NAME is the name of the member. */
899
900static int
362efdc1 901member_init_ok_or_else (tree field, tree type, tree member_name)
8d08fdba
MS
902{
903 if (field == error_mark_node)
904 return 0;
a723baf1 905 if (!field)
8d08fdba 906 {
15a7ee29 907 error ("class %qT does not have any field named %qD", type,
a723baf1 908 member_name);
8d08fdba
MS
909 return 0;
910 }
a723baf1 911 if (TREE_CODE (field) == VAR_DECL)
b7484fbe 912 {
15a7ee29 913 error ("%q#D is a static data member; it can only be "
a723baf1
MM
914 "initialized at its definition",
915 field);
916 return 0;
917 }
918 if (TREE_CODE (field) != FIELD_DECL)
919 {
15a7ee29 920 error ("%q#D is not a non-static data member of %qT",
a723baf1
MM
921 field, type);
922 return 0;
923 }
924 if (initializing_context (field) != type)
925 {
15a7ee29 926 error ("class %qT does not have any field named %qD", type,
a723baf1 927 member_name);
b7484fbe
MS
928 return 0;
929 }
930
8d08fdba
MS
931 return 1;
932}
933
2282d28d
MM
934/* NAME is a FIELD_DECL, an IDENTIFIER_NODE which names a field, or it
935 is a _TYPE node or TYPE_DECL which names a base for that type.
1f5a253a
NS
936 Check the validity of NAME, and return either the base _TYPE, base
937 binfo, or the FIELD_DECL of the member. If NAME is invalid, return
2282d28d 938 NULL_TREE and issue a diagnostic.
8d08fdba 939
36a68fe7
NS
940 An old style unnamed direct single base construction is permitted,
941 where NAME is NULL. */
8d08fdba 942
fd74ca0b 943tree
1f5a253a 944expand_member_init (tree name)
8d08fdba 945{
2282d28d
MM
946 tree basetype;
947 tree field;
8d08fdba 948
2282d28d 949 if (!current_class_ref)
fd74ca0b 950 return NULL_TREE;
8d08fdba 951
36a68fe7 952 if (!name)
90418208 953 {
36a68fe7
NS
954 /* This is an obsolete unnamed base class initializer. The
955 parser will already have warned about its use. */
604a3205 956 switch (BINFO_N_BASE_BINFOS (TYPE_BINFO (current_class_type)))
36a68fe7
NS
957 {
958 case 0:
15a7ee29 959 error ("unnamed initializer for %qT, which has no base classes",
2282d28d 960 current_class_type);
36a68fe7
NS
961 return NULL_TREE;
962 case 1:
604a3205
NS
963 basetype = BINFO_TYPE
964 (BINFO_BASE_BINFO (TYPE_BINFO (current_class_type), 0));
36a68fe7
NS
965 break;
966 default:
15a7ee29 967 error ("unnamed initializer for %qT, which uses multiple inheritance",
2282d28d 968 current_class_type);
36a68fe7
NS
969 return NULL_TREE;
970 }
90418208 971 }
36a68fe7 972 else if (TYPE_P (name))
be99da77 973 {
a82d6da5 974 basetype = TYPE_MAIN_VARIANT (name);
36a68fe7 975 name = TYPE_NAME (name);
be99da77 976 }
36a68fe7
NS
977 else if (TREE_CODE (name) == TYPE_DECL)
978 basetype = TYPE_MAIN_VARIANT (TREE_TYPE (name));
2282d28d
MM
979 else
980 basetype = NULL_TREE;
8d08fdba 981
36a68fe7 982 if (basetype)
41efda8f 983 {
d9148cf4
MM
984 tree class_binfo;
985 tree direct_binfo;
986 tree virtual_binfo;
987 int i;
2282d28d 988
36a68fe7 989 if (current_template_parms)
1f5a253a 990 return basetype;
2282d28d 991
d9148cf4
MM
992 class_binfo = TYPE_BINFO (current_class_type);
993 direct_binfo = NULL_TREE;
994 virtual_binfo = NULL_TREE;
995
996 /* Look for a direct base. */
fa743e8c 997 for (i = 0; BINFO_BASE_ITERATE (class_binfo, i, direct_binfo); ++i)
539ed333 998 if (SAME_BINFO_TYPE_P (BINFO_TYPE (direct_binfo), basetype))
fa743e8c
NS
999 break;
1000
d9148cf4
MM
1001 /* Look for a virtual base -- unless the direct base is itself
1002 virtual. */
809e3e7f 1003 if (!direct_binfo || !BINFO_VIRTUAL_P (direct_binfo))
58c42dc2 1004 virtual_binfo = binfo_for_vbase (basetype, current_class_type);
d9148cf4
MM
1005
1006 /* [class.base.init]
c8094d83 1007
0cbd7506 1008 If a mem-initializer-id is ambiguous because it designates
d9148cf4
MM
1009 both a direct non-virtual base class and an inherited virtual
1010 base class, the mem-initializer is ill-formed. */
1011 if (direct_binfo && virtual_binfo)
1012 {
15a7ee29 1013 error ("%qD is both a direct base and an indirect virtual base",
d9148cf4
MM
1014 basetype);
1015 return NULL_TREE;
1016 }
1017
1018 if (!direct_binfo && !virtual_binfo)
8d08fdba 1019 {
5775a06a 1020 if (CLASSTYPE_VBASECLASSES (current_class_type))
c3115fd2
MM
1021 error ("type %qT is not a direct or virtual base of %qT",
1022 basetype, current_class_type);
41efda8f 1023 else
c3115fd2
MM
1024 error ("type %qT is not a direct base of %qT",
1025 basetype, current_class_type);
fd74ca0b 1026 return NULL_TREE;
41efda8f 1027 }
d9148cf4
MM
1028
1029 return direct_binfo ? direct_binfo : virtual_binfo;
41efda8f
MM
1030 }
1031 else
1032 {
2282d28d 1033 if (TREE_CODE (name) == IDENTIFIER_NODE)
86ac0575 1034 field = lookup_field (current_class_type, name, 1, false);
2282d28d
MM
1035 else
1036 field = name;
8d08fdba 1037
2282d28d 1038 if (member_init_ok_or_else (field, current_class_type, name))
1f5a253a 1039 return field;
41efda8f 1040 }
fd74ca0b 1041
2282d28d 1042 return NULL_TREE;
8d08fdba
MS
1043}
1044
1045/* This is like `expand_member_init', only it stores one aggregate
1046 value into another.
1047
1048 INIT comes in two flavors: it is either a value which
1049 is to be stored in EXP, or it is a parameter list
1050 to go to a constructor, which will operate on EXP.
f30432d7
MS
1051 If INIT is not a parameter list for a constructor, then set
1052 LOOKUP_ONLYCONVERTING.
6060a796
MS
1053 If FLAGS is LOOKUP_ONLYCONVERTING then it is the = init form of
1054 the initializer, if FLAGS is 0, then it is the (init) form.
8d08fdba 1055 If `init' is a CONSTRUCTOR, then we emit a warning message,
59be0cdd 1056 explaining that such initializations are invalid.
8d08fdba 1057
8d08fdba
MS
1058 If INIT resolves to a CALL_EXPR which happens to return
1059 something of the type we are looking for, then we know
1060 that we can safely use that call to perform the
1061 initialization.
1062
1063 The virtual function table pointer cannot be set up here, because
1064 we do not really know its type.
1065
8d08fdba
MS
1066 This never calls operator=().
1067
1068 When initializing, nothing is CONST.
1069
1070 A default copy constructor may have to be used to perform the
1071 initialization.
1072
1073 A constructor or a conversion operator may have to be used to
e92cc029 1074 perform the initialization, but not both, as it would be ambiguous. */
8d08fdba 1075
f1dedc31 1076tree
362efdc1 1077build_aggr_init (tree exp, tree init, int flags)
8d08fdba 1078{
f1dedc31
MM
1079 tree stmt_expr;
1080 tree compound_stmt;
1081 int destroy_temps;
8d08fdba
MS
1082 tree type = TREE_TYPE (exp);
1083 int was_const = TREE_READONLY (exp);
f30432d7 1084 int was_volatile = TREE_THIS_VOLATILE (exp);
2a3398e1 1085 int is_global;
8d08fdba
MS
1086
1087 if (init == error_mark_node)
f1dedc31 1088 return error_mark_node;
8d08fdba
MS
1089
1090 TREE_READONLY (exp) = 0;
f30432d7
MS
1091 TREE_THIS_VOLATILE (exp) = 0;
1092
1093 if (init && TREE_CODE (init) != TREE_LIST)
1094 flags |= LOOKUP_ONLYCONVERTING;
8d08fdba
MS
1095
1096 if (TREE_CODE (type) == ARRAY_TYPE)
1097 {
671cb993
MM
1098 tree itype;
1099
92a62aad
MM
1100 /* An array may not be initialized use the parenthesized
1101 initialization form -- unless the initializer is "()". */
1102 if (init && TREE_CODE (init) == TREE_LIST)
8d08fdba 1103 {
33bd39a2 1104 error ("bad array initializer");
f1dedc31 1105 return error_mark_node;
8d08fdba 1106 }
92a62aad
MM
1107 /* Must arrange to initialize each element of EXP
1108 from elements of INIT. */
671cb993 1109 itype = init ? TREE_TYPE (init) : NULL_TREE;
89d684bb 1110 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
b2153b98
KL
1111 TREE_TYPE (exp) = TYPE_MAIN_VARIANT (type);
1112 if (itype && cp_type_quals (itype) != TYPE_UNQUALIFIED)
92a62aad 1113 itype = TREE_TYPE (init) = TYPE_MAIN_VARIANT (itype);
a48cccea 1114 stmt_expr = build_vec_init (exp, NULL_TREE, init,
b84f4651 1115 /*explicit_default_init_p=*/false,
92a62aad
MM
1116 itype && same_type_p (itype,
1117 TREE_TYPE (exp)));
8d08fdba 1118 TREE_READONLY (exp) = was_const;
f30432d7 1119 TREE_THIS_VOLATILE (exp) = was_volatile;
8d08fdba 1120 TREE_TYPE (exp) = type;
f376e137
MS
1121 if (init)
1122 TREE_TYPE (init) = itype;
f1dedc31 1123 return stmt_expr;
8d08fdba
MS
1124 }
1125
1126 if (TREE_CODE (exp) == VAR_DECL || TREE_CODE (exp) == PARM_DECL)
f4f206f4 1127 /* Just know that we've seen something for this node. */
8d08fdba
MS
1128 TREE_USED (exp) = 1;
1129
e7843f33 1130 TREE_TYPE (exp) = TYPE_MAIN_VARIANT (type);
2a3398e1 1131 is_global = begin_init_stmts (&stmt_expr, &compound_stmt);
f2c5f623 1132 destroy_temps = stmts_are_full_exprs_p ();
ae499cce 1133 current_stmt_tree ()->stmts_are_full_exprs_p = 0;
8d08fdba 1134 expand_aggr_init_1 (TYPE_BINFO (type), exp, exp,
b370501f 1135 init, LOOKUP_NORMAL|flags);
2a3398e1 1136 stmt_expr = finish_init_stmts (is_global, stmt_expr, compound_stmt);
ae499cce 1137 current_stmt_tree ()->stmts_are_full_exprs_p = destroy_temps;
e7843f33 1138 TREE_TYPE (exp) = type;
8d08fdba 1139 TREE_READONLY (exp) = was_const;
f30432d7 1140 TREE_THIS_VOLATILE (exp) = was_volatile;
f1dedc31
MM
1141
1142 return stmt_expr;
8d08fdba
MS
1143}
1144
6f30f1f1
JM
1145/* Like build_aggr_init, but not just for aggregates. */
1146
1147tree
362efdc1 1148build_init (tree decl, tree init, int flags)
6f30f1f1
JM
1149{
1150 tree expr;
1151
6de9cd9a 1152 if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
6f30f1f1 1153 expr = build_aggr_init (decl, init, flags);
6de9cd9a
DN
1154 else if (CLASS_TYPE_P (TREE_TYPE (decl)))
1155 expr = build_special_member_call (decl, complete_ctor_identifier,
1156 build_tree_list (NULL_TREE, init),
cad7e87b 1157 TREE_TYPE (decl),
6de9cd9a 1158 LOOKUP_NORMAL|flags);
6f30f1f1 1159 else
f293ce4b 1160 expr = build2 (INIT_EXPR, TREE_TYPE (decl), decl, init);
8e3df2de 1161
6f30f1f1
JM
1162 return expr;
1163}
1164
8d08fdba 1165static void
362efdc1 1166expand_default_init (tree binfo, tree true_exp, tree exp, tree init, int flags)
8d08fdba 1167{
fc378698 1168 tree type = TREE_TYPE (exp);
9eb71d8c 1169 tree ctor_name;
fc378698 1170
8d08fdba
MS
1171 /* It fails because there may not be a constructor which takes
1172 its own type as the first (or only parameter), but which does
1173 take other types via a conversion. So, if the thing initializing
1174 the expression is a unit element of type X, first try X(X&),
1175 followed by initialization by X. If neither of these work
1176 out, then look hard. */
1177 tree rval;
1178 tree parms;
8d08fdba 1179
277294d7 1180 if (init && TREE_CODE (init) != TREE_LIST
faf5394a
MS
1181 && (flags & LOOKUP_ONLYCONVERTING))
1182 {
1183 /* Base subobjects should only get direct-initialization. */
8dc2b103 1184 gcc_assert (true_exp == exp);
faf5394a 1185
c37dc68e
JM
1186 if (flags & DIRECT_BIND)
1187 /* Do nothing. We hit this in two cases: Reference initialization,
1188 where we aren't initializing a real variable, so we don't want
1189 to run a new constructor; and catching an exception, where we
1190 have already built up the constructor call so we could wrap it
1191 in an exception region. */;
92a62aad 1192 else if (BRACE_ENCLOSED_INITIALIZER_P (init))
8e3df2de 1193 {
b216f69b 1194 /* A brace-enclosed initializer for an aggregate. */
50bc768d 1195 gcc_assert (CP_AGGREGATE_TYPE_P (type));
4038c495 1196 init = digest_init (type, init);
8e3df2de 1197 }
c37dc68e 1198 else
37c46b43 1199 init = ocp_convert (type, init, CONV_IMPLICIT|CONV_FORCE_TEMP, flags);
faf5394a 1200
4e8dca1c
JM
1201 if (TREE_CODE (init) == MUST_NOT_THROW_EXPR)
1202 /* We need to protect the initialization of a catch parm with a
1203 call to terminate(), which shows up as a MUST_NOT_THROW_EXPR
c7ae64f2 1204 around the TARGET_EXPR for the copy constructor. See
4e8dca1c
JM
1205 initialize_handler_parm. */
1206 {
f293ce4b
RS
1207 TREE_OPERAND (init, 0) = build2 (INIT_EXPR, TREE_TYPE (exp), exp,
1208 TREE_OPERAND (init, 0));
4e8dca1c
JM
1209 TREE_TYPE (init) = void_type_node;
1210 }
c7ae64f2 1211 else
f293ce4b 1212 init = build2 (INIT_EXPR, TREE_TYPE (exp), exp, init);
c7ae64f2 1213 TREE_SIDE_EFFECTS (init) = 1;
f1dedc31 1214 finish_expr_stmt (init);
faf5394a
MS
1215 return;
1216 }
1217
b7484fbe
MS
1218 if (init == NULL_TREE
1219 || (TREE_CODE (init) == TREE_LIST && ! TREE_TYPE (init)))
8d08fdba
MS
1220 {
1221 parms = init;
db5ae43f
MS
1222 if (parms)
1223 init = TREE_VALUE (parms);
8d08fdba 1224 }
8d08fdba 1225 else
051e6fd7 1226 parms = build_tree_list (NULL_TREE, init);
8d08fdba 1227
9eb71d8c
MM
1228 if (true_exp == exp)
1229 ctor_name = complete_ctor_identifier;
1230 else
1231 ctor_name = base_ctor_identifier;
8d08fdba 1232
4ba126e4 1233 rval = build_special_member_call (exp, ctor_name, parms, binfo, flags);
25eb19ff 1234 if (TREE_SIDE_EFFECTS (rval))
e895113a 1235 finish_expr_stmt (convert_to_void (rval, NULL));
8d08fdba
MS
1236}
1237
1238/* This function is responsible for initializing EXP with INIT
1239 (if any).
1240
1241 BINFO is the binfo of the type for who we are performing the
1242 initialization. For example, if W is a virtual base class of A and B,
1243 and C : A, B.
1244 If we are initializing B, then W must contain B's W vtable, whereas
1245 were we initializing C, W must contain C's W vtable.
1246
1247 TRUE_EXP is nonzero if it is the true expression being initialized.
1248 In this case, it may be EXP, or may just contain EXP. The reason we
1249 need this is because if EXP is a base element of TRUE_EXP, we
1250 don't necessarily know by looking at EXP where its virtual
1251 baseclass fields should really be pointing. But we do know
1252 from TRUE_EXP. In constructors, we don't know anything about
1253 the value being initialized.
1254
9f880ef9
MM
1255 FLAGS is just passed to `build_new_method_call'. See that function
1256 for its description. */
8d08fdba
MS
1257
1258static void
362efdc1 1259expand_aggr_init_1 (tree binfo, tree true_exp, tree exp, tree init, int flags)
8d08fdba
MS
1260{
1261 tree type = TREE_TYPE (exp);
8d08fdba 1262
50bc768d
NS
1263 gcc_assert (init != error_mark_node && type != error_mark_node);
1264 gcc_assert (building_stmt_tree ());
8d08fdba
MS
1265
1266 /* Use a function returning the desired type to initialize EXP for us.
1267 If the function is a constructor, and its first argument is
1268 NULL_TREE, know that it was meant for us--just slide exp on
1269 in and expand the constructor. Constructors now come
1270 as TARGET_EXPRs. */
faf5394a
MS
1271
1272 if (init && TREE_CODE (exp) == VAR_DECL
3b2db49f 1273 && COMPOUND_LITERAL_P (init))
faf5394a 1274 {
f1dedc31 1275 /* If store_init_value returns NULL_TREE, the INIT has been
3b2db49f 1276 recorded as the DECL_INITIAL for EXP. That means there's
f1dedc31 1277 nothing more we have to do. */
25ebb82a
RH
1278 init = store_init_value (exp, init);
1279 if (init)
1280 finish_expr_stmt (init);
faf5394a
MS
1281 return;
1282 }
1283
9e9ff709
MS
1284 /* We know that expand_default_init can handle everything we want
1285 at this point. */
b370501f 1286 expand_default_init (binfo, true_exp, exp, init, flags);
8d08fdba
MS
1287}
1288
be99da77
MS
1289/* Report an error if TYPE is not a user-defined, aggregate type. If
1290 OR_ELSE is nonzero, give an error message. */
e92cc029 1291
be99da77 1292int
362efdc1 1293is_aggr_type (tree type, int or_else)
be99da77
MS
1294{
1295 if (type == error_mark_node)
1296 return 0;
1297
1298 if (! IS_AGGR_TYPE (type)
73b0fce8 1299 && TREE_CODE (type) != TEMPLATE_TYPE_PARM
a1281f45 1300 && TREE_CODE (type) != BOUND_TEMPLATE_TEMPLATE_PARM)
be99da77
MS
1301 {
1302 if (or_else)
15a7ee29 1303 error ("%qT is not an aggregate type", type);
be99da77
MS
1304 return 0;
1305 }
1306 return 1;
1307}
1308
8d08fdba 1309tree
362efdc1 1310get_type_value (tree name)
8d08fdba 1311{
8d08fdba
MS
1312 if (name == error_mark_node)
1313 return NULL_TREE;
1314
1315 if (IDENTIFIER_HAS_TYPE_VALUE (name))
1316 return IDENTIFIER_TYPE_VALUE (name);
8d08fdba
MS
1317 else
1318 return NULL_TREE;
1319}
051e6fd7 1320
a5ac359a
MM
1321/* Build a reference to a member of an aggregate. This is not a C++
1322 `&', but really something which can have its address taken, and
1323 then act as a pointer to member, for example TYPE :: FIELD can have
1324 its address taken by saying & TYPE :: FIELD. ADDRESS_P is true if
1325 this expression is the operand of "&".
8d08fdba
MS
1326
1327 @@ Prints out lousy diagnostics for operator <typename>
1328 @@ fields.
1329
51c184be 1330 @@ This function should be rewritten and placed in search.c. */
e92cc029 1331
8d08fdba 1332tree
d4f0f205 1333build_offset_ref (tree type, tree member, bool address_p)
8d08fdba 1334{
8d245821 1335 tree decl;
fc378698 1336 tree basebinfo = NULL_TREE;
8d08fdba 1337
5f311aec 1338 /* class templates can come in as TEMPLATE_DECLs here. */
d4f0f205
MM
1339 if (TREE_CODE (member) == TEMPLATE_DECL)
1340 return member;
93cdc044 1341
d4f0f205
MM
1342 if (dependent_type_p (type) || type_dependent_expression_p (member))
1343 return build_qualified_name (NULL_TREE, type, member,
02ed62dd 1344 /*template_p=*/false);
5566b478 1345
d4f0f205 1346 gcc_assert (TYPE_P (type));
c833d2be
NS
1347 if (! is_aggr_type (type, 1))
1348 return error_mark_node;
1349
d4f0f205
MM
1350 gcc_assert (DECL_P (member) || BASELINK_P (member));
1351 /* Callers should call mark_used before this point. */
1352 gcc_assert (!DECL_P (member) || TREE_USED (member));
be99da77 1353
d0f062fb 1354 if (!COMPLETE_TYPE_P (complete_type (type))
61a127b3 1355 && !TYPE_BEING_DEFINED (type))
8d08fdba 1356 {
d4f0f205 1357 error ("incomplete type %qT does not have member %qD", type, member);
a5ac359a
MM
1358 return error_mark_node;
1359 }
1360
d4f0f205
MM
1361 /* Entities other than non-static members need no further
1362 processing. */
a5ac359a 1363 if (TREE_CODE (member) == TYPE_DECL)
d4f0f205 1364 return member;
a5ac359a 1365 if (TREE_CODE (member) == VAR_DECL || TREE_CODE (member) == CONST_DECL)
d4f0f205 1366 return convert_from_reference (member);
a5ac359a
MM
1367
1368 if (TREE_CODE (member) == FIELD_DECL && DECL_C_BIT_FIELD (member))
1369 {
15a7ee29 1370 error ("invalid pointer to bit-field %qD", member);
a5ac359a
MM
1371 return error_mark_node;
1372 }
1373
d4f0f205
MM
1374 /* Set up BASEBINFO for member lookup. */
1375 decl = maybe_dummy_object (type, &basebinfo);
1376
aa52c1ff 1377 /* A lot of this logic is now handled in lookup_member. */
a5ac359a 1378 if (BASELINK_P (member))
8d08fdba 1379 {
8d08fdba 1380 /* Go from the TREE_BASELINK to the member function info. */
d6479fe7 1381 tree fnfields = member;
8d245821 1382 tree t = BASELINK_FUNCTIONS (fnfields);
8d08fdba 1383
50ad9642 1384 if (TREE_CODE (t) != TEMPLATE_ID_EXPR && !really_overloaded_fn (t))
8d08fdba 1385 {
f4f206f4 1386 /* Get rid of a potential OVERLOAD around it. */
2c73f9f5
ML
1387 t = OVL_CURRENT (t);
1388
b54f5338
KL
1389 /* Unique functions are handled easily. */
1390
1391 /* For non-static member of base class, we need a special rule
1392 for access checking [class.protected]:
1393
1394 If the access is to form a pointer to member, the
1395 nested-name-specifier shall name the derived class
1396 (or any class derived from that class). */
1397 if (address_p && DECL_P (t)
1398 && DECL_NONSTATIC_MEMBER_P (t))
1399 perform_or_defer_access_check (TYPE_BINFO (type), t);
1400 else
1401 perform_or_defer_access_check (basebinfo, t);
1402
848b92e1
JM
1403 if (DECL_STATIC_FUNCTION_P (t))
1404 return t;
a5ac359a
MM
1405 member = t;
1406 }
1407 else
1408 {
1409 TREE_TYPE (fnfields) = unknown_type_node;
1410 member = fnfields;
8d08fdba 1411 }
8d08fdba 1412 }
b54f5338
KL
1413 else if (address_p && TREE_CODE (member) == FIELD_DECL)
1414 /* We need additional test besides the one in
1415 check_accessibility_of_qualified_id in case it is
1416 a pointer to non-static member. */
1417 perform_or_defer_access_check (TYPE_BINFO (type), member);
8d08fdba 1418
a5ac359a 1419 if (!address_p)
8d08fdba 1420 {
a5ac359a
MM
1421 /* If MEMBER is non-static, then the program has fallen afoul of
1422 [expr.prim]:
8d08fdba 1423
a5ac359a
MM
1424 An id-expression that denotes a nonstatic data member or
1425 nonstatic member function of a class can only be used:
8d08fdba 1426
a5ac359a
MM
1427 -- as part of a class member access (_expr.ref_) in which the
1428 object-expression refers to the member's class or a class
1429 derived from that class, or
b7484fbe 1430
a5ac359a
MM
1431 -- to form a pointer to member (_expr.unary.op_), or
1432
1433 -- in the body of a nonstatic member function of that class or
1434 of a class derived from that class (_class.mfct.nonstatic_), or
1435
1436 -- in a mem-initializer for a constructor for that class or for
1437 a class derived from that class (_class.base.init_). */
1438 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (member))
1439 {
e9525111
MM
1440 /* Build a representation of a the qualified name suitable
1441 for use as the operand to "&" -- even though the "&" is
1442 not actually present. */
f293ce4b 1443 member = build2 (OFFSET_REF, TREE_TYPE (member), decl, member);
a5ac359a
MM
1444 /* In Microsoft mode, treat a non-static member function as if
1445 it were a pointer-to-member. */
1446 if (flag_ms_extensions)
1447 {
a5ac359a
MM
1448 PTRMEM_OK_P (member) = 1;
1449 return build_unary_op (ADDR_EXPR, member, 0);
1450 }
c8094d83 1451 error ("invalid use of non-static member function %qD",
e9525111
MM
1452 TREE_OPERAND (member, 1));
1453 return member;
a5ac359a
MM
1454 }
1455 else if (TREE_CODE (member) == FIELD_DECL)
1456 {
15a7ee29 1457 error ("invalid use of non-static data member %qD", member);
a5ac359a
MM
1458 return error_mark_node;
1459 }
1460 return member;
1461 }
8d08fdba 1462
f293ce4b 1463 member = build2 (OFFSET_REF, TREE_TYPE (member), decl, member);
8d245821
MM
1464 PTRMEM_OK_P (member) = 1;
1465 return member;
8d08fdba
MS
1466}
1467
393e756d
MM
1468/* If DECL is a scalar enumeration constant or variable with a
1469 constant initializer, return the initializer (or, its initializers,
1470 recursively); otherwise, return DECL. If INTEGRAL_P, the
1471 initializer is only returned if DECL is an integral
1472 constant-expression. */
8d08fdba 1473
393e756d
MM
1474static tree
1475constant_value_1 (tree decl, bool integral_p)
8d08fdba 1476{
f513e31f 1477 while (TREE_CODE (decl) == CONST_DECL
393e756d
MM
1478 || (integral_p
1479 ? DECL_INTEGRAL_CONSTANT_VAR_P (decl)
1480 : (TREE_CODE (decl) == VAR_DECL
1481 && CP_TYPE_CONST_NON_VOLATILE_P (TREE_TYPE (decl)))))
b794e321
MM
1482 {
1483 tree init;
2d22db1f
MM
1484 /* Static data members in template classes may have
1485 non-dependent initializers. References to such non-static
d174af6c 1486 data members are not value-dependent, so we must retrieve the
2d22db1f
MM
1487 initializer here. The DECL_INITIAL will have the right type,
1488 but will not have been folded because that would prevent us
1489 from performing all appropriate semantic checks at
1490 instantiation time. */
1491 if (DECL_CLASS_SCOPE_P (decl)
1492 && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl))
1493 && uses_template_parms (CLASSTYPE_TI_ARGS
1494 (DECL_CONTEXT (decl))))
d174af6c
MM
1495 {
1496 ++processing_template_decl;
1497 init = fold_non_dependent_expr (DECL_INITIAL (decl));
1498 --processing_template_decl;
1499 }
2d22db1f
MM
1500 else
1501 {
1502 /* If DECL is a static data member in a template
1503 specialization, we must instantiate it here. The
1504 initializer for the static data member is not processed
1505 until needed; we need it now. */
1506 mark_used (decl);
1507 init = DECL_INITIAL (decl);
1508 }
d174af6c
MM
1509 if (init == error_mark_node)
1510 return error_mark_node;
1511 if (!init
b794e321 1512 || !TREE_TYPE (init)
393e756d
MM
1513 || (integral_p
1514 ? !INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (init))
1515 : (!TREE_CONSTANT (init)
1516 /* Do not return an aggregate constant (of which
1517 string literals are a special case), as we do not
dd36d4e1 1518 want to make inadvertent copies of such entities,
393e756d
MM
1519 and we must be sure that their addresses are the
1520 same everywhere. */
1521 || TREE_CODE (init) == CONSTRUCTOR
1522 || TREE_CODE (init) == STRING_CST)))
b794e321 1523 break;
57b37fe3 1524 decl = unshare_expr (init);
b794e321 1525 }
8a784e4a
NS
1526 return decl;
1527}
a1652802 1528
393e756d
MM
1529/* If DECL is a CONST_DECL, or a constant VAR_DECL initialized by
1530 constant of integral or enumeration type, then return that value.
1531 These are those variables permitted in constant expressions by
1532 [5.19/1]. */
a1652802 1533
8a784e4a 1534tree
393e756d 1535integral_constant_value (tree decl)
8a784e4a 1536{
393e756d
MM
1537 return constant_value_1 (decl, /*integral_p=*/true);
1538}
c8094d83 1539
393e756d
MM
1540/* A more relaxed version of integral_constant_value, used by the
1541 common C/C++ code and by the C++ front-end for optimization
1542 purposes. */
1543
1544tree
1545decl_constant_value (tree decl)
1546{
1547 return constant_value_1 (decl,
1548 /*integral_p=*/processing_template_decl);
8d08fdba
MS
1549}
1550\f
8d08fdba
MS
1551/* Common subroutines of build_new and build_vec_delete. */
1552
c787dd82 1553/* Call the global __builtin_delete to delete ADDR. */
8d08fdba 1554
bd6dd845 1555static tree
362efdc1 1556build_builtin_delete_call (tree addr)
8d08fdba 1557{
a6ecf8b6 1558 mark_used (global_delete_fndecl);
0c11ada6 1559 return build_call (global_delete_fndecl, build_tree_list (NULL_TREE, addr));
8d08fdba
MS
1560}
1561\f
63c9a190
MM
1562/* Build and return a NEW_EXPR. If NELTS is non-NULL, TYPE[NELTS] is
1563 the type of the object being allocated; otherwise, it's just TYPE.
1564 INIT is the initializer, if any. USE_GLOBAL_NEW is true if the
1565 user explicitly wrote "::operator new". PLACEMENT, if non-NULL, is
1566 the TREE_LIST of arguments to be provided as arguments to a
1567 placement new operator. This routine performs no semantic checks;
1568 it just creates and returns a NEW_EXPR. */
a0d5fba7 1569
63c9a190
MM
1570static tree
1571build_raw_new_expr (tree placement, tree type, tree nelts, tree init,
1572 int use_global_new)
743f140d 1573{
63c9a190
MM
1574 tree new_expr;
1575
1576 new_expr = build4 (NEW_EXPR, build_pointer_type (type), placement, type,
1577 nelts, init);
1578 NEW_EXPR_USE_GLOBAL (new_expr) = use_global_new;
1579 TREE_SIDE_EFFECTS (new_expr) = 1;
1580
1581 return new_expr;
743f140d
PB
1582}
1583
63c9a190
MM
1584/* Generate code for a new-expression, including calling the "operator
1585 new" function, initializing the object, and, if an exception occurs
1586 during construction, cleaning up. The arguments are as for
1587 build_raw_new_expr. */
a0d5fba7 1588
834c6dff 1589static tree
63c9a190
MM
1590build_new_1 (tree placement, tree type, tree nelts, tree init,
1591 bool globally_qualified_p)
1592
a0d5fba7 1593{
d746e87d
MM
1594 tree size, rval;
1595 /* True iff this is a call to "operator new[]" instead of just
c8094d83 1596 "operator new". */
d746e87d
MM
1597 bool array_p = false;
1598 /* True iff ARRAY_P is true and the bound of the array type is
1599 not necessarily a compile time constant. For example, VLA_P is
1600 true for "new int[f()]". */
1601 bool vla_p = false;
c8094d83 1602 /* The type being allocated. If ARRAY_P is true, this will be an
d746e87d
MM
1603 ARRAY_TYPE. */
1604 tree full_type;
1605 /* If ARRAY_P is true, the element type of the array. This is an
1606 never ARRAY_TYPE; for something like "new int[3][4]", the
1607 ELT_TYPE is "int". If ARRAY_P is false, this is the same type as
1608 FULL_TYPE. */
1609 tree elt_type;
f4f4610e
MM
1610 /* The type of the new-expression. (This type is always a pointer
1611 type.) */
1612 tree pointer_type;
78dcd41a 1613 /* A pointer type pointing to the FULL_TYPE. */
f4f4610e 1614 tree full_pointer_type;
a48cccea 1615 tree outer_nelts = NULL_TREE;
f4f4610e
MM
1616 tree alloc_call, alloc_expr;
1617 /* The address returned by the call to "operator new". This node is
1618 a VAR_DECL and is therefore reusable. */
1619 tree alloc_node;
46ff5047 1620 tree alloc_fn;
8b5e2ce4 1621 tree cookie_expr, init_expr;
089d6ea7 1622 int nothrow, check_new;
743f140d 1623 int use_java_new = 0;
834c6dff
MM
1624 /* If non-NULL, the number of extra bytes to allocate at the
1625 beginning of the storage allocated for an array-new expression in
1626 order to store the number of elements. */
1627 tree cookie_size = NULL_TREE;
3f41ffd8
MM
1628 /* True if the function we are calling is a placement allocation
1629 function. */
1630 bool placement_allocation_fn_p;
4f649415 1631 tree args = NULL_TREE;
f4f4610e 1632 /* True if the storage must be initialized, either by a constructor
34cd5ae7 1633 or due to an explicit new-initializer. */
f4f4610e
MM
1634 bool is_initialized;
1635 /* The address of the thing allocated, not including any cookie. In
1636 particular, if an array cookie is in use, DATA_ADDR is the
1637 address of the first array element. This node is a VAR_DECL, and
1638 is therefore reusable. */
1639 tree data_addr;
6de9cd9a 1640 tree init_preeval_expr = NULL_TREE;
a0d5fba7 1641
058b15c1 1642 if (nelts)
a0d5fba7 1643 {
9117ccad
RH
1644 tree index;
1645
058b15c1 1646 outer_nelts = nelts;
d746e87d 1647 array_p = true;
9117ccad 1648
c8094d83 1649 /* ??? The middle-end will error on us for building a VLA outside a
9117ccad
RH
1650 function context. Methinks that's not it's purvey. So we'll do
1651 our own VLA layout later. */
d746e87d 1652 vla_p = true;
a48cccea 1653 full_type = build_cplus_array_type (type, NULL_TREE);
9117ccad
RH
1654 index = convert (sizetype, nelts);
1655 index = size_binop (MINUS_EXPR, index, size_one_node);
1656 TYPE_DOMAIN (full_type) = build_index_type (index);
a0d5fba7 1657 }
f30efcb7 1658 else
d746e87d
MM
1659 {
1660 full_type = type;
1661 if (TREE_CODE (type) == ARRAY_TYPE)
1662 {
1663 array_p = true;
1664 nelts = array_type_nelts_top (type);
1665 outer_nelts = nelts;
1666 type = TREE_TYPE (type);
1667 }
1668 }
834c6dff 1669
63c9a190 1670 if (!complete_type_or_else (type, NULL_TREE))
5cc53d4e
MM
1671 return error_mark_node;
1672
8d08fdba
MS
1673 /* If our base type is an array, then make sure we know how many elements
1674 it has. */
d746e87d
MM
1675 for (elt_type = type;
1676 TREE_CODE (elt_type) == ARRAY_TYPE;
1677 elt_type = TREE_TYPE (elt_type))
c8094d83 1678 nelts = cp_build_binary_op (MULT_EXPR, nelts,
d746e87d 1679 array_type_nelts_top (elt_type));
5566b478 1680
d746e87d 1681 if (TREE_CODE (elt_type) == VOID_TYPE)
e1cd6e56 1682 {
15a7ee29 1683 error ("invalid type %<void%> for new");
e1cd6e56
MS
1684 return error_mark_node;
1685 }
1686
d746e87d 1687 if (abstract_virtuals_error (NULL_TREE, elt_type))
a7a64a77 1688 return error_mark_node;
8926095f 1689
d746e87d
MM
1690 is_initialized = (TYPE_NEEDS_CONSTRUCTING (elt_type) || init);
1691 if (CP_TYPE_CONST_P (elt_type) && !is_initialized)
f4f4610e 1692 {
d746e87d 1693 error ("uninitialized const in %<new%> of %q#T", elt_type);
f4f4610e
MM
1694 return error_mark_node;
1695 }
1696
d746e87d
MM
1697 size = size_in_bytes (elt_type);
1698 if (array_p)
9117ccad 1699 {
d746e87d
MM
1700 size = size_binop (MULT_EXPR, size, convert (sizetype, nelts));
1701 if (vla_p)
1702 {
1703 tree n, bitsize;
1704
1705 /* Do our own VLA layout. Setting TYPE_SIZE/_UNIT is
1706 necessary in order for the <INIT_EXPR <*foo> <CONSTRUCTOR
1707 ...>> to be valid. */
1708 TYPE_SIZE_UNIT (full_type) = size;
1709 n = convert (bitsizetype, nelts);
1710 bitsize = size_binop (MULT_EXPR, TYPE_SIZE (elt_type), n);
1711 TYPE_SIZE (full_type) = bitsize;
1712 }
9117ccad 1713 }
a28e3c7f 1714
63c9a190
MM
1715 alloc_fn = NULL_TREE;
1716
e92cc029 1717 /* Allocate the object. */
d746e87d 1718 if (! placement && TYPE_FOR_JAVA (elt_type))
743f140d 1719 {
63c9a190 1720 tree class_addr;
d746e87d 1721 tree class_decl = build_java_class_ref (elt_type);
8b60264b 1722 static const char alloc_name[] = "_Jv_AllocObject";
6de9cd9a 1723
743f140d 1724 use_java_new = 1;
c8094d83 1725 if (!get_global_value_if_present (get_identifier (alloc_name),
63c9a190 1726 &alloc_fn))
b1e5b86c 1727 {
15a7ee29 1728 error ("call to Java constructor with %qs undefined", alloc_name);
6961a592
GB
1729 return error_mark_node;
1730 }
63c9a190 1731 else if (really_overloaded_fn (alloc_fn))
b1e5b86c 1732 {
63c9a190 1733 error ("%qD should never be overloaded", alloc_fn);
6961a592
GB
1734 return error_mark_node;
1735 }
63c9a190 1736 alloc_fn = OVL_CURRENT (alloc_fn);
743f140d 1737 class_addr = build1 (ADDR_EXPR, jclass_node, class_decl);
96790071 1738 alloc_call = (build_function_call
63c9a190 1739 (alloc_fn,
245c3c04 1740 build_tree_list (NULL_TREE, class_addr)));
743f140d 1741 }
8d08fdba
MS
1742 else
1743 {
834c6dff 1744 tree fnname;
9f880ef9 1745 tree fns;
834c6dff 1746
d746e87d 1747 fnname = ansi_opname (array_p ? VEC_NEW_EXPR : NEW_EXPR);
834c6dff 1748
c8094d83 1749 if (!globally_qualified_p
d746e87d
MM
1750 && CLASS_TYPE_P (elt_type)
1751 && (array_p
1752 ? TYPE_HAS_ARRAY_NEW_OPERATOR (elt_type)
1753 : TYPE_HAS_NEW_OPERATOR (elt_type)))
089d6ea7
MM
1754 {
1755 /* Use a class-specific operator new. */
1756 /* If a cookie is required, add some extra space. */
d746e87d 1757 if (array_p && TYPE_VEC_NEW_USES_COOKIE (elt_type))
089d6ea7 1758 {
d746e87d 1759 cookie_size = targetm.cxx.get_cookie_size (elt_type);
089d6ea7
MM
1760 size = size_binop (PLUS_EXPR, size, cookie_size);
1761 }
1762 /* Create the argument list. */
1763 args = tree_cons (NULL_TREE, size, placement);
9f880ef9 1764 /* Do name-lookup to find the appropriate operator. */
d746e87d 1765 fns = lookup_fnfields (elt_type, fnname, /*protect=*/2);
a85cb0d7
VR
1766 if (fns == NULL_TREE)
1767 {
1768 error ("no suitable %qD found in class %qT", fnname, elt_type);
1769 return error_mark_node;
1770 }
9f880ef9
MM
1771 if (TREE_CODE (fns) == TREE_LIST)
1772 {
15a7ee29 1773 error ("request for member %qD is ambiguous", fnname);
9f880ef9
MM
1774 print_candidates (fns);
1775 return error_mark_node;
1776 }
d746e87d 1777 alloc_call = build_new_method_call (build_dummy_object (elt_type),
9f880ef9
MM
1778 fns, args,
1779 /*conversion_path=*/NULL_TREE,
63c9a190
MM
1780 LOOKUP_NORMAL,
1781 &alloc_fn);
089d6ea7 1782 }
834c6dff 1783 else
089d6ea7
MM
1784 {
1785 /* Use a global operator new. */
125e6594 1786 /* See if a cookie might be required. */
d746e87d
MM
1787 if (array_p && TYPE_VEC_NEW_USES_COOKIE (elt_type))
1788 cookie_size = targetm.cxx.get_cookie_size (elt_type);
125e6594
MM
1789 else
1790 cookie_size = NULL_TREE;
1791
c8094d83 1792 alloc_call = build_operator_new_call (fnname, placement,
63c9a190
MM
1793 &size, &cookie_size,
1794 &alloc_fn);
089d6ea7 1795 }
8d08fdba
MS
1796 }
1797
96790071 1798 if (alloc_call == error_mark_node)
2bb5d995
JM
1799 return error_mark_node;
1800
63c9a190
MM
1801 gcc_assert (alloc_fn != NULL_TREE);
1802
a6111661
JM
1803 /* In the simple case, we can stop now. */
1804 pointer_type = build_pointer_type (type);
1805 if (!cookie_size && !is_initialized)
1806 return build_nop (pointer_type, alloc_call);
1807
1808 /* While we're working, use a pointer to the type we've actually
1809 allocated. Store the result of the call in a variable so that we
1810 can use it more than once. */
1811 full_pointer_type = build_pointer_type (full_type);
1812 alloc_expr = get_target_expr (build_nop (full_pointer_type, alloc_call));
1813 alloc_node = TARGET_EXPR_SLOT (alloc_expr);
1814
1815 /* Strip any COMPOUND_EXPRs from ALLOC_CALL. */
c8094d83 1816 while (TREE_CODE (alloc_call) == COMPOUND_EXPR)
a6111661 1817 alloc_call = TREE_OPERAND (alloc_call, 1);
089d6ea7 1818
3f41ffd8
MM
1819 /* Now, check to see if this function is actually a placement
1820 allocation function. This can happen even when PLACEMENT is NULL
1821 because we might have something like:
1822
1823 struct S { void* operator new (size_t, int i = 0); };
1824
1825 A call to `new S' will get this allocation function, even though
1826 there is no explicit placement argument. If there is more than
1827 one argument, or there are variable arguments, then this is a
1828 placement allocation function. */
c8094d83
MS
1829 placement_allocation_fn_p
1830 = (type_num_arguments (TREE_TYPE (alloc_fn)) > 1
46ff5047 1831 || varargs_function_p (alloc_fn));
96790071 1832
a6111661
JM
1833 /* Preevaluate the placement args so that we don't reevaluate them for a
1834 placement delete. */
1835 if (placement_allocation_fn_p)
1836 {
6de9cd9a
DN
1837 tree inits;
1838 stabilize_call (alloc_call, &inits);
a6111661 1839 if (inits)
f293ce4b
RS
1840 alloc_expr = build2 (COMPOUND_EXPR, TREE_TYPE (alloc_expr), inits,
1841 alloc_expr);
a6111661
JM
1842 }
1843
047f64a3
JM
1844 /* unless an allocation function is declared with an empty excep-
1845 tion-specification (_except.spec_), throw(), it indicates failure to
1846 allocate storage by throwing a bad_alloc exception (clause _except_,
1847 _lib.bad.alloc_); it returns a non-null pointer otherwise If the allo-
1848 cation function is declared with an empty exception-specification,
1849 throw(), it returns null to indicate failure to allocate storage and a
1850 non-null pointer otherwise.
1851
1852 So check for a null exception spec on the op new we just called. */
1853
46ff5047 1854 nothrow = TYPE_NOTHROW_P (TREE_TYPE (alloc_fn));
743f140d 1855 check_new = (flag_check_new || nothrow) && ! use_java_new;
047f64a3 1856
089d6ea7 1857 if (cookie_size)
8d08fdba 1858 {
96790071 1859 tree cookie;
46e995e0 1860 tree cookie_ptr;
f4f4610e
MM
1861
1862 /* Adjust so we're pointing to the start of the object. */
f293ce4b
RS
1863 data_addr = get_target_expr (build2 (PLUS_EXPR, full_pointer_type,
1864 alloc_node, cookie_size));
96790071 1865
834c6dff 1866 /* Store the number of bytes allocated so that we can know how
3461fba7
NS
1867 many elements to destroy later. We use the last sizeof
1868 (size_t) bytes to store the number of elements. */
f293ce4b
RS
1869 cookie_ptr = build2 (MINUS_EXPR, build_pointer_type (sizetype),
1870 data_addr, size_in_bytes (sizetype));
46e995e0 1871 cookie = build_indirect_ref (cookie_ptr, NULL);
1f84ec23 1872
f293ce4b 1873 cookie_expr = build2 (MODIFY_EXPR, sizetype, cookie, nelts);
46e995e0
PB
1874
1875 if (targetm.cxx.cookie_has_size ())
1876 {
1877 /* Also store the element size. */
f293ce4b
RS
1878 cookie_ptr = build2 (MINUS_EXPR, build_pointer_type (sizetype),
1879 cookie_ptr, size_in_bytes (sizetype));
46e995e0 1880 cookie = build_indirect_ref (cookie_ptr, NULL);
f293ce4b 1881 cookie = build2 (MODIFY_EXPR, sizetype, cookie,
d746e87d 1882 size_in_bytes(elt_type));
f293ce4b
RS
1883 cookie_expr = build2 (COMPOUND_EXPR, TREE_TYPE (cookie_expr),
1884 cookie, cookie_expr);
46e995e0 1885 }
8b5e2ce4 1886 data_addr = TARGET_EXPR_SLOT (data_addr);
8d08fdba 1887 }
96790071 1888 else
8b5e2ce4
JM
1889 {
1890 cookie_expr = NULL_TREE;
1891 data_addr = alloc_node;
1892 }
8d08fdba 1893
6de9cd9a
DN
1894 /* Now initialize the allocated object. Note that we preevaluate the
1895 initialization expression, apart from the actual constructor call or
1896 assignment--we do this because we want to delay the allocation as long
1897 as possible in order to minimize the size of the exception region for
1898 placement delete. */
f4f4610e 1899 if (is_initialized)
8d08fdba 1900 {
6de9cd9a
DN
1901 bool stable;
1902
f4f4610e 1903 init_expr = build_indirect_ref (data_addr, NULL);
f30efcb7 1904
d746e87d 1905 if (array_p)
6de9cd9a 1906 {
b84f4651
MM
1907 bool explicit_default_init_p = false;
1908
1909 if (init == void_zero_node)
1910 {
1911 init = NULL_TREE;
1912 explicit_default_init_p = true;
1913 }
1914 else if (init)
1915 pedwarn ("ISO C++ forbids initialization in array new");
1916
6de9cd9a
DN
1917 init_expr
1918 = build_vec_init (init_expr,
1919 cp_build_binary_op (MINUS_EXPR, outer_nelts,
1920 integer_one_node),
b84f4651
MM
1921 init,
1922 explicit_default_init_p,
1923 /*from_array=*/0);
6de9cd9a
DN
1924
1925 /* An array initialization is stable because the initialization
1926 of each element is a full-expression, so the temporaries don't
1927 leak out. */
1928 stable = true;
1929 }
f30efcb7 1930 else
8d08fdba 1931 {
b84f4651
MM
1932 if (init == void_zero_node)
1933 init = build_default_init (full_type, nelts);
6de9cd9a 1934
b84f4651
MM
1935 if (TYPE_NEEDS_CONSTRUCTING (type))
1936 {
1937 init_expr = build_special_member_call (init_expr,
1938 complete_ctor_identifier,
1939 init, elt_type,
1940 LOOKUP_NORMAL);
1941 stable = stabilize_init (init_expr, &init_preeval_expr);
1942 }
8dc2b103 1943 else
b84f4651
MM
1944 {
1945 /* We are processing something like `new int (10)', which
1946 means allocate an int, and initialize it with 10. */
1947
1948 if (TREE_CODE (init) == TREE_LIST)
1949 init = build_x_compound_expr_from_list (init,
1950 "new initializer");
1951 else
1952 gcc_assert (TREE_CODE (init) != CONSTRUCTOR
1953 || TREE_TYPE (init) != NULL_TREE);
1954
1955 init_expr = build_modify_expr (init_expr, INIT_EXPR, init);
1956 stable = stabilize_init (init_expr, &init_preeval_expr);
1957 }
96790071
JM
1958 }
1959
1960 if (init_expr == error_mark_node)
1961 return error_mark_node;
1f109f0f 1962
20c39572
JM
1963 /* If any part of the object initialization terminates by throwing an
1964 exception and a suitable deallocation function can be found, the
1965 deallocation function is called to free the memory in which the
1966 object was being constructed, after which the exception continues
1967 to propagate in the context of the new-expression. If no
1968 unambiguous matching deallocation function can be found,
1969 propagating the exception does not cause the object's memory to be
1970 freed. */
96790071 1971 if (flag_exceptions && ! use_java_new)
1f109f0f 1972 {
d746e87d 1973 enum tree_code dcode = array_p ? VEC_DELETE_EXPR : DELETE_EXPR;
96790071 1974 tree cleanup;
a7d87521 1975
5355deec 1976 /* The Standard is unclear here, but the right thing to do
f4f4610e
MM
1977 is to use the same method for finding deallocation
1978 functions that we use for finding allocation functions. */
c8094d83 1979 cleanup = build_op_delete_call (dcode, alloc_node, size,
5bd61841 1980 globally_qualified_p,
c8094d83 1981 (placement_allocation_fn_p
63c9a190
MM
1982 ? alloc_call : NULL_TREE),
1983 (placement_allocation_fn_p
1984 ? alloc_fn : NULL_TREE));
2bb14213 1985
6de9cd9a
DN
1986 if (!cleanup)
1987 /* We're done. */;
1988 else if (stable)
1989 /* This is much simpler if we were able to preevaluate all of
1990 the arguments to the constructor call. */
f293ce4b
RS
1991 init_expr = build2 (TRY_CATCH_EXPR, void_type_node,
1992 init_expr, cleanup);
6de9cd9a
DN
1993 else
1994 /* Ack! First we allocate the memory. Then we set our sentry
1995 variable to true, and expand a cleanup that deletes the
1996 memory if sentry is true. Then we run the constructor, and
1997 finally clear the sentry.
1998
1999 We need to do this because we allocate the space first, so
2000 if there are any temporaries with cleanups in the
2001 constructor args and we weren't able to preevaluate them, we
2002 need this EH region to extend until end of full-expression
2003 to preserve nesting. */
da4768fe 2004 {
96790071 2005 tree end, sentry, begin;
2face519
JM
2006
2007 begin = get_target_expr (boolean_true_node);
659e5a7a 2008 CLEANUP_EH_ONLY (begin) = 1;
2face519 2009
659e5a7a
JM
2010 sentry = TARGET_EXPR_SLOT (begin);
2011
2012 TARGET_EXPR_CLEANUP (begin)
f293ce4b
RS
2013 = build3 (COND_EXPR, void_type_node, sentry,
2014 cleanup, void_zero_node);
2face519 2015
f293ce4b
RS
2016 end = build2 (MODIFY_EXPR, TREE_TYPE (sentry),
2017 sentry, boolean_false_node);
2face519 2018
96790071 2019 init_expr
f293ce4b
RS
2020 = build2 (COMPOUND_EXPR, void_type_node, begin,
2021 build2 (COMPOUND_EXPR, void_type_node, init_expr,
2022 end));
da4768fe 2023 }
c8094d83 2024
1f109f0f 2025 }
f4f4610e 2026 }
8b5e2ce4
JM
2027 else
2028 init_expr = NULL_TREE;
2029
2030 /* Now build up the return value in reverse order. */
96790071 2031
8b5e2ce4 2032 rval = data_addr;
2face519 2033
8b5e2ce4 2034 if (init_expr)
f293ce4b 2035 rval = build2 (COMPOUND_EXPR, TREE_TYPE (rval), init_expr, rval);
8b5e2ce4 2036 if (cookie_expr)
f293ce4b 2037 rval = build2 (COMPOUND_EXPR, TREE_TYPE (rval), cookie_expr, rval);
8b5e2ce4
JM
2038
2039 if (rval == alloc_node)
2040 /* If we don't have an initializer or a cookie, strip the TARGET_EXPR
2041 and return the call (which doesn't need to be adjusted). */
2042 rval = TARGET_EXPR_INITIAL (alloc_expr);
2043 else
d18c083e 2044 {
8b5e2ce4
JM
2045 if (check_new)
2046 {
2047 tree ifexp = cp_build_binary_op (NE_EXPR, alloc_node,
2048 integer_zero_node);
2049 rval = build_conditional_expr (ifexp, rval, alloc_node);
2050 }
d18c083e 2051
8b5e2ce4
JM
2052 /* Perform the allocation before anything else, so that ALLOC_NODE
2053 has been initialized before we start using it. */
f293ce4b 2054 rval = build2 (COMPOUND_EXPR, TREE_TYPE (rval), alloc_expr, rval);
8b5e2ce4 2055 }
51c184be 2056
6de9cd9a 2057 if (init_preeval_expr)
f293ce4b 2058 rval = build2 (COMPOUND_EXPR, TREE_TYPE (rval), init_preeval_expr, rval);
6de9cd9a 2059
f4f4610e 2060 /* Convert to the final type. */
d04a575f
MM
2061 rval = build_nop (pointer_type, rval);
2062
2063 /* A new-expression is never an lvalue. */
5cc53d4e 2064 rval = rvalue (rval);
d04a575f
MM
2065
2066 return rval;
8d08fdba 2067}
63c9a190
MM
2068
2069/* Generate a representation for a C++ "new" expression. PLACEMENT is
2070 a TREE_LIST of placement-new arguments (or NULL_TREE if none). If
2071 NELTS is NULL, TYPE is the type of the storage to be allocated. If
2072 NELTS is not NULL, then this is an array-new allocation; TYPE is
2073 the type of the elements in the array and NELTS is the number of
2074 elements in the array. INIT, if non-NULL, is the initializer for
2075 the new object, or void_zero_node to indicate an initializer of
2076 "()". If USE_GLOBAL_NEW is true, then the user explicitly wrote
2077 "::new" rather than just "new". */
2078
2079tree
2080build_new (tree placement, tree type, tree nelts, tree init,
2081 int use_global_new)
2082{
2083 tree rval;
2084 tree orig_placement;
2085 tree orig_nelts;
2086 tree orig_init;
2087
2088 if (type == error_mark_node)
2089 return error_mark_node;
2090
2091 orig_placement = placement;
2092 orig_nelts = nelts;
2093 orig_init = init;
2094
2095 if (processing_template_decl)
2096 {
2097 if (dependent_type_p (type)
2098 || any_type_dependent_arguments_p (placement)
2099 || (nelts && type_dependent_expression_p (nelts))
2100 || (init != void_zero_node
2101 && any_type_dependent_arguments_p (init)))
2102 return build_raw_new_expr (placement, type, nelts, init,
2103 use_global_new);
2104 placement = build_non_dependent_args (placement);
2105 if (nelts)
2106 nelts = build_non_dependent_expr (nelts);
2107 if (init != void_zero_node)
2108 init = build_non_dependent_args (init);
2109 }
2110
2111 if (nelts)
2112 {
2113 if (!build_expr_type_conversion (WANT_INT | WANT_ENUM, nelts, false))
2114 pedwarn ("size in array new must have integral type");
2115 nelts = save_expr (cp_convert (sizetype, nelts));
2116 if (nelts == integer_zero_node)
2117 warning (0, "zero size array reserves no space");
2118 }
2119
2120 /* ``A reference cannot be created by the new operator. A reference
2121 is not an object (8.2.2, 8.4.3), so a pointer to it could not be
2122 returned by new.'' ARM 5.3.3 */
2123 if (TREE_CODE (type) == REFERENCE_TYPE)
2124 {
2125 error ("new cannot be applied to a reference type");
2126 type = TREE_TYPE (type);
2127 }
2128
2129 if (TREE_CODE (type) == FUNCTION_TYPE)
2130 {
2131 error ("new cannot be applied to a function type");
2132 return error_mark_node;
2133 }
2134
2135 rval = build_new_1 (placement, type, nelts, init, use_global_new);
2136 if (rval == error_mark_node)
2137 return error_mark_node;
2138
2139 if (processing_template_decl)
2140 return build_raw_new_expr (orig_placement, type, orig_nelts, orig_init,
2141 use_global_new);
2142
2143 /* Wrap it in a NOP_EXPR so warn_if_unused_value doesn't complain. */
2144 rval = build1 (NOP_EXPR, TREE_TYPE (rval), rval);
2145 TREE_NO_WARNING (rval) = 1;
2146
2147 return rval;
2148}
2149
2150/* Given a Java class, return a decl for the corresponding java.lang.Class. */
2151
2152tree
2153build_java_class_ref (tree type)
2154{
2155 tree name = NULL_TREE, class_decl;
2156 static tree CL_suffix = NULL_TREE;
2157 if (CL_suffix == NULL_TREE)
2158 CL_suffix = get_identifier("class$");
2159 if (jclass_node == NULL_TREE)
2160 {
2161 jclass_node = IDENTIFIER_GLOBAL_VALUE (get_identifier ("jclass"));
2162 if (jclass_node == NULL_TREE)
2163 fatal_error ("call to Java constructor, while %<jclass%> undefined");
2164
2165 jclass_node = TREE_TYPE (jclass_node);
2166 }
2167
2168 /* Mangle the class$ field. */
2169 {
2170 tree field;
2171 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
2172 if (DECL_NAME (field) == CL_suffix)
2173 {
2174 mangle_decl (field);
2175 name = DECL_ASSEMBLER_NAME (field);
2176 break;
2177 }
2178 if (!field)
2179 internal_error ("can't find class$");
2180 }
2181
2182 class_decl = IDENTIFIER_GLOBAL_VALUE (name);
2183 if (class_decl == NULL_TREE)
2184 {
2185 class_decl = build_decl (VAR_DECL, name, TREE_TYPE (jclass_node));
2186 TREE_STATIC (class_decl) = 1;
2187 DECL_EXTERNAL (class_decl) = 1;
2188 TREE_PUBLIC (class_decl) = 1;
2189 DECL_ARTIFICIAL (class_decl) = 1;
2190 DECL_IGNORED_P (class_decl) = 1;
2191 pushdecl_top_level (class_decl);
2192 make_decl_rtl (class_decl);
2193 }
2194 return class_decl;
2195}
8d08fdba 2196\f
f30432d7 2197static tree
362efdc1
NN
2198build_vec_delete_1 (tree base, tree maxindex, tree type,
2199 special_function_kind auto_delete_vec, int use_global_delete)
f30432d7
MS
2200{
2201 tree virtual_size;
e92cc029 2202 tree ptype = build_pointer_type (type = complete_type (type));
f30432d7
MS
2203 tree size_exp = size_in_bytes (type);
2204
2205 /* Temporary variables used by the loop. */
2206 tree tbase, tbase_init;
2207
2208 /* This is the body of the loop that implements the deletion of a
2209 single element, and moves temp variables to next elements. */
2210 tree body;
2211
2212 /* This is the LOOP_EXPR that governs the deletion of the elements. */
c7b62f14 2213 tree loop = 0;
f30432d7
MS
2214
2215 /* This is the thing that governs what to do after the loop has run. */
2216 tree deallocate_expr = 0;
2217
2218 /* This is the BIND_EXPR which holds the outermost iterator of the
2219 loop. It is convenient to set this variable up and test it before
2220 executing any other code in the loop.
2221 This is also the containing expression returned by this function. */
2222 tree controller = NULL_TREE;
2223
b2153b98 2224 /* We should only have 1-D arrays here. */
8dc2b103 2225 gcc_assert (TREE_CODE (type) != ARRAY_TYPE);
b2153b98 2226
834c6dff 2227 if (! IS_AGGR_TYPE (type) || TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
c7b62f14 2228 goto no_destructor;
f30432d7 2229
708cae97 2230 /* The below is short by the cookie size. */
fed3cef0
RK
2231 virtual_size = size_binop (MULT_EXPR, size_exp,
2232 convert (sizetype, maxindex));
f30432d7 2233
46e8c075 2234 tbase = create_temporary_var (ptype);
f30432d7 2235 tbase_init = build_modify_expr (tbase, NOP_EXPR,
7866705a
SB
2236 fold_build2 (PLUS_EXPR, ptype,
2237 base,
2238 virtual_size));
f30432d7 2239 DECL_REGISTER (tbase) = 1;
f293ce4b
RS
2240 controller = build3 (BIND_EXPR, void_type_node, tbase,
2241 NULL_TREE, NULL_TREE);
f30432d7 2242 TREE_SIDE_EFFECTS (controller) = 1;
f30432d7 2243
f293ce4b 2244 body = build1 (EXIT_EXPR, void_type_node,
5cd88d68
RS
2245 build2 (EQ_EXPR, boolean_type_node, tbase,
2246 fold_convert (ptype, base)));
c7b62f14
NS
2247 body = build_compound_expr
2248 (body, build_modify_expr (tbase, NOP_EXPR,
f293ce4b 2249 build2 (MINUS_EXPR, ptype, tbase, size_exp)));
c7b62f14
NS
2250 body = build_compound_expr
2251 (body, build_delete (ptype, tbase, sfk_complete_destructor,
2252 LOOKUP_NORMAL|LOOKUP_DESTRUCTOR, 1));
f30432d7 2253
f293ce4b 2254 loop = build1 (LOOP_EXPR, void_type_node, body);
c7b62f14 2255 loop = build_compound_expr (tbase_init, loop);
f30432d7
MS
2256
2257 no_destructor:
2258 /* If the delete flag is one, or anything else with the low bit set,
2259 delete the storage. */
86f45d2c 2260 if (auto_delete_vec != sfk_base_destructor)
f30432d7
MS
2261 {
2262 tree base_tbd;
2263
708cae97 2264 /* The below is short by the cookie size. */
fed3cef0
RK
2265 virtual_size = size_binop (MULT_EXPR, size_exp,
2266 convert (sizetype, maxindex));
f30432d7
MS
2267
2268 if (! TYPE_VEC_NEW_USES_COOKIE (type))
2269 /* no header */
2270 base_tbd = base;
2271 else
2272 {
834c6dff
MM
2273 tree cookie_size;
2274
46e995e0 2275 cookie_size = targetm.cxx.get_cookie_size (type);
c8094d83 2276 base_tbd
834c6dff 2277 = cp_convert (ptype,
ab76ca54 2278 cp_build_binary_op (MINUS_EXPR,
c8094d83 2279 cp_convert (string_type_node,
ab76ca54
MM
2280 base),
2281 cookie_size));
e92cc029 2282 /* True size with header. */
834c6dff 2283 virtual_size = size_binop (PLUS_EXPR, virtual_size, cookie_size);
f30432d7 2284 }
86f45d2c
MM
2285
2286 if (auto_delete_vec == sfk_deleting_destructor)
1c71c747
VR
2287 deallocate_expr = build_op_delete_call (VEC_DELETE_EXPR,
2288 base_tbd, virtual_size,
2289 use_global_delete & 1,
63c9a190
MM
2290 /*placement=*/NULL_TREE,
2291 /*alloc_fn=*/NULL_TREE);
f30432d7
MS
2292 }
2293
c7b62f14
NS
2294 body = loop;
2295 if (!deallocate_expr)
2296 ;
2297 else if (!body)
2298 body = deallocate_expr;
f30432d7 2299 else
c7b62f14 2300 body = build_compound_expr (body, deallocate_expr);
c8094d83 2301
c7b62f14
NS
2302 if (!body)
2303 body = integer_zero_node;
c8094d83 2304
f30432d7 2305 /* Outermost wrapper: If pointer is null, punt. */
7866705a
SB
2306 body = fold_build3 (COND_EXPR, void_type_node,
2307 fold_build2 (NE_EXPR, boolean_type_node, base,
2308 convert (TREE_TYPE (base),
2309 integer_zero_node)),
2310 body, integer_zero_node);
f30432d7
MS
2311 body = build1 (NOP_EXPR, void_type_node, body);
2312
2313 if (controller)
2314 {
2315 TREE_OPERAND (controller, 1) = body;
4e8dca1c 2316 body = controller;
f30432d7 2317 }
4e8dca1c
JM
2318
2319 if (TREE_CODE (base) == SAVE_EXPR)
2320 /* Pre-evaluate the SAVE_EXPR outside of the BIND_EXPR. */
f293ce4b 2321 body = build2 (COMPOUND_EXPR, void_type_node, base, body);
4e8dca1c 2322
8d245821 2323 return convert_to_void (body, /*implicit=*/NULL);
f30432d7
MS
2324}
2325
c8094d83 2326/* Create an unnamed variable of the indicated TYPE. */
c395453c 2327
f1dedc31 2328tree
362efdc1 2329create_temporary_var (tree type)
8a72a046 2330{
f1dedc31 2331 tree decl;
c8094d83 2332
f1dedc31
MM
2333 decl = build_decl (VAR_DECL, NULL_TREE, type);
2334 TREE_USED (decl) = 1;
2335 DECL_ARTIFICIAL (decl) = 1;
f1dedc31 2336 DECL_IGNORED_P (decl) = 1;
78e0d62b 2337 DECL_SOURCE_LOCATION (decl) = input_location;
b35d4555 2338 DECL_CONTEXT (decl) = current_function_decl;
f1dedc31 2339
f1dedc31 2340 return decl;
8a72a046
MM
2341}
2342
f1dedc31
MM
2343/* Create a new temporary variable of the indicated TYPE, initialized
2344 to INIT.
8a72a046 2345
f1dedc31
MM
2346 It is not entered into current_binding_level, because that breaks
2347 things when it comes time to do final cleanups (which take place
2348 "outside" the binding contour of the function). */
2349
2350static tree
362efdc1 2351get_temp_regvar (tree type, tree init)
f30432d7 2352{
f1dedc31 2353 tree decl;
8a72a046 2354
f1dedc31 2355 decl = create_temporary_var (type);
350fae66 2356 add_decl_expr (decl);
c8094d83 2357
f1dedc31 2358 finish_expr_stmt (build_modify_expr (decl, INIT_EXPR, init));
8a72a046 2359
f1dedc31 2360 return decl;
f30432d7
MS
2361}
2362
f1dedc31
MM
2363/* `build_vec_init' returns tree structure that performs
2364 initialization of a vector of aggregate types.
8d08fdba 2365
f30efcb7 2366 BASE is a reference to the vector, of ARRAY_TYPE.
a48cccea
JM
2367 MAXINDEX is the maximum index of the array (one less than the
2368 number of elements). It is only used if
2369 TYPE_DOMAIN (TREE_TYPE (BASE)) == NULL_TREE.
b84f4651 2370
8d08fdba
MS
2371 INIT is the (possibly NULL) initializer.
2372
b84f4651
MM
2373 If EXPLICIT_DEFAULT_INIT_P is true, then INIT must be NULL. All
2374 elements in the array are default-initialized.
2375
8d08fdba
MS
2376 FROM_ARRAY is 0 if we should init everything with INIT
2377 (i.e., every element initialized from INIT).
2378 FROM_ARRAY is 1 if we should index into INIT in parallel
2379 with initialization of DECL.
2380 FROM_ARRAY is 2 if we should index into INIT in parallel,
2381 but use assignment instead of initialization. */
2382
2383tree
b84f4651
MM
2384build_vec_init (tree base, tree maxindex, tree init,
2385 bool explicit_default_init_p,
2386 int from_array)
8d08fdba
MS
2387{
2388 tree rval;
8a72a046 2389 tree base2 = NULL_TREE;
8d08fdba 2390 tree size;
e833cb11 2391 tree itype = NULL_TREE;
8a72a046 2392 tree iterator;
f30efcb7
JM
2393 /* The type of the array. */
2394 tree atype = TREE_TYPE (base);
f1dedc31 2395 /* The type of an element in the array. */
f30efcb7 2396 tree type = TREE_TYPE (atype);
c8094d83 2397 /* The element type reached after removing all outer array
b5af3133
MM
2398 types. */
2399 tree inner_elt_type;
f1dedc31
MM
2400 /* The type of a pointer to an element in the array. */
2401 tree ptype;
2402 tree stmt_expr;
2403 tree compound_stmt;
2404 int destroy_temps;
f5984164 2405 tree try_block = NULL_TREE;
8a72a046 2406 int num_initialized_elts = 0;
2a3398e1 2407 bool is_global;
c8094d83 2408
a48cccea
JM
2409 if (TYPE_DOMAIN (atype))
2410 maxindex = array_type_nelts (atype);
2411
2412 if (maxindex == NULL_TREE || maxindex == error_mark_node)
8d08fdba
MS
2413 return error_mark_node;
2414
b84f4651
MM
2415 if (explicit_default_init_p)
2416 gcc_assert (!init);
2417
b5af3133 2418 inner_elt_type = strip_array_types (atype);
c8a3d889
AO
2419 if (init
2420 && (from_array == 2
c8094d83 2421 ? (!CLASS_TYPE_P (inner_elt_type)
b5af3133 2422 || !TYPE_HAS_COMPLEX_ASSIGN_REF (inner_elt_type))
c8a3d889 2423 : !TYPE_NEEDS_CONSTRUCTING (type))
f30efcb7
JM
2424 && ((TREE_CODE (init) == CONSTRUCTOR
2425 /* Don't do this if the CONSTRUCTOR might contain something
2426 that might throw and require us to clean up. */
4038c495 2427 && (VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (init))
b5af3133 2428 || ! TYPE_HAS_NONTRIVIAL_DESTRUCTOR (inner_elt_type)))
f30efcb7
JM
2429 || from_array))
2430 {
2431 /* Do non-default initialization of POD arrays resulting from
2432 brace-enclosed initializers. In this case, digest_init and
2433 store_constructor will handle the semantics for us. */
2434
f293ce4b 2435 stmt_expr = build2 (INIT_EXPR, atype, base, init);
f30efcb7
JM
2436 return stmt_expr;
2437 }
2438
2439 maxindex = cp_convert (ptrdiff_type_node, maxindex);
f1dedc31 2440 ptype = build_pointer_type (type);
8d08fdba 2441 size = size_in_bytes (type);
f30efcb7 2442 if (TREE_CODE (TREE_TYPE (base)) == ARRAY_TYPE)
0a72704b 2443 base = cp_convert (ptype, decay_conversion (base));
8d08fdba 2444
f1dedc31 2445 /* The code we are generating looks like:
303b7406 2446 ({
f1dedc31 2447 T* t1 = (T*) base;
f30efcb7 2448 T* rval = t1;
f1dedc31
MM
2449 ptrdiff_t iterator = maxindex;
2450 try {
4977bab6 2451 for (; iterator != -1; --iterator) {
f30efcb7
JM
2452 ... initialize *t1 ...
2453 ++t1;
4977bab6 2454 }
f1dedc31 2455 } catch (...) {
0cbd7506 2456 ... destroy elements that were constructed ...
f1dedc31 2457 }
303b7406
NS
2458 rval;
2459 })
c8094d83 2460
f1dedc31
MM
2461 We can omit the try and catch blocks if we know that the
2462 initialization will never throw an exception, or if the array
f30efcb7 2463 elements do not have destructors. We can omit the loop completely if
c8094d83 2464 the elements of the array do not have constructors.
f1dedc31
MM
2465
2466 We actually wrap the entire body of the above in a STMT_EXPR, for
c8094d83 2467 tidiness.
f1dedc31
MM
2468
2469 When copying from array to another, when the array elements have
2470 only trivial copy constructors, we should use __builtin_memcpy
2471 rather than generating a loop. That way, we could take advantage
2472 of whatever cleverness the back-end has for dealing with copies
2473 of blocks of memory. */
2474
2a3398e1 2475 is_global = begin_init_stmts (&stmt_expr, &compound_stmt);
f2c5f623 2476 destroy_temps = stmts_are_full_exprs_p ();
ae499cce 2477 current_stmt_tree ()->stmts_are_full_exprs_p = 0;
f30efcb7 2478 rval = get_temp_regvar (ptype, base);
f1dedc31 2479 base = get_temp_regvar (ptype, rval);
8a72a046 2480 iterator = get_temp_regvar (ptrdiff_type_node, maxindex);
8d08fdba 2481
8a72a046 2482 /* Protect the entire array initialization so that we can destroy
f30efcb7
JM
2483 the partially constructed array if an exception is thrown.
2484 But don't do this if we're assigning. */
2485 if (flag_exceptions && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
2486 && from_array != 2)
ed5511d9
MM
2487 {
2488 try_block = begin_try_block ();
ed5511d9 2489 }
8a72a046 2490
f30efcb7 2491 if (init != NULL_TREE && TREE_CODE (init) == CONSTRUCTOR)
8d08fdba 2492 {
f30efcb7
JM
2493 /* Do non-default initialization of non-POD arrays resulting from
2494 brace-enclosed initializers. */
4038c495
GB
2495 unsigned HOST_WIDE_INT idx;
2496 tree elt;
094fe153
JM
2497 from_array = 0;
2498
4038c495 2499 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (init), idx, elt)
8d08fdba 2500 {
f1dedc31 2501 tree baseref = build1 (INDIRECT_REF, type, base);
8d08fdba 2502
8a72a046 2503 num_initialized_elts++;
8d08fdba 2504
67c03833 2505 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
8a72a046 2506 if (IS_AGGR_TYPE (type) || TREE_CODE (type) == ARRAY_TYPE)
f1dedc31 2507 finish_expr_stmt (build_aggr_init (baseref, elt, 0));
8a72a046 2508 else
f1dedc31
MM
2509 finish_expr_stmt (build_modify_expr (baseref, NOP_EXPR,
2510 elt));
67c03833 2511 current_stmt_tree ()->stmts_are_full_exprs_p = 0;
8a72a046 2512
f30efcb7
JM
2513 finish_expr_stmt (build_unary_op (PREINCREMENT_EXPR, base, 0));
2514 finish_expr_stmt (build_unary_op (PREDECREMENT_EXPR, iterator, 0));
8d08fdba 2515 }
8d08fdba 2516
8a72a046
MM
2517 /* Clear out INIT so that we don't get confused below. */
2518 init = NULL_TREE;
8d08fdba 2519 }
8a72a046 2520 else if (from_array)
8d08fdba 2521 {
8a72a046
MM
2522 /* If initializing one array from another, initialize element by
2523 element. We rely upon the below calls the do argument
c8094d83 2524 checking. */
8a72a046
MM
2525 if (init)
2526 {
0a72704b 2527 base2 = decay_conversion (init);
8a72a046
MM
2528 itype = TREE_TYPE (base2);
2529 base2 = get_temp_regvar (itype, base2);
2530 itype = TREE_TYPE (itype);
2531 }
2532 else if (TYPE_LANG_SPECIFIC (type)
2533 && TYPE_NEEDS_CONSTRUCTING (type)
2534 && ! TYPE_HAS_DEFAULT_CONSTRUCTOR (type))
2535 {
2536 error ("initializer ends prematurely");
2537 return error_mark_node;
2538 }
2539 }
8d08fdba 2540
8a72a046
MM
2541 /* Now, default-initialize any remaining elements. We don't need to
2542 do that if a) the type does not need constructing, or b) we've
094fe153
JM
2543 already initialized all the elements.
2544
2545 We do need to keep going if we're copying an array. */
2546
2547 if (from_array
b84f4651 2548 || ((TYPE_NEEDS_CONSTRUCTING (type) || explicit_default_init_p)
665f2503 2549 && ! (host_integerp (maxindex, 0)
05bccae2 2550 && (num_initialized_elts
665f2503 2551 == tree_low_cst (maxindex, 0) + 1))))
8a72a046 2552 {
37e05cd5 2553 /* If the ITERATOR is equal to -1, then we don't have to loop;
8a72a046 2554 we've already initialized all the elements. */
4977bab6 2555 tree for_stmt;
f1dedc31 2556 tree elt_init;
b84f4651 2557 tree to;
f1dedc31 2558
4977bab6
ZW
2559 for_stmt = begin_for_stmt ();
2560 finish_for_init_stmt (for_stmt);
aab384ae
RG
2561 finish_for_cond (build2 (NE_EXPR, boolean_type_node, iterator,
2562 build_int_cst (TREE_TYPE (iterator), -1)),
4977bab6
ZW
2563 for_stmt);
2564 finish_for_expr (build_unary_op (PREDECREMENT_EXPR, iterator, 0),
2565 for_stmt);
8d08fdba 2566
b84f4651
MM
2567 to = build1 (INDIRECT_REF, type, base);
2568
8d08fdba
MS
2569 if (from_array)
2570 {
8d08fdba
MS
2571 tree from;
2572
2573 if (base2)
2574 from = build1 (INDIRECT_REF, itype, base2);
2575 else
2576 from = NULL_TREE;
2577
2578 if (from_array == 2)
f1dedc31 2579 elt_init = build_modify_expr (to, NOP_EXPR, from);
8d08fdba 2580 else if (TYPE_NEEDS_CONSTRUCTING (type))
f1dedc31 2581 elt_init = build_aggr_init (to, from, 0);
8d08fdba 2582 else if (from)
f1dedc31 2583 elt_init = build_modify_expr (to, NOP_EXPR, from);
8d08fdba 2584 else
8dc2b103 2585 gcc_unreachable ();
8d08fdba
MS
2586 }
2587 else if (TREE_CODE (type) == ARRAY_TYPE)
2588 {
2589 if (init != 0)
f30efcb7
JM
2590 sorry
2591 ("cannot initialize multi-dimensional array with initializer");
2592 elt_init = build_vec_init (build1 (INDIRECT_REF, type, base),
b84f4651
MM
2593 0, 0,
2594 /*explicit_default_init_p=*/false,
2595 0);
f1dedc31 2596 }
b84f4651
MM
2597 else if (!TYPE_NEEDS_CONSTRUCTING (type))
2598 elt_init = (build_modify_expr
2599 (to, INIT_EXPR,
2600 build_zero_init (type, size_one_node,
2601 /*static_storage_p=*/false)));
f1dedc31 2602 else
b84f4651 2603 elt_init = build_aggr_init (to, init, 0);
c8094d83 2604
2a3398e1
NS
2605 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
2606 finish_expr_stmt (elt_init);
2607 current_stmt_tree ()->stmts_are_full_exprs_p = 0;
8d08fdba 2608
f30efcb7 2609 finish_expr_stmt (build_unary_op (PREINCREMENT_EXPR, base, 0));
8d08fdba 2610 if (base2)
f30efcb7 2611 finish_expr_stmt (build_unary_op (PREINCREMENT_EXPR, base2, 0));
0fac6b0b 2612
4977bab6 2613 finish_for_stmt (for_stmt);
8d08fdba 2614 }
8a72a046
MM
2615
2616 /* Make sure to cleanup any partially constructed elements. */
f30efcb7
JM
2617 if (flag_exceptions && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
2618 && from_array != 2)
f1dedc31
MM
2619 {
2620 tree e;
b2153b98
KL
2621 tree m = cp_build_binary_op (MINUS_EXPR, maxindex, iterator);
2622
2623 /* Flatten multi-dimensional array since build_vec_delete only
2624 expects one-dimensional array. */
2625 if (TREE_CODE (type) == ARRAY_TYPE)
b5af3133
MM
2626 m = cp_build_binary_op (MULT_EXPR, m,
2627 array_type_nelts_total (type));
8d08fdba 2628
ed5511d9 2629 finish_cleanup_try_block (try_block);
c8094d83 2630 e = build_vec_delete_1 (rval, m,
b5af3133 2631 inner_elt_type, sfk_base_destructor,
f1dedc31 2632 /*use_global_delete=*/0);
f1dedc31
MM
2633 finish_cleanup (e, try_block);
2634 }
2635
303b7406
NS
2636 /* The value of the array initialization is the array itself, RVAL
2637 is a pointer to the first element. */
325c3691 2638 finish_stmt_expr_expr (rval, stmt_expr);
f1dedc31 2639
2a3398e1 2640 stmt_expr = finish_init_stmts (is_global, stmt_expr, compound_stmt);
303b7406 2641
04c06002 2642 /* Now convert make the result have the correct type. */
303b7406
NS
2643 atype = build_pointer_type (atype);
2644 stmt_expr = build1 (NOP_EXPR, atype, stmt_expr);
2645 stmt_expr = build_indirect_ref (stmt_expr, NULL);
c8094d83 2646
ae499cce 2647 current_stmt_tree ()->stmts_are_full_exprs_p = destroy_temps;
f1dedc31 2648 return stmt_expr;
8d08fdba
MS
2649}
2650
86f45d2c
MM
2651/* Call the DTOR_KIND destructor for EXP. FLAGS are as for
2652 build_delete. */
298d6f60
MM
2653
2654static tree
362efdc1 2655build_dtor_call (tree exp, special_function_kind dtor_kind, int flags)
298d6f60 2656{
86f45d2c 2657 tree name;
ee76b931 2658 tree fn;
86f45d2c
MM
2659 switch (dtor_kind)
2660 {
2661 case sfk_complete_destructor:
2662 name = complete_dtor_identifier;
2663 break;
2664
2665 case sfk_base_destructor:
2666 name = base_dtor_identifier;
2667 break;
2668
2669 case sfk_deleting_destructor:
2670 name = deleting_dtor_identifier;
2671 break;
2672
2673 default:
8dc2b103 2674 gcc_unreachable ();
86f45d2c 2675 }
ee76b931 2676 fn = lookup_fnfields (TREE_TYPE (exp), name, /*protect=*/2);
c8094d83 2677 return build_new_method_call (exp, fn,
ee76b931
MM
2678 /*args=*/NULL_TREE,
2679 /*conversion_path=*/NULL_TREE,
63c9a190
MM
2680 flags,
2681 /*fn_p=*/NULL);
298d6f60
MM
2682}
2683
8d08fdba
MS
2684/* Generate a call to a destructor. TYPE is the type to cast ADDR to.
2685 ADDR is an expression which yields the store to be destroyed.
86f45d2c
MM
2686 AUTO_DELETE is the name of the destructor to call, i.e., either
2687 sfk_complete_destructor, sfk_base_destructor, or
2688 sfk_deleting_destructor.
8d08fdba
MS
2689
2690 FLAGS is the logical disjunction of zero or more LOOKUP_
ade3dc07 2691 flags. See cp-tree.h for more info. */
e92cc029 2692
8d08fdba 2693tree
362efdc1
NN
2694build_delete (tree type, tree addr, special_function_kind auto_delete,
2695 int flags, int use_global_delete)
8d08fdba 2696{
8d08fdba 2697 tree expr;
8d08fdba
MS
2698
2699 if (addr == error_mark_node)
2700 return error_mark_node;
2701
2702 /* Can happen when CURRENT_EXCEPTION_OBJECT gets its type
2703 set to `error_mark_node' before it gets properly cleaned up. */
2704 if (type == error_mark_node)
2705 return error_mark_node;
2706
2707 type = TYPE_MAIN_VARIANT (type);
2708
2709 if (TREE_CODE (type) == POINTER_TYPE)
2710 {
b1e5b86c
GB
2711 bool complete_p = true;
2712
2986ae00 2713 type = TYPE_MAIN_VARIANT (TREE_TYPE (type));
8d08fdba
MS
2714 if (TREE_CODE (type) == ARRAY_TYPE)
2715 goto handle_array;
23b4deba 2716
b1e5b86c
GB
2717 /* We don't want to warn about delete of void*, only other
2718 incomplete types. Deleting other incomplete types
2719 invokes undefined behavior, but it is not ill-formed, so
2720 compile to something that would even do The Right Thing
2721 (TM) should the type have a trivial dtor and no delete
2722 operator. */
2723 if (!VOID_TYPE_P (type))
8d08fdba 2724 {
b1e5b86c
GB
2725 complete_type (type);
2726 if (!COMPLETE_TYPE_P (type))
2727 {
d4ee4d25 2728 warning (0, "possible problem detected in invocation of "
b1e5b86c
GB
2729 "delete operator:");
2730 cxx_incomplete_type_diagnostic (addr, type, 1);
061cae1f
NS
2731 inform ("neither the destructor nor the class-specific "
2732 "operator delete will be called, even if they are "
b1e5b86c
GB
2733 "declared when the class is defined.");
2734 complete_p = false;
2735 }
8d08fdba 2736 }
b1e5b86c
GB
2737 if (VOID_TYPE_P (type) || !complete_p || !IS_AGGR_TYPE (type))
2738 /* Call the builtin operator delete. */
2739 return build_builtin_delete_call (addr);
8d08fdba
MS
2740 if (TREE_SIDE_EFFECTS (addr))
2741 addr = save_expr (addr);
2986ae00 2742
f4f206f4 2743 /* Throw away const and volatile on target type of addr. */
6060a796 2744 addr = convert_force (build_pointer_type (type), addr, 0);
8d08fdba
MS
2745 }
2746 else if (TREE_CODE (type) == ARRAY_TYPE)
2747 {
2748 handle_array:
c8094d83 2749
c407792d
RK
2750 if (TYPE_DOMAIN (type) == NULL_TREE)
2751 {
8251199e 2752 error ("unknown array size in delete");
c407792d
RK
2753 return error_mark_node;
2754 }
8d08fdba 2755 return build_vec_delete (addr, array_type_nelts (type),
c7edeea3 2756 auto_delete, use_global_delete);
8d08fdba
MS
2757 }
2758 else
2759 {
2760 /* Don't check PROTECT here; leave that decision to the
2761 destructor. If the destructor is accessible, call it,
2762 else report error. */
2763 addr = build_unary_op (ADDR_EXPR, addr, 0);
2764 if (TREE_SIDE_EFFECTS (addr))
2765 addr = save_expr (addr);
2766
60696c53 2767 addr = convert_force (build_pointer_type (type), addr, 0);
8d08fdba
MS
2768 }
2769
50bc768d 2770 gcc_assert (IS_AGGR_TYPE (type));
8d08fdba 2771
834c6dff 2772 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
8d08fdba 2773 {
60696c53 2774 if (auto_delete != sfk_deleting_destructor)
8d08fdba
MS
2775 return void_zero_node;
2776
63c9a190
MM
2777 return build_op_delete_call (DELETE_EXPR, addr,
2778 cxx_sizeof_nowarn (type),
2779 use_global_delete,
2780 /*placement=*/NULL_TREE,
2781 /*alloc_fn=*/NULL_TREE);
8d08fdba 2782 }
ade3dc07 2783 else
8d08fdba 2784 {
700f8a87 2785 tree do_delete = NULL_TREE;
bd6dd845 2786 tree ifexp;
700f8a87 2787
9f4faeae
MM
2788 if (CLASSTYPE_LAZY_DESTRUCTOR (type))
2789 lazily_declare_fn (sfk_destructor, type);
ade3dc07 2790
52682a1b
MM
2791 /* For `::delete x', we must not use the deleting destructor
2792 since then we would not be sure to get the global `operator
2793 delete'. */
86f45d2c 2794 if (use_global_delete && auto_delete == sfk_deleting_destructor)
700f8a87 2795 {
1b4a93f7
MM
2796 /* We will use ADDR multiple times so we must save it. */
2797 addr = save_expr (addr);
c6002625 2798 /* Delete the object. */
86f45d2c
MM
2799 do_delete = build_builtin_delete_call (addr);
2800 /* Otherwise, treat this like a complete object destructor
2801 call. */
2802 auto_delete = sfk_complete_destructor;
700f8a87 2803 }
52682a1b
MM
2804 /* If the destructor is non-virtual, there is no deleting
2805 variant. Instead, we must explicitly call the appropriate
2806 `operator delete' here. */
2807 else if (!DECL_VIRTUAL_P (CLASSTYPE_DESTRUCTORS (type))
2808 && auto_delete == sfk_deleting_destructor)
2809 {
1b4a93f7
MM
2810 /* We will use ADDR multiple times so we must save it. */
2811 addr = save_expr (addr);
2812 /* Build the call. */
52682a1b
MM
2813 do_delete = build_op_delete_call (DELETE_EXPR,
2814 addr,
ea793912 2815 cxx_sizeof_nowarn (type),
5bd61841 2816 /*global_p=*/false,
63c9a190
MM
2817 /*placement=*/NULL_TREE,
2818 /*alloc_fn=*/NULL_TREE);
52682a1b
MM
2819 /* Call the complete object destructor. */
2820 auto_delete = sfk_complete_destructor;
2821 }
e3fe84e5
JM
2822 else if (auto_delete == sfk_deleting_destructor
2823 && TYPE_GETS_REG_DELETE (type))
2824 {
2825 /* Make sure we have access to the member op delete, even though
2826 we'll actually be calling it from the destructor. */
ea793912 2827 build_op_delete_call (DELETE_EXPR, addr, cxx_sizeof_nowarn (type),
63c9a190
MM
2828 /*global_p=*/false,
2829 /*placement=*/NULL_TREE,
2830 /*alloc_fn=*/NULL_TREE);
e3fe84e5 2831 }
8d08fdba 2832
3e411c3f 2833 expr = build_dtor_call (build_indirect_ref (addr, NULL),
1b4a93f7 2834 auto_delete, flags);
bd6dd845 2835 if (do_delete)
f293ce4b 2836 expr = build2 (COMPOUND_EXPR, void_type_node, expr, do_delete);
9e9ff709 2837
bd6dd845
MS
2838 if (flags & LOOKUP_DESTRUCTOR)
2839 /* Explicit destructor call; don't check for null pointer. */
2840 ifexp = integer_one_node;
8d08fdba 2841 else
bd6dd845 2842 /* Handle deleting a null pointer. */
ab76ca54 2843 ifexp = fold (cp_build_binary_op (NE_EXPR, addr, integer_zero_node));
8d08fdba 2844
bd6dd845 2845 if (ifexp != integer_one_node)
f293ce4b
RS
2846 expr = build3 (COND_EXPR, void_type_node,
2847 ifexp, expr, void_zero_node);
8d08fdba 2848
8d08fdba
MS
2849 return expr;
2850 }
ade3dc07 2851}
8d08fdba 2852
ade3dc07
JM
2853/* At the beginning of a destructor, push cleanups that will call the
2854 destructors for our base classes and members.
2a2480e1 2855
a29e1034 2856 Called from begin_destructor_body. */
8d08fdba 2857
ade3dc07 2858void
edaf3e03 2859push_base_cleanups (void)
ade3dc07 2860{
fa743e8c
NS
2861 tree binfo, base_binfo;
2862 int i;
ade3dc07
JM
2863 tree member;
2864 tree expr;
d4e6fecb 2865 VEC(tree,gc) *vbases;
8d08fdba 2866
ade3dc07 2867 /* Run destructors for all virtual baseclasses. */
5775a06a 2868 if (CLASSTYPE_VBASECLASSES (current_class_type))
ade3dc07 2869 {
ade3dc07 2870 tree cond = (condition_conversion
f293ce4b
RS
2871 (build2 (BIT_AND_EXPR, integer_type_node,
2872 current_in_charge_parm,
2873 integer_two_node)));
8d08fdba 2874
58c42dc2 2875 /* The CLASSTYPE_VBASECLASSES vector is in initialization
ade3dc07 2876 order, which is also the right order for pushing cleanups. */
9ba5ff0f
NS
2877 for (vbases = CLASSTYPE_VBASECLASSES (current_class_type), i = 0;
2878 VEC_iterate (tree, vbases, i, base_binfo); i++)
8d08fdba 2879 {
9ba5ff0f 2880 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (BINFO_TYPE (base_binfo)))
8d08fdba 2881 {
c8094d83 2882 expr = build_special_member_call (current_class_ref,
4ba126e4
MM
2883 base_dtor_identifier,
2884 NULL_TREE,
9ba5ff0f 2885 base_binfo,
c8094d83 2886 (LOOKUP_NORMAL
4ba126e4 2887 | LOOKUP_NONVIRTUAL));
f293ce4b
RS
2888 expr = build3 (COND_EXPR, void_type_node, cond,
2889 expr, void_zero_node);
ade3dc07 2890 finish_decl_cleanup (NULL_TREE, expr);
8d08fdba
MS
2891 }
2892 }
ade3dc07
JM
2893 }
2894
ade3dc07 2895 /* Take care of the remaining baseclasses. */
fa743e8c
NS
2896 for (binfo = TYPE_BINFO (current_class_type), i = 0;
2897 BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
ade3dc07 2898 {
ade3dc07 2899 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (BINFO_TYPE (base_binfo))
809e3e7f 2900 || BINFO_VIRTUAL_P (base_binfo))
ade3dc07
JM
2901 continue;
2902
c8094d83 2903 expr = build_special_member_call (current_class_ref,
4ba126e4 2904 base_dtor_identifier,
c8094d83 2905 NULL_TREE, base_binfo,
4ba126e4 2906 LOOKUP_NORMAL | LOOKUP_NONVIRTUAL);
ade3dc07
JM
2907 finish_decl_cleanup (NULL_TREE, expr);
2908 }
2909
2910 for (member = TYPE_FIELDS (current_class_type); member;
2911 member = TREE_CHAIN (member))
2912 {
17bbb839 2913 if (TREE_CODE (member) != FIELD_DECL || DECL_ARTIFICIAL (member))
ade3dc07
JM
2914 continue;
2915 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (member)))
2916 {
c8094d83
MS
2917 tree this_member = (build_class_member_access_expr
2918 (current_class_ref, member,
50ad9642
MM
2919 /*access_path=*/NULL_TREE,
2920 /*preserve_reference=*/false));
ade3dc07
JM
2921 tree this_type = TREE_TYPE (member);
2922 expr = build_delete (this_type, this_member,
2923 sfk_complete_destructor,
2924 LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL,
2925 0);
2926 finish_decl_cleanup (NULL_TREE, expr);
2927 }
8d08fdba
MS
2928 }
2929}
2930
8d08fdba
MS
2931/* Build a C++ vector delete expression.
2932 MAXINDEX is the number of elements to be deleted.
2933 ELT_SIZE is the nominal size of each element in the vector.
2934 BASE is the expression that should yield the store to be deleted.
8d08fdba
MS
2935 This function expands (or synthesizes) these calls itself.
2936 AUTO_DELETE_VEC says whether the container (vector) should be deallocated.
8d08fdba
MS
2937
2938 This also calls delete for virtual baseclasses of elements of the vector.
2939
2940 Update: MAXINDEX is no longer needed. The size can be extracted from the
2941 start of the vector for pointers, and from the type for arrays. We still
2942 use MAXINDEX for arrays because it happens to already have one of the
2943 values we'd have to extract. (We could use MAXINDEX with pointers to
2944 confirm the size, and trap if the numbers differ; not clear that it'd
2945 be worth bothering.) */
e92cc029 2946
8d08fdba 2947tree
362efdc1
NN
2948build_vec_delete (tree base, tree maxindex,
2949 special_function_kind auto_delete_vec, int use_global_delete)
8d08fdba 2950{
f30432d7 2951 tree type;
49b7aacb
JM
2952 tree rval;
2953 tree base_init = NULL_TREE;
8d08fdba 2954
f30432d7 2955 type = TREE_TYPE (base);
c407792d 2956
f30432d7 2957 if (TREE_CODE (type) == POINTER_TYPE)
8d08fdba
MS
2958 {
2959 /* Step back one from start of vector, and read dimension. */
834c6dff
MM
2960 tree cookie_addr;
2961
6742d92b 2962 if (TREE_SIDE_EFFECTS (base))
49b7aacb
JM
2963 {
2964 base_init = get_target_expr (base);
2965 base = TARGET_EXPR_SLOT (base_init);
2966 }
708cae97 2967 type = strip_array_types (TREE_TYPE (type));
f293ce4b
RS
2968 cookie_addr = build2 (MINUS_EXPR,
2969 build_pointer_type (sizetype),
2970 base,
2971 TYPE_SIZE_UNIT (sizetype));
3e411c3f 2972 maxindex = build_indirect_ref (cookie_addr, NULL);
8d08fdba 2973 }
f30432d7 2974 else if (TREE_CODE (type) == ARRAY_TYPE)
8d08fdba 2975 {
f4f206f4
KH
2976 /* Get the total number of things in the array, maxindex is a
2977 bad name. */
f30432d7 2978 maxindex = array_type_nelts_total (type);
834c6dff 2979 type = strip_array_types (type);
8d08fdba 2980 base = build_unary_op (ADDR_EXPR, base, 1);
6742d92b 2981 if (TREE_SIDE_EFFECTS (base))
49b7aacb
JM
2982 {
2983 base_init = get_target_expr (base);
2984 base = TARGET_EXPR_SLOT (base_init);
2985 }
8d08fdba
MS
2986 }
2987 else
2988 {
9e9ff709 2989 if (base != error_mark_node)
8251199e 2990 error ("type to vector delete is neither pointer or array type");
8d08fdba
MS
2991 return error_mark_node;
2992 }
8d08fdba 2993
49b7aacb 2994 rval = build_vec_delete_1 (base, maxindex, type, auto_delete_vec,
f30432d7 2995 use_global_delete);
49b7aacb 2996 if (base_init)
f293ce4b 2997 rval = build2 (COMPOUND_EXPR, TREE_TYPE (rval), base_init, rval);
49b7aacb
JM
2998
2999 return rval;
8d08fdba 3000}
This page took 2.721407 seconds and 5 git commands to generate.