]> gcc.gnu.org Git - gcc.git/blame - gcc/cp/init.c
Daily bump.
[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
1145static void
362efdc1 1146expand_default_init (tree binfo, tree true_exp, tree exp, tree init, int flags)
8d08fdba 1147{
fc378698 1148 tree type = TREE_TYPE (exp);
9eb71d8c 1149 tree ctor_name;
fc378698 1150
8d08fdba
MS
1151 /* It fails because there may not be a constructor which takes
1152 its own type as the first (or only parameter), but which does
1153 take other types via a conversion. So, if the thing initializing
1154 the expression is a unit element of type X, first try X(X&),
1155 followed by initialization by X. If neither of these work
1156 out, then look hard. */
1157 tree rval;
1158 tree parms;
8d08fdba 1159
277294d7 1160 if (init && TREE_CODE (init) != TREE_LIST
faf5394a
MS
1161 && (flags & LOOKUP_ONLYCONVERTING))
1162 {
1163 /* Base subobjects should only get direct-initialization. */
8dc2b103 1164 gcc_assert (true_exp == exp);
faf5394a 1165
c37dc68e
JM
1166 if (flags & DIRECT_BIND)
1167 /* Do nothing. We hit this in two cases: Reference initialization,
1168 where we aren't initializing a real variable, so we don't want
1169 to run a new constructor; and catching an exception, where we
1170 have already built up the constructor call so we could wrap it
1171 in an exception region. */;
92a62aad 1172 else if (BRACE_ENCLOSED_INITIALIZER_P (init))
8e3df2de 1173 {
b216f69b 1174 /* A brace-enclosed initializer for an aggregate. */
50bc768d 1175 gcc_assert (CP_AGGREGATE_TYPE_P (type));
4038c495 1176 init = digest_init (type, init);
8e3df2de 1177 }
c37dc68e 1178 else
37c46b43 1179 init = ocp_convert (type, init, CONV_IMPLICIT|CONV_FORCE_TEMP, flags);
faf5394a 1180
4e8dca1c
JM
1181 if (TREE_CODE (init) == MUST_NOT_THROW_EXPR)
1182 /* We need to protect the initialization of a catch parm with a
1183 call to terminate(), which shows up as a MUST_NOT_THROW_EXPR
c7ae64f2 1184 around the TARGET_EXPR for the copy constructor. See
4e8dca1c
JM
1185 initialize_handler_parm. */
1186 {
f293ce4b
RS
1187 TREE_OPERAND (init, 0) = build2 (INIT_EXPR, TREE_TYPE (exp), exp,
1188 TREE_OPERAND (init, 0));
4e8dca1c
JM
1189 TREE_TYPE (init) = void_type_node;
1190 }
c7ae64f2 1191 else
f293ce4b 1192 init = build2 (INIT_EXPR, TREE_TYPE (exp), exp, init);
c7ae64f2 1193 TREE_SIDE_EFFECTS (init) = 1;
f1dedc31 1194 finish_expr_stmt (init);
faf5394a
MS
1195 return;
1196 }
1197
b7484fbe
MS
1198 if (init == NULL_TREE
1199 || (TREE_CODE (init) == TREE_LIST && ! TREE_TYPE (init)))
8d08fdba
MS
1200 {
1201 parms = init;
db5ae43f
MS
1202 if (parms)
1203 init = TREE_VALUE (parms);
8d08fdba 1204 }
8d08fdba 1205 else
051e6fd7 1206 parms = build_tree_list (NULL_TREE, init);
8d08fdba 1207
9eb71d8c
MM
1208 if (true_exp == exp)
1209 ctor_name = complete_ctor_identifier;
1210 else
1211 ctor_name = base_ctor_identifier;
8d08fdba 1212
4ba126e4 1213 rval = build_special_member_call (exp, ctor_name, parms, binfo, flags);
25eb19ff 1214 if (TREE_SIDE_EFFECTS (rval))
e895113a 1215 finish_expr_stmt (convert_to_void (rval, NULL));
8d08fdba
MS
1216}
1217
1218/* This function is responsible for initializing EXP with INIT
1219 (if any).
1220
1221 BINFO is the binfo of the type for who we are performing the
1222 initialization. For example, if W is a virtual base class of A and B,
1223 and C : A, B.
1224 If we are initializing B, then W must contain B's W vtable, whereas
1225 were we initializing C, W must contain C's W vtable.
1226
1227 TRUE_EXP is nonzero if it is the true expression being initialized.
1228 In this case, it may be EXP, or may just contain EXP. The reason we
1229 need this is because if EXP is a base element of TRUE_EXP, we
1230 don't necessarily know by looking at EXP where its virtual
1231 baseclass fields should really be pointing. But we do know
1232 from TRUE_EXP. In constructors, we don't know anything about
1233 the value being initialized.
1234
9f880ef9
MM
1235 FLAGS is just passed to `build_new_method_call'. See that function
1236 for its description. */
8d08fdba
MS
1237
1238static void
362efdc1 1239expand_aggr_init_1 (tree binfo, tree true_exp, tree exp, tree init, int flags)
8d08fdba
MS
1240{
1241 tree type = TREE_TYPE (exp);
8d08fdba 1242
50bc768d
NS
1243 gcc_assert (init != error_mark_node && type != error_mark_node);
1244 gcc_assert (building_stmt_tree ());
8d08fdba
MS
1245
1246 /* Use a function returning the desired type to initialize EXP for us.
1247 If the function is a constructor, and its first argument is
1248 NULL_TREE, know that it was meant for us--just slide exp on
1249 in and expand the constructor. Constructors now come
1250 as TARGET_EXPRs. */
faf5394a
MS
1251
1252 if (init && TREE_CODE (exp) == VAR_DECL
3b2db49f 1253 && COMPOUND_LITERAL_P (init))
faf5394a 1254 {
f1dedc31 1255 /* If store_init_value returns NULL_TREE, the INIT has been
3b2db49f 1256 recorded as the DECL_INITIAL for EXP. That means there's
f1dedc31 1257 nothing more we have to do. */
25ebb82a
RH
1258 init = store_init_value (exp, init);
1259 if (init)
1260 finish_expr_stmt (init);
faf5394a
MS
1261 return;
1262 }
1263
9e9ff709
MS
1264 /* We know that expand_default_init can handle everything we want
1265 at this point. */
b370501f 1266 expand_default_init (binfo, true_exp, exp, init, flags);
8d08fdba
MS
1267}
1268
be99da77
MS
1269/* Report an error if TYPE is not a user-defined, aggregate type. If
1270 OR_ELSE is nonzero, give an error message. */
e92cc029 1271
be99da77 1272int
362efdc1 1273is_aggr_type (tree type, int or_else)
be99da77
MS
1274{
1275 if (type == error_mark_node)
1276 return 0;
1277
1278 if (! IS_AGGR_TYPE (type)
73b0fce8 1279 && TREE_CODE (type) != TEMPLATE_TYPE_PARM
a1281f45 1280 && TREE_CODE (type) != BOUND_TEMPLATE_TEMPLATE_PARM)
be99da77
MS
1281 {
1282 if (or_else)
15a7ee29 1283 error ("%qT is not an aggregate type", type);
be99da77
MS
1284 return 0;
1285 }
1286 return 1;
1287}
1288
8d08fdba 1289tree
362efdc1 1290get_type_value (tree name)
8d08fdba 1291{
8d08fdba
MS
1292 if (name == error_mark_node)
1293 return NULL_TREE;
1294
1295 if (IDENTIFIER_HAS_TYPE_VALUE (name))
1296 return IDENTIFIER_TYPE_VALUE (name);
8d08fdba
MS
1297 else
1298 return NULL_TREE;
1299}
051e6fd7 1300
a5ac359a
MM
1301/* Build a reference to a member of an aggregate. This is not a C++
1302 `&', but really something which can have its address taken, and
1303 then act as a pointer to member, for example TYPE :: FIELD can have
1304 its address taken by saying & TYPE :: FIELD. ADDRESS_P is true if
1305 this expression is the operand of "&".
8d08fdba
MS
1306
1307 @@ Prints out lousy diagnostics for operator <typename>
1308 @@ fields.
1309
51c184be 1310 @@ This function should be rewritten and placed in search.c. */
e92cc029 1311
8d08fdba 1312tree
d4f0f205 1313build_offset_ref (tree type, tree member, bool address_p)
8d08fdba 1314{
8d245821 1315 tree decl;
fc378698 1316 tree basebinfo = NULL_TREE;
8d08fdba 1317
5f311aec 1318 /* class templates can come in as TEMPLATE_DECLs here. */
d4f0f205
MM
1319 if (TREE_CODE (member) == TEMPLATE_DECL)
1320 return member;
93cdc044 1321
d4f0f205 1322 if (dependent_type_p (type) || type_dependent_expression_p (member))
3db45ab5 1323 return build_qualified_name (NULL_TREE, type, member,
02ed62dd 1324 /*template_p=*/false);
5566b478 1325
d4f0f205 1326 gcc_assert (TYPE_P (type));
c833d2be
NS
1327 if (! is_aggr_type (type, 1))
1328 return error_mark_node;
1329
d4f0f205
MM
1330 gcc_assert (DECL_P (member) || BASELINK_P (member));
1331 /* Callers should call mark_used before this point. */
1332 gcc_assert (!DECL_P (member) || TREE_USED (member));
be99da77 1333
d0f062fb 1334 if (!COMPLETE_TYPE_P (complete_type (type))
61a127b3 1335 && !TYPE_BEING_DEFINED (type))
8d08fdba 1336 {
d4f0f205 1337 error ("incomplete type %qT does not have member %qD", type, member);
a5ac359a
MM
1338 return error_mark_node;
1339 }
1340
d4f0f205 1341 /* Entities other than non-static members need no further
3db45ab5 1342 processing. */
a5ac359a 1343 if (TREE_CODE (member) == TYPE_DECL)
d4f0f205 1344 return member;
a5ac359a 1345 if (TREE_CODE (member) == VAR_DECL || TREE_CODE (member) == CONST_DECL)
d4f0f205 1346 return convert_from_reference (member);
a5ac359a
MM
1347
1348 if (TREE_CODE (member) == FIELD_DECL && DECL_C_BIT_FIELD (member))
1349 {
15a7ee29 1350 error ("invalid pointer to bit-field %qD", member);
a5ac359a
MM
1351 return error_mark_node;
1352 }
1353
d4f0f205
MM
1354 /* Set up BASEBINFO for member lookup. */
1355 decl = maybe_dummy_object (type, &basebinfo);
1356
aa52c1ff 1357 /* A lot of this logic is now handled in lookup_member. */
a5ac359a 1358 if (BASELINK_P (member))
8d08fdba 1359 {
8d08fdba 1360 /* Go from the TREE_BASELINK to the member function info. */
7304fcb4 1361 tree t = BASELINK_FUNCTIONS (member);
8d08fdba 1362
50ad9642 1363 if (TREE_CODE (t) != TEMPLATE_ID_EXPR && !really_overloaded_fn (t))
8d08fdba 1364 {
f4f206f4 1365 /* Get rid of a potential OVERLOAD around it. */
2c73f9f5
ML
1366 t = OVL_CURRENT (t);
1367
b54f5338
KL
1368 /* Unique functions are handled easily. */
1369
1370 /* For non-static member of base class, we need a special rule
1371 for access checking [class.protected]:
1372
1373 If the access is to form a pointer to member, the
1374 nested-name-specifier shall name the derived class
1375 (or any class derived from that class). */
1376 if (address_p && DECL_P (t)
1377 && DECL_NONSTATIC_MEMBER_P (t))
1378 perform_or_defer_access_check (TYPE_BINFO (type), t);
1379 else
1380 perform_or_defer_access_check (basebinfo, t);
1381
848b92e1
JM
1382 if (DECL_STATIC_FUNCTION_P (t))
1383 return t;
a5ac359a
MM
1384 member = t;
1385 }
1386 else
7304fcb4 1387 TREE_TYPE (member) = unknown_type_node;
8d08fdba 1388 }
b54f5338
KL
1389 else if (address_p && TREE_CODE (member) == FIELD_DECL)
1390 /* We need additional test besides the one in
1391 check_accessibility_of_qualified_id in case it is
1392 a pointer to non-static member. */
1393 perform_or_defer_access_check (TYPE_BINFO (type), member);
8d08fdba 1394
a5ac359a 1395 if (!address_p)
8d08fdba 1396 {
a5ac359a
MM
1397 /* If MEMBER is non-static, then the program has fallen afoul of
1398 [expr.prim]:
8d08fdba 1399
a5ac359a
MM
1400 An id-expression that denotes a nonstatic data member or
1401 nonstatic member function of a class can only be used:
8d08fdba 1402
a5ac359a
MM
1403 -- as part of a class member access (_expr.ref_) in which the
1404 object-expression refers to the member's class or a class
1405 derived from that class, or
b7484fbe 1406
a5ac359a
MM
1407 -- to form a pointer to member (_expr.unary.op_), or
1408
1409 -- in the body of a nonstatic member function of that class or
1410 of a class derived from that class (_class.mfct.nonstatic_), or
1411
1412 -- in a mem-initializer for a constructor for that class or for
1413 a class derived from that class (_class.base.init_). */
1414 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (member))
1415 {
e9525111
MM
1416 /* Build a representation of a the qualified name suitable
1417 for use as the operand to "&" -- even though the "&" is
1418 not actually present. */
f293ce4b 1419 member = build2 (OFFSET_REF, TREE_TYPE (member), decl, member);
a5ac359a
MM
1420 /* In Microsoft mode, treat a non-static member function as if
1421 it were a pointer-to-member. */
1422 if (flag_ms_extensions)
1423 {
a5ac359a
MM
1424 PTRMEM_OK_P (member) = 1;
1425 return build_unary_op (ADDR_EXPR, member, 0);
1426 }
c8094d83 1427 error ("invalid use of non-static member function %qD",
e9525111 1428 TREE_OPERAND (member, 1));
07471dfb 1429 return error_mark_node;
a5ac359a
MM
1430 }
1431 else if (TREE_CODE (member) == FIELD_DECL)
1432 {
15a7ee29 1433 error ("invalid use of non-static data member %qD", member);
a5ac359a
MM
1434 return error_mark_node;
1435 }
1436 return member;
1437 }
8d08fdba 1438
f293ce4b 1439 member = build2 (OFFSET_REF, TREE_TYPE (member), decl, member);
8d245821
MM
1440 PTRMEM_OK_P (member) = 1;
1441 return member;
8d08fdba
MS
1442}
1443
393e756d
MM
1444/* If DECL is a scalar enumeration constant or variable with a
1445 constant initializer, return the initializer (or, its initializers,
1446 recursively); otherwise, return DECL. If INTEGRAL_P, the
1447 initializer is only returned if DECL is an integral
1448 constant-expression. */
8d08fdba 1449
393e756d
MM
1450static tree
1451constant_value_1 (tree decl, bool integral_p)
8d08fdba 1452{
f513e31f 1453 while (TREE_CODE (decl) == CONST_DECL
3db45ab5 1454 || (integral_p
393e756d
MM
1455 ? DECL_INTEGRAL_CONSTANT_VAR_P (decl)
1456 : (TREE_CODE (decl) == VAR_DECL
1457 && CP_TYPE_CONST_NON_VOLATILE_P (TREE_TYPE (decl)))))
b794e321
MM
1458 {
1459 tree init;
2d22db1f
MM
1460 /* Static data members in template classes may have
1461 non-dependent initializers. References to such non-static
d174af6c 1462 data members are not value-dependent, so we must retrieve the
2d22db1f
MM
1463 initializer here. The DECL_INITIAL will have the right type,
1464 but will not have been folded because that would prevent us
1465 from performing all appropriate semantic checks at
1466 instantiation time. */
1467 if (DECL_CLASS_SCOPE_P (decl)
1468 && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl))
3db45ab5 1469 && uses_template_parms (CLASSTYPE_TI_ARGS
2d22db1f 1470 (DECL_CONTEXT (decl))))
d174af6c
MM
1471 {
1472 ++processing_template_decl;
1473 init = fold_non_dependent_expr (DECL_INITIAL (decl));
1474 --processing_template_decl;
1475 }
2d22db1f
MM
1476 else
1477 {
1478 /* If DECL is a static data member in a template
1479 specialization, we must instantiate it here. The
1480 initializer for the static data member is not processed
1481 until needed; we need it now. */
1482 mark_used (decl);
1483 init = DECL_INITIAL (decl);
1484 }
d174af6c 1485 if (init == error_mark_node)
1ac8104c 1486 return decl;
d174af6c 1487 if (!init
b794e321 1488 || !TREE_TYPE (init)
393e756d
MM
1489 || (integral_p
1490 ? !INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (init))
1491 : (!TREE_CONSTANT (init)
1492 /* Do not return an aggregate constant (of which
1493 string literals are a special case), as we do not
dd36d4e1 1494 want to make inadvertent copies of such entities,
393e756d
MM
1495 and we must be sure that their addresses are the
1496 same everywhere. */
1497 || TREE_CODE (init) == CONSTRUCTOR
1498 || TREE_CODE (init) == STRING_CST)))
b794e321 1499 break;
57b37fe3 1500 decl = unshare_expr (init);
b794e321 1501 }
8a784e4a
NS
1502 return decl;
1503}
a1652802 1504
393e756d
MM
1505/* If DECL is a CONST_DECL, or a constant VAR_DECL initialized by
1506 constant of integral or enumeration type, then return that value.
1507 These are those variables permitted in constant expressions by
1508 [5.19/1]. */
a1652802 1509
8a784e4a 1510tree
393e756d 1511integral_constant_value (tree decl)
8a784e4a 1512{
393e756d
MM
1513 return constant_value_1 (decl, /*integral_p=*/true);
1514}
c8094d83 1515
393e756d
MM
1516/* A more relaxed version of integral_constant_value, used by the
1517 common C/C++ code and by the C++ front-end for optimization
1518 purposes. */
1519
1520tree
1521decl_constant_value (tree decl)
1522{
3db45ab5 1523 return constant_value_1 (decl,
393e756d 1524 /*integral_p=*/processing_template_decl);
8d08fdba
MS
1525}
1526\f
8d08fdba
MS
1527/* Common subroutines of build_new and build_vec_delete. */
1528
c787dd82 1529/* Call the global __builtin_delete to delete ADDR. */
8d08fdba 1530
bd6dd845 1531static tree
362efdc1 1532build_builtin_delete_call (tree addr)
8d08fdba 1533{
a6ecf8b6 1534 mark_used (global_delete_fndecl);
0c11ada6 1535 return build_call (global_delete_fndecl, build_tree_list (NULL_TREE, addr));
8d08fdba
MS
1536}
1537\f
63c9a190
MM
1538/* Build and return a NEW_EXPR. If NELTS is non-NULL, TYPE[NELTS] is
1539 the type of the object being allocated; otherwise, it's just TYPE.
1540 INIT is the initializer, if any. USE_GLOBAL_NEW is true if the
1541 user explicitly wrote "::operator new". PLACEMENT, if non-NULL, is
1542 the TREE_LIST of arguments to be provided as arguments to a
1543 placement new operator. This routine performs no semantic checks;
1544 it just creates and returns a NEW_EXPR. */
a0d5fba7 1545
63c9a190
MM
1546static tree
1547build_raw_new_expr (tree placement, tree type, tree nelts, tree init,
1548 int use_global_new)
743f140d 1549{
63c9a190 1550 tree new_expr;
3db45ab5
MS
1551
1552 new_expr = build4 (NEW_EXPR, build_pointer_type (type), placement, type,
1553 nelts, init);
63c9a190
MM
1554 NEW_EXPR_USE_GLOBAL (new_expr) = use_global_new;
1555 TREE_SIDE_EFFECTS (new_expr) = 1;
1556
1557 return new_expr;
743f140d
PB
1558}
1559
63c9a190
MM
1560/* Generate code for a new-expression, including calling the "operator
1561 new" function, initializing the object, and, if an exception occurs
1562 during construction, cleaning up. The arguments are as for
1563 build_raw_new_expr. */
a0d5fba7 1564
834c6dff 1565static tree
63c9a190
MM
1566build_new_1 (tree placement, tree type, tree nelts, tree init,
1567 bool globally_qualified_p)
a0d5fba7 1568{
d746e87d
MM
1569 tree size, rval;
1570 /* True iff this is a call to "operator new[]" instead of just
c8094d83 1571 "operator new". */
d746e87d
MM
1572 bool array_p = false;
1573 /* True iff ARRAY_P is true and the bound of the array type is
1574 not necessarily a compile time constant. For example, VLA_P is
1575 true for "new int[f()]". */
1576 bool vla_p = false;
c8094d83 1577 /* The type being allocated. If ARRAY_P is true, this will be an
d746e87d
MM
1578 ARRAY_TYPE. */
1579 tree full_type;
1580 /* If ARRAY_P is true, the element type of the array. This is an
1581 never ARRAY_TYPE; for something like "new int[3][4]", the
1582 ELT_TYPE is "int". If ARRAY_P is false, this is the same type as
1583 FULL_TYPE. */
1584 tree elt_type;
f4f4610e
MM
1585 /* The type of the new-expression. (This type is always a pointer
1586 type.) */
1587 tree pointer_type;
78dcd41a 1588 /* A pointer type pointing to the FULL_TYPE. */
f4f4610e 1589 tree full_pointer_type;
a48cccea 1590 tree outer_nelts = NULL_TREE;
f4f4610e
MM
1591 tree alloc_call, alloc_expr;
1592 /* The address returned by the call to "operator new". This node is
1593 a VAR_DECL and is therefore reusable. */
1594 tree alloc_node;
46ff5047 1595 tree alloc_fn;
8b5e2ce4 1596 tree cookie_expr, init_expr;
089d6ea7 1597 int nothrow, check_new;
743f140d 1598 int use_java_new = 0;
834c6dff
MM
1599 /* If non-NULL, the number of extra bytes to allocate at the
1600 beginning of the storage allocated for an array-new expression in
1601 order to store the number of elements. */
1602 tree cookie_size = NULL_TREE;
3f41ffd8
MM
1603 /* True if the function we are calling is a placement allocation
1604 function. */
1605 bool placement_allocation_fn_p;
4f649415 1606 tree args = NULL_TREE;
f4f4610e 1607 /* True if the storage must be initialized, either by a constructor
34cd5ae7 1608 or due to an explicit new-initializer. */
f4f4610e
MM
1609 bool is_initialized;
1610 /* The address of the thing allocated, not including any cookie. In
1611 particular, if an array cookie is in use, DATA_ADDR is the
1612 address of the first array element. This node is a VAR_DECL, and
1613 is therefore reusable. */
1614 tree data_addr;
6de9cd9a 1615 tree init_preeval_expr = NULL_TREE;
a0d5fba7 1616
058b15c1 1617 if (nelts)
a0d5fba7 1618 {
9117ccad
RH
1619 tree index;
1620
058b15c1 1621 outer_nelts = nelts;
d746e87d 1622 array_p = true;
9117ccad 1623
c8094d83 1624 /* ??? The middle-end will error on us for building a VLA outside a
9117ccad
RH
1625 function context. Methinks that's not it's purvey. So we'll do
1626 our own VLA layout later. */
d746e87d 1627 vla_p = true;
a48cccea 1628 full_type = build_cplus_array_type (type, NULL_TREE);
9117ccad
RH
1629 index = convert (sizetype, nelts);
1630 index = size_binop (MINUS_EXPR, index, size_one_node);
1631 TYPE_DOMAIN (full_type) = build_index_type (index);
a0d5fba7 1632 }
f30efcb7 1633 else
d746e87d
MM
1634 {
1635 full_type = type;
1636 if (TREE_CODE (type) == ARRAY_TYPE)
1637 {
1638 array_p = true;
1639 nelts = array_type_nelts_top (type);
1640 outer_nelts = nelts;
1641 type = TREE_TYPE (type);
1642 }
1643 }
834c6dff 1644
63c9a190 1645 if (!complete_type_or_else (type, NULL_TREE))
5cc53d4e
MM
1646 return error_mark_node;
1647
8d08fdba
MS
1648 /* If our base type is an array, then make sure we know how many elements
1649 it has. */
d746e87d
MM
1650 for (elt_type = type;
1651 TREE_CODE (elt_type) == ARRAY_TYPE;
1652 elt_type = TREE_TYPE (elt_type))
c8094d83 1653 nelts = cp_build_binary_op (MULT_EXPR, nelts,
d746e87d 1654 array_type_nelts_top (elt_type));
5566b478 1655
d746e87d 1656 if (TREE_CODE (elt_type) == VOID_TYPE)
e1cd6e56 1657 {
15a7ee29 1658 error ("invalid type %<void%> for new");
e1cd6e56
MS
1659 return error_mark_node;
1660 }
1661
d746e87d 1662 if (abstract_virtuals_error (NULL_TREE, elt_type))
a7a64a77 1663 return error_mark_node;
8926095f 1664
d746e87d
MM
1665 is_initialized = (TYPE_NEEDS_CONSTRUCTING (elt_type) || init);
1666 if (CP_TYPE_CONST_P (elt_type) && !is_initialized)
f4f4610e 1667 {
d746e87d 1668 error ("uninitialized const in %<new%> of %q#T", elt_type);
f4f4610e
MM
1669 return error_mark_node;
1670 }
1671
d746e87d
MM
1672 size = size_in_bytes (elt_type);
1673 if (array_p)
9117ccad 1674 {
d746e87d
MM
1675 size = size_binop (MULT_EXPR, size, convert (sizetype, nelts));
1676 if (vla_p)
1677 {
1678 tree n, bitsize;
1679
1680 /* Do our own VLA layout. Setting TYPE_SIZE/_UNIT is
1681 necessary in order for the <INIT_EXPR <*foo> <CONSTRUCTOR
1682 ...>> to be valid. */
1683 TYPE_SIZE_UNIT (full_type) = size;
1684 n = convert (bitsizetype, nelts);
1685 bitsize = size_binop (MULT_EXPR, TYPE_SIZE (elt_type), n);
1686 TYPE_SIZE (full_type) = bitsize;
1687 }
9117ccad 1688 }
a28e3c7f 1689
63c9a190
MM
1690 alloc_fn = NULL_TREE;
1691
e92cc029 1692 /* Allocate the object. */
d746e87d 1693 if (! placement && TYPE_FOR_JAVA (elt_type))
743f140d 1694 {
63c9a190 1695 tree class_addr;
d746e87d 1696 tree class_decl = build_java_class_ref (elt_type);
8b60264b 1697 static const char alloc_name[] = "_Jv_AllocObject";
6de9cd9a 1698
a3d536f1
VR
1699 if (class_decl == error_mark_node)
1700 return error_mark_node;
1701
743f140d 1702 use_java_new = 1;
c8094d83 1703 if (!get_global_value_if_present (get_identifier (alloc_name),
63c9a190 1704 &alloc_fn))
b1e5b86c 1705 {
15a7ee29 1706 error ("call to Java constructor with %qs undefined", alloc_name);
6961a592
GB
1707 return error_mark_node;
1708 }
63c9a190 1709 else if (really_overloaded_fn (alloc_fn))
b1e5b86c 1710 {
63c9a190 1711 error ("%qD should never be overloaded", alloc_fn);
6961a592
GB
1712 return error_mark_node;
1713 }
63c9a190 1714 alloc_fn = OVL_CURRENT (alloc_fn);
743f140d 1715 class_addr = build1 (ADDR_EXPR, jclass_node, class_decl);
96790071 1716 alloc_call = (build_function_call
63c9a190 1717 (alloc_fn,
245c3c04 1718 build_tree_list (NULL_TREE, class_addr)));
743f140d 1719 }
8d08fdba
MS
1720 else
1721 {
834c6dff 1722 tree fnname;
9f880ef9 1723 tree fns;
834c6dff 1724
d746e87d 1725 fnname = ansi_opname (array_p ? VEC_NEW_EXPR : NEW_EXPR);
834c6dff 1726
c8094d83 1727 if (!globally_qualified_p
d746e87d
MM
1728 && CLASS_TYPE_P (elt_type)
1729 && (array_p
1730 ? TYPE_HAS_ARRAY_NEW_OPERATOR (elt_type)
1731 : TYPE_HAS_NEW_OPERATOR (elt_type)))
089d6ea7
MM
1732 {
1733 /* Use a class-specific operator new. */
1734 /* If a cookie is required, add some extra space. */
d746e87d 1735 if (array_p && TYPE_VEC_NEW_USES_COOKIE (elt_type))
089d6ea7 1736 {
d746e87d 1737 cookie_size = targetm.cxx.get_cookie_size (elt_type);
089d6ea7
MM
1738 size = size_binop (PLUS_EXPR, size, cookie_size);
1739 }
1740 /* Create the argument list. */
1741 args = tree_cons (NULL_TREE, size, placement);
9f880ef9 1742 /* Do name-lookup to find the appropriate operator. */
d746e87d 1743 fns = lookup_fnfields (elt_type, fnname, /*protect=*/2);
a85cb0d7
VR
1744 if (fns == NULL_TREE)
1745 {
1746 error ("no suitable %qD found in class %qT", fnname, elt_type);
1747 return error_mark_node;
1748 }
9f880ef9
MM
1749 if (TREE_CODE (fns) == TREE_LIST)
1750 {
15a7ee29 1751 error ("request for member %qD is ambiguous", fnname);
9f880ef9
MM
1752 print_candidates (fns);
1753 return error_mark_node;
1754 }
d746e87d 1755 alloc_call = build_new_method_call (build_dummy_object (elt_type),
9f880ef9
MM
1756 fns, args,
1757 /*conversion_path=*/NULL_TREE,
63c9a190
MM
1758 LOOKUP_NORMAL,
1759 &alloc_fn);
089d6ea7 1760 }
834c6dff 1761 else
089d6ea7
MM
1762 {
1763 /* Use a global operator new. */
125e6594 1764 /* See if a cookie might be required. */
d746e87d
MM
1765 if (array_p && TYPE_VEC_NEW_USES_COOKIE (elt_type))
1766 cookie_size = targetm.cxx.get_cookie_size (elt_type);
125e6594
MM
1767 else
1768 cookie_size = NULL_TREE;
1769
c8094d83 1770 alloc_call = build_operator_new_call (fnname, placement,
63c9a190
MM
1771 &size, &cookie_size,
1772 &alloc_fn);
089d6ea7 1773 }
8d08fdba
MS
1774 }
1775
96790071 1776 if (alloc_call == error_mark_node)
2bb5d995
JM
1777 return error_mark_node;
1778
63c9a190
MM
1779 gcc_assert (alloc_fn != NULL_TREE);
1780
a6111661
JM
1781 /* In the simple case, we can stop now. */
1782 pointer_type = build_pointer_type (type);
1783 if (!cookie_size && !is_initialized)
1784 return build_nop (pointer_type, alloc_call);
1785
1786 /* While we're working, use a pointer to the type we've actually
1787 allocated. Store the result of the call in a variable so that we
1788 can use it more than once. */
1789 full_pointer_type = build_pointer_type (full_type);
1790 alloc_expr = get_target_expr (build_nop (full_pointer_type, alloc_call));
1791 alloc_node = TARGET_EXPR_SLOT (alloc_expr);
1792
1793 /* Strip any COMPOUND_EXPRs from ALLOC_CALL. */
c8094d83 1794 while (TREE_CODE (alloc_call) == COMPOUND_EXPR)
a6111661 1795 alloc_call = TREE_OPERAND (alloc_call, 1);
089d6ea7 1796
3f41ffd8
MM
1797 /* Now, check to see if this function is actually a placement
1798 allocation function. This can happen even when PLACEMENT is NULL
1799 because we might have something like:
1800
1801 struct S { void* operator new (size_t, int i = 0); };
1802
1803 A call to `new S' will get this allocation function, even though
1804 there is no explicit placement argument. If there is more than
1805 one argument, or there are variable arguments, then this is a
1806 placement allocation function. */
c8094d83
MS
1807 placement_allocation_fn_p
1808 = (type_num_arguments (TREE_TYPE (alloc_fn)) > 1
46ff5047 1809 || varargs_function_p (alloc_fn));
96790071 1810
a6111661
JM
1811 /* Preevaluate the placement args so that we don't reevaluate them for a
1812 placement delete. */
1813 if (placement_allocation_fn_p)
1814 {
6de9cd9a
DN
1815 tree inits;
1816 stabilize_call (alloc_call, &inits);
a6111661 1817 if (inits)
f293ce4b
RS
1818 alloc_expr = build2 (COMPOUND_EXPR, TREE_TYPE (alloc_expr), inits,
1819 alloc_expr);
a6111661
JM
1820 }
1821
047f64a3
JM
1822 /* unless an allocation function is declared with an empty excep-
1823 tion-specification (_except.spec_), throw(), it indicates failure to
1824 allocate storage by throwing a bad_alloc exception (clause _except_,
1825 _lib.bad.alloc_); it returns a non-null pointer otherwise If the allo-
1826 cation function is declared with an empty exception-specification,
1827 throw(), it returns null to indicate failure to allocate storage and a
1828 non-null pointer otherwise.
1829
1830 So check for a null exception spec on the op new we just called. */
1831
46ff5047 1832 nothrow = TYPE_NOTHROW_P (TREE_TYPE (alloc_fn));
743f140d 1833 check_new = (flag_check_new || nothrow) && ! use_java_new;
047f64a3 1834
089d6ea7 1835 if (cookie_size)
8d08fdba 1836 {
96790071 1837 tree cookie;
46e995e0 1838 tree cookie_ptr;
f4f4610e
MM
1839
1840 /* Adjust so we're pointing to the start of the object. */
f293ce4b
RS
1841 data_addr = get_target_expr (build2 (PLUS_EXPR, full_pointer_type,
1842 alloc_node, cookie_size));
96790071 1843
834c6dff 1844 /* Store the number of bytes allocated so that we can know how
3461fba7
NS
1845 many elements to destroy later. We use the last sizeof
1846 (size_t) bytes to store the number of elements. */
f293ce4b
RS
1847 cookie_ptr = build2 (MINUS_EXPR, build_pointer_type (sizetype),
1848 data_addr, size_in_bytes (sizetype));
46e995e0 1849 cookie = build_indirect_ref (cookie_ptr, NULL);
1f84ec23 1850
f293ce4b 1851 cookie_expr = build2 (MODIFY_EXPR, sizetype, cookie, nelts);
46e995e0
PB
1852
1853 if (targetm.cxx.cookie_has_size ())
1854 {
1855 /* Also store the element size. */
f293ce4b
RS
1856 cookie_ptr = build2 (MINUS_EXPR, build_pointer_type (sizetype),
1857 cookie_ptr, size_in_bytes (sizetype));
46e995e0 1858 cookie = build_indirect_ref (cookie_ptr, NULL);
f293ce4b 1859 cookie = build2 (MODIFY_EXPR, sizetype, cookie,
d746e87d 1860 size_in_bytes(elt_type));
f293ce4b
RS
1861 cookie_expr = build2 (COMPOUND_EXPR, TREE_TYPE (cookie_expr),
1862 cookie, cookie_expr);
46e995e0 1863 }
8b5e2ce4 1864 data_addr = TARGET_EXPR_SLOT (data_addr);
8d08fdba 1865 }
96790071 1866 else
8b5e2ce4
JM
1867 {
1868 cookie_expr = NULL_TREE;
1869 data_addr = alloc_node;
1870 }
8d08fdba 1871
6de9cd9a
DN
1872 /* Now initialize the allocated object. Note that we preevaluate the
1873 initialization expression, apart from the actual constructor call or
1874 assignment--we do this because we want to delay the allocation as long
1875 as possible in order to minimize the size of the exception region for
1876 placement delete. */
f4f4610e 1877 if (is_initialized)
8d08fdba 1878 {
6de9cd9a
DN
1879 bool stable;
1880
f4f4610e 1881 init_expr = build_indirect_ref (data_addr, NULL);
f30efcb7 1882
d746e87d 1883 if (array_p)
6de9cd9a 1884 {
b84f4651
MM
1885 bool explicit_default_init_p = false;
1886
1887 if (init == void_zero_node)
1888 {
1889 init = NULL_TREE;
1890 explicit_default_init_p = true;
1891 }
1892 else if (init)
1893 pedwarn ("ISO C++ forbids initialization in array new");
1894
6de9cd9a
DN
1895 init_expr
1896 = build_vec_init (init_expr,
1897 cp_build_binary_op (MINUS_EXPR, outer_nelts,
1898 integer_one_node),
3db45ab5
MS
1899 init,
1900 explicit_default_init_p,
b84f4651 1901 /*from_array=*/0);
6de9cd9a
DN
1902
1903 /* An array initialization is stable because the initialization
1904 of each element is a full-expression, so the temporaries don't
1905 leak out. */
1906 stable = true;
1907 }
f30efcb7 1908 else
8d08fdba 1909 {
b84f4651
MM
1910 if (init == void_zero_node)
1911 init = build_default_init (full_type, nelts);
6de9cd9a 1912
b84f4651
MM
1913 if (TYPE_NEEDS_CONSTRUCTING (type))
1914 {
1915 init_expr = build_special_member_call (init_expr,
1916 complete_ctor_identifier,
1917 init, elt_type,
1918 LOOKUP_NORMAL);
1919 stable = stabilize_init (init_expr, &init_preeval_expr);
1920 }
8dc2b103 1921 else
b84f4651
MM
1922 {
1923 /* We are processing something like `new int (10)', which
1924 means allocate an int, and initialize it with 10. */
3db45ab5 1925
b84f4651 1926 if (TREE_CODE (init) == TREE_LIST)
3db45ab5 1927 init = build_x_compound_expr_from_list (init,
b84f4651
MM
1928 "new initializer");
1929 else
1930 gcc_assert (TREE_CODE (init) != CONSTRUCTOR
1931 || TREE_TYPE (init) != NULL_TREE);
3db45ab5 1932
b84f4651
MM
1933 init_expr = build_modify_expr (init_expr, INIT_EXPR, init);
1934 stable = stabilize_init (init_expr, &init_preeval_expr);
1935 }
96790071
JM
1936 }
1937
1938 if (init_expr == error_mark_node)
1939 return error_mark_node;
1f109f0f 1940
20c39572
JM
1941 /* If any part of the object initialization terminates by throwing an
1942 exception and a suitable deallocation function can be found, the
1943 deallocation function is called to free the memory in which the
1944 object was being constructed, after which the exception continues
1945 to propagate in the context of the new-expression. If no
1946 unambiguous matching deallocation function can be found,
1947 propagating the exception does not cause the object's memory to be
1948 freed. */
96790071 1949 if (flag_exceptions && ! use_java_new)
1f109f0f 1950 {
d746e87d 1951 enum tree_code dcode = array_p ? VEC_DELETE_EXPR : DELETE_EXPR;
96790071 1952 tree cleanup;
a7d87521 1953
5355deec 1954 /* The Standard is unclear here, but the right thing to do
f4f4610e
MM
1955 is to use the same method for finding deallocation
1956 functions that we use for finding allocation functions. */
c8094d83 1957 cleanup = build_op_delete_call (dcode, alloc_node, size,
5bd61841 1958 globally_qualified_p,
c8094d83 1959 (placement_allocation_fn_p
63c9a190
MM
1960 ? alloc_call : NULL_TREE),
1961 (placement_allocation_fn_p
1962 ? alloc_fn : NULL_TREE));
2bb14213 1963
6de9cd9a
DN
1964 if (!cleanup)
1965 /* We're done. */;
1966 else if (stable)
1967 /* This is much simpler if we were able to preevaluate all of
1968 the arguments to the constructor call. */
f293ce4b
RS
1969 init_expr = build2 (TRY_CATCH_EXPR, void_type_node,
1970 init_expr, cleanup);
6de9cd9a
DN
1971 else
1972 /* Ack! First we allocate the memory. Then we set our sentry
1973 variable to true, and expand a cleanup that deletes the
1974 memory if sentry is true. Then we run the constructor, and
1975 finally clear the sentry.
1976
1977 We need to do this because we allocate the space first, so
1978 if there are any temporaries with cleanups in the
1979 constructor args and we weren't able to preevaluate them, we
1980 need this EH region to extend until end of full-expression
1981 to preserve nesting. */
da4768fe 1982 {
96790071 1983 tree end, sentry, begin;
2face519
JM
1984
1985 begin = get_target_expr (boolean_true_node);
659e5a7a 1986 CLEANUP_EH_ONLY (begin) = 1;
2face519 1987
659e5a7a
JM
1988 sentry = TARGET_EXPR_SLOT (begin);
1989
1990 TARGET_EXPR_CLEANUP (begin)
f293ce4b
RS
1991 = build3 (COND_EXPR, void_type_node, sentry,
1992 cleanup, void_zero_node);
2face519 1993
f293ce4b
RS
1994 end = build2 (MODIFY_EXPR, TREE_TYPE (sentry),
1995 sentry, boolean_false_node);
2face519 1996
96790071 1997 init_expr
f293ce4b
RS
1998 = build2 (COMPOUND_EXPR, void_type_node, begin,
1999 build2 (COMPOUND_EXPR, void_type_node, init_expr,
2000 end));
da4768fe 2001 }
c8094d83 2002
1f109f0f 2003 }
f4f4610e 2004 }
8b5e2ce4
JM
2005 else
2006 init_expr = NULL_TREE;
2007
2008 /* Now build up the return value in reverse order. */
96790071 2009
8b5e2ce4 2010 rval = data_addr;
2face519 2011
8b5e2ce4 2012 if (init_expr)
f293ce4b 2013 rval = build2 (COMPOUND_EXPR, TREE_TYPE (rval), init_expr, rval);
8b5e2ce4 2014 if (cookie_expr)
f293ce4b 2015 rval = build2 (COMPOUND_EXPR, TREE_TYPE (rval), cookie_expr, rval);
8b5e2ce4
JM
2016
2017 if (rval == alloc_node)
2018 /* If we don't have an initializer or a cookie, strip the TARGET_EXPR
2019 and return the call (which doesn't need to be adjusted). */
2020 rval = TARGET_EXPR_INITIAL (alloc_expr);
2021 else
d18c083e 2022 {
8b5e2ce4
JM
2023 if (check_new)
2024 {
2025 tree ifexp = cp_build_binary_op (NE_EXPR, alloc_node,
2026 integer_zero_node);
2027 rval = build_conditional_expr (ifexp, rval, alloc_node);
2028 }
d18c083e 2029
8b5e2ce4
JM
2030 /* Perform the allocation before anything else, so that ALLOC_NODE
2031 has been initialized before we start using it. */
f293ce4b 2032 rval = build2 (COMPOUND_EXPR, TREE_TYPE (rval), alloc_expr, rval);
8b5e2ce4 2033 }
51c184be 2034
6de9cd9a 2035 if (init_preeval_expr)
f293ce4b 2036 rval = build2 (COMPOUND_EXPR, TREE_TYPE (rval), init_preeval_expr, rval);
6de9cd9a 2037
f4f4610e 2038 /* Convert to the final type. */
d04a575f
MM
2039 rval = build_nop (pointer_type, rval);
2040
2041 /* A new-expression is never an lvalue. */
41990f96 2042 gcc_assert (!lvalue_p (rval));
d04a575f
MM
2043
2044 return rval;
8d08fdba 2045}
63c9a190
MM
2046
2047/* Generate a representation for a C++ "new" expression. PLACEMENT is
2048 a TREE_LIST of placement-new arguments (or NULL_TREE if none). If
2049 NELTS is NULL, TYPE is the type of the storage to be allocated. If
2050 NELTS is not NULL, then this is an array-new allocation; TYPE is
2051 the type of the elements in the array and NELTS is the number of
2052 elements in the array. INIT, if non-NULL, is the initializer for
2053 the new object, or void_zero_node to indicate an initializer of
2054 "()". If USE_GLOBAL_NEW is true, then the user explicitly wrote
2055 "::new" rather than just "new". */
2056
2057tree
2058build_new (tree placement, tree type, tree nelts, tree init,
2059 int use_global_new)
2060{
2061 tree rval;
2062 tree orig_placement;
2063 tree orig_nelts;
2064 tree orig_init;
2065
d5d1d256 2066 if (placement == error_mark_node || type == error_mark_node)
63c9a190
MM
2067 return error_mark_node;
2068
2069 orig_placement = placement;
2070 orig_nelts = nelts;
2071 orig_init = init;
2072
2073 if (processing_template_decl)
2074 {
2075 if (dependent_type_p (type)
2076 || any_type_dependent_arguments_p (placement)
2077 || (nelts && type_dependent_expression_p (nelts))
2078 || (init != void_zero_node
2079 && any_type_dependent_arguments_p (init)))
2080 return build_raw_new_expr (placement, type, nelts, init,
2081 use_global_new);
2082 placement = build_non_dependent_args (placement);
2083 if (nelts)
2084 nelts = build_non_dependent_expr (nelts);
2085 if (init != void_zero_node)
2086 init = build_non_dependent_args (init);
2087 }
2088
2089 if (nelts)
2090 {
2091 if (!build_expr_type_conversion (WANT_INT | WANT_ENUM, nelts, false))
2092 pedwarn ("size in array new must have integral type");
b655f214
MM
2093 nelts = cp_save_expr (cp_convert (sizetype, nelts));
2094 /* It is valid to allocate a zero-element array:
2095
2096 [expr.new]
2097
2098 When the value of the expression in a direct-new-declarator
2099 is zero, the allocation function is called to allocate an
2100 array with no elements. The pointer returned by the
2101 new-expression is non-null. [Note: If the library allocation
2102 function is called, the pointer returned is distinct from the
3db45ab5 2103 pointer to any other object.]
b655f214
MM
2104
2105 However, that is not generally useful, so we issue a
2106 warning. */
2107 if (integer_zerop (nelts))
2108 warning (0, "allocating zero-element array");
63c9a190
MM
2109 }
2110
2111 /* ``A reference cannot be created by the new operator. A reference
2112 is not an object (8.2.2, 8.4.3), so a pointer to it could not be
2113 returned by new.'' ARM 5.3.3 */
2114 if (TREE_CODE (type) == REFERENCE_TYPE)
2115 {
2116 error ("new cannot be applied to a reference type");
2117 type = TREE_TYPE (type);
2118 }
2119
2120 if (TREE_CODE (type) == FUNCTION_TYPE)
2121 {
2122 error ("new cannot be applied to a function type");
2123 return error_mark_node;
2124 }
2125
2126 rval = build_new_1 (placement, type, nelts, init, use_global_new);
2127 if (rval == error_mark_node)
2128 return error_mark_node;
2129
2130 if (processing_template_decl)
2131 return build_raw_new_expr (orig_placement, type, orig_nelts, orig_init,
2132 use_global_new);
2133
2134 /* Wrap it in a NOP_EXPR so warn_if_unused_value doesn't complain. */
2135 rval = build1 (NOP_EXPR, TREE_TYPE (rval), rval);
2136 TREE_NO_WARNING (rval) = 1;
2137
2138 return rval;
2139}
2140
2141/* Given a Java class, return a decl for the corresponding java.lang.Class. */
2142
2143tree
2144build_java_class_ref (tree type)
2145{
2146 tree name = NULL_TREE, class_decl;
2147 static tree CL_suffix = NULL_TREE;
2148 if (CL_suffix == NULL_TREE)
2149 CL_suffix = get_identifier("class$");
2150 if (jclass_node == NULL_TREE)
2151 {
2152 jclass_node = IDENTIFIER_GLOBAL_VALUE (get_identifier ("jclass"));
2153 if (jclass_node == NULL_TREE)
a3d536f1
VR
2154 {
2155 error ("call to Java constructor, while %<jclass%> undefined");
2156 return error_mark_node;
2157 }
63c9a190
MM
2158 jclass_node = TREE_TYPE (jclass_node);
2159 }
2160
2161 /* Mangle the class$ field. */
2162 {
2163 tree field;
2164 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
2165 if (DECL_NAME (field) == CL_suffix)
2166 {
2167 mangle_decl (field);
2168 name = DECL_ASSEMBLER_NAME (field);
2169 break;
2170 }
2171 if (!field)
a3d536f1
VR
2172 {
2173 error ("can't find %<class$%> in %qT", type);
2174 return error_mark_node;
2175 }
2176 }
63c9a190
MM
2177
2178 class_decl = IDENTIFIER_GLOBAL_VALUE (name);
2179 if (class_decl == NULL_TREE)
2180 {
2181 class_decl = build_decl (VAR_DECL, name, TREE_TYPE (jclass_node));
2182 TREE_STATIC (class_decl) = 1;
2183 DECL_EXTERNAL (class_decl) = 1;
2184 TREE_PUBLIC (class_decl) = 1;
2185 DECL_ARTIFICIAL (class_decl) = 1;
2186 DECL_IGNORED_P (class_decl) = 1;
2187 pushdecl_top_level (class_decl);
2188 make_decl_rtl (class_decl);
2189 }
2190 return class_decl;
2191}
8d08fdba 2192\f
f30432d7 2193static tree
362efdc1
NN
2194build_vec_delete_1 (tree base, tree maxindex, tree type,
2195 special_function_kind auto_delete_vec, int use_global_delete)
f30432d7
MS
2196{
2197 tree virtual_size;
e92cc029 2198 tree ptype = build_pointer_type (type = complete_type (type));
f30432d7
MS
2199 tree size_exp = size_in_bytes (type);
2200
2201 /* Temporary variables used by the loop. */
2202 tree tbase, tbase_init;
2203
2204 /* This is the body of the loop that implements the deletion of a
2205 single element, and moves temp variables to next elements. */
2206 tree body;
2207
2208 /* This is the LOOP_EXPR that governs the deletion of the elements. */
c7b62f14 2209 tree loop = 0;
f30432d7
MS
2210
2211 /* This is the thing that governs what to do after the loop has run. */
2212 tree deallocate_expr = 0;
2213
2214 /* This is the BIND_EXPR which holds the outermost iterator of the
2215 loop. It is convenient to set this variable up and test it before
2216 executing any other code in the loop.
2217 This is also the containing expression returned by this function. */
2218 tree controller = NULL_TREE;
2219
b2153b98 2220 /* We should only have 1-D arrays here. */
8dc2b103 2221 gcc_assert (TREE_CODE (type) != ARRAY_TYPE);
b2153b98 2222
834c6dff 2223 if (! IS_AGGR_TYPE (type) || TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
c7b62f14 2224 goto no_destructor;
f30432d7 2225
708cae97 2226 /* The below is short by the cookie size. */
fed3cef0
RK
2227 virtual_size = size_binop (MULT_EXPR, size_exp,
2228 convert (sizetype, maxindex));
f30432d7 2229
46e8c075 2230 tbase = create_temporary_var (ptype);
f30432d7 2231 tbase_init = build_modify_expr (tbase, NOP_EXPR,
7866705a
SB
2232 fold_build2 (PLUS_EXPR, ptype,
2233 base,
2234 virtual_size));
f30432d7 2235 DECL_REGISTER (tbase) = 1;
f293ce4b
RS
2236 controller = build3 (BIND_EXPR, void_type_node, tbase,
2237 NULL_TREE, NULL_TREE);
f30432d7 2238 TREE_SIDE_EFFECTS (controller) = 1;
f30432d7 2239
f293ce4b 2240 body = build1 (EXIT_EXPR, void_type_node,
5cd88d68
RS
2241 build2 (EQ_EXPR, boolean_type_node, tbase,
2242 fold_convert (ptype, base)));
c7b62f14
NS
2243 body = build_compound_expr
2244 (body, build_modify_expr (tbase, NOP_EXPR,
f293ce4b 2245 build2 (MINUS_EXPR, ptype, tbase, size_exp)));
c7b62f14
NS
2246 body = build_compound_expr
2247 (body, build_delete (ptype, tbase, sfk_complete_destructor,
2248 LOOKUP_NORMAL|LOOKUP_DESTRUCTOR, 1));
f30432d7 2249
f293ce4b 2250 loop = build1 (LOOP_EXPR, void_type_node, body);
c7b62f14 2251 loop = build_compound_expr (tbase_init, loop);
f30432d7
MS
2252
2253 no_destructor:
2254 /* If the delete flag is one, or anything else with the low bit set,
2255 delete the storage. */
86f45d2c 2256 if (auto_delete_vec != sfk_base_destructor)
f30432d7
MS
2257 {
2258 tree base_tbd;
2259
708cae97 2260 /* The below is short by the cookie size. */
fed3cef0
RK
2261 virtual_size = size_binop (MULT_EXPR, size_exp,
2262 convert (sizetype, maxindex));
f30432d7
MS
2263
2264 if (! TYPE_VEC_NEW_USES_COOKIE (type))
2265 /* no header */
2266 base_tbd = base;
2267 else
2268 {
834c6dff
MM
2269 tree cookie_size;
2270
46e995e0 2271 cookie_size = targetm.cxx.get_cookie_size (type);
c8094d83 2272 base_tbd
834c6dff 2273 = cp_convert (ptype,
ab76ca54 2274 cp_build_binary_op (MINUS_EXPR,
c8094d83 2275 cp_convert (string_type_node,
ab76ca54
MM
2276 base),
2277 cookie_size));
e92cc029 2278 /* True size with header. */
834c6dff 2279 virtual_size = size_binop (PLUS_EXPR, virtual_size, cookie_size);
f30432d7 2280 }
86f45d2c
MM
2281
2282 if (auto_delete_vec == sfk_deleting_destructor)
1c71c747
VR
2283 deallocate_expr = build_op_delete_call (VEC_DELETE_EXPR,
2284 base_tbd, virtual_size,
2285 use_global_delete & 1,
3db45ab5 2286 /*placement=*/NULL_TREE,
63c9a190 2287 /*alloc_fn=*/NULL_TREE);
f30432d7
MS
2288 }
2289
c7b62f14
NS
2290 body = loop;
2291 if (!deallocate_expr)
2292 ;
2293 else if (!body)
2294 body = deallocate_expr;
f30432d7 2295 else
c7b62f14 2296 body = build_compound_expr (body, deallocate_expr);
c8094d83 2297
c7b62f14
NS
2298 if (!body)
2299 body = integer_zero_node;
c8094d83 2300
f30432d7 2301 /* Outermost wrapper: If pointer is null, punt. */
7866705a
SB
2302 body = fold_build3 (COND_EXPR, void_type_node,
2303 fold_build2 (NE_EXPR, boolean_type_node, base,
2304 convert (TREE_TYPE (base),
2305 integer_zero_node)),
2306 body, integer_zero_node);
f30432d7
MS
2307 body = build1 (NOP_EXPR, void_type_node, body);
2308
2309 if (controller)
2310 {
2311 TREE_OPERAND (controller, 1) = body;
4e8dca1c 2312 body = controller;
f30432d7 2313 }
4e8dca1c
JM
2314
2315 if (TREE_CODE (base) == SAVE_EXPR)
2316 /* Pre-evaluate the SAVE_EXPR outside of the BIND_EXPR. */
f293ce4b 2317 body = build2 (COMPOUND_EXPR, void_type_node, base, body);
4e8dca1c 2318
8d245821 2319 return convert_to_void (body, /*implicit=*/NULL);
f30432d7
MS
2320}
2321
c8094d83 2322/* Create an unnamed variable of the indicated TYPE. */
c395453c 2323
f1dedc31 2324tree
362efdc1 2325create_temporary_var (tree type)
8a72a046 2326{
f1dedc31 2327 tree decl;
c8094d83 2328
f1dedc31
MM
2329 decl = build_decl (VAR_DECL, NULL_TREE, type);
2330 TREE_USED (decl) = 1;
2331 DECL_ARTIFICIAL (decl) = 1;
f1dedc31 2332 DECL_IGNORED_P (decl) = 1;
78e0d62b 2333 DECL_SOURCE_LOCATION (decl) = input_location;
b35d4555 2334 DECL_CONTEXT (decl) = current_function_decl;
f1dedc31 2335
f1dedc31 2336 return decl;
8a72a046
MM
2337}
2338
f1dedc31
MM
2339/* Create a new temporary variable of the indicated TYPE, initialized
2340 to INIT.
8a72a046 2341
f1dedc31
MM
2342 It is not entered into current_binding_level, because that breaks
2343 things when it comes time to do final cleanups (which take place
2344 "outside" the binding contour of the function). */
2345
2346static tree
362efdc1 2347get_temp_regvar (tree type, tree init)
f30432d7 2348{
f1dedc31 2349 tree decl;
8a72a046 2350
f1dedc31 2351 decl = create_temporary_var (type);
350fae66 2352 add_decl_expr (decl);
c8094d83 2353
f1dedc31 2354 finish_expr_stmt (build_modify_expr (decl, INIT_EXPR, init));
8a72a046 2355
f1dedc31 2356 return decl;
f30432d7
MS
2357}
2358
f1dedc31
MM
2359/* `build_vec_init' returns tree structure that performs
2360 initialization of a vector of aggregate types.
8d08fdba 2361
f30efcb7 2362 BASE is a reference to the vector, of ARRAY_TYPE.
a48cccea
JM
2363 MAXINDEX is the maximum index of the array (one less than the
2364 number of elements). It is only used if
2365 TYPE_DOMAIN (TREE_TYPE (BASE)) == NULL_TREE.
b84f4651 2366
8d08fdba
MS
2367 INIT is the (possibly NULL) initializer.
2368
b84f4651
MM
2369 If EXPLICIT_DEFAULT_INIT_P is true, then INIT must be NULL. All
2370 elements in the array are default-initialized.
2371
8d08fdba
MS
2372 FROM_ARRAY is 0 if we should init everything with INIT
2373 (i.e., every element initialized from INIT).
2374 FROM_ARRAY is 1 if we should index into INIT in parallel
2375 with initialization of DECL.
2376 FROM_ARRAY is 2 if we should index into INIT in parallel,
2377 but use assignment instead of initialization. */
2378
2379tree
3db45ab5 2380build_vec_init (tree base, tree maxindex, tree init,
b84f4651
MM
2381 bool explicit_default_init_p,
2382 int from_array)
8d08fdba
MS
2383{
2384 tree rval;
8a72a046 2385 tree base2 = NULL_TREE;
8d08fdba 2386 tree size;
e833cb11 2387 tree itype = NULL_TREE;
8a72a046 2388 tree iterator;
f30efcb7
JM
2389 /* The type of the array. */
2390 tree atype = TREE_TYPE (base);
f1dedc31 2391 /* The type of an element in the array. */
f30efcb7 2392 tree type = TREE_TYPE (atype);
c8094d83 2393 /* The element type reached after removing all outer array
b5af3133
MM
2394 types. */
2395 tree inner_elt_type;
f1dedc31
MM
2396 /* The type of a pointer to an element in the array. */
2397 tree ptype;
2398 tree stmt_expr;
2399 tree compound_stmt;
2400 int destroy_temps;
f5984164 2401 tree try_block = NULL_TREE;
8a72a046 2402 int num_initialized_elts = 0;
2a3398e1 2403 bool is_global;
c8094d83 2404
a48cccea
JM
2405 if (TYPE_DOMAIN (atype))
2406 maxindex = array_type_nelts (atype);
2407
2408 if (maxindex == NULL_TREE || maxindex == error_mark_node)
8d08fdba
MS
2409 return error_mark_node;
2410
b84f4651
MM
2411 if (explicit_default_init_p)
2412 gcc_assert (!init);
2413
b5af3133 2414 inner_elt_type = strip_array_types (atype);
c8a3d889
AO
2415 if (init
2416 && (from_array == 2
c8094d83 2417 ? (!CLASS_TYPE_P (inner_elt_type)
b5af3133 2418 || !TYPE_HAS_COMPLEX_ASSIGN_REF (inner_elt_type))
c8a3d889 2419 : !TYPE_NEEDS_CONSTRUCTING (type))
f30efcb7
JM
2420 && ((TREE_CODE (init) == CONSTRUCTOR
2421 /* Don't do this if the CONSTRUCTOR might contain something
2422 that might throw and require us to clean up. */
4038c495 2423 && (VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (init))
b5af3133 2424 || ! TYPE_HAS_NONTRIVIAL_DESTRUCTOR (inner_elt_type)))
f30efcb7
JM
2425 || from_array))
2426 {
2427 /* Do non-default initialization of POD arrays resulting from
2428 brace-enclosed initializers. In this case, digest_init and
2429 store_constructor will handle the semantics for us. */
2430
f293ce4b 2431 stmt_expr = build2 (INIT_EXPR, atype, base, init);
f30efcb7
JM
2432 return stmt_expr;
2433 }
2434
2435 maxindex = cp_convert (ptrdiff_type_node, maxindex);
f1dedc31 2436 ptype = build_pointer_type (type);
8d08fdba 2437 size = size_in_bytes (type);
f30efcb7 2438 if (TREE_CODE (TREE_TYPE (base)) == ARRAY_TYPE)
0a72704b 2439 base = cp_convert (ptype, decay_conversion (base));
8d08fdba 2440
f1dedc31 2441 /* The code we are generating looks like:
303b7406 2442 ({
f1dedc31 2443 T* t1 = (T*) base;
f30efcb7 2444 T* rval = t1;
f1dedc31
MM
2445 ptrdiff_t iterator = maxindex;
2446 try {
4977bab6 2447 for (; iterator != -1; --iterator) {
f30efcb7
JM
2448 ... initialize *t1 ...
2449 ++t1;
4977bab6 2450 }
f1dedc31 2451 } catch (...) {
0cbd7506 2452 ... destroy elements that were constructed ...
f1dedc31 2453 }
303b7406
NS
2454 rval;
2455 })
c8094d83 2456
f1dedc31
MM
2457 We can omit the try and catch blocks if we know that the
2458 initialization will never throw an exception, or if the array
f30efcb7 2459 elements do not have destructors. We can omit the loop completely if
c8094d83 2460 the elements of the array do not have constructors.
f1dedc31
MM
2461
2462 We actually wrap the entire body of the above in a STMT_EXPR, for
c8094d83 2463 tidiness.
f1dedc31
MM
2464
2465 When copying from array to another, when the array elements have
2466 only trivial copy constructors, we should use __builtin_memcpy
2467 rather than generating a loop. That way, we could take advantage
2468 of whatever cleverness the back-end has for dealing with copies
2469 of blocks of memory. */
2470
2a3398e1 2471 is_global = begin_init_stmts (&stmt_expr, &compound_stmt);
f2c5f623 2472 destroy_temps = stmts_are_full_exprs_p ();
ae499cce 2473 current_stmt_tree ()->stmts_are_full_exprs_p = 0;
f30efcb7 2474 rval = get_temp_regvar (ptype, base);
f1dedc31 2475 base = get_temp_regvar (ptype, rval);
8a72a046 2476 iterator = get_temp_regvar (ptrdiff_type_node, maxindex);
8d08fdba 2477
8a72a046 2478 /* Protect the entire array initialization so that we can destroy
f30efcb7
JM
2479 the partially constructed array if an exception is thrown.
2480 But don't do this if we're assigning. */
2481 if (flag_exceptions && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
2482 && from_array != 2)
ed5511d9
MM
2483 {
2484 try_block = begin_try_block ();
ed5511d9 2485 }
8a72a046 2486
f30efcb7 2487 if (init != NULL_TREE && TREE_CODE (init) == CONSTRUCTOR)
8d08fdba 2488 {
f30efcb7
JM
2489 /* Do non-default initialization of non-POD arrays resulting from
2490 brace-enclosed initializers. */
4038c495
GB
2491 unsigned HOST_WIDE_INT idx;
2492 tree elt;
094fe153
JM
2493 from_array = 0;
2494
4038c495 2495 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (init), idx, elt)
8d08fdba 2496 {
f1dedc31 2497 tree baseref = build1 (INDIRECT_REF, type, base);
8d08fdba 2498
8a72a046 2499 num_initialized_elts++;
8d08fdba 2500
67c03833 2501 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
8a72a046 2502 if (IS_AGGR_TYPE (type) || TREE_CODE (type) == ARRAY_TYPE)
f1dedc31 2503 finish_expr_stmt (build_aggr_init (baseref, elt, 0));
8a72a046 2504 else
f1dedc31
MM
2505 finish_expr_stmt (build_modify_expr (baseref, NOP_EXPR,
2506 elt));
67c03833 2507 current_stmt_tree ()->stmts_are_full_exprs_p = 0;
8a72a046 2508
f30efcb7
JM
2509 finish_expr_stmt (build_unary_op (PREINCREMENT_EXPR, base, 0));
2510 finish_expr_stmt (build_unary_op (PREDECREMENT_EXPR, iterator, 0));
8d08fdba 2511 }
8d08fdba 2512
8a72a046
MM
2513 /* Clear out INIT so that we don't get confused below. */
2514 init = NULL_TREE;
8d08fdba 2515 }
8a72a046 2516 else if (from_array)
8d08fdba 2517 {
8a72a046
MM
2518 /* If initializing one array from another, initialize element by
2519 element. We rely upon the below calls the do argument
c8094d83 2520 checking. */
8a72a046
MM
2521 if (init)
2522 {
0a72704b 2523 base2 = decay_conversion (init);
8a72a046
MM
2524 itype = TREE_TYPE (base2);
2525 base2 = get_temp_regvar (itype, base2);
2526 itype = TREE_TYPE (itype);
2527 }
2528 else if (TYPE_LANG_SPECIFIC (type)
2529 && TYPE_NEEDS_CONSTRUCTING (type)
2530 && ! TYPE_HAS_DEFAULT_CONSTRUCTOR (type))
2531 {
2532 error ("initializer ends prematurely");
2533 return error_mark_node;
2534 }
2535 }
8d08fdba 2536
8a72a046
MM
2537 /* Now, default-initialize any remaining elements. We don't need to
2538 do that if a) the type does not need constructing, or b) we've
094fe153
JM
2539 already initialized all the elements.
2540
2541 We do need to keep going if we're copying an array. */
2542
2543 if (from_array
b84f4651 2544 || ((TYPE_NEEDS_CONSTRUCTING (type) || explicit_default_init_p)
665f2503 2545 && ! (host_integerp (maxindex, 0)
05bccae2 2546 && (num_initialized_elts
665f2503 2547 == tree_low_cst (maxindex, 0) + 1))))
8a72a046 2548 {
37e05cd5 2549 /* If the ITERATOR is equal to -1, then we don't have to loop;
8a72a046 2550 we've already initialized all the elements. */
4977bab6 2551 tree for_stmt;
f1dedc31 2552 tree elt_init;
b84f4651 2553 tree to;
f1dedc31 2554
4977bab6
ZW
2555 for_stmt = begin_for_stmt ();
2556 finish_for_init_stmt (for_stmt);
aab384ae
RG
2557 finish_for_cond (build2 (NE_EXPR, boolean_type_node, iterator,
2558 build_int_cst (TREE_TYPE (iterator), -1)),
4977bab6
ZW
2559 for_stmt);
2560 finish_for_expr (build_unary_op (PREDECREMENT_EXPR, iterator, 0),
2561 for_stmt);
8d08fdba 2562
b84f4651
MM
2563 to = build1 (INDIRECT_REF, type, base);
2564
8d08fdba
MS
2565 if (from_array)
2566 {
8d08fdba
MS
2567 tree from;
2568
2569 if (base2)
2570 from = build1 (INDIRECT_REF, itype, base2);
2571 else
2572 from = NULL_TREE;
2573
2574 if (from_array == 2)
f1dedc31 2575 elt_init = build_modify_expr (to, NOP_EXPR, from);
8d08fdba 2576 else if (TYPE_NEEDS_CONSTRUCTING (type))
f1dedc31 2577 elt_init = build_aggr_init (to, from, 0);
8d08fdba 2578 else if (from)
f1dedc31 2579 elt_init = build_modify_expr (to, NOP_EXPR, from);
8d08fdba 2580 else
8dc2b103 2581 gcc_unreachable ();
8d08fdba
MS
2582 }
2583 else if (TREE_CODE (type) == ARRAY_TYPE)
2584 {
2585 if (init != 0)
f30efcb7
JM
2586 sorry
2587 ("cannot initialize multi-dimensional array with initializer");
2588 elt_init = build_vec_init (build1 (INDIRECT_REF, type, base),
3db45ab5 2589 0, 0,
b84f4651
MM
2590 /*explicit_default_init_p=*/false,
2591 0);
f1dedc31 2592 }
b84f4651 2593 else if (!TYPE_NEEDS_CONSTRUCTING (type))
3db45ab5 2594 elt_init = (build_modify_expr
b84f4651
MM
2595 (to, INIT_EXPR,
2596 build_zero_init (type, size_one_node,
2597 /*static_storage_p=*/false)));
f1dedc31 2598 else
b84f4651 2599 elt_init = build_aggr_init (to, init, 0);
c8094d83 2600
2a3398e1
NS
2601 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
2602 finish_expr_stmt (elt_init);
2603 current_stmt_tree ()->stmts_are_full_exprs_p = 0;
8d08fdba 2604
f30efcb7 2605 finish_expr_stmt (build_unary_op (PREINCREMENT_EXPR, base, 0));
8d08fdba 2606 if (base2)
f30efcb7 2607 finish_expr_stmt (build_unary_op (PREINCREMENT_EXPR, base2, 0));
0fac6b0b 2608
4977bab6 2609 finish_for_stmt (for_stmt);
8d08fdba 2610 }
8a72a046
MM
2611
2612 /* Make sure to cleanup any partially constructed elements. */
f30efcb7
JM
2613 if (flag_exceptions && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
2614 && from_array != 2)
f1dedc31
MM
2615 {
2616 tree e;
b2153b98
KL
2617 tree m = cp_build_binary_op (MINUS_EXPR, maxindex, iterator);
2618
2619 /* Flatten multi-dimensional array since build_vec_delete only
2620 expects one-dimensional array. */
2621 if (TREE_CODE (type) == ARRAY_TYPE)
b5af3133
MM
2622 m = cp_build_binary_op (MULT_EXPR, m,
2623 array_type_nelts_total (type));
8d08fdba 2624
ed5511d9 2625 finish_cleanup_try_block (try_block);
c8094d83 2626 e = build_vec_delete_1 (rval, m,
b5af3133 2627 inner_elt_type, sfk_base_destructor,
f1dedc31 2628 /*use_global_delete=*/0);
f1dedc31
MM
2629 finish_cleanup (e, try_block);
2630 }
2631
303b7406
NS
2632 /* The value of the array initialization is the array itself, RVAL
2633 is a pointer to the first element. */
325c3691 2634 finish_stmt_expr_expr (rval, stmt_expr);
f1dedc31 2635
2a3398e1 2636 stmt_expr = finish_init_stmts (is_global, stmt_expr, compound_stmt);
303b7406 2637
04c06002 2638 /* Now convert make the result have the correct type. */
303b7406
NS
2639 atype = build_pointer_type (atype);
2640 stmt_expr = build1 (NOP_EXPR, atype, stmt_expr);
2641 stmt_expr = build_indirect_ref (stmt_expr, NULL);
c8094d83 2642
ae499cce 2643 current_stmt_tree ()->stmts_are_full_exprs_p = destroy_temps;
f1dedc31 2644 return stmt_expr;
8d08fdba
MS
2645}
2646
86f45d2c
MM
2647/* Call the DTOR_KIND destructor for EXP. FLAGS are as for
2648 build_delete. */
298d6f60
MM
2649
2650static tree
362efdc1 2651build_dtor_call (tree exp, special_function_kind dtor_kind, int flags)
298d6f60 2652{
86f45d2c 2653 tree name;
ee76b931 2654 tree fn;
86f45d2c
MM
2655 switch (dtor_kind)
2656 {
2657 case sfk_complete_destructor:
2658 name = complete_dtor_identifier;
2659 break;
2660
2661 case sfk_base_destructor:
2662 name = base_dtor_identifier;
2663 break;
2664
2665 case sfk_deleting_destructor:
2666 name = deleting_dtor_identifier;
2667 break;
2668
2669 default:
8dc2b103 2670 gcc_unreachable ();
86f45d2c 2671 }
ee76b931 2672 fn = lookup_fnfields (TREE_TYPE (exp), name, /*protect=*/2);
c8094d83 2673 return build_new_method_call (exp, fn,
ee76b931
MM
2674 /*args=*/NULL_TREE,
2675 /*conversion_path=*/NULL_TREE,
63c9a190
MM
2676 flags,
2677 /*fn_p=*/NULL);
298d6f60
MM
2678}
2679
8d08fdba
MS
2680/* Generate a call to a destructor. TYPE is the type to cast ADDR to.
2681 ADDR is an expression which yields the store to be destroyed.
86f45d2c
MM
2682 AUTO_DELETE is the name of the destructor to call, i.e., either
2683 sfk_complete_destructor, sfk_base_destructor, or
2684 sfk_deleting_destructor.
8d08fdba
MS
2685
2686 FLAGS is the logical disjunction of zero or more LOOKUP_
ade3dc07 2687 flags. See cp-tree.h for more info. */
e92cc029 2688
8d08fdba 2689tree
362efdc1
NN
2690build_delete (tree type, tree addr, special_function_kind auto_delete,
2691 int flags, int use_global_delete)
8d08fdba 2692{
8d08fdba 2693 tree expr;
8d08fdba
MS
2694
2695 if (addr == error_mark_node)
2696 return error_mark_node;
2697
2698 /* Can happen when CURRENT_EXCEPTION_OBJECT gets its type
2699 set to `error_mark_node' before it gets properly cleaned up. */
2700 if (type == error_mark_node)
2701 return error_mark_node;
2702
2703 type = TYPE_MAIN_VARIANT (type);
2704
2705 if (TREE_CODE (type) == POINTER_TYPE)
2706 {
b1e5b86c
GB
2707 bool complete_p = true;
2708
2986ae00 2709 type = TYPE_MAIN_VARIANT (TREE_TYPE (type));
8d08fdba
MS
2710 if (TREE_CODE (type) == ARRAY_TYPE)
2711 goto handle_array;
23b4deba 2712
b1e5b86c
GB
2713 /* We don't want to warn about delete of void*, only other
2714 incomplete types. Deleting other incomplete types
2715 invokes undefined behavior, but it is not ill-formed, so
2716 compile to something that would even do The Right Thing
2717 (TM) should the type have a trivial dtor and no delete
2718 operator. */
2719 if (!VOID_TYPE_P (type))
8d08fdba 2720 {
b1e5b86c
GB
2721 complete_type (type);
2722 if (!COMPLETE_TYPE_P (type))
2723 {
d4ee4d25 2724 warning (0, "possible problem detected in invocation of "
b1e5b86c
GB
2725 "delete operator:");
2726 cxx_incomplete_type_diagnostic (addr, type, 1);
061cae1f
NS
2727 inform ("neither the destructor nor the class-specific "
2728 "operator delete will be called, even if they are "
b1e5b86c
GB
2729 "declared when the class is defined.");
2730 complete_p = false;
2731 }
8d08fdba 2732 }
b1e5b86c
GB
2733 if (VOID_TYPE_P (type) || !complete_p || !IS_AGGR_TYPE (type))
2734 /* Call the builtin operator delete. */
2735 return build_builtin_delete_call (addr);
8d08fdba
MS
2736 if (TREE_SIDE_EFFECTS (addr))
2737 addr = save_expr (addr);
2986ae00 2738
f4f206f4 2739 /* Throw away const and volatile on target type of addr. */
6060a796 2740 addr = convert_force (build_pointer_type (type), addr, 0);
8d08fdba
MS
2741 }
2742 else if (TREE_CODE (type) == ARRAY_TYPE)
2743 {
2744 handle_array:
c8094d83 2745
c407792d
RK
2746 if (TYPE_DOMAIN (type) == NULL_TREE)
2747 {
8251199e 2748 error ("unknown array size in delete");
c407792d
RK
2749 return error_mark_node;
2750 }
8d08fdba 2751 return build_vec_delete (addr, array_type_nelts (type),
c7edeea3 2752 auto_delete, use_global_delete);
8d08fdba
MS
2753 }
2754 else
2755 {
2756 /* Don't check PROTECT here; leave that decision to the
2757 destructor. If the destructor is accessible, call it,
2758 else report error. */
2759 addr = build_unary_op (ADDR_EXPR, addr, 0);
2760 if (TREE_SIDE_EFFECTS (addr))
2761 addr = save_expr (addr);
2762
60696c53 2763 addr = convert_force (build_pointer_type (type), addr, 0);
8d08fdba
MS
2764 }
2765
50bc768d 2766 gcc_assert (IS_AGGR_TYPE (type));
8d08fdba 2767
834c6dff 2768 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
8d08fdba 2769 {
60696c53 2770 if (auto_delete != sfk_deleting_destructor)
8d08fdba
MS
2771 return void_zero_node;
2772
3db45ab5
MS
2773 return build_op_delete_call (DELETE_EXPR, addr,
2774 cxx_sizeof_nowarn (type),
63c9a190
MM
2775 use_global_delete,
2776 /*placement=*/NULL_TREE,
2777 /*alloc_fn=*/NULL_TREE);
8d08fdba 2778 }
ade3dc07 2779 else
8d08fdba 2780 {
700f8a87 2781 tree do_delete = NULL_TREE;
bd6dd845 2782 tree ifexp;
700f8a87 2783
9f4faeae
MM
2784 if (CLASSTYPE_LAZY_DESTRUCTOR (type))
2785 lazily_declare_fn (sfk_destructor, type);
ade3dc07 2786
52682a1b
MM
2787 /* For `::delete x', we must not use the deleting destructor
2788 since then we would not be sure to get the global `operator
2789 delete'. */
86f45d2c 2790 if (use_global_delete && auto_delete == sfk_deleting_destructor)
700f8a87 2791 {
1b4a93f7
MM
2792 /* We will use ADDR multiple times so we must save it. */
2793 addr = save_expr (addr);
c6002625 2794 /* Delete the object. */
86f45d2c
MM
2795 do_delete = build_builtin_delete_call (addr);
2796 /* Otherwise, treat this like a complete object destructor
2797 call. */
2798 auto_delete = sfk_complete_destructor;
700f8a87 2799 }
52682a1b
MM
2800 /* If the destructor is non-virtual, there is no deleting
2801 variant. Instead, we must explicitly call the appropriate
2802 `operator delete' here. */
2803 else if (!DECL_VIRTUAL_P (CLASSTYPE_DESTRUCTORS (type))
2804 && auto_delete == sfk_deleting_destructor)
2805 {
1b4a93f7
MM
2806 /* We will use ADDR multiple times so we must save it. */
2807 addr = save_expr (addr);
2808 /* Build the call. */
52682a1b
MM
2809 do_delete = build_op_delete_call (DELETE_EXPR,
2810 addr,
ea793912 2811 cxx_sizeof_nowarn (type),
5bd61841 2812 /*global_p=*/false,
63c9a190
MM
2813 /*placement=*/NULL_TREE,
2814 /*alloc_fn=*/NULL_TREE);
52682a1b
MM
2815 /* Call the complete object destructor. */
2816 auto_delete = sfk_complete_destructor;
2817 }
e3fe84e5
JM
2818 else if (auto_delete == sfk_deleting_destructor
2819 && TYPE_GETS_REG_DELETE (type))
2820 {
2821 /* Make sure we have access to the member op delete, even though
2822 we'll actually be calling it from the destructor. */
ea793912 2823 build_op_delete_call (DELETE_EXPR, addr, cxx_sizeof_nowarn (type),
3db45ab5 2824 /*global_p=*/false,
63c9a190
MM
2825 /*placement=*/NULL_TREE,
2826 /*alloc_fn=*/NULL_TREE);
e3fe84e5 2827 }
8d08fdba 2828
3e411c3f 2829 expr = build_dtor_call (build_indirect_ref (addr, NULL),
1b4a93f7 2830 auto_delete, flags);
bd6dd845 2831 if (do_delete)
f293ce4b 2832 expr = build2 (COMPOUND_EXPR, void_type_node, expr, do_delete);
9e9ff709 2833
bd6dd845
MS
2834 if (flags & LOOKUP_DESTRUCTOR)
2835 /* Explicit destructor call; don't check for null pointer. */
2836 ifexp = integer_one_node;
8d08fdba 2837 else
bd6dd845 2838 /* Handle deleting a null pointer. */
ab76ca54 2839 ifexp = fold (cp_build_binary_op (NE_EXPR, addr, integer_zero_node));
8d08fdba 2840
bd6dd845 2841 if (ifexp != integer_one_node)
f293ce4b
RS
2842 expr = build3 (COND_EXPR, void_type_node,
2843 ifexp, expr, void_zero_node);
8d08fdba 2844
8d08fdba
MS
2845 return expr;
2846 }
ade3dc07 2847}
8d08fdba 2848
ade3dc07
JM
2849/* At the beginning of a destructor, push cleanups that will call the
2850 destructors for our base classes and members.
2a2480e1 2851
a29e1034 2852 Called from begin_destructor_body. */
8d08fdba 2853
ade3dc07 2854void
edaf3e03 2855push_base_cleanups (void)
ade3dc07 2856{
fa743e8c
NS
2857 tree binfo, base_binfo;
2858 int i;
ade3dc07
JM
2859 tree member;
2860 tree expr;
d4e6fecb 2861 VEC(tree,gc) *vbases;
8d08fdba 2862
ade3dc07 2863 /* Run destructors for all virtual baseclasses. */
5775a06a 2864 if (CLASSTYPE_VBASECLASSES (current_class_type))
ade3dc07 2865 {
ade3dc07 2866 tree cond = (condition_conversion
f293ce4b
RS
2867 (build2 (BIT_AND_EXPR, integer_type_node,
2868 current_in_charge_parm,
2869 integer_two_node)));
8d08fdba 2870
58c42dc2 2871 /* The CLASSTYPE_VBASECLASSES vector is in initialization
ade3dc07 2872 order, which is also the right order for pushing cleanups. */
9ba5ff0f
NS
2873 for (vbases = CLASSTYPE_VBASECLASSES (current_class_type), i = 0;
2874 VEC_iterate (tree, vbases, i, base_binfo); i++)
8d08fdba 2875 {
9ba5ff0f 2876 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (BINFO_TYPE (base_binfo)))
8d08fdba 2877 {
c8094d83 2878 expr = build_special_member_call (current_class_ref,
4ba126e4
MM
2879 base_dtor_identifier,
2880 NULL_TREE,
9ba5ff0f 2881 base_binfo,
c8094d83 2882 (LOOKUP_NORMAL
4ba126e4 2883 | LOOKUP_NONVIRTUAL));
f293ce4b
RS
2884 expr = build3 (COND_EXPR, void_type_node, cond,
2885 expr, void_zero_node);
ade3dc07 2886 finish_decl_cleanup (NULL_TREE, expr);
8d08fdba
MS
2887 }
2888 }
ade3dc07
JM
2889 }
2890
ade3dc07 2891 /* Take care of the remaining baseclasses. */
fa743e8c
NS
2892 for (binfo = TYPE_BINFO (current_class_type), i = 0;
2893 BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
ade3dc07 2894 {
ade3dc07 2895 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (BINFO_TYPE (base_binfo))
809e3e7f 2896 || BINFO_VIRTUAL_P (base_binfo))
ade3dc07
JM
2897 continue;
2898
c8094d83 2899 expr = build_special_member_call (current_class_ref,
4ba126e4 2900 base_dtor_identifier,
c8094d83 2901 NULL_TREE, base_binfo,
4ba126e4 2902 LOOKUP_NORMAL | LOOKUP_NONVIRTUAL);
ade3dc07
JM
2903 finish_decl_cleanup (NULL_TREE, expr);
2904 }
2905
2906 for (member = TYPE_FIELDS (current_class_type); member;
2907 member = TREE_CHAIN (member))
2908 {
2e5d2970
VR
2909 if (TREE_TYPE (member) == error_mark_node
2910 || TREE_CODE (member) != FIELD_DECL
2911 || DECL_ARTIFICIAL (member))
ade3dc07
JM
2912 continue;
2913 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (member)))
2914 {
c8094d83
MS
2915 tree this_member = (build_class_member_access_expr
2916 (current_class_ref, member,
50ad9642
MM
2917 /*access_path=*/NULL_TREE,
2918 /*preserve_reference=*/false));
ade3dc07
JM
2919 tree this_type = TREE_TYPE (member);
2920 expr = build_delete (this_type, this_member,
2921 sfk_complete_destructor,
2922 LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL,
2923 0);
2924 finish_decl_cleanup (NULL_TREE, expr);
2925 }
8d08fdba
MS
2926 }
2927}
2928
8d08fdba
MS
2929/* Build a C++ vector delete expression.
2930 MAXINDEX is the number of elements to be deleted.
2931 ELT_SIZE is the nominal size of each element in the vector.
2932 BASE is the expression that should yield the store to be deleted.
8d08fdba
MS
2933 This function expands (or synthesizes) these calls itself.
2934 AUTO_DELETE_VEC says whether the container (vector) should be deallocated.
8d08fdba
MS
2935
2936 This also calls delete for virtual baseclasses of elements of the vector.
2937
2938 Update: MAXINDEX is no longer needed. The size can be extracted from the
2939 start of the vector for pointers, and from the type for arrays. We still
2940 use MAXINDEX for arrays because it happens to already have one of the
2941 values we'd have to extract. (We could use MAXINDEX with pointers to
2942 confirm the size, and trap if the numbers differ; not clear that it'd
2943 be worth bothering.) */
e92cc029 2944
8d08fdba 2945tree
362efdc1
NN
2946build_vec_delete (tree base, tree maxindex,
2947 special_function_kind auto_delete_vec, int use_global_delete)
8d08fdba 2948{
f30432d7 2949 tree type;
49b7aacb
JM
2950 tree rval;
2951 tree base_init = NULL_TREE;
8d08fdba 2952
f30432d7 2953 type = TREE_TYPE (base);
c407792d 2954
f30432d7 2955 if (TREE_CODE (type) == POINTER_TYPE)
8d08fdba
MS
2956 {
2957 /* Step back one from start of vector, and read dimension. */
834c6dff
MM
2958 tree cookie_addr;
2959
6742d92b 2960 if (TREE_SIDE_EFFECTS (base))
49b7aacb
JM
2961 {
2962 base_init = get_target_expr (base);
2963 base = TARGET_EXPR_SLOT (base_init);
2964 }
708cae97 2965 type = strip_array_types (TREE_TYPE (type));
f293ce4b
RS
2966 cookie_addr = build2 (MINUS_EXPR,
2967 build_pointer_type (sizetype),
2968 base,
2969 TYPE_SIZE_UNIT (sizetype));
3e411c3f 2970 maxindex = build_indirect_ref (cookie_addr, NULL);
8d08fdba 2971 }
f30432d7 2972 else if (TREE_CODE (type) == ARRAY_TYPE)
8d08fdba 2973 {
f4f206f4
KH
2974 /* Get the total number of things in the array, maxindex is a
2975 bad name. */
f30432d7 2976 maxindex = array_type_nelts_total (type);
834c6dff 2977 type = strip_array_types (type);
8d08fdba 2978 base = build_unary_op (ADDR_EXPR, base, 1);
6742d92b 2979 if (TREE_SIDE_EFFECTS (base))
49b7aacb
JM
2980 {
2981 base_init = get_target_expr (base);
2982 base = TARGET_EXPR_SLOT (base_init);
2983 }
8d08fdba
MS
2984 }
2985 else
2986 {
9e9ff709 2987 if (base != error_mark_node)
8251199e 2988 error ("type to vector delete is neither pointer or array type");
8d08fdba
MS
2989 return error_mark_node;
2990 }
8d08fdba 2991
49b7aacb 2992 rval = build_vec_delete_1 (base, maxindex, type, auto_delete_vec,
f30432d7 2993 use_global_delete);
49b7aacb 2994 if (base_init)
f293ce4b 2995 rval = build2 (COMPOUND_EXPR, TREE_TYPE (rval), base_init, rval);
49b7aacb
JM
2996
2997 return rval;
8d08fdba 2998}
This page took 2.828979 seconds and 5 git commands to generate.