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, 2007
4 Free Software Foundation, Inc.
5 Contributed by Michael Tiemann (tiemann@cygnus.com)
7 This file is part of GCC.
9 GCC is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2, or (at your option)
14 GCC is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with GCC; see the file COPYING. If not, write to
21 the Free Software Foundation, 51 Franklin Street, Fifth Floor,
22 Boston, MA 02110-1301, USA. */
25 /* High-level class interface. */
29 #include "coretypes.h"
40 #include "tree-dump.h"
42 /* The number of nested classes being processed. If we are not in the
43 scope of any class, this is zero. */
45 int current_class_depth;
47 /* In order to deal with nested classes, we keep a stack of classes.
48 The topmost entry is the innermost class, and is the entry at index
49 CURRENT_CLASS_DEPTH */
51 typedef struct class_stack_node {
52 /* The name of the class. */
55 /* The _TYPE node for the class. */
58 /* The access specifier pending for new declarations in the scope of
62 /* If were defining TYPE, the names used in this class. */
63 splay_tree names_used;
65 /* Nonzero if this class is no longer open, because of a call to
68 }* class_stack_node_t;
70 typedef struct vtbl_init_data_s
72 /* The base for which we're building initializers. */
74 /* The type of the most-derived type. */
76 /* The binfo for the dynamic type. This will be TYPE_BINFO (derived),
77 unless ctor_vtbl_p is true. */
79 /* The negative-index vtable initializers built up so far. These
80 are in order from least negative index to most negative index. */
82 /* The last (i.e., most negative) entry in INITS. */
84 /* The binfo for the virtual base for which we're building
85 vcall offset initializers. */
87 /* The functions in vbase for which we have already provided vcall
90 /* The vtable index of the next vcall or vbase offset. */
92 /* Nonzero if we are building the initializer for the primary
95 /* Nonzero if we are building the initializer for a construction
98 /* True when adding vcall offset entries to the vtable. False when
99 merely computing the indices. */
100 bool generate_vcall_entries;
103 /* The type of a function passed to walk_subobject_offsets. */
104 typedef int (*subobject_offset_fn) (tree, tree, splay_tree);
106 /* The stack itself. This is a dynamically resized array. The
107 number of elements allocated is CURRENT_CLASS_STACK_SIZE. */
108 static int current_class_stack_size;
109 static class_stack_node_t current_class_stack;
111 /* The size of the largest empty class seen in this translation unit. */
112 static GTY (()) tree sizeof_biggest_empty_class;
114 /* An array of all local classes present in this translation unit, in
115 declaration order. */
116 VEC(tree,gc) *local_classes;
118 static tree get_vfield_name (tree);
119 static void finish_struct_anon (tree);
120 static tree get_vtable_name (tree);
121 static tree get_basefndecls (tree, tree);
122 static int build_primary_vtable (tree, tree);
123 static int build_secondary_vtable (tree);
124 static void finish_vtbls (tree);
125 static void modify_vtable_entry (tree, tree, tree, tree, tree *);
126 static void finish_struct_bits (tree);
127 static int alter_access (tree, tree, tree);
128 static void handle_using_decl (tree, tree);
129 static tree dfs_modify_vtables (tree, void *);
130 static tree modify_all_vtables (tree, tree);
131 static void determine_primary_bases (tree);
132 static void finish_struct_methods (tree);
133 static void maybe_warn_about_overly_private_class (tree);
134 static int method_name_cmp (const void *, const void *);
135 static int resort_method_name_cmp (const void *, const void *);
136 static void add_implicitly_declared_members (tree, int, int);
137 static tree fixed_type_or_null (tree, int *, int *);
138 static tree build_simple_base_path (tree expr, tree binfo);
139 static tree build_vtbl_ref_1 (tree, tree);
140 static tree build_vtbl_initializer (tree, tree, tree, tree, int *);
141 static int count_fields (tree);
142 static int add_fields_to_record_type (tree, struct sorted_fields_type*, int);
143 static void check_bitfield_decl (tree);
144 static void check_field_decl (tree, tree, int *, int *, int *);
145 static void check_field_decls (tree, tree *, int *, int *);
146 static tree *build_base_field (record_layout_info, tree, splay_tree, tree *);
147 static void build_base_fields (record_layout_info, splay_tree, tree *);
148 static void check_methods (tree);
149 static void remove_zero_width_bit_fields (tree);
150 static void check_bases (tree, int *, int *);
151 static void check_bases_and_members (tree);
152 static tree create_vtable_ptr (tree, tree *);
153 static void include_empty_classes (record_layout_info);
154 static void layout_class_type (tree, tree *);
155 static void fixup_pending_inline (tree);
156 static void fixup_inline_methods (tree);
157 static void propagate_binfo_offsets (tree, tree);
158 static void layout_virtual_bases (record_layout_info, splay_tree);
159 static void build_vbase_offset_vtbl_entries (tree, vtbl_init_data *);
160 static void add_vcall_offset_vtbl_entries_r (tree, vtbl_init_data *);
161 static void add_vcall_offset_vtbl_entries_1 (tree, vtbl_init_data *);
162 static void build_vcall_offset_vtbl_entries (tree, vtbl_init_data *);
163 static void add_vcall_offset (tree, tree, vtbl_init_data *);
164 static void layout_vtable_decl (tree, int);
165 static tree dfs_find_final_overrider_pre (tree, void *);
166 static tree dfs_find_final_overrider_post (tree, void *);
167 static tree find_final_overrider (tree, tree, tree);
168 static int make_new_vtable (tree, tree);
169 static tree get_primary_binfo (tree);
170 static int maybe_indent_hierarchy (FILE *, int, int);
171 static tree dump_class_hierarchy_r (FILE *, int, tree, tree, int);
172 static void dump_class_hierarchy (tree);
173 static void dump_class_hierarchy_1 (FILE *, int, tree);
174 static void dump_array (FILE *, tree);
175 static void dump_vtable (tree, tree, tree);
176 static void dump_vtt (tree, tree);
177 static void dump_thunk (FILE *, int, tree);
178 static tree build_vtable (tree, tree, tree);
179 static void initialize_vtable (tree, tree);
180 static void layout_nonempty_base_or_field (record_layout_info,
181 tree, tree, splay_tree);
182 static tree end_of_class (tree, int);
183 static bool layout_empty_base (tree, tree, splay_tree);
184 static void accumulate_vtbl_inits (tree, tree, tree, tree, tree);
185 static tree dfs_accumulate_vtbl_inits (tree, tree, tree, tree,
187 static void build_rtti_vtbl_entries (tree, vtbl_init_data *);
188 static void build_vcall_and_vbase_vtbl_entries (tree, vtbl_init_data *);
189 static void clone_constructors_and_destructors (tree);
190 static tree build_clone (tree, tree);
191 static void update_vtable_entry_for_fn (tree, tree, tree, tree *, unsigned);
192 static void build_ctor_vtbl_group (tree, tree);
193 static void build_vtt (tree);
194 static tree binfo_ctor_vtable (tree);
195 static tree *build_vtt_inits (tree, tree, tree *, tree *);
196 static tree dfs_build_secondary_vptr_vtt_inits (tree, void *);
197 static tree dfs_fixup_binfo_vtbls (tree, void *);
198 static int record_subobject_offset (tree, tree, splay_tree);
199 static int check_subobject_offset (tree, tree, splay_tree);
200 static int walk_subobject_offsets (tree, subobject_offset_fn,
201 tree, splay_tree, tree, int);
202 static void record_subobject_offsets (tree, tree, splay_tree, bool);
203 static int layout_conflict_p (tree, tree, splay_tree, int);
204 static int splay_tree_compare_integer_csts (splay_tree_key k1,
206 static void warn_about_ambiguous_bases (tree);
207 static bool type_requires_array_cookie (tree);
208 static bool contains_empty_class_p (tree);
209 static bool base_derived_from (tree, tree);
210 static int empty_base_at_nonzero_offset_p (tree, tree, splay_tree);
211 static tree end_of_base (tree);
212 static tree get_vcall_index (tree, tree);
214 /* Variables shared between class.c and call.c. */
216 #ifdef GATHER_STATISTICS
218 int n_vtable_entries = 0;
219 int n_vtable_searches = 0;
220 int n_vtable_elems = 0;
221 int n_convert_harshness = 0;
222 int n_compute_conversion_costs = 0;
223 int n_inner_fields_searched = 0;
226 /* Convert to or from a base subobject. EXPR is an expression of type
227 `A' or `A*', an expression of type `B' or `B*' is returned. To
228 convert A to a base B, CODE is PLUS_EXPR and BINFO is the binfo for
229 the B base instance within A. To convert base A to derived B, CODE
230 is MINUS_EXPR and BINFO is the binfo for the A instance within B.
231 In this latter case, A must not be a morally virtual base of B.
232 NONNULL is true if EXPR is known to be non-NULL (this is only
233 needed when EXPR is of pointer type). CV qualifiers are preserved
237 build_base_path (enum tree_code code,
242 tree v_binfo = NULL_TREE;
243 tree d_binfo = NULL_TREE;
247 tree null_test = NULL;
248 tree ptr_target_type;
250 int want_pointer = TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE;
251 bool has_empty = false;
254 if (expr == error_mark_node || binfo == error_mark_node || !binfo)
255 return error_mark_node;
257 for (probe = binfo; probe; probe = BINFO_INHERITANCE_CHAIN (probe))
260 if (is_empty_class (BINFO_TYPE (probe)))
262 if (!v_binfo && BINFO_VIRTUAL_P (probe))
266 probe = TYPE_MAIN_VARIANT (TREE_TYPE (expr));
268 probe = TYPE_MAIN_VARIANT (TREE_TYPE (probe));
270 gcc_assert ((code == MINUS_EXPR
271 && SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), probe))
272 || (code == PLUS_EXPR
273 && SAME_BINFO_TYPE_P (BINFO_TYPE (d_binfo), probe)));
275 if (binfo == d_binfo)
279 if (code == MINUS_EXPR && v_binfo)
281 error ("cannot convert from base %qT to derived type %qT via virtual base %qT",
282 BINFO_TYPE (binfo), BINFO_TYPE (d_binfo), BINFO_TYPE (v_binfo));
283 return error_mark_node;
287 /* This must happen before the call to save_expr. */
288 expr = build_unary_op (ADDR_EXPR, expr, 0);
290 offset = BINFO_OFFSET (binfo);
291 fixed_type_p = resolves_to_fixed_type_p (expr, &nonnull);
292 target_type = code == PLUS_EXPR ? BINFO_TYPE (binfo) : BINFO_TYPE (d_binfo);
294 /* Do we need to look in the vtable for the real offset? */
295 virtual_access = (v_binfo && fixed_type_p <= 0);
297 /* Do we need to check for a null pointer? */
298 if (want_pointer && !nonnull)
300 /* If we know the conversion will not actually change the value
301 of EXPR, then we can avoid testing the expression for NULL.
302 We have to avoid generating a COMPONENT_REF for a base class
303 field, because other parts of the compiler know that such
304 expressions are always non-NULL. */
305 if (!virtual_access && integer_zerop (offset))
306 return build_nop (build_pointer_type (target_type), expr);
307 null_test = error_mark_node;
310 /* Protect against multiple evaluation if necessary. */
311 if (TREE_SIDE_EFFECTS (expr) && (null_test || virtual_access))
312 expr = save_expr (expr);
314 /* Now that we've saved expr, build the real null test. */
317 tree zero = cp_convert (TREE_TYPE (expr), integer_zero_node);
318 null_test = fold_build2 (NE_EXPR, boolean_type_node,
322 /* If this is a simple base reference, express it as a COMPONENT_REF. */
323 if (code == PLUS_EXPR && !virtual_access
324 /* We don't build base fields for empty bases, and they aren't very
325 interesting to the optimizers anyway. */
328 expr = build_indirect_ref (expr, NULL);
329 expr = build_simple_base_path (expr, binfo);
331 expr = build_address (expr);
332 target_type = TREE_TYPE (expr);
338 /* Going via virtual base V_BINFO. We need the static offset
339 from V_BINFO to BINFO, and the dynamic offset from D_BINFO to
340 V_BINFO. That offset is an entry in D_BINFO's vtable. */
343 if (fixed_type_p < 0 && in_base_initializer)
345 /* In a base member initializer, we cannot rely on the
346 vtable being set up. We have to indirect via the
350 t = TREE_TYPE (TYPE_VFIELD (current_class_type));
351 t = build_pointer_type (t);
352 v_offset = convert (t, current_vtt_parm);
353 v_offset = build_indirect_ref (v_offset, NULL);
356 v_offset = build_vfield_ref (build_indirect_ref (expr, NULL),
357 TREE_TYPE (TREE_TYPE (expr)));
359 v_offset = build2 (PLUS_EXPR, TREE_TYPE (v_offset),
360 v_offset, BINFO_VPTR_FIELD (v_binfo));
361 v_offset = build1 (NOP_EXPR,
362 build_pointer_type (ptrdiff_type_node),
364 v_offset = build_indirect_ref (v_offset, NULL);
365 TREE_CONSTANT (v_offset) = 1;
366 TREE_INVARIANT (v_offset) = 1;
368 offset = convert_to_integer (ptrdiff_type_node,
370 BINFO_OFFSET (v_binfo)));
372 if (!integer_zerop (offset))
373 v_offset = build2 (code, ptrdiff_type_node, v_offset, offset);
375 if (fixed_type_p < 0)
376 /* Negative fixed_type_p means this is a constructor or destructor;
377 virtual base layout is fixed in in-charge [cd]tors, but not in
379 offset = build3 (COND_EXPR, ptrdiff_type_node,
380 build2 (EQ_EXPR, boolean_type_node,
381 current_in_charge_parm, integer_zero_node),
383 convert_to_integer (ptrdiff_type_node,
384 BINFO_OFFSET (binfo)));
389 target_type = cp_build_qualified_type
390 (target_type, cp_type_quals (TREE_TYPE (TREE_TYPE (expr))));
391 ptr_target_type = build_pointer_type (target_type);
393 target_type = ptr_target_type;
395 expr = build1 (NOP_EXPR, ptr_target_type, expr);
397 if (!integer_zerop (offset))
398 expr = build2 (code, ptr_target_type, expr, offset);
403 expr = build_indirect_ref (expr, NULL);
407 expr = fold_build3 (COND_EXPR, target_type, null_test, expr,
408 fold_build1 (NOP_EXPR, target_type,
414 /* Subroutine of build_base_path; EXPR and BINFO are as in that function.
415 Perform a derived-to-base conversion by recursively building up a
416 sequence of COMPONENT_REFs to the appropriate base fields. */
419 build_simple_base_path (tree expr, tree binfo)
421 tree type = BINFO_TYPE (binfo);
422 tree d_binfo = BINFO_INHERITANCE_CHAIN (binfo);
425 if (d_binfo == NULL_TREE)
429 gcc_assert (TYPE_MAIN_VARIANT (TREE_TYPE (expr)) == type);
431 /* Transform `(a, b).x' into `(*(a, &b)).x', `(a ? b : c).x'
432 into `(*(a ? &b : &c)).x', and so on. A COND_EXPR is only
433 an lvalue in the frontend; only _DECLs and _REFs are lvalues
435 temp = unary_complex_lvalue (ADDR_EXPR, expr);
437 expr = build_indirect_ref (temp, NULL);
443 expr = build_simple_base_path (expr, d_binfo);
445 for (field = TYPE_FIELDS (BINFO_TYPE (d_binfo));
446 field; field = TREE_CHAIN (field))
447 /* Is this the base field created by build_base_field? */
448 if (TREE_CODE (field) == FIELD_DECL
449 && DECL_FIELD_IS_BASE (field)
450 && TREE_TYPE (field) == type)
452 /* We don't use build_class_member_access_expr here, as that
453 has unnecessary checks, and more importantly results in
454 recursive calls to dfs_walk_once. */
455 int type_quals = cp_type_quals (TREE_TYPE (expr));
457 expr = build3 (COMPONENT_REF,
458 cp_build_qualified_type (type, type_quals),
459 expr, field, NULL_TREE);
460 expr = fold_if_not_in_template (expr);
462 /* Mark the expression const or volatile, as appropriate.
463 Even though we've dealt with the type above, we still have
464 to mark the expression itself. */
465 if (type_quals & TYPE_QUAL_CONST)
466 TREE_READONLY (expr) = 1;
467 if (type_quals & TYPE_QUAL_VOLATILE)
468 TREE_THIS_VOLATILE (expr) = 1;
473 /* Didn't find the base field?!? */
477 /* Convert OBJECT to the base TYPE. OBJECT is an expression whose
478 type is a class type or a pointer to a class type. In the former
479 case, TYPE is also a class type; in the latter it is another
480 pointer type. If CHECK_ACCESS is true, an error message is emitted
481 if TYPE is inaccessible. If OBJECT has pointer type, the value is
482 assumed to be non-NULL. */
485 convert_to_base (tree object, tree type, bool check_access, bool nonnull)
490 if (TYPE_PTR_P (TREE_TYPE (object)))
492 object_type = TREE_TYPE (TREE_TYPE (object));
493 type = TREE_TYPE (type);
496 object_type = TREE_TYPE (object);
498 binfo = lookup_base (object_type, type,
499 check_access ? ba_check : ba_unique,
501 if (!binfo || binfo == error_mark_node)
502 return error_mark_node;
504 return build_base_path (PLUS_EXPR, object, binfo, nonnull);
507 /* EXPR is an expression with unqualified class type. BASE is a base
508 binfo of that class type. Returns EXPR, converted to the BASE
509 type. This function assumes that EXPR is the most derived class;
510 therefore virtual bases can be found at their static offsets. */
513 convert_to_base_statically (tree expr, tree base)
517 expr_type = TREE_TYPE (expr);
518 if (!SAME_BINFO_TYPE_P (BINFO_TYPE (base), expr_type))
522 pointer_type = build_pointer_type (expr_type);
523 expr = build_unary_op (ADDR_EXPR, expr, /*noconvert=*/1);
524 if (!integer_zerop (BINFO_OFFSET (base)))
525 expr = build2 (PLUS_EXPR, pointer_type, expr,
526 build_nop (pointer_type, BINFO_OFFSET (base)));
527 expr = build_nop (build_pointer_type (BINFO_TYPE (base)), expr);
528 expr = build1 (INDIRECT_REF, BINFO_TYPE (base), expr);
536 build_vfield_ref (tree datum, tree type)
538 tree vfield, vcontext;
540 if (datum == error_mark_node)
541 return error_mark_node;
543 /* First, convert to the requested type. */
544 if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (datum), type))
545 datum = convert_to_base (datum, type, /*check_access=*/false,
548 /* Second, the requested type may not be the owner of its own vptr.
549 If not, convert to the base class that owns it. We cannot use
550 convert_to_base here, because VCONTEXT may appear more than once
551 in the inheritance hierarchy of TYPE, and thus direct conversion
552 between the types may be ambiguous. Following the path back up
553 one step at a time via primary bases avoids the problem. */
554 vfield = TYPE_VFIELD (type);
555 vcontext = DECL_CONTEXT (vfield);
556 while (!same_type_ignoring_top_level_qualifiers_p (vcontext, type))
558 datum = build_simple_base_path (datum, CLASSTYPE_PRIMARY_BINFO (type));
559 type = TREE_TYPE (datum);
562 return build3 (COMPONENT_REF, TREE_TYPE (vfield), datum, vfield, NULL_TREE);
565 /* Given an object INSTANCE, return an expression which yields the
566 vtable element corresponding to INDEX. There are many special
567 cases for INSTANCE which we take care of here, mainly to avoid
568 creating extra tree nodes when we don't have to. */
571 build_vtbl_ref_1 (tree instance, tree idx)
574 tree vtbl = NULL_TREE;
576 /* Try to figure out what a reference refers to, and
577 access its virtual function table directly. */
580 tree fixed_type = fixed_type_or_null (instance, NULL, &cdtorp);
582 tree basetype = non_reference (TREE_TYPE (instance));
584 if (fixed_type && !cdtorp)
586 tree binfo = lookup_base (fixed_type, basetype,
587 ba_unique | ba_quiet, NULL);
589 vtbl = unshare_expr (BINFO_VTABLE (binfo));
593 vtbl = build_vfield_ref (instance, basetype);
595 assemble_external (vtbl);
597 aref = build_array_ref (vtbl, idx);
598 TREE_CONSTANT (aref) |= TREE_CONSTANT (vtbl) && TREE_CONSTANT (idx);
599 TREE_INVARIANT (aref) = TREE_CONSTANT (aref);
605 build_vtbl_ref (tree instance, tree idx)
607 tree aref = build_vtbl_ref_1 (instance, idx);
612 /* Given a stable object pointer INSTANCE_PTR, return an expression which
613 yields a function pointer corresponding to vtable element INDEX. */
616 build_vfn_ref (tree instance_ptr, tree idx)
620 aref = build_vtbl_ref_1 (build_indirect_ref (instance_ptr, 0), idx);
622 /* When using function descriptors, the address of the
623 vtable entry is treated as a function pointer. */
624 if (TARGET_VTABLE_USES_DESCRIPTORS)
625 aref = build1 (NOP_EXPR, TREE_TYPE (aref),
626 build_unary_op (ADDR_EXPR, aref, /*noconvert=*/1));
628 /* Remember this as a method reference, for later devirtualization. */
629 aref = build3 (OBJ_TYPE_REF, TREE_TYPE (aref), aref, instance_ptr, idx);
634 /* Return the name of the virtual function table (as an IDENTIFIER_NODE)
635 for the given TYPE. */
638 get_vtable_name (tree type)
640 return mangle_vtbl_for_type (type);
643 /* DECL is an entity associated with TYPE, like a virtual table or an
644 implicitly generated constructor. Determine whether or not DECL
645 should have external or internal linkage at the object file
646 level. This routine does not deal with COMDAT linkage and other
647 similar complexities; it simply sets TREE_PUBLIC if it possible for
648 entities in other translation units to contain copies of DECL, in
652 set_linkage_according_to_type (tree type, tree decl)
654 /* If TYPE involves a local class in a function with internal
655 linkage, then DECL should have internal linkage too. Other local
656 classes have no linkage -- but if their containing functions
657 have external linkage, it makes sense for DECL to have external
658 linkage too. That will allow template definitions to be merged,
660 if (no_linkage_check (type, /*relaxed_p=*/true))
662 TREE_PUBLIC (decl) = 0;
663 DECL_INTERFACE_KNOWN (decl) = 1;
666 TREE_PUBLIC (decl) = 1;
669 /* Create a VAR_DECL for a primary or secondary vtable for CLASS_TYPE.
670 (For a secondary vtable for B-in-D, CLASS_TYPE should be D, not B.)
671 Use NAME for the name of the vtable, and VTABLE_TYPE for its type. */
674 build_vtable (tree class_type, tree name, tree vtable_type)
678 decl = build_lang_decl (VAR_DECL, name, vtable_type);
679 /* vtable names are already mangled; give them their DECL_ASSEMBLER_NAME
680 now to avoid confusion in mangle_decl. */
681 SET_DECL_ASSEMBLER_NAME (decl, name);
682 DECL_CONTEXT (decl) = class_type;
683 DECL_ARTIFICIAL (decl) = 1;
684 TREE_STATIC (decl) = 1;
685 TREE_READONLY (decl) = 1;
686 DECL_VIRTUAL_P (decl) = 1;
687 DECL_ALIGN (decl) = TARGET_VTABLE_ENTRY_ALIGN;
688 DECL_VTABLE_OR_VTT_P (decl) = 1;
689 /* At one time the vtable info was grabbed 2 words at a time. This
690 fails on sparc unless you have 8-byte alignment. (tiemann) */
691 DECL_ALIGN (decl) = MAX (TYPE_ALIGN (double_type_node),
693 set_linkage_according_to_type (class_type, decl);
694 /* The vtable has not been defined -- yet. */
695 DECL_EXTERNAL (decl) = 1;
696 DECL_NOT_REALLY_EXTERN (decl) = 1;
698 /* Mark the VAR_DECL node representing the vtable itself as a
699 "gratuitous" one, thereby forcing dwarfout.c to ignore it. It
700 is rather important that such things be ignored because any
701 effort to actually generate DWARF for them will run into
702 trouble when/if we encounter code like:
705 struct S { virtual void member (); };
707 because the artificial declaration of the vtable itself (as
708 manufactured by the g++ front end) will say that the vtable is
709 a static member of `S' but only *after* the debug output for
710 the definition of `S' has already been output. This causes
711 grief because the DWARF entry for the definition of the vtable
712 will try to refer back to an earlier *declaration* of the
713 vtable as a static member of `S' and there won't be one. We
714 might be able to arrange to have the "vtable static member"
715 attached to the member list for `S' before the debug info for
716 `S' get written (which would solve the problem) but that would
717 require more intrusive changes to the g++ front end. */
718 DECL_IGNORED_P (decl) = 1;
723 /* Get the VAR_DECL of the vtable for TYPE. TYPE need not be polymorphic,
724 or even complete. If this does not exist, create it. If COMPLETE is
725 nonzero, then complete the definition of it -- that will render it
726 impossible to actually build the vtable, but is useful to get at those
727 which are known to exist in the runtime. */
730 get_vtable_decl (tree type, int complete)
734 if (CLASSTYPE_VTABLES (type))
735 return CLASSTYPE_VTABLES (type);
737 decl = build_vtable (type, get_vtable_name (type), vtbl_type_node);
738 CLASSTYPE_VTABLES (type) = decl;
742 DECL_EXTERNAL (decl) = 1;
743 finish_decl (decl, NULL_TREE, NULL_TREE);
749 /* Build the primary virtual function table for TYPE. If BINFO is
750 non-NULL, build the vtable starting with the initial approximation
751 that it is the same as the one which is the head of the association
752 list. Returns a nonzero value if a new vtable is actually
756 build_primary_vtable (tree binfo, tree type)
761 decl = get_vtable_decl (type, /*complete=*/0);
765 if (BINFO_NEW_VTABLE_MARKED (binfo))
766 /* We have already created a vtable for this base, so there's
767 no need to do it again. */
770 virtuals = copy_list (BINFO_VIRTUALS (binfo));
771 TREE_TYPE (decl) = TREE_TYPE (get_vtbl_decl_for_binfo (binfo));
772 DECL_SIZE (decl) = TYPE_SIZE (TREE_TYPE (decl));
773 DECL_SIZE_UNIT (decl) = TYPE_SIZE_UNIT (TREE_TYPE (decl));
777 gcc_assert (TREE_TYPE (decl) == vtbl_type_node);
778 virtuals = NULL_TREE;
781 #ifdef GATHER_STATISTICS
783 n_vtable_elems += list_length (virtuals);
786 /* Initialize the association list for this type, based
787 on our first approximation. */
788 BINFO_VTABLE (TYPE_BINFO (type)) = decl;
789 BINFO_VIRTUALS (TYPE_BINFO (type)) = virtuals;
790 SET_BINFO_NEW_VTABLE_MARKED (TYPE_BINFO (type));
794 /* Give BINFO a new virtual function table which is initialized
795 with a skeleton-copy of its original initialization. The only
796 entry that changes is the `delta' entry, so we can really
797 share a lot of structure.
799 FOR_TYPE is the most derived type which caused this table to
802 Returns nonzero if we haven't met BINFO before.
804 The order in which vtables are built (by calling this function) for
805 an object must remain the same, otherwise a binary incompatibility
809 build_secondary_vtable (tree binfo)
811 if (BINFO_NEW_VTABLE_MARKED (binfo))
812 /* We already created a vtable for this base. There's no need to
816 /* Remember that we've created a vtable for this BINFO, so that we
817 don't try to do so again. */
818 SET_BINFO_NEW_VTABLE_MARKED (binfo);
820 /* Make fresh virtual list, so we can smash it later. */
821 BINFO_VIRTUALS (binfo) = copy_list (BINFO_VIRTUALS (binfo));
823 /* Secondary vtables are laid out as part of the same structure as
824 the primary vtable. */
825 BINFO_VTABLE (binfo) = NULL_TREE;
829 /* Create a new vtable for BINFO which is the hierarchy dominated by
830 T. Return nonzero if we actually created a new vtable. */
833 make_new_vtable (tree t, tree binfo)
835 if (binfo == TYPE_BINFO (t))
836 /* In this case, it is *type*'s vtable we are modifying. We start
837 with the approximation that its vtable is that of the
838 immediate base class. */
839 return build_primary_vtable (binfo, t);
841 /* This is our very own copy of `basetype' to play with. Later,
842 we will fill in all the virtual functions that override the
843 virtual functions in these base classes which are not defined
844 by the current type. */
845 return build_secondary_vtable (binfo);
848 /* Make *VIRTUALS, an entry on the BINFO_VIRTUALS list for BINFO
849 (which is in the hierarchy dominated by T) list FNDECL as its
850 BV_FN. DELTA is the required constant adjustment from the `this'
851 pointer where the vtable entry appears to the `this' required when
852 the function is actually called. */
855 modify_vtable_entry (tree t,
865 if (fndecl != BV_FN (v)
866 || !tree_int_cst_equal (delta, BV_DELTA (v)))
868 /* We need a new vtable for BINFO. */
869 if (make_new_vtable (t, binfo))
871 /* If we really did make a new vtable, we also made a copy
872 of the BINFO_VIRTUALS list. Now, we have to find the
873 corresponding entry in that list. */
874 *virtuals = BINFO_VIRTUALS (binfo);
875 while (BV_FN (*virtuals) != BV_FN (v))
876 *virtuals = TREE_CHAIN (*virtuals);
880 BV_DELTA (v) = delta;
881 BV_VCALL_INDEX (v) = NULL_TREE;
887 /* Add method METHOD to class TYPE. If USING_DECL is non-null, it is
888 the USING_DECL naming METHOD. Returns true if the method could be
889 added to the method vec. */
892 add_method (tree type, tree method, tree using_decl)
896 bool template_conv_p = false;
898 VEC(tree,gc) *method_vec;
900 bool insert_p = false;
904 if (method == error_mark_node)
907 complete_p = COMPLETE_TYPE_P (type);
908 conv_p = DECL_CONV_FN_P (method);
910 template_conv_p = (TREE_CODE (method) == TEMPLATE_DECL
911 && DECL_TEMPLATE_CONV_FN_P (method));
913 method_vec = CLASSTYPE_METHOD_VEC (type);
916 /* Make a new method vector. We start with 8 entries. We must
917 allocate at least two (for constructors and destructors), and
918 we're going to end up with an assignment operator at some
920 method_vec = VEC_alloc (tree, gc, 8);
921 /* Create slots for constructors and destructors. */
922 VEC_quick_push (tree, method_vec, NULL_TREE);
923 VEC_quick_push (tree, method_vec, NULL_TREE);
924 CLASSTYPE_METHOD_VEC (type) = method_vec;
927 /* Maintain TYPE_HAS_CONSTRUCTOR, etc. */
928 grok_special_member_properties (method);
930 /* Constructors and destructors go in special slots. */
931 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (method))
932 slot = CLASSTYPE_CONSTRUCTOR_SLOT;
933 else if (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (method))
935 slot = CLASSTYPE_DESTRUCTOR_SLOT;
937 if (TYPE_FOR_JAVA (type))
939 if (!DECL_ARTIFICIAL (method))
940 error ("Java class %qT cannot have a destructor", type);
941 else if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
942 error ("Java class %qT cannot have an implicit non-trivial "
952 /* See if we already have an entry with this name. */
953 for (slot = CLASSTYPE_FIRST_CONVERSION_SLOT;
954 VEC_iterate (tree, method_vec, slot, m);
960 if (TREE_CODE (m) == TEMPLATE_DECL
961 && DECL_TEMPLATE_CONV_FN_P (m))
965 if (conv_p && !DECL_CONV_FN_P (m))
967 if (DECL_NAME (m) == DECL_NAME (method))
973 && !DECL_CONV_FN_P (m)
974 && DECL_NAME (m) > DECL_NAME (method))
978 current_fns = insert_p ? NULL_TREE : VEC_index (tree, method_vec, slot);
980 /* Check to see if we've already got this method. */
981 for (fns = current_fns; fns; fns = OVL_NEXT (fns))
983 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 fn_type = TREE_TYPE (fn);
1003 method_type = TREE_TYPE (method);
1004 parms1 = TYPE_ARG_TYPES (fn_type);
1005 parms2 = TYPE_ARG_TYPES (method_type);
1007 /* Compare the quals on the 'this' parm. Don't compare
1008 the whole types, as used functions are treated as
1009 coming from the using class in overload resolution. */
1010 if (! DECL_STATIC_FUNCTION_P (fn)
1011 && ! DECL_STATIC_FUNCTION_P (method)
1012 && (TYPE_QUALS (TREE_TYPE (TREE_VALUE (parms1)))
1013 != TYPE_QUALS (TREE_TYPE (TREE_VALUE (parms2)))))
1016 /* For templates, the return type and template parameters
1017 must be identical. */
1018 if (TREE_CODE (fn) == TEMPLATE_DECL
1019 && (!same_type_p (TREE_TYPE (fn_type),
1020 TREE_TYPE (method_type))
1021 || !comp_template_parms (DECL_TEMPLATE_PARMS (fn),
1022 DECL_TEMPLATE_PARMS (method))))
1025 if (! DECL_STATIC_FUNCTION_P (fn))
1026 parms1 = TREE_CHAIN (parms1);
1027 if (! DECL_STATIC_FUNCTION_P (method))
1028 parms2 = TREE_CHAIN (parms2);
1030 if (compparms (parms1, parms2)
1031 && (!DECL_CONV_FN_P (fn)
1032 || same_type_p (TREE_TYPE (fn_type),
1033 TREE_TYPE (method_type))))
1037 if (DECL_CONTEXT (fn) == type)
1038 /* Defer to the local function. */
1040 if (DECL_CONTEXT (fn) == DECL_CONTEXT (method))
1041 error ("repeated using declaration %q+D", using_decl);
1043 error ("using declaration %q+D conflicts with a previous using declaration",
1048 error ("%q+#D cannot be overloaded", method);
1049 error ("with %q+#D", fn);
1052 /* We don't call duplicate_decls here to merge the
1053 declarations because that will confuse things if the
1054 methods have inline definitions. In particular, we
1055 will crash while processing the definitions. */
1060 /* A class should never have more than one destructor. */
1061 if (current_fns && DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (method))
1064 /* Add the new binding. */
1065 overload = build_overload (method, current_fns);
1068 TYPE_HAS_CONVERSION (type) = 1;
1069 else if (slot >= CLASSTYPE_FIRST_CONVERSION_SLOT && !complete_p)
1070 push_class_level_binding (DECL_NAME (method), overload);
1074 /* We only expect to add few methods in the COMPLETE_P case, so
1075 just make room for one more method in that case. */
1076 if (VEC_reserve (tree, gc, method_vec, complete_p ? -1 : 1))
1077 CLASSTYPE_METHOD_VEC (type) = method_vec;
1078 if (slot == VEC_length (tree, method_vec))
1079 VEC_quick_push (tree, method_vec, overload);
1081 VEC_quick_insert (tree, method_vec, slot, overload);
1084 /* Replace the current slot. */
1085 VEC_replace (tree, method_vec, slot, overload);
1089 /* Subroutines of finish_struct. */
1091 /* Change the access of FDECL to ACCESS in T. Return 1 if change was
1092 legit, otherwise return 0. */
1095 alter_access (tree t, tree fdecl, tree access)
1099 if (!DECL_LANG_SPECIFIC (fdecl))
1100 retrofit_lang_decl (fdecl);
1102 gcc_assert (!DECL_DISCRIMINATOR_P (fdecl));
1104 elem = purpose_member (t, DECL_ACCESS (fdecl));
1107 if (TREE_VALUE (elem) != access)
1109 if (TREE_CODE (TREE_TYPE (fdecl)) == FUNCTION_DECL)
1110 error ("conflicting access specifications for method"
1111 " %q+D, ignored", TREE_TYPE (fdecl));
1113 error ("conflicting access specifications for field %qE, ignored",
1118 /* They're changing the access to the same thing they changed
1119 it to before. That's OK. */
1125 perform_or_defer_access_check (TYPE_BINFO (t), fdecl, fdecl);
1126 DECL_ACCESS (fdecl) = tree_cons (t, access, DECL_ACCESS (fdecl));
1132 /* Process the USING_DECL, which is a member of T. */
1135 handle_using_decl (tree using_decl, tree t)
1137 tree decl = USING_DECL_DECLS (using_decl);
1138 tree name = DECL_NAME (using_decl);
1140 = TREE_PRIVATE (using_decl) ? access_private_node
1141 : TREE_PROTECTED (using_decl) ? access_protected_node
1142 : access_public_node;
1143 tree flist = NULL_TREE;
1146 gcc_assert (!processing_template_decl && decl);
1148 old_value = lookup_member (t, name, /*protect=*/0, /*want_type=*/false);
1151 if (is_overloaded_fn (old_value))
1152 old_value = OVL_CURRENT (old_value);
1154 if (DECL_P (old_value) && DECL_CONTEXT (old_value) == t)
1157 old_value = NULL_TREE;
1160 cp_emit_debug_info_for_using (decl, USING_DECL_SCOPE (using_decl));
1162 if (is_overloaded_fn (decl))
1167 else if (is_overloaded_fn (old_value))
1170 /* It's OK to use functions from a base when there are functions with
1171 the same name already present in the current class. */;
1174 error ("%q+D invalid in %q#T", using_decl, t);
1175 error (" because of local method %q+#D with same name",
1176 OVL_CURRENT (old_value));
1180 else if (!DECL_ARTIFICIAL (old_value))
1182 error ("%q+D invalid in %q#T", using_decl, t);
1183 error (" because of local member %q+#D with same name", old_value);
1187 /* Make type T see field decl FDECL with access ACCESS. */
1189 for (; flist; flist = OVL_NEXT (flist))
1191 add_method (t, OVL_CURRENT (flist), using_decl);
1192 alter_access (t, OVL_CURRENT (flist), access);
1195 alter_access (t, decl, access);
1198 /* Run through the base classes of T, updating CANT_HAVE_CONST_CTOR_P,
1199 and NO_CONST_ASN_REF_P. Also set flag bits in T based on
1200 properties of the bases. */
1203 check_bases (tree t,
1204 int* cant_have_const_ctor_p,
1205 int* no_const_asn_ref_p)
1208 int seen_non_virtual_nearly_empty_base_p;
1212 seen_non_virtual_nearly_empty_base_p = 0;
1214 for (binfo = TYPE_BINFO (t), i = 0;
1215 BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
1217 tree basetype = TREE_TYPE (base_binfo);
1219 gcc_assert (COMPLETE_TYPE_P (basetype));
1221 /* Effective C++ rule 14. We only need to check TYPE_POLYMORPHIC_P
1222 here because the case of virtual functions but non-virtual
1223 dtor is handled in finish_struct_1. */
1224 if (!TYPE_POLYMORPHIC_P (basetype))
1225 warning (OPT_Weffc__,
1226 "base class %q#T has a non-virtual destructor", basetype);
1228 /* If the base class doesn't have copy constructors or
1229 assignment operators that take const references, then the
1230 derived class cannot have such a member automatically
1232 if (! TYPE_HAS_CONST_INIT_REF (basetype))
1233 *cant_have_const_ctor_p = 1;
1234 if (TYPE_HAS_ASSIGN_REF (basetype)
1235 && !TYPE_HAS_CONST_ASSIGN_REF (basetype))
1236 *no_const_asn_ref_p = 1;
1238 if (BINFO_VIRTUAL_P (base_binfo))
1239 /* A virtual base does not effect nearly emptiness. */
1241 else if (CLASSTYPE_NEARLY_EMPTY_P (basetype))
1243 if (seen_non_virtual_nearly_empty_base_p)
1244 /* And if there is more than one nearly empty base, then the
1245 derived class is not nearly empty either. */
1246 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
1248 /* Remember we've seen one. */
1249 seen_non_virtual_nearly_empty_base_p = 1;
1251 else if (!is_empty_class (basetype))
1252 /* If the base class is not empty or nearly empty, then this
1253 class cannot be nearly empty. */
1254 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
1256 /* A lot of properties from the bases also apply to the derived
1258 TYPE_NEEDS_CONSTRUCTING (t) |= TYPE_NEEDS_CONSTRUCTING (basetype);
1259 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
1260 |= TYPE_HAS_NONTRIVIAL_DESTRUCTOR (basetype);
1261 TYPE_HAS_COMPLEX_ASSIGN_REF (t)
1262 |= TYPE_HAS_COMPLEX_ASSIGN_REF (basetype);
1263 TYPE_HAS_COMPLEX_INIT_REF (t) |= TYPE_HAS_COMPLEX_INIT_REF (basetype);
1264 TYPE_POLYMORPHIC_P (t) |= TYPE_POLYMORPHIC_P (basetype);
1265 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t)
1266 |= CLASSTYPE_CONTAINS_EMPTY_CLASS_P (basetype);
1270 /* Determine all the primary bases within T. Sets BINFO_PRIMARY_BASE_P for
1271 those that are primaries. Sets BINFO_LOST_PRIMARY_P for those
1272 that have had a nearly-empty virtual primary base stolen by some
1273 other base in the hierarchy. Determines CLASSTYPE_PRIMARY_BASE for
1277 determine_primary_bases (tree t)
1280 tree primary = NULL_TREE;
1281 tree type_binfo = TYPE_BINFO (t);
1284 /* Determine the primary bases of our bases. */
1285 for (base_binfo = TREE_CHAIN (type_binfo); base_binfo;
1286 base_binfo = TREE_CHAIN (base_binfo))
1288 tree primary = CLASSTYPE_PRIMARY_BINFO (BINFO_TYPE (base_binfo));
1290 /* See if we're the non-virtual primary of our inheritance
1292 if (!BINFO_VIRTUAL_P (base_binfo))
1294 tree parent = BINFO_INHERITANCE_CHAIN (base_binfo);
1295 tree parent_primary = CLASSTYPE_PRIMARY_BINFO (BINFO_TYPE (parent));
1298 && SAME_BINFO_TYPE_P (BINFO_TYPE (base_binfo),
1299 BINFO_TYPE (parent_primary)))
1300 /* We are the primary binfo. */
1301 BINFO_PRIMARY_P (base_binfo) = 1;
1303 /* Determine if we have a virtual primary base, and mark it so.
1305 if (primary && BINFO_VIRTUAL_P (primary))
1307 tree this_primary = copied_binfo (primary, base_binfo);
1309 if (BINFO_PRIMARY_P (this_primary))
1310 /* Someone already claimed this base. */
1311 BINFO_LOST_PRIMARY_P (base_binfo) = 1;
1316 BINFO_PRIMARY_P (this_primary) = 1;
1317 BINFO_INHERITANCE_CHAIN (this_primary) = base_binfo;
1319 /* A virtual binfo might have been copied from within
1320 another hierarchy. As we're about to use it as a
1321 primary base, make sure the offsets match. */
1322 delta = size_diffop (convert (ssizetype,
1323 BINFO_OFFSET (base_binfo)),
1325 BINFO_OFFSET (this_primary)));
1327 propagate_binfo_offsets (this_primary, delta);
1332 /* First look for a dynamic direct non-virtual base. */
1333 for (i = 0; BINFO_BASE_ITERATE (type_binfo, i, base_binfo); i++)
1335 tree basetype = BINFO_TYPE (base_binfo);
1337 if (TYPE_CONTAINS_VPTR_P (basetype) && !BINFO_VIRTUAL_P (base_binfo))
1339 primary = base_binfo;
1344 /* A "nearly-empty" virtual base class can be the primary base
1345 class, if no non-virtual polymorphic base can be found. Look for
1346 a nearly-empty virtual dynamic base that is not already a primary
1347 base of something in the hierarchy. If there is no such base,
1348 just pick the first nearly-empty virtual base. */
1350 for (base_binfo = TREE_CHAIN (type_binfo); base_binfo;
1351 base_binfo = TREE_CHAIN (base_binfo))
1352 if (BINFO_VIRTUAL_P (base_binfo)
1353 && CLASSTYPE_NEARLY_EMPTY_P (BINFO_TYPE (base_binfo)))
1355 if (!BINFO_PRIMARY_P (base_binfo))
1357 /* Found one that is not primary. */
1358 primary = base_binfo;
1362 /* Remember the first candidate. */
1363 primary = base_binfo;
1367 /* If we've got a primary base, use it. */
1370 tree basetype = BINFO_TYPE (primary);
1372 CLASSTYPE_PRIMARY_BINFO (t) = primary;
1373 if (BINFO_PRIMARY_P (primary))
1374 /* We are stealing a primary base. */
1375 BINFO_LOST_PRIMARY_P (BINFO_INHERITANCE_CHAIN (primary)) = 1;
1376 BINFO_PRIMARY_P (primary) = 1;
1377 if (BINFO_VIRTUAL_P (primary))
1381 BINFO_INHERITANCE_CHAIN (primary) = type_binfo;
1382 /* A virtual binfo might have been copied from within
1383 another hierarchy. As we're about to use it as a primary
1384 base, make sure the offsets match. */
1385 delta = size_diffop (ssize_int (0),
1386 convert (ssizetype, BINFO_OFFSET (primary)));
1388 propagate_binfo_offsets (primary, delta);
1391 primary = TYPE_BINFO (basetype);
1393 TYPE_VFIELD (t) = TYPE_VFIELD (basetype);
1394 BINFO_VTABLE (type_binfo) = BINFO_VTABLE (primary);
1395 BINFO_VIRTUALS (type_binfo) = BINFO_VIRTUALS (primary);
1399 /* Set memoizing fields and bits of T (and its variants) for later
1403 finish_struct_bits (tree t)
1407 /* Fix up variants (if any). */
1408 for (variants = TYPE_NEXT_VARIANT (t);
1410 variants = TYPE_NEXT_VARIANT (variants))
1412 /* These fields are in the _TYPE part of the node, not in
1413 the TYPE_LANG_SPECIFIC component, so they are not shared. */
1414 TYPE_HAS_CONSTRUCTOR (variants) = TYPE_HAS_CONSTRUCTOR (t);
1415 TYPE_NEEDS_CONSTRUCTING (variants) = TYPE_NEEDS_CONSTRUCTING (t);
1416 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (variants)
1417 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t);
1419 TYPE_POLYMORPHIC_P (variants) = TYPE_POLYMORPHIC_P (t);
1421 TYPE_BINFO (variants) = TYPE_BINFO (t);
1423 /* Copy whatever these are holding today. */
1424 TYPE_VFIELD (variants) = TYPE_VFIELD (t);
1425 TYPE_METHODS (variants) = TYPE_METHODS (t);
1426 TYPE_FIELDS (variants) = TYPE_FIELDS (t);
1429 if (BINFO_N_BASE_BINFOS (TYPE_BINFO (t)) && TYPE_POLYMORPHIC_P (t))
1430 /* For a class w/o baseclasses, 'finish_struct' has set
1431 CLASSTYPE_PURE_VIRTUALS correctly (by definition).
1432 Similarly for a class whose base classes do not have vtables.
1433 When neither of these is true, we might have removed abstract
1434 virtuals (by providing a definition), added some (by declaring
1435 new ones), or redeclared ones from a base class. We need to
1436 recalculate what's really an abstract virtual at this point (by
1437 looking in the vtables). */
1438 get_pure_virtuals (t);
1440 /* If this type has a copy constructor or a destructor, force its
1441 mode to be BLKmode, and force its TREE_ADDRESSABLE bit to be
1442 nonzero. This will cause it to be passed by invisible reference
1443 and prevent it from being returned in a register. */
1444 if (! TYPE_HAS_TRIVIAL_INIT_REF (t) || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t))
1447 DECL_MODE (TYPE_MAIN_DECL (t)) = BLKmode;
1448 for (variants = t; variants; variants = TYPE_NEXT_VARIANT (variants))
1450 TYPE_MODE (variants) = BLKmode;
1451 TREE_ADDRESSABLE (variants) = 1;
1456 /* Issue warnings about T having private constructors, but no friends,
1459 HAS_NONPRIVATE_METHOD is nonzero if T has any non-private methods or
1460 static members. HAS_NONPRIVATE_STATIC_FN is nonzero if T has any
1461 non-private static member functions. */
1464 maybe_warn_about_overly_private_class (tree t)
1466 int has_member_fn = 0;
1467 int has_nonprivate_method = 0;
1470 if (!warn_ctor_dtor_privacy
1471 /* If the class has friends, those entities might create and
1472 access instances, so we should not warn. */
1473 || (CLASSTYPE_FRIEND_CLASSES (t)
1474 || DECL_FRIENDLIST (TYPE_MAIN_DECL (t)))
1475 /* We will have warned when the template was declared; there's
1476 no need to warn on every instantiation. */
1477 || CLASSTYPE_TEMPLATE_INSTANTIATION (t))
1478 /* There's no reason to even consider warning about this
1482 /* We only issue one warning, if more than one applies, because
1483 otherwise, on code like:
1486 // Oops - forgot `public:'
1492 we warn several times about essentially the same problem. */
1494 /* Check to see if all (non-constructor, non-destructor) member
1495 functions are private. (Since there are no friends or
1496 non-private statics, we can't ever call any of the private member
1498 for (fn = TYPE_METHODS (t); fn; fn = TREE_CHAIN (fn))
1499 /* We're not interested in compiler-generated methods; they don't
1500 provide any way to call private members. */
1501 if (!DECL_ARTIFICIAL (fn))
1503 if (!TREE_PRIVATE (fn))
1505 if (DECL_STATIC_FUNCTION_P (fn))
1506 /* A non-private static member function is just like a
1507 friend; it can create and invoke private member
1508 functions, and be accessed without a class
1512 has_nonprivate_method = 1;
1513 /* Keep searching for a static member function. */
1515 else if (!DECL_CONSTRUCTOR_P (fn) && !DECL_DESTRUCTOR_P (fn))
1519 if (!has_nonprivate_method && has_member_fn)
1521 /* There are no non-private methods, and there's at least one
1522 private member function that isn't a constructor or
1523 destructor. (If all the private members are
1524 constructors/destructors we want to use the code below that
1525 issues error messages specifically referring to
1526 constructors/destructors.) */
1528 tree binfo = TYPE_BINFO (t);
1530 for (i = 0; i != BINFO_N_BASE_BINFOS (binfo); i++)
1531 if (BINFO_BASE_ACCESS (binfo, i) != access_private_node)
1533 has_nonprivate_method = 1;
1536 if (!has_nonprivate_method)
1538 warning (OPT_Wctor_dtor_privacy,
1539 "all member functions in class %qT are private", t);
1544 /* Even if some of the member functions are non-private, the class
1545 won't be useful for much if all the constructors or destructors
1546 are private: such an object can never be created or destroyed. */
1547 fn = CLASSTYPE_DESTRUCTORS (t);
1548 if (fn && TREE_PRIVATE (fn))
1550 warning (OPT_Wctor_dtor_privacy,
1551 "%q#T only defines a private destructor and has no friends",
1556 if (TYPE_HAS_CONSTRUCTOR (t)
1557 /* Implicitly generated constructors are always public. */
1558 && (!CLASSTYPE_LAZY_DEFAULT_CTOR (t)
1559 || !CLASSTYPE_LAZY_COPY_CTOR (t)))
1561 int nonprivate_ctor = 0;
1563 /* If a non-template class does not define a copy
1564 constructor, one is defined for it, enabling it to avoid
1565 this warning. For a template class, this does not
1566 happen, and so we would normally get a warning on:
1568 template <class T> class C { private: C(); };
1570 To avoid this asymmetry, we check TYPE_HAS_INIT_REF. All
1571 complete non-template or fully instantiated classes have this
1573 if (!TYPE_HAS_INIT_REF (t))
1574 nonprivate_ctor = 1;
1576 for (fn = CLASSTYPE_CONSTRUCTORS (t); fn; fn = OVL_NEXT (fn))
1578 tree ctor = OVL_CURRENT (fn);
1579 /* Ideally, we wouldn't count copy constructors (or, in
1580 fact, any constructor that takes an argument of the
1581 class type as a parameter) because such things cannot
1582 be used to construct an instance of the class unless
1583 you already have one. But, for now at least, we're
1585 if (! TREE_PRIVATE (ctor))
1587 nonprivate_ctor = 1;
1592 if (nonprivate_ctor == 0)
1594 warning (OPT_Wctor_dtor_privacy,
1595 "%q#T only defines private constructors and has no friends",
1603 gt_pointer_operator new_value;
1607 /* Comparison function to compare two TYPE_METHOD_VEC entries by name. */
1610 method_name_cmp (const void* m1_p, const void* m2_p)
1612 const tree *const m1 = (const tree *) m1_p;
1613 const tree *const m2 = (const tree *) m2_p;
1615 if (*m1 == NULL_TREE && *m2 == NULL_TREE)
1617 if (*m1 == NULL_TREE)
1619 if (*m2 == NULL_TREE)
1621 if (DECL_NAME (OVL_CURRENT (*m1)) < DECL_NAME (OVL_CURRENT (*m2)))
1626 /* This routine compares two fields like method_name_cmp but using the
1627 pointer operator in resort_field_decl_data. */
1630 resort_method_name_cmp (const void* m1_p, const void* m2_p)
1632 const tree *const m1 = (const tree *) m1_p;
1633 const tree *const m2 = (const tree *) m2_p;
1634 if (*m1 == NULL_TREE && *m2 == NULL_TREE)
1636 if (*m1 == NULL_TREE)
1638 if (*m2 == NULL_TREE)
1641 tree d1 = DECL_NAME (OVL_CURRENT (*m1));
1642 tree d2 = DECL_NAME (OVL_CURRENT (*m2));
1643 resort_data.new_value (&d1, resort_data.cookie);
1644 resort_data.new_value (&d2, resort_data.cookie);
1651 /* Resort TYPE_METHOD_VEC because pointers have been reordered. */
1654 resort_type_method_vec (void* obj,
1655 void* orig_obj ATTRIBUTE_UNUSED ,
1656 gt_pointer_operator new_value,
1659 VEC(tree,gc) *method_vec = (VEC(tree,gc) *) obj;
1660 int len = VEC_length (tree, method_vec);
1664 /* The type conversion ops have to live at the front of the vec, so we
1666 for (slot = CLASSTYPE_FIRST_CONVERSION_SLOT;
1667 VEC_iterate (tree, method_vec, slot, fn);
1669 if (!DECL_CONV_FN_P (OVL_CURRENT (fn)))
1674 resort_data.new_value = new_value;
1675 resort_data.cookie = cookie;
1676 qsort (VEC_address (tree, method_vec) + slot, len - slot, sizeof (tree),
1677 resort_method_name_cmp);
1681 /* Warn about duplicate methods in fn_fields.
1683 Sort methods that are not special (i.e., constructors, destructors,
1684 and type conversion operators) so that we can find them faster in
1688 finish_struct_methods (tree t)
1691 VEC(tree,gc) *method_vec;
1694 method_vec = CLASSTYPE_METHOD_VEC (t);
1698 len = VEC_length (tree, method_vec);
1700 /* Clear DECL_IN_AGGR_P for all functions. */
1701 for (fn_fields = TYPE_METHODS (t); fn_fields;
1702 fn_fields = TREE_CHAIN (fn_fields))
1703 DECL_IN_AGGR_P (fn_fields) = 0;
1705 /* Issue warnings about private constructors and such. If there are
1706 no methods, then some public defaults are generated. */
1707 maybe_warn_about_overly_private_class (t);
1709 /* The type conversion ops have to live at the front of the vec, so we
1711 for (slot = CLASSTYPE_FIRST_CONVERSION_SLOT;
1712 VEC_iterate (tree, method_vec, slot, fn_fields);
1714 if (!DECL_CONV_FN_P (OVL_CURRENT (fn_fields)))
1717 qsort (VEC_address (tree, method_vec) + slot,
1718 len-slot, sizeof (tree), method_name_cmp);
1721 /* Make BINFO's vtable have N entries, including RTTI entries,
1722 vbase and vcall offsets, etc. Set its type and call the backend
1726 layout_vtable_decl (tree binfo, int n)
1731 atype = build_cplus_array_type (vtable_entry_type,
1732 build_index_type (size_int (n - 1)));
1733 layout_type (atype);
1735 /* We may have to grow the vtable. */
1736 vtable = get_vtbl_decl_for_binfo (binfo);
1737 if (!same_type_p (TREE_TYPE (vtable), atype))
1739 TREE_TYPE (vtable) = atype;
1740 DECL_SIZE (vtable) = DECL_SIZE_UNIT (vtable) = NULL_TREE;
1741 layout_decl (vtable, 0);
1745 /* True iff FNDECL and BASE_FNDECL (both non-static member functions)
1746 have the same signature. */
1749 same_signature_p (tree fndecl, tree base_fndecl)
1751 /* One destructor overrides another if they are the same kind of
1753 if (DECL_DESTRUCTOR_P (base_fndecl) && DECL_DESTRUCTOR_P (fndecl)
1754 && special_function_p (base_fndecl) == special_function_p (fndecl))
1756 /* But a non-destructor never overrides a destructor, nor vice
1757 versa, nor do different kinds of destructors override
1758 one-another. For example, a complete object destructor does not
1759 override a deleting destructor. */
1760 if (DECL_DESTRUCTOR_P (base_fndecl) || DECL_DESTRUCTOR_P (fndecl))
1763 if (DECL_NAME (fndecl) == DECL_NAME (base_fndecl)
1764 || (DECL_CONV_FN_P (fndecl)
1765 && DECL_CONV_FN_P (base_fndecl)
1766 && same_type_p (DECL_CONV_FN_TYPE (fndecl),
1767 DECL_CONV_FN_TYPE (base_fndecl))))
1769 tree types, base_types;
1770 types = TYPE_ARG_TYPES (TREE_TYPE (fndecl));
1771 base_types = TYPE_ARG_TYPES (TREE_TYPE (base_fndecl));
1772 if ((TYPE_QUALS (TREE_TYPE (TREE_VALUE (base_types)))
1773 == TYPE_QUALS (TREE_TYPE (TREE_VALUE (types))))
1774 && compparms (TREE_CHAIN (base_types), TREE_CHAIN (types)))
1780 /* Returns TRUE if DERIVED is a binfo containing the binfo BASE as a
1784 base_derived_from (tree derived, tree base)
1788 for (probe = base; probe; probe = BINFO_INHERITANCE_CHAIN (probe))
1790 if (probe == derived)
1792 else if (BINFO_VIRTUAL_P (probe))
1793 /* If we meet a virtual base, we can't follow the inheritance
1794 any more. See if the complete type of DERIVED contains
1795 such a virtual base. */
1796 return (binfo_for_vbase (BINFO_TYPE (probe), BINFO_TYPE (derived))
1802 typedef struct find_final_overrider_data_s {
1803 /* The function for which we are trying to find a final overrider. */
1805 /* The base class in which the function was declared. */
1806 tree declaring_base;
1807 /* The candidate overriders. */
1809 /* Path to most derived. */
1810 VEC(tree,heap) *path;
1811 } find_final_overrider_data;
1813 /* Add the overrider along the current path to FFOD->CANDIDATES.
1814 Returns true if an overrider was found; false otherwise. */
1817 dfs_find_final_overrider_1 (tree binfo,
1818 find_final_overrider_data *ffod,
1823 /* If BINFO is not the most derived type, try a more derived class.
1824 A definition there will overrider a definition here. */
1828 if (dfs_find_final_overrider_1
1829 (VEC_index (tree, ffod->path, depth), ffod, depth))
1833 method = look_for_overrides_here (BINFO_TYPE (binfo), ffod->fn);
1836 tree *candidate = &ffod->candidates;
1838 /* Remove any candidates overridden by this new function. */
1841 /* If *CANDIDATE overrides METHOD, then METHOD
1842 cannot override anything else on the list. */
1843 if (base_derived_from (TREE_VALUE (*candidate), binfo))
1845 /* If METHOD overrides *CANDIDATE, remove *CANDIDATE. */
1846 if (base_derived_from (binfo, TREE_VALUE (*candidate)))
1847 *candidate = TREE_CHAIN (*candidate);
1849 candidate = &TREE_CHAIN (*candidate);
1852 /* Add the new function. */
1853 ffod->candidates = tree_cons (method, binfo, ffod->candidates);
1860 /* Called from find_final_overrider via dfs_walk. */
1863 dfs_find_final_overrider_pre (tree binfo, void *data)
1865 find_final_overrider_data *ffod = (find_final_overrider_data *) data;
1867 if (binfo == ffod->declaring_base)
1868 dfs_find_final_overrider_1 (binfo, ffod, VEC_length (tree, ffod->path));
1869 VEC_safe_push (tree, heap, ffod->path, binfo);
1875 dfs_find_final_overrider_post (tree binfo ATTRIBUTE_UNUSED, void *data)
1877 find_final_overrider_data *ffod = (find_final_overrider_data *) data;
1878 VEC_pop (tree, ffod->path);
1883 /* Returns a TREE_LIST whose TREE_PURPOSE is the final overrider for
1884 FN and whose TREE_VALUE is the binfo for the base where the
1885 overriding occurs. BINFO (in the hierarchy dominated by the binfo
1886 DERIVED) is the base object in which FN is declared. */
1889 find_final_overrider (tree derived, tree binfo, tree fn)
1891 find_final_overrider_data ffod;
1893 /* Getting this right is a little tricky. This is valid:
1895 struct S { virtual void f (); };
1896 struct T { virtual void f (); };
1897 struct U : public S, public T { };
1899 even though calling `f' in `U' is ambiguous. But,
1901 struct R { virtual void f(); };
1902 struct S : virtual public R { virtual void f (); };
1903 struct T : virtual public R { virtual void f (); };
1904 struct U : public S, public T { };
1906 is not -- there's no way to decide whether to put `S::f' or
1907 `T::f' in the vtable for `R'.
1909 The solution is to look at all paths to BINFO. If we find
1910 different overriders along any two, then there is a problem. */
1911 if (DECL_THUNK_P (fn))
1912 fn = THUNK_TARGET (fn);
1914 /* Determine the depth of the hierarchy. */
1916 ffod.declaring_base = binfo;
1917 ffod.candidates = NULL_TREE;
1918 ffod.path = VEC_alloc (tree, heap, 30);
1920 dfs_walk_all (derived, dfs_find_final_overrider_pre,
1921 dfs_find_final_overrider_post, &ffod);
1923 VEC_free (tree, heap, ffod.path);
1925 /* If there was no winner, issue an error message. */
1926 if (!ffod.candidates || TREE_CHAIN (ffod.candidates))
1927 return error_mark_node;
1929 return ffod.candidates;
1932 /* Return the index of the vcall offset for FN when TYPE is used as a
1936 get_vcall_index (tree fn, tree type)
1938 VEC(tree_pair_s,gc) *indices = CLASSTYPE_VCALL_INDICES (type);
1942 for (ix = 0; VEC_iterate (tree_pair_s, indices, ix, p); ix++)
1943 if ((DECL_DESTRUCTOR_P (fn) && DECL_DESTRUCTOR_P (p->purpose))
1944 || same_signature_p (fn, p->purpose))
1947 /* There should always be an appropriate index. */
1951 /* Update an entry in the vtable for BINFO, which is in the hierarchy
1952 dominated by T. FN has been overridden in BINFO; VIRTUALS points to the
1953 corresponding position in the BINFO_VIRTUALS list. */
1956 update_vtable_entry_for_fn (tree t, tree binfo, tree fn, tree* virtuals,
1964 tree overrider_fn, overrider_target;
1965 tree target_fn = DECL_THUNK_P (fn) ? THUNK_TARGET (fn) : fn;
1966 tree over_return, base_return;
1969 /* Find the nearest primary base (possibly binfo itself) which defines
1970 this function; this is the class the caller will convert to when
1971 calling FN through BINFO. */
1972 for (b = binfo; ; b = get_primary_binfo (b))
1975 if (look_for_overrides_here (BINFO_TYPE (b), target_fn))
1978 /* The nearest definition is from a lost primary. */
1979 if (BINFO_LOST_PRIMARY_P (b))
1984 /* Find the final overrider. */
1985 overrider = find_final_overrider (TYPE_BINFO (t), b, target_fn);
1986 if (overrider == error_mark_node)
1988 error ("no unique final overrider for %qD in %qT", target_fn, t);
1991 overrider_target = overrider_fn = TREE_PURPOSE (overrider);
1993 /* Check for adjusting covariant return types. */
1994 over_return = TREE_TYPE (TREE_TYPE (overrider_target));
1995 base_return = TREE_TYPE (TREE_TYPE (target_fn));
1997 if (POINTER_TYPE_P (over_return)
1998 && TREE_CODE (over_return) == TREE_CODE (base_return)
1999 && CLASS_TYPE_P (TREE_TYPE (over_return))
2000 && CLASS_TYPE_P (TREE_TYPE (base_return))
2001 /* If the overrider is invalid, don't even try. */
2002 && !DECL_INVALID_OVERRIDER_P (overrider_target))
2004 /* If FN is a covariant thunk, we must figure out the adjustment
2005 to the final base FN was converting to. As OVERRIDER_TARGET might
2006 also be converting to the return type of FN, we have to
2007 combine the two conversions here. */
2008 tree fixed_offset, virtual_offset;
2010 over_return = TREE_TYPE (over_return);
2011 base_return = TREE_TYPE (base_return);
2013 if (DECL_THUNK_P (fn))
2015 gcc_assert (DECL_RESULT_THUNK_P (fn));
2016 fixed_offset = ssize_int (THUNK_FIXED_OFFSET (fn));
2017 virtual_offset = THUNK_VIRTUAL_OFFSET (fn);
2020 fixed_offset = virtual_offset = NULL_TREE;
2023 /* Find the equivalent binfo within the return type of the
2024 overriding function. We will want the vbase offset from
2026 virtual_offset = binfo_for_vbase (BINFO_TYPE (virtual_offset),
2028 else if (!same_type_ignoring_top_level_qualifiers_p
2029 (over_return, base_return))
2031 /* There was no existing virtual thunk (which takes
2032 precedence). So find the binfo of the base function's
2033 return type within the overriding function's return type.
2034 We cannot call lookup base here, because we're inside a
2035 dfs_walk, and will therefore clobber the BINFO_MARKED
2036 flags. Fortunately we know the covariancy is valid (it
2037 has already been checked), so we can just iterate along
2038 the binfos, which have been chained in inheritance graph
2039 order. Of course it is lame that we have to repeat the
2040 search here anyway -- we should really be caching pieces
2041 of the vtable and avoiding this repeated work. */
2042 tree thunk_binfo, base_binfo;
2044 /* Find the base binfo within the overriding function's
2045 return type. We will always find a thunk_binfo, except
2046 when the covariancy is invalid (which we will have
2047 already diagnosed). */
2048 for (base_binfo = TYPE_BINFO (base_return),
2049 thunk_binfo = TYPE_BINFO (over_return);
2051 thunk_binfo = TREE_CHAIN (thunk_binfo))
2052 if (SAME_BINFO_TYPE_P (BINFO_TYPE (thunk_binfo),
2053 BINFO_TYPE (base_binfo)))
2056 /* See if virtual inheritance is involved. */
2057 for (virtual_offset = thunk_binfo;
2059 virtual_offset = BINFO_INHERITANCE_CHAIN (virtual_offset))
2060 if (BINFO_VIRTUAL_P (virtual_offset))
2064 || (thunk_binfo && !BINFO_OFFSET_ZEROP (thunk_binfo)))
2066 tree offset = convert (ssizetype, BINFO_OFFSET (thunk_binfo));
2070 /* We convert via virtual base. Adjust the fixed
2071 offset to be from there. */
2072 offset = size_diffop
2074 (ssizetype, BINFO_OFFSET (virtual_offset)));
2077 /* There was an existing fixed offset, this must be
2078 from the base just converted to, and the base the
2079 FN was thunking to. */
2080 fixed_offset = size_binop (PLUS_EXPR, fixed_offset, offset);
2082 fixed_offset = offset;
2086 if (fixed_offset || virtual_offset)
2087 /* Replace the overriding function with a covariant thunk. We
2088 will emit the overriding function in its own slot as
2090 overrider_fn = make_thunk (overrider_target, /*this_adjusting=*/0,
2091 fixed_offset, virtual_offset);
2094 gcc_assert (!DECL_THUNK_P (fn));
2096 /* Assume that we will produce a thunk that convert all the way to
2097 the final overrider, and not to an intermediate virtual base. */
2098 virtual_base = NULL_TREE;
2100 /* See if we can convert to an intermediate virtual base first, and then
2101 use the vcall offset located there to finish the conversion. */
2102 for (; b; b = BINFO_INHERITANCE_CHAIN (b))
2104 /* If we find the final overrider, then we can stop
2106 if (SAME_BINFO_TYPE_P (BINFO_TYPE (b),
2107 BINFO_TYPE (TREE_VALUE (overrider))))
2110 /* If we find a virtual base, and we haven't yet found the
2111 overrider, then there is a virtual base between the
2112 declaring base (first_defn) and the final overrider. */
2113 if (BINFO_VIRTUAL_P (b))
2120 if (overrider_fn != overrider_target && !virtual_base)
2122 /* The ABI specifies that a covariant thunk includes a mangling
2123 for a this pointer adjustment. This-adjusting thunks that
2124 override a function from a virtual base have a vcall
2125 adjustment. When the virtual base in question is a primary
2126 virtual base, we know the adjustments are zero, (and in the
2127 non-covariant case, we would not use the thunk).
2128 Unfortunately we didn't notice this could happen, when
2129 designing the ABI and so never mandated that such a covariant
2130 thunk should be emitted. Because we must use the ABI mandated
2131 name, we must continue searching from the binfo where we
2132 found the most recent definition of the function, towards the
2133 primary binfo which first introduced the function into the
2134 vtable. If that enters a virtual base, we must use a vcall
2135 this-adjusting thunk. Bleah! */
2136 tree probe = first_defn;
2138 while ((probe = get_primary_binfo (probe))
2139 && (unsigned) list_length (BINFO_VIRTUALS (probe)) > ix)
2140 if (BINFO_VIRTUAL_P (probe))
2141 virtual_base = probe;
2144 /* Even if we find a virtual base, the correct delta is
2145 between the overrider and the binfo we're building a vtable
2147 goto virtual_covariant;
2150 /* Compute the constant adjustment to the `this' pointer. The
2151 `this' pointer, when this function is called, will point at BINFO
2152 (or one of its primary bases, which are at the same offset). */
2154 /* The `this' pointer needs to be adjusted from the declaration to
2155 the nearest virtual base. */
2156 delta = size_diffop (convert (ssizetype, BINFO_OFFSET (virtual_base)),
2157 convert (ssizetype, BINFO_OFFSET (first_defn)));
2159 /* If the nearest definition is in a lost primary, we don't need an
2160 entry in our vtable. Except possibly in a constructor vtable,
2161 if we happen to get our primary back. In that case, the offset
2162 will be zero, as it will be a primary base. */
2163 delta = size_zero_node;
2165 /* The `this' pointer needs to be adjusted from pointing to
2166 BINFO to pointing at the base where the final overrider
2169 delta = size_diffop (convert (ssizetype,
2170 BINFO_OFFSET (TREE_VALUE (overrider))),
2171 convert (ssizetype, BINFO_OFFSET (binfo)));
2173 modify_vtable_entry (t, binfo, overrider_fn, delta, virtuals);
2176 BV_VCALL_INDEX (*virtuals)
2177 = get_vcall_index (overrider_target, BINFO_TYPE (virtual_base));
2179 BV_VCALL_INDEX (*virtuals) = NULL_TREE;
2182 /* Called from modify_all_vtables via dfs_walk. */
2185 dfs_modify_vtables (tree binfo, void* data)
2187 tree t = (tree) data;
2192 if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
2193 /* A base without a vtable needs no modification, and its bases
2194 are uninteresting. */
2195 return dfs_skip_bases;
2197 if (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), t)
2198 && !CLASSTYPE_HAS_PRIMARY_BASE_P (t))
2199 /* Don't do the primary vtable, if it's new. */
2202 if (BINFO_PRIMARY_P (binfo) && !BINFO_VIRTUAL_P (binfo))
2203 /* There's no need to modify the vtable for a non-virtual primary
2204 base; we're not going to use that vtable anyhow. We do still
2205 need to do this for virtual primary bases, as they could become
2206 non-primary in a construction vtable. */
2209 make_new_vtable (t, binfo);
2211 /* Now, go through each of the virtual functions in the virtual
2212 function table for BINFO. Find the final overrider, and update
2213 the BINFO_VIRTUALS list appropriately. */
2214 for (ix = 0, virtuals = BINFO_VIRTUALS (binfo),
2215 old_virtuals = BINFO_VIRTUALS (TYPE_BINFO (BINFO_TYPE (binfo)));
2217 ix++, virtuals = TREE_CHAIN (virtuals),
2218 old_virtuals = TREE_CHAIN (old_virtuals))
2219 update_vtable_entry_for_fn (t,
2221 BV_FN (old_virtuals),
2227 /* Update all of the primary and secondary vtables for T. Create new
2228 vtables as required, and initialize their RTTI information. Each
2229 of the functions in VIRTUALS is declared in T and may override a
2230 virtual function from a base class; find and modify the appropriate
2231 entries to point to the overriding functions. Returns a list, in
2232 declaration order, of the virtual functions that are declared in T,
2233 but do not appear in the primary base class vtable, and which
2234 should therefore be appended to the end of the vtable for T. */
2237 modify_all_vtables (tree t, tree virtuals)
2239 tree binfo = TYPE_BINFO (t);
2242 /* Update all of the vtables. */
2243 dfs_walk_once (binfo, dfs_modify_vtables, NULL, t);
2245 /* Add virtual functions not already in our primary vtable. These
2246 will be both those introduced by this class, and those overridden
2247 from secondary bases. It does not include virtuals merely
2248 inherited from secondary bases. */
2249 for (fnsp = &virtuals; *fnsp; )
2251 tree fn = TREE_VALUE (*fnsp);
2253 if (!value_member (fn, BINFO_VIRTUALS (binfo))
2254 || DECL_VINDEX (fn) == error_mark_node)
2256 /* We don't need to adjust the `this' pointer when
2257 calling this function. */
2258 BV_DELTA (*fnsp) = integer_zero_node;
2259 BV_VCALL_INDEX (*fnsp) = NULL_TREE;
2261 /* This is a function not already in our vtable. Keep it. */
2262 fnsp = &TREE_CHAIN (*fnsp);
2265 /* We've already got an entry for this function. Skip it. */
2266 *fnsp = TREE_CHAIN (*fnsp);
2272 /* Get the base virtual function declarations in T that have the
2276 get_basefndecls (tree name, tree t)
2279 tree base_fndecls = NULL_TREE;
2280 int n_baseclasses = BINFO_N_BASE_BINFOS (TYPE_BINFO (t));
2283 /* Find virtual functions in T with the indicated NAME. */
2284 i = lookup_fnfields_1 (t, name);
2286 for (methods = VEC_index (tree, CLASSTYPE_METHOD_VEC (t), i);
2288 methods = OVL_NEXT (methods))
2290 tree method = OVL_CURRENT (methods);
2292 if (TREE_CODE (method) == FUNCTION_DECL
2293 && DECL_VINDEX (method))
2294 base_fndecls = tree_cons (NULL_TREE, method, base_fndecls);
2298 return base_fndecls;
2300 for (i = 0; i < n_baseclasses; i++)
2302 tree basetype = BINFO_TYPE (BINFO_BASE_BINFO (TYPE_BINFO (t), i));
2303 base_fndecls = chainon (get_basefndecls (name, basetype),
2307 return base_fndecls;
2310 /* If this declaration supersedes the declaration of
2311 a method declared virtual in the base class, then
2312 mark this field as being virtual as well. */
2315 check_for_override (tree decl, tree ctype)
2317 if (TREE_CODE (decl) == TEMPLATE_DECL)
2318 /* In [temp.mem] we have:
2320 A specialization of a member function template does not
2321 override a virtual function from a base class. */
2323 if ((DECL_DESTRUCTOR_P (decl)
2324 || IDENTIFIER_VIRTUAL_P (DECL_NAME (decl))
2325 || DECL_CONV_FN_P (decl))
2326 && look_for_overrides (ctype, decl)
2327 && !DECL_STATIC_FUNCTION_P (decl))
2328 /* Set DECL_VINDEX to a value that is neither an INTEGER_CST nor
2329 the error_mark_node so that we know it is an overriding
2331 DECL_VINDEX (decl) = decl;
2333 if (DECL_VIRTUAL_P (decl))
2335 if (!DECL_VINDEX (decl))
2336 DECL_VINDEX (decl) = error_mark_node;
2337 IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)) = 1;
2338 if (DECL_DLLIMPORT_P (decl))
2340 /* When we handled the dllimport attribute we may not have known
2341 that this function is virtual We can't use dllimport
2342 semantics for a virtual method because we need to initialize
2343 the vtable entry with a constant address. */
2344 DECL_DLLIMPORT_P (decl) = 0;
2345 DECL_ATTRIBUTES (decl)
2346 = remove_attribute ("dllimport", DECL_ATTRIBUTES (decl));
2351 /* Warn about hidden virtual functions that are not overridden in t.
2352 We know that constructors and destructors don't apply. */
2355 warn_hidden (tree t)
2357 VEC(tree,gc) *method_vec = CLASSTYPE_METHOD_VEC (t);
2361 /* We go through each separately named virtual function. */
2362 for (i = CLASSTYPE_FIRST_CONVERSION_SLOT;
2363 VEC_iterate (tree, method_vec, i, fns);
2374 /* All functions in this slot in the CLASSTYPE_METHOD_VEC will
2375 have the same name. Figure out what name that is. */
2376 name = DECL_NAME (OVL_CURRENT (fns));
2377 /* There are no possibly hidden functions yet. */
2378 base_fndecls = NULL_TREE;
2379 /* Iterate through all of the base classes looking for possibly
2380 hidden functions. */
2381 for (binfo = TYPE_BINFO (t), j = 0;
2382 BINFO_BASE_ITERATE (binfo, j, base_binfo); j++)
2384 tree basetype = BINFO_TYPE (base_binfo);
2385 base_fndecls = chainon (get_basefndecls (name, basetype),
2389 /* If there are no functions to hide, continue. */
2393 /* Remove any overridden functions. */
2394 for (fn = fns; fn; fn = OVL_NEXT (fn))
2396 fndecl = OVL_CURRENT (fn);
2397 if (DECL_VINDEX (fndecl))
2399 tree *prev = &base_fndecls;
2402 /* If the method from the base class has the same
2403 signature as the method from the derived class, it
2404 has been overridden. */
2405 if (same_signature_p (fndecl, TREE_VALUE (*prev)))
2406 *prev = TREE_CHAIN (*prev);
2408 prev = &TREE_CHAIN (*prev);
2412 /* Now give a warning for all base functions without overriders,
2413 as they are hidden. */
2414 while (base_fndecls)
2416 /* Here we know it is a hider, and no overrider exists. */
2417 warning (0, "%q+D was hidden", TREE_VALUE (base_fndecls));
2418 warning (0, " by %q+D", fns);
2419 base_fndecls = TREE_CHAIN (base_fndecls);
2424 /* Check for things that are invalid. There are probably plenty of other
2425 things we should check for also. */
2428 finish_struct_anon (tree t)
2432 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
2434 if (TREE_STATIC (field))
2436 if (TREE_CODE (field) != FIELD_DECL)
2439 if (DECL_NAME (field) == NULL_TREE
2440 && ANON_AGGR_TYPE_P (TREE_TYPE (field)))
2442 tree elt = TYPE_FIELDS (TREE_TYPE (field));
2443 for (; elt; elt = TREE_CHAIN (elt))
2445 /* We're generally only interested in entities the user
2446 declared, but we also find nested classes by noticing
2447 the TYPE_DECL that we create implicitly. You're
2448 allowed to put one anonymous union inside another,
2449 though, so we explicitly tolerate that. We use
2450 TYPE_ANONYMOUS_P rather than ANON_AGGR_TYPE_P so that
2451 we also allow unnamed types used for defining fields. */
2452 if (DECL_ARTIFICIAL (elt)
2453 && (!DECL_IMPLICIT_TYPEDEF_P (elt)
2454 || TYPE_ANONYMOUS_P (TREE_TYPE (elt))))
2457 if (TREE_CODE (elt) != FIELD_DECL)
2459 pedwarn ("%q+#D invalid; an anonymous union can "
2460 "only have non-static data members", elt);
2464 if (TREE_PRIVATE (elt))
2465 pedwarn ("private member %q+#D in anonymous union", elt);
2466 else if (TREE_PROTECTED (elt))
2467 pedwarn ("protected member %q+#D in anonymous union", elt);
2469 TREE_PRIVATE (elt) = TREE_PRIVATE (field);
2470 TREE_PROTECTED (elt) = TREE_PROTECTED (field);
2476 /* Add T to CLASSTYPE_DECL_LIST of current_class_type which
2477 will be used later during class template instantiation.
2478 When FRIEND_P is zero, T can be a static member data (VAR_DECL),
2479 a non-static member data (FIELD_DECL), a member function
2480 (FUNCTION_DECL), a nested type (RECORD_TYPE, ENUM_TYPE),
2481 a typedef (TYPE_DECL) or a member class template (TEMPLATE_DECL)
2482 When FRIEND_P is nonzero, T is either a friend class
2483 (RECORD_TYPE, TEMPLATE_DECL) or a friend function
2484 (FUNCTION_DECL, TEMPLATE_DECL). */
2487 maybe_add_class_template_decl_list (tree type, tree t, int friend_p)
2489 /* Save some memory by not creating TREE_LIST if TYPE is not template. */
2490 if (CLASSTYPE_TEMPLATE_INFO (type))
2491 CLASSTYPE_DECL_LIST (type)
2492 = tree_cons (friend_p ? NULL_TREE : type,
2493 t, CLASSTYPE_DECL_LIST (type));
2496 /* Create default constructors, assignment operators, and so forth for
2497 the type indicated by T, if they are needed. CANT_HAVE_CONST_CTOR,
2498 and CANT_HAVE_CONST_ASSIGNMENT are nonzero if, for whatever reason,
2499 the class cannot have a default constructor, copy constructor
2500 taking a const reference argument, or an assignment operator taking
2501 a const reference, respectively. */
2504 add_implicitly_declared_members (tree t,
2505 int cant_have_const_cctor,
2506 int cant_have_const_assignment)
2509 if (!CLASSTYPE_DESTRUCTORS (t))
2511 /* In general, we create destructors lazily. */
2512 CLASSTYPE_LAZY_DESTRUCTOR (t) = 1;
2513 /* However, if the implicit destructor is non-trivial
2514 destructor, we sometimes have to create it at this point. */
2515 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t))
2519 if (TYPE_FOR_JAVA (t))
2520 /* If this a Java class, any non-trivial destructor is
2521 invalid, even if compiler-generated. Therefore, if the
2522 destructor is non-trivial we create it now. */
2530 /* If the implicit destructor will be virtual, then we must
2531 generate it now because (unfortunately) we do not
2532 generate virtual tables lazily. */
2533 binfo = TYPE_BINFO (t);
2534 for (ix = 0; BINFO_BASE_ITERATE (binfo, ix, base_binfo); ix++)
2539 base_type = BINFO_TYPE (base_binfo);
2540 dtor = CLASSTYPE_DESTRUCTORS (base_type);
2541 if (dtor && DECL_VIRTUAL_P (dtor))
2549 /* If we can't get away with being lazy, generate the destructor
2552 lazily_declare_fn (sfk_destructor, t);
2556 /* Default constructor. */
2557 if (! TYPE_HAS_CONSTRUCTOR (t))
2559 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 1;
2560 CLASSTYPE_LAZY_DEFAULT_CTOR (t) = 1;
2563 /* Copy constructor. */
2564 if (! TYPE_HAS_INIT_REF (t) && ! TYPE_FOR_JAVA (t))
2566 TYPE_HAS_INIT_REF (t) = 1;
2567 TYPE_HAS_CONST_INIT_REF (t) = !cant_have_const_cctor;
2568 CLASSTYPE_LAZY_COPY_CTOR (t) = 1;
2569 TYPE_HAS_CONSTRUCTOR (t) = 1;
2572 /* If there is no assignment operator, one will be created if and
2573 when it is needed. For now, just record whether or not the type
2574 of the parameter to the assignment operator will be a const or
2575 non-const reference. */
2576 if (!TYPE_HAS_ASSIGN_REF (t) && !TYPE_FOR_JAVA (t))
2578 TYPE_HAS_ASSIGN_REF (t) = 1;
2579 TYPE_HAS_CONST_ASSIGN_REF (t) = !cant_have_const_assignment;
2580 CLASSTYPE_LAZY_ASSIGNMENT_OP (t) = 1;
2584 /* Subroutine of finish_struct_1. Recursively count the number of fields
2585 in TYPE, including anonymous union members. */
2588 count_fields (tree fields)
2592 for (x = fields; x; x = TREE_CHAIN (x))
2594 if (TREE_CODE (x) == FIELD_DECL && ANON_AGGR_TYPE_P (TREE_TYPE (x)))
2595 n_fields += count_fields (TYPE_FIELDS (TREE_TYPE (x)));
2602 /* Subroutine of finish_struct_1. Recursively add all the fields in the
2603 TREE_LIST FIELDS to the SORTED_FIELDS_TYPE elts, starting at offset IDX. */
2606 add_fields_to_record_type (tree fields, struct sorted_fields_type *field_vec, int idx)
2609 for (x = fields; x; x = TREE_CHAIN (x))
2611 if (TREE_CODE (x) == FIELD_DECL && ANON_AGGR_TYPE_P (TREE_TYPE (x)))
2612 idx = add_fields_to_record_type (TYPE_FIELDS (TREE_TYPE (x)), field_vec, idx);
2614 field_vec->elts[idx++] = x;
2619 /* FIELD is a bit-field. We are finishing the processing for its
2620 enclosing type. Issue any appropriate messages and set appropriate
2624 check_bitfield_decl (tree field)
2626 tree type = TREE_TYPE (field);
2629 /* Extract the declared width of the bitfield, which has been
2630 temporarily stashed in DECL_INITIAL. */
2631 w = DECL_INITIAL (field);
2632 gcc_assert (w != NULL_TREE);
2633 /* Remove the bit-field width indicator so that the rest of the
2634 compiler does not treat that value as an initializer. */
2635 DECL_INITIAL (field) = NULL_TREE;
2637 /* Detect invalid bit-field type. */
2638 if (!INTEGRAL_TYPE_P (type))
2640 error ("bit-field %q+#D with non-integral type", field);
2641 TREE_TYPE (field) = error_mark_node;
2642 w = error_mark_node;
2646 /* Avoid the non_lvalue wrapper added by fold for PLUS_EXPRs. */
2649 /* detect invalid field size. */
2650 w = integral_constant_value (w);
2652 if (TREE_CODE (w) != INTEGER_CST)
2654 error ("bit-field %q+D width not an integer constant", field);
2655 w = error_mark_node;
2657 else if (tree_int_cst_sgn (w) < 0)
2659 error ("negative width in bit-field %q+D", field);
2660 w = error_mark_node;
2662 else if (integer_zerop (w) && DECL_NAME (field) != 0)
2664 error ("zero width for bit-field %q+D", field);
2665 w = error_mark_node;
2667 else if (compare_tree_int (w, TYPE_PRECISION (type)) > 0
2668 && TREE_CODE (type) != ENUMERAL_TYPE
2669 && TREE_CODE (type) != BOOLEAN_TYPE)
2670 warning (0, "width of %q+D exceeds its type", field);
2671 else if (TREE_CODE (type) == ENUMERAL_TYPE
2672 && (0 > compare_tree_int (w,
2673 min_precision (TYPE_MIN_VALUE (type),
2674 TYPE_UNSIGNED (type)))
2675 || 0 > compare_tree_int (w,
2677 (TYPE_MAX_VALUE (type),
2678 TYPE_UNSIGNED (type)))))
2679 warning (0, "%q+D is too small to hold all values of %q#T", field, type);
2682 if (w != error_mark_node)
2684 DECL_SIZE (field) = convert (bitsizetype, w);
2685 DECL_BIT_FIELD (field) = 1;
2689 /* Non-bit-fields are aligned for their type. */
2690 DECL_BIT_FIELD (field) = 0;
2691 CLEAR_DECL_C_BIT_FIELD (field);
2695 /* FIELD is a non bit-field. We are finishing the processing for its
2696 enclosing type T. Issue any appropriate messages and set appropriate
2700 check_field_decl (tree field,
2702 int* cant_have_const_ctor,
2703 int* no_const_asn_ref,
2704 int* any_default_members)
2706 tree type = strip_array_types (TREE_TYPE (field));
2708 /* An anonymous union cannot contain any fields which would change
2709 the settings of CANT_HAVE_CONST_CTOR and friends. */
2710 if (ANON_UNION_TYPE_P (type))
2712 /* And, we don't set TYPE_HAS_CONST_INIT_REF, etc., for anonymous
2713 structs. So, we recurse through their fields here. */
2714 else if (ANON_AGGR_TYPE_P (type))
2718 for (fields = TYPE_FIELDS (type); fields; fields = TREE_CHAIN (fields))
2719 if (TREE_CODE (fields) == FIELD_DECL && !DECL_C_BIT_FIELD (field))
2720 check_field_decl (fields, t, cant_have_const_ctor,
2721 no_const_asn_ref, any_default_members);
2723 /* Check members with class type for constructors, destructors,
2725 else if (CLASS_TYPE_P (type))
2727 /* Never let anything with uninheritable virtuals
2728 make it through without complaint. */
2729 abstract_virtuals_error (field, type);
2731 if (TREE_CODE (t) == UNION_TYPE)
2733 if (TYPE_NEEDS_CONSTRUCTING (type))
2734 error ("member %q+#D with constructor not allowed in union",
2736 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
2737 error ("member %q+#D with destructor not allowed in union", field);
2738 if (TYPE_HAS_COMPLEX_ASSIGN_REF (type))
2739 error ("member %q+#D with copy assignment operator not allowed in union",
2744 TYPE_NEEDS_CONSTRUCTING (t) |= TYPE_NEEDS_CONSTRUCTING (type);
2745 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
2746 |= TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type);
2747 TYPE_HAS_COMPLEX_ASSIGN_REF (t) |= TYPE_HAS_COMPLEX_ASSIGN_REF (type);
2748 TYPE_HAS_COMPLEX_INIT_REF (t) |= TYPE_HAS_COMPLEX_INIT_REF (type);
2751 if (!TYPE_HAS_CONST_INIT_REF (type))
2752 *cant_have_const_ctor = 1;
2754 if (!TYPE_HAS_CONST_ASSIGN_REF (type))
2755 *no_const_asn_ref = 1;
2757 if (DECL_INITIAL (field) != NULL_TREE)
2759 /* `build_class_init_list' does not recognize
2761 if (TREE_CODE (t) == UNION_TYPE && any_default_members != 0)
2762 error ("multiple fields in union %qT initialized", t);
2763 *any_default_members = 1;
2767 /* Check the data members (both static and non-static), class-scoped
2768 typedefs, etc., appearing in the declaration of T. Issue
2769 appropriate diagnostics. Sets ACCESS_DECLS to a list (in
2770 declaration order) of access declarations; each TREE_VALUE in this
2771 list is a USING_DECL.
2773 In addition, set the following flags:
2776 The class is empty, i.e., contains no non-static data members.
2778 CANT_HAVE_CONST_CTOR_P
2779 This class cannot have an implicitly generated copy constructor
2780 taking a const reference.
2782 CANT_HAVE_CONST_ASN_REF
2783 This class cannot have an implicitly generated assignment
2784 operator taking a const reference.
2786 All of these flags should be initialized before calling this
2789 Returns a pointer to the end of the TYPE_FIELDs chain; additional
2790 fields can be added by adding to this chain. */
2793 check_field_decls (tree t, tree *access_decls,
2794 int *cant_have_const_ctor_p,
2795 int *no_const_asn_ref_p)
2800 int any_default_members;
2803 /* Assume there are no access declarations. */
2804 *access_decls = NULL_TREE;
2805 /* Assume this class has no pointer members. */
2806 has_pointers = false;
2807 /* Assume none of the members of this class have default
2809 any_default_members = 0;
2811 for (field = &TYPE_FIELDS (t); *field; field = next)
2814 tree type = TREE_TYPE (x);
2816 next = &TREE_CHAIN (x);
2818 if (TREE_CODE (x) == USING_DECL)
2820 /* Prune the access declaration from the list of fields. */
2821 *field = TREE_CHAIN (x);
2823 /* Save the access declarations for our caller. */
2824 *access_decls = tree_cons (NULL_TREE, x, *access_decls);
2826 /* Since we've reset *FIELD there's no reason to skip to the
2832 if (TREE_CODE (x) == TYPE_DECL
2833 || TREE_CODE (x) == TEMPLATE_DECL)
2836 /* If we've gotten this far, it's a data member, possibly static,
2837 or an enumerator. */
2838 DECL_CONTEXT (x) = t;
2840 /* When this goes into scope, it will be a non-local reference. */
2841 DECL_NONLOCAL (x) = 1;
2843 if (TREE_CODE (t) == UNION_TYPE)
2847 If a union contains a static data member, or a member of
2848 reference type, the program is ill-formed. */
2849 if (TREE_CODE (x) == VAR_DECL)
2851 error ("%q+D may not be static because it is a member of a union", x);
2854 if (TREE_CODE (type) == REFERENCE_TYPE)
2856 error ("%q+D may not have reference type %qT because"
2857 " it is a member of a union",
2863 /* Perform error checking that did not get done in
2865 if (TREE_CODE (type) == FUNCTION_TYPE)
2867 error ("field %q+D invalidly declared function type", x);
2868 type = build_pointer_type (type);
2869 TREE_TYPE (x) = type;
2871 else if (TREE_CODE (type) == METHOD_TYPE)
2873 error ("field %q+D invalidly declared method type", x);
2874 type = build_pointer_type (type);
2875 TREE_TYPE (x) = type;
2878 if (type == error_mark_node)
2881 if (TREE_CODE (x) == CONST_DECL || TREE_CODE (x) == VAR_DECL)
2884 /* Now it can only be a FIELD_DECL. */
2886 if (TREE_PRIVATE (x) || TREE_PROTECTED (x))
2887 CLASSTYPE_NON_AGGREGATE (t) = 1;
2889 /* If this is of reference type, check if it needs an init.
2890 Also do a little ANSI jig if necessary. */
2891 if (TREE_CODE (type) == REFERENCE_TYPE)
2893 CLASSTYPE_NON_POD_P (t) = 1;
2894 if (DECL_INITIAL (x) == NULL_TREE)
2895 SET_CLASSTYPE_REF_FIELDS_NEED_INIT (t, 1);
2897 /* ARM $12.6.2: [A member initializer list] (or, for an
2898 aggregate, initialization by a brace-enclosed list) is the
2899 only way to initialize nonstatic const and reference
2901 TYPE_HAS_COMPLEX_ASSIGN_REF (t) = 1;
2903 if (! TYPE_HAS_CONSTRUCTOR (t) && CLASSTYPE_NON_AGGREGATE (t)
2905 warning (OPT_Wextra, "non-static reference %q+#D in class without a constructor", x);
2908 type = strip_array_types (type);
2910 if (TYPE_PACKED (t))
2912 if (!pod_type_p (type) && !TYPE_PACKED (type))
2916 "ignoring packed attribute because of unpacked non-POD field %q+#D",
2920 else if (TYPE_ALIGN (TREE_TYPE (x)) > BITS_PER_UNIT)
2921 DECL_PACKED (x) = 1;
2924 if (DECL_C_BIT_FIELD (x) && integer_zerop (DECL_INITIAL (x)))
2925 /* We don't treat zero-width bitfields as making a class
2930 /* The class is non-empty. */
2931 CLASSTYPE_EMPTY_P (t) = 0;
2932 /* The class is not even nearly empty. */
2933 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
2934 /* If one of the data members contains an empty class,
2936 if (CLASS_TYPE_P (type)
2937 && CLASSTYPE_CONTAINS_EMPTY_CLASS_P (type))
2938 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) = 1;
2941 /* This is used by -Weffc++ (see below). Warn only for pointers
2942 to members which might hold dynamic memory. So do not warn
2943 for pointers to functions or pointers to members. */
2944 if (TYPE_PTR_P (type)
2945 && !TYPE_PTRFN_P (type)
2946 && !TYPE_PTR_TO_MEMBER_P (type))
2947 has_pointers = true;
2949 if (CLASS_TYPE_P (type))
2951 if (CLASSTYPE_REF_FIELDS_NEED_INIT (type))
2952 SET_CLASSTYPE_REF_FIELDS_NEED_INIT (t, 1);
2953 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (type))
2954 SET_CLASSTYPE_READONLY_FIELDS_NEED_INIT (t, 1);
2957 if (DECL_MUTABLE_P (x) || TYPE_HAS_MUTABLE_P (type))
2958 CLASSTYPE_HAS_MUTABLE (t) = 1;
2960 if (! pod_type_p (type))
2961 /* DR 148 now allows pointers to members (which are POD themselves),
2962 to be allowed in POD structs. */
2963 CLASSTYPE_NON_POD_P (t) = 1;
2965 if (! zero_init_p (type))
2966 CLASSTYPE_NON_ZERO_INIT_P (t) = 1;
2968 /* If any field is const, the structure type is pseudo-const. */
2969 if (CP_TYPE_CONST_P (type))
2971 C_TYPE_FIELDS_READONLY (t) = 1;
2972 if (DECL_INITIAL (x) == NULL_TREE)
2973 SET_CLASSTYPE_READONLY_FIELDS_NEED_INIT (t, 1);
2975 /* ARM $12.6.2: [A member initializer list] (or, for an
2976 aggregate, initialization by a brace-enclosed list) is the
2977 only way to initialize nonstatic const and reference
2979 TYPE_HAS_COMPLEX_ASSIGN_REF (t) = 1;
2981 if (! TYPE_HAS_CONSTRUCTOR (t) && CLASSTYPE_NON_AGGREGATE (t)
2983 warning (OPT_Wextra, "non-static const member %q+#D in class without a constructor", x);
2985 /* A field that is pseudo-const makes the structure likewise. */
2986 else if (CLASS_TYPE_P (type))
2988 C_TYPE_FIELDS_READONLY (t) |= C_TYPE_FIELDS_READONLY (type);
2989 SET_CLASSTYPE_READONLY_FIELDS_NEED_INIT (t,
2990 CLASSTYPE_READONLY_FIELDS_NEED_INIT (t)
2991 | CLASSTYPE_READONLY_FIELDS_NEED_INIT (type));
2994 /* Core issue 80: A nonstatic data member is required to have a
2995 different name from the class iff the class has a
2996 user-defined constructor. */
2997 if (constructor_name_p (DECL_NAME (x), t) && TYPE_HAS_CONSTRUCTOR (t))
2998 pedwarn ("field %q+#D with same name as class", x);
3000 /* We set DECL_C_BIT_FIELD in grokbitfield.
3001 If the type and width are valid, we'll also set DECL_BIT_FIELD. */
3002 if (DECL_C_BIT_FIELD (x))
3003 check_bitfield_decl (x);
3005 check_field_decl (x, t,
3006 cant_have_const_ctor_p,
3008 &any_default_members);
3011 /* Effective C++ rule 11: if a class has dynamic memory held by pointers,
3012 it should also define a copy constructor and an assignment operator to
3013 implement the correct copy semantic (deep vs shallow, etc.). As it is
3014 not feasible to check whether the constructors do allocate dynamic memory
3015 and store it within members, we approximate the warning like this:
3017 -- Warn only if there are members which are pointers
3018 -- Warn only if there is a non-trivial constructor (otherwise,
3019 there cannot be memory allocated).
3020 -- Warn only if there is a non-trivial destructor. We assume that the
3021 user at least implemented the cleanup correctly, and a destructor
3022 is needed to free dynamic memory.
3024 This seems enough for practical purposes. */
3027 && TYPE_HAS_CONSTRUCTOR (t)
3028 && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
3029 && !(TYPE_HAS_INIT_REF (t) && TYPE_HAS_ASSIGN_REF (t)))
3031 warning (OPT_Weffc__, "%q#T has pointer data members", t);
3033 if (! TYPE_HAS_INIT_REF (t))
3035 warning (OPT_Weffc__,
3036 " but does not override %<%T(const %T&)%>", t, t);
3037 if (!TYPE_HAS_ASSIGN_REF (t))
3038 warning (OPT_Weffc__, " or %<operator=(const %T&)%>", t);
3040 else if (! TYPE_HAS_ASSIGN_REF (t))
3041 warning (OPT_Weffc__,
3042 " but does not override %<operator=(const %T&)%>", t);
3045 /* If any of the fields couldn't be packed, unset TYPE_PACKED. */
3047 TYPE_PACKED (t) = 0;
3049 /* Check anonymous struct/anonymous union fields. */
3050 finish_struct_anon (t);
3052 /* We've built up the list of access declarations in reverse order.
3054 *access_decls = nreverse (*access_decls);
3057 /* If TYPE is an empty class type, records its OFFSET in the table of
3061 record_subobject_offset (tree type, tree offset, splay_tree offsets)
3065 if (!is_empty_class (type))
3068 /* Record the location of this empty object in OFFSETS. */
3069 n = splay_tree_lookup (offsets, (splay_tree_key) offset);
3071 n = splay_tree_insert (offsets,
3072 (splay_tree_key) offset,
3073 (splay_tree_value) NULL_TREE);
3074 n->value = ((splay_tree_value)
3075 tree_cons (NULL_TREE,
3082 /* Returns nonzero if TYPE is an empty class type and there is
3083 already an entry in OFFSETS for the same TYPE as the same OFFSET. */
3086 check_subobject_offset (tree type, tree offset, splay_tree offsets)
3091 if (!is_empty_class (type))
3094 /* Record the location of this empty object in OFFSETS. */
3095 n = splay_tree_lookup (offsets, (splay_tree_key) offset);
3099 for (t = (tree) n->value; t; t = TREE_CHAIN (t))
3100 if (same_type_p (TREE_VALUE (t), type))
3106 /* Walk through all the subobjects of TYPE (located at OFFSET). Call
3107 F for every subobject, passing it the type, offset, and table of
3108 OFFSETS. If VBASES_P is one, then virtual non-primary bases should
3111 If MAX_OFFSET is non-NULL, then subobjects with an offset greater
3112 than MAX_OFFSET will not be walked.
3114 If F returns a nonzero value, the traversal ceases, and that value
3115 is returned. Otherwise, returns zero. */
3118 walk_subobject_offsets (tree type,
3119 subobject_offset_fn f,
3126 tree type_binfo = NULL_TREE;
3128 /* If this OFFSET is bigger than the MAX_OFFSET, then we should
3130 if (max_offset && INT_CST_LT (max_offset, offset))
3133 if (type == error_mark_node)
3138 if (abi_version_at_least (2))
3140 type = BINFO_TYPE (type);
3143 if (CLASS_TYPE_P (type))
3149 /* Avoid recursing into objects that are not interesting. */
3150 if (!CLASSTYPE_CONTAINS_EMPTY_CLASS_P (type))
3153 /* Record the location of TYPE. */
3154 r = (*f) (type, offset, offsets);
3158 /* Iterate through the direct base classes of TYPE. */
3160 type_binfo = TYPE_BINFO (type);
3161 for (i = 0; BINFO_BASE_ITERATE (type_binfo, i, binfo); i++)
3165 if (abi_version_at_least (2)
3166 && BINFO_VIRTUAL_P (binfo))
3170 && BINFO_VIRTUAL_P (binfo)
3171 && !BINFO_PRIMARY_P (binfo))
3174 if (!abi_version_at_least (2))
3175 binfo_offset = size_binop (PLUS_EXPR,
3177 BINFO_OFFSET (binfo));
3181 /* We cannot rely on BINFO_OFFSET being set for the base
3182 class yet, but the offsets for direct non-virtual
3183 bases can be calculated by going back to the TYPE. */
3184 orig_binfo = BINFO_BASE_BINFO (TYPE_BINFO (type), i);
3185 binfo_offset = size_binop (PLUS_EXPR,
3187 BINFO_OFFSET (orig_binfo));
3190 r = walk_subobject_offsets (binfo,
3195 (abi_version_at_least (2)
3196 ? /*vbases_p=*/0 : vbases_p));
3201 if (abi_version_at_least (2) && CLASSTYPE_VBASECLASSES (type))
3204 VEC(tree,gc) *vbases;
3206 /* Iterate through the virtual base classes of TYPE. In G++
3207 3.2, we included virtual bases in the direct base class
3208 loop above, which results in incorrect results; the
3209 correct offsets for virtual bases are only known when
3210 working with the most derived type. */
3212 for (vbases = CLASSTYPE_VBASECLASSES (type), ix = 0;
3213 VEC_iterate (tree, vbases, ix, binfo); ix++)
3215 r = walk_subobject_offsets (binfo,
3217 size_binop (PLUS_EXPR,
3219 BINFO_OFFSET (binfo)),
3228 /* We still have to walk the primary base, if it is
3229 virtual. (If it is non-virtual, then it was walked
3231 tree vbase = get_primary_binfo (type_binfo);
3233 if (vbase && BINFO_VIRTUAL_P (vbase)
3234 && BINFO_PRIMARY_P (vbase)
3235 && BINFO_INHERITANCE_CHAIN (vbase) == type_binfo)
3237 r = (walk_subobject_offsets
3239 offsets, max_offset, /*vbases_p=*/0));
3246 /* Iterate through the fields of TYPE. */
3247 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
3248 if (TREE_CODE (field) == FIELD_DECL && !DECL_ARTIFICIAL (field))
3252 if (abi_version_at_least (2))
3253 field_offset = byte_position (field);
3255 /* In G++ 3.2, DECL_FIELD_OFFSET was used. */
3256 field_offset = DECL_FIELD_OFFSET (field);
3258 r = walk_subobject_offsets (TREE_TYPE (field),
3260 size_binop (PLUS_EXPR,
3270 else if (TREE_CODE (type) == ARRAY_TYPE)
3272 tree element_type = strip_array_types (type);
3273 tree domain = TYPE_DOMAIN (type);
3276 /* Avoid recursing into objects that are not interesting. */
3277 if (!CLASS_TYPE_P (element_type)
3278 || !CLASSTYPE_CONTAINS_EMPTY_CLASS_P (element_type))
3281 /* Step through each of the elements in the array. */
3282 for (index = size_zero_node;
3283 /* G++ 3.2 had an off-by-one error here. */
3284 (abi_version_at_least (2)
3285 ? !INT_CST_LT (TYPE_MAX_VALUE (domain), index)
3286 : INT_CST_LT (index, TYPE_MAX_VALUE (domain)));
3287 index = size_binop (PLUS_EXPR, index, size_one_node))
3289 r = walk_subobject_offsets (TREE_TYPE (type),
3297 offset = size_binop (PLUS_EXPR, offset,
3298 TYPE_SIZE_UNIT (TREE_TYPE (type)));
3299 /* If this new OFFSET is bigger than the MAX_OFFSET, then
3300 there's no point in iterating through the remaining
3301 elements of the array. */
3302 if (max_offset && INT_CST_LT (max_offset, offset))
3310 /* Record all of the empty subobjects of TYPE (either a type or a
3311 binfo). If IS_DATA_MEMBER is true, then a non-static data member
3312 is being placed at OFFSET; otherwise, it is a base class that is
3313 being placed at OFFSET. */
3316 record_subobject_offsets (tree type,
3319 bool is_data_member)
3322 /* If recording subobjects for a non-static data member or a
3323 non-empty base class , we do not need to record offsets beyond
3324 the size of the biggest empty class. Additional data members
3325 will go at the end of the class. Additional base classes will go
3326 either at offset zero (if empty, in which case they cannot
3327 overlap with offsets past the size of the biggest empty class) or
3328 at the end of the class.
3330 However, if we are placing an empty base class, then we must record
3331 all offsets, as either the empty class is at offset zero (where
3332 other empty classes might later be placed) or at the end of the
3333 class (where other objects might then be placed, so other empty
3334 subobjects might later overlap). */
3336 || !is_empty_class (BINFO_TYPE (type)))
3337 max_offset = sizeof_biggest_empty_class;
3339 max_offset = NULL_TREE;
3340 walk_subobject_offsets (type, record_subobject_offset, offset,
3341 offsets, max_offset, is_data_member);
3344 /* Returns nonzero if any of the empty subobjects of TYPE (located at
3345 OFFSET) conflict with entries in OFFSETS. If VBASES_P is nonzero,
3346 virtual bases of TYPE are examined. */
3349 layout_conflict_p (tree type,
3354 splay_tree_node max_node;
3356 /* Get the node in OFFSETS that indicates the maximum offset where
3357 an empty subobject is located. */
3358 max_node = splay_tree_max (offsets);
3359 /* If there aren't any empty subobjects, then there's no point in
3360 performing this check. */
3364 return walk_subobject_offsets (type, check_subobject_offset, offset,
3365 offsets, (tree) (max_node->key),
3369 /* DECL is a FIELD_DECL corresponding either to a base subobject of a
3370 non-static data member of the type indicated by RLI. BINFO is the
3371 binfo corresponding to the base subobject, OFFSETS maps offsets to
3372 types already located at those offsets. This function determines
3373 the position of the DECL. */
3376 layout_nonempty_base_or_field (record_layout_info rli,
3381 tree offset = NULL_TREE;
3387 /* For the purposes of determining layout conflicts, we want to
3388 use the class type of BINFO; TREE_TYPE (DECL) will be the
3389 CLASSTYPE_AS_BASE version, which does not contain entries for
3390 zero-sized bases. */
3391 type = TREE_TYPE (binfo);
3396 type = TREE_TYPE (decl);
3400 /* Try to place the field. It may take more than one try if we have
3401 a hard time placing the field without putting two objects of the
3402 same type at the same address. */
3405 struct record_layout_info_s old_rli = *rli;
3407 /* Place this field. */
3408 place_field (rli, decl);
3409 offset = byte_position (decl);
3411 /* We have to check to see whether or not there is already
3412 something of the same type at the offset we're about to use.
3413 For example, consider:
3416 struct T : public S { int i; };
3417 struct U : public S, public T {};
3419 Here, we put S at offset zero in U. Then, we can't put T at
3420 offset zero -- its S component would be at the same address
3421 as the S we already allocated. So, we have to skip ahead.
3422 Since all data members, including those whose type is an
3423 empty class, have nonzero size, any overlap can happen only
3424 with a direct or indirect base-class -- it can't happen with
3426 /* In a union, overlap is permitted; all members are placed at
3428 if (TREE_CODE (rli->t) == UNION_TYPE)
3430 /* G++ 3.2 did not check for overlaps when placing a non-empty
3432 if (!abi_version_at_least (2) && binfo && BINFO_VIRTUAL_P (binfo))
3434 if (layout_conflict_p (field_p ? type : binfo, offset,
3437 /* Strip off the size allocated to this field. That puts us
3438 at the first place we could have put the field with
3439 proper alignment. */
3442 /* Bump up by the alignment required for the type. */
3444 = size_binop (PLUS_EXPR, rli->bitpos,
3446 ? CLASSTYPE_ALIGN (type)
3447 : TYPE_ALIGN (type)));
3448 normalize_rli (rli);
3451 /* There was no conflict. We're done laying out this field. */
3455 /* Now that we know where it will be placed, update its
3457 if (binfo && CLASS_TYPE_P (BINFO_TYPE (binfo)))
3458 /* Indirect virtual bases may have a nonzero BINFO_OFFSET at
3459 this point because their BINFO_OFFSET is copied from another
3460 hierarchy. Therefore, we may not need to add the entire
3462 propagate_binfo_offsets (binfo,
3463 size_diffop (convert (ssizetype, offset),
3465 BINFO_OFFSET (binfo))));
3468 /* Returns true if TYPE is empty and OFFSET is nonzero. */
3471 empty_base_at_nonzero_offset_p (tree type,
3473 splay_tree offsets ATTRIBUTE_UNUSED)
3475 return is_empty_class (type) && !integer_zerop (offset);
3478 /* Layout the empty base BINFO. EOC indicates the byte currently just
3479 past the end of the class, and should be correctly aligned for a
3480 class of the type indicated by BINFO; OFFSETS gives the offsets of
3481 the empty bases allocated so far. T is the most derived
3482 type. Return nonzero iff we added it at the end. */
3485 layout_empty_base (tree binfo, tree eoc, splay_tree offsets)
3488 tree basetype = BINFO_TYPE (binfo);
3491 /* This routine should only be used for empty classes. */
3492 gcc_assert (is_empty_class (basetype));
3493 alignment = ssize_int (CLASSTYPE_ALIGN_UNIT (basetype));
3495 if (!integer_zerop (BINFO_OFFSET (binfo)))
3497 if (abi_version_at_least (2))
3498 propagate_binfo_offsets
3499 (binfo, size_diffop (size_zero_node, BINFO_OFFSET (binfo)));
3502 "offset of empty base %qT may not be ABI-compliant and may"
3503 "change in a future version of GCC",
3504 BINFO_TYPE (binfo));
3507 /* This is an empty base class. We first try to put it at offset
3509 if (layout_conflict_p (binfo,
3510 BINFO_OFFSET (binfo),
3514 /* That didn't work. Now, we move forward from the next
3515 available spot in the class. */
3517 propagate_binfo_offsets (binfo, convert (ssizetype, eoc));
3520 if (!layout_conflict_p (binfo,
3521 BINFO_OFFSET (binfo),
3524 /* We finally found a spot where there's no overlap. */
3527 /* There's overlap here, too. Bump along to the next spot. */
3528 propagate_binfo_offsets (binfo, alignment);
3534 /* Layout the base given by BINFO in the class indicated by RLI.
3535 *BASE_ALIGN is a running maximum of the alignments of
3536 any base class. OFFSETS gives the location of empty base
3537 subobjects. T is the most derived type. Return nonzero if the new
3538 object cannot be nearly-empty. A new FIELD_DECL is inserted at
3539 *NEXT_FIELD, unless BINFO is for an empty base class.
3541 Returns the location at which the next field should be inserted. */
3544 build_base_field (record_layout_info rli, tree binfo,
3545 splay_tree offsets, tree *next_field)
3548 tree basetype = BINFO_TYPE (binfo);
3550 if (!COMPLETE_TYPE_P (basetype))
3551 /* This error is now reported in xref_tag, thus giving better
3552 location information. */
3555 /* Place the base class. */
3556 if (!is_empty_class (basetype))
3560 /* The containing class is non-empty because it has a non-empty
3562 CLASSTYPE_EMPTY_P (t) = 0;
3564 /* Create the FIELD_DECL. */
3565 decl = build_decl (FIELD_DECL, NULL_TREE, CLASSTYPE_AS_BASE (basetype));
3566 DECL_ARTIFICIAL (decl) = 1;
3567 DECL_IGNORED_P (decl) = 1;
3568 DECL_FIELD_CONTEXT (decl) = t;
3569 DECL_SIZE (decl) = CLASSTYPE_SIZE (basetype);
3570 DECL_SIZE_UNIT (decl) = CLASSTYPE_SIZE_UNIT (basetype);
3571 DECL_ALIGN (decl) = CLASSTYPE_ALIGN (basetype);
3572 DECL_USER_ALIGN (decl) = CLASSTYPE_USER_ALIGN (basetype);
3573 DECL_MODE (decl) = TYPE_MODE (basetype);
3574 DECL_FIELD_IS_BASE (decl) = 1;
3576 /* Try to place the field. It may take more than one try if we
3577 have a hard time placing the field without putting two
3578 objects of the same type at the same address. */
3579 layout_nonempty_base_or_field (rli, decl, binfo, offsets);
3580 /* Add the new FIELD_DECL to the list of fields for T. */
3581 TREE_CHAIN (decl) = *next_field;
3583 next_field = &TREE_CHAIN (decl);
3590 /* On some platforms (ARM), even empty classes will not be
3592 eoc = round_up (rli_size_unit_so_far (rli),
3593 CLASSTYPE_ALIGN_UNIT (basetype));
3594 atend = layout_empty_base (binfo, eoc, offsets);
3595 /* A nearly-empty class "has no proper base class that is empty,
3596 not morally virtual, and at an offset other than zero." */
3597 if (!BINFO_VIRTUAL_P (binfo) && CLASSTYPE_NEARLY_EMPTY_P (t))
3600 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
3601 /* The check above (used in G++ 3.2) is insufficient because
3602 an empty class placed at offset zero might itself have an
3603 empty base at a nonzero offset. */
3604 else if (walk_subobject_offsets (basetype,
3605 empty_base_at_nonzero_offset_p,
3608 /*max_offset=*/NULL_TREE,
3611 if (abi_version_at_least (2))
3612 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
3615 "class %qT will be considered nearly empty in a "
3616 "future version of GCC", t);
3620 /* We do not create a FIELD_DECL for empty base classes because
3621 it might overlap some other field. We want to be able to
3622 create CONSTRUCTORs for the class by iterating over the
3623 FIELD_DECLs, and the back end does not handle overlapping
3626 /* An empty virtual base causes a class to be non-empty
3627 -- but in that case we do not need to clear CLASSTYPE_EMPTY_P
3628 here because that was already done when the virtual table
3629 pointer was created. */
3632 /* Record the offsets of BINFO and its base subobjects. */
3633 record_subobject_offsets (binfo,
3634 BINFO_OFFSET (binfo),
3636 /*is_data_member=*/false);
3641 /* Layout all of the non-virtual base classes. Record empty
3642 subobjects in OFFSETS. T is the most derived type. Return nonzero
3643 if the type cannot be nearly empty. The fields created
3644 corresponding to the base classes will be inserted at
3648 build_base_fields (record_layout_info rli,
3649 splay_tree offsets, tree *next_field)
3651 /* Chain to hold all the new FIELD_DECLs which stand in for base class
3654 int n_baseclasses = BINFO_N_BASE_BINFOS (TYPE_BINFO (t));
3657 /* The primary base class is always allocated first. */
3658 if (CLASSTYPE_HAS_PRIMARY_BASE_P (t))
3659 next_field = build_base_field (rli, CLASSTYPE_PRIMARY_BINFO (t),
3660 offsets, next_field);
3662 /* Now allocate the rest of the bases. */
3663 for (i = 0; i < n_baseclasses; ++i)
3667 base_binfo = BINFO_BASE_BINFO (TYPE_BINFO (t), i);
3669 /* The primary base was already allocated above, so we don't
3670 need to allocate it again here. */
3671 if (base_binfo == CLASSTYPE_PRIMARY_BINFO (t))
3674 /* Virtual bases are added at the end (a primary virtual base
3675 will have already been added). */
3676 if (BINFO_VIRTUAL_P (base_binfo))
3679 next_field = build_base_field (rli, base_binfo,
3680 offsets, next_field);
3684 /* Go through the TYPE_METHODS of T issuing any appropriate
3685 diagnostics, figuring out which methods override which other
3686 methods, and so forth. */
3689 check_methods (tree t)
3693 for (x = TYPE_METHODS (t); x; x = TREE_CHAIN (x))
3695 check_for_override (x, t);
3696 if (DECL_PURE_VIRTUAL_P (x) && ! DECL_VINDEX (x))
3697 error ("initializer specified for non-virtual method %q+D", x);
3698 /* The name of the field is the original field name
3699 Save this in auxiliary field for later overloading. */
3700 if (DECL_VINDEX (x))
3702 TYPE_POLYMORPHIC_P (t) = 1;
3703 if (DECL_PURE_VIRTUAL_P (x))
3704 VEC_safe_push (tree, gc, CLASSTYPE_PURE_VIRTUALS (t), x);
3706 /* All user-declared destructors are non-trivial. */
3707 if (DECL_DESTRUCTOR_P (x))
3708 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t) = 1;
3712 /* FN is a constructor or destructor. Clone the declaration to create
3713 a specialized in-charge or not-in-charge version, as indicated by
3717 build_clone (tree fn, tree name)
3722 /* Copy the function. */
3723 clone = copy_decl (fn);
3724 /* Remember where this function came from. */
3725 DECL_CLONED_FUNCTION (clone) = fn;
3726 DECL_ABSTRACT_ORIGIN (clone) = fn;
3727 /* Reset the function name. */
3728 DECL_NAME (clone) = name;
3729 SET_DECL_ASSEMBLER_NAME (clone, NULL_TREE);
3730 /* There's no pending inline data for this function. */
3731 DECL_PENDING_INLINE_INFO (clone) = NULL;
3732 DECL_PENDING_INLINE_P (clone) = 0;
3733 /* And it hasn't yet been deferred. */
3734 DECL_DEFERRED_FN (clone) = 0;
3736 /* The base-class destructor is not virtual. */
3737 if (name == base_dtor_identifier)
3739 DECL_VIRTUAL_P (clone) = 0;
3740 if (TREE_CODE (clone) != TEMPLATE_DECL)
3741 DECL_VINDEX (clone) = NULL_TREE;
3744 /* If there was an in-charge parameter, drop it from the function
3746 if (DECL_HAS_IN_CHARGE_PARM_P (clone))
3752 exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (clone));
3753 basetype = TYPE_METHOD_BASETYPE (TREE_TYPE (clone));
3754 parmtypes = TYPE_ARG_TYPES (TREE_TYPE (clone));
3755 /* Skip the `this' parameter. */
3756 parmtypes = TREE_CHAIN (parmtypes);
3757 /* Skip the in-charge parameter. */
3758 parmtypes = TREE_CHAIN (parmtypes);
3759 /* And the VTT parm, in a complete [cd]tor. */
3760 if (DECL_HAS_VTT_PARM_P (fn)
3761 && ! DECL_NEEDS_VTT_PARM_P (clone))
3762 parmtypes = TREE_CHAIN (parmtypes);
3763 /* If this is subobject constructor or destructor, add the vtt
3766 = build_method_type_directly (basetype,
3767 TREE_TYPE (TREE_TYPE (clone)),
3770 TREE_TYPE (clone) = build_exception_variant (TREE_TYPE (clone),
3773 = cp_build_type_attribute_variant (TREE_TYPE (clone),
3774 TYPE_ATTRIBUTES (TREE_TYPE (fn)));
3777 /* Copy the function parameters. But, DECL_ARGUMENTS on a TEMPLATE_DECL
3778 aren't function parameters; those are the template parameters. */
3779 if (TREE_CODE (clone) != TEMPLATE_DECL)
3781 DECL_ARGUMENTS (clone) = copy_list (DECL_ARGUMENTS (clone));
3782 /* Remove the in-charge parameter. */
3783 if (DECL_HAS_IN_CHARGE_PARM_P (clone))
3785 TREE_CHAIN (DECL_ARGUMENTS (clone))
3786 = TREE_CHAIN (TREE_CHAIN (DECL_ARGUMENTS (clone)));
3787 DECL_HAS_IN_CHARGE_PARM_P (clone) = 0;
3789 /* And the VTT parm, in a complete [cd]tor. */
3790 if (DECL_HAS_VTT_PARM_P (fn))
3792 if (DECL_NEEDS_VTT_PARM_P (clone))
3793 DECL_HAS_VTT_PARM_P (clone) = 1;
3796 TREE_CHAIN (DECL_ARGUMENTS (clone))
3797 = TREE_CHAIN (TREE_CHAIN (DECL_ARGUMENTS (clone)));
3798 DECL_HAS_VTT_PARM_P (clone) = 0;
3802 for (parms = DECL_ARGUMENTS (clone); parms; parms = TREE_CHAIN (parms))
3804 DECL_CONTEXT (parms) = clone;
3805 cxx_dup_lang_specific_decl (parms);
3809 /* Create the RTL for this function. */
3810 SET_DECL_RTL (clone, NULL_RTX);
3811 rest_of_decl_compilation (clone, /*top_level=*/1, at_eof);
3813 /* Make it easy to find the CLONE given the FN. */
3814 TREE_CHAIN (clone) = TREE_CHAIN (fn);
3815 TREE_CHAIN (fn) = clone;
3817 /* If this is a template, handle the DECL_TEMPLATE_RESULT as well. */
3818 if (TREE_CODE (clone) == TEMPLATE_DECL)
3822 DECL_TEMPLATE_RESULT (clone)
3823 = build_clone (DECL_TEMPLATE_RESULT (clone), name);
3824 result = DECL_TEMPLATE_RESULT (clone);
3825 DECL_TEMPLATE_INFO (result) = copy_node (DECL_TEMPLATE_INFO (result));
3826 DECL_TI_TEMPLATE (result) = clone;
3829 note_decl_for_pch (clone);
3834 /* Produce declarations for all appropriate clones of FN. If
3835 UPDATE_METHOD_VEC_P is nonzero, the clones are added to the
3836 CLASTYPE_METHOD_VEC as well. */
3839 clone_function_decl (tree fn, int update_method_vec_p)
3843 /* Avoid inappropriate cloning. */
3845 && DECL_CLONED_FUNCTION (TREE_CHAIN (fn)))
3848 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (fn))
3850 /* For each constructor, we need two variants: an in-charge version
3851 and a not-in-charge version. */
3852 clone = build_clone (fn, complete_ctor_identifier);
3853 if (update_method_vec_p)
3854 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
3855 clone = build_clone (fn, base_ctor_identifier);
3856 if (update_method_vec_p)
3857 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
3861 gcc_assert (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (fn));
3863 /* For each destructor, we need three variants: an in-charge
3864 version, a not-in-charge version, and an in-charge deleting
3865 version. We clone the deleting version first because that
3866 means it will go second on the TYPE_METHODS list -- and that
3867 corresponds to the correct layout order in the virtual
3870 For a non-virtual destructor, we do not build a deleting
3872 if (DECL_VIRTUAL_P (fn))
3874 clone = build_clone (fn, deleting_dtor_identifier);
3875 if (update_method_vec_p)
3876 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
3878 clone = build_clone (fn, complete_dtor_identifier);
3879 if (update_method_vec_p)
3880 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
3881 clone = build_clone (fn, base_dtor_identifier);
3882 if (update_method_vec_p)
3883 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
3886 /* Note that this is an abstract function that is never emitted. */
3887 DECL_ABSTRACT (fn) = 1;
3890 /* DECL is an in charge constructor, which is being defined. This will
3891 have had an in class declaration, from whence clones were
3892 declared. An out-of-class definition can specify additional default
3893 arguments. As it is the clones that are involved in overload
3894 resolution, we must propagate the information from the DECL to its
3898 adjust_clone_args (tree decl)
3902 for (clone = TREE_CHAIN (decl); clone && DECL_CLONED_FUNCTION (clone);
3903 clone = TREE_CHAIN (clone))
3905 tree orig_clone_parms = TYPE_ARG_TYPES (TREE_TYPE (clone));
3906 tree orig_decl_parms = TYPE_ARG_TYPES (TREE_TYPE (decl));
3907 tree decl_parms, clone_parms;
3909 clone_parms = orig_clone_parms;
3911 /* Skip the 'this' parameter. */
3912 orig_clone_parms = TREE_CHAIN (orig_clone_parms);
3913 orig_decl_parms = TREE_CHAIN (orig_decl_parms);
3915 if (DECL_HAS_IN_CHARGE_PARM_P (decl))
3916 orig_decl_parms = TREE_CHAIN (orig_decl_parms);
3917 if (DECL_HAS_VTT_PARM_P (decl))
3918 orig_decl_parms = TREE_CHAIN (orig_decl_parms);
3920 clone_parms = orig_clone_parms;
3921 if (DECL_HAS_VTT_PARM_P (clone))
3922 clone_parms = TREE_CHAIN (clone_parms);
3924 for (decl_parms = orig_decl_parms; decl_parms;
3925 decl_parms = TREE_CHAIN (decl_parms),
3926 clone_parms = TREE_CHAIN (clone_parms))
3928 gcc_assert (same_type_p (TREE_TYPE (decl_parms),
3929 TREE_TYPE (clone_parms)));
3931 if (TREE_PURPOSE (decl_parms) && !TREE_PURPOSE (clone_parms))
3933 /* A default parameter has been added. Adjust the
3934 clone's parameters. */
3935 tree exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (clone));
3936 tree basetype = TYPE_METHOD_BASETYPE (TREE_TYPE (clone));
3939 clone_parms = orig_decl_parms;
3941 if (DECL_HAS_VTT_PARM_P (clone))
3943 clone_parms = tree_cons (TREE_PURPOSE (orig_clone_parms),
3944 TREE_VALUE (orig_clone_parms),
3946 TREE_TYPE (clone_parms) = TREE_TYPE (orig_clone_parms);
3948 type = build_method_type_directly (basetype,
3949 TREE_TYPE (TREE_TYPE (clone)),
3952 type = build_exception_variant (type, exceptions);
3953 TREE_TYPE (clone) = type;
3955 clone_parms = NULL_TREE;
3959 gcc_assert (!clone_parms);
3963 /* For each of the constructors and destructors in T, create an
3964 in-charge and not-in-charge variant. */
3967 clone_constructors_and_destructors (tree t)
3971 /* If for some reason we don't have a CLASSTYPE_METHOD_VEC, we bail
3973 if (!CLASSTYPE_METHOD_VEC (t))
3976 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
3977 clone_function_decl (OVL_CURRENT (fns), /*update_method_vec_p=*/1);
3978 for (fns = CLASSTYPE_DESTRUCTORS (t); fns; fns = OVL_NEXT (fns))
3979 clone_function_decl (OVL_CURRENT (fns), /*update_method_vec_p=*/1);
3982 /* Remove all zero-width bit-fields from T. */
3985 remove_zero_width_bit_fields (tree t)
3989 fieldsp = &TYPE_FIELDS (t);
3992 if (TREE_CODE (*fieldsp) == FIELD_DECL
3993 && DECL_C_BIT_FIELD (*fieldsp)
3994 && DECL_INITIAL (*fieldsp))
3995 *fieldsp = TREE_CHAIN (*fieldsp);
3997 fieldsp = &TREE_CHAIN (*fieldsp);
4001 /* Returns TRUE iff we need a cookie when dynamically allocating an
4002 array whose elements have the indicated class TYPE. */
4005 type_requires_array_cookie (tree type)
4008 bool has_two_argument_delete_p = false;
4010 gcc_assert (CLASS_TYPE_P (type));
4012 /* If there's a non-trivial destructor, we need a cookie. In order
4013 to iterate through the array calling the destructor for each
4014 element, we'll have to know how many elements there are. */
4015 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
4018 /* If the usual deallocation function is a two-argument whose second
4019 argument is of type `size_t', then we have to pass the size of
4020 the array to the deallocation function, so we will need to store
4022 fns = lookup_fnfields (TYPE_BINFO (type),
4023 ansi_opname (VEC_DELETE_EXPR),
4025 /* If there are no `operator []' members, or the lookup is
4026 ambiguous, then we don't need a cookie. */
4027 if (!fns || fns == error_mark_node)
4029 /* Loop through all of the functions. */
4030 for (fns = BASELINK_FUNCTIONS (fns); fns; fns = OVL_NEXT (fns))
4035 /* Select the current function. */
4036 fn = OVL_CURRENT (fns);
4037 /* See if this function is a one-argument delete function. If
4038 it is, then it will be the usual deallocation function. */
4039 second_parm = TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (fn)));
4040 if (second_parm == void_list_node)
4042 /* Otherwise, if we have a two-argument function and the second
4043 argument is `size_t', it will be the usual deallocation
4044 function -- unless there is one-argument function, too. */
4045 if (TREE_CHAIN (second_parm) == void_list_node
4046 && same_type_p (TREE_VALUE (second_parm), size_type_node))
4047 has_two_argument_delete_p = true;
4050 return has_two_argument_delete_p;
4053 /* Check the validity of the bases and members declared in T. Add any
4054 implicitly-generated functions (like copy-constructors and
4055 assignment operators). Compute various flag bits (like
4056 CLASSTYPE_NON_POD_T) for T. This routine works purely at the C++
4057 level: i.e., independently of the ABI in use. */
4060 check_bases_and_members (tree t)
4062 /* Nonzero if the implicitly generated copy constructor should take
4063 a non-const reference argument. */
4064 int cant_have_const_ctor;
4065 /* Nonzero if the implicitly generated assignment operator
4066 should take a non-const reference argument. */
4067 int no_const_asn_ref;
4070 /* By default, we use const reference arguments and generate default
4072 cant_have_const_ctor = 0;
4073 no_const_asn_ref = 0;
4075 /* Check all the base-classes. */
4076 check_bases (t, &cant_have_const_ctor,
4079 /* Check all the method declarations. */
4082 /* Check all the data member declarations. We cannot call
4083 check_field_decls until we have called check_bases check_methods,
4084 as check_field_decls depends on TYPE_HAS_NONTRIVIAL_DESTRUCTOR
4085 being set appropriately. */
4086 check_field_decls (t, &access_decls,
4087 &cant_have_const_ctor,
4090 /* A nearly-empty class has to be vptr-containing; a nearly empty
4091 class contains just a vptr. */
4092 if (!TYPE_CONTAINS_VPTR_P (t))
4093 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
4095 /* Do some bookkeeping that will guide the generation of implicitly
4096 declared member functions. */
4097 TYPE_HAS_COMPLEX_INIT_REF (t)
4098 |= (TYPE_HAS_INIT_REF (t) || TYPE_CONTAINS_VPTR_P (t));
4099 TYPE_NEEDS_CONSTRUCTING (t)
4100 |= (TYPE_HAS_CONSTRUCTOR (t) || TYPE_CONTAINS_VPTR_P (t));
4101 CLASSTYPE_NON_AGGREGATE (t)
4102 |= (TYPE_HAS_CONSTRUCTOR (t) || TYPE_POLYMORPHIC_P (t));
4103 CLASSTYPE_NON_POD_P (t)
4104 |= (CLASSTYPE_NON_AGGREGATE (t)
4105 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
4106 || TYPE_HAS_ASSIGN_REF (t));
4107 TYPE_HAS_COMPLEX_ASSIGN_REF (t)
4108 |= TYPE_HAS_ASSIGN_REF (t) || TYPE_CONTAINS_VPTR_P (t);
4110 /* Synthesize any needed methods. */
4111 add_implicitly_declared_members (t,
4112 cant_have_const_ctor,
4115 /* Create the in-charge and not-in-charge variants of constructors
4117 clone_constructors_and_destructors (t);
4119 /* Process the using-declarations. */
4120 for (; access_decls; access_decls = TREE_CHAIN (access_decls))
4121 handle_using_decl (TREE_VALUE (access_decls), t);
4123 /* Build and sort the CLASSTYPE_METHOD_VEC. */
4124 finish_struct_methods (t);
4126 /* Figure out whether or not we will need a cookie when dynamically
4127 allocating an array of this type. */
4128 TYPE_LANG_SPECIFIC (t)->u.c.vec_new_uses_cookie
4129 = type_requires_array_cookie (t);
4132 /* If T needs a pointer to its virtual function table, set TYPE_VFIELD
4133 accordingly. If a new vfield was created (because T doesn't have a
4134 primary base class), then the newly created field is returned. It
4135 is not added to the TYPE_FIELDS list; it is the caller's
4136 responsibility to do that. Accumulate declared virtual functions
4140 create_vtable_ptr (tree t, tree* virtuals_p)
4144 /* Collect the virtual functions declared in T. */
4145 for (fn = TYPE_METHODS (t); fn; fn = TREE_CHAIN (fn))
4146 if (DECL_VINDEX (fn) && !DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (fn)
4147 && TREE_CODE (DECL_VINDEX (fn)) != INTEGER_CST)
4149 tree new_virtual = make_node (TREE_LIST);
4151 BV_FN (new_virtual) = fn;
4152 BV_DELTA (new_virtual) = integer_zero_node;
4153 BV_VCALL_INDEX (new_virtual) = NULL_TREE;
4155 TREE_CHAIN (new_virtual) = *virtuals_p;
4156 *virtuals_p = new_virtual;
4159 /* If we couldn't find an appropriate base class, create a new field
4160 here. Even if there weren't any new virtual functions, we might need a
4161 new virtual function table if we're supposed to include vptrs in
4162 all classes that need them. */
4163 if (!TYPE_VFIELD (t) && (*virtuals_p || TYPE_CONTAINS_VPTR_P (t)))
4165 /* We build this decl with vtbl_ptr_type_node, which is a
4166 `vtable_entry_type*'. It might seem more precise to use
4167 `vtable_entry_type (*)[N]' where N is the number of virtual
4168 functions. However, that would require the vtable pointer in
4169 base classes to have a different type than the vtable pointer
4170 in derived classes. We could make that happen, but that
4171 still wouldn't solve all the problems. In particular, the
4172 type-based alias analysis code would decide that assignments
4173 to the base class vtable pointer can't alias assignments to
4174 the derived class vtable pointer, since they have different
4175 types. Thus, in a derived class destructor, where the base
4176 class constructor was inlined, we could generate bad code for
4177 setting up the vtable pointer.
4179 Therefore, we use one type for all vtable pointers. We still
4180 use a type-correct type; it's just doesn't indicate the array
4181 bounds. That's better than using `void*' or some such; it's
4182 cleaner, and it let's the alias analysis code know that these
4183 stores cannot alias stores to void*! */
4186 field = build_decl (FIELD_DECL, get_vfield_name (t), vtbl_ptr_type_node);
4187 DECL_VIRTUAL_P (field) = 1;
4188 DECL_ARTIFICIAL (field) = 1;
4189 DECL_FIELD_CONTEXT (field) = t;
4190 DECL_FCONTEXT (field) = t;
4192 TYPE_VFIELD (t) = field;
4194 /* This class is non-empty. */
4195 CLASSTYPE_EMPTY_P (t) = 0;
4203 /* Fixup the inline function given by INFO now that the class is
4207 fixup_pending_inline (tree fn)
4209 if (DECL_PENDING_INLINE_INFO (fn))
4211 tree args = DECL_ARGUMENTS (fn);
4214 DECL_CONTEXT (args) = fn;
4215 args = TREE_CHAIN (args);
4220 /* Fixup the inline methods and friends in TYPE now that TYPE is
4224 fixup_inline_methods (tree type)
4226 tree method = TYPE_METHODS (type);
4227 VEC(tree,gc) *friends;
4230 if (method && TREE_CODE (method) == TREE_VEC)
4232 if (TREE_VEC_ELT (method, 1))
4233 method = TREE_VEC_ELT (method, 1);
4234 else if (TREE_VEC_ELT (method, 0))
4235 method = TREE_VEC_ELT (method, 0);
4237 method = TREE_VEC_ELT (method, 2);
4240 /* Do inline member functions. */
4241 for (; method; method = TREE_CHAIN (method))
4242 fixup_pending_inline (method);
4245 for (friends = CLASSTYPE_INLINE_FRIENDS (type), ix = 0;
4246 VEC_iterate (tree, friends, ix, method); ix++)
4247 fixup_pending_inline (method);
4248 CLASSTYPE_INLINE_FRIENDS (type) = NULL;
4251 /* Add OFFSET to all base types of BINFO which is a base in the
4252 hierarchy dominated by T.
4254 OFFSET, which is a type offset, is number of bytes. */
4257 propagate_binfo_offsets (tree binfo, tree offset)
4263 /* Update BINFO's offset. */
4264 BINFO_OFFSET (binfo)
4265 = convert (sizetype,
4266 size_binop (PLUS_EXPR,
4267 convert (ssizetype, BINFO_OFFSET (binfo)),
4270 /* Find the primary base class. */
4271 primary_binfo = get_primary_binfo (binfo);
4273 if (primary_binfo && BINFO_INHERITANCE_CHAIN (primary_binfo) == binfo)
4274 propagate_binfo_offsets (primary_binfo, offset);
4276 /* Scan all of the bases, pushing the BINFO_OFFSET adjust
4278 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
4280 /* Don't do the primary base twice. */
4281 if (base_binfo == primary_binfo)
4284 if (BINFO_VIRTUAL_P (base_binfo))
4287 propagate_binfo_offsets (base_binfo, offset);
4291 /* Set BINFO_OFFSET for all of the virtual bases for RLI->T. Update
4292 TYPE_ALIGN and TYPE_SIZE for T. OFFSETS gives the location of
4293 empty subobjects of T. */
4296 layout_virtual_bases (record_layout_info rli, splay_tree offsets)
4300 bool first_vbase = true;
4303 if (BINFO_N_BASE_BINFOS (TYPE_BINFO (t)) == 0)
4306 if (!abi_version_at_least(2))
4308 /* In G++ 3.2, we incorrectly rounded the size before laying out
4309 the virtual bases. */
4310 finish_record_layout (rli, /*free_p=*/false);
4311 #ifdef STRUCTURE_SIZE_BOUNDARY
4312 /* Packed structures don't need to have minimum size. */
4313 if (! TYPE_PACKED (t))
4314 TYPE_ALIGN (t) = MAX (TYPE_ALIGN (t), (unsigned) STRUCTURE_SIZE_BOUNDARY);
4316 rli->offset = TYPE_SIZE_UNIT (t);
4317 rli->bitpos = bitsize_zero_node;
4318 rli->record_align = TYPE_ALIGN (t);
4321 /* Find the last field. The artificial fields created for virtual
4322 bases will go after the last extant field to date. */
4323 next_field = &TYPE_FIELDS (t);
4325 next_field = &TREE_CHAIN (*next_field);
4327 /* Go through the virtual bases, allocating space for each virtual
4328 base that is not already a primary base class. These are
4329 allocated in inheritance graph order. */
4330 for (vbase = TYPE_BINFO (t); vbase; vbase = TREE_CHAIN (vbase))
4332 if (!BINFO_VIRTUAL_P (vbase))
4335 if (!BINFO_PRIMARY_P (vbase))
4337 tree basetype = TREE_TYPE (vbase);
4339 /* This virtual base is not a primary base of any class in the
4340 hierarchy, so we have to add space for it. */
4341 next_field = build_base_field (rli, vbase,
4342 offsets, next_field);
4344 /* If the first virtual base might have been placed at a
4345 lower address, had we started from CLASSTYPE_SIZE, rather
4346 than TYPE_SIZE, issue a warning. There can be both false
4347 positives and false negatives from this warning in rare
4348 cases; to deal with all the possibilities would probably
4349 require performing both layout algorithms and comparing
4350 the results which is not particularly tractable. */
4354 (size_binop (CEIL_DIV_EXPR,
4355 round_up (CLASSTYPE_SIZE (t),
4356 CLASSTYPE_ALIGN (basetype)),
4358 BINFO_OFFSET (vbase))))
4360 "offset of virtual base %qT is not ABI-compliant and "
4361 "may change in a future version of GCC",
4364 first_vbase = false;
4369 /* Returns the offset of the byte just past the end of the base class
4373 end_of_base (tree binfo)
4377 if (is_empty_class (BINFO_TYPE (binfo)))
4378 /* An empty class has zero CLASSTYPE_SIZE_UNIT, but we need to
4379 allocate some space for it. It cannot have virtual bases, so
4380 TYPE_SIZE_UNIT is fine. */
4381 size = TYPE_SIZE_UNIT (BINFO_TYPE (binfo));
4383 size = CLASSTYPE_SIZE_UNIT (BINFO_TYPE (binfo));
4385 return size_binop (PLUS_EXPR, BINFO_OFFSET (binfo), size);
4388 /* Returns the offset of the byte just past the end of the base class
4389 with the highest offset in T. If INCLUDE_VIRTUALS_P is zero, then
4390 only non-virtual bases are included. */
4393 end_of_class (tree t, int include_virtuals_p)
4395 tree result = size_zero_node;
4396 VEC(tree,gc) *vbases;
4402 for (binfo = TYPE_BINFO (t), i = 0;
4403 BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
4405 if (!include_virtuals_p
4406 && BINFO_VIRTUAL_P (base_binfo)
4407 && (!BINFO_PRIMARY_P (base_binfo)
4408 || BINFO_INHERITANCE_CHAIN (base_binfo) != TYPE_BINFO (t)))
4411 offset = end_of_base (base_binfo);
4412 if (INT_CST_LT_UNSIGNED (result, offset))
4416 /* G++ 3.2 did not check indirect virtual bases. */
4417 if (abi_version_at_least (2) && include_virtuals_p)
4418 for (vbases = CLASSTYPE_VBASECLASSES (t), i = 0;
4419 VEC_iterate (tree, vbases, i, base_binfo); i++)
4421 offset = end_of_base (base_binfo);
4422 if (INT_CST_LT_UNSIGNED (result, offset))
4429 /* Warn about bases of T that are inaccessible because they are
4430 ambiguous. For example:
4433 struct T : public S {};
4434 struct U : public S, public T {};
4436 Here, `(S*) new U' is not allowed because there are two `S'
4440 warn_about_ambiguous_bases (tree t)
4443 VEC(tree,gc) *vbases;
4448 /* If there are no repeated bases, nothing can be ambiguous. */
4449 if (!CLASSTYPE_REPEATED_BASE_P (t))
4452 /* Check direct bases. */
4453 for (binfo = TYPE_BINFO (t), i = 0;
4454 BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
4456 basetype = BINFO_TYPE (base_binfo);
4458 if (!lookup_base (t, basetype, ba_unique | ba_quiet, NULL))
4459 warning (0, "direct base %qT inaccessible in %qT due to ambiguity",
4463 /* Check for ambiguous virtual bases. */
4465 for (vbases = CLASSTYPE_VBASECLASSES (t), i = 0;
4466 VEC_iterate (tree, vbases, i, binfo); i++)
4468 basetype = BINFO_TYPE (binfo);
4470 if (!lookup_base (t, basetype, ba_unique | ba_quiet, NULL))
4471 warning (OPT_Wextra, "virtual base %qT inaccessible in %qT due to ambiguity",
4476 /* Compare two INTEGER_CSTs K1 and K2. */
4479 splay_tree_compare_integer_csts (splay_tree_key k1, splay_tree_key k2)
4481 return tree_int_cst_compare ((tree) k1, (tree) k2);
4484 /* Increase the size indicated in RLI to account for empty classes
4485 that are "off the end" of the class. */
4488 include_empty_classes (record_layout_info rli)
4493 /* It might be the case that we grew the class to allocate a
4494 zero-sized base class. That won't be reflected in RLI, yet,
4495 because we are willing to overlay multiple bases at the same
4496 offset. However, now we need to make sure that RLI is big enough
4497 to reflect the entire class. */
4498 eoc = end_of_class (rli->t,
4499 CLASSTYPE_AS_BASE (rli->t) != NULL_TREE);
4500 rli_size = rli_size_unit_so_far (rli);
4501 if (TREE_CODE (rli_size) == INTEGER_CST
4502 && INT_CST_LT_UNSIGNED (rli_size, eoc))
4504 if (!abi_version_at_least (2))
4505 /* In version 1 of the ABI, the size of a class that ends with
4506 a bitfield was not rounded up to a whole multiple of a
4507 byte. Because rli_size_unit_so_far returns only the number
4508 of fully allocated bytes, any extra bits were not included
4510 rli->bitpos = round_down (rli->bitpos, BITS_PER_UNIT);
4512 /* The size should have been rounded to a whole byte. */
4513 gcc_assert (tree_int_cst_equal
4514 (rli->bitpos, round_down (rli->bitpos, BITS_PER_UNIT)));
4516 = size_binop (PLUS_EXPR,
4518 size_binop (MULT_EXPR,
4519 convert (bitsizetype,
4520 size_binop (MINUS_EXPR,
4522 bitsize_int (BITS_PER_UNIT)));
4523 normalize_rli (rli);
4527 /* Calculate the TYPE_SIZE, TYPE_ALIGN, etc for T. Calculate
4528 BINFO_OFFSETs for all of the base-classes. Position the vtable
4529 pointer. Accumulate declared virtual functions on VIRTUALS_P. */
4532 layout_class_type (tree t, tree *virtuals_p)
4534 tree non_static_data_members;
4537 record_layout_info rli;
4538 /* Maps offsets (represented as INTEGER_CSTs) to a TREE_LIST of
4539 types that appear at that offset. */
4540 splay_tree empty_base_offsets;
4541 /* True if the last field layed out was a bit-field. */
4542 bool last_field_was_bitfield = false;
4543 /* The location at which the next field should be inserted. */
4545 /* T, as a base class. */
4548 /* Keep track of the first non-static data member. */
4549 non_static_data_members = TYPE_FIELDS (t);
4551 /* Start laying out the record. */
4552 rli = start_record_layout (t);
4554 /* Mark all the primary bases in the hierarchy. */
4555 determine_primary_bases (t);
4557 /* Create a pointer to our virtual function table. */
4558 vptr = create_vtable_ptr (t, virtuals_p);
4560 /* The vptr is always the first thing in the class. */
4563 TREE_CHAIN (vptr) = TYPE_FIELDS (t);
4564 TYPE_FIELDS (t) = vptr;
4565 next_field = &TREE_CHAIN (vptr);
4566 place_field (rli, vptr);
4569 next_field = &TYPE_FIELDS (t);
4571 /* Build FIELD_DECLs for all of the non-virtual base-types. */
4572 empty_base_offsets = splay_tree_new (splay_tree_compare_integer_csts,
4574 build_base_fields (rli, empty_base_offsets, next_field);
4576 /* Layout the non-static data members. */
4577 for (field = non_static_data_members; field; field = TREE_CHAIN (field))
4582 /* We still pass things that aren't non-static data members to
4583 the back-end, in case it wants to do something with them. */
4584 if (TREE_CODE (field) != FIELD_DECL)
4586 place_field (rli, field);
4587 /* If the static data member has incomplete type, keep track
4588 of it so that it can be completed later. (The handling
4589 of pending statics in finish_record_layout is
4590 insufficient; consider:
4593 struct S2 { static S1 s1; };
4595 At this point, finish_record_layout will be called, but
4596 S1 is still incomplete.) */
4597 if (TREE_CODE (field) == VAR_DECL)
4599 maybe_register_incomplete_var (field);
4600 /* The visibility of static data members is determined
4601 at their point of declaration, not their point of
4603 determine_visibility (field);
4608 type = TREE_TYPE (field);
4609 if (type == error_mark_node)
4612 padding = NULL_TREE;
4614 /* If this field is a bit-field whose width is greater than its
4615 type, then there are some special rules for allocating
4617 if (DECL_C_BIT_FIELD (field)
4618 && INT_CST_LT (TYPE_SIZE (type), DECL_SIZE (field)))
4620 integer_type_kind itk;
4622 bool was_unnamed_p = false;
4623 /* We must allocate the bits as if suitably aligned for the
4624 longest integer type that fits in this many bits. type
4625 of the field. Then, we are supposed to use the left over
4626 bits as additional padding. */
4627 for (itk = itk_char; itk != itk_none; ++itk)
4628 if (INT_CST_LT (DECL_SIZE (field),
4629 TYPE_SIZE (integer_types[itk])))
4632 /* ITK now indicates a type that is too large for the
4633 field. We have to back up by one to find the largest
4635 integer_type = integer_types[itk - 1];
4637 /* Figure out how much additional padding is required. GCC
4638 3.2 always created a padding field, even if it had zero
4640 if (!abi_version_at_least (2)
4641 || INT_CST_LT (TYPE_SIZE (integer_type), DECL_SIZE (field)))
4643 if (abi_version_at_least (2) && TREE_CODE (t) == UNION_TYPE)
4644 /* In a union, the padding field must have the full width
4645 of the bit-field; all fields start at offset zero. */
4646 padding = DECL_SIZE (field);
4649 if (TREE_CODE (t) == UNION_TYPE)
4650 warning (OPT_Wabi, "size assigned to %qT may not be "
4651 "ABI-compliant and may change in a future "
4654 padding = size_binop (MINUS_EXPR, DECL_SIZE (field),
4655 TYPE_SIZE (integer_type));
4658 #ifdef PCC_BITFIELD_TYPE_MATTERS
4659 /* An unnamed bitfield does not normally affect the
4660 alignment of the containing class on a target where
4661 PCC_BITFIELD_TYPE_MATTERS. But, the C++ ABI does not
4662 make any exceptions for unnamed bitfields when the
4663 bitfields are longer than their types. Therefore, we
4664 temporarily give the field a name. */
4665 if (PCC_BITFIELD_TYPE_MATTERS && !DECL_NAME (field))
4667 was_unnamed_p = true;
4668 DECL_NAME (field) = make_anon_name ();
4671 DECL_SIZE (field) = TYPE_SIZE (integer_type);
4672 DECL_ALIGN (field) = TYPE_ALIGN (integer_type);
4673 DECL_USER_ALIGN (field) = TYPE_USER_ALIGN (integer_type);
4674 layout_nonempty_base_or_field (rli, field, NULL_TREE,
4675 empty_base_offsets);
4677 DECL_NAME (field) = NULL_TREE;
4678 /* Now that layout has been performed, set the size of the
4679 field to the size of its declared type; the rest of the
4680 field is effectively invisible. */
4681 DECL_SIZE (field) = TYPE_SIZE (type);
4682 /* We must also reset the DECL_MODE of the field. */
4683 if (abi_version_at_least (2))
4684 DECL_MODE (field) = TYPE_MODE (type);
4686 && DECL_MODE (field) != TYPE_MODE (type))
4687 /* Versions of G++ before G++ 3.4 did not reset the
4690 "the offset of %qD may not be ABI-compliant and may "
4691 "change in a future version of GCC", field);
4694 layout_nonempty_base_or_field (rli, field, NULL_TREE,
4695 empty_base_offsets);
4697 /* Remember the location of any empty classes in FIELD. */
4698 if (abi_version_at_least (2))
4699 record_subobject_offsets (TREE_TYPE (field),
4700 byte_position(field),
4702 /*is_data_member=*/true);
4704 /* If a bit-field does not immediately follow another bit-field,
4705 and yet it starts in the middle of a byte, we have failed to
4706 comply with the ABI. */
4708 && DECL_C_BIT_FIELD (field)
4709 /* The TREE_NO_WARNING flag gets set by Objective-C when
4710 laying out an Objective-C class. The ObjC ABI differs
4711 from the C++ ABI, and so we do not want a warning
4713 && !TREE_NO_WARNING (field)
4714 && !last_field_was_bitfield
4715 && !integer_zerop (size_binop (TRUNC_MOD_EXPR,
4716 DECL_FIELD_BIT_OFFSET (field),
4717 bitsize_unit_node)))
4718 warning (OPT_Wabi, "offset of %q+D is not ABI-compliant and may "
4719 "change in a future version of GCC", field);
4721 /* G++ used to use DECL_FIELD_OFFSET as if it were the byte
4722 offset of the field. */
4724 && !tree_int_cst_equal (DECL_FIELD_OFFSET (field),
4725 byte_position (field))
4726 && contains_empty_class_p (TREE_TYPE (field)))
4727 warning (OPT_Wabi, "%q+D contains empty classes which may cause base "
4728 "classes to be placed at different locations in a "
4729 "future version of GCC", field);
4731 /* The middle end uses the type of expressions to determine the
4732 possible range of expression values. In order to optimize
4733 "x.i > 7" to "false" for a 2-bit bitfield "i", the middle end
4734 must be made aware of the width of "i", via its type.
4736 Because C++ does not have integer types of arbitrary width,
4737 we must (for the purposes of the front end) convert from the
4738 type assigned here to the declared type of the bitfield
4739 whenever a bitfield expression is used as an rvalue.
4740 Similarly, when assigning a value to a bitfield, the value
4741 must be converted to the type given the bitfield here. */
4742 if (DECL_C_BIT_FIELD (field))
4745 unsigned HOST_WIDE_INT width;
4746 ftype = TREE_TYPE (field);
4747 width = tree_low_cst (DECL_SIZE (field), /*unsignedp=*/1);
4748 if (width != TYPE_PRECISION (ftype))
4750 = c_build_bitfield_integer_type (width,
4751 TYPE_UNSIGNED (ftype));
4754 /* If we needed additional padding after this field, add it
4760 padding_field = build_decl (FIELD_DECL,
4763 DECL_BIT_FIELD (padding_field) = 1;
4764 DECL_SIZE (padding_field) = padding;
4765 DECL_CONTEXT (padding_field) = t;
4766 DECL_ARTIFICIAL (padding_field) = 1;
4767 DECL_IGNORED_P (padding_field) = 1;
4768 layout_nonempty_base_or_field (rli, padding_field,
4770 empty_base_offsets);
4773 last_field_was_bitfield = DECL_C_BIT_FIELD (field);
4776 if (abi_version_at_least (2) && !integer_zerop (rli->bitpos))
4778 /* Make sure that we are on a byte boundary so that the size of
4779 the class without virtual bases will always be a round number
4781 rli->bitpos = round_up (rli->bitpos, BITS_PER_UNIT);
4782 normalize_rli (rli);
4785 /* G++ 3.2 does not allow virtual bases to be overlaid with tail
4787 if (!abi_version_at_least (2))
4788 include_empty_classes(rli);
4790 /* Delete all zero-width bit-fields from the list of fields. Now
4791 that the type is laid out they are no longer important. */
4792 remove_zero_width_bit_fields (t);
4794 /* Create the version of T used for virtual bases. We do not use
4795 make_aggr_type for this version; this is an artificial type. For
4796 a POD type, we just reuse T. */
4797 if (CLASSTYPE_NON_POD_P (t) || CLASSTYPE_EMPTY_P (t))
4799 base_t = make_node (TREE_CODE (t));
4801 /* Set the size and alignment for the new type. In G++ 3.2, all
4802 empty classes were considered to have size zero when used as
4804 if (!abi_version_at_least (2) && CLASSTYPE_EMPTY_P (t))
4806 TYPE_SIZE (base_t) = bitsize_zero_node;
4807 TYPE_SIZE_UNIT (base_t) = size_zero_node;
4808 if (warn_abi && !integer_zerop (rli_size_unit_so_far (rli)))
4810 "layout of classes derived from empty class %qT "
4811 "may change in a future version of GCC",
4818 /* If the ABI version is not at least two, and the last
4819 field was a bit-field, RLI may not be on a byte
4820 boundary. In particular, rli_size_unit_so_far might
4821 indicate the last complete byte, while rli_size_so_far
4822 indicates the total number of bits used. Therefore,
4823 rli_size_so_far, rather than rli_size_unit_so_far, is
4824 used to compute TYPE_SIZE_UNIT. */
4825 eoc = end_of_class (t, /*include_virtuals_p=*/0);
4826 TYPE_SIZE_UNIT (base_t)
4827 = size_binop (MAX_EXPR,
4829 size_binop (CEIL_DIV_EXPR,
4830 rli_size_so_far (rli),
4831 bitsize_int (BITS_PER_UNIT))),
4834 = size_binop (MAX_EXPR,
4835 rli_size_so_far (rli),
4836 size_binop (MULT_EXPR,
4837 convert (bitsizetype, eoc),
4838 bitsize_int (BITS_PER_UNIT)));
4840 TYPE_ALIGN (base_t) = rli->record_align;
4841 TYPE_USER_ALIGN (base_t) = TYPE_USER_ALIGN (t);
4843 /* Copy the fields from T. */
4844 next_field = &TYPE_FIELDS (base_t);
4845 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
4846 if (TREE_CODE (field) == FIELD_DECL)
4848 *next_field = build_decl (FIELD_DECL,
4851 DECL_CONTEXT (*next_field) = base_t;
4852 DECL_FIELD_OFFSET (*next_field) = DECL_FIELD_OFFSET (field);
4853 DECL_FIELD_BIT_OFFSET (*next_field)
4854 = DECL_FIELD_BIT_OFFSET (field);
4855 DECL_SIZE (*next_field) = DECL_SIZE (field);
4856 DECL_MODE (*next_field) = DECL_MODE (field);
4857 next_field = &TREE_CHAIN (*next_field);
4860 /* Record the base version of the type. */
4861 CLASSTYPE_AS_BASE (t) = base_t;
4862 TYPE_CONTEXT (base_t) = t;
4865 CLASSTYPE_AS_BASE (t) = t;
4867 /* Every empty class contains an empty class. */
4868 if (CLASSTYPE_EMPTY_P (t))
4869 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) = 1;
4871 /* Set the TYPE_DECL for this type to contain the right
4872 value for DECL_OFFSET, so that we can use it as part
4873 of a COMPONENT_REF for multiple inheritance. */
4874 layout_decl (TYPE_MAIN_DECL (t), 0);
4876 /* Now fix up any virtual base class types that we left lying
4877 around. We must get these done before we try to lay out the
4878 virtual function table. As a side-effect, this will remove the
4879 base subobject fields. */
4880 layout_virtual_bases (rli, empty_base_offsets);
4882 /* Make sure that empty classes are reflected in RLI at this
4884 include_empty_classes(rli);
4886 /* Make sure not to create any structures with zero size. */
4887 if (integer_zerop (rli_size_unit_so_far (rli)) && CLASSTYPE_EMPTY_P (t))
4889 build_decl (FIELD_DECL, NULL_TREE, char_type_node));
4891 /* Let the back-end lay out the type. */
4892 finish_record_layout (rli, /*free_p=*/true);
4894 /* Warn about bases that can't be talked about due to ambiguity. */
4895 warn_about_ambiguous_bases (t);
4897 /* Now that we're done with layout, give the base fields the real types. */
4898 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
4899 if (DECL_ARTIFICIAL (field) && IS_FAKE_BASE_TYPE (TREE_TYPE (field)))
4900 TREE_TYPE (field) = TYPE_CONTEXT (TREE_TYPE (field));
4903 splay_tree_delete (empty_base_offsets);
4905 if (CLASSTYPE_EMPTY_P (t)
4906 && tree_int_cst_lt (sizeof_biggest_empty_class,
4907 TYPE_SIZE_UNIT (t)))
4908 sizeof_biggest_empty_class = TYPE_SIZE_UNIT (t);
4911 /* Determine the "key method" for the class type indicated by TYPE,
4912 and set CLASSTYPE_KEY_METHOD accordingly. */
4915 determine_key_method (tree type)
4919 if (TYPE_FOR_JAVA (type)
4920 || processing_template_decl
4921 || CLASSTYPE_TEMPLATE_INSTANTIATION (type)
4922 || CLASSTYPE_INTERFACE_KNOWN (type))
4925 /* The key method is the first non-pure virtual function that is not
4926 inline at the point of class definition. On some targets the
4927 key function may not be inline; those targets should not call
4928 this function until the end of the translation unit. */
4929 for (method = TYPE_METHODS (type); method != NULL_TREE;
4930 method = TREE_CHAIN (method))
4931 if (DECL_VINDEX (method) != NULL_TREE
4932 && ! DECL_DECLARED_INLINE_P (method)
4933 && ! DECL_PURE_VIRTUAL_P (method))
4935 CLASSTYPE_KEY_METHOD (type) = method;
4942 /* Perform processing required when the definition of T (a class type)
4946 finish_struct_1 (tree t)
4949 /* A TREE_LIST. The TREE_VALUE of each node is a FUNCTION_DECL. */
4950 tree virtuals = NULL_TREE;
4953 if (COMPLETE_TYPE_P (t))
4955 gcc_assert (IS_AGGR_TYPE (t));
4956 error ("redefinition of %q#T", t);
4961 /* If this type was previously laid out as a forward reference,
4962 make sure we lay it out again. */
4963 TYPE_SIZE (t) = NULL_TREE;
4964 CLASSTYPE_PRIMARY_BINFO (t) = NULL_TREE;
4966 fixup_inline_methods (t);
4968 /* Make assumptions about the class; we'll reset the flags if
4970 CLASSTYPE_EMPTY_P (t) = 1;
4971 CLASSTYPE_NEARLY_EMPTY_P (t) = 1;
4972 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) = 0;
4974 /* Do end-of-class semantic processing: checking the validity of the
4975 bases and members and add implicitly generated methods. */
4976 check_bases_and_members (t);
4978 /* Find the key method. */
4979 if (TYPE_CONTAINS_VPTR_P (t))
4981 /* The Itanium C++ ABI permits the key method to be chosen when
4982 the class is defined -- even though the key method so
4983 selected may later turn out to be an inline function. On
4984 some systems (such as ARM Symbian OS) the key method cannot
4985 be determined until the end of the translation unit. On such
4986 systems, we leave CLASSTYPE_KEY_METHOD set to NULL, which
4987 will cause the class to be added to KEYED_CLASSES. Then, in
4988 finish_file we will determine the key method. */
4989 if (targetm.cxx.key_method_may_be_inline ())
4990 determine_key_method (t);
4992 /* If a polymorphic class has no key method, we may emit the vtable
4993 in every translation unit where the class definition appears. */
4994 if (CLASSTYPE_KEY_METHOD (t) == NULL_TREE)
4995 keyed_classes = tree_cons (NULL_TREE, t, keyed_classes);
4998 /* Layout the class itself. */
4999 layout_class_type (t, &virtuals);
5000 if (CLASSTYPE_AS_BASE (t) != t)
5001 /* We use the base type for trivial assignments, and hence it
5003 compute_record_mode (CLASSTYPE_AS_BASE (t));
5005 virtuals = modify_all_vtables (t, nreverse (virtuals));
5007 /* If necessary, create the primary vtable for this class. */
5008 if (virtuals || TYPE_CONTAINS_VPTR_P (t))
5010 /* We must enter these virtuals into the table. */
5011 if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t))
5012 build_primary_vtable (NULL_TREE, t);
5013 else if (! BINFO_NEW_VTABLE_MARKED (TYPE_BINFO (t)))
5014 /* Here we know enough to change the type of our virtual
5015 function table, but we will wait until later this function. */
5016 build_primary_vtable (CLASSTYPE_PRIMARY_BINFO (t), t);
5019 if (TYPE_CONTAINS_VPTR_P (t))
5024 if (BINFO_VTABLE (TYPE_BINFO (t)))
5025 gcc_assert (DECL_VIRTUAL_P (BINFO_VTABLE (TYPE_BINFO (t))));
5026 if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t))
5027 gcc_assert (BINFO_VIRTUALS (TYPE_BINFO (t)) == NULL_TREE);
5029 /* Add entries for virtual functions introduced by this class. */
5030 BINFO_VIRTUALS (TYPE_BINFO (t))
5031 = chainon (BINFO_VIRTUALS (TYPE_BINFO (t)), virtuals);
5033 /* Set DECL_VINDEX for all functions declared in this class. */
5034 for (vindex = 0, fn = BINFO_VIRTUALS (TYPE_BINFO (t));
5036 fn = TREE_CHAIN (fn),
5037 vindex += (TARGET_VTABLE_USES_DESCRIPTORS
5038 ? TARGET_VTABLE_USES_DESCRIPTORS : 1))
5040 tree fndecl = BV_FN (fn);
5042 if (DECL_THUNK_P (fndecl))
5043 /* A thunk. We should never be calling this entry directly
5044 from this vtable -- we'd use the entry for the non
5045 thunk base function. */
5046 DECL_VINDEX (fndecl) = NULL_TREE;
5047 else if (TREE_CODE (DECL_VINDEX (fndecl)) != INTEGER_CST)
5048 DECL_VINDEX (fndecl) = build_int_cst (NULL_TREE, vindex);
5052 finish_struct_bits (t);
5054 /* Complete the rtl for any static member objects of the type we're
5056 for (x = TYPE_FIELDS (t); x; x = TREE_CHAIN (x))
5057 if (TREE_CODE (x) == VAR_DECL && TREE_STATIC (x)
5058 && TREE_TYPE (x) != error_mark_node
5059 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (x)), t))
5060 DECL_MODE (x) = TYPE_MODE (t);
5062 /* Done with FIELDS...now decide whether to sort these for
5063 faster lookups later.
5065 We use a small number because most searches fail (succeeding
5066 ultimately as the search bores through the inheritance
5067 hierarchy), and we want this failure to occur quickly. */
5069 n_fields = count_fields (TYPE_FIELDS (t));
5072 struct sorted_fields_type *field_vec = GGC_NEWVAR
5073 (struct sorted_fields_type,
5074 sizeof (struct sorted_fields_type) + n_fields * sizeof (tree));
5075 field_vec->len = n_fields;
5076 add_fields_to_record_type (TYPE_FIELDS (t), field_vec, 0);
5077 qsort (field_vec->elts, n_fields, sizeof (tree),
5079 if (! DECL_LANG_SPECIFIC (TYPE_MAIN_DECL (t)))
5080 retrofit_lang_decl (TYPE_MAIN_DECL (t));
5081 DECL_SORTED_FIELDS (TYPE_MAIN_DECL (t)) = field_vec;
5084 /* Complain if one of the field types requires lower visibility. */
5085 constrain_class_visibility (t);
5087 /* Make the rtl for any new vtables we have created, and unmark
5088 the base types we marked. */
5091 /* Build the VTT for T. */
5094 /* This warning does not make sense for Java classes, since they
5095 cannot have destructors. */
5096 if (!TYPE_FOR_JAVA (t) && warn_nonvdtor && TYPE_POLYMORPHIC_P (t))
5100 dtor = CLASSTYPE_DESTRUCTORS (t);
5101 /* Warn only if the dtor is non-private or the class has
5103 if (/* An implicitly declared destructor is always public. And,
5104 if it were virtual, we would have created it by now. */
5106 || (!DECL_VINDEX (dtor)
5107 && (!TREE_PRIVATE (dtor)
5108 || CLASSTYPE_FRIEND_CLASSES (t)
5109 || DECL_FRIENDLIST (TYPE_MAIN_DECL (t)))))
5110 warning (0, "%q#T has virtual functions but non-virtual destructor",
5116 if (warn_overloaded_virtual)
5119 /* Class layout, assignment of virtual table slots, etc., is now
5120 complete. Give the back end a chance to tweak the visibility of
5121 the class or perform any other required target modifications. */
5122 targetm.cxx.adjust_class_at_definition (t);
5124 maybe_suppress_debug_info (t);
5126 dump_class_hierarchy (t);
5128 /* Finish debugging output for this type. */
5129 rest_of_type_compilation (t, ! LOCAL_CLASS_P (t));
5132 /* When T was built up, the member declarations were added in reverse
5133 order. Rearrange them to declaration order. */
5136 unreverse_member_declarations (tree t)
5142 /* The following lists are all in reverse order. Put them in
5143 declaration order now. */
5144 TYPE_METHODS (t) = nreverse (TYPE_METHODS (t));
5145 CLASSTYPE_DECL_LIST (t) = nreverse (CLASSTYPE_DECL_LIST (t));
5147 /* Actually, for the TYPE_FIELDS, only the non TYPE_DECLs are in
5148 reverse order, so we can't just use nreverse. */
5150 for (x = TYPE_FIELDS (t);
5151 x && TREE_CODE (x) != TYPE_DECL;
5154 next = TREE_CHAIN (x);
5155 TREE_CHAIN (x) = prev;
5160 TREE_CHAIN (TYPE_FIELDS (t)) = x;
5162 TYPE_FIELDS (t) = prev;
5167 finish_struct (tree t, tree attributes)
5169 location_t saved_loc = input_location;
5171 /* Now that we've got all the field declarations, reverse everything
5173 unreverse_member_declarations (t);
5175 cplus_decl_attributes (&t, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
5177 /* Nadger the current location so that diagnostics point to the start of
5178 the struct, not the end. */
5179 input_location = DECL_SOURCE_LOCATION (TYPE_NAME (t));
5181 if (processing_template_decl)
5185 finish_struct_methods (t);
5186 TYPE_SIZE (t) = bitsize_zero_node;
5187 TYPE_SIZE_UNIT (t) = size_zero_node;
5189 /* We need to emit an error message if this type was used as a parameter
5190 and it is an abstract type, even if it is a template. We construct
5191 a simple CLASSTYPE_PURE_VIRTUALS list without taking bases into
5192 account and we call complete_vars with this type, which will check
5193 the PARM_DECLS. Note that while the type is being defined,
5194 CLASSTYPE_PURE_VIRTUALS contains the list of the inline friends
5195 (see CLASSTYPE_INLINE_FRIENDS) so we need to clear it. */
5196 CLASSTYPE_PURE_VIRTUALS (t) = NULL;
5197 for (x = TYPE_METHODS (t); x; x = TREE_CHAIN (x))
5198 if (DECL_PURE_VIRTUAL_P (x))
5199 VEC_safe_push (tree, gc, CLASSTYPE_PURE_VIRTUALS (t), x);
5203 finish_struct_1 (t);
5205 input_location = saved_loc;
5207 TYPE_BEING_DEFINED (t) = 0;
5209 if (current_class_type)
5212 error ("trying to finish struct, but kicked out due to previous parse errors");
5214 if (processing_template_decl && at_function_scope_p ())
5215 add_stmt (build_min (TAG_DEFN, t));
5220 /* Return the dynamic type of INSTANCE, if known.
5221 Used to determine whether the virtual function table is needed
5224 *NONNULL is set iff INSTANCE can be known to be nonnull, regardless
5225 of our knowledge of its type. *NONNULL should be initialized
5226 before this function is called. */
5229 fixed_type_or_null (tree instance, int* nonnull, int* cdtorp)
5231 switch (TREE_CODE (instance))
5234 if (POINTER_TYPE_P (TREE_TYPE (instance)))
5237 return fixed_type_or_null (TREE_OPERAND (instance, 0),
5241 /* This is a call to a constructor, hence it's never zero. */
5242 if (TREE_HAS_CONSTRUCTOR (instance))
5246 return TREE_TYPE (instance);
5251 /* This is a call to a constructor, hence it's never zero. */
5252 if (TREE_HAS_CONSTRUCTOR (instance))
5256 return TREE_TYPE (instance);
5258 return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull, cdtorp);
5262 if (TREE_CODE (TREE_OPERAND (instance, 0)) == ADDR_EXPR)
5263 return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull, cdtorp);
5264 if (TREE_CODE (TREE_OPERAND (instance, 1)) == INTEGER_CST)
5265 /* Propagate nonnull. */
5266 return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull, cdtorp);
5271 return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull, cdtorp);
5274 instance = TREE_OPERAND (instance, 0);
5277 /* Just because we see an ADDR_EXPR doesn't mean we're dealing
5278 with a real object -- given &p->f, p can still be null. */
5279 tree t = get_base_address (instance);
5280 /* ??? Probably should check DECL_WEAK here. */
5281 if (t && DECL_P (t))
5284 return fixed_type_or_null (instance, nonnull, cdtorp);
5287 /* If this component is really a base class reference, then the field
5288 itself isn't definitive. */
5289 if (DECL_FIELD_IS_BASE (TREE_OPERAND (instance, 1)))
5290 return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull, cdtorp);
5291 return fixed_type_or_null (TREE_OPERAND (instance, 1), nonnull, cdtorp);
5295 if (TREE_CODE (TREE_TYPE (instance)) == ARRAY_TYPE
5296 && IS_AGGR_TYPE (TREE_TYPE (TREE_TYPE (instance))))
5300 return TREE_TYPE (TREE_TYPE (instance));
5302 /* fall through... */
5306 if (IS_AGGR_TYPE (TREE_TYPE (instance)))
5310 return TREE_TYPE (instance);
5312 else if (instance == current_class_ptr)
5317 /* if we're in a ctor or dtor, we know our type. */
5318 if (DECL_LANG_SPECIFIC (current_function_decl)
5319 && (DECL_CONSTRUCTOR_P (current_function_decl)
5320 || DECL_DESTRUCTOR_P (current_function_decl)))
5324 return TREE_TYPE (TREE_TYPE (instance));
5327 else if (TREE_CODE (TREE_TYPE (instance)) == REFERENCE_TYPE)
5329 /* Reference variables should be references to objects. */
5333 /* DECL_VAR_MARKED_P is used to prevent recursion; a
5334 variable's initializer may refer to the variable
5336 if (TREE_CODE (instance) == VAR_DECL
5337 && DECL_INITIAL (instance)
5338 && !DECL_VAR_MARKED_P (instance))
5341 DECL_VAR_MARKED_P (instance) = 1;
5342 type = fixed_type_or_null (DECL_INITIAL (instance),
5344 DECL_VAR_MARKED_P (instance) = 0;
5355 /* Return nonzero if the dynamic type of INSTANCE is known, and
5356 equivalent to the static type. We also handle the case where
5357 INSTANCE is really a pointer. Return negative if this is a
5358 ctor/dtor. There the dynamic type is known, but this might not be
5359 the most derived base of the original object, and hence virtual
5360 bases may not be layed out according to this type.
5362 Used to determine whether the virtual function table is needed
5365 *NONNULL is set iff INSTANCE can be known to be nonnull, regardless
5366 of our knowledge of its type. *NONNULL should be initialized
5367 before this function is called. */
5370 resolves_to_fixed_type_p (tree instance, int* nonnull)
5372 tree t = TREE_TYPE (instance);
5375 tree fixed = fixed_type_or_null (instance, nonnull, &cdtorp);
5376 if (fixed == NULL_TREE)
5378 if (POINTER_TYPE_P (t))
5380 if (!same_type_ignoring_top_level_qualifiers_p (t, fixed))
5382 return cdtorp ? -1 : 1;
5387 init_class_processing (void)
5389 current_class_depth = 0;
5390 current_class_stack_size = 10;
5392 = XNEWVEC (struct class_stack_node, current_class_stack_size);
5393 local_classes = VEC_alloc (tree, gc, 8);
5394 sizeof_biggest_empty_class = size_zero_node;
5396 ridpointers[(int) RID_PUBLIC] = access_public_node;
5397 ridpointers[(int) RID_PRIVATE] = access_private_node;
5398 ridpointers[(int) RID_PROTECTED] = access_protected_node;
5401 /* Restore the cached PREVIOUS_CLASS_LEVEL. */
5404 restore_class_cache (void)
5408 /* We are re-entering the same class we just left, so we don't
5409 have to search the whole inheritance matrix to find all the
5410 decls to bind again. Instead, we install the cached
5411 class_shadowed list and walk through it binding names. */
5412 push_binding_level (previous_class_level);
5413 class_binding_level = previous_class_level;
5414 /* Restore IDENTIFIER_TYPE_VALUE. */
5415 for (type = class_binding_level->type_shadowed;
5417 type = TREE_CHAIN (type))
5418 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (type), TREE_TYPE (type));
5421 /* Set global variables CURRENT_CLASS_NAME and CURRENT_CLASS_TYPE as
5422 appropriate for TYPE.
5424 So that we may avoid calls to lookup_name, we cache the _TYPE
5425 nodes of local TYPE_DECLs in the TREE_TYPE field of the name.
5427 For multiple inheritance, we perform a two-pass depth-first search
5428 of the type lattice. */
5431 pushclass (tree type)
5433 class_stack_node_t csn;
5435 type = TYPE_MAIN_VARIANT (type);
5437 /* Make sure there is enough room for the new entry on the stack. */
5438 if (current_class_depth + 1 >= current_class_stack_size)
5440 current_class_stack_size *= 2;
5442 = XRESIZEVEC (struct class_stack_node, current_class_stack,
5443 current_class_stack_size);
5446 /* Insert a new entry on the class stack. */
5447 csn = current_class_stack + current_class_depth;
5448 csn->name = current_class_name;
5449 csn->type = current_class_type;
5450 csn->access = current_access_specifier;
5451 csn->names_used = 0;
5453 current_class_depth++;
5455 /* Now set up the new type. */
5456 current_class_name = TYPE_NAME (type);
5457 if (TREE_CODE (current_class_name) == TYPE_DECL)
5458 current_class_name = DECL_NAME (current_class_name);
5459 current_class_type = type;
5461 /* By default, things in classes are private, while things in
5462 structures or unions are public. */
5463 current_access_specifier = (CLASSTYPE_DECLARED_CLASS (type)
5464 ? access_private_node
5465 : access_public_node);
5467 if (previous_class_level
5468 && type != previous_class_level->this_entity
5469 && current_class_depth == 1)
5471 /* Forcibly remove any old class remnants. */
5472 invalidate_class_lookup_cache ();
5475 if (!previous_class_level
5476 || type != previous_class_level->this_entity
5477 || current_class_depth > 1)
5480 restore_class_cache ();
5483 /* When we exit a toplevel class scope, we save its binding level so
5484 that we can restore it quickly. Here, we've entered some other
5485 class, so we must invalidate our cache. */
5488 invalidate_class_lookup_cache (void)
5490 previous_class_level = NULL;
5493 /* Get out of the current class scope. If we were in a class scope
5494 previously, that is the one popped to. */
5501 current_class_depth--;
5502 current_class_name = current_class_stack[current_class_depth].name;
5503 current_class_type = current_class_stack[current_class_depth].type;
5504 current_access_specifier = current_class_stack[current_class_depth].access;
5505 if (current_class_stack[current_class_depth].names_used)
5506 splay_tree_delete (current_class_stack[current_class_depth].names_used);
5509 /* Mark the top of the class stack as hidden. */
5512 push_class_stack (void)
5514 if (current_class_depth)
5515 ++current_class_stack[current_class_depth - 1].hidden;
5518 /* Mark the top of the class stack as un-hidden. */
5521 pop_class_stack (void)
5523 if (current_class_depth)
5524 --current_class_stack[current_class_depth - 1].hidden;
5527 /* Returns 1 if the class type currently being defined is either T or
5528 a nested type of T. */
5531 currently_open_class (tree t)
5535 /* We start looking from 1 because entry 0 is from global scope,
5537 for (i = current_class_depth; i > 0; --i)
5540 if (i == current_class_depth)
5541 c = current_class_type;
5544 if (current_class_stack[i].hidden)
5546 c = current_class_stack[i].type;
5550 if (same_type_p (c, t))
5556 /* If either current_class_type or one of its enclosing classes are derived
5557 from T, return the appropriate type. Used to determine how we found
5558 something via unqualified lookup. */
5561 currently_open_derived_class (tree t)
5565 /* The bases of a dependent type are unknown. */
5566 if (dependent_type_p (t))
5569 if (!current_class_type)
5572 if (DERIVED_FROM_P (t, current_class_type))
5573 return current_class_type;
5575 for (i = current_class_depth - 1; i > 0; --i)
5577 if (current_class_stack[i].hidden)
5579 if (DERIVED_FROM_P (t, current_class_stack[i].type))
5580 return current_class_stack[i].type;
5586 /* When entering a class scope, all enclosing class scopes' names with
5587 static meaning (static variables, static functions, types and
5588 enumerators) have to be visible. This recursive function calls
5589 pushclass for all enclosing class contexts until global or a local
5590 scope is reached. TYPE is the enclosed class. */
5593 push_nested_class (tree type)
5597 /* A namespace might be passed in error cases, like A::B:C. */
5598 if (type == NULL_TREE
5599 || type == error_mark_node
5600 || TREE_CODE (type) == NAMESPACE_DECL
5601 || ! IS_AGGR_TYPE (type)
5602 || TREE_CODE (type) == TEMPLATE_TYPE_PARM
5603 || TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
5606 context = DECL_CONTEXT (TYPE_MAIN_DECL (type));
5608 if (context && CLASS_TYPE_P (context))
5609 push_nested_class (context);
5613 /* Undoes a push_nested_class call. */
5616 pop_nested_class (void)
5618 tree context = DECL_CONTEXT (TYPE_MAIN_DECL (current_class_type));
5621 if (context && CLASS_TYPE_P (context))
5622 pop_nested_class ();
5625 /* Returns the number of extern "LANG" blocks we are nested within. */
5628 current_lang_depth (void)
5630 return VEC_length (tree, current_lang_base);
5633 /* Set global variables CURRENT_LANG_NAME to appropriate value
5634 so that behavior of name-mangling machinery is correct. */
5637 push_lang_context (tree name)
5639 VEC_safe_push (tree, gc, current_lang_base, current_lang_name);
5641 if (name == lang_name_cplusplus)
5643 current_lang_name = name;
5645 else if (name == lang_name_java)
5647 current_lang_name = name;
5648 /* DECL_IGNORED_P is initially set for these types, to avoid clutter.
5649 (See record_builtin_java_type in decl.c.) However, that causes
5650 incorrect debug entries if these types are actually used.
5651 So we re-enable debug output after extern "Java". */
5652 DECL_IGNORED_P (TYPE_NAME (java_byte_type_node)) = 0;
5653 DECL_IGNORED_P (TYPE_NAME (java_short_type_node)) = 0;
5654 DECL_IGNORED_P (TYPE_NAME (java_int_type_node)) = 0;
5655 DECL_IGNORED_P (TYPE_NAME (java_long_type_node)) = 0;
5656 DECL_IGNORED_P (TYPE_NAME (java_float_type_node)) = 0;
5657 DECL_IGNORED_P (TYPE_NAME (java_double_type_node)) = 0;
5658 DECL_IGNORED_P (TYPE_NAME (java_char_type_node)) = 0;
5659 DECL_IGNORED_P (TYPE_NAME (java_boolean_type_node)) = 0;
5661 else if (name == lang_name_c)
5663 current_lang_name = name;
5666 error ("language string %<\"%E\"%> not recognized", name);
5669 /* Get out of the current language scope. */
5672 pop_lang_context (void)
5674 current_lang_name = VEC_pop (tree, current_lang_base);
5677 /* Type instantiation routines. */
5679 /* Given an OVERLOAD and a TARGET_TYPE, return the function that
5680 matches the TARGET_TYPE. If there is no satisfactory match, return
5681 error_mark_node, and issue an error & warning messages under
5682 control of FLAGS. Permit pointers to member function if FLAGS
5683 permits. If TEMPLATE_ONLY, the name of the overloaded function was
5684 a template-id, and EXPLICIT_TARGS are the explicitly provided
5685 template arguments. If OVERLOAD is for one or more member
5686 functions, then ACCESS_PATH is the base path used to reference
5687 those member functions. */
5690 resolve_address_of_overloaded_function (tree target_type,
5692 tsubst_flags_t flags,
5694 tree explicit_targs,
5697 /* Here's what the standard says:
5701 If the name is a function template, template argument deduction
5702 is done, and if the argument deduction succeeds, the deduced
5703 arguments are used to generate a single template function, which
5704 is added to the set of overloaded functions considered.
5706 Non-member functions and static member functions match targets of
5707 type "pointer-to-function" or "reference-to-function." Nonstatic
5708 member functions match targets of type "pointer-to-member
5709 function;" the function type of the pointer to member is used to
5710 select the member function from the set of overloaded member
5711 functions. If a nonstatic member function is selected, the
5712 reference to the overloaded function name is required to have the
5713 form of a pointer to member as described in 5.3.1.
5715 If more than one function is selected, any template functions in
5716 the set are eliminated if the set also contains a non-template
5717 function, and any given template function is eliminated if the
5718 set contains a second template function that is more specialized
5719 than the first according to the partial ordering rules 14.5.5.2.
5720 After such eliminations, if any, there shall remain exactly one
5721 selected function. */
5724 int is_reference = 0;
5725 /* We store the matches in a TREE_LIST rooted here. The functions
5726 are the TREE_PURPOSE, not the TREE_VALUE, in this list, for easy
5727 interoperability with most_specialized_instantiation. */
5728 tree matches = NULL_TREE;
5731 /* By the time we get here, we should be seeing only real
5732 pointer-to-member types, not the internal POINTER_TYPE to
5733 METHOD_TYPE representation. */
5734 gcc_assert (TREE_CODE (target_type) != POINTER_TYPE
5735 || TREE_CODE (TREE_TYPE (target_type)) != METHOD_TYPE);
5737 gcc_assert (is_overloaded_fn (overload));
5739 /* Check that the TARGET_TYPE is reasonable. */
5740 if (TYPE_PTRFN_P (target_type))
5742 else if (TYPE_PTRMEMFUNC_P (target_type))
5743 /* This is OK, too. */
5745 else if (TREE_CODE (target_type) == FUNCTION_TYPE)
5747 /* This is OK, too. This comes from a conversion to reference
5749 target_type = build_reference_type (target_type);
5754 if (flags & tf_error)
5755 error ("cannot resolve overloaded function %qD based on"
5756 " conversion to type %qT",
5757 DECL_NAME (OVL_FUNCTION (overload)), target_type);
5758 return error_mark_node;
5761 /* If we can find a non-template function that matches, we can just
5762 use it. There's no point in generating template instantiations
5763 if we're just going to throw them out anyhow. But, of course, we
5764 can only do this when we don't *need* a template function. */
5769 for (fns = overload; fns; fns = OVL_NEXT (fns))
5771 tree fn = OVL_CURRENT (fns);
5774 if (TREE_CODE (fn) == TEMPLATE_DECL)
5775 /* We're not looking for templates just yet. */
5778 if ((TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
5780 /* We're looking for a non-static member, and this isn't
5781 one, or vice versa. */
5784 /* Ignore functions which haven't been explicitly
5786 if (DECL_ANTICIPATED (fn))
5789 /* See if there's a match. */
5790 fntype = TREE_TYPE (fn);
5792 fntype = build_ptrmemfunc_type (build_pointer_type (fntype));
5793 else if (!is_reference)
5794 fntype = build_pointer_type (fntype);
5796 if (can_convert_arg (target_type, fntype, fn, LOOKUP_NORMAL))
5797 matches = tree_cons (fn, NULL_TREE, matches);
5801 /* Now, if we've already got a match (or matches), there's no need
5802 to proceed to the template functions. But, if we don't have a
5803 match we need to look at them, too. */
5806 tree target_fn_type;
5807 tree target_arg_types;
5808 tree target_ret_type;
5813 = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (target_type));
5815 target_fn_type = TREE_TYPE (target_type);
5816 target_arg_types = TYPE_ARG_TYPES (target_fn_type);
5817 target_ret_type = TREE_TYPE (target_fn_type);
5819 /* Never do unification on the 'this' parameter. */
5820 if (TREE_CODE (target_fn_type) == METHOD_TYPE)
5821 target_arg_types = TREE_CHAIN (target_arg_types);
5823 for (fns = overload; fns; fns = OVL_NEXT (fns))
5825 tree fn = OVL_CURRENT (fns);
5827 tree instantiation_type;
5830 if (TREE_CODE (fn) != TEMPLATE_DECL)
5831 /* We're only looking for templates. */
5834 if ((TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
5836 /* We're not looking for a non-static member, and this is
5837 one, or vice versa. */
5840 /* Try to do argument deduction. */
5841 targs = make_tree_vec (DECL_NTPARMS (fn));
5842 if (fn_type_unification (fn, explicit_targs, targs,
5843 target_arg_types, target_ret_type,
5844 DEDUCE_EXACT, LOOKUP_NORMAL))
5845 /* Argument deduction failed. */
5848 /* Instantiate the template. */
5849 instantiation = instantiate_template (fn, targs, flags);
5850 if (instantiation == error_mark_node)
5851 /* Instantiation failed. */
5854 /* See if there's a match. */
5855 instantiation_type = TREE_TYPE (instantiation);
5857 instantiation_type =
5858 build_ptrmemfunc_type (build_pointer_type (instantiation_type));
5859 else if (!is_reference)
5860 instantiation_type = build_pointer_type (instantiation_type);
5861 if (can_convert_arg (target_type, instantiation_type, instantiation,
5863 matches = tree_cons (instantiation, fn, matches);
5866 /* Now, remove all but the most specialized of the matches. */
5869 tree match = most_specialized_instantiation (matches);
5871 if (match != error_mark_node)
5872 matches = tree_cons (TREE_PURPOSE (match),
5878 /* Now we should have exactly one function in MATCHES. */
5879 if (matches == NULL_TREE)
5881 /* There were *no* matches. */
5882 if (flags & tf_error)
5884 error ("no matches converting function %qD to type %q#T",
5885 DECL_NAME (OVL_FUNCTION (overload)),
5888 /* print_candidates expects a chain with the functions in
5889 TREE_VALUE slots, so we cons one up here (we're losing anyway,
5890 so why be clever?). */
5891 for (; overload; overload = OVL_NEXT (overload))
5892 matches = tree_cons (NULL_TREE, OVL_CURRENT (overload),
5895 print_candidates (matches);
5897 return error_mark_node;
5899 else if (TREE_CHAIN (matches))
5901 /* There were too many matches. */
5903 if (flags & tf_error)
5907 error ("converting overloaded function %qD to type %q#T is ambiguous",
5908 DECL_NAME (OVL_FUNCTION (overload)),
5911 /* Since print_candidates expects the functions in the
5912 TREE_VALUE slot, we flip them here. */
5913 for (match = matches; match; match = TREE_CHAIN (match))
5914 TREE_VALUE (match) = TREE_PURPOSE (match);
5916 print_candidates (matches);
5919 return error_mark_node;
5922 /* Good, exactly one match. Now, convert it to the correct type. */
5923 fn = TREE_PURPOSE (matches);
5925 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
5926 && !(flags & tf_ptrmem_ok) && !flag_ms_extensions)
5928 static int explained;
5930 if (!(flags & tf_error))
5931 return error_mark_node;
5933 pedwarn ("assuming pointer to member %qD", fn);
5936 pedwarn ("(a pointer to member can only be formed with %<&%E%>)", fn);
5941 /* If we're doing overload resolution purely for the purpose of
5942 determining conversion sequences, we should not consider the
5943 function used. If this conversion sequence is selected, the
5944 function will be marked as used at this point. */
5945 if (!(flags & tf_conv))
5948 /* We could not check access when this expression was originally
5949 created since we did not know at that time to which function
5950 the expression referred. */
5951 if (DECL_FUNCTION_MEMBER_P (fn))
5953 gcc_assert (access_path);
5954 perform_or_defer_access_check (access_path, fn, fn);
5958 if (TYPE_PTRFN_P (target_type) || TYPE_PTRMEMFUNC_P (target_type))
5959 return build_unary_op (ADDR_EXPR, fn, 0);
5962 /* The target must be a REFERENCE_TYPE. Above, build_unary_op
5963 will mark the function as addressed, but here we must do it
5965 cxx_mark_addressable (fn);
5971 /* This function will instantiate the type of the expression given in
5972 RHS to match the type of LHSTYPE. If errors exist, then return
5973 error_mark_node. FLAGS is a bit mask. If TF_ERROR is set, then
5974 we complain on errors. If we are not complaining, never modify rhs,
5975 as overload resolution wants to try many possible instantiations, in
5976 the hope that at least one will work.
5978 For non-recursive calls, LHSTYPE should be a function, pointer to
5979 function, or a pointer to member function. */
5982 instantiate_type (tree lhstype, tree rhs, tsubst_flags_t flags)
5984 tsubst_flags_t flags_in = flags;
5985 tree access_path = NULL_TREE;
5987 flags &= ~tf_ptrmem_ok;
5989 if (TREE_CODE (lhstype) == UNKNOWN_TYPE)
5991 if (flags & tf_error)
5992 error ("not enough type information");
5993 return error_mark_node;
5996 if (TREE_TYPE (rhs) != NULL_TREE && ! (type_unknown_p (rhs)))
5998 if (same_type_p (lhstype, TREE_TYPE (rhs)))
6000 if (flag_ms_extensions
6001 && TYPE_PTRMEMFUNC_P (lhstype)
6002 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (rhs)))
6003 /* Microsoft allows `A::f' to be resolved to a
6004 pointer-to-member. */
6008 if (flags & tf_error)
6009 error ("argument of type %qT does not match %qT",
6010 TREE_TYPE (rhs), lhstype);
6011 return error_mark_node;
6015 if (TREE_CODE (rhs) == BASELINK)
6017 access_path = BASELINK_ACCESS_BINFO (rhs);
6018 rhs = BASELINK_FUNCTIONS (rhs);
6021 /* If we are in a template, and have a NON_DEPENDENT_EXPR, we cannot
6022 deduce any type information. */
6023 if (TREE_CODE (rhs) == NON_DEPENDENT_EXPR)
6025 if (flags & tf_error)
6026 error ("not enough type information");
6027 return error_mark_node;
6030 /* There only a few kinds of expressions that may have a type
6031 dependent on overload resolution. */
6032 gcc_assert (TREE_CODE (rhs) == ADDR_EXPR
6033 || TREE_CODE (rhs) == COMPONENT_REF
6034 || TREE_CODE (rhs) == COMPOUND_EXPR
6035 || really_overloaded_fn (rhs));
6037 /* We don't overwrite rhs if it is an overloaded function.
6038 Copying it would destroy the tree link. */
6039 if (TREE_CODE (rhs) != OVERLOAD)
6040 rhs = copy_node (rhs);
6042 /* This should really only be used when attempting to distinguish
6043 what sort of a pointer to function we have. For now, any
6044 arithmetic operation which is not supported on pointers
6045 is rejected as an error. */
6047 switch (TREE_CODE (rhs))
6051 tree member = TREE_OPERAND (rhs, 1);
6053 member = instantiate_type (lhstype, member, flags);
6054 if (member != error_mark_node
6055 && TREE_SIDE_EFFECTS (TREE_OPERAND (rhs, 0)))
6056 /* Do not lose object's side effects. */
6057 return build2 (COMPOUND_EXPR, TREE_TYPE (member),
6058 TREE_OPERAND (rhs, 0), member);
6063 rhs = TREE_OPERAND (rhs, 1);
6064 if (BASELINK_P (rhs))
6065 return instantiate_type (lhstype, rhs, flags_in);
6067 /* This can happen if we are forming a pointer-to-member for a
6069 gcc_assert (TREE_CODE (rhs) == TEMPLATE_ID_EXPR);
6073 case TEMPLATE_ID_EXPR:
6075 tree fns = TREE_OPERAND (rhs, 0);
6076 tree args = TREE_OPERAND (rhs, 1);
6079 resolve_address_of_overloaded_function (lhstype, fns, flags_in,
6080 /*template_only=*/true,
6087 resolve_address_of_overloaded_function (lhstype, rhs, flags_in,
6088 /*template_only=*/false,
6089 /*explicit_targs=*/NULL_TREE,
6093 TREE_OPERAND (rhs, 0)
6094 = instantiate_type (lhstype, TREE_OPERAND (rhs, 0), flags);
6095 if (TREE_OPERAND (rhs, 0) == error_mark_node)
6096 return error_mark_node;
6097 TREE_OPERAND (rhs, 1)
6098 = instantiate_type (lhstype, TREE_OPERAND (rhs, 1), flags);
6099 if (TREE_OPERAND (rhs, 1) == error_mark_node)
6100 return error_mark_node;
6102 TREE_TYPE (rhs) = lhstype;
6107 if (PTRMEM_OK_P (rhs))
6108 flags |= tf_ptrmem_ok;
6110 return instantiate_type (lhstype, TREE_OPERAND (rhs, 0), flags);
6114 return error_mark_node;
6119 return error_mark_node;
6122 /* Return the name of the virtual function pointer field
6123 (as an IDENTIFIER_NODE) for the given TYPE. Note that
6124 this may have to look back through base types to find the
6125 ultimate field name. (For single inheritance, these could
6126 all be the same name. Who knows for multiple inheritance). */
6129 get_vfield_name (tree type)
6131 tree binfo, base_binfo;
6134 for (binfo = TYPE_BINFO (type);
6135 BINFO_N_BASE_BINFOS (binfo);
6138 base_binfo = BINFO_BASE_BINFO (binfo, 0);
6140 if (BINFO_VIRTUAL_P (base_binfo)
6141 || !TYPE_CONTAINS_VPTR_P (BINFO_TYPE (base_binfo)))
6145 type = BINFO_TYPE (binfo);
6146 buf = (char *) alloca (sizeof (VFIELD_NAME_FORMAT)
6147 + TYPE_NAME_LENGTH (type) + 2);
6148 sprintf (buf, VFIELD_NAME_FORMAT,
6149 IDENTIFIER_POINTER (constructor_name (type)));
6150 return get_identifier (buf);
6154 print_class_statistics (void)
6156 #ifdef GATHER_STATISTICS
6157 fprintf (stderr, "convert_harshness = %d\n", n_convert_harshness);
6158 fprintf (stderr, "compute_conversion_costs = %d\n", n_compute_conversion_costs);
6161 fprintf (stderr, "vtables = %d; vtable searches = %d\n",
6162 n_vtables, n_vtable_searches);
6163 fprintf (stderr, "vtable entries = %d; vtable elems = %d\n",
6164 n_vtable_entries, n_vtable_elems);
6169 /* Build a dummy reference to ourselves so Derived::Base (and A::A) works,
6170 according to [class]:
6171 The class-name is also inserted
6172 into the scope of the class itself. For purposes of access checking,
6173 the inserted class name is treated as if it were a public member name. */
6176 build_self_reference (void)
6178 tree name = constructor_name (current_class_type);
6179 tree value = build_lang_decl (TYPE_DECL, name, current_class_type);
6182 DECL_NONLOCAL (value) = 1;
6183 DECL_CONTEXT (value) = current_class_type;
6184 DECL_ARTIFICIAL (value) = 1;
6185 SET_DECL_SELF_REFERENCE_P (value);
6187 if (processing_template_decl)
6188 value = push_template_decl (value);
6190 saved_cas = current_access_specifier;
6191 current_access_specifier = access_public_node;
6192 finish_member_declaration (value);
6193 current_access_specifier = saved_cas;
6196 /* Returns 1 if TYPE contains only padding bytes. */
6199 is_empty_class (tree type)
6201 if (type == error_mark_node)
6204 if (! IS_AGGR_TYPE (type))
6207 /* In G++ 3.2, whether or not a class was empty was determined by
6208 looking at its size. */
6209 if (abi_version_at_least (2))
6210 return CLASSTYPE_EMPTY_P (type);
6212 return integer_zerop (CLASSTYPE_SIZE (type));
6215 /* Returns true if TYPE contains an empty class. */
6218 contains_empty_class_p (tree type)
6220 if (is_empty_class (type))
6222 if (CLASS_TYPE_P (type))
6229 for (binfo = TYPE_BINFO (type), i = 0;
6230 BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
6231 if (contains_empty_class_p (BINFO_TYPE (base_binfo)))
6233 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
6234 if (TREE_CODE (field) == FIELD_DECL
6235 && !DECL_ARTIFICIAL (field)
6236 && is_empty_class (TREE_TYPE (field)))
6239 else if (TREE_CODE (type) == ARRAY_TYPE)
6240 return contains_empty_class_p (TREE_TYPE (type));
6244 /* Note that NAME was looked up while the current class was being
6245 defined and that the result of that lookup was DECL. */
6248 maybe_note_name_used_in_class (tree name, tree decl)
6250 splay_tree names_used;
6252 /* If we're not defining a class, there's nothing to do. */
6253 if (!(innermost_scope_kind() == sk_class
6254 && TYPE_BEING_DEFINED (current_class_type)))
6257 /* If there's already a binding for this NAME, then we don't have
6258 anything to worry about. */
6259 if (lookup_member (current_class_type, name,
6260 /*protect=*/0, /*want_type=*/false))
6263 if (!current_class_stack[current_class_depth - 1].names_used)
6264 current_class_stack[current_class_depth - 1].names_used
6265 = splay_tree_new (splay_tree_compare_pointers, 0, 0);
6266 names_used = current_class_stack[current_class_depth - 1].names_used;
6268 splay_tree_insert (names_used,
6269 (splay_tree_key) name,
6270 (splay_tree_value) decl);
6273 /* Note that NAME was declared (as DECL) in the current class. Check
6274 to see that the declaration is valid. */
6277 note_name_declared_in_class (tree name, tree decl)
6279 splay_tree names_used;
6282 /* Look to see if we ever used this name. */
6284 = current_class_stack[current_class_depth - 1].names_used;
6288 n = splay_tree_lookup (names_used, (splay_tree_key) name);
6291 /* [basic.scope.class]
6293 A name N used in a class S shall refer to the same declaration
6294 in its context and when re-evaluated in the completed scope of
6296 error ("declaration of %q#D", decl);
6297 error ("changes meaning of %qD from %q+#D",
6298 DECL_NAME (OVL_CURRENT (decl)), (tree) n->value);
6302 /* Returns the VAR_DECL for the complete vtable associated with BINFO.
6303 Secondary vtables are merged with primary vtables; this function
6304 will return the VAR_DECL for the primary vtable. */
6307 get_vtbl_decl_for_binfo (tree binfo)
6311 decl = BINFO_VTABLE (binfo);
6312 if (decl && TREE_CODE (decl) == PLUS_EXPR)
6314 gcc_assert (TREE_CODE (TREE_OPERAND (decl, 0)) == ADDR_EXPR);
6315 decl = TREE_OPERAND (TREE_OPERAND (decl, 0), 0);
6318 gcc_assert (TREE_CODE (decl) == VAR_DECL);
6323 /* Returns the binfo for the primary base of BINFO. If the resulting
6324 BINFO is a virtual base, and it is inherited elsewhere in the
6325 hierarchy, then the returned binfo might not be the primary base of
6326 BINFO in the complete object. Check BINFO_PRIMARY_P or
6327 BINFO_LOST_PRIMARY_P to be sure. */
6330 get_primary_binfo (tree binfo)
6334 primary_base = CLASSTYPE_PRIMARY_BINFO (BINFO_TYPE (binfo));
6338 return copied_binfo (primary_base, binfo);
6341 /* If INDENTED_P is zero, indent to INDENT. Return nonzero. */
6344 maybe_indent_hierarchy (FILE * stream, int indent, int indented_p)
6347 fprintf (stream, "%*s", indent, "");
6351 /* Dump the offsets of all the bases rooted at BINFO to STREAM.
6352 INDENT should be zero when called from the top level; it is
6353 incremented recursively. IGO indicates the next expected BINFO in
6354 inheritance graph ordering. */
6357 dump_class_hierarchy_r (FILE *stream,
6367 indented = maybe_indent_hierarchy (stream, indent, 0);
6368 fprintf (stream, "%s (0x%lx) ",
6369 type_as_string (BINFO_TYPE (binfo), TFF_PLAIN_IDENTIFIER),
6370 (unsigned long) binfo);
6373 fprintf (stream, "alternative-path\n");
6376 igo = TREE_CHAIN (binfo);
6378 fprintf (stream, HOST_WIDE_INT_PRINT_DEC,
6379 tree_low_cst (BINFO_OFFSET (binfo), 0));
6380 if (is_empty_class (BINFO_TYPE (binfo)))
6381 fprintf (stream, " empty");
6382 else if (CLASSTYPE_NEARLY_EMPTY_P (BINFO_TYPE (binfo)))
6383 fprintf (stream, " nearly-empty");
6384 if (BINFO_VIRTUAL_P (binfo))
6385 fprintf (stream, " virtual");
6386 fprintf (stream, "\n");
6389 if (BINFO_PRIMARY_P (binfo))
6391 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6392 fprintf (stream, " primary-for %s (0x%lx)",
6393 type_as_string (BINFO_TYPE (BINFO_INHERITANCE_CHAIN (binfo)),
6394 TFF_PLAIN_IDENTIFIER),
6395 (unsigned long)BINFO_INHERITANCE_CHAIN (binfo));
6397 if (BINFO_LOST_PRIMARY_P (binfo))
6399 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6400 fprintf (stream, " lost-primary");
6403 fprintf (stream, "\n");
6405 if (!(flags & TDF_SLIM))
6409 if (BINFO_SUBVTT_INDEX (binfo))
6411 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6412 fprintf (stream, " subvttidx=%s",
6413 expr_as_string (BINFO_SUBVTT_INDEX (binfo),
6414 TFF_PLAIN_IDENTIFIER));
6416 if (BINFO_VPTR_INDEX (binfo))
6418 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6419 fprintf (stream, " vptridx=%s",
6420 expr_as_string (BINFO_VPTR_INDEX (binfo),
6421 TFF_PLAIN_IDENTIFIER));
6423 if (BINFO_VPTR_FIELD (binfo))
6425 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6426 fprintf (stream, " vbaseoffset=%s",
6427 expr_as_string (BINFO_VPTR_FIELD (binfo),
6428 TFF_PLAIN_IDENTIFIER));
6430 if (BINFO_VTABLE (binfo))
6432 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6433 fprintf (stream, " vptr=%s",
6434 expr_as_string (BINFO_VTABLE (binfo),
6435 TFF_PLAIN_IDENTIFIER));
6439 fprintf (stream, "\n");
6442 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
6443 igo = dump_class_hierarchy_r (stream, flags, base_binfo, igo, indent + 2);
6448 /* Dump the BINFO hierarchy for T. */
6451 dump_class_hierarchy_1 (FILE *stream, int flags, tree t)
6453 fprintf (stream, "Class %s\n", type_as_string (t, TFF_PLAIN_IDENTIFIER));
6454 fprintf (stream, " size=%lu align=%lu\n",
6455 (unsigned long)(tree_low_cst (TYPE_SIZE (t), 0) / BITS_PER_UNIT),
6456 (unsigned long)(TYPE_ALIGN (t) / BITS_PER_UNIT));
6457 fprintf (stream, " base size=%lu base align=%lu\n",
6458 (unsigned long)(tree_low_cst (TYPE_SIZE (CLASSTYPE_AS_BASE (t)), 0)
6460 (unsigned long)(TYPE_ALIGN (CLASSTYPE_AS_BASE (t))
6462 dump_class_hierarchy_r (stream, flags, TYPE_BINFO (t), TYPE_BINFO (t), 0);
6463 fprintf (stream, "\n");
6466 /* Debug interface to hierarchy dumping. */
6469 debug_class (tree t)
6471 dump_class_hierarchy_1 (stderr, TDF_SLIM, t);
6475 dump_class_hierarchy (tree t)
6478 FILE *stream = dump_begin (TDI_class, &flags);
6482 dump_class_hierarchy_1 (stream, flags, t);
6483 dump_end (TDI_class, stream);
6488 dump_array (FILE * stream, tree decl)
6491 unsigned HOST_WIDE_INT ix;
6493 tree size = TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (decl)));
6495 elt = (tree_low_cst (TYPE_SIZE (TREE_TYPE (TREE_TYPE (decl))), 0)
6497 fprintf (stream, "%s:", decl_as_string (decl, TFF_PLAIN_IDENTIFIER));
6498 fprintf (stream, " %s entries",
6499 expr_as_string (size_binop (PLUS_EXPR, size, size_one_node),
6500 TFF_PLAIN_IDENTIFIER));
6501 fprintf (stream, "\n");
6503 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (DECL_INITIAL (decl)),
6505 fprintf (stream, "%-4ld %s\n", (long)(ix * elt),
6506 expr_as_string (value, TFF_PLAIN_IDENTIFIER));
6510 dump_vtable (tree t, tree binfo, tree vtable)
6513 FILE *stream = dump_begin (TDI_class, &flags);
6518 if (!(flags & TDF_SLIM))
6520 int ctor_vtbl_p = TYPE_BINFO (t) != binfo;
6522 fprintf (stream, "%s for %s",
6523 ctor_vtbl_p ? "Construction vtable" : "Vtable",
6524 type_as_string (BINFO_TYPE (binfo), TFF_PLAIN_IDENTIFIER));
6527 if (!BINFO_VIRTUAL_P (binfo))
6528 fprintf (stream, " (0x%lx instance)", (unsigned long)binfo);
6529 fprintf (stream, " in %s", type_as_string (t, TFF_PLAIN_IDENTIFIER));
6531 fprintf (stream, "\n");
6532 dump_array (stream, vtable);
6533 fprintf (stream, "\n");
6536 dump_end (TDI_class, stream);
6540 dump_vtt (tree t, tree vtt)
6543 FILE *stream = dump_begin (TDI_class, &flags);
6548 if (!(flags & TDF_SLIM))
6550 fprintf (stream, "VTT for %s\n",
6551 type_as_string (t, TFF_PLAIN_IDENTIFIER));
6552 dump_array (stream, vtt);
6553 fprintf (stream, "\n");
6556 dump_end (TDI_class, stream);
6559 /* Dump a function or thunk and its thunkees. */
6562 dump_thunk (FILE *stream, int indent, tree thunk)
6564 static const char spaces[] = " ";
6565 tree name = DECL_NAME (thunk);
6568 fprintf (stream, "%.*s%p %s %s", indent, spaces,
6570 !DECL_THUNK_P (thunk) ? "function"
6571 : DECL_THIS_THUNK_P (thunk) ? "this-thunk" : "covariant-thunk",
6572 name ? IDENTIFIER_POINTER (name) : "<unset>");
6573 if (DECL_THUNK_P (thunk))
6575 HOST_WIDE_INT fixed_adjust = THUNK_FIXED_OFFSET (thunk);
6576 tree virtual_adjust = THUNK_VIRTUAL_OFFSET (thunk);
6578 fprintf (stream, " fixed=" HOST_WIDE_INT_PRINT_DEC, fixed_adjust);
6579 if (!virtual_adjust)
6581 else if (DECL_THIS_THUNK_P (thunk))
6582 fprintf (stream, " vcall=" HOST_WIDE_INT_PRINT_DEC,
6583 tree_low_cst (virtual_adjust, 0));
6585 fprintf (stream, " vbase=" HOST_WIDE_INT_PRINT_DEC "(%s)",
6586 tree_low_cst (BINFO_VPTR_FIELD (virtual_adjust), 0),
6587 type_as_string (BINFO_TYPE (virtual_adjust), TFF_SCOPE));
6588 if (THUNK_ALIAS (thunk))
6589 fprintf (stream, " alias to %p", (void *)THUNK_ALIAS (thunk));
6591 fprintf (stream, "\n");
6592 for (thunks = DECL_THUNKS (thunk); thunks; thunks = TREE_CHAIN (thunks))
6593 dump_thunk (stream, indent + 2, thunks);
6596 /* Dump the thunks for FN. */
6599 debug_thunks (tree fn)
6601 dump_thunk (stderr, 0, fn);
6604 /* Virtual function table initialization. */
6606 /* Create all the necessary vtables for T and its base classes. */
6609 finish_vtbls (tree t)
6614 /* We lay out the primary and secondary vtables in one contiguous
6615 vtable. The primary vtable is first, followed by the non-virtual
6616 secondary vtables in inheritance graph order. */
6617 list = build_tree_list (BINFO_VTABLE (TYPE_BINFO (t)), NULL_TREE);
6618 accumulate_vtbl_inits (TYPE_BINFO (t), TYPE_BINFO (t),
6619 TYPE_BINFO (t), t, list);
6621 /* Then come the virtual bases, also in inheritance graph order. */
6622 for (vbase = TYPE_BINFO (t); vbase; vbase = TREE_CHAIN (vbase))
6624 if (!BINFO_VIRTUAL_P (vbase))
6626 accumulate_vtbl_inits (vbase, vbase, TYPE_BINFO (t), t, list);
6629 if (BINFO_VTABLE (TYPE_BINFO (t)))
6630 initialize_vtable (TYPE_BINFO (t), TREE_VALUE (list));
6633 /* Initialize the vtable for BINFO with the INITS. */
6636 initialize_vtable (tree binfo, tree inits)
6640 layout_vtable_decl (binfo, list_length (inits));
6641 decl = get_vtbl_decl_for_binfo (binfo);
6642 initialize_artificial_var (decl, inits);
6643 dump_vtable (BINFO_TYPE (binfo), binfo, decl);
6646 /* Build the VTT (virtual table table) for T.
6647 A class requires a VTT if it has virtual bases.
6650 1 - primary virtual pointer for complete object T
6651 2 - secondary VTTs for each direct non-virtual base of T which requires a
6653 3 - secondary virtual pointers for each direct or indirect base of T which
6654 has virtual bases or is reachable via a virtual path from T.
6655 4 - secondary VTTs for each direct or indirect virtual base of T.
6657 Secondary VTTs look like complete object VTTs without part 4. */
6667 /* Build up the initializers for the VTT. */
6669 index = size_zero_node;
6670 build_vtt_inits (TYPE_BINFO (t), t, &inits, &index);
6672 /* If we didn't need a VTT, we're done. */
6676 /* Figure out the type of the VTT. */
6677 type = build_index_type (size_int (list_length (inits) - 1));
6678 type = build_cplus_array_type (const_ptr_type_node, type);
6680 /* Now, build the VTT object itself. */
6681 vtt = build_vtable (t, mangle_vtt_for_type (t), type);
6682 initialize_artificial_var (vtt, inits);
6683 /* Add the VTT to the vtables list. */
6684 TREE_CHAIN (vtt) = TREE_CHAIN (CLASSTYPE_VTABLES (t));
6685 TREE_CHAIN (CLASSTYPE_VTABLES (t)) = vtt;
6690 /* When building a secondary VTT, BINFO_VTABLE is set to a TREE_LIST with
6691 PURPOSE the RTTI_BINFO, VALUE the real vtable pointer for this binfo,
6692 and CHAIN the vtable pointer for this binfo after construction is
6693 complete. VALUE can also be another BINFO, in which case we recurse. */
6696 binfo_ctor_vtable (tree binfo)
6702 vt = BINFO_VTABLE (binfo);
6703 if (TREE_CODE (vt) == TREE_LIST)
6704 vt = TREE_VALUE (vt);
6705 if (TREE_CODE (vt) == TREE_BINFO)
6714 /* Data for secondary VTT initialization. */
6715 typedef struct secondary_vptr_vtt_init_data_s
6717 /* Is this the primary VTT? */
6720 /* Current index into the VTT. */
6723 /* TREE_LIST of initializers built up. */
6726 /* The type being constructed by this secondary VTT. */
6727 tree type_being_constructed;
6728 } secondary_vptr_vtt_init_data;
6730 /* Recursively build the VTT-initializer for BINFO (which is in the
6731 hierarchy dominated by T). INITS points to the end of the initializer
6732 list to date. INDEX is the VTT index where the next element will be
6733 replaced. Iff BINFO is the binfo for T, this is the top level VTT (i.e.
6734 not a subvtt for some base of T). When that is so, we emit the sub-VTTs
6735 for virtual bases of T. When it is not so, we build the constructor
6736 vtables for the BINFO-in-T variant. */
6739 build_vtt_inits (tree binfo, tree t, tree *inits, tree *index)
6744 tree secondary_vptrs;
6745 secondary_vptr_vtt_init_data data;
6746 int top_level_p = SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), t);
6748 /* We only need VTTs for subobjects with virtual bases. */
6749 if (!CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo)))
6752 /* We need to use a construction vtable if this is not the primary
6756 build_ctor_vtbl_group (binfo, t);
6758 /* Record the offset in the VTT where this sub-VTT can be found. */
6759 BINFO_SUBVTT_INDEX (binfo) = *index;
6762 /* Add the address of the primary vtable for the complete object. */
6763 init = binfo_ctor_vtable (binfo);
6764 *inits = build_tree_list (NULL_TREE, init);
6765 inits = &TREE_CHAIN (*inits);
6768 gcc_assert (!BINFO_VPTR_INDEX (binfo));
6769 BINFO_VPTR_INDEX (binfo) = *index;
6771 *index = size_binop (PLUS_EXPR, *index, TYPE_SIZE_UNIT (ptr_type_node));
6773 /* Recursively add the secondary VTTs for non-virtual bases. */
6774 for (i = 0; BINFO_BASE_ITERATE (binfo, i, b); ++i)
6775 if (!BINFO_VIRTUAL_P (b))
6776 inits = build_vtt_inits (b, t, inits, index);
6778 /* Add secondary virtual pointers for all subobjects of BINFO with
6779 either virtual bases or reachable along a virtual path, except
6780 subobjects that are non-virtual primary bases. */
6781 data.top_level_p = top_level_p;
6782 data.index = *index;
6784 data.type_being_constructed = BINFO_TYPE (binfo);
6786 dfs_walk_once (binfo, dfs_build_secondary_vptr_vtt_inits, NULL, &data);
6788 *index = data.index;
6790 /* The secondary vptrs come back in reverse order. After we reverse
6791 them, and add the INITS, the last init will be the first element
6793 secondary_vptrs = data.inits;
6794 if (secondary_vptrs)
6796 *inits = nreverse (secondary_vptrs);
6797 inits = &TREE_CHAIN (secondary_vptrs);
6798 gcc_assert (*inits == NULL_TREE);
6802 /* Add the secondary VTTs for virtual bases in inheritance graph
6804 for (b = TYPE_BINFO (BINFO_TYPE (binfo)); b; b = TREE_CHAIN (b))
6806 if (!BINFO_VIRTUAL_P (b))
6809 inits = build_vtt_inits (b, t, inits, index);
6812 /* Remove the ctor vtables we created. */
6813 dfs_walk_all (binfo, dfs_fixup_binfo_vtbls, NULL, binfo);
6818 /* Called from build_vtt_inits via dfs_walk. BINFO is the binfo for the base
6819 in most derived. DATA is a SECONDARY_VPTR_VTT_INIT_DATA structure. */
6822 dfs_build_secondary_vptr_vtt_inits (tree binfo, void *data_)
6824 secondary_vptr_vtt_init_data *data = (secondary_vptr_vtt_init_data *)data_;
6826 /* We don't care about bases that don't have vtables. */
6827 if (!TYPE_VFIELD (BINFO_TYPE (binfo)))
6828 return dfs_skip_bases;
6830 /* We're only interested in proper subobjects of the type being
6832 if (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), data->type_being_constructed))
6835 /* We're only interested in bases with virtual bases or reachable
6836 via a virtual path from the type being constructed. */
6837 if (!(CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo))
6838 || binfo_via_virtual (binfo, data->type_being_constructed)))
6839 return dfs_skip_bases;
6841 /* We're not interested in non-virtual primary bases. */
6842 if (!BINFO_VIRTUAL_P (binfo) && BINFO_PRIMARY_P (binfo))
6845 /* Record the index where this secondary vptr can be found. */
6846 if (data->top_level_p)
6848 gcc_assert (!BINFO_VPTR_INDEX (binfo));
6849 BINFO_VPTR_INDEX (binfo) = data->index;
6851 if (BINFO_VIRTUAL_P (binfo))
6853 /* It's a primary virtual base, and this is not a
6854 construction vtable. Find the base this is primary of in
6855 the inheritance graph, and use that base's vtable
6857 while (BINFO_PRIMARY_P (binfo))
6858 binfo = BINFO_INHERITANCE_CHAIN (binfo);
6862 /* Add the initializer for the secondary vptr itself. */
6863 data->inits = tree_cons (NULL_TREE, binfo_ctor_vtable (binfo), data->inits);
6865 /* Advance the vtt index. */
6866 data->index = size_binop (PLUS_EXPR, data->index,
6867 TYPE_SIZE_UNIT (ptr_type_node));
6872 /* Called from build_vtt_inits via dfs_walk. After building
6873 constructor vtables and generating the sub-vtt from them, we need
6874 to restore the BINFO_VTABLES that were scribbled on. DATA is the
6875 binfo of the base whose sub vtt was generated. */
6878 dfs_fixup_binfo_vtbls (tree binfo, void* data)
6880 tree vtable = BINFO_VTABLE (binfo);
6882 if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
6883 /* If this class has no vtable, none of its bases do. */
6884 return dfs_skip_bases;
6887 /* This might be a primary base, so have no vtable in this
6891 /* If we scribbled the construction vtable vptr into BINFO, clear it
6893 if (TREE_CODE (vtable) == TREE_LIST
6894 && (TREE_PURPOSE (vtable) == (tree) data))
6895 BINFO_VTABLE (binfo) = TREE_CHAIN (vtable);
6900 /* Build the construction vtable group for BINFO which is in the
6901 hierarchy dominated by T. */
6904 build_ctor_vtbl_group (tree binfo, tree t)
6913 /* See if we've already created this construction vtable group. */
6914 id = mangle_ctor_vtbl_for_type (t, binfo);
6915 if (IDENTIFIER_GLOBAL_VALUE (id))
6918 gcc_assert (!SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), t));
6919 /* Build a version of VTBL (with the wrong type) for use in
6920 constructing the addresses of secondary vtables in the
6921 construction vtable group. */
6922 vtbl = build_vtable (t, id, ptr_type_node);
6923 DECL_CONSTRUCTION_VTABLE_P (vtbl) = 1;
6924 list = build_tree_list (vtbl, NULL_TREE);
6925 accumulate_vtbl_inits (binfo, TYPE_BINFO (TREE_TYPE (binfo)),
6928 /* Add the vtables for each of our virtual bases using the vbase in T
6930 for (vbase = TYPE_BINFO (BINFO_TYPE (binfo));
6932 vbase = TREE_CHAIN (vbase))
6936 if (!BINFO_VIRTUAL_P (vbase))
6938 b = copied_binfo (vbase, binfo);
6940 accumulate_vtbl_inits (b, vbase, binfo, t, list);
6942 inits = TREE_VALUE (list);
6944 /* Figure out the type of the construction vtable. */
6945 type = build_index_type (size_int (list_length (inits) - 1));
6946 type = build_cplus_array_type (vtable_entry_type, type);
6947 TREE_TYPE (vtbl) = type;
6949 /* Initialize the construction vtable. */
6950 CLASSTYPE_VTABLES (t) = chainon (CLASSTYPE_VTABLES (t), vtbl);
6951 initialize_artificial_var (vtbl, inits);
6952 dump_vtable (t, binfo, vtbl);
6955 /* Add the vtbl initializers for BINFO (and its bases other than
6956 non-virtual primaries) to the list of INITS. BINFO is in the
6957 hierarchy dominated by T. RTTI_BINFO is the binfo within T of
6958 the constructor the vtbl inits should be accumulated for. (If this
6959 is the complete object vtbl then RTTI_BINFO will be TYPE_BINFO (T).)
6960 ORIG_BINFO is the binfo for this object within BINFO_TYPE (RTTI_BINFO).
6961 BINFO is the active base equivalent of ORIG_BINFO in the inheritance
6962 graph of T. Both BINFO and ORIG_BINFO will have the same BINFO_TYPE,
6963 but are not necessarily the same in terms of layout. */
6966 accumulate_vtbl_inits (tree binfo,
6974 int ctor_vtbl_p = !SAME_BINFO_TYPE_P (BINFO_TYPE (rtti_binfo), t);
6976 gcc_assert (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), BINFO_TYPE (orig_binfo)));
6978 /* If it doesn't have a vptr, we don't do anything. */
6979 if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
6982 /* If we're building a construction vtable, we're not interested in
6983 subobjects that don't require construction vtables. */
6985 && !CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo))
6986 && !binfo_via_virtual (orig_binfo, BINFO_TYPE (rtti_binfo)))
6989 /* Build the initializers for the BINFO-in-T vtable. */
6991 = chainon (TREE_VALUE (inits),
6992 dfs_accumulate_vtbl_inits (binfo, orig_binfo,
6993 rtti_binfo, t, inits));
6995 /* Walk the BINFO and its bases. We walk in preorder so that as we
6996 initialize each vtable we can figure out at what offset the
6997 secondary vtable lies from the primary vtable. We can't use
6998 dfs_walk here because we need to iterate through bases of BINFO
6999 and RTTI_BINFO simultaneously. */
7000 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
7002 /* Skip virtual bases. */
7003 if (BINFO_VIRTUAL_P (base_binfo))
7005 accumulate_vtbl_inits (base_binfo,
7006 BINFO_BASE_BINFO (orig_binfo, i),
7012 /* Called from accumulate_vtbl_inits. Returns the initializers for
7013 the BINFO vtable. */
7016 dfs_accumulate_vtbl_inits (tree binfo,
7022 tree inits = NULL_TREE;
7023 tree vtbl = NULL_TREE;
7024 int ctor_vtbl_p = !SAME_BINFO_TYPE_P (BINFO_TYPE (rtti_binfo), t);
7027 && BINFO_VIRTUAL_P (orig_binfo) && BINFO_PRIMARY_P (orig_binfo))
7029 /* In the hierarchy of BINFO_TYPE (RTTI_BINFO), this is a
7030 primary virtual base. If it is not the same primary in
7031 the hierarchy of T, we'll need to generate a ctor vtable
7032 for it, to place at its location in T. If it is the same
7033 primary, we still need a VTT entry for the vtable, but it
7034 should point to the ctor vtable for the base it is a
7035 primary for within the sub-hierarchy of RTTI_BINFO.
7037 There are three possible cases:
7039 1) We are in the same place.
7040 2) We are a primary base within a lost primary virtual base of
7042 3) We are primary to something not a base of RTTI_BINFO. */
7045 tree last = NULL_TREE;
7047 /* First, look through the bases we are primary to for RTTI_BINFO
7048 or a virtual base. */
7050 while (BINFO_PRIMARY_P (b))
7052 b = BINFO_INHERITANCE_CHAIN (b);
7054 if (BINFO_VIRTUAL_P (b) || b == rtti_binfo)
7057 /* If we run out of primary links, keep looking down our
7058 inheritance chain; we might be an indirect primary. */
7059 for (b = last; b; b = BINFO_INHERITANCE_CHAIN (b))
7060 if (BINFO_VIRTUAL_P (b) || b == rtti_binfo)
7064 /* If we found RTTI_BINFO, this is case 1. If we found a virtual
7065 base B and it is a base of RTTI_BINFO, this is case 2. In
7066 either case, we share our vtable with LAST, i.e. the
7067 derived-most base within B of which we are a primary. */
7069 || (b && binfo_for_vbase (BINFO_TYPE (b), BINFO_TYPE (rtti_binfo))))
7070 /* Just set our BINFO_VTABLE to point to LAST, as we may not have
7071 set LAST's BINFO_VTABLE yet. We'll extract the actual vptr in
7072 binfo_ctor_vtable after everything's been set up. */
7075 /* Otherwise, this is case 3 and we get our own. */
7077 else if (!BINFO_NEW_VTABLE_MARKED (orig_binfo))
7085 /* Compute the initializer for this vtable. */
7086 inits = build_vtbl_initializer (binfo, orig_binfo, t, rtti_binfo,
7089 /* Figure out the position to which the VPTR should point. */
7090 vtbl = TREE_PURPOSE (l);
7091 vtbl = build1 (ADDR_EXPR, vtbl_ptr_type_node, vtbl);
7092 index = size_binop (PLUS_EXPR,
7093 size_int (non_fn_entries),
7094 size_int (list_length (TREE_VALUE (l))));
7095 index = size_binop (MULT_EXPR,
7096 TYPE_SIZE_UNIT (vtable_entry_type),
7098 vtbl = build2 (PLUS_EXPR, TREE_TYPE (vtbl), vtbl, index);
7102 /* For a construction vtable, we can't overwrite BINFO_VTABLE.
7103 So, we make a TREE_LIST. Later, dfs_fixup_binfo_vtbls will
7104 straighten this out. */
7105 BINFO_VTABLE (binfo) = tree_cons (rtti_binfo, vtbl, BINFO_VTABLE (binfo));
7106 else if (BINFO_PRIMARY_P (binfo) && BINFO_VIRTUAL_P (binfo))
7109 /* For an ordinary vtable, set BINFO_VTABLE. */
7110 BINFO_VTABLE (binfo) = vtbl;
7115 static GTY(()) tree abort_fndecl_addr;
7117 /* Construct the initializer for BINFO's virtual function table. BINFO
7118 is part of the hierarchy dominated by T. If we're building a
7119 construction vtable, the ORIG_BINFO is the binfo we should use to
7120 find the actual function pointers to put in the vtable - but they
7121 can be overridden on the path to most-derived in the graph that
7122 ORIG_BINFO belongs. Otherwise,
7123 ORIG_BINFO should be the same as BINFO. The RTTI_BINFO is the
7124 BINFO that should be indicated by the RTTI information in the
7125 vtable; it will be a base class of T, rather than T itself, if we
7126 are building a construction vtable.
7128 The value returned is a TREE_LIST suitable for wrapping in a
7129 CONSTRUCTOR to use as the DECL_INITIAL for a vtable. If
7130 NON_FN_ENTRIES_P is not NULL, *NON_FN_ENTRIES_P is set to the
7131 number of non-function entries in the vtable.
7133 It might seem that this function should never be called with a
7134 BINFO for which BINFO_PRIMARY_P holds, the vtable for such a
7135 base is always subsumed by a derived class vtable. However, when
7136 we are building construction vtables, we do build vtables for
7137 primary bases; we need these while the primary base is being
7141 build_vtbl_initializer (tree binfo,
7145 int* non_fn_entries_p)
7152 VEC(tree,gc) *vbases;
7154 /* Initialize VID. */
7155 memset (&vid, 0, sizeof (vid));
7158 vid.rtti_binfo = rtti_binfo;
7159 vid.last_init = &vid.inits;
7160 vid.primary_vtbl_p = SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), t);
7161 vid.ctor_vtbl_p = !SAME_BINFO_TYPE_P (BINFO_TYPE (rtti_binfo), t);
7162 vid.generate_vcall_entries = true;
7163 /* The first vbase or vcall offset is at index -3 in the vtable. */
7164 vid.index = ssize_int(-3 * TARGET_VTABLE_DATA_ENTRY_DISTANCE);
7166 /* Add entries to the vtable for RTTI. */
7167 build_rtti_vtbl_entries (binfo, &vid);
7169 /* Create an array for keeping track of the functions we've
7170 processed. When we see multiple functions with the same
7171 signature, we share the vcall offsets. */
7172 vid.fns = VEC_alloc (tree, gc, 32);
7173 /* Add the vcall and vbase offset entries. */
7174 build_vcall_and_vbase_vtbl_entries (binfo, &vid);
7176 /* Clear BINFO_VTABLE_PATH_MARKED; it's set by
7177 build_vbase_offset_vtbl_entries. */
7178 for (vbases = CLASSTYPE_VBASECLASSES (t), ix = 0;
7179 VEC_iterate (tree, vbases, ix, vbinfo); ix++)
7180 BINFO_VTABLE_PATH_MARKED (vbinfo) = 0;
7182 /* If the target requires padding between data entries, add that now. */
7183 if (TARGET_VTABLE_DATA_ENTRY_DISTANCE > 1)
7187 for (prev = &vid.inits; (cur = *prev); prev = &TREE_CHAIN (cur))
7192 for (i = 1; i < TARGET_VTABLE_DATA_ENTRY_DISTANCE; ++i)
7193 add = tree_cons (NULL_TREE,
7194 build1 (NOP_EXPR, vtable_entry_type,
7201 if (non_fn_entries_p)
7202 *non_fn_entries_p = list_length (vid.inits);
7204 /* Go through all the ordinary virtual functions, building up
7206 vfun_inits = NULL_TREE;
7207 for (v = BINFO_VIRTUALS (orig_binfo); v; v = TREE_CHAIN (v))
7211 tree fn, fn_original;
7212 tree init = NULL_TREE;
7216 if (DECL_THUNK_P (fn))
7218 if (!DECL_NAME (fn))
7220 if (THUNK_ALIAS (fn))
7222 fn = THUNK_ALIAS (fn);
7225 fn_original = THUNK_TARGET (fn);
7228 /* If the only definition of this function signature along our
7229 primary base chain is from a lost primary, this vtable slot will
7230 never be used, so just zero it out. This is important to avoid
7231 requiring extra thunks which cannot be generated with the function.
7233 We first check this in update_vtable_entry_for_fn, so we handle
7234 restored primary bases properly; we also need to do it here so we
7235 zero out unused slots in ctor vtables, rather than filling themff
7236 with erroneous values (though harmless, apart from relocation
7238 for (b = binfo; ; b = get_primary_binfo (b))
7240 /* We found a defn before a lost primary; go ahead as normal. */
7241 if (look_for_overrides_here (BINFO_TYPE (b), fn_original))
7244 /* The nearest definition is from a lost primary; clear the
7246 if (BINFO_LOST_PRIMARY_P (b))
7248 init = size_zero_node;
7255 /* Pull the offset for `this', and the function to call, out of
7257 delta = BV_DELTA (v);
7258 vcall_index = BV_VCALL_INDEX (v);
7260 gcc_assert (TREE_CODE (delta) == INTEGER_CST);
7261 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
7263 /* You can't call an abstract virtual function; it's abstract.
7264 So, we replace these functions with __pure_virtual. */
7265 if (DECL_PURE_VIRTUAL_P (fn_original))
7268 if (abort_fndecl_addr == NULL)
7269 abort_fndecl_addr = build1 (ADDR_EXPR, vfunc_ptr_type_node, fn);
7270 init = abort_fndecl_addr;
7274 if (!integer_zerop (delta) || vcall_index)
7276 fn = make_thunk (fn, /*this_adjusting=*/1, delta, vcall_index);
7277 if (!DECL_NAME (fn))
7280 /* Take the address of the function, considering it to be of an
7281 appropriate generic type. */
7282 init = build1 (ADDR_EXPR, vfunc_ptr_type_node, fn);
7286 /* And add it to the chain of initializers. */
7287 if (TARGET_VTABLE_USES_DESCRIPTORS)
7290 if (init == size_zero_node)
7291 for (i = 0; i < TARGET_VTABLE_USES_DESCRIPTORS; ++i)
7292 vfun_inits = tree_cons (NULL_TREE, init, vfun_inits);
7294 for (i = 0; i < TARGET_VTABLE_USES_DESCRIPTORS; ++i)
7296 tree fdesc = build2 (FDESC_EXPR, vfunc_ptr_type_node,
7297 TREE_OPERAND (init, 0),
7298 build_int_cst (NULL_TREE, i));
7299 TREE_CONSTANT (fdesc) = 1;
7300 TREE_INVARIANT (fdesc) = 1;
7302 vfun_inits = tree_cons (NULL_TREE, fdesc, vfun_inits);
7306 vfun_inits = tree_cons (NULL_TREE, init, vfun_inits);
7309 /* The initializers for virtual functions were built up in reverse
7310 order; straighten them out now. */
7311 vfun_inits = nreverse (vfun_inits);
7313 /* The negative offset initializers are also in reverse order. */
7314 vid.inits = nreverse (vid.inits);
7316 /* Chain the two together. */
7317 return chainon (vid.inits, vfun_inits);
7320 /* Adds to vid->inits the initializers for the vbase and vcall
7321 offsets in BINFO, which is in the hierarchy dominated by T. */
7324 build_vcall_and_vbase_vtbl_entries (tree binfo, vtbl_init_data* vid)
7328 /* If this is a derived class, we must first create entries
7329 corresponding to the primary base class. */
7330 b = get_primary_binfo (binfo);
7332 build_vcall_and_vbase_vtbl_entries (b, vid);
7334 /* Add the vbase entries for this base. */
7335 build_vbase_offset_vtbl_entries (binfo, vid);
7336 /* Add the vcall entries for this base. */
7337 build_vcall_offset_vtbl_entries (binfo, vid);
7340 /* Returns the initializers for the vbase offset entries in the vtable
7341 for BINFO (which is part of the class hierarchy dominated by T), in
7342 reverse order. VBASE_OFFSET_INDEX gives the vtable index
7343 where the next vbase offset will go. */
7346 build_vbase_offset_vtbl_entries (tree binfo, vtbl_init_data* vid)
7350 tree non_primary_binfo;
7352 /* If there are no virtual baseclasses, then there is nothing to
7354 if (!CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo)))
7359 /* We might be a primary base class. Go up the inheritance hierarchy
7360 until we find the most derived class of which we are a primary base:
7361 it is the offset of that which we need to use. */
7362 non_primary_binfo = binfo;
7363 while (BINFO_INHERITANCE_CHAIN (non_primary_binfo))
7367 /* If we have reached a virtual base, then it must be a primary
7368 base (possibly multi-level) of vid->binfo, or we wouldn't
7369 have called build_vcall_and_vbase_vtbl_entries for it. But it
7370 might be a lost primary, so just skip down to vid->binfo. */
7371 if (BINFO_VIRTUAL_P (non_primary_binfo))
7373 non_primary_binfo = vid->binfo;
7377 b = BINFO_INHERITANCE_CHAIN (non_primary_binfo);
7378 if (get_primary_binfo (b) != non_primary_binfo)
7380 non_primary_binfo = b;
7383 /* Go through the virtual bases, adding the offsets. */
7384 for (vbase = TYPE_BINFO (BINFO_TYPE (binfo));
7386 vbase = TREE_CHAIN (vbase))
7391 if (!BINFO_VIRTUAL_P (vbase))
7394 /* Find the instance of this virtual base in the complete
7396 b = copied_binfo (vbase, binfo);
7398 /* If we've already got an offset for this virtual base, we
7399 don't need another one. */
7400 if (BINFO_VTABLE_PATH_MARKED (b))
7402 BINFO_VTABLE_PATH_MARKED (b) = 1;
7404 /* Figure out where we can find this vbase offset. */
7405 delta = size_binop (MULT_EXPR,
7408 TYPE_SIZE_UNIT (vtable_entry_type)));
7409 if (vid->primary_vtbl_p)
7410 BINFO_VPTR_FIELD (b) = delta;
7412 if (binfo != TYPE_BINFO (t))
7413 /* The vbase offset had better be the same. */
7414 gcc_assert (tree_int_cst_equal (delta, BINFO_VPTR_FIELD (vbase)));
7416 /* The next vbase will come at a more negative offset. */
7417 vid->index = size_binop (MINUS_EXPR, vid->index,
7418 ssize_int (TARGET_VTABLE_DATA_ENTRY_DISTANCE));
7420 /* The initializer is the delta from BINFO to this virtual base.
7421 The vbase offsets go in reverse inheritance-graph order, and
7422 we are walking in inheritance graph order so these end up in
7424 delta = size_diffop (BINFO_OFFSET (b), BINFO_OFFSET (non_primary_binfo));
7427 = build_tree_list (NULL_TREE,
7428 fold_build1 (NOP_EXPR,
7431 vid->last_init = &TREE_CHAIN (*vid->last_init);
7435 /* Adds the initializers for the vcall offset entries in the vtable
7436 for BINFO (which is part of the class hierarchy dominated by VID->DERIVED)
7440 build_vcall_offset_vtbl_entries (tree binfo, vtbl_init_data* vid)
7442 /* We only need these entries if this base is a virtual base. We
7443 compute the indices -- but do not add to the vtable -- when
7444 building the main vtable for a class. */
7445 if (binfo == TYPE_BINFO (vid->derived)
7446 || (BINFO_VIRTUAL_P (binfo)
7447 /* If BINFO is RTTI_BINFO, then (since BINFO does not
7448 correspond to VID->DERIVED), we are building a primary
7449 construction virtual table. Since this is a primary
7450 virtual table, we do not need the vcall offsets for
7452 && binfo != vid->rtti_binfo))
7454 /* We need a vcall offset for each of the virtual functions in this
7455 vtable. For example:
7457 class A { virtual void f (); };
7458 class B1 : virtual public A { virtual void f (); };
7459 class B2 : virtual public A { virtual void f (); };
7460 class C: public B1, public B2 { virtual void f (); };
7462 A C object has a primary base of B1, which has a primary base of A. A
7463 C also has a secondary base of B2, which no longer has a primary base
7464 of A. So the B2-in-C construction vtable needs a secondary vtable for
7465 A, which will adjust the A* to a B2* to call f. We have no way of
7466 knowing what (or even whether) this offset will be when we define B2,
7467 so we store this "vcall offset" in the A sub-vtable and look it up in
7468 a "virtual thunk" for B2::f.
7470 We need entries for all the functions in our primary vtable and
7471 in our non-virtual bases' secondary vtables. */
7473 /* If we are just computing the vcall indices -- but do not need
7474 the actual entries -- not that. */
7475 if (!BINFO_VIRTUAL_P (binfo))
7476 vid->generate_vcall_entries = false;
7477 /* Now, walk through the non-virtual bases, adding vcall offsets. */
7478 add_vcall_offset_vtbl_entries_r (binfo, vid);
7482 /* Build vcall offsets, starting with those for BINFO. */
7485 add_vcall_offset_vtbl_entries_r (tree binfo, vtbl_init_data* vid)
7491 /* Don't walk into virtual bases -- except, of course, for the
7492 virtual base for which we are building vcall offsets. Any
7493 primary virtual base will have already had its offsets generated
7494 through the recursion in build_vcall_and_vbase_vtbl_entries. */
7495 if (BINFO_VIRTUAL_P (binfo) && vid->vbase != binfo)
7498 /* If BINFO has a primary base, process it first. */
7499 primary_binfo = get_primary_binfo (binfo);
7501 add_vcall_offset_vtbl_entries_r (primary_binfo, vid);
7503 /* Add BINFO itself to the list. */
7504 add_vcall_offset_vtbl_entries_1 (binfo, vid);
7506 /* Scan the non-primary bases of BINFO. */
7507 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
7508 if (base_binfo != primary_binfo)
7509 add_vcall_offset_vtbl_entries_r (base_binfo, vid);
7512 /* Called from build_vcall_offset_vtbl_entries_r. */
7515 add_vcall_offset_vtbl_entries_1 (tree binfo, vtbl_init_data* vid)
7517 /* Make entries for the rest of the virtuals. */
7518 if (abi_version_at_least (2))
7522 /* The ABI requires that the methods be processed in declaration
7523 order. G++ 3.2 used the order in the vtable. */
7524 for (orig_fn = TYPE_METHODS (BINFO_TYPE (binfo));
7526 orig_fn = TREE_CHAIN (orig_fn))
7527 if (DECL_VINDEX (orig_fn))
7528 add_vcall_offset (orig_fn, binfo, vid);
7532 tree derived_virtuals;
7535 /* If BINFO is a primary base, the most derived class which has
7536 BINFO as a primary base; otherwise, just BINFO. */
7537 tree non_primary_binfo;
7539 /* We might be a primary base class. Go up the inheritance hierarchy
7540 until we find the most derived class of which we are a primary base:
7541 it is the BINFO_VIRTUALS there that we need to consider. */
7542 non_primary_binfo = binfo;
7543 while (BINFO_INHERITANCE_CHAIN (non_primary_binfo))
7547 /* If we have reached a virtual base, then it must be vid->vbase,
7548 because we ignore other virtual bases in
7549 add_vcall_offset_vtbl_entries_r. In turn, it must be a primary
7550 base (possibly multi-level) of vid->binfo, or we wouldn't
7551 have called build_vcall_and_vbase_vtbl_entries for it. But it
7552 might be a lost primary, so just skip down to vid->binfo. */
7553 if (BINFO_VIRTUAL_P (non_primary_binfo))
7555 gcc_assert (non_primary_binfo == vid->vbase);
7556 non_primary_binfo = vid->binfo;
7560 b = BINFO_INHERITANCE_CHAIN (non_primary_binfo);
7561 if (get_primary_binfo (b) != non_primary_binfo)
7563 non_primary_binfo = b;
7566 if (vid->ctor_vtbl_p)
7567 /* For a ctor vtable we need the equivalent binfo within the hierarchy
7568 where rtti_binfo is the most derived type. */
7570 = original_binfo (non_primary_binfo, vid->rtti_binfo);
7572 for (base_virtuals = BINFO_VIRTUALS (binfo),
7573 derived_virtuals = BINFO_VIRTUALS (non_primary_binfo),
7574 orig_virtuals = BINFO_VIRTUALS (TYPE_BINFO (BINFO_TYPE (binfo)));
7576 base_virtuals = TREE_CHAIN (base_virtuals),
7577 derived_virtuals = TREE_CHAIN (derived_virtuals),
7578 orig_virtuals = TREE_CHAIN (orig_virtuals))
7582 /* Find the declaration that originally caused this function to
7583 be present in BINFO_TYPE (binfo). */
7584 orig_fn = BV_FN (orig_virtuals);
7586 /* When processing BINFO, we only want to generate vcall slots for
7587 function slots introduced in BINFO. So don't try to generate
7588 one if the function isn't even defined in BINFO. */
7589 if (!SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), DECL_CONTEXT (orig_fn)))
7592 add_vcall_offset (orig_fn, binfo, vid);
7597 /* Add a vcall offset entry for ORIG_FN to the vtable. */
7600 add_vcall_offset (tree orig_fn, tree binfo, vtbl_init_data *vid)
7606 /* If there is already an entry for a function with the same
7607 signature as FN, then we do not need a second vcall offset.
7608 Check the list of functions already present in the derived
7610 for (i = 0; VEC_iterate (tree, vid->fns, i, derived_entry); ++i)
7612 if (same_signature_p (derived_entry, orig_fn)
7613 /* We only use one vcall offset for virtual destructors,
7614 even though there are two virtual table entries. */
7615 || (DECL_DESTRUCTOR_P (derived_entry)
7616 && DECL_DESTRUCTOR_P (orig_fn)))
7620 /* If we are building these vcall offsets as part of building
7621 the vtable for the most derived class, remember the vcall
7623 if (vid->binfo == TYPE_BINFO (vid->derived))
7625 tree_pair_p elt = VEC_safe_push (tree_pair_s, gc,
7626 CLASSTYPE_VCALL_INDICES (vid->derived),
7628 elt->purpose = orig_fn;
7629 elt->value = vid->index;
7632 /* The next vcall offset will be found at a more negative
7634 vid->index = size_binop (MINUS_EXPR, vid->index,
7635 ssize_int (TARGET_VTABLE_DATA_ENTRY_DISTANCE));
7637 /* Keep track of this function. */
7638 VEC_safe_push (tree, gc, vid->fns, orig_fn);
7640 if (vid->generate_vcall_entries)
7645 /* Find the overriding function. */
7646 fn = find_final_overrider (vid->rtti_binfo, binfo, orig_fn);
7647 if (fn == error_mark_node)
7648 vcall_offset = build1 (NOP_EXPR, vtable_entry_type,
7652 base = TREE_VALUE (fn);
7654 /* The vbase we're working on is a primary base of
7655 vid->binfo. But it might be a lost primary, so its
7656 BINFO_OFFSET might be wrong, so we just use the
7657 BINFO_OFFSET from vid->binfo. */
7658 vcall_offset = size_diffop (BINFO_OFFSET (base),
7659 BINFO_OFFSET (vid->binfo));
7660 vcall_offset = fold_build1 (NOP_EXPR, vtable_entry_type,
7663 /* Add the initializer to the vtable. */
7664 *vid->last_init = build_tree_list (NULL_TREE, vcall_offset);
7665 vid->last_init = &TREE_CHAIN (*vid->last_init);
7669 /* Return vtbl initializers for the RTTI entries corresponding to the
7670 BINFO's vtable. The RTTI entries should indicate the object given
7671 by VID->rtti_binfo. */
7674 build_rtti_vtbl_entries (tree binfo, vtbl_init_data* vid)
7683 basetype = BINFO_TYPE (binfo);
7684 t = BINFO_TYPE (vid->rtti_binfo);
7686 /* To find the complete object, we will first convert to our most
7687 primary base, and then add the offset in the vtbl to that value. */
7689 while (CLASSTYPE_HAS_PRIMARY_BASE_P (BINFO_TYPE (b))
7690 && !BINFO_LOST_PRIMARY_P (b))
7694 primary_base = get_primary_binfo (b);
7695 gcc_assert (BINFO_PRIMARY_P (primary_base)
7696 && BINFO_INHERITANCE_CHAIN (primary_base) == b);
7699 offset = size_diffop (BINFO_OFFSET (vid->rtti_binfo), BINFO_OFFSET (b));
7701 /* The second entry is the address of the typeinfo object. */
7703 decl = build_address (get_tinfo_decl (t));
7705 decl = integer_zero_node;
7707 /* Convert the declaration to a type that can be stored in the
7709 init = build_nop (vfunc_ptr_type_node, decl);
7710 *vid->last_init = build_tree_list (NULL_TREE, init);
7711 vid->last_init = &TREE_CHAIN (*vid->last_init);
7713 /* Add the offset-to-top entry. It comes earlier in the vtable than
7714 the typeinfo entry. Convert the offset to look like a
7715 function pointer, so that we can put it in the vtable. */
7716 init = build_nop (vfunc_ptr_type_node, offset);
7717 *vid->last_init = build_tree_list (NULL_TREE, init);
7718 vid->last_init = &TREE_CHAIN (*vid->last_init);
7721 /* Fold a OBJ_TYPE_REF expression to the address of a function.
7722 KNOWN_TYPE carries the true type of OBJ_TYPE_REF_OBJECT(REF). */
7725 cp_fold_obj_type_ref (tree ref, tree known_type)
7727 HOST_WIDE_INT index = tree_low_cst (OBJ_TYPE_REF_TOKEN (ref), 1);
7728 HOST_WIDE_INT i = 0;
7729 tree v = BINFO_VIRTUALS (TYPE_BINFO (known_type));
7734 i += (TARGET_VTABLE_USES_DESCRIPTORS
7735 ? TARGET_VTABLE_USES_DESCRIPTORS : 1);
7741 #ifdef ENABLE_CHECKING
7742 gcc_assert (tree_int_cst_equal (OBJ_TYPE_REF_TOKEN (ref),
7743 DECL_VINDEX (fndecl)));
7746 cgraph_node (fndecl)->local.vtable_method = true;
7748 return build_address (fndecl);
7751 #include "gt-cp-class.h"