1 /* Functions related to building classes and their related objects.
2 Copyright (C) 1987, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3 1999, 2000, 2001, 2002, 2003, 2004 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, 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA. */
24 /* High-level class interface. */
28 #include "coretypes.h"
39 /* The number of nested classes being processed. If we are not in the
40 scope of any class, this is zero. */
42 int current_class_depth;
44 /* In order to deal with nested classes, we keep a stack of classes.
45 The topmost entry is the innermost class, and is the entry at index
46 CURRENT_CLASS_DEPTH */
48 typedef struct class_stack_node {
49 /* The name of the class. */
52 /* The _TYPE node for the class. */
55 /* The access specifier pending for new declarations in the scope of
59 /* If were defining TYPE, the names used in this class. */
60 splay_tree names_used;
61 }* class_stack_node_t;
63 typedef struct vtbl_init_data_s
65 /* The base for which we're building initializers. */
67 /* The type of the most-derived type. */
69 /* The binfo for the dynamic type. This will be TYPE_BINFO (derived),
70 unless ctor_vtbl_p is true. */
72 /* The negative-index vtable initializers built up so far. These
73 are in order from least negative index to most negative index. */
75 /* The last (i.e., most negative) entry in INITS. */
77 /* The binfo for the virtual base for which we're building
78 vcall offset initializers. */
80 /* The functions in vbase for which we have already provided vcall
83 /* The vtable index of the next vcall or vbase offset. */
85 /* Nonzero if we are building the initializer for the primary
88 /* Nonzero if we are building the initializer for a construction
91 /* True when adding vcall offset entries to the vtable. False when
92 merely computing the indices. */
93 bool generate_vcall_entries;
96 /* The type of a function passed to walk_subobject_offsets. */
97 typedef int (*subobject_offset_fn) (tree, tree, splay_tree);
99 /* The stack itself. This is a dynamically resized array. The
100 number of elements allocated is CURRENT_CLASS_STACK_SIZE. */
101 static int current_class_stack_size;
102 static class_stack_node_t current_class_stack;
104 /* An array of all local classes present in this translation unit, in
105 declaration order. */
106 varray_type local_classes;
108 static tree get_vfield_name (tree);
109 static void finish_struct_anon (tree);
110 static tree get_vtable_name (tree);
111 static tree get_basefndecls (tree, tree);
112 static int build_primary_vtable (tree, tree);
113 static int build_secondary_vtable (tree);
114 static void finish_vtbls (tree);
115 static void modify_vtable_entry (tree, tree, tree, tree, tree *);
116 static void finish_struct_bits (tree);
117 static int alter_access (tree, tree, tree);
118 static void handle_using_decl (tree, tree);
119 static void check_for_override (tree, tree);
120 static tree dfs_modify_vtables (tree, void *);
121 static tree modify_all_vtables (tree, tree);
122 static void determine_primary_base (tree);
123 static void finish_struct_methods (tree);
124 static void maybe_warn_about_overly_private_class (tree);
125 static int method_name_cmp (const void *, const void *);
126 static int resort_method_name_cmp (const void *, const void *);
127 static void add_implicitly_declared_members (tree, int, int, int);
128 static tree fixed_type_or_null (tree, int *, int *);
129 static tree resolve_address_of_overloaded_function (tree, tree, tsubst_flags_t,
131 static tree build_simple_base_path (tree expr, tree binfo);
132 static tree build_vtbl_ref_1 (tree, tree);
133 static tree build_vtbl_initializer (tree, tree, tree, tree, int *);
134 static int count_fields (tree);
135 static int add_fields_to_record_type (tree, struct sorted_fields_type*, int);
136 static void check_bitfield_decl (tree);
137 static void check_field_decl (tree, tree, int *, int *, int *, int *);
138 static void check_field_decls (tree, tree *, int *, int *, int *);
139 static tree *build_base_field (record_layout_info, tree, splay_tree, tree *);
140 static void build_base_fields (record_layout_info, splay_tree, tree *);
141 static void check_methods (tree);
142 static void remove_zero_width_bit_fields (tree);
143 static void check_bases (tree, int *, int *, int *);
144 static void check_bases_and_members (tree);
145 static tree create_vtable_ptr (tree, tree *);
146 static void include_empty_classes (record_layout_info);
147 static void layout_class_type (tree, tree *);
148 static void fixup_pending_inline (tree);
149 static void fixup_inline_methods (tree);
150 static void set_primary_base (tree, tree);
151 static void propagate_binfo_offsets (tree, tree);
152 static void layout_virtual_bases (record_layout_info, splay_tree);
153 static void build_vbase_offset_vtbl_entries (tree, vtbl_init_data *);
154 static void add_vcall_offset_vtbl_entries_r (tree, vtbl_init_data *);
155 static void add_vcall_offset_vtbl_entries_1 (tree, vtbl_init_data *);
156 static void build_vcall_offset_vtbl_entries (tree, vtbl_init_data *);
157 static void add_vcall_offset (tree, tree, vtbl_init_data *);
158 static void layout_vtable_decl (tree, int);
159 static tree dfs_find_final_overrider (tree, void *);
160 static tree dfs_find_final_overrider_post (tree, void *);
161 static tree dfs_find_final_overrider_q (tree, int, void *);
162 static tree find_final_overrider (tree, tree, tree);
163 static int make_new_vtable (tree, tree);
164 static int maybe_indent_hierarchy (FILE *, int, int);
165 static tree dump_class_hierarchy_r (FILE *, int, tree, tree, int);
166 static void dump_class_hierarchy (tree);
167 static void dump_class_hierarchy_1 (FILE *, int, tree);
168 static void dump_array (FILE *, tree);
169 static void dump_vtable (tree, tree, tree);
170 static void dump_vtt (tree, tree);
171 static void dump_thunk (FILE *, int, tree);
172 static tree build_vtable (tree, tree, tree);
173 static void initialize_vtable (tree, tree);
174 static void initialize_array (tree, tree);
175 static void layout_nonempty_base_or_field (record_layout_info,
176 tree, tree, splay_tree);
177 static tree end_of_class (tree, int);
178 static bool layout_empty_base (tree, tree, splay_tree);
179 static void accumulate_vtbl_inits (tree, tree, tree, tree, tree);
180 static tree dfs_accumulate_vtbl_inits (tree, tree, tree, tree,
182 static void build_rtti_vtbl_entries (tree, vtbl_init_data *);
183 static void build_vcall_and_vbase_vtbl_entries (tree,
185 static void mark_primary_bases (tree);
186 static void clone_constructors_and_destructors (tree);
187 static tree build_clone (tree, tree);
188 static void update_vtable_entry_for_fn (tree, tree, tree, tree *, unsigned);
189 static tree copy_virtuals (tree);
190 static void build_ctor_vtbl_group (tree, tree);
191 static void build_vtt (tree);
192 static tree binfo_ctor_vtable (tree);
193 static tree *build_vtt_inits (tree, tree, tree *, tree *);
194 static tree dfs_build_secondary_vptr_vtt_inits (tree, void *);
195 static tree dfs_ctor_vtable_bases_queue_p (tree, int, void *data);
196 static tree dfs_fixup_binfo_vtbls (tree, void *);
197 static int record_subobject_offset (tree, tree, splay_tree);
198 static int check_subobject_offset (tree, tree, splay_tree);
199 static int walk_subobject_offsets (tree, subobject_offset_fn,
200 tree, splay_tree, tree, int);
201 static void record_subobject_offsets (tree, tree, splay_tree, int);
202 static int layout_conflict_p (tree, tree, splay_tree, int);
203 static int splay_tree_compare_integer_csts (splay_tree_key k1,
205 static void warn_about_ambiguous_bases (tree);
206 static bool type_requires_array_cookie (tree);
207 static bool contains_empty_class_p (tree);
208 static bool base_derived_from (tree, tree);
209 static int empty_base_at_nonzero_offset_p (tree, tree, splay_tree);
210 static tree end_of_base (tree);
211 static tree get_vcall_index (tree, tree);
213 /* Macros for dfs walking during vtt construction. See
214 dfs_ctor_vtable_bases_queue_p, dfs_build_secondary_vptr_vtt_inits
215 and dfs_fixup_binfo_vtbls. */
216 #define VTT_TOP_LEVEL_P(NODE) (TREE_LIST_CHECK (NODE)->common.unsigned_flag)
217 #define VTT_MARKED_BINFO_P(NODE) TREE_USED (NODE)
219 /* Variables shared between class.c and call.c. */
221 #ifdef GATHER_STATISTICS
223 int n_vtable_entries = 0;
224 int n_vtable_searches = 0;
225 int n_vtable_elems = 0;
226 int n_convert_harshness = 0;
227 int n_compute_conversion_costs = 0;
228 int n_inner_fields_searched = 0;
231 /* Convert to or from a base subobject. EXPR is an expression of type
232 `A' or `A*', an expression of type `B' or `B*' is returned. To
233 convert A to a base B, CODE is PLUS_EXPR and BINFO is the binfo for
234 the B base instance within A. To convert base A to derived B, CODE
235 is MINUS_EXPR and BINFO is the binfo for the A instance within B.
236 In this latter case, A must not be a morally virtual base of B.
237 NONNULL is true if EXPR is known to be non-NULL (this is only
238 needed when EXPR is of pointer type). CV qualifiers are preserved
242 build_base_path (enum tree_code code,
247 tree v_binfo = NULL_TREE;
248 tree d_binfo = NULL_TREE;
252 tree null_test = NULL;
253 tree ptr_target_type;
255 int want_pointer = TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE;
256 bool has_empty = false;
259 if (expr == error_mark_node || binfo == error_mark_node || !binfo)
260 return error_mark_node;
262 for (probe = binfo; probe; probe = BINFO_INHERITANCE_CHAIN (probe))
265 if (is_empty_class (BINFO_TYPE (probe)))
267 if (!v_binfo && BINFO_VIRTUAL_P (probe))
271 probe = TYPE_MAIN_VARIANT (TREE_TYPE (expr));
273 probe = TYPE_MAIN_VARIANT (TREE_TYPE (probe));
275 my_friendly_assert (code == MINUS_EXPR
276 ? same_type_p (BINFO_TYPE (binfo), probe)
278 ? same_type_p (BINFO_TYPE (d_binfo), probe)
281 if (binfo == d_binfo)
285 if (code == MINUS_EXPR && v_binfo)
287 error ("cannot convert from base `%T' to derived type `%T' via virtual base `%T'",
288 BINFO_TYPE (binfo), BINFO_TYPE (d_binfo), BINFO_TYPE (v_binfo));
289 return error_mark_node;
293 /* This must happen before the call to save_expr. */
294 expr = build_unary_op (ADDR_EXPR, expr, 0);
296 offset = BINFO_OFFSET (binfo);
297 fixed_type_p = resolves_to_fixed_type_p (expr, &nonnull);
299 /* Do we need to look in the vtable for the real offset? */
300 virtual_access = (v_binfo && fixed_type_p <= 0);
302 /* Do we need to check for a null pointer? */
303 if (want_pointer && !nonnull && (virtual_access || !integer_zerop (offset)))
304 null_test = error_mark_node;
306 /* Protect against multiple evaluation if necessary. */
307 if (TREE_SIDE_EFFECTS (expr) && (null_test || virtual_access))
308 expr = save_expr (expr);
310 /* Now that we've saved expr, build the real null test. */
312 null_test = fold (build2 (NE_EXPR, boolean_type_node,
313 expr, integer_zero_node));
315 /* If this is a simple base reference, express it as a COMPONENT_REF. */
316 if (code == PLUS_EXPR && !virtual_access
317 /* We don't build base fields for empty bases, and they aren't very
318 interesting to the optimizers anyway. */
321 expr = build_indirect_ref (expr, NULL);
322 expr = build_simple_base_path (expr, binfo);
324 expr = build_unary_op (ADDR_EXPR, expr, 0);
325 target_type = TREE_TYPE (expr);
331 /* Going via virtual base V_BINFO. We need the static offset
332 from V_BINFO to BINFO, and the dynamic offset from D_BINFO to
333 V_BINFO. That offset is an entry in D_BINFO's vtable. */
336 if (fixed_type_p < 0 && in_base_initializer)
338 /* In a base member initializer, we cannot rely on
339 the vtable being set up. We have to use the vtt_parm. */
340 tree derived = BINFO_INHERITANCE_CHAIN (v_binfo);
343 t = TREE_TYPE (TYPE_VFIELD (BINFO_TYPE (derived)));
344 t = build_pointer_type (t);
345 v_offset = convert (t, current_vtt_parm);
346 v_offset = build (PLUS_EXPR, t, v_offset,
347 BINFO_VPTR_INDEX (derived));
348 v_offset = build_indirect_ref (v_offset, NULL);
351 v_offset = build_vfield_ref (build_indirect_ref (expr, NULL),
352 TREE_TYPE (TREE_TYPE (expr)));
354 v_offset = build (PLUS_EXPR, TREE_TYPE (v_offset),
355 v_offset, BINFO_VPTR_FIELD (v_binfo));
356 v_offset = build1 (NOP_EXPR,
357 build_pointer_type (ptrdiff_type_node),
359 v_offset = build_indirect_ref (v_offset, NULL);
360 TREE_CONSTANT (v_offset) = 1;
361 TREE_INVARIANT (v_offset) = 1;
363 offset = convert_to_integer (ptrdiff_type_node,
365 BINFO_OFFSET (v_binfo)));
367 if (!integer_zerop (offset))
368 v_offset = build (code, ptrdiff_type_node, v_offset, offset);
370 if (fixed_type_p < 0)
371 /* Negative fixed_type_p means this is a constructor or destructor;
372 virtual base layout is fixed in in-charge [cd]tors, but not in
374 offset = build (COND_EXPR, ptrdiff_type_node,
375 build (EQ_EXPR, boolean_type_node,
376 current_in_charge_parm, integer_zero_node),
378 BINFO_OFFSET (binfo));
383 target_type = code == PLUS_EXPR ? BINFO_TYPE (binfo) : BINFO_TYPE (d_binfo);
385 target_type = cp_build_qualified_type
386 (target_type, cp_type_quals (TREE_TYPE (TREE_TYPE (expr))));
387 ptr_target_type = build_pointer_type (target_type);
389 target_type = ptr_target_type;
391 expr = build1 (NOP_EXPR, ptr_target_type, expr);
393 if (!integer_zerop (offset))
394 expr = build (code, ptr_target_type, expr, offset);
399 expr = build_indirect_ref (expr, NULL);
403 expr = fold (build3 (COND_EXPR, target_type, null_test, expr,
404 fold (build1 (NOP_EXPR, target_type,
405 integer_zero_node))));
410 /* Subroutine of build_base_path; EXPR and BINFO are as in that function.
411 Perform a derived-to-base conversion by recursively building up a
412 sequence of COMPONENT_REFs to the appropriate base fields. */
415 build_simple_base_path (tree expr, tree binfo)
417 tree type = BINFO_TYPE (binfo);
421 /* For primary virtual bases, we can't just follow
422 BINFO_INHERITANCE_CHAIN. */
423 d_binfo = BINFO_PRIMARY_BASE_OF (binfo);
424 if (d_binfo == NULL_TREE)
425 d_binfo = BINFO_INHERITANCE_CHAIN (binfo);
427 if (d_binfo == NULL_TREE)
429 if (TYPE_MAIN_VARIANT (TREE_TYPE (expr)) != type)
435 expr = build_simple_base_path (expr, d_binfo);
437 for (field = TYPE_FIELDS (BINFO_TYPE (d_binfo));
438 field; field = TREE_CHAIN (field))
439 /* Is this the base field created by build_base_field? */
440 if (TREE_CODE (field) == FIELD_DECL
441 && TREE_TYPE (field) == type
442 && DECL_ARTIFICIAL (field)
443 && DECL_IGNORED_P (field))
444 return build_class_member_access_expr (expr, field,
447 /* Didn't find the base field?!? */
451 /* Convert OBJECT to the base TYPE. If CHECK_ACCESS is true, an error
452 message is emitted if TYPE is inaccessible. OBJECT is assumed to
456 convert_to_base (tree object, tree type, bool check_access)
460 binfo = lookup_base (TREE_TYPE (object), type,
461 check_access ? ba_check : ba_ignore,
463 if (!binfo || binfo == error_mark_node)
464 return error_mark_node;
466 return build_base_path (PLUS_EXPR, object, binfo, /*nonnull=*/1);
469 /* EXPR is an expression with class type. BASE is a base class (a
470 BINFO) of that class type. Returns EXPR, converted to the BASE
471 type. This function assumes that EXPR is the most derived class;
472 therefore virtual bases can be found at their static offsets. */
475 convert_to_base_statically (tree expr, tree base)
479 expr_type = TREE_TYPE (expr);
480 if (!same_type_p (expr_type, BINFO_TYPE (base)))
484 pointer_type = build_pointer_type (expr_type);
485 expr = build_unary_op (ADDR_EXPR, expr, /*noconvert=*/1);
486 if (!integer_zerop (BINFO_OFFSET (base)))
487 expr = build (PLUS_EXPR, pointer_type, expr,
488 build_nop (pointer_type, BINFO_OFFSET (base)));
489 expr = build_nop (build_pointer_type (BINFO_TYPE (base)), expr);
490 expr = build1 (INDIRECT_REF, BINFO_TYPE (base), expr);
497 /* Given an object INSTANCE, return an expression which yields the
498 vtable element corresponding to INDEX. There are many special
499 cases for INSTANCE which we take care of here, mainly to avoid
500 creating extra tree nodes when we don't have to. */
503 build_vtbl_ref_1 (tree instance, tree idx)
506 tree vtbl = NULL_TREE;
508 /* Try to figure out what a reference refers to, and
509 access its virtual function table directly. */
512 tree fixed_type = fixed_type_or_null (instance, NULL, &cdtorp);
514 tree basetype = non_reference (TREE_TYPE (instance));
516 if (fixed_type && !cdtorp)
518 tree binfo = lookup_base (fixed_type, basetype,
519 ba_ignore|ba_quiet, NULL);
521 vtbl = unshare_expr (BINFO_VTABLE (binfo));
525 vtbl = build_vfield_ref (instance, basetype);
527 assemble_external (vtbl);
529 aref = build_array_ref (vtbl, idx);
530 TREE_CONSTANT (aref) |= TREE_CONSTANT (vtbl) && TREE_CONSTANT (idx);
531 TREE_INVARIANT (aref) = TREE_CONSTANT (aref);
537 build_vtbl_ref (tree instance, tree idx)
539 tree aref = build_vtbl_ref_1 (instance, idx);
544 /* Given a stable object pointer INSTANCE_PTR, return an expression which
545 yields a function pointer corresponding to vtable element INDEX. */
548 build_vfn_ref (tree instance_ptr, tree idx)
552 aref = build_vtbl_ref_1 (build_indirect_ref (instance_ptr, 0), idx);
554 /* When using function descriptors, the address of the
555 vtable entry is treated as a function pointer. */
556 if (TARGET_VTABLE_USES_DESCRIPTORS)
557 aref = build1 (NOP_EXPR, TREE_TYPE (aref),
558 build_unary_op (ADDR_EXPR, aref, /*noconvert=*/1));
560 /* Remember this as a method reference, for later devirtualization. */
561 aref = build (OBJ_TYPE_REF, TREE_TYPE (aref), aref, instance_ptr, idx);
566 /* Return the name of the virtual function table (as an IDENTIFIER_NODE)
567 for the given TYPE. */
570 get_vtable_name (tree type)
572 return mangle_vtbl_for_type (type);
575 /* Return an IDENTIFIER_NODE for the name of the virtual table table
579 get_vtt_name (tree type)
581 return mangle_vtt_for_type (type);
584 /* Create a VAR_DECL for a primary or secondary vtable for CLASS_TYPE.
585 (For a secondary vtable for B-in-D, CLASS_TYPE should be D, not B.)
586 Use NAME for the name of the vtable, and VTABLE_TYPE for its type. */
589 build_vtable (tree class_type, tree name, tree vtable_type)
593 decl = build_lang_decl (VAR_DECL, name, vtable_type);
594 /* vtable names are already mangled; give them their DECL_ASSEMBLER_NAME
595 now to avoid confusion in mangle_decl. */
596 SET_DECL_ASSEMBLER_NAME (decl, name);
597 DECL_CONTEXT (decl) = class_type;
598 DECL_ARTIFICIAL (decl) = 1;
599 TREE_STATIC (decl) = 1;
600 TREE_READONLY (decl) = 1;
601 DECL_VIRTUAL_P (decl) = 1;
602 DECL_ALIGN (decl) = TARGET_VTABLE_ENTRY_ALIGN;
603 DECL_VTABLE_OR_VTT_P (decl) = 1;
605 /* At one time the vtable info was grabbed 2 words at a time. This
606 fails on sparc unless you have 8-byte alignment. (tiemann) */
607 DECL_ALIGN (decl) = MAX (TYPE_ALIGN (double_type_node),
610 import_export_vtable (decl, class_type, 0);
615 /* Get the VAR_DECL of the vtable for TYPE. TYPE need not be polymorphic,
616 or even complete. If this does not exist, create it. If COMPLETE is
617 nonzero, then complete the definition of it -- that will render it
618 impossible to actually build the vtable, but is useful to get at those
619 which are known to exist in the runtime. */
622 get_vtable_decl (tree type, int complete)
626 if (CLASSTYPE_VTABLES (type))
627 return CLASSTYPE_VTABLES (type);
629 decl = build_vtable (type, get_vtable_name (type), vtbl_type_node);
630 CLASSTYPE_VTABLES (type) = decl;
634 DECL_EXTERNAL (decl) = 1;
635 cp_finish_decl (decl, NULL_TREE, NULL_TREE, 0);
641 /* Returns a copy of the BINFO_VIRTUALS list in BINFO. The
642 BV_VCALL_INDEX for each entry is cleared. */
645 copy_virtuals (tree binfo)
650 copies = copy_list (BINFO_VIRTUALS (binfo));
651 for (t = copies; t; t = TREE_CHAIN (t))
652 BV_VCALL_INDEX (t) = NULL_TREE;
657 /* Build the primary virtual function table for TYPE. If BINFO is
658 non-NULL, build the vtable starting with the initial approximation
659 that it is the same as the one which is the head of the association
660 list. Returns a nonzero value if a new vtable is actually
664 build_primary_vtable (tree binfo, tree type)
669 decl = get_vtable_decl (type, /*complete=*/0);
673 if (BINFO_NEW_VTABLE_MARKED (binfo))
674 /* We have already created a vtable for this base, so there's
675 no need to do it again. */
678 virtuals = copy_virtuals (binfo);
679 TREE_TYPE (decl) = TREE_TYPE (get_vtbl_decl_for_binfo (binfo));
680 DECL_SIZE (decl) = TYPE_SIZE (TREE_TYPE (decl));
681 DECL_SIZE_UNIT (decl) = TYPE_SIZE_UNIT (TREE_TYPE (decl));
685 my_friendly_assert (TREE_TYPE (decl) == vtbl_type_node, 20000118);
686 virtuals = NULL_TREE;
689 #ifdef GATHER_STATISTICS
691 n_vtable_elems += list_length (virtuals);
694 /* Initialize the association list for this type, based
695 on our first approximation. */
696 BINFO_VTABLE (TYPE_BINFO (type)) = decl;
697 BINFO_VIRTUALS (TYPE_BINFO (type)) = virtuals;
698 SET_BINFO_NEW_VTABLE_MARKED (TYPE_BINFO (type));
702 /* Give BINFO a new virtual function table which is initialized
703 with a skeleton-copy of its original initialization. The only
704 entry that changes is the `delta' entry, so we can really
705 share a lot of structure.
707 FOR_TYPE is the most derived type which caused this table to
710 Returns nonzero if we haven't met BINFO before.
712 The order in which vtables are built (by calling this function) for
713 an object must remain the same, otherwise a binary incompatibility
717 build_secondary_vtable (tree binfo)
719 if (BINFO_NEW_VTABLE_MARKED (binfo))
720 /* We already created a vtable for this base. There's no need to
724 /* Remember that we've created a vtable for this BINFO, so that we
725 don't try to do so again. */
726 SET_BINFO_NEW_VTABLE_MARKED (binfo);
728 /* Make fresh virtual list, so we can smash it later. */
729 BINFO_VIRTUALS (binfo) = copy_virtuals (binfo);
731 /* Secondary vtables are laid out as part of the same structure as
732 the primary vtable. */
733 BINFO_VTABLE (binfo) = NULL_TREE;
737 /* Create a new vtable for BINFO which is the hierarchy dominated by
738 T. Return nonzero if we actually created a new vtable. */
741 make_new_vtable (tree t, tree binfo)
743 if (binfo == TYPE_BINFO (t))
744 /* In this case, it is *type*'s vtable we are modifying. We start
745 with the approximation that its vtable is that of the
746 immediate base class. */
747 /* ??? This actually passes TYPE_BINFO (t), not the primary base binfo,
748 since we've updated DECL_CONTEXT (TYPE_VFIELD (t)) by now. */
749 return build_primary_vtable (TYPE_BINFO (DECL_CONTEXT (TYPE_VFIELD (t))),
752 /* This is our very own copy of `basetype' to play with. Later,
753 we will fill in all the virtual functions that override the
754 virtual functions in these base classes which are not defined
755 by the current type. */
756 return build_secondary_vtable (binfo);
759 /* Make *VIRTUALS, an entry on the BINFO_VIRTUALS list for BINFO
760 (which is in the hierarchy dominated by T) list FNDECL as its
761 BV_FN. DELTA is the required constant adjustment from the `this'
762 pointer where the vtable entry appears to the `this' required when
763 the function is actually called. */
766 modify_vtable_entry (tree t,
776 if (fndecl != BV_FN (v)
777 || !tree_int_cst_equal (delta, BV_DELTA (v)))
779 /* We need a new vtable for BINFO. */
780 if (make_new_vtable (t, binfo))
782 /* If we really did make a new vtable, we also made a copy
783 of the BINFO_VIRTUALS list. Now, we have to find the
784 corresponding entry in that list. */
785 *virtuals = BINFO_VIRTUALS (binfo);
786 while (BV_FN (*virtuals) != BV_FN (v))
787 *virtuals = TREE_CHAIN (*virtuals);
791 BV_DELTA (v) = delta;
792 BV_VCALL_INDEX (v) = NULL_TREE;
798 /* Add method METHOD to class TYPE. */
801 add_method (tree type, tree method)
808 VEC(tree) *method_vec;
811 if (method == error_mark_node)
814 complete_p = COMPLETE_TYPE_P (type);
815 using = (DECL_CONTEXT (method) != type);
816 template_conv_p = (TREE_CODE (method) == TEMPLATE_DECL
817 && DECL_TEMPLATE_CONV_FN_P (method));
819 method_vec = CLASSTYPE_METHOD_VEC (type);
822 /* Make a new method vector. We start with 8 entries. We must
823 allocate at least two (for constructors and destructors), and
824 we're going to end up with an assignment operator at some
826 method_vec = VEC_alloc (tree, 8);
827 /* Create slots for constructors and destructors. */
828 VEC_quick_push (tree, method_vec, NULL_TREE);
829 VEC_quick_push (tree, method_vec, NULL_TREE);
830 CLASSTYPE_METHOD_VEC (type) = method_vec;
833 len = VEC_length (tree, method_vec);
835 /* Constructors and destructors go in special slots. */
836 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (method))
837 slot = CLASSTYPE_CONSTRUCTOR_SLOT;
838 else if (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (method))
840 slot = CLASSTYPE_DESTRUCTOR_SLOT;
841 TYPE_HAS_DESTRUCTOR (type) = 1;
843 if (TYPE_FOR_JAVA (type))
844 error (DECL_ARTIFICIAL (method)
845 ? "Java class '%T' cannot have an implicit non-trivial destructor"
846 : "Java class '%T' cannot have a destructor",
847 DECL_CONTEXT (method));
851 bool insert_p = true;
852 bool conv_p = DECL_CONV_FN_P (method);
855 /* See if we already have an entry with this name. */
856 for (slot = CLASSTYPE_FIRST_CONVERSION_SLOT;
857 (m = VEC_iterate (tree, method_vec, slot));
863 if (TREE_CODE (m) == TEMPLATE_DECL
864 && DECL_TEMPLATE_CONV_FN_P (m))
868 if (conv_p && !DECL_CONV_FN_P (m))
870 if (DECL_NAME (m) == DECL_NAME (method))
876 && !DECL_CONV_FN_P (m)
877 && DECL_NAME (m) > DECL_NAME (method))
881 /* If we need a new slot, make room. */
884 /* We expect to add few methods in the COMPLETE_P case, so
885 just make room for one more method. */
887 VEC_reserve (tree, method_vec, 1);
889 VEC_safe_push (tree, method_vec, NULL_TREE);
891 VEC_safe_insert (tree, method_vec, slot, NULL_TREE);
893 /* Inserting a new slot may have caused the vector to be
895 CLASSTYPE_METHOD_VEC (type) = method_vec;
899 if (processing_template_decl)
900 /* TYPE is a template class. Don't issue any errors now; wait
901 until instantiation time to complain. */
907 /* Check to see if we've already got this method. */
908 for (fns = VEC_index (tree, method_vec, slot);
910 fns = OVL_NEXT (fns))
912 tree fn = OVL_CURRENT (fns);
917 if (TREE_CODE (fn) != TREE_CODE (method))
920 /* [over.load] Member function declarations with the
921 same name and the same parameter types cannot be
922 overloaded if any of them is a static member
923 function declaration.
925 [namespace.udecl] When a using-declaration brings names
926 from a base class into a derived class scope, member
927 functions in the derived class override and/or hide member
928 functions with the same name and parameter types in a base
929 class (rather than conflicting). */
930 parms1 = TYPE_ARG_TYPES (TREE_TYPE (fn));
931 parms2 = TYPE_ARG_TYPES (TREE_TYPE (method));
933 /* Compare the quals on the 'this' parm. Don't compare
934 the whole types, as used functions are treated as
935 coming from the using class in overload resolution. */
936 if (! DECL_STATIC_FUNCTION_P (fn)
937 && ! DECL_STATIC_FUNCTION_P (method)
938 && (TYPE_QUALS (TREE_TYPE (TREE_VALUE (parms1)))
939 != TYPE_QUALS (TREE_TYPE (TREE_VALUE (parms2)))))
942 /* For templates, the template parms must be identical. */
943 if (TREE_CODE (fn) == TEMPLATE_DECL
944 && !comp_template_parms (DECL_TEMPLATE_PARMS (fn),
945 DECL_TEMPLATE_PARMS (method)))
948 if (! DECL_STATIC_FUNCTION_P (fn))
949 parms1 = TREE_CHAIN (parms1);
950 if (! DECL_STATIC_FUNCTION_P (method))
951 parms2 = TREE_CHAIN (parms2);
953 if (same && compparms (parms1, parms2)
954 && (!DECL_CONV_FN_P (fn)
955 || same_type_p (TREE_TYPE (TREE_TYPE (fn)),
956 TREE_TYPE (TREE_TYPE (method)))))
958 if (using && DECL_CONTEXT (fn) == type)
959 /* Defer to the local function. */
963 cp_error_at ("`%#D' and `%#D' cannot be overloaded",
966 /* We don't call duplicate_decls here to merge
967 the declarations because that will confuse
968 things if the methods have inline
969 definitions. In particular, we will crash
970 while processing the definitions. */
977 /* Add the new binding. */
978 overload = build_overload (method, VEC_index (tree, method_vec, slot));
979 if (!DECL_CONSTRUCTOR_P (method)
980 && !DECL_DESTRUCTOR_P (method)
982 push_class_level_binding (DECL_NAME (method), overload);
984 /* Actually insert the new method. */
985 VEC_replace (tree, method_vec, slot, overload);
988 /* Subroutines of finish_struct. */
990 /* Change the access of FDECL to ACCESS in T. Return 1 if change was
991 legit, otherwise return 0. */
994 alter_access (tree t, tree fdecl, tree access)
998 if (!DECL_LANG_SPECIFIC (fdecl))
999 retrofit_lang_decl (fdecl);
1001 my_friendly_assert (!DECL_DISCRIMINATOR_P (fdecl), 20030624);
1003 elem = purpose_member (t, DECL_ACCESS (fdecl));
1006 if (TREE_VALUE (elem) != access)
1008 if (TREE_CODE (TREE_TYPE (fdecl)) == FUNCTION_DECL)
1009 cp_error_at ("conflicting access specifications for method `%D', ignored", TREE_TYPE (fdecl));
1011 error ("conflicting access specifications for field `%E', ignored",
1016 /* They're changing the access to the same thing they changed
1017 it to before. That's OK. */
1023 perform_or_defer_access_check (TYPE_BINFO (t), fdecl);
1024 DECL_ACCESS (fdecl) = tree_cons (t, access, DECL_ACCESS (fdecl));
1030 /* Process the USING_DECL, which is a member of T. */
1033 handle_using_decl (tree using_decl, tree t)
1035 tree ctype = DECL_INITIAL (using_decl);
1036 tree name = DECL_NAME (using_decl);
1038 = TREE_PRIVATE (using_decl) ? access_private_node
1039 : TREE_PROTECTED (using_decl) ? access_protected_node
1040 : access_public_node;
1042 tree flist = NULL_TREE;
1045 if (ctype == error_mark_node)
1048 binfo = lookup_base (t, ctype, ba_any, NULL);
1051 location_t saved_loc = input_location;
1053 input_location = DECL_SOURCE_LOCATION (using_decl);
1054 error_not_base_type (ctype, t);
1055 input_location = saved_loc;
1059 if (constructor_name_p (name, ctype))
1061 cp_error_at ("`%D' names constructor", using_decl);
1064 if (constructor_name_p (name, t))
1066 cp_error_at ("`%D' invalid in `%T'", using_decl, t);
1070 fdecl = lookup_member (binfo, name, 0, false);
1074 cp_error_at ("no members matching `%D' in `%#T'", using_decl, ctype);
1078 if (BASELINK_P (fdecl))
1079 /* Ignore base type this came from. */
1080 fdecl = BASELINK_FUNCTIONS (fdecl);
1082 old_value = lookup_member (t, name, /*protect=*/0, /*want_type=*/false);
1085 if (is_overloaded_fn (old_value))
1086 old_value = OVL_CURRENT (old_value);
1088 if (DECL_P (old_value) && DECL_CONTEXT (old_value) == t)
1091 old_value = NULL_TREE;
1094 if (is_overloaded_fn (fdecl))
1099 else if (is_overloaded_fn (old_value))
1102 /* It's OK to use functions from a base when there are functions with
1103 the same name already present in the current class. */;
1106 cp_error_at ("`%D' invalid in `%#T'", using_decl, t);
1107 cp_error_at (" because of local method `%#D' with same name",
1108 OVL_CURRENT (old_value));
1112 else if (!DECL_ARTIFICIAL (old_value))
1114 cp_error_at ("`%D' invalid in `%#T'", using_decl, t);
1115 cp_error_at (" because of local member `%#D' with same name", old_value);
1119 /* Make type T see field decl FDECL with access ACCESS. */
1121 for (; flist; flist = OVL_NEXT (flist))
1123 add_method (t, OVL_CURRENT (flist));
1124 alter_access (t, OVL_CURRENT (flist), access);
1127 alter_access (t, fdecl, access);
1130 /* Run through the base classes of T, updating
1131 CANT_HAVE_DEFAULT_CTOR_P, CANT_HAVE_CONST_CTOR_P, and
1132 NO_CONST_ASN_REF_P. Also set flag bits in T based on properties of
1136 check_bases (tree t,
1137 int* cant_have_default_ctor_p,
1138 int* cant_have_const_ctor_p,
1139 int* no_const_asn_ref_p)
1143 int seen_non_virtual_nearly_empty_base_p;
1146 binfos = BINFO_BASE_BINFOS (TYPE_BINFO (t));
1147 n_baseclasses = BINFO_N_BASE_BINFOS (TYPE_BINFO (t));
1148 seen_non_virtual_nearly_empty_base_p = 0;
1150 for (i = 0; i < n_baseclasses; ++i)
1155 /* Figure out what base we're looking at. */
1156 base_binfo = TREE_VEC_ELT (binfos, i);
1157 basetype = TREE_TYPE (base_binfo);
1159 my_friendly_assert (COMPLETE_TYPE_P (basetype), 20040714);
1161 /* Effective C++ rule 14. We only need to check TYPE_POLYMORPHIC_P
1162 here because the case of virtual functions but non-virtual
1163 dtor is handled in finish_struct_1. */
1164 if (warn_ecpp && ! TYPE_POLYMORPHIC_P (basetype)
1165 && TYPE_HAS_DESTRUCTOR (basetype))
1166 warning ("base class `%#T' has a non-virtual destructor",
1169 /* If the base class doesn't have copy constructors or
1170 assignment operators that take const references, then the
1171 derived class cannot have such a member automatically
1173 if (! TYPE_HAS_CONST_INIT_REF (basetype))
1174 *cant_have_const_ctor_p = 1;
1175 if (TYPE_HAS_ASSIGN_REF (basetype)
1176 && !TYPE_HAS_CONST_ASSIGN_REF (basetype))
1177 *no_const_asn_ref_p = 1;
1178 /* Similarly, if the base class doesn't have a default
1179 constructor, then the derived class won't have an
1180 automatically generated default constructor. */
1181 if (TYPE_HAS_CONSTRUCTOR (basetype)
1182 && ! TYPE_HAS_DEFAULT_CONSTRUCTOR (basetype))
1184 *cant_have_default_ctor_p = 1;
1185 if (! TYPE_HAS_CONSTRUCTOR (t))
1186 pedwarn ("base `%T' with only non-default constructor in class without a constructor",
1190 if (BINFO_VIRTUAL_P (base_binfo))
1191 /* A virtual base does not effect nearly emptiness. */
1193 else if (CLASSTYPE_NEARLY_EMPTY_P (basetype))
1195 if (seen_non_virtual_nearly_empty_base_p)
1196 /* And if there is more than one nearly empty base, then the
1197 derived class is not nearly empty either. */
1198 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
1200 /* Remember we've seen one. */
1201 seen_non_virtual_nearly_empty_base_p = 1;
1203 else if (!is_empty_class (basetype))
1204 /* If the base class is not empty or nearly empty, then this
1205 class cannot be nearly empty. */
1206 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
1208 /* A lot of properties from the bases also apply to the derived
1210 TYPE_NEEDS_CONSTRUCTING (t) |= TYPE_NEEDS_CONSTRUCTING (basetype);
1211 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
1212 |= TYPE_HAS_NONTRIVIAL_DESTRUCTOR (basetype);
1213 TYPE_HAS_COMPLEX_ASSIGN_REF (t)
1214 |= TYPE_HAS_COMPLEX_ASSIGN_REF (basetype);
1215 TYPE_HAS_COMPLEX_INIT_REF (t) |= TYPE_HAS_COMPLEX_INIT_REF (basetype);
1216 TYPE_POLYMORPHIC_P (t) |= TYPE_POLYMORPHIC_P (basetype);
1217 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t)
1218 |= CLASSTYPE_CONTAINS_EMPTY_CLASS_P (basetype);
1222 /* Set BINFO_PRIMARY_BASE_OF for all binfos in the hierarchy
1223 dominated by TYPE that are primary bases. */
1226 mark_primary_bases (tree type)
1230 /* Walk the bases in inheritance graph order. */
1231 for (binfo = TYPE_BINFO (type); binfo; binfo = TREE_CHAIN (binfo))
1233 tree base_binfo = get_primary_binfo (binfo);
1236 /* Not a dynamic base. */;
1237 else if (BINFO_PRIMARY_P (base_binfo))
1238 BINFO_LOST_PRIMARY_P (binfo) = 1;
1241 BINFO_PRIMARY_BASE_OF (base_binfo) = binfo;
1242 /* A virtual binfo might have been copied from within
1243 another hierarchy. As we're about to use it as a primary
1244 base, make sure the offsets match. */
1245 if (BINFO_VIRTUAL_P (base_binfo))
1247 tree delta = size_diffop (convert (ssizetype,
1248 BINFO_OFFSET (binfo)),
1250 BINFO_OFFSET (base_binfo)));
1252 propagate_binfo_offsets (base_binfo, delta);
1258 /* Make the BINFO the primary base of T. */
1261 set_primary_base (tree t, tree binfo)
1265 CLASSTYPE_PRIMARY_BINFO (t) = binfo;
1266 basetype = BINFO_TYPE (binfo);
1267 BINFO_VTABLE (TYPE_BINFO (t)) = BINFO_VTABLE (TYPE_BINFO (basetype));
1268 BINFO_VIRTUALS (TYPE_BINFO (t)) = BINFO_VIRTUALS (TYPE_BINFO (basetype));
1269 TYPE_VFIELD (t) = TYPE_VFIELD (basetype);
1272 /* Determine the primary class for T. */
1275 determine_primary_base (tree t)
1277 unsigned i, n_baseclasses = BINFO_N_BASE_BINFOS (TYPE_BINFO (t));
1281 /* If there are no baseclasses, there is certainly no primary base. */
1282 if (n_baseclasses == 0)
1285 type_binfo = TYPE_BINFO (t);
1287 for (i = 0; i < n_baseclasses; i++)
1289 tree base_binfo = BINFO_BASE_BINFO (type_binfo, i);
1290 tree basetype = BINFO_TYPE (base_binfo);
1292 if (TYPE_CONTAINS_VPTR_P (basetype))
1294 /* We prefer a non-virtual base, although a virtual one will
1296 if (BINFO_VIRTUAL_P (base_binfo))
1299 if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t))
1301 set_primary_base (t, base_binfo);
1302 CLASSTYPE_VFIELDS (t) = copy_list (CLASSTYPE_VFIELDS (basetype));
1308 /* Only add unique vfields, and flatten them out as we go. */
1309 for (vfields = CLASSTYPE_VFIELDS (basetype);
1311 vfields = TREE_CHAIN (vfields))
1312 if (VF_BINFO_VALUE (vfields) == NULL_TREE
1313 || ! BINFO_VIRTUAL_P (VF_BINFO_VALUE (vfields)))
1314 CLASSTYPE_VFIELDS (t)
1315 = tree_cons (base_binfo,
1316 VF_BASETYPE_VALUE (vfields),
1317 CLASSTYPE_VFIELDS (t));
1322 if (!TYPE_VFIELD (t))
1323 CLASSTYPE_PRIMARY_BINFO (t) = NULL_TREE;
1325 /* Find the indirect primary bases - those virtual bases which are primary
1326 bases of something else in this hierarchy. */
1327 for (i = 0; (vbase_binfo = VEC_iterate
1328 (tree, CLASSTYPE_VBASECLASSES (t), i)); i++)
1332 /* See if this virtual base is an indirect primary base. To be
1333 so, it must be a primary base within the hierarchy of one of
1334 our direct bases. */
1335 for (j = 0; j != n_baseclasses; ++j)
1338 tree base_vbase_binfo;
1339 tree basetype = BINFO_TYPE (BINFO_BASE_BINFO (TYPE_BINFO (t), j));
1341 for (k = 0; (base_vbase_binfo = VEC_iterate
1342 (tree, CLASSTYPE_VBASECLASSES (basetype), k)); k++)
1344 if (BINFO_PRIMARY_P (base_vbase_binfo)
1345 && same_type_p (BINFO_TYPE (base_vbase_binfo),
1346 BINFO_TYPE (vbase_binfo)))
1348 BINFO_INDIRECT_PRIMARY_P (vbase_binfo) = 1;
1353 /* If we've discovered that this virtual base is an indirect
1354 primary base, then we can move on to the next virtual
1356 if (BINFO_INDIRECT_PRIMARY_P (vbase_binfo))
1361 /* A "nearly-empty" virtual base class can be the primary base
1362 class, if no non-virtual polymorphic base can be found. */
1363 if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t))
1365 /* If not NULL, this is the best primary base candidate we have
1367 tree candidate = NULL_TREE;
1370 /* Loop over the baseclasses. */
1371 for (base_binfo = TYPE_BINFO (t);
1373 base_binfo = TREE_CHAIN (base_binfo))
1375 tree basetype = BINFO_TYPE (base_binfo);
1377 if (BINFO_VIRTUAL_P (base_binfo)
1378 && CLASSTYPE_NEARLY_EMPTY_P (basetype))
1380 /* If this is not an indirect primary base, then it's
1381 definitely our primary base. */
1382 if (!BINFO_INDIRECT_PRIMARY_P (base_binfo))
1384 candidate = base_binfo;
1388 /* If this is an indirect primary base, it still could be
1389 our primary base -- unless we later find there's another
1390 nearly-empty virtual base that isn't an indirect
1393 candidate = base_binfo;
1397 /* If we've got a primary base, use it. */
1400 set_primary_base (t, candidate);
1401 CLASSTYPE_VFIELDS (t)
1402 = copy_list (CLASSTYPE_VFIELDS (BINFO_TYPE (candidate)));
1406 /* Mark the primary base classes at this point. */
1407 mark_primary_bases (t);
1410 /* Set memoizing fields and bits of T (and its variants) for later
1414 finish_struct_bits (tree t)
1416 int n_baseclasses = BINFO_N_BASE_BINFOS (TYPE_BINFO (t));
1419 /* Fix up variants (if any). */
1420 for (variants = TYPE_NEXT_VARIANT (t);
1422 variants = TYPE_NEXT_VARIANT (variants))
1424 /* These fields are in the _TYPE part of the node, not in
1425 the TYPE_LANG_SPECIFIC component, so they are not shared. */
1426 TYPE_HAS_CONSTRUCTOR (variants) = TYPE_HAS_CONSTRUCTOR (t);
1427 TYPE_HAS_DESTRUCTOR (variants) = TYPE_HAS_DESTRUCTOR (t);
1428 TYPE_NEEDS_CONSTRUCTING (variants) = TYPE_NEEDS_CONSTRUCTING (t);
1429 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (variants)
1430 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t);
1432 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (variants)
1433 = TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (t);
1434 TYPE_POLYMORPHIC_P (variants) = TYPE_POLYMORPHIC_P (t);
1435 TYPE_USES_VIRTUAL_BASECLASSES (variants)
1436 = TYPE_USES_VIRTUAL_BASECLASSES (t);
1438 TYPE_BINFO (variants) = TYPE_BINFO (t);
1440 /* Copy whatever these are holding today. */
1441 TYPE_VFIELD (variants) = TYPE_VFIELD (t);
1442 TYPE_METHODS (variants) = TYPE_METHODS (t);
1443 TYPE_FIELDS (variants) = TYPE_FIELDS (t);
1444 TYPE_SIZE (variants) = TYPE_SIZE (t);
1445 TYPE_SIZE_UNIT (variants) = TYPE_SIZE_UNIT (t);
1448 if (n_baseclasses && TYPE_POLYMORPHIC_P (t))
1449 /* For a class w/o baseclasses, `finish_struct' has set
1450 CLASS_TYPE_ABSTRACT_VIRTUALS correctly (by definition).
1451 Similarly for a class whose base classes do not have vtables.
1452 When neither of these is true, we might have removed abstract
1453 virtuals (by providing a definition), added some (by declaring
1454 new ones), or redeclared ones from a base class. We need to
1455 recalculate what's really an abstract virtual at this point (by
1456 looking in the vtables). */
1457 get_pure_virtuals (t);
1459 /* If this type has a copy constructor or a destructor, force its
1460 mode to be BLKmode, and force its TREE_ADDRESSABLE bit to be
1461 nonzero. This will cause it to be passed by invisible reference
1462 and prevent it from being returned in a register. */
1463 if (! TYPE_HAS_TRIVIAL_INIT_REF (t) || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t))
1466 DECL_MODE (TYPE_MAIN_DECL (t)) = BLKmode;
1467 for (variants = t; variants; variants = TYPE_NEXT_VARIANT (variants))
1469 TYPE_MODE (variants) = BLKmode;
1470 TREE_ADDRESSABLE (variants) = 1;
1475 /* Issue warnings about T having private constructors, but no friends,
1478 HAS_NONPRIVATE_METHOD is nonzero if T has any non-private methods or
1479 static members. HAS_NONPRIVATE_STATIC_FN is nonzero if T has any
1480 non-private static member functions. */
1483 maybe_warn_about_overly_private_class (tree t)
1485 int has_member_fn = 0;
1486 int has_nonprivate_method = 0;
1489 if (!warn_ctor_dtor_privacy
1490 /* If the class has friends, those entities might create and
1491 access instances, so we should not warn. */
1492 || (CLASSTYPE_FRIEND_CLASSES (t)
1493 || DECL_FRIENDLIST (TYPE_MAIN_DECL (t)))
1494 /* We will have warned when the template was declared; there's
1495 no need to warn on every instantiation. */
1496 || CLASSTYPE_TEMPLATE_INSTANTIATION (t))
1497 /* There's no reason to even consider warning about this
1501 /* We only issue one warning, if more than one applies, because
1502 otherwise, on code like:
1505 // Oops - forgot `public:'
1511 we warn several times about essentially the same problem. */
1513 /* Check to see if all (non-constructor, non-destructor) member
1514 functions are private. (Since there are no friends or
1515 non-private statics, we can't ever call any of the private member
1517 for (fn = TYPE_METHODS (t); fn; fn = TREE_CHAIN (fn))
1518 /* We're not interested in compiler-generated methods; they don't
1519 provide any way to call private members. */
1520 if (!DECL_ARTIFICIAL (fn))
1522 if (!TREE_PRIVATE (fn))
1524 if (DECL_STATIC_FUNCTION_P (fn))
1525 /* A non-private static member function is just like a
1526 friend; it can create and invoke private member
1527 functions, and be accessed without a class
1531 has_nonprivate_method = 1;
1532 /* Keep searching for a static member function. */
1534 else if (!DECL_CONSTRUCTOR_P (fn) && !DECL_DESTRUCTOR_P (fn))
1538 if (!has_nonprivate_method && has_member_fn)
1540 /* There are no non-private methods, and there's at least one
1541 private member function that isn't a constructor or
1542 destructor. (If all the private members are
1543 constructors/destructors we want to use the code below that
1544 issues error messages specifically referring to
1545 constructors/destructors.) */
1547 tree binfo = TYPE_BINFO (t);
1549 for (i = 0; i < BINFO_N_BASE_BINFOS (binfo); i++)
1550 if (BINFO_BASE_ACCESS (binfo, i) != access_private_node)
1552 has_nonprivate_method = 1;
1555 if (!has_nonprivate_method)
1557 warning ("all member functions in class `%T' are private", t);
1562 /* Even if some of the member functions are non-private, the class
1563 won't be useful for much if all the constructors or destructors
1564 are private: such an object can never be created or destroyed. */
1565 if (TYPE_HAS_DESTRUCTOR (t)
1566 && TREE_PRIVATE (CLASSTYPE_DESTRUCTORS (t)))
1568 warning ("`%#T' only defines a private destructor and has no friends",
1573 if (TYPE_HAS_CONSTRUCTOR (t))
1575 int nonprivate_ctor = 0;
1577 /* If a non-template class does not define a copy
1578 constructor, one is defined for it, enabling it to avoid
1579 this warning. For a template class, this does not
1580 happen, and so we would normally get a warning on:
1582 template <class T> class C { private: C(); };
1584 To avoid this asymmetry, we check TYPE_HAS_INIT_REF. All
1585 complete non-template or fully instantiated classes have this
1587 if (!TYPE_HAS_INIT_REF (t))
1588 nonprivate_ctor = 1;
1590 for (fn = CLASSTYPE_CONSTRUCTORS (t); fn; fn = OVL_NEXT (fn))
1592 tree ctor = OVL_CURRENT (fn);
1593 /* Ideally, we wouldn't count copy constructors (or, in
1594 fact, any constructor that takes an argument of the
1595 class type as a parameter) because such things cannot
1596 be used to construct an instance of the class unless
1597 you already have one. But, for now at least, we're
1599 if (! TREE_PRIVATE (ctor))
1601 nonprivate_ctor = 1;
1606 if (nonprivate_ctor == 0)
1608 warning ("`%#T' only defines private constructors and has no friends",
1616 gt_pointer_operator new_value;
1620 /* Comparison function to compare two TYPE_METHOD_VEC entries by name. */
1623 method_name_cmp (const void* m1_p, const void* m2_p)
1625 const tree *const m1 = m1_p;
1626 const tree *const m2 = m2_p;
1628 if (*m1 == NULL_TREE && *m2 == NULL_TREE)
1630 if (*m1 == NULL_TREE)
1632 if (*m2 == NULL_TREE)
1634 if (DECL_NAME (OVL_CURRENT (*m1)) < DECL_NAME (OVL_CURRENT (*m2)))
1639 /* This routine compares two fields like method_name_cmp but using the
1640 pointer operator in resort_field_decl_data. */
1643 resort_method_name_cmp (const void* m1_p, const void* m2_p)
1645 const tree *const m1 = m1_p;
1646 const tree *const m2 = m2_p;
1647 if (*m1 == NULL_TREE && *m2 == NULL_TREE)
1649 if (*m1 == NULL_TREE)
1651 if (*m2 == NULL_TREE)
1654 tree d1 = DECL_NAME (OVL_CURRENT (*m1));
1655 tree d2 = DECL_NAME (OVL_CURRENT (*m2));
1656 resort_data.new_value (&d1, resort_data.cookie);
1657 resort_data.new_value (&d2, resort_data.cookie);
1664 /* Resort TYPE_METHOD_VEC because pointers have been reordered. */
1667 resort_type_method_vec (void* obj,
1668 void* orig_obj ATTRIBUTE_UNUSED ,
1669 gt_pointer_operator new_value,
1672 VEC(tree) *method_vec = (VEC(tree) *) obj;
1673 int len = VEC_length (tree, method_vec);
1677 /* The type conversion ops have to live at the front of the vec, so we
1679 for (slot = CLASSTYPE_FIRST_CONVERSION_SLOT;
1680 (fn = VEC_iterate (tree, method_vec, slot));
1682 if (!DECL_CONV_FN_P (OVL_CURRENT (fn)))
1687 resort_data.new_value = new_value;
1688 resort_data.cookie = cookie;
1689 qsort (VEC_address (tree, method_vec) + slot, len - slot, sizeof (tree),
1690 resort_method_name_cmp);
1694 /* Warn about duplicate methods in fn_fields. Also compact method
1695 lists so that lookup can be made faster.
1697 Data Structure: List of method lists. The outer list is a
1698 TREE_LIST, whose TREE_PURPOSE field is the field name and the
1699 TREE_VALUE is the DECL_CHAIN of the FUNCTION_DECLs. TREE_CHAIN
1700 links the entire list of methods for TYPE_METHODS. Friends are
1701 chained in the same way as member functions (? TREE_CHAIN or
1702 DECL_CHAIN), but they live in the TREE_TYPE field of the outer
1703 list. That allows them to be quickly deleted, and requires no
1706 Sort methods that are not special (i.e., constructors, destructors,
1707 and type conversion operators) so that we can find them faster in
1711 finish_struct_methods (tree t)
1714 VEC(tree) *method_vec;
1717 if (!TYPE_METHODS (t))
1719 /* Clear these for safety; perhaps some parsing error could set
1720 these incorrectly. */
1721 TYPE_HAS_CONSTRUCTOR (t) = 0;
1722 TYPE_HAS_DESTRUCTOR (t) = 0;
1723 CLASSTYPE_METHOD_VEC (t) = NULL;
1727 method_vec = CLASSTYPE_METHOD_VEC (t);
1728 my_friendly_assert (method_vec, 19991215);
1729 len = VEC_length (tree, method_vec);
1731 /* First fill in entry 0 with the constructors, entry 1 with destructors,
1732 and the next few with type conversion operators (if any). */
1733 for (fn_fields = TYPE_METHODS (t); fn_fields;
1734 fn_fields = TREE_CHAIN (fn_fields))
1735 /* Clear out this flag. */
1736 DECL_IN_AGGR_P (fn_fields) = 0;
1738 if (TYPE_HAS_DESTRUCTOR (t) && !CLASSTYPE_DESTRUCTORS (t))
1739 /* We thought there was a destructor, but there wasn't. Some
1740 parse errors cause this anomalous situation. */
1741 TYPE_HAS_DESTRUCTOR (t) = 0;
1743 /* Issue warnings about private constructors and such. If there are
1744 no methods, then some public defaults are generated. */
1745 maybe_warn_about_overly_private_class (t);
1747 /* The type conversion ops have to live at the front of the vec, so we
1750 (fn_fields = VEC_iterate (tree, method_vec, slot));
1752 if (!DECL_CONV_FN_P (OVL_CURRENT (fn_fields)))
1755 qsort (VEC_address (tree, method_vec) + slot,
1756 len-slot, sizeof (tree), method_name_cmp);
1759 /* Make BINFO's vtable have N entries, including RTTI entries,
1760 vbase and vcall offsets, etc. Set its type and call the backend
1764 layout_vtable_decl (tree binfo, int n)
1769 atype = build_cplus_array_type (vtable_entry_type,
1770 build_index_type (size_int (n - 1)));
1771 layout_type (atype);
1773 /* We may have to grow the vtable. */
1774 vtable = get_vtbl_decl_for_binfo (binfo);
1775 if (!same_type_p (TREE_TYPE (vtable), atype))
1777 TREE_TYPE (vtable) = atype;
1778 DECL_SIZE (vtable) = DECL_SIZE_UNIT (vtable) = NULL_TREE;
1779 layout_decl (vtable, 0);
1783 /* True iff FNDECL and BASE_FNDECL (both non-static member functions)
1784 have the same signature. */
1787 same_signature_p (tree fndecl, tree base_fndecl)
1789 /* One destructor overrides another if they are the same kind of
1791 if (DECL_DESTRUCTOR_P (base_fndecl) && DECL_DESTRUCTOR_P (fndecl)
1792 && special_function_p (base_fndecl) == special_function_p (fndecl))
1794 /* But a non-destructor never overrides a destructor, nor vice
1795 versa, nor do different kinds of destructors override
1796 one-another. For example, a complete object destructor does not
1797 override a deleting destructor. */
1798 if (DECL_DESTRUCTOR_P (base_fndecl) || DECL_DESTRUCTOR_P (fndecl))
1801 if (DECL_NAME (fndecl) == DECL_NAME (base_fndecl)
1802 || (DECL_CONV_FN_P (fndecl)
1803 && DECL_CONV_FN_P (base_fndecl)
1804 && same_type_p (DECL_CONV_FN_TYPE (fndecl),
1805 DECL_CONV_FN_TYPE (base_fndecl))))
1807 tree types, base_types;
1808 types = TYPE_ARG_TYPES (TREE_TYPE (fndecl));
1809 base_types = TYPE_ARG_TYPES (TREE_TYPE (base_fndecl));
1810 if ((TYPE_QUALS (TREE_TYPE (TREE_VALUE (base_types)))
1811 == TYPE_QUALS (TREE_TYPE (TREE_VALUE (types))))
1812 && compparms (TREE_CHAIN (base_types), TREE_CHAIN (types)))
1818 /* Returns TRUE if DERIVED is a binfo containing the binfo BASE as a
1822 base_derived_from (tree derived, tree base)
1826 for (probe = base; probe; probe = BINFO_INHERITANCE_CHAIN (probe))
1828 if (probe == derived)
1830 else if (BINFO_VIRTUAL_P (probe))
1831 /* If we meet a virtual base, we can't follow the inheritance
1832 any more. See if the complete type of DERIVED contains
1833 such a virtual base. */
1834 return (binfo_for_vbase (BINFO_TYPE (probe), BINFO_TYPE (derived))
1840 typedef struct find_final_overrider_data_s {
1841 /* The function for which we are trying to find a final overrider. */
1843 /* The base class in which the function was declared. */
1844 tree declaring_base;
1845 /* The most derived class in the hierarchy. */
1846 tree most_derived_type;
1847 /* The candidate overriders. */
1849 /* Binfos which inherited virtually on the current path. */
1851 } find_final_overrider_data;
1853 /* Called from find_final_overrider via dfs_walk. */
1856 dfs_find_final_overrider (tree binfo, void* data)
1858 find_final_overrider_data *ffod = (find_final_overrider_data *) data;
1860 if (binfo == ffod->declaring_base)
1862 /* We've found a path to the declaring base. Walk the path from
1863 derived to base, looking for an overrider for FN. */
1864 tree path, probe, vpath;
1866 /* Build the path, using the inheritance chain and record of
1867 virtual inheritance. */
1868 for (path = NULL_TREE, probe = binfo, vpath = ffod->vpath;;)
1870 path = tree_cons (NULL_TREE, probe, path);
1871 if (same_type_p (BINFO_TYPE (probe), ffod->most_derived_type))
1873 if (BINFO_VIRTUAL_P (probe))
1875 probe = TREE_VALUE (vpath);
1876 vpath = TREE_CHAIN (vpath);
1879 probe = BINFO_INHERITANCE_CHAIN (probe);
1881 /* Now walk path, looking for overrides. */
1882 for (; path; path = TREE_CHAIN (path))
1884 tree method = look_for_overrides_here
1885 (BINFO_TYPE (TREE_VALUE (path)), ffod->fn);
1889 tree *candidate = &ffod->candidates;
1890 path = TREE_VALUE (path);
1892 /* Remove any candidates overridden by this new function. */
1895 /* If *CANDIDATE overrides METHOD, then METHOD
1896 cannot override anything else on the list. */
1897 if (base_derived_from (TREE_VALUE (*candidate), path))
1899 /* If METHOD overrides *CANDIDATE, remove *CANDIDATE. */
1900 if (base_derived_from (path, TREE_VALUE (*candidate)))
1901 *candidate = TREE_CHAIN (*candidate);
1903 candidate = &TREE_CHAIN (*candidate);
1906 /* Add the new function. */
1907 ffod->candidates = tree_cons (method, path, ffod->candidates);
1917 dfs_find_final_overrider_q (tree derived, int ix, void *data)
1919 tree binfo = BINFO_BASE_BINFO (derived, ix);
1920 find_final_overrider_data *ffod = (find_final_overrider_data *) data;
1922 if (BINFO_VIRTUAL_P (binfo))
1923 ffod->vpath = tree_cons (NULL_TREE, derived, ffod->vpath);
1929 dfs_find_final_overrider_post (tree binfo, void *data)
1931 find_final_overrider_data *ffod = (find_final_overrider_data *) data;
1933 if (BINFO_VIRTUAL_P (binfo) && TREE_CHAIN (ffod->vpath))
1934 ffod->vpath = TREE_CHAIN (ffod->vpath);
1939 /* Returns a TREE_LIST whose TREE_PURPOSE is the final overrider for
1940 FN and whose TREE_VALUE is the binfo for the base where the
1941 overriding occurs. BINFO (in the hierarchy dominated by the binfo
1942 DERIVED) is the base object in which FN is declared. */
1945 find_final_overrider (tree derived, tree binfo, tree fn)
1947 find_final_overrider_data ffod;
1949 /* Getting this right is a little tricky. This is valid:
1951 struct S { virtual void f (); };
1952 struct T { virtual void f (); };
1953 struct U : public S, public T { };
1955 even though calling `f' in `U' is ambiguous. But,
1957 struct R { virtual void f(); };
1958 struct S : virtual public R { virtual void f (); };
1959 struct T : virtual public R { virtual void f (); };
1960 struct U : public S, public T { };
1962 is not -- there's no way to decide whether to put `S::f' or
1963 `T::f' in the vtable for `R'.
1965 The solution is to look at all paths to BINFO. If we find
1966 different overriders along any two, then there is a problem. */
1967 if (DECL_THUNK_P (fn))
1968 fn = THUNK_TARGET (fn);
1971 ffod.declaring_base = binfo;
1972 ffod.most_derived_type = BINFO_TYPE (derived);
1973 ffod.candidates = NULL_TREE;
1974 ffod.vpath = NULL_TREE;
1976 dfs_walk_real (derived,
1977 dfs_find_final_overrider,
1978 dfs_find_final_overrider_post,
1979 dfs_find_final_overrider_q,
1982 /* If there was no winner, issue an error message. */
1983 if (!ffod.candidates || TREE_CHAIN (ffod.candidates))
1985 error ("no unique final overrider for `%D' in `%T'", fn,
1986 BINFO_TYPE (derived));
1987 return error_mark_node;
1990 return ffod.candidates;
1993 /* Return the index of the vcall offset for FN when TYPE is used as a
1997 get_vcall_index (tree fn, tree type)
2001 for (v = CLASSTYPE_VCALL_INDICES (type); v; v = TREE_CHAIN (v))
2002 if ((DECL_DESTRUCTOR_P (fn) && DECL_DESTRUCTOR_P (TREE_PURPOSE (v)))
2003 || same_signature_p (fn, TREE_PURPOSE (v)))
2006 /* There should always be an appropriate index. */
2007 my_friendly_assert (v, 20021103);
2009 return TREE_VALUE (v);
2012 /* Update an entry in the vtable for BINFO, which is in the hierarchy
2013 dominated by T. FN has been overridden in BINFO; VIRTUALS points to the
2014 corresponding position in the BINFO_VIRTUALS list. */
2017 update_vtable_entry_for_fn (tree t, tree binfo, tree fn, tree* virtuals,
2025 tree overrider_fn, overrider_target;
2026 tree target_fn = DECL_THUNK_P (fn) ? THUNK_TARGET (fn) : fn;
2027 tree over_return, base_return;
2030 /* Find the nearest primary base (possibly binfo itself) which defines
2031 this function; this is the class the caller will convert to when
2032 calling FN through BINFO. */
2033 for (b = binfo; ; b = get_primary_binfo (b))
2035 my_friendly_assert (b, 20021227);
2036 if (look_for_overrides_here (BINFO_TYPE (b), target_fn))
2039 /* The nearest definition is from a lost primary. */
2040 if (BINFO_LOST_PRIMARY_P (b))
2045 /* Find the final overrider. */
2046 overrider = find_final_overrider (TYPE_BINFO (t), b, target_fn);
2047 if (overrider == error_mark_node)
2049 overrider_target = overrider_fn = TREE_PURPOSE (overrider);
2051 /* Check for adjusting covariant return types. */
2052 over_return = TREE_TYPE (TREE_TYPE (overrider_target));
2053 base_return = TREE_TYPE (TREE_TYPE (target_fn));
2055 if (POINTER_TYPE_P (over_return)
2056 && TREE_CODE (over_return) == TREE_CODE (base_return)
2057 && CLASS_TYPE_P (TREE_TYPE (over_return))
2058 && CLASS_TYPE_P (TREE_TYPE (base_return)))
2060 /* If FN is a covariant thunk, we must figure out the adjustment
2061 to the final base FN was converting to. As OVERRIDER_TARGET might
2062 also be converting to the return type of FN, we have to
2063 combine the two conversions here. */
2064 tree fixed_offset, virtual_offset;
2066 if (DECL_THUNK_P (fn))
2068 my_friendly_assert (DECL_RESULT_THUNK_P (fn), 20031211);
2069 fixed_offset = ssize_int (THUNK_FIXED_OFFSET (fn));
2070 virtual_offset = THUNK_VIRTUAL_OFFSET (fn);
2073 fixed_offset = virtual_offset = NULL_TREE;
2076 /* Find the equivalent binfo within the return type of the
2077 overriding function. We will want the vbase offset from
2079 virtual_offset = binfo_for_vbase (BINFO_TYPE (virtual_offset),
2080 TREE_TYPE (over_return));
2081 else if (!same_type_p (TREE_TYPE (over_return),
2082 TREE_TYPE (base_return)))
2084 /* There was no existing virtual thunk (which takes
2089 thunk_binfo = lookup_base (TREE_TYPE (over_return),
2090 TREE_TYPE (base_return),
2091 ba_check | ba_quiet, &kind);
2093 if (thunk_binfo && (kind == bk_via_virtual
2094 || !BINFO_OFFSET_ZEROP (thunk_binfo)))
2096 tree offset = convert (ssizetype, BINFO_OFFSET (thunk_binfo));
2098 if (kind == bk_via_virtual)
2100 /* We convert via virtual base. Find the virtual
2101 base and adjust the fixed offset to be from there. */
2102 while (!BINFO_VIRTUAL_P (thunk_binfo))
2103 thunk_binfo = BINFO_INHERITANCE_CHAIN (thunk_binfo);
2105 virtual_offset = thunk_binfo;
2106 offset = size_diffop
2108 (ssizetype, BINFO_OFFSET (virtual_offset)));
2111 /* There was an existing fixed offset, this must be
2112 from the base just converted to, and the base the
2113 FN was thunking to. */
2114 fixed_offset = size_binop (PLUS_EXPR, fixed_offset, offset);
2116 fixed_offset = offset;
2120 if (fixed_offset || virtual_offset)
2121 /* Replace the overriding function with a covariant thunk. We
2122 will emit the overriding function in its own slot as
2124 overrider_fn = make_thunk (overrider_target, /*this_adjusting=*/0,
2125 fixed_offset, virtual_offset);
2128 my_friendly_assert (!DECL_THUNK_P (fn), 20021231);
2130 /* Assume that we will produce a thunk that convert all the way to
2131 the final overrider, and not to an intermediate virtual base. */
2132 virtual_base = NULL_TREE;
2134 /* See if we can convert to an intermediate virtual base first, and then
2135 use the vcall offset located there to finish the conversion. */
2136 for (; b; b = BINFO_INHERITANCE_CHAIN (b))
2138 /* If we find the final overrider, then we can stop
2140 if (same_type_p (BINFO_TYPE (b),
2141 BINFO_TYPE (TREE_VALUE (overrider))))
2144 /* If we find a virtual base, and we haven't yet found the
2145 overrider, then there is a virtual base between the
2146 declaring base (first_defn) and the final overrider. */
2147 if (BINFO_VIRTUAL_P (b))
2154 if (overrider_fn != overrider_target && !virtual_base)
2156 /* The ABI specifies that a covariant thunk includes a mangling
2157 for a this pointer adjustment. This-adjusting thunks that
2158 override a function from a virtual base have a vcall
2159 adjustment. When the virtual base in question is a primary
2160 virtual base, we know the adjustments are zero, (and in the
2161 non-covariant case, we would not use the thunk).
2162 Unfortunately we didn't notice this could happen, when
2163 designing the ABI and so never mandated that such a covariant
2164 thunk should be emitted. Because we must use the ABI mandated
2165 name, we must continue searching from the binfo where we
2166 found the most recent definition of the function, towards the
2167 primary binfo which first introduced the function into the
2168 vtable. If that enters a virtual base, we must use a vcall
2169 this-adjusting thunk. Bleah! */
2170 tree probe = first_defn;
2172 while ((probe = get_primary_binfo (probe))
2173 && (unsigned) list_length (BINFO_VIRTUALS (probe)) > ix)
2174 if (BINFO_VIRTUAL_P (probe))
2175 virtual_base = probe;
2178 /* Even if we find a virtual base, the correct delta is
2179 between the overrider and the binfo we're building a vtable
2181 goto virtual_covariant;
2184 /* Compute the constant adjustment to the `this' pointer. The
2185 `this' pointer, when this function is called, will point at BINFO
2186 (or one of its primary bases, which are at the same offset). */
2188 /* The `this' pointer needs to be adjusted from the declaration to
2189 the nearest virtual base. */
2190 delta = size_diffop (convert (ssizetype, BINFO_OFFSET (virtual_base)),
2191 convert (ssizetype, BINFO_OFFSET (first_defn)));
2193 /* If the nearest definition is in a lost primary, we don't need an
2194 entry in our vtable. Except possibly in a constructor vtable,
2195 if we happen to get our primary back. In that case, the offset
2196 will be zero, as it will be a primary base. */
2197 delta = size_zero_node;
2199 /* The `this' pointer needs to be adjusted from pointing to
2200 BINFO to pointing at the base where the final overrider
2203 delta = size_diffop (convert (ssizetype,
2204 BINFO_OFFSET (TREE_VALUE (overrider))),
2205 convert (ssizetype, BINFO_OFFSET (binfo)));
2207 modify_vtable_entry (t, binfo, overrider_fn, delta, virtuals);
2210 BV_VCALL_INDEX (*virtuals)
2211 = get_vcall_index (overrider_target, BINFO_TYPE (virtual_base));
2214 /* Called from modify_all_vtables via dfs_walk. */
2217 dfs_modify_vtables (tree binfo, void* data)
2219 if (/* There's no need to modify the vtable for a non-virtual
2220 primary base; we're not going to use that vtable anyhow.
2221 We do still need to do this for virtual primary bases, as they
2222 could become non-primary in a construction vtable. */
2223 (!BINFO_PRIMARY_P (binfo) || BINFO_VIRTUAL_P (binfo))
2224 /* Similarly, a base without a vtable needs no modification. */
2225 && CLASSTYPE_VFIELDS (BINFO_TYPE (binfo)))
2227 tree t = (tree) data;
2232 make_new_vtable (t, binfo);
2234 /* Now, go through each of the virtual functions in the virtual
2235 function table for BINFO. Find the final overrider, and
2236 update the BINFO_VIRTUALS list appropriately. */
2237 for (ix = 0, virtuals = BINFO_VIRTUALS (binfo),
2238 old_virtuals = BINFO_VIRTUALS (TYPE_BINFO (BINFO_TYPE (binfo)));
2240 ix++, virtuals = TREE_CHAIN (virtuals),
2241 old_virtuals = TREE_CHAIN (old_virtuals))
2242 update_vtable_entry_for_fn (t,
2244 BV_FN (old_virtuals),
2248 BINFO_MARKED (binfo) = 1;
2253 /* Update all of the primary and secondary vtables for T. Create new
2254 vtables as required, and initialize their RTTI information. Each
2255 of the functions in VIRTUALS is declared in T and may override a
2256 virtual function from a base class; find and modify the appropriate
2257 entries to point to the overriding functions. Returns a list, in
2258 declaration order, of the virtual functions that are declared in T,
2259 but do not appear in the primary base class vtable, and which
2260 should therefore be appended to the end of the vtable for T. */
2263 modify_all_vtables (tree t, tree virtuals)
2265 tree binfo = TYPE_BINFO (t);
2268 /* Update all of the vtables. */
2269 dfs_walk (binfo, dfs_modify_vtables, unmarkedp, t);
2270 dfs_walk (binfo, dfs_unmark, markedp, t);
2272 /* Add virtual functions not already in our primary vtable. These
2273 will be both those introduced by this class, and those overridden
2274 from secondary bases. It does not include virtuals merely
2275 inherited from secondary bases. */
2276 for (fnsp = &virtuals; *fnsp; )
2278 tree fn = TREE_VALUE (*fnsp);
2280 if (!value_member (fn, BINFO_VIRTUALS (binfo))
2281 || DECL_VINDEX (fn) == error_mark_node)
2283 /* We don't need to adjust the `this' pointer when
2284 calling this function. */
2285 BV_DELTA (*fnsp) = integer_zero_node;
2286 BV_VCALL_INDEX (*fnsp) = NULL_TREE;
2288 /* This is a function not already in our vtable. Keep it. */
2289 fnsp = &TREE_CHAIN (*fnsp);
2292 /* We've already got an entry for this function. Skip it. */
2293 *fnsp = TREE_CHAIN (*fnsp);
2299 /* Get the base virtual function declarations in T that have the
2303 get_basefndecls (tree name, tree t)
2306 tree base_fndecls = NULL_TREE;
2307 int n_baseclasses = BINFO_N_BASE_BINFOS (TYPE_BINFO (t));
2310 /* Find virtual functions in T with the indicated NAME. */
2311 i = lookup_fnfields_1 (t, name);
2313 for (methods = VEC_index (tree, CLASSTYPE_METHOD_VEC (t), i);
2315 methods = OVL_NEXT (methods))
2317 tree method = OVL_CURRENT (methods);
2319 if (TREE_CODE (method) == FUNCTION_DECL
2320 && DECL_VINDEX (method))
2321 base_fndecls = tree_cons (NULL_TREE, method, base_fndecls);
2325 return base_fndecls;
2327 for (i = 0; i < n_baseclasses; i++)
2329 tree basetype = BINFO_TYPE (BINFO_BASE_BINFO (TYPE_BINFO (t), i));
2330 base_fndecls = chainon (get_basefndecls (name, basetype),
2334 return base_fndecls;
2337 /* If this declaration supersedes the declaration of
2338 a method declared virtual in the base class, then
2339 mark this field as being virtual as well. */
2342 check_for_override (tree decl, tree ctype)
2344 if (TREE_CODE (decl) == TEMPLATE_DECL)
2345 /* In [temp.mem] we have:
2347 A specialization of a member function template does not
2348 override a virtual function from a base class. */
2350 if ((DECL_DESTRUCTOR_P (decl)
2351 || IDENTIFIER_VIRTUAL_P (DECL_NAME (decl))
2352 || DECL_CONV_FN_P (decl))
2353 && look_for_overrides (ctype, decl)
2354 && !DECL_STATIC_FUNCTION_P (decl))
2355 /* Set DECL_VINDEX to a value that is neither an INTEGER_CST nor
2356 the error_mark_node so that we know it is an overriding
2358 DECL_VINDEX (decl) = decl;
2360 if (DECL_VIRTUAL_P (decl))
2362 if (!DECL_VINDEX (decl))
2363 DECL_VINDEX (decl) = error_mark_node;
2364 IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)) = 1;
2368 /* Warn about hidden virtual functions that are not overridden in t.
2369 We know that constructors and destructors don't apply. */
2372 warn_hidden (tree t)
2374 VEC(tree) *method_vec = CLASSTYPE_METHOD_VEC (t);
2378 /* We go through each separately named virtual function. */
2379 for (i = CLASSTYPE_FIRST_CONVERSION_SLOT;
2380 (fns = VEC_iterate (tree, method_vec, i));
2389 /* All functions in this slot in the CLASSTYPE_METHOD_VEC will
2390 have the same name. Figure out what name that is. */
2391 name = DECL_NAME (OVL_CURRENT (fns));
2392 /* There are no possibly hidden functions yet. */
2393 base_fndecls = NULL_TREE;
2394 /* Iterate through all of the base classes looking for possibly
2395 hidden functions. */
2396 for (j = 0; j < BINFO_N_BASE_BINFOS (TYPE_BINFO (t)); j++)
2398 tree basetype = BINFO_TYPE (BINFO_BASE_BINFO (TYPE_BINFO (t), j));
2399 base_fndecls = chainon (get_basefndecls (name, basetype),
2403 /* If there are no functions to hide, continue. */
2407 /* Remove any overridden functions. */
2408 for (fn = fns; fn; fn = OVL_NEXT (fn))
2410 fndecl = OVL_CURRENT (fn);
2411 if (DECL_VINDEX (fndecl))
2413 tree *prev = &base_fndecls;
2416 /* If the method from the base class has the same
2417 signature as the method from the derived class, it
2418 has been overridden. */
2419 if (same_signature_p (fndecl, TREE_VALUE (*prev)))
2420 *prev = TREE_CHAIN (*prev);
2422 prev = &TREE_CHAIN (*prev);
2426 /* Now give a warning for all base functions without overriders,
2427 as they are hidden. */
2428 while (base_fndecls)
2430 /* Here we know it is a hider, and no overrider exists. */
2431 cp_warning_at ("`%D' was hidden", TREE_VALUE (base_fndecls));
2432 cp_warning_at (" by `%D'", fns);
2433 base_fndecls = TREE_CHAIN (base_fndecls);
2438 /* Check for things that are invalid. There are probably plenty of other
2439 things we should check for also. */
2442 finish_struct_anon (tree t)
2446 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
2448 if (TREE_STATIC (field))
2450 if (TREE_CODE (field) != FIELD_DECL)
2453 if (DECL_NAME (field) == NULL_TREE
2454 && ANON_AGGR_TYPE_P (TREE_TYPE (field)))
2456 tree elt = TYPE_FIELDS (TREE_TYPE (field));
2457 for (; elt; elt = TREE_CHAIN (elt))
2459 /* We're generally only interested in entities the user
2460 declared, but we also find nested classes by noticing
2461 the TYPE_DECL that we create implicitly. You're
2462 allowed to put one anonymous union inside another,
2463 though, so we explicitly tolerate that. We use
2464 TYPE_ANONYMOUS_P rather than ANON_AGGR_TYPE_P so that
2465 we also allow unnamed types used for defining fields. */
2466 if (DECL_ARTIFICIAL (elt)
2467 && (!DECL_IMPLICIT_TYPEDEF_P (elt)
2468 || TYPE_ANONYMOUS_P (TREE_TYPE (elt))))
2471 if (TREE_CODE (elt) != FIELD_DECL)
2473 cp_pedwarn_at ("`%#D' invalid; an anonymous union can only have non-static data members",
2478 if (TREE_PRIVATE (elt))
2479 cp_pedwarn_at ("private member `%#D' in anonymous union",
2481 else if (TREE_PROTECTED (elt))
2482 cp_pedwarn_at ("protected member `%#D' in anonymous union",
2485 TREE_PRIVATE (elt) = TREE_PRIVATE (field);
2486 TREE_PROTECTED (elt) = TREE_PROTECTED (field);
2492 /* Add T to CLASSTYPE_DECL_LIST of current_class_type which
2493 will be used later during class template instantiation.
2494 When FRIEND_P is zero, T can be a static member data (VAR_DECL),
2495 a non-static member data (FIELD_DECL), a member function
2496 (FUNCTION_DECL), a nested type (RECORD_TYPE, ENUM_TYPE),
2497 a typedef (TYPE_DECL) or a member class template (TEMPLATE_DECL)
2498 When FRIEND_P is nonzero, T is either a friend class
2499 (RECORD_TYPE, TEMPLATE_DECL) or a friend function
2500 (FUNCTION_DECL, TEMPLATE_DECL). */
2503 maybe_add_class_template_decl_list (tree type, tree t, int friend_p)
2505 /* Save some memory by not creating TREE_LIST if TYPE is not template. */
2506 if (CLASSTYPE_TEMPLATE_INFO (type))
2507 CLASSTYPE_DECL_LIST (type)
2508 = tree_cons (friend_p ? NULL_TREE : type,
2509 t, CLASSTYPE_DECL_LIST (type));
2512 /* Create default constructors, assignment operators, and so forth for
2513 the type indicated by T, if they are needed.
2514 CANT_HAVE_DEFAULT_CTOR, CANT_HAVE_CONST_CTOR, and
2515 CANT_HAVE_CONST_ASSIGNMENT are nonzero if, for whatever reason, the
2516 class cannot have a default constructor, copy constructor taking a
2517 const reference argument, or an assignment operator taking a const
2518 reference, respectively. If a virtual destructor is created, its
2519 DECL is returned; otherwise the return value is NULL_TREE. */
2522 add_implicitly_declared_members (tree t,
2523 int cant_have_default_ctor,
2524 int cant_have_const_cctor,
2525 int cant_have_const_assignment)
2528 tree implicit_fns = NULL_TREE;
2529 tree virtual_dtor = NULL_TREE;
2533 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t) && !TYPE_HAS_DESTRUCTOR (t))
2535 default_fn = implicitly_declare_fn (sfk_destructor, t, /*const_p=*/0);
2536 check_for_override (default_fn, t);
2538 /* If we couldn't make it work, then pretend we didn't need it. */
2539 if (default_fn == void_type_node)
2540 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t) = 0;
2543 TREE_CHAIN (default_fn) = implicit_fns;
2544 implicit_fns = default_fn;
2546 if (DECL_VINDEX (default_fn))
2547 virtual_dtor = default_fn;
2551 /* Any non-implicit destructor is non-trivial. */
2552 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t) |= TYPE_HAS_DESTRUCTOR (t);
2554 /* Default constructor. */
2555 if (! TYPE_HAS_CONSTRUCTOR (t) && ! cant_have_default_ctor)
2557 default_fn = implicitly_declare_fn (sfk_constructor, t, /*const_p=*/0);
2558 TREE_CHAIN (default_fn) = implicit_fns;
2559 implicit_fns = default_fn;
2562 /* Copy constructor. */
2563 if (! TYPE_HAS_INIT_REF (t) && ! TYPE_FOR_JAVA (t))
2565 /* ARM 12.18: You get either X(X&) or X(const X&), but
2568 = implicitly_declare_fn (sfk_copy_constructor, t,
2569 /*const_p=*/!cant_have_const_cctor);
2570 TREE_CHAIN (default_fn) = implicit_fns;
2571 implicit_fns = default_fn;
2574 /* If there is no assignment operator, one will be created if and
2575 when it is needed. For now, just record whether or not the type
2576 of the parameter to the assignment operator will be a const or
2577 non-const reference. */
2578 if (!TYPE_HAS_ASSIGN_REF (t) && !TYPE_FOR_JAVA (t))
2579 TYPE_HAS_CONST_ASSIGN_REF (t) = !cant_have_const_assignment;
2581 /* Now, hook all of the new functions on to TYPE_METHODS,
2582 and add them to the CLASSTYPE_METHOD_VEC. */
2583 for (f = &implicit_fns; *f; f = &TREE_CHAIN (*f))
2586 maybe_add_class_template_decl_list (current_class_type, *f, /*friend_p=*/0);
2588 if (abi_version_at_least (2))
2589 /* G++ 3.2 put the implicit destructor at the *beginning* of the
2590 list, which cause the destructor to be emitted in an incorrect
2591 location in the vtable. */
2592 TYPE_METHODS (t) = chainon (TYPE_METHODS (t), implicit_fns);
2595 if (warn_abi && virtual_dtor)
2596 warning ("vtable layout for class `%T' may not be ABI-compliant "
2597 "and may change in a future version of GCC due to implicit "
2598 "virtual destructor",
2600 *f = TYPE_METHODS (t);
2601 TYPE_METHODS (t) = implicit_fns;
2605 /* Subroutine of finish_struct_1. Recursively count the number of fields
2606 in TYPE, including anonymous union members. */
2609 count_fields (tree fields)
2613 for (x = fields; x; x = TREE_CHAIN (x))
2615 if (TREE_CODE (x) == FIELD_DECL && ANON_AGGR_TYPE_P (TREE_TYPE (x)))
2616 n_fields += count_fields (TYPE_FIELDS (TREE_TYPE (x)));
2623 /* Subroutine of finish_struct_1. Recursively add all the fields in the
2624 TREE_LIST FIELDS to the SORTED_FIELDS_TYPE elts, starting at offset IDX. */
2627 add_fields_to_record_type (tree fields, struct sorted_fields_type *field_vec, int idx)
2630 for (x = fields; x; x = TREE_CHAIN (x))
2632 if (TREE_CODE (x) == FIELD_DECL && ANON_AGGR_TYPE_P (TREE_TYPE (x)))
2633 idx = add_fields_to_record_type (TYPE_FIELDS (TREE_TYPE (x)), field_vec, idx);
2635 field_vec->elts[idx++] = x;
2640 /* FIELD is a bit-field. We are finishing the processing for its
2641 enclosing type. Issue any appropriate messages and set appropriate
2645 check_bitfield_decl (tree field)
2647 tree type = TREE_TYPE (field);
2650 /* Detect invalid bit-field type. */
2651 if (DECL_INITIAL (field)
2652 && ! INTEGRAL_TYPE_P (TREE_TYPE (field)))
2654 cp_error_at ("bit-field `%#D' with non-integral type", field);
2655 w = error_mark_node;
2658 /* Detect and ignore out of range field width. */
2659 if (DECL_INITIAL (field))
2661 w = DECL_INITIAL (field);
2663 /* Avoid the non_lvalue wrapper added by fold for PLUS_EXPRs. */
2666 /* detect invalid field size. */
2667 if (TREE_CODE (w) == CONST_DECL)
2668 w = DECL_INITIAL (w);
2670 w = decl_constant_value (w);
2672 if (TREE_CODE (w) != INTEGER_CST)
2674 cp_error_at ("bit-field `%D' width not an integer constant",
2676 w = error_mark_node;
2678 else if (tree_int_cst_sgn (w) < 0)
2680 cp_error_at ("negative width in bit-field `%D'", field);
2681 w = error_mark_node;
2683 else if (integer_zerop (w) && DECL_NAME (field) != 0)
2685 cp_error_at ("zero width for bit-field `%D'", field);
2686 w = error_mark_node;
2688 else if (compare_tree_int (w, TYPE_PRECISION (type)) > 0
2689 && TREE_CODE (type) != ENUMERAL_TYPE
2690 && TREE_CODE (type) != BOOLEAN_TYPE)
2691 cp_warning_at ("width of `%D' exceeds its type", field);
2692 else if (TREE_CODE (type) == ENUMERAL_TYPE
2693 && (0 > compare_tree_int (w,
2694 min_precision (TYPE_MIN_VALUE (type),
2695 TYPE_UNSIGNED (type)))
2696 || 0 > compare_tree_int (w,
2698 (TYPE_MAX_VALUE (type),
2699 TYPE_UNSIGNED (type)))))
2700 cp_warning_at ("`%D' is too small to hold all values of `%#T'",
2704 /* Remove the bit-field width indicator so that the rest of the
2705 compiler does not treat that value as an initializer. */
2706 DECL_INITIAL (field) = NULL_TREE;
2708 if (w != error_mark_node)
2710 DECL_SIZE (field) = convert (bitsizetype, w);
2711 DECL_BIT_FIELD (field) = 1;
2715 /* Non-bit-fields are aligned for their type. */
2716 DECL_BIT_FIELD (field) = 0;
2717 CLEAR_DECL_C_BIT_FIELD (field);
2721 /* FIELD is a non bit-field. We are finishing the processing for its
2722 enclosing type T. Issue any appropriate messages and set appropriate
2726 check_field_decl (tree field,
2728 int* cant_have_const_ctor,
2729 int* cant_have_default_ctor,
2730 int* no_const_asn_ref,
2731 int* any_default_members)
2733 tree type = strip_array_types (TREE_TYPE (field));
2735 /* An anonymous union cannot contain any fields which would change
2736 the settings of CANT_HAVE_CONST_CTOR and friends. */
2737 if (ANON_UNION_TYPE_P (type))
2739 /* And, we don't set TYPE_HAS_CONST_INIT_REF, etc., for anonymous
2740 structs. So, we recurse through their fields here. */
2741 else if (ANON_AGGR_TYPE_P (type))
2745 for (fields = TYPE_FIELDS (type); fields; fields = TREE_CHAIN (fields))
2746 if (TREE_CODE (fields) == FIELD_DECL && !DECL_C_BIT_FIELD (field))
2747 check_field_decl (fields, t, cant_have_const_ctor,
2748 cant_have_default_ctor, no_const_asn_ref,
2749 any_default_members);
2751 /* Check members with class type for constructors, destructors,
2753 else if (CLASS_TYPE_P (type))
2755 /* Never let anything with uninheritable virtuals
2756 make it through without complaint. */
2757 abstract_virtuals_error (field, type);
2759 if (TREE_CODE (t) == UNION_TYPE)
2761 if (TYPE_NEEDS_CONSTRUCTING (type))
2762 cp_error_at ("member `%#D' with constructor not allowed in union",
2764 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
2765 cp_error_at ("member `%#D' with destructor not allowed in union",
2767 if (TYPE_HAS_COMPLEX_ASSIGN_REF (type))
2768 cp_error_at ("member `%#D' with copy assignment operator not allowed in union",
2773 TYPE_NEEDS_CONSTRUCTING (t) |= TYPE_NEEDS_CONSTRUCTING (type);
2774 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
2775 |= TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type);
2776 TYPE_HAS_COMPLEX_ASSIGN_REF (t) |= TYPE_HAS_COMPLEX_ASSIGN_REF (type);
2777 TYPE_HAS_COMPLEX_INIT_REF (t) |= TYPE_HAS_COMPLEX_INIT_REF (type);
2780 if (!TYPE_HAS_CONST_INIT_REF (type))
2781 *cant_have_const_ctor = 1;
2783 if (!TYPE_HAS_CONST_ASSIGN_REF (type))
2784 *no_const_asn_ref = 1;
2786 if (TYPE_HAS_CONSTRUCTOR (type)
2787 && ! TYPE_HAS_DEFAULT_CONSTRUCTOR (type))
2788 *cant_have_default_ctor = 1;
2790 if (DECL_INITIAL (field) != NULL_TREE)
2792 /* `build_class_init_list' does not recognize
2794 if (TREE_CODE (t) == UNION_TYPE && any_default_members != 0)
2795 error ("multiple fields in union `%T' initialized", t);
2796 *any_default_members = 1;
2800 /* Check the data members (both static and non-static), class-scoped
2801 typedefs, etc., appearing in the declaration of T. Issue
2802 appropriate diagnostics. Sets ACCESS_DECLS to a list (in
2803 declaration order) of access declarations; each TREE_VALUE in this
2804 list is a USING_DECL.
2806 In addition, set the following flags:
2809 The class is empty, i.e., contains no non-static data members.
2811 CANT_HAVE_DEFAULT_CTOR_P
2812 This class cannot have an implicitly generated default
2815 CANT_HAVE_CONST_CTOR_P
2816 This class cannot have an implicitly generated copy constructor
2817 taking a const reference.
2819 CANT_HAVE_CONST_ASN_REF
2820 This class cannot have an implicitly generated assignment
2821 operator taking a const reference.
2823 All of these flags should be initialized before calling this
2826 Returns a pointer to the end of the TYPE_FIELDs chain; additional
2827 fields can be added by adding to this chain. */
2830 check_field_decls (tree t, tree *access_decls,
2831 int *cant_have_default_ctor_p,
2832 int *cant_have_const_ctor_p,
2833 int *no_const_asn_ref_p)
2838 int any_default_members;
2840 /* Assume there are no access declarations. */
2841 *access_decls = NULL_TREE;
2842 /* Assume this class has no pointer members. */
2843 has_pointers = false;
2844 /* Assume none of the members of this class have default
2846 any_default_members = 0;
2848 for (field = &TYPE_FIELDS (t); *field; field = next)
2851 tree type = TREE_TYPE (x);
2853 next = &TREE_CHAIN (x);
2855 if (TREE_CODE (x) == FIELD_DECL)
2857 if (TYPE_PACKED (t))
2859 if (!pod_type_p (TREE_TYPE (x)) && !TYPE_PACKED (TREE_TYPE (x)))
2861 ("ignoring packed attribute on unpacked non-POD field `%#D'",
2864 DECL_PACKED (x) = 1;
2867 if (DECL_C_BIT_FIELD (x) && integer_zerop (DECL_INITIAL (x)))
2868 /* We don't treat zero-width bitfields as making a class
2875 /* The class is non-empty. */
2876 CLASSTYPE_EMPTY_P (t) = 0;
2877 /* The class is not even nearly empty. */
2878 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
2879 /* If one of the data members contains an empty class,
2881 element_type = strip_array_types (type);
2882 if (CLASS_TYPE_P (element_type)
2883 && CLASSTYPE_CONTAINS_EMPTY_CLASS_P (element_type))
2884 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) = 1;
2888 if (TREE_CODE (x) == USING_DECL)
2890 /* Prune the access declaration from the list of fields. */
2891 *field = TREE_CHAIN (x);
2893 /* Save the access declarations for our caller. */
2894 *access_decls = tree_cons (NULL_TREE, x, *access_decls);
2896 /* Since we've reset *FIELD there's no reason to skip to the
2902 if (TREE_CODE (x) == TYPE_DECL
2903 || TREE_CODE (x) == TEMPLATE_DECL)
2906 /* If we've gotten this far, it's a data member, possibly static,
2907 or an enumerator. */
2908 DECL_CONTEXT (x) = t;
2910 /* When this goes into scope, it will be a non-local reference. */
2911 DECL_NONLOCAL (x) = 1;
2913 if (TREE_CODE (t) == UNION_TYPE)
2917 If a union contains a static data member, or a member of
2918 reference type, the program is ill-formed. */
2919 if (TREE_CODE (x) == VAR_DECL)
2921 cp_error_at ("`%D' may not be static because it is a member of a union", x);
2924 if (TREE_CODE (type) == REFERENCE_TYPE)
2926 cp_error_at ("`%D' may not have reference type `%T' because it is a member of a union",
2932 /* ``A local class cannot have static data members.'' ARM 9.4 */
2933 if (current_function_decl && TREE_STATIC (x))
2934 cp_error_at ("field `%D' in local class cannot be static", x);
2936 /* Perform error checking that did not get done in
2938 if (TREE_CODE (type) == FUNCTION_TYPE)
2940 cp_error_at ("field `%D' invalidly declared function type",
2942 type = build_pointer_type (type);
2943 TREE_TYPE (x) = type;
2945 else if (TREE_CODE (type) == METHOD_TYPE)
2947 cp_error_at ("field `%D' invalidly declared method type", x);
2948 type = build_pointer_type (type);
2949 TREE_TYPE (x) = type;
2952 if (type == error_mark_node)
2955 if (TREE_CODE (x) == CONST_DECL || TREE_CODE (x) == VAR_DECL)
2958 /* Now it can only be a FIELD_DECL. */
2960 if (TREE_PRIVATE (x) || TREE_PROTECTED (x))
2961 CLASSTYPE_NON_AGGREGATE (t) = 1;
2963 /* If this is of reference type, check if it needs an init.
2964 Also do a little ANSI jig if necessary. */
2965 if (TREE_CODE (type) == REFERENCE_TYPE)
2967 CLASSTYPE_NON_POD_P (t) = 1;
2968 if (DECL_INITIAL (x) == NULL_TREE)
2969 SET_CLASSTYPE_REF_FIELDS_NEED_INIT (t, 1);
2971 /* ARM $12.6.2: [A member initializer list] (or, for an
2972 aggregate, initialization by a brace-enclosed list) is the
2973 only way to initialize nonstatic const and reference
2975 *cant_have_default_ctor_p = 1;
2976 TYPE_HAS_COMPLEX_ASSIGN_REF (t) = 1;
2978 if (! TYPE_HAS_CONSTRUCTOR (t) && CLASSTYPE_NON_AGGREGATE (t)
2980 cp_warning_at ("non-static reference `%#D' in class without a constructor", x);
2983 type = strip_array_types (type);
2985 /* This is used by -Weffc++ (see below). Warn only for pointers
2986 to members which might hold dynamic memory. So do not warn
2987 for pointers to functions or pointers to members. */
2988 if (TYPE_PTR_P (type)
2989 && !TYPE_PTRFN_P (type)
2990 && !TYPE_PTR_TO_MEMBER_P (type))
2991 has_pointers = true;
2993 if (CLASS_TYPE_P (type))
2995 if (CLASSTYPE_REF_FIELDS_NEED_INIT (type))
2996 SET_CLASSTYPE_REF_FIELDS_NEED_INIT (t, 1);
2997 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (type))
2998 SET_CLASSTYPE_READONLY_FIELDS_NEED_INIT (t, 1);
3001 if (DECL_MUTABLE_P (x) || TYPE_HAS_MUTABLE_P (type))
3002 CLASSTYPE_HAS_MUTABLE (t) = 1;
3004 if (! pod_type_p (type))
3005 /* DR 148 now allows pointers to members (which are POD themselves),
3006 to be allowed in POD structs. */
3007 CLASSTYPE_NON_POD_P (t) = 1;
3009 if (! zero_init_p (type))
3010 CLASSTYPE_NON_ZERO_INIT_P (t) = 1;
3012 /* If any field is const, the structure type is pseudo-const. */
3013 if (CP_TYPE_CONST_P (type))
3015 C_TYPE_FIELDS_READONLY (t) = 1;
3016 if (DECL_INITIAL (x) == NULL_TREE)
3017 SET_CLASSTYPE_READONLY_FIELDS_NEED_INIT (t, 1);
3019 /* ARM $12.6.2: [A member initializer list] (or, for an
3020 aggregate, initialization by a brace-enclosed list) is the
3021 only way to initialize nonstatic const and reference
3023 *cant_have_default_ctor_p = 1;
3024 TYPE_HAS_COMPLEX_ASSIGN_REF (t) = 1;
3026 if (! TYPE_HAS_CONSTRUCTOR (t) && CLASSTYPE_NON_AGGREGATE (t)
3028 cp_warning_at ("non-static const member `%#D' in class without a constructor", x);
3030 /* A field that is pseudo-const makes the structure likewise. */
3031 else if (CLASS_TYPE_P (type))
3033 C_TYPE_FIELDS_READONLY (t) |= C_TYPE_FIELDS_READONLY (type);
3034 SET_CLASSTYPE_READONLY_FIELDS_NEED_INIT (t,
3035 CLASSTYPE_READONLY_FIELDS_NEED_INIT (t)
3036 | CLASSTYPE_READONLY_FIELDS_NEED_INIT (type));
3039 /* Core issue 80: A nonstatic data member is required to have a
3040 different name from the class iff the class has a
3041 user-defined constructor. */
3042 if (constructor_name_p (DECL_NAME (x), t) && TYPE_HAS_CONSTRUCTOR (t))
3043 cp_pedwarn_at ("field `%#D' with same name as class", x);
3045 /* We set DECL_C_BIT_FIELD in grokbitfield.
3046 If the type and width are valid, we'll also set DECL_BIT_FIELD. */
3047 if (DECL_C_BIT_FIELD (x))
3048 check_bitfield_decl (x);
3050 check_field_decl (x, t,
3051 cant_have_const_ctor_p,
3052 cant_have_default_ctor_p,
3054 &any_default_members);
3057 /* Effective C++ rule 11: if a class has dynamic memory held by pointers,
3058 it should also define a copy constructor and an assignment operator to
3059 implement the correct copy semantic (deep vs shallow, etc.). As it is
3060 not feasible to check whether the constructors do allocate dynamic memory
3061 and store it within members, we approximate the warning like this:
3063 -- Warn only if there are members which are pointers
3064 -- Warn only if there is a non-trivial constructor (otherwise,
3065 there cannot be memory allocated).
3066 -- Warn only if there is a non-trivial destructor. We assume that the
3067 user at least implemented the cleanup correctly, and a destructor
3068 is needed to free dynamic memory.
3070 This seems enough for pratical purposes. */
3073 && TYPE_HAS_CONSTRUCTOR (t)
3074 && TYPE_HAS_DESTRUCTOR (t)
3075 && !(TYPE_HAS_INIT_REF (t) && TYPE_HAS_ASSIGN_REF (t)))
3077 warning ("`%#T' has pointer data members", t);
3079 if (! TYPE_HAS_INIT_REF (t))
3081 warning (" but does not override `%T(const %T&)'", t, t);
3082 if (! TYPE_HAS_ASSIGN_REF (t))
3083 warning (" or `operator=(const %T&)'", t);
3085 else if (! TYPE_HAS_ASSIGN_REF (t))
3086 warning (" but does not override `operator=(const %T&)'", t);
3090 /* Check anonymous struct/anonymous union fields. */
3091 finish_struct_anon (t);
3093 /* We've built up the list of access declarations in reverse order.
3095 *access_decls = nreverse (*access_decls);
3098 /* If TYPE is an empty class type, records its OFFSET in the table of
3102 record_subobject_offset (tree type, tree offset, splay_tree offsets)
3106 if (!is_empty_class (type))
3109 /* Record the location of this empty object in OFFSETS. */
3110 n = splay_tree_lookup (offsets, (splay_tree_key) offset);
3112 n = splay_tree_insert (offsets,
3113 (splay_tree_key) offset,
3114 (splay_tree_value) NULL_TREE);
3115 n->value = ((splay_tree_value)
3116 tree_cons (NULL_TREE,
3123 /* Returns nonzero if TYPE is an empty class type and there is
3124 already an entry in OFFSETS for the same TYPE as the same OFFSET. */
3127 check_subobject_offset (tree type, tree offset, splay_tree offsets)
3132 if (!is_empty_class (type))
3135 /* Record the location of this empty object in OFFSETS. */
3136 n = splay_tree_lookup (offsets, (splay_tree_key) offset);
3140 for (t = (tree) n->value; t; t = TREE_CHAIN (t))
3141 if (same_type_p (TREE_VALUE (t), type))
3147 /* Walk through all the subobjects of TYPE (located at OFFSET). Call
3148 F for every subobject, passing it the type, offset, and table of
3149 OFFSETS. If VBASES_P is one, then virtual non-primary bases should
3152 If MAX_OFFSET is non-NULL, then subobjects with an offset greater
3153 than MAX_OFFSET will not be walked.
3155 If F returns a nonzero value, the traversal ceases, and that value
3156 is returned. Otherwise, returns zero. */
3159 walk_subobject_offsets (tree type,
3160 subobject_offset_fn f,
3167 tree type_binfo = NULL_TREE;
3169 /* If this OFFSET is bigger than the MAX_OFFSET, then we should
3171 if (max_offset && INT_CST_LT (max_offset, offset))
3176 if (abi_version_at_least (2))
3178 type = BINFO_TYPE (type);
3181 if (CLASS_TYPE_P (type))
3187 /* Avoid recursing into objects that are not interesting. */
3188 if (!CLASSTYPE_CONTAINS_EMPTY_CLASS_P (type))
3191 /* Record the location of TYPE. */
3192 r = (*f) (type, offset, offsets);
3196 /* Iterate through the direct base classes of TYPE. */
3198 type_binfo = TYPE_BINFO (type);
3199 for (i = 0; i < BINFO_N_BASE_BINFOS (type_binfo); ++i)
3203 binfo = BINFO_BASE_BINFO (type_binfo, i);
3205 if (abi_version_at_least (2)
3206 && BINFO_VIRTUAL_P (binfo))
3210 && BINFO_VIRTUAL_P (binfo)
3211 && !BINFO_PRIMARY_P (binfo))
3214 if (!abi_version_at_least (2))
3215 binfo_offset = size_binop (PLUS_EXPR,
3217 BINFO_OFFSET (binfo));
3221 /* We cannot rely on BINFO_OFFSET being set for the base
3222 class yet, but the offsets for direct non-virtual
3223 bases can be calculated by going back to the TYPE. */
3224 orig_binfo = BINFO_BASE_BINFO (TYPE_BINFO (type), i);
3225 binfo_offset = size_binop (PLUS_EXPR,
3227 BINFO_OFFSET (orig_binfo));
3230 r = walk_subobject_offsets (binfo,
3235 (abi_version_at_least (2)
3236 ? /*vbases_p=*/0 : vbases_p));
3241 if (abi_version_at_least (2) && CLASSTYPE_VBASECLASSES (type))
3245 /* Iterate through the virtual base classes of TYPE. In G++
3246 3.2, we included virtual bases in the direct base class
3247 loop above, which results in incorrect results; the
3248 correct offsets for virtual bases are only known when
3249 working with the most derived type. */
3251 for (ix = 0; (binfo = VEC_iterate
3252 (tree, CLASSTYPE_VBASECLASSES (type), ix)); ix++)
3254 r = walk_subobject_offsets (binfo,
3256 size_binop (PLUS_EXPR,
3258 BINFO_OFFSET (binfo)),
3267 /* We still have to walk the primary base, if it is
3268 virtual. (If it is non-virtual, then it was walked
3270 tree vbase = get_primary_binfo (type_binfo);
3272 if (vbase && BINFO_VIRTUAL_P (vbase)
3273 && BINFO_PRIMARY_BASE_OF (vbase) == type_binfo)
3275 r = (walk_subobject_offsets
3277 offsets, max_offset, /*vbases_p=*/0));
3284 /* Iterate through the fields of TYPE. */
3285 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
3286 if (TREE_CODE (field) == FIELD_DECL && !DECL_ARTIFICIAL (field))
3290 if (abi_version_at_least (2))
3291 field_offset = byte_position (field);
3293 /* In G++ 3.2, DECL_FIELD_OFFSET was used. */
3294 field_offset = DECL_FIELD_OFFSET (field);
3296 r = walk_subobject_offsets (TREE_TYPE (field),
3298 size_binop (PLUS_EXPR,
3308 else if (TREE_CODE (type) == ARRAY_TYPE)
3310 tree element_type = strip_array_types (type);
3311 tree domain = TYPE_DOMAIN (type);
3314 /* Avoid recursing into objects that are not interesting. */
3315 if (!CLASS_TYPE_P (element_type)
3316 || !CLASSTYPE_CONTAINS_EMPTY_CLASS_P (element_type))
3319 /* Step through each of the elements in the array. */
3320 for (index = size_zero_node;
3321 /* G++ 3.2 had an off-by-one error here. */
3322 (abi_version_at_least (2)
3323 ? !INT_CST_LT (TYPE_MAX_VALUE (domain), index)
3324 : INT_CST_LT (index, TYPE_MAX_VALUE (domain)));
3325 index = size_binop (PLUS_EXPR, index, size_one_node))
3327 r = walk_subobject_offsets (TREE_TYPE (type),
3335 offset = size_binop (PLUS_EXPR, offset,
3336 TYPE_SIZE_UNIT (TREE_TYPE (type)));
3337 /* If this new OFFSET is bigger than the MAX_OFFSET, then
3338 there's no point in iterating through the remaining
3339 elements of the array. */
3340 if (max_offset && INT_CST_LT (max_offset, offset))
3348 /* Record all of the empty subobjects of TYPE (located at OFFSET) in
3349 OFFSETS. If VBASES_P is nonzero, virtual bases of TYPE are
3353 record_subobject_offsets (tree type,
3358 walk_subobject_offsets (type, record_subobject_offset, offset,
3359 offsets, /*max_offset=*/NULL_TREE, vbases_p);
3362 /* Returns nonzero if any of the empty subobjects of TYPE (located at
3363 OFFSET) conflict with entries in OFFSETS. If VBASES_P is nonzero,
3364 virtual bases of TYPE are examined. */
3367 layout_conflict_p (tree type,
3372 splay_tree_node max_node;
3374 /* Get the node in OFFSETS that indicates the maximum offset where
3375 an empty subobject is located. */
3376 max_node = splay_tree_max (offsets);
3377 /* If there aren't any empty subobjects, then there's no point in
3378 performing this check. */
3382 return walk_subobject_offsets (type, check_subobject_offset, offset,
3383 offsets, (tree) (max_node->key),
3387 /* DECL is a FIELD_DECL corresponding either to a base subobject of a
3388 non-static data member of the type indicated by RLI. BINFO is the
3389 binfo corresponding to the base subobject, OFFSETS maps offsets to
3390 types already located at those offsets. This function determines
3391 the position of the DECL. */
3394 layout_nonempty_base_or_field (record_layout_info rli,
3399 tree offset = NULL_TREE;
3405 /* For the purposes of determining layout conflicts, we want to
3406 use the class type of BINFO; TREE_TYPE (DECL) will be the
3407 CLASSTYPE_AS_BASE version, which does not contain entries for
3408 zero-sized bases. */
3409 type = TREE_TYPE (binfo);
3414 type = TREE_TYPE (decl);
3418 /* Try to place the field. It may take more than one try if we have
3419 a hard time placing the field without putting two objects of the
3420 same type at the same address. */
3423 struct record_layout_info_s old_rli = *rli;
3425 /* Place this field. */
3426 place_field (rli, decl);
3427 offset = byte_position (decl);
3429 /* We have to check to see whether or not there is already
3430 something of the same type at the offset we're about to use.
3431 For example, consider:
3434 struct T : public S { int i; };
3435 struct U : public S, public T {};
3437 Here, we put S at offset zero in U. Then, we can't put T at
3438 offset zero -- its S component would be at the same address
3439 as the S we already allocated. So, we have to skip ahead.
3440 Since all data members, including those whose type is an
3441 empty class, have nonzero size, any overlap can happen only
3442 with a direct or indirect base-class -- it can't happen with
3444 /* In a union, overlap is permitted; all members are placed at
3446 if (TREE_CODE (rli->t) == UNION_TYPE)
3448 /* G++ 3.2 did not check for overlaps when placing a non-empty
3450 if (!abi_version_at_least (2) && binfo && BINFO_VIRTUAL_P (binfo))
3452 if (layout_conflict_p (field_p ? type : binfo, offset,
3455 /* Strip off the size allocated to this field. That puts us
3456 at the first place we could have put the field with
3457 proper alignment. */
3460 /* Bump up by the alignment required for the type. */
3462 = size_binop (PLUS_EXPR, rli->bitpos,
3464 ? CLASSTYPE_ALIGN (type)
3465 : TYPE_ALIGN (type)));
3466 normalize_rli (rli);
3469 /* There was no conflict. We're done laying out this field. */
3473 /* Now that we know where it will be placed, update its
3475 if (binfo && CLASS_TYPE_P (BINFO_TYPE (binfo)))
3476 /* Indirect virtual bases may have a nonzero BINFO_OFFSET at
3477 this point because their BINFO_OFFSET is copied from another
3478 hierarchy. Therefore, we may not need to add the entire
3480 propagate_binfo_offsets (binfo,
3481 size_diffop (convert (ssizetype, offset),
3483 BINFO_OFFSET (binfo))));
3486 /* Returns true if TYPE is empty and OFFSET is nonzero. */
3489 empty_base_at_nonzero_offset_p (tree type,
3491 splay_tree offsets ATTRIBUTE_UNUSED)
3493 return is_empty_class (type) && !integer_zerop (offset);
3496 /* Layout the empty base BINFO. EOC indicates the byte currently just
3497 past the end of the class, and should be correctly aligned for a
3498 class of the type indicated by BINFO; OFFSETS gives the offsets of
3499 the empty bases allocated so far. T is the most derived
3500 type. Return nonzero iff we added it at the end. */
3503 layout_empty_base (tree binfo, tree eoc, splay_tree offsets)
3506 tree basetype = BINFO_TYPE (binfo);
3509 /* This routine should only be used for empty classes. */
3510 my_friendly_assert (is_empty_class (basetype), 20000321);
3511 alignment = ssize_int (CLASSTYPE_ALIGN_UNIT (basetype));
3513 if (!integer_zerop (BINFO_OFFSET (binfo)))
3515 if (abi_version_at_least (2))
3516 propagate_binfo_offsets
3517 (binfo, size_diffop (size_zero_node, BINFO_OFFSET (binfo)));
3519 warning ("offset of empty base `%T' may not be ABI-compliant and may"
3520 "change in a future version of GCC",
3521 BINFO_TYPE (binfo));
3524 /* This is an empty base class. We first try to put it at offset
3526 if (layout_conflict_p (binfo,
3527 BINFO_OFFSET (binfo),
3531 /* That didn't work. Now, we move forward from the next
3532 available spot in the class. */
3534 propagate_binfo_offsets (binfo, convert (ssizetype, eoc));
3537 if (!layout_conflict_p (binfo,
3538 BINFO_OFFSET (binfo),
3541 /* We finally found a spot where there's no overlap. */
3544 /* There's overlap here, too. Bump along to the next spot. */
3545 propagate_binfo_offsets (binfo, alignment);
3551 /* Layout the the base given by BINFO in the class indicated by RLI.
3552 *BASE_ALIGN is a running maximum of the alignments of
3553 any base class. OFFSETS gives the location of empty base
3554 subobjects. T is the most derived type. Return nonzero if the new
3555 object cannot be nearly-empty. A new FIELD_DECL is inserted at
3556 *NEXT_FIELD, unless BINFO is for an empty base class.
3558 Returns the location at which the next field should be inserted. */
3561 build_base_field (record_layout_info rli, tree binfo,
3562 splay_tree offsets, tree *next_field)
3565 tree basetype = BINFO_TYPE (binfo);
3567 if (!COMPLETE_TYPE_P (basetype))
3568 /* This error is now reported in xref_tag, thus giving better
3569 location information. */
3572 /* Place the base class. */
3573 if (!is_empty_class (basetype))
3577 /* The containing class is non-empty because it has a non-empty
3579 CLASSTYPE_EMPTY_P (t) = 0;
3581 /* Create the FIELD_DECL. */
3582 decl = build_decl (FIELD_DECL, NULL_TREE, CLASSTYPE_AS_BASE (basetype));
3583 DECL_ARTIFICIAL (decl) = 1;
3584 DECL_FIELD_CONTEXT (decl) = t;
3585 DECL_SIZE (decl) = CLASSTYPE_SIZE (basetype);
3586 DECL_SIZE_UNIT (decl) = CLASSTYPE_SIZE_UNIT (basetype);
3587 DECL_ALIGN (decl) = CLASSTYPE_ALIGN (basetype);
3588 DECL_USER_ALIGN (decl) = CLASSTYPE_USER_ALIGN (basetype);
3589 DECL_IGNORED_P (decl) = 1;
3591 /* Try to place the field. It may take more than one try if we
3592 have a hard time placing the field without putting two
3593 objects of the same type at the same address. */
3594 layout_nonempty_base_or_field (rli, decl, binfo, offsets);
3595 /* Add the new FIELD_DECL to the list of fields for T. */
3596 TREE_CHAIN (decl) = *next_field;
3598 next_field = &TREE_CHAIN (decl);
3605 /* On some platforms (ARM), even empty classes will not be
3607 eoc = round_up (rli_size_unit_so_far (rli),
3608 CLASSTYPE_ALIGN_UNIT (basetype));
3609 atend = layout_empty_base (binfo, eoc, offsets);
3610 /* A nearly-empty class "has no proper base class that is empty,
3611 not morally virtual, and at an offset other than zero." */
3612 if (!BINFO_VIRTUAL_P (binfo) && CLASSTYPE_NEARLY_EMPTY_P (t))
3615 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
3616 /* The check above (used in G++ 3.2) is insufficient because
3617 an empty class placed at offset zero might itself have an
3618 empty base at a nonzero offset. */
3619 else if (walk_subobject_offsets (basetype,
3620 empty_base_at_nonzero_offset_p,
3623 /*max_offset=*/NULL_TREE,
3626 if (abi_version_at_least (2))
3627 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
3629 warning ("class `%T' will be considered nearly empty in a "
3630 "future version of GCC", t);
3634 /* We do not create a FIELD_DECL for empty base classes because
3635 it might overlap some other field. We want to be able to
3636 create CONSTRUCTORs for the class by iterating over the
3637 FIELD_DECLs, and the back end does not handle overlapping
3640 /* An empty virtual base causes a class to be non-empty
3641 -- but in that case we do not need to clear CLASSTYPE_EMPTY_P
3642 here because that was already done when the virtual table
3643 pointer was created. */
3646 /* Record the offsets of BINFO and its base subobjects. */
3647 record_subobject_offsets (binfo,
3648 BINFO_OFFSET (binfo),
3655 /* Layout all of the non-virtual base classes. Record empty
3656 subobjects in OFFSETS. T is the most derived type. Return nonzero
3657 if the type cannot be nearly empty. The fields created
3658 corresponding to the base classes will be inserted at
3662 build_base_fields (record_layout_info rli,
3663 splay_tree offsets, tree *next_field)
3665 /* Chain to hold all the new FIELD_DECLs which stand in for base class
3668 int n_baseclasses = BINFO_N_BASE_BINFOS (TYPE_BINFO (t));
3671 /* The primary base class is always allocated first. */
3672 if (CLASSTYPE_HAS_PRIMARY_BASE_P (t))
3673 next_field = build_base_field (rli, CLASSTYPE_PRIMARY_BINFO (t),
3674 offsets, next_field);
3676 /* Now allocate the rest of the bases. */
3677 for (i = 0; i < n_baseclasses; ++i)
3681 base_binfo = BINFO_BASE_BINFO (TYPE_BINFO (t), i);
3683 /* The primary base was already allocated above, so we don't
3684 need to allocate it again here. */
3685 if (base_binfo == CLASSTYPE_PRIMARY_BINFO (t))
3688 /* Virtual bases are added at the end (a primary virtual base
3689 will have already been added). */
3690 if (BINFO_VIRTUAL_P (base_binfo))
3693 next_field = build_base_field (rli, base_binfo,
3694 offsets, next_field);
3698 /* Go through the TYPE_METHODS of T issuing any appropriate
3699 diagnostics, figuring out which methods override which other
3700 methods, and so forth. */
3703 check_methods (tree t)
3707 for (x = TYPE_METHODS (t); x; x = TREE_CHAIN (x))
3709 check_for_override (x, t);
3710 if (DECL_PURE_VIRTUAL_P (x) && ! DECL_VINDEX (x))
3711 cp_error_at ("initializer specified for non-virtual method `%D'", x);
3713 /* The name of the field is the original field name
3714 Save this in auxiliary field for later overloading. */
3715 if (DECL_VINDEX (x))
3717 TYPE_POLYMORPHIC_P (t) = 1;
3718 if (DECL_PURE_VIRTUAL_P (x))
3719 CLASSTYPE_PURE_VIRTUALS (t)
3720 = tree_cons (NULL_TREE, x, CLASSTYPE_PURE_VIRTUALS (t));
3725 /* FN is a constructor or destructor. Clone the declaration to create
3726 a specialized in-charge or not-in-charge version, as indicated by
3730 build_clone (tree fn, tree name)
3735 /* Copy the function. */
3736 clone = copy_decl (fn);
3737 /* Remember where this function came from. */
3738 DECL_CLONED_FUNCTION (clone) = fn;
3739 DECL_ABSTRACT_ORIGIN (clone) = fn;
3740 /* Reset the function name. */
3741 DECL_NAME (clone) = name;
3742 SET_DECL_ASSEMBLER_NAME (clone, NULL_TREE);
3743 /* There's no pending inline data for this function. */
3744 DECL_PENDING_INLINE_INFO (clone) = NULL;
3745 DECL_PENDING_INLINE_P (clone) = 0;
3746 /* And it hasn't yet been deferred. */
3747 DECL_DEFERRED_FN (clone) = 0;
3749 /* The base-class destructor is not virtual. */
3750 if (name == base_dtor_identifier)
3752 DECL_VIRTUAL_P (clone) = 0;
3753 if (TREE_CODE (clone) != TEMPLATE_DECL)
3754 DECL_VINDEX (clone) = NULL_TREE;
3757 /* If there was an in-charge parameter, drop it from the function
3759 if (DECL_HAS_IN_CHARGE_PARM_P (clone))
3765 exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (clone));
3766 basetype = TYPE_METHOD_BASETYPE (TREE_TYPE (clone));
3767 parmtypes = TYPE_ARG_TYPES (TREE_TYPE (clone));
3768 /* Skip the `this' parameter. */
3769 parmtypes = TREE_CHAIN (parmtypes);
3770 /* Skip the in-charge parameter. */
3771 parmtypes = TREE_CHAIN (parmtypes);
3772 /* And the VTT parm, in a complete [cd]tor. */
3773 if (DECL_HAS_VTT_PARM_P (fn)
3774 && ! DECL_NEEDS_VTT_PARM_P (clone))
3775 parmtypes = TREE_CHAIN (parmtypes);
3776 /* If this is subobject constructor or destructor, add the vtt
3779 = build_method_type_directly (basetype,
3780 TREE_TYPE (TREE_TYPE (clone)),
3783 TREE_TYPE (clone) = build_exception_variant (TREE_TYPE (clone),
3786 = cp_build_type_attribute_variant (TREE_TYPE (clone),
3787 TYPE_ATTRIBUTES (TREE_TYPE (fn)));
3790 /* Copy the function parameters. But, DECL_ARGUMENTS on a TEMPLATE_DECL
3791 aren't function parameters; those are the template parameters. */
3792 if (TREE_CODE (clone) != TEMPLATE_DECL)
3794 DECL_ARGUMENTS (clone) = copy_list (DECL_ARGUMENTS (clone));
3795 /* Remove the in-charge parameter. */
3796 if (DECL_HAS_IN_CHARGE_PARM_P (clone))
3798 TREE_CHAIN (DECL_ARGUMENTS (clone))
3799 = TREE_CHAIN (TREE_CHAIN (DECL_ARGUMENTS (clone)));
3800 DECL_HAS_IN_CHARGE_PARM_P (clone) = 0;
3802 /* And the VTT parm, in a complete [cd]tor. */
3803 if (DECL_HAS_VTT_PARM_P (fn))
3805 if (DECL_NEEDS_VTT_PARM_P (clone))
3806 DECL_HAS_VTT_PARM_P (clone) = 1;
3809 TREE_CHAIN (DECL_ARGUMENTS (clone))
3810 = TREE_CHAIN (TREE_CHAIN (DECL_ARGUMENTS (clone)));
3811 DECL_HAS_VTT_PARM_P (clone) = 0;
3815 for (parms = DECL_ARGUMENTS (clone); parms; parms = TREE_CHAIN (parms))
3817 DECL_CONTEXT (parms) = clone;
3818 cxx_dup_lang_specific_decl (parms);
3822 /* Create the RTL for this function. */
3823 SET_DECL_RTL (clone, NULL_RTX);
3824 rest_of_decl_compilation (clone, NULL, /*top_level=*/1, at_eof);
3826 /* Make it easy to find the CLONE given the FN. */
3827 TREE_CHAIN (clone) = TREE_CHAIN (fn);
3828 TREE_CHAIN (fn) = clone;
3830 /* If this is a template, handle the DECL_TEMPLATE_RESULT as well. */
3831 if (TREE_CODE (clone) == TEMPLATE_DECL)
3835 DECL_TEMPLATE_RESULT (clone)
3836 = build_clone (DECL_TEMPLATE_RESULT (clone), name);
3837 result = DECL_TEMPLATE_RESULT (clone);
3838 DECL_TEMPLATE_INFO (result) = copy_node (DECL_TEMPLATE_INFO (result));
3839 DECL_TI_TEMPLATE (result) = clone;
3845 /* Produce declarations for all appropriate clones of FN. If
3846 UPDATE_METHOD_VEC_P is nonzero, the clones are added to the
3847 CLASTYPE_METHOD_VEC as well. */
3850 clone_function_decl (tree fn, int update_method_vec_p)
3854 /* Avoid inappropriate cloning. */
3856 && DECL_CLONED_FUNCTION (TREE_CHAIN (fn)))
3859 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (fn))
3861 /* For each constructor, we need two variants: an in-charge version
3862 and a not-in-charge version. */
3863 clone = build_clone (fn, complete_ctor_identifier);
3864 if (update_method_vec_p)
3865 add_method (DECL_CONTEXT (clone), clone);
3866 clone = build_clone (fn, base_ctor_identifier);
3867 if (update_method_vec_p)
3868 add_method (DECL_CONTEXT (clone), clone);
3872 my_friendly_assert (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (fn), 20000411);
3874 /* For each destructor, we need three variants: an in-charge
3875 version, a not-in-charge version, and an in-charge deleting
3876 version. We clone the deleting version first because that
3877 means it will go second on the TYPE_METHODS list -- and that
3878 corresponds to the correct layout order in the virtual
3881 For a non-virtual destructor, we do not build a deleting
3883 if (DECL_VIRTUAL_P (fn))
3885 clone = build_clone (fn, deleting_dtor_identifier);
3886 if (update_method_vec_p)
3887 add_method (DECL_CONTEXT (clone), clone);
3889 clone = build_clone (fn, complete_dtor_identifier);
3890 if (update_method_vec_p)
3891 add_method (DECL_CONTEXT (clone), clone);
3892 clone = build_clone (fn, base_dtor_identifier);
3893 if (update_method_vec_p)
3894 add_method (DECL_CONTEXT (clone), clone);
3897 /* Note that this is an abstract function that is never emitted. */
3898 DECL_ABSTRACT (fn) = 1;
3901 /* DECL is an in charge constructor, which is being defined. This will
3902 have had an in class declaration, from whence clones were
3903 declared. An out-of-class definition can specify additional default
3904 arguments. As it is the clones that are involved in overload
3905 resolution, we must propagate the information from the DECL to its
3909 adjust_clone_args (tree decl)
3913 for (clone = TREE_CHAIN (decl); clone && DECL_CLONED_FUNCTION (clone);
3914 clone = TREE_CHAIN (clone))
3916 tree orig_clone_parms = TYPE_ARG_TYPES (TREE_TYPE (clone));
3917 tree orig_decl_parms = TYPE_ARG_TYPES (TREE_TYPE (decl));
3918 tree decl_parms, clone_parms;
3920 clone_parms = orig_clone_parms;
3922 /* Skip the 'this' parameter. */
3923 orig_clone_parms = TREE_CHAIN (orig_clone_parms);
3924 orig_decl_parms = TREE_CHAIN (orig_decl_parms);
3926 if (DECL_HAS_IN_CHARGE_PARM_P (decl))
3927 orig_decl_parms = TREE_CHAIN (orig_decl_parms);
3928 if (DECL_HAS_VTT_PARM_P (decl))
3929 orig_decl_parms = TREE_CHAIN (orig_decl_parms);
3931 clone_parms = orig_clone_parms;
3932 if (DECL_HAS_VTT_PARM_P (clone))
3933 clone_parms = TREE_CHAIN (clone_parms);
3935 for (decl_parms = orig_decl_parms; decl_parms;
3936 decl_parms = TREE_CHAIN (decl_parms),
3937 clone_parms = TREE_CHAIN (clone_parms))
3939 my_friendly_assert (same_type_p (TREE_TYPE (decl_parms),
3940 TREE_TYPE (clone_parms)), 20010424);
3942 if (TREE_PURPOSE (decl_parms) && !TREE_PURPOSE (clone_parms))
3944 /* A default parameter has been added. Adjust the
3945 clone's parameters. */
3946 tree exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (clone));
3947 tree basetype = TYPE_METHOD_BASETYPE (TREE_TYPE (clone));
3950 clone_parms = orig_decl_parms;
3952 if (DECL_HAS_VTT_PARM_P (clone))
3954 clone_parms = tree_cons (TREE_PURPOSE (orig_clone_parms),
3955 TREE_VALUE (orig_clone_parms),
3957 TREE_TYPE (clone_parms) = TREE_TYPE (orig_clone_parms);
3959 type = build_method_type_directly (basetype,
3960 TREE_TYPE (TREE_TYPE (clone)),
3963 type = build_exception_variant (type, exceptions);
3964 TREE_TYPE (clone) = type;
3966 clone_parms = NULL_TREE;
3970 my_friendly_assert (!clone_parms, 20010424);
3974 /* For each of the constructors and destructors in T, create an
3975 in-charge and not-in-charge variant. */
3978 clone_constructors_and_destructors (tree t)
3982 /* If for some reason we don't have a CLASSTYPE_METHOD_VEC, we bail
3984 if (!CLASSTYPE_METHOD_VEC (t))
3987 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
3988 clone_function_decl (OVL_CURRENT (fns), /*update_method_vec_p=*/1);
3989 for (fns = CLASSTYPE_DESTRUCTORS (t); fns; fns = OVL_NEXT (fns))
3990 clone_function_decl (OVL_CURRENT (fns), /*update_method_vec_p=*/1);
3993 /* Remove all zero-width bit-fields from T. */
3996 remove_zero_width_bit_fields (tree t)
4000 fieldsp = &TYPE_FIELDS (t);
4003 if (TREE_CODE (*fieldsp) == FIELD_DECL
4004 && DECL_C_BIT_FIELD (*fieldsp)
4005 && DECL_INITIAL (*fieldsp))
4006 *fieldsp = TREE_CHAIN (*fieldsp);
4008 fieldsp = &TREE_CHAIN (*fieldsp);
4012 /* Returns TRUE iff we need a cookie when dynamically allocating an
4013 array whose elements have the indicated class TYPE. */
4016 type_requires_array_cookie (tree type)
4019 bool has_two_argument_delete_p = false;
4021 my_friendly_assert (CLASS_TYPE_P (type), 20010712);
4023 /* If there's a non-trivial destructor, we need a cookie. In order
4024 to iterate through the array calling the destructor for each
4025 element, we'll have to know how many elements there are. */
4026 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
4029 /* If the usual deallocation function is a two-argument whose second
4030 argument is of type `size_t', then we have to pass the size of
4031 the array to the deallocation function, so we will need to store
4033 fns = lookup_fnfields (TYPE_BINFO (type),
4034 ansi_opname (VEC_DELETE_EXPR),
4036 /* If there are no `operator []' members, or the lookup is
4037 ambiguous, then we don't need a cookie. */
4038 if (!fns || fns == error_mark_node)
4040 /* Loop through all of the functions. */
4041 for (fns = BASELINK_FUNCTIONS (fns); fns; fns = OVL_NEXT (fns))
4046 /* Select the current function. */
4047 fn = OVL_CURRENT (fns);
4048 /* See if this function is a one-argument delete function. If
4049 it is, then it will be the usual deallocation function. */
4050 second_parm = TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (fn)));
4051 if (second_parm == void_list_node)
4053 /* Otherwise, if we have a two-argument function and the second
4054 argument is `size_t', it will be the usual deallocation
4055 function -- unless there is one-argument function, too. */
4056 if (TREE_CHAIN (second_parm) == void_list_node
4057 && same_type_p (TREE_VALUE (second_parm), sizetype))
4058 has_two_argument_delete_p = true;
4061 return has_two_argument_delete_p;
4064 /* Check the validity of the bases and members declared in T. Add any
4065 implicitly-generated functions (like copy-constructors and
4066 assignment operators). Compute various flag bits (like
4067 CLASSTYPE_NON_POD_T) for T. This routine works purely at the C++
4068 level: i.e., independently of the ABI in use. */
4071 check_bases_and_members (tree t)
4073 /* Nonzero if we are not allowed to generate a default constructor
4075 int cant_have_default_ctor;
4076 /* Nonzero if the implicitly generated copy constructor should take
4077 a non-const reference argument. */
4078 int cant_have_const_ctor;
4079 /* Nonzero if the the implicitly generated assignment operator
4080 should take a non-const reference argument. */
4081 int no_const_asn_ref;
4084 /* By default, we use const reference arguments and generate default
4086 cant_have_default_ctor = 0;
4087 cant_have_const_ctor = 0;
4088 no_const_asn_ref = 0;
4090 /* Check all the base-classes. */
4091 check_bases (t, &cant_have_default_ctor, &cant_have_const_ctor,
4094 /* Check all the data member declarations. */
4095 check_field_decls (t, &access_decls,
4096 &cant_have_default_ctor,
4097 &cant_have_const_ctor,
4100 /* Check all the method declarations. */
4103 /* A nearly-empty class has to be vptr-containing; a nearly empty
4104 class contains just a vptr. */
4105 if (!TYPE_CONTAINS_VPTR_P (t))
4106 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
4108 /* Do some bookkeeping that will guide the generation of implicitly
4109 declared member functions. */
4110 TYPE_HAS_COMPLEX_INIT_REF (t)
4111 |= (TYPE_HAS_INIT_REF (t)
4112 || TYPE_USES_VIRTUAL_BASECLASSES (t)
4113 || TYPE_POLYMORPHIC_P (t));
4114 TYPE_NEEDS_CONSTRUCTING (t)
4115 |= (TYPE_HAS_CONSTRUCTOR (t)
4116 || TYPE_USES_VIRTUAL_BASECLASSES (t)
4117 || TYPE_POLYMORPHIC_P (t));
4118 CLASSTYPE_NON_AGGREGATE (t) |= (TYPE_HAS_CONSTRUCTOR (t)
4119 || TYPE_POLYMORPHIC_P (t));
4120 CLASSTYPE_NON_POD_P (t)
4121 |= (CLASSTYPE_NON_AGGREGATE (t) || TYPE_HAS_DESTRUCTOR (t)
4122 || TYPE_HAS_ASSIGN_REF (t));
4123 TYPE_HAS_COMPLEX_ASSIGN_REF (t)
4124 |= TYPE_HAS_ASSIGN_REF (t) || TYPE_CONTAINS_VPTR_P (t);
4126 /* Synthesize any needed methods. */
4127 add_implicitly_declared_members (t, cant_have_default_ctor,
4128 cant_have_const_ctor,
4131 /* Create the in-charge and not-in-charge variants of constructors
4133 clone_constructors_and_destructors (t);
4135 /* Process the using-declarations. */
4136 for (; access_decls; access_decls = TREE_CHAIN (access_decls))
4137 handle_using_decl (TREE_VALUE (access_decls), t);
4139 /* Build and sort the CLASSTYPE_METHOD_VEC. */
4140 finish_struct_methods (t);
4142 /* Figure out whether or not we will need a cookie when dynamically
4143 allocating an array of this type. */
4144 TYPE_LANG_SPECIFIC (t)->u.c.vec_new_uses_cookie
4145 = type_requires_array_cookie (t);
4148 /* If T needs a pointer to its virtual function table, set TYPE_VFIELD
4149 accordingly. If a new vfield was created (because T doesn't have a
4150 primary base class), then the newly created field is returned. It
4151 is not added to the TYPE_FIELDS list; it is the caller's
4152 responsibility to do that. Accumulate declared virtual functions
4156 create_vtable_ptr (tree t, tree* virtuals_p)
4160 /* Collect the virtual functions declared in T. */
4161 for (fn = TYPE_METHODS (t); fn; fn = TREE_CHAIN (fn))
4162 if (DECL_VINDEX (fn) && !DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (fn)
4163 && TREE_CODE (DECL_VINDEX (fn)) != INTEGER_CST)
4165 tree new_virtual = make_node (TREE_LIST);
4167 BV_FN (new_virtual) = fn;
4168 BV_DELTA (new_virtual) = integer_zero_node;
4170 TREE_CHAIN (new_virtual) = *virtuals_p;
4171 *virtuals_p = new_virtual;
4174 /* If we couldn't find an appropriate base class, create a new field
4175 here. Even if there weren't any new virtual functions, we might need a
4176 new virtual function table if we're supposed to include vptrs in
4177 all classes that need them. */
4178 if (!TYPE_VFIELD (t) && (*virtuals_p || TYPE_CONTAINS_VPTR_P (t)))
4180 /* We build this decl with vtbl_ptr_type_node, which is a
4181 `vtable_entry_type*'. It might seem more precise to use
4182 `vtable_entry_type (*)[N]' where N is the number of virtual
4183 functions. However, that would require the vtable pointer in
4184 base classes to have a different type than the vtable pointer
4185 in derived classes. We could make that happen, but that
4186 still wouldn't solve all the problems. In particular, the
4187 type-based alias analysis code would decide that assignments
4188 to the base class vtable pointer can't alias assignments to
4189 the derived class vtable pointer, since they have different
4190 types. Thus, in a derived class destructor, where the base
4191 class constructor was inlined, we could generate bad code for
4192 setting up the vtable pointer.
4194 Therefore, we use one type for all vtable pointers. We still
4195 use a type-correct type; it's just doesn't indicate the array
4196 bounds. That's better than using `void*' or some such; it's
4197 cleaner, and it let's the alias analysis code know that these
4198 stores cannot alias stores to void*! */
4201 field = build_decl (FIELD_DECL, get_vfield_name (t), vtbl_ptr_type_node);
4202 SET_DECL_ASSEMBLER_NAME (field, get_identifier (VFIELD_BASE));
4203 DECL_VIRTUAL_P (field) = 1;
4204 DECL_ARTIFICIAL (field) = 1;
4205 DECL_FIELD_CONTEXT (field) = t;
4206 DECL_FCONTEXT (field) = t;
4208 TYPE_VFIELD (t) = field;
4210 /* This class is non-empty. */
4211 CLASSTYPE_EMPTY_P (t) = 0;
4213 if (BINFO_N_BASE_BINFOS (TYPE_BINFO (t)))
4214 /* If there were any baseclasses, they can't possibly be at
4215 offset zero any more, because that's where the vtable
4216 pointer is. So, converting to a base class is going to
4218 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (t) = 1;
4226 /* Fixup the inline function given by INFO now that the class is
4230 fixup_pending_inline (tree fn)
4232 if (DECL_PENDING_INLINE_INFO (fn))
4234 tree args = DECL_ARGUMENTS (fn);
4237 DECL_CONTEXT (args) = fn;
4238 args = TREE_CHAIN (args);
4243 /* Fixup the inline methods and friends in TYPE now that TYPE is
4247 fixup_inline_methods (tree type)
4249 tree method = TYPE_METHODS (type);
4251 if (method && TREE_CODE (method) == TREE_VEC)
4253 if (TREE_VEC_ELT (method, 1))
4254 method = TREE_VEC_ELT (method, 1);
4255 else if (TREE_VEC_ELT (method, 0))
4256 method = TREE_VEC_ELT (method, 0);
4258 method = TREE_VEC_ELT (method, 2);
4261 /* Do inline member functions. */
4262 for (; method; method = TREE_CHAIN (method))
4263 fixup_pending_inline (method);
4266 for (method = CLASSTYPE_INLINE_FRIENDS (type);
4268 method = TREE_CHAIN (method))
4269 fixup_pending_inline (TREE_VALUE (method));
4270 CLASSTYPE_INLINE_FRIENDS (type) = NULL_TREE;
4273 /* Add OFFSET to all base types of BINFO which is a base in the
4274 hierarchy dominated by T.
4276 OFFSET, which is a type offset, is number of bytes. */
4279 propagate_binfo_offsets (tree binfo, tree offset)
4284 /* Update BINFO's offset. */
4285 BINFO_OFFSET (binfo)
4286 = convert (sizetype,
4287 size_binop (PLUS_EXPR,
4288 convert (ssizetype, BINFO_OFFSET (binfo)),
4291 /* Find the primary base class. */
4292 primary_binfo = get_primary_binfo (binfo);
4294 if (primary_binfo && BINFO_PRIMARY_BASE_OF (primary_binfo) == binfo)
4295 propagate_binfo_offsets (primary_binfo, offset);
4297 /* Scan all of the bases, pushing the BINFO_OFFSET adjust
4299 for (i = 0; i < BINFO_N_BASE_BINFOS (binfo); ++i)
4301 tree base_binfo = BINFO_BASE_BINFO (binfo, i);
4303 /* Don't do the primary base twice. */
4304 if (base_binfo == primary_binfo)
4307 if (BINFO_VIRTUAL_P (base_binfo))
4310 propagate_binfo_offsets (base_binfo, offset);
4314 /* Set BINFO_OFFSET for all of the virtual bases for RLI->T. Update
4315 TYPE_ALIGN and TYPE_SIZE for T. OFFSETS gives the location of
4316 empty subobjects of T. */
4319 layout_virtual_bases (record_layout_info rli, splay_tree offsets)
4323 bool first_vbase = true;
4326 if (BINFO_N_BASE_BINFOS (TYPE_BINFO (t)) == 0)
4329 if (!abi_version_at_least(2))
4331 /* In G++ 3.2, we incorrectly rounded the size before laying out
4332 the virtual bases. */
4333 finish_record_layout (rli, /*free_p=*/false);
4334 #ifdef STRUCTURE_SIZE_BOUNDARY
4335 /* Packed structures don't need to have minimum size. */
4336 if (! TYPE_PACKED (t))
4337 TYPE_ALIGN (t) = MAX (TYPE_ALIGN (t), (unsigned) STRUCTURE_SIZE_BOUNDARY);
4339 rli->offset = TYPE_SIZE_UNIT (t);
4340 rli->bitpos = bitsize_zero_node;
4341 rli->record_align = TYPE_ALIGN (t);
4344 /* Find the last field. The artificial fields created for virtual
4345 bases will go after the last extant field to date. */
4346 next_field = &TYPE_FIELDS (t);
4348 next_field = &TREE_CHAIN (*next_field);
4350 /* Go through the virtual bases, allocating space for each virtual
4351 base that is not already a primary base class. These are
4352 allocated in inheritance graph order. */
4353 for (vbase = TYPE_BINFO (t); vbase; vbase = TREE_CHAIN (vbase))
4355 if (!BINFO_VIRTUAL_P (vbase))
4358 if (!BINFO_PRIMARY_P (vbase))
4360 tree basetype = TREE_TYPE (vbase);
4362 /* This virtual base is not a primary base of any class in the
4363 hierarchy, so we have to add space for it. */
4364 next_field = build_base_field (rli, vbase,
4365 offsets, next_field);
4367 /* If the first virtual base might have been placed at a
4368 lower address, had we started from CLASSTYPE_SIZE, rather
4369 than TYPE_SIZE, issue a warning. There can be both false
4370 positives and false negatives from this warning in rare
4371 cases; to deal with all the possibilities would probably
4372 require performing both layout algorithms and comparing
4373 the results which is not particularly tractable. */
4377 (size_binop (CEIL_DIV_EXPR,
4378 round_up (CLASSTYPE_SIZE (t),
4379 CLASSTYPE_ALIGN (basetype)),
4381 BINFO_OFFSET (vbase))))
4382 warning ("offset of virtual base `%T' is not ABI-compliant and may change in a future version of GCC",
4385 first_vbase = false;
4390 /* Returns the offset of the byte just past the end of the base class
4394 end_of_base (tree binfo)
4398 if (is_empty_class (BINFO_TYPE (binfo)))
4399 /* An empty class has zero CLASSTYPE_SIZE_UNIT, but we need to
4400 allocate some space for it. It cannot have virtual bases, so
4401 TYPE_SIZE_UNIT is fine. */
4402 size = TYPE_SIZE_UNIT (BINFO_TYPE (binfo));
4404 size = CLASSTYPE_SIZE_UNIT (BINFO_TYPE (binfo));
4406 return size_binop (PLUS_EXPR, BINFO_OFFSET (binfo), size);
4409 /* Returns the offset of the byte just past the end of the base class
4410 with the highest offset in T. If INCLUDE_VIRTUALS_P is zero, then
4411 only non-virtual bases are included. */
4414 end_of_class (tree t, int include_virtuals_p)
4416 tree result = size_zero_node;
4421 for (i = 0; i < BINFO_N_BASE_BINFOS (TYPE_BINFO (t)); ++i)
4423 binfo = BINFO_BASE_BINFO (TYPE_BINFO (t), i);
4425 if (!include_virtuals_p
4426 && BINFO_VIRTUAL_P (binfo)
4427 && BINFO_PRIMARY_BASE_OF (binfo) != TYPE_BINFO (t))
4430 offset = end_of_base (binfo);
4431 if (INT_CST_LT_UNSIGNED (result, offset))
4435 /* G++ 3.2 did not check indirect virtual bases. */
4436 if (abi_version_at_least (2) && include_virtuals_p)
4437 for (i = 0; (binfo = VEC_iterate
4438 (tree, CLASSTYPE_VBASECLASSES (t), i)); i++)
4440 offset = end_of_base (binfo);
4441 if (INT_CST_LT_UNSIGNED (result, offset))
4448 /* Warn about bases of T that are inaccessible because they are
4449 ambiguous. For example:
4452 struct T : public S {};
4453 struct U : public S, public T {};
4455 Here, `(S*) new U' is not allowed because there are two `S'
4459 warn_about_ambiguous_bases (tree t)
4465 /* Check direct bases. */
4466 for (i = 0; i < BINFO_N_BASE_BINFOS (TYPE_BINFO (t)); ++i)
4468 basetype = BINFO_TYPE (BINFO_BASE_BINFO (TYPE_BINFO (t), i));
4470 if (!lookup_base (t, basetype, ba_ignore | ba_quiet, NULL))
4471 warning ("direct base `%T' inaccessible in `%T' due to ambiguity",
4475 /* Check for ambiguous virtual bases. */
4477 for (i = 0; (binfo = VEC_iterate
4478 (tree, CLASSTYPE_VBASECLASSES (t), i)); i++)
4480 basetype = BINFO_TYPE (binfo);
4482 if (!lookup_base (t, basetype, ba_ignore | ba_quiet, NULL))
4483 warning ("virtual base `%T' inaccessible in `%T' due to ambiguity",
4488 /* Compare two INTEGER_CSTs K1 and K2. */
4491 splay_tree_compare_integer_csts (splay_tree_key k1, splay_tree_key k2)
4493 return tree_int_cst_compare ((tree) k1, (tree) k2);
4496 /* Increase the size indicated in RLI to account for empty classes
4497 that are "off the end" of the class. */
4500 include_empty_classes (record_layout_info rli)
4505 /* It might be the case that we grew the class to allocate a
4506 zero-sized base class. That won't be reflected in RLI, yet,
4507 because we are willing to overlay multiple bases at the same
4508 offset. However, now we need to make sure that RLI is big enough
4509 to reflect the entire class. */
4510 eoc = end_of_class (rli->t,
4511 CLASSTYPE_AS_BASE (rli->t) != NULL_TREE);
4512 rli_size = rli_size_unit_so_far (rli);
4513 if (TREE_CODE (rli_size) == INTEGER_CST
4514 && INT_CST_LT_UNSIGNED (rli_size, eoc))
4516 if (!abi_version_at_least (2))
4517 /* In version 1 of the ABI, the size of a class that ends with
4518 a bitfield was not rounded up to a whole multiple of a
4519 byte. Because rli_size_unit_so_far returns only the number
4520 of fully allocated bytes, any extra bits were not included
4522 rli->bitpos = round_down (rli->bitpos, BITS_PER_UNIT);
4524 /* The size should have been rounded to a whole byte. */
4525 my_friendly_assert (tree_int_cst_equal (rli->bitpos,
4526 round_down (rli->bitpos,
4530 = size_binop (PLUS_EXPR,
4532 size_binop (MULT_EXPR,
4533 convert (bitsizetype,
4534 size_binop (MINUS_EXPR,
4536 bitsize_int (BITS_PER_UNIT)));
4537 normalize_rli (rli);
4541 /* Calculate the TYPE_SIZE, TYPE_ALIGN, etc for T. Calculate
4542 BINFO_OFFSETs for all of the base-classes. Position the vtable
4543 pointer. Accumulate declared virtual functions on VIRTUALS_P. */
4546 layout_class_type (tree t, tree *virtuals_p)
4548 tree non_static_data_members;
4551 record_layout_info rli;
4552 /* Maps offsets (represented as INTEGER_CSTs) to a TREE_LIST of
4553 types that appear at that offset. */
4554 splay_tree empty_base_offsets;
4555 /* True if the last field layed out was a bit-field. */
4556 bool last_field_was_bitfield = false;
4557 /* The location at which the next field should be inserted. */
4559 /* T, as a base class. */
4562 /* Keep track of the first non-static data member. */
4563 non_static_data_members = TYPE_FIELDS (t);
4565 /* Start laying out the record. */
4566 rli = start_record_layout (t);
4568 /* If possible, we reuse the virtual function table pointer from one
4569 of our base classes. */
4570 determine_primary_base (t);
4572 /* Create a pointer to our virtual function table. */
4573 vptr = create_vtable_ptr (t, virtuals_p);
4575 /* The vptr is always the first thing in the class. */
4578 TREE_CHAIN (vptr) = TYPE_FIELDS (t);
4579 TYPE_FIELDS (t) = vptr;
4580 next_field = &TREE_CHAIN (vptr);
4581 place_field (rli, vptr);
4584 next_field = &TYPE_FIELDS (t);
4586 /* Build FIELD_DECLs for all of the non-virtual base-types. */
4587 empty_base_offsets = splay_tree_new (splay_tree_compare_integer_csts,
4589 build_base_fields (rli, empty_base_offsets, next_field);
4591 /* Layout the non-static data members. */
4592 for (field = non_static_data_members; field; field = TREE_CHAIN (field))
4597 /* We still pass things that aren't non-static data members to
4598 the back-end, in case it wants to do something with them. */
4599 if (TREE_CODE (field) != FIELD_DECL)
4601 place_field (rli, field);
4602 /* If the static data member has incomplete type, keep track
4603 of it so that it can be completed later. (The handling
4604 of pending statics in finish_record_layout is
4605 insufficient; consider:
4608 struct S2 { static S1 s1; };
4610 At this point, finish_record_layout will be called, but
4611 S1 is still incomplete.) */
4612 if (TREE_CODE (field) == VAR_DECL)
4613 maybe_register_incomplete_var (field);
4617 type = TREE_TYPE (field);
4619 padding = NULL_TREE;
4621 /* If this field is a bit-field whose width is greater than its
4622 type, then there are some special rules for allocating
4624 if (DECL_C_BIT_FIELD (field)
4625 && INT_CST_LT (TYPE_SIZE (type), DECL_SIZE (field)))
4627 integer_type_kind itk;
4629 bool was_unnamed_p = false;
4630 /* We must allocate the bits as if suitably aligned for the
4631 longest integer type that fits in this many bits. type
4632 of the field. Then, we are supposed to use the left over
4633 bits as additional padding. */
4634 for (itk = itk_char; itk != itk_none; ++itk)
4635 if (INT_CST_LT (DECL_SIZE (field),
4636 TYPE_SIZE (integer_types[itk])))
4639 /* ITK now indicates a type that is too large for the
4640 field. We have to back up by one to find the largest
4642 integer_type = integer_types[itk - 1];
4644 /* Figure out how much additional padding is required. GCC
4645 3.2 always created a padding field, even if it had zero
4647 if (!abi_version_at_least (2)
4648 || INT_CST_LT (TYPE_SIZE (integer_type), DECL_SIZE (field)))
4650 if (abi_version_at_least (2) && TREE_CODE (t) == UNION_TYPE)
4651 /* In a union, the padding field must have the full width
4652 of the bit-field; all fields start at offset zero. */
4653 padding = DECL_SIZE (field);
4656 if (warn_abi && TREE_CODE (t) == UNION_TYPE)
4657 warning ("size assigned to `%T' may not be "
4658 "ABI-compliant and may change in a future "
4661 padding = size_binop (MINUS_EXPR, DECL_SIZE (field),
4662 TYPE_SIZE (integer_type));
4665 #ifdef PCC_BITFIELD_TYPE_MATTERS
4666 /* An unnamed bitfield does not normally affect the
4667 alignment of the containing class on a target where
4668 PCC_BITFIELD_TYPE_MATTERS. But, the C++ ABI does not
4669 make any exceptions for unnamed bitfields when the
4670 bitfields are longer than their types. Therefore, we
4671 temporarily give the field a name. */
4672 if (PCC_BITFIELD_TYPE_MATTERS && !DECL_NAME (field))
4674 was_unnamed_p = true;
4675 DECL_NAME (field) = make_anon_name ();
4678 DECL_SIZE (field) = TYPE_SIZE (integer_type);
4679 DECL_ALIGN (field) = TYPE_ALIGN (integer_type);
4680 DECL_USER_ALIGN (field) = TYPE_USER_ALIGN (integer_type);
4681 layout_nonempty_base_or_field (rli, field, NULL_TREE,
4682 empty_base_offsets);
4684 DECL_NAME (field) = NULL_TREE;
4685 /* Now that layout has been performed, set the size of the
4686 field to the size of its declared type; the rest of the
4687 field is effectively invisible. */
4688 DECL_SIZE (field) = TYPE_SIZE (type);
4689 /* We must also reset the DECL_MODE of the field. */
4690 if (abi_version_at_least (2))
4691 DECL_MODE (field) = TYPE_MODE (type);
4693 && DECL_MODE (field) != TYPE_MODE (type))
4694 /* Versions of G++ before G++ 3.4 did not reset the
4696 warning ("the offset of `%D' may not be ABI-compliant and may "
4697 "change in a future version of GCC", field);
4700 layout_nonempty_base_or_field (rli, field, NULL_TREE,
4701 empty_base_offsets);
4703 /* Remember the location of any empty classes in FIELD. */
4704 if (abi_version_at_least (2))
4705 record_subobject_offsets (TREE_TYPE (field),
4706 byte_position(field),
4710 /* If a bit-field does not immediately follow another bit-field,
4711 and yet it starts in the middle of a byte, we have failed to
4712 comply with the ABI. */
4714 && DECL_C_BIT_FIELD (field)
4715 && !last_field_was_bitfield
4716 && !integer_zerop (size_binop (TRUNC_MOD_EXPR,
4717 DECL_FIELD_BIT_OFFSET (field),
4718 bitsize_unit_node)))
4719 cp_warning_at ("offset of `%D' is not ABI-compliant and may change in a future version of GCC",
4722 /* G++ used to use DECL_FIELD_OFFSET as if it were the byte
4723 offset of the field. */
4725 && !tree_int_cst_equal (DECL_FIELD_OFFSET (field),
4726 byte_position (field))
4727 && contains_empty_class_p (TREE_TYPE (field)))
4728 cp_warning_at ("`%D' contains empty classes which may cause base "
4729 "classes to be placed at different locations in a "
4730 "future version of GCC",
4733 /* If we needed additional padding after this field, add it
4739 padding_field = build_decl (FIELD_DECL,
4742 DECL_BIT_FIELD (padding_field) = 1;
4743 DECL_SIZE (padding_field) = padding;
4744 DECL_CONTEXT (padding_field) = t;
4745 DECL_ARTIFICIAL (padding_field) = 1;
4746 layout_nonempty_base_or_field (rli, padding_field,
4748 empty_base_offsets);
4751 last_field_was_bitfield = DECL_C_BIT_FIELD (field);
4754 if (abi_version_at_least (2) && !integer_zerop (rli->bitpos))
4756 /* Make sure that we are on a byte boundary so that the size of
4757 the class without virtual bases will always be a round number
4759 rli->bitpos = round_up (rli->bitpos, BITS_PER_UNIT);
4760 normalize_rli (rli);
4763 /* G++ 3.2 does not allow virtual bases to be overlaid with tail
4765 if (!abi_version_at_least (2))
4766 include_empty_classes(rli);
4768 /* Delete all zero-width bit-fields from the list of fields. Now
4769 that the type is laid out they are no longer important. */
4770 remove_zero_width_bit_fields (t);
4772 /* Create the version of T used for virtual bases. We do not use
4773 make_aggr_type for this version; this is an artificial type. For
4774 a POD type, we just reuse T. */
4775 if (CLASSTYPE_NON_POD_P (t) || CLASSTYPE_EMPTY_P (t))
4777 base_t = make_node (TREE_CODE (t));
4779 /* Set the size and alignment for the new type. In G++ 3.2, all
4780 empty classes were considered to have size zero when used as
4782 if (!abi_version_at_least (2) && CLASSTYPE_EMPTY_P (t))
4784 TYPE_SIZE (base_t) = bitsize_zero_node;
4785 TYPE_SIZE_UNIT (base_t) = size_zero_node;
4786 if (warn_abi && !integer_zerop (rli_size_unit_so_far (rli)))
4787 warning ("layout of classes derived from empty class `%T' "
4788 "may change in a future version of GCC",
4795 /* If the ABI version is not at least two, and the last
4796 field was a bit-field, RLI may not be on a byte
4797 boundary. In particular, rli_size_unit_so_far might
4798 indicate the last complete byte, while rli_size_so_far
4799 indicates the total number of bits used. Therefore,
4800 rli_size_so_far, rather than rli_size_unit_so_far, is
4801 used to compute TYPE_SIZE_UNIT. */
4802 eoc = end_of_class (t, /*include_virtuals_p=*/0);
4803 TYPE_SIZE_UNIT (base_t)
4804 = size_binop (MAX_EXPR,
4806 size_binop (CEIL_DIV_EXPR,
4807 rli_size_so_far (rli),
4808 bitsize_int (BITS_PER_UNIT))),
4811 = size_binop (MAX_EXPR,
4812 rli_size_so_far (rli),
4813 size_binop (MULT_EXPR,
4814 convert (bitsizetype, eoc),
4815 bitsize_int (BITS_PER_UNIT)));
4817 TYPE_ALIGN (base_t) = rli->record_align;
4818 TYPE_USER_ALIGN (base_t) = TYPE_USER_ALIGN (t);
4820 /* Copy the fields from T. */
4821 next_field = &TYPE_FIELDS (base_t);
4822 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
4823 if (TREE_CODE (field) == FIELD_DECL)
4825 *next_field = build_decl (FIELD_DECL,
4828 DECL_CONTEXT (*next_field) = base_t;
4829 DECL_FIELD_OFFSET (*next_field) = DECL_FIELD_OFFSET (field);
4830 DECL_FIELD_BIT_OFFSET (*next_field)
4831 = DECL_FIELD_BIT_OFFSET (field);
4832 DECL_SIZE (*next_field) = DECL_SIZE (field);
4833 DECL_MODE (*next_field) = DECL_MODE (field);
4834 next_field = &TREE_CHAIN (*next_field);
4837 /* Record the base version of the type. */
4838 CLASSTYPE_AS_BASE (t) = base_t;
4839 TYPE_CONTEXT (base_t) = t;
4842 CLASSTYPE_AS_BASE (t) = t;
4844 /* Every empty class contains an empty class. */
4845 if (CLASSTYPE_EMPTY_P (t))
4846 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) = 1;
4848 /* Set the TYPE_DECL for this type to contain the right
4849 value for DECL_OFFSET, so that we can use it as part
4850 of a COMPONENT_REF for multiple inheritance. */
4851 layout_decl (TYPE_MAIN_DECL (t), 0);
4853 /* Now fix up any virtual base class types that we left lying
4854 around. We must get these done before we try to lay out the
4855 virtual function table. As a side-effect, this will remove the
4856 base subobject fields. */
4857 layout_virtual_bases (rli, empty_base_offsets);
4859 /* Make sure that empty classes are reflected in RLI at this
4861 include_empty_classes(rli);
4863 /* Make sure not to create any structures with zero size. */
4864 if (integer_zerop (rli_size_unit_so_far (rli)) && CLASSTYPE_EMPTY_P (t))
4866 build_decl (FIELD_DECL, NULL_TREE, char_type_node));
4868 /* Let the back-end lay out the type. */
4869 finish_record_layout (rli, /*free_p=*/true);
4871 /* Warn about bases that can't be talked about due to ambiguity. */
4872 warn_about_ambiguous_bases (t);
4874 /* Now that we're done with layout, give the base fields the real types. */
4875 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
4876 if (DECL_ARTIFICIAL (field) && IS_FAKE_BASE_TYPE (TREE_TYPE (field)))
4877 TREE_TYPE (field) = TYPE_CONTEXT (TREE_TYPE (field));
4880 splay_tree_delete (empty_base_offsets);
4883 /* Returns the virtual function with which the vtable for TYPE is
4884 emitted, or NULL_TREE if that heuristic is not applicable to TYPE. */
4887 key_method (tree type)
4891 if (TYPE_FOR_JAVA (type)
4892 || processing_template_decl
4893 || CLASSTYPE_TEMPLATE_INSTANTIATION (type)
4894 || CLASSTYPE_INTERFACE_KNOWN (type))
4897 for (method = TYPE_METHODS (type); method != NULL_TREE;
4898 method = TREE_CHAIN (method))
4899 if (DECL_VINDEX (method) != NULL_TREE
4900 && ! DECL_DECLARED_INLINE_P (method)
4901 && ! DECL_PURE_VIRTUAL_P (method))
4907 /* Perform processing required when the definition of T (a class type)
4911 finish_struct_1 (tree t)
4914 /* A TREE_LIST. The TREE_VALUE of each node is a FUNCTION_DECL. */
4915 tree virtuals = NULL_TREE;
4919 if (COMPLETE_TYPE_P (t))
4921 if (IS_AGGR_TYPE (t))
4922 error ("redefinition of `%#T'", t);
4929 /* If this type was previously laid out as a forward reference,
4930 make sure we lay it out again. */
4931 TYPE_SIZE (t) = NULL_TREE;
4932 CLASSTYPE_PRIMARY_BINFO (t) = NULL_TREE;
4934 fixup_inline_methods (t);
4936 /* Make assumptions about the class; we'll reset the flags if
4938 CLASSTYPE_EMPTY_P (t) = 1;
4939 CLASSTYPE_NEARLY_EMPTY_P (t) = 1;
4940 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) = 0;
4942 /* Do end-of-class semantic processing: checking the validity of the
4943 bases and members and add implicitly generated methods. */
4944 check_bases_and_members (t);
4946 /* Find the key method. */
4947 if (TYPE_CONTAINS_VPTR_P (t))
4949 CLASSTYPE_KEY_METHOD (t) = key_method (t);
4951 /* If a polymorphic class has no key method, we may emit the vtable
4952 in every translation unit where the class definition appears. */
4953 if (CLASSTYPE_KEY_METHOD (t) == NULL_TREE)
4954 keyed_classes = tree_cons (NULL_TREE, t, keyed_classes);
4957 /* Layout the class itself. */
4958 layout_class_type (t, &virtuals);
4959 if (CLASSTYPE_AS_BASE (t) != t)
4960 /* We use the base type for trivial assignments, and hence it
4962 compute_record_mode (CLASSTYPE_AS_BASE (t));
4964 /* Make sure that we get our own copy of the vfield FIELD_DECL. */
4965 vfield = TYPE_VFIELD (t);
4966 if (vfield && CLASSTYPE_HAS_PRIMARY_BASE_P (t))
4968 tree primary = CLASSTYPE_PRIMARY_BINFO (t);
4970 my_friendly_assert (same_type_p (DECL_FIELD_CONTEXT (vfield),
4971 BINFO_TYPE (primary)),
4973 /* The vtable better be at the start. */
4974 my_friendly_assert (integer_zerop (DECL_FIELD_OFFSET (vfield)),
4976 my_friendly_assert (integer_zerop (BINFO_OFFSET (primary)),
4979 vfield = copy_decl (vfield);
4980 DECL_FIELD_CONTEXT (vfield) = t;
4981 TYPE_VFIELD (t) = vfield;
4984 my_friendly_assert (!vfield || DECL_FIELD_CONTEXT (vfield) == t, 20010726);
4986 virtuals = modify_all_vtables (t, nreverse (virtuals));
4988 /* If we created a new vtbl pointer for this class, add it to the
4990 if (TYPE_VFIELD (t) && !CLASSTYPE_HAS_PRIMARY_BASE_P (t))
4991 CLASSTYPE_VFIELDS (t)
4992 = chainon (CLASSTYPE_VFIELDS (t), build_tree_list (NULL_TREE, t));
4994 /* If necessary, create the primary vtable for this class. */
4995 if (virtuals || TYPE_CONTAINS_VPTR_P (t))
4997 /* We must enter these virtuals into the table. */
4998 if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t))
4999 build_primary_vtable (NULL_TREE, t);
5000 else if (! BINFO_NEW_VTABLE_MARKED (TYPE_BINFO (t)))
5001 /* Here we know enough to change the type of our virtual
5002 function table, but we will wait until later this function. */
5003 build_primary_vtable (CLASSTYPE_PRIMARY_BINFO (t), t);
5006 if (TYPE_CONTAINS_VPTR_P (t))
5011 if (BINFO_VTABLE (TYPE_BINFO (t)))
5012 my_friendly_assert (DECL_VIRTUAL_P (BINFO_VTABLE (TYPE_BINFO (t))),
5014 if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t))
5015 my_friendly_assert (BINFO_VIRTUALS (TYPE_BINFO (t)) == NULL_TREE,
5018 /* Add entries for virtual functions introduced by this class. */
5019 BINFO_VIRTUALS (TYPE_BINFO (t))
5020 = chainon (BINFO_VIRTUALS (TYPE_BINFO (t)), virtuals);
5022 /* Set DECL_VINDEX for all functions declared in this class. */
5023 for (vindex = 0, fn = BINFO_VIRTUALS (TYPE_BINFO (t));
5025 fn = TREE_CHAIN (fn),
5026 vindex += (TARGET_VTABLE_USES_DESCRIPTORS
5027 ? TARGET_VTABLE_USES_DESCRIPTORS : 1))
5029 tree fndecl = BV_FN (fn);
5031 if (DECL_THUNK_P (fndecl))
5032 /* A thunk. We should never be calling this entry directly
5033 from this vtable -- we'd use the entry for the non
5034 thunk base function. */
5035 DECL_VINDEX (fndecl) = NULL_TREE;
5036 else if (TREE_CODE (DECL_VINDEX (fndecl)) != INTEGER_CST)
5037 DECL_VINDEX (fndecl) = build_shared_int_cst (vindex);
5041 finish_struct_bits (t);
5043 /* Complete the rtl for any static member objects of the type we're
5045 for (x = TYPE_FIELDS (t); x; x = TREE_CHAIN (x))
5046 if (TREE_CODE (x) == VAR_DECL && TREE_STATIC (x)
5047 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (x)), t))
5048 DECL_MODE (x) = TYPE_MODE (t);
5050 /* Done with FIELDS...now decide whether to sort these for
5051 faster lookups later.
5053 We use a small number because most searches fail (succeeding
5054 ultimately as the search bores through the inheritance
5055 hierarchy), and we want this failure to occur quickly. */
5057 n_fields = count_fields (TYPE_FIELDS (t));
5060 struct sorted_fields_type *field_vec = ggc_alloc (sizeof (struct sorted_fields_type)
5061 + n_fields * sizeof (tree));
5062 field_vec->len = n_fields;
5063 add_fields_to_record_type (TYPE_FIELDS (t), field_vec, 0);
5064 qsort (field_vec->elts, n_fields, sizeof (tree),
5066 if (! DECL_LANG_SPECIFIC (TYPE_MAIN_DECL (t)))
5067 retrofit_lang_decl (TYPE_MAIN_DECL (t));
5068 DECL_SORTED_FIELDS (TYPE_MAIN_DECL (t)) = field_vec;
5071 if (TYPE_HAS_CONSTRUCTOR (t))
5073 tree vfields = CLASSTYPE_VFIELDS (t);
5075 for (vfields = CLASSTYPE_VFIELDS (t);
5076 vfields; vfields = TREE_CHAIN (vfields))
5077 /* Mark the fact that constructor for T could affect anybody
5078 inheriting from T who wants to initialize vtables for
5080 if (VF_BINFO_VALUE (vfields))
5081 TREE_ADDRESSABLE (vfields) = 1;
5084 /* Make the rtl for any new vtables we have created, and unmark
5085 the base types we marked. */
5088 /* Build the VTT for T. */
5091 if (warn_nonvdtor && TYPE_POLYMORPHIC_P (t) && TYPE_HAS_DESTRUCTOR (t)
5092 && !DECL_VINDEX (CLASSTYPE_DESTRUCTORS (t)))
5095 tree dtor = CLASSTYPE_DESTRUCTORS (t);
5097 /* Warn only if the dtor is non-private or the class has friends */
5098 if (!TREE_PRIVATE (dtor) ||
5099 (CLASSTYPE_FRIEND_CLASSES (t) ||
5100 DECL_FRIENDLIST (TYPE_MAIN_DECL (t))))
5101 warning ("%#T' has virtual functions but non-virtual destructor", t);
5106 if (warn_overloaded_virtual)
5109 maybe_suppress_debug_info (t);
5111 dump_class_hierarchy (t);
5113 /* Finish debugging output for this type. */
5114 rest_of_type_compilation (t, ! LOCAL_CLASS_P (t));
5117 /* When T was built up, the member declarations were added in reverse
5118 order. Rearrange them to declaration order. */
5121 unreverse_member_declarations (tree t)
5127 /* The following lists are all in reverse order. Put them in
5128 declaration order now. */
5129 TYPE_METHODS (t) = nreverse (TYPE_METHODS (t));
5130 CLASSTYPE_DECL_LIST (t) = nreverse (CLASSTYPE_DECL_LIST (t));
5132 /* Actually, for the TYPE_FIELDS, only the non TYPE_DECLs are in
5133 reverse order, so we can't just use nreverse. */
5135 for (x = TYPE_FIELDS (t);
5136 x && TREE_CODE (x) != TYPE_DECL;
5139 next = TREE_CHAIN (x);
5140 TREE_CHAIN (x) = prev;
5145 TREE_CHAIN (TYPE_FIELDS (t)) = x;
5147 TYPE_FIELDS (t) = prev;
5152 finish_struct (tree t, tree attributes)
5154 location_t saved_loc = input_location;
5156 /* Now that we've got all the field declarations, reverse everything
5158 unreverse_member_declarations (t);
5160 cplus_decl_attributes (&t, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
5162 /* Nadger the current location so that diagnostics point to the start of
5163 the struct, not the end. */
5164 input_location = DECL_SOURCE_LOCATION (TYPE_NAME (t));
5166 if (processing_template_decl)
5170 finish_struct_methods (t);
5171 TYPE_SIZE (t) = bitsize_zero_node;
5173 /* We need to emit an error message if this type was used as a parameter
5174 and it is an abstract type, even if it is a template. We construct
5175 a simple CLASSTYPE_PURE_VIRTUALS list without taking bases into
5176 account and we call complete_vars with this type, which will check
5177 the PARM_DECLS. Note that while the type is being defined,
5178 CLASSTYPE_PURE_VIRTUALS contains the list of the inline friends
5179 (see CLASSTYPE_INLINE_FRIENDS) so we need to clear it. */
5180 CLASSTYPE_PURE_VIRTUALS (t) = NULL_TREE;
5181 for (x = TYPE_METHODS (t); x; x = TREE_CHAIN (x))
5182 if (DECL_PURE_VIRTUAL_P (x))
5183 CLASSTYPE_PURE_VIRTUALS (t)
5184 = tree_cons (NULL_TREE, x, CLASSTYPE_PURE_VIRTUALS (t));
5188 finish_struct_1 (t);
5190 input_location = saved_loc;
5192 TYPE_BEING_DEFINED (t) = 0;
5194 if (current_class_type)
5197 error ("trying to finish struct, but kicked out due to previous parse errors");
5199 if (processing_template_decl && at_function_scope_p ())
5200 add_stmt (build_min (TAG_DEFN, t));
5205 /* Return the dynamic type of INSTANCE, if known.
5206 Used to determine whether the virtual function table is needed
5209 *NONNULL is set iff INSTANCE can be known to be nonnull, regardless
5210 of our knowledge of its type. *NONNULL should be initialized
5211 before this function is called. */
5214 fixed_type_or_null (tree instance, int* nonnull, int* cdtorp)
5216 switch (TREE_CODE (instance))
5219 if (POINTER_TYPE_P (TREE_TYPE (instance)))
5222 return fixed_type_or_null (TREE_OPERAND (instance, 0),
5226 /* This is a call to a constructor, hence it's never zero. */
5227 if (TREE_HAS_CONSTRUCTOR (instance))
5231 return TREE_TYPE (instance);
5236 /* This is a call to a constructor, hence it's never zero. */
5237 if (TREE_HAS_CONSTRUCTOR (instance))
5241 return TREE_TYPE (instance);
5243 return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull, cdtorp);
5247 if (TREE_CODE (TREE_OPERAND (instance, 0)) == ADDR_EXPR)
5248 return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull, cdtorp);
5249 if (TREE_CODE (TREE_OPERAND (instance, 1)) == INTEGER_CST)
5250 /* Propagate nonnull. */
5251 return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull, cdtorp);
5256 return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull, cdtorp);
5261 return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull, cdtorp);
5264 return fixed_type_or_null (TREE_OPERAND (instance, 1), nonnull, cdtorp);
5268 if (TREE_CODE (TREE_TYPE (instance)) == ARRAY_TYPE
5269 && IS_AGGR_TYPE (TREE_TYPE (TREE_TYPE (instance))))
5273 return TREE_TYPE (TREE_TYPE (instance));
5275 /* fall through... */
5279 if (IS_AGGR_TYPE (TREE_TYPE (instance)))
5283 return TREE_TYPE (instance);
5285 else if (instance == current_class_ptr)
5290 /* if we're in a ctor or dtor, we know our type. */
5291 if (DECL_LANG_SPECIFIC (current_function_decl)
5292 && (DECL_CONSTRUCTOR_P (current_function_decl)
5293 || DECL_DESTRUCTOR_P (current_function_decl)))
5297 return TREE_TYPE (TREE_TYPE (instance));
5300 else if (TREE_CODE (TREE_TYPE (instance)) == REFERENCE_TYPE)
5302 /* Reference variables should be references to objects. */
5306 /* DECL_VAR_MARKED_P is used to prevent recursion; a
5307 variable's initializer may refer to the variable
5309 if (TREE_CODE (instance) == VAR_DECL
5310 && DECL_INITIAL (instance)
5311 && !DECL_VAR_MARKED_P (instance))
5314 DECL_VAR_MARKED_P (instance) = 1;
5315 type = fixed_type_or_null (DECL_INITIAL (instance),
5317 DECL_VAR_MARKED_P (instance) = 0;
5328 /* Return nonzero if the dynamic type of INSTANCE is known, and
5329 equivalent to the static type. We also handle the case where
5330 INSTANCE is really a pointer. Return negative if this is a
5331 ctor/dtor. There the dynamic type is known, but this might not be
5332 the most derived base of the original object, and hence virtual
5333 bases may not be layed out according to this type.
5335 Used to determine whether the virtual function table is needed
5338 *NONNULL is set iff INSTANCE can be known to be nonnull, regardless
5339 of our knowledge of its type. *NONNULL should be initialized
5340 before this function is called. */
5343 resolves_to_fixed_type_p (tree instance, int* nonnull)
5345 tree t = TREE_TYPE (instance);
5348 tree fixed = fixed_type_or_null (instance, nonnull, &cdtorp);
5349 if (fixed == NULL_TREE)
5351 if (POINTER_TYPE_P (t))
5353 if (!same_type_ignoring_top_level_qualifiers_p (t, fixed))
5355 return cdtorp ? -1 : 1;
5360 init_class_processing (void)
5362 current_class_depth = 0;
5363 current_class_stack_size = 10;
5365 = xmalloc (current_class_stack_size * sizeof (struct class_stack_node));
5366 VARRAY_TREE_INIT (local_classes, 8, "local_classes");
5368 ridpointers[(int) RID_PUBLIC] = access_public_node;
5369 ridpointers[(int) RID_PRIVATE] = access_private_node;
5370 ridpointers[(int) RID_PROTECTED] = access_protected_node;
5373 /* Restore the cached PREVIOUS_CLASS_LEVEL. */
5376 restore_class_cache (void)
5380 /* We are re-entering the same class we just left, so we don't
5381 have to search the whole inheritance matrix to find all the
5382 decls to bind again. Instead, we install the cached
5383 class_shadowed list and walk through it binding names. */
5384 push_binding_level (previous_class_level);
5385 class_binding_level = previous_class_level;
5386 /* Restore IDENTIFIER_TYPE_VALUE. */
5387 for (type = class_binding_level->type_shadowed;
5389 type = TREE_CHAIN (type))
5390 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (type), TREE_TYPE (type));
5393 /* Set global variables CURRENT_CLASS_NAME and CURRENT_CLASS_TYPE as
5394 appropriate for TYPE.
5396 So that we may avoid calls to lookup_name, we cache the _TYPE
5397 nodes of local TYPE_DECLs in the TREE_TYPE field of the name.
5399 For multiple inheritance, we perform a two-pass depth-first search
5400 of the type lattice. */
5403 pushclass (tree type)
5405 type = TYPE_MAIN_VARIANT (type);
5407 /* Make sure there is enough room for the new entry on the stack. */
5408 if (current_class_depth + 1 >= current_class_stack_size)
5410 current_class_stack_size *= 2;
5412 = xrealloc (current_class_stack,
5413 current_class_stack_size
5414 * sizeof (struct class_stack_node));
5417 /* Insert a new entry on the class stack. */
5418 current_class_stack[current_class_depth].name = current_class_name;
5419 current_class_stack[current_class_depth].type = current_class_type;
5420 current_class_stack[current_class_depth].access = current_access_specifier;
5421 current_class_stack[current_class_depth].names_used = 0;
5422 current_class_depth++;
5424 /* Now set up the new type. */
5425 current_class_name = TYPE_NAME (type);
5426 if (TREE_CODE (current_class_name) == TYPE_DECL)
5427 current_class_name = DECL_NAME (current_class_name);
5428 current_class_type = type;
5430 /* By default, things in classes are private, while things in
5431 structures or unions are public. */
5432 current_access_specifier = (CLASSTYPE_DECLARED_CLASS (type)
5433 ? access_private_node
5434 : access_public_node);
5436 if (previous_class_level
5437 && type != previous_class_level->this_entity
5438 && current_class_depth == 1)
5440 /* Forcibly remove any old class remnants. */
5441 invalidate_class_lookup_cache ();
5444 if (!previous_class_level
5445 || type != previous_class_level->this_entity
5446 || current_class_depth > 1)
5449 restore_class_cache ();
5451 cxx_remember_type_decls (CLASSTYPE_NESTED_UTDS (type));
5454 /* When we exit a toplevel class scope, we save its binding level so
5455 that we can restore it quickly. Here, we've entered some other
5456 class, so we must invalidate our cache. */
5459 invalidate_class_lookup_cache (void)
5461 previous_class_level = NULL;
5464 /* Get out of the current class scope. If we were in a class scope
5465 previously, that is the one popped to. */
5472 current_class_depth--;
5473 current_class_name = current_class_stack[current_class_depth].name;
5474 current_class_type = current_class_stack[current_class_depth].type;
5475 current_access_specifier = current_class_stack[current_class_depth].access;
5476 if (current_class_stack[current_class_depth].names_used)
5477 splay_tree_delete (current_class_stack[current_class_depth].names_used);
5480 /* Returns 1 if current_class_type is either T or a nested type of T.
5481 We start looking from 1 because entry 0 is from global scope, and has
5485 currently_open_class (tree t)
5488 if (current_class_type && same_type_p (t, current_class_type))
5490 for (i = 1; i < current_class_depth; ++i)
5491 if (current_class_stack[i].type
5492 && same_type_p (current_class_stack [i].type, t))
5497 /* If either current_class_type or one of its enclosing classes are derived
5498 from T, return the appropriate type. Used to determine how we found
5499 something via unqualified lookup. */
5502 currently_open_derived_class (tree t)
5506 /* The bases of a dependent type are unknown. */
5507 if (dependent_type_p (t))
5510 if (!current_class_type)
5513 if (DERIVED_FROM_P (t, current_class_type))
5514 return current_class_type;
5516 for (i = current_class_depth - 1; i > 0; --i)
5517 if (DERIVED_FROM_P (t, current_class_stack[i].type))
5518 return current_class_stack[i].type;
5523 /* When entering a class scope, all enclosing class scopes' names with
5524 static meaning (static variables, static functions, types and
5525 enumerators) have to be visible. This recursive function calls
5526 pushclass for all enclosing class contexts until global or a local
5527 scope is reached. TYPE is the enclosed class. */
5530 push_nested_class (tree type)
5534 /* A namespace might be passed in error cases, like A::B:C. */
5535 if (type == NULL_TREE
5536 || type == error_mark_node
5537 || TREE_CODE (type) == NAMESPACE_DECL
5538 || ! IS_AGGR_TYPE (type)
5539 || TREE_CODE (type) == TEMPLATE_TYPE_PARM
5540 || TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
5543 context = DECL_CONTEXT (TYPE_MAIN_DECL (type));
5545 if (context && CLASS_TYPE_P (context))
5546 push_nested_class (context);
5550 /* Undoes a push_nested_class call. */
5553 pop_nested_class (void)
5555 tree context = DECL_CONTEXT (TYPE_MAIN_DECL (current_class_type));
5558 if (context && CLASS_TYPE_P (context))
5559 pop_nested_class ();
5562 /* Returns the number of extern "LANG" blocks we are nested within. */
5565 current_lang_depth (void)
5567 return VARRAY_ACTIVE_SIZE (current_lang_base);
5570 /* Set global variables CURRENT_LANG_NAME to appropriate value
5571 so that behavior of name-mangling machinery is correct. */
5574 push_lang_context (tree name)
5576 VARRAY_PUSH_TREE (current_lang_base, current_lang_name);
5578 if (name == lang_name_cplusplus)
5580 current_lang_name = name;
5582 else if (name == lang_name_java)
5584 current_lang_name = name;
5585 /* DECL_IGNORED_P is initially set for these types, to avoid clutter.
5586 (See record_builtin_java_type in decl.c.) However, that causes
5587 incorrect debug entries if these types are actually used.
5588 So we re-enable debug output after extern "Java". */
5589 DECL_IGNORED_P (TYPE_NAME (java_byte_type_node)) = 0;
5590 DECL_IGNORED_P (TYPE_NAME (java_short_type_node)) = 0;
5591 DECL_IGNORED_P (TYPE_NAME (java_int_type_node)) = 0;
5592 DECL_IGNORED_P (TYPE_NAME (java_long_type_node)) = 0;
5593 DECL_IGNORED_P (TYPE_NAME (java_float_type_node)) = 0;
5594 DECL_IGNORED_P (TYPE_NAME (java_double_type_node)) = 0;
5595 DECL_IGNORED_P (TYPE_NAME (java_char_type_node)) = 0;
5596 DECL_IGNORED_P (TYPE_NAME (java_boolean_type_node)) = 0;
5598 else if (name == lang_name_c)
5600 current_lang_name = name;
5603 error ("language string `\"%E\"' not recognized", name);
5606 /* Get out of the current language scope. */
5609 pop_lang_context (void)
5611 current_lang_name = VARRAY_TOP_TREE (current_lang_base);
5612 VARRAY_POP (current_lang_base);
5615 /* Type instantiation routines. */
5617 /* Given an OVERLOAD and a TARGET_TYPE, return the function that
5618 matches the TARGET_TYPE. If there is no satisfactory match, return
5619 error_mark_node, and issue a error & warning messages under control
5620 of FLAGS. Permit pointers to member function if FLAGS permits. If
5621 TEMPLATE_ONLY, the name of the overloaded function was a
5622 template-id, and EXPLICIT_TARGS are the explicitly provided
5623 template arguments. */
5626 resolve_address_of_overloaded_function (tree target_type,
5628 tsubst_flags_t flags,
5630 tree explicit_targs)
5632 /* Here's what the standard says:
5636 If the name is a function template, template argument deduction
5637 is done, and if the argument deduction succeeds, the deduced
5638 arguments are used to generate a single template function, which
5639 is added to the set of overloaded functions considered.
5641 Non-member functions and static member functions match targets of
5642 type "pointer-to-function" or "reference-to-function." Nonstatic
5643 member functions match targets of type "pointer-to-member
5644 function;" the function type of the pointer to member is used to
5645 select the member function from the set of overloaded member
5646 functions. If a nonstatic member function is selected, the
5647 reference to the overloaded function name is required to have the
5648 form of a pointer to member as described in 5.3.1.
5650 If more than one function is selected, any template functions in
5651 the set are eliminated if the set also contains a non-template
5652 function, and any given template function is eliminated if the
5653 set contains a second template function that is more specialized
5654 than the first according to the partial ordering rules 14.5.5.2.
5655 After such eliminations, if any, there shall remain exactly one
5656 selected function. */
5659 int is_reference = 0;
5660 /* We store the matches in a TREE_LIST rooted here. The functions
5661 are the TREE_PURPOSE, not the TREE_VALUE, in this list, for easy
5662 interoperability with most_specialized_instantiation. */
5663 tree matches = NULL_TREE;
5666 /* By the time we get here, we should be seeing only real
5667 pointer-to-member types, not the internal POINTER_TYPE to
5668 METHOD_TYPE representation. */
5669 my_friendly_assert (!(TREE_CODE (target_type) == POINTER_TYPE
5670 && (TREE_CODE (TREE_TYPE (target_type))
5671 == METHOD_TYPE)), 0);
5673 my_friendly_assert (is_overloaded_fn (overload), 20030910);
5675 /* Check that the TARGET_TYPE is reasonable. */
5676 if (TYPE_PTRFN_P (target_type))
5678 else if (TYPE_PTRMEMFUNC_P (target_type))
5679 /* This is OK, too. */
5681 else if (TREE_CODE (target_type) == FUNCTION_TYPE)
5683 /* This is OK, too. This comes from a conversion to reference
5685 target_type = build_reference_type (target_type);
5690 if (flags & tf_error)
5692 cannot resolve overloaded function `%D' based on conversion to type `%T'",
5693 DECL_NAME (OVL_FUNCTION (overload)), target_type);
5694 return error_mark_node;
5697 /* If we can find a non-template function that matches, we can just
5698 use it. There's no point in generating template instantiations
5699 if we're just going to throw them out anyhow. But, of course, we
5700 can only do this when we don't *need* a template function. */
5705 for (fns = overload; fns; fns = OVL_NEXT (fns))
5707 tree fn = OVL_CURRENT (fns);
5710 if (TREE_CODE (fn) == TEMPLATE_DECL)
5711 /* We're not looking for templates just yet. */
5714 if ((TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
5716 /* We're looking for a non-static member, and this isn't
5717 one, or vice versa. */
5720 /* Ignore anticipated decls of undeclared builtins. */
5721 if (DECL_ANTICIPATED (fn))
5724 /* See if there's a match. */
5725 fntype = TREE_TYPE (fn);
5727 fntype = build_ptrmemfunc_type (build_pointer_type (fntype));
5728 else if (!is_reference)
5729 fntype = build_pointer_type (fntype);
5731 if (can_convert_arg (target_type, fntype, fn))
5732 matches = tree_cons (fn, NULL_TREE, matches);
5736 /* Now, if we've already got a match (or matches), there's no need
5737 to proceed to the template functions. But, if we don't have a
5738 match we need to look at them, too. */
5741 tree target_fn_type;
5742 tree target_arg_types;
5743 tree target_ret_type;
5748 = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (target_type));
5750 target_fn_type = TREE_TYPE (target_type);
5751 target_arg_types = TYPE_ARG_TYPES (target_fn_type);
5752 target_ret_type = TREE_TYPE (target_fn_type);
5754 /* Never do unification on the 'this' parameter. */
5755 if (TREE_CODE (target_fn_type) == METHOD_TYPE)
5756 target_arg_types = TREE_CHAIN (target_arg_types);
5758 for (fns = overload; fns; fns = OVL_NEXT (fns))
5760 tree fn = OVL_CURRENT (fns);
5762 tree instantiation_type;
5765 if (TREE_CODE (fn) != TEMPLATE_DECL)
5766 /* We're only looking for templates. */
5769 if ((TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
5771 /* We're not looking for a non-static member, and this is
5772 one, or vice versa. */
5775 /* Try to do argument deduction. */
5776 targs = make_tree_vec (DECL_NTPARMS (fn));
5777 if (fn_type_unification (fn, explicit_targs, targs,
5778 target_arg_types, target_ret_type,
5779 DEDUCE_EXACT, -1) != 0)
5780 /* Argument deduction failed. */
5783 /* Instantiate the template. */
5784 instantiation = instantiate_template (fn, targs, flags);
5785 if (instantiation == error_mark_node)
5786 /* Instantiation failed. */
5789 /* See if there's a match. */
5790 instantiation_type = TREE_TYPE (instantiation);
5792 instantiation_type =
5793 build_ptrmemfunc_type (build_pointer_type (instantiation_type));
5794 else if (!is_reference)
5795 instantiation_type = build_pointer_type (instantiation_type);
5796 if (can_convert_arg (target_type, instantiation_type, instantiation))
5797 matches = tree_cons (instantiation, fn, matches);
5800 /* Now, remove all but the most specialized of the matches. */
5803 tree match = most_specialized_instantiation (matches);
5805 if (match != error_mark_node)
5806 matches = tree_cons (match, NULL_TREE, NULL_TREE);
5810 /* Now we should have exactly one function in MATCHES. */
5811 if (matches == NULL_TREE)
5813 /* There were *no* matches. */
5814 if (flags & tf_error)
5816 error ("no matches converting function `%D' to type `%#T'",
5817 DECL_NAME (OVL_FUNCTION (overload)),
5820 /* print_candidates expects a chain with the functions in
5821 TREE_VALUE slots, so we cons one up here (we're losing anyway,
5822 so why be clever?). */
5823 for (; overload; overload = OVL_NEXT (overload))
5824 matches = tree_cons (NULL_TREE, OVL_CURRENT (overload),
5827 print_candidates (matches);
5829 return error_mark_node;
5831 else if (TREE_CHAIN (matches))
5833 /* There were too many matches. */
5835 if (flags & tf_error)
5839 error ("converting overloaded function `%D' to type `%#T' is ambiguous",
5840 DECL_NAME (OVL_FUNCTION (overload)),
5843 /* Since print_candidates expects the functions in the
5844 TREE_VALUE slot, we flip them here. */
5845 for (match = matches; match; match = TREE_CHAIN (match))
5846 TREE_VALUE (match) = TREE_PURPOSE (match);
5848 print_candidates (matches);
5851 return error_mark_node;
5854 /* Good, exactly one match. Now, convert it to the correct type. */
5855 fn = TREE_PURPOSE (matches);
5857 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
5858 && !(flags & tf_ptrmem_ok) && !flag_ms_extensions)
5860 static int explained;
5862 if (!(flags & tf_error))
5863 return error_mark_node;
5865 pedwarn ("assuming pointer to member `%D'", fn);
5868 pedwarn ("(a pointer to member can only be formed with `&%E')", fn);
5873 /* If we're doing overload resolution purely for the purpose of
5874 determining conversion sequences, we should not consider the
5875 function used. If this conversion sequence is selected, the
5876 function will be marked as used at this point. */
5877 if (!(flags & tf_conv))
5880 if (TYPE_PTRFN_P (target_type) || TYPE_PTRMEMFUNC_P (target_type))
5881 return build_unary_op (ADDR_EXPR, fn, 0);
5884 /* The target must be a REFERENCE_TYPE. Above, build_unary_op
5885 will mark the function as addressed, but here we must do it
5887 cxx_mark_addressable (fn);
5893 /* This function will instantiate the type of the expression given in
5894 RHS to match the type of LHSTYPE. If errors exist, then return
5895 error_mark_node. FLAGS is a bit mask. If TF_ERROR is set, then
5896 we complain on errors. If we are not complaining, never modify rhs,
5897 as overload resolution wants to try many possible instantiations, in
5898 the hope that at least one will work.
5900 For non-recursive calls, LHSTYPE should be a function, pointer to
5901 function, or a pointer to member function. */
5904 instantiate_type (tree lhstype, tree rhs, tsubst_flags_t flags)
5906 tsubst_flags_t flags_in = flags;
5908 flags &= ~tf_ptrmem_ok;
5910 if (TREE_CODE (lhstype) == UNKNOWN_TYPE)
5912 if (flags & tf_error)
5913 error ("not enough type information");
5914 return error_mark_node;
5917 if (TREE_TYPE (rhs) != NULL_TREE && ! (type_unknown_p (rhs)))
5919 if (same_type_p (lhstype, TREE_TYPE (rhs)))
5921 if (flag_ms_extensions
5922 && TYPE_PTRMEMFUNC_P (lhstype)
5923 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (rhs)))
5924 /* Microsoft allows `A::f' to be resolved to a
5925 pointer-to-member. */
5929 if (flags & tf_error)
5930 error ("argument of type `%T' does not match `%T'",
5931 TREE_TYPE (rhs), lhstype);
5932 return error_mark_node;
5936 if (TREE_CODE (rhs) == BASELINK)
5937 rhs = BASELINK_FUNCTIONS (rhs);
5939 /* We don't overwrite rhs if it is an overloaded function.
5940 Copying it would destroy the tree link. */
5941 if (TREE_CODE (rhs) != OVERLOAD)
5942 rhs = copy_node (rhs);
5944 /* This should really only be used when attempting to distinguish
5945 what sort of a pointer to function we have. For now, any
5946 arithmetic operation which is not supported on pointers
5947 is rejected as an error. */
5949 switch (TREE_CODE (rhs))
5956 return error_mark_node;
5963 new_rhs = instantiate_type (build_pointer_type (lhstype),
5964 TREE_OPERAND (rhs, 0), flags);
5965 if (new_rhs == error_mark_node)
5966 return error_mark_node;
5968 TREE_TYPE (rhs) = lhstype;
5969 TREE_OPERAND (rhs, 0) = new_rhs;
5974 rhs = copy_node (TREE_OPERAND (rhs, 0));
5975 TREE_TYPE (rhs) = unknown_type_node;
5976 return instantiate_type (lhstype, rhs, flags);
5980 tree addr = instantiate_type (lhstype, TREE_OPERAND (rhs, 1), flags);
5982 if (addr != error_mark_node
5983 && TREE_SIDE_EFFECTS (TREE_OPERAND (rhs, 0)))
5984 /* Do not lose object's side effects. */
5985 addr = build (COMPOUND_EXPR, TREE_TYPE (addr),
5986 TREE_OPERAND (rhs, 0), addr);
5991 rhs = TREE_OPERAND (rhs, 1);
5992 if (BASELINK_P (rhs))
5993 return instantiate_type (lhstype, BASELINK_FUNCTIONS (rhs), flags_in);
5995 /* This can happen if we are forming a pointer-to-member for a
5997 my_friendly_assert (TREE_CODE (rhs) == TEMPLATE_ID_EXPR, 0);
6001 case TEMPLATE_ID_EXPR:
6003 tree fns = TREE_OPERAND (rhs, 0);
6004 tree args = TREE_OPERAND (rhs, 1);
6007 resolve_address_of_overloaded_function (lhstype, fns, flags_in,
6008 /*template_only=*/true,
6015 resolve_address_of_overloaded_function (lhstype, rhs, flags_in,
6016 /*template_only=*/false,
6017 /*explicit_targs=*/NULL_TREE);
6020 /* Now we should have a baselink. */
6021 my_friendly_assert (BASELINK_P (rhs), 990412);
6023 return instantiate_type (lhstype, BASELINK_FUNCTIONS (rhs), flags);
6026 /* This is too hard for now. */
6028 return error_mark_node;
6033 TREE_OPERAND (rhs, 0)
6034 = instantiate_type (lhstype, TREE_OPERAND (rhs, 0), flags);
6035 if (TREE_OPERAND (rhs, 0) == error_mark_node)
6036 return error_mark_node;
6037 TREE_OPERAND (rhs, 1)
6038 = instantiate_type (lhstype, TREE_OPERAND (rhs, 1), flags);
6039 if (TREE_OPERAND (rhs, 1) == error_mark_node)
6040 return error_mark_node;
6042 TREE_TYPE (rhs) = lhstype;
6046 case TRUNC_DIV_EXPR:
6047 case FLOOR_DIV_EXPR:
6049 case ROUND_DIV_EXPR:
6051 case TRUNC_MOD_EXPR:
6052 case FLOOR_MOD_EXPR:
6054 case ROUND_MOD_EXPR:
6055 case FIX_ROUND_EXPR:
6056 case FIX_FLOOR_EXPR:
6058 case FIX_TRUNC_EXPR:
6073 case PREINCREMENT_EXPR:
6074 case PREDECREMENT_EXPR:
6075 case POSTINCREMENT_EXPR:
6076 case POSTDECREMENT_EXPR:
6077 if (flags & tf_error)
6078 error ("invalid operation on uninstantiated type");
6079 return error_mark_node;
6081 case TRUTH_AND_EXPR:
6083 case TRUTH_XOR_EXPR:
6090 case TRUTH_ANDIF_EXPR:
6091 case TRUTH_ORIF_EXPR:
6092 case TRUTH_NOT_EXPR:
6093 if (flags & tf_error)
6094 error ("not enough type information");
6095 return error_mark_node;
6098 if (type_unknown_p (TREE_OPERAND (rhs, 0)))
6100 if (flags & tf_error)
6101 error ("not enough type information");
6102 return error_mark_node;
6104 TREE_OPERAND (rhs, 1)
6105 = instantiate_type (lhstype, TREE_OPERAND (rhs, 1), flags);
6106 if (TREE_OPERAND (rhs, 1) == error_mark_node)
6107 return error_mark_node;
6108 TREE_OPERAND (rhs, 2)
6109 = instantiate_type (lhstype, TREE_OPERAND (rhs, 2), flags);
6110 if (TREE_OPERAND (rhs, 2) == error_mark_node)
6111 return error_mark_node;
6113 TREE_TYPE (rhs) = lhstype;
6117 TREE_OPERAND (rhs, 1)
6118 = instantiate_type (lhstype, TREE_OPERAND (rhs, 1), flags);
6119 if (TREE_OPERAND (rhs, 1) == error_mark_node)
6120 return error_mark_node;
6122 TREE_TYPE (rhs) = lhstype;
6127 if (PTRMEM_OK_P (rhs))
6128 flags |= tf_ptrmem_ok;
6130 return instantiate_type (lhstype, TREE_OPERAND (rhs, 0), flags);
6132 case ENTRY_VALUE_EXPR:
6134 return error_mark_node;
6137 return error_mark_node;
6141 return error_mark_node;
6145 /* Return the name of the virtual function pointer field
6146 (as an IDENTIFIER_NODE) for the given TYPE. Note that
6147 this may have to look back through base types to find the
6148 ultimate field name. (For single inheritance, these could
6149 all be the same name. Who knows for multiple inheritance). */
6152 get_vfield_name (tree type)
6154 tree binfo, base_binfo;
6157 for (binfo = TYPE_BINFO (type);
6158 BINFO_BASE_BINFOS (binfo);
6161 base_binfo = BINFO_BASE_BINFO (binfo, 0);
6163 if (BINFO_VIRTUAL_P (base_binfo)
6164 || !TYPE_CONTAINS_VPTR_P (BINFO_TYPE (base_binfo)))
6168 type = BINFO_TYPE (binfo);
6169 buf = alloca (sizeof (VFIELD_NAME_FORMAT) + TYPE_NAME_LENGTH (type) + 2);
6170 sprintf (buf, VFIELD_NAME_FORMAT,
6171 IDENTIFIER_POINTER (constructor_name (type)));
6172 return get_identifier (buf);
6176 print_class_statistics (void)
6178 #ifdef GATHER_STATISTICS
6179 fprintf (stderr, "convert_harshness = %d\n", n_convert_harshness);
6180 fprintf (stderr, "compute_conversion_costs = %d\n", n_compute_conversion_costs);
6183 fprintf (stderr, "vtables = %d; vtable searches = %d\n",
6184 n_vtables, n_vtable_searches);
6185 fprintf (stderr, "vtable entries = %d; vtable elems = %d\n",
6186 n_vtable_entries, n_vtable_elems);
6191 /* Build a dummy reference to ourselves so Derived::Base (and A::A) works,
6192 according to [class]:
6193 The class-name is also inserted
6194 into the scope of the class itself. For purposes of access checking,
6195 the inserted class name is treated as if it were a public member name. */
6198 build_self_reference (void)
6200 tree name = constructor_name (current_class_type);
6201 tree value = build_lang_decl (TYPE_DECL, name, current_class_type);
6204 DECL_NONLOCAL (value) = 1;
6205 DECL_CONTEXT (value) = current_class_type;
6206 DECL_ARTIFICIAL (value) = 1;
6207 SET_DECL_SELF_REFERENCE_P (value);
6209 if (processing_template_decl)
6210 value = push_template_decl (value);
6212 saved_cas = current_access_specifier;
6213 current_access_specifier = access_public_node;
6214 finish_member_declaration (value);
6215 current_access_specifier = saved_cas;
6218 /* Returns 1 if TYPE contains only padding bytes. */
6221 is_empty_class (tree type)
6223 if (type == error_mark_node)
6226 if (! IS_AGGR_TYPE (type))
6229 /* In G++ 3.2, whether or not a class was empty was determined by
6230 looking at its size. */
6231 if (abi_version_at_least (2))
6232 return CLASSTYPE_EMPTY_P (type);
6234 return integer_zerop (CLASSTYPE_SIZE (type));
6237 /* Returns true if TYPE contains an empty class. */
6240 contains_empty_class_p (tree type)
6242 if (is_empty_class (type))
6244 if (CLASS_TYPE_P (type))
6249 for (i = 0; i < BINFO_N_BASE_BINFOS (TYPE_BINFO (type)); ++i)
6250 if (contains_empty_class_p
6251 (BINFO_TYPE (BINFO_BASE_BINFO (TYPE_BINFO (type), i))))
6253 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
6254 if (TREE_CODE (field) == FIELD_DECL
6255 && !DECL_ARTIFICIAL (field)
6256 && is_empty_class (TREE_TYPE (field)))
6259 else if (TREE_CODE (type) == ARRAY_TYPE)
6260 return contains_empty_class_p (TREE_TYPE (type));
6264 /* Find the enclosing class of the given NODE. NODE can be a *_DECL or
6265 a *_TYPE node. NODE can also be a local class. */
6268 get_enclosing_class (tree type)
6272 while (node && TREE_CODE (node) != NAMESPACE_DECL)
6274 switch (TREE_CODE_CLASS (TREE_CODE (node)))
6277 node = DECL_CONTEXT (node);
6283 node = TYPE_CONTEXT (node);
6293 /* Note that NAME was looked up while the current class was being
6294 defined and that the result of that lookup was DECL. */
6297 maybe_note_name_used_in_class (tree name, tree decl)
6299 splay_tree names_used;
6301 /* If we're not defining a class, there's nothing to do. */
6302 if (!(innermost_scope_kind() == sk_class
6303 && TYPE_BEING_DEFINED (current_class_type)))
6306 /* If there's already a binding for this NAME, then we don't have
6307 anything to worry about. */
6308 if (lookup_member (current_class_type, name,
6309 /*protect=*/0, /*want_type=*/false))
6312 if (!current_class_stack[current_class_depth - 1].names_used)
6313 current_class_stack[current_class_depth - 1].names_used
6314 = splay_tree_new (splay_tree_compare_pointers, 0, 0);
6315 names_used = current_class_stack[current_class_depth - 1].names_used;
6317 splay_tree_insert (names_used,
6318 (splay_tree_key) name,
6319 (splay_tree_value) decl);
6322 /* Note that NAME was declared (as DECL) in the current class. Check
6323 to see that the declaration is valid. */
6326 note_name_declared_in_class (tree name, tree decl)
6328 splay_tree names_used;
6331 /* Look to see if we ever used this name. */
6333 = current_class_stack[current_class_depth - 1].names_used;
6337 n = splay_tree_lookup (names_used, (splay_tree_key) name);
6340 /* [basic.scope.class]
6342 A name N used in a class S shall refer to the same declaration
6343 in its context and when re-evaluated in the completed scope of
6345 error ("declaration of `%#D'", decl);
6346 cp_error_at ("changes meaning of `%D' from `%+#D'",
6347 DECL_NAME (OVL_CURRENT (decl)),
6352 /* Returns the VAR_DECL for the complete vtable associated with BINFO.
6353 Secondary vtables are merged with primary vtables; this function
6354 will return the VAR_DECL for the primary vtable. */
6357 get_vtbl_decl_for_binfo (tree binfo)
6361 decl = BINFO_VTABLE (binfo);
6362 if (decl && TREE_CODE (decl) == PLUS_EXPR)
6364 my_friendly_assert (TREE_CODE (TREE_OPERAND (decl, 0)) == ADDR_EXPR,
6366 decl = TREE_OPERAND (TREE_OPERAND (decl, 0), 0);
6369 my_friendly_assert (TREE_CODE (decl) == VAR_DECL, 20000403);
6374 /* Returns the binfo for the primary base of BINFO. If the resulting
6375 BINFO is a virtual base, and it is inherited elsewhere in the
6376 hierarchy, then the returned binfo might not be the primary base of
6377 BINFO in the complete object. Check BINFO_PRIMARY_P or
6378 BINFO_LOST_PRIMARY_P to be sure. */
6381 get_primary_binfo (tree binfo)
6386 primary_base = CLASSTYPE_PRIMARY_BINFO (BINFO_TYPE (binfo));
6390 result = copied_binfo (primary_base, binfo);
6394 /* If INDENTED_P is zero, indent to INDENT. Return nonzero. */
6397 maybe_indent_hierarchy (FILE * stream, int indent, int indented_p)
6400 fprintf (stream, "%*s", indent, "");
6404 /* Dump the offsets of all the bases rooted at BINFO to STREAM.
6405 INDENT should be zero when called from the top level; it is
6406 incremented recursively. IGO indicates the next expected BINFO in
6407 inheritance graph ordering. */
6410 dump_class_hierarchy_r (FILE *stream,
6419 indented = maybe_indent_hierarchy (stream, indent, 0);
6420 fprintf (stream, "%s (0x%lx) ",
6421 type_as_string (binfo, TFF_PLAIN_IDENTIFIER),
6422 (unsigned long) binfo);
6425 fprintf (stream, "alternative-path\n");
6428 igo = TREE_CHAIN (binfo);
6430 fprintf (stream, HOST_WIDE_INT_PRINT_DEC,
6431 tree_low_cst (BINFO_OFFSET (binfo), 0));
6432 if (is_empty_class (BINFO_TYPE (binfo)))
6433 fprintf (stream, " empty");
6434 else if (CLASSTYPE_NEARLY_EMPTY_P (BINFO_TYPE (binfo)))
6435 fprintf (stream, " nearly-empty");
6436 if (BINFO_VIRTUAL_P (binfo))
6437 fprintf (stream, " virtual");
6438 fprintf (stream, "\n");
6441 if (BINFO_PRIMARY_BASE_OF (binfo))
6443 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6444 fprintf (stream, " primary-for %s (0x%lx)",
6445 type_as_string (BINFO_PRIMARY_BASE_OF (binfo),
6446 TFF_PLAIN_IDENTIFIER),
6447 (unsigned long)BINFO_PRIMARY_BASE_OF (binfo));
6449 if (BINFO_LOST_PRIMARY_P (binfo))
6451 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6452 fprintf (stream, " lost-primary");
6455 fprintf (stream, "\n");
6457 if (!(flags & TDF_SLIM))
6461 if (BINFO_SUBVTT_INDEX (binfo))
6463 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6464 fprintf (stream, " subvttidx=%s",
6465 expr_as_string (BINFO_SUBVTT_INDEX (binfo),
6466 TFF_PLAIN_IDENTIFIER));
6468 if (BINFO_VPTR_INDEX (binfo))
6470 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6471 fprintf (stream, " vptridx=%s",
6472 expr_as_string (BINFO_VPTR_INDEX (binfo),
6473 TFF_PLAIN_IDENTIFIER));
6475 if (BINFO_VPTR_FIELD (binfo))
6477 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6478 fprintf (stream, " vbaseoffset=%s",
6479 expr_as_string (BINFO_VPTR_FIELD (binfo),
6480 TFF_PLAIN_IDENTIFIER));
6482 if (BINFO_VTABLE (binfo))
6484 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6485 fprintf (stream, " vptr=%s",
6486 expr_as_string (BINFO_VTABLE (binfo),
6487 TFF_PLAIN_IDENTIFIER));
6491 fprintf (stream, "\n");
6494 base_binfos = BINFO_BASE_BINFOS (binfo);
6499 n = TREE_VEC_LENGTH (base_binfos);
6500 for (ix = 0; ix != n; ix++)
6502 tree base_binfo = TREE_VEC_ELT (base_binfos, ix);
6504 igo = dump_class_hierarchy_r (stream, flags, base_binfo,
6512 /* Dump the BINFO hierarchy for T. */
6515 dump_class_hierarchy_1 (FILE *stream, int flags, tree t)
6517 fprintf (stream, "Class %s\n", type_as_string (t, TFF_PLAIN_IDENTIFIER));
6518 fprintf (stream, " size=%lu align=%lu\n",
6519 (unsigned long)(tree_low_cst (TYPE_SIZE (t), 0) / BITS_PER_UNIT),
6520 (unsigned long)(TYPE_ALIGN (t) / BITS_PER_UNIT));
6521 fprintf (stream, " base size=%lu base align=%lu\n",
6522 (unsigned long)(tree_low_cst (TYPE_SIZE (CLASSTYPE_AS_BASE (t)), 0)
6524 (unsigned long)(TYPE_ALIGN (CLASSTYPE_AS_BASE (t))
6526 dump_class_hierarchy_r (stream, flags, TYPE_BINFO (t), TYPE_BINFO (t), 0);
6527 fprintf (stream, "\n");
6530 /* Debug interface to hierarchy dumping. */
6533 debug_class (tree t)
6535 dump_class_hierarchy_1 (stderr, TDF_SLIM, t);
6539 dump_class_hierarchy (tree t)
6542 FILE *stream = dump_begin (TDI_class, &flags);
6546 dump_class_hierarchy_1 (stream, flags, t);
6547 dump_end (TDI_class, stream);
6552 dump_array (FILE * stream, tree decl)
6557 tree size = TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (decl)));
6559 elt = (tree_low_cst (TYPE_SIZE (TREE_TYPE (TREE_TYPE (decl))), 0)
6561 fprintf (stream, "%s:", decl_as_string (decl, TFF_PLAIN_IDENTIFIER));
6562 fprintf (stream, " %s entries",
6563 expr_as_string (size_binop (PLUS_EXPR, size, size_one_node),
6564 TFF_PLAIN_IDENTIFIER));
6565 fprintf (stream, "\n");
6567 for (ix = 0, inits = CONSTRUCTOR_ELTS (DECL_INITIAL (decl));
6568 inits; ix++, inits = TREE_CHAIN (inits))
6569 fprintf (stream, "%-4ld %s\n", (long)(ix * elt),
6570 expr_as_string (TREE_VALUE (inits), TFF_PLAIN_IDENTIFIER));
6574 dump_vtable (tree t, tree binfo, tree vtable)
6577 FILE *stream = dump_begin (TDI_class, &flags);
6582 if (!(flags & TDF_SLIM))
6584 int ctor_vtbl_p = TYPE_BINFO (t) != binfo;
6586 fprintf (stream, "%s for %s",
6587 ctor_vtbl_p ? "Construction vtable" : "Vtable",
6588 type_as_string (binfo, TFF_PLAIN_IDENTIFIER));
6591 if (!BINFO_VIRTUAL_P (binfo))
6592 fprintf (stream, " (0x%lx instance)", (unsigned long)binfo);
6593 fprintf (stream, " in %s", type_as_string (t, TFF_PLAIN_IDENTIFIER));
6595 fprintf (stream, "\n");
6596 dump_array (stream, vtable);
6597 fprintf (stream, "\n");
6600 dump_end (TDI_class, stream);
6604 dump_vtt (tree t, tree vtt)
6607 FILE *stream = dump_begin (TDI_class, &flags);
6612 if (!(flags & TDF_SLIM))
6614 fprintf (stream, "VTT for %s\n",
6615 type_as_string (t, TFF_PLAIN_IDENTIFIER));
6616 dump_array (stream, vtt);
6617 fprintf (stream, "\n");
6620 dump_end (TDI_class, stream);
6623 /* Dump a function or thunk and its thunkees. */
6626 dump_thunk (FILE *stream, int indent, tree thunk)
6628 static const char spaces[] = " ";
6629 tree name = DECL_NAME (thunk);
6632 fprintf (stream, "%.*s%p %s %s", indent, spaces,
6634 !DECL_THUNK_P (thunk) ? "function"
6635 : DECL_THIS_THUNK_P (thunk) ? "this-thunk" : "covariant-thunk",
6636 name ? IDENTIFIER_POINTER (name) : "<unset>");
6637 if (DECL_THUNK_P (thunk))
6639 HOST_WIDE_INT fixed_adjust = THUNK_FIXED_OFFSET (thunk);
6640 tree virtual_adjust = THUNK_VIRTUAL_OFFSET (thunk);
6642 fprintf (stream, " fixed=" HOST_WIDE_INT_PRINT_DEC, fixed_adjust);
6643 if (!virtual_adjust)
6645 else if (DECL_THIS_THUNK_P (thunk))
6646 fprintf (stream, " vcall=" HOST_WIDE_INT_PRINT_DEC,
6647 tree_low_cst (virtual_adjust, 0));
6649 fprintf (stream, " vbase=" HOST_WIDE_INT_PRINT_DEC "(%s)",
6650 tree_low_cst (BINFO_VPTR_FIELD (virtual_adjust), 0),
6651 type_as_string (BINFO_TYPE (virtual_adjust), TFF_SCOPE));
6652 if (THUNK_ALIAS (thunk))
6653 fprintf (stream, " alias to %p", (void *)THUNK_ALIAS (thunk));
6655 fprintf (stream, "\n");
6656 for (thunks = DECL_THUNKS (thunk); thunks; thunks = TREE_CHAIN (thunks))
6657 dump_thunk (stream, indent + 2, thunks);
6660 /* Dump the thunks for FN. */
6663 debug_thunks (tree fn)
6665 dump_thunk (stderr, 0, fn);
6668 /* Virtual function table initialization. */
6670 /* Create all the necessary vtables for T and its base classes. */
6673 finish_vtbls (tree t)
6678 /* We lay out the primary and secondary vtables in one contiguous
6679 vtable. The primary vtable is first, followed by the non-virtual
6680 secondary vtables in inheritance graph order. */
6681 list = build_tree_list (BINFO_VTABLE (TYPE_BINFO (t)), NULL_TREE);
6682 accumulate_vtbl_inits (TYPE_BINFO (t), TYPE_BINFO (t),
6683 TYPE_BINFO (t), t, list);
6685 /* Then come the virtual bases, also in inheritance graph order. */
6686 for (vbase = TYPE_BINFO (t); vbase; vbase = TREE_CHAIN (vbase))
6688 if (!BINFO_VIRTUAL_P (vbase))
6690 accumulate_vtbl_inits (vbase, vbase, TYPE_BINFO (t), t, list);
6693 if (BINFO_VTABLE (TYPE_BINFO (t)))
6694 initialize_vtable (TYPE_BINFO (t), TREE_VALUE (list));
6697 /* Initialize the vtable for BINFO with the INITS. */
6700 initialize_vtable (tree binfo, tree inits)
6704 layout_vtable_decl (binfo, list_length (inits));
6705 decl = get_vtbl_decl_for_binfo (binfo);
6706 initialize_array (decl, inits);
6707 dump_vtable (BINFO_TYPE (binfo), binfo, decl);
6710 /* Initialize DECL (a declaration for a namespace-scope array) with
6714 initialize_array (tree decl, tree inits)
6718 context = DECL_CONTEXT (decl);
6719 DECL_CONTEXT (decl) = NULL_TREE;
6720 DECL_INITIAL (decl) = build_constructor (NULL_TREE, inits);
6721 cp_finish_decl (decl, DECL_INITIAL (decl), NULL_TREE, 0);
6722 DECL_CONTEXT (decl) = context;
6725 /* Build the VTT (virtual table table) for T.
6726 A class requires a VTT if it has virtual bases.
6729 1 - primary virtual pointer for complete object T
6730 2 - secondary VTTs for each direct non-virtual base of T which requires a
6732 3 - secondary virtual pointers for each direct or indirect base of T which
6733 has virtual bases or is reachable via a virtual path from T.
6734 4 - secondary VTTs for each direct or indirect virtual base of T.
6736 Secondary VTTs look like complete object VTTs without part 4. */
6746 /* Build up the initializers for the VTT. */
6748 index = size_zero_node;
6749 build_vtt_inits (TYPE_BINFO (t), t, &inits, &index);
6751 /* If we didn't need a VTT, we're done. */
6755 /* Figure out the type of the VTT. */
6756 type = build_index_type (size_int (list_length (inits) - 1));
6757 type = build_cplus_array_type (const_ptr_type_node, type);
6759 /* Now, build the VTT object itself. */
6760 vtt = build_vtable (t, get_vtt_name (t), type);
6761 initialize_array (vtt, inits);
6762 /* Add the VTT to the vtables list. */
6763 TREE_CHAIN (vtt) = TREE_CHAIN (CLASSTYPE_VTABLES (t));
6764 TREE_CHAIN (CLASSTYPE_VTABLES (t)) = vtt;
6769 /* When building a secondary VTT, BINFO_VTABLE is set to a TREE_LIST with
6770 PURPOSE the RTTI_BINFO, VALUE the real vtable pointer for this binfo,
6771 and CHAIN the vtable pointer for this binfo after construction is
6772 complete. VALUE can also be another BINFO, in which case we recurse. */
6775 binfo_ctor_vtable (tree binfo)
6781 vt = BINFO_VTABLE (binfo);
6782 if (TREE_CODE (vt) == TREE_LIST)
6783 vt = TREE_VALUE (vt);
6784 if (TREE_CODE (vt) == TREE_BINFO)
6793 /* Recursively build the VTT-initializer for BINFO (which is in the
6794 hierarchy dominated by T). INITS points to the end of the initializer
6795 list to date. INDEX is the VTT index where the next element will be
6796 replaced. Iff BINFO is the binfo for T, this is the top level VTT (i.e.
6797 not a subvtt for some base of T). When that is so, we emit the sub-VTTs
6798 for virtual bases of T. When it is not so, we build the constructor
6799 vtables for the BINFO-in-T variant. */
6802 build_vtt_inits (tree binfo, tree t, tree* inits, tree* index)
6807 tree secondary_vptrs;
6808 int top_level_p = same_type_p (TREE_TYPE (binfo), t);
6810 /* We only need VTTs for subobjects with virtual bases. */
6811 if (!TYPE_USES_VIRTUAL_BASECLASSES (BINFO_TYPE (binfo)))
6814 /* We need to use a construction vtable if this is not the primary
6818 build_ctor_vtbl_group (binfo, t);
6820 /* Record the offset in the VTT where this sub-VTT can be found. */
6821 BINFO_SUBVTT_INDEX (binfo) = *index;
6824 /* Add the address of the primary vtable for the complete object. */
6825 init = binfo_ctor_vtable (binfo);
6826 *inits = build_tree_list (NULL_TREE, init);
6827 inits = &TREE_CHAIN (*inits);
6830 my_friendly_assert (!BINFO_VPTR_INDEX (binfo), 20010129);
6831 BINFO_VPTR_INDEX (binfo) = *index;
6833 *index = size_binop (PLUS_EXPR, *index, TYPE_SIZE_UNIT (ptr_type_node));
6835 /* Recursively add the secondary VTTs for non-virtual bases. */
6836 for (i = 0; i < BINFO_N_BASE_BINFOS (binfo); ++i)
6838 b = BINFO_BASE_BINFO (binfo, i);
6839 if (!BINFO_VIRTUAL_P (b))
6840 inits = build_vtt_inits (BINFO_BASE_BINFO (binfo, i), t,
6844 /* Add secondary virtual pointers for all subobjects of BINFO with
6845 either virtual bases or reachable along a virtual path, except
6846 subobjects that are non-virtual primary bases. */
6847 secondary_vptrs = tree_cons (t, NULL_TREE, BINFO_TYPE (binfo));
6848 TREE_TYPE (secondary_vptrs) = *index;
6849 VTT_TOP_LEVEL_P (secondary_vptrs) = top_level_p;
6850 VTT_MARKED_BINFO_P (secondary_vptrs) = 0;
6852 dfs_walk_real (binfo,
6853 dfs_build_secondary_vptr_vtt_inits,
6855 dfs_ctor_vtable_bases_queue_p,
6857 VTT_MARKED_BINFO_P (secondary_vptrs) = 1;
6858 dfs_walk (binfo, dfs_unmark, dfs_ctor_vtable_bases_queue_p,
6861 *index = TREE_TYPE (secondary_vptrs);
6863 /* The secondary vptrs come back in reverse order. After we reverse
6864 them, and add the INITS, the last init will be the first element
6866 secondary_vptrs = TREE_VALUE (secondary_vptrs);
6867 if (secondary_vptrs)
6869 *inits = nreverse (secondary_vptrs);
6870 inits = &TREE_CHAIN (secondary_vptrs);
6871 my_friendly_assert (*inits == NULL_TREE, 20000517);
6874 /* Add the secondary VTTs for virtual bases. */
6876 for (b = TYPE_BINFO (BINFO_TYPE (binfo)); b; b = TREE_CHAIN (b))
6878 if (!BINFO_VIRTUAL_P (b))
6881 inits = build_vtt_inits (b, t, inits, index);
6886 tree data = tree_cons (t, binfo, NULL_TREE);
6887 VTT_TOP_LEVEL_P (data) = 0;
6888 VTT_MARKED_BINFO_P (data) = 0;
6890 dfs_walk (binfo, dfs_fixup_binfo_vtbls,
6891 dfs_ctor_vtable_bases_queue_p,
6898 /* Called from build_vtt_inits via dfs_walk. BINFO is the binfo for the base
6899 in most derived. DATA is a TREE_LIST who's TREE_CHAIN is the type of the
6900 base being constructed whilst this secondary vptr is live. The
6901 TREE_TOP_LEVEL flag indicates that this is the primary VTT. */
6904 dfs_build_secondary_vptr_vtt_inits (tree binfo, void *data)
6914 top_level_p = VTT_TOP_LEVEL_P (l);
6916 BINFO_MARKED (binfo) = 1;
6918 /* We don't care about bases that don't have vtables. */
6919 if (!TYPE_VFIELD (BINFO_TYPE (binfo)))
6922 /* We're only interested in proper subobjects of T. */
6923 if (same_type_p (BINFO_TYPE (binfo), t))
6926 /* We're not interested in non-virtual primary bases. */
6927 if (!BINFO_VIRTUAL_P (binfo) && BINFO_PRIMARY_P (binfo))
6930 /* If BINFO has virtual bases or is reachable via a virtual path
6931 from T, it'll have a secondary vptr. */
6932 if (!TYPE_USES_VIRTUAL_BASECLASSES (BINFO_TYPE (binfo))
6933 && !binfo_via_virtual (binfo, t))
6936 /* Record the index where this secondary vptr can be found. */
6937 index = TREE_TYPE (l);
6940 my_friendly_assert (!BINFO_VPTR_INDEX (binfo), 20010129);
6941 BINFO_VPTR_INDEX (binfo) = index;
6943 TREE_TYPE (l) = size_binop (PLUS_EXPR, index,
6944 TYPE_SIZE_UNIT (ptr_type_node));
6946 /* Add the initializer for the secondary vptr itself. */
6947 if (top_level_p && BINFO_VIRTUAL_P (binfo))
6949 /* It's a primary virtual base, and this is not the construction
6950 vtable. Find the base this is primary of in the inheritance graph,
6951 and use that base's vtable now. */
6952 while (BINFO_PRIMARY_BASE_OF (binfo))
6953 binfo = BINFO_PRIMARY_BASE_OF (binfo);
6955 init = binfo_ctor_vtable (binfo);
6956 TREE_VALUE (l) = tree_cons (NULL_TREE, init, TREE_VALUE (l));
6961 /* dfs_walk_real predicate for building vtables. DATA is a TREE_LIST,
6962 VTT_MARKED_BINFO_P indicates whether marked or unmarked bases
6963 should be walked. TREE_PURPOSE is the TREE_TYPE that dominates the
6967 dfs_ctor_vtable_bases_queue_p (tree derived, int ix,
6970 tree binfo = BINFO_BASE_BINFO (derived, ix);
6972 if (!BINFO_MARKED (binfo) == VTT_MARKED_BINFO_P ((tree) data))
6977 /* Called from build_vtt_inits via dfs_walk. After building constructor
6978 vtables and generating the sub-vtt from them, we need to restore the
6979 BINFO_VTABLES that were scribbled on. DATA is a TREE_LIST whose
6980 TREE_VALUE is the TREE_TYPE of the base whose sub vtt was generated. */
6983 dfs_fixup_binfo_vtbls (tree binfo, void* data)
6985 BINFO_MARKED (binfo) = 0;
6987 /* We don't care about bases that don't have vtables. */
6988 if (!TYPE_VFIELD (BINFO_TYPE (binfo)))
6991 /* If we scribbled the construction vtable vptr into BINFO, clear it
6993 if (BINFO_VTABLE (binfo)
6994 && TREE_CODE (BINFO_VTABLE (binfo)) == TREE_LIST
6995 && (TREE_PURPOSE (BINFO_VTABLE (binfo))
6996 == TREE_VALUE ((tree) data)))
6997 BINFO_VTABLE (binfo) = TREE_CHAIN (BINFO_VTABLE (binfo));
7002 /* Build the construction vtable group for BINFO which is in the
7003 hierarchy dominated by T. */
7006 build_ctor_vtbl_group (tree binfo, tree t)
7015 /* See if we've already created this construction vtable group. */
7016 id = mangle_ctor_vtbl_for_type (t, binfo);
7017 if (IDENTIFIER_GLOBAL_VALUE (id))
7020 my_friendly_assert (!same_type_p (BINFO_TYPE (binfo), t), 20010124);
7021 /* Build a version of VTBL (with the wrong type) for use in
7022 constructing the addresses of secondary vtables in the
7023 construction vtable group. */
7024 vtbl = build_vtable (t, id, ptr_type_node);
7025 list = build_tree_list (vtbl, NULL_TREE);
7026 accumulate_vtbl_inits (binfo, TYPE_BINFO (TREE_TYPE (binfo)),
7029 /* Add the vtables for each of our virtual bases using the vbase in T
7031 for (vbase = TYPE_BINFO (BINFO_TYPE (binfo));
7033 vbase = TREE_CHAIN (vbase))
7037 if (!BINFO_VIRTUAL_P (vbase))
7039 b = copied_binfo (vbase, binfo);
7041 accumulate_vtbl_inits (b, vbase, binfo, t, list);
7043 inits = TREE_VALUE (list);
7045 /* Figure out the type of the construction vtable. */
7046 type = build_index_type (size_int (list_length (inits) - 1));
7047 type = build_cplus_array_type (vtable_entry_type, type);
7048 TREE_TYPE (vtbl) = type;
7050 /* Initialize the construction vtable. */
7051 CLASSTYPE_VTABLES (t) = chainon (CLASSTYPE_VTABLES (t), vtbl);
7052 initialize_array (vtbl, inits);
7053 dump_vtable (t, binfo, vtbl);
7056 /* Add the vtbl initializers for BINFO (and its bases other than
7057 non-virtual primaries) to the list of INITS. BINFO is in the
7058 hierarchy dominated by T. RTTI_BINFO is the binfo within T of
7059 the constructor the vtbl inits should be accumulated for. (If this
7060 is the complete object vtbl then RTTI_BINFO will be TYPE_BINFO (T).)
7061 ORIG_BINFO is the binfo for this object within BINFO_TYPE (RTTI_BINFO).
7062 BINFO is the active base equivalent of ORIG_BINFO in the inheritance
7063 graph of T. Both BINFO and ORIG_BINFO will have the same BINFO_TYPE,
7064 but are not necessarily the same in terms of layout. */
7067 accumulate_vtbl_inits (tree binfo,
7074 int ctor_vtbl_p = !same_type_p (BINFO_TYPE (rtti_binfo), t);
7076 my_friendly_assert (same_type_p (BINFO_TYPE (binfo),
7077 BINFO_TYPE (orig_binfo)),
7080 /* If it doesn't have a vptr, we don't do anything. */
7081 if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
7084 /* If we're building a construction vtable, we're not interested in
7085 subobjects that don't require construction vtables. */
7087 && !TYPE_USES_VIRTUAL_BASECLASSES (BINFO_TYPE (binfo))
7088 && !binfo_via_virtual (orig_binfo, BINFO_TYPE (rtti_binfo)))
7091 /* Build the initializers for the BINFO-in-T vtable. */
7093 = chainon (TREE_VALUE (inits),
7094 dfs_accumulate_vtbl_inits (binfo, orig_binfo,
7095 rtti_binfo, t, inits));
7097 /* Walk the BINFO and its bases. We walk in preorder so that as we
7098 initialize each vtable we can figure out at what offset the
7099 secondary vtable lies from the primary vtable. We can't use
7100 dfs_walk here because we need to iterate through bases of BINFO
7101 and RTTI_BINFO simultaneously. */
7102 for (i = 0; i < BINFO_N_BASE_BINFOS (binfo); ++i)
7104 tree base_binfo = BINFO_BASE_BINFO (binfo, i);
7106 /* Skip virtual bases. */
7107 if (BINFO_VIRTUAL_P (base_binfo))
7109 accumulate_vtbl_inits (base_binfo,
7110 BINFO_BASE_BINFO (orig_binfo, i),
7116 /* Called from accumulate_vtbl_inits. Returns the initializers for
7117 the BINFO vtable. */
7120 dfs_accumulate_vtbl_inits (tree binfo,
7126 tree inits = NULL_TREE;
7127 tree vtbl = NULL_TREE;
7128 int ctor_vtbl_p = !same_type_p (BINFO_TYPE (rtti_binfo), t);
7131 && BINFO_VIRTUAL_P (orig_binfo) && BINFO_PRIMARY_P (orig_binfo))
7133 /* In the hierarchy of BINFO_TYPE (RTTI_BINFO), this is a
7134 primary virtual base. If it is not the same primary in
7135 the hierarchy of T, we'll need to generate a ctor vtable
7136 for it, to place at its location in T. If it is the same
7137 primary, we still need a VTT entry for the vtable, but it
7138 should point to the ctor vtable for the base it is a
7139 primary for within the sub-hierarchy of RTTI_BINFO.
7141 There are three possible cases:
7143 1) We are in the same place.
7144 2) We are a primary base within a lost primary virtual base of
7146 3) We are primary to something not a base of RTTI_BINFO. */
7148 tree b = BINFO_PRIMARY_BASE_OF (binfo);
7149 tree last = NULL_TREE;
7151 /* First, look through the bases we are primary to for RTTI_BINFO
7152 or a virtual base. */
7153 for (; b; b = BINFO_PRIMARY_BASE_OF (b))
7156 if (BINFO_VIRTUAL_P (b) || b == rtti_binfo)
7159 /* If we run out of primary links, keep looking down our
7160 inheritance chain; we might be an indirect primary. */
7162 for (b = last; b; b = BINFO_INHERITANCE_CHAIN (b))
7163 if (BINFO_VIRTUAL_P (b) || b == rtti_binfo)
7166 /* If we found RTTI_BINFO, this is case 1. If we found a virtual
7167 base B and it is a base of RTTI_BINFO, this is case 2. In
7168 either case, we share our vtable with LAST, i.e. the
7169 derived-most base within B of which we are a primary. */
7171 || (b && binfo_for_vbase (BINFO_TYPE (b), BINFO_TYPE (rtti_binfo))))
7172 /* Just set our BINFO_VTABLE to point to LAST, as we may not have
7173 set LAST's BINFO_VTABLE yet. We'll extract the actual vptr in
7174 binfo_ctor_vtable after everything's been set up. */
7177 /* Otherwise, this is case 3 and we get our own. */
7179 else if (!BINFO_NEW_VTABLE_MARKED (orig_binfo))
7187 /* Compute the initializer for this vtable. */
7188 inits = build_vtbl_initializer (binfo, orig_binfo, t, rtti_binfo,
7191 /* Figure out the position to which the VPTR should point. */
7192 vtbl = TREE_PURPOSE (l);
7193 vtbl = build1 (ADDR_EXPR, vtbl_ptr_type_node, vtbl);
7194 index = size_binop (PLUS_EXPR,
7195 size_int (non_fn_entries),
7196 size_int (list_length (TREE_VALUE (l))));
7197 index = size_binop (MULT_EXPR,
7198 TYPE_SIZE_UNIT (vtable_entry_type),
7200 vtbl = build (PLUS_EXPR, TREE_TYPE (vtbl), vtbl, index);
7204 /* For a construction vtable, we can't overwrite BINFO_VTABLE.
7205 So, we make a TREE_LIST. Later, dfs_fixup_binfo_vtbls will
7206 straighten this out. */
7207 BINFO_VTABLE (binfo) = tree_cons (rtti_binfo, vtbl, BINFO_VTABLE (binfo));
7208 else if (BINFO_PRIMARY_P (binfo) && BINFO_VIRTUAL_P (binfo))
7211 /* For an ordinary vtable, set BINFO_VTABLE. */
7212 BINFO_VTABLE (binfo) = vtbl;
7217 /* Construct the initializer for BINFO's virtual function table. BINFO
7218 is part of the hierarchy dominated by T. If we're building a
7219 construction vtable, the ORIG_BINFO is the binfo we should use to
7220 find the actual function pointers to put in the vtable - but they
7221 can be overridden on the path to most-derived in the graph that
7222 ORIG_BINFO belongs. Otherwise,
7223 ORIG_BINFO should be the same as BINFO. The RTTI_BINFO is the
7224 BINFO that should be indicated by the RTTI information in the
7225 vtable; it will be a base class of T, rather than T itself, if we
7226 are building a construction vtable.
7228 The value returned is a TREE_LIST suitable for wrapping in a
7229 CONSTRUCTOR to use as the DECL_INITIAL for a vtable. If
7230 NON_FN_ENTRIES_P is not NULL, *NON_FN_ENTRIES_P is set to the
7231 number of non-function entries in the vtable.
7233 It might seem that this function should never be called with a
7234 BINFO for which BINFO_PRIMARY_P holds, the vtable for such a
7235 base is always subsumed by a derived class vtable. However, when
7236 we are building construction vtables, we do build vtables for
7237 primary bases; we need these while the primary base is being
7241 build_vtbl_initializer (tree binfo,
7245 int* non_fn_entries_p)
7253 /* Initialize VID. */
7254 memset (&vid, 0, sizeof (vid));
7257 vid.rtti_binfo = rtti_binfo;
7258 vid.last_init = &vid.inits;
7259 vid.primary_vtbl_p = (binfo == TYPE_BINFO (t));
7260 vid.ctor_vtbl_p = !same_type_p (BINFO_TYPE (rtti_binfo), t);
7261 vid.generate_vcall_entries = true;
7262 /* The first vbase or vcall offset is at index -3 in the vtable. */
7263 vid.index = ssize_int (-3 * TARGET_VTABLE_DATA_ENTRY_DISTANCE);
7265 /* Add entries to the vtable for RTTI. */
7266 build_rtti_vtbl_entries (binfo, &vid);
7268 /* Create an array for keeping track of the functions we've
7269 processed. When we see multiple functions with the same
7270 signature, we share the vcall offsets. */
7271 VARRAY_TREE_INIT (vid.fns, 32, "fns");
7272 /* Add the vcall and vbase offset entries. */
7273 build_vcall_and_vbase_vtbl_entries (binfo, &vid);
7275 /* Clear BINFO_VTABLE_PATH_MARKED; it's set by
7276 build_vbase_offset_vtbl_entries. */
7277 for (ix = 0; (vbinfo = VEC_iterate
7278 (tree, CLASSTYPE_VBASECLASSES (t), ix)); ix++)
7279 BINFO_VTABLE_PATH_MARKED (vbinfo) = 0;
7281 /* If the target requires padding between data entries, add that now. */
7282 if (TARGET_VTABLE_DATA_ENTRY_DISTANCE > 1)
7286 for (prev = &vid.inits; (cur = *prev); prev = &TREE_CHAIN (cur))
7291 for (i = 1; i < TARGET_VTABLE_DATA_ENTRY_DISTANCE; ++i)
7292 add = tree_cons (NULL_TREE,
7293 build1 (NOP_EXPR, vtable_entry_type,
7300 if (non_fn_entries_p)
7301 *non_fn_entries_p = list_length (vid.inits);
7303 /* Go through all the ordinary virtual functions, building up
7305 vfun_inits = NULL_TREE;
7306 for (v = BINFO_VIRTUALS (orig_binfo); v; v = TREE_CHAIN (v))
7310 tree fn, fn_original;
7311 tree init = NULL_TREE;
7315 if (DECL_THUNK_P (fn))
7317 if (!DECL_NAME (fn))
7319 if (THUNK_ALIAS (fn))
7321 fn = THUNK_ALIAS (fn);
7324 fn_original = THUNK_TARGET (fn);
7327 /* If the only definition of this function signature along our
7328 primary base chain is from a lost primary, this vtable slot will
7329 never be used, so just zero it out. This is important to avoid
7330 requiring extra thunks which cannot be generated with the function.
7332 We first check this in update_vtable_entry_for_fn, so we handle
7333 restored primary bases properly; we also need to do it here so we
7334 zero out unused slots in ctor vtables, rather than filling themff
7335 with erroneous values (though harmless, apart from relocation
7337 for (b = binfo; ; b = get_primary_binfo (b))
7339 /* We found a defn before a lost primary; go ahead as normal. */
7340 if (look_for_overrides_here (BINFO_TYPE (b), fn_original))
7343 /* The nearest definition is from a lost primary; clear the
7345 if (BINFO_LOST_PRIMARY_P (b))
7347 init = size_zero_node;
7354 /* Pull the offset for `this', and the function to call, out of
7356 delta = BV_DELTA (v);
7357 vcall_index = BV_VCALL_INDEX (v);
7359 my_friendly_assert (TREE_CODE (delta) == INTEGER_CST, 19990727);
7360 my_friendly_assert (TREE_CODE (fn) == FUNCTION_DECL, 19990727);
7362 /* You can't call an abstract virtual function; it's abstract.
7363 So, we replace these functions with __pure_virtual. */
7364 if (DECL_PURE_VIRTUAL_P (fn_original))
7366 else if (!integer_zerop (delta) || vcall_index)
7368 fn = make_thunk (fn, /*this_adjusting=*/1, delta, vcall_index);
7369 if (!DECL_NAME (fn))
7372 /* Take the address of the function, considering it to be of an
7373 appropriate generic type. */
7374 init = build1 (ADDR_EXPR, vfunc_ptr_type_node, fn);
7377 /* And add it to the chain of initializers. */
7378 if (TARGET_VTABLE_USES_DESCRIPTORS)
7381 if (init == size_zero_node)
7382 for (i = 0; i < TARGET_VTABLE_USES_DESCRIPTORS; ++i)
7383 vfun_inits = tree_cons (NULL_TREE, init, vfun_inits);
7385 for (i = 0; i < TARGET_VTABLE_USES_DESCRIPTORS; ++i)
7387 tree fdesc = build (FDESC_EXPR, vfunc_ptr_type_node,
7388 TREE_OPERAND (init, 0),
7389 build_int_2 (i, 0));
7390 TREE_CONSTANT (fdesc) = 1;
7391 TREE_INVARIANT (fdesc) = 1;
7393 vfun_inits = tree_cons (NULL_TREE, fdesc, vfun_inits);
7397 vfun_inits = tree_cons (NULL_TREE, init, vfun_inits);
7400 /* The initializers for virtual functions were built up in reverse
7401 order; straighten them out now. */
7402 vfun_inits = nreverse (vfun_inits);
7404 /* The negative offset initializers are also in reverse order. */
7405 vid.inits = nreverse (vid.inits);
7407 /* Chain the two together. */
7408 return chainon (vid.inits, vfun_inits);
7411 /* Adds to vid->inits the initializers for the vbase and vcall
7412 offsets in BINFO, which is in the hierarchy dominated by T. */
7415 build_vcall_and_vbase_vtbl_entries (tree binfo, vtbl_init_data* vid)
7419 /* If this is a derived class, we must first create entries
7420 corresponding to the primary base class. */
7421 b = get_primary_binfo (binfo);
7423 build_vcall_and_vbase_vtbl_entries (b, vid);
7425 /* Add the vbase entries for this base. */
7426 build_vbase_offset_vtbl_entries (binfo, vid);
7427 /* Add the vcall entries for this base. */
7428 build_vcall_offset_vtbl_entries (binfo, vid);
7431 /* Returns the initializers for the vbase offset entries in the vtable
7432 for BINFO (which is part of the class hierarchy dominated by T), in
7433 reverse order. VBASE_OFFSET_INDEX gives the vtable index
7434 where the next vbase offset will go. */
7437 build_vbase_offset_vtbl_entries (tree binfo, vtbl_init_data* vid)
7441 tree non_primary_binfo;
7443 /* If there are no virtual baseclasses, then there is nothing to
7445 if (!TYPE_USES_VIRTUAL_BASECLASSES (BINFO_TYPE (binfo)))
7450 /* We might be a primary base class. Go up the inheritance hierarchy
7451 until we find the most derived class of which we are a primary base:
7452 it is the offset of that which we need to use. */
7453 non_primary_binfo = binfo;
7454 while (BINFO_INHERITANCE_CHAIN (non_primary_binfo))
7458 /* If we have reached a virtual base, then it must be a primary
7459 base (possibly multi-level) of vid->binfo, or we wouldn't
7460 have called build_vcall_and_vbase_vtbl_entries for it. But it
7461 might be a lost primary, so just skip down to vid->binfo. */
7462 if (BINFO_VIRTUAL_P (non_primary_binfo))
7464 non_primary_binfo = vid->binfo;
7468 b = BINFO_INHERITANCE_CHAIN (non_primary_binfo);
7469 if (get_primary_binfo (b) != non_primary_binfo)
7471 non_primary_binfo = b;
7474 /* Go through the virtual bases, adding the offsets. */
7475 for (vbase = TYPE_BINFO (BINFO_TYPE (binfo));
7477 vbase = TREE_CHAIN (vbase))
7482 if (!BINFO_VIRTUAL_P (vbase))
7485 /* Find the instance of this virtual base in the complete
7487 b = copied_binfo (vbase, binfo);
7489 /* If we've already got an offset for this virtual base, we
7490 don't need another one. */
7491 if (BINFO_VTABLE_PATH_MARKED (b))
7493 BINFO_VTABLE_PATH_MARKED (b) = 1;
7495 /* Figure out where we can find this vbase offset. */
7496 delta = size_binop (MULT_EXPR,
7499 TYPE_SIZE_UNIT (vtable_entry_type)));
7500 if (vid->primary_vtbl_p)
7501 BINFO_VPTR_FIELD (b) = delta;
7503 if (binfo != TYPE_BINFO (t))
7505 /* The vbase offset had better be the same. */
7506 my_friendly_assert (tree_int_cst_equal (delta,
7507 BINFO_VPTR_FIELD (vbase)),
7511 /* The next vbase will come at a more negative offset. */
7512 vid->index = size_binop (MINUS_EXPR, vid->index,
7513 ssize_int (TARGET_VTABLE_DATA_ENTRY_DISTANCE));
7515 /* The initializer is the delta from BINFO to this virtual base.
7516 The vbase offsets go in reverse inheritance-graph order, and
7517 we are walking in inheritance graph order so these end up in
7519 delta = size_diffop (BINFO_OFFSET (b), BINFO_OFFSET (non_primary_binfo));
7522 = build_tree_list (NULL_TREE,
7523 fold (build1 (NOP_EXPR,
7526 vid->last_init = &TREE_CHAIN (*vid->last_init);
7530 /* Adds the initializers for the vcall offset entries in the vtable
7531 for BINFO (which is part of the class hierarchy dominated by VID->DERIVED)
7535 build_vcall_offset_vtbl_entries (tree binfo, vtbl_init_data* vid)
7537 /* We only need these entries if this base is a virtual base. We
7538 compute the indices -- but do not add to the vtable -- when
7539 building the main vtable for a class. */
7540 if (BINFO_VIRTUAL_P (binfo) || binfo == TYPE_BINFO (vid->derived))
7542 /* We need a vcall offset for each of the virtual functions in this
7543 vtable. For example:
7545 class A { virtual void f (); };
7546 class B1 : virtual public A { virtual void f (); };
7547 class B2 : virtual public A { virtual void f (); };
7548 class C: public B1, public B2 { virtual void f (); };
7550 A C object has a primary base of B1, which has a primary base of A. A
7551 C also has a secondary base of B2, which no longer has a primary base
7552 of A. So the B2-in-C construction vtable needs a secondary vtable for
7553 A, which will adjust the A* to a B2* to call f. We have no way of
7554 knowing what (or even whether) this offset will be when we define B2,
7555 so we store this "vcall offset" in the A sub-vtable and look it up in
7556 a "virtual thunk" for B2::f.
7558 We need entries for all the functions in our primary vtable and
7559 in our non-virtual bases' secondary vtables. */
7561 /* If we are just computing the vcall indices -- but do not need
7562 the actual entries -- not that. */
7563 if (!BINFO_VIRTUAL_P (binfo))
7564 vid->generate_vcall_entries = false;
7565 /* Now, walk through the non-virtual bases, adding vcall offsets. */
7566 add_vcall_offset_vtbl_entries_r (binfo, vid);
7570 /* Build vcall offsets, starting with those for BINFO. */
7573 add_vcall_offset_vtbl_entries_r (tree binfo, vtbl_init_data* vid)
7578 /* Don't walk into virtual bases -- except, of course, for the
7579 virtual base for which we are building vcall offsets. Any
7580 primary virtual base will have already had its offsets generated
7581 through the recursion in build_vcall_and_vbase_vtbl_entries. */
7582 if (BINFO_VIRTUAL_P (binfo) && vid->vbase != binfo)
7585 /* If BINFO has a primary base, process it first. */
7586 primary_binfo = get_primary_binfo (binfo);
7588 add_vcall_offset_vtbl_entries_r (primary_binfo, vid);
7590 /* Add BINFO itself to the list. */
7591 add_vcall_offset_vtbl_entries_1 (binfo, vid);
7593 /* Scan the non-primary bases of BINFO. */
7594 for (i = 0; i < BINFO_N_BASE_BINFOS (binfo); ++i)
7598 base_binfo = BINFO_BASE_BINFO (binfo, i);
7599 if (base_binfo != primary_binfo)
7600 add_vcall_offset_vtbl_entries_r (base_binfo, vid);
7604 /* Called from build_vcall_offset_vtbl_entries_r. */
7607 add_vcall_offset_vtbl_entries_1 (tree binfo, vtbl_init_data* vid)
7609 /* Make entries for the rest of the virtuals. */
7610 if (abi_version_at_least (2))
7614 /* The ABI requires that the methods be processed in declaration
7615 order. G++ 3.2 used the order in the vtable. */
7616 for (orig_fn = TYPE_METHODS (BINFO_TYPE (binfo));
7618 orig_fn = TREE_CHAIN (orig_fn))
7619 if (DECL_VINDEX (orig_fn))
7620 add_vcall_offset (orig_fn, binfo, vid);
7624 tree derived_virtuals;
7627 /* If BINFO is a primary base, the most derived class which has
7628 BINFO as a primary base; otherwise, just BINFO. */
7629 tree non_primary_binfo;
7631 /* We might be a primary base class. Go up the inheritance hierarchy
7632 until we find the most derived class of which we are a primary base:
7633 it is the BINFO_VIRTUALS there that we need to consider. */
7634 non_primary_binfo = binfo;
7635 while (BINFO_INHERITANCE_CHAIN (non_primary_binfo))
7639 /* If we have reached a virtual base, then it must be vid->vbase,
7640 because we ignore other virtual bases in
7641 add_vcall_offset_vtbl_entries_r. In turn, it must be a primary
7642 base (possibly multi-level) of vid->binfo, or we wouldn't
7643 have called build_vcall_and_vbase_vtbl_entries for it. But it
7644 might be a lost primary, so just skip down to vid->binfo. */
7645 if (BINFO_VIRTUAL_P (non_primary_binfo))
7647 if (non_primary_binfo != vid->vbase)
7649 non_primary_binfo = vid->binfo;
7653 b = BINFO_INHERITANCE_CHAIN (non_primary_binfo);
7654 if (get_primary_binfo (b) != non_primary_binfo)
7656 non_primary_binfo = b;
7659 if (vid->ctor_vtbl_p)
7660 /* For a ctor vtable we need the equivalent binfo within the hierarchy
7661 where rtti_binfo is the most derived type. */
7663 = original_binfo (non_primary_binfo, vid->rtti_binfo);
7665 for (base_virtuals = BINFO_VIRTUALS (binfo),
7666 derived_virtuals = BINFO_VIRTUALS (non_primary_binfo),
7667 orig_virtuals = BINFO_VIRTUALS (TYPE_BINFO (BINFO_TYPE (binfo)));
7669 base_virtuals = TREE_CHAIN (base_virtuals),
7670 derived_virtuals = TREE_CHAIN (derived_virtuals),
7671 orig_virtuals = TREE_CHAIN (orig_virtuals))
7675 /* Find the declaration that originally caused this function to
7676 be present in BINFO_TYPE (binfo). */
7677 orig_fn = BV_FN (orig_virtuals);
7679 /* When processing BINFO, we only want to generate vcall slots for
7680 function slots introduced in BINFO. So don't try to generate
7681 one if the function isn't even defined in BINFO. */
7682 if (!same_type_p (DECL_CONTEXT (orig_fn), BINFO_TYPE (binfo)))
7685 add_vcall_offset (orig_fn, binfo, vid);
7690 /* Add a vcall offset entry for ORIG_FN to the vtable. */
7693 add_vcall_offset (tree orig_fn, tree binfo, vtbl_init_data *vid)
7698 /* If there is already an entry for a function with the same
7699 signature as FN, then we do not need a second vcall offset.
7700 Check the list of functions already present in the derived
7702 for (i = 0; i < VARRAY_ACTIVE_SIZE (vid->fns); ++i)
7706 derived_entry = VARRAY_TREE (vid->fns, i);
7707 if (same_signature_p (derived_entry, orig_fn)
7708 /* We only use one vcall offset for virtual destructors,
7709 even though there are two virtual table entries. */
7710 || (DECL_DESTRUCTOR_P (derived_entry)
7711 && DECL_DESTRUCTOR_P (orig_fn)))
7715 /* If we are building these vcall offsets as part of building
7716 the vtable for the most derived class, remember the vcall
7718 if (vid->binfo == TYPE_BINFO (vid->derived))
7719 CLASSTYPE_VCALL_INDICES (vid->derived)
7720 = tree_cons (orig_fn, vid->index,
7721 CLASSTYPE_VCALL_INDICES (vid->derived));
7723 /* The next vcall offset will be found at a more negative
7725 vid->index = size_binop (MINUS_EXPR, vid->index,
7726 ssize_int (TARGET_VTABLE_DATA_ENTRY_DISTANCE));
7728 /* Keep track of this function. */
7729 VARRAY_PUSH_TREE (vid->fns, orig_fn);
7731 if (vid->generate_vcall_entries)
7736 /* Find the overriding function. */
7737 fn = find_final_overrider (vid->rtti_binfo, binfo, orig_fn);
7738 if (fn == error_mark_node)
7739 vcall_offset = build1 (NOP_EXPR, vtable_entry_type,
7743 base = TREE_VALUE (fn);
7745 /* The vbase we're working on is a primary base of
7746 vid->binfo. But it might be a lost primary, so its
7747 BINFO_OFFSET might be wrong, so we just use the
7748 BINFO_OFFSET from vid->binfo. */
7749 vcall_offset = size_diffop (BINFO_OFFSET (base),
7750 BINFO_OFFSET (vid->binfo));
7751 vcall_offset = fold (build1 (NOP_EXPR, vtable_entry_type,
7754 /* Add the initializer to the vtable. */
7755 *vid->last_init = build_tree_list (NULL_TREE, vcall_offset);
7756 vid->last_init = &TREE_CHAIN (*vid->last_init);
7760 /* Return vtbl initializers for the RTTI entries corresponding to the
7761 BINFO's vtable. The RTTI entries should indicate the object given
7762 by VID->rtti_binfo. */
7765 build_rtti_vtbl_entries (tree binfo, vtbl_init_data* vid)
7774 basetype = BINFO_TYPE (binfo);
7775 t = BINFO_TYPE (vid->rtti_binfo);
7777 /* To find the complete object, we will first convert to our most
7778 primary base, and then add the offset in the vtbl to that value. */
7780 while (CLASSTYPE_HAS_PRIMARY_BASE_P (BINFO_TYPE (b))
7781 && !BINFO_LOST_PRIMARY_P (b))
7785 primary_base = get_primary_binfo (b);
7786 my_friendly_assert (BINFO_PRIMARY_BASE_OF (primary_base) == b, 20010127);
7789 offset = size_diffop (BINFO_OFFSET (vid->rtti_binfo), BINFO_OFFSET (b));
7791 /* The second entry is the address of the typeinfo object. */
7793 decl = build_address (get_tinfo_decl (t));
7795 decl = integer_zero_node;
7797 /* Convert the declaration to a type that can be stored in the
7799 init = build_nop (vfunc_ptr_type_node, decl);
7800 *vid->last_init = build_tree_list (NULL_TREE, init);
7801 vid->last_init = &TREE_CHAIN (*vid->last_init);
7803 /* Add the offset-to-top entry. It comes earlier in the vtable that
7804 the the typeinfo entry. Convert the offset to look like a
7805 function pointer, so that we can put it in the vtable. */
7806 init = build_nop (vfunc_ptr_type_node, offset);
7807 *vid->last_init = build_tree_list (NULL_TREE, init);
7808 vid->last_init = &TREE_CHAIN (*vid->last_init);
7811 /* Fold a OBJ_TYPE_REF expression to the address of a function.
7812 KNOWN_TYPE carries the true type of OBJ_TYPE_REF_OBJECT(REF). */
7815 cp_fold_obj_type_ref (tree ref, tree known_type)
7817 HOST_WIDE_INT index = tree_low_cst (OBJ_TYPE_REF_TOKEN (ref), 1);
7818 HOST_WIDE_INT i = 0;
7819 tree v = BINFO_VIRTUALS (TYPE_BINFO (known_type));
7824 i += (TARGET_VTABLE_USES_DESCRIPTORS
7825 ? TARGET_VTABLE_USES_DESCRIPTORS : 1);
7831 #ifdef ENABLE_CHECKING
7832 if (!tree_int_cst_equal (OBJ_TYPE_REF_TOKEN (ref), DECL_VINDEX (fndecl)))
7836 return build_address (fndecl);