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