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