1 /* Functions related to building classes and their related objects.
2 Copyright (C) 1987, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3 1999, 2000 Free Software Foundation, Inc.
4 Contributed by Michael Tiemann (tiemann@cygnus.com)
6 This file is part of GNU CC.
8 GNU CC is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2, or (at your option)
13 GNU CC is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with GNU CC; see the file COPYING. If not, write to
20 the Free Software Foundation, 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA. */
24 /* High-level class interface. */
38 #define obstack_chunk_alloc xmalloc
39 #define obstack_chunk_free free
41 /* The number of nested classes being processed. If we are not in the
42 scope of any class, this is zero. */
44 int current_class_depth;
46 /* In order to deal with nested classes, we keep a stack of classes.
47 The topmost entry is the innermost class, and is the entry at index
48 CURRENT_CLASS_DEPTH */
50 typedef struct class_stack_node {
51 /* The name of the class. */
54 /* The _TYPE node for the class. */
57 /* The access specifier pending for new declarations in the scope of
61 /* If were defining TYPE, the names used in this class. */
62 splay_tree names_used;
63 }* class_stack_node_t;
65 typedef struct vcall_offset_data_s
67 /* The binfo for the most-derived type. */
69 /* The negative-index vtable initializers built up so far. These
70 are in order from least negative index to most negative index. */
72 /* The last (i.e., most negative entry in INITS. */
74 /* The binfo for the virtual base for which we're building
77 /* The functions in vbase for which we have already provided vcall
80 /* The vtable index of the next vcall or vbase offset. */
82 /* Nonzero if we are building the initializer for the primary
87 /* The stack itself. This is an dynamically resized array. The
88 number of elements allocated is CURRENT_CLASS_STACK_SIZE. */
89 static int current_class_stack_size;
90 static class_stack_node_t current_class_stack;
92 /* An array of all local classes present in this translation unit, in
94 varray_type local_classes;
96 static tree get_vfield_name PARAMS ((tree));
97 static void finish_struct_anon PARAMS ((tree));
98 static tree build_vbase_pointer PARAMS ((tree, tree));
99 static tree build_vtable_entry PARAMS ((tree, tree, tree, int));
100 static tree get_vtable_name PARAMS ((tree));
101 static tree get_derived_offset PARAMS ((tree, tree));
102 static tree get_basefndecls PARAMS ((tree, tree));
103 static int build_primary_vtable PARAMS ((tree, tree));
104 static int build_secondary_vtable PARAMS ((tree, tree));
105 static tree dfs_finish_vtbls PARAMS ((tree, void *));
106 static tree dfs_accumulate_vtbl_inits PARAMS ((tree, tree, tree, tree,
108 static void finish_vtbls PARAMS ((tree));
109 static void modify_vtable_entry PARAMS ((tree, tree, tree, tree, tree *));
110 static void add_virtual_function PARAMS ((tree *, tree *, int *, tree, tree));
111 static tree delete_duplicate_fields_1 PARAMS ((tree, tree));
112 static void delete_duplicate_fields PARAMS ((tree));
113 static void finish_struct_bits PARAMS ((tree));
114 static int alter_access PARAMS ((tree, tree, tree));
115 static void handle_using_decl PARAMS ((tree, tree));
116 static int same_signature_p PARAMS ((tree, tree));
117 static int strictly_overrides PARAMS ((tree, tree));
118 static void mark_overriders PARAMS ((tree, tree));
119 static void check_for_override PARAMS ((tree, tree));
120 static tree dfs_modify_vtables PARAMS ((tree, void *));
121 static tree modify_all_vtables PARAMS ((tree, int *, tree));
122 static void determine_primary_base PARAMS ((tree, int *));
123 static void finish_struct_methods PARAMS ((tree));
124 static void maybe_warn_about_overly_private_class PARAMS ((tree));
125 static int field_decl_cmp PARAMS ((const tree *, const tree *));
126 static int method_name_cmp PARAMS ((const tree *, const tree *));
127 static tree add_implicitly_declared_members PARAMS ((tree, int, int, int));
128 static tree fixed_type_or_null PARAMS ((tree, int *));
129 static tree resolve_address_of_overloaded_function PARAMS ((tree, tree, int,
131 static void build_vtable_entry_ref PARAMS ((tree, tree, tree));
132 static tree build_vtbl_initializer PARAMS ((tree, tree, tree, tree, int *));
133 static int count_fields PARAMS ((tree));
134 static int add_fields_to_vec PARAMS ((tree, tree, int));
135 static void check_bitfield_decl PARAMS ((tree));
136 static void check_field_decl PARAMS ((tree, tree, int *, int *, int *, int *));
137 static void check_field_decls PARAMS ((tree, tree *, int *, int *, int *,
139 static void build_base_field PARAMS ((record_layout_info, tree, int *,
140 unsigned int *, varray_type *));
141 static varray_type build_base_fields PARAMS ((record_layout_info, int *));
142 static tree build_vbase_pointer_fields PARAMS ((record_layout_info, int *));
143 static tree build_vtbl_or_vbase_field PARAMS ((tree, tree, tree, tree, tree,
145 static void check_methods PARAMS ((tree));
146 static void remove_zero_width_bit_fields PARAMS ((tree));
147 static void check_bases PARAMS ((tree, int *, int *, int *));
148 static void check_bases_and_members PARAMS ((tree, int *));
149 static tree create_vtable_ptr PARAMS ((tree, int *, int *, tree *, tree *));
150 static void layout_class_type PARAMS ((tree, int *, int *, tree *, tree *));
151 static void fixup_pending_inline PARAMS ((struct pending_inline *));
152 static void fixup_inline_methods PARAMS ((tree));
153 static void set_primary_base PARAMS ((tree, int, int *));
154 static tree dfs_propagate_binfo_offsets PARAMS ((tree, void *));
155 static void propagate_binfo_offsets PARAMS ((tree, tree));
156 static void layout_virtual_bases PARAMS ((tree, varray_type *));
157 static tree dfs_set_offset_for_shared_vbases PARAMS ((tree, void *));
158 static tree dfs_set_offset_for_unshared_vbases PARAMS ((tree, void *));
159 static void build_vbase_offset_vtbl_entries PARAMS ((tree, vcall_offset_data *));
160 static tree dfs_build_vcall_offset_vtbl_entries PARAMS ((tree, void *));
161 static void build_vcall_offset_vtbl_entries PARAMS ((tree, vcall_offset_data *));
162 static void layout_vtable_decl PARAMS ((tree, int));
163 static tree dfs_find_final_overrider PARAMS ((tree, void *));
164 static tree find_final_overrider PARAMS ((tree, tree, tree));
165 static int make_new_vtable PARAMS ((tree, tree));
166 static void dump_class_hierarchy_r PARAMS ((tree, tree, int));
167 extern void dump_class_hierarchy PARAMS ((tree));
168 static tree build_vtable PARAMS ((tree, tree, tree));
169 static void initialize_vtable PARAMS ((tree, tree));
170 static void initialize_array PARAMS ((tree, tree));
171 static void layout_nonempty_base_or_field PARAMS ((record_layout_info,
174 static tree dfs_record_base_offsets PARAMS ((tree, void *));
175 static void record_base_offsets PARAMS ((tree, varray_type *));
176 static tree dfs_search_base_offsets PARAMS ((tree, void *));
177 static int layout_conflict_p PARAMS ((tree, varray_type));
178 static unsigned HOST_WIDE_INT end_of_class PARAMS ((tree, int));
179 static void layout_empty_base PARAMS ((tree, tree, varray_type));
180 static void accumulate_vtbl_inits PARAMS ((tree, tree, tree, tree, tree));
181 static void set_vindex PARAMS ((tree, tree, int *));
182 static void build_rtti_vtbl_entries PARAMS ((tree, tree, vcall_offset_data *));
183 static void build_vcall_and_vbase_vtbl_entries PARAMS ((tree,
184 vcall_offset_data *));
185 static tree dfs_mark_primary_bases PARAMS ((tree, void *));
186 static void mark_primary_bases PARAMS ((tree));
187 static void clone_constructors_and_destructors PARAMS ((tree));
188 static tree build_clone PARAMS ((tree, tree));
189 static void update_vtable_entry_for_fn PARAMS ((tree, tree, tree, tree *));
190 static tree copy_virtuals PARAMS ((tree));
191 static void build_ctor_vtbl_group PARAMS ((tree, tree));
192 static void build_vtt PARAMS ((tree));
193 static tree *build_vtt_inits PARAMS ((tree, tree, tree *, tree *));
194 static tree dfs_build_vtt_inits PARAMS ((tree, void *));
195 static tree dfs_fixup_binfo_vtbls PARAMS ((tree, void *));
196 static int indirect_primary_base_p PARAMS ((tree, tree));
198 /* Variables shared between class.c and call.c. */
200 #ifdef GATHER_STATISTICS
202 int n_vtable_entries = 0;
203 int n_vtable_searches = 0;
204 int n_vtable_elems = 0;
205 int n_convert_harshness = 0;
206 int n_compute_conversion_costs = 0;
207 int n_build_method_call = 0;
208 int n_inner_fields_searched = 0;
211 /* Virtual base class layout. */
213 /* Returns a list of virtual base class pointers as a chain of
217 build_vbase_pointer_fields (rli, empty_p)
218 record_layout_info rli;
221 /* Chain to hold all the new FIELD_DECLs which point at virtual
224 tree vbase_decls = NULL_TREE;
225 tree binfos = TYPE_BINFO_BASETYPES (rec);
226 int n_baseclasses = CLASSTYPE_N_BASECLASSES (rec);
230 /* Under the new ABI, there are no vbase pointers in the object.
231 Instead, the offsets are stored in the vtable. */
232 if (vbase_offsets_in_vtable_p ())
235 /* Loop over the baseclasses, adding vbase pointers as needed. */
236 for (i = 0; i < n_baseclasses; i++)
238 register tree base_binfo = TREE_VEC_ELT (binfos, i);
239 register tree basetype = BINFO_TYPE (base_binfo);
241 if (!COMPLETE_TYPE_P (basetype))
242 /* This error is now reported in xref_tag, thus giving better
243 location information. */
246 /* All basetypes are recorded in the association list of the
249 if (TREE_VIA_VIRTUAL (base_binfo))
254 /* The offset for a virtual base class is only used in computing
255 virtual function tables and for initializing virtual base
256 pointers. It is built once `get_vbase_types' is called. */
258 /* If this basetype can come from another vbase pointer
259 without an additional indirection, we will share
260 that pointer. If an indirection is involved, we
261 make our own pointer. */
262 for (j = 0; j < n_baseclasses; j++)
264 tree other_base_binfo = TREE_VEC_ELT (binfos, j);
265 if (! TREE_VIA_VIRTUAL (other_base_binfo)
266 && binfo_for_vbase (basetype, BINFO_TYPE (other_base_binfo)))
269 FORMAT_VBASE_NAME (name, basetype);
270 decl = build_vtbl_or_vbase_field (get_identifier (name),
271 get_identifier (VTABLE_BASE),
272 build_pointer_type (basetype),
276 BINFO_VPTR_FIELD (base_binfo) = decl;
277 TREE_CHAIN (decl) = vbase_decls;
278 place_field (rli, decl);
283 /* The space this decl occupies has already been accounted for. */
291 /* Returns a pointer to the virtual base class of EXP that has the
292 indicated TYPE. EXP is of class type, not a pointer type. */
295 build_vbase_pointer (exp, type)
298 if (vbase_offsets_in_vtable_p ())
303 /* Find the shared copy of TYPE; that's where the vtable offset
305 vbase = binfo_for_vbase (type, TREE_TYPE (exp));
306 /* Find the virtual function table pointer. */
307 vbase_ptr = build_vfield_ref (exp, TREE_TYPE (exp));
308 /* Compute the location where the offset will lie. */
309 vbase_ptr = build (PLUS_EXPR,
310 TREE_TYPE (vbase_ptr),
312 BINFO_VPTR_FIELD (vbase));
313 vbase_ptr = build1 (NOP_EXPR,
314 build_pointer_type (ptrdiff_type_node),
316 /* Add the contents of this location to EXP. */
317 return build (PLUS_EXPR,
318 build_pointer_type (type),
319 build_unary_op (ADDR_EXPR, exp, /*noconvert=*/0),
320 build1 (INDIRECT_REF, ptrdiff_type_node, vbase_ptr));
325 FORMAT_VBASE_NAME (name, type);
326 return build_component_ref (exp, get_identifier (name), NULL_TREE, 0);
330 /* Build multi-level access to EXPR using hierarchy path PATH.
331 CODE is PLUS_EXPR if we are going with the grain,
332 and MINUS_EXPR if we are not (in which case, we cannot traverse
333 virtual baseclass links).
335 TYPE is the type we want this path to have on exit.
337 NONNULL is non-zero if we know (for any reason) that EXPR is
338 not, in fact, zero. */
341 build_vbase_path (code, type, expr, path, nonnull)
343 tree type, expr, path;
346 register int changed = 0;
347 tree last = NULL_TREE, last_virtual = NULL_TREE;
349 tree null_expr = 0, nonnull_expr;
351 tree offset = integer_zero_node;
353 if (BINFO_INHERITANCE_CHAIN (path) == NULL_TREE)
354 return build1 (NOP_EXPR, type, expr);
356 /* We could do better if we had additional logic to convert back to the
357 unconverted type (the static type of the complete object), and then
358 convert back to the type we want. Until that is done, we only optimize
359 if the complete type is the same type as expr has. */
360 fixed_type_p = resolves_to_fixed_type_p (expr, &nonnull);
362 if (!fixed_type_p && TREE_SIDE_EFFECTS (expr))
363 expr = save_expr (expr);
366 path = reverse_path (path);
368 basetype = BINFO_TYPE (path);
372 if (TREE_VIA_VIRTUAL (TREE_VALUE (path)))
374 last_virtual = BINFO_TYPE (TREE_VALUE (path));
375 if (code == PLUS_EXPR)
377 changed = ! fixed_type_p;
383 /* We already check for ambiguous things in the caller, just
387 tree binfo = get_binfo (last, TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (nonnull_expr))), 0);
388 nonnull_expr = convert_pointer_to_real (binfo, nonnull_expr);
390 ind = build_indirect_ref (nonnull_expr, NULL_PTR);
391 nonnull_expr = build_vbase_pointer (ind, last_virtual);
393 && TREE_CODE (type) == POINTER_TYPE
394 && null_expr == NULL_TREE)
396 null_expr = build1 (NOP_EXPR, build_pointer_type (last_virtual), integer_zero_node);
397 expr = build (COND_EXPR, build_pointer_type (last_virtual),
398 build (EQ_EXPR, boolean_type_node, expr,
400 null_expr, nonnull_expr);
403 /* else we'll figure out the offset below. */
405 /* Happens in the case of parse errors. */
406 if (nonnull_expr == error_mark_node)
407 return error_mark_node;
411 cp_error ("cannot cast up from virtual baseclass `%T'",
413 return error_mark_node;
416 last = TREE_VALUE (path);
417 path = TREE_CHAIN (path);
419 /* LAST is now the last basetype assoc on the path. */
421 /* A pointer to a virtual base member of a non-null object
422 is non-null. Therefore, we only need to test for zeroness once.
423 Make EXPR the canonical expression to deal with here. */
426 TREE_OPERAND (expr, 2) = nonnull_expr;
427 TREE_TYPE (expr) = TREE_TYPE (TREE_OPERAND (expr, 1))
428 = TREE_TYPE (nonnull_expr);
433 /* If we go through any virtual base pointers, make sure that
434 casts to BASETYPE from the last virtual base class use
435 the right value for BASETYPE. */
438 tree intype = TREE_TYPE (TREE_TYPE (expr));
440 if (TYPE_MAIN_VARIANT (intype) != BINFO_TYPE (last))
442 = BINFO_OFFSET (get_binfo (last, TYPE_MAIN_VARIANT (intype), 0));
445 offset = BINFO_OFFSET (last);
447 if (! integer_zerop (offset))
449 /* Bash types to make the backend happy. */
450 offset = cp_convert (type, offset);
452 /* If expr might be 0, we need to preserve that zeroness. */
456 TREE_TYPE (null_expr) = type;
458 null_expr = build1 (NOP_EXPR, type, integer_zero_node);
459 if (TREE_SIDE_EFFECTS (expr))
460 expr = save_expr (expr);
462 return build (COND_EXPR, type,
463 build (EQ_EXPR, boolean_type_node, expr, integer_zero_node),
465 build (code, type, expr, offset));
467 else return build (code, type, expr, offset);
470 /* Cannot change the TREE_TYPE of a NOP_EXPR here, since it may
471 be used multiple times in initialization of multiple inheritance. */
474 TREE_TYPE (expr) = type;
478 return build1 (NOP_EXPR, type, expr);
482 /* Virtual function things. */
484 /* We want to give the assembler the vtable identifier as well as
485 the offset to the function pointer. So we generate
487 __asm__ __volatile__ (".vtable_entry %c0, %c1"
488 : : "s"(&class_vtable),
489 "i"((long)&vtbl[idx].pfn - (long)&vtbl[0])); */
492 build_vtable_entry_ref (basetype, vtbl, idx)
493 tree basetype, vtbl, idx;
495 static char asm_stmt[] = ".vtable_entry %c0, %c1";
498 s = build_unary_op (ADDR_EXPR,
499 get_vtbl_decl_for_binfo (TYPE_BINFO (basetype)),
501 s = build_tree_list (build_string (1, "s"), s);
503 i = build_array_ref (vtbl, idx);
504 if (!flag_vtable_thunks)
505 i = build_component_ref (i, pfn_identifier, vtable_entry_type, 0);
506 i = build_c_cast (ptrdiff_type_node, build_unary_op (ADDR_EXPR, i, 0));
507 i2 = build_array_ref (vtbl, build_int_2(0,0));
508 i2 = build_c_cast (ptrdiff_type_node, build_unary_op (ADDR_EXPR, i2, 0));
509 i = build_binary_op (MINUS_EXPR, i, i2);
510 i = build_tree_list (build_string (1, "i"), i);
512 finish_asm_stmt (ridpointers[RID_VOLATILE],
513 build_string (sizeof(asm_stmt)-1, asm_stmt),
514 NULL_TREE, chainon (s, i), NULL_TREE);
517 /* Given an object INSTANCE, return an expression which yields the
518 virtual function vtable element corresponding to INDEX. There are
519 many special cases for INSTANCE which we take care of here, mainly
520 to avoid creating extra tree nodes when we don't have to. */
523 build_vtbl_ref (instance, idx)
527 tree basetype = TREE_TYPE (instance);
529 if (TREE_CODE (basetype) == REFERENCE_TYPE)
530 basetype = TREE_TYPE (basetype);
532 if (instance == current_class_ref)
533 vtbl = build_vfield_ref (instance, basetype);
538 /* Try to figure out what a reference refers to, and
539 access its virtual function table directly. */
540 tree ref = NULL_TREE;
542 if (TREE_CODE (instance) == INDIRECT_REF
543 && TREE_CODE (TREE_TYPE (TREE_OPERAND (instance, 0))) == REFERENCE_TYPE)
544 ref = TREE_OPERAND (instance, 0);
545 else if (TREE_CODE (TREE_TYPE (instance)) == REFERENCE_TYPE)
548 if (ref && TREE_CODE (ref) == VAR_DECL
549 && DECL_INITIAL (ref))
551 tree init = DECL_INITIAL (ref);
553 while (TREE_CODE (init) == NOP_EXPR
554 || TREE_CODE (init) == NON_LVALUE_EXPR)
555 init = TREE_OPERAND (init, 0);
556 if (TREE_CODE (init) == ADDR_EXPR)
558 init = TREE_OPERAND (init, 0);
559 if (IS_AGGR_TYPE (TREE_TYPE (init))
560 && (TREE_CODE (init) == PARM_DECL
561 || TREE_CODE (init) == VAR_DECL))
567 if (IS_AGGR_TYPE (TREE_TYPE (instance))
568 && (TREE_CODE (instance) == RESULT_DECL
569 || TREE_CODE (instance) == PARM_DECL
570 || TREE_CODE (instance) == VAR_DECL))
572 vtbl = TYPE_BINFO_VTABLE (basetype);
573 /* Knowing the dynamic type of INSTANCE we can easily obtain
574 the correct vtable entry. In the new ABI, we resolve
575 this back to be in terms of the primary vtable. */
576 if (TREE_CODE (vtbl) == PLUS_EXPR)
578 idx = fold (build (PLUS_EXPR,
581 build (EXACT_DIV_EXPR,
583 TREE_OPERAND (vtbl, 1),
584 TYPE_SIZE_UNIT (vtable_entry_type))));
585 vtbl = get_vtbl_decl_for_binfo (TYPE_BINFO (basetype));
589 vtbl = build_vfield_ref (instance, basetype);
592 assemble_external (vtbl);
595 build_vtable_entry_ref (basetype, vtbl, idx);
597 aref = build_array_ref (vtbl, idx);
602 /* Given an object INSTANCE, return an expression which yields the
603 virtual function corresponding to INDEX. There are many special
604 cases for INSTANCE which we take care of here, mainly to avoid
605 creating extra tree nodes when we don't have to. */
608 build_vfn_ref (ptr_to_instptr, instance, idx)
609 tree *ptr_to_instptr, instance;
612 tree aref = build_vtbl_ref (instance, idx);
614 /* When using thunks, there is no extra delta, and we get the pfn
616 if (flag_vtable_thunks)
621 /* Save the intermediate result in a SAVE_EXPR so we don't have to
622 compute each component of the virtual function pointer twice. */
623 if (TREE_CODE (aref) == INDIRECT_REF)
624 TREE_OPERAND (aref, 0) = save_expr (TREE_OPERAND (aref, 0));
627 = build (PLUS_EXPR, TREE_TYPE (*ptr_to_instptr),
629 cp_convert (ptrdiff_type_node,
630 build_component_ref (aref, delta_identifier, NULL_TREE, 0)));
633 return build_component_ref (aref, pfn_identifier, NULL_TREE, 0);
636 /* Return the name of the virtual function table (as an IDENTIFIER_NODE)
637 for the given TYPE. */
640 get_vtable_name (type)
644 return mangle_vtbl_for_type (type);
646 return build_overload_with_type (get_identifier (VTABLE_NAME_PREFIX),
650 /* Return an IDENTIFIER_NODE for the name of the virtual table table
658 return mangle_vtt_for_type (type);
660 return build_overload_with_type (get_identifier (VTT_NAME_PREFIX),
664 /* Return the offset to the main vtable for a given base BINFO. */
667 get_vfield_offset (binfo)
671 size_binop (PLUS_EXPR, byte_position (TYPE_VFIELD (BINFO_TYPE (binfo))),
672 BINFO_OFFSET (binfo));
675 /* Get the offset to the start of the original binfo that we derived
676 this binfo from. If we find TYPE first, return the offset only
677 that far. The shortened search is useful because the this pointer
678 on method calling is expected to point to a DECL_CONTEXT (fndecl)
679 object, and not a baseclass of it. */
682 get_derived_offset (binfo, type)
685 tree offset1 = get_vfield_offset (TYPE_BINFO (BINFO_TYPE (binfo)));
688 while (!same_type_p (BINFO_TYPE (binfo), type))
689 binfo = BINFO_PRIMARY_BINFO (binfo);
691 offset2 = get_vfield_offset (TYPE_BINFO (BINFO_TYPE (binfo)));
692 return size_binop (MINUS_EXPR, offset1, offset2);
695 /* Create a VAR_DECL for a primary or secondary vtable for CLASS_TYPE.
696 (For a secondary vtable for B-in-D, CLASS_TYPE should be D, not B.)
697 Use NAME for the name of the vtable, and VTABLE_TYPE for its type. */
700 build_vtable (class_type, name, vtable_type)
707 decl = build_lang_decl (VAR_DECL, name, vtable_type);
708 DECL_CONTEXT (decl) = class_type;
709 DECL_ARTIFICIAL (decl) = 1;
710 TREE_STATIC (decl) = 1;
711 #ifndef WRITABLE_VTABLES
712 /* Make them READONLY by default. (mrs) */
713 TREE_READONLY (decl) = 1;
715 DECL_VIRTUAL_P (decl) = 1;
716 import_export_vtable (decl, class_type, 0);
721 /* Get the VAR_DECL of the vtable for TYPE. TYPE need not be polymorphic,
722 or even complete. If this does not exist, create it. If COMPLETE is
723 non-zero, then complete the definition of it -- that will render it
724 impossible to actually build the vtable, but is useful to get at those
725 which are known to exist in the runtime. */
728 get_vtable_decl (type, complete)
732 tree name = get_vtable_name (type);
733 tree decl = IDENTIFIER_GLOBAL_VALUE (name);
737 my_friendly_assert (TREE_CODE (decl) == VAR_DECL
738 && DECL_VIRTUAL_P (decl), 20000118);
742 decl = build_vtable (type, name, void_type_node);
743 decl = pushdecl_top_level (decl);
744 my_friendly_assert (IDENTIFIER_GLOBAL_VALUE (name) == decl,
747 /* At one time the vtable info was grabbed 2 words at a time. This
748 fails on sparc unless you have 8-byte alignment. (tiemann) */
749 DECL_ALIGN (decl) = MAX (TYPE_ALIGN (double_type_node),
754 DECL_EXTERNAL (decl) = 1;
755 cp_finish_decl (decl, NULL_TREE, NULL_TREE, 0);
761 /* Returns a copy of the BINFO_VIRTUALS list in BINFO. The
762 BV_VCALL_INDEX for each entry is cleared. */
765 copy_virtuals (binfo)
771 copies = copy_list (BINFO_VIRTUALS (binfo));
772 for (t = copies; t; t = TREE_CHAIN (t))
774 BV_VCALL_INDEX (t) = NULL_TREE;
775 BV_USE_VCALL_INDEX_P (t) = 0;
776 BV_GENERATE_THUNK_WITH_VTABLE_P (t) = 0;
782 /* Build the primary virtual function table for TYPE. If BINFO is
783 non-NULL, build the vtable starting with the initial approximation
784 that it is the same as the one which is the head of the association
785 list. Returns a non-zero value if a new vtable is actually
789 build_primary_vtable (binfo, type)
795 decl = get_vtable_decl (type, /*complete=*/0);
799 if (BINFO_NEW_VTABLE_MARKED (binfo, type))
800 /* We have already created a vtable for this base, so there's
801 no need to do it again. */
804 virtuals = copy_virtuals (binfo);
805 TREE_TYPE (decl) = TREE_TYPE (get_vtbl_decl_for_binfo (binfo));
806 DECL_SIZE (decl) = TYPE_SIZE (TREE_TYPE (decl));
807 DECL_SIZE_UNIT (decl) = TYPE_SIZE_UNIT (TREE_TYPE (decl));
811 my_friendly_assert (TREE_CODE (TREE_TYPE (decl)) == VOID_TYPE,
813 virtuals = NULL_TREE;
816 #ifdef GATHER_STATISTICS
818 n_vtable_elems += list_length (virtuals);
821 /* Initialize the association list for this type, based
822 on our first approximation. */
823 TYPE_BINFO_VTABLE (type) = decl;
824 TYPE_BINFO_VIRTUALS (type) = virtuals;
825 SET_BINFO_NEW_VTABLE_MARKED (TYPE_BINFO (type), type);
829 /* Give TYPE a new virtual function table which is initialized
830 with a skeleton-copy of its original initialization. The only
831 entry that changes is the `delta' entry, so we can really
832 share a lot of structure.
834 FOR_TYPE is the derived type which caused this table to
837 BINFO is the type association which provided TYPE for FOR_TYPE.
839 The order in which vtables are built (by calling this function) for
840 an object must remain the same, otherwise a binary incompatibility
844 build_secondary_vtable (binfo, for_type)
845 tree binfo, for_type;
848 tree orig_decl = BINFO_VTABLE (binfo);
861 if (TREE_VIA_VIRTUAL (binfo))
862 my_friendly_assert (binfo == binfo_for_vbase (BINFO_TYPE (binfo),
866 if (BINFO_NEW_VTABLE_MARKED (binfo, current_class_type))
867 /* We already created a vtable for this base. There's no need to
871 /* Remember that we've created a vtable for this BINFO, so that we
872 don't try to do so again. */
873 SET_BINFO_NEW_VTABLE_MARKED (binfo, current_class_type);
875 /* Make fresh virtual list, so we can smash it later. */
876 BINFO_VIRTUALS (binfo) = copy_virtuals (binfo);
878 if (TREE_VIA_VIRTUAL (binfo))
880 tree binfo1 = binfo_for_vbase (BINFO_TYPE (binfo), for_type);
882 /* XXX - This should never happen, if it does, the caller should
883 ensure that the binfo is from for_type's binfos, not from any
884 base type's. We can remove all this code after a while. */
886 warning ("internal inconsistency: binfo offset error for rtti");
888 offset = BINFO_OFFSET (binfo1);
891 offset = BINFO_OFFSET (binfo);
893 /* In the new ABI, secondary vtables are laid out as part of the
894 same structure as the primary vtable. */
895 if (merge_primary_and_secondary_vtables_p ())
897 BINFO_VTABLE (binfo) = NULL_TREE;
901 /* Create the declaration for the secondary vtable. */
902 basetype = TYPE_MAIN_VARIANT (BINFO_TYPE (binfo));
903 buf2 = TYPE_ASSEMBLER_NAME_STRING (basetype);
904 i = TYPE_ASSEMBLER_NAME_LENGTH (basetype) + 1;
906 /* We know that the vtable that we are going to create doesn't exist
907 yet in the global namespace, and when we finish, it will be
908 pushed into the global namespace. In complex MI hierarchies, we
909 have to loop while the name we are thinking of adding is globally
910 defined, adding more name components to the vtable name as we
911 loop, until the name is unique. This is because in complex MI
912 cases, we might have the same base more than once. This means
913 that the order in which this function is called for vtables must
914 remain the same, otherwise binary compatibility can be
919 char *buf1 = (char *) alloca (TYPE_ASSEMBLER_NAME_LENGTH (for_type)
923 sprintf (buf1, "%s%c%s", TYPE_ASSEMBLER_NAME_STRING (for_type), joiner,
925 buf = (char *) alloca (strlen (VTABLE_NAME_PREFIX) + strlen (buf1) + 1);
926 sprintf (buf, "%s%s", VTABLE_NAME_PREFIX, buf1);
927 name = get_identifier (buf);
929 /* If this name doesn't clash, then we can use it, otherwise
930 we add more to the name until it is unique. */
932 if (! IDENTIFIER_GLOBAL_VALUE (name))
935 /* Set values for next loop through, if the name isn't unique. */
937 path = BINFO_INHERITANCE_CHAIN (path);
939 /* We better not run out of stuff to make it unique. */
940 my_friendly_assert (path != NULL_TREE, 368);
942 basetype = TYPE_MAIN_VARIANT (BINFO_TYPE (path));
944 if (for_type == basetype)
946 /* If we run out of basetypes in the path, we have already
947 found created a vtable with that name before, we now
948 resort to tacking on _%d to distinguish them. */
950 i = TYPE_ASSEMBLER_NAME_LENGTH (basetype) + 1 + i + 1 + 3;
951 buf1 = (char *) alloca (i);
953 sprintf (buf1, "%s%c%s%c%d",
954 TYPE_ASSEMBLER_NAME_STRING (basetype), joiner,
956 buf = (char *) alloca (strlen (VTABLE_NAME_PREFIX)
957 + strlen (buf1) + 1);
958 sprintf (buf, "%s%s", VTABLE_NAME_PREFIX, buf1);
959 name = get_identifier (buf);
961 /* If this name doesn't clash, then we can use it,
962 otherwise we add something different to the name until
964 } while (++j <= 999 && IDENTIFIER_GLOBAL_VALUE (name));
966 /* Hey, they really like MI don't they? Increase the 3
967 above to 6, and the 999 to 999999. :-) */
968 my_friendly_assert (j <= 999, 369);
973 i = TYPE_ASSEMBLER_NAME_LENGTH (basetype) + 1 + i;
974 new_buf2 = (char *) alloca (i);
975 sprintf (new_buf2, "%s%c%s",
976 TYPE_ASSEMBLER_NAME_STRING (basetype), joiner, buf2);
980 new_decl = build_vtable (for_type, name, TREE_TYPE (orig_decl));
981 DECL_ALIGN (new_decl) = DECL_ALIGN (orig_decl);
982 DECL_USER_ALIGN (new_decl) = DECL_USER_ALIGN (orig_decl);
983 BINFO_VTABLE (binfo) = pushdecl_top_level (new_decl);
985 #ifdef GATHER_STATISTICS
987 n_vtable_elems += list_length (BINFO_VIRTUALS (binfo));
993 /* Create a new vtable for BINFO which is the hierarchy dominated by
997 make_new_vtable (t, binfo)
1001 if (binfo == TYPE_BINFO (t))
1002 /* In this case, it is *type*'s vtable we are modifying. We start
1003 with the approximation that it's vtable is that of the
1004 immediate base class. */
1005 return build_primary_vtable (TYPE_BINFO (DECL_CONTEXT (TYPE_VFIELD (t))),
1008 /* This is our very own copy of `basetype' to play with. Later,
1009 we will fill in all the virtual functions that override the
1010 virtual functions in these base classes which are not defined
1011 by the current type. */
1012 return build_secondary_vtable (binfo, t);
1015 /* Make *VIRTUALS, an entry on the BINFO_VIRTUALS list for BINFO
1016 (which is in the hierarchy dominated by T) list FNDECL as its
1017 BV_FN. DELTA is the required constant adjustment from the `this'
1018 pointer where the vtable entry appears to the `this' required when
1019 the function is actually called. */
1022 modify_vtable_entry (t, binfo, fndecl, delta, virtuals)
1033 if (fndecl != BV_FN (v)
1034 || !tree_int_cst_equal (delta, BV_DELTA (v)))
1038 /* We need a new vtable for BINFO. */
1039 if (make_new_vtable (t, binfo))
1041 /* If we really did make a new vtable, we also made a copy
1042 of the BINFO_VIRTUALS list. Now, we have to find the
1043 corresponding entry in that list. */
1044 *virtuals = BINFO_VIRTUALS (binfo);
1045 while (BV_FN (*virtuals) != BV_FN (v))
1046 *virtuals = TREE_CHAIN (*virtuals);
1050 base_fndecl = BV_FN (v);
1051 BV_DELTA (v) = delta;
1052 BV_VCALL_INDEX (v) = NULL_TREE;
1055 /* Now assign virtual dispatch information, if unset. We can
1056 dispatch this, through any overridden base function. */
1057 if (TREE_CODE (DECL_VINDEX (fndecl)) != INTEGER_CST)
1059 DECL_VINDEX (fndecl) = DECL_VINDEX (base_fndecl);
1060 DECL_VIRTUAL_CONTEXT (fndecl) = DECL_VIRTUAL_CONTEXT (base_fndecl);
1065 /* Return the index (in the virtual function table) of the first
1066 virtual function. */
1069 first_vfun_index (t)
1072 /* Under the old ABI, the offset-to-top and RTTI entries are at
1073 indices zero and one; under the new ABI, the first virtual
1074 function is at index zero. */
1075 if (!CLASSTYPE_COM_INTERFACE (t) && !flag_new_abi)
1076 return flag_vtable_thunks ? 2 : 1;
1081 /* Set DECL_VINDEX for DECL. VINDEX_P is the number of virtual
1082 functions present in the vtable so far. */
1085 set_vindex (t, decl, vfuns_p)
1092 vindex = (*vfuns_p)++;
1093 vindex += first_vfun_index (t);
1094 DECL_VINDEX (decl) = build_shared_int_cst (vindex);
1097 /* Add a virtual function to all the appropriate vtables for the class
1098 T. DECL_VINDEX(X) should be error_mark_node, if we want to
1099 allocate a new slot in our table. If it is error_mark_node, we
1100 know that no other function from another vtable is overridden by X.
1101 VFUNS_P keeps track of how many virtuals there are in our
1102 main vtable for the type, and we build upon the NEW_VIRTUALS list
1106 add_virtual_function (new_virtuals_p, overridden_virtuals_p,
1108 tree *new_virtuals_p;
1109 tree *overridden_virtuals_p;
1112 tree t; /* Structure type. */
1116 /* If this function doesn't override anything from a base class, we
1117 can just assign it a new DECL_VINDEX now. Otherwise, if it does
1118 override something, we keep it around and assign its DECL_VINDEX
1119 later, in modify_all_vtables. */
1120 if (TREE_CODE (DECL_VINDEX (fndecl)) == INTEGER_CST)
1121 /* We've already dealt with this function. */
1124 new_virtual = make_node (TREE_LIST);
1125 BV_FN (new_virtual) = fndecl;
1126 BV_DELTA (new_virtual) = integer_zero_node;
1128 if (DECL_VINDEX (fndecl) == error_mark_node)
1130 /* FNDECL is a new virtual function; it doesn't override any
1131 virtual function in a base class. */
1133 /* We remember that this was the base sub-object for rtti. */
1134 CLASSTYPE_RTTI (t) = t;
1136 /* Now assign virtual dispatch information. */
1137 set_vindex (t, fndecl, vfuns_p);
1138 DECL_VIRTUAL_CONTEXT (fndecl) = t;
1140 /* Save the state we've computed on the NEW_VIRTUALS list. */
1141 TREE_CHAIN (new_virtual) = *new_virtuals_p;
1142 *new_virtuals_p = new_virtual;
1146 /* FNDECL overrides a function from a base class. */
1147 TREE_CHAIN (new_virtual) = *overridden_virtuals_p;
1148 *overridden_virtuals_p = new_virtual;
1152 extern struct obstack *current_obstack;
1154 /* Add method METHOD to class TYPE.
1156 If non-NULL, FIELDS is the entry in the METHOD_VEC vector entry of
1157 the class type where the method should be added. */
1160 add_method (type, fields, method)
1161 tree type, *fields, method;
1163 int using = (DECL_CONTEXT (method) != type);
1165 if (fields && *fields)
1166 *fields = build_overload (method, *fields);
1173 if (!CLASSTYPE_METHOD_VEC (type))
1174 /* Make a new method vector. We start with 8 entries. We must
1175 allocate at least two (for constructors and destructors), and
1176 we're going to end up with an assignment operator at some
1179 We could use a TREE_LIST for now, and convert it to a
1180 TREE_VEC in finish_struct, but we would probably waste more
1181 memory making the links in the list than we would by
1182 over-allocating the size of the vector here. Furthermore,
1183 we would complicate all the code that expects this to be a
1185 CLASSTYPE_METHOD_VEC (type) = make_tree_vec (8);
1187 method_vec = CLASSTYPE_METHOD_VEC (type);
1188 len = TREE_VEC_LENGTH (method_vec);
1190 /* Constructors and destructors go in special slots. */
1191 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (method))
1192 slot = CLASSTYPE_CONSTRUCTOR_SLOT;
1193 else if (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (method))
1194 slot = CLASSTYPE_DESTRUCTOR_SLOT;
1197 /* See if we already have an entry with this name. */
1198 for (slot = CLASSTYPE_FIRST_CONVERSION_SLOT; slot < len; ++slot)
1199 if (!TREE_VEC_ELT (method_vec, slot)
1200 || (DECL_NAME (OVL_CURRENT (TREE_VEC_ELT (method_vec,
1202 == DECL_NAME (method)))
1207 /* We need a bigger method vector. */
1208 tree new_vec = make_tree_vec (2 * len);
1209 bcopy ((PTR) &TREE_VEC_ELT (method_vec, 0),
1210 (PTR) &TREE_VEC_ELT (new_vec, 0),
1211 len * sizeof (tree));
1213 method_vec = CLASSTYPE_METHOD_VEC (type) = new_vec;
1216 if (DECL_CONV_FN_P (method) && !TREE_VEC_ELT (method_vec, slot))
1218 /* Type conversion operators have to come before
1219 ordinary methods; add_conversions depends on this to
1220 speed up looking for conversion operators. So, if
1221 necessary, we slide some of the vector elements up.
1222 In theory, this makes this algorithm O(N^2) but we
1223 don't expect many conversion operators. */
1224 for (slot = 2; slot < len; ++slot)
1226 tree fn = TREE_VEC_ELT (method_vec, slot);
1229 /* There are no more entries in the vector, so we
1230 can insert the new conversion operator here. */
1233 if (!DECL_CONV_FN_P (OVL_CURRENT (fn)))
1234 /* We can insert the new function right at the
1239 if (!TREE_VEC_ELT (method_vec, slot))
1240 /* There is nothing in the Ith slot, so we can avoid
1245 /* We know the last slot in the vector is empty
1246 because we know that at this point there's room
1247 for a new function. */
1248 bcopy ((PTR) &TREE_VEC_ELT (method_vec, slot),
1249 (PTR) &TREE_VEC_ELT (method_vec, slot + 1),
1250 (len - slot - 1) * sizeof (tree));
1251 TREE_VEC_ELT (method_vec, slot) = NULL_TREE;
1256 if (template_class_depth (type))
1257 /* TYPE is a template class. Don't issue any errors now; wait
1258 until instantiation time to complain. */
1264 /* Check to see if we've already got this method. */
1265 for (fns = TREE_VEC_ELT (method_vec, slot);
1267 fns = OVL_NEXT (fns))
1269 tree fn = OVL_CURRENT (fns);
1271 if (TREE_CODE (fn) != TREE_CODE (method))
1274 if (TREE_CODE (method) != TEMPLATE_DECL)
1276 /* [over.load] Member function declarations with the
1277 same name and the same parameter types cannot be
1278 overloaded if any of them is a static member
1279 function declaration. */
1280 if ((DECL_STATIC_FUNCTION_P (fn)
1281 != DECL_STATIC_FUNCTION_P (method))
1284 tree parms1 = TYPE_ARG_TYPES (TREE_TYPE (fn));
1285 tree parms2 = TYPE_ARG_TYPES (TREE_TYPE (method));
1287 if (! DECL_STATIC_FUNCTION_P (fn))
1288 parms1 = TREE_CHAIN (parms1);
1289 if (! DECL_STATIC_FUNCTION_P (method))
1290 parms2 = TREE_CHAIN (parms2);
1292 if (compparms (parms1, parms2))
1295 /* Defer to the local function. */
1298 cp_error ("`%#D' and `%#D' cannot be overloaded",
1303 /* Since this is an ordinary function in a
1304 non-template class, it's mangled name can be used
1305 as a unique identifier. This technique is only
1306 an optimization; we would get the same results if
1307 we just used decls_match here. */
1308 if (DECL_ASSEMBLER_NAME (fn)
1309 != DECL_ASSEMBLER_NAME (method))
1312 else if (!decls_match (fn, method))
1315 /* There has already been a declaration of this method
1316 or member template. */
1317 cp_error_at ("`%D' has already been declared in `%T'",
1320 /* We don't call duplicate_decls here to merge the
1321 declarations because that will confuse things if the
1322 methods have inline definitions. In particular, we
1323 will crash while processing the definitions. */
1328 /* Actually insert the new method. */
1329 TREE_VEC_ELT (method_vec, slot)
1330 = build_overload (method, TREE_VEC_ELT (method_vec, slot));
1332 /* Add the new binding. */
1333 if (!DECL_CONSTRUCTOR_P (method)
1334 && !DECL_DESTRUCTOR_P (method))
1335 push_class_level_binding (DECL_NAME (method),
1336 TREE_VEC_ELT (method_vec, slot));
1340 /* Subroutines of finish_struct. */
1342 /* Look through the list of fields for this struct, deleting
1343 duplicates as we go. This must be recursive to handle
1346 FIELD is the field which may not appear anywhere in FIELDS.
1347 FIELD_PTR, if non-null, is the starting point at which
1348 chained deletions may take place.
1349 The value returned is the first acceptable entry found
1352 Note that anonymous fields which are not of UNION_TYPE are
1353 not duplicates, they are just anonymous fields. This happens
1354 when we have unnamed bitfields, for example. */
1357 delete_duplicate_fields_1 (field, fields)
1362 if (DECL_NAME (field) == 0)
1364 if (! ANON_AGGR_TYPE_P (TREE_TYPE (field)))
1367 for (x = TYPE_FIELDS (TREE_TYPE (field)); x; x = TREE_CHAIN (x))
1368 fields = delete_duplicate_fields_1 (x, fields);
1373 for (x = fields; x; prev = x, x = TREE_CHAIN (x))
1375 if (DECL_NAME (x) == 0)
1377 if (! ANON_AGGR_TYPE_P (TREE_TYPE (x)))
1379 TYPE_FIELDS (TREE_TYPE (x))
1380 = delete_duplicate_fields_1 (field, TYPE_FIELDS (TREE_TYPE (x)));
1381 if (TYPE_FIELDS (TREE_TYPE (x)) == 0)
1384 fields = TREE_CHAIN (fields);
1386 TREE_CHAIN (prev) = TREE_CHAIN (x);
1389 else if (TREE_CODE (field) == USING_DECL)
1390 /* A using declaration may is allowed to appear more than
1391 once. We'll prune these from the field list later, and
1392 handle_using_decl will complain about invalid multiple
1395 else if (DECL_NAME (field) == DECL_NAME (x))
1397 if (TREE_CODE (field) == CONST_DECL
1398 && TREE_CODE (x) == CONST_DECL)
1399 cp_error_at ("duplicate enum value `%D'", x);
1400 else if (TREE_CODE (field) == CONST_DECL
1401 || TREE_CODE (x) == CONST_DECL)
1402 cp_error_at ("duplicate field `%D' (as enum and non-enum)",
1404 else if (DECL_DECLARES_TYPE_P (field)
1405 && DECL_DECLARES_TYPE_P (x))
1407 if (same_type_p (TREE_TYPE (field), TREE_TYPE (x)))
1409 cp_error_at ("duplicate nested type `%D'", x);
1411 else if (DECL_DECLARES_TYPE_P (field)
1412 || DECL_DECLARES_TYPE_P (x))
1414 /* Hide tag decls. */
1415 if ((TREE_CODE (field) == TYPE_DECL
1416 && DECL_ARTIFICIAL (field))
1417 || (TREE_CODE (x) == TYPE_DECL
1418 && DECL_ARTIFICIAL (x)))
1420 cp_error_at ("duplicate field `%D' (as type and non-type)",
1424 cp_error_at ("duplicate member `%D'", x);
1426 fields = TREE_CHAIN (fields);
1428 TREE_CHAIN (prev) = TREE_CHAIN (x);
1436 delete_duplicate_fields (fields)
1440 for (x = fields; x && TREE_CHAIN (x); x = TREE_CHAIN (x))
1441 TREE_CHAIN (x) = delete_duplicate_fields_1 (x, TREE_CHAIN (x));
1444 /* Change the access of FDECL to ACCESS in T. Return 1 if change was
1445 legit, otherwise return 0. */
1448 alter_access (t, fdecl, access)
1455 if (!DECL_LANG_SPECIFIC (fdecl))
1456 retrofit_lang_decl (fdecl);
1458 elem = purpose_member (t, DECL_ACCESS (fdecl));
1461 if (TREE_VALUE (elem) != access)
1463 if (TREE_CODE (TREE_TYPE (fdecl)) == FUNCTION_DECL)
1464 cp_error_at ("conflicting access specifications for method `%D', ignored", TREE_TYPE (fdecl));
1466 error ("conflicting access specifications for field `%s', ignored",
1467 IDENTIFIER_POINTER (DECL_NAME (fdecl)));
1471 /* They're changing the access to the same thing they changed
1472 it to before. That's OK. */
1478 enforce_access (t, fdecl);
1479 DECL_ACCESS (fdecl) = tree_cons (t, access, DECL_ACCESS (fdecl));
1485 /* Process the USING_DECL, which is a member of T. */
1488 handle_using_decl (using_decl, t)
1492 tree ctype = DECL_INITIAL (using_decl);
1493 tree name = DECL_NAME (using_decl);
1495 = TREE_PRIVATE (using_decl) ? access_private_node
1496 : TREE_PROTECTED (using_decl) ? access_protected_node
1497 : access_public_node;
1499 tree flist = NULL_TREE;
1502 binfo = binfo_or_else (ctype, t);
1506 if (name == constructor_name (ctype)
1507 || name == constructor_name_full (ctype))
1509 cp_error_at ("using-declaration for constructor", using_decl);
1513 fdecl = lookup_member (binfo, name, 0, 0);
1517 cp_error_at ("no members matching `%D' in `%#T'", using_decl, ctype);
1521 if (BASELINK_P (fdecl))
1522 /* Ignore base type this came from. */
1523 fdecl = TREE_VALUE (fdecl);
1525 old_value = IDENTIFIER_CLASS_VALUE (name);
1528 if (is_overloaded_fn (old_value))
1529 old_value = OVL_CURRENT (old_value);
1531 if (DECL_P (old_value) && DECL_CONTEXT (old_value) == t)
1534 old_value = NULL_TREE;
1537 if (is_overloaded_fn (fdecl))
1542 else if (is_overloaded_fn (old_value))
1545 /* It's OK to use functions from a base when there are functions with
1546 the same name already present in the current class. */;
1549 cp_error ("`%D' invalid in `%#T'", using_decl, t);
1550 cp_error_at (" because of local method `%#D' with same name",
1551 OVL_CURRENT (old_value));
1557 cp_error ("`%D' invalid in `%#T'", using_decl, t);
1558 cp_error_at (" because of local field `%#D' with same name", old_value);
1562 /* Make type T see field decl FDECL with access ACCESS.*/
1564 for (; flist; flist = OVL_NEXT (flist))
1566 add_method (t, 0, OVL_CURRENT (flist));
1567 alter_access (t, OVL_CURRENT (flist), access);
1570 alter_access (t, fdecl, access);
1573 /* Run through the base clases of T, updating
1574 CANT_HAVE_DEFAULT_CTOR_P, CANT_HAVE_CONST_CTOR_P, and
1575 NO_CONST_ASN_REF_P. Also set flag bits in T based on properties of
1579 check_bases (t, cant_have_default_ctor_p, cant_have_const_ctor_p,
1582 int *cant_have_default_ctor_p;
1583 int *cant_have_const_ctor_p;
1584 int *no_const_asn_ref_p;
1588 int seen_nearly_empty_base_p;
1591 binfos = TYPE_BINFO_BASETYPES (t);
1592 n_baseclasses = CLASSTYPE_N_BASECLASSES (t);
1593 seen_nearly_empty_base_p = 0;
1595 /* An aggregate cannot have baseclasses. */
1596 CLASSTYPE_NON_AGGREGATE (t) |= (n_baseclasses != 0);
1598 for (i = 0; i < n_baseclasses; ++i)
1603 /* Figure out what base we're looking at. */
1604 base_binfo = TREE_VEC_ELT (binfos, i);
1605 basetype = TREE_TYPE (base_binfo);
1607 /* If the type of basetype is incomplete, then we already
1608 complained about that fact (and we should have fixed it up as
1610 if (!COMPLETE_TYPE_P (basetype))
1613 /* The base type is of incomplete type. It is
1614 probably best to pretend that it does not
1616 if (i == n_baseclasses-1)
1617 TREE_VEC_ELT (binfos, i) = NULL_TREE;
1618 TREE_VEC_LENGTH (binfos) -= 1;
1620 for (j = i; j+1 < n_baseclasses; j++)
1621 TREE_VEC_ELT (binfos, j) = TREE_VEC_ELT (binfos, j+1);
1625 /* Effective C++ rule 14. We only need to check TYPE_POLYMORPHIC_P
1626 here because the case of virtual functions but non-virtual
1627 dtor is handled in finish_struct_1. */
1628 if (warn_ecpp && ! TYPE_POLYMORPHIC_P (basetype)
1629 && TYPE_HAS_DESTRUCTOR (basetype))
1630 cp_warning ("base class `%#T' has a non-virtual destructor",
1633 /* If the base class doesn't have copy constructors or
1634 assignment operators that take const references, then the
1635 derived class cannot have such a member automatically
1637 if (! TYPE_HAS_CONST_INIT_REF (basetype))
1638 *cant_have_const_ctor_p = 1;
1639 if (TYPE_HAS_ASSIGN_REF (basetype)
1640 && !TYPE_HAS_CONST_ASSIGN_REF (basetype))
1641 *no_const_asn_ref_p = 1;
1642 /* Similarly, if the base class doesn't have a default
1643 constructor, then the derived class won't have an
1644 automatically generated default constructor. */
1645 if (TYPE_HAS_CONSTRUCTOR (basetype)
1646 && ! TYPE_HAS_DEFAULT_CONSTRUCTOR (basetype))
1648 *cant_have_default_ctor_p = 1;
1649 if (! TYPE_HAS_CONSTRUCTOR (t))
1650 cp_pedwarn ("base `%T' with only non-default constructor in class without a constructor",
1654 /* If the base class is not empty or nearly empty, then this
1655 class cannot be nearly empty. */
1656 if (!CLASSTYPE_NEARLY_EMPTY_P (basetype) && !is_empty_class (basetype))
1657 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
1658 /* And if there is more than one nearly empty base, then the
1659 derived class is not nearly empty either. */
1660 else if (CLASSTYPE_NEARLY_EMPTY_P (basetype)
1661 && seen_nearly_empty_base_p)
1662 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
1663 /* If this is the first nearly empty base class, then remember
1665 else if (CLASSTYPE_NEARLY_EMPTY_P (basetype))
1666 seen_nearly_empty_base_p = 1;
1668 /* A lot of properties from the bases also apply to the derived
1670 TYPE_NEEDS_CONSTRUCTING (t) |= TYPE_NEEDS_CONSTRUCTING (basetype);
1671 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
1672 |= TYPE_HAS_NONTRIVIAL_DESTRUCTOR (basetype);
1673 TYPE_HAS_COMPLEX_ASSIGN_REF (t)
1674 |= TYPE_HAS_COMPLEX_ASSIGN_REF (basetype);
1675 TYPE_HAS_COMPLEX_INIT_REF (t) |= TYPE_HAS_COMPLEX_INIT_REF (basetype);
1676 TYPE_OVERLOADS_CALL_EXPR (t) |= TYPE_OVERLOADS_CALL_EXPR (basetype);
1677 TYPE_OVERLOADS_ARRAY_REF (t) |= TYPE_OVERLOADS_ARRAY_REF (basetype);
1678 TYPE_OVERLOADS_ARROW (t) |= TYPE_OVERLOADS_ARROW (basetype);
1679 TYPE_POLYMORPHIC_P (t) |= TYPE_POLYMORPHIC_P (basetype);
1681 /* Derived classes can implicitly become COMified if their bases
1683 if (CLASSTYPE_COM_INTERFACE (basetype))
1684 CLASSTYPE_COM_INTERFACE (t) = 1;
1685 else if (i == 0 && CLASSTYPE_COM_INTERFACE (t))
1688 ("COM interface type `%T' with non-COM leftmost base class `%T'",
1690 CLASSTYPE_COM_INTERFACE (t) = 0;
1695 /* Called via dfs_walk from mark_primary_bases. Sets
1696 BINFO_PRIMARY_MARKED_P for BINFO, if appropriate. */
1699 dfs_mark_primary_bases (binfo, data)
1706 if (!CLASSTYPE_HAS_PRIMARY_BASE_P (BINFO_TYPE (binfo)))
1709 i = CLASSTYPE_VFIELD_PARENT (BINFO_TYPE (binfo));
1710 base_binfo = BINFO_BASETYPE (binfo, i);
1712 if (!TREE_VIA_VIRTUAL (base_binfo))
1713 /* Non-virtual base classes are easy. */
1714 BINFO_PRIMARY_MARKED_P (base_binfo) = 1;
1721 shared_binfo = binfo_for_vbase (BINFO_TYPE (base_binfo), type);
1723 /* If this virtual base is not already primary somewhere else in
1724 the hiearchy, then we'll be using this copy. */
1725 if (!BINFO_VBASE_PRIMARY_P (shared_binfo))
1727 /* Make sure the CLASSTYPE_VBASECLASSES list contains the
1728 primary copy; it's the one that really exists. */
1729 if (base_binfo != shared_binfo)
1730 TREE_VALUE (purpose_member (BINFO_TYPE (base_binfo),
1731 CLASSTYPE_VBASECLASSES (type)))
1734 BINFO_VBASE_PRIMARY_P (base_binfo) = 1;
1735 BINFO_PRIMARY_MARKED_P (base_binfo) = 1;
1742 /* Set BINFO_PRIMARY_MARKED_P for all binfos in the hierarchy
1743 dominated by BINFO that are primary bases. */
1746 mark_primary_bases (type)
1751 /* Mark the TYPE_BINFO hierarchy. We need to mark primary bases in
1752 pre-order to deal with primary virtual bases. (The virtual base
1753 would be skipped if it were not marked as primary, and that
1754 requires getting to dfs_mark_primary_bases before
1755 dfs_skip_nonprimary_vbases_unmarkedp has a chance to skip the
1757 dfs_walk_real (TYPE_BINFO (type), dfs_mark_primary_bases, NULL,
1758 dfs_skip_nonprimary_vbases_unmarkedp, type);
1760 /* Now go through the virtual base classes in inheritance graph
1761 order. Any that are not already primary will need to be
1762 allocated in TYPE, and so we need to mark their primary bases. */
1763 for (vbases = TYPE_BINFO (type); vbases; vbases = TREE_CHAIN (vbases))
1767 /* Make sure that only BINFOs appear on this list.
1768 Historically, the TREE_CHAIN was used for other purposes, and
1769 we want to make sure that none of those uses remain. */
1770 my_friendly_assert (TREE_CODE (vbases) == TREE_VEC, 20000402);
1772 if (!TREE_VIA_VIRTUAL (vbases))
1775 vbase = binfo_for_vbase (BINFO_TYPE (vbases), type);
1776 if (BINFO_VBASE_PRIMARY_P (vbase))
1777 /* This virtual base was already included in the hierarchy, so
1778 there's nothing to do here. */
1781 /* Temporarily pretend that VBASE is primary so that its bases
1782 will be walked; this is the real copy of VBASE. */
1783 BINFO_PRIMARY_MARKED_P (vbase) = 1;
1785 /* Now, walk its bases. */
1786 dfs_walk_real (vbase, dfs_mark_primary_bases, NULL,
1787 dfs_skip_nonprimary_vbases_unmarkedp, type);
1789 /* VBASE wasn't really primary. */
1790 BINFO_PRIMARY_MARKED_P (vbase) = 0;
1794 /* Make the Ith baseclass of T its primary base. */
1797 set_primary_base (t, i, vfuns_p)
1804 CLASSTYPE_VFIELD_PARENT (t) = i;
1805 basetype = BINFO_TYPE (CLASSTYPE_PRIMARY_BINFO (t));
1806 TYPE_BINFO_VTABLE (t) = TYPE_BINFO_VTABLE (basetype);
1807 TYPE_BINFO_VIRTUALS (t) = TYPE_BINFO_VIRTUALS (basetype);
1808 TYPE_VFIELD (t) = TYPE_VFIELD (basetype);
1809 CLASSTYPE_RTTI (t) = CLASSTYPE_RTTI (basetype);
1810 *vfuns_p = CLASSTYPE_VSIZE (basetype);
1813 /* Returns true iff BINFO (a direct virtual base of T) is an indirect
1817 indirect_primary_base_p (t, binfo)
1823 for (i = 0; i < CLASSTYPE_N_BASECLASSES (t); ++i)
1828 /* Figure out to which type the Ith base corresponds. */
1829 type = TYPE_BINFO_BASETYPE (t, i);
1830 /* See if any of the primary bases have the same type as BINFO. */
1831 for (b = TYPE_BINFO (type); b; b = TREE_CHAIN (b))
1832 /* If this base is primary, and has the same type as BINFO,
1833 then BINFO is an indirect primary base. */
1834 if (BINFO_PRIMARY_MARKED_P (b)
1835 && same_type_p (BINFO_TYPE (b), BINFO_TYPE (binfo)))
1842 /* Determine the primary class for T. */
1845 determine_primary_base (t, vfuns_p)
1849 int i, n_baseclasses = CLASSTYPE_N_BASECLASSES (t);
1851 /* If there are no baseclasses, there is certainly no primary base. */
1852 if (n_baseclasses == 0)
1857 for (i = 0; i < n_baseclasses; i++)
1859 tree base_binfo = TREE_VEC_ELT (TYPE_BINFO_BASETYPES (t), i);
1860 tree basetype = BINFO_TYPE (base_binfo);
1862 if (TYPE_CONTAINS_VPTR_P (basetype))
1864 /* Even a virtual baseclass can contain our RTTI
1865 information. But, we prefer a non-virtual polymorphic
1867 if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t))
1868 CLASSTYPE_RTTI (t) = CLASSTYPE_RTTI (basetype);
1870 /* A virtual baseclass can't be the primary base under the
1871 old ABI. And under the new ABI we still prefer a
1872 non-virtual base. */
1873 if (TREE_VIA_VIRTUAL (base_binfo))
1876 if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t))
1878 set_primary_base (t, i, vfuns_p);
1879 CLASSTYPE_VFIELDS (t) = copy_list (CLASSTYPE_VFIELDS (basetype));
1885 /* Only add unique vfields, and flatten them out as we go. */
1886 for (vfields = CLASSTYPE_VFIELDS (basetype);
1888 vfields = TREE_CHAIN (vfields))
1889 if (VF_BINFO_VALUE (vfields) == NULL_TREE
1890 || ! TREE_VIA_VIRTUAL (VF_BINFO_VALUE (vfields)))
1891 CLASSTYPE_VFIELDS (t)
1892 = tree_cons (base_binfo,
1893 VF_BASETYPE_VALUE (vfields),
1894 CLASSTYPE_VFIELDS (t));
1896 if (!flag_new_abi && *vfuns_p == 0)
1897 set_primary_base (t, i, vfuns_p);
1902 if (!TYPE_VFIELD (t))
1903 CLASSTYPE_VFIELD_PARENT (t) = -1;
1905 /* The new ABI allows for the use of a "nearly-empty" virtual base
1906 class as the primary base class if no non-virtual polymorphic
1907 base can be found. */
1908 if (flag_new_abi && !CLASSTYPE_HAS_PRIMARY_BASE_P (t))
1910 /* If not -1, this is the index in TYPE_BINFO_BASETYPEs of the
1911 best primary base candidate we have found so far. */
1914 /* Loop over the baseclasses. */
1915 for (i = 0; i < n_baseclasses; ++i)
1917 tree base_binfo = TREE_VEC_ELT (TYPE_BINFO_BASETYPES (t), i);
1918 tree basetype = BINFO_TYPE (base_binfo);
1920 if (TREE_VIA_VIRTUAL (base_binfo)
1921 && CLASSTYPE_NEARLY_EMPTY_P (basetype))
1923 int indirect_primary_p;
1925 /* Figure out whether or not this base is an indirect
1927 indirect_primary_p = indirect_primary_base_p (t, base_binfo);
1929 /* If this is not an indirect primary base, then it's
1930 definitely our primary base. */
1931 if (!indirect_primary_p)
1936 /* If this was an indirect primary base, it's still our
1937 primary base -- unless there's another nearly-empty
1938 virtual base that isn't an indirect primary base. */
1939 else if (candidate == -1)
1944 /* If we've got a primary base, use it. */
1945 if (candidate != -1)
1947 set_primary_base (t, candidate, vfuns_p);
1948 CLASSTYPE_VFIELDS (t)
1949 = copy_list (CLASSTYPE_VFIELDS (TYPE_BINFO_BASETYPE (t,
1954 /* Mark the primary base classes at this point. */
1955 mark_primary_bases (t);
1958 /* Set memoizing fields and bits of T (and its variants) for later
1962 finish_struct_bits (t)
1965 int i, n_baseclasses = CLASSTYPE_N_BASECLASSES (t);
1967 /* Fix up variants (if any). */
1968 tree variants = TYPE_NEXT_VARIANT (t);
1971 /* These fields are in the _TYPE part of the node, not in
1972 the TYPE_LANG_SPECIFIC component, so they are not shared. */
1973 TYPE_HAS_CONSTRUCTOR (variants) = TYPE_HAS_CONSTRUCTOR (t);
1974 TYPE_HAS_DESTRUCTOR (variants) = TYPE_HAS_DESTRUCTOR (t);
1975 TYPE_NEEDS_CONSTRUCTING (variants) = TYPE_NEEDS_CONSTRUCTING (t);
1976 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (variants)
1977 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t);
1979 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (variants)
1980 = TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (t);
1981 TYPE_POLYMORPHIC_P (variants) = TYPE_POLYMORPHIC_P (t);
1982 TYPE_USES_VIRTUAL_BASECLASSES (variants) = TYPE_USES_VIRTUAL_BASECLASSES (t);
1983 /* Copy whatever these are holding today. */
1984 TYPE_MIN_VALUE (variants) = TYPE_MIN_VALUE (t);
1985 TYPE_MAX_VALUE (variants) = TYPE_MAX_VALUE (t);
1986 TYPE_FIELDS (variants) = TYPE_FIELDS (t);
1987 TYPE_SIZE (variants) = TYPE_SIZE (t);
1988 TYPE_SIZE_UNIT (variants) = TYPE_SIZE_UNIT (t);
1989 variants = TYPE_NEXT_VARIANT (variants);
1992 if (n_baseclasses && TYPE_POLYMORPHIC_P (t))
1993 /* For a class w/o baseclasses, `finish_struct' has set
1994 CLASS_TYPE_ABSTRACT_VIRTUALS correctly (by
1995 definition). Similarly for a class whose base classes do not
1996 have vtables. When neither of these is true, we might have
1997 removed abstract virtuals (by providing a definition), added
1998 some (by declaring new ones), or redeclared ones from a base
1999 class. We need to recalculate what's really an abstract virtual
2000 at this point (by looking in the vtables). */
2001 get_pure_virtuals (t);
2005 /* Notice whether this class has type conversion functions defined. */
2006 tree binfo = TYPE_BINFO (t);
2007 tree binfos = BINFO_BASETYPES (binfo);
2010 for (i = n_baseclasses-1; i >= 0; i--)
2012 basetype = BINFO_TYPE (TREE_VEC_ELT (binfos, i));
2014 TYPE_HAS_CONVERSION (t) |= TYPE_HAS_CONVERSION (basetype);
2018 /* If this type has a copy constructor, force its mode to be BLKmode, and
2019 force its TREE_ADDRESSABLE bit to be nonzero. This will cause it to
2020 be passed by invisible reference and prevent it from being returned in
2023 Also do this if the class has BLKmode but can still be returned in
2024 registers, since function_cannot_inline_p won't let us inline
2025 functions returning such a type. This affects the HP-PA. */
2026 if (! TYPE_HAS_TRIVIAL_INIT_REF (t)
2027 || (TYPE_MODE (t) == BLKmode && ! aggregate_value_p (t)
2028 && CLASSTYPE_NON_AGGREGATE (t)))
2031 DECL_MODE (TYPE_MAIN_DECL (t)) = BLKmode;
2032 for (variants = t; variants; variants = TYPE_NEXT_VARIANT (variants))
2034 TYPE_MODE (variants) = BLKmode;
2035 TREE_ADDRESSABLE (variants) = 1;
2040 /* Issue warnings about T having private constructors, but no friends,
2043 HAS_NONPRIVATE_METHOD is nonzero if T has any non-private methods or
2044 static members. HAS_NONPRIVATE_STATIC_FN is nonzero if T has any
2045 non-private static member functions. */
2048 maybe_warn_about_overly_private_class (t)
2051 int has_member_fn = 0;
2052 int has_nonprivate_method = 0;
2055 if (!warn_ctor_dtor_privacy
2056 /* If the class has friends, those entities might create and
2057 access instances, so we should not warn. */
2058 || (CLASSTYPE_FRIEND_CLASSES (t)
2059 || DECL_FRIENDLIST (TYPE_MAIN_DECL (t)))
2060 /* We will have warned when the template was declared; there's
2061 no need to warn on every instantiation. */
2062 || CLASSTYPE_TEMPLATE_INSTANTIATION (t))
2063 /* There's no reason to even consider warning about this
2067 /* We only issue one warning, if more than one applies, because
2068 otherwise, on code like:
2071 // Oops - forgot `public:'
2077 we warn several times about essentially the same problem. */
2079 /* Check to see if all (non-constructor, non-destructor) member
2080 functions are private. (Since there are no friends or
2081 non-private statics, we can't ever call any of the private member
2083 for (fn = TYPE_METHODS (t); fn; fn = TREE_CHAIN (fn))
2084 /* We're not interested in compiler-generated methods; they don't
2085 provide any way to call private members. */
2086 if (!DECL_ARTIFICIAL (fn))
2088 if (!TREE_PRIVATE (fn))
2090 if (DECL_STATIC_FUNCTION_P (fn))
2091 /* A non-private static member function is just like a
2092 friend; it can create and invoke private member
2093 functions, and be accessed without a class
2097 has_nonprivate_method = 1;
2100 else if (!DECL_CONSTRUCTOR_P (fn) && !DECL_DESTRUCTOR_P (fn))
2104 if (!has_nonprivate_method && has_member_fn)
2106 /* There are no non-private methods, and there's at least one
2107 private member function that isn't a constructor or
2108 destructor. (If all the private members are
2109 constructors/destructors we want to use the code below that
2110 issues error messages specifically referring to
2111 constructors/destructors.) */
2113 tree binfos = BINFO_BASETYPES (TYPE_BINFO (t));
2114 for (i = 0; i < CLASSTYPE_N_BASECLASSES (t); i++)
2115 if (TREE_VIA_PUBLIC (TREE_VEC_ELT (binfos, i))
2116 || TREE_VIA_PROTECTED (TREE_VEC_ELT (binfos, i)))
2118 has_nonprivate_method = 1;
2121 if (!has_nonprivate_method)
2123 cp_warning ("all member functions in class `%T' are private", t);
2128 /* Even if some of the member functions are non-private, the class
2129 won't be useful for much if all the constructors or destructors
2130 are private: such an object can never be created or destroyed. */
2131 if (TYPE_HAS_DESTRUCTOR (t))
2133 tree dtor = TREE_VEC_ELT (CLASSTYPE_METHOD_VEC (t), 1);
2135 if (TREE_PRIVATE (dtor))
2137 cp_warning ("`%#T' only defines a private destructor and has no friends",
2143 if (TYPE_HAS_CONSTRUCTOR (t))
2145 int nonprivate_ctor = 0;
2147 /* If a non-template class does not define a copy
2148 constructor, one is defined for it, enabling it to avoid
2149 this warning. For a template class, this does not
2150 happen, and so we would normally get a warning on:
2152 template <class T> class C { private: C(); };
2154 To avoid this asymmetry, we check TYPE_HAS_INIT_REF. All
2155 complete non-template or fully instantiated classes have this
2157 if (!TYPE_HAS_INIT_REF (t))
2158 nonprivate_ctor = 1;
2160 for (fn = TREE_VEC_ELT (CLASSTYPE_METHOD_VEC (t), 0);
2164 tree ctor = OVL_CURRENT (fn);
2165 /* Ideally, we wouldn't count copy constructors (or, in
2166 fact, any constructor that takes an argument of the
2167 class type as a parameter) because such things cannot
2168 be used to construct an instance of the class unless
2169 you already have one. But, for now at least, we're
2171 if (! TREE_PRIVATE (ctor))
2173 nonprivate_ctor = 1;
2178 if (nonprivate_ctor == 0)
2180 cp_warning ("`%#T' only defines private constructors and has no friends",
2187 /* Function to help qsort sort FIELD_DECLs by name order. */
2190 field_decl_cmp (x, y)
2193 if (DECL_NAME (*x) == DECL_NAME (*y))
2194 /* A nontype is "greater" than a type. */
2195 return DECL_DECLARES_TYPE_P (*y) - DECL_DECLARES_TYPE_P (*x);
2196 if (DECL_NAME (*x) == NULL_TREE)
2198 if (DECL_NAME (*y) == NULL_TREE)
2200 if (DECL_NAME (*x) < DECL_NAME (*y))
2205 /* Comparison function to compare two TYPE_METHOD_VEC entries by name. */
2208 method_name_cmp (m1, m2)
2209 const tree *m1, *m2;
2211 if (*m1 == NULL_TREE && *m2 == NULL_TREE)
2213 if (*m1 == NULL_TREE)
2215 if (*m2 == NULL_TREE)
2217 if (DECL_NAME (OVL_CURRENT (*m1)) < DECL_NAME (OVL_CURRENT (*m2)))
2222 /* Warn about duplicate methods in fn_fields. Also compact method
2223 lists so that lookup can be made faster.
2225 Data Structure: List of method lists. The outer list is a
2226 TREE_LIST, whose TREE_PURPOSE field is the field name and the
2227 TREE_VALUE is the DECL_CHAIN of the FUNCTION_DECLs. TREE_CHAIN
2228 links the entire list of methods for TYPE_METHODS. Friends are
2229 chained in the same way as member functions (? TREE_CHAIN or
2230 DECL_CHAIN), but they live in the TREE_TYPE field of the outer
2231 list. That allows them to be quickly deleted, and requires no
2234 Sort methods that are not special (i.e., constructors, destructors,
2235 and type conversion operators) so that we can find them faster in
2239 finish_struct_methods (t)
2246 if (!TYPE_METHODS (t))
2248 /* Clear these for safety; perhaps some parsing error could set
2249 these incorrectly. */
2250 TYPE_HAS_CONSTRUCTOR (t) = 0;
2251 TYPE_HAS_DESTRUCTOR (t) = 0;
2252 CLASSTYPE_METHOD_VEC (t) = NULL_TREE;
2256 method_vec = CLASSTYPE_METHOD_VEC (t);
2257 my_friendly_assert (method_vec != NULL_TREE, 19991215);
2258 len = TREE_VEC_LENGTH (method_vec);
2260 /* First fill in entry 0 with the constructors, entry 1 with destructors,
2261 and the next few with type conversion operators (if any). */
2262 for (fn_fields = TYPE_METHODS (t); fn_fields;
2263 fn_fields = TREE_CHAIN (fn_fields))
2264 /* Clear out this flag. */
2265 DECL_IN_AGGR_P (fn_fields) = 0;
2267 if (TYPE_HAS_DESTRUCTOR (t) && !CLASSTYPE_DESTRUCTORS (t))
2268 /* We thought there was a destructor, but there wasn't. Some
2269 parse errors cause this anomalous situation. */
2270 TYPE_HAS_DESTRUCTOR (t) = 0;
2272 /* Issue warnings about private constructors and such. If there are
2273 no methods, then some public defaults are generated. */
2274 maybe_warn_about_overly_private_class (t);
2276 /* Now sort the methods. */
2277 while (len > 2 && TREE_VEC_ELT (method_vec, len-1) == NULL_TREE)
2279 TREE_VEC_LENGTH (method_vec) = len;
2281 /* The type conversion ops have to live at the front of the vec, so we
2283 for (slot = 2; slot < len; ++slot)
2285 tree fn = TREE_VEC_ELT (method_vec, slot);
2287 if (!DECL_CONV_FN_P (OVL_CURRENT (fn)))
2291 qsort (&TREE_VEC_ELT (method_vec, slot), len-slot, sizeof (tree),
2292 (int (*)(const void *, const void *))method_name_cmp);
2295 /* Emit error when a duplicate definition of a type is seen. Patch up. */
2298 duplicate_tag_error (t)
2301 cp_error ("redefinition of `%#T'", t);
2302 cp_error_at ("previous definition here", t);
2304 /* Pretend we haven't defined this type. */
2306 /* All of the component_decl's were TREE_CHAINed together in the parser.
2307 finish_struct_methods walks these chains and assembles all methods with
2308 the same base name into DECL_CHAINs. Now we don't need the parser chains
2309 anymore, so we unravel them. */
2311 /* This used to be in finish_struct, but it turns out that the
2312 TREE_CHAIN is used by dbxout_type_methods and perhaps some other
2314 if (CLASSTYPE_METHOD_VEC (t))
2316 tree method_vec = CLASSTYPE_METHOD_VEC (t);
2317 int i, len = TREE_VEC_LENGTH (method_vec);
2318 for (i = 0; i < len; i++)
2320 tree unchain = TREE_VEC_ELT (method_vec, i);
2321 while (unchain != NULL_TREE)
2323 TREE_CHAIN (OVL_CURRENT (unchain)) = NULL_TREE;
2324 unchain = OVL_NEXT (unchain);
2329 if (TYPE_LANG_SPECIFIC (t))
2331 tree binfo = TYPE_BINFO (t);
2332 int interface_only = CLASSTYPE_INTERFACE_ONLY (t);
2333 int interface_unknown = CLASSTYPE_INTERFACE_UNKNOWN (t);
2334 tree template_info = CLASSTYPE_TEMPLATE_INFO (t);
2335 int use_template = CLASSTYPE_USE_TEMPLATE (t);
2337 bzero ((char *) TYPE_LANG_SPECIFIC (t), sizeof (struct lang_type));
2338 BINFO_BASETYPES(binfo) = NULL_TREE;
2340 TYPE_BINFO (t) = binfo;
2341 CLASSTYPE_INTERFACE_ONLY (t) = interface_only;
2342 SET_CLASSTYPE_INTERFACE_UNKNOWN_X (t, interface_unknown);
2343 TYPE_REDEFINED (t) = 1;
2344 CLASSTYPE_TEMPLATE_INFO (t) = template_info;
2345 CLASSTYPE_USE_TEMPLATE (t) = use_template;
2347 TYPE_SIZE (t) = NULL_TREE;
2348 TYPE_MODE (t) = VOIDmode;
2349 TYPE_FIELDS (t) = NULL_TREE;
2350 TYPE_METHODS (t) = NULL_TREE;
2351 TYPE_VFIELD (t) = NULL_TREE;
2352 TYPE_CONTEXT (t) = NULL_TREE;
2353 TYPE_NONCOPIED_PARTS (t) = NULL_TREE;
2356 /* Make the BINFO's vtablehave N entries, including RTTI entries,
2357 vbase and vcall offsets, etc. Set its type and call the backend
2361 layout_vtable_decl (binfo, n)
2369 itype = size_int (n);
2370 atype = build_cplus_array_type (vtable_entry_type,
2371 build_index_type (itype));
2372 layout_type (atype);
2374 /* We may have to grow the vtable. */
2375 vtable = get_vtbl_decl_for_binfo (binfo);
2376 if (!same_type_p (TREE_TYPE (vtable), atype))
2378 TREE_TYPE (vtable) = atype;
2379 DECL_SIZE (vtable) = DECL_SIZE_UNIT (vtable) = NULL_TREE;
2380 layout_decl (vtable, 0);
2382 /* At one time the vtable info was grabbed 2 words at a time. This
2383 fails on Sparc unless you have 8-byte alignment. */
2384 DECL_ALIGN (vtable) = MAX (TYPE_ALIGN (double_type_node),
2385 DECL_ALIGN (vtable));
2389 /* True iff FNDECL and BASE_FNDECL (both non-static member functions)
2390 have the same signature. */
2393 same_signature_p (fndecl, base_fndecl)
2394 tree fndecl, base_fndecl;
2396 /* One destructor overrides another if they are the same kind of
2398 if (DECL_DESTRUCTOR_P (base_fndecl) && DECL_DESTRUCTOR_P (fndecl)
2399 && special_function_p (base_fndecl) == special_function_p (fndecl))
2401 /* But a non-destructor never overrides a destructor, nor vice
2402 versa, nor do different kinds of destructors override
2403 one-another. For example, a complete object destructor does not
2404 override a deleting destructor. */
2405 if (DECL_DESTRUCTOR_P (base_fndecl) || DECL_DESTRUCTOR_P (fndecl))
2408 if (DECL_NAME (fndecl) == DECL_NAME (base_fndecl))
2410 tree types, base_types;
2411 types = TYPE_ARG_TYPES (TREE_TYPE (fndecl));
2412 base_types = TYPE_ARG_TYPES (TREE_TYPE (base_fndecl));
2413 if ((TYPE_QUALS (TREE_TYPE (TREE_VALUE (base_types)))
2414 == TYPE_QUALS (TREE_TYPE (TREE_VALUE (types))))
2415 && compparms (TREE_CHAIN (base_types), TREE_CHAIN (types)))
2421 typedef struct find_final_overrider_data_s {
2422 /* The function for which we are trying to find a final overrider. */
2424 /* The base class in which the function was declared. */
2425 tree declaring_base;
2426 /* The most derived class in the hierarchy. */
2427 tree most_derived_type;
2428 /* The final overriding function. */
2430 /* The BINFO for the class in which the final overriding function
2432 tree overriding_base;
2433 } find_final_overrider_data;
2435 /* Called from find_final_overrider via dfs_walk. */
2438 dfs_find_final_overrider (binfo, data)
2442 find_final_overrider_data *ffod = (find_final_overrider_data *) data;
2444 if (same_type_p (BINFO_TYPE (binfo),
2445 BINFO_TYPE (ffod->declaring_base))
2446 && tree_int_cst_equal (BINFO_OFFSET (binfo),
2447 BINFO_OFFSET (ffod->declaring_base)))
2452 /* We haven't found an overrider yet. */
2454 /* We've found a path to the declaring base. Walk down the path
2455 looking for an overrider for FN. */
2456 for (path = reverse_path (binfo);
2458 path = TREE_CHAIN (path))
2460 for (method = TYPE_METHODS (BINFO_TYPE (TREE_VALUE (path)));
2462 method = TREE_CHAIN (method))
2463 if (DECL_VIRTUAL_P (method)
2464 && same_signature_p (method, ffod->fn))
2471 /* If we found an overrider, record the overriding function, and
2472 the base from which it came. */
2477 /* Assume the path is non-virtual. See if there are any base from
2478 (but not including) the overrider up to and including the
2479 base where the function is defined. */
2480 for (base = TREE_CHAIN (path); base; base = TREE_CHAIN (base))
2481 if (TREE_VIA_VIRTUAL (TREE_VALUE (base)))
2483 base = ffod->declaring_base;
2484 while (BINFO_PRIMARY_MARKED_P (base))
2486 BINFO_OVERRIDE_ALONG_VIRTUAL_PATH_P (base) = 1;
2487 base = BINFO_INHERITANCE_CHAIN (base);
2489 BINFO_OVERRIDE_ALONG_VIRTUAL_PATH_P (base) = 1;
2493 if (ffod->overriding_fn && ffod->overriding_fn != method)
2495 /* We've found a different overrider along a different
2496 path. That can be OK if the new one overrides the
2499 struct S { virtual void f(); };
2500 struct T : public virtual S { virtual void f(); };
2501 struct U : public virtual S, public virtual T {};
2503 Here `T::f' is the final overrider for `S::f'. */
2504 if (strictly_overrides (method, ffod->overriding_fn))
2506 ffod->overriding_fn = method;
2507 ffod->overriding_base = TREE_VALUE (path);
2509 else if (!strictly_overrides (ffod->overriding_fn, method))
2511 cp_error ("no unique final overrider for `%D' in `%T'",
2512 ffod->most_derived_type,
2514 cp_error ("candidates are: `%#D'", ffod->overriding_fn);
2515 cp_error (" `%#D'", method);
2516 return error_mark_node;
2519 else if (ffod->overriding_base
2520 && (!tree_int_cst_equal
2521 (BINFO_OFFSET (TREE_VALUE (path)),
2522 BINFO_OFFSET (ffod->overriding_base))))
2524 /* We've found two instances of the same base that
2525 provide overriders. */
2526 cp_error ("no unique final overrider for `%D' since there two instances of `%T' in `%T'",
2528 BINFO_TYPE (ffod->overriding_base),
2529 ffod->most_derived_type);
2530 return error_mark_node;
2534 ffod->overriding_fn = method;
2535 ffod->overriding_base = TREE_VALUE (path);
2543 /* Returns a TREE_LIST whose TREE_PURPOSE is the final overrider for
2544 FN and whose TREE_VALUE is the binfo for the base where the
2545 overriding occurs. BINFO (in the hierarchy dominated by T) is the
2546 base object in which FN is declared. */
2549 find_final_overrider (t, binfo, fn)
2554 find_final_overrider_data ffod;
2556 /* Getting this right is a little tricky. This is legal:
2558 struct S { virtual void f (); };
2559 struct T { virtual void f (); };
2560 struct U : public S, public T { };
2562 even though calling `f' in `U' is ambiguous. But,
2564 struct R { virtual void f(); };
2565 struct S : virtual public R { virtual void f (); };
2566 struct T : virtual public R { virtual void f (); };
2567 struct U : public S, public T { };
2569 is not -- there's no way to decide whether to put `S::f' or
2570 `T::f' in the vtable for `R'.
2572 The solution is to look at all paths to BINFO. If we find
2573 different overriders along any two, then there is a problem. */
2575 ffod.declaring_base = binfo;
2576 ffod.most_derived_type = t;
2577 ffod.overriding_fn = NULL_TREE;
2578 ffod.overriding_base = NULL_TREE;
2580 if (dfs_walk (TYPE_BINFO (t),
2581 dfs_find_final_overrider,
2584 return error_mark_node;
2586 return build_tree_list (ffod.overriding_fn, ffod.overriding_base);
2589 /* Update a entry in the vtable for BINFO, which is in the hierarchy
2590 dominated by T. FN has been overridden in BINFO; VIRTUALS points
2591 to the corresponding position in the BINFO_VIRTUALS list. */
2594 update_vtable_entry_for_fn (t, binfo, fn, virtuals)
2604 int generate_thunk_with_vtable_p;
2606 /* Find the function which originally caused this vtable
2607 entry to be present. */
2614 primary_base = BINFO_PRIMARY_BINFO (b);
2618 for (f = BINFO_VIRTUALS (TYPE_BINFO (BINFO_TYPE (primary_base)));
2621 if (same_signature_p (BV_FN (f), fn))
2631 /* Find the final overrider. */
2632 overrider = find_final_overrider (t, b, fn);
2633 if (overrider == error_mark_node)
2636 /* Compute the constant adjustment to the `this' pointer. The
2637 `this' pointer, when this function is called, will point at the
2638 class whose vtable this is. */
2639 delta = size_binop (PLUS_EXPR,
2640 get_derived_offset (binfo,
2641 DECL_VIRTUAL_CONTEXT (fn)),
2642 BINFO_OFFSET (binfo));
2644 /* Assume that we will produce a thunk that convert all the way to
2645 the final overrider, and not to an intermediate virtual base. */
2646 virtual_base = NULL_TREE;
2648 /* Assume that we will always generate thunks with the vtables that
2650 generate_thunk_with_vtable_p = 1;
2652 /* Under the new ABI, we will convert to an intermediate virtual
2653 base first, and then use the vcall offset located there to finish
2659 /* If we find BINFO, then the final overrider is in a class
2660 derived from BINFO, so the thunks can be generated with
2661 the final overrider. */
2662 if (same_type_p (BINFO_TYPE (b), BINFO_TYPE (binfo)))
2663 generate_thunk_with_vtable_p = 0;
2665 /* If we find the final overrider, then we can stop
2667 if (same_type_p (BINFO_TYPE (b),
2668 BINFO_TYPE (TREE_VALUE (overrider))))
2671 /* If we find a virtual base, and we haven't yet found the
2672 overrider, then there is a virtual base between the
2673 declaring base and the final overrider. */
2674 if (!virtual_base && TREE_VIA_VIRTUAL (b))
2676 generate_thunk_with_vtable_p = 1;
2680 b = BINFO_INHERITANCE_CHAIN (b);
2684 virtual_base = NULL_TREE;
2687 /* The `this' pointer needs to be adjusted to the nearest virtual
2689 delta = size_diffop (BINFO_OFFSET (virtual_base), delta);
2691 /* The `this' pointer needs to be adjusted from pointing to
2692 BINFO to pointing at the base where the final overrider
2694 delta = size_diffop (BINFO_OFFSET (TREE_VALUE (overrider)), delta);
2696 modify_vtable_entry (t,
2698 TREE_PURPOSE (overrider),
2703 BV_USE_VCALL_INDEX_P (*virtuals) = 1;
2704 if (generate_thunk_with_vtable_p)
2705 BV_GENERATE_THUNK_WITH_VTABLE_P (*virtuals) = 1;
2708 /* Called from modify_all_vtables via dfs_walk. */
2711 dfs_modify_vtables (binfo, data)
2715 if (/* There's no need to modify the vtable for a primary base;
2716 we're not going to use that vtable anyhow. */
2717 !BINFO_PRIMARY_MARKED_P (binfo)
2718 /* Similarly, a base without a vtable needs no modification. */
2719 && CLASSTYPE_VFIELDS (BINFO_TYPE (binfo)))
2727 /* If we're supporting RTTI then we always need a new vtable to
2728 point to the RTTI information. Under the new ABI we may need
2729 a new vtable to contain vcall and vbase offsets. */
2730 if (flag_rtti || flag_new_abi)
2731 make_new_vtable (t, binfo);
2733 /* Now, go through each of the virtual functions in the virtual
2734 function table for BINFO. Find the final overrider, and
2735 update the BINFO_VIRTUALS list appropriately. */
2736 for (virtuals = BINFO_VIRTUALS (binfo),
2737 old_virtuals = BINFO_VIRTUALS (TYPE_BINFO (BINFO_TYPE (binfo)));
2739 virtuals = TREE_CHAIN (virtuals),
2740 old_virtuals = TREE_CHAIN (old_virtuals))
2741 update_vtable_entry_for_fn (t,
2743 BV_FN (old_virtuals),
2747 SET_BINFO_MARKED (binfo);
2752 /* Update all of the primary and secondary vtables for T. Create new
2753 vtables as required, and initialize their RTTI information. Each
2754 of the functions in OVERRIDDEN_VIRTUALS overrides a virtual
2755 function from a base class; find and modify the appropriate entries
2756 to point to the overriding functions. Returns a list, in
2757 declaration order, of the functions that are overridden in this
2758 class, but do not appear in the primary base class vtable, and
2759 which should therefore be appended to the end of the vtable for T. */
2762 modify_all_vtables (t, vfuns_p, overridden_virtuals)
2765 tree overridden_virtuals;
2769 binfo = TYPE_BINFO (t);
2771 /* Update all of the vtables. */
2774 dfs_unmarked_real_bases_queue_p,
2776 dfs_walk (binfo, dfs_unmark, dfs_marked_real_bases_queue_p, t);
2778 /* If we should include overriding functions for secondary vtables
2779 in our primary vtable, add them now. */
2780 if (all_overridden_vfuns_in_vtables_p ())
2782 tree *fnsp = &overridden_virtuals;
2786 tree fn = TREE_VALUE (*fnsp);
2788 if (!BINFO_VIRTUALS (binfo)
2789 || !value_member (fn, BINFO_VIRTUALS (binfo)))
2791 /* Set the vtable index. */
2792 set_vindex (t, fn, vfuns_p);
2793 /* We don't need to convert to a base class when calling
2795 DECL_VIRTUAL_CONTEXT (fn) = t;
2797 /* We don't need to adjust the `this' pointer when
2798 calling this function. */
2799 BV_DELTA (*fnsp) = integer_zero_node;
2800 BV_VCALL_INDEX (*fnsp) = NULL_TREE;
2802 /* This is an overridden function not already in our
2804 fnsp = &TREE_CHAIN (*fnsp);
2807 /* We've already got an entry for this function. Skip
2809 *fnsp = TREE_CHAIN (*fnsp);
2813 overridden_virtuals = NULL_TREE;
2815 return overridden_virtuals;
2818 /* Here, we already know that they match in every respect.
2819 All we have to check is where they had their declarations. */
2822 strictly_overrides (fndecl1, fndecl2)
2823 tree fndecl1, fndecl2;
2825 int distance = get_base_distance (DECL_CONTEXT (fndecl2),
2826 DECL_CONTEXT (fndecl1),
2828 if (distance == -2 || distance > 0)
2833 /* Get the base virtual function declarations in T that are either
2834 overridden or hidden by FNDECL as a list. We set TREE_PURPOSE with
2835 the overrider/hider. */
2838 get_basefndecls (fndecl, t)
2841 tree methods = TYPE_METHODS (t);
2842 tree base_fndecls = NULL_TREE;
2843 tree binfos = BINFO_BASETYPES (TYPE_BINFO (t));
2844 int i, n_baseclasses = binfos ? TREE_VEC_LENGTH (binfos) : 0;
2848 if (TREE_CODE (methods) == FUNCTION_DECL
2849 && DECL_VINDEX (methods) != NULL_TREE
2850 && DECL_NAME (fndecl) == DECL_NAME (methods))
2851 base_fndecls = tree_cons (fndecl, methods, base_fndecls);
2853 methods = TREE_CHAIN (methods);
2857 return base_fndecls;
2859 for (i = 0; i < n_baseclasses; i++)
2861 tree base_binfo = TREE_VEC_ELT (binfos, i);
2862 tree basetype = BINFO_TYPE (base_binfo);
2864 base_fndecls = chainon (get_basefndecls (fndecl, basetype),
2868 return base_fndecls;
2871 /* Mark the functions that have been hidden with their overriders.
2872 Since we start out with all functions already marked with a hider,
2873 no need to mark functions that are just hidden.
2875 Subroutine of warn_hidden. */
2878 mark_overriders (fndecl, base_fndecls)
2879 tree fndecl, base_fndecls;
2881 for (; base_fndecls; base_fndecls = TREE_CHAIN (base_fndecls))
2882 if (same_signature_p (fndecl, TREE_VALUE (base_fndecls)))
2883 TREE_PURPOSE (base_fndecls) = fndecl;
2886 /* If this declaration supersedes the declaration of
2887 a method declared virtual in the base class, then
2888 mark this field as being virtual as well. */
2891 check_for_override (decl, ctype)
2894 tree binfos = BINFO_BASETYPES (TYPE_BINFO (ctype));
2895 int i, n_baselinks = binfos ? TREE_VEC_LENGTH (binfos) : 0;
2896 int virtualp = DECL_VIRTUAL_P (decl);
2897 int found_overriden_fn = 0;
2899 for (i = 0; i < n_baselinks; i++)
2901 tree base_binfo = TREE_VEC_ELT (binfos, i);
2902 if (TYPE_POLYMORPHIC_P (BINFO_TYPE (base_binfo)))
2904 tree tmp = get_matching_virtual
2905 (base_binfo, decl, DECL_DESTRUCTOR_P (decl));
2907 if (tmp && !found_overriden_fn)
2909 /* If this function overrides some virtual in some base
2910 class, then the function itself is also necessarily
2911 virtual, even if the user didn't explicitly say so. */
2912 DECL_VIRTUAL_P (decl) = 1;
2914 /* The TMP we really want is the one from the deepest
2915 baseclass on this path, taking care not to
2916 duplicate if we have already found it (via another
2917 path to its virtual baseclass. */
2918 if (TREE_CODE (TREE_TYPE (decl)) == FUNCTION_TYPE)
2920 cp_error_at ("`static %#D' cannot be declared", decl);
2921 cp_error_at (" since `virtual %#D' declared in base class",
2927 /* Set DECL_VINDEX to a value that is neither an
2928 INTEGER_CST nor the error_mark_node so that
2929 add_virtual_function will realize this is an
2930 overridden function. */
2932 = tree_cons (tmp, NULL_TREE, DECL_VINDEX (decl));
2934 /* We now know that DECL overrides something,
2935 which is all that is important. But, we must
2936 continue to iterate through all the base-classes
2937 in order to allow get_matching_virtual to check for
2938 various illegal overrides. */
2939 found_overriden_fn = 1;
2945 if (DECL_VINDEX (decl) == NULL_TREE)
2946 DECL_VINDEX (decl) = error_mark_node;
2947 IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)) = 1;
2951 /* Warn about hidden virtual functions that are not overridden in t.
2952 We know that constructors and destructors don't apply. */
2958 tree method_vec = CLASSTYPE_METHOD_VEC (t);
2959 int n_methods = method_vec ? TREE_VEC_LENGTH (method_vec) : 0;
2962 /* We go through each separately named virtual function. */
2963 for (i = 2; i < n_methods && TREE_VEC_ELT (method_vec, i); ++i)
2965 tree fns = TREE_VEC_ELT (method_vec, i);
2966 tree fndecl = NULL_TREE;
2968 tree base_fndecls = NULL_TREE;
2969 tree binfos = BINFO_BASETYPES (TYPE_BINFO (t));
2970 int i, n_baseclasses = binfos ? TREE_VEC_LENGTH (binfos) : 0;
2972 /* First see if we have any virtual functions in this batch. */
2973 for (; fns; fns = OVL_NEXT (fns))
2975 fndecl = OVL_CURRENT (fns);
2976 if (DECL_VINDEX (fndecl))
2980 if (fns == NULL_TREE)
2983 /* First we get a list of all possible functions that might be
2984 hidden from each base class. */
2985 for (i = 0; i < n_baseclasses; i++)
2987 tree base_binfo = TREE_VEC_ELT (binfos, i);
2988 tree basetype = BINFO_TYPE (base_binfo);
2990 base_fndecls = chainon (get_basefndecls (fndecl, basetype),
2994 fns = OVL_NEXT (fns);
2996 /* ...then mark up all the base functions with overriders, preferring
2997 overriders to hiders. */
2999 for (; fns; fns = OVL_NEXT (fns))
3001 fndecl = OVL_CURRENT (fns);
3002 if (DECL_VINDEX (fndecl))
3003 mark_overriders (fndecl, base_fndecls);
3006 /* Now give a warning for all base functions without overriders,
3007 as they are hidden. */
3008 for (; base_fndecls; base_fndecls = TREE_CHAIN (base_fndecls))
3009 if (!same_signature_p (TREE_PURPOSE (base_fndecls),
3010 TREE_VALUE (base_fndecls)))
3012 /* Here we know it is a hider, and no overrider exists. */
3013 cp_warning_at ("`%D' was hidden", TREE_VALUE (base_fndecls));
3014 cp_warning_at (" by `%D'", TREE_PURPOSE (base_fndecls));
3019 /* Check for things that are invalid. There are probably plenty of other
3020 things we should check for also. */
3023 finish_struct_anon (t)
3028 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
3030 if (TREE_STATIC (field))
3032 if (TREE_CODE (field) != FIELD_DECL)
3035 if (DECL_NAME (field) == NULL_TREE
3036 && ANON_AGGR_TYPE_P (TREE_TYPE (field)))
3038 tree elt = TYPE_FIELDS (TREE_TYPE (field));
3039 for (; elt; elt = TREE_CHAIN (elt))
3041 if (DECL_ARTIFICIAL (elt))
3044 if (DECL_NAME (elt) == constructor_name (t))
3045 cp_pedwarn_at ("ISO C++ forbids member `%D' with same name as enclosing class",
3048 if (TREE_CODE (elt) != FIELD_DECL)
3050 cp_pedwarn_at ("`%#D' invalid; an anonymous union can only have non-static data members",
3055 if (TREE_PRIVATE (elt))
3056 cp_pedwarn_at ("private member `%#D' in anonymous union",
3058 else if (TREE_PROTECTED (elt))
3059 cp_pedwarn_at ("protected member `%#D' in anonymous union",
3062 TREE_PRIVATE (elt) = TREE_PRIVATE (field);
3063 TREE_PROTECTED (elt) = TREE_PROTECTED (field);
3069 /* Create default constructors, assignment operators, and so forth for
3070 the type indicated by T, if they are needed.
3071 CANT_HAVE_DEFAULT_CTOR, CANT_HAVE_CONST_CTOR, and
3072 CANT_HAVE_CONST_ASSIGNMENT are nonzero if, for whatever reason, the
3073 class cannot have a default constructor, copy constructor taking a
3074 const reference argument, or an assignment operator taking a const
3075 reference, respectively. If a virtual destructor is created, its
3076 DECL is returned; otherwise the return value is NULL_TREE. */
3079 add_implicitly_declared_members (t, cant_have_default_ctor,
3080 cant_have_const_cctor,
3081 cant_have_const_assignment)
3083 int cant_have_default_ctor;
3084 int cant_have_const_cctor;
3085 int cant_have_const_assignment;
3088 tree implicit_fns = NULL_TREE;
3089 tree virtual_dtor = NULL_TREE;
3093 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t) && !TYPE_HAS_DESTRUCTOR (t))
3095 default_fn = implicitly_declare_fn (sfk_destructor, t, /*const_p=*/0);
3096 check_for_override (default_fn, t);
3098 /* If we couldn't make it work, then pretend we didn't need it. */
3099 if (default_fn == void_type_node)
3100 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t) = 0;
3103 TREE_CHAIN (default_fn) = implicit_fns;
3104 implicit_fns = default_fn;
3106 if (DECL_VINDEX (default_fn))
3107 virtual_dtor = default_fn;
3111 /* Any non-implicit destructor is non-trivial. */
3112 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t) |= TYPE_HAS_DESTRUCTOR (t);
3114 /* Default constructor. */
3115 if (! TYPE_HAS_CONSTRUCTOR (t) && ! cant_have_default_ctor)
3117 default_fn = implicitly_declare_fn (sfk_constructor, t, /*const_p=*/0);
3118 TREE_CHAIN (default_fn) = implicit_fns;
3119 implicit_fns = default_fn;
3122 /* Copy constructor. */
3123 if (! TYPE_HAS_INIT_REF (t) && ! TYPE_FOR_JAVA (t))
3125 /* ARM 12.18: You get either X(X&) or X(const X&), but
3128 = implicitly_declare_fn (sfk_copy_constructor, t,
3129 /*const_p=*/!cant_have_const_cctor);
3130 TREE_CHAIN (default_fn) = implicit_fns;
3131 implicit_fns = default_fn;
3134 /* Assignment operator. */
3135 if (! TYPE_HAS_ASSIGN_REF (t) && ! TYPE_FOR_JAVA (t))
3138 = implicitly_declare_fn (sfk_assignment_operator, t,
3139 /*const_p=*/!cant_have_const_assignment);
3140 TREE_CHAIN (default_fn) = implicit_fns;
3141 implicit_fns = default_fn;
3144 /* Now, hook all of the new functions on to TYPE_METHODS,
3145 and add them to the CLASSTYPE_METHOD_VEC. */
3146 for (f = &implicit_fns; *f; f = &TREE_CHAIN (*f))
3147 add_method (t, 0, *f);
3148 *f = TYPE_METHODS (t);
3149 TYPE_METHODS (t) = implicit_fns;
3151 return virtual_dtor;
3154 /* Subroutine of finish_struct_1. Recursively count the number of fields
3155 in TYPE, including anonymous union members. */
3158 count_fields (fields)
3163 for (x = fields; x; x = TREE_CHAIN (x))
3165 if (TREE_CODE (x) == FIELD_DECL && ANON_AGGR_TYPE_P (TREE_TYPE (x)))
3166 n_fields += count_fields (TYPE_FIELDS (TREE_TYPE (x)));
3173 /* Subroutine of finish_struct_1. Recursively add all the fields in the
3174 TREE_LIST FIELDS to the TREE_VEC FIELD_VEC, starting at offset IDX. */
3177 add_fields_to_vec (fields, field_vec, idx)
3178 tree fields, field_vec;
3182 for (x = fields; x; x = TREE_CHAIN (x))
3184 if (TREE_CODE (x) == FIELD_DECL && ANON_AGGR_TYPE_P (TREE_TYPE (x)))
3185 idx = add_fields_to_vec (TYPE_FIELDS (TREE_TYPE (x)), field_vec, idx);
3187 TREE_VEC_ELT (field_vec, idx++) = x;
3192 /* FIELD is a bit-field. We are finishing the processing for its
3193 enclosing type. Issue any appropriate messages and set appropriate
3197 check_bitfield_decl (field)
3200 tree type = TREE_TYPE (field);
3203 /* Detect invalid bit-field type. */
3204 if (DECL_INITIAL (field)
3205 && ! INTEGRAL_TYPE_P (TREE_TYPE (field)))
3207 cp_error_at ("bit-field `%#D' with non-integral type", field);
3208 w = error_mark_node;
3211 /* Detect and ignore out of range field width. */
3212 if (DECL_INITIAL (field))
3214 w = DECL_INITIAL (field);
3216 /* Avoid the non_lvalue wrapper added by fold for PLUS_EXPRs. */
3219 /* detect invalid field size. */
3220 if (TREE_CODE (w) == CONST_DECL)
3221 w = DECL_INITIAL (w);
3223 w = decl_constant_value (w);
3225 if (TREE_CODE (w) != INTEGER_CST)
3227 cp_error_at ("bit-field `%D' width not an integer constant",
3229 w = error_mark_node;
3231 else if (tree_int_cst_sgn (w) < 0)
3233 cp_error_at ("negative width in bit-field `%D'", field);
3234 w = error_mark_node;
3236 else if (integer_zerop (w) && DECL_NAME (field) != 0)
3238 cp_error_at ("zero width for bit-field `%D'", field);
3239 w = error_mark_node;
3241 else if (compare_tree_int (w, TYPE_PRECISION (type)) > 0
3242 && TREE_CODE (type) != ENUMERAL_TYPE
3243 && TREE_CODE (type) != BOOLEAN_TYPE)
3244 cp_warning_at ("width of `%D' exceeds its type", field);
3245 else if (TREE_CODE (type) == ENUMERAL_TYPE
3246 && (0 > compare_tree_int (w,
3247 min_precision (TYPE_MIN_VALUE (type),
3248 TREE_UNSIGNED (type)))
3249 || 0 > compare_tree_int (w,
3251 (TYPE_MAX_VALUE (type),
3252 TREE_UNSIGNED (type)))))
3253 cp_warning_at ("`%D' is too small to hold all values of `%#T'",
3257 /* Remove the bit-field width indicator so that the rest of the
3258 compiler does not treat that value as an initializer. */
3259 DECL_INITIAL (field) = NULL_TREE;
3261 if (w != error_mark_node)
3263 DECL_SIZE (field) = convert (bitsizetype, w);
3264 DECL_BIT_FIELD (field) = 1;
3266 if (integer_zerop (w))
3268 #ifdef EMPTY_FIELD_BOUNDARY
3269 DECL_ALIGN (field) = MAX (DECL_ALIGN (field),
3270 EMPTY_FIELD_BOUNDARY);
3272 #ifdef PCC_BITFIELD_TYPE_MATTERS
3273 if (PCC_BITFIELD_TYPE_MATTERS)
3275 DECL_ALIGN (field) = MAX (DECL_ALIGN (field),
3277 DECL_USER_ALIGN (field) |= TYPE_USER_ALIGN (type);
3284 /* Non-bit-fields are aligned for their type. */
3285 DECL_BIT_FIELD (field) = 0;
3286 CLEAR_DECL_C_BIT_FIELD (field);
3287 DECL_ALIGN (field) = MAX (DECL_ALIGN (field), TYPE_ALIGN (type));
3288 DECL_USER_ALIGN (field) |= TYPE_USER_ALIGN (type);
3292 /* FIELD is a non bit-field. We are finishing the processing for its
3293 enclosing type T. Issue any appropriate messages and set appropriate
3297 check_field_decl (field, t, cant_have_const_ctor,
3298 cant_have_default_ctor, no_const_asn_ref,
3299 any_default_members)
3302 int *cant_have_const_ctor;
3303 int *cant_have_default_ctor;
3304 int *no_const_asn_ref;
3305 int *any_default_members;
3307 tree type = strip_array_types (TREE_TYPE (field));
3309 /* An anonymous union cannot contain any fields which would change
3310 the settings of CANT_HAVE_CONST_CTOR and friends. */
3311 if (ANON_UNION_TYPE_P (type))
3313 /* And, we don't set TYPE_HAS_CONST_INIT_REF, etc., for anonymous
3314 structs. So, we recurse through their fields here. */
3315 else if (ANON_AGGR_TYPE_P (type))
3319 for (fields = TYPE_FIELDS (type); fields; fields = TREE_CHAIN (fields))
3320 if (TREE_CODE (fields) == FIELD_DECL && !DECL_C_BIT_FIELD (field))
3321 check_field_decl (fields, t, cant_have_const_ctor,
3322 cant_have_default_ctor, no_const_asn_ref,
3323 any_default_members);
3325 /* Check members with class type for constructors, destructors,
3327 else if (CLASS_TYPE_P (type))
3329 /* Never let anything with uninheritable virtuals
3330 make it through without complaint. */
3331 abstract_virtuals_error (field, type);
3333 if (TREE_CODE (t) == UNION_TYPE)
3335 if (TYPE_NEEDS_CONSTRUCTING (type))
3336 cp_error_at ("member `%#D' with constructor not allowed in union",
3338 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3339 cp_error_at ("member `%#D' with destructor not allowed in union",
3341 if (TYPE_HAS_COMPLEX_ASSIGN_REF (type))
3342 cp_error_at ("member `%#D' with copy assignment operator not allowed in union",
3347 TYPE_NEEDS_CONSTRUCTING (t) |= TYPE_NEEDS_CONSTRUCTING (type);
3348 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
3349 |= TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type);
3350 TYPE_HAS_COMPLEX_ASSIGN_REF (t) |= TYPE_HAS_COMPLEX_ASSIGN_REF (type);
3351 TYPE_HAS_COMPLEX_INIT_REF (t) |= TYPE_HAS_COMPLEX_INIT_REF (type);
3354 if (!TYPE_HAS_CONST_INIT_REF (type))
3355 *cant_have_const_ctor = 1;
3357 if (!TYPE_HAS_CONST_ASSIGN_REF (type))
3358 *no_const_asn_ref = 1;
3360 if (TYPE_HAS_CONSTRUCTOR (type)
3361 && ! TYPE_HAS_DEFAULT_CONSTRUCTOR (type))
3362 *cant_have_default_ctor = 1;
3364 if (DECL_INITIAL (field) != NULL_TREE)
3366 /* `build_class_init_list' does not recognize
3368 if (TREE_CODE (t) == UNION_TYPE && any_default_members != 0)
3369 cp_error_at ("multiple fields in union `%T' initialized");
3370 *any_default_members = 1;
3373 /* Non-bit-fields are aligned for their type, except packed fields
3374 which require only BITS_PER_UNIT alignment. */
3375 DECL_ALIGN (field) = MAX (DECL_ALIGN (field),
3376 (DECL_PACKED (field)
3378 : TYPE_ALIGN (TREE_TYPE (field))));
3379 if (! DECL_PACKED (field))
3380 DECL_USER_ALIGN (field) |= TYPE_USER_ALIGN (TREE_TYPE (field));
3383 /* Check the data members (both static and non-static), class-scoped
3384 typedefs, etc., appearing in the declaration of T. Issue
3385 appropriate diagnostics. Sets ACCESS_DECLS to a list (in
3386 declaration order) of access declarations; each TREE_VALUE in this
3387 list is a USING_DECL.
3389 In addition, set the following flags:
3392 The class is empty, i.e., contains no non-static data members.
3394 CANT_HAVE_DEFAULT_CTOR_P
3395 This class cannot have an implicitly generated default
3398 CANT_HAVE_CONST_CTOR_P
3399 This class cannot have an implicitly generated copy constructor
3400 taking a const reference.
3402 CANT_HAVE_CONST_ASN_REF
3403 This class cannot have an implicitly generated assignment
3404 operator taking a const reference.
3406 All of these flags should be initialized before calling this
3409 Returns a pointer to the end of the TYPE_FIELDs chain; additional
3410 fields can be added by adding to this chain. */
3413 check_field_decls (t, access_decls, empty_p,
3414 cant_have_default_ctor_p, cant_have_const_ctor_p,
3419 int *cant_have_default_ctor_p;
3420 int *cant_have_const_ctor_p;
3421 int *no_const_asn_ref_p;
3426 int any_default_members;
3428 /* First, delete any duplicate fields. */
3429 delete_duplicate_fields (TYPE_FIELDS (t));
3431 /* Assume there are no access declarations. */
3432 *access_decls = NULL_TREE;
3433 /* Assume this class has no pointer members. */
3435 /* Assume none of the members of this class have default
3437 any_default_members = 0;
3439 for (field = &TYPE_FIELDS (t); *field; field = next)
3442 tree type = TREE_TYPE (x);
3444 GNU_xref_member (current_class_name, x);
3446 next = &TREE_CHAIN (x);
3448 if (TREE_CODE (x) == FIELD_DECL)
3450 DECL_PACKED (x) |= TYPE_PACKED (t);
3452 if (DECL_C_BIT_FIELD (x) && integer_zerop (DECL_INITIAL (x)))
3453 /* We don't treat zero-width bitfields as making a class
3458 /* The class is non-empty. */
3460 /* The class is not even nearly empty. */
3461 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
3465 if (TREE_CODE (x) == USING_DECL)
3467 /* Prune the access declaration from the list of fields. */
3468 *field = TREE_CHAIN (x);
3470 /* Save the access declarations for our caller. */
3471 *access_decls = tree_cons (NULL_TREE, x, *access_decls);
3473 /* Since we've reset *FIELD there's no reason to skip to the
3479 if (TREE_CODE (x) == TYPE_DECL
3480 || TREE_CODE (x) == TEMPLATE_DECL)
3483 /* If we've gotten this far, it's a data member, possibly static,
3484 or an enumerator. */
3486 DECL_CONTEXT (x) = t;
3488 /* ``A local class cannot have static data members.'' ARM 9.4 */
3489 if (current_function_decl && TREE_STATIC (x))
3490 cp_error_at ("field `%D' in local class cannot be static", x);
3492 /* Perform error checking that did not get done in
3494 if (TREE_CODE (type) == FUNCTION_TYPE)
3496 cp_error_at ("field `%D' invalidly declared function type",
3498 type = build_pointer_type (type);
3499 TREE_TYPE (x) = type;
3501 else if (TREE_CODE (type) == METHOD_TYPE)
3503 cp_error_at ("field `%D' invalidly declared method type", x);
3504 type = build_pointer_type (type);
3505 TREE_TYPE (x) = type;
3507 else if (TREE_CODE (type) == OFFSET_TYPE)
3509 cp_error_at ("field `%D' invalidly declared offset type", x);
3510 type = build_pointer_type (type);
3511 TREE_TYPE (x) = type;
3514 if (type == error_mark_node)
3517 /* When this goes into scope, it will be a non-local reference. */
3518 DECL_NONLOCAL (x) = 1;
3520 if (TREE_CODE (x) == CONST_DECL)
3523 if (TREE_CODE (x) == VAR_DECL)
3525 if (TREE_CODE (t) == UNION_TYPE)
3526 /* Unions cannot have static members. */
3527 cp_error_at ("field `%D' declared static in union", x);
3532 /* Now it can only be a FIELD_DECL. */
3534 if (TREE_PRIVATE (x) || TREE_PROTECTED (x))
3535 CLASSTYPE_NON_AGGREGATE (t) = 1;
3537 /* If this is of reference type, check if it needs an init.
3538 Also do a little ANSI jig if necessary. */
3539 if (TREE_CODE (type) == REFERENCE_TYPE)
3541 CLASSTYPE_NON_POD_P (t) = 1;
3542 if (DECL_INITIAL (x) == NULL_TREE)
3543 CLASSTYPE_REF_FIELDS_NEED_INIT (t) = 1;
3545 /* ARM $12.6.2: [A member initializer list] (or, for an
3546 aggregate, initialization by a brace-enclosed list) is the
3547 only way to initialize nonstatic const and reference
3549 *cant_have_default_ctor_p = 1;
3550 TYPE_HAS_COMPLEX_ASSIGN_REF (t) = 1;
3552 if (! TYPE_HAS_CONSTRUCTOR (t) && extra_warnings)
3555 cp_warning_at ("non-static reference `%#D' in class without a constructor", x);
3557 cp_warning_at ("non-static reference in class without a constructor", x);
3561 type = strip_array_types (type);
3563 if (TREE_CODE (type) == POINTER_TYPE)
3566 if (DECL_MUTABLE_P (x) || TYPE_HAS_MUTABLE_P (type))
3567 CLASSTYPE_HAS_MUTABLE (t) = 1;
3569 if (! pod_type_p (type)
3570 /* For some reason, pointers to members are POD types themselves,
3571 but are not allowed in POD structs. Silly. */
3572 || TYPE_PTRMEM_P (type) || TYPE_PTRMEMFUNC_P (type))
3573 CLASSTYPE_NON_POD_P (t) = 1;
3575 /* If any field is const, the structure type is pseudo-const. */
3576 if (CP_TYPE_CONST_P (type))
3578 C_TYPE_FIELDS_READONLY (t) = 1;
3579 if (DECL_INITIAL (x) == NULL_TREE)
3580 CLASSTYPE_READONLY_FIELDS_NEED_INIT (t) = 1;
3582 /* ARM $12.6.2: [A member initializer list] (or, for an
3583 aggregate, initialization by a brace-enclosed list) is the
3584 only way to initialize nonstatic const and reference
3586 *cant_have_default_ctor_p = 1;
3587 TYPE_HAS_COMPLEX_ASSIGN_REF (t) = 1;
3589 if (! TYPE_HAS_CONSTRUCTOR (t) && extra_warnings)
3592 cp_warning_at ("non-static const member `%#D' in class without a constructor", x);
3594 cp_warning_at ("non-static const member in class without a constructor", x);
3597 /* A field that is pseudo-const makes the structure likewise. */
3598 else if (IS_AGGR_TYPE (type))
3600 C_TYPE_FIELDS_READONLY (t) |= C_TYPE_FIELDS_READONLY (type);
3601 CLASSTYPE_READONLY_FIELDS_NEED_INIT (t)
3602 |= CLASSTYPE_READONLY_FIELDS_NEED_INIT (type);
3605 /* Core issue 80: A nonstatic data member is required to have a
3606 different name from the class iff the class has a
3607 user-defined constructor. */
3608 if (DECL_NAME (x) == constructor_name (t)
3609 && TYPE_HAS_CONSTRUCTOR (t))
3610 cp_pedwarn_at ("field `%#D' with same name as class", x);
3612 /* We set DECL_C_BIT_FIELD in grokbitfield.
3613 If the type and width are valid, we'll also set DECL_BIT_FIELD. */
3614 if (DECL_C_BIT_FIELD (x))
3615 check_bitfield_decl (x);
3617 check_field_decl (x, t,
3618 cant_have_const_ctor_p,
3619 cant_have_default_ctor_p,
3621 &any_default_members);
3624 /* Effective C++ rule 11. */
3625 if (has_pointers && warn_ecpp && TYPE_HAS_CONSTRUCTOR (t)
3626 && ! (TYPE_HAS_INIT_REF (t) && TYPE_HAS_ASSIGN_REF (t)))
3628 cp_warning ("`%#T' has pointer data members", t);
3630 if (! TYPE_HAS_INIT_REF (t))
3632 cp_warning (" but does not override `%T(const %T&)'", t, t);
3633 if (! TYPE_HAS_ASSIGN_REF (t))
3634 cp_warning (" or `operator=(const %T&)'", t);
3636 else if (! TYPE_HAS_ASSIGN_REF (t))
3637 cp_warning (" but does not override `operator=(const %T&)'", t);
3641 /* Check anonymous struct/anonymous union fields. */
3642 finish_struct_anon (t);
3644 /* We've built up the list of access declarations in reverse order.
3646 *access_decls = nreverse (*access_decls);
3649 /* Return a FIELD_DECL for a pointer-to-virtual-table or
3650 pointer-to-virtual-base. The NAME, ASSEMBLER_NAME, and TYPE of the
3651 field are as indicated. The CLASS_TYPE in which this field occurs
3652 is also indicated. FCONTEXT is the type that is needed for the debug
3653 info output routines. *EMPTY_P is set to a non-zero value by this
3654 function to indicate that a class containing this field is
3658 build_vtbl_or_vbase_field (name, assembler_name, type, class_type, fcontext,
3661 tree assembler_name;
3669 /* This class is non-empty. */
3672 /* Build the FIELD_DECL. */
3673 field = build_decl (FIELD_DECL, name, type);
3674 DECL_ASSEMBLER_NAME (field) = assembler_name;
3675 DECL_VIRTUAL_P (field) = 1;
3676 DECL_ARTIFICIAL (field) = 1;
3677 DECL_FIELD_CONTEXT (field) = class_type;
3678 DECL_FCONTEXT (field) = fcontext;
3679 DECL_ALIGN (field) = TYPE_ALIGN (type);
3680 DECL_USER_ALIGN (field) = TYPE_USER_ALIGN (type);
3686 /* Record the type of BINFO in the slot in DATA (which is really a
3687 `varray_type *') corresponding to the BINFO_OFFSET. */
3690 dfs_record_base_offsets (binfo, data)
3695 unsigned HOST_WIDE_INT offset = tree_low_cst (BINFO_OFFSET (binfo), 1);
3697 v = (varray_type *) data;
3698 while (VARRAY_SIZE (*v) <= offset)
3699 VARRAY_GROW (*v, 2 * VARRAY_SIZE (*v));
3700 VARRAY_TREE (*v, offset) = tree_cons (NULL_TREE,
3702 VARRAY_TREE (*v, offset));
3707 /* Add the offset of BINFO and its bases to BASE_OFFSETS. */
3710 record_base_offsets (binfo, base_offsets)
3712 varray_type *base_offsets;
3715 dfs_record_base_offsets,
3720 /* Returns non-NULL if there is already an entry in DATA (which is
3721 really a `varray_type') indicating that an object with the same
3722 type of BINFO is already at the BINFO_OFFSET for BINFO. */
3725 dfs_search_base_offsets (binfo, data)
3729 if (is_empty_class (BINFO_TYPE (binfo)))
3731 varray_type v = (varray_type) data;
3732 /* Find the offset for this BINFO. */
3733 unsigned HOST_WIDE_INT offset = tree_low_cst (BINFO_OFFSET (binfo), 1);
3736 /* If we haven't yet encountered any objects at offsets that
3737 big, then there's no conflict. */
3738 if (VARRAY_SIZE (v) <= offset)
3740 /* Otherwise, go through the objects already allocated at this
3742 for (t = VARRAY_TREE (v, offset); t; t = TREE_CHAIN (t))
3743 if (same_type_p (TREE_VALUE (t), BINFO_TYPE (binfo)))
3750 /* Returns non-zero if there's a conflict between BINFO and a base
3751 already mentioned in BASE_OFFSETS if BINFO is placed at its current
3755 layout_conflict_p (binfo, base_offsets)
3757 varray_type base_offsets;
3759 return dfs_walk (binfo, dfs_search_base_offsets, dfs_skip_vbases,
3760 base_offsets) != NULL_TREE;
3763 /* DECL is a FIELD_DECL corresponding either to a base subobject of a
3764 non-static data member of the type indicated by RLI. BINFO is the
3765 binfo corresponding to the base subobject, or, if this is a
3766 non-static data-member, a dummy BINFO for the type of the data
3767 member. BINFO may be NULL if checks to see if the field overlaps
3768 an existing field with the same type are not required. V maps
3769 offsets to types already located at those offsets. This function
3770 determines the position of the DECL. */
3773 layout_nonempty_base_or_field (rli, decl, binfo, v)
3774 record_layout_info rli;
3779 /* Try to place the field. It may take more than one try if we have
3780 a hard time placing the field without putting two objects of the
3781 same type at the same address. */
3785 struct record_layout_info_s old_rli = *rli;
3787 /* Place this field. */
3788 place_field (rli, decl);
3790 /* Now that we know where it wil be placed, update its
3792 offset = byte_position (decl);
3794 propagate_binfo_offsets (binfo,
3795 convert (ssizetype, offset));
3797 /* We have to check to see whether or not there is already
3798 something of the same type at the offset we're about to use.
3802 struct T : public S { int i; };
3803 struct U : public S, public T {};
3805 Here, we put S at offset zero in U. Then, we can't put T at
3806 offset zero -- its S component would be at the same address
3807 as the S we already allocated. So, we have to skip ahead.
3808 Since all data members, including those whose type is an
3809 empty class, have non-zero size, any overlap can happen only
3810 with a direct or indirect base-class -- it can't happen with
3812 if (binfo && flag_new_abi && layout_conflict_p (binfo, v))
3814 /* Undo the propagate_binfo_offsets call. */
3815 offset = size_diffop (size_zero_node, offset);
3816 propagate_binfo_offsets (binfo, convert (ssizetype, offset));
3818 /* Strip off the size allocated to this field. That puts us
3819 at the first place we could have put the field with
3820 proper alignment. */
3823 /* Bump up by the alignment required for the type, without
3824 virtual base classes. */
3826 = size_binop (PLUS_EXPR, rli->bitpos,
3827 bitsize_int (CLASSTYPE_ALIGN (BINFO_TYPE (binfo))));
3828 normalize_rli (rli);
3831 /* There was no conflict. We're done laying out this field. */
3836 /* Layout the empty base BINFO. EOC indicates the byte currently just
3837 past the end of the class, and should be correctly aligned for a
3838 class of the type indicated by BINFO; BINFO_OFFSETS gives the
3839 offsets of the other bases allocated so far. */
3842 layout_empty_base (binfo, eoc, binfo_offsets)
3845 varray_type binfo_offsets;
3848 tree basetype = BINFO_TYPE (binfo);
3850 /* This routine should only be used for empty classes. */
3851 my_friendly_assert (is_empty_class (basetype), 20000321);
3852 alignment = ssize_int (CLASSTYPE_ALIGN_UNIT (basetype));
3854 /* This is an empty base class. We first try to put it at offset
3856 if (layout_conflict_p (binfo, binfo_offsets))
3858 /* That didn't work. Now, we move forward from the next
3859 available spot in the class. */
3860 propagate_binfo_offsets (binfo, convert (ssizetype, eoc));
3863 if (!layout_conflict_p (binfo, binfo_offsets))
3864 /* We finally found a spot where there's no overlap. */
3867 /* There's overlap here, too. Bump along to the next spot. */
3868 propagate_binfo_offsets (binfo, alignment);
3873 /* Build a FIELD_DECL for the base given by BINFO in the class
3874 indicated by RLI. If the new object is non-empty, clear *EMPTY_P.
3875 *BASE_ALIGN is a running maximum of the alignments of any base
3879 build_base_field (rli, binfo, empty_p, base_align, v)
3880 record_layout_info rli;
3883 unsigned int *base_align;
3886 tree basetype = BINFO_TYPE (binfo);
3889 if (!COMPLETE_TYPE_P (basetype))
3890 /* This error is now reported in xref_tag, thus giving better
3891 location information. */
3894 decl = build_decl (FIELD_DECL, NULL_TREE, basetype);
3895 DECL_ARTIFICIAL (decl) = 1;
3896 DECL_FIELD_CONTEXT (decl) = rli->t;
3897 DECL_SIZE (decl) = CLASSTYPE_SIZE (basetype);
3898 DECL_SIZE_UNIT (decl) = CLASSTYPE_SIZE_UNIT (basetype);
3899 DECL_ALIGN (decl) = CLASSTYPE_ALIGN (basetype);
3900 DECL_USER_ALIGN (decl) = CLASSTYPE_USER_ALIGN (basetype);
3904 /* Brain damage for backwards compatibility. For no good
3905 reason, the old basetype layout made every base have at least
3906 as large as the alignment for the bases up to that point,
3907 gratuitously wasting space. So we do the same thing here. */
3908 *base_align = MAX (*base_align, DECL_ALIGN (decl));
3910 = size_binop (MAX_EXPR, DECL_SIZE (decl), bitsize_int (*base_align));
3911 DECL_SIZE_UNIT (decl)
3912 = size_binop (MAX_EXPR, DECL_SIZE_UNIT (decl),
3913 size_int (*base_align / BITS_PER_UNIT));
3916 if (!integer_zerop (DECL_SIZE (decl)))
3918 /* The containing class is non-empty because it has a non-empty
3922 /* Try to place the field. It may take more than one try if we
3923 have a hard time placing the field without putting two
3924 objects of the same type at the same address. */
3925 layout_nonempty_base_or_field (rli, decl, binfo, *v);
3929 unsigned HOST_WIDE_INT eoc;
3931 /* On some platforms (ARM), even empty classes will not be
3933 eoc = tree_low_cst (rli_size_unit_so_far (rli), 0);
3934 eoc = CEIL (eoc, DECL_ALIGN (decl)) * DECL_ALIGN (decl);
3935 layout_empty_base (binfo, size_int (eoc), *v);
3938 /* Check for inaccessible base classes. If the same base class
3939 appears more than once in the hierarchy, but isn't virtual, then
3941 if (get_base_distance (basetype, rli->t, 0, NULL) == -2)
3942 cp_warning ("direct base `%T' inaccessible in `%T' due to ambiguity",
3945 /* Record the offsets of BINFO and its base subobjects. */
3946 record_base_offsets (binfo, v);
3949 /* Layout all of the non-virtual base classes. Returns a map from
3950 offsets to types present at those offsets. */
3953 build_base_fields (rli, empty_p)
3954 record_layout_info rli;
3957 /* Chain to hold all the new FIELD_DECLs which stand in for base class
3960 int n_baseclasses = CLASSTYPE_N_BASECLASSES (rec);
3963 unsigned int base_align = 0;
3965 /* Create the table mapping offsets to empty base classes. */
3966 VARRAY_TREE_INIT (v, 32, "v");
3968 /* Under the new ABI, the primary base class is always allocated
3970 if (flag_new_abi && CLASSTYPE_HAS_PRIMARY_BASE_P (rec))
3971 build_base_field (rli, CLASSTYPE_PRIMARY_BINFO (rec),
3972 empty_p, &base_align, &v);
3974 /* Now allocate the rest of the bases. */
3975 for (i = 0; i < n_baseclasses; ++i)
3979 /* Under the new ABI, the primary base was already allocated
3980 above, so we don't need to allocate it again here. */
3981 if (flag_new_abi && i == CLASSTYPE_VFIELD_PARENT (rec))
3984 base_binfo = BINFO_BASETYPE (TYPE_BINFO (rec), i);
3986 /* A primary virtual base class is allocated just like any other
3987 base class, but a non-primary virtual base is allocated
3988 later, in layout_virtual_bases. */
3989 if (TREE_VIA_VIRTUAL (base_binfo)
3990 && !BINFO_PRIMARY_MARKED_P (base_binfo))
3993 build_base_field (rli, base_binfo, empty_p, &base_align, &v);
3999 /* Go through the TYPE_METHODS of T issuing any appropriate
4000 diagnostics, figuring out which methods override which other
4001 methods, and so forth. */
4008 int seen_one_arg_array_delete_p = 0;
4010 for (x = TYPE_METHODS (t); x; x = TREE_CHAIN (x))
4012 GNU_xref_member (current_class_name, x);
4014 /* If this was an evil function, don't keep it in class. */
4015 if (IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (x)))
4018 check_for_override (x, t);
4019 if (DECL_PURE_VIRTUAL_P (x) && ! DECL_VINDEX (x))
4020 cp_error_at ("initializer specified for non-virtual method `%D'", x);
4022 /* The name of the field is the original field name
4023 Save this in auxiliary field for later overloading. */
4024 if (DECL_VINDEX (x))
4026 TYPE_POLYMORPHIC_P (t) = 1;
4027 if (DECL_PURE_VIRTUAL_P (x))
4028 CLASSTYPE_PURE_VIRTUALS (t)
4029 = tree_cons (NULL_TREE, x, CLASSTYPE_PURE_VIRTUALS (t));
4032 if (DECL_ARRAY_DELETE_OPERATOR_P (x))
4036 /* When dynamically allocating an array of this type, we
4037 need a "cookie" to record how many elements we allocated,
4038 even if the array elements have no non-trivial
4039 destructor, if the usual array deallocation function
4040 takes a second argument of type size_t. The standard (in
4041 [class.free]) requires that the second argument be set
4043 second_parm = TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (x)));
4044 /* This is overly conservative, but we must maintain this
4045 behavior for backwards compatibility. */
4046 if (!flag_new_abi && second_parm != void_list_node)
4047 TYPE_VEC_DELETE_TAKES_SIZE (t) = 1;
4048 /* Under the new ABI, we choose only those function that are
4049 explicitly declared as `operator delete[] (void *,
4051 else if (flag_new_abi
4052 && !seen_one_arg_array_delete_p
4054 && TREE_CHAIN (second_parm) == void_list_node
4055 && same_type_p (TREE_VALUE (second_parm), sizetype))
4056 TYPE_VEC_DELETE_TAKES_SIZE (t) = 1;
4057 /* If there's no second parameter, then this is the usual
4058 deallocation function. */
4059 else if (second_parm == void_list_node)
4060 seen_one_arg_array_delete_p = 1;
4065 /* FN is a constructor or destructor. Clone the declaration to create
4066 a specialized in-charge or not-in-charge version, as indicated by
4070 build_clone (fn, name)
4077 /* Copy the function. */
4078 clone = copy_decl (fn);
4079 /* Remember where this function came from. */
4080 DECL_CLONED_FUNCTION (clone) = fn;
4081 /* Reset the function name. */
4082 DECL_NAME (clone) = name;
4083 DECL_ASSEMBLER_NAME (clone) = DECL_NAME (clone);
4084 /* There's no pending inline data for this function. */
4085 DECL_PENDING_INLINE_INFO (clone) = NULL;
4086 DECL_PENDING_INLINE_P (clone) = 0;
4087 /* And it hasn't yet been deferred. */
4088 DECL_DEFERRED_FN (clone) = 0;
4089 /* There's no magic VTT parameter in the clone. */
4090 DECL_VTT_PARM (clone) = NULL_TREE;
4092 /* The base-class destructor is not virtual. */
4093 if (name == base_dtor_identifier)
4095 DECL_VIRTUAL_P (clone) = 0;
4096 if (TREE_CODE (clone) != TEMPLATE_DECL)
4097 DECL_VINDEX (clone) = NULL_TREE;
4100 /* If there was an in-charge parameter, drop it from the function
4102 if (DECL_HAS_IN_CHARGE_PARM_P (clone))
4108 exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (clone));
4109 basetype = TYPE_METHOD_BASETYPE (TREE_TYPE (clone));
4110 parmtypes = TYPE_ARG_TYPES (TREE_TYPE (clone));
4111 /* Skip the `this' parameter. */
4112 parmtypes = TREE_CHAIN (parmtypes);
4113 /* Skip the in-charge parameter. */
4114 parmtypes = TREE_CHAIN (parmtypes);
4115 /* If this is subobject constructor or destructor, add the vtt
4117 if (DECL_NEEDS_VTT_PARM_P (clone))
4118 parmtypes = hash_tree_chain (vtt_parm_type, parmtypes);
4120 = build_cplus_method_type (basetype,
4121 TREE_TYPE (TREE_TYPE (clone)),
4124 TREE_TYPE (clone) = build_exception_variant (TREE_TYPE (clone),
4128 /* Copy the function parameters. But, DECL_ARGUMENTS aren't
4129 function parameters; instead, those are the template parameters. */
4130 if (TREE_CODE (clone) != TEMPLATE_DECL)
4132 DECL_ARGUMENTS (clone) = copy_list (DECL_ARGUMENTS (clone));
4133 /* Remove the in-charge parameter. */
4134 if (DECL_HAS_IN_CHARGE_PARM_P (clone))
4136 TREE_CHAIN (DECL_ARGUMENTS (clone))
4137 = TREE_CHAIN (TREE_CHAIN (DECL_ARGUMENTS (clone)));
4138 DECL_HAS_IN_CHARGE_PARM_P (clone) = 0;
4141 /* Add the VTT parameter. */
4142 if (DECL_NEEDS_VTT_PARM_P (clone))
4146 parm = build_artificial_parm (vtt_parm_identifier,
4148 TREE_CHAIN (parm) = TREE_CHAIN (DECL_ARGUMENTS (clone));
4149 TREE_CHAIN (DECL_ARGUMENTS (clone)) = parm;
4152 for (parms = DECL_ARGUMENTS (clone); parms; parms = TREE_CHAIN (parms))
4154 DECL_CONTEXT (parms) = clone;
4155 copy_lang_decl (parms);
4159 /* Mangle the function name. */
4160 set_mangled_name_for_decl (clone);
4162 /* Create the RTL for this function. */
4163 DECL_RTL (clone) = NULL_RTX;
4164 rest_of_decl_compilation (clone, NULL, /*top_level=*/1, at_eof);
4166 /* Make it easy to find the CLONE given the FN. */
4167 TREE_CHAIN (clone) = TREE_CHAIN (fn);
4168 TREE_CHAIN (fn) = clone;
4170 /* If this is a template, handle the DECL_TEMPLATE_RESULT as well. */
4171 if (TREE_CODE (clone) == TEMPLATE_DECL)
4175 DECL_TEMPLATE_RESULT (clone)
4176 = build_clone (DECL_TEMPLATE_RESULT (clone), name);
4177 result = DECL_TEMPLATE_RESULT (clone);
4178 DECL_TEMPLATE_INFO (result) = copy_node (DECL_TEMPLATE_INFO (result));
4179 DECL_TI_TEMPLATE (result) = clone;
4181 else if (DECL_DEFERRED_FN (fn))
4187 /* Produce declarations for all appropriate clones of FN. If
4188 UPDATE_METHOD_VEC_P is non-zero, the clones are added to the
4189 CLASTYPE_METHOD_VEC as well. */
4192 clone_function_decl (fn, update_method_vec_p)
4194 int update_method_vec_p;
4198 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (fn))
4200 /* For each constructor, we need two variants: an in-charge version
4201 and a not-in-charge version. */
4202 clone = build_clone (fn, complete_ctor_identifier);
4203 if (update_method_vec_p)
4204 add_method (DECL_CONTEXT (clone), NULL, clone);
4205 clone = build_clone (fn, base_ctor_identifier);
4206 if (update_method_vec_p)
4207 add_method (DECL_CONTEXT (clone), NULL, clone);
4211 my_friendly_assert (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (fn), 20000411);
4213 /* For each destructor, we need three variants: an in-charge
4214 version, a not-in-charge version, and an in-charge deleting
4215 version. We clone the deleting version first because that
4216 means it will go second on the TYPE_METHODS list -- and that
4217 corresponds to the correct layout order in the virtual
4219 clone = build_clone (fn, deleting_dtor_identifier);
4220 if (update_method_vec_p)
4221 add_method (DECL_CONTEXT (clone), NULL, clone);
4222 clone = build_clone (fn, complete_dtor_identifier);
4223 if (update_method_vec_p)
4224 add_method (DECL_CONTEXT (clone), NULL, clone);
4225 clone = build_clone (fn, base_dtor_identifier);
4226 if (update_method_vec_p)
4227 add_method (DECL_CONTEXT (clone), NULL, clone);
4231 /* For each of the constructors and destructors in T, create an
4232 in-charge and not-in-charge variant. */
4235 clone_constructors_and_destructors (t)
4240 /* We only clone constructors and destructors under the new ABI. */
4244 /* If for some reason we don't have a CLASSTYPE_METHOD_VEC, we bail
4246 if (!CLASSTYPE_METHOD_VEC (t))
4249 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
4250 clone_function_decl (OVL_CURRENT (fns), /*update_method_vec_p=*/1);
4251 for (fns = CLASSTYPE_DESTRUCTORS (t); fns; fns = OVL_NEXT (fns))
4252 clone_function_decl (OVL_CURRENT (fns), /*update_method_vec_p=*/1);
4255 /* Remove all zero-width bit-fields from T. */
4258 remove_zero_width_bit_fields (t)
4263 fieldsp = &TYPE_FIELDS (t);
4266 if (TREE_CODE (*fieldsp) == FIELD_DECL
4267 && DECL_C_BIT_FIELD (*fieldsp)
4268 && DECL_INITIAL (*fieldsp))
4269 *fieldsp = TREE_CHAIN (*fieldsp);
4271 fieldsp = &TREE_CHAIN (*fieldsp);
4275 /* Check the validity of the bases and members declared in T. Add any
4276 implicitly-generated functions (like copy-constructors and
4277 assignment operators). Compute various flag bits (like
4278 CLASSTYPE_NON_POD_T) for T. This routine works purely at the C++
4279 level: i.e., independently of the ABI in use. */
4282 check_bases_and_members (t, empty_p)
4286 /* Nonzero if we are not allowed to generate a default constructor
4288 int cant_have_default_ctor;
4289 /* Nonzero if the implicitly generated copy constructor should take
4290 a non-const reference argument. */
4291 int cant_have_const_ctor;
4292 /* Nonzero if the the implicitly generated assignment operator
4293 should take a non-const reference argument. */
4294 int no_const_asn_ref;
4297 /* By default, we use const reference arguments and generate default
4299 cant_have_default_ctor = 0;
4300 cant_have_const_ctor = 0;
4301 no_const_asn_ref = 0;
4303 /* Assume that the class is nearly empty; we'll clear this flag if
4304 it turns out not to be nearly empty. */
4305 CLASSTYPE_NEARLY_EMPTY_P (t) = 1;
4307 /* Check all the base-classes. */
4308 check_bases (t, &cant_have_default_ctor, &cant_have_const_ctor,
4311 /* Check all the data member declarations. */
4312 check_field_decls (t, &access_decls, empty_p,
4313 &cant_have_default_ctor,
4314 &cant_have_const_ctor,
4317 /* Check all the method declarations. */
4320 /* A nearly-empty class has to be vptr-containing; a nearly empty
4321 class contains just a vptr. */
4322 if (!TYPE_CONTAINS_VPTR_P (t))
4323 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
4325 /* Do some bookkeeping that will guide the generation of implicitly
4326 declared member functions. */
4327 TYPE_HAS_COMPLEX_INIT_REF (t)
4328 |= (TYPE_HAS_INIT_REF (t)
4329 || TYPE_USES_VIRTUAL_BASECLASSES (t)
4330 || TYPE_POLYMORPHIC_P (t));
4331 TYPE_NEEDS_CONSTRUCTING (t)
4332 |= (TYPE_HAS_CONSTRUCTOR (t)
4333 || TYPE_USES_VIRTUAL_BASECLASSES (t)
4334 || TYPE_POLYMORPHIC_P (t));
4335 CLASSTYPE_NON_AGGREGATE (t) |= (TYPE_HAS_CONSTRUCTOR (t)
4336 || TYPE_POLYMORPHIC_P (t));
4337 CLASSTYPE_NON_POD_P (t)
4338 |= (CLASSTYPE_NON_AGGREGATE (t) || TYPE_HAS_DESTRUCTOR (t)
4339 || TYPE_HAS_ASSIGN_REF (t));
4340 TYPE_HAS_REAL_ASSIGN_REF (t) |= TYPE_HAS_ASSIGN_REF (t);
4341 TYPE_HAS_COMPLEX_ASSIGN_REF (t)
4342 |= TYPE_HAS_ASSIGN_REF (t) || TYPE_USES_VIRTUAL_BASECLASSES (t);
4344 /* Synthesize any needed methods. Note that methods will be synthesized
4345 for anonymous unions; grok_x_components undoes that. */
4346 add_implicitly_declared_members (t, cant_have_default_ctor,
4347 cant_have_const_ctor,
4350 /* Create the in-charge and not-in-charge variants of constructors
4352 clone_constructors_and_destructors (t);
4354 /* Process the using-declarations. */
4355 for (; access_decls; access_decls = TREE_CHAIN (access_decls))
4356 handle_using_decl (TREE_VALUE (access_decls), t);
4358 /* Build and sort the CLASSTYPE_METHOD_VEC. */
4359 finish_struct_methods (t);
4362 /* If T needs a pointer to its virtual function table, set TYPE_VFIELD
4363 accordingly. If a new vfield was created (because T doesn't have a
4364 primary base class), then the newly created field is returned. It
4365 is not added to the TYPE_FIELDS list; it is the caller's
4366 responsibility to do that. */
4369 create_vtable_ptr (t, empty_p, vfuns_p,
4370 new_virtuals_p, overridden_virtuals_p)
4374 tree *new_virtuals_p;
4375 tree *overridden_virtuals_p;
4379 /* Loop over the virtual functions, adding them to our various
4381 for (fn = TYPE_METHODS (t); fn; fn = TREE_CHAIN (fn))
4382 if (DECL_VINDEX (fn)
4383 && !(flag_new_abi && DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (fn)))
4384 add_virtual_function (new_virtuals_p, overridden_virtuals_p,
4387 /* If we couldn't find an appropriate base class, create a new field
4388 here. Even if there weren't any new virtual functions, we might need a
4389 new virtual function table if we're supposed to include vptrs in
4390 all classes that need them. */
4391 if (!TYPE_VFIELD (t)
4393 || (TYPE_CONTAINS_VPTR_P (t) && vptrs_present_everywhere_p ())))
4395 /* We build this decl with vtbl_ptr_type_node, which is a
4396 `vtable_entry_type*'. It might seem more precise to use
4397 `vtable_entry_type (*)[N]' where N is the number of firtual
4398 functions. However, that would require the vtable pointer in
4399 base classes to have a different type than the vtable pointer
4400 in derived classes. We could make that happen, but that
4401 still wouldn't solve all the problems. In particular, the
4402 type-based alias analysis code would decide that assignments
4403 to the base class vtable pointer can't alias assignments to
4404 the derived class vtable pointer, since they have different
4405 types. Thus, in an derived class destructor, where the base
4406 class constructor was inlined, we could generate bad code for
4407 setting up the vtable pointer.
4409 Therefore, we use one type for all vtable pointers. We still
4410 use a type-correct type; it's just doesn't indicate the array
4411 bounds. That's better than using `void*' or some such; it's
4412 cleaner, and it let's the alias analysis code know that these
4413 stores cannot alias stores to void*! */
4415 = build_vtbl_or_vbase_field (get_vfield_name (t),
4416 get_identifier (VFIELD_BASE),
4422 if (flag_new_abi && CLASSTYPE_N_BASECLASSES (t))
4423 /* If there were any baseclasses, they can't possibly be at
4424 offset zero any more, because that's where the vtable
4425 pointer is. So, converting to a base class is going to
4427 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (t) = 1;
4429 return TYPE_VFIELD (t);
4435 /* Fixup the inline function given by INFO now that the class is
4439 fixup_pending_inline (info)
4440 struct pending_inline *info;
4445 tree fn = info->fndecl;
4447 args = DECL_ARGUMENTS (fn);
4450 DECL_CONTEXT (args) = fn;
4451 args = TREE_CHAIN (args);
4456 /* Fixup the inline methods and friends in TYPE now that TYPE is
4460 fixup_inline_methods (type)
4463 tree method = TYPE_METHODS (type);
4465 if (method && TREE_CODE (method) == TREE_VEC)
4467 if (TREE_VEC_ELT (method, 1))
4468 method = TREE_VEC_ELT (method, 1);
4469 else if (TREE_VEC_ELT (method, 0))
4470 method = TREE_VEC_ELT (method, 0);
4472 method = TREE_VEC_ELT (method, 2);
4475 /* Do inline member functions. */
4476 for (; method; method = TREE_CHAIN (method))
4477 fixup_pending_inline (DECL_PENDING_INLINE_INFO (method));
4480 for (method = CLASSTYPE_INLINE_FRIENDS (type);
4482 method = TREE_CHAIN (method))
4483 fixup_pending_inline (DECL_PENDING_INLINE_INFO (TREE_VALUE (method)));
4484 CLASSTYPE_INLINE_FRIENDS (type) = NULL_TREE;
4487 /* Called from propagate_binfo_offsets via dfs_walk. */
4490 dfs_propagate_binfo_offsets (binfo, data)
4494 tree offset = (tree) data;
4496 /* Update the BINFO_OFFSET for this base. Allow for the case where it
4497 might be negative. */
4498 BINFO_OFFSET (binfo)
4499 = convert (sizetype, size_binop (PLUS_EXPR,
4500 convert (ssizetype, BINFO_OFFSET (binfo)),
4502 SET_BINFO_MARKED (binfo);
4507 /* Add OFFSET to all base types of BINFO which is a base in the
4508 hierarchy dominated by T.
4510 OFFSET, which is a type offset, is number of bytes.
4512 Note that we don't have to worry about having two paths to the
4513 same base type, since this type owns its association list. */
4516 propagate_binfo_offsets (binfo, offset)
4521 dfs_propagate_binfo_offsets,
4522 dfs_skip_nonprimary_vbases_unmarkedp,
4526 dfs_skip_nonprimary_vbases_markedp,
4530 /* Called via dfs_walk from layout_virtual bases. */
4533 dfs_set_offset_for_shared_vbases (binfo, data)
4537 if (TREE_VIA_VIRTUAL (binfo) && BINFO_PRIMARY_MARKED_P (binfo))
4539 /* Update the shared copy. */
4542 shared_binfo = binfo_for_vbase (BINFO_TYPE (binfo), (tree) data);
4543 BINFO_OFFSET (shared_binfo) = BINFO_OFFSET (binfo);
4549 /* Called via dfs_walk from layout_virtual bases. */
4552 dfs_set_offset_for_unshared_vbases (binfo, data)
4556 /* If this is a virtual base, make sure it has the same offset as
4557 the shared copy. If it's a primary base, then we know it's
4559 if (TREE_VIA_VIRTUAL (binfo) && !BINFO_PRIMARY_MARKED_P (binfo))
4561 tree t = (tree) data;
4565 vbase = binfo_for_vbase (BINFO_TYPE (binfo), t);
4566 offset = size_diffop (BINFO_OFFSET (vbase), BINFO_OFFSET (binfo));
4567 propagate_binfo_offsets (binfo, offset);
4573 /* Set BINFO_OFFSET for all of the virtual bases for T. Update
4574 TYPE_ALIGN and TYPE_SIZE for T. BASE_OFFSETS is a varray mapping
4575 offsets to the types at those offsets. */
4578 layout_virtual_bases (t, base_offsets)
4580 varray_type *base_offsets;
4583 unsigned HOST_WIDE_INT dsize;
4584 unsigned HOST_WIDE_INT eoc;
4586 if (CLASSTYPE_N_BASECLASSES (t) == 0)
4589 #ifdef STRUCTURE_SIZE_BOUNDARY
4590 /* Packed structures don't need to have minimum size. */
4591 if (! TYPE_PACKED (t))
4592 TYPE_ALIGN (t) = MAX (TYPE_ALIGN (t), STRUCTURE_SIZE_BOUNDARY);
4595 /* DSIZE is the size of the class without the virtual bases. */
4596 dsize = tree_low_cst (TYPE_SIZE (t), 1);
4598 /* Make every class have alignment of at least one. */
4599 TYPE_ALIGN (t) = MAX (TYPE_ALIGN (t), BITS_PER_UNIT);
4601 /* Go through the virtual bases, allocating space for each virtual
4602 base that is not already a primary base class. Under the new
4603 ABI, these are allocated according to a depth-first left-to-right
4604 postorder traversal; in the new ABI, inheritance graph order is
4606 for (vbases = (flag_new_abi
4608 : CLASSTYPE_VBASECLASSES (t));
4610 vbases = TREE_CHAIN (vbases))
4616 if (!TREE_VIA_VIRTUAL (vbases))
4618 vbase = binfo_for_vbase (BINFO_TYPE (vbases), t);
4621 vbase = TREE_VALUE (vbases);
4623 if (!BINFO_VBASE_PRIMARY_P (vbase))
4625 /* This virtual base is not a primary base of any class in the
4626 hierarchy, so we have to add space for it. */
4628 unsigned int desired_align;
4630 basetype = BINFO_TYPE (vbase);
4633 desired_align = CLASSTYPE_ALIGN (basetype);
4635 /* Under the old ABI, virtual bases were aligned as for the
4636 entire base object (including its virtual bases). That's
4637 wasteful, in general. */
4638 desired_align = TYPE_ALIGN (basetype);
4639 TYPE_ALIGN (t) = MAX (TYPE_ALIGN (t), desired_align);
4641 /* Add padding so that we can put the virtual base class at an
4642 appropriately aligned offset. */
4643 dsize = CEIL (dsize, desired_align) * desired_align;
4645 /* Under the new ABI, we try to squish empty virtual bases in
4646 just like ordinary empty bases. */
4647 if (flag_new_abi && is_empty_class (basetype))
4648 layout_empty_base (vbase,
4649 size_int (CEIL (dsize, BITS_PER_UNIT)),
4655 offset = ssize_int (CEIL (dsize, BITS_PER_UNIT));
4656 offset = size_diffop (offset,
4658 BINFO_OFFSET (vbase)));
4660 /* And compute the offset of the virtual base. */
4661 propagate_binfo_offsets (vbase, offset);
4662 /* Every virtual baseclass takes a least a UNIT, so that
4663 we can take it's address and get something different
4665 dsize += MAX (BITS_PER_UNIT,
4666 tree_low_cst (CLASSTYPE_SIZE (basetype), 0));
4669 /* Keep track of the offsets assigned to this virtual base. */
4670 record_base_offsets (vbase, base_offsets);
4674 /* Make sure that all of the CLASSTYPE_VBASECLASSES have their
4675 BINFO_OFFSET set correctly. Those we just allocated certainly
4676 will. The others are primary baseclasses; we walk the hierarchy
4677 to find the primary copies and update the shared copy. */
4678 dfs_walk (TYPE_BINFO (t),
4679 dfs_set_offset_for_shared_vbases,
4680 dfs_unmarked_real_bases_queue_p,
4683 /* Now, go through the TYPE_BINFO hierarchy again, setting the
4684 BINFO_OFFSETs correctly for all non-primary copies of the virtual
4685 bases and their direct and indirect bases. The ambiguity checks
4686 in get_base_distance depend on the BINFO_OFFSETs being set
4688 dfs_walk (TYPE_BINFO (t), dfs_set_offset_for_unshared_vbases, NULL, t);
4690 /* If we had empty base classes that protruded beyond the end of the
4691 class, we didn't update DSIZE above; we were hoping to overlay
4692 multiple such bases at the same location. */
4693 eoc = end_of_class (t, /*include_virtuals_p=*/1);
4694 if (eoc * BITS_PER_UNIT > dsize)
4695 dsize = (eoc + 1) * BITS_PER_UNIT;
4697 /* Now, make sure that the total size of the type is a multiple of
4699 dsize = CEIL (dsize, TYPE_ALIGN (t)) * TYPE_ALIGN (t);
4700 TYPE_SIZE (t) = bitsize_int (dsize);
4701 TYPE_SIZE_UNIT (t) = convert (sizetype,
4702 size_binop (CEIL_DIV_EXPR, TYPE_SIZE (t),
4703 bitsize_unit_node));
4705 /* Check for ambiguous virtual bases. */
4707 for (vbases = CLASSTYPE_VBASECLASSES (t);
4709 vbases = TREE_CHAIN (vbases))
4711 tree basetype = BINFO_TYPE (TREE_VALUE (vbases));
4712 if (get_base_distance (basetype, t, 0, (tree*)0) == -2)
4713 cp_warning ("virtual base `%T' inaccessible in `%T' due to ambiguity",
4718 /* Returns the offset of the byte just past the end of the base class
4719 with the highest offset in T. If INCLUDE_VIRTUALS_P is zero, then
4720 only non-virtual bases are included. */
4722 static unsigned HOST_WIDE_INT
4723 end_of_class (t, include_virtuals_p)
4725 int include_virtuals_p;
4727 unsigned HOST_WIDE_INT result = 0;
4730 for (i = 0; i < CLASSTYPE_N_BASECLASSES (t); ++i)
4734 unsigned HOST_WIDE_INT end_of_base;
4736 base_binfo = BINFO_BASETYPE (TYPE_BINFO (t), i);
4738 if (!include_virtuals_p
4739 && TREE_VIA_VIRTUAL (base_binfo)
4740 && !BINFO_PRIMARY_MARKED_P (base_binfo))
4743 offset = size_binop (PLUS_EXPR,
4744 BINFO_OFFSET (base_binfo),
4745 CLASSTYPE_SIZE_UNIT (BINFO_TYPE (base_binfo)));
4746 end_of_base = tree_low_cst (offset, /*pos=*/1);
4747 if (end_of_base > result)
4748 result = end_of_base;
4754 /* Calculate the TYPE_SIZE, TYPE_ALIGN, etc for T. Calculate
4755 BINFO_OFFSETs for all of the base-classes. Position the vtable
4759 layout_class_type (t, empty_p, vfuns_p,
4760 new_virtuals_p, overridden_virtuals_p)
4764 tree *new_virtuals_p;
4765 tree *overridden_virtuals_p;
4767 tree non_static_data_members;
4770 record_layout_info rli;
4772 unsigned HOST_WIDE_INT eoc;
4774 /* Keep track of the first non-static data member. */
4775 non_static_data_members = TYPE_FIELDS (t);
4777 /* Start laying out the record. */
4778 rli = start_record_layout (t);
4780 /* If possible, we reuse the virtual function table pointer from one
4781 of our base classes. */
4782 determine_primary_base (t, vfuns_p);
4784 /* Create a pointer to our virtual function table. */
4785 vptr = create_vtable_ptr (t, empty_p, vfuns_p,
4786 new_virtuals_p, overridden_virtuals_p);
4788 /* Under the new ABI, the vptr is always the first thing in the
4790 if (flag_new_abi && vptr)
4792 TYPE_FIELDS (t) = chainon (vptr, TYPE_FIELDS (t));
4793 place_field (rli, vptr);
4796 /* Add pointers to all of our virtual base-classes. */
4797 TYPE_FIELDS (t) = chainon (build_vbase_pointer_fields (rli, empty_p),
4799 /* Build FIELD_DECLs for all of the non-virtual base-types. */
4800 v = build_base_fields (rli, empty_p);
4802 /* CLASSTYPE_INLINE_FRIENDS is really TYPE_NONCOPIED_PARTS. Thus,
4803 we have to save this before we start modifying
4804 TYPE_NONCOPIED_PARTS. */
4805 fixup_inline_methods (t);
4807 /* Layout the non-static data members. */
4808 for (field = non_static_data_members; field; field = TREE_CHAIN (field))
4814 /* We still pass things that aren't non-static data members to
4815 the back-end, in case it wants to do something with them. */
4816 if (TREE_CODE (field) != FIELD_DECL)
4818 place_field (rli, field);
4822 type = TREE_TYPE (field);
4824 /* If this field is a bit-field whose width is greater than its
4825 type, then there are some special rules for allocating it
4826 under the new ABI. Under the old ABI, there were no special
4827 rules, but the back-end can't handle bitfields longer than a
4828 `long long', so we use the same mechanism. */
4829 if (DECL_C_BIT_FIELD (field)
4831 && INT_CST_LT (TYPE_SIZE (type), DECL_SIZE (field)))
4833 && 0 < compare_tree_int (DECL_SIZE (field),
4835 (long_long_unsigned_type_node)))))
4837 integer_type_kind itk;
4840 /* We must allocate the bits as if suitably aligned for the
4841 longest integer type that fits in this many bits. type
4842 of the field. Then, we are supposed to use the left over
4843 bits as additional padding. */
4844 for (itk = itk_char; itk != itk_none; ++itk)
4845 if (INT_CST_LT (DECL_SIZE (field),
4846 TYPE_SIZE (integer_types[itk])))
4849 /* ITK now indicates a type that is too large for the
4850 field. We have to back up by one to find the largest
4852 integer_type = integer_types[itk - 1];
4853 padding = size_binop (MINUS_EXPR, DECL_SIZE (field),
4854 TYPE_SIZE (integer_type));
4855 DECL_SIZE (field) = TYPE_SIZE (integer_type);
4856 DECL_ALIGN (field) = TYPE_ALIGN (integer_type);
4857 DECL_USER_ALIGN (field) = TYPE_USER_ALIGN (integer_type);
4860 padding = NULL_TREE;
4862 /* Create a dummy BINFO corresponding to this field. */
4863 binfo = make_binfo (size_zero_node, type, NULL_TREE, NULL_TREE);
4864 unshare_base_binfos (binfo);
4865 layout_nonempty_base_or_field (rli, field, binfo, v);
4867 /* If we needed additional padding after this field, add it
4873 padding_field = build_decl (FIELD_DECL,
4876 DECL_BIT_FIELD (padding_field) = 1;
4877 DECL_SIZE (padding_field) = padding;
4878 DECL_ALIGN (padding_field) = 1;
4879 DECL_USER_ALIGN (padding_field) = 0;
4880 layout_nonempty_base_or_field (rli, padding_field, NULL_TREE, v);
4884 /* It might be the case that we grew the class to allocate a
4885 zero-sized base class. That won't be reflected in RLI, yet,
4886 because we are willing to overlay multiple bases at the same
4887 offset. However, now we need to make sure that RLI is big enough
4888 to reflect the entire class. */
4889 eoc = end_of_class (t, /*include_virtuals_p=*/0);
4890 if (TREE_CODE (rli_size_unit_so_far (rli)) == INTEGER_CST
4891 && compare_tree_int (rli_size_unit_so_far (rli), eoc) < 0)
4893 /* We don't handle zero-sized base classes specially under the
4894 old ABI, so if we get here, we had better be operating under
4895 the new ABI rules. */
4896 my_friendly_assert (flag_new_abi, 20000321);
4897 rli->offset = size_binop (MAX_EXPR, rli->offset, size_int (eoc + 1));
4898 rli->bitpos = bitsize_zero_node;
4901 /* We make all structures have at least one element, so that they
4902 have non-zero size. In the new ABI, the class may be empty even
4903 if it has basetypes. Therefore, we add the fake field after all
4904 the other fields; if there are already FIELD_DECLs on the list,
4905 their offsets will not be disturbed. */
4910 padding = build_decl (FIELD_DECL, NULL_TREE, char_type_node);
4911 place_field (rli, padding);
4912 TYPE_NONCOPIED_PARTS (t)
4913 = tree_cons (NULL_TREE, padding, TYPE_NONCOPIED_PARTS (t));
4914 TREE_STATIC (TYPE_NONCOPIED_PARTS (t)) = 1;
4917 /* Under the old ABI, the vptr comes at the very end of the
4919 if (!flag_new_abi && vptr)
4921 place_field (rli, vptr);
4922 TYPE_FIELDS (t) = chainon (TYPE_FIELDS (t), vptr);
4925 /* Let the back-end lay out the type. Note that at this point we
4926 have only included non-virtual base-classes; we will lay out the
4927 virtual base classes later. So, the TYPE_SIZE/TYPE_ALIGN after
4928 this call are not necessarily correct; they are just the size and
4929 alignment when no virtual base clases are used. */
4930 finish_record_layout (rli);
4932 /* Delete all zero-width bit-fields from the list of fields. Now
4933 that the type is laid out they are no longer important. */
4934 remove_zero_width_bit_fields (t);
4936 /* Remember the size and alignment of the class before adding
4937 the virtual bases. */
4938 if (*empty_p && flag_new_abi)
4940 CLASSTYPE_SIZE (t) = bitsize_zero_node;
4941 CLASSTYPE_SIZE_UNIT (t) = size_zero_node;
4943 else if (flag_new_abi && TYPE_HAS_COMPLEX_INIT_REF (t)
4944 && TYPE_HAS_COMPLEX_ASSIGN_REF (t))
4946 CLASSTYPE_SIZE (t) = TYPE_BINFO_SIZE (t);
4947 CLASSTYPE_SIZE_UNIT (t) = TYPE_BINFO_SIZE_UNIT (t);
4951 CLASSTYPE_SIZE (t) = TYPE_SIZE (t);
4952 CLASSTYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (t);
4955 CLASSTYPE_ALIGN (t) = TYPE_ALIGN (t);
4956 CLASSTYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (t);
4958 /* Set the TYPE_DECL for this type to contain the right
4959 value for DECL_OFFSET, so that we can use it as part
4960 of a COMPONENT_REF for multiple inheritance. */
4961 layout_decl (TYPE_MAIN_DECL (t), 0);
4963 /* Now fix up any virtual base class types that we left lying
4964 around. We must get these done before we try to lay out the
4965 virtual function table. As a side-effect, this will remove the
4966 base subobject fields. */
4967 layout_virtual_bases (t, &v);
4973 /* Create a RECORD_TYPE or UNION_TYPE node for a C struct or union declaration
4974 (or C++ class declaration).
4976 For C++, we must handle the building of derived classes.
4977 Also, C++ allows static class members. The way that this is
4978 handled is to keep the field name where it is (as the DECL_NAME
4979 of the field), and place the overloaded decl in the bit position
4980 of the field. layout_record and layout_union will know about this.
4982 More C++ hair: inline functions have text in their
4983 DECL_PENDING_INLINE_INFO nodes which must somehow be parsed into
4984 meaningful tree structure. After the struct has been laid out, set
4985 things up so that this can happen.
4987 And still more: virtual functions. In the case of single inheritance,
4988 when a new virtual function is seen which redefines a virtual function
4989 from the base class, the new virtual function is placed into
4990 the virtual function table at exactly the same address that
4991 it had in the base class. When this is extended to multiple
4992 inheritance, the same thing happens, except that multiple virtual
4993 function tables must be maintained. The first virtual function
4994 table is treated in exactly the same way as in the case of single
4995 inheritance. Additional virtual function tables have different
4996 DELTAs, which tell how to adjust `this' to point to the right thing.
4998 ATTRIBUTES is the set of decl attributes to be applied, if any. */
5006 /* The NEW_VIRTUALS is a TREE_LIST. The TREE_VALUE of each node is
5007 a FUNCTION_DECL. Each of these functions is a virtual function
5008 declared in T that does not override any virtual function from a
5010 tree new_virtuals = NULL_TREE;
5011 /* The OVERRIDDEN_VIRTUALS list is like the NEW_VIRTUALS list,
5012 except that each declaration here overrides the declaration from
5014 tree overridden_virtuals = NULL_TREE;
5019 if (COMPLETE_TYPE_P (t))
5021 if (IS_AGGR_TYPE (t))
5022 cp_error ("redefinition of `%#T'", t);
5024 my_friendly_abort (172);
5029 GNU_xref_decl (current_function_decl, t);
5031 /* If this type was previously laid out as a forward reference,
5032 make sure we lay it out again. */
5033 TYPE_SIZE (t) = NULL_TREE;
5034 CLASSTYPE_GOT_SEMICOLON (t) = 0;
5035 CLASSTYPE_VFIELD_PARENT (t) = -1;
5037 CLASSTYPE_RTTI (t) = NULL_TREE;
5039 /* Do end-of-class semantic processing: checking the validity of the
5040 bases and members and add implicitly generated methods. */
5041 check_bases_and_members (t, &empty);
5043 /* Layout the class itself. */
5044 layout_class_type (t, &empty, &vfuns,
5045 &new_virtuals, &overridden_virtuals);
5047 /* Set up the DECL_FIELD_BITPOS of the vfield if we need to, as we
5048 might need to know it for setting up the offsets in the vtable
5049 (or in thunks) below. */
5050 vfield = TYPE_VFIELD (t);
5051 if (vfield != NULL_TREE
5052 && DECL_FIELD_CONTEXT (vfield) != t)
5054 tree binfo = get_binfo (DECL_FIELD_CONTEXT (vfield), t, 0);
5056 vfield = copy_decl (vfield);
5058 DECL_FIELD_CONTEXT (vfield) = t;
5059 DECL_FIELD_OFFSET (vfield)
5060 = size_binop (PLUS_EXPR,
5061 BINFO_OFFSET (binfo),
5062 DECL_FIELD_OFFSET (vfield));
5063 TYPE_VFIELD (t) = vfield;
5067 = modify_all_vtables (t, &vfuns, nreverse (overridden_virtuals));
5069 /* If we created a new vtbl pointer for this class, add it to the
5071 if (TYPE_VFIELD (t) && !CLASSTYPE_HAS_PRIMARY_BASE_P (t))
5072 CLASSTYPE_VFIELDS (t)
5073 = chainon (CLASSTYPE_VFIELDS (t), build_tree_list (NULL_TREE, t));
5075 /* If necessary, create the primary vtable for this class. */
5077 || overridden_virtuals
5078 || (TYPE_CONTAINS_VPTR_P (t) && vptrs_present_everywhere_p ()))
5080 new_virtuals = nreverse (new_virtuals);
5081 /* We must enter these virtuals into the table. */
5082 if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t))
5083 build_primary_vtable (NULL_TREE, t);
5084 else if (! BINFO_NEW_VTABLE_MARKED (TYPE_BINFO (t), t))
5085 /* Here we know enough to change the type of our virtual
5086 function table, but we will wait until later this function. */
5087 build_primary_vtable (CLASSTYPE_PRIMARY_BINFO (t), t);
5089 /* If this type has basetypes with constructors, then those
5090 constructors might clobber the virtual function table. But
5091 they don't if the derived class shares the exact vtable of the base
5094 CLASSTYPE_NEEDS_VIRTUAL_REINIT (t) = 1;
5096 /* If we didn't need a new vtable, see if we should copy one from
5098 else if (CLASSTYPE_HAS_PRIMARY_BASE_P (t))
5100 tree binfo = CLASSTYPE_PRIMARY_BINFO (t);
5102 /* If this class uses a different vtable than its primary base
5103 then when we will need to initialize our vptr after the base
5104 class constructor runs. */
5105 if (TYPE_BINFO_VTABLE (t) != BINFO_VTABLE (binfo))
5106 CLASSTYPE_NEEDS_VIRTUAL_REINIT (t) = 1;
5109 if (TYPE_CONTAINS_VPTR_P (t))
5111 if (TYPE_BINFO_VTABLE (t))
5112 my_friendly_assert (DECL_VIRTUAL_P (TYPE_BINFO_VTABLE (t)),
5114 if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t))
5115 my_friendly_assert (TYPE_BINFO_VIRTUALS (t) == NULL_TREE,
5118 CLASSTYPE_VSIZE (t) = vfuns;
5119 /* Entries for virtual functions defined in the primary base are
5120 followed by entries for new functions unique to this class. */
5121 TYPE_BINFO_VIRTUALS (t)
5122 = chainon (TYPE_BINFO_VIRTUALS (t), new_virtuals);
5123 /* Finally, add entries for functions that override virtuals
5124 from non-primary bases. */
5125 TYPE_BINFO_VIRTUALS (t)
5126 = chainon (TYPE_BINFO_VIRTUALS (t), overridden_virtuals);
5129 finish_struct_bits (t);
5131 /* Complete the rtl for any static member objects of the type we're
5133 for (x = TYPE_FIELDS (t); x; x = TREE_CHAIN (x))
5135 if (TREE_CODE (x) == VAR_DECL && TREE_STATIC (x)
5136 && TREE_TYPE (x) == t)
5138 DECL_MODE (x) = TYPE_MODE (t);
5139 make_decl_rtl (x, NULL, 0);
5143 /* Done with FIELDS...now decide whether to sort these for
5144 faster lookups later.
5146 The C front-end only does this when n_fields > 15. We use
5147 a smaller number because most searches fail (succeeding
5148 ultimately as the search bores through the inheritance
5149 hierarchy), and we want this failure to occur quickly. */
5151 n_fields = count_fields (TYPE_FIELDS (t));
5154 tree field_vec = make_tree_vec (n_fields);
5155 add_fields_to_vec (TYPE_FIELDS (t), field_vec, 0);
5156 qsort (&TREE_VEC_ELT (field_vec, 0), n_fields, sizeof (tree),
5157 (int (*)(const void *, const void *))field_decl_cmp);
5158 if (! DECL_LANG_SPECIFIC (TYPE_MAIN_DECL (t)))
5159 retrofit_lang_decl (TYPE_MAIN_DECL (t));
5160 DECL_SORTED_FIELDS (TYPE_MAIN_DECL (t)) = field_vec;
5163 if (TYPE_HAS_CONSTRUCTOR (t))
5165 tree vfields = CLASSTYPE_VFIELDS (t);
5169 /* Mark the fact that constructor for T
5170 could affect anybody inheriting from T
5171 who wants to initialize vtables for VFIELDS's type. */
5172 if (VF_DERIVED_VALUE (vfields))
5173 TREE_ADDRESSABLE (vfields) = 1;
5174 vfields = TREE_CHAIN (vfields);
5178 /* Make the rtl for any new vtables we have created, and unmark
5179 the base types we marked. */
5181 /* Build the VTT for T. */
5184 if (TYPE_VFIELD (t))
5186 /* In addition to this one, all the other vfields should be listed. */
5187 /* Before that can be done, we have to have FIELD_DECLs for them, and
5188 a place to find them. */
5189 TYPE_NONCOPIED_PARTS (t)
5190 = tree_cons (default_conversion (TYPE_BINFO_VTABLE (t)),
5191 TYPE_VFIELD (t), TYPE_NONCOPIED_PARTS (t));
5193 if (warn_nonvdtor && TYPE_HAS_DESTRUCTOR (t)
5194 && DECL_VINDEX (TREE_VEC_ELT (CLASSTYPE_METHOD_VEC (t), 1)) == NULL_TREE)
5195 cp_warning ("`%#T' has virtual functions but non-virtual destructor",
5199 hack_incomplete_structures (t);
5201 if (warn_overloaded_virtual)
5204 maybe_suppress_debug_info (t);
5206 /* Finish debugging output for this type. */
5207 rest_of_type_compilation (t, toplevel_bindings_p ());
5210 /* When T was built up, the member declarations were added in reverse
5211 order. Rearrange them to declaration order. */
5214 unreverse_member_declarations (t)
5221 /* The TYPE_FIELDS, TYPE_METHODS, and CLASSTYPE_TAGS are all in
5222 reverse order. Put them in declaration order now. */
5223 TYPE_METHODS (t) = nreverse (TYPE_METHODS (t));
5224 CLASSTYPE_TAGS (t) = nreverse (CLASSTYPE_TAGS (t));
5226 /* Actually, for the TYPE_FIELDS, only the non TYPE_DECLs are in
5227 reverse order, so we can't just use nreverse. */
5229 for (x = TYPE_FIELDS (t);
5230 x && TREE_CODE (x) != TYPE_DECL;
5233 next = TREE_CHAIN (x);
5234 TREE_CHAIN (x) = prev;
5239 TREE_CHAIN (TYPE_FIELDS (t)) = x;
5241 TYPE_FIELDS (t) = prev;
5246 finish_struct (t, attributes)
5249 /* Now that we've got all the field declarations, reverse everything
5251 unreverse_member_declarations (t);
5253 cplus_decl_attributes (t, attributes, NULL_TREE);
5255 if (processing_template_decl)
5257 finish_struct_methods (t);
5258 TYPE_SIZE (t) = bitsize_zero_node;
5261 finish_struct_1 (t);
5263 TYPE_BEING_DEFINED (t) = 0;
5265 if (current_class_type)
5268 error ("trying to finish struct, but kicked out due to previous parse errors.");
5270 if (processing_template_decl)
5272 tree scope = current_scope ();
5273 if (scope && TREE_CODE (scope) == FUNCTION_DECL)
5274 add_tree (build_min (TAG_DEFN, t));
5280 /* Return the dynamic type of INSTANCE, if known.
5281 Used to determine whether the virtual function table is needed
5284 *NONNULL is set iff INSTANCE can be known to be nonnull, regardless
5285 of our knowledge of its type. *NONNULL should be initialized
5286 before this function is called. */
5289 fixed_type_or_null (instance, nonnull)
5293 switch (TREE_CODE (instance))
5296 /* Check that we are not going through a cast of some sort. */
5297 if (TREE_TYPE (instance)
5298 == TREE_TYPE (TREE_TYPE (TREE_OPERAND (instance, 0))))
5299 instance = TREE_OPERAND (instance, 0);
5300 /* fall through... */
5302 /* This is a call to a constructor, hence it's never zero. */
5303 if (TREE_HAS_CONSTRUCTOR (instance))
5307 return TREE_TYPE (instance);
5312 /* This is a call to a constructor, hence it's never zero. */
5313 if (TREE_HAS_CONSTRUCTOR (instance))
5317 return TREE_TYPE (instance);
5319 return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull);
5326 if (TREE_CODE (TREE_OPERAND (instance, 1)) == INTEGER_CST)
5327 /* Propagate nonnull. */
5328 fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull);
5329 if (TREE_CODE (TREE_OPERAND (instance, 0)) == ADDR_EXPR)
5330 return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull);
5335 return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull);
5340 return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull);
5343 return fixed_type_or_null (TREE_OPERAND (instance, 1), nonnull);
5347 if (TREE_CODE (TREE_TYPE (instance)) == ARRAY_TYPE
5348 && IS_AGGR_TYPE (TREE_TYPE (TREE_TYPE (instance))))
5352 return TREE_TYPE (TREE_TYPE (instance));
5354 /* fall through... */
5357 if (IS_AGGR_TYPE (TREE_TYPE (instance)))
5361 return TREE_TYPE (instance);
5365 if (instance == current_class_ptr
5366 && flag_this_is_variable <= 0)
5368 /* Normally, 'this' must be non-null. */
5369 if (flag_this_is_variable == 0)
5372 /* <0 means we're in a constructor and we know our type. */
5373 if (flag_this_is_variable < 0)
5374 return TREE_TYPE (TREE_TYPE (instance));
5376 else if (TREE_CODE (TREE_TYPE (instance)) == REFERENCE_TYPE)
5377 /* Reference variables should be references to objects. */
5387 /* Return non-zero if the dynamic type of INSTANCE is known, and equivalent
5388 to the static type. We also handle the case where INSTANCE is really
5391 Used to determine whether the virtual function table is needed
5394 *NONNULL is set iff INSTANCE can be known to be nonnull, regardless
5395 of our knowledge of its type. *NONNULL should be initialized
5396 before this function is called. */
5399 resolves_to_fixed_type_p (instance, nonnull)
5403 tree t = TREE_TYPE (instance);
5404 tree fixed = fixed_type_or_null (instance, nonnull);
5405 if (fixed == NULL_TREE)
5407 if (POINTER_TYPE_P (t))
5409 return same_type_ignoring_top_level_qualifiers_p (t, fixed);
5414 init_class_processing ()
5416 current_class_depth = 0;
5417 current_class_stack_size = 10;
5419 = (class_stack_node_t) xmalloc (current_class_stack_size
5420 * sizeof (struct class_stack_node));
5421 VARRAY_TREE_INIT (local_classes, 8, "local_classes");
5422 ggc_add_tree_varray_root (&local_classes, 1);
5424 access_default_node = build_int_2 (0, 0);
5425 access_public_node = build_int_2 (ak_public, 0);
5426 access_protected_node = build_int_2 (ak_protected, 0);
5427 access_private_node = build_int_2 (ak_private, 0);
5428 access_default_virtual_node = build_int_2 (4, 0);
5429 access_public_virtual_node = build_int_2 (4 | ak_public, 0);
5430 access_protected_virtual_node = build_int_2 (4 | ak_protected, 0);
5431 access_private_virtual_node = build_int_2 (4 | ak_private, 0);
5434 /* Set current scope to NAME. CODE tells us if this is a
5435 STRUCT, UNION, or ENUM environment.
5437 NAME may end up being NULL_TREE if this is an anonymous or
5438 late-bound struct (as in "struct { ... } foo;") */
5440 /* Set global variables CURRENT_CLASS_NAME and CURRENT_CLASS_TYPE to
5441 appropriate values, found by looking up the type definition of
5444 If MODIFY is 1, we set IDENTIFIER_CLASS_VALUE's of names
5445 which can be seen locally to the class. They are shadowed by
5446 any subsequent local declaration (including parameter names).
5448 If MODIFY is 2, we set IDENTIFIER_CLASS_VALUE's of names
5449 which have static meaning (i.e., static members, static
5450 member functions, enum declarations, etc).
5452 If MODIFY is 3, we set IDENTIFIER_CLASS_VALUE of names
5453 which can be seen locally to the class (as in 1), but
5454 know that we are doing this for declaration purposes
5455 (i.e. friend foo::bar (int)).
5457 So that we may avoid calls to lookup_name, we cache the _TYPE
5458 nodes of local TYPE_DECLs in the TREE_TYPE field of the name.
5460 For multiple inheritance, we perform a two-pass depth-first search
5461 of the type lattice. The first pass performs a pre-order search,
5462 marking types after the type has had its fields installed in
5463 the appropriate IDENTIFIER_CLASS_VALUE slot. The second pass merely
5464 unmarks the marked types. If a field or member function name
5465 appears in an ambiguous way, the IDENTIFIER_CLASS_VALUE of
5466 that name becomes `error_mark_node'. */
5469 pushclass (type, modify)
5473 type = TYPE_MAIN_VARIANT (type);
5475 /* Make sure there is enough room for the new entry on the stack. */
5476 if (current_class_depth + 1 >= current_class_stack_size)
5478 current_class_stack_size *= 2;
5480 = (class_stack_node_t) xrealloc (current_class_stack,
5481 current_class_stack_size
5482 * sizeof (struct class_stack_node));
5485 /* Insert a new entry on the class stack. */
5486 current_class_stack[current_class_depth].name = current_class_name;
5487 current_class_stack[current_class_depth].type = current_class_type;
5488 current_class_stack[current_class_depth].access = current_access_specifier;
5489 current_class_stack[current_class_depth].names_used = 0;
5490 current_class_depth++;
5492 /* Now set up the new type. */
5493 current_class_name = TYPE_NAME (type);
5494 if (TREE_CODE (current_class_name) == TYPE_DECL)
5495 current_class_name = DECL_NAME (current_class_name);
5496 current_class_type = type;
5498 /* By default, things in classes are private, while things in
5499 structures or unions are public. */
5500 current_access_specifier = (CLASSTYPE_DECLARED_CLASS (type)
5501 ? access_private_node
5502 : access_public_node);
5504 if (previous_class_type != NULL_TREE
5505 && (type != previous_class_type
5506 || !COMPLETE_TYPE_P (previous_class_type))
5507 && current_class_depth == 1)
5509 /* Forcibly remove any old class remnants. */
5510 invalidate_class_lookup_cache ();
5513 /* If we're about to enter a nested class, clear
5514 IDENTIFIER_CLASS_VALUE for the enclosing classes. */
5515 if (modify && current_class_depth > 1)
5516 clear_identifier_class_values ();
5521 if (CLASSTYPE_TEMPLATE_INFO (type))
5522 overload_template_name (type);
5527 if (type != previous_class_type || current_class_depth > 1)
5528 push_class_decls (type);
5533 /* We are re-entering the same class we just left, so we
5534 don't have to search the whole inheritance matrix to find
5535 all the decls to bind again. Instead, we install the
5536 cached class_shadowed list, and walk through it binding
5537 names and setting up IDENTIFIER_TYPE_VALUEs. */
5538 set_class_shadows (previous_class_values);
5539 for (item = previous_class_values; item; item = TREE_CHAIN (item))
5541 tree id = TREE_PURPOSE (item);
5542 tree decl = TREE_TYPE (item);
5544 push_class_binding (id, decl);
5545 if (TREE_CODE (decl) == TYPE_DECL)
5546 set_identifier_type_value (id, TREE_TYPE (decl));
5548 unuse_fields (type);
5551 storetags (CLASSTYPE_TAGS (type));
5555 /* When we exit a toplevel class scope, we save the
5556 IDENTIFIER_CLASS_VALUEs so that we can restore them quickly if we
5557 reenter the class. Here, we've entered some other class, so we
5558 must invalidate our cache. */
5561 invalidate_class_lookup_cache ()
5565 /* This code can be seen as a cache miss. When we've cached a
5566 class' scope's bindings and we can't use them, we need to reset
5567 them. This is it! */
5568 for (t = previous_class_values; t; t = TREE_CHAIN (t))
5569 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (t)) = NULL_TREE;
5571 previous_class_type = NULL_TREE;
5574 /* Get out of the current class scope. If we were in a class scope
5575 previously, that is the one popped to. */
5581 /* Since poplevel_class does the popping of class decls nowadays,
5582 this really only frees the obstack used for these decls. */
5585 current_class_depth--;
5586 current_class_name = current_class_stack[current_class_depth].name;
5587 current_class_type = current_class_stack[current_class_depth].type;
5588 current_access_specifier = current_class_stack[current_class_depth].access;
5589 if (current_class_stack[current_class_depth].names_used)
5590 splay_tree_delete (current_class_stack[current_class_depth].names_used);
5593 /* Returns 1 if current_class_type is either T or a nested type of T.
5594 We start looking from 1 because entry 0 is from global scope, and has
5598 currently_open_class (t)
5602 if (t == current_class_type)
5604 for (i = 1; i < current_class_depth; ++i)
5605 if (current_class_stack [i].type == t)
5610 /* If either current_class_type or one of its enclosing classes are derived
5611 from T, return the appropriate type. Used to determine how we found
5612 something via unqualified lookup. */
5615 currently_open_derived_class (t)
5620 if (DERIVED_FROM_P (t, current_class_type))
5621 return current_class_type;
5623 for (i = current_class_depth - 1; i > 0; --i)
5624 if (DERIVED_FROM_P (t, current_class_stack[i].type))
5625 return current_class_stack[i].type;
5630 /* When entering a class scope, all enclosing class scopes' names with
5631 static meaning (static variables, static functions, types and enumerators)
5632 have to be visible. This recursive function calls pushclass for all
5633 enclosing class contexts until global or a local scope is reached.
5634 TYPE is the enclosed class and MODIFY is equivalent with the pushclass
5635 formal of the same name. */
5638 push_nested_class (type, modify)
5644 /* A namespace might be passed in error cases, like A::B:C. */
5645 if (type == NULL_TREE
5646 || type == error_mark_node
5647 || TREE_CODE (type) == NAMESPACE_DECL
5648 || ! IS_AGGR_TYPE (type)
5649 || TREE_CODE (type) == TEMPLATE_TYPE_PARM
5650 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
5653 context = DECL_CONTEXT (TYPE_MAIN_DECL (type));
5655 if (context && CLASS_TYPE_P (context))
5656 push_nested_class (context, 2);
5657 pushclass (type, modify);
5660 /* Undoes a push_nested_class call. MODIFY is passed on to popclass. */
5665 tree context = DECL_CONTEXT (TYPE_MAIN_DECL (current_class_type));
5668 if (context && CLASS_TYPE_P (context))
5669 pop_nested_class ();
5672 /* Set global variables CURRENT_LANG_NAME to appropriate value
5673 so that behavior of name-mangling machinery is correct. */
5676 push_lang_context (name)
5679 *current_lang_stack++ = current_lang_name;
5680 if (current_lang_stack - &VARRAY_TREE (current_lang_base, 0)
5681 >= (ptrdiff_t) VARRAY_SIZE (current_lang_base))
5683 size_t old_size = VARRAY_SIZE (current_lang_base);
5685 VARRAY_GROW (current_lang_base, old_size + 10);
5686 current_lang_stack = &VARRAY_TREE (current_lang_base, old_size);
5689 if (name == lang_name_cplusplus)
5691 strict_prototype = strict_prototypes_lang_cplusplus;
5692 current_lang_name = name;
5694 else if (name == lang_name_java)
5696 strict_prototype = strict_prototypes_lang_cplusplus;
5697 current_lang_name = name;
5698 /* DECL_IGNORED_P is initially set for these types, to avoid clutter.
5699 (See record_builtin_java_type in decl.c.) However, that causes
5700 incorrect debug entries if these types are actually used.
5701 So we re-enable debug output after extern "Java". */
5702 DECL_IGNORED_P (TYPE_NAME (java_byte_type_node)) = 0;
5703 DECL_IGNORED_P (TYPE_NAME (java_short_type_node)) = 0;
5704 DECL_IGNORED_P (TYPE_NAME (java_int_type_node)) = 0;
5705 DECL_IGNORED_P (TYPE_NAME (java_long_type_node)) = 0;
5706 DECL_IGNORED_P (TYPE_NAME (java_float_type_node)) = 0;
5707 DECL_IGNORED_P (TYPE_NAME (java_double_type_node)) = 0;
5708 DECL_IGNORED_P (TYPE_NAME (java_char_type_node)) = 0;
5709 DECL_IGNORED_P (TYPE_NAME (java_boolean_type_node)) = 0;
5711 else if (name == lang_name_c)
5713 strict_prototype = strict_prototypes_lang_c;
5714 current_lang_name = name;
5717 error ("language string `\"%s\"' not recognized", IDENTIFIER_POINTER (name));
5720 /* Get out of the current language scope. */
5725 /* Clear the current entry so that garbage collector won't hold on
5727 *current_lang_stack = NULL_TREE;
5728 current_lang_name = *--current_lang_stack;
5729 if (current_lang_name == lang_name_cplusplus
5730 || current_lang_name == lang_name_java)
5731 strict_prototype = strict_prototypes_lang_cplusplus;
5732 else if (current_lang_name == lang_name_c)
5733 strict_prototype = strict_prototypes_lang_c;
5736 /* Type instantiation routines. */
5738 /* Given an OVERLOAD and a TARGET_TYPE, return the function that
5739 matches the TARGET_TYPE. If there is no satisfactory match, return
5740 error_mark_node, and issue an error message if COMPLAIN is
5741 non-zero. If TEMPLATE_ONLY, the name of the overloaded function
5742 was a template-id, and EXPLICIT_TARGS are the explicitly provided
5743 template arguments. */
5746 resolve_address_of_overloaded_function (target_type,
5755 tree explicit_targs;
5757 /* Here's what the standard says:
5761 If the name is a function template, template argument deduction
5762 is done, and if the argument deduction succeeds, the deduced
5763 arguments are used to generate a single template function, which
5764 is added to the set of overloaded functions considered.
5766 Non-member functions and static member functions match targets of
5767 type "pointer-to-function" or "reference-to-function." Nonstatic
5768 member functions match targets of type "pointer-to-member
5769 function;" the function type of the pointer to member is used to
5770 select the member function from the set of overloaded member
5771 functions. If a nonstatic member function is selected, the
5772 reference to the overloaded function name is required to have the
5773 form of a pointer to member as described in 5.3.1.
5775 If more than one function is selected, any template functions in
5776 the set are eliminated if the set also contains a non-template
5777 function, and any given template function is eliminated if the
5778 set contains a second template function that is more specialized
5779 than the first according to the partial ordering rules 14.5.5.2.
5780 After such eliminations, if any, there shall remain exactly one
5781 selected function. */
5784 int is_reference = 0;
5785 /* We store the matches in a TREE_LIST rooted here. The functions
5786 are the TREE_PURPOSE, not the TREE_VALUE, in this list, for easy
5787 interoperability with most_specialized_instantiation. */
5788 tree matches = NULL_TREE;
5791 /* By the time we get here, we should be seeing only real
5792 pointer-to-member types, not the internal POINTER_TYPE to
5793 METHOD_TYPE representation. */
5794 my_friendly_assert (!(TREE_CODE (target_type) == POINTER_TYPE
5795 && (TREE_CODE (TREE_TYPE (target_type))
5796 == METHOD_TYPE)), 0);
5798 if (TREE_CODE (overload) == COMPONENT_REF)
5799 overload = TREE_OPERAND (overload, 1);
5801 /* Check that the TARGET_TYPE is reasonable. */
5802 if (TYPE_PTRFN_P (target_type))
5805 else if (TYPE_PTRMEMFUNC_P (target_type))
5806 /* This is OK, too. */
5808 else if (TREE_CODE (target_type) == FUNCTION_TYPE)
5810 /* This is OK, too. This comes from a conversion to reference
5812 target_type = build_reference_type (target_type);
5818 cp_error("cannot resolve overloaded function `%D' based on conversion to type `%T'",
5819 DECL_NAME (OVL_FUNCTION (overload)), target_type);
5820 return error_mark_node;
5823 /* If we can find a non-template function that matches, we can just
5824 use it. There's no point in generating template instantiations
5825 if we're just going to throw them out anyhow. But, of course, we
5826 can only do this when we don't *need* a template function. */
5831 for (fns = overload; fns; fns = OVL_CHAIN (fns))
5833 tree fn = OVL_FUNCTION (fns);
5836 if (TREE_CODE (fn) == TEMPLATE_DECL)
5837 /* We're not looking for templates just yet. */
5840 if ((TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
5842 /* We're looking for a non-static member, and this isn't
5843 one, or vice versa. */
5846 /* See if there's a match. */
5847 fntype = TREE_TYPE (fn);
5849 fntype = build_ptrmemfunc_type (build_pointer_type (fntype));
5850 else if (!is_reference)
5851 fntype = build_pointer_type (fntype);
5853 if (can_convert_arg (target_type, fntype, fn))
5854 matches = tree_cons (fn, NULL_TREE, matches);
5858 /* Now, if we've already got a match (or matches), there's no need
5859 to proceed to the template functions. But, if we don't have a
5860 match we need to look at them, too. */
5863 tree target_fn_type;
5864 tree target_arg_types;
5865 tree target_ret_type;
5870 = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (target_type));
5872 target_fn_type = TREE_TYPE (target_type);
5873 target_arg_types = TYPE_ARG_TYPES (target_fn_type);
5874 target_ret_type = TREE_TYPE (target_fn_type);
5876 for (fns = overload; fns; fns = OVL_CHAIN (fns))
5878 tree fn = OVL_FUNCTION (fns);
5880 tree instantiation_type;
5883 if (TREE_CODE (fn) != TEMPLATE_DECL)
5884 /* We're only looking for templates. */
5887 if ((TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
5889 /* We're not looking for a non-static member, and this is
5890 one, or vice versa. */
5893 /* Try to do argument deduction. */
5894 targs = make_tree_vec (DECL_NTPARMS (fn));
5895 if (fn_type_unification (fn, explicit_targs, targs,
5896 target_arg_types, target_ret_type,
5898 /* Argument deduction failed. */
5901 /* Instantiate the template. */
5902 instantiation = instantiate_template (fn, targs);
5903 if (instantiation == error_mark_node)
5904 /* Instantiation failed. */
5907 /* See if there's a match. */
5908 instantiation_type = TREE_TYPE (instantiation);
5910 instantiation_type =
5911 build_ptrmemfunc_type (build_pointer_type (instantiation_type));
5912 else if (!is_reference)
5913 instantiation_type = build_pointer_type (instantiation_type);
5914 if (can_convert_arg (target_type, instantiation_type, instantiation))
5915 matches = tree_cons (instantiation, fn, matches);
5918 /* Now, remove all but the most specialized of the matches. */
5921 tree match = most_specialized_instantiation (matches,
5924 if (match != error_mark_node)
5925 matches = tree_cons (match, NULL_TREE, NULL_TREE);
5929 /* Now we should have exactly one function in MATCHES. */
5930 if (matches == NULL_TREE)
5932 /* There were *no* matches. */
5935 cp_error ("no matches converting function `%D' to type `%#T'",
5936 DECL_NAME (OVL_FUNCTION (overload)),
5939 /* print_candidates expects a chain with the functions in
5940 TREE_VALUE slots, so we cons one up here (we're losing anyway,
5941 so why be clever?). */
5942 for (; overload; overload = OVL_NEXT (overload))
5943 matches = tree_cons (NULL_TREE, OVL_CURRENT (overload),
5946 print_candidates (matches);
5948 return error_mark_node;
5950 else if (TREE_CHAIN (matches))
5952 /* There were too many matches. */
5958 cp_error ("converting overloaded function `%D' to type `%#T' is ambiguous",
5959 DECL_NAME (OVL_FUNCTION (overload)),
5962 /* Since print_candidates expects the functions in the
5963 TREE_VALUE slot, we flip them here. */
5964 for (match = matches; match; match = TREE_CHAIN (match))
5965 TREE_VALUE (match) = TREE_PURPOSE (match);
5967 print_candidates (matches);
5970 return error_mark_node;
5973 /* Good, exactly one match. Now, convert it to the correct type. */
5974 fn = TREE_PURPOSE (matches);
5978 if (TYPE_PTRFN_P (target_type) || TYPE_PTRMEMFUNC_P (target_type))
5979 return build_unary_op (ADDR_EXPR, fn, 0);
5982 /* The target must be a REFERENCE_TYPE. Above, build_unary_op
5983 will mark the function as addressed, but here we must do it
5985 mark_addressable (fn);
5991 /* This function will instantiate the type of the expression given in
5992 RHS to match the type of LHSTYPE. If errors exist, then return
5993 error_mark_node. We only complain is COMPLAIN is set. If we are
5994 not complaining, never modify rhs, as overload resolution wants to
5995 try many possible instantiations, in hopes that at least one will
5998 FLAGS is a bitmask, as we see at the top of the function.
6000 For non-recursive calls, LHSTYPE should be a function, pointer to
6001 function, or a pointer to member function. */
6004 instantiate_type (lhstype, rhs, flags)
6008 int complain = (flags & 1);
6009 int strict = (flags & 2) ? COMPARE_NO_ATTRIBUTES : COMPARE_STRICT;
6012 if (TREE_CODE (lhstype) == UNKNOWN_TYPE)
6015 error ("not enough type information");
6016 return error_mark_node;
6019 if (TREE_TYPE (rhs) != NULL_TREE && ! (type_unknown_p (rhs)))
6021 if (comptypes (lhstype, TREE_TYPE (rhs), strict))
6024 cp_error ("argument of type `%T' does not match `%T'",
6025 TREE_TYPE (rhs), lhstype);
6026 return error_mark_node;
6029 /* We don't overwrite rhs if it is an overloaded function.
6030 Copying it would destroy the tree link. */
6031 if (TREE_CODE (rhs) != OVERLOAD)
6032 rhs = copy_node (rhs);
6034 /* This should really only be used when attempting to distinguish
6035 what sort of a pointer to function we have. For now, any
6036 arithmetic operation which is not supported on pointers
6037 is rejected as an error. */
6039 switch (TREE_CODE (rhs))
6046 my_friendly_abort (177);
6047 return error_mark_node;
6054 new_rhs = instantiate_type (build_pointer_type (lhstype),
6055 TREE_OPERAND (rhs, 0), flags);
6056 if (new_rhs == error_mark_node)
6057 return error_mark_node;
6059 TREE_TYPE (rhs) = lhstype;
6060 TREE_OPERAND (rhs, 0) = new_rhs;
6065 rhs = copy_node (TREE_OPERAND (rhs, 0));
6066 TREE_TYPE (rhs) = unknown_type_node;
6067 return instantiate_type (lhstype, rhs, flags);
6071 r = instantiate_type (lhstype, TREE_OPERAND (rhs, 1), flags);
6074 if (r != error_mark_node && TYPE_PTRMEMFUNC_P (lhstype)
6075 && complain && !flag_ms_extensions)
6077 /* Note: we check this after the recursive call to avoid
6078 complaining about cases where overload resolution fails. */
6080 tree t = TREE_TYPE (TREE_OPERAND (rhs, 0));
6081 tree fn = PTRMEM_CST_MEMBER (r);
6083 my_friendly_assert (TREE_CODE (r) == PTRMEM_CST, 990811);
6086 ("object-dependent reference to `%E' can only be used in a call",
6089 (" to form a pointer to member function, say `&%T::%E'",
6097 rhs = TREE_OPERAND (rhs, 1);
6098 if (BASELINK_P (rhs))
6099 return instantiate_type (lhstype, TREE_VALUE (rhs), flags);
6101 /* This can happen if we are forming a pointer-to-member for a
6103 my_friendly_assert (TREE_CODE (rhs) == TEMPLATE_ID_EXPR, 0);
6107 case TEMPLATE_ID_EXPR:
6109 tree fns = TREE_OPERAND (rhs, 0);
6110 tree args = TREE_OPERAND (rhs, 1);
6113 resolve_address_of_overloaded_function (lhstype,
6116 /*template_only=*/1,
6118 if (TREE_CODE (fns) == COMPONENT_REF)
6128 resolve_address_of_overloaded_function (lhstype,
6131 /*template_only=*/0,
6132 /*explicit_targs=*/NULL_TREE);
6135 /* Now we should have a baselink. */
6136 my_friendly_assert (BASELINK_P (rhs), 990412);
6138 return instantiate_type (lhstype, TREE_VALUE (rhs), flags);
6141 /* This is too hard for now. */
6142 my_friendly_abort (183);
6143 return error_mark_node;
6148 TREE_OPERAND (rhs, 0)
6149 = instantiate_type (lhstype, TREE_OPERAND (rhs, 0), flags);
6150 if (TREE_OPERAND (rhs, 0) == error_mark_node)
6151 return error_mark_node;
6152 TREE_OPERAND (rhs, 1)
6153 = instantiate_type (lhstype, TREE_OPERAND (rhs, 1), flags);
6154 if (TREE_OPERAND (rhs, 1) == error_mark_node)
6155 return error_mark_node;
6157 TREE_TYPE (rhs) = lhstype;
6161 case TRUNC_DIV_EXPR:
6162 case FLOOR_DIV_EXPR:
6164 case ROUND_DIV_EXPR:
6166 case TRUNC_MOD_EXPR:
6167 case FLOOR_MOD_EXPR:
6169 case ROUND_MOD_EXPR:
6170 case FIX_ROUND_EXPR:
6171 case FIX_FLOOR_EXPR:
6173 case FIX_TRUNC_EXPR:
6189 case PREINCREMENT_EXPR:
6190 case PREDECREMENT_EXPR:
6191 case POSTINCREMENT_EXPR:
6192 case POSTDECREMENT_EXPR:
6194 error ("invalid operation on uninstantiated type");
6195 return error_mark_node;
6197 case TRUTH_AND_EXPR:
6199 case TRUTH_XOR_EXPR:
6206 case TRUTH_ANDIF_EXPR:
6207 case TRUTH_ORIF_EXPR:
6208 case TRUTH_NOT_EXPR:
6210 error ("not enough type information");
6211 return error_mark_node;
6214 if (type_unknown_p (TREE_OPERAND (rhs, 0)))
6217 error ("not enough type information");
6218 return error_mark_node;
6220 TREE_OPERAND (rhs, 1)
6221 = instantiate_type (lhstype, TREE_OPERAND (rhs, 1), flags);
6222 if (TREE_OPERAND (rhs, 1) == error_mark_node)
6223 return error_mark_node;
6224 TREE_OPERAND (rhs, 2)
6225 = instantiate_type (lhstype, TREE_OPERAND (rhs, 2), flags);
6226 if (TREE_OPERAND (rhs, 2) == error_mark_node)
6227 return error_mark_node;
6229 TREE_TYPE (rhs) = lhstype;
6233 TREE_OPERAND (rhs, 1)
6234 = instantiate_type (lhstype, TREE_OPERAND (rhs, 1), flags);
6235 if (TREE_OPERAND (rhs, 1) == error_mark_node)
6236 return error_mark_node;
6238 TREE_TYPE (rhs) = lhstype;
6242 return instantiate_type (lhstype, TREE_OPERAND (rhs, 0), flags);
6244 case ENTRY_VALUE_EXPR:
6245 my_friendly_abort (184);
6246 return error_mark_node;
6249 return error_mark_node;
6252 my_friendly_abort (185);
6253 return error_mark_node;
6257 /* Return the name of the virtual function pointer field
6258 (as an IDENTIFIER_NODE) for the given TYPE. Note that
6259 this may have to look back through base types to find the
6260 ultimate field name. (For single inheritance, these could
6261 all be the same name. Who knows for multiple inheritance). */
6264 get_vfield_name (type)
6267 tree binfo = TYPE_BINFO (type);
6270 while (BINFO_BASETYPES (binfo)
6271 && TYPE_CONTAINS_VPTR_P (BINFO_TYPE (BINFO_BASETYPE (binfo, 0)))
6272 && ! TREE_VIA_VIRTUAL (BINFO_BASETYPE (binfo, 0)))
6273 binfo = BINFO_BASETYPE (binfo, 0);
6275 type = BINFO_TYPE (binfo);
6276 buf = (char *) alloca (sizeof (VFIELD_NAME_FORMAT)
6277 + TYPE_NAME_LENGTH (type) + 2);
6278 sprintf (buf, VFIELD_NAME_FORMAT, TYPE_NAME_STRING (type));
6279 return get_identifier (buf);
6283 print_class_statistics ()
6285 #ifdef GATHER_STATISTICS
6286 fprintf (stderr, "convert_harshness = %d\n", n_convert_harshness);
6287 fprintf (stderr, "compute_conversion_costs = %d\n", n_compute_conversion_costs);
6288 fprintf (stderr, "build_method_call = %d (inner = %d)\n",
6289 n_build_method_call, n_inner_fields_searched);
6292 fprintf (stderr, "vtables = %d; vtable searches = %d\n",
6293 n_vtables, n_vtable_searches);
6294 fprintf (stderr, "vtable entries = %d; vtable elems = %d\n",
6295 n_vtable_entries, n_vtable_elems);
6300 /* Build a dummy reference to ourselves so Derived::Base (and A::A) works,
6301 according to [class]:
6302 The class-name is also inserted
6303 into the scope of the class itself. For purposes of access checking,
6304 the inserted class name is treated as if it were a public member name. */
6307 build_self_reference ()
6309 tree name = constructor_name (current_class_type);
6310 tree value = build_lang_decl (TYPE_DECL, name, current_class_type);
6313 DECL_NONLOCAL (value) = 1;
6314 DECL_CONTEXT (value) = current_class_type;
6315 DECL_ARTIFICIAL (value) = 1;
6317 if (processing_template_decl)
6318 value = push_template_decl (value);
6320 saved_cas = current_access_specifier;
6321 current_access_specifier = access_public_node;
6322 finish_member_declaration (value);
6323 current_access_specifier = saved_cas;
6326 /* Returns 1 if TYPE contains only padding bytes. */
6329 is_empty_class (type)
6334 if (type == error_mark_node)
6337 if (! IS_AGGR_TYPE (type))
6341 return integer_zerop (CLASSTYPE_SIZE (type));
6343 if (TYPE_BINFO_BASETYPES (type))
6345 t = TYPE_FIELDS (type);
6346 while (t && TREE_CODE (t) != FIELD_DECL)
6348 return (t == NULL_TREE);
6351 /* Find the enclosing class of the given NODE. NODE can be a *_DECL or
6352 a *_TYPE node. NODE can also be a local class. */
6355 get_enclosing_class (type)
6360 while (node && TREE_CODE (node) != NAMESPACE_DECL)
6362 switch (TREE_CODE_CLASS (TREE_CODE (node)))
6365 node = DECL_CONTEXT (node);
6371 node = TYPE_CONTEXT (node);
6375 my_friendly_abort (0);
6381 /* Return 1 if TYPE or one of its enclosing classes is derived from BASE. */
6384 is_base_of_enclosing_class (base, type)
6389 if (get_binfo (base, type, 0))
6392 type = get_enclosing_class (type);
6397 /* Note that NAME was looked up while the current class was being
6398 defined and that the result of that lookup was DECL. */
6401 maybe_note_name_used_in_class (name, decl)
6405 splay_tree names_used;
6407 /* If we're not defining a class, there's nothing to do. */
6408 if (!current_class_type || !TYPE_BEING_DEFINED (current_class_type))
6411 /* If there's already a binding for this NAME, then we don't have
6412 anything to worry about. */
6413 if (IDENTIFIER_CLASS_VALUE (name))
6416 if (!current_class_stack[current_class_depth - 1].names_used)
6417 current_class_stack[current_class_depth - 1].names_used
6418 = splay_tree_new (splay_tree_compare_pointers, 0, 0);
6419 names_used = current_class_stack[current_class_depth - 1].names_used;
6421 splay_tree_insert (names_used,
6422 (splay_tree_key) name,
6423 (splay_tree_value) decl);
6426 /* Note that NAME was declared (as DECL) in the current class. Check
6427 to see that the declaration is legal. */
6430 note_name_declared_in_class (name, decl)
6434 splay_tree names_used;
6437 /* Look to see if we ever used this name. */
6439 = current_class_stack[current_class_depth - 1].names_used;
6443 n = splay_tree_lookup (names_used, (splay_tree_key) name);
6446 /* [basic.scope.class]
6448 A name N used in a class S shall refer to the same declaration
6449 in its context and when re-evaluated in the completed scope of
6451 cp_error ("declaration of `%#D'", decl);
6452 cp_error_at ("changes meaning of `%s' from `%+#D'",
6453 IDENTIFIER_POINTER (DECL_NAME (OVL_CURRENT (decl))),
6458 /* Returns the VAR_DECL for the complete vtable associated with
6459 BINFO. (Under the new ABI, secondary vtables are merged with
6460 primary vtables; this function will return the VAR_DECL for the
6464 get_vtbl_decl_for_binfo (binfo)
6469 decl = BINFO_VTABLE (binfo);
6470 if (decl && TREE_CODE (decl) == PLUS_EXPR)
6472 my_friendly_assert (TREE_CODE (TREE_OPERAND (decl, 0)) == ADDR_EXPR,
6474 decl = TREE_OPERAND (TREE_OPERAND (decl, 0), 0);
6477 my_friendly_assert (TREE_CODE (decl) == VAR_DECL, 20000403);
6481 /* Dump the offsets of all the bases rooted at BINFO (in the hierarchy
6482 dominated by T) to stderr. INDENT should be zero when called from
6483 the top level; it is incremented recursively. */
6486 dump_class_hierarchy_r (t, binfo, indent)
6493 fprintf (stderr, "%*s0x%lx (%s) ", indent, "",
6494 (unsigned long) binfo,
6495 type_as_string (binfo, TS_PLAIN));
6496 fprintf (stderr, HOST_WIDE_INT_PRINT_DEC,
6497 tree_low_cst (BINFO_OFFSET (binfo), 0));
6498 if (TREE_VIA_VIRTUAL (binfo))
6499 fprintf (stderr, " virtual");
6500 if (BINFO_PRIMARY_MARKED_P (binfo)
6501 || (TREE_VIA_VIRTUAL (binfo)
6502 && BINFO_VBASE_PRIMARY_P (binfo_for_vbase (BINFO_TYPE (binfo),
6504 fprintf (stderr, " primary");
6505 fprintf (stderr, "\n");
6507 for (i = 0; i < BINFO_N_BASETYPES (binfo); ++i)
6508 dump_class_hierarchy_r (t, BINFO_BASETYPE (binfo, i), indent + 2);
6511 /* Dump the BINFO hierarchy for T. */
6514 dump_class_hierarchy (t)
6517 dump_class_hierarchy_r (t, TYPE_BINFO (t), 0);
6520 /* Virtual function table initialization. */
6522 /* Create all the necessary vtables for T and its base classes. */
6528 if (merge_primary_and_secondary_vtables_p ())
6533 /* Under the new ABI, we lay out the primary and secondary
6534 vtables in one contiguous vtable. The primary vtable is
6535 first, followed by the non-virtual secondary vtables in
6536 inheritance graph order. */
6537 list = build_tree_list (TYPE_BINFO_VTABLE (t), NULL_TREE);
6538 accumulate_vtbl_inits (TYPE_BINFO (t), TYPE_BINFO (t),
6539 TYPE_BINFO (t), t, list);
6540 /* Then come the virtual bases, also in inheritance graph
6542 for (vbase = TYPE_BINFO (t); vbase; vbase = TREE_CHAIN (vbase))
6544 if (!TREE_VIA_VIRTUAL (vbase))
6547 accumulate_vtbl_inits (vbase, vbase, TYPE_BINFO (t), t, list);
6550 if (TYPE_BINFO_VTABLE (t))
6551 initialize_vtable (TYPE_BINFO (t), TREE_VALUE (list));
6555 dfs_walk (TYPE_BINFO (t), dfs_finish_vtbls,
6556 dfs_unmarked_real_bases_queue_p, t);
6557 dfs_walk (TYPE_BINFO (t), dfs_unmark,
6558 dfs_marked_real_bases_queue_p, t);
6562 /* Called from finish_vtbls via dfs_walk. */
6565 dfs_finish_vtbls (binfo, data)
6569 tree t = (tree) data;
6571 if (BINFO_NEW_VTABLE_MARKED (binfo, t))
6572 initialize_vtable (binfo,
6573 build_vtbl_initializer (binfo, binfo, t,
6574 TYPE_BINFO (t), NULL));
6576 SET_BINFO_MARKED (binfo);
6581 /* Initialize the vtable for BINFO with the INITS. */
6584 initialize_vtable (binfo, inits)
6590 layout_vtable_decl (binfo, list_length (inits));
6591 decl = get_vtbl_decl_for_binfo (binfo);
6592 initialize_array (decl, inits);
6595 /* Initialize DECL (a declaration for a namespace-scope array) with
6599 initialize_array (decl, inits)
6605 context = DECL_CONTEXT (decl);
6606 DECL_CONTEXT (decl) = NULL_TREE;
6607 DECL_INITIAL (decl) = build_nt (CONSTRUCTOR, NULL_TREE, inits);
6608 cp_finish_decl (decl, DECL_INITIAL (decl), NULL_TREE, 0);
6609 DECL_CONTEXT (decl) = context;
6612 /* Build the VTT (virtual table table) for T. */
6623 /* Under the old ABI, we don't use VTTs. */
6627 /* Build up the initializers for the VTT. */
6629 index = size_zero_node;
6630 build_vtt_inits (TYPE_BINFO (t), t, &inits, &index);
6632 /* If we didn't need a VTT, we're done. */
6636 /* Figure out the type of the VTT. */
6637 type = build_index_type (size_int (list_length (inits)));
6638 type = build_cplus_array_type (const_ptr_type_node, type);
6640 /* Now, build the VTT object itself. */
6641 vtt = build_vtable (t, get_vtt_name (t), type);
6642 pushdecl_top_level (vtt);
6643 initialize_array (vtt, inits);
6646 /* Recursively build the VTT-initializer for BINFO (which is in the
6647 hierarchy dominated by T). INITS points to the end of the
6648 initializer list to date. INDEX is the VTT index where the next
6649 element will be placed. */
6652 build_vtt_inits (binfo, t, inits, index)
6661 tree secondary_vptrs;
6664 /* We only need VTTs for subobjects with virtual bases. */
6665 if (!TYPE_USES_VIRTUAL_BASECLASSES (BINFO_TYPE (binfo)))
6668 /* We need to use a construction vtable if this is not the primary
6670 ctor_vtbl_p = !same_type_p (TREE_TYPE (binfo), t);
6673 build_ctor_vtbl_group (binfo, t);
6675 /* Record the offset in the VTT where this sub-VTT can be found. */
6676 BINFO_SUBVTT_INDEX (binfo) = *index;
6679 /* Add the address of the primary vtable for the complete object. */
6680 init = BINFO_VTABLE (binfo);
6681 if (TREE_CODE (init) == TREE_LIST)
6682 init = TREE_PURPOSE (init);
6683 *inits = build_tree_list (NULL_TREE, init);
6684 inits = &TREE_CHAIN (*inits);
6685 BINFO_VPTR_INDEX (binfo) = *index;
6686 *index = size_binop (PLUS_EXPR, *index, TYPE_SIZE_UNIT (ptr_type_node));
6688 /* Recursively add the secondary VTTs for non-virtual bases. */
6689 for (i = 0; i < BINFO_N_BASETYPES (binfo); ++i)
6691 b = BINFO_BASETYPE (binfo, i);
6692 if (!TREE_VIA_VIRTUAL (b))
6693 inits = build_vtt_inits (BINFO_BASETYPE (binfo, i), t, inits,
6697 /* Add secondary virtual pointers for all subobjects of BINFO with
6698 either virtual bases or virtual functions overridden along a
6699 virtual path between the declaration and D, except subobjects
6700 that are non-virtual primary bases. */
6701 secondary_vptrs = build_tree_list (BINFO_TYPE (binfo), NULL_TREE);
6702 TREE_TYPE (secondary_vptrs) = *index;
6703 dfs_walk_real (binfo,
6704 dfs_build_vtt_inits,
6706 dfs_unmarked_real_bases_queue_p,
6708 dfs_walk (binfo, dfs_fixup_binfo_vtbls, dfs_marked_real_bases_queue_p,
6709 BINFO_TYPE (binfo));
6710 *index = TREE_TYPE (secondary_vptrs);
6712 /* The secondary vptrs come back in reverse order. After we reverse
6713 them, and add the INITS, the last init will be the first element
6715 secondary_vptrs = TREE_VALUE (secondary_vptrs);
6716 if (secondary_vptrs)
6718 *inits = nreverse (secondary_vptrs);
6719 inits = &TREE_CHAIN (secondary_vptrs);
6720 my_friendly_assert (*inits == NULL_TREE, 20000517);
6723 /* Add the secondary VTTs for virtual bases. */
6724 for (b = TYPE_BINFO (BINFO_TYPE (binfo)); b; b = TREE_CHAIN (b))
6728 if (!TREE_VIA_VIRTUAL (b))
6731 vbase = binfo_for_vbase (BINFO_TYPE (b), t);
6732 inits = build_vtt_inits (vbase, t, inits, index);
6738 /* Called from build_vtt_inits via dfs_walk. */
6741 dfs_build_vtt_inits (binfo, data)
6751 t = TREE_PURPOSE (l);
6753 SET_BINFO_MARKED (binfo);
6755 /* We don't care about bases that don't have vtables. */
6756 if (!TYPE_VFIELD (BINFO_TYPE (binfo)))
6759 /* We're only interested in proper subobjects of T. */
6760 if (same_type_p (BINFO_TYPE (binfo), t))
6763 /* We're not interested in non-virtual primary bases. */
6764 if (!TREE_VIA_VIRTUAL (binfo) && BINFO_PRIMARY_MARKED_P (binfo))
6767 /* If BINFO doesn't have virtual bases, then we have to look to see
6768 whether or not any virtual functions were overidden along a
6769 virtual path. The point is that given:
6771 struct V { virtual void f(); int i; };
6772 struct C : public V { void f (); };
6774 when we constrct C we need a secondary vptr for V-in-C because we
6775 don't know what the vcall offset for `f' should be. If `V' ends
6776 up in a different place in the complete object, then we'll need a
6777 different vcall offset than that present in the normal V-in-C
6779 if (!TYPE_USES_VIRTUAL_BASECLASSES (BINFO_TYPE (binfo))
6780 && !BINFO_OVERRIDE_ALONG_VIRTUAL_PATH_P (binfo))
6783 /* Record the index where this secondary vptr can be found. */
6784 index = TREE_TYPE (l);
6785 BINFO_VPTR_INDEX (binfo) = index;
6786 TREE_TYPE (l) = size_binop (PLUS_EXPR, index,
6787 TYPE_SIZE_UNIT (ptr_type_node));
6789 /* Add the initializer for the secondary vptr itself. */
6790 init = BINFO_VTABLE (binfo);
6791 if (TREE_CODE (init) == TREE_LIST)
6792 init = TREE_PURPOSE (init);
6793 TREE_VALUE (l) = tree_cons (NULL_TREE, init, TREE_VALUE (l));
6798 /* Called from build_vtt_inits via dfs_walk. */
6801 dfs_fixup_binfo_vtbls (binfo, data)
6803 void *data ATTRIBUTE_UNUSED;
6805 CLEAR_BINFO_MARKED (binfo);
6807 /* We don't care about bases that don't have vtables. */
6808 if (!TYPE_VFIELD (BINFO_TYPE (binfo)))
6811 /* If we scribbled the construction vtable vptr into BINFO, clear it
6813 if (TREE_CODE (BINFO_VTABLE (binfo)) == TREE_LIST)
6814 BINFO_VTABLE (binfo) = TREE_VALUE (BINFO_VTABLE (binfo));
6819 /* Build the construction vtable group for BINFO which is in the
6820 hierarchy dominated by T. */
6823 build_ctor_vtbl_group (binfo, t)
6833 /* See if we've already create this construction vtable group. */
6835 id = mangle_ctor_vtbl_for_type (t, binfo);
6837 id = get_ctor_vtbl_name (t, binfo);
6838 if (IDENTIFIER_GLOBAL_VALUE (id))
6841 /* Build a version of VTBL (with the wrong type) for use in
6842 constructing the addresses of secondary vtables in the
6843 construction vtable group. */
6844 vtbl = build_vtable (t, id, ptr_type_node);
6845 list = build_tree_list (vtbl, NULL_TREE);
6846 accumulate_vtbl_inits (binfo, TYPE_BINFO (TREE_TYPE (binfo)),
6848 inits = TREE_VALUE (list);
6850 /* Figure out the type of the construction vtable. */
6851 type = build_index_type (size_int (list_length (inits)));
6852 type = build_cplus_array_type (vtable_entry_type, type);
6853 TREE_TYPE (vtbl) = type;
6855 /* Initialize the construction vtable. */
6856 pushdecl_top_level (vtbl);
6857 initialize_array (vtbl, inits);
6860 /* Add the vtbl initializers for BINFO (and its non-primary,
6861 non-virtual bases) to the list of INITS. BINFO is in the hierarchy
6862 dominated by T. ORIG_BINFO must have the same type as BINFO, but
6863 may be different from BINFO if we are building a construction
6864 vtable. RTTI_BINFO gives the object that should be used as the
6865 complete object for BINFO. */
6868 accumulate_vtbl_inits (binfo, orig_binfo, rtti_binfo, t, inits)
6878 my_friendly_assert (same_type_p (BINFO_TYPE (binfo),
6879 BINFO_TYPE (orig_binfo)),
6882 /* This is a construction vtable if the RTTI type is not the most
6883 derived type in the hierarchy. */
6884 ctor_vtbl_p = !same_type_p (BINFO_TYPE (rtti_binfo), t);
6886 /* If we're building a construction vtable, we're not interested in
6887 subobjects that don't require construction vtables. */
6889 && !TYPE_USES_VIRTUAL_BASECLASSES (BINFO_TYPE (binfo)))
6892 /* Build the initializers for the BINFO-in-T vtable. */
6894 = chainon (TREE_VALUE (inits),
6895 dfs_accumulate_vtbl_inits (binfo, orig_binfo,
6896 rtti_binfo, t, inits));
6898 /* Walk the BINFO and its bases. We walk in preorder so that as we
6899 initialize each vtable we can figure out at what offset the
6900 secondary vtable lies from the primary vtable. We can't use
6901 dfs_walk here because we need to iterate through bases of BINFO
6902 and RTTI_BINFO simultaneously. */
6903 for (i = 0; i < BINFO_N_BASETYPES (binfo); ++i)
6907 base_binfo = BINFO_BASETYPE (binfo, i);
6908 /* Skip virtual bases. */
6909 if (TREE_VIA_VIRTUAL (base_binfo))
6911 accumulate_vtbl_inits (base_binfo,
6912 BINFO_BASETYPE (orig_binfo, i),
6919 /* Called from finish_vtbls via dfs_walk when using the new ABI.
6920 Accumulates the vtable initializers for all of the vtables into
6921 TREE_VALUE (DATA). Returns the initializers for the BINFO vtable. */
6924 dfs_accumulate_vtbl_inits (binfo, orig_binfo, rtti_binfo, t, l)
6931 tree inits = NULL_TREE;
6934 /* This is a construction vtable if the RTTI type is not the most
6935 derived type in the hierarchy. */
6936 ctor_vtbl_p = !same_type_p (BINFO_TYPE (rtti_binfo), t);
6938 if (BINFO_NEW_VTABLE_MARKED (binfo, t)
6939 /* We need a new vtable, even for a primary base, when we're
6940 building a construction vtable. */
6941 || (ctor_vtbl_p && CLASSTYPE_VFIELDS (BINFO_TYPE (binfo))))
6947 /* Compute the initializer for this vtable. */
6948 inits = build_vtbl_initializer (binfo, orig_binfo, t, rtti_binfo,
6951 /* Figure out the position to which the VPTR should point. */
6952 vtbl = TREE_PURPOSE (l);
6953 vtbl = build1 (ADDR_EXPR,
6956 index = size_binop (PLUS_EXPR,
6957 size_int (non_fn_entries),
6958 size_int (list_length (TREE_VALUE (l))));
6959 index = size_binop (MULT_EXPR,
6960 TYPE_SIZE_UNIT (vtable_entry_type),
6962 vtbl = build (PLUS_EXPR, TREE_TYPE (vtbl), vtbl, index);
6963 TREE_CONSTANT (vtbl) = 1;
6965 /* For an ordinary vtable, set BINFO_VTABLE. */
6967 BINFO_VTABLE (binfo) = vtbl;
6968 /* For a construction vtable, we can't overwrite BINFO_VTABLE.
6969 So, we make a TREE_LIST. Later, dfs_fixup_binfo_vtbls will
6970 straighten this out. */
6972 BINFO_VTABLE (binfo) = build_tree_list (vtbl,
6973 BINFO_VTABLE (binfo));
6979 /* Construct the initializer for BINFOs virtual function table. BINFO
6980 is part of the hierarchy dominated by T. If we're building a
6981 construction vtable, the ORIG_BINFO is the binfo we should use to
6982 find the actual function pointers to put in the vtable. Otherwise,
6983 ORIG_BINFO should be the same as BINFO. The RTTI_DOMINATOR is the
6984 BINFO that should be indicated by the RTTI information in the
6985 vtable; it will be a base class of T, rather than T itself, if we
6986 are building a construction vtable.
6988 The value returned is a TREE_LIST suitable for wrapping in a
6989 CONSTRUCTOR to use as the DECL_INITIAL for a vtable. If
6990 NON_FN_ENTRIES_P is not NULL, *NON_FN_ENTRIES_P is set to the
6991 number of non-function entries in the vtable. */
6994 build_vtbl_initializer (binfo, orig_binfo, t, rtti_binfo, non_fn_entries_p)
6999 int *non_fn_entries_p;
7004 vcall_offset_data vod;
7006 /* Initialize those parts of VOD that matter. */
7008 vod.inits = NULL_TREE;
7009 vod.last_init = &vod.inits;
7010 vod.primary_p = (binfo == TYPE_BINFO (t));
7011 /* The first vbase or vcall offset is at index -3 in the vtable. */
7012 vod.index = ssize_int (-3);
7014 /* Add entries to the vtable for RTTI. */
7015 build_rtti_vtbl_entries (binfo, rtti_binfo, &vod);
7017 /* Add the vcall and vbase offset entries. */
7018 build_vcall_and_vbase_vtbl_entries (binfo, &vod);
7019 /* Clear BINFO_VTABLE_PAATH_MARKED; it's set by
7020 build_vbase_offset_vtbl_entries. */
7021 for (vbase = CLASSTYPE_VBASECLASSES (t);
7023 vbase = TREE_CHAIN (vbase))
7024 CLEAR_BINFO_VTABLE_PATH_MARKED (TREE_VALUE (vbase));
7026 if (non_fn_entries_p)
7027 *non_fn_entries_p = list_length (vod.inits);
7029 /* Go through all the ordinary virtual functions, building up
7031 vfun_inits = NULL_TREE;
7032 for (v = BINFO_VIRTUALS (orig_binfo); v; v = TREE_CHAIN (v))
7040 /* Pull the offset for `this', and the function to call, out of
7042 delta = BV_DELTA (v);
7044 if (BV_USE_VCALL_INDEX_P (v))
7046 vcall_index = BV_VCALL_INDEX (v);
7047 my_friendly_assert (vcall_index != NULL_TREE, 20000621);
7050 vcall_index = NULL_TREE;
7053 my_friendly_assert (TREE_CODE (delta) == INTEGER_CST, 19990727);
7054 my_friendly_assert (TREE_CODE (fn) == FUNCTION_DECL, 19990727);
7056 /* You can't call an abstract virtual function; it's abstract.
7057 So, we replace these functions with __pure_virtual. */
7058 if (DECL_PURE_VIRTUAL_P (fn))
7061 /* Take the address of the function, considering it to be of an
7062 appropriate generic type. */
7063 pfn = build1 (ADDR_EXPR, vfunc_ptr_type_node, fn);
7064 /* The address of a function can't change. */
7065 TREE_CONSTANT (pfn) = 1;
7066 /* Enter it in the vtable. */
7067 init = build_vtable_entry (delta, vcall_index, pfn,
7068 BV_GENERATE_THUNK_WITH_VTABLE_P (v));
7069 /* And add it to the chain of initializers. */
7070 vfun_inits = tree_cons (NULL_TREE, init, vfun_inits);
7073 /* The initializers for virtual functions were built up in reverse
7074 order; straighten them out now. */
7075 vfun_inits = nreverse (vfun_inits);
7077 /* The negative offset initializers are also in reverse order. */
7078 vod.inits = nreverse (vod.inits);
7080 /* Chain the two together. */
7081 return chainon (vod.inits, vfun_inits);
7084 /* Sets vod->inits to be the initializers for the vbase and vcall
7085 offsets in BINFO, which is in the hierarchy dominated by T. */
7088 build_vcall_and_vbase_vtbl_entries (binfo, vod)
7090 vcall_offset_data *vod;
7094 /* If this is a derived class, we must first create entries
7095 corresponding to the primary base class. */
7096 b = BINFO_PRIMARY_BINFO (binfo);
7098 build_vcall_and_vbase_vtbl_entries (b, vod);
7100 /* Add the vbase entries for this base. */
7101 build_vbase_offset_vtbl_entries (binfo, vod);
7102 /* Add the vcall entries for this base. */
7103 build_vcall_offset_vtbl_entries (binfo, vod);
7106 /* Returns the initializers for the vbase offset entries in the vtable
7107 for BINFO (which is part of the class hierarchy dominated by T), in
7108 reverse order. VBASE_OFFSET_INDEX gives the vtable index
7109 where the next vbase offset will go. */
7112 build_vbase_offset_vtbl_entries (binfo, vod)
7114 vcall_offset_data *vod;
7119 /* Under the old ABI, pointers to virtual bases are stored in each
7121 if (!vbase_offsets_in_vtable_p ())
7124 /* If there are no virtual baseclasses, then there is nothing to
7126 if (!TYPE_USES_VIRTUAL_BASECLASSES (BINFO_TYPE (binfo)))
7131 /* Go through the virtual bases, adding the offsets. */
7132 for (vbase = TYPE_BINFO (BINFO_TYPE (binfo));
7134 vbase = TREE_CHAIN (vbase))
7139 if (!TREE_VIA_VIRTUAL (vbase))
7142 /* Find the instance of this virtual base in the complete
7144 b = binfo_for_vbase (BINFO_TYPE (vbase), t);
7146 /* If we've already got an offset for this virtual base, we
7147 don't need another one. */
7148 if (BINFO_VTABLE_PATH_MARKED (b))
7150 SET_BINFO_VTABLE_PATH_MARKED (b);
7152 /* Figure out where we can find this vbase offset. */
7153 delta = size_binop (MULT_EXPR,
7156 TYPE_SIZE_UNIT (vtable_entry_type)));
7158 BINFO_VPTR_FIELD (b) = delta;
7160 if (binfo != TYPE_BINFO (t))
7164 /* Find the instance of this virtual base in the type of BINFO. */
7165 orig_vbase = binfo_for_vbase (BINFO_TYPE (vbase),
7166 BINFO_TYPE (binfo));
7168 /* The vbase offset had better be the same. */
7169 if (!tree_int_cst_equal (delta,
7170 BINFO_VPTR_FIELD (orig_vbase)))
7171 my_friendly_abort (20000403);
7174 /* The next vbase will come at a more negative offset. */
7175 vod->index = size_binop (MINUS_EXPR, vod->index, ssize_int (1));
7177 /* The initializer is the delta from BINFO to this virtual base.
7178 The vbase offsets go in reverse inheritance-graph order, and
7179 we are walking in inheritance graph order so these end up in
7181 delta = size_diffop (BINFO_OFFSET (b), BINFO_OFFSET (binfo));
7183 = build_tree_list (NULL_TREE,
7184 fold (build1 (NOP_EXPR,
7187 vod->last_init = &TREE_CHAIN (*vod->last_init);
7191 /* Called from build_vcall_offset_vtbl_entries via dfs_walk. */
7194 dfs_build_vcall_offset_vtbl_entries (binfo, data)
7198 vcall_offset_data* vod;
7199 tree derived_virtuals;
7202 /* If BINFO is a primary base, this is the least derived class of
7203 BINFO that is not a primary base. */
7204 tree non_primary_binfo;
7205 /* The primary base of BINFO. */
7209 vod = (vcall_offset_data *) data;
7210 binfo_inits = NULL_TREE;
7212 /* We might be a primary base class. Go up the inheritance
7213 hierarchy until we find the class of which we are a primary base:
7214 it is the BINFO_VIRTUALS there that we need to consider. */
7215 non_primary_binfo = binfo;
7216 while (BINFO_INHERITANCE_CHAIN (non_primary_binfo))
7218 tree b = BINFO_INHERITANCE_CHAIN (non_primary_binfo);
7219 if (BINFO_PRIMARY_BINFO (b) != non_primary_binfo)
7221 non_primary_binfo = b;
7224 /* Skip virtuals that we have already handled in a primary base
7226 base_virtuals = BINFO_VIRTUALS (binfo);
7227 derived_virtuals = BINFO_VIRTUALS (non_primary_binfo);
7228 primary_binfo = BINFO_PRIMARY_BINFO (binfo);
7230 for (i = 0; i < CLASSTYPE_VSIZE (BINFO_TYPE (primary_binfo)); ++i)
7232 base_virtuals = TREE_CHAIN (base_virtuals);
7233 derived_virtuals = TREE_CHAIN (derived_virtuals);
7236 /* Make entries for the rest of the virtuals. */
7237 for (; base_virtuals;
7238 derived_virtuals = TREE_CHAIN (derived_virtuals),
7239 base_virtuals = TREE_CHAIN (base_virtuals))
7241 /* Figure out what function we're looking at. */
7242 tree fn = BV_FN (derived_virtuals);
7247 /* If there is already an entry for a function with the same
7248 signature as FN, then we do not need a second vcall offset.
7249 Check the list of functions already present in the derived
7251 for (i = 0; i < VARRAY_ACTIVE_SIZE (vod->fns); ++i)
7255 derived_entry = VARRAY_TREE (vod->fns, i);
7256 if (same_signature_p (BV_FN (derived_entry), fn))
7258 BV_VCALL_INDEX (derived_virtuals)
7259 = BV_VCALL_INDEX (derived_entry);
7263 if (i != VARRAY_ACTIVE_SIZE (vod->fns))
7266 /* The FN comes from BASE. So, we must caculate the adjustment
7267 from the virtual base that derived from BINFO to BASE. */
7268 base = DECL_CONTEXT (fn);
7269 base_binfo = get_binfo (base, vod->derived, /*protect=*/0);
7271 /* Compute the vcall offset. */
7275 fold (build1 (NOP_EXPR, vtable_entry_type,
7276 size_diffop (BINFO_OFFSET (base_binfo),
7277 BINFO_OFFSET (vod->vbase))))));
7278 vod->last_init = &TREE_CHAIN (*vod->last_init);
7280 /* If there is already a vcall index, then we are processing a
7281 construction vtable. The index should be the same as it was
7282 when we processed the vtable for the base class. */
7283 if (BV_VCALL_INDEX (derived_virtuals))
7284 my_friendly_assert (tree_int_cst_equal (BV_VCALL_INDEX
7288 /* Keep track of the vtable index where this vcall offset can be
7291 BV_VCALL_INDEX (derived_virtuals) = vod->index;
7293 /* The next vcall offset will be found at a more negative
7295 vod->index = size_binop (MINUS_EXPR, vod->index, ssize_int (1));
7297 /* Keep track of this function. */
7298 VARRAY_PUSH_TREE (vod->fns, derived_virtuals);
7304 /* Adds the initializers for the vcall offset entries in the vtable
7305 for BINFO (which is part of the class hierarchy dominated by T) to
7309 build_vcall_offset_vtbl_entries (binfo, vod)
7311 vcall_offset_data *vod;
7313 /* Under the old ABI, the adjustments to the `this' pointer were made
7315 if (!vcall_offsets_in_vtable_p ())
7318 /* We only need these entries if this base is a virtual base. */
7319 if (!TREE_VIA_VIRTUAL (binfo))
7322 /* We need a vcall offset for each of the virtual functions in this
7323 vtable. For example:
7325 class A { virtual void f (); };
7326 class B : virtual public A { };
7327 class C: virtual public A, public B {};
7334 The location of `A' is not at a fixed offset relative to `B'; the
7335 offset depends on the complete object derived from `B'. So,
7336 `B' vtable contains an entry for `f' that indicates by what
7337 amount the `this' pointer for `B' needs to be adjusted to arrive
7340 We need entries for all the functions in our primary vtable and
7341 in our non-virtual bases vtables. For each base, the entries
7342 appear in the same order as in the base; but the bases themselves
7343 appear in reverse depth-first, left-to-right order. */
7345 VARRAY_TREE_INIT (vod->fns, 32, "fns");
7346 dfs_walk_real (binfo,
7347 dfs_build_vcall_offset_vtbl_entries,
7351 VARRAY_FREE (vod->fns);
7354 /* Return vtbl initializers for the RTTI entries coresponding to the
7355 BINFO's vtable. The RTTI entries should indicate the object given
7359 build_rtti_vtbl_entries (binfo, rtti_binfo, vod)
7362 vcall_offset_data *vod;
7371 basetype = BINFO_TYPE (binfo);
7372 t = BINFO_TYPE (rtti_binfo);
7374 /* For a COM object there is no RTTI entry. */
7375 if (CLASSTYPE_COM_INTERFACE (basetype))
7378 /* To find the complete object, we will first convert to our most
7379 primary base, and then add the offset in the vtbl to that value. */
7381 while (CLASSTYPE_HAS_PRIMARY_BASE_P (BINFO_TYPE (b)))
7385 primary_base = BINFO_PRIMARY_BINFO (b);
7386 if (!BINFO_PRIMARY_MARKED_P (primary_base))
7390 offset = size_diffop (BINFO_OFFSET (rtti_binfo), BINFO_OFFSET (b));
7392 /* The second entry is, in the case of the new ABI, the address of
7393 the typeinfo object, or, in the case of the old ABI, a function
7394 which returns a typeinfo object. */
7395 if (new_abi_rtti_p ())
7398 decl = build_unary_op (ADDR_EXPR, get_tinfo_decl (t), 0);
7400 decl = integer_zero_node;
7402 /* Convert the declaration to a type that can be stored in the
7404 init = build1 (NOP_EXPR, vfunc_ptr_type_node, decl);
7405 TREE_CONSTANT (init) = 1;
7410 decl = get_tinfo_decl (t);
7412 decl = abort_fndecl;
7414 /* Convert the declaration to a type that can be stored in the
7416 init = build1 (ADDR_EXPR, vfunc_ptr_type_node, decl);
7417 TREE_CONSTANT (init) = 1;
7418 init = build_vtable_entry (offset, NULL_TREE, init,
7419 /*generate_with_vtable_p=*/0);
7421 *vod->last_init = build_tree_list (NULL_TREE, init);
7422 vod->last_init = &TREE_CHAIN (*vod->last_init);
7424 /* Add the offset-to-top entry. It comes earlier in the vtable that
7425 the the typeinfo entry. */
7426 if (flag_vtable_thunks)
7428 /* Convert the offset to look like a function pointer, so that
7429 we can put it in the vtable. */
7430 init = build1 (NOP_EXPR, vfunc_ptr_type_node, offset);
7431 TREE_CONSTANT (init) = 1;
7432 *vod->last_init = build_tree_list (NULL_TREE, init);
7433 vod->last_init = &TREE_CHAIN (*vod->last_init);
7437 /* Build an entry in the virtual function table. DELTA is the offset
7438 for the `this' pointer. VCALL_INDEX is the vtable index containing
7439 the vcall offset; zero if none. ENTRY is the virtual function
7440 table entry itself. It's TREE_TYPE must be VFUNC_PTR_TYPE_NODE,
7441 but it may not actually be a virtual function table pointer. (For
7442 example, it might be the address of the RTTI object, under the new
7446 build_vtable_entry (delta, vcall_index, entry, generate_with_vtable_p)
7450 int generate_with_vtable_p;
7452 if (flag_vtable_thunks)
7456 fn = TREE_OPERAND (entry, 0);
7457 if ((!integer_zerop (delta) || vcall_index != NULL_TREE)
7458 && fn != abort_fndecl
7459 && !DECL_TINFO_FN_P (fn))
7461 entry = make_thunk (entry, delta, vcall_index,
7462 generate_with_vtable_p);
7463 entry = build1 (ADDR_EXPR, vtable_entry_type, entry);
7464 TREE_READONLY (entry) = 1;
7465 TREE_CONSTANT (entry) = 1;
7467 #ifdef GATHER_STATISTICS
7468 n_vtable_entries += 1;
7474 tree elems = tree_cons (NULL_TREE, delta,
7475 tree_cons (NULL_TREE, integer_zero_node,
7476 build_tree_list (NULL_TREE, entry)));
7477 tree entry = build (CONSTRUCTOR, vtable_entry_type, NULL_TREE, elems);
7479 /* We don't use vcall offsets when not using vtable thunks. */
7480 my_friendly_assert (vcall_index == NULL_TREE, 20000125);
7482 /* DELTA used to be constructed by `size_int' and/or size_binop,
7483 which caused overflow problems when it was negative. That should
7486 if (! int_fits_type_p (delta, delta_type_node))
7488 if (flag_huge_objects)
7489 sorry ("object size exceeds built-in limit for virtual function table implementation");
7491 sorry ("object size exceeds normal limit for virtual function table implementation, recompile all source and use -fhuge-objects");
7494 TREE_CONSTANT (entry) = 1;
7495 TREE_STATIC (entry) = 1;
7496 TREE_READONLY (entry) = 1;
7498 #ifdef GATHER_STATISTICS
7499 n_vtable_entries += 1;