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, 2005 Free Software Foundation, Inc.
4 Contributed by Michael Tiemann (tiemann@cygnus.com)
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2, or (at your option)
13 GCC is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING. If not, write to
20 the Free Software Foundation, 51 Franklin Street, Fifth Floor,
21 Boston, MA 02110-1301, USA. */
24 /* High-level class interface. */
28 #include "coretypes.h"
39 #include "tree-dump.h"
41 /* The number of nested classes being processed. If we are not in the
42 scope of any class, this is zero. */
44 int current_class_depth;
46 /* In order to deal with nested classes, we keep a stack of classes.
47 The topmost entry is the innermost class, and is the entry at index
48 CURRENT_CLASS_DEPTH */
50 typedef struct class_stack_node {
51 /* The name of the class. */
54 /* The _TYPE node for the class. */
57 /* The access specifier pending for new declarations in the scope of
61 /* If were defining TYPE, the names used in this class. */
62 splay_tree names_used;
63 }* class_stack_node_t;
65 typedef struct vtbl_init_data_s
67 /* The base for which we're building initializers. */
69 /* The type of the most-derived type. */
71 /* The binfo for the dynamic type. This will be TYPE_BINFO (derived),
72 unless ctor_vtbl_p is true. */
74 /* The negative-index vtable initializers built up so far. These
75 are in order from least negative index to most negative index. */
77 /* The last (i.e., most negative) entry in INITS. */
79 /* The binfo for the virtual base for which we're building
80 vcall offset initializers. */
82 /* The functions in vbase for which we have already provided vcall
85 /* The vtable index of the next vcall or vbase offset. */
87 /* Nonzero if we are building the initializer for the primary
90 /* Nonzero if we are building the initializer for a construction
93 /* True when adding vcall offset entries to the vtable. False when
94 merely computing the indices. */
95 bool generate_vcall_entries;
98 /* The type of a function passed to walk_subobject_offsets. */
99 typedef int (*subobject_offset_fn) (tree, tree, splay_tree);
101 /* The stack itself. This is a dynamically resized array. The
102 number of elements allocated is CURRENT_CLASS_STACK_SIZE. */
103 static int current_class_stack_size;
104 static class_stack_node_t current_class_stack;
106 /* The size of the largest empty class seen in this translation unit. */
107 static GTY (()) tree sizeof_biggest_empty_class;
109 /* An array of all local classes present in this translation unit, in
110 declaration order. */
111 VEC(tree,gc) *local_classes;
113 static tree get_vfield_name (tree);
114 static void finish_struct_anon (tree);
115 static tree get_vtable_name (tree);
116 static tree get_basefndecls (tree, tree);
117 static int build_primary_vtable (tree, tree);
118 static int build_secondary_vtable (tree);
119 static void finish_vtbls (tree);
120 static void modify_vtable_entry (tree, tree, tree, tree, tree *);
121 static void finish_struct_bits (tree);
122 static int alter_access (tree, tree, tree);
123 static void handle_using_decl (tree, tree);
124 static tree dfs_modify_vtables (tree, void *);
125 static tree modify_all_vtables (tree, tree);
126 static void determine_primary_bases (tree);
127 static void finish_struct_methods (tree);
128 static void maybe_warn_about_overly_private_class (tree);
129 static int method_name_cmp (const void *, const void *);
130 static int resort_method_name_cmp (const void *, const void *);
131 static void add_implicitly_declared_members (tree, int, int);
132 static tree fixed_type_or_null (tree, int *, int *);
133 static tree resolve_address_of_overloaded_function (tree, tree, tsubst_flags_t,
135 static tree build_simple_base_path (tree expr, tree binfo);
136 static tree build_vtbl_ref_1 (tree, tree);
137 static tree build_vtbl_initializer (tree, tree, tree, tree, int *);
138 static int count_fields (tree);
139 static int add_fields_to_record_type (tree, struct sorted_fields_type*, int);
140 static void check_bitfield_decl (tree);
141 static void check_field_decl (tree, tree, int *, int *, int *);
142 static void check_field_decls (tree, tree *, int *, int *);
143 static tree *build_base_field (record_layout_info, tree, splay_tree, tree *);
144 static void build_base_fields (record_layout_info, splay_tree, tree *);
145 static void check_methods (tree);
146 static void remove_zero_width_bit_fields (tree);
147 static void check_bases (tree, int *, int *);
148 static void check_bases_and_members (tree);
149 static tree create_vtable_ptr (tree, tree *);
150 static void include_empty_classes (record_layout_info);
151 static void layout_class_type (tree, tree *);
152 static void fixup_pending_inline (tree);
153 static void fixup_inline_methods (tree);
154 static void propagate_binfo_offsets (tree, tree);
155 static void layout_virtual_bases (record_layout_info, splay_tree);
156 static void build_vbase_offset_vtbl_entries (tree, vtbl_init_data *);
157 static void add_vcall_offset_vtbl_entries_r (tree, vtbl_init_data *);
158 static void add_vcall_offset_vtbl_entries_1 (tree, vtbl_init_data *);
159 static void build_vcall_offset_vtbl_entries (tree, vtbl_init_data *);
160 static void add_vcall_offset (tree, tree, vtbl_init_data *);
161 static void layout_vtable_decl (tree, int);
162 static tree dfs_find_final_overrider_pre (tree, void *);
163 static tree dfs_find_final_overrider_post (tree, void *);
164 static tree find_final_overrider (tree, tree, tree);
165 static int make_new_vtable (tree, tree);
166 static int maybe_indent_hierarchy (FILE *, int, int);
167 static tree dump_class_hierarchy_r (FILE *, int, tree, tree, int);
168 static void dump_class_hierarchy (tree);
169 static void dump_class_hierarchy_1 (FILE *, int, tree);
170 static void dump_array (FILE *, tree);
171 static void dump_vtable (tree, tree, tree);
172 static void dump_vtt (tree, tree);
173 static void dump_thunk (FILE *, int, tree);
174 static tree build_vtable (tree, tree, tree);
175 static void initialize_vtable (tree, tree);
176 static void layout_nonempty_base_or_field (record_layout_info,
177 tree, tree, splay_tree);
178 static tree end_of_class (tree, int);
179 static bool layout_empty_base (tree, tree, splay_tree);
180 static void accumulate_vtbl_inits (tree, tree, tree, tree, tree);
181 static tree dfs_accumulate_vtbl_inits (tree, tree, tree, tree,
183 static void build_rtti_vtbl_entries (tree, vtbl_init_data *);
184 static void build_vcall_and_vbase_vtbl_entries (tree, vtbl_init_data *);
185 static void clone_constructors_and_destructors (tree);
186 static tree build_clone (tree, tree);
187 static void update_vtable_entry_for_fn (tree, tree, tree, tree *, unsigned);
188 static void build_ctor_vtbl_group (tree, tree);
189 static void build_vtt (tree);
190 static tree binfo_ctor_vtable (tree);
191 static tree *build_vtt_inits (tree, tree, tree *, tree *);
192 static tree dfs_build_secondary_vptr_vtt_inits (tree, void *);
193 static tree dfs_fixup_binfo_vtbls (tree, void *);
194 static int record_subobject_offset (tree, tree, splay_tree);
195 static int check_subobject_offset (tree, tree, splay_tree);
196 static int walk_subobject_offsets (tree, subobject_offset_fn,
197 tree, splay_tree, tree, int);
198 static void record_subobject_offsets (tree, tree, splay_tree, bool);
199 static int layout_conflict_p (tree, tree, splay_tree, int);
200 static int splay_tree_compare_integer_csts (splay_tree_key k1,
202 static void warn_about_ambiguous_bases (tree);
203 static bool type_requires_array_cookie (tree);
204 static bool contains_empty_class_p (tree);
205 static bool base_derived_from (tree, tree);
206 static int empty_base_at_nonzero_offset_p (tree, tree, splay_tree);
207 static tree end_of_base (tree);
208 static tree get_vcall_index (tree, tree);
210 /* Variables shared between class.c and call.c. */
212 #ifdef GATHER_STATISTICS
214 int n_vtable_entries = 0;
215 int n_vtable_searches = 0;
216 int n_vtable_elems = 0;
217 int n_convert_harshness = 0;
218 int n_compute_conversion_costs = 0;
219 int n_inner_fields_searched = 0;
222 /* Convert to or from a base subobject. EXPR is an expression of type
223 `A' or `A*', an expression of type `B' or `B*' is returned. To
224 convert A to a base B, CODE is PLUS_EXPR and BINFO is the binfo for
225 the B base instance within A. To convert base A to derived B, CODE
226 is MINUS_EXPR and BINFO is the binfo for the A instance within B.
227 In this latter case, A must not be a morally virtual base of B.
228 NONNULL is true if EXPR is known to be non-NULL (this is only
229 needed when EXPR is of pointer type). CV qualifiers are preserved
233 build_base_path (enum tree_code code,
238 tree v_binfo = NULL_TREE;
239 tree d_binfo = NULL_TREE;
243 tree null_test = NULL;
244 tree ptr_target_type;
246 int want_pointer = TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE;
247 bool has_empty = false;
250 if (expr == error_mark_node || binfo == error_mark_node || !binfo)
251 return error_mark_node;
253 for (probe = binfo; probe; probe = BINFO_INHERITANCE_CHAIN (probe))
256 if (is_empty_class (BINFO_TYPE (probe)))
258 if (!v_binfo && BINFO_VIRTUAL_P (probe))
262 probe = TYPE_MAIN_VARIANT (TREE_TYPE (expr));
264 probe = TYPE_MAIN_VARIANT (TREE_TYPE (probe));
266 gcc_assert ((code == MINUS_EXPR
267 && SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), probe))
268 || (code == PLUS_EXPR
269 && SAME_BINFO_TYPE_P (BINFO_TYPE (d_binfo), probe)));
271 if (binfo == d_binfo)
275 if (code == MINUS_EXPR && v_binfo)
277 error ("cannot convert from base %qT to derived type %qT via virtual base %qT",
278 BINFO_TYPE (binfo), BINFO_TYPE (d_binfo), BINFO_TYPE (v_binfo));
279 return error_mark_node;
283 /* This must happen before the call to save_expr. */
284 expr = build_unary_op (ADDR_EXPR, expr, 0);
286 offset = BINFO_OFFSET (binfo);
287 fixed_type_p = resolves_to_fixed_type_p (expr, &nonnull);
289 /* Do we need to look in the vtable for the real offset? */
290 virtual_access = (v_binfo && fixed_type_p <= 0);
292 /* Do we need to check for a null pointer? */
293 if (want_pointer && !nonnull && (virtual_access || !integer_zerop (offset)))
294 null_test = error_mark_node;
296 /* Protect against multiple evaluation if necessary. */
297 if (TREE_SIDE_EFFECTS (expr) && (null_test || virtual_access))
298 expr = save_expr (expr);
300 /* Now that we've saved expr, build the real null test. */
303 tree zero = cp_convert (TREE_TYPE (expr), integer_zero_node);
304 null_test = fold_build2 (NE_EXPR, boolean_type_node,
308 /* If this is a simple base reference, express it as a COMPONENT_REF. */
309 if (code == PLUS_EXPR && !virtual_access
310 /* We don't build base fields for empty bases, and they aren't very
311 interesting to the optimizers anyway. */
314 expr = build_indirect_ref (expr, NULL);
315 expr = build_simple_base_path (expr, binfo);
317 expr = build_address (expr);
318 target_type = TREE_TYPE (expr);
324 /* Going via virtual base V_BINFO. We need the static offset
325 from V_BINFO to BINFO, and the dynamic offset from D_BINFO to
326 V_BINFO. That offset is an entry in D_BINFO's vtable. */
329 if (fixed_type_p < 0 && in_base_initializer)
331 /* In a base member initializer, we cannot rely on the
332 vtable being set up. We have to indirect via the
336 t = TREE_TYPE (TYPE_VFIELD (current_class_type));
337 t = build_pointer_type (t);
338 v_offset = convert (t, current_vtt_parm);
339 v_offset = build_indirect_ref (v_offset, NULL);
342 v_offset = build_vfield_ref (build_indirect_ref (expr, NULL),
343 TREE_TYPE (TREE_TYPE (expr)));
345 v_offset = build2 (PLUS_EXPR, TREE_TYPE (v_offset),
346 v_offset, BINFO_VPTR_FIELD (v_binfo));
347 v_offset = build1 (NOP_EXPR,
348 build_pointer_type (ptrdiff_type_node),
350 v_offset = build_indirect_ref (v_offset, NULL);
351 TREE_CONSTANT (v_offset) = 1;
352 TREE_INVARIANT (v_offset) = 1;
354 offset = convert_to_integer (ptrdiff_type_node,
356 BINFO_OFFSET (v_binfo)));
358 if (!integer_zerop (offset))
359 v_offset = build2 (code, ptrdiff_type_node, v_offset, offset);
361 if (fixed_type_p < 0)
362 /* Negative fixed_type_p means this is a constructor or destructor;
363 virtual base layout is fixed in in-charge [cd]tors, but not in
365 offset = build3 (COND_EXPR, ptrdiff_type_node,
366 build2 (EQ_EXPR, boolean_type_node,
367 current_in_charge_parm, integer_zero_node),
369 convert_to_integer (ptrdiff_type_node,
370 BINFO_OFFSET (binfo)));
375 target_type = code == PLUS_EXPR ? BINFO_TYPE (binfo) : BINFO_TYPE (d_binfo);
377 target_type = cp_build_qualified_type
378 (target_type, cp_type_quals (TREE_TYPE (TREE_TYPE (expr))));
379 ptr_target_type = build_pointer_type (target_type);
381 target_type = ptr_target_type;
383 expr = build1 (NOP_EXPR, ptr_target_type, expr);
385 if (!integer_zerop (offset))
386 expr = build2 (code, ptr_target_type, expr, offset);
391 expr = build_indirect_ref (expr, NULL);
395 expr = fold_build3 (COND_EXPR, target_type, null_test, expr,
396 fold_build1 (NOP_EXPR, target_type,
402 /* Subroutine of build_base_path; EXPR and BINFO are as in that function.
403 Perform a derived-to-base conversion by recursively building up a
404 sequence of COMPONENT_REFs to the appropriate base fields. */
407 build_simple_base_path (tree expr, tree binfo)
409 tree type = BINFO_TYPE (binfo);
410 tree d_binfo = BINFO_INHERITANCE_CHAIN (binfo);
413 if (d_binfo == NULL_TREE)
417 gcc_assert (TYPE_MAIN_VARIANT (TREE_TYPE (expr)) == type);
419 /* Transform `(a, b).x' into `(*(a, &b)).x', `(a ? b : c).x'
420 into `(*(a ? &b : &c)).x', and so on. A COND_EXPR is only
421 an lvalue in the frontend; only _DECLs and _REFs are lvalues
423 temp = unary_complex_lvalue (ADDR_EXPR, expr);
425 expr = build_indirect_ref (temp, NULL);
431 expr = build_simple_base_path (expr, d_binfo);
433 for (field = TYPE_FIELDS (BINFO_TYPE (d_binfo));
434 field; field = TREE_CHAIN (field))
435 /* Is this the base field created by build_base_field? */
436 if (TREE_CODE (field) == FIELD_DECL
437 && DECL_FIELD_IS_BASE (field)
438 && TREE_TYPE (field) == type)
440 /* We don't use build_class_member_access_expr here, as that
441 has unnecessary checks, and more importantly results in
442 recursive calls to dfs_walk_once. */
443 int type_quals = cp_type_quals (TREE_TYPE (expr));
445 expr = build3 (COMPONENT_REF,
446 cp_build_qualified_type (type, type_quals),
447 expr, field, NULL_TREE);
448 expr = fold_if_not_in_template (expr);
450 /* Mark the expression const or volatile, as appropriate.
451 Even though we've dealt with the type above, we still have
452 to mark the expression itself. */
453 if (type_quals & TYPE_QUAL_CONST)
454 TREE_READONLY (expr) = 1;
455 if (type_quals & TYPE_QUAL_VOLATILE)
456 TREE_THIS_VOLATILE (expr) = 1;
461 /* Didn't find the base field?!? */
465 /* Convert OBJECT to the base TYPE. OBJECT is an expression whose
466 type is a class type or a pointer to a class type. In the former
467 case, TYPE is also a class type; in the latter it is another
468 pointer type. If CHECK_ACCESS is true, an error message is emitted
469 if TYPE is inaccessible. If OBJECT has pointer type, the value is
470 assumed to be non-NULL. */
473 convert_to_base (tree object, tree type, bool check_access, bool nonnull)
478 if (TYPE_PTR_P (TREE_TYPE (object)))
480 object_type = TREE_TYPE (TREE_TYPE (object));
481 type = TREE_TYPE (type);
484 object_type = TREE_TYPE (object);
486 binfo = lookup_base (object_type, type,
487 check_access ? ba_check : ba_unique,
489 if (!binfo || binfo == error_mark_node)
490 return error_mark_node;
492 return build_base_path (PLUS_EXPR, object, binfo, nonnull);
495 /* EXPR is an expression with unqualified class type. BASE is a base
496 binfo of that class type. Returns EXPR, converted to the BASE
497 type. This function assumes that EXPR is the most derived class;
498 therefore virtual bases can be found at their static offsets. */
501 convert_to_base_statically (tree expr, tree base)
505 expr_type = TREE_TYPE (expr);
506 if (!SAME_BINFO_TYPE_P (BINFO_TYPE (base), expr_type))
510 pointer_type = build_pointer_type (expr_type);
511 expr = build_unary_op (ADDR_EXPR, expr, /*noconvert=*/1);
512 if (!integer_zerop (BINFO_OFFSET (base)))
513 expr = build2 (PLUS_EXPR, pointer_type, expr,
514 build_nop (pointer_type, BINFO_OFFSET (base)));
515 expr = build_nop (build_pointer_type (BINFO_TYPE (base)), expr);
516 expr = build1 (INDIRECT_REF, BINFO_TYPE (base), expr);
524 build_vfield_ref (tree datum, tree type)
526 tree vfield, vcontext;
528 if (datum == error_mark_node)
529 return error_mark_node;
531 /* First, convert to the requested type. */
532 if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (datum), type))
533 datum = convert_to_base (datum, type, /*check_access=*/false,
536 /* Second, the requested type may not be the owner of its own vptr.
537 If not, convert to the base class that owns it. We cannot use
538 convert_to_base here, because VCONTEXT may appear more than once
539 in the inheritance hierarchy of TYPE, and thus direct conversion
540 between the types may be ambiguous. Following the path back up
541 one step at a time via primary bases avoids the problem. */
542 vfield = TYPE_VFIELD (type);
543 vcontext = DECL_CONTEXT (vfield);
544 while (!same_type_ignoring_top_level_qualifiers_p (vcontext, type))
546 datum = build_simple_base_path (datum, CLASSTYPE_PRIMARY_BINFO (type));
547 type = TREE_TYPE (datum);
550 return build3 (COMPONENT_REF, TREE_TYPE (vfield), datum, vfield, NULL_TREE);
553 /* Given an object INSTANCE, return an expression which yields the
554 vtable element corresponding to INDEX. There are many special
555 cases for INSTANCE which we take care of here, mainly to avoid
556 creating extra tree nodes when we don't have to. */
559 build_vtbl_ref_1 (tree instance, tree idx)
562 tree vtbl = NULL_TREE;
564 /* Try to figure out what a reference refers to, and
565 access its virtual function table directly. */
568 tree fixed_type = fixed_type_or_null (instance, NULL, &cdtorp);
570 tree basetype = non_reference (TREE_TYPE (instance));
572 if (fixed_type && !cdtorp)
574 tree binfo = lookup_base (fixed_type, basetype,
575 ba_unique | ba_quiet, NULL);
577 vtbl = unshare_expr (BINFO_VTABLE (binfo));
581 vtbl = build_vfield_ref (instance, basetype);
583 assemble_external (vtbl);
585 aref = build_array_ref (vtbl, idx);
586 TREE_CONSTANT (aref) |= TREE_CONSTANT (vtbl) && TREE_CONSTANT (idx);
587 TREE_INVARIANT (aref) = TREE_CONSTANT (aref);
593 build_vtbl_ref (tree instance, tree idx)
595 tree aref = build_vtbl_ref_1 (instance, idx);
600 /* Given a stable object pointer INSTANCE_PTR, return an expression which
601 yields a function pointer corresponding to vtable element INDEX. */
604 build_vfn_ref (tree instance_ptr, tree idx)
608 aref = build_vtbl_ref_1 (build_indirect_ref (instance_ptr, 0), idx);
610 /* When using function descriptors, the address of the
611 vtable entry is treated as a function pointer. */
612 if (TARGET_VTABLE_USES_DESCRIPTORS)
613 aref = build1 (NOP_EXPR, TREE_TYPE (aref),
614 build_unary_op (ADDR_EXPR, aref, /*noconvert=*/1));
616 /* Remember this as a method reference, for later devirtualization. */
617 aref = build3 (OBJ_TYPE_REF, TREE_TYPE (aref), aref, instance_ptr, idx);
622 /* Return the name of the virtual function table (as an IDENTIFIER_NODE)
623 for the given TYPE. */
626 get_vtable_name (tree type)
628 return mangle_vtbl_for_type (type);
631 /* Return an IDENTIFIER_NODE for the name of the virtual table table
635 get_vtt_name (tree type)
637 return mangle_vtt_for_type (type);
640 /* DECL is an entity associated with TYPE, like a virtual table or an
641 implicitly generated constructor. Determine whether or not DECL
642 should have external or internal linkage at the object file
643 level. This routine does not deal with COMDAT linkage and other
644 similar complexities; it simply sets TREE_PUBLIC if it possible for
645 entities in other translation units to contain copies of DECL, in
649 set_linkage_according_to_type (tree type, tree decl)
651 /* If TYPE involves a local class in a function with internal
652 linkage, then DECL should have internal linkage too. Other local
653 classes have no linkage -- but if their containing functions
654 have external linkage, it makes sense for DECL to have external
655 linkage too. That will allow template definitions to be merged,
657 if (no_linkage_check (type, /*relaxed_p=*/true))
659 TREE_PUBLIC (decl) = 0;
660 DECL_INTERFACE_KNOWN (decl) = 1;
663 TREE_PUBLIC (decl) = 1;
666 /* Create a VAR_DECL for a primary or secondary vtable for CLASS_TYPE.
667 (For a secondary vtable for B-in-D, CLASS_TYPE should be D, not B.)
668 Use NAME for the name of the vtable, and VTABLE_TYPE for its type. */
671 build_vtable (tree class_type, tree name, tree vtable_type)
675 decl = build_lang_decl (VAR_DECL, name, vtable_type);
676 /* vtable names are already mangled; give them their DECL_ASSEMBLER_NAME
677 now to avoid confusion in mangle_decl. */
678 SET_DECL_ASSEMBLER_NAME (decl, name);
679 DECL_CONTEXT (decl) = class_type;
680 DECL_ARTIFICIAL (decl) = 1;
681 TREE_STATIC (decl) = 1;
682 TREE_READONLY (decl) = 1;
683 DECL_VIRTUAL_P (decl) = 1;
684 DECL_ALIGN (decl) = TARGET_VTABLE_ENTRY_ALIGN;
685 DECL_VTABLE_OR_VTT_P (decl) = 1;
686 /* At one time the vtable info was grabbed 2 words at a time. This
687 fails on sparc unless you have 8-byte alignment. (tiemann) */
688 DECL_ALIGN (decl) = MAX (TYPE_ALIGN (double_type_node),
690 set_linkage_according_to_type (class_type, decl);
691 /* The vtable has not been defined -- yet. */
692 DECL_EXTERNAL (decl) = 1;
693 DECL_NOT_REALLY_EXTERN (decl) = 1;
695 /* Mark the VAR_DECL node representing the vtable itself as a
696 "gratuitous" one, thereby forcing dwarfout.c to ignore it. It
697 is rather important that such things be ignored because any
698 effort to actually generate DWARF for them will run into
699 trouble when/if we encounter code like:
702 struct S { virtual void member (); };
704 because the artificial declaration of the vtable itself (as
705 manufactured by the g++ front end) will say that the vtable is
706 a static member of `S' but only *after* the debug output for
707 the definition of `S' has already been output. This causes
708 grief because the DWARF entry for the definition of the vtable
709 will try to refer back to an earlier *declaration* of the
710 vtable as a static member of `S' and there won't be one. We
711 might be able to arrange to have the "vtable static member"
712 attached to the member list for `S' before the debug info for
713 `S' get written (which would solve the problem) but that would
714 require more intrusive changes to the g++ front end. */
715 DECL_IGNORED_P (decl) = 1;
720 /* Get the VAR_DECL of the vtable for TYPE. TYPE need not be polymorphic,
721 or even complete. If this does not exist, create it. If COMPLETE is
722 nonzero, then complete the definition of it -- that will render it
723 impossible to actually build the vtable, but is useful to get at those
724 which are known to exist in the runtime. */
727 get_vtable_decl (tree type, int complete)
731 if (CLASSTYPE_VTABLES (type))
732 return CLASSTYPE_VTABLES (type);
734 decl = build_vtable (type, get_vtable_name (type), vtbl_type_node);
735 CLASSTYPE_VTABLES (type) = decl;
739 DECL_EXTERNAL (decl) = 1;
740 cp_finish_decl (decl, NULL_TREE, NULL_TREE, 0);
746 /* Build the primary virtual function table for TYPE. If BINFO is
747 non-NULL, build the vtable starting with the initial approximation
748 that it is the same as the one which is the head of the association
749 list. Returns a nonzero value if a new vtable is actually
753 build_primary_vtable (tree binfo, tree type)
758 decl = get_vtable_decl (type, /*complete=*/0);
762 if (BINFO_NEW_VTABLE_MARKED (binfo))
763 /* We have already created a vtable for this base, so there's
764 no need to do it again. */
767 virtuals = copy_list (BINFO_VIRTUALS (binfo));
768 TREE_TYPE (decl) = TREE_TYPE (get_vtbl_decl_for_binfo (binfo));
769 DECL_SIZE (decl) = TYPE_SIZE (TREE_TYPE (decl));
770 DECL_SIZE_UNIT (decl) = TYPE_SIZE_UNIT (TREE_TYPE (decl));
774 gcc_assert (TREE_TYPE (decl) == vtbl_type_node);
775 virtuals = NULL_TREE;
778 #ifdef GATHER_STATISTICS
780 n_vtable_elems += list_length (virtuals);
783 /* Initialize the association list for this type, based
784 on our first approximation. */
785 BINFO_VTABLE (TYPE_BINFO (type)) = decl;
786 BINFO_VIRTUALS (TYPE_BINFO (type)) = virtuals;
787 SET_BINFO_NEW_VTABLE_MARKED (TYPE_BINFO (type));
791 /* Give BINFO a new virtual function table which is initialized
792 with a skeleton-copy of its original initialization. The only
793 entry that changes is the `delta' entry, so we can really
794 share a lot of structure.
796 FOR_TYPE is the most derived type which caused this table to
799 Returns nonzero if we haven't met BINFO before.
801 The order in which vtables are built (by calling this function) for
802 an object must remain the same, otherwise a binary incompatibility
806 build_secondary_vtable (tree binfo)
808 if (BINFO_NEW_VTABLE_MARKED (binfo))
809 /* We already created a vtable for this base. There's no need to
813 /* Remember that we've created a vtable for this BINFO, so that we
814 don't try to do so again. */
815 SET_BINFO_NEW_VTABLE_MARKED (binfo);
817 /* Make fresh virtual list, so we can smash it later. */
818 BINFO_VIRTUALS (binfo) = copy_list (BINFO_VIRTUALS (binfo));
820 /* Secondary vtables are laid out as part of the same structure as
821 the primary vtable. */
822 BINFO_VTABLE (binfo) = NULL_TREE;
826 /* Create a new vtable for BINFO which is the hierarchy dominated by
827 T. Return nonzero if we actually created a new vtable. */
830 make_new_vtable (tree t, tree binfo)
832 if (binfo == TYPE_BINFO (t))
833 /* In this case, it is *type*'s vtable we are modifying. We start
834 with the approximation that its vtable is that of the
835 immediate base class. */
836 return build_primary_vtable (binfo, t);
838 /* This is our very own copy of `basetype' to play with. Later,
839 we will fill in all the virtual functions that override the
840 virtual functions in these base classes which are not defined
841 by the current type. */
842 return build_secondary_vtable (binfo);
845 /* Make *VIRTUALS, an entry on the BINFO_VIRTUALS list for BINFO
846 (which is in the hierarchy dominated by T) list FNDECL as its
847 BV_FN. DELTA is the required constant adjustment from the `this'
848 pointer where the vtable entry appears to the `this' required when
849 the function is actually called. */
852 modify_vtable_entry (tree t,
862 if (fndecl != BV_FN (v)
863 || !tree_int_cst_equal (delta, BV_DELTA (v)))
865 /* We need a new vtable for BINFO. */
866 if (make_new_vtable (t, binfo))
868 /* If we really did make a new vtable, we also made a copy
869 of the BINFO_VIRTUALS list. Now, we have to find the
870 corresponding entry in that list. */
871 *virtuals = BINFO_VIRTUALS (binfo);
872 while (BV_FN (*virtuals) != BV_FN (v))
873 *virtuals = TREE_CHAIN (*virtuals);
877 BV_DELTA (v) = delta;
878 BV_VCALL_INDEX (v) = NULL_TREE;
884 /* Add method METHOD to class TYPE. If USING_DECL is non-null, it is
885 the USING_DECL naming METHOD. Returns true if the method could be
886 added to the method vec. */
889 add_method (tree type, tree method, tree using_decl)
893 bool template_conv_p = false;
895 VEC(tree,gc) *method_vec;
897 bool insert_p = false;
900 if (method == error_mark_node)
903 complete_p = COMPLETE_TYPE_P (type);
904 conv_p = DECL_CONV_FN_P (method);
906 template_conv_p = (TREE_CODE (method) == TEMPLATE_DECL
907 && DECL_TEMPLATE_CONV_FN_P (method));
909 method_vec = CLASSTYPE_METHOD_VEC (type);
912 /* Make a new method vector. We start with 8 entries. We must
913 allocate at least two (for constructors and destructors), and
914 we're going to end up with an assignment operator at some
916 method_vec = VEC_alloc (tree, gc, 8);
917 /* Create slots for constructors and destructors. */
918 VEC_quick_push (tree, method_vec, NULL_TREE);
919 VEC_quick_push (tree, method_vec, NULL_TREE);
920 CLASSTYPE_METHOD_VEC (type) = method_vec;
923 /* Constructors and destructors go in special slots. */
924 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (method))
925 slot = CLASSTYPE_CONSTRUCTOR_SLOT;
926 else if (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (method))
928 slot = CLASSTYPE_DESTRUCTOR_SLOT;
930 if (TYPE_FOR_JAVA (type))
932 if (!DECL_ARTIFICIAL (method))
933 error ("Java class %qT cannot have a destructor", type);
934 else if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
935 error ("Java class %qT cannot have an implicit non-trivial "
945 /* See if we already have an entry with this name. */
946 for (slot = CLASSTYPE_FIRST_CONVERSION_SLOT;
947 VEC_iterate (tree, method_vec, slot, m);
953 if (TREE_CODE (m) == TEMPLATE_DECL
954 && DECL_TEMPLATE_CONV_FN_P (m))
958 if (conv_p && !DECL_CONV_FN_P (m))
960 if (DECL_NAME (m) == DECL_NAME (method))
966 && !DECL_CONV_FN_P (m)
967 && DECL_NAME (m) > DECL_NAME (method))
971 current_fns = insert_p ? NULL_TREE : VEC_index (tree, method_vec, slot);
973 if (processing_template_decl)
974 /* TYPE is a template class. Don't issue any errors now; wait
975 until instantiation time to complain. */
981 /* Check to see if we've already got this method. */
982 for (fns = current_fns; fns; fns = OVL_NEXT (fns))
984 tree fn = OVL_CURRENT (fns);
989 if (TREE_CODE (fn) != TREE_CODE (method))
992 /* [over.load] Member function declarations with the
993 same name and the same parameter types cannot be
994 overloaded if any of them is a static member
995 function declaration.
997 [namespace.udecl] When a using-declaration brings names
998 from a base class into a derived class scope, member
999 functions in the derived class override and/or hide member
1000 functions with the same name and parameter types in a base
1001 class (rather than conflicting). */
1002 parms1 = TYPE_ARG_TYPES (TREE_TYPE (fn));
1003 parms2 = TYPE_ARG_TYPES (TREE_TYPE (method));
1005 /* Compare the quals on the 'this' parm. Don't compare
1006 the whole types, as used functions are treated as
1007 coming from the using class in overload resolution. */
1008 if (! DECL_STATIC_FUNCTION_P (fn)
1009 && ! DECL_STATIC_FUNCTION_P (method)
1010 && (TYPE_QUALS (TREE_TYPE (TREE_VALUE (parms1)))
1011 != TYPE_QUALS (TREE_TYPE (TREE_VALUE (parms2)))))
1014 /* For templates, the template parms must be identical. */
1015 if (TREE_CODE (fn) == TEMPLATE_DECL
1016 && !comp_template_parms (DECL_TEMPLATE_PARMS (fn),
1017 DECL_TEMPLATE_PARMS (method)))
1020 if (! DECL_STATIC_FUNCTION_P (fn))
1021 parms1 = TREE_CHAIN (parms1);
1022 if (! DECL_STATIC_FUNCTION_P (method))
1023 parms2 = TREE_CHAIN (parms2);
1025 if (same && compparms (parms1, parms2)
1026 && (!DECL_CONV_FN_P (fn)
1027 || same_type_p (TREE_TYPE (TREE_TYPE (fn)),
1028 TREE_TYPE (TREE_TYPE (method)))))
1032 if (DECL_CONTEXT (fn) == type)
1033 /* Defer to the local function. */
1035 if (DECL_CONTEXT (fn) == DECL_CONTEXT (method))
1036 error ("repeated using declaration %q+D", using_decl);
1038 error ("using declaration %q+D conflicts with a previous using declaration",
1043 error ("%q+#D cannot be overloaded", method);
1044 error ("with %q+#D", fn);
1047 /* We don't call duplicate_decls here to merge the
1048 declarations because that will confuse things if the
1049 methods have inline definitions. In particular, we
1050 will crash while processing the definitions. */
1056 /* Add the new binding. */
1057 overload = build_overload (method, current_fns);
1059 if (!conv_p && slot >= CLASSTYPE_FIRST_CONVERSION_SLOT && !complete_p)
1060 push_class_level_binding (DECL_NAME (method), overload);
1064 /* We only expect to add few methods in the COMPLETE_P case, so
1065 just make room for one more method in that case. */
1066 if (VEC_reserve (tree, gc, method_vec, complete_p ? -1 : 1))
1067 CLASSTYPE_METHOD_VEC (type) = method_vec;
1068 if (slot == VEC_length (tree, method_vec))
1069 VEC_quick_push (tree, method_vec, overload);
1071 VEC_quick_insert (tree, method_vec, slot, overload);
1074 /* Replace the current slot. */
1075 VEC_replace (tree, method_vec, slot, overload);
1079 /* Subroutines of finish_struct. */
1081 /* Change the access of FDECL to ACCESS in T. Return 1 if change was
1082 legit, otherwise return 0. */
1085 alter_access (tree t, tree fdecl, tree access)
1089 if (!DECL_LANG_SPECIFIC (fdecl))
1090 retrofit_lang_decl (fdecl);
1092 gcc_assert (!DECL_DISCRIMINATOR_P (fdecl));
1094 elem = purpose_member (t, DECL_ACCESS (fdecl));
1097 if (TREE_VALUE (elem) != access)
1099 if (TREE_CODE (TREE_TYPE (fdecl)) == FUNCTION_DECL)
1100 error ("conflicting access specifications for method"
1101 " %q+D, ignored", TREE_TYPE (fdecl));
1103 error ("conflicting access specifications for field %qE, ignored",
1108 /* They're changing the access to the same thing they changed
1109 it to before. That's OK. */
1115 perform_or_defer_access_check (TYPE_BINFO (t), fdecl);
1116 DECL_ACCESS (fdecl) = tree_cons (t, access, DECL_ACCESS (fdecl));
1122 /* Process the USING_DECL, which is a member of T. */
1125 handle_using_decl (tree using_decl, tree t)
1127 tree decl = USING_DECL_DECLS (using_decl);
1128 tree name = DECL_NAME (using_decl);
1130 = TREE_PRIVATE (using_decl) ? access_private_node
1131 : TREE_PROTECTED (using_decl) ? access_protected_node
1132 : access_public_node;
1133 tree flist = NULL_TREE;
1136 gcc_assert (!processing_template_decl && decl);
1138 old_value = lookup_member (t, name, /*protect=*/0, /*want_type=*/false);
1141 if (is_overloaded_fn (old_value))
1142 old_value = OVL_CURRENT (old_value);
1144 if (DECL_P (old_value) && DECL_CONTEXT (old_value) == t)
1147 old_value = NULL_TREE;
1150 cp_emit_debug_info_for_using (decl, current_class_type);
1152 if (is_overloaded_fn (decl))
1157 else if (is_overloaded_fn (old_value))
1160 /* It's OK to use functions from a base when there are functions with
1161 the same name already present in the current class. */;
1164 error ("%q+D invalid in %q#T", using_decl, t);
1165 error (" because of local method %q+#D with same name",
1166 OVL_CURRENT (old_value));
1170 else if (!DECL_ARTIFICIAL (old_value))
1172 error ("%q+D invalid in %q#T", using_decl, t);
1173 error (" because of local member %q+#D with same name", old_value);
1177 /* Make type T see field decl FDECL with access ACCESS. */
1179 for (; flist; flist = OVL_NEXT (flist))
1181 add_method (t, OVL_CURRENT (flist), using_decl);
1182 alter_access (t, OVL_CURRENT (flist), access);
1185 alter_access (t, decl, access);
1188 /* Run through the base classes of T, updating CANT_HAVE_CONST_CTOR_P,
1189 and NO_CONST_ASN_REF_P. Also set flag bits in T based on
1190 properties of the bases. */
1193 check_bases (tree t,
1194 int* cant_have_const_ctor_p,
1195 int* no_const_asn_ref_p)
1198 int seen_non_virtual_nearly_empty_base_p;
1202 seen_non_virtual_nearly_empty_base_p = 0;
1204 for (binfo = TYPE_BINFO (t), i = 0;
1205 BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
1207 tree basetype = TREE_TYPE (base_binfo);
1209 gcc_assert (COMPLETE_TYPE_P (basetype));
1211 /* Effective C++ rule 14. We only need to check TYPE_POLYMORPHIC_P
1212 here because the case of virtual functions but non-virtual
1213 dtor is handled in finish_struct_1. */
1214 if (warn_ecpp && ! TYPE_POLYMORPHIC_P (basetype))
1215 warning (0, "base class %q#T has a non-virtual destructor", basetype);
1217 /* If the base class doesn't have copy constructors or
1218 assignment operators that take const references, then the
1219 derived class cannot have such a member automatically
1221 if (! TYPE_HAS_CONST_INIT_REF (basetype))
1222 *cant_have_const_ctor_p = 1;
1223 if (TYPE_HAS_ASSIGN_REF (basetype)
1224 && !TYPE_HAS_CONST_ASSIGN_REF (basetype))
1225 *no_const_asn_ref_p = 1;
1227 if (BINFO_VIRTUAL_P (base_binfo))
1228 /* A virtual base does not effect nearly emptiness. */
1230 else if (CLASSTYPE_NEARLY_EMPTY_P (basetype))
1232 if (seen_non_virtual_nearly_empty_base_p)
1233 /* And if there is more than one nearly empty base, then the
1234 derived class is not nearly empty either. */
1235 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
1237 /* Remember we've seen one. */
1238 seen_non_virtual_nearly_empty_base_p = 1;
1240 else if (!is_empty_class (basetype))
1241 /* If the base class is not empty or nearly empty, then this
1242 class cannot be nearly empty. */
1243 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
1245 /* A lot of properties from the bases also apply to the derived
1247 TYPE_NEEDS_CONSTRUCTING (t) |= TYPE_NEEDS_CONSTRUCTING (basetype);
1248 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
1249 |= TYPE_HAS_NONTRIVIAL_DESTRUCTOR (basetype);
1250 TYPE_HAS_COMPLEX_ASSIGN_REF (t)
1251 |= TYPE_HAS_COMPLEX_ASSIGN_REF (basetype);
1252 TYPE_HAS_COMPLEX_INIT_REF (t) |= TYPE_HAS_COMPLEX_INIT_REF (basetype);
1253 TYPE_POLYMORPHIC_P (t) |= TYPE_POLYMORPHIC_P (basetype);
1254 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t)
1255 |= CLASSTYPE_CONTAINS_EMPTY_CLASS_P (basetype);
1259 /* Determine all the primary bases within T. Sets BINFO_PRIMARY_BASE_P for
1260 those that are primaries. Sets BINFO_LOST_PRIMARY_P for those
1261 that have had a nearly-empty virtual primary base stolen by some
1262 other base in the hierarchy. Determines CLASSTYPE_PRIMARY_BASE for
1266 determine_primary_bases (tree t)
1269 tree primary = NULL_TREE;
1270 tree type_binfo = TYPE_BINFO (t);
1273 /* Determine the primary bases of our bases. */
1274 for (base_binfo = TREE_CHAIN (type_binfo); base_binfo;
1275 base_binfo = TREE_CHAIN (base_binfo))
1277 tree primary = CLASSTYPE_PRIMARY_BINFO (BINFO_TYPE (base_binfo));
1279 /* See if we're the non-virtual primary of our inheritance
1281 if (!BINFO_VIRTUAL_P (base_binfo))
1283 tree parent = BINFO_INHERITANCE_CHAIN (base_binfo);
1284 tree parent_primary = CLASSTYPE_PRIMARY_BINFO (BINFO_TYPE (parent));
1287 && SAME_BINFO_TYPE_P (BINFO_TYPE (base_binfo),
1288 BINFO_TYPE (parent_primary)))
1289 /* We are the primary binfo. */
1290 BINFO_PRIMARY_P (base_binfo) = 1;
1292 /* Determine if we have a virtual primary base, and mark it so.
1294 if (primary && BINFO_VIRTUAL_P (primary))
1296 tree this_primary = copied_binfo (primary, base_binfo);
1298 if (BINFO_PRIMARY_P (this_primary))
1299 /* Someone already claimed this base. */
1300 BINFO_LOST_PRIMARY_P (base_binfo) = 1;
1305 BINFO_PRIMARY_P (this_primary) = 1;
1306 BINFO_INHERITANCE_CHAIN (this_primary) = base_binfo;
1308 /* A virtual binfo might have been copied from within
1309 another hierarchy. As we're about to use it as a
1310 primary base, make sure the offsets match. */
1311 delta = size_diffop (convert (ssizetype,
1312 BINFO_OFFSET (base_binfo)),
1314 BINFO_OFFSET (this_primary)));
1316 propagate_binfo_offsets (this_primary, delta);
1321 /* First look for a dynamic direct non-virtual base. */
1322 for (i = 0; BINFO_BASE_ITERATE (type_binfo, i, base_binfo); i++)
1324 tree basetype = BINFO_TYPE (base_binfo);
1326 if (TYPE_CONTAINS_VPTR_P (basetype) && !BINFO_VIRTUAL_P (base_binfo))
1328 primary = base_binfo;
1333 /* A "nearly-empty" virtual base class can be the primary base
1334 class, if no non-virtual polymorphic base can be found. Look for
1335 a nearly-empty virtual dynamic base that is not already a primary
1336 base of something in the hierarchy. If there is no such base,
1337 just pick the first nearly-empty virtual base. */
1339 for (base_binfo = TREE_CHAIN (type_binfo); base_binfo;
1340 base_binfo = TREE_CHAIN (base_binfo))
1341 if (BINFO_VIRTUAL_P (base_binfo)
1342 && CLASSTYPE_NEARLY_EMPTY_P (BINFO_TYPE (base_binfo)))
1344 if (!BINFO_PRIMARY_P (base_binfo))
1346 /* Found one that is not primary. */
1347 primary = base_binfo;
1351 /* Remember the first candidate. */
1352 primary = base_binfo;
1356 /* If we've got a primary base, use it. */
1359 tree basetype = BINFO_TYPE (primary);
1361 CLASSTYPE_PRIMARY_BINFO (t) = primary;
1362 if (BINFO_PRIMARY_P (primary))
1363 /* We are stealing a primary base. */
1364 BINFO_LOST_PRIMARY_P (BINFO_INHERITANCE_CHAIN (primary)) = 1;
1365 BINFO_PRIMARY_P (primary) = 1;
1366 if (BINFO_VIRTUAL_P (primary))
1370 BINFO_INHERITANCE_CHAIN (primary) = type_binfo;
1371 /* A virtual binfo might have been copied from within
1372 another hierarchy. As we're about to use it as a primary
1373 base, make sure the offsets match. */
1374 delta = size_diffop (ssize_int (0),
1375 convert (ssizetype, BINFO_OFFSET (primary)));
1377 propagate_binfo_offsets (primary, delta);
1380 primary = TYPE_BINFO (basetype);
1382 TYPE_VFIELD (t) = TYPE_VFIELD (basetype);
1383 BINFO_VTABLE (type_binfo) = BINFO_VTABLE (primary);
1384 BINFO_VIRTUALS (type_binfo) = BINFO_VIRTUALS (primary);
1388 /* Set memoizing fields and bits of T (and its variants) for later
1392 finish_struct_bits (tree t)
1396 /* Fix up variants (if any). */
1397 for (variants = TYPE_NEXT_VARIANT (t);
1399 variants = TYPE_NEXT_VARIANT (variants))
1401 /* These fields are in the _TYPE part of the node, not in
1402 the TYPE_LANG_SPECIFIC component, so they are not shared. */
1403 TYPE_HAS_CONSTRUCTOR (variants) = TYPE_HAS_CONSTRUCTOR (t);
1404 TYPE_NEEDS_CONSTRUCTING (variants) = TYPE_NEEDS_CONSTRUCTING (t);
1405 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (variants)
1406 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t);
1408 TYPE_POLYMORPHIC_P (variants) = TYPE_POLYMORPHIC_P (t);
1410 TYPE_BINFO (variants) = TYPE_BINFO (t);
1412 /* Copy whatever these are holding today. */
1413 TYPE_VFIELD (variants) = TYPE_VFIELD (t);
1414 TYPE_METHODS (variants) = TYPE_METHODS (t);
1415 TYPE_FIELDS (variants) = TYPE_FIELDS (t);
1416 TYPE_SIZE (variants) = TYPE_SIZE (t);
1417 TYPE_SIZE_UNIT (variants) = TYPE_SIZE_UNIT (t);
1420 if (BINFO_N_BASE_BINFOS (TYPE_BINFO (t)) && TYPE_POLYMORPHIC_P (t))
1421 /* For a class w/o baseclasses, 'finish_struct' has set
1422 CLASSTYPE_PURE_VIRTUALS correctly (by definition).
1423 Similarly for a class whose base classes do not have vtables.
1424 When neither of these is true, we might have removed abstract
1425 virtuals (by providing a definition), added some (by declaring
1426 new ones), or redeclared ones from a base class. We need to
1427 recalculate what's really an abstract virtual at this point (by
1428 looking in the vtables). */
1429 get_pure_virtuals (t);
1431 /* If this type has a copy constructor or a destructor, force its
1432 mode to be BLKmode, and force its TREE_ADDRESSABLE bit to be
1433 nonzero. This will cause it to be passed by invisible reference
1434 and prevent it from being returned in a register. */
1435 if (! TYPE_HAS_TRIVIAL_INIT_REF (t) || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t))
1438 DECL_MODE (TYPE_MAIN_DECL (t)) = BLKmode;
1439 for (variants = t; variants; variants = TYPE_NEXT_VARIANT (variants))
1441 TYPE_MODE (variants) = BLKmode;
1442 TREE_ADDRESSABLE (variants) = 1;
1447 /* Issue warnings about T having private constructors, but no friends,
1450 HAS_NONPRIVATE_METHOD is nonzero if T has any non-private methods or
1451 static members. HAS_NONPRIVATE_STATIC_FN is nonzero if T has any
1452 non-private static member functions. */
1455 maybe_warn_about_overly_private_class (tree t)
1457 int has_member_fn = 0;
1458 int has_nonprivate_method = 0;
1461 if (!warn_ctor_dtor_privacy
1462 /* If the class has friends, those entities might create and
1463 access instances, so we should not warn. */
1464 || (CLASSTYPE_FRIEND_CLASSES (t)
1465 || DECL_FRIENDLIST (TYPE_MAIN_DECL (t)))
1466 /* We will have warned when the template was declared; there's
1467 no need to warn on every instantiation. */
1468 || CLASSTYPE_TEMPLATE_INSTANTIATION (t))
1469 /* There's no reason to even consider warning about this
1473 /* We only issue one warning, if more than one applies, because
1474 otherwise, on code like:
1477 // Oops - forgot `public:'
1483 we warn several times about essentially the same problem. */
1485 /* Check to see if all (non-constructor, non-destructor) member
1486 functions are private. (Since there are no friends or
1487 non-private statics, we can't ever call any of the private member
1489 for (fn = TYPE_METHODS (t); fn; fn = TREE_CHAIN (fn))
1490 /* We're not interested in compiler-generated methods; they don't
1491 provide any way to call private members. */
1492 if (!DECL_ARTIFICIAL (fn))
1494 if (!TREE_PRIVATE (fn))
1496 if (DECL_STATIC_FUNCTION_P (fn))
1497 /* A non-private static member function is just like a
1498 friend; it can create and invoke private member
1499 functions, and be accessed without a class
1503 has_nonprivate_method = 1;
1504 /* Keep searching for a static member function. */
1506 else if (!DECL_CONSTRUCTOR_P (fn) && !DECL_DESTRUCTOR_P (fn))
1510 if (!has_nonprivate_method && has_member_fn)
1512 /* There are no non-private methods, and there's at least one
1513 private member function that isn't a constructor or
1514 destructor. (If all the private members are
1515 constructors/destructors we want to use the code below that
1516 issues error messages specifically referring to
1517 constructors/destructors.) */
1519 tree binfo = TYPE_BINFO (t);
1521 for (i = 0; i != BINFO_N_BASE_BINFOS (binfo); i++)
1522 if (BINFO_BASE_ACCESS (binfo, i) != access_private_node)
1524 has_nonprivate_method = 1;
1527 if (!has_nonprivate_method)
1529 warning (0, "all member functions in class %qT are private", t);
1534 /* Even if some of the member functions are non-private, the class
1535 won't be useful for much if all the constructors or destructors
1536 are private: such an object can never be created or destroyed. */
1537 fn = CLASSTYPE_DESTRUCTORS (t);
1538 if (fn && TREE_PRIVATE (fn))
1540 warning (0, "%q#T only defines a private destructor and has no friends",
1545 if (TYPE_HAS_CONSTRUCTOR (t)
1546 /* Implicitly generated constructors are always public. */
1547 && (!CLASSTYPE_LAZY_DEFAULT_CTOR (t)
1548 || !CLASSTYPE_LAZY_COPY_CTOR (t)))
1550 int nonprivate_ctor = 0;
1552 /* If a non-template class does not define a copy
1553 constructor, one is defined for it, enabling it to avoid
1554 this warning. For a template class, this does not
1555 happen, and so we would normally get a warning on:
1557 template <class T> class C { private: C(); };
1559 To avoid this asymmetry, we check TYPE_HAS_INIT_REF. All
1560 complete non-template or fully instantiated classes have this
1562 if (!TYPE_HAS_INIT_REF (t))
1563 nonprivate_ctor = 1;
1565 for (fn = CLASSTYPE_CONSTRUCTORS (t); fn; fn = OVL_NEXT (fn))
1567 tree ctor = OVL_CURRENT (fn);
1568 /* Ideally, we wouldn't count copy constructors (or, in
1569 fact, any constructor that takes an argument of the
1570 class type as a parameter) because such things cannot
1571 be used to construct an instance of the class unless
1572 you already have one. But, for now at least, we're
1574 if (! TREE_PRIVATE (ctor))
1576 nonprivate_ctor = 1;
1581 if (nonprivate_ctor == 0)
1583 warning (0, "%q#T only defines private constructors and has no friends",
1591 gt_pointer_operator new_value;
1595 /* Comparison function to compare two TYPE_METHOD_VEC entries by name. */
1598 method_name_cmp (const void* m1_p, const void* m2_p)
1600 const tree *const m1 = m1_p;
1601 const tree *const m2 = m2_p;
1603 if (*m1 == NULL_TREE && *m2 == NULL_TREE)
1605 if (*m1 == NULL_TREE)
1607 if (*m2 == NULL_TREE)
1609 if (DECL_NAME (OVL_CURRENT (*m1)) < DECL_NAME (OVL_CURRENT (*m2)))
1614 /* This routine compares two fields like method_name_cmp but using the
1615 pointer operator in resort_field_decl_data. */
1618 resort_method_name_cmp (const void* m1_p, const void* m2_p)
1620 const tree *const m1 = m1_p;
1621 const tree *const m2 = m2_p;
1622 if (*m1 == NULL_TREE && *m2 == NULL_TREE)
1624 if (*m1 == NULL_TREE)
1626 if (*m2 == NULL_TREE)
1629 tree d1 = DECL_NAME (OVL_CURRENT (*m1));
1630 tree d2 = DECL_NAME (OVL_CURRENT (*m2));
1631 resort_data.new_value (&d1, resort_data.cookie);
1632 resort_data.new_value (&d2, resort_data.cookie);
1639 /* Resort TYPE_METHOD_VEC because pointers have been reordered. */
1642 resort_type_method_vec (void* obj,
1643 void* orig_obj ATTRIBUTE_UNUSED ,
1644 gt_pointer_operator new_value,
1647 VEC(tree,gc) *method_vec = (VEC(tree,gc) *) obj;
1648 int len = VEC_length (tree, method_vec);
1652 /* The type conversion ops have to live at the front of the vec, so we
1654 for (slot = CLASSTYPE_FIRST_CONVERSION_SLOT;
1655 VEC_iterate (tree, method_vec, slot, fn);
1657 if (!DECL_CONV_FN_P (OVL_CURRENT (fn)))
1662 resort_data.new_value = new_value;
1663 resort_data.cookie = cookie;
1664 qsort (VEC_address (tree, method_vec) + slot, len - slot, sizeof (tree),
1665 resort_method_name_cmp);
1669 /* Warn about duplicate methods in fn_fields.
1671 Sort methods that are not special (i.e., constructors, destructors,
1672 and type conversion operators) so that we can find them faster in
1676 finish_struct_methods (tree t)
1679 VEC(tree,gc) *method_vec;
1682 method_vec = CLASSTYPE_METHOD_VEC (t);
1686 len = VEC_length (tree, method_vec);
1688 /* Clear DECL_IN_AGGR_P for all functions. */
1689 for (fn_fields = TYPE_METHODS (t); fn_fields;
1690 fn_fields = TREE_CHAIN (fn_fields))
1691 DECL_IN_AGGR_P (fn_fields) = 0;
1693 /* Issue warnings about private constructors and such. If there are
1694 no methods, then some public defaults are generated. */
1695 maybe_warn_about_overly_private_class (t);
1697 /* The type conversion ops have to live at the front of the vec, so we
1699 for (slot = CLASSTYPE_FIRST_CONVERSION_SLOT;
1700 VEC_iterate (tree, method_vec, slot, fn_fields);
1702 if (!DECL_CONV_FN_P (OVL_CURRENT (fn_fields)))
1705 qsort (VEC_address (tree, method_vec) + slot,
1706 len-slot, sizeof (tree), method_name_cmp);
1709 /* Make BINFO's vtable have N entries, including RTTI entries,
1710 vbase and vcall offsets, etc. Set its type and call the backend
1714 layout_vtable_decl (tree binfo, int n)
1719 atype = build_cplus_array_type (vtable_entry_type,
1720 build_index_type (size_int (n - 1)));
1721 layout_type (atype);
1723 /* We may have to grow the vtable. */
1724 vtable = get_vtbl_decl_for_binfo (binfo);
1725 if (!same_type_p (TREE_TYPE (vtable), atype))
1727 TREE_TYPE (vtable) = atype;
1728 DECL_SIZE (vtable) = DECL_SIZE_UNIT (vtable) = NULL_TREE;
1729 layout_decl (vtable, 0);
1733 /* True iff FNDECL and BASE_FNDECL (both non-static member functions)
1734 have the same signature. */
1737 same_signature_p (tree fndecl, tree base_fndecl)
1739 /* One destructor overrides another if they are the same kind of
1741 if (DECL_DESTRUCTOR_P (base_fndecl) && DECL_DESTRUCTOR_P (fndecl)
1742 && special_function_p (base_fndecl) == special_function_p (fndecl))
1744 /* But a non-destructor never overrides a destructor, nor vice
1745 versa, nor do different kinds of destructors override
1746 one-another. For example, a complete object destructor does not
1747 override a deleting destructor. */
1748 if (DECL_DESTRUCTOR_P (base_fndecl) || DECL_DESTRUCTOR_P (fndecl))
1751 if (DECL_NAME (fndecl) == DECL_NAME (base_fndecl)
1752 || (DECL_CONV_FN_P (fndecl)
1753 && DECL_CONV_FN_P (base_fndecl)
1754 && same_type_p (DECL_CONV_FN_TYPE (fndecl),
1755 DECL_CONV_FN_TYPE (base_fndecl))))
1757 tree types, base_types;
1758 types = TYPE_ARG_TYPES (TREE_TYPE (fndecl));
1759 base_types = TYPE_ARG_TYPES (TREE_TYPE (base_fndecl));
1760 if ((TYPE_QUALS (TREE_TYPE (TREE_VALUE (base_types)))
1761 == TYPE_QUALS (TREE_TYPE (TREE_VALUE (types))))
1762 && compparms (TREE_CHAIN (base_types), TREE_CHAIN (types)))
1768 /* Returns TRUE if DERIVED is a binfo containing the binfo BASE as a
1772 base_derived_from (tree derived, tree base)
1776 for (probe = base; probe; probe = BINFO_INHERITANCE_CHAIN (probe))
1778 if (probe == derived)
1780 else if (BINFO_VIRTUAL_P (probe))
1781 /* If we meet a virtual base, we can't follow the inheritance
1782 any more. See if the complete type of DERIVED contains
1783 such a virtual base. */
1784 return (binfo_for_vbase (BINFO_TYPE (probe), BINFO_TYPE (derived))
1790 typedef struct find_final_overrider_data_s {
1791 /* The function for which we are trying to find a final overrider. */
1793 /* The base class in which the function was declared. */
1794 tree declaring_base;
1795 /* The candidate overriders. */
1797 /* Path to most derived. */
1798 VEC(tree,heap) *path;
1799 } find_final_overrider_data;
1801 /* Add the overrider along the current path to FFOD->CANDIDATES.
1802 Returns true if an overrider was found; false otherwise. */
1805 dfs_find_final_overrider_1 (tree binfo,
1806 find_final_overrider_data *ffod,
1811 /* If BINFO is not the most derived type, try a more derived class.
1812 A definition there will overrider a definition here. */
1816 if (dfs_find_final_overrider_1
1817 (VEC_index (tree, ffod->path, depth), ffod, depth))
1821 method = look_for_overrides_here (BINFO_TYPE (binfo), ffod->fn);
1824 tree *candidate = &ffod->candidates;
1826 /* Remove any candidates overridden by this new function. */
1829 /* If *CANDIDATE overrides METHOD, then METHOD
1830 cannot override anything else on the list. */
1831 if (base_derived_from (TREE_VALUE (*candidate), binfo))
1833 /* If METHOD overrides *CANDIDATE, remove *CANDIDATE. */
1834 if (base_derived_from (binfo, TREE_VALUE (*candidate)))
1835 *candidate = TREE_CHAIN (*candidate);
1837 candidate = &TREE_CHAIN (*candidate);
1840 /* Add the new function. */
1841 ffod->candidates = tree_cons (method, binfo, ffod->candidates);
1848 /* Called from find_final_overrider via dfs_walk. */
1851 dfs_find_final_overrider_pre (tree binfo, void *data)
1853 find_final_overrider_data *ffod = (find_final_overrider_data *) data;
1855 if (binfo == ffod->declaring_base)
1856 dfs_find_final_overrider_1 (binfo, ffod, VEC_length (tree, ffod->path));
1857 VEC_safe_push (tree, heap, ffod->path, binfo);
1863 dfs_find_final_overrider_post (tree binfo ATTRIBUTE_UNUSED, void *data)
1865 find_final_overrider_data *ffod = (find_final_overrider_data *) data;
1866 VEC_pop (tree, ffod->path);
1871 /* Returns a TREE_LIST whose TREE_PURPOSE is the final overrider for
1872 FN and whose TREE_VALUE is the binfo for the base where the
1873 overriding occurs. BINFO (in the hierarchy dominated by the binfo
1874 DERIVED) is the base object in which FN is declared. */
1877 find_final_overrider (tree derived, tree binfo, tree fn)
1879 find_final_overrider_data ffod;
1881 /* Getting this right is a little tricky. This is valid:
1883 struct S { virtual void f (); };
1884 struct T { virtual void f (); };
1885 struct U : public S, public T { };
1887 even though calling `f' in `U' is ambiguous. But,
1889 struct R { virtual void f(); };
1890 struct S : virtual public R { virtual void f (); };
1891 struct T : virtual public R { virtual void f (); };
1892 struct U : public S, public T { };
1894 is not -- there's no way to decide whether to put `S::f' or
1895 `T::f' in the vtable for `R'.
1897 The solution is to look at all paths to BINFO. If we find
1898 different overriders along any two, then there is a problem. */
1899 if (DECL_THUNK_P (fn))
1900 fn = THUNK_TARGET (fn);
1902 /* Determine the depth of the hierarchy. */
1904 ffod.declaring_base = binfo;
1905 ffod.candidates = NULL_TREE;
1906 ffod.path = VEC_alloc (tree, heap, 30);
1908 dfs_walk_all (derived, dfs_find_final_overrider_pre,
1909 dfs_find_final_overrider_post, &ffod);
1911 VEC_free (tree, heap, ffod.path);
1913 /* If there was no winner, issue an error message. */
1914 if (!ffod.candidates || TREE_CHAIN (ffod.candidates))
1915 return error_mark_node;
1917 return ffod.candidates;
1920 /* Return the index of the vcall offset for FN when TYPE is used as a
1924 get_vcall_index (tree fn, tree type)
1926 VEC(tree_pair_s,gc) *indices = CLASSTYPE_VCALL_INDICES (type);
1930 for (ix = 0; VEC_iterate (tree_pair_s, indices, ix, p); ix++)
1931 if ((DECL_DESTRUCTOR_P (fn) && DECL_DESTRUCTOR_P (p->purpose))
1932 || same_signature_p (fn, p->purpose))
1935 /* There should always be an appropriate index. */
1939 /* Update an entry in the vtable for BINFO, which is in the hierarchy
1940 dominated by T. FN has been overridden in BINFO; VIRTUALS points to the
1941 corresponding position in the BINFO_VIRTUALS list. */
1944 update_vtable_entry_for_fn (tree t, tree binfo, tree fn, tree* virtuals,
1952 tree overrider_fn, overrider_target;
1953 tree target_fn = DECL_THUNK_P (fn) ? THUNK_TARGET (fn) : fn;
1954 tree over_return, base_return;
1957 /* Find the nearest primary base (possibly binfo itself) which defines
1958 this function; this is the class the caller will convert to when
1959 calling FN through BINFO. */
1960 for (b = binfo; ; b = get_primary_binfo (b))
1963 if (look_for_overrides_here (BINFO_TYPE (b), target_fn))
1966 /* The nearest definition is from a lost primary. */
1967 if (BINFO_LOST_PRIMARY_P (b))
1972 /* Find the final overrider. */
1973 overrider = find_final_overrider (TYPE_BINFO (t), b, target_fn);
1974 if (overrider == error_mark_node)
1976 error ("no unique final overrider for %qD in %qT", target_fn, t);
1979 overrider_target = overrider_fn = TREE_PURPOSE (overrider);
1981 /* Check for adjusting covariant return types. */
1982 over_return = TREE_TYPE (TREE_TYPE (overrider_target));
1983 base_return = TREE_TYPE (TREE_TYPE (target_fn));
1985 if (POINTER_TYPE_P (over_return)
1986 && TREE_CODE (over_return) == TREE_CODE (base_return)
1987 && CLASS_TYPE_P (TREE_TYPE (over_return))
1988 && CLASS_TYPE_P (TREE_TYPE (base_return))
1989 /* If the overrider is invalid, don't even try. */
1990 && !DECL_INVALID_OVERRIDER_P (overrider_target))
1992 /* If FN is a covariant thunk, we must figure out the adjustment
1993 to the final base FN was converting to. As OVERRIDER_TARGET might
1994 also be converting to the return type of FN, we have to
1995 combine the two conversions here. */
1996 tree fixed_offset, virtual_offset;
1998 over_return = TREE_TYPE (over_return);
1999 base_return = TREE_TYPE (base_return);
2001 if (DECL_THUNK_P (fn))
2003 gcc_assert (DECL_RESULT_THUNK_P (fn));
2004 fixed_offset = ssize_int (THUNK_FIXED_OFFSET (fn));
2005 virtual_offset = THUNK_VIRTUAL_OFFSET (fn);
2008 fixed_offset = virtual_offset = NULL_TREE;
2011 /* Find the equivalent binfo within the return type of the
2012 overriding function. We will want the vbase offset from
2014 virtual_offset = binfo_for_vbase (BINFO_TYPE (virtual_offset),
2016 else if (!same_type_ignoring_top_level_qualifiers_p
2017 (over_return, base_return))
2019 /* There was no existing virtual thunk (which takes
2020 precedence). So find the binfo of the base function's
2021 return type within the overriding function's return type.
2022 We cannot call lookup base here, because we're inside a
2023 dfs_walk, and will therefore clobber the BINFO_MARKED
2024 flags. Fortunately we know the covariancy is valid (it
2025 has already been checked), so we can just iterate along
2026 the binfos, which have been chained in inheritance graph
2027 order. Of course it is lame that we have to repeat the
2028 search here anyway -- we should really be caching pieces
2029 of the vtable and avoiding this repeated work. */
2030 tree thunk_binfo, base_binfo;
2032 /* Find the base binfo within the overriding function's
2033 return type. We will always find a thunk_binfo, except
2034 when the covariancy is invalid (which we will have
2035 already diagnosed). */
2036 for (base_binfo = TYPE_BINFO (base_return),
2037 thunk_binfo = TYPE_BINFO (over_return);
2039 thunk_binfo = TREE_CHAIN (thunk_binfo))
2040 if (SAME_BINFO_TYPE_P (BINFO_TYPE (thunk_binfo),
2041 BINFO_TYPE (base_binfo)))
2044 /* See if virtual inheritance is involved. */
2045 for (virtual_offset = thunk_binfo;
2047 virtual_offset = BINFO_INHERITANCE_CHAIN (virtual_offset))
2048 if (BINFO_VIRTUAL_P (virtual_offset))
2052 || (thunk_binfo && !BINFO_OFFSET_ZEROP (thunk_binfo)))
2054 tree offset = convert (ssizetype, BINFO_OFFSET (thunk_binfo));
2058 /* We convert via virtual base. Adjust the fixed
2059 offset to be from there. */
2060 offset = size_diffop
2062 (ssizetype, BINFO_OFFSET (virtual_offset)));
2065 /* There was an existing fixed offset, this must be
2066 from the base just converted to, and the base the
2067 FN was thunking to. */
2068 fixed_offset = size_binop (PLUS_EXPR, fixed_offset, offset);
2070 fixed_offset = offset;
2074 if (fixed_offset || virtual_offset)
2075 /* Replace the overriding function with a covariant thunk. We
2076 will emit the overriding function in its own slot as
2078 overrider_fn = make_thunk (overrider_target, /*this_adjusting=*/0,
2079 fixed_offset, virtual_offset);
2082 gcc_assert (!DECL_THUNK_P (fn));
2084 /* Assume that we will produce a thunk that convert all the way to
2085 the final overrider, and not to an intermediate virtual base. */
2086 virtual_base = NULL_TREE;
2088 /* See if we can convert to an intermediate virtual base first, and then
2089 use the vcall offset located there to finish the conversion. */
2090 for (; b; b = BINFO_INHERITANCE_CHAIN (b))
2092 /* If we find the final overrider, then we can stop
2094 if (SAME_BINFO_TYPE_P (BINFO_TYPE (b),
2095 BINFO_TYPE (TREE_VALUE (overrider))))
2098 /* If we find a virtual base, and we haven't yet found the
2099 overrider, then there is a virtual base between the
2100 declaring base (first_defn) and the final overrider. */
2101 if (BINFO_VIRTUAL_P (b))
2108 if (overrider_fn != overrider_target && !virtual_base)
2110 /* The ABI specifies that a covariant thunk includes a mangling
2111 for a this pointer adjustment. This-adjusting thunks that
2112 override a function from a virtual base have a vcall
2113 adjustment. When the virtual base in question is a primary
2114 virtual base, we know the adjustments are zero, (and in the
2115 non-covariant case, we would not use the thunk).
2116 Unfortunately we didn't notice this could happen, when
2117 designing the ABI and so never mandated that such a covariant
2118 thunk should be emitted. Because we must use the ABI mandated
2119 name, we must continue searching from the binfo where we
2120 found the most recent definition of the function, towards the
2121 primary binfo which first introduced the function into the
2122 vtable. If that enters a virtual base, we must use a vcall
2123 this-adjusting thunk. Bleah! */
2124 tree probe = first_defn;
2126 while ((probe = get_primary_binfo (probe))
2127 && (unsigned) list_length (BINFO_VIRTUALS (probe)) > ix)
2128 if (BINFO_VIRTUAL_P (probe))
2129 virtual_base = probe;
2132 /* Even if we find a virtual base, the correct delta is
2133 between the overrider and the binfo we're building a vtable
2135 goto virtual_covariant;
2138 /* Compute the constant adjustment to the `this' pointer. The
2139 `this' pointer, when this function is called, will point at BINFO
2140 (or one of its primary bases, which are at the same offset). */
2142 /* The `this' pointer needs to be adjusted from the declaration to
2143 the nearest virtual base. */
2144 delta = size_diffop (convert (ssizetype, BINFO_OFFSET (virtual_base)),
2145 convert (ssizetype, BINFO_OFFSET (first_defn)));
2147 /* If the nearest definition is in a lost primary, we don't need an
2148 entry in our vtable. Except possibly in a constructor vtable,
2149 if we happen to get our primary back. In that case, the offset
2150 will be zero, as it will be a primary base. */
2151 delta = size_zero_node;
2153 /* The `this' pointer needs to be adjusted from pointing to
2154 BINFO to pointing at the base where the final overrider
2157 delta = size_diffop (convert (ssizetype,
2158 BINFO_OFFSET (TREE_VALUE (overrider))),
2159 convert (ssizetype, BINFO_OFFSET (binfo)));
2161 modify_vtable_entry (t, binfo, overrider_fn, delta, virtuals);
2164 BV_VCALL_INDEX (*virtuals)
2165 = get_vcall_index (overrider_target, BINFO_TYPE (virtual_base));
2167 BV_VCALL_INDEX (*virtuals) = NULL_TREE;
2170 /* Called from modify_all_vtables via dfs_walk. */
2173 dfs_modify_vtables (tree binfo, void* data)
2175 tree t = (tree) data;
2180 if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
2181 /* A base without a vtable needs no modification, and its bases
2182 are uninteresting. */
2183 return dfs_skip_bases;
2185 if (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), t)
2186 && !CLASSTYPE_HAS_PRIMARY_BASE_P (t))
2187 /* Don't do the primary vtable, if it's new. */
2190 if (BINFO_PRIMARY_P (binfo) && !BINFO_VIRTUAL_P (binfo))
2191 /* There's no need to modify the vtable for a non-virtual primary
2192 base; we're not going to use that vtable anyhow. We do still
2193 need to do this for virtual primary bases, as they could become
2194 non-primary in a construction vtable. */
2197 make_new_vtable (t, binfo);
2199 /* Now, go through each of the virtual functions in the virtual
2200 function table for BINFO. Find the final overrider, and update
2201 the BINFO_VIRTUALS list appropriately. */
2202 for (ix = 0, virtuals = BINFO_VIRTUALS (binfo),
2203 old_virtuals = BINFO_VIRTUALS (TYPE_BINFO (BINFO_TYPE (binfo)));
2205 ix++, virtuals = TREE_CHAIN (virtuals),
2206 old_virtuals = TREE_CHAIN (old_virtuals))
2207 update_vtable_entry_for_fn (t,
2209 BV_FN (old_virtuals),
2215 /* Update all of the primary and secondary vtables for T. Create new
2216 vtables as required, and initialize their RTTI information. Each
2217 of the functions in VIRTUALS is declared in T and may override a
2218 virtual function from a base class; find and modify the appropriate
2219 entries to point to the overriding functions. Returns a list, in
2220 declaration order, of the virtual functions that are declared in T,
2221 but do not appear in the primary base class vtable, and which
2222 should therefore be appended to the end of the vtable for T. */
2225 modify_all_vtables (tree t, tree virtuals)
2227 tree binfo = TYPE_BINFO (t);
2230 /* Update all of the vtables. */
2231 dfs_walk_once (binfo, dfs_modify_vtables, NULL, t);
2233 /* Add virtual functions not already in our primary vtable. These
2234 will be both those introduced by this class, and those overridden
2235 from secondary bases. It does not include virtuals merely
2236 inherited from secondary bases. */
2237 for (fnsp = &virtuals; *fnsp; )
2239 tree fn = TREE_VALUE (*fnsp);
2241 if (!value_member (fn, BINFO_VIRTUALS (binfo))
2242 || DECL_VINDEX (fn) == error_mark_node)
2244 /* We don't need to adjust the `this' pointer when
2245 calling this function. */
2246 BV_DELTA (*fnsp) = integer_zero_node;
2247 BV_VCALL_INDEX (*fnsp) = NULL_TREE;
2249 /* This is a function not already in our vtable. Keep it. */
2250 fnsp = &TREE_CHAIN (*fnsp);
2253 /* We've already got an entry for this function. Skip it. */
2254 *fnsp = TREE_CHAIN (*fnsp);
2260 /* Get the base virtual function declarations in T that have the
2264 get_basefndecls (tree name, tree t)
2267 tree base_fndecls = NULL_TREE;
2268 int n_baseclasses = BINFO_N_BASE_BINFOS (TYPE_BINFO (t));
2271 /* Find virtual functions in T with the indicated NAME. */
2272 i = lookup_fnfields_1 (t, name);
2274 for (methods = VEC_index (tree, CLASSTYPE_METHOD_VEC (t), i);
2276 methods = OVL_NEXT (methods))
2278 tree method = OVL_CURRENT (methods);
2280 if (TREE_CODE (method) == FUNCTION_DECL
2281 && DECL_VINDEX (method))
2282 base_fndecls = tree_cons (NULL_TREE, method, base_fndecls);
2286 return base_fndecls;
2288 for (i = 0; i < n_baseclasses; i++)
2290 tree basetype = BINFO_TYPE (BINFO_BASE_BINFO (TYPE_BINFO (t), i));
2291 base_fndecls = chainon (get_basefndecls (name, basetype),
2295 return base_fndecls;
2298 /* If this declaration supersedes the declaration of
2299 a method declared virtual in the base class, then
2300 mark this field as being virtual as well. */
2303 check_for_override (tree decl, tree ctype)
2305 if (TREE_CODE (decl) == TEMPLATE_DECL)
2306 /* In [temp.mem] we have:
2308 A specialization of a member function template does not
2309 override a virtual function from a base class. */
2311 if ((DECL_DESTRUCTOR_P (decl)
2312 || IDENTIFIER_VIRTUAL_P (DECL_NAME (decl))
2313 || DECL_CONV_FN_P (decl))
2314 && look_for_overrides (ctype, decl)
2315 && !DECL_STATIC_FUNCTION_P (decl))
2316 /* Set DECL_VINDEX to a value that is neither an INTEGER_CST nor
2317 the error_mark_node so that we know it is an overriding
2319 DECL_VINDEX (decl) = decl;
2321 if (DECL_VIRTUAL_P (decl))
2323 if (!DECL_VINDEX (decl))
2324 DECL_VINDEX (decl) = error_mark_node;
2325 IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)) = 1;
2329 /* Warn about hidden virtual functions that are not overridden in t.
2330 We know that constructors and destructors don't apply. */
2333 warn_hidden (tree t)
2335 VEC(tree,gc) *method_vec = CLASSTYPE_METHOD_VEC (t);
2339 /* We go through each separately named virtual function. */
2340 for (i = CLASSTYPE_FIRST_CONVERSION_SLOT;
2341 VEC_iterate (tree, method_vec, i, fns);
2352 /* All functions in this slot in the CLASSTYPE_METHOD_VEC will
2353 have the same name. Figure out what name that is. */
2354 name = DECL_NAME (OVL_CURRENT (fns));
2355 /* There are no possibly hidden functions yet. */
2356 base_fndecls = NULL_TREE;
2357 /* Iterate through all of the base classes looking for possibly
2358 hidden functions. */
2359 for (binfo = TYPE_BINFO (t), j = 0;
2360 BINFO_BASE_ITERATE (binfo, j, base_binfo); j++)
2362 tree basetype = BINFO_TYPE (base_binfo);
2363 base_fndecls = chainon (get_basefndecls (name, basetype),
2367 /* If there are no functions to hide, continue. */
2371 /* Remove any overridden functions. */
2372 for (fn = fns; fn; fn = OVL_NEXT (fn))
2374 fndecl = OVL_CURRENT (fn);
2375 if (DECL_VINDEX (fndecl))
2377 tree *prev = &base_fndecls;
2380 /* If the method from the base class has the same
2381 signature as the method from the derived class, it
2382 has been overridden. */
2383 if (same_signature_p (fndecl, TREE_VALUE (*prev)))
2384 *prev = TREE_CHAIN (*prev);
2386 prev = &TREE_CHAIN (*prev);
2390 /* Now give a warning for all base functions without overriders,
2391 as they are hidden. */
2392 while (base_fndecls)
2394 /* Here we know it is a hider, and no overrider exists. */
2395 warning (0, "%q+D was hidden", TREE_VALUE (base_fndecls));
2396 warning (0, " by %q+D", fns);
2397 base_fndecls = TREE_CHAIN (base_fndecls);
2402 /* Check for things that are invalid. There are probably plenty of other
2403 things we should check for also. */
2406 finish_struct_anon (tree t)
2410 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
2412 if (TREE_STATIC (field))
2414 if (TREE_CODE (field) != FIELD_DECL)
2417 if (DECL_NAME (field) == NULL_TREE
2418 && ANON_AGGR_TYPE_P (TREE_TYPE (field)))
2420 tree elt = TYPE_FIELDS (TREE_TYPE (field));
2421 for (; elt; elt = TREE_CHAIN (elt))
2423 /* We're generally only interested in entities the user
2424 declared, but we also find nested classes by noticing
2425 the TYPE_DECL that we create implicitly. You're
2426 allowed to put one anonymous union inside another,
2427 though, so we explicitly tolerate that. We use
2428 TYPE_ANONYMOUS_P rather than ANON_AGGR_TYPE_P so that
2429 we also allow unnamed types used for defining fields. */
2430 if (DECL_ARTIFICIAL (elt)
2431 && (!DECL_IMPLICIT_TYPEDEF_P (elt)
2432 || TYPE_ANONYMOUS_P (TREE_TYPE (elt))))
2435 if (TREE_CODE (elt) != FIELD_DECL)
2437 pedwarn ("%q+#D invalid; an anonymous union can "
2438 "only have non-static data members", elt);
2442 if (TREE_PRIVATE (elt))
2443 pedwarn ("private member %q+#D in anonymous union", elt);
2444 else if (TREE_PROTECTED (elt))
2445 pedwarn ("protected member %q+#D in anonymous union", elt);
2447 TREE_PRIVATE (elt) = TREE_PRIVATE (field);
2448 TREE_PROTECTED (elt) = TREE_PROTECTED (field);
2454 /* Add T to CLASSTYPE_DECL_LIST of current_class_type which
2455 will be used later during class template instantiation.
2456 When FRIEND_P is zero, T can be a static member data (VAR_DECL),
2457 a non-static member data (FIELD_DECL), a member function
2458 (FUNCTION_DECL), a nested type (RECORD_TYPE, ENUM_TYPE),
2459 a typedef (TYPE_DECL) or a member class template (TEMPLATE_DECL)
2460 When FRIEND_P is nonzero, T is either a friend class
2461 (RECORD_TYPE, TEMPLATE_DECL) or a friend function
2462 (FUNCTION_DECL, TEMPLATE_DECL). */
2465 maybe_add_class_template_decl_list (tree type, tree t, int friend_p)
2467 /* Save some memory by not creating TREE_LIST if TYPE is not template. */
2468 if (CLASSTYPE_TEMPLATE_INFO (type))
2469 CLASSTYPE_DECL_LIST (type)
2470 = tree_cons (friend_p ? NULL_TREE : type,
2471 t, CLASSTYPE_DECL_LIST (type));
2474 /* Create default constructors, assignment operators, and so forth for
2475 the type indicated by T, if they are needed. CANT_HAVE_CONST_CTOR,
2476 and CANT_HAVE_CONST_ASSIGNMENT are nonzero if, for whatever reason,
2477 the class cannot have a default constructor, copy constructor
2478 taking a const reference argument, or an assignment operator taking
2479 a const reference, respectively. */
2482 add_implicitly_declared_members (tree t,
2483 int cant_have_const_cctor,
2484 int cant_have_const_assignment)
2487 if (!CLASSTYPE_DESTRUCTORS (t))
2489 /* In general, we create destructors lazily. */
2490 CLASSTYPE_LAZY_DESTRUCTOR (t) = 1;
2491 /* However, if the implicit destructor is non-trivial
2492 destructor, we sometimes have to create it at this point. */
2493 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t))
2497 if (TYPE_FOR_JAVA (t))
2498 /* If this a Java class, any non-trivial destructor is
2499 invalid, even if compiler-generated. Therefore, if the
2500 destructor is non-trivial we create it now. */
2508 /* If the implicit destructor will be virtual, then we must
2509 generate it now because (unfortunately) we do not
2510 generate virtual tables lazily. */
2511 binfo = TYPE_BINFO (t);
2512 for (ix = 0; BINFO_BASE_ITERATE (binfo, ix, base_binfo); ix++)
2517 base_type = BINFO_TYPE (base_binfo);
2518 dtor = CLASSTYPE_DESTRUCTORS (base_type);
2519 if (dtor && DECL_VIRTUAL_P (dtor))
2527 /* If we can't get away with being lazy, generate the destructor
2530 lazily_declare_fn (sfk_destructor, t);
2534 /* Default constructor. */
2535 if (! TYPE_HAS_CONSTRUCTOR (t))
2537 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 1;
2538 CLASSTYPE_LAZY_DEFAULT_CTOR (t) = 1;
2541 /* Copy constructor. */
2542 if (! TYPE_HAS_INIT_REF (t) && ! TYPE_FOR_JAVA (t))
2544 TYPE_HAS_INIT_REF (t) = 1;
2545 TYPE_HAS_CONST_INIT_REF (t) = !cant_have_const_cctor;
2546 CLASSTYPE_LAZY_COPY_CTOR (t) = 1;
2547 TYPE_HAS_CONSTRUCTOR (t) = 1;
2550 /* If there is no assignment operator, one will be created if and
2551 when it is needed. For now, just record whether or not the type
2552 of the parameter to the assignment operator will be a const or
2553 non-const reference. */
2554 if (!TYPE_HAS_ASSIGN_REF (t) && !TYPE_FOR_JAVA (t))
2556 TYPE_HAS_ASSIGN_REF (t) = 1;
2557 TYPE_HAS_CONST_ASSIGN_REF (t) = !cant_have_const_assignment;
2558 CLASSTYPE_LAZY_ASSIGNMENT_OP (t) = 1;
2562 /* Subroutine of finish_struct_1. Recursively count the number of fields
2563 in TYPE, including anonymous union members. */
2566 count_fields (tree fields)
2570 for (x = fields; x; x = TREE_CHAIN (x))
2572 if (TREE_CODE (x) == FIELD_DECL && ANON_AGGR_TYPE_P (TREE_TYPE (x)))
2573 n_fields += count_fields (TYPE_FIELDS (TREE_TYPE (x)));
2580 /* Subroutine of finish_struct_1. Recursively add all the fields in the
2581 TREE_LIST FIELDS to the SORTED_FIELDS_TYPE elts, starting at offset IDX. */
2584 add_fields_to_record_type (tree fields, struct sorted_fields_type *field_vec, int idx)
2587 for (x = fields; x; x = TREE_CHAIN (x))
2589 if (TREE_CODE (x) == FIELD_DECL && ANON_AGGR_TYPE_P (TREE_TYPE (x)))
2590 idx = add_fields_to_record_type (TYPE_FIELDS (TREE_TYPE (x)), field_vec, idx);
2592 field_vec->elts[idx++] = x;
2597 /* FIELD is a bit-field. We are finishing the processing for its
2598 enclosing type. Issue any appropriate messages and set appropriate
2602 check_bitfield_decl (tree field)
2604 tree type = TREE_TYPE (field);
2607 /* Detect invalid bit-field type. */
2608 if (DECL_INITIAL (field)
2609 && ! INTEGRAL_TYPE_P (TREE_TYPE (field)))
2611 error ("bit-field %q+#D with non-integral type", field);
2612 w = error_mark_node;
2615 /* Detect and ignore out of range field width. */
2616 if (DECL_INITIAL (field))
2618 w = DECL_INITIAL (field);
2620 /* Avoid the non_lvalue wrapper added by fold for PLUS_EXPRs. */
2623 /* detect invalid field size. */
2624 w = integral_constant_value (w);
2626 if (TREE_CODE (w) != INTEGER_CST)
2628 error ("bit-field %q+D width not an integer constant", field);
2629 w = error_mark_node;
2631 else if (tree_int_cst_sgn (w) < 0)
2633 error ("negative width in bit-field %q+D", field);
2634 w = error_mark_node;
2636 else if (integer_zerop (w) && DECL_NAME (field) != 0)
2638 error ("zero width for bit-field %q+D", field);
2639 w = error_mark_node;
2641 else if (compare_tree_int (w, TYPE_PRECISION (type)) > 0
2642 && TREE_CODE (type) != ENUMERAL_TYPE
2643 && TREE_CODE (type) != BOOLEAN_TYPE)
2644 warning (0, "width of %q+D exceeds its type", field);
2645 else if (TREE_CODE (type) == ENUMERAL_TYPE
2646 && (0 > compare_tree_int (w,
2647 min_precision (TYPE_MIN_VALUE (type),
2648 TYPE_UNSIGNED (type)))
2649 || 0 > compare_tree_int (w,
2651 (TYPE_MAX_VALUE (type),
2652 TYPE_UNSIGNED (type)))))
2653 warning (0, "%q+D is too small to hold all values of %q#T", field, type);
2656 /* Remove the bit-field width indicator so that the rest of the
2657 compiler does not treat that value as an initializer. */
2658 DECL_INITIAL (field) = NULL_TREE;
2660 if (w != error_mark_node)
2662 DECL_SIZE (field) = convert (bitsizetype, w);
2663 DECL_BIT_FIELD (field) = 1;
2667 /* Non-bit-fields are aligned for their type. */
2668 DECL_BIT_FIELD (field) = 0;
2669 CLEAR_DECL_C_BIT_FIELD (field);
2673 /* FIELD is a non bit-field. We are finishing the processing for its
2674 enclosing type T. Issue any appropriate messages and set appropriate
2678 check_field_decl (tree field,
2680 int* cant_have_const_ctor,
2681 int* no_const_asn_ref,
2682 int* any_default_members)
2684 tree type = strip_array_types (TREE_TYPE (field));
2686 /* An anonymous union cannot contain any fields which would change
2687 the settings of CANT_HAVE_CONST_CTOR and friends. */
2688 if (ANON_UNION_TYPE_P (type))
2690 /* And, we don't set TYPE_HAS_CONST_INIT_REF, etc., for anonymous
2691 structs. So, we recurse through their fields here. */
2692 else if (ANON_AGGR_TYPE_P (type))
2696 for (fields = TYPE_FIELDS (type); fields; fields = TREE_CHAIN (fields))
2697 if (TREE_CODE (fields) == FIELD_DECL && !DECL_C_BIT_FIELD (field))
2698 check_field_decl (fields, t, cant_have_const_ctor,
2699 no_const_asn_ref, any_default_members);
2701 /* Check members with class type for constructors, destructors,
2703 else if (CLASS_TYPE_P (type))
2705 /* Never let anything with uninheritable virtuals
2706 make it through without complaint. */
2707 abstract_virtuals_error (field, type);
2709 if (TREE_CODE (t) == UNION_TYPE)
2711 if (TYPE_NEEDS_CONSTRUCTING (type))
2712 error ("member %q+#D with constructor not allowed in union",
2714 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
2715 error ("member %q+#D with destructor not allowed in union", field);
2716 if (TYPE_HAS_COMPLEX_ASSIGN_REF (type))
2717 error ("member %q+#D with copy assignment operator not allowed in union",
2722 TYPE_NEEDS_CONSTRUCTING (t) |= TYPE_NEEDS_CONSTRUCTING (type);
2723 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
2724 |= TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type);
2725 TYPE_HAS_COMPLEX_ASSIGN_REF (t) |= TYPE_HAS_COMPLEX_ASSIGN_REF (type);
2726 TYPE_HAS_COMPLEX_INIT_REF (t) |= TYPE_HAS_COMPLEX_INIT_REF (type);
2729 if (!TYPE_HAS_CONST_INIT_REF (type))
2730 *cant_have_const_ctor = 1;
2732 if (!TYPE_HAS_CONST_ASSIGN_REF (type))
2733 *no_const_asn_ref = 1;
2735 if (DECL_INITIAL (field) != NULL_TREE)
2737 /* `build_class_init_list' does not recognize
2739 if (TREE_CODE (t) == UNION_TYPE && any_default_members != 0)
2740 error ("multiple fields in union %qT initialized", t);
2741 *any_default_members = 1;
2745 /* Check the data members (both static and non-static), class-scoped
2746 typedefs, etc., appearing in the declaration of T. Issue
2747 appropriate diagnostics. Sets ACCESS_DECLS to a list (in
2748 declaration order) of access declarations; each TREE_VALUE in this
2749 list is a USING_DECL.
2751 In addition, set the following flags:
2754 The class is empty, i.e., contains no non-static data members.
2756 CANT_HAVE_CONST_CTOR_P
2757 This class cannot have an implicitly generated copy constructor
2758 taking a const reference.
2760 CANT_HAVE_CONST_ASN_REF
2761 This class cannot have an implicitly generated assignment
2762 operator taking a const reference.
2764 All of these flags should be initialized before calling this
2767 Returns a pointer to the end of the TYPE_FIELDs chain; additional
2768 fields can be added by adding to this chain. */
2771 check_field_decls (tree t, tree *access_decls,
2772 int *cant_have_const_ctor_p,
2773 int *no_const_asn_ref_p)
2778 int any_default_members;
2780 /* Assume there are no access declarations. */
2781 *access_decls = NULL_TREE;
2782 /* Assume this class has no pointer members. */
2783 has_pointers = false;
2784 /* Assume none of the members of this class have default
2786 any_default_members = 0;
2788 for (field = &TYPE_FIELDS (t); *field; field = next)
2791 tree type = TREE_TYPE (x);
2793 next = &TREE_CHAIN (x);
2795 if (TREE_CODE (x) == FIELD_DECL)
2797 if (TYPE_PACKED (t))
2799 if (!pod_type_p (TREE_TYPE (x)) && !TYPE_PACKED (TREE_TYPE (x)))
2802 "ignoring packed attribute on unpacked non-POD field %q+#D",
2805 DECL_PACKED (x) = 1;
2808 if (DECL_C_BIT_FIELD (x) && integer_zerop (DECL_INITIAL (x)))
2809 /* We don't treat zero-width bitfields as making a class
2816 /* The class is non-empty. */
2817 CLASSTYPE_EMPTY_P (t) = 0;
2818 /* The class is not even nearly empty. */
2819 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
2820 /* If one of the data members contains an empty class,
2822 element_type = strip_array_types (type);
2823 if (CLASS_TYPE_P (element_type)
2824 && CLASSTYPE_CONTAINS_EMPTY_CLASS_P (element_type))
2825 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) = 1;
2829 if (TREE_CODE (x) == USING_DECL)
2831 /* Prune the access declaration from the list of fields. */
2832 *field = TREE_CHAIN (x);
2834 /* Save the access declarations for our caller. */
2835 *access_decls = tree_cons (NULL_TREE, x, *access_decls);
2837 /* Since we've reset *FIELD there's no reason to skip to the
2843 if (TREE_CODE (x) == TYPE_DECL
2844 || TREE_CODE (x) == TEMPLATE_DECL)
2847 /* If we've gotten this far, it's a data member, possibly static,
2848 or an enumerator. */
2849 DECL_CONTEXT (x) = t;
2851 /* When this goes into scope, it will be a non-local reference. */
2852 DECL_NONLOCAL (x) = 1;
2854 if (TREE_CODE (t) == UNION_TYPE)
2858 If a union contains a static data member, or a member of
2859 reference type, the program is ill-formed. */
2860 if (TREE_CODE (x) == VAR_DECL)
2862 error ("%q+D may not be static because it is a member of a union", x);
2865 if (TREE_CODE (type) == REFERENCE_TYPE)
2867 error ("%q+D may not have reference type %qT because"
2868 " it is a member of a union",
2874 /* ``A local class cannot have static data members.'' ARM 9.4 */
2875 if (current_function_decl && TREE_STATIC (x))
2876 error ("field %q+D in local class cannot be static", x);
2878 /* Perform error checking that did not get done in
2880 if (TREE_CODE (type) == FUNCTION_TYPE)
2882 error ("field %q+D invalidly declared function type", x);
2883 type = build_pointer_type (type);
2884 TREE_TYPE (x) = type;
2886 else if (TREE_CODE (type) == METHOD_TYPE)
2888 error ("field %q+D invalidly declared method type", x);
2889 type = build_pointer_type (type);
2890 TREE_TYPE (x) = type;
2893 if (type == error_mark_node)
2896 if (TREE_CODE (x) == CONST_DECL || TREE_CODE (x) == VAR_DECL)
2899 /* Now it can only be a FIELD_DECL. */
2901 if (TREE_PRIVATE (x) || TREE_PROTECTED (x))
2902 CLASSTYPE_NON_AGGREGATE (t) = 1;
2904 /* If this is of reference type, check if it needs an init.
2905 Also do a little ANSI jig if necessary. */
2906 if (TREE_CODE (type) == REFERENCE_TYPE)
2908 CLASSTYPE_NON_POD_P (t) = 1;
2909 if (DECL_INITIAL (x) == NULL_TREE)
2910 SET_CLASSTYPE_REF_FIELDS_NEED_INIT (t, 1);
2912 /* ARM $12.6.2: [A member initializer list] (or, for an
2913 aggregate, initialization by a brace-enclosed list) is the
2914 only way to initialize nonstatic const and reference
2916 TYPE_HAS_COMPLEX_ASSIGN_REF (t) = 1;
2918 if (! TYPE_HAS_CONSTRUCTOR (t) && CLASSTYPE_NON_AGGREGATE (t)
2920 warning (0, "non-static reference %q+#D in class without a constructor", x);
2923 type = strip_array_types (type);
2925 /* This is used by -Weffc++ (see below). Warn only for pointers
2926 to members which might hold dynamic memory. So do not warn
2927 for pointers to functions or pointers to members. */
2928 if (TYPE_PTR_P (type)
2929 && !TYPE_PTRFN_P (type)
2930 && !TYPE_PTR_TO_MEMBER_P (type))
2931 has_pointers = true;
2933 if (CLASS_TYPE_P (type))
2935 if (CLASSTYPE_REF_FIELDS_NEED_INIT (type))
2936 SET_CLASSTYPE_REF_FIELDS_NEED_INIT (t, 1);
2937 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (type))
2938 SET_CLASSTYPE_READONLY_FIELDS_NEED_INIT (t, 1);
2941 if (DECL_MUTABLE_P (x) || TYPE_HAS_MUTABLE_P (type))
2942 CLASSTYPE_HAS_MUTABLE (t) = 1;
2944 if (! pod_type_p (type))
2945 /* DR 148 now allows pointers to members (which are POD themselves),
2946 to be allowed in POD structs. */
2947 CLASSTYPE_NON_POD_P (t) = 1;
2949 if (! zero_init_p (type))
2950 CLASSTYPE_NON_ZERO_INIT_P (t) = 1;
2952 /* If any field is const, the structure type is pseudo-const. */
2953 if (CP_TYPE_CONST_P (type))
2955 C_TYPE_FIELDS_READONLY (t) = 1;
2956 if (DECL_INITIAL (x) == NULL_TREE)
2957 SET_CLASSTYPE_READONLY_FIELDS_NEED_INIT (t, 1);
2959 /* ARM $12.6.2: [A member initializer list] (or, for an
2960 aggregate, initialization by a brace-enclosed list) is the
2961 only way to initialize nonstatic const and reference
2963 TYPE_HAS_COMPLEX_ASSIGN_REF (t) = 1;
2965 if (! TYPE_HAS_CONSTRUCTOR (t) && CLASSTYPE_NON_AGGREGATE (t)
2967 warning (0, "non-static const member %q+#D in class without a constructor", x);
2969 /* A field that is pseudo-const makes the structure likewise. */
2970 else if (CLASS_TYPE_P (type))
2972 C_TYPE_FIELDS_READONLY (t) |= C_TYPE_FIELDS_READONLY (type);
2973 SET_CLASSTYPE_READONLY_FIELDS_NEED_INIT (t,
2974 CLASSTYPE_READONLY_FIELDS_NEED_INIT (t)
2975 | CLASSTYPE_READONLY_FIELDS_NEED_INIT (type));
2978 /* Core issue 80: A nonstatic data member is required to have a
2979 different name from the class iff the class has a
2980 user-defined constructor. */
2981 if (constructor_name_p (DECL_NAME (x), t) && TYPE_HAS_CONSTRUCTOR (t))
2982 pedwarn ("field %q+#D with same name as class", x);
2984 /* We set DECL_C_BIT_FIELD in grokbitfield.
2985 If the type and width are valid, we'll also set DECL_BIT_FIELD. */
2986 if (DECL_C_BIT_FIELD (x))
2987 check_bitfield_decl (x);
2989 check_field_decl (x, t,
2990 cant_have_const_ctor_p,
2992 &any_default_members);
2995 /* Effective C++ rule 11: if a class has dynamic memory held by pointers,
2996 it should also define a copy constructor and an assignment operator to
2997 implement the correct copy semantic (deep vs shallow, etc.). As it is
2998 not feasible to check whether the constructors do allocate dynamic memory
2999 and store it within members, we approximate the warning like this:
3001 -- Warn only if there are members which are pointers
3002 -- Warn only if there is a non-trivial constructor (otherwise,
3003 there cannot be memory allocated).
3004 -- Warn only if there is a non-trivial destructor. We assume that the
3005 user at least implemented the cleanup correctly, and a destructor
3006 is needed to free dynamic memory.
3008 This seems enough for practical purposes. */
3011 && TYPE_HAS_CONSTRUCTOR (t)
3012 && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
3013 && !(TYPE_HAS_INIT_REF (t) && TYPE_HAS_ASSIGN_REF (t)))
3015 warning (0, "%q#T has pointer data members", t);
3017 if (! TYPE_HAS_INIT_REF (t))
3019 warning (0, " but does not override %<%T(const %T&)%>", t, t);
3020 if (! TYPE_HAS_ASSIGN_REF (t))
3021 warning (0, " or %<operator=(const %T&)%>", t);
3023 else if (! TYPE_HAS_ASSIGN_REF (t))
3024 warning (0, " but does not override %<operator=(const %T&)%>", t);
3028 /* Check anonymous struct/anonymous union fields. */
3029 finish_struct_anon (t);
3031 /* We've built up the list of access declarations in reverse order.
3033 *access_decls = nreverse (*access_decls);
3036 /* If TYPE is an empty class type, records its OFFSET in the table of
3040 record_subobject_offset (tree type, tree offset, splay_tree offsets)
3044 if (!is_empty_class (type))
3047 /* Record the location of this empty object in OFFSETS. */
3048 n = splay_tree_lookup (offsets, (splay_tree_key) offset);
3050 n = splay_tree_insert (offsets,
3051 (splay_tree_key) offset,
3052 (splay_tree_value) NULL_TREE);
3053 n->value = ((splay_tree_value)
3054 tree_cons (NULL_TREE,
3061 /* Returns nonzero if TYPE is an empty class type and there is
3062 already an entry in OFFSETS for the same TYPE as the same OFFSET. */
3065 check_subobject_offset (tree type, tree offset, splay_tree offsets)
3070 if (!is_empty_class (type))
3073 /* Record the location of this empty object in OFFSETS. */
3074 n = splay_tree_lookup (offsets, (splay_tree_key) offset);
3078 for (t = (tree) n->value; t; t = TREE_CHAIN (t))
3079 if (same_type_p (TREE_VALUE (t), type))
3085 /* Walk through all the subobjects of TYPE (located at OFFSET). Call
3086 F for every subobject, passing it the type, offset, and table of
3087 OFFSETS. If VBASES_P is one, then virtual non-primary bases should
3090 If MAX_OFFSET is non-NULL, then subobjects with an offset greater
3091 than MAX_OFFSET will not be walked.
3093 If F returns a nonzero value, the traversal ceases, and that value
3094 is returned. Otherwise, returns zero. */
3097 walk_subobject_offsets (tree type,
3098 subobject_offset_fn f,
3105 tree type_binfo = NULL_TREE;
3107 /* If this OFFSET is bigger than the MAX_OFFSET, then we should
3109 if (max_offset && INT_CST_LT (max_offset, offset))
3112 if (type == error_mark_node)
3117 if (abi_version_at_least (2))
3119 type = BINFO_TYPE (type);
3122 if (CLASS_TYPE_P (type))
3128 /* Avoid recursing into objects that are not interesting. */
3129 if (!CLASSTYPE_CONTAINS_EMPTY_CLASS_P (type))
3132 /* Record the location of TYPE. */
3133 r = (*f) (type, offset, offsets);
3137 /* Iterate through the direct base classes of TYPE. */
3139 type_binfo = TYPE_BINFO (type);
3140 for (i = 0; BINFO_BASE_ITERATE (type_binfo, i, binfo); i++)
3144 if (abi_version_at_least (2)
3145 && BINFO_VIRTUAL_P (binfo))
3149 && BINFO_VIRTUAL_P (binfo)
3150 && !BINFO_PRIMARY_P (binfo))
3153 if (!abi_version_at_least (2))
3154 binfo_offset = size_binop (PLUS_EXPR,
3156 BINFO_OFFSET (binfo));
3160 /* We cannot rely on BINFO_OFFSET being set for the base
3161 class yet, but the offsets for direct non-virtual
3162 bases can be calculated by going back to the TYPE. */
3163 orig_binfo = BINFO_BASE_BINFO (TYPE_BINFO (type), i);
3164 binfo_offset = size_binop (PLUS_EXPR,
3166 BINFO_OFFSET (orig_binfo));
3169 r = walk_subobject_offsets (binfo,
3174 (abi_version_at_least (2)
3175 ? /*vbases_p=*/0 : vbases_p));
3180 if (abi_version_at_least (2) && CLASSTYPE_VBASECLASSES (type))
3183 VEC(tree,gc) *vbases;
3185 /* Iterate through the virtual base classes of TYPE. In G++
3186 3.2, we included virtual bases in the direct base class
3187 loop above, which results in incorrect results; the
3188 correct offsets for virtual bases are only known when
3189 working with the most derived type. */
3191 for (vbases = CLASSTYPE_VBASECLASSES (type), ix = 0;
3192 VEC_iterate (tree, vbases, ix, binfo); ix++)
3194 r = walk_subobject_offsets (binfo,
3196 size_binop (PLUS_EXPR,
3198 BINFO_OFFSET (binfo)),
3207 /* We still have to walk the primary base, if it is
3208 virtual. (If it is non-virtual, then it was walked
3210 tree vbase = get_primary_binfo (type_binfo);
3212 if (vbase && BINFO_VIRTUAL_P (vbase)
3213 && BINFO_PRIMARY_P (vbase)
3214 && BINFO_INHERITANCE_CHAIN (vbase) == type_binfo)
3216 r = (walk_subobject_offsets
3218 offsets, max_offset, /*vbases_p=*/0));
3225 /* Iterate through the fields of TYPE. */
3226 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
3227 if (TREE_CODE (field) == FIELD_DECL && !DECL_ARTIFICIAL (field))
3231 if (abi_version_at_least (2))
3232 field_offset = byte_position (field);
3234 /* In G++ 3.2, DECL_FIELD_OFFSET was used. */
3235 field_offset = DECL_FIELD_OFFSET (field);
3237 r = walk_subobject_offsets (TREE_TYPE (field),
3239 size_binop (PLUS_EXPR,
3249 else if (TREE_CODE (type) == ARRAY_TYPE)
3251 tree element_type = strip_array_types (type);
3252 tree domain = TYPE_DOMAIN (type);
3255 /* Avoid recursing into objects that are not interesting. */
3256 if (!CLASS_TYPE_P (element_type)
3257 || !CLASSTYPE_CONTAINS_EMPTY_CLASS_P (element_type))
3260 /* Step through each of the elements in the array. */
3261 for (index = size_zero_node;
3262 /* G++ 3.2 had an off-by-one error here. */
3263 (abi_version_at_least (2)
3264 ? !INT_CST_LT (TYPE_MAX_VALUE (domain), index)
3265 : INT_CST_LT (index, TYPE_MAX_VALUE (domain)));
3266 index = size_binop (PLUS_EXPR, index, size_one_node))
3268 r = walk_subobject_offsets (TREE_TYPE (type),
3276 offset = size_binop (PLUS_EXPR, offset,
3277 TYPE_SIZE_UNIT (TREE_TYPE (type)));
3278 /* If this new OFFSET is bigger than the MAX_OFFSET, then
3279 there's no point in iterating through the remaining
3280 elements of the array. */
3281 if (max_offset && INT_CST_LT (max_offset, offset))
3289 /* Record all of the empty subobjects of TYPE (either a type or a
3290 binfo). If IS_DATA_MEMBER is true, then a non-static data member
3291 is being placed at OFFSET; otherwise, it is a base class that is
3292 being placed at OFFSET. */
3295 record_subobject_offsets (tree type,
3298 bool is_data_member)
3301 /* If recording subobjects for a non-static data member or a
3302 non-empty base class , we do not need to record offsets beyond
3303 the size of the biggest empty class. Additional data members
3304 will go at the end of the class. Additional base classes will go
3305 either at offset zero (if empty, in which case they cannot
3306 overlap with offsets past the size of the biggest empty class) or
3307 at the end of the class.
3309 However, if we are placing an empty base class, then we must record
3310 all offsets, as either the empty class is at offset zero (where
3311 other empty classes might later be placed) or at the end of the
3312 class (where other objects might then be placed, so other empty
3313 subobjects might later overlap). */
3315 || !is_empty_class (BINFO_TYPE (type)))
3316 max_offset = sizeof_biggest_empty_class;
3318 max_offset = NULL_TREE;
3319 walk_subobject_offsets (type, record_subobject_offset, offset,
3320 offsets, max_offset, is_data_member);
3323 /* Returns nonzero if any of the empty subobjects of TYPE (located at
3324 OFFSET) conflict with entries in OFFSETS. If VBASES_P is nonzero,
3325 virtual bases of TYPE are examined. */
3328 layout_conflict_p (tree type,
3333 splay_tree_node max_node;
3335 /* Get the node in OFFSETS that indicates the maximum offset where
3336 an empty subobject is located. */
3337 max_node = splay_tree_max (offsets);
3338 /* If there aren't any empty subobjects, then there's no point in
3339 performing this check. */
3343 return walk_subobject_offsets (type, check_subobject_offset, offset,
3344 offsets, (tree) (max_node->key),
3348 /* DECL is a FIELD_DECL corresponding either to a base subobject of a
3349 non-static data member of the type indicated by RLI. BINFO is the
3350 binfo corresponding to the base subobject, OFFSETS maps offsets to
3351 types already located at those offsets. This function determines
3352 the position of the DECL. */
3355 layout_nonempty_base_or_field (record_layout_info rli,
3360 tree offset = NULL_TREE;
3366 /* For the purposes of determining layout conflicts, we want to
3367 use the class type of BINFO; TREE_TYPE (DECL) will be the
3368 CLASSTYPE_AS_BASE version, which does not contain entries for
3369 zero-sized bases. */
3370 type = TREE_TYPE (binfo);
3375 type = TREE_TYPE (decl);
3379 /* Try to place the field. It may take more than one try if we have
3380 a hard time placing the field without putting two objects of the
3381 same type at the same address. */
3384 struct record_layout_info_s old_rli = *rli;
3386 /* Place this field. */
3387 place_field (rli, decl);
3388 offset = byte_position (decl);
3390 /* We have to check to see whether or not there is already
3391 something of the same type at the offset we're about to use.
3392 For example, consider:
3395 struct T : public S { int i; };
3396 struct U : public S, public T {};
3398 Here, we put S at offset zero in U. Then, we can't put T at
3399 offset zero -- its S component would be at the same address
3400 as the S we already allocated. So, we have to skip ahead.
3401 Since all data members, including those whose type is an
3402 empty class, have nonzero size, any overlap can happen only
3403 with a direct or indirect base-class -- it can't happen with
3405 /* In a union, overlap is permitted; all members are placed at
3407 if (TREE_CODE (rli->t) == UNION_TYPE)
3409 /* G++ 3.2 did not check for overlaps when placing a non-empty
3411 if (!abi_version_at_least (2) && binfo && BINFO_VIRTUAL_P (binfo))
3413 if (layout_conflict_p (field_p ? type : binfo, offset,
3416 /* Strip off the size allocated to this field. That puts us
3417 at the first place we could have put the field with
3418 proper alignment. */
3421 /* Bump up by the alignment required for the type. */
3423 = size_binop (PLUS_EXPR, rli->bitpos,
3425 ? CLASSTYPE_ALIGN (type)
3426 : TYPE_ALIGN (type)));
3427 normalize_rli (rli);
3430 /* There was no conflict. We're done laying out this field. */
3434 /* Now that we know where it will be placed, update its
3436 if (binfo && CLASS_TYPE_P (BINFO_TYPE (binfo)))
3437 /* Indirect virtual bases may have a nonzero BINFO_OFFSET at
3438 this point because their BINFO_OFFSET is copied from another
3439 hierarchy. Therefore, we may not need to add the entire
3441 propagate_binfo_offsets (binfo,
3442 size_diffop (convert (ssizetype, offset),
3444 BINFO_OFFSET (binfo))));
3447 /* Returns true if TYPE is empty and OFFSET is nonzero. */
3450 empty_base_at_nonzero_offset_p (tree type,
3452 splay_tree offsets ATTRIBUTE_UNUSED)
3454 return is_empty_class (type) && !integer_zerop (offset);
3457 /* Layout the empty base BINFO. EOC indicates the byte currently just
3458 past the end of the class, and should be correctly aligned for a
3459 class of the type indicated by BINFO; OFFSETS gives the offsets of
3460 the empty bases allocated so far. T is the most derived
3461 type. Return nonzero iff we added it at the end. */
3464 layout_empty_base (tree binfo, tree eoc, splay_tree offsets)
3467 tree basetype = BINFO_TYPE (binfo);
3470 /* This routine should only be used for empty classes. */
3471 gcc_assert (is_empty_class (basetype));
3472 alignment = ssize_int (CLASSTYPE_ALIGN_UNIT (basetype));
3474 if (!integer_zerop (BINFO_OFFSET (binfo)))
3476 if (abi_version_at_least (2))
3477 propagate_binfo_offsets
3478 (binfo, size_diffop (size_zero_node, BINFO_OFFSET (binfo)));
3480 warning (0, "offset of empty base %qT may not be ABI-compliant and may"
3481 "change in a future version of GCC",
3482 BINFO_TYPE (binfo));
3485 /* This is an empty base class. We first try to put it at offset
3487 if (layout_conflict_p (binfo,
3488 BINFO_OFFSET (binfo),
3492 /* That didn't work. Now, we move forward from the next
3493 available spot in the class. */
3495 propagate_binfo_offsets (binfo, convert (ssizetype, eoc));
3498 if (!layout_conflict_p (binfo,
3499 BINFO_OFFSET (binfo),
3502 /* We finally found a spot where there's no overlap. */
3505 /* There's overlap here, too. Bump along to the next spot. */
3506 propagate_binfo_offsets (binfo, alignment);
3512 /* Layout the base given by BINFO in the class indicated by RLI.
3513 *BASE_ALIGN is a running maximum of the alignments of
3514 any base class. OFFSETS gives the location of empty base
3515 subobjects. T is the most derived type. Return nonzero if the new
3516 object cannot be nearly-empty. A new FIELD_DECL is inserted at
3517 *NEXT_FIELD, unless BINFO is for an empty base class.
3519 Returns the location at which the next field should be inserted. */
3522 build_base_field (record_layout_info rli, tree binfo,
3523 splay_tree offsets, tree *next_field)
3526 tree basetype = BINFO_TYPE (binfo);
3528 if (!COMPLETE_TYPE_P (basetype))
3529 /* This error is now reported in xref_tag, thus giving better
3530 location information. */
3533 /* Place the base class. */
3534 if (!is_empty_class (basetype))
3538 /* The containing class is non-empty because it has a non-empty
3540 CLASSTYPE_EMPTY_P (t) = 0;
3542 /* Create the FIELD_DECL. */
3543 decl = build_decl (FIELD_DECL, NULL_TREE, CLASSTYPE_AS_BASE (basetype));
3544 DECL_ARTIFICIAL (decl) = 1;
3545 DECL_IGNORED_P (decl) = 1;
3546 DECL_FIELD_CONTEXT (decl) = t;
3547 DECL_SIZE (decl) = CLASSTYPE_SIZE (basetype);
3548 DECL_SIZE_UNIT (decl) = CLASSTYPE_SIZE_UNIT (basetype);
3549 DECL_ALIGN (decl) = CLASSTYPE_ALIGN (basetype);
3550 DECL_USER_ALIGN (decl) = CLASSTYPE_USER_ALIGN (basetype);
3551 DECL_MODE (decl) = TYPE_MODE (basetype);
3552 DECL_FIELD_IS_BASE (decl) = 1;
3554 /* Try to place the field. It may take more than one try if we
3555 have a hard time placing the field without putting two
3556 objects of the same type at the same address. */
3557 layout_nonempty_base_or_field (rli, decl, binfo, offsets);
3558 /* Add the new FIELD_DECL to the list of fields for T. */
3559 TREE_CHAIN (decl) = *next_field;
3561 next_field = &TREE_CHAIN (decl);
3568 /* On some platforms (ARM), even empty classes will not be
3570 eoc = round_up (rli_size_unit_so_far (rli),
3571 CLASSTYPE_ALIGN_UNIT (basetype));
3572 atend = layout_empty_base (binfo, eoc, offsets);
3573 /* A nearly-empty class "has no proper base class that is empty,
3574 not morally virtual, and at an offset other than zero." */
3575 if (!BINFO_VIRTUAL_P (binfo) && CLASSTYPE_NEARLY_EMPTY_P (t))
3578 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
3579 /* The check above (used in G++ 3.2) is insufficient because
3580 an empty class placed at offset zero might itself have an
3581 empty base at a nonzero offset. */
3582 else if (walk_subobject_offsets (basetype,
3583 empty_base_at_nonzero_offset_p,
3586 /*max_offset=*/NULL_TREE,
3589 if (abi_version_at_least (2))
3590 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
3592 warning (0, "class %qT will be considered nearly empty in a "
3593 "future version of GCC", t);
3597 /* We do not create a FIELD_DECL for empty base classes because
3598 it might overlap some other field. We want to be able to
3599 create CONSTRUCTORs for the class by iterating over the
3600 FIELD_DECLs, and the back end does not handle overlapping
3603 /* An empty virtual base causes a class to be non-empty
3604 -- but in that case we do not need to clear CLASSTYPE_EMPTY_P
3605 here because that was already done when the virtual table
3606 pointer was created. */
3609 /* Record the offsets of BINFO and its base subobjects. */
3610 record_subobject_offsets (binfo,
3611 BINFO_OFFSET (binfo),
3613 /*is_data_member=*/false);
3618 /* Layout all of the non-virtual base classes. Record empty
3619 subobjects in OFFSETS. T is the most derived type. Return nonzero
3620 if the type cannot be nearly empty. The fields created
3621 corresponding to the base classes will be inserted at
3625 build_base_fields (record_layout_info rli,
3626 splay_tree offsets, tree *next_field)
3628 /* Chain to hold all the new FIELD_DECLs which stand in for base class
3631 int n_baseclasses = BINFO_N_BASE_BINFOS (TYPE_BINFO (t));
3634 /* The primary base class is always allocated first. */
3635 if (CLASSTYPE_HAS_PRIMARY_BASE_P (t))
3636 next_field = build_base_field (rli, CLASSTYPE_PRIMARY_BINFO (t),
3637 offsets, next_field);
3639 /* Now allocate the rest of the bases. */
3640 for (i = 0; i < n_baseclasses; ++i)
3644 base_binfo = BINFO_BASE_BINFO (TYPE_BINFO (t), i);
3646 /* The primary base was already allocated above, so we don't
3647 need to allocate it again here. */
3648 if (base_binfo == CLASSTYPE_PRIMARY_BINFO (t))
3651 /* Virtual bases are added at the end (a primary virtual base
3652 will have already been added). */
3653 if (BINFO_VIRTUAL_P (base_binfo))
3656 next_field = build_base_field (rli, base_binfo,
3657 offsets, next_field);
3661 /* Go through the TYPE_METHODS of T issuing any appropriate
3662 diagnostics, figuring out which methods override which other
3663 methods, and so forth. */
3666 check_methods (tree t)
3670 for (x = TYPE_METHODS (t); x; x = TREE_CHAIN (x))
3672 check_for_override (x, t);
3673 if (DECL_PURE_VIRTUAL_P (x) && ! DECL_VINDEX (x))
3674 error ("initializer specified for non-virtual method %q+D", x);
3675 /* The name of the field is the original field name
3676 Save this in auxiliary field for later overloading. */
3677 if (DECL_VINDEX (x))
3679 TYPE_POLYMORPHIC_P (t) = 1;
3680 if (DECL_PURE_VIRTUAL_P (x))
3681 VEC_safe_push (tree, gc, CLASSTYPE_PURE_VIRTUALS (t), x);
3683 /* All user-declared destructors are non-trivial. */
3684 if (DECL_DESTRUCTOR_P (x))
3685 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t) = 1;
3689 /* FN is a constructor or destructor. Clone the declaration to create
3690 a specialized in-charge or not-in-charge version, as indicated by
3694 build_clone (tree fn, tree name)
3699 /* Copy the function. */
3700 clone = copy_decl (fn);
3701 /* Remember where this function came from. */
3702 DECL_CLONED_FUNCTION (clone) = fn;
3703 DECL_ABSTRACT_ORIGIN (clone) = fn;
3704 /* Reset the function name. */
3705 DECL_NAME (clone) = name;
3706 SET_DECL_ASSEMBLER_NAME (clone, NULL_TREE);
3707 /* There's no pending inline data for this function. */
3708 DECL_PENDING_INLINE_INFO (clone) = NULL;
3709 DECL_PENDING_INLINE_P (clone) = 0;
3710 /* And it hasn't yet been deferred. */
3711 DECL_DEFERRED_FN (clone) = 0;
3713 /* The base-class destructor is not virtual. */
3714 if (name == base_dtor_identifier)
3716 DECL_VIRTUAL_P (clone) = 0;
3717 if (TREE_CODE (clone) != TEMPLATE_DECL)
3718 DECL_VINDEX (clone) = NULL_TREE;
3721 /* If there was an in-charge parameter, drop it from the function
3723 if (DECL_HAS_IN_CHARGE_PARM_P (clone))
3729 exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (clone));
3730 basetype = TYPE_METHOD_BASETYPE (TREE_TYPE (clone));
3731 parmtypes = TYPE_ARG_TYPES (TREE_TYPE (clone));
3732 /* Skip the `this' parameter. */
3733 parmtypes = TREE_CHAIN (parmtypes);
3734 /* Skip the in-charge parameter. */
3735 parmtypes = TREE_CHAIN (parmtypes);
3736 /* And the VTT parm, in a complete [cd]tor. */
3737 if (DECL_HAS_VTT_PARM_P (fn)
3738 && ! DECL_NEEDS_VTT_PARM_P (clone))
3739 parmtypes = TREE_CHAIN (parmtypes);
3740 /* If this is subobject constructor or destructor, add the vtt
3743 = build_method_type_directly (basetype,
3744 TREE_TYPE (TREE_TYPE (clone)),
3747 TREE_TYPE (clone) = build_exception_variant (TREE_TYPE (clone),
3750 = cp_build_type_attribute_variant (TREE_TYPE (clone),
3751 TYPE_ATTRIBUTES (TREE_TYPE (fn)));
3754 /* Copy the function parameters. But, DECL_ARGUMENTS on a TEMPLATE_DECL
3755 aren't function parameters; those are the template parameters. */
3756 if (TREE_CODE (clone) != TEMPLATE_DECL)
3758 DECL_ARGUMENTS (clone) = copy_list (DECL_ARGUMENTS (clone));
3759 /* Remove the in-charge parameter. */
3760 if (DECL_HAS_IN_CHARGE_PARM_P (clone))
3762 TREE_CHAIN (DECL_ARGUMENTS (clone))
3763 = TREE_CHAIN (TREE_CHAIN (DECL_ARGUMENTS (clone)));
3764 DECL_HAS_IN_CHARGE_PARM_P (clone) = 0;
3766 /* And the VTT parm, in a complete [cd]tor. */
3767 if (DECL_HAS_VTT_PARM_P (fn))
3769 if (DECL_NEEDS_VTT_PARM_P (clone))
3770 DECL_HAS_VTT_PARM_P (clone) = 1;
3773 TREE_CHAIN (DECL_ARGUMENTS (clone))
3774 = TREE_CHAIN (TREE_CHAIN (DECL_ARGUMENTS (clone)));
3775 DECL_HAS_VTT_PARM_P (clone) = 0;
3779 for (parms = DECL_ARGUMENTS (clone); parms; parms = TREE_CHAIN (parms))
3781 DECL_CONTEXT (parms) = clone;
3782 cxx_dup_lang_specific_decl (parms);
3786 /* Create the RTL for this function. */
3787 SET_DECL_RTL (clone, NULL_RTX);
3788 rest_of_decl_compilation (clone, /*top_level=*/1, at_eof);
3790 /* Make it easy to find the CLONE given the FN. */
3791 TREE_CHAIN (clone) = TREE_CHAIN (fn);
3792 TREE_CHAIN (fn) = clone;
3794 /* If this is a template, handle the DECL_TEMPLATE_RESULT as well. */
3795 if (TREE_CODE (clone) == TEMPLATE_DECL)
3799 DECL_TEMPLATE_RESULT (clone)
3800 = build_clone (DECL_TEMPLATE_RESULT (clone), name);
3801 result = DECL_TEMPLATE_RESULT (clone);
3802 DECL_TEMPLATE_INFO (result) = copy_node (DECL_TEMPLATE_INFO (result));
3803 DECL_TI_TEMPLATE (result) = clone;
3806 note_decl_for_pch (clone);
3811 /* Produce declarations for all appropriate clones of FN. If
3812 UPDATE_METHOD_VEC_P is nonzero, the clones are added to the
3813 CLASTYPE_METHOD_VEC as well. */
3816 clone_function_decl (tree fn, int update_method_vec_p)
3820 /* Avoid inappropriate cloning. */
3822 && DECL_CLONED_FUNCTION (TREE_CHAIN (fn)))
3825 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (fn))
3827 /* For each constructor, we need two variants: an in-charge version
3828 and a not-in-charge version. */
3829 clone = build_clone (fn, complete_ctor_identifier);
3830 if (update_method_vec_p)
3831 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
3832 clone = build_clone (fn, base_ctor_identifier);
3833 if (update_method_vec_p)
3834 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
3838 gcc_assert (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (fn));
3840 /* For each destructor, we need three variants: an in-charge
3841 version, a not-in-charge version, and an in-charge deleting
3842 version. We clone the deleting version first because that
3843 means it will go second on the TYPE_METHODS list -- and that
3844 corresponds to the correct layout order in the virtual
3847 For a non-virtual destructor, we do not build a deleting
3849 if (DECL_VIRTUAL_P (fn))
3851 clone = build_clone (fn, deleting_dtor_identifier);
3852 if (update_method_vec_p)
3853 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
3855 clone = build_clone (fn, complete_dtor_identifier);
3856 if (update_method_vec_p)
3857 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
3858 clone = build_clone (fn, base_dtor_identifier);
3859 if (update_method_vec_p)
3860 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
3863 /* Note that this is an abstract function that is never emitted. */
3864 DECL_ABSTRACT (fn) = 1;
3867 /* DECL is an in charge constructor, which is being defined. This will
3868 have had an in class declaration, from whence clones were
3869 declared. An out-of-class definition can specify additional default
3870 arguments. As it is the clones that are involved in overload
3871 resolution, we must propagate the information from the DECL to its
3875 adjust_clone_args (tree decl)
3879 for (clone = TREE_CHAIN (decl); clone && DECL_CLONED_FUNCTION (clone);
3880 clone = TREE_CHAIN (clone))
3882 tree orig_clone_parms = TYPE_ARG_TYPES (TREE_TYPE (clone));
3883 tree orig_decl_parms = TYPE_ARG_TYPES (TREE_TYPE (decl));
3884 tree decl_parms, clone_parms;
3886 clone_parms = orig_clone_parms;
3888 /* Skip the 'this' parameter. */
3889 orig_clone_parms = TREE_CHAIN (orig_clone_parms);
3890 orig_decl_parms = TREE_CHAIN (orig_decl_parms);
3892 if (DECL_HAS_IN_CHARGE_PARM_P (decl))
3893 orig_decl_parms = TREE_CHAIN (orig_decl_parms);
3894 if (DECL_HAS_VTT_PARM_P (decl))
3895 orig_decl_parms = TREE_CHAIN (orig_decl_parms);
3897 clone_parms = orig_clone_parms;
3898 if (DECL_HAS_VTT_PARM_P (clone))
3899 clone_parms = TREE_CHAIN (clone_parms);
3901 for (decl_parms = orig_decl_parms; decl_parms;
3902 decl_parms = TREE_CHAIN (decl_parms),
3903 clone_parms = TREE_CHAIN (clone_parms))
3905 gcc_assert (same_type_p (TREE_TYPE (decl_parms),
3906 TREE_TYPE (clone_parms)));
3908 if (TREE_PURPOSE (decl_parms) && !TREE_PURPOSE (clone_parms))
3910 /* A default parameter has been added. Adjust the
3911 clone's parameters. */
3912 tree exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (clone));
3913 tree basetype = TYPE_METHOD_BASETYPE (TREE_TYPE (clone));
3916 clone_parms = orig_decl_parms;
3918 if (DECL_HAS_VTT_PARM_P (clone))
3920 clone_parms = tree_cons (TREE_PURPOSE (orig_clone_parms),
3921 TREE_VALUE (orig_clone_parms),
3923 TREE_TYPE (clone_parms) = TREE_TYPE (orig_clone_parms);
3925 type = build_method_type_directly (basetype,
3926 TREE_TYPE (TREE_TYPE (clone)),
3929 type = build_exception_variant (type, exceptions);
3930 TREE_TYPE (clone) = type;
3932 clone_parms = NULL_TREE;
3936 gcc_assert (!clone_parms);
3940 /* For each of the constructors and destructors in T, create an
3941 in-charge and not-in-charge variant. */
3944 clone_constructors_and_destructors (tree t)
3948 /* If for some reason we don't have a CLASSTYPE_METHOD_VEC, we bail
3950 if (!CLASSTYPE_METHOD_VEC (t))
3953 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
3954 clone_function_decl (OVL_CURRENT (fns), /*update_method_vec_p=*/1);
3955 for (fns = CLASSTYPE_DESTRUCTORS (t); fns; fns = OVL_NEXT (fns))
3956 clone_function_decl (OVL_CURRENT (fns), /*update_method_vec_p=*/1);
3959 /* Remove all zero-width bit-fields from T. */
3962 remove_zero_width_bit_fields (tree t)
3966 fieldsp = &TYPE_FIELDS (t);
3969 if (TREE_CODE (*fieldsp) == FIELD_DECL
3970 && DECL_C_BIT_FIELD (*fieldsp)
3971 && DECL_INITIAL (*fieldsp))
3972 *fieldsp = TREE_CHAIN (*fieldsp);
3974 fieldsp = &TREE_CHAIN (*fieldsp);
3978 /* Returns TRUE iff we need a cookie when dynamically allocating an
3979 array whose elements have the indicated class TYPE. */
3982 type_requires_array_cookie (tree type)
3985 bool has_two_argument_delete_p = false;
3987 gcc_assert (CLASS_TYPE_P (type));
3989 /* If there's a non-trivial destructor, we need a cookie. In order
3990 to iterate through the array calling the destructor for each
3991 element, we'll have to know how many elements there are. */
3992 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3995 /* If the usual deallocation function is a two-argument whose second
3996 argument is of type `size_t', then we have to pass the size of
3997 the array to the deallocation function, so we will need to store
3999 fns = lookup_fnfields (TYPE_BINFO (type),
4000 ansi_opname (VEC_DELETE_EXPR),
4002 /* If there are no `operator []' members, or the lookup is
4003 ambiguous, then we don't need a cookie. */
4004 if (!fns || fns == error_mark_node)
4006 /* Loop through all of the functions. */
4007 for (fns = BASELINK_FUNCTIONS (fns); fns; fns = OVL_NEXT (fns))
4012 /* Select the current function. */
4013 fn = OVL_CURRENT (fns);
4014 /* See if this function is a one-argument delete function. If
4015 it is, then it will be the usual deallocation function. */
4016 second_parm = TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (fn)));
4017 if (second_parm == void_list_node)
4019 /* Otherwise, if we have a two-argument function and the second
4020 argument is `size_t', it will be the usual deallocation
4021 function -- unless there is one-argument function, too. */
4022 if (TREE_CHAIN (second_parm) == void_list_node
4023 && same_type_p (TREE_VALUE (second_parm), sizetype))
4024 has_two_argument_delete_p = true;
4027 return has_two_argument_delete_p;
4030 /* Check the validity of the bases and members declared in T. Add any
4031 implicitly-generated functions (like copy-constructors and
4032 assignment operators). Compute various flag bits (like
4033 CLASSTYPE_NON_POD_T) for T. This routine works purely at the C++
4034 level: i.e., independently of the ABI in use. */
4037 check_bases_and_members (tree t)
4039 /* Nonzero if the implicitly generated copy constructor should take
4040 a non-const reference argument. */
4041 int cant_have_const_ctor;
4042 /* Nonzero if the implicitly generated assignment operator
4043 should take a non-const reference argument. */
4044 int no_const_asn_ref;
4047 /* By default, we use const reference arguments and generate default
4049 cant_have_const_ctor = 0;
4050 no_const_asn_ref = 0;
4052 /* Check all the base-classes. */
4053 check_bases (t, &cant_have_const_ctor,
4056 /* Check all the method declarations. */
4059 /* Check all the data member declarations. We cannot call
4060 check_field_decls until we have called check_bases check_methods,
4061 as check_field_decls depends on TYPE_HAS_NONTRIVIAL_DESTRUCTOR
4062 being set appropriately. */
4063 check_field_decls (t, &access_decls,
4064 &cant_have_const_ctor,
4067 /* A nearly-empty class has to be vptr-containing; a nearly empty
4068 class contains just a vptr. */
4069 if (!TYPE_CONTAINS_VPTR_P (t))
4070 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
4072 /* Do some bookkeeping that will guide the generation of implicitly
4073 declared member functions. */
4074 TYPE_HAS_COMPLEX_INIT_REF (t)
4075 |= (TYPE_HAS_INIT_REF (t) || TYPE_CONTAINS_VPTR_P (t));
4076 TYPE_NEEDS_CONSTRUCTING (t)
4077 |= (TYPE_HAS_CONSTRUCTOR (t) || TYPE_CONTAINS_VPTR_P (t));
4078 CLASSTYPE_NON_AGGREGATE (t)
4079 |= (TYPE_HAS_CONSTRUCTOR (t) || TYPE_POLYMORPHIC_P (t));
4080 CLASSTYPE_NON_POD_P (t)
4081 |= (CLASSTYPE_NON_AGGREGATE (t)
4082 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
4083 || TYPE_HAS_ASSIGN_REF (t));
4084 TYPE_HAS_COMPLEX_ASSIGN_REF (t)
4085 |= TYPE_HAS_ASSIGN_REF (t) || TYPE_CONTAINS_VPTR_P (t);
4087 /* Synthesize any needed methods. */
4088 add_implicitly_declared_members (t,
4089 cant_have_const_ctor,
4092 /* Create the in-charge and not-in-charge variants of constructors
4094 clone_constructors_and_destructors (t);
4096 /* Process the using-declarations. */
4097 for (; access_decls; access_decls = TREE_CHAIN (access_decls))
4098 handle_using_decl (TREE_VALUE (access_decls), t);
4100 /* Build and sort the CLASSTYPE_METHOD_VEC. */
4101 finish_struct_methods (t);
4103 /* Figure out whether or not we will need a cookie when dynamically
4104 allocating an array of this type. */
4105 TYPE_LANG_SPECIFIC (t)->u.c.vec_new_uses_cookie
4106 = type_requires_array_cookie (t);
4109 /* If T needs a pointer to its virtual function table, set TYPE_VFIELD
4110 accordingly. If a new vfield was created (because T doesn't have a
4111 primary base class), then the newly created field is returned. It
4112 is not added to the TYPE_FIELDS list; it is the caller's
4113 responsibility to do that. Accumulate declared virtual functions
4117 create_vtable_ptr (tree t, tree* virtuals_p)
4121 /* Collect the virtual functions declared in T. */
4122 for (fn = TYPE_METHODS (t); fn; fn = TREE_CHAIN (fn))
4123 if (DECL_VINDEX (fn) && !DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (fn)
4124 && TREE_CODE (DECL_VINDEX (fn)) != INTEGER_CST)
4126 tree new_virtual = make_node (TREE_LIST);
4128 BV_FN (new_virtual) = fn;
4129 BV_DELTA (new_virtual) = integer_zero_node;
4130 BV_VCALL_INDEX (new_virtual) = NULL_TREE;
4132 TREE_CHAIN (new_virtual) = *virtuals_p;
4133 *virtuals_p = new_virtual;
4136 /* If we couldn't find an appropriate base class, create a new field
4137 here. Even if there weren't any new virtual functions, we might need a
4138 new virtual function table if we're supposed to include vptrs in
4139 all classes that need them. */
4140 if (!TYPE_VFIELD (t) && (*virtuals_p || TYPE_CONTAINS_VPTR_P (t)))
4142 /* We build this decl with vtbl_ptr_type_node, which is a
4143 `vtable_entry_type*'. It might seem more precise to use
4144 `vtable_entry_type (*)[N]' where N is the number of virtual
4145 functions. However, that would require the vtable pointer in
4146 base classes to have a different type than the vtable pointer
4147 in derived classes. We could make that happen, but that
4148 still wouldn't solve all the problems. In particular, the
4149 type-based alias analysis code would decide that assignments
4150 to the base class vtable pointer can't alias assignments to
4151 the derived class vtable pointer, since they have different
4152 types. Thus, in a derived class destructor, where the base
4153 class constructor was inlined, we could generate bad code for
4154 setting up the vtable pointer.
4156 Therefore, we use one type for all vtable pointers. We still
4157 use a type-correct type; it's just doesn't indicate the array
4158 bounds. That's better than using `void*' or some such; it's
4159 cleaner, and it let's the alias analysis code know that these
4160 stores cannot alias stores to void*! */
4163 field = build_decl (FIELD_DECL, get_vfield_name (t), vtbl_ptr_type_node);
4164 DECL_VIRTUAL_P (field) = 1;
4165 DECL_ARTIFICIAL (field) = 1;
4166 DECL_FIELD_CONTEXT (field) = t;
4167 DECL_FCONTEXT (field) = t;
4169 TYPE_VFIELD (t) = field;
4171 /* This class is non-empty. */
4172 CLASSTYPE_EMPTY_P (t) = 0;
4180 /* Fixup the inline function given by INFO now that the class is
4184 fixup_pending_inline (tree fn)
4186 if (DECL_PENDING_INLINE_INFO (fn))
4188 tree args = DECL_ARGUMENTS (fn);
4191 DECL_CONTEXT (args) = fn;
4192 args = TREE_CHAIN (args);
4197 /* Fixup the inline methods and friends in TYPE now that TYPE is
4201 fixup_inline_methods (tree type)
4203 tree method = TYPE_METHODS (type);
4204 VEC(tree,gc) *friends;
4207 if (method && TREE_CODE (method) == TREE_VEC)
4209 if (TREE_VEC_ELT (method, 1))
4210 method = TREE_VEC_ELT (method, 1);
4211 else if (TREE_VEC_ELT (method, 0))
4212 method = TREE_VEC_ELT (method, 0);
4214 method = TREE_VEC_ELT (method, 2);
4217 /* Do inline member functions. */
4218 for (; method; method = TREE_CHAIN (method))
4219 fixup_pending_inline (method);
4222 for (friends = CLASSTYPE_INLINE_FRIENDS (type), ix = 0;
4223 VEC_iterate (tree, friends, ix, method); ix++)
4224 fixup_pending_inline (method);
4225 CLASSTYPE_INLINE_FRIENDS (type) = NULL;
4228 /* Add OFFSET to all base types of BINFO which is a base in the
4229 hierarchy dominated by T.
4231 OFFSET, which is a type offset, is number of bytes. */
4234 propagate_binfo_offsets (tree binfo, tree offset)
4240 /* Update BINFO's offset. */
4241 BINFO_OFFSET (binfo)
4242 = convert (sizetype,
4243 size_binop (PLUS_EXPR,
4244 convert (ssizetype, BINFO_OFFSET (binfo)),
4247 /* Find the primary base class. */
4248 primary_binfo = get_primary_binfo (binfo);
4250 if (primary_binfo && BINFO_INHERITANCE_CHAIN (primary_binfo) == binfo)
4251 propagate_binfo_offsets (primary_binfo, offset);
4253 /* Scan all of the bases, pushing the BINFO_OFFSET adjust
4255 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
4257 /* Don't do the primary base twice. */
4258 if (base_binfo == primary_binfo)
4261 if (BINFO_VIRTUAL_P (base_binfo))
4264 propagate_binfo_offsets (base_binfo, offset);
4268 /* Set BINFO_OFFSET for all of the virtual bases for RLI->T. Update
4269 TYPE_ALIGN and TYPE_SIZE for T. OFFSETS gives the location of
4270 empty subobjects of T. */
4273 layout_virtual_bases (record_layout_info rli, splay_tree offsets)
4277 bool first_vbase = true;
4280 if (BINFO_N_BASE_BINFOS (TYPE_BINFO (t)) == 0)
4283 if (!abi_version_at_least(2))
4285 /* In G++ 3.2, we incorrectly rounded the size before laying out
4286 the virtual bases. */
4287 finish_record_layout (rli, /*free_p=*/false);
4288 #ifdef STRUCTURE_SIZE_BOUNDARY
4289 /* Packed structures don't need to have minimum size. */
4290 if (! TYPE_PACKED (t))
4291 TYPE_ALIGN (t) = MAX (TYPE_ALIGN (t), (unsigned) STRUCTURE_SIZE_BOUNDARY);
4293 rli->offset = TYPE_SIZE_UNIT (t);
4294 rli->bitpos = bitsize_zero_node;
4295 rli->record_align = TYPE_ALIGN (t);
4298 /* Find the last field. The artificial fields created for virtual
4299 bases will go after the last extant field to date. */
4300 next_field = &TYPE_FIELDS (t);
4302 next_field = &TREE_CHAIN (*next_field);
4304 /* Go through the virtual bases, allocating space for each virtual
4305 base that is not already a primary base class. These are
4306 allocated in inheritance graph order. */
4307 for (vbase = TYPE_BINFO (t); vbase; vbase = TREE_CHAIN (vbase))
4309 if (!BINFO_VIRTUAL_P (vbase))
4312 if (!BINFO_PRIMARY_P (vbase))
4314 tree basetype = TREE_TYPE (vbase);
4316 /* This virtual base is not a primary base of any class in the
4317 hierarchy, so we have to add space for it. */
4318 next_field = build_base_field (rli, vbase,
4319 offsets, next_field);
4321 /* If the first virtual base might have been placed at a
4322 lower address, had we started from CLASSTYPE_SIZE, rather
4323 than TYPE_SIZE, issue a warning. There can be both false
4324 positives and false negatives from this warning in rare
4325 cases; to deal with all the possibilities would probably
4326 require performing both layout algorithms and comparing
4327 the results which is not particularly tractable. */
4331 (size_binop (CEIL_DIV_EXPR,
4332 round_up (CLASSTYPE_SIZE (t),
4333 CLASSTYPE_ALIGN (basetype)),
4335 BINFO_OFFSET (vbase))))
4336 warning (0, "offset of virtual base %qT is not ABI-compliant and "
4337 "may change in a future version of GCC",
4340 first_vbase = false;
4345 /* Returns the offset of the byte just past the end of the base class
4349 end_of_base (tree binfo)
4353 if (is_empty_class (BINFO_TYPE (binfo)))
4354 /* An empty class has zero CLASSTYPE_SIZE_UNIT, but we need to
4355 allocate some space for it. It cannot have virtual bases, so
4356 TYPE_SIZE_UNIT is fine. */
4357 size = TYPE_SIZE_UNIT (BINFO_TYPE (binfo));
4359 size = CLASSTYPE_SIZE_UNIT (BINFO_TYPE (binfo));
4361 return size_binop (PLUS_EXPR, BINFO_OFFSET (binfo), size);
4364 /* Returns the offset of the byte just past the end of the base class
4365 with the highest offset in T. If INCLUDE_VIRTUALS_P is zero, then
4366 only non-virtual bases are included. */
4369 end_of_class (tree t, int include_virtuals_p)
4371 tree result = size_zero_node;
4372 VEC(tree,gc) *vbases;
4378 for (binfo = TYPE_BINFO (t), i = 0;
4379 BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
4381 if (!include_virtuals_p
4382 && BINFO_VIRTUAL_P (base_binfo)
4383 && (!BINFO_PRIMARY_P (base_binfo)
4384 || BINFO_INHERITANCE_CHAIN (base_binfo) != TYPE_BINFO (t)))
4387 offset = end_of_base (base_binfo);
4388 if (INT_CST_LT_UNSIGNED (result, offset))
4392 /* G++ 3.2 did not check indirect virtual bases. */
4393 if (abi_version_at_least (2) && include_virtuals_p)
4394 for (vbases = CLASSTYPE_VBASECLASSES (t), i = 0;
4395 VEC_iterate (tree, vbases, i, base_binfo); i++)
4397 offset = end_of_base (base_binfo);
4398 if (INT_CST_LT_UNSIGNED (result, offset))
4405 /* Warn about bases of T that are inaccessible because they are
4406 ambiguous. For example:
4409 struct T : public S {};
4410 struct U : public S, public T {};
4412 Here, `(S*) new U' is not allowed because there are two `S'
4416 warn_about_ambiguous_bases (tree t)
4419 VEC(tree,gc) *vbases;
4424 /* If there are no repeated bases, nothing can be ambiguous. */
4425 if (!CLASSTYPE_REPEATED_BASE_P (t))
4428 /* Check direct bases. */
4429 for (binfo = TYPE_BINFO (t), i = 0;
4430 BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
4432 basetype = BINFO_TYPE (base_binfo);
4434 if (!lookup_base (t, basetype, ba_unique | ba_quiet, NULL))
4435 warning (0, "direct base %qT inaccessible in %qT due to ambiguity",
4439 /* Check for ambiguous virtual bases. */
4441 for (vbases = CLASSTYPE_VBASECLASSES (t), i = 0;
4442 VEC_iterate (tree, vbases, i, binfo); i++)
4444 basetype = BINFO_TYPE (binfo);
4446 if (!lookup_base (t, basetype, ba_unique | ba_quiet, NULL))
4447 warning (0, "virtual base %qT inaccessible in %qT due to ambiguity",
4452 /* Compare two INTEGER_CSTs K1 and K2. */
4455 splay_tree_compare_integer_csts (splay_tree_key k1, splay_tree_key k2)
4457 return tree_int_cst_compare ((tree) k1, (tree) k2);
4460 /* Increase the size indicated in RLI to account for empty classes
4461 that are "off the end" of the class. */
4464 include_empty_classes (record_layout_info rli)
4469 /* It might be the case that we grew the class to allocate a
4470 zero-sized base class. That won't be reflected in RLI, yet,
4471 because we are willing to overlay multiple bases at the same
4472 offset. However, now we need to make sure that RLI is big enough
4473 to reflect the entire class. */
4474 eoc = end_of_class (rli->t,
4475 CLASSTYPE_AS_BASE (rli->t) != NULL_TREE);
4476 rli_size = rli_size_unit_so_far (rli);
4477 if (TREE_CODE (rli_size) == INTEGER_CST
4478 && INT_CST_LT_UNSIGNED (rli_size, eoc))
4480 if (!abi_version_at_least (2))
4481 /* In version 1 of the ABI, the size of a class that ends with
4482 a bitfield was not rounded up to a whole multiple of a
4483 byte. Because rli_size_unit_so_far returns only the number
4484 of fully allocated bytes, any extra bits were not included
4486 rli->bitpos = round_down (rli->bitpos, BITS_PER_UNIT);
4488 /* The size should have been rounded to a whole byte. */
4489 gcc_assert (tree_int_cst_equal
4490 (rli->bitpos, round_down (rli->bitpos, BITS_PER_UNIT)));
4492 = size_binop (PLUS_EXPR,
4494 size_binop (MULT_EXPR,
4495 convert (bitsizetype,
4496 size_binop (MINUS_EXPR,
4498 bitsize_int (BITS_PER_UNIT)));
4499 normalize_rli (rli);
4503 /* Calculate the TYPE_SIZE, TYPE_ALIGN, etc for T. Calculate
4504 BINFO_OFFSETs for all of the base-classes. Position the vtable
4505 pointer. Accumulate declared virtual functions on VIRTUALS_P. */
4508 layout_class_type (tree t, tree *virtuals_p)
4510 tree non_static_data_members;
4513 record_layout_info rli;
4514 /* Maps offsets (represented as INTEGER_CSTs) to a TREE_LIST of
4515 types that appear at that offset. */
4516 splay_tree empty_base_offsets;
4517 /* True if the last field layed out was a bit-field. */
4518 bool last_field_was_bitfield = false;
4519 /* The location at which the next field should be inserted. */
4521 /* T, as a base class. */
4524 /* Keep track of the first non-static data member. */
4525 non_static_data_members = TYPE_FIELDS (t);
4527 /* Start laying out the record. */
4528 rli = start_record_layout (t);
4530 /* Mark all the primary bases in the hierarchy. */
4531 determine_primary_bases (t);
4533 /* Create a pointer to our virtual function table. */
4534 vptr = create_vtable_ptr (t, virtuals_p);
4536 /* The vptr is always the first thing in the class. */
4539 TREE_CHAIN (vptr) = TYPE_FIELDS (t);
4540 TYPE_FIELDS (t) = vptr;
4541 next_field = &TREE_CHAIN (vptr);
4542 place_field (rli, vptr);
4545 next_field = &TYPE_FIELDS (t);
4547 /* Build FIELD_DECLs for all of the non-virtual base-types. */
4548 empty_base_offsets = splay_tree_new (splay_tree_compare_integer_csts,
4550 build_base_fields (rli, empty_base_offsets, next_field);
4552 /* Layout the non-static data members. */
4553 for (field = non_static_data_members; field; field = TREE_CHAIN (field))
4558 /* We still pass things that aren't non-static data members to
4559 the back-end, in case it wants to do something with them. */
4560 if (TREE_CODE (field) != FIELD_DECL)
4562 place_field (rli, field);
4563 /* If the static data member has incomplete type, keep track
4564 of it so that it can be completed later. (The handling
4565 of pending statics in finish_record_layout is
4566 insufficient; consider:
4569 struct S2 { static S1 s1; };
4571 At this point, finish_record_layout will be called, but
4572 S1 is still incomplete.) */
4573 if (TREE_CODE (field) == VAR_DECL)
4575 maybe_register_incomplete_var (field);
4576 /* The visibility of static data members is determined
4577 at their point of declaration, not their point of
4579 determine_visibility (field);
4584 type = TREE_TYPE (field);
4586 padding = NULL_TREE;
4588 /* If this field is a bit-field whose width is greater than its
4589 type, then there are some special rules for allocating
4591 if (DECL_C_BIT_FIELD (field)
4592 && INT_CST_LT (TYPE_SIZE (type), DECL_SIZE (field)))
4594 integer_type_kind itk;
4596 bool was_unnamed_p = false;
4597 /* We must allocate the bits as if suitably aligned for the
4598 longest integer type that fits in this many bits. type
4599 of the field. Then, we are supposed to use the left over
4600 bits as additional padding. */
4601 for (itk = itk_char; itk != itk_none; ++itk)
4602 if (INT_CST_LT (DECL_SIZE (field),
4603 TYPE_SIZE (integer_types[itk])))
4606 /* ITK now indicates a type that is too large for the
4607 field. We have to back up by one to find the largest
4609 integer_type = integer_types[itk - 1];
4611 /* Figure out how much additional padding is required. GCC
4612 3.2 always created a padding field, even if it had zero
4614 if (!abi_version_at_least (2)
4615 || INT_CST_LT (TYPE_SIZE (integer_type), DECL_SIZE (field)))
4617 if (abi_version_at_least (2) && TREE_CODE (t) == UNION_TYPE)
4618 /* In a union, the padding field must have the full width
4619 of the bit-field; all fields start at offset zero. */
4620 padding = DECL_SIZE (field);
4623 if (warn_abi && TREE_CODE (t) == UNION_TYPE)
4624 warning (0, "size assigned to %qT may not be "
4625 "ABI-compliant and may change in a future "
4628 padding = size_binop (MINUS_EXPR, DECL_SIZE (field),
4629 TYPE_SIZE (integer_type));
4632 #ifdef PCC_BITFIELD_TYPE_MATTERS
4633 /* An unnamed bitfield does not normally affect the
4634 alignment of the containing class on a target where
4635 PCC_BITFIELD_TYPE_MATTERS. But, the C++ ABI does not
4636 make any exceptions for unnamed bitfields when the
4637 bitfields are longer than their types. Therefore, we
4638 temporarily give the field a name. */
4639 if (PCC_BITFIELD_TYPE_MATTERS && !DECL_NAME (field))
4641 was_unnamed_p = true;
4642 DECL_NAME (field) = make_anon_name ();
4645 DECL_SIZE (field) = TYPE_SIZE (integer_type);
4646 DECL_ALIGN (field) = TYPE_ALIGN (integer_type);
4647 DECL_USER_ALIGN (field) = TYPE_USER_ALIGN (integer_type);
4648 layout_nonempty_base_or_field (rli, field, NULL_TREE,
4649 empty_base_offsets);
4651 DECL_NAME (field) = NULL_TREE;
4652 /* Now that layout has been performed, set the size of the
4653 field to the size of its declared type; the rest of the
4654 field is effectively invisible. */
4655 DECL_SIZE (field) = TYPE_SIZE (type);
4656 /* We must also reset the DECL_MODE of the field. */
4657 if (abi_version_at_least (2))
4658 DECL_MODE (field) = TYPE_MODE (type);
4660 && DECL_MODE (field) != TYPE_MODE (type))
4661 /* Versions of G++ before G++ 3.4 did not reset the
4663 warning (0, "the offset of %qD may not be ABI-compliant and may "
4664 "change in a future version of GCC", field);
4667 layout_nonempty_base_or_field (rli, field, NULL_TREE,
4668 empty_base_offsets);
4670 /* Remember the location of any empty classes in FIELD. */
4671 if (abi_version_at_least (2))
4672 record_subobject_offsets (TREE_TYPE (field),
4673 byte_position(field),
4675 /*is_data_member=*/true);
4677 /* If a bit-field does not immediately follow another bit-field,
4678 and yet it starts in the middle of a byte, we have failed to
4679 comply with the ABI. */
4681 && DECL_C_BIT_FIELD (field)
4682 /* The TREE_NO_WARNING flag gets set by Objective-C when
4683 laying out an Objective-C class. The ObjC ABI differs
4684 from the C++ ABI, and so we do not want a warning
4686 && !TREE_NO_WARNING (field)
4687 && !last_field_was_bitfield
4688 && !integer_zerop (size_binop (TRUNC_MOD_EXPR,
4689 DECL_FIELD_BIT_OFFSET (field),
4690 bitsize_unit_node)))
4691 warning (0, "offset of %q+D is not ABI-compliant and may "
4692 "change in a future version of GCC", field);
4694 /* G++ used to use DECL_FIELD_OFFSET as if it were the byte
4695 offset of the field. */
4697 && !tree_int_cst_equal (DECL_FIELD_OFFSET (field),
4698 byte_position (field))
4699 && contains_empty_class_p (TREE_TYPE (field)))
4700 warning (0, "%q+D contains empty classes which may cause base "
4701 "classes to be placed at different locations in a "
4702 "future version of GCC", field);
4704 /* If we needed additional padding after this field, add it
4710 padding_field = build_decl (FIELD_DECL,
4713 DECL_BIT_FIELD (padding_field) = 1;
4714 DECL_SIZE (padding_field) = padding;
4715 DECL_CONTEXT (padding_field) = t;
4716 DECL_ARTIFICIAL (padding_field) = 1;
4717 DECL_IGNORED_P (padding_field) = 1;
4718 layout_nonempty_base_or_field (rli, padding_field,
4720 empty_base_offsets);
4723 last_field_was_bitfield = DECL_C_BIT_FIELD (field);
4726 if (abi_version_at_least (2) && !integer_zerop (rli->bitpos))
4728 /* Make sure that we are on a byte boundary so that the size of
4729 the class without virtual bases will always be a round number
4731 rli->bitpos = round_up (rli->bitpos, BITS_PER_UNIT);
4732 normalize_rli (rli);
4735 /* G++ 3.2 does not allow virtual bases to be overlaid with tail
4737 if (!abi_version_at_least (2))
4738 include_empty_classes(rli);
4740 /* Delete all zero-width bit-fields from the list of fields. Now
4741 that the type is laid out they are no longer important. */
4742 remove_zero_width_bit_fields (t);
4744 /* Create the version of T used for virtual bases. We do not use
4745 make_aggr_type for this version; this is an artificial type. For
4746 a POD type, we just reuse T. */
4747 if (CLASSTYPE_NON_POD_P (t) || CLASSTYPE_EMPTY_P (t))
4749 base_t = make_node (TREE_CODE (t));
4751 /* Set the size and alignment for the new type. In G++ 3.2, all
4752 empty classes were considered to have size zero when used as
4754 if (!abi_version_at_least (2) && CLASSTYPE_EMPTY_P (t))
4756 TYPE_SIZE (base_t) = bitsize_zero_node;
4757 TYPE_SIZE_UNIT (base_t) = size_zero_node;
4758 if (warn_abi && !integer_zerop (rli_size_unit_so_far (rli)))
4759 warning (0, "layout of classes derived from empty class %qT "
4760 "may change in a future version of GCC",
4767 /* If the ABI version is not at least two, and the last
4768 field was a bit-field, RLI may not be on a byte
4769 boundary. In particular, rli_size_unit_so_far might
4770 indicate the last complete byte, while rli_size_so_far
4771 indicates the total number of bits used. Therefore,
4772 rli_size_so_far, rather than rli_size_unit_so_far, is
4773 used to compute TYPE_SIZE_UNIT. */
4774 eoc = end_of_class (t, /*include_virtuals_p=*/0);
4775 TYPE_SIZE_UNIT (base_t)
4776 = size_binop (MAX_EXPR,
4778 size_binop (CEIL_DIV_EXPR,
4779 rli_size_so_far (rli),
4780 bitsize_int (BITS_PER_UNIT))),
4783 = size_binop (MAX_EXPR,
4784 rli_size_so_far (rli),
4785 size_binop (MULT_EXPR,
4786 convert (bitsizetype, eoc),
4787 bitsize_int (BITS_PER_UNIT)));
4789 TYPE_ALIGN (base_t) = rli->record_align;
4790 TYPE_USER_ALIGN (base_t) = TYPE_USER_ALIGN (t);
4792 /* Copy the fields from T. */
4793 next_field = &TYPE_FIELDS (base_t);
4794 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
4795 if (TREE_CODE (field) == FIELD_DECL)
4797 *next_field = build_decl (FIELD_DECL,
4800 DECL_CONTEXT (*next_field) = base_t;
4801 DECL_FIELD_OFFSET (*next_field) = DECL_FIELD_OFFSET (field);
4802 DECL_FIELD_BIT_OFFSET (*next_field)
4803 = DECL_FIELD_BIT_OFFSET (field);
4804 DECL_SIZE (*next_field) = DECL_SIZE (field);
4805 DECL_MODE (*next_field) = DECL_MODE (field);
4806 next_field = &TREE_CHAIN (*next_field);
4809 /* Record the base version of the type. */
4810 CLASSTYPE_AS_BASE (t) = base_t;
4811 TYPE_CONTEXT (base_t) = t;
4814 CLASSTYPE_AS_BASE (t) = t;
4816 /* Every empty class contains an empty class. */
4817 if (CLASSTYPE_EMPTY_P (t))
4818 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) = 1;
4820 /* Set the TYPE_DECL for this type to contain the right
4821 value for DECL_OFFSET, so that we can use it as part
4822 of a COMPONENT_REF for multiple inheritance. */
4823 layout_decl (TYPE_MAIN_DECL (t), 0);
4825 /* Now fix up any virtual base class types that we left lying
4826 around. We must get these done before we try to lay out the
4827 virtual function table. As a side-effect, this will remove the
4828 base subobject fields. */
4829 layout_virtual_bases (rli, empty_base_offsets);
4831 /* Make sure that empty classes are reflected in RLI at this
4833 include_empty_classes(rli);
4835 /* Make sure not to create any structures with zero size. */
4836 if (integer_zerop (rli_size_unit_so_far (rli)) && CLASSTYPE_EMPTY_P (t))
4838 build_decl (FIELD_DECL, NULL_TREE, char_type_node));
4840 /* Let the back-end lay out the type. */
4841 finish_record_layout (rli, /*free_p=*/true);
4843 /* Warn about bases that can't be talked about due to ambiguity. */
4844 warn_about_ambiguous_bases (t);
4846 /* Now that we're done with layout, give the base fields the real types. */
4847 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
4848 if (DECL_ARTIFICIAL (field) && IS_FAKE_BASE_TYPE (TREE_TYPE (field)))
4849 TREE_TYPE (field) = TYPE_CONTEXT (TREE_TYPE (field));
4852 splay_tree_delete (empty_base_offsets);
4854 if (CLASSTYPE_EMPTY_P (t)
4855 && tree_int_cst_lt (sizeof_biggest_empty_class,
4856 TYPE_SIZE_UNIT (t)))
4857 sizeof_biggest_empty_class = TYPE_SIZE_UNIT (t);
4860 /* Determine the "key method" for the class type indicated by TYPE,
4861 and set CLASSTYPE_KEY_METHOD accordingly. */
4864 determine_key_method (tree type)
4868 if (TYPE_FOR_JAVA (type)
4869 || processing_template_decl
4870 || CLASSTYPE_TEMPLATE_INSTANTIATION (type)
4871 || CLASSTYPE_INTERFACE_KNOWN (type))
4874 /* The key method is the first non-pure virtual function that is not
4875 inline at the point of class definition. On some targets the
4876 key function may not be inline; those targets should not call
4877 this function until the end of the translation unit. */
4878 for (method = TYPE_METHODS (type); method != NULL_TREE;
4879 method = TREE_CHAIN (method))
4880 if (DECL_VINDEX (method) != NULL_TREE
4881 && ! DECL_DECLARED_INLINE_P (method)
4882 && ! DECL_PURE_VIRTUAL_P (method))
4884 CLASSTYPE_KEY_METHOD (type) = method;
4891 /* Perform processing required when the definition of T (a class type)
4895 finish_struct_1 (tree t)
4898 /* A TREE_LIST. The TREE_VALUE of each node is a FUNCTION_DECL. */
4899 tree virtuals = NULL_TREE;
4902 if (COMPLETE_TYPE_P (t))
4904 gcc_assert (IS_AGGR_TYPE (t));
4905 error ("redefinition of %q#T", t);
4910 /* If this type was previously laid out as a forward reference,
4911 make sure we lay it out again. */
4912 TYPE_SIZE (t) = NULL_TREE;
4913 CLASSTYPE_PRIMARY_BINFO (t) = NULL_TREE;
4915 fixup_inline_methods (t);
4917 /* Make assumptions about the class; we'll reset the flags if
4919 CLASSTYPE_EMPTY_P (t) = 1;
4920 CLASSTYPE_NEARLY_EMPTY_P (t) = 1;
4921 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) = 0;
4923 /* Do end-of-class semantic processing: checking the validity of the
4924 bases and members and add implicitly generated methods. */
4925 check_bases_and_members (t);
4927 /* Find the key method. */
4928 if (TYPE_CONTAINS_VPTR_P (t))
4930 /* The Itanium C++ ABI permits the key method to be chosen when
4931 the class is defined -- even though the key method so
4932 selected may later turn out to be an inline function. On
4933 some systems (such as ARM Symbian OS) the key method cannot
4934 be determined until the end of the translation unit. On such
4935 systems, we leave CLASSTYPE_KEY_METHOD set to NULL, which
4936 will cause the class to be added to KEYED_CLASSES. Then, in
4937 finish_file we will determine the key method. */
4938 if (targetm.cxx.key_method_may_be_inline ())
4939 determine_key_method (t);
4941 /* If a polymorphic class has no key method, we may emit the vtable
4942 in every translation unit where the class definition appears. */
4943 if (CLASSTYPE_KEY_METHOD (t) == NULL_TREE)
4944 keyed_classes = tree_cons (NULL_TREE, t, keyed_classes);
4947 /* Layout the class itself. */
4948 layout_class_type (t, &virtuals);
4949 if (CLASSTYPE_AS_BASE (t) != t)
4950 /* We use the base type for trivial assignments, and hence it
4952 compute_record_mode (CLASSTYPE_AS_BASE (t));
4954 virtuals = modify_all_vtables (t, nreverse (virtuals));
4956 /* If necessary, create the primary vtable for this class. */
4957 if (virtuals || TYPE_CONTAINS_VPTR_P (t))
4959 /* We must enter these virtuals into the table. */
4960 if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t))
4961 build_primary_vtable (NULL_TREE, t);
4962 else if (! BINFO_NEW_VTABLE_MARKED (TYPE_BINFO (t)))
4963 /* Here we know enough to change the type of our virtual
4964 function table, but we will wait until later this function. */
4965 build_primary_vtable (CLASSTYPE_PRIMARY_BINFO (t), t);
4968 if (TYPE_CONTAINS_VPTR_P (t))
4973 if (BINFO_VTABLE (TYPE_BINFO (t)))
4974 gcc_assert (DECL_VIRTUAL_P (BINFO_VTABLE (TYPE_BINFO (t))));
4975 if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t))
4976 gcc_assert (BINFO_VIRTUALS (TYPE_BINFO (t)) == NULL_TREE);
4978 /* Add entries for virtual functions introduced by this class. */
4979 BINFO_VIRTUALS (TYPE_BINFO (t))
4980 = chainon (BINFO_VIRTUALS (TYPE_BINFO (t)), virtuals);
4982 /* Set DECL_VINDEX for all functions declared in this class. */
4983 for (vindex = 0, fn = BINFO_VIRTUALS (TYPE_BINFO (t));
4985 fn = TREE_CHAIN (fn),
4986 vindex += (TARGET_VTABLE_USES_DESCRIPTORS
4987 ? TARGET_VTABLE_USES_DESCRIPTORS : 1))
4989 tree fndecl = BV_FN (fn);
4991 if (DECL_THUNK_P (fndecl))
4992 /* A thunk. We should never be calling this entry directly
4993 from this vtable -- we'd use the entry for the non
4994 thunk base function. */
4995 DECL_VINDEX (fndecl) = NULL_TREE;
4996 else if (TREE_CODE (DECL_VINDEX (fndecl)) != INTEGER_CST)
4997 DECL_VINDEX (fndecl) = build_int_cst (NULL_TREE, vindex);
5001 finish_struct_bits (t);
5003 /* Complete the rtl for any static member objects of the type we're
5005 for (x = TYPE_FIELDS (t); x; x = TREE_CHAIN (x))
5006 if (TREE_CODE (x) == VAR_DECL && TREE_STATIC (x)
5007 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (x)), t))
5008 DECL_MODE (x) = TYPE_MODE (t);
5010 /* Done with FIELDS...now decide whether to sort these for
5011 faster lookups later.
5013 We use a small number because most searches fail (succeeding
5014 ultimately as the search bores through the inheritance
5015 hierarchy), and we want this failure to occur quickly. */
5017 n_fields = count_fields (TYPE_FIELDS (t));
5020 struct sorted_fields_type *field_vec = GGC_NEWVAR
5021 (struct sorted_fields_type,
5022 sizeof (struct sorted_fields_type) + n_fields * sizeof (tree));
5023 field_vec->len = n_fields;
5024 add_fields_to_record_type (TYPE_FIELDS (t), field_vec, 0);
5025 qsort (field_vec->elts, n_fields, sizeof (tree),
5027 if (! DECL_LANG_SPECIFIC (TYPE_MAIN_DECL (t)))
5028 retrofit_lang_decl (TYPE_MAIN_DECL (t));
5029 DECL_SORTED_FIELDS (TYPE_MAIN_DECL (t)) = field_vec;
5032 /* Make the rtl for any new vtables we have created, and unmark
5033 the base types we marked. */
5036 /* Build the VTT for T. */
5039 /* This warning does not make sense for Java classes, since they
5040 cannot have destructors. */
5041 if (!TYPE_FOR_JAVA (t) && warn_nonvdtor && TYPE_POLYMORPHIC_P (t))
5045 dtor = CLASSTYPE_DESTRUCTORS (t);
5046 /* Warn only if the dtor is non-private or the class has
5048 if (/* An implicitly declared destructor is always public. And,
5049 if it were virtual, we would have created it by now. */
5051 || (!DECL_VINDEX (dtor)
5052 && (!TREE_PRIVATE (dtor)
5053 || CLASSTYPE_FRIEND_CLASSES (t)
5054 || DECL_FRIENDLIST (TYPE_MAIN_DECL (t)))))
5055 warning (0, "%q#T has virtual functions but non-virtual destructor",
5061 if (warn_overloaded_virtual)
5064 /* Class layout, assignment of virtual table slots, etc., is now
5065 complete. Give the back end a chance to tweak the visibility of
5066 the class or perform any other required target modifications. */
5067 targetm.cxx.adjust_class_at_definition (t);
5069 maybe_suppress_debug_info (t);
5071 dump_class_hierarchy (t);
5073 /* Finish debugging output for this type. */
5074 rest_of_type_compilation (t, ! LOCAL_CLASS_P (t));
5077 /* When T was built up, the member declarations were added in reverse
5078 order. Rearrange them to declaration order. */
5081 unreverse_member_declarations (tree t)
5087 /* The following lists are all in reverse order. Put them in
5088 declaration order now. */
5089 TYPE_METHODS (t) = nreverse (TYPE_METHODS (t));
5090 CLASSTYPE_DECL_LIST (t) = nreverse (CLASSTYPE_DECL_LIST (t));
5092 /* Actually, for the TYPE_FIELDS, only the non TYPE_DECLs are in
5093 reverse order, so we can't just use nreverse. */
5095 for (x = TYPE_FIELDS (t);
5096 x && TREE_CODE (x) != TYPE_DECL;
5099 next = TREE_CHAIN (x);
5100 TREE_CHAIN (x) = prev;
5105 TREE_CHAIN (TYPE_FIELDS (t)) = x;
5107 TYPE_FIELDS (t) = prev;
5112 finish_struct (tree t, tree attributes)
5114 location_t saved_loc = input_location;
5116 /* Now that we've got all the field declarations, reverse everything
5118 unreverse_member_declarations (t);
5120 cplus_decl_attributes (&t, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
5122 /* Nadger the current location so that diagnostics point to the start of
5123 the struct, not the end. */
5124 input_location = DECL_SOURCE_LOCATION (TYPE_NAME (t));
5126 if (processing_template_decl)
5130 finish_struct_methods (t);
5131 TYPE_SIZE (t) = bitsize_zero_node;
5132 TYPE_SIZE_UNIT (t) = size_zero_node;
5134 /* We need to emit an error message if this type was used as a parameter
5135 and it is an abstract type, even if it is a template. We construct
5136 a simple CLASSTYPE_PURE_VIRTUALS list without taking bases into
5137 account and we call complete_vars with this type, which will check
5138 the PARM_DECLS. Note that while the type is being defined,
5139 CLASSTYPE_PURE_VIRTUALS contains the list of the inline friends
5140 (see CLASSTYPE_INLINE_FRIENDS) so we need to clear it. */
5141 CLASSTYPE_PURE_VIRTUALS (t) = NULL;
5142 for (x = TYPE_METHODS (t); x; x = TREE_CHAIN (x))
5143 if (DECL_PURE_VIRTUAL_P (x))
5144 VEC_safe_push (tree, gc, CLASSTYPE_PURE_VIRTUALS (t), x);
5148 finish_struct_1 (t);
5150 input_location = saved_loc;
5152 TYPE_BEING_DEFINED (t) = 0;
5154 if (current_class_type)
5157 error ("trying to finish struct, but kicked out due to previous parse errors");
5159 if (processing_template_decl && at_function_scope_p ())
5160 add_stmt (build_min (TAG_DEFN, t));
5165 /* Return the dynamic type of INSTANCE, if known.
5166 Used to determine whether the virtual function table is needed
5169 *NONNULL is set iff INSTANCE can be known to be nonnull, regardless
5170 of our knowledge of its type. *NONNULL should be initialized
5171 before this function is called. */
5174 fixed_type_or_null (tree instance, int* nonnull, int* cdtorp)
5176 switch (TREE_CODE (instance))
5179 if (POINTER_TYPE_P (TREE_TYPE (instance)))
5182 return fixed_type_or_null (TREE_OPERAND (instance, 0),
5186 /* This is a call to a constructor, hence it's never zero. */
5187 if (TREE_HAS_CONSTRUCTOR (instance))
5191 return TREE_TYPE (instance);
5196 /* This is a call to a constructor, hence it's never zero. */
5197 if (TREE_HAS_CONSTRUCTOR (instance))
5201 return TREE_TYPE (instance);
5203 return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull, cdtorp);
5207 if (TREE_CODE (TREE_OPERAND (instance, 0)) == ADDR_EXPR)
5208 return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull, cdtorp);
5209 if (TREE_CODE (TREE_OPERAND (instance, 1)) == INTEGER_CST)
5210 /* Propagate nonnull. */
5211 return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull, cdtorp);
5216 return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull, cdtorp);
5219 instance = TREE_OPERAND (instance, 0);
5222 /* Just because we see an ADDR_EXPR doesn't mean we're dealing
5223 with a real object -- given &p->f, p can still be null. */
5224 tree t = get_base_address (instance);
5225 /* ??? Probably should check DECL_WEAK here. */
5226 if (t && DECL_P (t))
5229 return fixed_type_or_null (instance, nonnull, cdtorp);
5232 /* If this component is really a base class reference, then the field
5233 itself isn't definitive. */
5234 if (DECL_FIELD_IS_BASE (TREE_OPERAND (instance, 1)))
5235 return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull, cdtorp);
5236 return fixed_type_or_null (TREE_OPERAND (instance, 1), nonnull, cdtorp);
5240 if (TREE_CODE (TREE_TYPE (instance)) == ARRAY_TYPE
5241 && IS_AGGR_TYPE (TREE_TYPE (TREE_TYPE (instance))))
5245 return TREE_TYPE (TREE_TYPE (instance));
5247 /* fall through... */
5251 if (IS_AGGR_TYPE (TREE_TYPE (instance)))
5255 return TREE_TYPE (instance);
5257 else if (instance == current_class_ptr)
5262 /* if we're in a ctor or dtor, we know our type. */
5263 if (DECL_LANG_SPECIFIC (current_function_decl)
5264 && (DECL_CONSTRUCTOR_P (current_function_decl)
5265 || DECL_DESTRUCTOR_P (current_function_decl)))
5269 return TREE_TYPE (TREE_TYPE (instance));
5272 else if (TREE_CODE (TREE_TYPE (instance)) == REFERENCE_TYPE)
5274 /* Reference variables should be references to objects. */
5278 /* DECL_VAR_MARKED_P is used to prevent recursion; a
5279 variable's initializer may refer to the variable
5281 if (TREE_CODE (instance) == VAR_DECL
5282 && DECL_INITIAL (instance)
5283 && !DECL_VAR_MARKED_P (instance))
5286 DECL_VAR_MARKED_P (instance) = 1;
5287 type = fixed_type_or_null (DECL_INITIAL (instance),
5289 DECL_VAR_MARKED_P (instance) = 0;
5300 /* Return nonzero if the dynamic type of INSTANCE is known, and
5301 equivalent to the static type. We also handle the case where
5302 INSTANCE is really a pointer. Return negative if this is a
5303 ctor/dtor. There the dynamic type is known, but this might not be
5304 the most derived base of the original object, and hence virtual
5305 bases may not be layed out according to this type.
5307 Used to determine whether the virtual function table is needed
5310 *NONNULL is set iff INSTANCE can be known to be nonnull, regardless
5311 of our knowledge of its type. *NONNULL should be initialized
5312 before this function is called. */
5315 resolves_to_fixed_type_p (tree instance, int* nonnull)
5317 tree t = TREE_TYPE (instance);
5320 tree fixed = fixed_type_or_null (instance, nonnull, &cdtorp);
5321 if (fixed == NULL_TREE)
5323 if (POINTER_TYPE_P (t))
5325 if (!same_type_ignoring_top_level_qualifiers_p (t, fixed))
5327 return cdtorp ? -1 : 1;
5332 init_class_processing (void)
5334 current_class_depth = 0;
5335 current_class_stack_size = 10;
5337 = xmalloc (current_class_stack_size * sizeof (struct class_stack_node));
5338 local_classes = VEC_alloc (tree, gc, 8);
5339 sizeof_biggest_empty_class = size_zero_node;
5341 ridpointers[(int) RID_PUBLIC] = access_public_node;
5342 ridpointers[(int) RID_PRIVATE] = access_private_node;
5343 ridpointers[(int) RID_PROTECTED] = access_protected_node;
5346 /* Restore the cached PREVIOUS_CLASS_LEVEL. */
5349 restore_class_cache (void)
5353 /* We are re-entering the same class we just left, so we don't
5354 have to search the whole inheritance matrix to find all the
5355 decls to bind again. Instead, we install the cached
5356 class_shadowed list and walk through it binding names. */
5357 push_binding_level (previous_class_level);
5358 class_binding_level = previous_class_level;
5359 /* Restore IDENTIFIER_TYPE_VALUE. */
5360 for (type = class_binding_level->type_shadowed;
5362 type = TREE_CHAIN (type))
5363 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (type), TREE_TYPE (type));
5366 /* Set global variables CURRENT_CLASS_NAME and CURRENT_CLASS_TYPE as
5367 appropriate for TYPE.
5369 So that we may avoid calls to lookup_name, we cache the _TYPE
5370 nodes of local TYPE_DECLs in the TREE_TYPE field of the name.
5372 For multiple inheritance, we perform a two-pass depth-first search
5373 of the type lattice. */
5376 pushclass (tree type)
5378 type = TYPE_MAIN_VARIANT (type);
5380 /* Make sure there is enough room for the new entry on the stack. */
5381 if (current_class_depth + 1 >= current_class_stack_size)
5383 current_class_stack_size *= 2;
5385 = xrealloc (current_class_stack,
5386 current_class_stack_size
5387 * sizeof (struct class_stack_node));
5390 /* Insert a new entry on the class stack. */
5391 current_class_stack[current_class_depth].name = current_class_name;
5392 current_class_stack[current_class_depth].type = current_class_type;
5393 current_class_stack[current_class_depth].access = current_access_specifier;
5394 current_class_stack[current_class_depth].names_used = 0;
5395 current_class_depth++;
5397 /* Now set up the new type. */
5398 current_class_name = TYPE_NAME (type);
5399 if (TREE_CODE (current_class_name) == TYPE_DECL)
5400 current_class_name = DECL_NAME (current_class_name);
5401 current_class_type = type;
5403 /* By default, things in classes are private, while things in
5404 structures or unions are public. */
5405 current_access_specifier = (CLASSTYPE_DECLARED_CLASS (type)
5406 ? access_private_node
5407 : access_public_node);
5409 if (previous_class_level
5410 && type != previous_class_level->this_entity
5411 && current_class_depth == 1)
5413 /* Forcibly remove any old class remnants. */
5414 invalidate_class_lookup_cache ();
5417 if (!previous_class_level
5418 || type != previous_class_level->this_entity
5419 || current_class_depth > 1)
5422 restore_class_cache ();
5425 /* When we exit a toplevel class scope, we save its binding level so
5426 that we can restore it quickly. Here, we've entered some other
5427 class, so we must invalidate our cache. */
5430 invalidate_class_lookup_cache (void)
5432 previous_class_level = NULL;
5435 /* Get out of the current class scope. If we were in a class scope
5436 previously, that is the one popped to. */
5443 current_class_depth--;
5444 current_class_name = current_class_stack[current_class_depth].name;
5445 current_class_type = current_class_stack[current_class_depth].type;
5446 current_access_specifier = current_class_stack[current_class_depth].access;
5447 if (current_class_stack[current_class_depth].names_used)
5448 splay_tree_delete (current_class_stack[current_class_depth].names_used);
5451 /* Returns 1 if current_class_type is either T or a nested type of T.
5452 We start looking from 1 because entry 0 is from global scope, and has
5456 currently_open_class (tree t)
5459 if (current_class_type && same_type_p (t, current_class_type))
5461 for (i = 1; i < current_class_depth; ++i)
5462 if (current_class_stack[i].type
5463 && same_type_p (current_class_stack [i].type, t))
5468 /* If either current_class_type or one of its enclosing classes are derived
5469 from T, return the appropriate type. Used to determine how we found
5470 something via unqualified lookup. */
5473 currently_open_derived_class (tree t)
5477 /* The bases of a dependent type are unknown. */
5478 if (dependent_type_p (t))
5481 if (!current_class_type)
5484 if (DERIVED_FROM_P (t, current_class_type))
5485 return current_class_type;
5487 for (i = current_class_depth - 1; i > 0; --i)
5488 if (DERIVED_FROM_P (t, current_class_stack[i].type))
5489 return current_class_stack[i].type;
5494 /* When entering a class scope, all enclosing class scopes' names with
5495 static meaning (static variables, static functions, types and
5496 enumerators) have to be visible. This recursive function calls
5497 pushclass for all enclosing class contexts until global or a local
5498 scope is reached. TYPE is the enclosed class. */
5501 push_nested_class (tree type)
5505 /* A namespace might be passed in error cases, like A::B:C. */
5506 if (type == NULL_TREE
5507 || type == error_mark_node
5508 || TREE_CODE (type) == NAMESPACE_DECL
5509 || ! IS_AGGR_TYPE (type)
5510 || TREE_CODE (type) == TEMPLATE_TYPE_PARM
5511 || TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
5514 context = DECL_CONTEXT (TYPE_MAIN_DECL (type));
5516 if (context && CLASS_TYPE_P (context))
5517 push_nested_class (context);
5521 /* Undoes a push_nested_class call. */
5524 pop_nested_class (void)
5526 tree context = DECL_CONTEXT (TYPE_MAIN_DECL (current_class_type));
5529 if (context && CLASS_TYPE_P (context))
5530 pop_nested_class ();
5533 /* Returns the number of extern "LANG" blocks we are nested within. */
5536 current_lang_depth (void)
5538 return VEC_length (tree, current_lang_base);
5541 /* Set global variables CURRENT_LANG_NAME to appropriate value
5542 so that behavior of name-mangling machinery is correct. */
5545 push_lang_context (tree name)
5547 VEC_safe_push (tree, gc, current_lang_base, current_lang_name);
5549 if (name == lang_name_cplusplus)
5551 current_lang_name = name;
5553 else if (name == lang_name_java)
5555 current_lang_name = name;
5556 /* DECL_IGNORED_P is initially set for these types, to avoid clutter.
5557 (See record_builtin_java_type in decl.c.) However, that causes
5558 incorrect debug entries if these types are actually used.
5559 So we re-enable debug output after extern "Java". */
5560 DECL_IGNORED_P (TYPE_NAME (java_byte_type_node)) = 0;
5561 DECL_IGNORED_P (TYPE_NAME (java_short_type_node)) = 0;
5562 DECL_IGNORED_P (TYPE_NAME (java_int_type_node)) = 0;
5563 DECL_IGNORED_P (TYPE_NAME (java_long_type_node)) = 0;
5564 DECL_IGNORED_P (TYPE_NAME (java_float_type_node)) = 0;
5565 DECL_IGNORED_P (TYPE_NAME (java_double_type_node)) = 0;
5566 DECL_IGNORED_P (TYPE_NAME (java_char_type_node)) = 0;
5567 DECL_IGNORED_P (TYPE_NAME (java_boolean_type_node)) = 0;
5569 else if (name == lang_name_c)
5571 current_lang_name = name;
5574 error ("language string %<\"%E\"%> not recognized", name);
5577 /* Get out of the current language scope. */
5580 pop_lang_context (void)
5582 current_lang_name = VEC_pop (tree, current_lang_base);
5585 /* Type instantiation routines. */
5587 /* Given an OVERLOAD and a TARGET_TYPE, return the function that
5588 matches the TARGET_TYPE. If there is no satisfactory match, return
5589 error_mark_node, and issue an error & warning messages under control
5590 of FLAGS. Permit pointers to member function if FLAGS permits. If
5591 TEMPLATE_ONLY, the name of the overloaded function was a
5592 template-id, and EXPLICIT_TARGS are the explicitly provided
5593 template arguments. */
5596 resolve_address_of_overloaded_function (tree target_type,
5598 tsubst_flags_t flags,
5600 tree explicit_targs)
5602 /* Here's what the standard says:
5606 If the name is a function template, template argument deduction
5607 is done, and if the argument deduction succeeds, the deduced
5608 arguments are used to generate a single template function, which
5609 is added to the set of overloaded functions considered.
5611 Non-member functions and static member functions match targets of
5612 type "pointer-to-function" or "reference-to-function." Nonstatic
5613 member functions match targets of type "pointer-to-member
5614 function;" the function type of the pointer to member is used to
5615 select the member function from the set of overloaded member
5616 functions. If a nonstatic member function is selected, the
5617 reference to the overloaded function name is required to have the
5618 form of a pointer to member as described in 5.3.1.
5620 If more than one function is selected, any template functions in
5621 the set are eliminated if the set also contains a non-template
5622 function, and any given template function is eliminated if the
5623 set contains a second template function that is more specialized
5624 than the first according to the partial ordering rules 14.5.5.2.
5625 After such eliminations, if any, there shall remain exactly one
5626 selected function. */
5629 int is_reference = 0;
5630 /* We store the matches in a TREE_LIST rooted here. The functions
5631 are the TREE_PURPOSE, not the TREE_VALUE, in this list, for easy
5632 interoperability with most_specialized_instantiation. */
5633 tree matches = NULL_TREE;
5636 /* By the time we get here, we should be seeing only real
5637 pointer-to-member types, not the internal POINTER_TYPE to
5638 METHOD_TYPE representation. */
5639 gcc_assert (TREE_CODE (target_type) != POINTER_TYPE
5640 || TREE_CODE (TREE_TYPE (target_type)) != METHOD_TYPE);
5642 gcc_assert (is_overloaded_fn (overload));
5644 /* Check that the TARGET_TYPE is reasonable. */
5645 if (TYPE_PTRFN_P (target_type))
5647 else if (TYPE_PTRMEMFUNC_P (target_type))
5648 /* This is OK, too. */
5650 else if (TREE_CODE (target_type) == FUNCTION_TYPE)
5652 /* This is OK, too. This comes from a conversion to reference
5654 target_type = build_reference_type (target_type);
5659 if (flags & tf_error)
5660 error ("cannot resolve overloaded function %qD based on"
5661 " conversion to type %qT",
5662 DECL_NAME (OVL_FUNCTION (overload)), target_type);
5663 return error_mark_node;
5666 /* If we can find a non-template function that matches, we can just
5667 use it. There's no point in generating template instantiations
5668 if we're just going to throw them out anyhow. But, of course, we
5669 can only do this when we don't *need* a template function. */
5674 for (fns = overload; fns; fns = OVL_NEXT (fns))
5676 tree fn = OVL_CURRENT (fns);
5679 if (TREE_CODE (fn) == TEMPLATE_DECL)
5680 /* We're not looking for templates just yet. */
5683 if ((TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
5685 /* We're looking for a non-static member, and this isn't
5686 one, or vice versa. */
5689 /* Ignore functions which haven't been explicitly
5691 if (DECL_ANTICIPATED (fn))
5694 /* See if there's a match. */
5695 fntype = TREE_TYPE (fn);
5697 fntype = build_ptrmemfunc_type (build_pointer_type (fntype));
5698 else if (!is_reference)
5699 fntype = build_pointer_type (fntype);
5701 if (can_convert_arg (target_type, fntype, fn, LOOKUP_NORMAL))
5702 matches = tree_cons (fn, NULL_TREE, matches);
5706 /* Now, if we've already got a match (or matches), there's no need
5707 to proceed to the template functions. But, if we don't have a
5708 match we need to look at them, too. */
5711 tree target_fn_type;
5712 tree target_arg_types;
5713 tree target_ret_type;
5718 = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (target_type));
5720 target_fn_type = TREE_TYPE (target_type);
5721 target_arg_types = TYPE_ARG_TYPES (target_fn_type);
5722 target_ret_type = TREE_TYPE (target_fn_type);
5724 /* Never do unification on the 'this' parameter. */
5725 if (TREE_CODE (target_fn_type) == METHOD_TYPE)
5726 target_arg_types = TREE_CHAIN (target_arg_types);
5728 for (fns = overload; fns; fns = OVL_NEXT (fns))
5730 tree fn = OVL_CURRENT (fns);
5732 tree instantiation_type;
5735 if (TREE_CODE (fn) != TEMPLATE_DECL)
5736 /* We're only looking for templates. */
5739 if ((TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
5741 /* We're not looking for a non-static member, and this is
5742 one, or vice versa. */
5745 /* Try to do argument deduction. */
5746 targs = make_tree_vec (DECL_NTPARMS (fn));
5747 if (fn_type_unification (fn, explicit_targs, targs,
5748 target_arg_types, target_ret_type,
5749 DEDUCE_EXACT, LOOKUP_NORMAL))
5750 /* Argument deduction failed. */
5753 /* Instantiate the template. */
5754 instantiation = instantiate_template (fn, targs, flags);
5755 if (instantiation == error_mark_node)
5756 /* Instantiation failed. */
5759 /* See if there's a match. */
5760 instantiation_type = TREE_TYPE (instantiation);
5762 instantiation_type =
5763 build_ptrmemfunc_type (build_pointer_type (instantiation_type));
5764 else if (!is_reference)
5765 instantiation_type = build_pointer_type (instantiation_type);
5766 if (can_convert_arg (target_type, instantiation_type, instantiation,
5768 matches = tree_cons (instantiation, fn, matches);
5771 /* Now, remove all but the most specialized of the matches. */
5774 tree match = most_specialized_instantiation (matches);
5776 if (match != error_mark_node)
5777 matches = tree_cons (match, NULL_TREE, NULL_TREE);
5781 /* Now we should have exactly one function in MATCHES. */
5782 if (matches == NULL_TREE)
5784 /* There were *no* matches. */
5785 if (flags & tf_error)
5787 error ("no matches converting function %qD to type %q#T",
5788 DECL_NAME (OVL_FUNCTION (overload)),
5791 /* print_candidates expects a chain with the functions in
5792 TREE_VALUE slots, so we cons one up here (we're losing anyway,
5793 so why be clever?). */
5794 for (; overload; overload = OVL_NEXT (overload))
5795 matches = tree_cons (NULL_TREE, OVL_CURRENT (overload),
5798 print_candidates (matches);
5800 return error_mark_node;
5802 else if (TREE_CHAIN (matches))
5804 /* There were too many matches. */
5806 if (flags & tf_error)
5810 error ("converting overloaded function %qD to type %q#T is ambiguous",
5811 DECL_NAME (OVL_FUNCTION (overload)),
5814 /* Since print_candidates expects the functions in the
5815 TREE_VALUE slot, we flip them here. */
5816 for (match = matches; match; match = TREE_CHAIN (match))
5817 TREE_VALUE (match) = TREE_PURPOSE (match);
5819 print_candidates (matches);
5822 return error_mark_node;
5825 /* Good, exactly one match. Now, convert it to the correct type. */
5826 fn = TREE_PURPOSE (matches);
5828 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
5829 && !(flags & tf_ptrmem_ok) && !flag_ms_extensions)
5831 static int explained;
5833 if (!(flags & tf_error))
5834 return error_mark_node;
5836 pedwarn ("assuming pointer to member %qD", fn);
5839 pedwarn ("(a pointer to member can only be formed with %<&%E%>)", fn);
5844 /* If we're doing overload resolution purely for the purpose of
5845 determining conversion sequences, we should not consider the
5846 function used. If this conversion sequence is selected, the
5847 function will be marked as used at this point. */
5848 if (!(flags & tf_conv))
5851 if (TYPE_PTRFN_P (target_type) || TYPE_PTRMEMFUNC_P (target_type))
5852 return build_unary_op (ADDR_EXPR, fn, 0);
5855 /* The target must be a REFERENCE_TYPE. Above, build_unary_op
5856 will mark the function as addressed, but here we must do it
5858 cxx_mark_addressable (fn);
5864 /* This function will instantiate the type of the expression given in
5865 RHS to match the type of LHSTYPE. If errors exist, then return
5866 error_mark_node. FLAGS is a bit mask. If TF_ERROR is set, then
5867 we complain on errors. If we are not complaining, never modify rhs,
5868 as overload resolution wants to try many possible instantiations, in
5869 the hope that at least one will work.
5871 For non-recursive calls, LHSTYPE should be a function, pointer to
5872 function, or a pointer to member function. */
5875 instantiate_type (tree lhstype, tree rhs, tsubst_flags_t flags)
5877 tsubst_flags_t flags_in = flags;
5879 flags &= ~tf_ptrmem_ok;
5881 if (TREE_CODE (lhstype) == UNKNOWN_TYPE)
5883 if (flags & tf_error)
5884 error ("not enough type information");
5885 return error_mark_node;
5888 if (TREE_TYPE (rhs) != NULL_TREE && ! (type_unknown_p (rhs)))
5890 if (same_type_p (lhstype, TREE_TYPE (rhs)))
5892 if (flag_ms_extensions
5893 && TYPE_PTRMEMFUNC_P (lhstype)
5894 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (rhs)))
5895 /* Microsoft allows `A::f' to be resolved to a
5896 pointer-to-member. */
5900 if (flags & tf_error)
5901 error ("argument of type %qT does not match %qT",
5902 TREE_TYPE (rhs), lhstype);
5903 return error_mark_node;
5907 if (TREE_CODE (rhs) == BASELINK)
5908 rhs = BASELINK_FUNCTIONS (rhs);
5910 /* If we are in a template, and have a NON_DEPENDENT_EXPR, we cannot
5911 deduce any type information. */
5912 if (TREE_CODE (rhs) == NON_DEPENDENT_EXPR)
5914 if (flags & tf_error)
5915 error ("not enough type information");
5916 return error_mark_node;
5919 /* We don't overwrite rhs if it is an overloaded function.
5920 Copying it would destroy the tree link. */
5921 if (TREE_CODE (rhs) != OVERLOAD)
5922 rhs = copy_node (rhs);
5924 /* This should really only be used when attempting to distinguish
5925 what sort of a pointer to function we have. For now, any
5926 arithmetic operation which is not supported on pointers
5927 is rejected as an error. */
5929 switch (TREE_CODE (rhs))
5942 new_rhs = instantiate_type (build_pointer_type (lhstype),
5943 TREE_OPERAND (rhs, 0), flags);
5944 if (new_rhs == error_mark_node)
5945 return error_mark_node;
5947 TREE_TYPE (rhs) = lhstype;
5948 TREE_OPERAND (rhs, 0) = new_rhs;
5953 rhs = copy_node (TREE_OPERAND (rhs, 0));
5954 TREE_TYPE (rhs) = unknown_type_node;
5955 return instantiate_type (lhstype, rhs, flags);
5959 tree member = TREE_OPERAND (rhs, 1);
5961 member = instantiate_type (lhstype, member, flags);
5962 if (member != error_mark_node
5963 && TREE_SIDE_EFFECTS (TREE_OPERAND (rhs, 0)))
5964 /* Do not lose object's side effects. */
5965 return build2 (COMPOUND_EXPR, TREE_TYPE (member),
5966 TREE_OPERAND (rhs, 0), member);
5971 rhs = TREE_OPERAND (rhs, 1);
5972 if (BASELINK_P (rhs))
5973 return instantiate_type (lhstype, BASELINK_FUNCTIONS (rhs), flags_in);
5975 /* This can happen if we are forming a pointer-to-member for a
5977 gcc_assert (TREE_CODE (rhs) == TEMPLATE_ID_EXPR);
5981 case TEMPLATE_ID_EXPR:
5983 tree fns = TREE_OPERAND (rhs, 0);
5984 tree args = TREE_OPERAND (rhs, 1);
5987 resolve_address_of_overloaded_function (lhstype, fns, flags_in,
5988 /*template_only=*/true,
5995 resolve_address_of_overloaded_function (lhstype, rhs, flags_in,
5996 /*template_only=*/false,
5997 /*explicit_targs=*/NULL_TREE);
6000 /* This is too hard for now. */
6006 TREE_OPERAND (rhs, 0)
6007 = instantiate_type (lhstype, TREE_OPERAND (rhs, 0), flags);
6008 if (TREE_OPERAND (rhs, 0) == error_mark_node)
6009 return error_mark_node;
6010 TREE_OPERAND (rhs, 1)
6011 = instantiate_type (lhstype, TREE_OPERAND (rhs, 1), flags);
6012 if (TREE_OPERAND (rhs, 1) == error_mark_node)
6013 return error_mark_node;
6015 TREE_TYPE (rhs) = lhstype;
6019 case TRUNC_DIV_EXPR:
6020 case FLOOR_DIV_EXPR:
6022 case ROUND_DIV_EXPR:
6024 case TRUNC_MOD_EXPR:
6025 case FLOOR_MOD_EXPR:
6027 case ROUND_MOD_EXPR:
6028 case FIX_ROUND_EXPR:
6029 case FIX_FLOOR_EXPR:
6031 case FIX_TRUNC_EXPR:
6046 case PREINCREMENT_EXPR:
6047 case PREDECREMENT_EXPR:
6048 case POSTINCREMENT_EXPR:
6049 case POSTDECREMENT_EXPR:
6050 if (flags & tf_error)
6051 error ("invalid operation on uninstantiated type");
6052 return error_mark_node;
6054 case TRUTH_AND_EXPR:
6056 case TRUTH_XOR_EXPR:
6063 case TRUTH_ANDIF_EXPR:
6064 case TRUTH_ORIF_EXPR:
6065 case TRUTH_NOT_EXPR:
6066 if (flags & tf_error)
6067 error ("not enough type information");
6068 return error_mark_node;
6071 if (type_unknown_p (TREE_OPERAND (rhs, 0)))
6073 if (flags & tf_error)
6074 error ("not enough type information");
6075 return error_mark_node;
6077 TREE_OPERAND (rhs, 1)
6078 = instantiate_type (lhstype, TREE_OPERAND (rhs, 1), flags);
6079 if (TREE_OPERAND (rhs, 1) == error_mark_node)
6080 return error_mark_node;
6081 TREE_OPERAND (rhs, 2)
6082 = instantiate_type (lhstype, TREE_OPERAND (rhs, 2), flags);
6083 if (TREE_OPERAND (rhs, 2) == error_mark_node)
6084 return error_mark_node;
6086 TREE_TYPE (rhs) = lhstype;
6090 TREE_OPERAND (rhs, 1)
6091 = instantiate_type (lhstype, TREE_OPERAND (rhs, 1), flags);
6092 if (TREE_OPERAND (rhs, 1) == error_mark_node)
6093 return error_mark_node;
6095 TREE_TYPE (rhs) = lhstype;
6100 if (PTRMEM_OK_P (rhs))
6101 flags |= tf_ptrmem_ok;
6103 return instantiate_type (lhstype, TREE_OPERAND (rhs, 0), flags);
6107 return error_mark_node;
6112 return error_mark_node;
6115 /* Return the name of the virtual function pointer field
6116 (as an IDENTIFIER_NODE) for the given TYPE. Note that
6117 this may have to look back through base types to find the
6118 ultimate field name. (For single inheritance, these could
6119 all be the same name. Who knows for multiple inheritance). */
6122 get_vfield_name (tree type)
6124 tree binfo, base_binfo;
6127 for (binfo = TYPE_BINFO (type);
6128 BINFO_N_BASE_BINFOS (binfo);
6131 base_binfo = BINFO_BASE_BINFO (binfo, 0);
6133 if (BINFO_VIRTUAL_P (base_binfo)
6134 || !TYPE_CONTAINS_VPTR_P (BINFO_TYPE (base_binfo)))
6138 type = BINFO_TYPE (binfo);
6139 buf = alloca (sizeof (VFIELD_NAME_FORMAT) + TYPE_NAME_LENGTH (type) + 2);
6140 sprintf (buf, VFIELD_NAME_FORMAT,
6141 IDENTIFIER_POINTER (constructor_name (type)));
6142 return get_identifier (buf);
6146 print_class_statistics (void)
6148 #ifdef GATHER_STATISTICS
6149 fprintf (stderr, "convert_harshness = %d\n", n_convert_harshness);
6150 fprintf (stderr, "compute_conversion_costs = %d\n", n_compute_conversion_costs);
6153 fprintf (stderr, "vtables = %d; vtable searches = %d\n",
6154 n_vtables, n_vtable_searches);
6155 fprintf (stderr, "vtable entries = %d; vtable elems = %d\n",
6156 n_vtable_entries, n_vtable_elems);
6161 /* Build a dummy reference to ourselves so Derived::Base (and A::A) works,
6162 according to [class]:
6163 The class-name is also inserted
6164 into the scope of the class itself. For purposes of access checking,
6165 the inserted class name is treated as if it were a public member name. */
6168 build_self_reference (void)
6170 tree name = constructor_name (current_class_type);
6171 tree value = build_lang_decl (TYPE_DECL, name, current_class_type);
6174 DECL_NONLOCAL (value) = 1;
6175 DECL_CONTEXT (value) = current_class_type;
6176 DECL_ARTIFICIAL (value) = 1;
6177 SET_DECL_SELF_REFERENCE_P (value);
6179 if (processing_template_decl)
6180 value = push_template_decl (value);
6182 saved_cas = current_access_specifier;
6183 current_access_specifier = access_public_node;
6184 finish_member_declaration (value);
6185 current_access_specifier = saved_cas;
6188 /* Returns 1 if TYPE contains only padding bytes. */
6191 is_empty_class (tree type)
6193 if (type == error_mark_node)
6196 if (! IS_AGGR_TYPE (type))
6199 /* In G++ 3.2, whether or not a class was empty was determined by
6200 looking at its size. */
6201 if (abi_version_at_least (2))
6202 return CLASSTYPE_EMPTY_P (type);
6204 return integer_zerop (CLASSTYPE_SIZE (type));
6207 /* Returns true if TYPE contains an empty class. */
6210 contains_empty_class_p (tree type)
6212 if (is_empty_class (type))
6214 if (CLASS_TYPE_P (type))
6221 for (binfo = TYPE_BINFO (type), i = 0;
6222 BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
6223 if (contains_empty_class_p (BINFO_TYPE (base_binfo)))
6225 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
6226 if (TREE_CODE (field) == FIELD_DECL
6227 && !DECL_ARTIFICIAL (field)
6228 && is_empty_class (TREE_TYPE (field)))
6231 else if (TREE_CODE (type) == ARRAY_TYPE)
6232 return contains_empty_class_p (TREE_TYPE (type));
6236 /* Note that NAME was looked up while the current class was being
6237 defined and that the result of that lookup was DECL. */
6240 maybe_note_name_used_in_class (tree name, tree decl)
6242 splay_tree names_used;
6244 /* If we're not defining a class, there's nothing to do. */
6245 if (!(innermost_scope_kind() == sk_class
6246 && TYPE_BEING_DEFINED (current_class_type)))
6249 /* If there's already a binding for this NAME, then we don't have
6250 anything to worry about. */
6251 if (lookup_member (current_class_type, name,
6252 /*protect=*/0, /*want_type=*/false))
6255 if (!current_class_stack[current_class_depth - 1].names_used)
6256 current_class_stack[current_class_depth - 1].names_used
6257 = splay_tree_new (splay_tree_compare_pointers, 0, 0);
6258 names_used = current_class_stack[current_class_depth - 1].names_used;
6260 splay_tree_insert (names_used,
6261 (splay_tree_key) name,
6262 (splay_tree_value) decl);
6265 /* Note that NAME was declared (as DECL) in the current class. Check
6266 to see that the declaration is valid. */
6269 note_name_declared_in_class (tree name, tree decl)
6271 splay_tree names_used;
6274 /* Look to see if we ever used this name. */
6276 = current_class_stack[current_class_depth - 1].names_used;
6280 n = splay_tree_lookup (names_used, (splay_tree_key) name);
6283 /* [basic.scope.class]
6285 A name N used in a class S shall refer to the same declaration
6286 in its context and when re-evaluated in the completed scope of
6288 error ("declaration of %q#D", decl);
6289 error ("changes meaning of %qD from %q+#D",
6290 DECL_NAME (OVL_CURRENT (decl)), (tree) n->value);
6294 /* Returns the VAR_DECL for the complete vtable associated with BINFO.
6295 Secondary vtables are merged with primary vtables; this function
6296 will return the VAR_DECL for the primary vtable. */
6299 get_vtbl_decl_for_binfo (tree binfo)
6303 decl = BINFO_VTABLE (binfo);
6304 if (decl && TREE_CODE (decl) == PLUS_EXPR)
6306 gcc_assert (TREE_CODE (TREE_OPERAND (decl, 0)) == ADDR_EXPR);
6307 decl = TREE_OPERAND (TREE_OPERAND (decl, 0), 0);
6310 gcc_assert (TREE_CODE (decl) == VAR_DECL);
6315 /* Returns the binfo for the primary base of BINFO. If the resulting
6316 BINFO is a virtual base, and it is inherited elsewhere in the
6317 hierarchy, then the returned binfo might not be the primary base of
6318 BINFO in the complete object. Check BINFO_PRIMARY_P or
6319 BINFO_LOST_PRIMARY_P to be sure. */
6322 get_primary_binfo (tree binfo)
6327 primary_base = CLASSTYPE_PRIMARY_BINFO (BINFO_TYPE (binfo));
6331 result = copied_binfo (primary_base, binfo);
6335 /* If INDENTED_P is zero, indent to INDENT. Return nonzero. */
6338 maybe_indent_hierarchy (FILE * stream, int indent, int indented_p)
6341 fprintf (stream, "%*s", indent, "");
6345 /* Dump the offsets of all the bases rooted at BINFO to STREAM.
6346 INDENT should be zero when called from the top level; it is
6347 incremented recursively. IGO indicates the next expected BINFO in
6348 inheritance graph ordering. */
6351 dump_class_hierarchy_r (FILE *stream,
6361 indented = maybe_indent_hierarchy (stream, indent, 0);
6362 fprintf (stream, "%s (0x%lx) ",
6363 type_as_string (BINFO_TYPE (binfo), TFF_PLAIN_IDENTIFIER),
6364 (unsigned long) binfo);
6367 fprintf (stream, "alternative-path\n");
6370 igo = TREE_CHAIN (binfo);
6372 fprintf (stream, HOST_WIDE_INT_PRINT_DEC,
6373 tree_low_cst (BINFO_OFFSET (binfo), 0));
6374 if (is_empty_class (BINFO_TYPE (binfo)))
6375 fprintf (stream, " empty");
6376 else if (CLASSTYPE_NEARLY_EMPTY_P (BINFO_TYPE (binfo)))
6377 fprintf (stream, " nearly-empty");
6378 if (BINFO_VIRTUAL_P (binfo))
6379 fprintf (stream, " virtual");
6380 fprintf (stream, "\n");
6383 if (BINFO_PRIMARY_P (binfo))
6385 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6386 fprintf (stream, " primary-for %s (0x%lx)",
6387 type_as_string (BINFO_TYPE (BINFO_INHERITANCE_CHAIN (binfo)),
6388 TFF_PLAIN_IDENTIFIER),
6389 (unsigned long)BINFO_INHERITANCE_CHAIN (binfo));
6391 if (BINFO_LOST_PRIMARY_P (binfo))
6393 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6394 fprintf (stream, " lost-primary");
6397 fprintf (stream, "\n");
6399 if (!(flags & TDF_SLIM))
6403 if (BINFO_SUBVTT_INDEX (binfo))
6405 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6406 fprintf (stream, " subvttidx=%s",
6407 expr_as_string (BINFO_SUBVTT_INDEX (binfo),
6408 TFF_PLAIN_IDENTIFIER));
6410 if (BINFO_VPTR_INDEX (binfo))
6412 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6413 fprintf (stream, " vptridx=%s",
6414 expr_as_string (BINFO_VPTR_INDEX (binfo),
6415 TFF_PLAIN_IDENTIFIER));
6417 if (BINFO_VPTR_FIELD (binfo))
6419 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6420 fprintf (stream, " vbaseoffset=%s",
6421 expr_as_string (BINFO_VPTR_FIELD (binfo),
6422 TFF_PLAIN_IDENTIFIER));
6424 if (BINFO_VTABLE (binfo))
6426 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6427 fprintf (stream, " vptr=%s",
6428 expr_as_string (BINFO_VTABLE (binfo),
6429 TFF_PLAIN_IDENTIFIER));
6433 fprintf (stream, "\n");
6436 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
6437 igo = dump_class_hierarchy_r (stream, flags, base_binfo, igo, indent + 2);
6442 /* Dump the BINFO hierarchy for T. */
6445 dump_class_hierarchy_1 (FILE *stream, int flags, tree t)
6447 fprintf (stream, "Class %s\n", type_as_string (t, TFF_PLAIN_IDENTIFIER));
6448 fprintf (stream, " size=%lu align=%lu\n",
6449 (unsigned long)(tree_low_cst (TYPE_SIZE (t), 0) / BITS_PER_UNIT),
6450 (unsigned long)(TYPE_ALIGN (t) / BITS_PER_UNIT));
6451 fprintf (stream, " base size=%lu base align=%lu\n",
6452 (unsigned long)(tree_low_cst (TYPE_SIZE (CLASSTYPE_AS_BASE (t)), 0)
6454 (unsigned long)(TYPE_ALIGN (CLASSTYPE_AS_BASE (t))
6456 dump_class_hierarchy_r (stream, flags, TYPE_BINFO (t), TYPE_BINFO (t), 0);
6457 fprintf (stream, "\n");
6460 /* Debug interface to hierarchy dumping. */
6463 debug_class (tree t)
6465 dump_class_hierarchy_1 (stderr, TDF_SLIM, t);
6469 dump_class_hierarchy (tree t)
6472 FILE *stream = dump_begin (TDI_class, &flags);
6476 dump_class_hierarchy_1 (stream, flags, t);
6477 dump_end (TDI_class, stream);
6482 dump_array (FILE * stream, tree decl)
6485 unsigned HOST_WIDE_INT ix;
6487 tree size = TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (decl)));
6489 elt = (tree_low_cst (TYPE_SIZE (TREE_TYPE (TREE_TYPE (decl))), 0)
6491 fprintf (stream, "%s:", decl_as_string (decl, TFF_PLAIN_IDENTIFIER));
6492 fprintf (stream, " %s entries",
6493 expr_as_string (size_binop (PLUS_EXPR, size, size_one_node),
6494 TFF_PLAIN_IDENTIFIER));
6495 fprintf (stream, "\n");
6497 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (DECL_INITIAL (decl)),
6499 fprintf (stream, "%-4ld %s\n", (long)(ix * elt),
6500 expr_as_string (value, TFF_PLAIN_IDENTIFIER));
6504 dump_vtable (tree t, tree binfo, tree vtable)
6507 FILE *stream = dump_begin (TDI_class, &flags);
6512 if (!(flags & TDF_SLIM))
6514 int ctor_vtbl_p = TYPE_BINFO (t) != binfo;
6516 fprintf (stream, "%s for %s",
6517 ctor_vtbl_p ? "Construction vtable" : "Vtable",
6518 type_as_string (BINFO_TYPE (binfo), TFF_PLAIN_IDENTIFIER));
6521 if (!BINFO_VIRTUAL_P (binfo))
6522 fprintf (stream, " (0x%lx instance)", (unsigned long)binfo);
6523 fprintf (stream, " in %s", type_as_string (t, TFF_PLAIN_IDENTIFIER));
6525 fprintf (stream, "\n");
6526 dump_array (stream, vtable);
6527 fprintf (stream, "\n");
6530 dump_end (TDI_class, stream);
6534 dump_vtt (tree t, tree vtt)
6537 FILE *stream = dump_begin (TDI_class, &flags);
6542 if (!(flags & TDF_SLIM))
6544 fprintf (stream, "VTT for %s\n",
6545 type_as_string (t, TFF_PLAIN_IDENTIFIER));
6546 dump_array (stream, vtt);
6547 fprintf (stream, "\n");
6550 dump_end (TDI_class, stream);
6553 /* Dump a function or thunk and its thunkees. */
6556 dump_thunk (FILE *stream, int indent, tree thunk)
6558 static const char spaces[] = " ";
6559 tree name = DECL_NAME (thunk);
6562 fprintf (stream, "%.*s%p %s %s", indent, spaces,
6564 !DECL_THUNK_P (thunk) ? "function"
6565 : DECL_THIS_THUNK_P (thunk) ? "this-thunk" : "covariant-thunk",
6566 name ? IDENTIFIER_POINTER (name) : "<unset>");
6567 if (DECL_THUNK_P (thunk))
6569 HOST_WIDE_INT fixed_adjust = THUNK_FIXED_OFFSET (thunk);
6570 tree virtual_adjust = THUNK_VIRTUAL_OFFSET (thunk);
6572 fprintf (stream, " fixed=" HOST_WIDE_INT_PRINT_DEC, fixed_adjust);
6573 if (!virtual_adjust)
6575 else if (DECL_THIS_THUNK_P (thunk))
6576 fprintf (stream, " vcall=" HOST_WIDE_INT_PRINT_DEC,
6577 tree_low_cst (virtual_adjust, 0));
6579 fprintf (stream, " vbase=" HOST_WIDE_INT_PRINT_DEC "(%s)",
6580 tree_low_cst (BINFO_VPTR_FIELD (virtual_adjust), 0),
6581 type_as_string (BINFO_TYPE (virtual_adjust), TFF_SCOPE));
6582 if (THUNK_ALIAS (thunk))
6583 fprintf (stream, " alias to %p", (void *)THUNK_ALIAS (thunk));
6585 fprintf (stream, "\n");
6586 for (thunks = DECL_THUNKS (thunk); thunks; thunks = TREE_CHAIN (thunks))
6587 dump_thunk (stream, indent + 2, thunks);
6590 /* Dump the thunks for FN. */
6593 debug_thunks (tree fn)
6595 dump_thunk (stderr, 0, fn);
6598 /* Virtual function table initialization. */
6600 /* Create all the necessary vtables for T and its base classes. */
6603 finish_vtbls (tree t)
6608 /* We lay out the primary and secondary vtables in one contiguous
6609 vtable. The primary vtable is first, followed by the non-virtual
6610 secondary vtables in inheritance graph order. */
6611 list = build_tree_list (BINFO_VTABLE (TYPE_BINFO (t)), NULL_TREE);
6612 accumulate_vtbl_inits (TYPE_BINFO (t), TYPE_BINFO (t),
6613 TYPE_BINFO (t), t, list);
6615 /* Then come the virtual bases, also in inheritance graph order. */
6616 for (vbase = TYPE_BINFO (t); vbase; vbase = TREE_CHAIN (vbase))
6618 if (!BINFO_VIRTUAL_P (vbase))
6620 accumulate_vtbl_inits (vbase, vbase, TYPE_BINFO (t), t, list);
6623 if (BINFO_VTABLE (TYPE_BINFO (t)))
6624 initialize_vtable (TYPE_BINFO (t), TREE_VALUE (list));
6627 /* Initialize the vtable for BINFO with the INITS. */
6630 initialize_vtable (tree binfo, tree inits)
6634 layout_vtable_decl (binfo, list_length (inits));
6635 decl = get_vtbl_decl_for_binfo (binfo);
6636 initialize_artificial_var (decl, inits);
6637 dump_vtable (BINFO_TYPE (binfo), binfo, decl);
6640 /* Build the VTT (virtual table table) for T.
6641 A class requires a VTT if it has virtual bases.
6644 1 - primary virtual pointer for complete object T
6645 2 - secondary VTTs for each direct non-virtual base of T which requires a
6647 3 - secondary virtual pointers for each direct or indirect base of T which
6648 has virtual bases or is reachable via a virtual path from T.
6649 4 - secondary VTTs for each direct or indirect virtual base of T.
6651 Secondary VTTs look like complete object VTTs without part 4. */
6661 /* Build up the initializers for the VTT. */
6663 index = size_zero_node;
6664 build_vtt_inits (TYPE_BINFO (t), t, &inits, &index);
6666 /* If we didn't need a VTT, we're done. */
6670 /* Figure out the type of the VTT. */
6671 type = build_index_type (size_int (list_length (inits) - 1));
6672 type = build_cplus_array_type (const_ptr_type_node, type);
6674 /* Now, build the VTT object itself. */
6675 vtt = build_vtable (t, get_vtt_name (t), type);
6676 initialize_artificial_var (vtt, inits);
6677 /* Add the VTT to the vtables list. */
6678 TREE_CHAIN (vtt) = TREE_CHAIN (CLASSTYPE_VTABLES (t));
6679 TREE_CHAIN (CLASSTYPE_VTABLES (t)) = vtt;
6684 /* When building a secondary VTT, BINFO_VTABLE is set to a TREE_LIST with
6685 PURPOSE the RTTI_BINFO, VALUE the real vtable pointer for this binfo,
6686 and CHAIN the vtable pointer for this binfo after construction is
6687 complete. VALUE can also be another BINFO, in which case we recurse. */
6690 binfo_ctor_vtable (tree binfo)
6696 vt = BINFO_VTABLE (binfo);
6697 if (TREE_CODE (vt) == TREE_LIST)
6698 vt = TREE_VALUE (vt);
6699 if (TREE_CODE (vt) == TREE_BINFO)
6708 /* Data for secondary VTT initialization. */
6709 typedef struct secondary_vptr_vtt_init_data_s
6711 /* Is this the primary VTT? */
6714 /* Current index into the VTT. */
6717 /* TREE_LIST of initializers built up. */
6720 /* The type being constructed by this secondary VTT. */
6721 tree type_being_constructed;
6722 } secondary_vptr_vtt_init_data;
6724 /* Recursively build the VTT-initializer for BINFO (which is in the
6725 hierarchy dominated by T). INITS points to the end of the initializer
6726 list to date. INDEX is the VTT index where the next element will be
6727 replaced. Iff BINFO is the binfo for T, this is the top level VTT (i.e.
6728 not a subvtt for some base of T). When that is so, we emit the sub-VTTs
6729 for virtual bases of T. When it is not so, we build the constructor
6730 vtables for the BINFO-in-T variant. */
6733 build_vtt_inits (tree binfo, tree t, tree *inits, tree *index)
6738 tree secondary_vptrs;
6739 secondary_vptr_vtt_init_data data;
6740 int top_level_p = SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), t);
6742 /* We only need VTTs for subobjects with virtual bases. */
6743 if (!CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo)))
6746 /* We need to use a construction vtable if this is not the primary
6750 build_ctor_vtbl_group (binfo, t);
6752 /* Record the offset in the VTT where this sub-VTT can be found. */
6753 BINFO_SUBVTT_INDEX (binfo) = *index;
6756 /* Add the address of the primary vtable for the complete object. */
6757 init = binfo_ctor_vtable (binfo);
6758 *inits = build_tree_list (NULL_TREE, init);
6759 inits = &TREE_CHAIN (*inits);
6762 gcc_assert (!BINFO_VPTR_INDEX (binfo));
6763 BINFO_VPTR_INDEX (binfo) = *index;
6765 *index = size_binop (PLUS_EXPR, *index, TYPE_SIZE_UNIT (ptr_type_node));
6767 /* Recursively add the secondary VTTs for non-virtual bases. */
6768 for (i = 0; BINFO_BASE_ITERATE (binfo, i, b); ++i)
6769 if (!BINFO_VIRTUAL_P (b))
6770 inits = build_vtt_inits (b, t, inits, index);
6772 /* Add secondary virtual pointers for all subobjects of BINFO with
6773 either virtual bases or reachable along a virtual path, except
6774 subobjects that are non-virtual primary bases. */
6775 data.top_level_p = top_level_p;
6776 data.index = *index;
6778 data.type_being_constructed = BINFO_TYPE (binfo);
6780 dfs_walk_once (binfo, dfs_build_secondary_vptr_vtt_inits, NULL, &data);
6782 *index = data.index;
6784 /* The secondary vptrs come back in reverse order. After we reverse
6785 them, and add the INITS, the last init will be the first element
6787 secondary_vptrs = data.inits;
6788 if (secondary_vptrs)
6790 *inits = nreverse (secondary_vptrs);
6791 inits = &TREE_CHAIN (secondary_vptrs);
6792 gcc_assert (*inits == NULL_TREE);
6796 /* Add the secondary VTTs for virtual bases in inheritance graph
6798 for (b = TYPE_BINFO (BINFO_TYPE (binfo)); b; b = TREE_CHAIN (b))
6800 if (!BINFO_VIRTUAL_P (b))
6803 inits = build_vtt_inits (b, t, inits, index);
6806 /* Remove the ctor vtables we created. */
6807 dfs_walk_all (binfo, dfs_fixup_binfo_vtbls, NULL, binfo);
6812 /* Called from build_vtt_inits via dfs_walk. BINFO is the binfo for the base
6813 in most derived. DATA is a SECONDARY_VPTR_VTT_INIT_DATA structure. */
6816 dfs_build_secondary_vptr_vtt_inits (tree binfo, void *data_)
6818 secondary_vptr_vtt_init_data *data = (secondary_vptr_vtt_init_data *)data_;
6820 /* We don't care about bases that don't have vtables. */
6821 if (!TYPE_VFIELD (BINFO_TYPE (binfo)))
6822 return dfs_skip_bases;
6824 /* We're only interested in proper subobjects of the type being
6826 if (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), data->type_being_constructed))
6829 /* We're only interested in bases with virtual bases or reachable
6830 via a virtual path from the type being constructed. */
6831 if (!(CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo))
6832 || binfo_via_virtual (binfo, data->type_being_constructed)))
6833 return dfs_skip_bases;
6835 /* We're not interested in non-virtual primary bases. */
6836 if (!BINFO_VIRTUAL_P (binfo) && BINFO_PRIMARY_P (binfo))
6839 /* Record the index where this secondary vptr can be found. */
6840 if (data->top_level_p)
6842 gcc_assert (!BINFO_VPTR_INDEX (binfo));
6843 BINFO_VPTR_INDEX (binfo) = data->index;
6845 if (BINFO_VIRTUAL_P (binfo))
6847 /* It's a primary virtual base, and this is not a
6848 construction vtable. Find the base this is primary of in
6849 the inheritance graph, and use that base's vtable
6851 while (BINFO_PRIMARY_P (binfo))
6852 binfo = BINFO_INHERITANCE_CHAIN (binfo);
6856 /* Add the initializer for the secondary vptr itself. */
6857 data->inits = tree_cons (NULL_TREE, binfo_ctor_vtable (binfo), data->inits);
6859 /* Advance the vtt index. */
6860 data->index = size_binop (PLUS_EXPR, data->index,
6861 TYPE_SIZE_UNIT (ptr_type_node));
6866 /* Called from build_vtt_inits via dfs_walk. After building
6867 constructor vtables and generating the sub-vtt from them, we need
6868 to restore the BINFO_VTABLES that were scribbled on. DATA is the
6869 binfo of the base whose sub vtt was generated. */
6872 dfs_fixup_binfo_vtbls (tree binfo, void* data)
6874 tree vtable = BINFO_VTABLE (binfo);
6876 if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
6877 /* If this class has no vtable, none of its bases do. */
6878 return dfs_skip_bases;
6881 /* This might be a primary base, so have no vtable in this
6885 /* If we scribbled the construction vtable vptr into BINFO, clear it
6887 if (TREE_CODE (vtable) == TREE_LIST
6888 && (TREE_PURPOSE (vtable) == (tree) data))
6889 BINFO_VTABLE (binfo) = TREE_CHAIN (vtable);
6894 /* Build the construction vtable group for BINFO which is in the
6895 hierarchy dominated by T. */
6898 build_ctor_vtbl_group (tree binfo, tree t)
6907 /* See if we've already created this construction vtable group. */
6908 id = mangle_ctor_vtbl_for_type (t, binfo);
6909 if (IDENTIFIER_GLOBAL_VALUE (id))
6912 gcc_assert (!SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), t));
6913 /* Build a version of VTBL (with the wrong type) for use in
6914 constructing the addresses of secondary vtables in the
6915 construction vtable group. */
6916 vtbl = build_vtable (t, id, ptr_type_node);
6917 DECL_CONSTRUCTION_VTABLE_P (vtbl) = 1;
6918 list = build_tree_list (vtbl, NULL_TREE);
6919 accumulate_vtbl_inits (binfo, TYPE_BINFO (TREE_TYPE (binfo)),
6922 /* Add the vtables for each of our virtual bases using the vbase in T
6924 for (vbase = TYPE_BINFO (BINFO_TYPE (binfo));
6926 vbase = TREE_CHAIN (vbase))
6930 if (!BINFO_VIRTUAL_P (vbase))
6932 b = copied_binfo (vbase, binfo);
6934 accumulate_vtbl_inits (b, vbase, binfo, t, list);
6936 inits = TREE_VALUE (list);
6938 /* Figure out the type of the construction vtable. */
6939 type = build_index_type (size_int (list_length (inits) - 1));
6940 type = build_cplus_array_type (vtable_entry_type, type);
6941 TREE_TYPE (vtbl) = type;
6943 /* Initialize the construction vtable. */
6944 CLASSTYPE_VTABLES (t) = chainon (CLASSTYPE_VTABLES (t), vtbl);
6945 initialize_artificial_var (vtbl, inits);
6946 dump_vtable (t, binfo, vtbl);
6949 /* Add the vtbl initializers for BINFO (and its bases other than
6950 non-virtual primaries) to the list of INITS. BINFO is in the
6951 hierarchy dominated by T. RTTI_BINFO is the binfo within T of
6952 the constructor the vtbl inits should be accumulated for. (If this
6953 is the complete object vtbl then RTTI_BINFO will be TYPE_BINFO (T).)
6954 ORIG_BINFO is the binfo for this object within BINFO_TYPE (RTTI_BINFO).
6955 BINFO is the active base equivalent of ORIG_BINFO in the inheritance
6956 graph of T. Both BINFO and ORIG_BINFO will have the same BINFO_TYPE,
6957 but are not necessarily the same in terms of layout. */
6960 accumulate_vtbl_inits (tree binfo,
6968 int ctor_vtbl_p = !SAME_BINFO_TYPE_P (BINFO_TYPE (rtti_binfo), t);
6970 gcc_assert (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), BINFO_TYPE (orig_binfo)));
6972 /* If it doesn't have a vptr, we don't do anything. */
6973 if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
6976 /* If we're building a construction vtable, we're not interested in
6977 subobjects that don't require construction vtables. */
6979 && !CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo))
6980 && !binfo_via_virtual (orig_binfo, BINFO_TYPE (rtti_binfo)))
6983 /* Build the initializers for the BINFO-in-T vtable. */
6985 = chainon (TREE_VALUE (inits),
6986 dfs_accumulate_vtbl_inits (binfo, orig_binfo,
6987 rtti_binfo, t, inits));
6989 /* Walk the BINFO and its bases. We walk in preorder so that as we
6990 initialize each vtable we can figure out at what offset the
6991 secondary vtable lies from the primary vtable. We can't use
6992 dfs_walk here because we need to iterate through bases of BINFO
6993 and RTTI_BINFO simultaneously. */
6994 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
6996 /* Skip virtual bases. */
6997 if (BINFO_VIRTUAL_P (base_binfo))
6999 accumulate_vtbl_inits (base_binfo,
7000 BINFO_BASE_BINFO (orig_binfo, i),
7006 /* Called from accumulate_vtbl_inits. Returns the initializers for
7007 the BINFO vtable. */
7010 dfs_accumulate_vtbl_inits (tree binfo,
7016 tree inits = NULL_TREE;
7017 tree vtbl = NULL_TREE;
7018 int ctor_vtbl_p = !SAME_BINFO_TYPE_P (BINFO_TYPE (rtti_binfo), t);
7021 && BINFO_VIRTUAL_P (orig_binfo) && BINFO_PRIMARY_P (orig_binfo))
7023 /* In the hierarchy of BINFO_TYPE (RTTI_BINFO), this is a
7024 primary virtual base. If it is not the same primary in
7025 the hierarchy of T, we'll need to generate a ctor vtable
7026 for it, to place at its location in T. If it is the same
7027 primary, we still need a VTT entry for the vtable, but it
7028 should point to the ctor vtable for the base it is a
7029 primary for within the sub-hierarchy of RTTI_BINFO.
7031 There are three possible cases:
7033 1) We are in the same place.
7034 2) We are a primary base within a lost primary virtual base of
7036 3) We are primary to something not a base of RTTI_BINFO. */
7039 tree last = NULL_TREE;
7041 /* First, look through the bases we are primary to for RTTI_BINFO
7042 or a virtual base. */
7044 while (BINFO_PRIMARY_P (b))
7046 b = BINFO_INHERITANCE_CHAIN (b);
7048 if (BINFO_VIRTUAL_P (b) || b == rtti_binfo)
7051 /* If we run out of primary links, keep looking down our
7052 inheritance chain; we might be an indirect primary. */
7053 for (b = last; b; b = BINFO_INHERITANCE_CHAIN (b))
7054 if (BINFO_VIRTUAL_P (b) || b == rtti_binfo)
7058 /* If we found RTTI_BINFO, this is case 1. If we found a virtual
7059 base B and it is a base of RTTI_BINFO, this is case 2. In
7060 either case, we share our vtable with LAST, i.e. the
7061 derived-most base within B of which we are a primary. */
7063 || (b && binfo_for_vbase (BINFO_TYPE (b), BINFO_TYPE (rtti_binfo))))
7064 /* Just set our BINFO_VTABLE to point to LAST, as we may not have
7065 set LAST's BINFO_VTABLE yet. We'll extract the actual vptr in
7066 binfo_ctor_vtable after everything's been set up. */
7069 /* Otherwise, this is case 3 and we get our own. */
7071 else if (!BINFO_NEW_VTABLE_MARKED (orig_binfo))
7079 /* Compute the initializer for this vtable. */
7080 inits = build_vtbl_initializer (binfo, orig_binfo, t, rtti_binfo,
7083 /* Figure out the position to which the VPTR should point. */
7084 vtbl = TREE_PURPOSE (l);
7085 vtbl = build1 (ADDR_EXPR, vtbl_ptr_type_node, vtbl);
7086 index = size_binop (PLUS_EXPR,
7087 size_int (non_fn_entries),
7088 size_int (list_length (TREE_VALUE (l))));
7089 index = size_binop (MULT_EXPR,
7090 TYPE_SIZE_UNIT (vtable_entry_type),
7092 vtbl = build2 (PLUS_EXPR, TREE_TYPE (vtbl), vtbl, index);
7096 /* For a construction vtable, we can't overwrite BINFO_VTABLE.
7097 So, we make a TREE_LIST. Later, dfs_fixup_binfo_vtbls will
7098 straighten this out. */
7099 BINFO_VTABLE (binfo) = tree_cons (rtti_binfo, vtbl, BINFO_VTABLE (binfo));
7100 else if (BINFO_PRIMARY_P (binfo) && BINFO_VIRTUAL_P (binfo))
7103 /* For an ordinary vtable, set BINFO_VTABLE. */
7104 BINFO_VTABLE (binfo) = vtbl;
7109 static GTY(()) tree abort_fndecl_addr;
7111 /* Construct the initializer for BINFO's virtual function table. BINFO
7112 is part of the hierarchy dominated by T. If we're building a
7113 construction vtable, the ORIG_BINFO is the binfo we should use to
7114 find the actual function pointers to put in the vtable - but they
7115 can be overridden on the path to most-derived in the graph that
7116 ORIG_BINFO belongs. Otherwise,
7117 ORIG_BINFO should be the same as BINFO. The RTTI_BINFO is the
7118 BINFO that should be indicated by the RTTI information in the
7119 vtable; it will be a base class of T, rather than T itself, if we
7120 are building a construction vtable.
7122 The value returned is a TREE_LIST suitable for wrapping in a
7123 CONSTRUCTOR to use as the DECL_INITIAL for a vtable. If
7124 NON_FN_ENTRIES_P is not NULL, *NON_FN_ENTRIES_P is set to the
7125 number of non-function entries in the vtable.
7127 It might seem that this function should never be called with a
7128 BINFO for which BINFO_PRIMARY_P holds, the vtable for such a
7129 base is always subsumed by a derived class vtable. However, when
7130 we are building construction vtables, we do build vtables for
7131 primary bases; we need these while the primary base is being
7135 build_vtbl_initializer (tree binfo,
7139 int* non_fn_entries_p)
7146 VEC(tree,gc) *vbases;
7148 /* Initialize VID. */
7149 memset (&vid, 0, sizeof (vid));
7152 vid.rtti_binfo = rtti_binfo;
7153 vid.last_init = &vid.inits;
7154 vid.primary_vtbl_p = SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), t);
7155 vid.ctor_vtbl_p = !SAME_BINFO_TYPE_P (BINFO_TYPE (rtti_binfo), t);
7156 vid.generate_vcall_entries = true;
7157 /* The first vbase or vcall offset is at index -3 in the vtable. */
7158 vid.index = ssize_int(-3 * TARGET_VTABLE_DATA_ENTRY_DISTANCE);
7160 /* Add entries to the vtable for RTTI. */
7161 build_rtti_vtbl_entries (binfo, &vid);
7163 /* Create an array for keeping track of the functions we've
7164 processed. When we see multiple functions with the same
7165 signature, we share the vcall offsets. */
7166 vid.fns = VEC_alloc (tree, gc, 32);
7167 /* Add the vcall and vbase offset entries. */
7168 build_vcall_and_vbase_vtbl_entries (binfo, &vid);
7170 /* Clear BINFO_VTABLE_PATH_MARKED; it's set by
7171 build_vbase_offset_vtbl_entries. */
7172 for (vbases = CLASSTYPE_VBASECLASSES (t), ix = 0;
7173 VEC_iterate (tree, vbases, ix, vbinfo); ix++)
7174 BINFO_VTABLE_PATH_MARKED (vbinfo) = 0;
7176 /* If the target requires padding between data entries, add that now. */
7177 if (TARGET_VTABLE_DATA_ENTRY_DISTANCE > 1)
7181 for (prev = &vid.inits; (cur = *prev); prev = &TREE_CHAIN (cur))
7186 for (i = 1; i < TARGET_VTABLE_DATA_ENTRY_DISTANCE; ++i)
7187 add = tree_cons (NULL_TREE,
7188 build1 (NOP_EXPR, vtable_entry_type,
7195 if (non_fn_entries_p)
7196 *non_fn_entries_p = list_length (vid.inits);
7198 /* Go through all the ordinary virtual functions, building up
7200 vfun_inits = NULL_TREE;
7201 for (v = BINFO_VIRTUALS (orig_binfo); v; v = TREE_CHAIN (v))
7205 tree fn, fn_original;
7206 tree init = NULL_TREE;
7210 if (DECL_THUNK_P (fn))
7212 if (!DECL_NAME (fn))
7214 if (THUNK_ALIAS (fn))
7216 fn = THUNK_ALIAS (fn);
7219 fn_original = THUNK_TARGET (fn);
7222 /* If the only definition of this function signature along our
7223 primary base chain is from a lost primary, this vtable slot will
7224 never be used, so just zero it out. This is important to avoid
7225 requiring extra thunks which cannot be generated with the function.
7227 We first check this in update_vtable_entry_for_fn, so we handle
7228 restored primary bases properly; we also need to do it here so we
7229 zero out unused slots in ctor vtables, rather than filling themff
7230 with erroneous values (though harmless, apart from relocation
7232 for (b = binfo; ; b = get_primary_binfo (b))
7234 /* We found a defn before a lost primary; go ahead as normal. */
7235 if (look_for_overrides_here (BINFO_TYPE (b), fn_original))
7238 /* The nearest definition is from a lost primary; clear the
7240 if (BINFO_LOST_PRIMARY_P (b))
7242 init = size_zero_node;
7249 /* Pull the offset for `this', and the function to call, out of
7251 delta = BV_DELTA (v);
7252 vcall_index = BV_VCALL_INDEX (v);
7254 gcc_assert (TREE_CODE (delta) == INTEGER_CST);
7255 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
7257 /* You can't call an abstract virtual function; it's abstract.
7258 So, we replace these functions with __pure_virtual. */
7259 if (DECL_PURE_VIRTUAL_P (fn_original))
7262 if (abort_fndecl_addr == NULL)
7263 abort_fndecl_addr = build1 (ADDR_EXPR, vfunc_ptr_type_node, fn);
7264 init = abort_fndecl_addr;
7268 if (!integer_zerop (delta) || vcall_index)
7270 fn = make_thunk (fn, /*this_adjusting=*/1, delta, vcall_index);
7271 if (!DECL_NAME (fn))
7274 /* Take the address of the function, considering it to be of an
7275 appropriate generic type. */
7276 init = build1 (ADDR_EXPR, vfunc_ptr_type_node, fn);
7280 /* And add it to the chain of initializers. */
7281 if (TARGET_VTABLE_USES_DESCRIPTORS)
7284 if (init == size_zero_node)
7285 for (i = 0; i < TARGET_VTABLE_USES_DESCRIPTORS; ++i)
7286 vfun_inits = tree_cons (NULL_TREE, init, vfun_inits);
7288 for (i = 0; i < TARGET_VTABLE_USES_DESCRIPTORS; ++i)
7290 tree fdesc = build2 (FDESC_EXPR, vfunc_ptr_type_node,
7291 TREE_OPERAND (init, 0),
7292 build_int_cst (NULL_TREE, i));
7293 TREE_CONSTANT (fdesc) = 1;
7294 TREE_INVARIANT (fdesc) = 1;
7296 vfun_inits = tree_cons (NULL_TREE, fdesc, vfun_inits);
7300 vfun_inits = tree_cons (NULL_TREE, init, vfun_inits);
7303 /* The initializers for virtual functions were built up in reverse
7304 order; straighten them out now. */
7305 vfun_inits = nreverse (vfun_inits);
7307 /* The negative offset initializers are also in reverse order. */
7308 vid.inits = nreverse (vid.inits);
7310 /* Chain the two together. */
7311 return chainon (vid.inits, vfun_inits);
7314 /* Adds to vid->inits the initializers for the vbase and vcall
7315 offsets in BINFO, which is in the hierarchy dominated by T. */
7318 build_vcall_and_vbase_vtbl_entries (tree binfo, vtbl_init_data* vid)
7322 /* If this is a derived class, we must first create entries
7323 corresponding to the primary base class. */
7324 b = get_primary_binfo (binfo);
7326 build_vcall_and_vbase_vtbl_entries (b, vid);
7328 /* Add the vbase entries for this base. */
7329 build_vbase_offset_vtbl_entries (binfo, vid);
7330 /* Add the vcall entries for this base. */
7331 build_vcall_offset_vtbl_entries (binfo, vid);
7334 /* Returns the initializers for the vbase offset entries in the vtable
7335 for BINFO (which is part of the class hierarchy dominated by T), in
7336 reverse order. VBASE_OFFSET_INDEX gives the vtable index
7337 where the next vbase offset will go. */
7340 build_vbase_offset_vtbl_entries (tree binfo, vtbl_init_data* vid)
7344 tree non_primary_binfo;
7346 /* If there are no virtual baseclasses, then there is nothing to
7348 if (!CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo)))
7353 /* We might be a primary base class. Go up the inheritance hierarchy
7354 until we find the most derived class of which we are a primary base:
7355 it is the offset of that which we need to use. */
7356 non_primary_binfo = binfo;
7357 while (BINFO_INHERITANCE_CHAIN (non_primary_binfo))
7361 /* If we have reached a virtual base, then it must be a primary
7362 base (possibly multi-level) of vid->binfo, or we wouldn't
7363 have called build_vcall_and_vbase_vtbl_entries for it. But it
7364 might be a lost primary, so just skip down to vid->binfo. */
7365 if (BINFO_VIRTUAL_P (non_primary_binfo))
7367 non_primary_binfo = vid->binfo;
7371 b = BINFO_INHERITANCE_CHAIN (non_primary_binfo);
7372 if (get_primary_binfo (b) != non_primary_binfo)
7374 non_primary_binfo = b;
7377 /* Go through the virtual bases, adding the offsets. */
7378 for (vbase = TYPE_BINFO (BINFO_TYPE (binfo));
7380 vbase = TREE_CHAIN (vbase))
7385 if (!BINFO_VIRTUAL_P (vbase))
7388 /* Find the instance of this virtual base in the complete
7390 b = copied_binfo (vbase, binfo);
7392 /* If we've already got an offset for this virtual base, we
7393 don't need another one. */
7394 if (BINFO_VTABLE_PATH_MARKED (b))
7396 BINFO_VTABLE_PATH_MARKED (b) = 1;
7398 /* Figure out where we can find this vbase offset. */
7399 delta = size_binop (MULT_EXPR,
7402 TYPE_SIZE_UNIT (vtable_entry_type)));
7403 if (vid->primary_vtbl_p)
7404 BINFO_VPTR_FIELD (b) = delta;
7406 if (binfo != TYPE_BINFO (t))
7407 /* The vbase offset had better be the same. */
7408 gcc_assert (tree_int_cst_equal (delta, BINFO_VPTR_FIELD (vbase)));
7410 /* The next vbase will come at a more negative offset. */
7411 vid->index = size_binop (MINUS_EXPR, vid->index,
7412 ssize_int (TARGET_VTABLE_DATA_ENTRY_DISTANCE));
7414 /* The initializer is the delta from BINFO to this virtual base.
7415 The vbase offsets go in reverse inheritance-graph order, and
7416 we are walking in inheritance graph order so these end up in
7418 delta = size_diffop (BINFO_OFFSET (b), BINFO_OFFSET (non_primary_binfo));
7421 = build_tree_list (NULL_TREE,
7422 fold_build1 (NOP_EXPR,
7425 vid->last_init = &TREE_CHAIN (*vid->last_init);
7429 /* Adds the initializers for the vcall offset entries in the vtable
7430 for BINFO (which is part of the class hierarchy dominated by VID->DERIVED)
7434 build_vcall_offset_vtbl_entries (tree binfo, vtbl_init_data* vid)
7436 /* We only need these entries if this base is a virtual base. We
7437 compute the indices -- but do not add to the vtable -- when
7438 building the main vtable for a class. */
7439 if (BINFO_VIRTUAL_P (binfo) || binfo == TYPE_BINFO (vid->derived))
7441 /* We need a vcall offset for each of the virtual functions in this
7442 vtable. For example:
7444 class A { virtual void f (); };
7445 class B1 : virtual public A { virtual void f (); };
7446 class B2 : virtual public A { virtual void f (); };
7447 class C: public B1, public B2 { virtual void f (); };
7449 A C object has a primary base of B1, which has a primary base of A. A
7450 C also has a secondary base of B2, which no longer has a primary base
7451 of A. So the B2-in-C construction vtable needs a secondary vtable for
7452 A, which will adjust the A* to a B2* to call f. We have no way of
7453 knowing what (or even whether) this offset will be when we define B2,
7454 so we store this "vcall offset" in the A sub-vtable and look it up in
7455 a "virtual thunk" for B2::f.
7457 We need entries for all the functions in our primary vtable and
7458 in our non-virtual bases' secondary vtables. */
7460 /* If we are just computing the vcall indices -- but do not need
7461 the actual entries -- not that. */
7462 if (!BINFO_VIRTUAL_P (binfo))
7463 vid->generate_vcall_entries = false;
7464 /* Now, walk through the non-virtual bases, adding vcall offsets. */
7465 add_vcall_offset_vtbl_entries_r (binfo, vid);
7469 /* Build vcall offsets, starting with those for BINFO. */
7472 add_vcall_offset_vtbl_entries_r (tree binfo, vtbl_init_data* vid)
7478 /* Don't walk into virtual bases -- except, of course, for the
7479 virtual base for which we are building vcall offsets. Any
7480 primary virtual base will have already had its offsets generated
7481 through the recursion in build_vcall_and_vbase_vtbl_entries. */
7482 if (BINFO_VIRTUAL_P (binfo) && vid->vbase != binfo)
7485 /* If BINFO has a primary base, process it first. */
7486 primary_binfo = get_primary_binfo (binfo);
7488 add_vcall_offset_vtbl_entries_r (primary_binfo, vid);
7490 /* Add BINFO itself to the list. */
7491 add_vcall_offset_vtbl_entries_1 (binfo, vid);
7493 /* Scan the non-primary bases of BINFO. */
7494 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
7495 if (base_binfo != primary_binfo)
7496 add_vcall_offset_vtbl_entries_r (base_binfo, vid);
7499 /* Called from build_vcall_offset_vtbl_entries_r. */
7502 add_vcall_offset_vtbl_entries_1 (tree binfo, vtbl_init_data* vid)
7504 /* Make entries for the rest of the virtuals. */
7505 if (abi_version_at_least (2))
7509 /* The ABI requires that the methods be processed in declaration
7510 order. G++ 3.2 used the order in the vtable. */
7511 for (orig_fn = TYPE_METHODS (BINFO_TYPE (binfo));
7513 orig_fn = TREE_CHAIN (orig_fn))
7514 if (DECL_VINDEX (orig_fn))
7515 add_vcall_offset (orig_fn, binfo, vid);
7519 tree derived_virtuals;
7522 /* If BINFO is a primary base, the most derived class which has
7523 BINFO as a primary base; otherwise, just BINFO. */
7524 tree non_primary_binfo;
7526 /* We might be a primary base class. Go up the inheritance hierarchy
7527 until we find the most derived class of which we are a primary base:
7528 it is the BINFO_VIRTUALS there that we need to consider. */
7529 non_primary_binfo = binfo;
7530 while (BINFO_INHERITANCE_CHAIN (non_primary_binfo))
7534 /* If we have reached a virtual base, then it must be vid->vbase,
7535 because we ignore other virtual bases in
7536 add_vcall_offset_vtbl_entries_r. In turn, it must be a primary
7537 base (possibly multi-level) of vid->binfo, or we wouldn't
7538 have called build_vcall_and_vbase_vtbl_entries for it. But it
7539 might be a lost primary, so just skip down to vid->binfo. */
7540 if (BINFO_VIRTUAL_P (non_primary_binfo))
7542 gcc_assert (non_primary_binfo == vid->vbase);
7543 non_primary_binfo = vid->binfo;
7547 b = BINFO_INHERITANCE_CHAIN (non_primary_binfo);
7548 if (get_primary_binfo (b) != non_primary_binfo)
7550 non_primary_binfo = b;
7553 if (vid->ctor_vtbl_p)
7554 /* For a ctor vtable we need the equivalent binfo within the hierarchy
7555 where rtti_binfo is the most derived type. */
7557 = original_binfo (non_primary_binfo, vid->rtti_binfo);
7559 for (base_virtuals = BINFO_VIRTUALS (binfo),
7560 derived_virtuals = BINFO_VIRTUALS (non_primary_binfo),
7561 orig_virtuals = BINFO_VIRTUALS (TYPE_BINFO (BINFO_TYPE (binfo)));
7563 base_virtuals = TREE_CHAIN (base_virtuals),
7564 derived_virtuals = TREE_CHAIN (derived_virtuals),
7565 orig_virtuals = TREE_CHAIN (orig_virtuals))
7569 /* Find the declaration that originally caused this function to
7570 be present in BINFO_TYPE (binfo). */
7571 orig_fn = BV_FN (orig_virtuals);
7573 /* When processing BINFO, we only want to generate vcall slots for
7574 function slots introduced in BINFO. So don't try to generate
7575 one if the function isn't even defined in BINFO. */
7576 if (!SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), DECL_CONTEXT (orig_fn)))
7579 add_vcall_offset (orig_fn, binfo, vid);
7584 /* Add a vcall offset entry for ORIG_FN to the vtable. */
7587 add_vcall_offset (tree orig_fn, tree binfo, vtbl_init_data *vid)
7593 /* If there is already an entry for a function with the same
7594 signature as FN, then we do not need a second vcall offset.
7595 Check the list of functions already present in the derived
7597 for (i = 0; VEC_iterate (tree, vid->fns, i, derived_entry); ++i)
7599 if (same_signature_p (derived_entry, orig_fn)
7600 /* We only use one vcall offset for virtual destructors,
7601 even though there are two virtual table entries. */
7602 || (DECL_DESTRUCTOR_P (derived_entry)
7603 && DECL_DESTRUCTOR_P (orig_fn)))
7607 /* If we are building these vcall offsets as part of building
7608 the vtable for the most derived class, remember the vcall
7610 if (vid->binfo == TYPE_BINFO (vid->derived))
7612 tree_pair_p elt = VEC_safe_push (tree_pair_s, gc,
7613 CLASSTYPE_VCALL_INDICES (vid->derived),
7615 elt->purpose = orig_fn;
7616 elt->value = vid->index;
7619 /* The next vcall offset will be found at a more negative
7621 vid->index = size_binop (MINUS_EXPR, vid->index,
7622 ssize_int (TARGET_VTABLE_DATA_ENTRY_DISTANCE));
7624 /* Keep track of this function. */
7625 VEC_safe_push (tree, gc, vid->fns, orig_fn);
7627 if (vid->generate_vcall_entries)
7632 /* Find the overriding function. */
7633 fn = find_final_overrider (vid->rtti_binfo, binfo, orig_fn);
7634 if (fn == error_mark_node)
7635 vcall_offset = build1 (NOP_EXPR, vtable_entry_type,
7639 base = TREE_VALUE (fn);
7641 /* The vbase we're working on is a primary base of
7642 vid->binfo. But it might be a lost primary, so its
7643 BINFO_OFFSET might be wrong, so we just use the
7644 BINFO_OFFSET from vid->binfo. */
7645 vcall_offset = size_diffop (BINFO_OFFSET (base),
7646 BINFO_OFFSET (vid->binfo));
7647 vcall_offset = fold_build1 (NOP_EXPR, vtable_entry_type,
7650 /* Add the initializer to the vtable. */
7651 *vid->last_init = build_tree_list (NULL_TREE, vcall_offset);
7652 vid->last_init = &TREE_CHAIN (*vid->last_init);
7656 /* Return vtbl initializers for the RTTI entries corresponding to the
7657 BINFO's vtable. The RTTI entries should indicate the object given
7658 by VID->rtti_binfo. */
7661 build_rtti_vtbl_entries (tree binfo, vtbl_init_data* vid)
7670 basetype = BINFO_TYPE (binfo);
7671 t = BINFO_TYPE (vid->rtti_binfo);
7673 /* To find the complete object, we will first convert to our most
7674 primary base, and then add the offset in the vtbl to that value. */
7676 while (CLASSTYPE_HAS_PRIMARY_BASE_P (BINFO_TYPE (b))
7677 && !BINFO_LOST_PRIMARY_P (b))
7681 primary_base = get_primary_binfo (b);
7682 gcc_assert (BINFO_PRIMARY_P (primary_base)
7683 && BINFO_INHERITANCE_CHAIN (primary_base) == b);
7686 offset = size_diffop (BINFO_OFFSET (vid->rtti_binfo), BINFO_OFFSET (b));
7688 /* The second entry is the address of the typeinfo object. */
7690 decl = build_address (get_tinfo_decl (t));
7692 decl = integer_zero_node;
7694 /* Convert the declaration to a type that can be stored in the
7696 init = build_nop (vfunc_ptr_type_node, decl);
7697 *vid->last_init = build_tree_list (NULL_TREE, init);
7698 vid->last_init = &TREE_CHAIN (*vid->last_init);
7700 /* Add the offset-to-top entry. It comes earlier in the vtable than
7701 the typeinfo entry. Convert the offset to look like a
7702 function pointer, so that we can put it in the vtable. */
7703 init = build_nop (vfunc_ptr_type_node, offset);
7704 *vid->last_init = build_tree_list (NULL_TREE, init);
7705 vid->last_init = &TREE_CHAIN (*vid->last_init);
7708 /* Fold a OBJ_TYPE_REF expression to the address of a function.
7709 KNOWN_TYPE carries the true type of OBJ_TYPE_REF_OBJECT(REF). */
7712 cp_fold_obj_type_ref (tree ref, tree known_type)
7714 HOST_WIDE_INT index = tree_low_cst (OBJ_TYPE_REF_TOKEN (ref), 1);
7715 HOST_WIDE_INT i = 0;
7716 tree v = BINFO_VIRTUALS (TYPE_BINFO (known_type));
7721 i += (TARGET_VTABLE_USES_DESCRIPTORS
7722 ? TARGET_VTABLE_USES_DESCRIPTORS : 1);
7728 #ifdef ENABLE_CHECKING
7729 gcc_assert (tree_int_cst_equal (OBJ_TYPE_REF_TOKEN (ref),
7730 DECL_VINDEX (fndecl)));
7733 cgraph_node (fndecl)->local.vtable_method = true;
7735 return build_address (fndecl);
7738 #include "gt-cp-class.h"