1 /* Handle initialization things in C++.
2 Copyright (C) 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
4 Contributed by Michael Tiemann (tiemann@cygnus.com)
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2, or (at your option)
13 GCC is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING. If not, write to
20 the Free Software Foundation, 51 Franklin Street, Fifth Floor,
21 Boston, MA 02110-1301, USA. */
23 /* High-level class interface. */
27 #include "coretypes.h"
39 static bool begin_init_stmts (tree
*, tree
*);
40 static tree
finish_init_stmts (bool, tree
, tree
);
41 static void construct_virtual_base (tree
, tree
);
42 static void expand_aggr_init_1 (tree
, tree
, tree
, tree
, int);
43 static void expand_default_init (tree
, tree
, tree
, tree
, int);
44 static tree
build_vec_delete_1 (tree
, tree
, tree
, special_function_kind
, int);
45 static void perform_member_init (tree
, tree
);
46 static tree
build_builtin_delete_call (tree
);
47 static int member_init_ok_or_else (tree
, tree
, tree
);
48 static void expand_virtual_init (tree
, tree
);
49 static tree
sort_mem_initializers (tree
, tree
);
50 static tree
initializing_context (tree
);
51 static void expand_cleanup_for_base (tree
, tree
);
52 static tree
get_temp_regvar (tree
, tree
);
53 static tree
dfs_initialize_vtbl_ptrs (tree
, void *);
54 static tree
build_default_init (tree
, tree
);
55 static tree
build_new_1 (tree
);
56 static tree
build_dtor_call (tree
, special_function_kind
, int);
57 static tree
build_field_list (tree
, tree
, int *);
58 static tree
build_vtbl_address (tree
);
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
70 begin_init_stmts (tree
*stmt_expr_p
, tree
*compound_stmt_p
)
72 bool is_global
= !building_stmt_tree ();
74 *stmt_expr_p
= begin_stmt_expr ();
75 *compound_stmt_p
= begin_compound_stmt (BCS_NO_SCOPE
);
80 /* Finish out the statement-expression begun by the previous call to
81 begin_init_stmts. Returns the statement-expression itself. */
84 finish_init_stmts (bool is_global
, tree stmt_expr
, tree compound_stmt
)
86 finish_compound_stmt (compound_stmt
);
88 stmt_expr
= finish_stmt_expr (stmt_expr
, true);
90 gcc_assert (!building_stmt_tree () == is_global
);
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. */
102 dfs_initialize_vtbl_ptrs (tree binfo
, void *data
)
104 if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo
)))
105 return dfs_skip_bases
;
107 if (!BINFO_PRIMARY_P (binfo
) || BINFO_VIRTUAL_P (binfo
))
109 tree base_ptr
= TREE_VALUE ((tree
) data
);
111 base_ptr
= build_base_path (PLUS_EXPR
, base_ptr
, binfo
, /*nonnull=*/1);
113 expand_virtual_init (binfo
, base_ptr
);
119 /* Initialize all the vtable pointers in the object pointed to by
123 initialize_vtbl_ptrs (tree addr
)
128 type
= TREE_TYPE (TREE_TYPE (addr
));
129 list
= build_tree_list (type
, addr
);
131 /* Walk through the hierarchy, initializing the vptr in each base
132 class. We do these in pre-order because we can't find the virtual
133 bases for a class until we've initialized the vtbl for that
135 dfs_walk_once (TYPE_BINFO (type
), dfs_initialize_vtbl_ptrs
, NULL
, list
);
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.
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
150 build_zero_init (tree type
, tree nelts
, bool static_storage_p
)
152 tree init
= NULL_TREE
;
156 To zero-initialization storage for an object of type T means:
158 -- if T is a scalar type, the storage is set to the value of zero
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.
164 -- if T is a union type, the storage for its first data member is
167 -- if T is an array type, the storage for each element is
170 -- if T is a reference type, no initialization is performed. */
172 gcc_assert (nelts
== NULL_TREE
|| TREE_CODE (nelts
) == INTEGER_CST
);
174 if (type
== error_mark_node
)
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. */
182 else if (SCALAR_TYPE_P (type
)
183 || TREE_CODE (type
) == COMPLEX_TYPE
)
184 init
= convert (type
, integer_zero_node
);
185 else if (CLASS_TYPE_P (type
))
188 VEC(constructor_elt
,gc
) *v
= NULL
;
190 /* Iterate over the fields, building initializations. */
191 for (field
= TYPE_FIELDS (type
); field
; field
= TREE_CHAIN (field
))
193 if (TREE_CODE (field
) != FIELD_DECL
)
196 /* Note that for class types there will be FIELD_DECLs
197 corresponding to base classes as well. Thus, iterating
198 over TYPE_FIELDs will result in correct initialization of
199 all of the subobjects. */
200 if (static_storage_p
&& !zero_init_p (TREE_TYPE (field
)))
202 tree value
= build_zero_init (TREE_TYPE (field
),
205 CONSTRUCTOR_APPEND_ELT(v
, field
, value
);
208 /* For unions, only the first field is initialized. */
209 if (TREE_CODE (type
) == UNION_TYPE
)
213 /* Build a constructor to contain the initializations. */
214 init
= build_constructor (type
, v
);
216 else if (TREE_CODE (type
) == ARRAY_TYPE
)
219 VEC(constructor_elt
,gc
) *v
= NULL
;
221 /* Iterate over the array elements, building initializations. */
223 max_index
= fold_build2 (MINUS_EXPR
, TREE_TYPE (nelts
),
224 nelts
, integer_one_node
);
226 max_index
= array_type_nelts (type
);
228 /* If we have an error_mark here, we should just return error mark
229 as we don't know the size of the array yet. */
230 if (max_index
== error_mark_node
)
231 return error_mark_node
;
232 gcc_assert (TREE_CODE (max_index
) == INTEGER_CST
);
234 /* A zero-sized array, which is accepted as an extension, will
235 have an upper bound of -1. */
236 if (!tree_int_cst_equal (max_index
, integer_minus_one_node
))
240 v
= VEC_alloc (constructor_elt
, gc
, 1);
241 ce
= VEC_quick_push (constructor_elt
, v
, NULL
);
243 /* If this is a one element array, we just use a regular init. */
244 if (tree_int_cst_equal (size_zero_node
, max_index
))
245 ce
->index
= size_zero_node
;
247 ce
->index
= build2 (RANGE_EXPR
, sizetype
, size_zero_node
,
250 ce
->value
= build_zero_init (TREE_TYPE (type
),
255 /* Build a constructor to contain the initializations. */
256 init
= build_constructor (type
, v
);
258 else if (TREE_CODE (type
) == VECTOR_TYPE
)
259 init
= fold_convert (type
, integer_zero_node
);
261 gcc_assert (TREE_CODE (type
) == REFERENCE_TYPE
);
263 /* In all cases, the initializer is a constant. */
266 TREE_CONSTANT (init
) = 1;
267 TREE_INVARIANT (init
) = 1;
273 /* Build an expression for the default-initialization of an object of
274 the indicated TYPE. If NELTS is non-NULL, and TYPE is an
275 ARRAY_TYPE, NELTS is the number of elements in the array. If
276 initialization of TYPE requires calling constructors, this function
277 returns NULL_TREE; the caller is responsible for arranging for the
278 constructors to be called. */
281 build_default_init (tree type
, tree nelts
)
285 To default-initialize an object of type T means:
287 --if T is a non-POD class type (clause _class_), the default construc-
288 tor for T is called (and the initialization is ill-formed if T has
289 no accessible default constructor);
291 --if T is an array type, each element is default-initialized;
293 --otherwise, the storage for the object is zero-initialized.
295 A program that calls for default-initialization of an entity of refer-
296 ence type is ill-formed. */
298 /* If TYPE_NEEDS_CONSTRUCTING is true, the caller is responsible for
299 performing the initialization. This is confusing in that some
300 non-PODs do not have TYPE_NEEDS_CONSTRUCTING set. (For example,
301 a class with a pointer-to-data member as a non-static data member
302 does not have TYPE_NEEDS_CONSTRUCTING set.) Therefore, we end up
303 passing non-PODs to build_zero_init below, which is contrary to
304 the semantics quoted above from [dcl.init].
306 It happens, however, that the behavior of the constructor the
307 standard says we should have generated would be precisely the
308 same as that obtained by calling build_zero_init below, so things
310 if (TYPE_NEEDS_CONSTRUCTING (type
)
311 || (nelts
&& TREE_CODE (nelts
) != INTEGER_CST
))
314 /* At this point, TYPE is either a POD class type, an array of POD
315 classes, or something even more innocuous. */
316 return build_zero_init (type
, nelts
, /*static_storage_p=*/false);
319 /* Initialize MEMBER, a FIELD_DECL, with INIT, a TREE_LIST of
320 arguments. If TREE_LIST is void_type_node, an empty initializer
321 list was given; if NULL_TREE no initializer was given. */
324 perform_member_init (tree member
, tree init
)
327 tree type
= TREE_TYPE (member
);
330 explicit = (init
!= NULL_TREE
);
332 /* Effective C++ rule 12 requires that all data members be
334 if (warn_ecpp
&& !explicit && TREE_CODE (type
) != ARRAY_TYPE
)
335 warning (0, "%J%qD should be initialized in the member initialization "
336 "list", current_function_decl
, member
);
338 if (init
== void_type_node
)
341 /* Get an lvalue for the data member. */
342 decl
= build_class_member_access_expr (current_class_ref
, member
,
343 /*access_path=*/NULL_TREE
,
344 /*preserve_reference=*/true);
345 if (decl
== error_mark_node
)
348 /* Deal with this here, as we will get confused if we try to call the
349 assignment op for an anonymous union. This can happen in a
350 synthesized copy constructor. */
351 if (ANON_AGGR_TYPE_P (type
))
355 init
= build2 (INIT_EXPR
, type
, decl
, TREE_VALUE (init
));
356 finish_expr_stmt (init
);
359 else if (TYPE_NEEDS_CONSTRUCTING (type
))
362 && TREE_CODE (type
) == ARRAY_TYPE
364 && TREE_CHAIN (init
) == NULL_TREE
365 && TREE_CODE (TREE_TYPE (TREE_VALUE (init
))) == ARRAY_TYPE
)
367 /* Initialization of one array from another. */
368 finish_expr_stmt (build_vec_init (decl
, NULL_TREE
, TREE_VALUE (init
),
369 /*explicit_default_init_p=*/false,
373 finish_expr_stmt (build_aggr_init (decl
, init
, 0));
377 if (init
== NULL_TREE
)
381 init
= build_default_init (type
, /*nelts=*/NULL_TREE
);
382 if (TREE_CODE (type
) == REFERENCE_TYPE
)
383 warning (0, "%Jdefault-initialization of %q#D, "
384 "which has reference type",
385 current_function_decl
, member
);
387 /* member traversal: note it leaves init NULL */
388 else if (TREE_CODE (type
) == REFERENCE_TYPE
)
389 pedwarn ("%Juninitialized reference member %qD",
390 current_function_decl
, member
);
391 else if (CP_TYPE_CONST_P (type
))
392 pedwarn ("%Juninitialized member %qD with %<const%> type %qT",
393 current_function_decl
, member
, type
);
395 else if (TREE_CODE (init
) == TREE_LIST
)
396 /* There was an explicit member initialization. Do some work
398 init
= build_x_compound_expr_from_list (init
, "member initializer");
401 finish_expr_stmt (build_modify_expr (decl
, INIT_EXPR
, init
));
404 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type
))
408 expr
= build_class_member_access_expr (current_class_ref
, member
,
409 /*access_path=*/NULL_TREE
,
410 /*preserve_reference=*/false);
411 expr
= build_delete (type
, expr
, sfk_complete_destructor
,
412 LOOKUP_NONVIRTUAL
|LOOKUP_DESTRUCTOR
, 0);
414 if (expr
!= error_mark_node
)
415 finish_eh_cleanup (expr
);
419 /* Returns a TREE_LIST containing (as the TREE_PURPOSE of each node) all
420 the FIELD_DECLs on the TYPE_FIELDS list for T, in reverse order. */
423 build_field_list (tree t
, tree list
, int *uses_unions_p
)
429 /* Note whether or not T is a union. */
430 if (TREE_CODE (t
) == UNION_TYPE
)
433 for (fields
= TYPE_FIELDS (t
); fields
; fields
= TREE_CHAIN (fields
))
435 /* Skip CONST_DECLs for enumeration constants and so forth. */
436 if (TREE_CODE (fields
) != FIELD_DECL
|| DECL_ARTIFICIAL (fields
))
439 /* Keep track of whether or not any fields are unions. */
440 if (TREE_CODE (TREE_TYPE (fields
)) == UNION_TYPE
)
443 /* For an anonymous struct or union, we must recursively
444 consider the fields of the anonymous type. They can be
445 directly initialized from the constructor. */
446 if (ANON_AGGR_TYPE_P (TREE_TYPE (fields
)))
448 /* Add this field itself. Synthesized copy constructors
449 initialize the entire aggregate. */
450 list
= tree_cons (fields
, NULL_TREE
, list
);
451 /* And now add the fields in the anonymous aggregate. */
452 list
= build_field_list (TREE_TYPE (fields
), list
,
455 /* Add this field. */
456 else if (DECL_NAME (fields
))
457 list
= tree_cons (fields
, NULL_TREE
, list
);
463 /* The MEM_INITS are a TREE_LIST. The TREE_PURPOSE of each list gives
464 a FIELD_DECL or BINFO in T that needs initialization. The
465 TREE_VALUE gives the initializer, or list of initializer arguments.
467 Return a TREE_LIST containing all of the initializations required
468 for T, in the order in which they should be performed. The output
469 list has the same format as the input. */
472 sort_mem_initializers (tree t
, tree mem_inits
)
475 tree base
, binfo
, base_binfo
;
478 VEC(tree
,gc
) *vbases
;
482 /* Build up a list of initializations. The TREE_PURPOSE of entry
483 will be the subobject (a FIELD_DECL or BINFO) to initialize. The
484 TREE_VALUE will be the constructor arguments, or NULL if no
485 explicit initialization was provided. */
486 sorted_inits
= NULL_TREE
;
488 /* Process the virtual bases. */
489 for (vbases
= CLASSTYPE_VBASECLASSES (t
), i
= 0;
490 VEC_iterate (tree
, vbases
, i
, base
); i
++)
491 sorted_inits
= tree_cons (base
, NULL_TREE
, sorted_inits
);
493 /* Process the direct bases. */
494 for (binfo
= TYPE_BINFO (t
), i
= 0;
495 BINFO_BASE_ITERATE (binfo
, i
, base_binfo
); ++i
)
496 if (!BINFO_VIRTUAL_P (base_binfo
))
497 sorted_inits
= tree_cons (base_binfo
, NULL_TREE
, sorted_inits
);
499 /* Process the non-static data members. */
500 sorted_inits
= build_field_list (t
, sorted_inits
, &uses_unions_p
);
501 /* Reverse the entire list of initializations, so that they are in
502 the order that they will actually be performed. */
503 sorted_inits
= nreverse (sorted_inits
);
505 /* If the user presented the initializers in an order different from
506 that in which they will actually occur, we issue a warning. Keep
507 track of the next subobject which can be explicitly initialized
508 without issuing a warning. */
509 next_subobject
= sorted_inits
;
511 /* Go through the explicit initializers, filling in TREE_PURPOSE in
513 for (init
= mem_inits
; init
; init
= TREE_CHAIN (init
))
518 subobject
= TREE_PURPOSE (init
);
520 /* If the explicit initializers are in sorted order, then
521 SUBOBJECT will be NEXT_SUBOBJECT, or something following
523 for (subobject_init
= next_subobject
;
525 subobject_init
= TREE_CHAIN (subobject_init
))
526 if (TREE_PURPOSE (subobject_init
) == subobject
)
529 /* Issue a warning if the explicit initializer order does not
530 match that which will actually occur.
531 ??? Are all these on the correct lines? */
532 if (warn_reorder
&& !subobject_init
)
534 if (TREE_CODE (TREE_PURPOSE (next_subobject
)) == FIELD_DECL
)
535 warning (0, "%q+D will be initialized after",
536 TREE_PURPOSE (next_subobject
));
538 warning (0, "base %qT will be initialized after",
539 TREE_PURPOSE (next_subobject
));
540 if (TREE_CODE (subobject
) == FIELD_DECL
)
541 warning (0, " %q+#D", subobject
);
543 warning (0, " base %qT", subobject
);
544 warning (0, "%J when initialized here", current_function_decl
);
547 /* Look again, from the beginning of the list. */
550 subobject_init
= sorted_inits
;
551 while (TREE_PURPOSE (subobject_init
) != subobject
)
552 subobject_init
= TREE_CHAIN (subobject_init
);
555 /* It is invalid to initialize the same subobject more than
557 if (TREE_VALUE (subobject_init
))
559 if (TREE_CODE (subobject
) == FIELD_DECL
)
560 error ("%Jmultiple initializations given for %qD",
561 current_function_decl
, subobject
);
563 error ("%Jmultiple initializations given for base %qT",
564 current_function_decl
, subobject
);
567 /* Record the initialization. */
568 TREE_VALUE (subobject_init
) = TREE_VALUE (init
);
569 next_subobject
= subobject_init
;
574 If a ctor-initializer specifies more than one mem-initializer for
575 multiple members of the same union (including members of
576 anonymous unions), the ctor-initializer is ill-formed. */
579 tree last_field
= NULL_TREE
;
580 for (init
= sorted_inits
; init
; init
= TREE_CHAIN (init
))
586 /* Skip uninitialized members and base classes. */
587 if (!TREE_VALUE (init
)
588 || TREE_CODE (TREE_PURPOSE (init
)) != FIELD_DECL
)
590 /* See if this field is a member of a union, or a member of a
591 structure contained in a union, etc. */
592 field
= TREE_PURPOSE (init
);
593 for (field_type
= DECL_CONTEXT (field
);
594 !same_type_p (field_type
, t
);
595 field_type
= TYPE_CONTEXT (field_type
))
596 if (TREE_CODE (field_type
) == UNION_TYPE
)
598 /* If this field is not a member of a union, skip it. */
599 if (TREE_CODE (field_type
) != UNION_TYPE
)
602 /* It's only an error if we have two initializers for the same
610 /* See if LAST_FIELD and the field initialized by INIT are
611 members of the same union. If so, there's a problem,
612 unless they're actually members of the same structure
613 which is itself a member of a union. For example, given:
615 union { struct { int i; int j; }; };
617 initializing both `i' and `j' makes sense. */
618 field_type
= DECL_CONTEXT (field
);
622 tree last_field_type
;
624 last_field_type
= DECL_CONTEXT (last_field
);
627 if (same_type_p (last_field_type
, field_type
))
629 if (TREE_CODE (field_type
) == UNION_TYPE
)
630 error ("%Jinitializations for multiple members of %qT",
631 current_function_decl
, last_field_type
);
636 if (same_type_p (last_field_type
, t
))
639 last_field_type
= TYPE_CONTEXT (last_field_type
);
642 /* If we've reached the outermost class, then we're
644 if (same_type_p (field_type
, t
))
647 field_type
= TYPE_CONTEXT (field_type
);
658 /* Initialize all bases and members of CURRENT_CLASS_TYPE. MEM_INITS
659 is a TREE_LIST giving the explicit mem-initializer-list for the
660 constructor. The TREE_PURPOSE of each entry is a subobject (a
661 FIELD_DECL or a BINFO) of the CURRENT_CLASS_TYPE. The TREE_VALUE
662 is a TREE_LIST giving the arguments to the constructor or
663 void_type_node for an empty list of arguments. */
666 emit_mem_initializers (tree mem_inits
)
668 /* We will already have issued an error message about the fact that
669 the type is incomplete. */
670 if (!COMPLETE_TYPE_P (current_class_type
))
673 /* Sort the mem-initializers into the order in which the
674 initializations should be performed. */
675 mem_inits
= sort_mem_initializers (current_class_type
, mem_inits
);
677 in_base_initializer
= 1;
679 /* Initialize base classes. */
681 && TREE_CODE (TREE_PURPOSE (mem_inits
)) != FIELD_DECL
)
683 tree subobject
= TREE_PURPOSE (mem_inits
);
684 tree arguments
= TREE_VALUE (mem_inits
);
686 /* If these initializations are taking place in a copy
687 constructor, the base class should probably be explicitly
689 if (extra_warnings
&& !arguments
690 && DECL_COPY_CONSTRUCTOR_P (current_function_decl
)
691 && TYPE_NEEDS_CONSTRUCTING (BINFO_TYPE (subobject
)))
692 warning (0, "%Jbase class %q#T should be explicitly initialized in the "
694 current_function_decl
, BINFO_TYPE (subobject
));
696 /* If an explicit -- but empty -- initializer list was present,
697 treat it just like default initialization at this point. */
698 if (arguments
== void_type_node
)
699 arguments
= NULL_TREE
;
701 /* Initialize the base. */
702 if (BINFO_VIRTUAL_P (subobject
))
703 construct_virtual_base (subobject
, arguments
);
708 base_addr
= build_base_path (PLUS_EXPR
, current_class_ptr
,
710 expand_aggr_init_1 (subobject
, NULL_TREE
,
711 build_indirect_ref (base_addr
, NULL
),
714 expand_cleanup_for_base (subobject
, NULL_TREE
);
717 mem_inits
= TREE_CHAIN (mem_inits
);
719 in_base_initializer
= 0;
721 /* Initialize the vptrs. */
722 initialize_vtbl_ptrs (current_class_ptr
);
724 /* Initialize the data members. */
727 perform_member_init (TREE_PURPOSE (mem_inits
),
728 TREE_VALUE (mem_inits
));
729 mem_inits
= TREE_CHAIN (mem_inits
);
733 /* Returns the address of the vtable (i.e., the value that should be
734 assigned to the vptr) for BINFO. */
737 build_vtbl_address (tree binfo
)
739 tree binfo_for
= binfo
;
742 if (BINFO_VPTR_INDEX (binfo
) && BINFO_VIRTUAL_P (binfo
))
743 /* If this is a virtual primary base, then the vtable we want to store
744 is that for the base this is being used as the primary base of. We
745 can't simply skip the initialization, because we may be expanding the
746 inits of a subobject constructor where the virtual base layout
748 while (BINFO_PRIMARY_P (binfo_for
))
749 binfo_for
= BINFO_INHERITANCE_CHAIN (binfo_for
);
751 /* Figure out what vtable BINFO's vtable is based on, and mark it as
753 vtbl
= get_vtbl_decl_for_binfo (binfo_for
);
754 assemble_external (vtbl
);
755 TREE_USED (vtbl
) = 1;
757 /* Now compute the address to use when initializing the vptr. */
758 vtbl
= unshare_expr (BINFO_VTABLE (binfo_for
));
759 if (TREE_CODE (vtbl
) == VAR_DECL
)
760 vtbl
= build1 (ADDR_EXPR
, build_pointer_type (TREE_TYPE (vtbl
)), vtbl
);
765 /* This code sets up the virtual function tables appropriate for
766 the pointer DECL. It is a one-ply initialization.
768 BINFO is the exact type that DECL is supposed to be. In
769 multiple inheritance, this might mean "C's A" if C : A, B. */
772 expand_virtual_init (tree binfo
, tree decl
)
777 /* Compute the initializer for vptr. */
778 vtbl
= build_vtbl_address (binfo
);
780 /* We may get this vptr from a VTT, if this is a subobject
781 constructor or subobject destructor. */
782 vtt_index
= BINFO_VPTR_INDEX (binfo
);
788 /* Compute the value to use, when there's a VTT. */
789 vtt_parm
= current_vtt_parm
;
790 vtbl2
= build2 (PLUS_EXPR
,
791 TREE_TYPE (vtt_parm
),
794 vtbl2
= build_indirect_ref (vtbl2
, NULL
);
795 vtbl2
= convert (TREE_TYPE (vtbl
), vtbl2
);
797 /* The actual initializer is the VTT value only in the subobject
798 constructor. In maybe_clone_body we'll substitute NULL for
799 the vtt_parm in the case of the non-subobject constructor. */
800 vtbl
= build3 (COND_EXPR
,
802 build2 (EQ_EXPR
, boolean_type_node
,
803 current_in_charge_parm
, integer_zero_node
),
808 /* Compute the location of the vtpr. */
809 vtbl_ptr
= build_vfield_ref (build_indirect_ref (decl
, NULL
),
811 gcc_assert (vtbl_ptr
!= error_mark_node
);
813 /* Assign the vtable to the vptr. */
814 vtbl
= convert_force (TREE_TYPE (vtbl_ptr
), vtbl
, 0);
815 finish_expr_stmt (build_modify_expr (vtbl_ptr
, NOP_EXPR
, vtbl
));
818 /* If an exception is thrown in a constructor, those base classes already
819 constructed must be destroyed. This function creates the cleanup
820 for BINFO, which has just been constructed. If FLAG is non-NULL,
821 it is a DECL which is nonzero when this base needs to be
825 expand_cleanup_for_base (tree binfo
, tree flag
)
829 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (BINFO_TYPE (binfo
)))
832 /* Call the destructor. */
833 expr
= build_special_member_call (current_class_ref
,
834 base_dtor_identifier
,
837 LOOKUP_NORMAL
| LOOKUP_NONVIRTUAL
);
839 expr
= fold_build3 (COND_EXPR
, void_type_node
,
840 c_common_truthvalue_conversion (flag
),
841 expr
, integer_zero_node
);
843 finish_eh_cleanup (expr
);
846 /* Construct the virtual base-class VBASE passing the ARGUMENTS to its
850 construct_virtual_base (tree vbase
, tree arguments
)
856 /* If there are virtual base classes with destructors, we need to
857 emit cleanups to destroy them if an exception is thrown during
858 the construction process. These exception regions (i.e., the
859 period during which the cleanups must occur) begin from the time
860 the construction is complete to the end of the function. If we
861 create a conditional block in which to initialize the
862 base-classes, then the cleanup region for the virtual base begins
863 inside a block, and ends outside of that block. This situation
864 confuses the sjlj exception-handling code. Therefore, we do not
865 create a single conditional block, but one for each
866 initialization. (That way the cleanup regions always begin
867 in the outer block.) We trust the back-end to figure out
868 that the FLAG will not change across initializations, and
869 avoid doing multiple tests. */
870 flag
= TREE_CHAIN (DECL_ARGUMENTS (current_function_decl
));
871 inner_if_stmt
= begin_if_stmt ();
872 finish_if_stmt_cond (flag
, inner_if_stmt
);
874 /* Compute the location of the virtual base. If we're
875 constructing virtual bases, then we must be the most derived
876 class. Therefore, we don't have to look up the virtual base;
877 we already know where it is. */
878 exp
= convert_to_base_statically (current_class_ref
, vbase
);
880 expand_aggr_init_1 (vbase
, current_class_ref
, exp
, arguments
,
882 finish_then_clause (inner_if_stmt
);
883 finish_if_stmt (inner_if_stmt
);
885 expand_cleanup_for_base (vbase
, flag
);
888 /* Find the context in which this FIELD can be initialized. */
891 initializing_context (tree field
)
893 tree t
= DECL_CONTEXT (field
);
895 /* Anonymous union members can be initialized in the first enclosing
896 non-anonymous union context. */
897 while (t
&& ANON_AGGR_TYPE_P (t
))
898 t
= TYPE_CONTEXT (t
);
902 /* Function to give error message if member initialization specification
903 is erroneous. FIELD is the member we decided to initialize.
904 TYPE is the type for which the initialization is being performed.
905 FIELD must be a member of TYPE.
907 MEMBER_NAME is the name of the member. */
910 member_init_ok_or_else (tree field
, tree type
, tree member_name
)
912 if (field
== error_mark_node
)
916 error ("class %qT does not have any field named %qD", type
,
920 if (TREE_CODE (field
) == VAR_DECL
)
922 error ("%q#D is a static data member; it can only be "
923 "initialized at its definition",
927 if (TREE_CODE (field
) != FIELD_DECL
)
929 error ("%q#D is not a non-static data member of %qT",
933 if (initializing_context (field
) != type
)
935 error ("class %qT does not have any field named %qD", type
,
943 /* NAME is a FIELD_DECL, an IDENTIFIER_NODE which names a field, or it
944 is a _TYPE node or TYPE_DECL which names a base for that type.
945 Check the validity of NAME, and return either the base _TYPE, base
946 binfo, or the FIELD_DECL of the member. If NAME is invalid, return
947 NULL_TREE and issue a diagnostic.
949 An old style unnamed direct single base construction is permitted,
950 where NAME is NULL. */
953 expand_member_init (tree name
)
958 if (!current_class_ref
)
963 /* This is an obsolete unnamed base class initializer. The
964 parser will already have warned about its use. */
965 switch (BINFO_N_BASE_BINFOS (TYPE_BINFO (current_class_type
)))
968 error ("unnamed initializer for %qT, which has no base classes",
972 basetype
= BINFO_TYPE
973 (BINFO_BASE_BINFO (TYPE_BINFO (current_class_type
), 0));
976 error ("unnamed initializer for %qT, which uses multiple inheritance",
981 else if (TYPE_P (name
))
983 basetype
= TYPE_MAIN_VARIANT (name
);
984 name
= TYPE_NAME (name
);
986 else if (TREE_CODE (name
) == TYPE_DECL
)
987 basetype
= TYPE_MAIN_VARIANT (TREE_TYPE (name
));
989 basetype
= NULL_TREE
;
998 if (current_template_parms
)
1001 class_binfo
= TYPE_BINFO (current_class_type
);
1002 direct_binfo
= NULL_TREE
;
1003 virtual_binfo
= NULL_TREE
;
1005 /* Look for a direct base. */
1006 for (i
= 0; BINFO_BASE_ITERATE (class_binfo
, i
, direct_binfo
); ++i
)
1007 if (SAME_BINFO_TYPE_P (BINFO_TYPE (direct_binfo
), basetype
))
1010 /* Look for a virtual base -- unless the direct base is itself
1012 if (!direct_binfo
|| !BINFO_VIRTUAL_P (direct_binfo
))
1013 virtual_binfo
= binfo_for_vbase (basetype
, current_class_type
);
1015 /* [class.base.init]
1017 If a mem-initializer-id is ambiguous because it designates
1018 both a direct non-virtual base class and an inherited virtual
1019 base class, the mem-initializer is ill-formed. */
1020 if (direct_binfo
&& virtual_binfo
)
1022 error ("%qD is both a direct base and an indirect virtual base",
1027 if (!direct_binfo
&& !virtual_binfo
)
1029 if (CLASSTYPE_VBASECLASSES (current_class_type
))
1030 error ("type %qT is not a direct or virtual base of %qT",
1031 basetype
, current_class_type
);
1033 error ("type %qT is not a direct base of %qT",
1034 basetype
, current_class_type
);
1038 return direct_binfo
? direct_binfo
: virtual_binfo
;
1042 if (TREE_CODE (name
) == IDENTIFIER_NODE
)
1043 field
= lookup_field (current_class_type
, name
, 1, false);
1047 if (member_init_ok_or_else (field
, current_class_type
, name
))
1054 /* This is like `expand_member_init', only it stores one aggregate
1057 INIT comes in two flavors: it is either a value which
1058 is to be stored in EXP, or it is a parameter list
1059 to go to a constructor, which will operate on EXP.
1060 If INIT is not a parameter list for a constructor, then set
1061 LOOKUP_ONLYCONVERTING.
1062 If FLAGS is LOOKUP_ONLYCONVERTING then it is the = init form of
1063 the initializer, if FLAGS is 0, then it is the (init) form.
1064 If `init' is a CONSTRUCTOR, then we emit a warning message,
1065 explaining that such initializations are invalid.
1067 If INIT resolves to a CALL_EXPR which happens to return
1068 something of the type we are looking for, then we know
1069 that we can safely use that call to perform the
1072 The virtual function table pointer cannot be set up here, because
1073 we do not really know its type.
1075 This never calls operator=().
1077 When initializing, nothing is CONST.
1079 A default copy constructor may have to be used to perform the
1082 A constructor or a conversion operator may have to be used to
1083 perform the initialization, but not both, as it would be ambiguous. */
1086 build_aggr_init (tree exp
, tree init
, int flags
)
1091 tree type
= TREE_TYPE (exp
);
1092 int was_const
= TREE_READONLY (exp
);
1093 int was_volatile
= TREE_THIS_VOLATILE (exp
);
1096 if (init
== error_mark_node
)
1097 return error_mark_node
;
1099 TREE_READONLY (exp
) = 0;
1100 TREE_THIS_VOLATILE (exp
) = 0;
1102 if (init
&& TREE_CODE (init
) != TREE_LIST
)
1103 flags
|= LOOKUP_ONLYCONVERTING
;
1105 if (TREE_CODE (type
) == ARRAY_TYPE
)
1109 /* An array may not be initialized use the parenthesized
1110 initialization form -- unless the initializer is "()". */
1111 if (init
&& TREE_CODE (init
) == TREE_LIST
)
1113 error ("bad array initializer");
1114 return error_mark_node
;
1116 /* Must arrange to initialize each element of EXP
1117 from elements of INIT. */
1118 itype
= init
? TREE_TYPE (init
) : NULL_TREE
;
1119 if (cp_type_quals (type
) != TYPE_UNQUALIFIED
)
1120 TREE_TYPE (exp
) = TYPE_MAIN_VARIANT (type
);
1121 if (itype
&& cp_type_quals (itype
) != TYPE_UNQUALIFIED
)
1122 itype
= TREE_TYPE (init
) = TYPE_MAIN_VARIANT (itype
);
1123 stmt_expr
= build_vec_init (exp
, NULL_TREE
, init
,
1124 /*explicit_default_init_p=*/false,
1125 itype
&& same_type_p (itype
,
1127 TREE_READONLY (exp
) = was_const
;
1128 TREE_THIS_VOLATILE (exp
) = was_volatile
;
1129 TREE_TYPE (exp
) = type
;
1131 TREE_TYPE (init
) = itype
;
1135 if (TREE_CODE (exp
) == VAR_DECL
|| TREE_CODE (exp
) == PARM_DECL
)
1136 /* Just know that we've seen something for this node. */
1137 TREE_USED (exp
) = 1;
1139 TREE_TYPE (exp
) = TYPE_MAIN_VARIANT (type
);
1140 is_global
= begin_init_stmts (&stmt_expr
, &compound_stmt
);
1141 destroy_temps
= stmts_are_full_exprs_p ();
1142 current_stmt_tree ()->stmts_are_full_exprs_p
= 0;
1143 expand_aggr_init_1 (TYPE_BINFO (type
), exp
, exp
,
1144 init
, LOOKUP_NORMAL
|flags
);
1145 stmt_expr
= finish_init_stmts (is_global
, stmt_expr
, compound_stmt
);
1146 current_stmt_tree ()->stmts_are_full_exprs_p
= destroy_temps
;
1147 TREE_TYPE (exp
) = type
;
1148 TREE_READONLY (exp
) = was_const
;
1149 TREE_THIS_VOLATILE (exp
) = was_volatile
;
1154 /* Like build_aggr_init, but not just for aggregates. */
1157 build_init (tree decl
, tree init
, int flags
)
1161 if (TREE_CODE (TREE_TYPE (decl
)) == ARRAY_TYPE
)
1162 expr
= build_aggr_init (decl
, init
, flags
);
1163 else if (CLASS_TYPE_P (TREE_TYPE (decl
)))
1164 expr
= build_special_member_call (decl
, complete_ctor_identifier
,
1165 build_tree_list (NULL_TREE
, init
),
1167 LOOKUP_NORMAL
|flags
);
1169 expr
= build2 (INIT_EXPR
, TREE_TYPE (decl
), decl
, init
);
1175 expand_default_init (tree binfo
, tree true_exp
, tree exp
, tree init
, int flags
)
1177 tree type
= TREE_TYPE (exp
);
1180 /* It fails because there may not be a constructor which takes
1181 its own type as the first (or only parameter), but which does
1182 take other types via a conversion. So, if the thing initializing
1183 the expression is a unit element of type X, first try X(X&),
1184 followed by initialization by X. If neither of these work
1185 out, then look hard. */
1189 if (init
&& TREE_CODE (init
) != TREE_LIST
1190 && (flags
& LOOKUP_ONLYCONVERTING
))
1192 /* Base subobjects should only get direct-initialization. */
1193 gcc_assert (true_exp
== exp
);
1195 if (flags
& DIRECT_BIND
)
1196 /* Do nothing. We hit this in two cases: Reference initialization,
1197 where we aren't initializing a real variable, so we don't want
1198 to run a new constructor; and catching an exception, where we
1199 have already built up the constructor call so we could wrap it
1200 in an exception region. */;
1201 else if (BRACE_ENCLOSED_INITIALIZER_P (init
))
1203 /* A brace-enclosed initializer for an aggregate. */
1204 gcc_assert (CP_AGGREGATE_TYPE_P (type
));
1205 init
= digest_init (type
, init
);
1208 init
= ocp_convert (type
, init
, CONV_IMPLICIT
|CONV_FORCE_TEMP
, flags
);
1210 if (TREE_CODE (init
) == MUST_NOT_THROW_EXPR
)
1211 /* We need to protect the initialization of a catch parm with a
1212 call to terminate(), which shows up as a MUST_NOT_THROW_EXPR
1213 around the TARGET_EXPR for the copy constructor. See
1214 initialize_handler_parm. */
1216 TREE_OPERAND (init
, 0) = build2 (INIT_EXPR
, TREE_TYPE (exp
), exp
,
1217 TREE_OPERAND (init
, 0));
1218 TREE_TYPE (init
) = void_type_node
;
1221 init
= build2 (INIT_EXPR
, TREE_TYPE (exp
), exp
, init
);
1222 TREE_SIDE_EFFECTS (init
) = 1;
1223 finish_expr_stmt (init
);
1227 if (init
== NULL_TREE
1228 || (TREE_CODE (init
) == TREE_LIST
&& ! TREE_TYPE (init
)))
1232 init
= TREE_VALUE (parms
);
1235 parms
= build_tree_list (NULL_TREE
, init
);
1237 if (true_exp
== exp
)
1238 ctor_name
= complete_ctor_identifier
;
1240 ctor_name
= base_ctor_identifier
;
1242 rval
= build_special_member_call (exp
, ctor_name
, parms
, binfo
, flags
);
1243 if (TREE_SIDE_EFFECTS (rval
))
1244 finish_expr_stmt (convert_to_void (rval
, NULL
));
1247 /* This function is responsible for initializing EXP with INIT
1250 BINFO is the binfo of the type for who we are performing the
1251 initialization. For example, if W is a virtual base class of A and B,
1253 If we are initializing B, then W must contain B's W vtable, whereas
1254 were we initializing C, W must contain C's W vtable.
1256 TRUE_EXP is nonzero if it is the true expression being initialized.
1257 In this case, it may be EXP, or may just contain EXP. The reason we
1258 need this is because if EXP is a base element of TRUE_EXP, we
1259 don't necessarily know by looking at EXP where its virtual
1260 baseclass fields should really be pointing. But we do know
1261 from TRUE_EXP. In constructors, we don't know anything about
1262 the value being initialized.
1264 FLAGS is just passed to `build_new_method_call'. See that function
1265 for its description. */
1268 expand_aggr_init_1 (tree binfo
, tree true_exp
, tree exp
, tree init
, int flags
)
1270 tree type
= TREE_TYPE (exp
);
1272 gcc_assert (init
!= error_mark_node
&& type
!= error_mark_node
);
1273 gcc_assert (building_stmt_tree ());
1275 /* Use a function returning the desired type to initialize EXP for us.
1276 If the function is a constructor, and its first argument is
1277 NULL_TREE, know that it was meant for us--just slide exp on
1278 in and expand the constructor. Constructors now come
1281 if (init
&& TREE_CODE (exp
) == VAR_DECL
1282 && COMPOUND_LITERAL_P (init
))
1284 /* If store_init_value returns NULL_TREE, the INIT has been
1285 recorded as the DECL_INITIAL for EXP. That means there's
1286 nothing more we have to do. */
1287 init
= store_init_value (exp
, init
);
1289 finish_expr_stmt (init
);
1293 /* We know that expand_default_init can handle everything we want
1295 expand_default_init (binfo
, true_exp
, exp
, init
, flags
);
1298 /* Report an error if TYPE is not a user-defined, aggregate type. If
1299 OR_ELSE is nonzero, give an error message. */
1302 is_aggr_type (tree type
, int or_else
)
1304 if (type
== error_mark_node
)
1307 if (! IS_AGGR_TYPE (type
)
1308 && TREE_CODE (type
) != TEMPLATE_TYPE_PARM
1309 && TREE_CODE (type
) != BOUND_TEMPLATE_TEMPLATE_PARM
)
1312 error ("%qT is not an aggregate type", type
);
1319 get_type_value (tree name
)
1321 if (name
== error_mark_node
)
1324 if (IDENTIFIER_HAS_TYPE_VALUE (name
))
1325 return IDENTIFIER_TYPE_VALUE (name
);
1330 /* Build a reference to a member of an aggregate. This is not a C++
1331 `&', but really something which can have its address taken, and
1332 then act as a pointer to member, for example TYPE :: FIELD can have
1333 its address taken by saying & TYPE :: FIELD. ADDRESS_P is true if
1334 this expression is the operand of "&".
1336 @@ Prints out lousy diagnostics for operator <typename>
1339 @@ This function should be rewritten and placed in search.c. */
1342 build_offset_ref (tree type
, tree name
, bool address_p
)
1346 tree basebinfo
= NULL_TREE
;
1347 tree orig_name
= name
;
1349 /* class templates can come in as TEMPLATE_DECLs here. */
1350 if (TREE_CODE (name
) == TEMPLATE_DECL
)
1353 if (dependent_type_p (type
) || type_dependent_expression_p (name
))
1354 return build_qualified_name (NULL_TREE
, type
, name
,
1355 /*template_p=*/false);
1357 if (TREE_CODE (name
) == TEMPLATE_ID_EXPR
)
1359 /* If the NAME is a TEMPLATE_ID_EXPR, we are looking at
1360 something like `a.template f<int>' or the like. For the most
1361 part, we treat this just like a.f. We do remember, however,
1362 the template-id that was used. */
1363 name
= TREE_OPERAND (orig_name
, 0);
1366 name
= DECL_NAME (name
);
1369 if (TREE_CODE (name
) == COMPONENT_REF
)
1370 name
= TREE_OPERAND (name
, 1);
1371 if (TREE_CODE (name
) == OVERLOAD
)
1372 name
= DECL_NAME (OVL_CURRENT (name
));
1375 gcc_assert (TREE_CODE (name
) == IDENTIFIER_NODE
);
1378 if (type
== NULL_TREE
)
1379 return error_mark_node
;
1381 /* Handle namespace names fully here. */
1382 if (TREE_CODE (type
) == NAMESPACE_DECL
)
1384 tree t
= lookup_namespace_name (type
, name
);
1385 if (t
== error_mark_node
)
1387 if (TREE_CODE (orig_name
) == TEMPLATE_ID_EXPR
)
1388 /* Reconstruct the TEMPLATE_ID_EXPR. */
1389 t
= build2 (TEMPLATE_ID_EXPR
, TREE_TYPE (t
),
1390 t
, TREE_OPERAND (orig_name
, 1));
1391 if (! type_unknown_p (t
))
1394 t
= convert_from_reference (t
);
1399 if (! is_aggr_type (type
, 1))
1400 return error_mark_node
;
1402 if (TREE_CODE (name
) == BIT_NOT_EXPR
)
1404 name
= TREE_OPERAND (name
, 0);
1405 if (! check_dtor_name (type
, name
))
1406 error ("qualified type %qT does not match destructor name %<~%T%>",
1408 name
= dtor_identifier
;
1411 if (!COMPLETE_TYPE_P (complete_type (type
))
1412 && !TYPE_BEING_DEFINED (type
))
1414 error ("incomplete type %qT does not have member %qD", type
, name
);
1415 return error_mark_node
;
1418 /* Set up BASEBINFO for member lookup. */
1419 decl
= maybe_dummy_object (type
, &basebinfo
);
1421 if (BASELINK_P (name
) || DECL_P (name
))
1425 member
= lookup_member (basebinfo
, name
, 1, 0);
1427 if (member
== error_mark_node
)
1428 return error_mark_node
;
1433 error ("%qD is not a member of type %qT", name
, type
);
1434 return error_mark_node
;
1437 if (TREE_CODE (member
) == TYPE_DECL
)
1439 TREE_USED (member
) = 1;
1442 /* static class members and class-specific enum
1443 values can be returned without further ado. */
1444 if (TREE_CODE (member
) == VAR_DECL
|| TREE_CODE (member
) == CONST_DECL
)
1447 return convert_from_reference (member
);
1450 if (TREE_CODE (member
) == FIELD_DECL
&& DECL_C_BIT_FIELD (member
))
1452 error ("invalid pointer to bit-field %qD", member
);
1453 return error_mark_node
;
1456 /* A lot of this logic is now handled in lookup_member. */
1457 if (BASELINK_P (member
))
1459 /* Go from the TREE_BASELINK to the member function info. */
1460 tree fnfields
= member
;
1461 tree t
= BASELINK_FUNCTIONS (fnfields
);
1463 if (TREE_CODE (orig_name
) == TEMPLATE_ID_EXPR
)
1465 /* The FNFIELDS are going to contain functions that aren't
1466 necessarily templates, and templates that don't
1467 necessarily match the explicit template parameters. We
1468 save all the functions, and the explicit parameters, and
1469 then figure out exactly what to instantiate with what
1470 arguments in instantiate_type. */
1472 if (TREE_CODE (t
) != OVERLOAD
)
1473 /* The code in instantiate_type which will process this
1474 expects to encounter OVERLOADs, not raw functions. */
1475 t
= ovl_cons (t
, NULL_TREE
);
1477 t
= build2 (TEMPLATE_ID_EXPR
, TREE_TYPE (t
), t
,
1478 TREE_OPERAND (orig_name
, 1));
1479 t
= build2 (OFFSET_REF
, unknown_type_node
, decl
, t
);
1481 PTRMEM_OK_P (t
) = 1;
1486 if (TREE_CODE (t
) != TEMPLATE_ID_EXPR
&& !really_overloaded_fn (t
))
1488 /* Get rid of a potential OVERLOAD around it. */
1489 t
= OVL_CURRENT (t
);
1491 /* Unique functions are handled easily. */
1493 /* For non-static member of base class, we need a special rule
1494 for access checking [class.protected]:
1496 If the access is to form a pointer to member, the
1497 nested-name-specifier shall name the derived class
1498 (or any class derived from that class). */
1499 if (address_p
&& DECL_P (t
)
1500 && DECL_NONSTATIC_MEMBER_P (t
))
1501 perform_or_defer_access_check (TYPE_BINFO (type
), t
);
1503 perform_or_defer_access_check (basebinfo
, t
);
1506 if (DECL_STATIC_FUNCTION_P (t
))
1512 TREE_TYPE (fnfields
) = unknown_type_node
;
1516 else if (address_p
&& TREE_CODE (member
) == FIELD_DECL
)
1517 /* We need additional test besides the one in
1518 check_accessibility_of_qualified_id in case it is
1519 a pointer to non-static member. */
1520 perform_or_defer_access_check (TYPE_BINFO (type
), member
);
1524 /* If MEMBER is non-static, then the program has fallen afoul of
1527 An id-expression that denotes a nonstatic data member or
1528 nonstatic member function of a class can only be used:
1530 -- as part of a class member access (_expr.ref_) in which the
1531 object-expression refers to the member's class or a class
1532 derived from that class, or
1534 -- to form a pointer to member (_expr.unary.op_), or
1536 -- in the body of a nonstatic member function of that class or
1537 of a class derived from that class (_class.mfct.nonstatic_), or
1539 -- in a mem-initializer for a constructor for that class or for
1540 a class derived from that class (_class.base.init_). */
1541 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (member
))
1543 /* Build a representation of a the qualified name suitable
1544 for use as the operand to "&" -- even though the "&" is
1545 not actually present. */
1546 member
= build2 (OFFSET_REF
, TREE_TYPE (member
), decl
, member
);
1547 /* In Microsoft mode, treat a non-static member function as if
1548 it were a pointer-to-member. */
1549 if (flag_ms_extensions
)
1551 PTRMEM_OK_P (member
) = 1;
1552 return build_unary_op (ADDR_EXPR
, member
, 0);
1554 error ("invalid use of non-static member function %qD",
1555 TREE_OPERAND (member
, 1));
1556 return error_mark_node
;
1558 else if (TREE_CODE (member
) == FIELD_DECL
)
1560 error ("invalid use of non-static data member %qD", member
);
1561 return error_mark_node
;
1566 member
= build2 (OFFSET_REF
, TREE_TYPE (member
), decl
, member
);
1567 PTRMEM_OK_P (member
) = 1;
1571 /* If DECL is a scalar enumeration constant or variable with a
1572 constant initializer, return the initializer (or, its initializers,
1573 recursively); otherwise, return DECL. If INTEGRAL_P, the
1574 initializer is only returned if DECL is an integral
1575 constant-expression. */
1578 constant_value_1 (tree decl
, bool integral_p
)
1580 while (TREE_CODE (decl
) == CONST_DECL
1582 ? DECL_INTEGRAL_CONSTANT_VAR_P (decl
)
1583 : (TREE_CODE (decl
) == VAR_DECL
1584 && CP_TYPE_CONST_NON_VOLATILE_P (TREE_TYPE (decl
)))))
1587 /* Static data members in template classes may have
1588 non-dependent initializers. References to such non-static
1589 data members are not value-dependent, so we must retrieve the
1590 initializer here. The DECL_INITIAL will have the right type,
1591 but will not have been folded because that would prevent us
1592 from performing all appropriate semantic checks at
1593 instantiation time. */
1594 if (DECL_CLASS_SCOPE_P (decl
)
1595 && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl
))
1596 && uses_template_parms (CLASSTYPE_TI_ARGS
1597 (DECL_CONTEXT (decl
))))
1599 ++processing_template_decl
;
1600 init
= fold_non_dependent_expr (DECL_INITIAL (decl
));
1601 --processing_template_decl
;
1605 /* If DECL is a static data member in a template
1606 specialization, we must instantiate it here. The
1607 initializer for the static data member is not processed
1608 until needed; we need it now. */
1610 init
= DECL_INITIAL (decl
);
1612 /* If INIT is ERROR_MARK_NODE, that may mean that we are
1613 presently processing the initializer, so we conservatively
1614 treat this situation as meaning that DECL is uninitialized. */
1615 if (init
== error_mark_node
)
1618 || !TREE_TYPE (init
)
1620 ? !INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (init
))
1621 : (!TREE_CONSTANT (init
)
1622 /* Do not return an aggregate constant (of which
1623 string literals are a special case), as we do not
1624 want to make inadvertent copies of such entities,
1625 and we must be sure that their addresses are the
1627 || TREE_CODE (init
) == CONSTRUCTOR
1628 || TREE_CODE (init
) == STRING_CST
)))
1630 decl
= unshare_expr (init
);
1635 /* If DECL is a CONST_DECL, or a constant VAR_DECL initialized by
1636 constant of integral or enumeration type, then return that value.
1637 These are those variables permitted in constant expressions by
1641 integral_constant_value (tree decl
)
1643 return constant_value_1 (decl
, /*integral_p=*/true);
1646 /* A more relaxed version of integral_constant_value, used by the
1647 common C/C++ code and by the C++ front-end for optimization
1651 decl_constant_value (tree decl
)
1653 return constant_value_1 (decl
,
1654 /*integral_p=*/processing_template_decl
);
1657 /* Common subroutines of build_new and build_vec_delete. */
1659 /* Call the global __builtin_delete to delete ADDR. */
1662 build_builtin_delete_call (tree addr
)
1664 mark_used (global_delete_fndecl
);
1665 return build_call (global_delete_fndecl
, build_tree_list (NULL_TREE
, addr
));
1668 /* Generate a representation for a C++ "new" expression. PLACEMENT is
1669 a TREE_LIST of placement-new arguments (or NULL_TREE if none). If
1670 NELTS is NULL, TYPE is the type of the storage to be allocated. If
1671 NELTS is not NULL, then this is an array-new allocation; TYPE is
1672 the type of the elements in the array and NELTS is the number of
1673 elements in the array. INIT, if non-NULL, is the initializer for
1674 the new object. If USE_GLOBAL_NEW is true, then the user
1675 explicitly wrote "::new" rather than just "new". */
1678 build_new (tree placement
, tree type
, tree nelts
, tree init
,
1683 if (placement
== error_mark_node
|| type
== error_mark_node
)
1684 return error_mark_node
;
1686 if (processing_template_decl
)
1688 rval
= build_min (NEW_EXPR
, build_pointer_type (type
),
1689 placement
, type
, nelts
, init
);
1690 NEW_EXPR_USE_GLOBAL (rval
) = use_global_new
;
1691 TREE_SIDE_EFFECTS (rval
) = 1;
1697 if (!build_expr_type_conversion (WANT_INT
| WANT_ENUM
, nelts
, false))
1698 pedwarn ("size in array new must have integral type");
1699 nelts
= save_expr (cp_convert (sizetype
, nelts
));
1700 if (nelts
== integer_zero_node
)
1701 warning (0, "zero size array reserves no space");
1704 /* ``A reference cannot be created by the new operator. A reference
1705 is not an object (8.2.2, 8.4.3), so a pointer to it could not be
1706 returned by new.'' ARM 5.3.3 */
1707 if (TREE_CODE (type
) == REFERENCE_TYPE
)
1709 error ("new cannot be applied to a reference type");
1710 type
= TREE_TYPE (type
);
1713 if (TREE_CODE (type
) == FUNCTION_TYPE
)
1715 error ("new cannot be applied to a function type");
1716 return error_mark_node
;
1719 rval
= build4 (NEW_EXPR
, build_pointer_type (type
), placement
, type
,
1721 NEW_EXPR_USE_GLOBAL (rval
) = use_global_new
;
1722 TREE_SIDE_EFFECTS (rval
) = 1;
1723 rval
= build_new_1 (rval
);
1724 if (rval
== error_mark_node
)
1725 return error_mark_node
;
1727 /* Wrap it in a NOP_EXPR so warn_if_unused_value doesn't complain. */
1728 rval
= build1 (NOP_EXPR
, TREE_TYPE (rval
), rval
);
1729 TREE_NO_WARNING (rval
) = 1;
1734 /* Given a Java class, return a decl for the corresponding java.lang.Class. */
1737 build_java_class_ref (tree type
)
1739 tree name
= NULL_TREE
, class_decl
;
1740 static tree CL_suffix
= NULL_TREE
;
1741 if (CL_suffix
== NULL_TREE
)
1742 CL_suffix
= get_identifier("class$");
1743 if (jclass_node
== NULL_TREE
)
1745 jclass_node
= IDENTIFIER_GLOBAL_VALUE (get_identifier ("jclass"));
1746 if (jclass_node
== NULL_TREE
)
1747 fatal_error ("call to Java constructor, while %<jclass%> undefined");
1749 jclass_node
= TREE_TYPE (jclass_node
);
1752 /* Mangle the class$ field. */
1755 for (field
= TYPE_FIELDS (type
); field
; field
= TREE_CHAIN (field
))
1756 if (DECL_NAME (field
) == CL_suffix
)
1758 mangle_decl (field
);
1759 name
= DECL_ASSEMBLER_NAME (field
);
1763 internal_error ("can't find class$");
1766 class_decl
= IDENTIFIER_GLOBAL_VALUE (name
);
1767 if (class_decl
== NULL_TREE
)
1769 class_decl
= build_decl (VAR_DECL
, name
, TREE_TYPE (jclass_node
));
1770 TREE_STATIC (class_decl
) = 1;
1771 DECL_EXTERNAL (class_decl
) = 1;
1772 TREE_PUBLIC (class_decl
) = 1;
1773 DECL_ARTIFICIAL (class_decl
) = 1;
1774 DECL_IGNORED_P (class_decl
) = 1;
1775 pushdecl_top_level (class_decl
);
1776 make_decl_rtl (class_decl
);
1782 /* Called from cplus_expand_expr when expanding a NEW_EXPR. The return
1783 value is immediately handed to expand_expr. */
1786 build_new_1 (tree exp
)
1788 tree placement
, init
;
1790 /* True iff this is a call to "operator new[]" instead of just
1792 bool array_p
= false;
1793 /* True iff ARRAY_P is true and the bound of the array type is
1794 not necessarily a compile time constant. For example, VLA_P is
1795 true for "new int[f()]". */
1797 /* The type being allocated. If ARRAY_P is true, this will be an
1800 /* If ARRAY_P is true, the element type of the array. This is an
1801 never ARRAY_TYPE; for something like "new int[3][4]", the
1802 ELT_TYPE is "int". If ARRAY_P is false, this is the same type as
1805 /* The type of the new-expression. (This type is always a pointer
1808 /* The type pointed to by POINTER_TYPE. This type may be different
1809 from ELT_TYPE for a multi-dimensional array; ELT_TYPE is never an
1810 ARRAY_TYPE, but TYPE may be an ARRAY_TYPE. */
1812 /* A pointer type pointing to the FULL_TYPE. */
1813 tree full_pointer_type
;
1814 tree outer_nelts
= NULL_TREE
;
1815 tree nelts
= NULL_TREE
;
1816 tree alloc_call
, alloc_expr
;
1817 /* The address returned by the call to "operator new". This node is
1818 a VAR_DECL and is therefore reusable. */
1821 tree cookie_expr
, init_expr
;
1822 int nothrow
, check_new
;
1823 /* Nonzero if the user wrote `::new' rather than just `new'. */
1824 int globally_qualified_p
;
1825 int use_java_new
= 0;
1826 /* If non-NULL, the number of extra bytes to allocate at the
1827 beginning of the storage allocated for an array-new expression in
1828 order to store the number of elements. */
1829 tree cookie_size
= NULL_TREE
;
1830 /* True if the function we are calling is a placement allocation
1832 bool placement_allocation_fn_p
;
1833 tree args
= NULL_TREE
;
1834 /* True if the storage must be initialized, either by a constructor
1835 or due to an explicit new-initializer. */
1836 bool is_initialized
;
1837 /* The address of the thing allocated, not including any cookie. In
1838 particular, if an array cookie is in use, DATA_ADDR is the
1839 address of the first array element. This node is a VAR_DECL, and
1840 is therefore reusable. */
1842 tree init_preeval_expr
= NULL_TREE
;
1844 placement
= TREE_OPERAND (exp
, 0);
1845 type
= TREE_OPERAND (exp
, 1);
1846 nelts
= TREE_OPERAND (exp
, 2);
1847 init
= TREE_OPERAND (exp
, 3);
1848 globally_qualified_p
= NEW_EXPR_USE_GLOBAL (exp
);
1854 outer_nelts
= nelts
;
1857 /* ??? The middle-end will error on us for building a VLA outside a
1858 function context. Methinks that's not it's purvey. So we'll do
1859 our own VLA layout later. */
1861 index
= convert (sizetype
, nelts
);
1862 index
= size_binop (MINUS_EXPR
, index
, size_one_node
);
1863 index
= build_index_type (index
);
1864 full_type
= build_cplus_array_type (type
, NULL_TREE
);
1865 /* We need a copy of the type as build_array_type will return a shared copy
1866 of the incomplete array type. */
1867 full_type
= build_distinct_type_copy (full_type
);
1868 TYPE_DOMAIN (full_type
) = index
;
1873 if (TREE_CODE (type
) == ARRAY_TYPE
)
1876 nelts
= array_type_nelts_top (type
);
1877 outer_nelts
= nelts
;
1878 type
= TREE_TYPE (type
);
1882 if (!complete_type_or_else (type
, exp
))
1883 return error_mark_node
;
1885 /* If our base type is an array, then make sure we know how many elements
1887 for (elt_type
= type
;
1888 TREE_CODE (elt_type
) == ARRAY_TYPE
;
1889 elt_type
= TREE_TYPE (elt_type
))
1890 nelts
= cp_build_binary_op (MULT_EXPR
, nelts
,
1891 array_type_nelts_top (elt_type
));
1893 if (TREE_CODE (elt_type
) == VOID_TYPE
)
1895 error ("invalid type %<void%> for new");
1896 return error_mark_node
;
1899 if (abstract_virtuals_error (NULL_TREE
, elt_type
))
1900 return error_mark_node
;
1902 is_initialized
= (TYPE_NEEDS_CONSTRUCTING (elt_type
) || init
);
1903 if (CP_TYPE_CONST_P (elt_type
) && !is_initialized
)
1905 error ("uninitialized const in %<new%> of %q#T", elt_type
);
1906 return error_mark_node
;
1909 size
= size_in_bytes (elt_type
);
1912 size
= size_binop (MULT_EXPR
, size
, convert (sizetype
, nelts
));
1917 /* Do our own VLA layout. Setting TYPE_SIZE/_UNIT is
1918 necessary in order for the <INIT_EXPR <*foo> <CONSTRUCTOR
1919 ...>> to be valid. */
1920 TYPE_SIZE_UNIT (full_type
) = size
;
1921 n
= convert (bitsizetype
, nelts
);
1922 bitsize
= size_binop (MULT_EXPR
, TYPE_SIZE (elt_type
), n
);
1923 TYPE_SIZE (full_type
) = bitsize
;
1927 /* Allocate the object. */
1928 if (! placement
&& TYPE_FOR_JAVA (elt_type
))
1930 tree class_addr
, alloc_decl
;
1931 tree class_decl
= build_java_class_ref (elt_type
);
1932 static const char alloc_name
[] = "_Jv_AllocObject";
1936 if (!get_global_value_if_present (get_identifier (alloc_name
),
1939 error ("call to Java constructor with %qs undefined", alloc_name
);
1940 return error_mark_node
;
1942 else if (really_overloaded_fn (alloc_decl
))
1944 error ("%qD should never be overloaded", alloc_decl
);
1945 return error_mark_node
;
1947 alloc_decl
= OVL_CURRENT (alloc_decl
);
1948 class_addr
= build1 (ADDR_EXPR
, jclass_node
, class_decl
);
1949 alloc_call
= (build_function_call
1951 build_tree_list (NULL_TREE
, class_addr
)));
1958 fnname
= ansi_opname (array_p
? VEC_NEW_EXPR
: NEW_EXPR
);
1960 if (!globally_qualified_p
1961 && CLASS_TYPE_P (elt_type
)
1963 ? TYPE_HAS_ARRAY_NEW_OPERATOR (elt_type
)
1964 : TYPE_HAS_NEW_OPERATOR (elt_type
)))
1966 /* Use a class-specific operator new. */
1967 /* If a cookie is required, add some extra space. */
1968 if (array_p
&& TYPE_VEC_NEW_USES_COOKIE (elt_type
))
1970 cookie_size
= targetm
.cxx
.get_cookie_size (elt_type
);
1971 size
= size_binop (PLUS_EXPR
, size
, cookie_size
);
1973 /* Create the argument list. */
1974 args
= tree_cons (NULL_TREE
, size
, placement
);
1975 /* Do name-lookup to find the appropriate operator. */
1976 fns
= lookup_fnfields (elt_type
, fnname
, /*protect=*/2);
1977 if (fns
== NULL_TREE
)
1979 error ("no suitable %qD found in class %qT", fnname
, elt_type
);
1980 return error_mark_node
;
1982 if (TREE_CODE (fns
) == TREE_LIST
)
1984 error ("request for member %qD is ambiguous", fnname
);
1985 print_candidates (fns
);
1986 return error_mark_node
;
1988 alloc_call
= build_new_method_call (build_dummy_object (elt_type
),
1990 /*conversion_path=*/NULL_TREE
,
1995 /* Use a global operator new. */
1996 /* See if a cookie might be required. */
1997 if (array_p
&& TYPE_VEC_NEW_USES_COOKIE (elt_type
))
1998 cookie_size
= targetm
.cxx
.get_cookie_size (elt_type
);
2000 cookie_size
= NULL_TREE
;
2002 alloc_call
= build_operator_new_call (fnname
, placement
,
2003 &size
, &cookie_size
);
2007 if (alloc_call
== error_mark_node
)
2008 return error_mark_node
;
2010 /* In the simple case, we can stop now. */
2011 pointer_type
= build_pointer_type (type
);
2012 if (!cookie_size
&& !is_initialized
)
2013 return build_nop (pointer_type
, alloc_call
);
2015 /* While we're working, use a pointer to the type we've actually
2016 allocated. Store the result of the call in a variable so that we
2017 can use it more than once. */
2018 full_pointer_type
= build_pointer_type (full_type
);
2019 alloc_expr
= get_target_expr (build_nop (full_pointer_type
, alloc_call
));
2020 alloc_node
= TARGET_EXPR_SLOT (alloc_expr
);
2022 /* Strip any COMPOUND_EXPRs from ALLOC_CALL. */
2023 while (TREE_CODE (alloc_call
) == COMPOUND_EXPR
)
2024 alloc_call
= TREE_OPERAND (alloc_call
, 1);
2025 alloc_fn
= get_callee_fndecl (alloc_call
);
2026 gcc_assert (alloc_fn
!= NULL_TREE
);
2028 /* Now, check to see if this function is actually a placement
2029 allocation function. This can happen even when PLACEMENT is NULL
2030 because we might have something like:
2032 struct S { void* operator new (size_t, int i = 0); };
2034 A call to `new S' will get this allocation function, even though
2035 there is no explicit placement argument. If there is more than
2036 one argument, or there are variable arguments, then this is a
2037 placement allocation function. */
2038 placement_allocation_fn_p
2039 = (type_num_arguments (TREE_TYPE (alloc_fn
)) > 1
2040 || varargs_function_p (alloc_fn
));
2042 /* Preevaluate the placement args so that we don't reevaluate them for a
2043 placement delete. */
2044 if (placement_allocation_fn_p
)
2047 stabilize_call (alloc_call
, &inits
);
2049 alloc_expr
= build2 (COMPOUND_EXPR
, TREE_TYPE (alloc_expr
), inits
,
2053 /* unless an allocation function is declared with an empty excep-
2054 tion-specification (_except.spec_), throw(), it indicates failure to
2055 allocate storage by throwing a bad_alloc exception (clause _except_,
2056 _lib.bad.alloc_); it returns a non-null pointer otherwise If the allo-
2057 cation function is declared with an empty exception-specification,
2058 throw(), it returns null to indicate failure to allocate storage and a
2059 non-null pointer otherwise.
2061 So check for a null exception spec on the op new we just called. */
2063 nothrow
= TYPE_NOTHROW_P (TREE_TYPE (alloc_fn
));
2064 check_new
= (flag_check_new
|| nothrow
) && ! use_java_new
;
2071 /* Adjust so we're pointing to the start of the object. */
2072 data_addr
= get_target_expr (build2 (PLUS_EXPR
, full_pointer_type
,
2073 alloc_node
, cookie_size
));
2075 /* Store the number of bytes allocated so that we can know how
2076 many elements to destroy later. We use the last sizeof
2077 (size_t) bytes to store the number of elements. */
2078 cookie_ptr
= build2 (MINUS_EXPR
, build_pointer_type (sizetype
),
2079 data_addr
, size_in_bytes (sizetype
));
2080 cookie
= build_indirect_ref (cookie_ptr
, NULL
);
2082 cookie_expr
= build2 (MODIFY_EXPR
, sizetype
, cookie
, nelts
);
2084 if (targetm
.cxx
.cookie_has_size ())
2086 /* Also store the element size. */
2087 cookie_ptr
= build2 (MINUS_EXPR
, build_pointer_type (sizetype
),
2088 cookie_ptr
, size_in_bytes (sizetype
));
2089 cookie
= build_indirect_ref (cookie_ptr
, NULL
);
2090 cookie
= build2 (MODIFY_EXPR
, sizetype
, cookie
,
2091 size_in_bytes(elt_type
));
2092 cookie_expr
= build2 (COMPOUND_EXPR
, TREE_TYPE (cookie_expr
),
2093 cookie
, cookie_expr
);
2095 data_addr
= TARGET_EXPR_SLOT (data_addr
);
2099 cookie_expr
= NULL_TREE
;
2100 data_addr
= alloc_node
;
2103 /* Now initialize the allocated object. Note that we preevaluate the
2104 initialization expression, apart from the actual constructor call or
2105 assignment--we do this because we want to delay the allocation as long
2106 as possible in order to minimize the size of the exception region for
2107 placement delete. */
2112 init_expr
= build_indirect_ref (data_addr
, NULL
);
2116 bool explicit_default_init_p
= false;
2118 if (init
== void_zero_node
)
2121 explicit_default_init_p
= true;
2124 pedwarn ("ISO C++ forbids initialization in array new");
2127 = build_vec_init (init_expr
,
2128 cp_build_binary_op (MINUS_EXPR
, outer_nelts
,
2131 explicit_default_init_p
,
2134 /* An array initialization is stable because the initialization
2135 of each element is a full-expression, so the temporaries don't
2141 if (init
== void_zero_node
)
2142 init
= build_default_init (full_type
, nelts
);
2144 if (TYPE_NEEDS_CONSTRUCTING (type
))
2146 init_expr
= build_special_member_call (init_expr
,
2147 complete_ctor_identifier
,
2150 stable
= stabilize_init (init_expr
, &init_preeval_expr
);
2154 /* We are processing something like `new int (10)', which
2155 means allocate an int, and initialize it with 10. */
2157 if (TREE_CODE (init
) == TREE_LIST
)
2158 init
= build_x_compound_expr_from_list (init
,
2161 gcc_assert (TREE_CODE (init
) != CONSTRUCTOR
2162 || TREE_TYPE (init
) != NULL_TREE
);
2164 init_expr
= build_modify_expr (init_expr
, INIT_EXPR
, init
);
2165 stable
= stabilize_init (init_expr
, &init_preeval_expr
);
2169 if (init_expr
== error_mark_node
)
2170 return error_mark_node
;
2172 /* If any part of the object initialization terminates by throwing an
2173 exception and a suitable deallocation function can be found, the
2174 deallocation function is called to free the memory in which the
2175 object was being constructed, after which the exception continues
2176 to propagate in the context of the new-expression. If no
2177 unambiguous matching deallocation function can be found,
2178 propagating the exception does not cause the object's memory to be
2180 if (flag_exceptions
&& ! use_java_new
)
2182 enum tree_code dcode
= array_p
? VEC_DELETE_EXPR
: DELETE_EXPR
;
2185 /* The Standard is unclear here, but the right thing to do
2186 is to use the same method for finding deallocation
2187 functions that we use for finding allocation functions. */
2188 cleanup
= build_op_delete_call (dcode
, alloc_node
, size
,
2189 globally_qualified_p
,
2190 (placement_allocation_fn_p
2191 ? alloc_call
: NULL_TREE
));
2196 /* This is much simpler if we were able to preevaluate all of
2197 the arguments to the constructor call. */
2198 init_expr
= build2 (TRY_CATCH_EXPR
, void_type_node
,
2199 init_expr
, cleanup
);
2201 /* Ack! First we allocate the memory. Then we set our sentry
2202 variable to true, and expand a cleanup that deletes the
2203 memory if sentry is true. Then we run the constructor, and
2204 finally clear the sentry.
2206 We need to do this because we allocate the space first, so
2207 if there are any temporaries with cleanups in the
2208 constructor args and we weren't able to preevaluate them, we
2209 need this EH region to extend until end of full-expression
2210 to preserve nesting. */
2212 tree end
, sentry
, begin
;
2214 begin
= get_target_expr (boolean_true_node
);
2215 CLEANUP_EH_ONLY (begin
) = 1;
2217 sentry
= TARGET_EXPR_SLOT (begin
);
2219 TARGET_EXPR_CLEANUP (begin
)
2220 = build3 (COND_EXPR
, void_type_node
, sentry
,
2221 cleanup
, void_zero_node
);
2223 end
= build2 (MODIFY_EXPR
, TREE_TYPE (sentry
),
2224 sentry
, boolean_false_node
);
2227 = build2 (COMPOUND_EXPR
, void_type_node
, begin
,
2228 build2 (COMPOUND_EXPR
, void_type_node
, init_expr
,
2235 init_expr
= NULL_TREE
;
2237 /* Now build up the return value in reverse order. */
2242 rval
= build2 (COMPOUND_EXPR
, TREE_TYPE (rval
), init_expr
, rval
);
2244 rval
= build2 (COMPOUND_EXPR
, TREE_TYPE (rval
), cookie_expr
, rval
);
2246 if (rval
== alloc_node
)
2247 /* If we don't have an initializer or a cookie, strip the TARGET_EXPR
2248 and return the call (which doesn't need to be adjusted). */
2249 rval
= TARGET_EXPR_INITIAL (alloc_expr
);
2254 tree ifexp
= cp_build_binary_op (NE_EXPR
, alloc_node
,
2256 rval
= build_conditional_expr (ifexp
, rval
, alloc_node
);
2259 /* Perform the allocation before anything else, so that ALLOC_NODE
2260 has been initialized before we start using it. */
2261 rval
= build2 (COMPOUND_EXPR
, TREE_TYPE (rval
), alloc_expr
, rval
);
2264 if (init_preeval_expr
)
2265 rval
= build2 (COMPOUND_EXPR
, TREE_TYPE (rval
), init_preeval_expr
, rval
);
2267 /* Convert to the final type. */
2268 rval
= build_nop (pointer_type
, rval
);
2270 /* A new-expression is never an lvalue. */
2271 rval
= rvalue (rval
);
2277 build_vec_delete_1 (tree base
, tree maxindex
, tree type
,
2278 special_function_kind auto_delete_vec
, int use_global_delete
)
2281 tree ptype
= build_pointer_type (type
= complete_type (type
));
2282 tree size_exp
= size_in_bytes (type
);
2284 /* Temporary variables used by the loop. */
2285 tree tbase
, tbase_init
;
2287 /* This is the body of the loop that implements the deletion of a
2288 single element, and moves temp variables to next elements. */
2291 /* This is the LOOP_EXPR that governs the deletion of the elements. */
2294 /* This is the thing that governs what to do after the loop has run. */
2295 tree deallocate_expr
= 0;
2297 /* This is the BIND_EXPR which holds the outermost iterator of the
2298 loop. It is convenient to set this variable up and test it before
2299 executing any other code in the loop.
2300 This is also the containing expression returned by this function. */
2301 tree controller
= NULL_TREE
;
2303 /* We should only have 1-D arrays here. */
2304 gcc_assert (TREE_CODE (type
) != ARRAY_TYPE
);
2306 if (! IS_AGGR_TYPE (type
) || TYPE_HAS_TRIVIAL_DESTRUCTOR (type
))
2309 /* The below is short by the cookie size. */
2310 virtual_size
= size_binop (MULT_EXPR
, size_exp
,
2311 convert (sizetype
, maxindex
));
2313 tbase
= create_temporary_var (ptype
);
2314 tbase_init
= build_modify_expr (tbase
, NOP_EXPR
,
2315 fold_build2 (PLUS_EXPR
, ptype
,
2318 DECL_REGISTER (tbase
) = 1;
2319 controller
= build3 (BIND_EXPR
, void_type_node
, tbase
,
2320 NULL_TREE
, NULL_TREE
);
2321 TREE_SIDE_EFFECTS (controller
) = 1;
2323 body
= build1 (EXIT_EXPR
, void_type_node
,
2324 build2 (EQ_EXPR
, boolean_type_node
, base
, tbase
));
2325 body
= build_compound_expr
2326 (body
, build_modify_expr (tbase
, NOP_EXPR
,
2327 build2 (MINUS_EXPR
, ptype
, tbase
, size_exp
)));
2328 body
= build_compound_expr
2329 (body
, build_delete (ptype
, tbase
, sfk_complete_destructor
,
2330 LOOKUP_NORMAL
|LOOKUP_DESTRUCTOR
, 1));
2332 loop
= build1 (LOOP_EXPR
, void_type_node
, body
);
2333 loop
= build_compound_expr (tbase_init
, loop
);
2336 /* If the delete flag is one, or anything else with the low bit set,
2337 delete the storage. */
2338 if (auto_delete_vec
!= sfk_base_destructor
)
2342 /* The below is short by the cookie size. */
2343 virtual_size
= size_binop (MULT_EXPR
, size_exp
,
2344 convert (sizetype
, maxindex
));
2346 if (! TYPE_VEC_NEW_USES_COOKIE (type
))
2353 cookie_size
= targetm
.cxx
.get_cookie_size (type
);
2355 = cp_convert (ptype
,
2356 cp_build_binary_op (MINUS_EXPR
,
2357 cp_convert (string_type_node
,
2360 /* True size with header. */
2361 virtual_size
= size_binop (PLUS_EXPR
, virtual_size
, cookie_size
);
2364 if (auto_delete_vec
== sfk_deleting_destructor
)
2365 deallocate_expr
= build_x_delete (base_tbd
,
2366 2 | use_global_delete
,
2371 if (!deallocate_expr
)
2374 body
= deallocate_expr
;
2376 body
= build_compound_expr (body
, deallocate_expr
);
2379 body
= integer_zero_node
;
2381 /* Outermost wrapper: If pointer is null, punt. */
2382 body
= fold_build3 (COND_EXPR
, void_type_node
,
2383 fold_build2 (NE_EXPR
, boolean_type_node
, base
,
2384 convert (TREE_TYPE (base
),
2385 integer_zero_node
)),
2386 body
, integer_zero_node
);
2387 body
= build1 (NOP_EXPR
, void_type_node
, body
);
2391 TREE_OPERAND (controller
, 1) = body
;
2395 if (TREE_CODE (base
) == SAVE_EXPR
)
2396 /* Pre-evaluate the SAVE_EXPR outside of the BIND_EXPR. */
2397 body
= build2 (COMPOUND_EXPR
, void_type_node
, base
, body
);
2399 return convert_to_void (body
, /*implicit=*/NULL
);
2402 /* Create an unnamed variable of the indicated TYPE. */
2405 create_temporary_var (tree type
)
2409 decl
= build_decl (VAR_DECL
, NULL_TREE
, type
);
2410 TREE_USED (decl
) = 1;
2411 DECL_ARTIFICIAL (decl
) = 1;
2412 DECL_IGNORED_P (decl
) = 1;
2413 DECL_SOURCE_LOCATION (decl
) = input_location
;
2414 DECL_CONTEXT (decl
) = current_function_decl
;
2419 /* Create a new temporary variable of the indicated TYPE, initialized
2422 It is not entered into current_binding_level, because that breaks
2423 things when it comes time to do final cleanups (which take place
2424 "outside" the binding contour of the function). */
2427 get_temp_regvar (tree type
, tree init
)
2431 decl
= create_temporary_var (type
);
2432 add_decl_expr (decl
);
2434 finish_expr_stmt (build_modify_expr (decl
, INIT_EXPR
, init
));
2439 /* `build_vec_init' returns tree structure that performs
2440 initialization of a vector of aggregate types.
2442 BASE is a reference to the vector, of ARRAY_TYPE.
2443 MAXINDEX is the maximum index of the array (one less than the
2444 number of elements). It is only used if
2445 TYPE_DOMAIN (TREE_TYPE (BASE)) == NULL_TREE.
2447 INIT is the (possibly NULL) initializer.
2449 If EXPLICIT_DEFAULT_INIT_P is true, then INIT must be NULL. All
2450 elements in the array are default-initialized.
2452 FROM_ARRAY is 0 if we should init everything with INIT
2453 (i.e., every element initialized from INIT).
2454 FROM_ARRAY is 1 if we should index into INIT in parallel
2455 with initialization of DECL.
2456 FROM_ARRAY is 2 if we should index into INIT in parallel,
2457 but use assignment instead of initialization. */
2460 build_vec_init (tree base
, tree maxindex
, tree init
,
2461 bool explicit_default_init_p
,
2465 tree base2
= NULL_TREE
;
2467 tree itype
= NULL_TREE
;
2469 /* The type of the array. */
2470 tree atype
= TREE_TYPE (base
);
2471 /* The type of an element in the array. */
2472 tree type
= TREE_TYPE (atype
);
2473 /* The element type reached after removing all outer array
2475 tree inner_elt_type
;
2476 /* The type of a pointer to an element in the array. */
2481 tree try_block
= NULL_TREE
;
2482 int num_initialized_elts
= 0;
2485 if (TYPE_DOMAIN (atype
))
2486 maxindex
= array_type_nelts (atype
);
2488 if (maxindex
== NULL_TREE
|| maxindex
== error_mark_node
)
2489 return error_mark_node
;
2491 if (explicit_default_init_p
)
2494 inner_elt_type
= strip_array_types (atype
);
2497 ? (!CLASS_TYPE_P (inner_elt_type
)
2498 || !TYPE_HAS_COMPLEX_ASSIGN_REF (inner_elt_type
))
2499 : !TYPE_NEEDS_CONSTRUCTING (type
))
2500 && ((TREE_CODE (init
) == CONSTRUCTOR
2501 /* Don't do this if the CONSTRUCTOR might contain something
2502 that might throw and require us to clean up. */
2503 && (VEC_empty (constructor_elt
, CONSTRUCTOR_ELTS (init
))
2504 || ! TYPE_HAS_NONTRIVIAL_DESTRUCTOR (inner_elt_type
)))
2507 /* Do non-default initialization of POD arrays resulting from
2508 brace-enclosed initializers. In this case, digest_init and
2509 store_constructor will handle the semantics for us. */
2511 stmt_expr
= build2 (INIT_EXPR
, atype
, base
, init
);
2515 maxindex
= cp_convert (ptrdiff_type_node
, maxindex
);
2516 ptype
= build_pointer_type (type
);
2517 size
= size_in_bytes (type
);
2518 if (TREE_CODE (TREE_TYPE (base
)) == ARRAY_TYPE
)
2519 base
= cp_convert (ptype
, decay_conversion (base
));
2521 /* The code we are generating looks like:
2525 ptrdiff_t iterator = maxindex;
2527 for (; iterator != -1; --iterator) {
2528 ... initialize *t1 ...
2532 ... destroy elements that were constructed ...
2537 We can omit the try and catch blocks if we know that the
2538 initialization will never throw an exception, or if the array
2539 elements do not have destructors. We can omit the loop completely if
2540 the elements of the array do not have constructors.
2542 We actually wrap the entire body of the above in a STMT_EXPR, for
2545 When copying from array to another, when the array elements have
2546 only trivial copy constructors, we should use __builtin_memcpy
2547 rather than generating a loop. That way, we could take advantage
2548 of whatever cleverness the back-end has for dealing with copies
2549 of blocks of memory. */
2551 is_global
= begin_init_stmts (&stmt_expr
, &compound_stmt
);
2552 destroy_temps
= stmts_are_full_exprs_p ();
2553 current_stmt_tree ()->stmts_are_full_exprs_p
= 0;
2554 rval
= get_temp_regvar (ptype
, base
);
2555 base
= get_temp_regvar (ptype
, rval
);
2556 iterator
= get_temp_regvar (ptrdiff_type_node
, maxindex
);
2558 /* Protect the entire array initialization so that we can destroy
2559 the partially constructed array if an exception is thrown.
2560 But don't do this if we're assigning. */
2561 if (flag_exceptions
&& TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type
)
2564 try_block
= begin_try_block ();
2567 if (init
!= NULL_TREE
&& TREE_CODE (init
) == CONSTRUCTOR
)
2569 /* Do non-default initialization of non-POD arrays resulting from
2570 brace-enclosed initializers. */
2571 unsigned HOST_WIDE_INT idx
;
2575 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (init
), idx
, elt
)
2577 tree baseref
= build1 (INDIRECT_REF
, type
, base
);
2579 num_initialized_elts
++;
2581 current_stmt_tree ()->stmts_are_full_exprs_p
= 1;
2582 if (IS_AGGR_TYPE (type
) || TREE_CODE (type
) == ARRAY_TYPE
)
2583 finish_expr_stmt (build_aggr_init (baseref
, elt
, 0));
2585 finish_expr_stmt (build_modify_expr (baseref
, NOP_EXPR
,
2587 current_stmt_tree ()->stmts_are_full_exprs_p
= 0;
2589 finish_expr_stmt (build_unary_op (PREINCREMENT_EXPR
, base
, 0));
2590 finish_expr_stmt (build_unary_op (PREDECREMENT_EXPR
, iterator
, 0));
2593 /* Clear out INIT so that we don't get confused below. */
2596 else if (from_array
)
2598 /* If initializing one array from another, initialize element by
2599 element. We rely upon the below calls the do argument
2603 base2
= decay_conversion (init
);
2604 itype
= TREE_TYPE (base2
);
2605 base2
= get_temp_regvar (itype
, base2
);
2606 itype
= TREE_TYPE (itype
);
2608 else if (TYPE_LANG_SPECIFIC (type
)
2609 && TYPE_NEEDS_CONSTRUCTING (type
)
2610 && ! TYPE_HAS_DEFAULT_CONSTRUCTOR (type
))
2612 error ("initializer ends prematurely");
2613 return error_mark_node
;
2617 /* Now, default-initialize any remaining elements. We don't need to
2618 do that if a) the type does not need constructing, or b) we've
2619 already initialized all the elements.
2621 We do need to keep going if we're copying an array. */
2624 || ((TYPE_NEEDS_CONSTRUCTING (type
) || explicit_default_init_p
)
2625 && ! (host_integerp (maxindex
, 0)
2626 && (num_initialized_elts
2627 == tree_low_cst (maxindex
, 0) + 1))))
2629 /* If the ITERATOR is equal to -1, then we don't have to loop;
2630 we've already initialized all the elements. */
2635 for_stmt
= begin_for_stmt ();
2636 finish_for_init_stmt (for_stmt
);
2637 finish_for_cond (build2 (NE_EXPR
, boolean_type_node
, iterator
,
2638 build_int_cst (TREE_TYPE (iterator
), -1)),
2640 finish_for_expr (build_unary_op (PREDECREMENT_EXPR
, iterator
, 0),
2643 to
= build1 (INDIRECT_REF
, type
, base
);
2650 from
= build1 (INDIRECT_REF
, itype
, base2
);
2654 if (from_array
== 2)
2655 elt_init
= build_modify_expr (to
, NOP_EXPR
, from
);
2656 else if (TYPE_NEEDS_CONSTRUCTING (type
))
2657 elt_init
= build_aggr_init (to
, from
, 0);
2659 elt_init
= build_modify_expr (to
, NOP_EXPR
, from
);
2663 else if (TREE_CODE (type
) == ARRAY_TYPE
)
2667 ("cannot initialize multi-dimensional array with initializer");
2668 elt_init
= build_vec_init (build1 (INDIRECT_REF
, type
, base
),
2670 /*explicit_default_init_p=*/false,
2673 else if (!TYPE_NEEDS_CONSTRUCTING (type
))
2674 elt_init
= (build_modify_expr
2676 build_zero_init (type
, size_one_node
,
2677 /*static_storage_p=*/false)));
2679 elt_init
= build_aggr_init (to
, init
, 0);
2681 current_stmt_tree ()->stmts_are_full_exprs_p
= 1;
2682 finish_expr_stmt (elt_init
);
2683 current_stmt_tree ()->stmts_are_full_exprs_p
= 0;
2685 finish_expr_stmt (build_unary_op (PREINCREMENT_EXPR
, base
, 0));
2687 finish_expr_stmt (build_unary_op (PREINCREMENT_EXPR
, base2
, 0));
2689 finish_for_stmt (for_stmt
);
2692 /* Make sure to cleanup any partially constructed elements. */
2693 if (flag_exceptions
&& TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type
)
2697 tree m
= cp_build_binary_op (MINUS_EXPR
, maxindex
, iterator
);
2699 /* Flatten multi-dimensional array since build_vec_delete only
2700 expects one-dimensional array. */
2701 if (TREE_CODE (type
) == ARRAY_TYPE
)
2702 m
= cp_build_binary_op (MULT_EXPR
, m
,
2703 array_type_nelts_total (type
));
2705 finish_cleanup_try_block (try_block
);
2706 e
= build_vec_delete_1 (rval
, m
,
2707 inner_elt_type
, sfk_base_destructor
,
2708 /*use_global_delete=*/0);
2709 finish_cleanup (e
, try_block
);
2712 /* The value of the array initialization is the array itself, RVAL
2713 is a pointer to the first element. */
2714 finish_stmt_expr_expr (rval
, stmt_expr
);
2716 stmt_expr
= finish_init_stmts (is_global
, stmt_expr
, compound_stmt
);
2718 /* Now convert make the result have the correct type. */
2719 atype
= build_pointer_type (atype
);
2720 stmt_expr
= build1 (NOP_EXPR
, atype
, stmt_expr
);
2721 stmt_expr
= build_indirect_ref (stmt_expr
, NULL
);
2723 current_stmt_tree ()->stmts_are_full_exprs_p
= destroy_temps
;
2727 /* Free up storage of type TYPE, at address ADDR.
2729 TYPE is a POINTER_TYPE and can be ptr_type_node for no special type
2732 VIRTUAL_SIZE is the amount of storage that was allocated, and is
2733 used as the second argument to operator delete. It can include
2734 things like padding and magic size cookies. It has virtual in it,
2735 because if you have a base pointer and you delete through a virtual
2736 destructor, it should be the size of the dynamic object, not the
2737 static object, see Free Store 12.5 ISO C++.
2739 This does not call any destructors. */
2742 build_x_delete (tree addr
, int which_delete
, tree virtual_size
)
2744 int use_global_delete
= which_delete
& 1;
2745 int use_vec_delete
= !!(which_delete
& 2);
2746 enum tree_code code
= use_vec_delete
? VEC_DELETE_EXPR
: DELETE_EXPR
;
2748 return build_op_delete_call (code
, addr
, virtual_size
, use_global_delete
,
2752 /* Call the DTOR_KIND destructor for EXP. FLAGS are as for
2756 build_dtor_call (tree exp
, special_function_kind dtor_kind
, int flags
)
2762 case sfk_complete_destructor
:
2763 name
= complete_dtor_identifier
;
2766 case sfk_base_destructor
:
2767 name
= base_dtor_identifier
;
2770 case sfk_deleting_destructor
:
2771 name
= deleting_dtor_identifier
;
2777 fn
= lookup_fnfields (TREE_TYPE (exp
), name
, /*protect=*/2);
2778 return build_new_method_call (exp
, fn
,
2780 /*conversion_path=*/NULL_TREE
,
2784 /* Generate a call to a destructor. TYPE is the type to cast ADDR to.
2785 ADDR is an expression which yields the store to be destroyed.
2786 AUTO_DELETE is the name of the destructor to call, i.e., either
2787 sfk_complete_destructor, sfk_base_destructor, or
2788 sfk_deleting_destructor.
2790 FLAGS is the logical disjunction of zero or more LOOKUP_
2791 flags. See cp-tree.h for more info. */
2794 build_delete (tree type
, tree addr
, special_function_kind auto_delete
,
2795 int flags
, int use_global_delete
)
2799 if (addr
== error_mark_node
)
2800 return error_mark_node
;
2802 /* Can happen when CURRENT_EXCEPTION_OBJECT gets its type
2803 set to `error_mark_node' before it gets properly cleaned up. */
2804 if (type
== error_mark_node
)
2805 return error_mark_node
;
2807 type
= TYPE_MAIN_VARIANT (type
);
2809 if (TREE_CODE (type
) == POINTER_TYPE
)
2811 bool complete_p
= true;
2813 type
= TYPE_MAIN_VARIANT (TREE_TYPE (type
));
2814 if (TREE_CODE (type
) == ARRAY_TYPE
)
2817 /* We don't want to warn about delete of void*, only other
2818 incomplete types. Deleting other incomplete types
2819 invokes undefined behavior, but it is not ill-formed, so
2820 compile to something that would even do The Right Thing
2821 (TM) should the type have a trivial dtor and no delete
2823 if (!VOID_TYPE_P (type
))
2825 complete_type (type
);
2826 if (!COMPLETE_TYPE_P (type
))
2828 warning (0, "possible problem detected in invocation of "
2829 "delete operator:");
2830 cxx_incomplete_type_diagnostic (addr
, type
, 1);
2831 inform ("neither the destructor nor the class-specific "
2832 "operator delete will be called, even if they are "
2833 "declared when the class is defined.");
2837 if (VOID_TYPE_P (type
) || !complete_p
|| !IS_AGGR_TYPE (type
))
2838 /* Call the builtin operator delete. */
2839 return build_builtin_delete_call (addr
);
2840 if (TREE_SIDE_EFFECTS (addr
))
2841 addr
= save_expr (addr
);
2843 /* Throw away const and volatile on target type of addr. */
2844 addr
= convert_force (build_pointer_type (type
), addr
, 0);
2846 else if (TREE_CODE (type
) == ARRAY_TYPE
)
2850 if (TYPE_DOMAIN (type
) == NULL_TREE
)
2852 error ("unknown array size in delete");
2853 return error_mark_node
;
2855 return build_vec_delete (addr
, array_type_nelts (type
),
2856 auto_delete
, use_global_delete
);
2860 /* Don't check PROTECT here; leave that decision to the
2861 destructor. If the destructor is accessible, call it,
2862 else report error. */
2863 addr
= build_unary_op (ADDR_EXPR
, addr
, 0);
2864 if (TREE_SIDE_EFFECTS (addr
))
2865 addr
= save_expr (addr
);
2867 addr
= convert_force (build_pointer_type (type
), addr
, 0);
2870 gcc_assert (IS_AGGR_TYPE (type
));
2872 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type
))
2874 if (auto_delete
!= sfk_deleting_destructor
)
2875 return void_zero_node
;
2877 return build_op_delete_call
2878 (DELETE_EXPR
, addr
, cxx_sizeof_nowarn (type
), use_global_delete
,
2883 tree do_delete
= NULL_TREE
;
2886 if (CLASSTYPE_LAZY_DESTRUCTOR (type
))
2887 lazily_declare_fn (sfk_destructor
, type
);
2889 /* For `::delete x', we must not use the deleting destructor
2890 since then we would not be sure to get the global `operator
2892 if (use_global_delete
&& auto_delete
== sfk_deleting_destructor
)
2894 /* We will use ADDR multiple times so we must save it. */
2895 addr
= save_expr (addr
);
2896 /* Delete the object. */
2897 do_delete
= build_builtin_delete_call (addr
);
2898 /* Otherwise, treat this like a complete object destructor
2900 auto_delete
= sfk_complete_destructor
;
2902 /* If the destructor is non-virtual, there is no deleting
2903 variant. Instead, we must explicitly call the appropriate
2904 `operator delete' here. */
2905 else if (!DECL_VIRTUAL_P (CLASSTYPE_DESTRUCTORS (type
))
2906 && auto_delete
== sfk_deleting_destructor
)
2908 /* We will use ADDR multiple times so we must save it. */
2909 addr
= save_expr (addr
);
2910 /* Build the call. */
2911 do_delete
= build_op_delete_call (DELETE_EXPR
,
2913 cxx_sizeof_nowarn (type
),
2916 /* Call the complete object destructor. */
2917 auto_delete
= sfk_complete_destructor
;
2919 else if (auto_delete
== sfk_deleting_destructor
2920 && TYPE_GETS_REG_DELETE (type
))
2922 /* Make sure we have access to the member op delete, even though
2923 we'll actually be calling it from the destructor. */
2924 build_op_delete_call (DELETE_EXPR
, addr
, cxx_sizeof_nowarn (type
),
2925 /*global_p=*/false, NULL_TREE
);
2928 expr
= build_dtor_call (build_indirect_ref (addr
, NULL
),
2929 auto_delete
, flags
);
2931 expr
= build2 (COMPOUND_EXPR
, void_type_node
, expr
, do_delete
);
2933 if (flags
& LOOKUP_DESTRUCTOR
)
2934 /* Explicit destructor call; don't check for null pointer. */
2935 ifexp
= integer_one_node
;
2937 /* Handle deleting a null pointer. */
2938 ifexp
= fold (cp_build_binary_op (NE_EXPR
, addr
, integer_zero_node
));
2940 if (ifexp
!= integer_one_node
)
2941 expr
= build3 (COND_EXPR
, void_type_node
,
2942 ifexp
, expr
, void_zero_node
);
2948 /* At the beginning of a destructor, push cleanups that will call the
2949 destructors for our base classes and members.
2951 Called from begin_destructor_body. */
2954 push_base_cleanups (void)
2956 tree binfo
, base_binfo
;
2960 VEC(tree
,gc
) *vbases
;
2962 /* Run destructors for all virtual baseclasses. */
2963 if (CLASSTYPE_VBASECLASSES (current_class_type
))
2965 tree cond
= (condition_conversion
2966 (build2 (BIT_AND_EXPR
, integer_type_node
,
2967 current_in_charge_parm
,
2968 integer_two_node
)));
2970 /* The CLASSTYPE_VBASECLASSES vector is in initialization
2971 order, which is also the right order for pushing cleanups. */
2972 for (vbases
= CLASSTYPE_VBASECLASSES (current_class_type
), i
= 0;
2973 VEC_iterate (tree
, vbases
, i
, base_binfo
); i
++)
2975 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (BINFO_TYPE (base_binfo
)))
2977 expr
= build_special_member_call (current_class_ref
,
2978 base_dtor_identifier
,
2982 | LOOKUP_NONVIRTUAL
));
2983 expr
= build3 (COND_EXPR
, void_type_node
, cond
,
2984 expr
, void_zero_node
);
2985 finish_decl_cleanup (NULL_TREE
, expr
);
2990 /* Take care of the remaining baseclasses. */
2991 for (binfo
= TYPE_BINFO (current_class_type
), i
= 0;
2992 BINFO_BASE_ITERATE (binfo
, i
, base_binfo
); i
++)
2994 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (BINFO_TYPE (base_binfo
))
2995 || BINFO_VIRTUAL_P (base_binfo
))
2998 expr
= build_special_member_call (current_class_ref
,
2999 base_dtor_identifier
,
3000 NULL_TREE
, base_binfo
,
3001 LOOKUP_NORMAL
| LOOKUP_NONVIRTUAL
);
3002 finish_decl_cleanup (NULL_TREE
, expr
);
3005 for (member
= TYPE_FIELDS (current_class_type
); member
;
3006 member
= TREE_CHAIN (member
))
3008 if (TREE_CODE (member
) != FIELD_DECL
|| DECL_ARTIFICIAL (member
))
3010 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (member
)))
3012 tree this_member
= (build_class_member_access_expr
3013 (current_class_ref
, member
,
3014 /*access_path=*/NULL_TREE
,
3015 /*preserve_reference=*/false));
3016 tree this_type
= TREE_TYPE (member
);
3017 expr
= build_delete (this_type
, this_member
,
3018 sfk_complete_destructor
,
3019 LOOKUP_NONVIRTUAL
|LOOKUP_DESTRUCTOR
|LOOKUP_NORMAL
,
3021 finish_decl_cleanup (NULL_TREE
, expr
);
3026 /* Build a C++ vector delete expression.
3027 MAXINDEX is the number of elements to be deleted.
3028 ELT_SIZE is the nominal size of each element in the vector.
3029 BASE is the expression that should yield the store to be deleted.
3030 This function expands (or synthesizes) these calls itself.
3031 AUTO_DELETE_VEC says whether the container (vector) should be deallocated.
3033 This also calls delete for virtual baseclasses of elements of the vector.
3035 Update: MAXINDEX is no longer needed. The size can be extracted from the
3036 start of the vector for pointers, and from the type for arrays. We still
3037 use MAXINDEX for arrays because it happens to already have one of the
3038 values we'd have to extract. (We could use MAXINDEX with pointers to
3039 confirm the size, and trap if the numbers differ; not clear that it'd
3040 be worth bothering.) */
3043 build_vec_delete (tree base
, tree maxindex
,
3044 special_function_kind auto_delete_vec
, int use_global_delete
)
3048 tree base_init
= NULL_TREE
;
3050 type
= TREE_TYPE (base
);
3052 if (TREE_CODE (type
) == POINTER_TYPE
)
3054 /* Step back one from start of vector, and read dimension. */
3057 if (TREE_SIDE_EFFECTS (base
))
3059 base_init
= get_target_expr (base
);
3060 base
= TARGET_EXPR_SLOT (base_init
);
3062 type
= strip_array_types (TREE_TYPE (type
));
3063 cookie_addr
= build2 (MINUS_EXPR
,
3064 build_pointer_type (sizetype
),
3066 TYPE_SIZE_UNIT (sizetype
));
3067 maxindex
= build_indirect_ref (cookie_addr
, NULL
);
3069 else if (TREE_CODE (type
) == ARRAY_TYPE
)
3071 /* Get the total number of things in the array, maxindex is a
3073 maxindex
= array_type_nelts_total (type
);
3074 type
= strip_array_types (type
);
3075 base
= build_unary_op (ADDR_EXPR
, base
, 1);
3076 if (TREE_SIDE_EFFECTS (base
))
3078 base_init
= get_target_expr (base
);
3079 base
= TARGET_EXPR_SLOT (base_init
);
3084 if (base
!= error_mark_node
)
3085 error ("type to vector delete is neither pointer or array type");
3086 return error_mark_node
;
3089 rval
= build_vec_delete_1 (base
, maxindex
, type
, auto_delete_vec
,
3092 rval
= build2 (COMPOUND_EXPR
, TREE_TYPE (rval
), base_init
, rval
);