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, int, tree *, tree *));
194 static tree dfs_build_secondary_vptr_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));
197 static tree get_matching_base PARAMS ((tree, tree));
199 /* Variables shared between class.c and call.c. */
201 #ifdef GATHER_STATISTICS
203 int n_vtable_entries = 0;
204 int n_vtable_searches = 0;
205 int n_vtable_elems = 0;
206 int n_convert_harshness = 0;
207 int n_compute_conversion_costs = 0;
208 int n_build_method_call = 0;
209 int n_inner_fields_searched = 0;
212 /* Virtual base class layout. */
214 /* Returns a list of virtual base class pointers as a chain of
218 build_vbase_pointer_fields (rli, empty_p)
219 record_layout_info rli;
222 /* Chain to hold all the new FIELD_DECLs which point at virtual
225 tree vbase_decls = NULL_TREE;
226 tree binfos = TYPE_BINFO_BASETYPES (rec);
227 int n_baseclasses = CLASSTYPE_N_BASECLASSES (rec);
231 /* Under the new ABI, there are no vbase pointers in the object.
232 Instead, the offsets are stored in the vtable. */
233 if (vbase_offsets_in_vtable_p ())
236 /* Loop over the baseclasses, adding vbase pointers as needed. */
237 for (i = 0; i < n_baseclasses; i++)
239 register tree base_binfo = TREE_VEC_ELT (binfos, i);
240 register tree basetype = BINFO_TYPE (base_binfo);
242 if (!COMPLETE_TYPE_P (basetype))
243 /* This error is now reported in xref_tag, thus giving better
244 location information. */
247 /* All basetypes are recorded in the association list of the
250 if (TREE_VIA_VIRTUAL (base_binfo))
255 /* The offset for a virtual base class is only used in computing
256 virtual function tables and for initializing virtual base
257 pointers. It is built once `get_vbase_types' is called. */
259 /* If this basetype can come from another vbase pointer
260 without an additional indirection, we will share
261 that pointer. If an indirection is involved, we
262 make our own pointer. */
263 for (j = 0; j < n_baseclasses; j++)
265 tree other_base_binfo = TREE_VEC_ELT (binfos, j);
266 if (! TREE_VIA_VIRTUAL (other_base_binfo)
267 && binfo_for_vbase (basetype, BINFO_TYPE (other_base_binfo)))
270 FORMAT_VBASE_NAME (name, basetype);
271 decl = build_vtbl_or_vbase_field (get_identifier (name),
272 get_identifier (VTABLE_BASE),
273 build_pointer_type (basetype),
277 BINFO_VPTR_FIELD (base_binfo) = decl;
278 TREE_CHAIN (decl) = vbase_decls;
279 place_field (rli, decl);
284 /* The space this decl occupies has already been accounted for. */
292 /* Returns a pointer to the virtual base class of EXP that has the
293 indicated TYPE. EXP is of class type, not a pointer type. */
296 build_vbase_pointer (exp, type)
299 if (vbase_offsets_in_vtable_p ())
304 /* Find the shared copy of TYPE; that's where the vtable offset
306 vbase = binfo_for_vbase (type, TREE_TYPE (exp));
307 /* Find the virtual function table pointer. */
308 vbase_ptr = build_vfield_ref (exp, TREE_TYPE (exp));
309 /* Compute the location where the offset will lie. */
310 vbase_ptr = build (PLUS_EXPR,
311 TREE_TYPE (vbase_ptr),
313 BINFO_VPTR_FIELD (vbase));
314 vbase_ptr = build1 (NOP_EXPR,
315 build_pointer_type (ptrdiff_type_node),
317 /* Add the contents of this location to EXP. */
318 return build (PLUS_EXPR,
319 build_pointer_type (type),
320 build_unary_op (ADDR_EXPR, exp, /*noconvert=*/0),
321 build1 (INDIRECT_REF, ptrdiff_type_node, vbase_ptr));
326 FORMAT_VBASE_NAME (name, type);
327 return build_component_ref (exp, get_identifier (name), NULL_TREE, 0);
331 /* Build multi-level access to EXPR using hierarchy path PATH.
332 CODE is PLUS_EXPR if we are going with the grain,
333 and MINUS_EXPR if we are not (in which case, we cannot traverse
334 virtual baseclass links).
336 TYPE is the type we want this path to have on exit.
338 NONNULL is non-zero if we know (for any reason) that EXPR is
339 not, in fact, zero. */
342 build_vbase_path (code, type, expr, path, nonnull)
344 tree type, expr, path;
347 register int changed = 0;
348 tree last = NULL_TREE, last_virtual = NULL_TREE;
350 tree null_expr = 0, nonnull_expr;
352 tree offset = integer_zero_node;
354 if (BINFO_INHERITANCE_CHAIN (path) == NULL_TREE)
355 return build1 (NOP_EXPR, type, expr);
357 /* We could do better if we had additional logic to convert back to the
358 unconverted type (the static type of the complete object), and then
359 convert back to the type we want. Until that is done, we only optimize
360 if the complete type is the same type as expr has. */
361 fixed_type_p = resolves_to_fixed_type_p (expr, &nonnull);
363 if (!fixed_type_p && TREE_SIDE_EFFECTS (expr))
364 expr = save_expr (expr);
367 path = reverse_path (path);
369 basetype = BINFO_TYPE (path);
373 if (TREE_VIA_VIRTUAL (TREE_VALUE (path)))
375 last_virtual = BINFO_TYPE (TREE_VALUE (path));
376 if (code == PLUS_EXPR)
378 changed = ! fixed_type_p;
384 /* We already check for ambiguous things in the caller, just
388 tree binfo = get_binfo (last, TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (nonnull_expr))), 0);
389 nonnull_expr = convert_pointer_to_real (binfo, nonnull_expr);
391 ind = build_indirect_ref (nonnull_expr, NULL_PTR);
392 nonnull_expr = build_vbase_pointer (ind, last_virtual);
394 && TREE_CODE (type) == POINTER_TYPE
395 && null_expr == NULL_TREE)
397 null_expr = build1 (NOP_EXPR, build_pointer_type (last_virtual), integer_zero_node);
398 expr = build (COND_EXPR, build_pointer_type (last_virtual),
399 build (EQ_EXPR, boolean_type_node, expr,
401 null_expr, nonnull_expr);
404 /* else we'll figure out the offset below. */
406 /* Happens in the case of parse errors. */
407 if (nonnull_expr == error_mark_node)
408 return error_mark_node;
412 cp_error ("cannot cast up from virtual baseclass `%T'",
414 return error_mark_node;
417 last = TREE_VALUE (path);
418 path = TREE_CHAIN (path);
420 /* LAST is now the last basetype assoc on the path. */
422 /* A pointer to a virtual base member of a non-null object
423 is non-null. Therefore, we only need to test for zeroness once.
424 Make EXPR the canonical expression to deal with here. */
427 TREE_OPERAND (expr, 2) = nonnull_expr;
428 TREE_TYPE (expr) = TREE_TYPE (TREE_OPERAND (expr, 1))
429 = TREE_TYPE (nonnull_expr);
434 /* If we go through any virtual base pointers, make sure that
435 casts to BASETYPE from the last virtual base class use
436 the right value for BASETYPE. */
439 tree intype = TREE_TYPE (TREE_TYPE (expr));
441 if (TYPE_MAIN_VARIANT (intype) != BINFO_TYPE (last))
443 = BINFO_OFFSET (get_binfo (last, TYPE_MAIN_VARIANT (intype), 0));
446 offset = BINFO_OFFSET (last);
448 if (! integer_zerop (offset))
450 /* Bash types to make the backend happy. */
451 offset = cp_convert (type, offset);
453 /* If expr might be 0, we need to preserve that zeroness. */
457 TREE_TYPE (null_expr) = type;
459 null_expr = build1 (NOP_EXPR, type, integer_zero_node);
460 if (TREE_SIDE_EFFECTS (expr))
461 expr = save_expr (expr);
463 return build (COND_EXPR, type,
464 build (EQ_EXPR, boolean_type_node, expr, integer_zero_node),
466 build (code, type, expr, offset));
468 else return build (code, type, expr, offset);
471 /* Cannot change the TREE_TYPE of a NOP_EXPR here, since it may
472 be used multiple times in initialization of multiple inheritance. */
475 TREE_TYPE (expr) = type;
479 return build1 (NOP_EXPR, type, expr);
483 /* Virtual function things. */
485 /* We want to give the assembler the vtable identifier as well as
486 the offset to the function pointer. So we generate
488 __asm__ __volatile__ (".vtable_entry %c0, %c1"
489 : : "s"(&class_vtable),
490 "i"((long)&vtbl[idx].pfn - (long)&vtbl[0])); */
493 build_vtable_entry_ref (basetype, vtbl, idx)
494 tree basetype, vtbl, idx;
496 static char asm_stmt[] = ".vtable_entry %c0, %c1";
499 s = build_unary_op (ADDR_EXPR,
500 get_vtbl_decl_for_binfo (TYPE_BINFO (basetype)),
502 s = build_tree_list (build_string (1, "s"), s);
504 i = build_array_ref (vtbl, idx);
505 if (!flag_vtable_thunks)
506 i = build_component_ref (i, pfn_identifier, vtable_entry_type, 0);
507 i = build_c_cast (ptrdiff_type_node, build_unary_op (ADDR_EXPR, i, 0));
508 i2 = build_array_ref (vtbl, build_int_2(0,0));
509 i2 = build_c_cast (ptrdiff_type_node, build_unary_op (ADDR_EXPR, i2, 0));
510 i = build_binary_op (MINUS_EXPR, i, i2);
511 i = build_tree_list (build_string (1, "i"), i);
513 finish_asm_stmt (ridpointers[RID_VOLATILE],
514 build_string (sizeof(asm_stmt)-1, asm_stmt),
515 NULL_TREE, chainon (s, i), NULL_TREE);
518 /* Given an object INSTANCE, return an expression which yields the
519 virtual function vtable element corresponding to INDEX. There are
520 many special cases for INSTANCE which we take care of here, mainly
521 to avoid creating extra tree nodes when we don't have to. */
524 build_vtbl_ref (instance, idx)
528 tree basetype = TREE_TYPE (instance);
530 if (TREE_CODE (basetype) == REFERENCE_TYPE)
531 basetype = TREE_TYPE (basetype);
533 if (instance == current_class_ref)
534 vtbl = build_vfield_ref (instance, basetype);
539 /* Try to figure out what a reference refers to, and
540 access its virtual function table directly. */
541 tree ref = NULL_TREE;
543 if (TREE_CODE (instance) == INDIRECT_REF
544 && TREE_CODE (TREE_TYPE (TREE_OPERAND (instance, 0))) == REFERENCE_TYPE)
545 ref = TREE_OPERAND (instance, 0);
546 else if (TREE_CODE (TREE_TYPE (instance)) == REFERENCE_TYPE)
549 if (ref && TREE_CODE (ref) == VAR_DECL
550 && DECL_INITIAL (ref))
552 tree init = DECL_INITIAL (ref);
554 while (TREE_CODE (init) == NOP_EXPR
555 || TREE_CODE (init) == NON_LVALUE_EXPR)
556 init = TREE_OPERAND (init, 0);
557 if (TREE_CODE (init) == ADDR_EXPR)
559 init = TREE_OPERAND (init, 0);
560 if (IS_AGGR_TYPE (TREE_TYPE (init))
561 && (TREE_CODE (init) == PARM_DECL
562 || TREE_CODE (init) == VAR_DECL))
568 if (IS_AGGR_TYPE (TREE_TYPE (instance))
569 && (TREE_CODE (instance) == RESULT_DECL
570 || TREE_CODE (instance) == PARM_DECL
571 || TREE_CODE (instance) == VAR_DECL))
573 vtbl = TYPE_BINFO_VTABLE (basetype);
574 /* Knowing the dynamic type of INSTANCE we can easily obtain
575 the correct vtable entry. In the new ABI, we resolve
576 this back to be in terms of the primary vtable. */
577 if (TREE_CODE (vtbl) == PLUS_EXPR)
579 idx = fold (build (PLUS_EXPR,
582 build (EXACT_DIV_EXPR,
584 TREE_OPERAND (vtbl, 1),
585 TYPE_SIZE_UNIT (vtable_entry_type))));
586 vtbl = get_vtbl_decl_for_binfo (TYPE_BINFO (basetype));
590 vtbl = build_vfield_ref (instance, basetype);
593 assemble_external (vtbl);
596 build_vtable_entry_ref (basetype, vtbl, idx);
598 aref = build_array_ref (vtbl, idx);
603 /* Given an object INSTANCE, return an expression which yields the
604 virtual function corresponding to INDEX. There are many special
605 cases for INSTANCE which we take care of here, mainly to avoid
606 creating extra tree nodes when we don't have to. */
609 build_vfn_ref (ptr_to_instptr, instance, idx)
610 tree *ptr_to_instptr, instance;
613 tree aref = build_vtbl_ref (instance, idx);
615 /* When using thunks, there is no extra delta, and we get the pfn
617 if (flag_vtable_thunks)
622 /* Save the intermediate result in a SAVE_EXPR so we don't have to
623 compute each component of the virtual function pointer twice. */
624 if (TREE_CODE (aref) == INDIRECT_REF)
625 TREE_OPERAND (aref, 0) = save_expr (TREE_OPERAND (aref, 0));
628 = build (PLUS_EXPR, TREE_TYPE (*ptr_to_instptr),
630 cp_convert (ptrdiff_type_node,
631 build_component_ref (aref, delta_identifier, NULL_TREE, 0)));
634 return build_component_ref (aref, pfn_identifier, NULL_TREE, 0);
637 /* Return the name of the virtual function table (as an IDENTIFIER_NODE)
638 for the given TYPE. */
641 get_vtable_name (type)
645 return mangle_vtbl_for_type (type);
647 return build_overload_with_type (get_identifier (VTABLE_NAME_PREFIX),
651 /* Return an IDENTIFIER_NODE for the name of the virtual table table
659 return mangle_vtt_for_type (type);
661 return build_overload_with_type (get_identifier (VTT_NAME_PREFIX),
665 /* Return the offset to the main vtable for a given base BINFO. */
668 get_vfield_offset (binfo)
672 size_binop (PLUS_EXPR, byte_position (TYPE_VFIELD (BINFO_TYPE (binfo))),
673 BINFO_OFFSET (binfo));
676 /* Get the offset to the start of the original binfo that we derived
677 this binfo from. If we find TYPE first, return the offset only
678 that far. The shortened search is useful because the this pointer
679 on method calling is expected to point to a DECL_CONTEXT (fndecl)
680 object, and not a baseclass of it. */
683 get_derived_offset (binfo, type)
686 tree offset1 = get_vfield_offset (TYPE_BINFO (BINFO_TYPE (binfo)));
689 while (!same_type_p (BINFO_TYPE (binfo), type))
690 binfo = BINFO_PRIMARY_BINFO (binfo);
692 offset2 = get_vfield_offset (TYPE_BINFO (BINFO_TYPE (binfo)));
693 return size_binop (MINUS_EXPR, offset1, offset2);
696 /* Create a VAR_DECL for a primary or secondary vtable for CLASS_TYPE.
697 (For a secondary vtable for B-in-D, CLASS_TYPE should be D, not B.)
698 Use NAME for the name of the vtable, and VTABLE_TYPE for its type. */
701 build_vtable (class_type, name, vtable_type)
708 decl = build_lang_decl (VAR_DECL, name, vtable_type);
709 DECL_CONTEXT (decl) = class_type;
710 DECL_ARTIFICIAL (decl) = 1;
711 TREE_STATIC (decl) = 1;
712 #ifndef WRITABLE_VTABLES
713 /* Make them READONLY by default. (mrs) */
714 TREE_READONLY (decl) = 1;
716 DECL_VIRTUAL_P (decl) = 1;
717 import_export_vtable (decl, class_type, 0);
722 /* Get the VAR_DECL of the vtable for TYPE. TYPE need not be polymorphic,
723 or even complete. If this does not exist, create it. If COMPLETE is
724 non-zero, then complete the definition of it -- that will render it
725 impossible to actually build the vtable, but is useful to get at those
726 which are known to exist in the runtime. */
729 get_vtable_decl (type, complete)
733 tree name = get_vtable_name (type);
734 tree decl = IDENTIFIER_GLOBAL_VALUE (name);
738 my_friendly_assert (TREE_CODE (decl) == VAR_DECL
739 && DECL_VIRTUAL_P (decl), 20000118);
743 decl = build_vtable (type, name, void_type_node);
744 decl = pushdecl_top_level (decl);
745 my_friendly_assert (IDENTIFIER_GLOBAL_VALUE (name) == decl,
748 /* At one time the vtable info was grabbed 2 words at a time. This
749 fails on sparc unless you have 8-byte alignment. (tiemann) */
750 DECL_ALIGN (decl) = MAX (TYPE_ALIGN (double_type_node),
755 DECL_EXTERNAL (decl) = 1;
756 cp_finish_decl (decl, NULL_TREE, NULL_TREE, 0);
762 /* Returns a copy of the BINFO_VIRTUALS list in BINFO. The
763 BV_VCALL_INDEX for each entry is cleared. */
766 copy_virtuals (binfo)
772 copies = copy_list (BINFO_VIRTUALS (binfo));
773 for (t = copies; t; t = TREE_CHAIN (t))
775 BV_VCALL_INDEX (t) = NULL_TREE;
776 BV_USE_VCALL_INDEX_P (t) = 0;
777 BV_GENERATE_THUNK_WITH_VTABLE_P (t) = 0;
783 /* Build the primary virtual function table for TYPE. If BINFO is
784 non-NULL, build the vtable starting with the initial approximation
785 that it is the same as the one which is the head of the association
786 list. Returns a non-zero value if a new vtable is actually
790 build_primary_vtable (binfo, type)
796 decl = get_vtable_decl (type, /*complete=*/0);
800 if (BINFO_NEW_VTABLE_MARKED (binfo, type))
801 /* We have already created a vtable for this base, so there's
802 no need to do it again. */
805 virtuals = copy_virtuals (binfo);
806 TREE_TYPE (decl) = TREE_TYPE (get_vtbl_decl_for_binfo (binfo));
807 DECL_SIZE (decl) = TYPE_SIZE (TREE_TYPE (decl));
808 DECL_SIZE_UNIT (decl) = TYPE_SIZE_UNIT (TREE_TYPE (decl));
812 my_friendly_assert (TREE_CODE (TREE_TYPE (decl)) == VOID_TYPE,
814 virtuals = NULL_TREE;
817 #ifdef GATHER_STATISTICS
819 n_vtable_elems += list_length (virtuals);
822 /* Initialize the association list for this type, based
823 on our first approximation. */
824 TYPE_BINFO_VTABLE (type) = decl;
825 TYPE_BINFO_VIRTUALS (type) = virtuals;
826 SET_BINFO_NEW_VTABLE_MARKED (TYPE_BINFO (type), type);
830 /* Give TYPE a new virtual function table which is initialized
831 with a skeleton-copy of its original initialization. The only
832 entry that changes is the `delta' entry, so we can really
833 share a lot of structure.
835 FOR_TYPE is the derived type which caused this table to
838 BINFO is the type association which provided TYPE for FOR_TYPE.
840 The order in which vtables are built (by calling this function) for
841 an object must remain the same, otherwise a binary incompatibility
845 build_secondary_vtable (binfo, for_type)
846 tree binfo, for_type;
849 tree orig_decl = BINFO_VTABLE (binfo);
862 if (TREE_VIA_VIRTUAL (binfo))
863 my_friendly_assert (binfo == binfo_for_vbase (BINFO_TYPE (binfo),
867 if (BINFO_NEW_VTABLE_MARKED (binfo, current_class_type))
868 /* We already created a vtable for this base. There's no need to
872 /* Remember that we've created a vtable for this BINFO, so that we
873 don't try to do so again. */
874 SET_BINFO_NEW_VTABLE_MARKED (binfo, current_class_type);
876 /* Make fresh virtual list, so we can smash it later. */
877 BINFO_VIRTUALS (binfo) = copy_virtuals (binfo);
879 if (TREE_VIA_VIRTUAL (binfo))
881 tree binfo1 = binfo_for_vbase (BINFO_TYPE (binfo), for_type);
883 /* XXX - This should never happen, if it does, the caller should
884 ensure that the binfo is from for_type's binfos, not from any
885 base type's. We can remove all this code after a while. */
887 warning ("internal inconsistency: binfo offset error for rtti");
889 offset = BINFO_OFFSET (binfo1);
892 offset = BINFO_OFFSET (binfo);
894 /* In the new ABI, secondary vtables are laid out as part of the
895 same structure as the primary vtable. */
896 if (merge_primary_and_secondary_vtables_p ())
898 BINFO_VTABLE (binfo) = NULL_TREE;
902 /* Create the declaration for the secondary vtable. */
903 basetype = TYPE_MAIN_VARIANT (BINFO_TYPE (binfo));
904 buf2 = TYPE_ASSEMBLER_NAME_STRING (basetype);
905 i = TYPE_ASSEMBLER_NAME_LENGTH (basetype) + 1;
907 /* We know that the vtable that we are going to create doesn't exist
908 yet in the global namespace, and when we finish, it will be
909 pushed into the global namespace. In complex MI hierarchies, we
910 have to loop while the name we are thinking of adding is globally
911 defined, adding more name components to the vtable name as we
912 loop, until the name is unique. This is because in complex MI
913 cases, we might have the same base more than once. This means
914 that the order in which this function is called for vtables must
915 remain the same, otherwise binary compatibility can be
920 char *buf1 = (char *) alloca (TYPE_ASSEMBLER_NAME_LENGTH (for_type)
924 sprintf (buf1, "%s%c%s", TYPE_ASSEMBLER_NAME_STRING (for_type), joiner,
926 buf = (char *) alloca (strlen (VTABLE_NAME_PREFIX) + strlen (buf1) + 1);
927 sprintf (buf, "%s%s", VTABLE_NAME_PREFIX, buf1);
928 name = get_identifier (buf);
930 /* If this name doesn't clash, then we can use it, otherwise
931 we add more to the name until it is unique. */
933 if (! IDENTIFIER_GLOBAL_VALUE (name))
936 /* Set values for next loop through, if the name isn't unique. */
938 path = BINFO_INHERITANCE_CHAIN (path);
940 /* We better not run out of stuff to make it unique. */
941 my_friendly_assert (path != NULL_TREE, 368);
943 basetype = TYPE_MAIN_VARIANT (BINFO_TYPE (path));
945 if (for_type == basetype)
947 /* If we run out of basetypes in the path, we have already
948 found created a vtable with that name before, we now
949 resort to tacking on _%d to distinguish them. */
951 i = TYPE_ASSEMBLER_NAME_LENGTH (basetype) + 1 + i + 1 + 3;
952 buf1 = (char *) alloca (i);
954 sprintf (buf1, "%s%c%s%c%d",
955 TYPE_ASSEMBLER_NAME_STRING (basetype), joiner,
957 buf = (char *) alloca (strlen (VTABLE_NAME_PREFIX)
958 + strlen (buf1) + 1);
959 sprintf (buf, "%s%s", VTABLE_NAME_PREFIX, buf1);
960 name = get_identifier (buf);
962 /* If this name doesn't clash, then we can use it,
963 otherwise we add something different to the name until
965 } while (++j <= 999 && IDENTIFIER_GLOBAL_VALUE (name));
967 /* Hey, they really like MI don't they? Increase the 3
968 above to 6, and the 999 to 999999. :-) */
969 my_friendly_assert (j <= 999, 369);
974 i = TYPE_ASSEMBLER_NAME_LENGTH (basetype) + 1 + i;
975 new_buf2 = (char *) alloca (i);
976 sprintf (new_buf2, "%s%c%s",
977 TYPE_ASSEMBLER_NAME_STRING (basetype), joiner, buf2);
981 new_decl = build_vtable (for_type, name, TREE_TYPE (orig_decl));
982 DECL_ALIGN (new_decl) = DECL_ALIGN (orig_decl);
983 DECL_USER_ALIGN (new_decl) = DECL_USER_ALIGN (orig_decl);
984 BINFO_VTABLE (binfo) = pushdecl_top_level (new_decl);
986 #ifdef GATHER_STATISTICS
988 n_vtable_elems += list_length (BINFO_VIRTUALS (binfo));
994 /* Create a new vtable for BINFO which is the hierarchy dominated by
998 make_new_vtable (t, binfo)
1002 if (binfo == TYPE_BINFO (t))
1003 /* In this case, it is *type*'s vtable we are modifying. We start
1004 with the approximation that it's vtable is that of the
1005 immediate base class. */
1006 return build_primary_vtable (TYPE_BINFO (DECL_CONTEXT (TYPE_VFIELD (t))),
1009 /* This is our very own copy of `basetype' to play with. Later,
1010 we will fill in all the virtual functions that override the
1011 virtual functions in these base classes which are not defined
1012 by the current type. */
1013 return build_secondary_vtable (binfo, t);
1016 /* Make *VIRTUALS, an entry on the BINFO_VIRTUALS list for BINFO
1017 (which is in the hierarchy dominated by T) list FNDECL as its
1018 BV_FN. DELTA is the required constant adjustment from the `this'
1019 pointer where the vtable entry appears to the `this' required when
1020 the function is actually called. */
1023 modify_vtable_entry (t, binfo, fndecl, delta, virtuals)
1034 if (fndecl != BV_FN (v)
1035 || !tree_int_cst_equal (delta, BV_DELTA (v)))
1039 /* We need a new vtable for BINFO. */
1040 if (make_new_vtable (t, binfo))
1042 /* If we really did make a new vtable, we also made a copy
1043 of the BINFO_VIRTUALS list. Now, we have to find the
1044 corresponding entry in that list. */
1045 *virtuals = BINFO_VIRTUALS (binfo);
1046 while (BV_FN (*virtuals) != BV_FN (v))
1047 *virtuals = TREE_CHAIN (*virtuals);
1051 base_fndecl = BV_FN (v);
1052 BV_DELTA (v) = delta;
1053 BV_VCALL_INDEX (v) = NULL_TREE;
1056 /* Now assign virtual dispatch information, if unset. We can
1057 dispatch this, through any overridden base function. */
1058 if (TREE_CODE (DECL_VINDEX (fndecl)) != INTEGER_CST)
1060 DECL_VINDEX (fndecl) = DECL_VINDEX (base_fndecl);
1061 DECL_VIRTUAL_CONTEXT (fndecl) = DECL_VIRTUAL_CONTEXT (base_fndecl);
1066 /* Return the index (in the virtual function table) of the first
1067 virtual function. */
1070 first_vfun_index (t)
1073 /* Under the old ABI, the offset-to-top and RTTI entries are at
1074 indices zero and one; under the new ABI, the first virtual
1075 function is at index zero. */
1076 if (!CLASSTYPE_COM_INTERFACE (t) && !flag_new_abi)
1077 return flag_vtable_thunks ? 2 : 1;
1082 /* Set DECL_VINDEX for DECL. VINDEX_P is the number of virtual
1083 functions present in the vtable so far. */
1086 set_vindex (t, decl, vfuns_p)
1093 vindex = (*vfuns_p)++;
1094 vindex += first_vfun_index (t);
1095 DECL_VINDEX (decl) = build_shared_int_cst (vindex);
1098 /* Add a virtual function to all the appropriate vtables for the class
1099 T. DECL_VINDEX(X) should be error_mark_node, if we want to
1100 allocate a new slot in our table. If it is error_mark_node, we
1101 know that no other function from another vtable is overridden by X.
1102 VFUNS_P keeps track of how many virtuals there are in our
1103 main vtable for the type, and we build upon the NEW_VIRTUALS list
1107 add_virtual_function (new_virtuals_p, overridden_virtuals_p,
1109 tree *new_virtuals_p;
1110 tree *overridden_virtuals_p;
1113 tree t; /* Structure type. */
1117 /* If this function doesn't override anything from a base class, we
1118 can just assign it a new DECL_VINDEX now. Otherwise, if it does
1119 override something, we keep it around and assign its DECL_VINDEX
1120 later, in modify_all_vtables. */
1121 if (TREE_CODE (DECL_VINDEX (fndecl)) == INTEGER_CST)
1122 /* We've already dealt with this function. */
1125 new_virtual = make_node (TREE_LIST);
1126 BV_FN (new_virtual) = fndecl;
1127 BV_DELTA (new_virtual) = integer_zero_node;
1129 if (DECL_VINDEX (fndecl) == error_mark_node)
1131 /* FNDECL is a new virtual function; it doesn't override any
1132 virtual function in a base class. */
1134 /* We remember that this was the base sub-object for rtti. */
1135 CLASSTYPE_RTTI (t) = t;
1137 /* Now assign virtual dispatch information. */
1138 set_vindex (t, fndecl, vfuns_p);
1139 DECL_VIRTUAL_CONTEXT (fndecl) = t;
1141 /* Save the state we've computed on the NEW_VIRTUALS list. */
1142 TREE_CHAIN (new_virtual) = *new_virtuals_p;
1143 *new_virtuals_p = new_virtual;
1147 /* FNDECL overrides a function from a base class. */
1148 TREE_CHAIN (new_virtual) = *overridden_virtuals_p;
1149 *overridden_virtuals_p = new_virtual;
1153 extern struct obstack *current_obstack;
1155 /* Add method METHOD to class TYPE.
1157 If non-NULL, FIELDS is the entry in the METHOD_VEC vector entry of
1158 the class type where the method should be added. */
1161 add_method (type, fields, method)
1162 tree type, *fields, method;
1164 int using = (DECL_CONTEXT (method) != type);
1166 if (fields && *fields)
1167 *fields = build_overload (method, *fields);
1174 if (!CLASSTYPE_METHOD_VEC (type))
1175 /* Make a new method vector. We start with 8 entries. We must
1176 allocate at least two (for constructors and destructors), and
1177 we're going to end up with an assignment operator at some
1180 We could use a TREE_LIST for now, and convert it to a
1181 TREE_VEC in finish_struct, but we would probably waste more
1182 memory making the links in the list than we would by
1183 over-allocating the size of the vector here. Furthermore,
1184 we would complicate all the code that expects this to be a
1186 CLASSTYPE_METHOD_VEC (type) = make_tree_vec (8);
1188 method_vec = CLASSTYPE_METHOD_VEC (type);
1189 len = TREE_VEC_LENGTH (method_vec);
1191 /* Constructors and destructors go in special slots. */
1192 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (method))
1193 slot = CLASSTYPE_CONSTRUCTOR_SLOT;
1194 else if (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (method))
1195 slot = CLASSTYPE_DESTRUCTOR_SLOT;
1198 /* See if we already have an entry with this name. */
1199 for (slot = CLASSTYPE_FIRST_CONVERSION_SLOT; slot < len; ++slot)
1200 if (!TREE_VEC_ELT (method_vec, slot)
1201 || (DECL_NAME (OVL_CURRENT (TREE_VEC_ELT (method_vec,
1203 == DECL_NAME (method)))
1208 /* We need a bigger method vector. */
1209 tree new_vec = make_tree_vec (2 * len);
1210 bcopy ((PTR) &TREE_VEC_ELT (method_vec, 0),
1211 (PTR) &TREE_VEC_ELT (new_vec, 0),
1212 len * sizeof (tree));
1214 method_vec = CLASSTYPE_METHOD_VEC (type) = new_vec;
1217 if (DECL_CONV_FN_P (method) && !TREE_VEC_ELT (method_vec, slot))
1219 /* Type conversion operators have to come before
1220 ordinary methods; add_conversions depends on this to
1221 speed up looking for conversion operators. So, if
1222 necessary, we slide some of the vector elements up.
1223 In theory, this makes this algorithm O(N^2) but we
1224 don't expect many conversion operators. */
1225 for (slot = 2; slot < len; ++slot)
1227 tree fn = TREE_VEC_ELT (method_vec, slot);
1230 /* There are no more entries in the vector, so we
1231 can insert the new conversion operator here. */
1234 if (!DECL_CONV_FN_P (OVL_CURRENT (fn)))
1235 /* We can insert the new function right at the
1240 if (!TREE_VEC_ELT (method_vec, slot))
1241 /* There is nothing in the Ith slot, so we can avoid
1246 /* We know the last slot in the vector is empty
1247 because we know that at this point there's room
1248 for a new function. */
1249 bcopy ((PTR) &TREE_VEC_ELT (method_vec, slot),
1250 (PTR) &TREE_VEC_ELT (method_vec, slot + 1),
1251 (len - slot - 1) * sizeof (tree));
1252 TREE_VEC_ELT (method_vec, slot) = NULL_TREE;
1257 if (template_class_depth (type))
1258 /* TYPE is a template class. Don't issue any errors now; wait
1259 until instantiation time to complain. */
1265 /* Check to see if we've already got this method. */
1266 for (fns = TREE_VEC_ELT (method_vec, slot);
1268 fns = OVL_NEXT (fns))
1270 tree fn = OVL_CURRENT (fns);
1272 if (TREE_CODE (fn) != TREE_CODE (method))
1275 if (TREE_CODE (method) != TEMPLATE_DECL)
1277 /* [over.load] Member function declarations with the
1278 same name and the same parameter types cannot be
1279 overloaded if any of them is a static member
1280 function declaration. */
1281 if ((DECL_STATIC_FUNCTION_P (fn)
1282 != DECL_STATIC_FUNCTION_P (method))
1285 tree parms1 = TYPE_ARG_TYPES (TREE_TYPE (fn));
1286 tree parms2 = TYPE_ARG_TYPES (TREE_TYPE (method));
1288 if (! DECL_STATIC_FUNCTION_P (fn))
1289 parms1 = TREE_CHAIN (parms1);
1290 if (! DECL_STATIC_FUNCTION_P (method))
1291 parms2 = TREE_CHAIN (parms2);
1293 if (compparms (parms1, parms2))
1296 /* Defer to the local function. */
1299 cp_error ("`%#D' and `%#D' cannot be overloaded",
1304 /* Since this is an ordinary function in a
1305 non-template class, it's mangled name can be used
1306 as a unique identifier. This technique is only
1307 an optimization; we would get the same results if
1308 we just used decls_match here. */
1309 if (DECL_ASSEMBLER_NAME (fn)
1310 != DECL_ASSEMBLER_NAME (method))
1313 else if (!decls_match (fn, method))
1316 /* There has already been a declaration of this method
1317 or member template. */
1318 cp_error_at ("`%D' has already been declared in `%T'",
1321 /* We don't call duplicate_decls here to merge the
1322 declarations because that will confuse things if the
1323 methods have inline definitions. In particular, we
1324 will crash while processing the definitions. */
1329 /* Actually insert the new method. */
1330 TREE_VEC_ELT (method_vec, slot)
1331 = build_overload (method, TREE_VEC_ELT (method_vec, slot));
1333 /* Add the new binding. */
1334 if (!DECL_CONSTRUCTOR_P (method)
1335 && !DECL_DESTRUCTOR_P (method))
1336 push_class_level_binding (DECL_NAME (method),
1337 TREE_VEC_ELT (method_vec, slot));
1341 /* Subroutines of finish_struct. */
1343 /* Look through the list of fields for this struct, deleting
1344 duplicates as we go. This must be recursive to handle
1347 FIELD is the field which may not appear anywhere in FIELDS.
1348 FIELD_PTR, if non-null, is the starting point at which
1349 chained deletions may take place.
1350 The value returned is the first acceptable entry found
1353 Note that anonymous fields which are not of UNION_TYPE are
1354 not duplicates, they are just anonymous fields. This happens
1355 when we have unnamed bitfields, for example. */
1358 delete_duplicate_fields_1 (field, fields)
1363 if (DECL_NAME (field) == 0)
1365 if (! ANON_AGGR_TYPE_P (TREE_TYPE (field)))
1368 for (x = TYPE_FIELDS (TREE_TYPE (field)); x; x = TREE_CHAIN (x))
1369 fields = delete_duplicate_fields_1 (x, fields);
1374 for (x = fields; x; prev = x, x = TREE_CHAIN (x))
1376 if (DECL_NAME (x) == 0)
1378 if (! ANON_AGGR_TYPE_P (TREE_TYPE (x)))
1380 TYPE_FIELDS (TREE_TYPE (x))
1381 = delete_duplicate_fields_1 (field, TYPE_FIELDS (TREE_TYPE (x)));
1382 if (TYPE_FIELDS (TREE_TYPE (x)) == 0)
1385 fields = TREE_CHAIN (fields);
1387 TREE_CHAIN (prev) = TREE_CHAIN (x);
1390 else if (TREE_CODE (field) == USING_DECL)
1391 /* A using declaration may is allowed to appear more than
1392 once. We'll prune these from the field list later, and
1393 handle_using_decl will complain about invalid multiple
1396 else if (DECL_NAME (field) == DECL_NAME (x))
1398 if (TREE_CODE (field) == CONST_DECL
1399 && TREE_CODE (x) == CONST_DECL)
1400 cp_error_at ("duplicate enum value `%D'", x);
1401 else if (TREE_CODE (field) == CONST_DECL
1402 || TREE_CODE (x) == CONST_DECL)
1403 cp_error_at ("duplicate field `%D' (as enum and non-enum)",
1405 else if (DECL_DECLARES_TYPE_P (field)
1406 && DECL_DECLARES_TYPE_P (x))
1408 if (same_type_p (TREE_TYPE (field), TREE_TYPE (x)))
1410 cp_error_at ("duplicate nested type `%D'", x);
1412 else if (DECL_DECLARES_TYPE_P (field)
1413 || DECL_DECLARES_TYPE_P (x))
1415 /* Hide tag decls. */
1416 if ((TREE_CODE (field) == TYPE_DECL
1417 && DECL_ARTIFICIAL (field))
1418 || (TREE_CODE (x) == TYPE_DECL
1419 && DECL_ARTIFICIAL (x)))
1421 cp_error_at ("duplicate field `%D' (as type and non-type)",
1425 cp_error_at ("duplicate member `%D'", x);
1427 fields = TREE_CHAIN (fields);
1429 TREE_CHAIN (prev) = TREE_CHAIN (x);
1437 delete_duplicate_fields (fields)
1441 for (x = fields; x && TREE_CHAIN (x); x = TREE_CHAIN (x))
1442 TREE_CHAIN (x) = delete_duplicate_fields_1 (x, TREE_CHAIN (x));
1445 /* Change the access of FDECL to ACCESS in T. Return 1 if change was
1446 legit, otherwise return 0. */
1449 alter_access (t, fdecl, access)
1456 if (!DECL_LANG_SPECIFIC (fdecl))
1457 retrofit_lang_decl (fdecl);
1459 elem = purpose_member (t, DECL_ACCESS (fdecl));
1462 if (TREE_VALUE (elem) != access)
1464 if (TREE_CODE (TREE_TYPE (fdecl)) == FUNCTION_DECL)
1465 cp_error_at ("conflicting access specifications for method `%D', ignored", TREE_TYPE (fdecl));
1467 error ("conflicting access specifications for field `%s', ignored",
1468 IDENTIFIER_POINTER (DECL_NAME (fdecl)));
1472 /* They're changing the access to the same thing they changed
1473 it to before. That's OK. */
1479 enforce_access (t, fdecl);
1480 DECL_ACCESS (fdecl) = tree_cons (t, access, DECL_ACCESS (fdecl));
1486 /* Process the USING_DECL, which is a member of T. */
1489 handle_using_decl (using_decl, t)
1493 tree ctype = DECL_INITIAL (using_decl);
1494 tree name = DECL_NAME (using_decl);
1496 = TREE_PRIVATE (using_decl) ? access_private_node
1497 : TREE_PROTECTED (using_decl) ? access_protected_node
1498 : access_public_node;
1500 tree flist = NULL_TREE;
1503 binfo = binfo_or_else (ctype, t);
1507 if (name == constructor_name (ctype)
1508 || name == constructor_name_full (ctype))
1510 cp_error_at ("using-declaration for constructor", using_decl);
1514 fdecl = lookup_member (binfo, name, 0, 0);
1518 cp_error_at ("no members matching `%D' in `%#T'", using_decl, ctype);
1522 if (BASELINK_P (fdecl))
1523 /* Ignore base type this came from. */
1524 fdecl = TREE_VALUE (fdecl);
1526 old_value = IDENTIFIER_CLASS_VALUE (name);
1529 if (is_overloaded_fn (old_value))
1530 old_value = OVL_CURRENT (old_value);
1532 if (DECL_P (old_value) && DECL_CONTEXT (old_value) == t)
1535 old_value = NULL_TREE;
1538 if (is_overloaded_fn (fdecl))
1543 else if (is_overloaded_fn (old_value))
1546 /* It's OK to use functions from a base when there are functions with
1547 the same name already present in the current class. */;
1550 cp_error ("`%D' invalid in `%#T'", using_decl, t);
1551 cp_error_at (" because of local method `%#D' with same name",
1552 OVL_CURRENT (old_value));
1558 cp_error ("`%D' invalid in `%#T'", using_decl, t);
1559 cp_error_at (" because of local field `%#D' with same name", old_value);
1563 /* Make type T see field decl FDECL with access ACCESS.*/
1565 for (; flist; flist = OVL_NEXT (flist))
1567 add_method (t, 0, OVL_CURRENT (flist));
1568 alter_access (t, OVL_CURRENT (flist), access);
1571 alter_access (t, fdecl, access);
1574 /* Run through the base clases of T, updating
1575 CANT_HAVE_DEFAULT_CTOR_P, CANT_HAVE_CONST_CTOR_P, and
1576 NO_CONST_ASN_REF_P. Also set flag bits in T based on properties of
1580 check_bases (t, cant_have_default_ctor_p, cant_have_const_ctor_p,
1583 int *cant_have_default_ctor_p;
1584 int *cant_have_const_ctor_p;
1585 int *no_const_asn_ref_p;
1589 int seen_nearly_empty_base_p;
1592 binfos = TYPE_BINFO_BASETYPES (t);
1593 n_baseclasses = CLASSTYPE_N_BASECLASSES (t);
1594 seen_nearly_empty_base_p = 0;
1596 /* An aggregate cannot have baseclasses. */
1597 CLASSTYPE_NON_AGGREGATE (t) |= (n_baseclasses != 0);
1599 for (i = 0; i < n_baseclasses; ++i)
1604 /* Figure out what base we're looking at. */
1605 base_binfo = TREE_VEC_ELT (binfos, i);
1606 basetype = TREE_TYPE (base_binfo);
1608 /* If the type of basetype is incomplete, then we already
1609 complained about that fact (and we should have fixed it up as
1611 if (!COMPLETE_TYPE_P (basetype))
1614 /* The base type is of incomplete type. It is
1615 probably best to pretend that it does not
1617 if (i == n_baseclasses-1)
1618 TREE_VEC_ELT (binfos, i) = NULL_TREE;
1619 TREE_VEC_LENGTH (binfos) -= 1;
1621 for (j = i; j+1 < n_baseclasses; j++)
1622 TREE_VEC_ELT (binfos, j) = TREE_VEC_ELT (binfos, j+1);
1626 /* Effective C++ rule 14. We only need to check TYPE_POLYMORPHIC_P
1627 here because the case of virtual functions but non-virtual
1628 dtor is handled in finish_struct_1. */
1629 if (warn_ecpp && ! TYPE_POLYMORPHIC_P (basetype)
1630 && TYPE_HAS_DESTRUCTOR (basetype))
1631 cp_warning ("base class `%#T' has a non-virtual destructor",
1634 /* If the base class doesn't have copy constructors or
1635 assignment operators that take const references, then the
1636 derived class cannot have such a member automatically
1638 if (! TYPE_HAS_CONST_INIT_REF (basetype))
1639 *cant_have_const_ctor_p = 1;
1640 if (TYPE_HAS_ASSIGN_REF (basetype)
1641 && !TYPE_HAS_CONST_ASSIGN_REF (basetype))
1642 *no_const_asn_ref_p = 1;
1643 /* Similarly, if the base class doesn't have a default
1644 constructor, then the derived class won't have an
1645 automatically generated default constructor. */
1646 if (TYPE_HAS_CONSTRUCTOR (basetype)
1647 && ! TYPE_HAS_DEFAULT_CONSTRUCTOR (basetype))
1649 *cant_have_default_ctor_p = 1;
1650 if (! TYPE_HAS_CONSTRUCTOR (t))
1651 cp_pedwarn ("base `%T' with only non-default constructor in class without a constructor",
1655 /* If the base class is not empty or nearly empty, then this
1656 class cannot be nearly empty. */
1657 if (!CLASSTYPE_NEARLY_EMPTY_P (basetype) && !is_empty_class (basetype))
1658 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
1659 /* And if there is more than one nearly empty base, then the
1660 derived class is not nearly empty either. */
1661 else if (CLASSTYPE_NEARLY_EMPTY_P (basetype)
1662 && seen_nearly_empty_base_p)
1663 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
1664 /* If this is the first nearly empty base class, then remember
1666 else if (CLASSTYPE_NEARLY_EMPTY_P (basetype))
1667 seen_nearly_empty_base_p = 1;
1669 /* A lot of properties from the bases also apply to the derived
1671 TYPE_NEEDS_CONSTRUCTING (t) |= TYPE_NEEDS_CONSTRUCTING (basetype);
1672 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
1673 |= TYPE_HAS_NONTRIVIAL_DESTRUCTOR (basetype);
1674 TYPE_HAS_COMPLEX_ASSIGN_REF (t)
1675 |= TYPE_HAS_COMPLEX_ASSIGN_REF (basetype);
1676 TYPE_HAS_COMPLEX_INIT_REF (t) |= TYPE_HAS_COMPLEX_INIT_REF (basetype);
1677 TYPE_OVERLOADS_CALL_EXPR (t) |= TYPE_OVERLOADS_CALL_EXPR (basetype);
1678 TYPE_OVERLOADS_ARRAY_REF (t) |= TYPE_OVERLOADS_ARRAY_REF (basetype);
1679 TYPE_OVERLOADS_ARROW (t) |= TYPE_OVERLOADS_ARROW (basetype);
1680 TYPE_POLYMORPHIC_P (t) |= TYPE_POLYMORPHIC_P (basetype);
1682 /* Derived classes can implicitly become COMified if their bases
1684 if (CLASSTYPE_COM_INTERFACE (basetype))
1685 CLASSTYPE_COM_INTERFACE (t) = 1;
1686 else if (i == 0 && CLASSTYPE_COM_INTERFACE (t))
1689 ("COM interface type `%T' with non-COM leftmost base class `%T'",
1691 CLASSTYPE_COM_INTERFACE (t) = 0;
1696 /* Called via dfs_walk from mark_primary_bases. Sets
1697 BINFO_PRIMARY_MARKED_P for BINFO, if appropriate. */
1700 dfs_mark_primary_bases (binfo, data)
1707 if (!CLASSTYPE_HAS_PRIMARY_BASE_P (BINFO_TYPE (binfo)))
1710 i = CLASSTYPE_VFIELD_PARENT (BINFO_TYPE (binfo));
1711 base_binfo = BINFO_BASETYPE (binfo, i);
1713 if (!TREE_VIA_VIRTUAL (base_binfo))
1714 /* Non-virtual base classes are easy. */
1715 BINFO_PRIMARY_MARKED_P (base_binfo) = 1;
1722 shared_binfo = binfo_for_vbase (BINFO_TYPE (base_binfo), type);
1724 /* If this virtual base is not already primary somewhere else in
1725 the hiearchy, then we'll be using this copy. */
1726 if (!BINFO_VBASE_PRIMARY_P (shared_binfo))
1728 /* Make sure the CLASSTYPE_VBASECLASSES list contains the
1729 primary copy; it's the one that really exists. */
1730 if (base_binfo != shared_binfo)
1731 TREE_VALUE (purpose_member (BINFO_TYPE (base_binfo),
1732 CLASSTYPE_VBASECLASSES (type)))
1735 BINFO_VBASE_PRIMARY_P (base_binfo) = 1;
1736 BINFO_PRIMARY_MARKED_P (base_binfo) = 1;
1743 /* Set BINFO_PRIMARY_MARKED_P for all binfos in the hierarchy
1744 dominated by BINFO that are primary bases. */
1747 mark_primary_bases (type)
1752 /* Mark the TYPE_BINFO hierarchy. We need to mark primary bases in
1753 pre-order to deal with primary virtual bases. (The virtual base
1754 would be skipped if it were not marked as primary, and that
1755 requires getting to dfs_mark_primary_bases before
1756 dfs_skip_nonprimary_vbases_unmarkedp has a chance to skip the
1758 dfs_walk_real (TYPE_BINFO (type), dfs_mark_primary_bases, NULL,
1759 dfs_skip_nonprimary_vbases_unmarkedp, type);
1761 /* Now go through the virtual base classes in inheritance graph
1762 order. Any that are not already primary will need to be
1763 allocated in TYPE, and so we need to mark their primary bases. */
1764 for (vbases = TYPE_BINFO (type); vbases; vbases = TREE_CHAIN (vbases))
1768 /* Make sure that only BINFOs appear on this list.
1769 Historically, the TREE_CHAIN was used for other purposes, and
1770 we want to make sure that none of those uses remain. */
1771 my_friendly_assert (TREE_CODE (vbases) == TREE_VEC, 20000402);
1773 if (!TREE_VIA_VIRTUAL (vbases))
1776 vbase = binfo_for_vbase (BINFO_TYPE (vbases), type);
1777 if (BINFO_VBASE_PRIMARY_P (vbase))
1778 /* This virtual base was already included in the hierarchy, so
1779 there's nothing to do here. */
1782 /* Temporarily pretend that VBASE is primary so that its bases
1783 will be walked; this is the real copy of VBASE. */
1784 BINFO_PRIMARY_MARKED_P (vbase) = 1;
1786 /* Now, walk its bases. */
1787 dfs_walk_real (vbase, dfs_mark_primary_bases, NULL,
1788 dfs_skip_nonprimary_vbases_unmarkedp, type);
1790 /* VBASE wasn't really primary. */
1791 BINFO_PRIMARY_MARKED_P (vbase) = 0;
1795 /* Make the Ith baseclass of T its primary base. */
1798 set_primary_base (t, i, vfuns_p)
1805 CLASSTYPE_VFIELD_PARENT (t) = i;
1806 basetype = BINFO_TYPE (CLASSTYPE_PRIMARY_BINFO (t));
1807 TYPE_BINFO_VTABLE (t) = TYPE_BINFO_VTABLE (basetype);
1808 TYPE_BINFO_VIRTUALS (t) = TYPE_BINFO_VIRTUALS (basetype);
1809 TYPE_VFIELD (t) = TYPE_VFIELD (basetype);
1810 CLASSTYPE_RTTI (t) = CLASSTYPE_RTTI (basetype);
1811 *vfuns_p = CLASSTYPE_VSIZE (basetype);
1814 /* Returns true iff BINFO (a direct virtual base of T) is an indirect
1818 indirect_primary_base_p (t, binfo)
1824 for (i = 0; i < CLASSTYPE_N_BASECLASSES (t); ++i)
1829 /* Figure out to which type the Ith base corresponds. */
1830 type = TYPE_BINFO_BASETYPE (t, i);
1831 /* See if any of the primary bases have the same type as BINFO. */
1832 for (b = TYPE_BINFO (type); b; b = TREE_CHAIN (b))
1833 /* If this base is primary, and has the same type as BINFO,
1834 then BINFO is an indirect primary base. */
1835 if (BINFO_PRIMARY_MARKED_P (b)
1836 && same_type_p (BINFO_TYPE (b), BINFO_TYPE (binfo)))
1843 /* Determine the primary class for T. */
1846 determine_primary_base (t, vfuns_p)
1850 int i, n_baseclasses = CLASSTYPE_N_BASECLASSES (t);
1852 /* If there are no baseclasses, there is certainly no primary base. */
1853 if (n_baseclasses == 0)
1858 for (i = 0; i < n_baseclasses; i++)
1860 tree base_binfo = TREE_VEC_ELT (TYPE_BINFO_BASETYPES (t), i);
1861 tree basetype = BINFO_TYPE (base_binfo);
1863 if (TYPE_CONTAINS_VPTR_P (basetype))
1865 /* Even a virtual baseclass can contain our RTTI
1866 information. But, we prefer a non-virtual polymorphic
1868 if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t))
1869 CLASSTYPE_RTTI (t) = CLASSTYPE_RTTI (basetype);
1871 /* A virtual baseclass can't be the primary base under the
1872 old ABI. And under the new ABI we still prefer a
1873 non-virtual base. */
1874 if (TREE_VIA_VIRTUAL (base_binfo))
1877 if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t))
1879 set_primary_base (t, i, vfuns_p);
1880 CLASSTYPE_VFIELDS (t) = copy_list (CLASSTYPE_VFIELDS (basetype));
1886 /* Only add unique vfields, and flatten them out as we go. */
1887 for (vfields = CLASSTYPE_VFIELDS (basetype);
1889 vfields = TREE_CHAIN (vfields))
1890 if (VF_BINFO_VALUE (vfields) == NULL_TREE
1891 || ! TREE_VIA_VIRTUAL (VF_BINFO_VALUE (vfields)))
1892 CLASSTYPE_VFIELDS (t)
1893 = tree_cons (base_binfo,
1894 VF_BASETYPE_VALUE (vfields),
1895 CLASSTYPE_VFIELDS (t));
1897 if (!flag_new_abi && *vfuns_p == 0)
1898 set_primary_base (t, i, vfuns_p);
1903 if (!TYPE_VFIELD (t))
1904 CLASSTYPE_VFIELD_PARENT (t) = -1;
1906 /* The new ABI allows for the use of a "nearly-empty" virtual base
1907 class as the primary base class if no non-virtual polymorphic
1908 base can be found. */
1909 if (flag_new_abi && !CLASSTYPE_HAS_PRIMARY_BASE_P (t))
1911 /* If not -1, this is the index in TYPE_BINFO_BASETYPEs of the
1912 best primary base candidate we have found so far. */
1915 /* Loop over the baseclasses. */
1916 for (i = 0; i < n_baseclasses; ++i)
1918 tree base_binfo = TREE_VEC_ELT (TYPE_BINFO_BASETYPES (t), i);
1919 tree basetype = BINFO_TYPE (base_binfo);
1921 if (TREE_VIA_VIRTUAL (base_binfo)
1922 && CLASSTYPE_NEARLY_EMPTY_P (basetype))
1924 int indirect_primary_p;
1926 /* Figure out whether or not this base is an indirect
1928 indirect_primary_p = indirect_primary_base_p (t, base_binfo);
1930 /* If this is not an indirect primary base, then it's
1931 definitely our primary base. */
1932 if (!indirect_primary_p)
1937 /* If this was an indirect primary base, it's still our
1938 primary base -- unless there's another nearly-empty
1939 virtual base that isn't an indirect primary base. */
1940 else if (candidate == -1)
1945 /* If we've got a primary base, use it. */
1946 if (candidate != -1)
1948 set_primary_base (t, candidate, vfuns_p);
1949 CLASSTYPE_VFIELDS (t)
1950 = copy_list (CLASSTYPE_VFIELDS (TYPE_BINFO_BASETYPE (t,
1955 /* Mark the primary base classes at this point. */
1956 mark_primary_bases (t);
1959 /* Set memoizing fields and bits of T (and its variants) for later
1963 finish_struct_bits (t)
1966 int i, n_baseclasses = CLASSTYPE_N_BASECLASSES (t);
1968 /* Fix up variants (if any). */
1969 tree variants = TYPE_NEXT_VARIANT (t);
1972 /* These fields are in the _TYPE part of the node, not in
1973 the TYPE_LANG_SPECIFIC component, so they are not shared. */
1974 TYPE_HAS_CONSTRUCTOR (variants) = TYPE_HAS_CONSTRUCTOR (t);
1975 TYPE_HAS_DESTRUCTOR (variants) = TYPE_HAS_DESTRUCTOR (t);
1976 TYPE_NEEDS_CONSTRUCTING (variants) = TYPE_NEEDS_CONSTRUCTING (t);
1977 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (variants)
1978 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t);
1980 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (variants)
1981 = TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (t);
1982 TYPE_POLYMORPHIC_P (variants) = TYPE_POLYMORPHIC_P (t);
1983 TYPE_USES_VIRTUAL_BASECLASSES (variants) = TYPE_USES_VIRTUAL_BASECLASSES (t);
1984 /* Copy whatever these are holding today. */
1985 TYPE_MIN_VALUE (variants) = TYPE_MIN_VALUE (t);
1986 TYPE_MAX_VALUE (variants) = TYPE_MAX_VALUE (t);
1987 TYPE_FIELDS (variants) = TYPE_FIELDS (t);
1988 TYPE_SIZE (variants) = TYPE_SIZE (t);
1989 TYPE_SIZE_UNIT (variants) = TYPE_SIZE_UNIT (t);
1990 variants = TYPE_NEXT_VARIANT (variants);
1993 if (n_baseclasses && TYPE_POLYMORPHIC_P (t))
1994 /* For a class w/o baseclasses, `finish_struct' has set
1995 CLASS_TYPE_ABSTRACT_VIRTUALS correctly (by
1996 definition). Similarly for a class whose base classes do not
1997 have vtables. When neither of these is true, we might have
1998 removed abstract virtuals (by providing a definition), added
1999 some (by declaring new ones), or redeclared ones from a base
2000 class. We need to recalculate what's really an abstract virtual
2001 at this point (by looking in the vtables). */
2002 get_pure_virtuals (t);
2006 /* Notice whether this class has type conversion functions defined. */
2007 tree binfo = TYPE_BINFO (t);
2008 tree binfos = BINFO_BASETYPES (binfo);
2011 for (i = n_baseclasses-1; i >= 0; i--)
2013 basetype = BINFO_TYPE (TREE_VEC_ELT (binfos, i));
2015 TYPE_HAS_CONVERSION (t) |= TYPE_HAS_CONVERSION (basetype);
2019 /* If this type has a copy constructor, force its mode to be BLKmode, and
2020 force its TREE_ADDRESSABLE bit to be nonzero. This will cause it to
2021 be passed by invisible reference and prevent it from being returned in
2024 Also do this if the class has BLKmode but can still be returned in
2025 registers, since function_cannot_inline_p won't let us inline
2026 functions returning such a type. This affects the HP-PA. */
2027 if (! TYPE_HAS_TRIVIAL_INIT_REF (t)
2028 || (TYPE_MODE (t) == BLKmode && ! aggregate_value_p (t)
2029 && CLASSTYPE_NON_AGGREGATE (t)))
2032 DECL_MODE (TYPE_MAIN_DECL (t)) = BLKmode;
2033 for (variants = t; variants; variants = TYPE_NEXT_VARIANT (variants))
2035 TYPE_MODE (variants) = BLKmode;
2036 TREE_ADDRESSABLE (variants) = 1;
2041 /* Issue warnings about T having private constructors, but no friends,
2044 HAS_NONPRIVATE_METHOD is nonzero if T has any non-private methods or
2045 static members. HAS_NONPRIVATE_STATIC_FN is nonzero if T has any
2046 non-private static member functions. */
2049 maybe_warn_about_overly_private_class (t)
2052 int has_member_fn = 0;
2053 int has_nonprivate_method = 0;
2056 if (!warn_ctor_dtor_privacy
2057 /* If the class has friends, those entities might create and
2058 access instances, so we should not warn. */
2059 || (CLASSTYPE_FRIEND_CLASSES (t)
2060 || DECL_FRIENDLIST (TYPE_MAIN_DECL (t)))
2061 /* We will have warned when the template was declared; there's
2062 no need to warn on every instantiation. */
2063 || CLASSTYPE_TEMPLATE_INSTANTIATION (t))
2064 /* There's no reason to even consider warning about this
2068 /* We only issue one warning, if more than one applies, because
2069 otherwise, on code like:
2072 // Oops - forgot `public:'
2078 we warn several times about essentially the same problem. */
2080 /* Check to see if all (non-constructor, non-destructor) member
2081 functions are private. (Since there are no friends or
2082 non-private statics, we can't ever call any of the private member
2084 for (fn = TYPE_METHODS (t); fn; fn = TREE_CHAIN (fn))
2085 /* We're not interested in compiler-generated methods; they don't
2086 provide any way to call private members. */
2087 if (!DECL_ARTIFICIAL (fn))
2089 if (!TREE_PRIVATE (fn))
2091 if (DECL_STATIC_FUNCTION_P (fn))
2092 /* A non-private static member function is just like a
2093 friend; it can create and invoke private member
2094 functions, and be accessed without a class
2098 has_nonprivate_method = 1;
2101 else if (!DECL_CONSTRUCTOR_P (fn) && !DECL_DESTRUCTOR_P (fn))
2105 if (!has_nonprivate_method && has_member_fn)
2107 /* There are no non-private methods, and there's at least one
2108 private member function that isn't a constructor or
2109 destructor. (If all the private members are
2110 constructors/destructors we want to use the code below that
2111 issues error messages specifically referring to
2112 constructors/destructors.) */
2114 tree binfos = BINFO_BASETYPES (TYPE_BINFO (t));
2115 for (i = 0; i < CLASSTYPE_N_BASECLASSES (t); i++)
2116 if (TREE_VIA_PUBLIC (TREE_VEC_ELT (binfos, i))
2117 || TREE_VIA_PROTECTED (TREE_VEC_ELT (binfos, i)))
2119 has_nonprivate_method = 1;
2122 if (!has_nonprivate_method)
2124 cp_warning ("all member functions in class `%T' are private", t);
2129 /* Even if some of the member functions are non-private, the class
2130 won't be useful for much if all the constructors or destructors
2131 are private: such an object can never be created or destroyed. */
2132 if (TYPE_HAS_DESTRUCTOR (t))
2134 tree dtor = TREE_VEC_ELT (CLASSTYPE_METHOD_VEC (t), 1);
2136 if (TREE_PRIVATE (dtor))
2138 cp_warning ("`%#T' only defines a private destructor and has no friends",
2144 if (TYPE_HAS_CONSTRUCTOR (t))
2146 int nonprivate_ctor = 0;
2148 /* If a non-template class does not define a copy
2149 constructor, one is defined for it, enabling it to avoid
2150 this warning. For a template class, this does not
2151 happen, and so we would normally get a warning on:
2153 template <class T> class C { private: C(); };
2155 To avoid this asymmetry, we check TYPE_HAS_INIT_REF. All
2156 complete non-template or fully instantiated classes have this
2158 if (!TYPE_HAS_INIT_REF (t))
2159 nonprivate_ctor = 1;
2161 for (fn = TREE_VEC_ELT (CLASSTYPE_METHOD_VEC (t), 0);
2165 tree ctor = OVL_CURRENT (fn);
2166 /* Ideally, we wouldn't count copy constructors (or, in
2167 fact, any constructor that takes an argument of the
2168 class type as a parameter) because such things cannot
2169 be used to construct an instance of the class unless
2170 you already have one. But, for now at least, we're
2172 if (! TREE_PRIVATE (ctor))
2174 nonprivate_ctor = 1;
2179 if (nonprivate_ctor == 0)
2181 cp_warning ("`%#T' only defines private constructors and has no friends",
2188 /* Function to help qsort sort FIELD_DECLs by name order. */
2191 field_decl_cmp (x, y)
2194 if (DECL_NAME (*x) == DECL_NAME (*y))
2195 /* A nontype is "greater" than a type. */
2196 return DECL_DECLARES_TYPE_P (*y) - DECL_DECLARES_TYPE_P (*x);
2197 if (DECL_NAME (*x) == NULL_TREE)
2199 if (DECL_NAME (*y) == NULL_TREE)
2201 if (DECL_NAME (*x) < DECL_NAME (*y))
2206 /* Comparison function to compare two TYPE_METHOD_VEC entries by name. */
2209 method_name_cmp (m1, m2)
2210 const tree *m1, *m2;
2212 if (*m1 == NULL_TREE && *m2 == NULL_TREE)
2214 if (*m1 == NULL_TREE)
2216 if (*m2 == NULL_TREE)
2218 if (DECL_NAME (OVL_CURRENT (*m1)) < DECL_NAME (OVL_CURRENT (*m2)))
2223 /* Warn about duplicate methods in fn_fields. Also compact method
2224 lists so that lookup can be made faster.
2226 Data Structure: List of method lists. The outer list is a
2227 TREE_LIST, whose TREE_PURPOSE field is the field name and the
2228 TREE_VALUE is the DECL_CHAIN of the FUNCTION_DECLs. TREE_CHAIN
2229 links the entire list of methods for TYPE_METHODS. Friends are
2230 chained in the same way as member functions (? TREE_CHAIN or
2231 DECL_CHAIN), but they live in the TREE_TYPE field of the outer
2232 list. That allows them to be quickly deleted, and requires no
2235 Sort methods that are not special (i.e., constructors, destructors,
2236 and type conversion operators) so that we can find them faster in
2240 finish_struct_methods (t)
2247 if (!TYPE_METHODS (t))
2249 /* Clear these for safety; perhaps some parsing error could set
2250 these incorrectly. */
2251 TYPE_HAS_CONSTRUCTOR (t) = 0;
2252 TYPE_HAS_DESTRUCTOR (t) = 0;
2253 CLASSTYPE_METHOD_VEC (t) = NULL_TREE;
2257 method_vec = CLASSTYPE_METHOD_VEC (t);
2258 my_friendly_assert (method_vec != NULL_TREE, 19991215);
2259 len = TREE_VEC_LENGTH (method_vec);
2261 /* First fill in entry 0 with the constructors, entry 1 with destructors,
2262 and the next few with type conversion operators (if any). */
2263 for (fn_fields = TYPE_METHODS (t); fn_fields;
2264 fn_fields = TREE_CHAIN (fn_fields))
2265 /* Clear out this flag. */
2266 DECL_IN_AGGR_P (fn_fields) = 0;
2268 if (TYPE_HAS_DESTRUCTOR (t) && !CLASSTYPE_DESTRUCTORS (t))
2269 /* We thought there was a destructor, but there wasn't. Some
2270 parse errors cause this anomalous situation. */
2271 TYPE_HAS_DESTRUCTOR (t) = 0;
2273 /* Issue warnings about private constructors and such. If there are
2274 no methods, then some public defaults are generated. */
2275 maybe_warn_about_overly_private_class (t);
2277 /* Now sort the methods. */
2278 while (len > 2 && TREE_VEC_ELT (method_vec, len-1) == NULL_TREE)
2280 TREE_VEC_LENGTH (method_vec) = len;
2282 /* The type conversion ops have to live at the front of the vec, so we
2284 for (slot = 2; slot < len; ++slot)
2286 tree fn = TREE_VEC_ELT (method_vec, slot);
2288 if (!DECL_CONV_FN_P (OVL_CURRENT (fn)))
2292 qsort (&TREE_VEC_ELT (method_vec, slot), len-slot, sizeof (tree),
2293 (int (*)(const void *, const void *))method_name_cmp);
2296 /* Emit error when a duplicate definition of a type is seen. Patch up. */
2299 duplicate_tag_error (t)
2302 cp_error ("redefinition of `%#T'", t);
2303 cp_error_at ("previous definition here", t);
2305 /* Pretend we haven't defined this type. */
2307 /* All of the component_decl's were TREE_CHAINed together in the parser.
2308 finish_struct_methods walks these chains and assembles all methods with
2309 the same base name into DECL_CHAINs. Now we don't need the parser chains
2310 anymore, so we unravel them. */
2312 /* This used to be in finish_struct, but it turns out that the
2313 TREE_CHAIN is used by dbxout_type_methods and perhaps some other
2315 if (CLASSTYPE_METHOD_VEC (t))
2317 tree method_vec = CLASSTYPE_METHOD_VEC (t);
2318 int i, len = TREE_VEC_LENGTH (method_vec);
2319 for (i = 0; i < len; i++)
2321 tree unchain = TREE_VEC_ELT (method_vec, i);
2322 while (unchain != NULL_TREE)
2324 TREE_CHAIN (OVL_CURRENT (unchain)) = NULL_TREE;
2325 unchain = OVL_NEXT (unchain);
2330 if (TYPE_LANG_SPECIFIC (t))
2332 tree binfo = TYPE_BINFO (t);
2333 int interface_only = CLASSTYPE_INTERFACE_ONLY (t);
2334 int interface_unknown = CLASSTYPE_INTERFACE_UNKNOWN (t);
2335 tree template_info = CLASSTYPE_TEMPLATE_INFO (t);
2336 int use_template = CLASSTYPE_USE_TEMPLATE (t);
2338 bzero ((char *) TYPE_LANG_SPECIFIC (t), sizeof (struct lang_type));
2339 BINFO_BASETYPES(binfo) = NULL_TREE;
2341 TYPE_BINFO (t) = binfo;
2342 CLASSTYPE_INTERFACE_ONLY (t) = interface_only;
2343 SET_CLASSTYPE_INTERFACE_UNKNOWN_X (t, interface_unknown);
2344 TYPE_REDEFINED (t) = 1;
2345 CLASSTYPE_TEMPLATE_INFO (t) = template_info;
2346 CLASSTYPE_USE_TEMPLATE (t) = use_template;
2348 TYPE_SIZE (t) = NULL_TREE;
2349 TYPE_MODE (t) = VOIDmode;
2350 TYPE_FIELDS (t) = NULL_TREE;
2351 TYPE_METHODS (t) = NULL_TREE;
2352 TYPE_VFIELD (t) = NULL_TREE;
2353 TYPE_CONTEXT (t) = NULL_TREE;
2354 TYPE_NONCOPIED_PARTS (t) = NULL_TREE;
2357 /* Make the BINFO's vtablehave N entries, including RTTI entries,
2358 vbase and vcall offsets, etc. Set its type and call the backend
2362 layout_vtable_decl (binfo, n)
2370 itype = size_int (n);
2371 atype = build_cplus_array_type (vtable_entry_type,
2372 build_index_type (itype));
2373 layout_type (atype);
2375 /* We may have to grow the vtable. */
2376 vtable = get_vtbl_decl_for_binfo (binfo);
2377 if (!same_type_p (TREE_TYPE (vtable), atype))
2379 TREE_TYPE (vtable) = atype;
2380 DECL_SIZE (vtable) = DECL_SIZE_UNIT (vtable) = NULL_TREE;
2381 layout_decl (vtable, 0);
2383 /* At one time the vtable info was grabbed 2 words at a time. This
2384 fails on Sparc unless you have 8-byte alignment. */
2385 DECL_ALIGN (vtable) = MAX (TYPE_ALIGN (double_type_node),
2386 DECL_ALIGN (vtable));
2390 /* True iff FNDECL and BASE_FNDECL (both non-static member functions)
2391 have the same signature. */
2394 same_signature_p (fndecl, base_fndecl)
2395 tree fndecl, base_fndecl;
2397 /* One destructor overrides another if they are the same kind of
2399 if (DECL_DESTRUCTOR_P (base_fndecl) && DECL_DESTRUCTOR_P (fndecl)
2400 && special_function_p (base_fndecl) == special_function_p (fndecl))
2402 /* But a non-destructor never overrides a destructor, nor vice
2403 versa, nor do different kinds of destructors override
2404 one-another. For example, a complete object destructor does not
2405 override a deleting destructor. */
2406 if (DECL_DESTRUCTOR_P (base_fndecl) || DECL_DESTRUCTOR_P (fndecl))
2409 if (DECL_NAME (fndecl) == DECL_NAME (base_fndecl))
2411 tree types, base_types;
2412 types = TYPE_ARG_TYPES (TREE_TYPE (fndecl));
2413 base_types = TYPE_ARG_TYPES (TREE_TYPE (base_fndecl));
2414 if ((TYPE_QUALS (TREE_TYPE (TREE_VALUE (base_types)))
2415 == TYPE_QUALS (TREE_TYPE (TREE_VALUE (types))))
2416 && compparms (TREE_CHAIN (base_types), TREE_CHAIN (types)))
2422 typedef struct find_final_overrider_data_s {
2423 /* The function for which we are trying to find a final overrider. */
2425 /* The base class in which the function was declared. */
2426 tree declaring_base;
2427 /* The most derived class in the hierarchy. */
2428 tree most_derived_type;
2429 /* The final overriding function. */
2431 /* The BINFO for the class in which the final overriding function
2433 tree overriding_base;
2434 } find_final_overrider_data;
2436 /* Called from find_final_overrider via dfs_walk. */
2439 dfs_find_final_overrider (binfo, data)
2443 find_final_overrider_data *ffod = (find_final_overrider_data *) data;
2445 if (same_type_p (BINFO_TYPE (binfo),
2446 BINFO_TYPE (ffod->declaring_base))
2447 && tree_int_cst_equal (BINFO_OFFSET (binfo),
2448 BINFO_OFFSET (ffod->declaring_base)))
2453 /* We haven't found an overrider yet. */
2455 /* We've found a path to the declaring base. Walk down the path
2456 looking for an overrider for FN. */
2457 for (path = reverse_path (binfo);
2459 path = TREE_CHAIN (path))
2461 for (method = TYPE_METHODS (BINFO_TYPE (TREE_VALUE (path)));
2463 method = TREE_CHAIN (method))
2464 if (DECL_VIRTUAL_P (method)
2465 && same_signature_p (method, ffod->fn))
2472 /* If we found an overrider, record the overriding function, and
2473 the base from which it came. */
2478 /* Assume the path is non-virtual. See if there are any base from
2479 (but not including) the overrider up to and including the
2480 base where the function is defined. */
2481 for (base = TREE_CHAIN (path); base; base = TREE_CHAIN (base))
2482 if (TREE_VIA_VIRTUAL (TREE_VALUE (base)))
2484 base = ffod->declaring_base;
2485 while (BINFO_PRIMARY_MARKED_P (base))
2487 BINFO_OVERRIDE_ALONG_VIRTUAL_PATH_P (base) = 1;
2488 base = BINFO_INHERITANCE_CHAIN (base);
2490 BINFO_OVERRIDE_ALONG_VIRTUAL_PATH_P (base) = 1;
2494 if (ffod->overriding_fn && ffod->overriding_fn != method)
2496 /* We've found a different overrider along a different
2497 path. That can be OK if the new one overrides the
2500 struct S { virtual void f(); };
2501 struct T : public virtual S { virtual void f(); };
2502 struct U : public virtual S, public virtual T {};
2504 Here `T::f' is the final overrider for `S::f'. */
2505 if (strictly_overrides (method, ffod->overriding_fn))
2507 ffod->overriding_fn = method;
2508 ffod->overriding_base = TREE_VALUE (path);
2510 else if (!strictly_overrides (ffod->overriding_fn, method))
2512 cp_error ("no unique final overrider for `%D' in `%T'",
2513 ffod->most_derived_type,
2515 cp_error ("candidates are: `%#D'", ffod->overriding_fn);
2516 cp_error (" `%#D'", method);
2517 return error_mark_node;
2520 else if (ffod->overriding_base
2521 && (!tree_int_cst_equal
2522 (BINFO_OFFSET (TREE_VALUE (path)),
2523 BINFO_OFFSET (ffod->overriding_base))))
2525 /* We've found two instances of the same base that
2526 provide overriders. */
2527 cp_error ("no unique final overrider for `%D' since there two instances of `%T' in `%T'",
2529 BINFO_TYPE (ffod->overriding_base),
2530 ffod->most_derived_type);
2531 return error_mark_node;
2535 ffod->overriding_fn = method;
2536 ffod->overriding_base = TREE_VALUE (path);
2544 /* Returns a TREE_LIST whose TREE_PURPOSE is the final overrider for
2545 FN and whose TREE_VALUE is the binfo for the base where the
2546 overriding occurs. BINFO (in the hierarchy dominated by T) is the
2547 base object in which FN is declared. */
2550 find_final_overrider (t, binfo, fn)
2555 find_final_overrider_data ffod;
2557 /* Getting this right is a little tricky. This is legal:
2559 struct S { virtual void f (); };
2560 struct T { virtual void f (); };
2561 struct U : public S, public T { };
2563 even though calling `f' in `U' is ambiguous. But,
2565 struct R { virtual void f(); };
2566 struct S : virtual public R { virtual void f (); };
2567 struct T : virtual public R { virtual void f (); };
2568 struct U : public S, public T { };
2570 is not -- there's no way to decide whether to put `S::f' or
2571 `T::f' in the vtable for `R'.
2573 The solution is to look at all paths to BINFO. If we find
2574 different overriders along any two, then there is a problem. */
2576 ffod.declaring_base = binfo;
2577 ffod.most_derived_type = t;
2578 ffod.overriding_fn = NULL_TREE;
2579 ffod.overriding_base = NULL_TREE;
2581 if (dfs_walk (TYPE_BINFO (t),
2582 dfs_find_final_overrider,
2585 return error_mark_node;
2587 return build_tree_list (ffod.overriding_fn, ffod.overriding_base);
2590 /* Update a entry in the vtable for BINFO, which is in the hierarchy
2591 dominated by T. FN has been overridden in BINFO; VIRTUALS points
2592 to the corresponding position in the BINFO_VIRTUALS list. */
2595 update_vtable_entry_for_fn (t, binfo, fn, virtuals)
2605 int generate_thunk_with_vtable_p;
2607 /* Find the function which originally caused this vtable
2608 entry to be present. */
2615 primary_base = BINFO_PRIMARY_BINFO (b);
2619 for (f = BINFO_VIRTUALS (TYPE_BINFO (BINFO_TYPE (primary_base)));
2622 if (same_signature_p (BV_FN (f), fn))
2632 /* Find the final overrider. */
2633 overrider = find_final_overrider (t, b, fn);
2634 if (overrider == error_mark_node)
2637 /* Compute the constant adjustment to the `this' pointer. The
2638 `this' pointer, when this function is called, will point at the
2639 class whose vtable this is. */
2640 delta = size_binop (PLUS_EXPR,
2641 get_derived_offset (binfo,
2642 DECL_VIRTUAL_CONTEXT (fn)),
2643 BINFO_OFFSET (binfo));
2645 /* Assume that we will produce a thunk that convert all the way to
2646 the final overrider, and not to an intermediate virtual base. */
2647 virtual_base = NULL_TREE;
2649 /* Assume that we will always generate thunks with the vtables that
2651 generate_thunk_with_vtable_p = 1;
2653 /* Under the new ABI, we will convert to an intermediate virtual
2654 base first, and then use the vcall offset located there to finish
2660 /* If we find BINFO, then the final overrider is in a class
2661 derived from BINFO, so the thunks can be generated with
2662 the final overrider. */
2664 && same_type_p (BINFO_TYPE (b), BINFO_TYPE (binfo)))
2665 generate_thunk_with_vtable_p = 0;
2667 /* If we find the final overrider, then we can stop
2669 if (same_type_p (BINFO_TYPE (b),
2670 BINFO_TYPE (TREE_VALUE (overrider))))
2673 /* If we find a virtual base, and we haven't yet found the
2674 overrider, then there is a virtual base between the
2675 declaring base and the final overrider. */
2676 if (!virtual_base && TREE_VIA_VIRTUAL (b))
2678 generate_thunk_with_vtable_p = 1;
2682 b = BINFO_INHERITANCE_CHAIN (b);
2686 virtual_base = NULL_TREE;
2689 /* The `this' pointer needs to be adjusted to the nearest virtual
2691 delta = size_diffop (BINFO_OFFSET (virtual_base), delta);
2693 /* The `this' pointer needs to be adjusted from pointing to
2694 BINFO to pointing at the base where the final overrider
2696 delta = size_diffop (BINFO_OFFSET (TREE_VALUE (overrider)), delta);
2698 modify_vtable_entry (t,
2700 TREE_PURPOSE (overrider),
2705 BV_USE_VCALL_INDEX_P (*virtuals) = 1;
2706 if (generate_thunk_with_vtable_p)
2707 BV_GENERATE_THUNK_WITH_VTABLE_P (*virtuals) = 1;
2710 /* Called from modify_all_vtables via dfs_walk. */
2713 dfs_modify_vtables (binfo, data)
2717 if (/* There's no need to modify the vtable for a primary base;
2718 we're not going to use that vtable anyhow. */
2719 !BINFO_PRIMARY_MARKED_P (binfo)
2720 /* Similarly, a base without a vtable needs no modification. */
2721 && CLASSTYPE_VFIELDS (BINFO_TYPE (binfo)))
2729 /* If we're supporting RTTI then we always need a new vtable to
2730 point to the RTTI information. Under the new ABI we may need
2731 a new vtable to contain vcall and vbase offsets. */
2732 if (flag_rtti || flag_new_abi)
2733 make_new_vtable (t, binfo);
2735 /* Now, go through each of the virtual functions in the virtual
2736 function table for BINFO. Find the final overrider, and
2737 update the BINFO_VIRTUALS list appropriately. */
2738 for (virtuals = BINFO_VIRTUALS (binfo),
2739 old_virtuals = BINFO_VIRTUALS (TYPE_BINFO (BINFO_TYPE (binfo)));
2741 virtuals = TREE_CHAIN (virtuals),
2742 old_virtuals = TREE_CHAIN (old_virtuals))
2743 update_vtable_entry_for_fn (t,
2745 BV_FN (old_virtuals),
2749 SET_BINFO_MARKED (binfo);
2754 /* Update all of the primary and secondary vtables for T. Create new
2755 vtables as required, and initialize their RTTI information. Each
2756 of the functions in OVERRIDDEN_VIRTUALS overrides a virtual
2757 function from a base class; find and modify the appropriate entries
2758 to point to the overriding functions. Returns a list, in
2759 declaration order, of the functions that are overridden in this
2760 class, but do not appear in the primary base class vtable, and
2761 which should therefore be appended to the end of the vtable for T. */
2764 modify_all_vtables (t, vfuns_p, overridden_virtuals)
2767 tree overridden_virtuals;
2771 binfo = TYPE_BINFO (t);
2773 /* Update all of the vtables. */
2776 dfs_unmarked_real_bases_queue_p,
2778 dfs_walk (binfo, dfs_unmark, dfs_marked_real_bases_queue_p, t);
2780 /* If we should include overriding functions for secondary vtables
2781 in our primary vtable, add them now. */
2782 if (all_overridden_vfuns_in_vtables_p ())
2784 tree *fnsp = &overridden_virtuals;
2788 tree fn = TREE_VALUE (*fnsp);
2790 if (!BINFO_VIRTUALS (binfo)
2791 || !value_member (fn, BINFO_VIRTUALS (binfo)))
2793 /* Set the vtable index. */
2794 set_vindex (t, fn, vfuns_p);
2795 /* We don't need to convert to a base class when calling
2797 DECL_VIRTUAL_CONTEXT (fn) = t;
2799 /* We don't need to adjust the `this' pointer when
2800 calling this function. */
2801 BV_DELTA (*fnsp) = integer_zero_node;
2802 BV_VCALL_INDEX (*fnsp) = NULL_TREE;
2804 /* This is an overridden function not already in our
2806 fnsp = &TREE_CHAIN (*fnsp);
2809 /* We've already got an entry for this function. Skip
2811 *fnsp = TREE_CHAIN (*fnsp);
2815 overridden_virtuals = NULL_TREE;
2817 return overridden_virtuals;
2820 /* Here, we already know that they match in every respect.
2821 All we have to check is where they had their declarations. */
2824 strictly_overrides (fndecl1, fndecl2)
2825 tree fndecl1, fndecl2;
2827 int distance = get_base_distance (DECL_CONTEXT (fndecl2),
2828 DECL_CONTEXT (fndecl1),
2830 if (distance == -2 || distance > 0)
2835 /* Get the base virtual function declarations in T that are either
2836 overridden or hidden by FNDECL as a list. We set TREE_PURPOSE with
2837 the overrider/hider. */
2840 get_basefndecls (fndecl, t)
2843 tree methods = TYPE_METHODS (t);
2844 tree base_fndecls = NULL_TREE;
2845 tree binfos = BINFO_BASETYPES (TYPE_BINFO (t));
2846 int i, n_baseclasses = binfos ? TREE_VEC_LENGTH (binfos) : 0;
2850 if (TREE_CODE (methods) == FUNCTION_DECL
2851 && DECL_VINDEX (methods) != NULL_TREE
2852 && DECL_NAME (fndecl) == DECL_NAME (methods))
2853 base_fndecls = tree_cons (fndecl, methods, base_fndecls);
2855 methods = TREE_CHAIN (methods);
2859 return base_fndecls;
2861 for (i = 0; i < n_baseclasses; i++)
2863 tree base_binfo = TREE_VEC_ELT (binfos, i);
2864 tree basetype = BINFO_TYPE (base_binfo);
2866 base_fndecls = chainon (get_basefndecls (fndecl, basetype),
2870 return base_fndecls;
2873 /* Mark the functions that have been hidden with their overriders.
2874 Since we start out with all functions already marked with a hider,
2875 no need to mark functions that are just hidden.
2877 Subroutine of warn_hidden. */
2880 mark_overriders (fndecl, base_fndecls)
2881 tree fndecl, base_fndecls;
2883 for (; base_fndecls; base_fndecls = TREE_CHAIN (base_fndecls))
2884 if (same_signature_p (fndecl, TREE_VALUE (base_fndecls)))
2885 TREE_PURPOSE (base_fndecls) = fndecl;
2888 /* If this declaration supersedes the declaration of
2889 a method declared virtual in the base class, then
2890 mark this field as being virtual as well. */
2893 check_for_override (decl, ctype)
2896 tree binfos = BINFO_BASETYPES (TYPE_BINFO (ctype));
2897 int i, n_baselinks = binfos ? TREE_VEC_LENGTH (binfos) : 0;
2898 int virtualp = DECL_VIRTUAL_P (decl);
2899 int found_overriden_fn = 0;
2901 for (i = 0; i < n_baselinks; i++)
2903 tree base_binfo = TREE_VEC_ELT (binfos, i);
2904 if (TYPE_POLYMORPHIC_P (BINFO_TYPE (base_binfo)))
2906 tree tmp = get_matching_virtual
2907 (base_binfo, decl, DECL_DESTRUCTOR_P (decl));
2909 if (tmp && !found_overriden_fn)
2911 /* If this function overrides some virtual in some base
2912 class, then the function itself is also necessarily
2913 virtual, even if the user didn't explicitly say so. */
2914 DECL_VIRTUAL_P (decl) = 1;
2916 /* The TMP we really want is the one from the deepest
2917 baseclass on this path, taking care not to
2918 duplicate if we have already found it (via another
2919 path to its virtual baseclass. */
2920 if (TREE_CODE (TREE_TYPE (decl)) == FUNCTION_TYPE)
2922 cp_error_at ("`static %#D' cannot be declared", decl);
2923 cp_error_at (" since `virtual %#D' declared in base class",
2929 /* Set DECL_VINDEX to a value that is neither an
2930 INTEGER_CST nor the error_mark_node so that
2931 add_virtual_function will realize this is an
2932 overridden function. */
2934 = tree_cons (tmp, NULL_TREE, DECL_VINDEX (decl));
2936 /* We now know that DECL overrides something,
2937 which is all that is important. But, we must
2938 continue to iterate through all the base-classes
2939 in order to allow get_matching_virtual to check for
2940 various illegal overrides. */
2941 found_overriden_fn = 1;
2947 if (DECL_VINDEX (decl) == NULL_TREE)
2948 DECL_VINDEX (decl) = error_mark_node;
2949 IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)) = 1;
2953 /* Warn about hidden virtual functions that are not overridden in t.
2954 We know that constructors and destructors don't apply. */
2960 tree method_vec = CLASSTYPE_METHOD_VEC (t);
2961 int n_methods = method_vec ? TREE_VEC_LENGTH (method_vec) : 0;
2964 /* We go through each separately named virtual function. */
2965 for (i = 2; i < n_methods && TREE_VEC_ELT (method_vec, i); ++i)
2967 tree fns = TREE_VEC_ELT (method_vec, i);
2968 tree fndecl = NULL_TREE;
2970 tree base_fndecls = NULL_TREE;
2971 tree binfos = BINFO_BASETYPES (TYPE_BINFO (t));
2972 int i, n_baseclasses = binfos ? TREE_VEC_LENGTH (binfos) : 0;
2974 /* First see if we have any virtual functions in this batch. */
2975 for (; fns; fns = OVL_NEXT (fns))
2977 fndecl = OVL_CURRENT (fns);
2978 if (DECL_VINDEX (fndecl))
2982 if (fns == NULL_TREE)
2985 /* First we get a list of all possible functions that might be
2986 hidden from each base class. */
2987 for (i = 0; i < n_baseclasses; i++)
2989 tree base_binfo = TREE_VEC_ELT (binfos, i);
2990 tree basetype = BINFO_TYPE (base_binfo);
2992 base_fndecls = chainon (get_basefndecls (fndecl, basetype),
2996 fns = OVL_NEXT (fns);
2998 /* ...then mark up all the base functions with overriders, preferring
2999 overriders to hiders. */
3001 for (; fns; fns = OVL_NEXT (fns))
3003 fndecl = OVL_CURRENT (fns);
3004 if (DECL_VINDEX (fndecl))
3005 mark_overriders (fndecl, base_fndecls);
3008 /* Now give a warning for all base functions without overriders,
3009 as they are hidden. */
3010 for (; base_fndecls; base_fndecls = TREE_CHAIN (base_fndecls))
3011 if (!same_signature_p (TREE_PURPOSE (base_fndecls),
3012 TREE_VALUE (base_fndecls)))
3014 /* Here we know it is a hider, and no overrider exists. */
3015 cp_warning_at ("`%D' was hidden", TREE_VALUE (base_fndecls));
3016 cp_warning_at (" by `%D'", TREE_PURPOSE (base_fndecls));
3021 /* Check for things that are invalid. There are probably plenty of other
3022 things we should check for also. */
3025 finish_struct_anon (t)
3030 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
3032 if (TREE_STATIC (field))
3034 if (TREE_CODE (field) != FIELD_DECL)
3037 if (DECL_NAME (field) == NULL_TREE
3038 && ANON_AGGR_TYPE_P (TREE_TYPE (field)))
3040 tree elt = TYPE_FIELDS (TREE_TYPE (field));
3041 for (; elt; elt = TREE_CHAIN (elt))
3043 if (DECL_ARTIFICIAL (elt))
3046 if (DECL_NAME (elt) == constructor_name (t))
3047 cp_pedwarn_at ("ISO C++ forbids member `%D' with same name as enclosing class",
3050 if (TREE_CODE (elt) != FIELD_DECL)
3052 cp_pedwarn_at ("`%#D' invalid; an anonymous union can only have non-static data members",
3057 if (TREE_PRIVATE (elt))
3058 cp_pedwarn_at ("private member `%#D' in anonymous union",
3060 else if (TREE_PROTECTED (elt))
3061 cp_pedwarn_at ("protected member `%#D' in anonymous union",
3064 TREE_PRIVATE (elt) = TREE_PRIVATE (field);
3065 TREE_PROTECTED (elt) = TREE_PROTECTED (field);
3071 /* Create default constructors, assignment operators, and so forth for
3072 the type indicated by T, if they are needed.
3073 CANT_HAVE_DEFAULT_CTOR, CANT_HAVE_CONST_CTOR, and
3074 CANT_HAVE_CONST_ASSIGNMENT are nonzero if, for whatever reason, the
3075 class cannot have a default constructor, copy constructor taking a
3076 const reference argument, or an assignment operator taking a const
3077 reference, respectively. If a virtual destructor is created, its
3078 DECL is returned; otherwise the return value is NULL_TREE. */
3081 add_implicitly_declared_members (t, cant_have_default_ctor,
3082 cant_have_const_cctor,
3083 cant_have_const_assignment)
3085 int cant_have_default_ctor;
3086 int cant_have_const_cctor;
3087 int cant_have_const_assignment;
3090 tree implicit_fns = NULL_TREE;
3091 tree virtual_dtor = NULL_TREE;
3095 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t) && !TYPE_HAS_DESTRUCTOR (t))
3097 default_fn = implicitly_declare_fn (sfk_destructor, t, /*const_p=*/0);
3098 check_for_override (default_fn, t);
3100 /* If we couldn't make it work, then pretend we didn't need it. */
3101 if (default_fn == void_type_node)
3102 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t) = 0;
3105 TREE_CHAIN (default_fn) = implicit_fns;
3106 implicit_fns = default_fn;
3108 if (DECL_VINDEX (default_fn))
3109 virtual_dtor = default_fn;
3113 /* Any non-implicit destructor is non-trivial. */
3114 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t) |= TYPE_HAS_DESTRUCTOR (t);
3116 /* Default constructor. */
3117 if (! TYPE_HAS_CONSTRUCTOR (t) && ! cant_have_default_ctor)
3119 default_fn = implicitly_declare_fn (sfk_constructor, t, /*const_p=*/0);
3120 TREE_CHAIN (default_fn) = implicit_fns;
3121 implicit_fns = default_fn;
3124 /* Copy constructor. */
3125 if (! TYPE_HAS_INIT_REF (t) && ! TYPE_FOR_JAVA (t))
3127 /* ARM 12.18: You get either X(X&) or X(const X&), but
3130 = implicitly_declare_fn (sfk_copy_constructor, t,
3131 /*const_p=*/!cant_have_const_cctor);
3132 TREE_CHAIN (default_fn) = implicit_fns;
3133 implicit_fns = default_fn;
3136 /* Assignment operator. */
3137 if (! TYPE_HAS_ASSIGN_REF (t) && ! TYPE_FOR_JAVA (t))
3140 = implicitly_declare_fn (sfk_assignment_operator, t,
3141 /*const_p=*/!cant_have_const_assignment);
3142 TREE_CHAIN (default_fn) = implicit_fns;
3143 implicit_fns = default_fn;
3146 /* Now, hook all of the new functions on to TYPE_METHODS,
3147 and add them to the CLASSTYPE_METHOD_VEC. */
3148 for (f = &implicit_fns; *f; f = &TREE_CHAIN (*f))
3149 add_method (t, 0, *f);
3150 *f = TYPE_METHODS (t);
3151 TYPE_METHODS (t) = implicit_fns;
3153 return virtual_dtor;
3156 /* Subroutine of finish_struct_1. Recursively count the number of fields
3157 in TYPE, including anonymous union members. */
3160 count_fields (fields)
3165 for (x = fields; x; x = TREE_CHAIN (x))
3167 if (TREE_CODE (x) == FIELD_DECL && ANON_AGGR_TYPE_P (TREE_TYPE (x)))
3168 n_fields += count_fields (TYPE_FIELDS (TREE_TYPE (x)));
3175 /* Subroutine of finish_struct_1. Recursively add all the fields in the
3176 TREE_LIST FIELDS to the TREE_VEC FIELD_VEC, starting at offset IDX. */
3179 add_fields_to_vec (fields, field_vec, idx)
3180 tree fields, field_vec;
3184 for (x = fields; x; x = TREE_CHAIN (x))
3186 if (TREE_CODE (x) == FIELD_DECL && ANON_AGGR_TYPE_P (TREE_TYPE (x)))
3187 idx = add_fields_to_vec (TYPE_FIELDS (TREE_TYPE (x)), field_vec, idx);
3189 TREE_VEC_ELT (field_vec, idx++) = x;
3194 /* FIELD is a bit-field. We are finishing the processing for its
3195 enclosing type. Issue any appropriate messages and set appropriate
3199 check_bitfield_decl (field)
3202 tree type = TREE_TYPE (field);
3205 /* Detect invalid bit-field type. */
3206 if (DECL_INITIAL (field)
3207 && ! INTEGRAL_TYPE_P (TREE_TYPE (field)))
3209 cp_error_at ("bit-field `%#D' with non-integral type", field);
3210 w = error_mark_node;
3213 /* Detect and ignore out of range field width. */
3214 if (DECL_INITIAL (field))
3216 w = DECL_INITIAL (field);
3218 /* Avoid the non_lvalue wrapper added by fold for PLUS_EXPRs. */
3221 /* detect invalid field size. */
3222 if (TREE_CODE (w) == CONST_DECL)
3223 w = DECL_INITIAL (w);
3225 w = decl_constant_value (w);
3227 if (TREE_CODE (w) != INTEGER_CST)
3229 cp_error_at ("bit-field `%D' width not an integer constant",
3231 w = error_mark_node;
3233 else if (tree_int_cst_sgn (w) < 0)
3235 cp_error_at ("negative width in bit-field `%D'", field);
3236 w = error_mark_node;
3238 else if (integer_zerop (w) && DECL_NAME (field) != 0)
3240 cp_error_at ("zero width for bit-field `%D'", field);
3241 w = error_mark_node;
3243 else if (compare_tree_int (w, TYPE_PRECISION (type)) > 0
3244 && TREE_CODE (type) != ENUMERAL_TYPE
3245 && TREE_CODE (type) != BOOLEAN_TYPE)
3246 cp_warning_at ("width of `%D' exceeds its type", field);
3247 else if (TREE_CODE (type) == ENUMERAL_TYPE
3248 && (0 > compare_tree_int (w,
3249 min_precision (TYPE_MIN_VALUE (type),
3250 TREE_UNSIGNED (type)))
3251 || 0 > compare_tree_int (w,
3253 (TYPE_MAX_VALUE (type),
3254 TREE_UNSIGNED (type)))))
3255 cp_warning_at ("`%D' is too small to hold all values of `%#T'",
3259 /* Remove the bit-field width indicator so that the rest of the
3260 compiler does not treat that value as an initializer. */
3261 DECL_INITIAL (field) = NULL_TREE;
3263 if (w != error_mark_node)
3265 DECL_SIZE (field) = convert (bitsizetype, w);
3266 DECL_BIT_FIELD (field) = 1;
3268 if (integer_zerop (w))
3270 #ifdef EMPTY_FIELD_BOUNDARY
3271 DECL_ALIGN (field) = MAX (DECL_ALIGN (field),
3272 EMPTY_FIELD_BOUNDARY);
3274 #ifdef PCC_BITFIELD_TYPE_MATTERS
3275 if (PCC_BITFIELD_TYPE_MATTERS)
3277 DECL_ALIGN (field) = MAX (DECL_ALIGN (field),
3279 DECL_USER_ALIGN (field) |= TYPE_USER_ALIGN (type);
3286 /* Non-bit-fields are aligned for their type. */
3287 DECL_BIT_FIELD (field) = 0;
3288 CLEAR_DECL_C_BIT_FIELD (field);
3289 DECL_ALIGN (field) = MAX (DECL_ALIGN (field), TYPE_ALIGN (type));
3290 DECL_USER_ALIGN (field) |= TYPE_USER_ALIGN (type);
3294 /* FIELD is a non bit-field. We are finishing the processing for its
3295 enclosing type T. Issue any appropriate messages and set appropriate
3299 check_field_decl (field, t, cant_have_const_ctor,
3300 cant_have_default_ctor, no_const_asn_ref,
3301 any_default_members)
3304 int *cant_have_const_ctor;
3305 int *cant_have_default_ctor;
3306 int *no_const_asn_ref;
3307 int *any_default_members;
3309 tree type = strip_array_types (TREE_TYPE (field));
3311 /* An anonymous union cannot contain any fields which would change
3312 the settings of CANT_HAVE_CONST_CTOR and friends. */
3313 if (ANON_UNION_TYPE_P (type))
3315 /* And, we don't set TYPE_HAS_CONST_INIT_REF, etc., for anonymous
3316 structs. So, we recurse through their fields here. */
3317 else if (ANON_AGGR_TYPE_P (type))
3321 for (fields = TYPE_FIELDS (type); fields; fields = TREE_CHAIN (fields))
3322 if (TREE_CODE (fields) == FIELD_DECL && !DECL_C_BIT_FIELD (field))
3323 check_field_decl (fields, t, cant_have_const_ctor,
3324 cant_have_default_ctor, no_const_asn_ref,
3325 any_default_members);
3327 /* Check members with class type for constructors, destructors,
3329 else if (CLASS_TYPE_P (type))
3331 /* Never let anything with uninheritable virtuals
3332 make it through without complaint. */
3333 abstract_virtuals_error (field, type);
3335 if (TREE_CODE (t) == UNION_TYPE)
3337 if (TYPE_NEEDS_CONSTRUCTING (type))
3338 cp_error_at ("member `%#D' with constructor not allowed in union",
3340 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3341 cp_error_at ("member `%#D' with destructor not allowed in union",
3343 if (TYPE_HAS_COMPLEX_ASSIGN_REF (type))
3344 cp_error_at ("member `%#D' with copy assignment operator not allowed in union",
3349 TYPE_NEEDS_CONSTRUCTING (t) |= TYPE_NEEDS_CONSTRUCTING (type);
3350 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
3351 |= TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type);
3352 TYPE_HAS_COMPLEX_ASSIGN_REF (t) |= TYPE_HAS_COMPLEX_ASSIGN_REF (type);
3353 TYPE_HAS_COMPLEX_INIT_REF (t) |= TYPE_HAS_COMPLEX_INIT_REF (type);
3356 if (!TYPE_HAS_CONST_INIT_REF (type))
3357 *cant_have_const_ctor = 1;
3359 if (!TYPE_HAS_CONST_ASSIGN_REF (type))
3360 *no_const_asn_ref = 1;
3362 if (TYPE_HAS_CONSTRUCTOR (type)
3363 && ! TYPE_HAS_DEFAULT_CONSTRUCTOR (type))
3364 *cant_have_default_ctor = 1;
3366 if (DECL_INITIAL (field) != NULL_TREE)
3368 /* `build_class_init_list' does not recognize
3370 if (TREE_CODE (t) == UNION_TYPE && any_default_members != 0)
3371 cp_error_at ("multiple fields in union `%T' initialized");
3372 *any_default_members = 1;
3375 /* Non-bit-fields are aligned for their type, except packed fields
3376 which require only BITS_PER_UNIT alignment. */
3377 DECL_ALIGN (field) = MAX (DECL_ALIGN (field),
3378 (DECL_PACKED (field)
3380 : TYPE_ALIGN (TREE_TYPE (field))));
3381 if (! DECL_PACKED (field))
3382 DECL_USER_ALIGN (field) |= TYPE_USER_ALIGN (TREE_TYPE (field));
3385 /* Check the data members (both static and non-static), class-scoped
3386 typedefs, etc., appearing in the declaration of T. Issue
3387 appropriate diagnostics. Sets ACCESS_DECLS to a list (in
3388 declaration order) of access declarations; each TREE_VALUE in this
3389 list is a USING_DECL.
3391 In addition, set the following flags:
3394 The class is empty, i.e., contains no non-static data members.
3396 CANT_HAVE_DEFAULT_CTOR_P
3397 This class cannot have an implicitly generated default
3400 CANT_HAVE_CONST_CTOR_P
3401 This class cannot have an implicitly generated copy constructor
3402 taking a const reference.
3404 CANT_HAVE_CONST_ASN_REF
3405 This class cannot have an implicitly generated assignment
3406 operator taking a const reference.
3408 All of these flags should be initialized before calling this
3411 Returns a pointer to the end of the TYPE_FIELDs chain; additional
3412 fields can be added by adding to this chain. */
3415 check_field_decls (t, access_decls, empty_p,
3416 cant_have_default_ctor_p, cant_have_const_ctor_p,
3421 int *cant_have_default_ctor_p;
3422 int *cant_have_const_ctor_p;
3423 int *no_const_asn_ref_p;
3428 int any_default_members;
3430 /* First, delete any duplicate fields. */
3431 delete_duplicate_fields (TYPE_FIELDS (t));
3433 /* Assume there are no access declarations. */
3434 *access_decls = NULL_TREE;
3435 /* Assume this class has no pointer members. */
3437 /* Assume none of the members of this class have default
3439 any_default_members = 0;
3441 for (field = &TYPE_FIELDS (t); *field; field = next)
3444 tree type = TREE_TYPE (x);
3446 GNU_xref_member (current_class_name, x);
3448 next = &TREE_CHAIN (x);
3450 if (TREE_CODE (x) == FIELD_DECL)
3452 DECL_PACKED (x) |= TYPE_PACKED (t);
3454 if (DECL_C_BIT_FIELD (x) && integer_zerop (DECL_INITIAL (x)))
3455 /* We don't treat zero-width bitfields as making a class
3460 /* The class is non-empty. */
3462 /* The class is not even nearly empty. */
3463 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
3467 if (TREE_CODE (x) == USING_DECL)
3469 /* Prune the access declaration from the list of fields. */
3470 *field = TREE_CHAIN (x);
3472 /* Save the access declarations for our caller. */
3473 *access_decls = tree_cons (NULL_TREE, x, *access_decls);
3475 /* Since we've reset *FIELD there's no reason to skip to the
3481 if (TREE_CODE (x) == TYPE_DECL
3482 || TREE_CODE (x) == TEMPLATE_DECL)
3485 /* If we've gotten this far, it's a data member, possibly static,
3486 or an enumerator. */
3488 DECL_CONTEXT (x) = t;
3490 /* ``A local class cannot have static data members.'' ARM 9.4 */
3491 if (current_function_decl && TREE_STATIC (x))
3492 cp_error_at ("field `%D' in local class cannot be static", x);
3494 /* Perform error checking that did not get done in
3496 if (TREE_CODE (type) == FUNCTION_TYPE)
3498 cp_error_at ("field `%D' invalidly declared function type",
3500 type = build_pointer_type (type);
3501 TREE_TYPE (x) = type;
3503 else if (TREE_CODE (type) == METHOD_TYPE)
3505 cp_error_at ("field `%D' invalidly declared method type", x);
3506 type = build_pointer_type (type);
3507 TREE_TYPE (x) = type;
3509 else if (TREE_CODE (type) == OFFSET_TYPE)
3511 cp_error_at ("field `%D' invalidly declared offset type", x);
3512 type = build_pointer_type (type);
3513 TREE_TYPE (x) = type;
3516 if (type == error_mark_node)
3519 /* When this goes into scope, it will be a non-local reference. */
3520 DECL_NONLOCAL (x) = 1;
3522 if (TREE_CODE (x) == CONST_DECL)
3525 if (TREE_CODE (x) == VAR_DECL)
3527 if (TREE_CODE (t) == UNION_TYPE)
3528 /* Unions cannot have static members. */
3529 cp_error_at ("field `%D' declared static in union", x);
3534 /* Now it can only be a FIELD_DECL. */
3536 if (TREE_PRIVATE (x) || TREE_PROTECTED (x))
3537 CLASSTYPE_NON_AGGREGATE (t) = 1;
3539 /* If this is of reference type, check if it needs an init.
3540 Also do a little ANSI jig if necessary. */
3541 if (TREE_CODE (type) == REFERENCE_TYPE)
3543 CLASSTYPE_NON_POD_P (t) = 1;
3544 if (DECL_INITIAL (x) == NULL_TREE)
3545 CLASSTYPE_REF_FIELDS_NEED_INIT (t) = 1;
3547 /* ARM $12.6.2: [A member initializer list] (or, for an
3548 aggregate, initialization by a brace-enclosed list) is the
3549 only way to initialize nonstatic const and reference
3551 *cant_have_default_ctor_p = 1;
3552 TYPE_HAS_COMPLEX_ASSIGN_REF (t) = 1;
3554 if (! TYPE_HAS_CONSTRUCTOR (t) && extra_warnings)
3557 cp_warning_at ("non-static reference `%#D' in class without a constructor", x);
3559 cp_warning_at ("non-static reference in class without a constructor", x);
3563 type = strip_array_types (type);
3565 if (TREE_CODE (type) == POINTER_TYPE)
3568 if (DECL_MUTABLE_P (x) || TYPE_HAS_MUTABLE_P (type))
3569 CLASSTYPE_HAS_MUTABLE (t) = 1;
3571 if (! pod_type_p (type)
3572 /* For some reason, pointers to members are POD types themselves,
3573 but are not allowed in POD structs. Silly. */
3574 || TYPE_PTRMEM_P (type) || TYPE_PTRMEMFUNC_P (type))
3575 CLASSTYPE_NON_POD_P (t) = 1;
3577 /* If any field is const, the structure type is pseudo-const. */
3578 if (CP_TYPE_CONST_P (type))
3580 C_TYPE_FIELDS_READONLY (t) = 1;
3581 if (DECL_INITIAL (x) == NULL_TREE)
3582 CLASSTYPE_READONLY_FIELDS_NEED_INIT (t) = 1;
3584 /* ARM $12.6.2: [A member initializer list] (or, for an
3585 aggregate, initialization by a brace-enclosed list) is the
3586 only way to initialize nonstatic const and reference
3588 *cant_have_default_ctor_p = 1;
3589 TYPE_HAS_COMPLEX_ASSIGN_REF (t) = 1;
3591 if (! TYPE_HAS_CONSTRUCTOR (t) && extra_warnings)
3594 cp_warning_at ("non-static const member `%#D' in class without a constructor", x);
3596 cp_warning_at ("non-static const member in class without a constructor", x);
3599 /* A field that is pseudo-const makes the structure likewise. */
3600 else if (IS_AGGR_TYPE (type))
3602 C_TYPE_FIELDS_READONLY (t) |= C_TYPE_FIELDS_READONLY (type);
3603 CLASSTYPE_READONLY_FIELDS_NEED_INIT (t)
3604 |= CLASSTYPE_READONLY_FIELDS_NEED_INIT (type);
3607 /* Core issue 80: A nonstatic data member is required to have a
3608 different name from the class iff the class has a
3609 user-defined constructor. */
3610 if (DECL_NAME (x) == constructor_name (t)
3611 && TYPE_HAS_CONSTRUCTOR (t))
3612 cp_pedwarn_at ("field `%#D' with same name as class", x);
3614 /* We set DECL_C_BIT_FIELD in grokbitfield.
3615 If the type and width are valid, we'll also set DECL_BIT_FIELD. */
3616 if (DECL_C_BIT_FIELD (x))
3617 check_bitfield_decl (x);
3619 check_field_decl (x, t,
3620 cant_have_const_ctor_p,
3621 cant_have_default_ctor_p,
3623 &any_default_members);
3626 /* Effective C++ rule 11. */
3627 if (has_pointers && warn_ecpp && TYPE_HAS_CONSTRUCTOR (t)
3628 && ! (TYPE_HAS_INIT_REF (t) && TYPE_HAS_ASSIGN_REF (t)))
3630 cp_warning ("`%#T' has pointer data members", t);
3632 if (! TYPE_HAS_INIT_REF (t))
3634 cp_warning (" but does not override `%T(const %T&)'", t, t);
3635 if (! TYPE_HAS_ASSIGN_REF (t))
3636 cp_warning (" or `operator=(const %T&)'", t);
3638 else if (! TYPE_HAS_ASSIGN_REF (t))
3639 cp_warning (" but does not override `operator=(const %T&)'", t);
3643 /* Check anonymous struct/anonymous union fields. */
3644 finish_struct_anon (t);
3646 /* We've built up the list of access declarations in reverse order.
3648 *access_decls = nreverse (*access_decls);
3651 /* Return a FIELD_DECL for a pointer-to-virtual-table or
3652 pointer-to-virtual-base. The NAME, ASSEMBLER_NAME, and TYPE of the
3653 field are as indicated. The CLASS_TYPE in which this field occurs
3654 is also indicated. FCONTEXT is the type that is needed for the debug
3655 info output routines. *EMPTY_P is set to a non-zero value by this
3656 function to indicate that a class containing this field is
3660 build_vtbl_or_vbase_field (name, assembler_name, type, class_type, fcontext,
3663 tree assembler_name;
3671 /* This class is non-empty. */
3674 /* Build the FIELD_DECL. */
3675 field = build_decl (FIELD_DECL, name, type);
3676 DECL_ASSEMBLER_NAME (field) = assembler_name;
3677 DECL_VIRTUAL_P (field) = 1;
3678 DECL_ARTIFICIAL (field) = 1;
3679 DECL_FIELD_CONTEXT (field) = class_type;
3680 DECL_FCONTEXT (field) = fcontext;
3681 DECL_ALIGN (field) = TYPE_ALIGN (type);
3682 DECL_USER_ALIGN (field) = TYPE_USER_ALIGN (type);
3688 /* Record the type of BINFO in the slot in DATA (which is really a
3689 `varray_type *') corresponding to the BINFO_OFFSET. */
3692 dfs_record_base_offsets (binfo, data)
3697 unsigned HOST_WIDE_INT offset = tree_low_cst (BINFO_OFFSET (binfo), 1);
3699 v = (varray_type *) data;
3700 while (VARRAY_SIZE (*v) <= offset)
3701 VARRAY_GROW (*v, 2 * VARRAY_SIZE (*v));
3702 VARRAY_TREE (*v, offset) = tree_cons (NULL_TREE,
3704 VARRAY_TREE (*v, offset));
3709 /* Add the offset of BINFO and its bases to BASE_OFFSETS. */
3712 record_base_offsets (binfo, base_offsets)
3714 varray_type *base_offsets;
3717 dfs_record_base_offsets,
3722 /* Returns non-NULL if there is already an entry in DATA (which is
3723 really a `varray_type') indicating that an object with the same
3724 type of BINFO is already at the BINFO_OFFSET for BINFO. */
3727 dfs_search_base_offsets (binfo, data)
3731 if (is_empty_class (BINFO_TYPE (binfo)))
3733 varray_type v = (varray_type) data;
3734 /* Find the offset for this BINFO. */
3735 unsigned HOST_WIDE_INT offset = tree_low_cst (BINFO_OFFSET (binfo), 1);
3738 /* If we haven't yet encountered any objects at offsets that
3739 big, then there's no conflict. */
3740 if (VARRAY_SIZE (v) <= offset)
3742 /* Otherwise, go through the objects already allocated at this
3744 for (t = VARRAY_TREE (v, offset); t; t = TREE_CHAIN (t))
3745 if (same_type_p (TREE_VALUE (t), BINFO_TYPE (binfo)))
3752 /* Returns non-zero if there's a conflict between BINFO and a base
3753 already mentioned in BASE_OFFSETS if BINFO is placed at its current
3757 layout_conflict_p (binfo, base_offsets)
3759 varray_type base_offsets;
3761 return dfs_walk (binfo, dfs_search_base_offsets, dfs_skip_vbases,
3762 base_offsets) != NULL_TREE;
3765 /* DECL is a FIELD_DECL corresponding either to a base subobject of a
3766 non-static data member of the type indicated by RLI. BINFO is the
3767 binfo corresponding to the base subobject, or, if this is a
3768 non-static data-member, a dummy BINFO for the type of the data
3769 member. BINFO may be NULL if checks to see if the field overlaps
3770 an existing field with the same type are not required. V maps
3771 offsets to types already located at those offsets. This function
3772 determines the position of the DECL. */
3775 layout_nonempty_base_or_field (rli, decl, binfo, v)
3776 record_layout_info rli;
3781 /* Try to place the field. It may take more than one try if we have
3782 a hard time placing the field without putting two objects of the
3783 same type at the same address. */
3787 struct record_layout_info_s old_rli = *rli;
3789 /* Place this field. */
3790 place_field (rli, decl);
3792 /* Now that we know where it wil be placed, update its
3794 offset = byte_position (decl);
3796 propagate_binfo_offsets (binfo,
3797 convert (ssizetype, offset));
3799 /* We have to check to see whether or not there is already
3800 something of the same type at the offset we're about to use.
3804 struct T : public S { int i; };
3805 struct U : public S, public T {};
3807 Here, we put S at offset zero in U. Then, we can't put T at
3808 offset zero -- its S component would be at the same address
3809 as the S we already allocated. So, we have to skip ahead.
3810 Since all data members, including those whose type is an
3811 empty class, have non-zero size, any overlap can happen only
3812 with a direct or indirect base-class -- it can't happen with
3814 if (binfo && flag_new_abi && layout_conflict_p (binfo, v))
3816 /* Undo the propagate_binfo_offsets call. */
3817 offset = size_diffop (size_zero_node, offset);
3818 propagate_binfo_offsets (binfo, convert (ssizetype, offset));
3820 /* Strip off the size allocated to this field. That puts us
3821 at the first place we could have put the field with
3822 proper alignment. */
3825 /* Bump up by the alignment required for the type, without
3826 virtual base classes. */
3828 = size_binop (PLUS_EXPR, rli->bitpos,
3829 bitsize_int (CLASSTYPE_ALIGN (BINFO_TYPE (binfo))));
3830 normalize_rli (rli);
3833 /* There was no conflict. We're done laying out this field. */
3838 /* Layout the empty base BINFO. EOC indicates the byte currently just
3839 past the end of the class, and should be correctly aligned for a
3840 class of the type indicated by BINFO; BINFO_OFFSETS gives the
3841 offsets of the other bases allocated so far. */
3844 layout_empty_base (binfo, eoc, binfo_offsets)
3847 varray_type binfo_offsets;
3850 tree basetype = BINFO_TYPE (binfo);
3852 /* This routine should only be used for empty classes. */
3853 my_friendly_assert (is_empty_class (basetype), 20000321);
3854 alignment = ssize_int (CLASSTYPE_ALIGN_UNIT (basetype));
3856 /* This is an empty base class. We first try to put it at offset
3858 if (layout_conflict_p (binfo, binfo_offsets))
3860 /* That didn't work. Now, we move forward from the next
3861 available spot in the class. */
3862 propagate_binfo_offsets (binfo, convert (ssizetype, eoc));
3865 if (!layout_conflict_p (binfo, binfo_offsets))
3866 /* We finally found a spot where there's no overlap. */
3869 /* There's overlap here, too. Bump along to the next spot. */
3870 propagate_binfo_offsets (binfo, alignment);
3875 /* Build a FIELD_DECL for the base given by BINFO in the class
3876 indicated by RLI. If the new object is non-empty, clear *EMPTY_P.
3877 *BASE_ALIGN is a running maximum of the alignments of any base
3881 build_base_field (rli, binfo, empty_p, base_align, v)
3882 record_layout_info rli;
3885 unsigned int *base_align;
3888 tree basetype = BINFO_TYPE (binfo);
3891 if (!COMPLETE_TYPE_P (basetype))
3892 /* This error is now reported in xref_tag, thus giving better
3893 location information. */
3896 decl = build_decl (FIELD_DECL, NULL_TREE, basetype);
3897 DECL_ARTIFICIAL (decl) = 1;
3898 DECL_FIELD_CONTEXT (decl) = rli->t;
3899 DECL_SIZE (decl) = CLASSTYPE_SIZE (basetype);
3900 DECL_SIZE_UNIT (decl) = CLASSTYPE_SIZE_UNIT (basetype);
3901 DECL_ALIGN (decl) = CLASSTYPE_ALIGN (basetype);
3902 DECL_USER_ALIGN (decl) = CLASSTYPE_USER_ALIGN (basetype);
3906 /* Brain damage for backwards compatibility. For no good
3907 reason, the old basetype layout made every base have at least
3908 as large as the alignment for the bases up to that point,
3909 gratuitously wasting space. So we do the same thing here. */
3910 *base_align = MAX (*base_align, DECL_ALIGN (decl));
3912 = size_binop (MAX_EXPR, DECL_SIZE (decl), bitsize_int (*base_align));
3913 DECL_SIZE_UNIT (decl)
3914 = size_binop (MAX_EXPR, DECL_SIZE_UNIT (decl),
3915 size_int (*base_align / BITS_PER_UNIT));
3918 if (!integer_zerop (DECL_SIZE (decl)))
3920 /* The containing class is non-empty because it has a non-empty
3924 /* Try to place the field. It may take more than one try if we
3925 have a hard time placing the field without putting two
3926 objects of the same type at the same address. */
3927 layout_nonempty_base_or_field (rli, decl, binfo, *v);
3931 unsigned HOST_WIDE_INT eoc;
3933 /* On some platforms (ARM), even empty classes will not be
3935 eoc = tree_low_cst (rli_size_unit_so_far (rli), 0);
3936 eoc = CEIL (eoc, DECL_ALIGN (decl)) * DECL_ALIGN (decl);
3937 layout_empty_base (binfo, size_int (eoc), *v);
3940 /* Check for inaccessible base classes. If the same base class
3941 appears more than once in the hierarchy, but isn't virtual, then
3943 if (get_base_distance (basetype, rli->t, 0, NULL) == -2)
3944 cp_warning ("direct base `%T' inaccessible in `%T' due to ambiguity",
3947 /* Record the offsets of BINFO and its base subobjects. */
3948 record_base_offsets (binfo, v);
3951 /* Layout all of the non-virtual base classes. Returns a map from
3952 offsets to types present at those offsets. */
3955 build_base_fields (rli, empty_p)
3956 record_layout_info rli;
3959 /* Chain to hold all the new FIELD_DECLs which stand in for base class
3962 int n_baseclasses = CLASSTYPE_N_BASECLASSES (rec);
3965 unsigned int base_align = 0;
3967 /* Create the table mapping offsets to empty base classes. */
3968 VARRAY_TREE_INIT (v, 32, "v");
3970 /* Under the new ABI, the primary base class is always allocated
3972 if (flag_new_abi && CLASSTYPE_HAS_PRIMARY_BASE_P (rec))
3973 build_base_field (rli, CLASSTYPE_PRIMARY_BINFO (rec),
3974 empty_p, &base_align, &v);
3976 /* Now allocate the rest of the bases. */
3977 for (i = 0; i < n_baseclasses; ++i)
3981 /* Under the new ABI, the primary base was already allocated
3982 above, so we don't need to allocate it again here. */
3983 if (flag_new_abi && i == CLASSTYPE_VFIELD_PARENT (rec))
3986 base_binfo = BINFO_BASETYPE (TYPE_BINFO (rec), i);
3988 /* A primary virtual base class is allocated just like any other
3989 base class, but a non-primary virtual base is allocated
3990 later, in layout_virtual_bases. */
3991 if (TREE_VIA_VIRTUAL (base_binfo)
3992 && !BINFO_PRIMARY_MARKED_P (base_binfo))
3995 build_base_field (rli, base_binfo, empty_p, &base_align, &v);
4001 /* Go through the TYPE_METHODS of T issuing any appropriate
4002 diagnostics, figuring out which methods override which other
4003 methods, and so forth. */
4010 int seen_one_arg_array_delete_p = 0;
4012 for (x = TYPE_METHODS (t); x; x = TREE_CHAIN (x))
4014 GNU_xref_member (current_class_name, x);
4016 /* If this was an evil function, don't keep it in class. */
4017 if (IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (x)))
4020 check_for_override (x, t);
4021 if (DECL_PURE_VIRTUAL_P (x) && ! DECL_VINDEX (x))
4022 cp_error_at ("initializer specified for non-virtual method `%D'", x);
4024 /* The name of the field is the original field name
4025 Save this in auxiliary field for later overloading. */
4026 if (DECL_VINDEX (x))
4028 TYPE_POLYMORPHIC_P (t) = 1;
4029 if (DECL_PURE_VIRTUAL_P (x))
4030 CLASSTYPE_PURE_VIRTUALS (t)
4031 = tree_cons (NULL_TREE, x, CLASSTYPE_PURE_VIRTUALS (t));
4034 if (DECL_ARRAY_DELETE_OPERATOR_P (x))
4038 /* When dynamically allocating an array of this type, we
4039 need a "cookie" to record how many elements we allocated,
4040 even if the array elements have no non-trivial
4041 destructor, if the usual array deallocation function
4042 takes a second argument of type size_t. The standard (in
4043 [class.free]) requires that the second argument be set
4045 second_parm = TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (x)));
4046 /* This is overly conservative, but we must maintain this
4047 behavior for backwards compatibility. */
4048 if (!flag_new_abi && second_parm != void_list_node)
4049 TYPE_VEC_DELETE_TAKES_SIZE (t) = 1;
4050 /* Under the new ABI, we choose only those function that are
4051 explicitly declared as `operator delete[] (void *,
4053 else if (flag_new_abi
4054 && !seen_one_arg_array_delete_p
4056 && TREE_CHAIN (second_parm) == void_list_node
4057 && same_type_p (TREE_VALUE (second_parm), sizetype))
4058 TYPE_VEC_DELETE_TAKES_SIZE (t) = 1;
4059 /* If there's no second parameter, then this is the usual
4060 deallocation function. */
4061 else if (second_parm == void_list_node)
4062 seen_one_arg_array_delete_p = 1;
4067 /* FN is a constructor or destructor. Clone the declaration to create
4068 a specialized in-charge or not-in-charge version, as indicated by
4072 build_clone (fn, name)
4079 /* Copy the function. */
4080 clone = copy_decl (fn);
4081 /* Remember where this function came from. */
4082 DECL_CLONED_FUNCTION (clone) = fn;
4083 /* Reset the function name. */
4084 DECL_NAME (clone) = name;
4085 DECL_ASSEMBLER_NAME (clone) = DECL_NAME (clone);
4086 /* There's no pending inline data for this function. */
4087 DECL_PENDING_INLINE_INFO (clone) = NULL;
4088 DECL_PENDING_INLINE_P (clone) = 0;
4089 /* And it hasn't yet been deferred. */
4090 DECL_DEFERRED_FN (clone) = 0;
4091 /* There's no magic VTT parameter in the clone. */
4092 DECL_VTT_PARM (clone) = NULL_TREE;
4094 /* The base-class destructor is not virtual. */
4095 if (name == base_dtor_identifier)
4097 DECL_VIRTUAL_P (clone) = 0;
4098 if (TREE_CODE (clone) != TEMPLATE_DECL)
4099 DECL_VINDEX (clone) = NULL_TREE;
4102 /* If there was an in-charge parameter, drop it from the function
4104 if (DECL_HAS_IN_CHARGE_PARM_P (clone))
4110 exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (clone));
4111 basetype = TYPE_METHOD_BASETYPE (TREE_TYPE (clone));
4112 parmtypes = TYPE_ARG_TYPES (TREE_TYPE (clone));
4113 /* Skip the `this' parameter. */
4114 parmtypes = TREE_CHAIN (parmtypes);
4115 /* Skip the in-charge parameter. */
4116 parmtypes = TREE_CHAIN (parmtypes);
4117 /* If this is subobject constructor or destructor, add the vtt
4119 if (DECL_NEEDS_VTT_PARM_P (clone))
4120 parmtypes = hash_tree_chain (vtt_parm_type, parmtypes);
4122 = build_cplus_method_type (basetype,
4123 TREE_TYPE (TREE_TYPE (clone)),
4126 TREE_TYPE (clone) = build_exception_variant (TREE_TYPE (clone),
4130 /* Copy the function parameters. But, DECL_ARGUMENTS aren't
4131 function parameters; instead, those are the template parameters. */
4132 if (TREE_CODE (clone) != TEMPLATE_DECL)
4134 DECL_ARGUMENTS (clone) = copy_list (DECL_ARGUMENTS (clone));
4135 /* Remove the in-charge parameter. */
4136 if (DECL_HAS_IN_CHARGE_PARM_P (clone))
4138 TREE_CHAIN (DECL_ARGUMENTS (clone))
4139 = TREE_CHAIN (TREE_CHAIN (DECL_ARGUMENTS (clone)));
4140 DECL_HAS_IN_CHARGE_PARM_P (clone) = 0;
4143 /* Add the VTT parameter. */
4144 if (DECL_NEEDS_VTT_PARM_P (clone))
4148 parm = build_artificial_parm (vtt_parm_identifier,
4150 TREE_CHAIN (parm) = TREE_CHAIN (DECL_ARGUMENTS (clone));
4151 TREE_CHAIN (DECL_ARGUMENTS (clone)) = parm;
4154 for (parms = DECL_ARGUMENTS (clone); parms; parms = TREE_CHAIN (parms))
4156 DECL_CONTEXT (parms) = clone;
4157 copy_lang_decl (parms);
4161 /* Mangle the function name. */
4162 set_mangled_name_for_decl (clone);
4164 /* Create the RTL for this function. */
4165 DECL_RTL (clone) = NULL_RTX;
4166 rest_of_decl_compilation (clone, NULL, /*top_level=*/1, at_eof);
4168 /* Make it easy to find the CLONE given the FN. */
4169 TREE_CHAIN (clone) = TREE_CHAIN (fn);
4170 TREE_CHAIN (fn) = clone;
4172 /* If this is a template, handle the DECL_TEMPLATE_RESULT as well. */
4173 if (TREE_CODE (clone) == TEMPLATE_DECL)
4177 DECL_TEMPLATE_RESULT (clone)
4178 = build_clone (DECL_TEMPLATE_RESULT (clone), name);
4179 result = DECL_TEMPLATE_RESULT (clone);
4180 DECL_TEMPLATE_INFO (result) = copy_node (DECL_TEMPLATE_INFO (result));
4181 DECL_TI_TEMPLATE (result) = clone;
4183 else if (DECL_DEFERRED_FN (fn))
4189 /* Produce declarations for all appropriate clones of FN. If
4190 UPDATE_METHOD_VEC_P is non-zero, the clones are added to the
4191 CLASTYPE_METHOD_VEC as well. */
4194 clone_function_decl (fn, update_method_vec_p)
4196 int update_method_vec_p;
4200 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (fn))
4202 /* For each constructor, we need two variants: an in-charge version
4203 and a not-in-charge version. */
4204 clone = build_clone (fn, complete_ctor_identifier);
4205 if (update_method_vec_p)
4206 add_method (DECL_CONTEXT (clone), NULL, clone);
4207 clone = build_clone (fn, base_ctor_identifier);
4208 if (update_method_vec_p)
4209 add_method (DECL_CONTEXT (clone), NULL, clone);
4213 my_friendly_assert (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (fn), 20000411);
4215 /* For each destructor, we need three variants: an in-charge
4216 version, a not-in-charge version, and an in-charge deleting
4217 version. We clone the deleting version first because that
4218 means it will go second on the TYPE_METHODS list -- and that
4219 corresponds to the correct layout order in the virtual
4221 clone = build_clone (fn, deleting_dtor_identifier);
4222 if (update_method_vec_p)
4223 add_method (DECL_CONTEXT (clone), NULL, clone);
4224 clone = build_clone (fn, complete_dtor_identifier);
4225 if (update_method_vec_p)
4226 add_method (DECL_CONTEXT (clone), NULL, clone);
4227 clone = build_clone (fn, base_dtor_identifier);
4228 if (update_method_vec_p)
4229 add_method (DECL_CONTEXT (clone), NULL, clone);
4233 /* For each of the constructors and destructors in T, create an
4234 in-charge and not-in-charge variant. */
4237 clone_constructors_and_destructors (t)
4242 /* We only clone constructors and destructors under the new ABI. */
4246 /* If for some reason we don't have a CLASSTYPE_METHOD_VEC, we bail
4248 if (!CLASSTYPE_METHOD_VEC (t))
4251 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
4252 clone_function_decl (OVL_CURRENT (fns), /*update_method_vec_p=*/1);
4253 for (fns = CLASSTYPE_DESTRUCTORS (t); fns; fns = OVL_NEXT (fns))
4254 clone_function_decl (OVL_CURRENT (fns), /*update_method_vec_p=*/1);
4257 /* Remove all zero-width bit-fields from T. */
4260 remove_zero_width_bit_fields (t)
4265 fieldsp = &TYPE_FIELDS (t);
4268 if (TREE_CODE (*fieldsp) == FIELD_DECL
4269 && DECL_C_BIT_FIELD (*fieldsp)
4270 && DECL_INITIAL (*fieldsp))
4271 *fieldsp = TREE_CHAIN (*fieldsp);
4273 fieldsp = &TREE_CHAIN (*fieldsp);
4277 /* Check the validity of the bases and members declared in T. Add any
4278 implicitly-generated functions (like copy-constructors and
4279 assignment operators). Compute various flag bits (like
4280 CLASSTYPE_NON_POD_T) for T. This routine works purely at the C++
4281 level: i.e., independently of the ABI in use. */
4284 check_bases_and_members (t, empty_p)
4288 /* Nonzero if we are not allowed to generate a default constructor
4290 int cant_have_default_ctor;
4291 /* Nonzero if the implicitly generated copy constructor should take
4292 a non-const reference argument. */
4293 int cant_have_const_ctor;
4294 /* Nonzero if the the implicitly generated assignment operator
4295 should take a non-const reference argument. */
4296 int no_const_asn_ref;
4299 /* By default, we use const reference arguments and generate default
4301 cant_have_default_ctor = 0;
4302 cant_have_const_ctor = 0;
4303 no_const_asn_ref = 0;
4305 /* Assume that the class is nearly empty; we'll clear this flag if
4306 it turns out not to be nearly empty. */
4307 CLASSTYPE_NEARLY_EMPTY_P (t) = 1;
4309 /* Check all the base-classes. */
4310 check_bases (t, &cant_have_default_ctor, &cant_have_const_ctor,
4313 /* Check all the data member declarations. */
4314 check_field_decls (t, &access_decls, empty_p,
4315 &cant_have_default_ctor,
4316 &cant_have_const_ctor,
4319 /* Check all the method declarations. */
4322 /* A nearly-empty class has to be vptr-containing; a nearly empty
4323 class contains just a vptr. */
4324 if (!TYPE_CONTAINS_VPTR_P (t))
4325 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
4327 /* Do some bookkeeping that will guide the generation of implicitly
4328 declared member functions. */
4329 TYPE_HAS_COMPLEX_INIT_REF (t)
4330 |= (TYPE_HAS_INIT_REF (t)
4331 || TYPE_USES_VIRTUAL_BASECLASSES (t)
4332 || TYPE_POLYMORPHIC_P (t));
4333 TYPE_NEEDS_CONSTRUCTING (t)
4334 |= (TYPE_HAS_CONSTRUCTOR (t)
4335 || TYPE_USES_VIRTUAL_BASECLASSES (t)
4336 || TYPE_POLYMORPHIC_P (t));
4337 CLASSTYPE_NON_AGGREGATE (t) |= (TYPE_HAS_CONSTRUCTOR (t)
4338 || TYPE_POLYMORPHIC_P (t));
4339 CLASSTYPE_NON_POD_P (t)
4340 |= (CLASSTYPE_NON_AGGREGATE (t) || TYPE_HAS_DESTRUCTOR (t)
4341 || TYPE_HAS_ASSIGN_REF (t));
4342 TYPE_HAS_REAL_ASSIGN_REF (t) |= TYPE_HAS_ASSIGN_REF (t);
4343 TYPE_HAS_COMPLEX_ASSIGN_REF (t)
4344 |= TYPE_HAS_ASSIGN_REF (t) || TYPE_USES_VIRTUAL_BASECLASSES (t);
4346 /* Synthesize any needed methods. Note that methods will be synthesized
4347 for anonymous unions; grok_x_components undoes that. */
4348 add_implicitly_declared_members (t, cant_have_default_ctor,
4349 cant_have_const_ctor,
4352 /* Create the in-charge and not-in-charge variants of constructors
4354 clone_constructors_and_destructors (t);
4356 /* Process the using-declarations. */
4357 for (; access_decls; access_decls = TREE_CHAIN (access_decls))
4358 handle_using_decl (TREE_VALUE (access_decls), t);
4360 /* Build and sort the CLASSTYPE_METHOD_VEC. */
4361 finish_struct_methods (t);
4364 /* If T needs a pointer to its virtual function table, set TYPE_VFIELD
4365 accordingly. If a new vfield was created (because T doesn't have a
4366 primary base class), then the newly created field is returned. It
4367 is not added to the TYPE_FIELDS list; it is the caller's
4368 responsibility to do that. */
4371 create_vtable_ptr (t, empty_p, vfuns_p,
4372 new_virtuals_p, overridden_virtuals_p)
4376 tree *new_virtuals_p;
4377 tree *overridden_virtuals_p;
4381 /* Loop over the virtual functions, adding them to our various
4383 for (fn = TYPE_METHODS (t); fn; fn = TREE_CHAIN (fn))
4384 if (DECL_VINDEX (fn)
4385 && !(flag_new_abi && DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (fn)))
4386 add_virtual_function (new_virtuals_p, overridden_virtuals_p,
4389 /* If we couldn't find an appropriate base class, create a new field
4390 here. Even if there weren't any new virtual functions, we might need a
4391 new virtual function table if we're supposed to include vptrs in
4392 all classes that need them. */
4393 if (!TYPE_VFIELD (t)
4395 || (TYPE_CONTAINS_VPTR_P (t) && vptrs_present_everywhere_p ())))
4397 /* We build this decl with vtbl_ptr_type_node, which is a
4398 `vtable_entry_type*'. It might seem more precise to use
4399 `vtable_entry_type (*)[N]' where N is the number of firtual
4400 functions. However, that would require the vtable pointer in
4401 base classes to have a different type than the vtable pointer
4402 in derived classes. We could make that happen, but that
4403 still wouldn't solve all the problems. In particular, the
4404 type-based alias analysis code would decide that assignments
4405 to the base class vtable pointer can't alias assignments to
4406 the derived class vtable pointer, since they have different
4407 types. Thus, in an derived class destructor, where the base
4408 class constructor was inlined, we could generate bad code for
4409 setting up the vtable pointer.
4411 Therefore, we use one type for all vtable pointers. We still
4412 use a type-correct type; it's just doesn't indicate the array
4413 bounds. That's better than using `void*' or some such; it's
4414 cleaner, and it let's the alias analysis code know that these
4415 stores cannot alias stores to void*! */
4417 = build_vtbl_or_vbase_field (get_vfield_name (t),
4418 get_identifier (VFIELD_BASE),
4424 if (flag_new_abi && CLASSTYPE_N_BASECLASSES (t))
4425 /* If there were any baseclasses, they can't possibly be at
4426 offset zero any more, because that's where the vtable
4427 pointer is. So, converting to a base class is going to
4429 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (t) = 1;
4431 return TYPE_VFIELD (t);
4437 /* Fixup the inline function given by INFO now that the class is
4441 fixup_pending_inline (info)
4442 struct pending_inline *info;
4447 tree fn = info->fndecl;
4449 args = DECL_ARGUMENTS (fn);
4452 DECL_CONTEXT (args) = fn;
4453 args = TREE_CHAIN (args);
4458 /* Fixup the inline methods and friends in TYPE now that TYPE is
4462 fixup_inline_methods (type)
4465 tree method = TYPE_METHODS (type);
4467 if (method && TREE_CODE (method) == TREE_VEC)
4469 if (TREE_VEC_ELT (method, 1))
4470 method = TREE_VEC_ELT (method, 1);
4471 else if (TREE_VEC_ELT (method, 0))
4472 method = TREE_VEC_ELT (method, 0);
4474 method = TREE_VEC_ELT (method, 2);
4477 /* Do inline member functions. */
4478 for (; method; method = TREE_CHAIN (method))
4479 fixup_pending_inline (DECL_PENDING_INLINE_INFO (method));
4482 for (method = CLASSTYPE_INLINE_FRIENDS (type);
4484 method = TREE_CHAIN (method))
4485 fixup_pending_inline (DECL_PENDING_INLINE_INFO (TREE_VALUE (method)));
4486 CLASSTYPE_INLINE_FRIENDS (type) = NULL_TREE;
4489 /* Called from propagate_binfo_offsets via dfs_walk. */
4492 dfs_propagate_binfo_offsets (binfo, data)
4496 tree offset = (tree) data;
4498 /* Update the BINFO_OFFSET for this base. Allow for the case where it
4499 might be negative. */
4500 BINFO_OFFSET (binfo)
4501 = convert (sizetype, size_binop (PLUS_EXPR,
4502 convert (ssizetype, BINFO_OFFSET (binfo)),
4504 SET_BINFO_MARKED (binfo);
4509 /* Add OFFSET to all base types of BINFO which is a base in the
4510 hierarchy dominated by T.
4512 OFFSET, which is a type offset, is number of bytes.
4514 Note that we don't have to worry about having two paths to the
4515 same base type, since this type owns its association list. */
4518 propagate_binfo_offsets (binfo, offset)
4523 dfs_propagate_binfo_offsets,
4524 dfs_skip_nonprimary_vbases_unmarkedp,
4528 dfs_skip_nonprimary_vbases_markedp,
4532 /* Called via dfs_walk from layout_virtual bases. */
4535 dfs_set_offset_for_shared_vbases (binfo, data)
4539 if (TREE_VIA_VIRTUAL (binfo) && BINFO_PRIMARY_MARKED_P (binfo))
4541 /* Update the shared copy. */
4544 shared_binfo = binfo_for_vbase (BINFO_TYPE (binfo), (tree) data);
4545 BINFO_OFFSET (shared_binfo) = BINFO_OFFSET (binfo);
4551 /* Called via dfs_walk from layout_virtual bases. */
4554 dfs_set_offset_for_unshared_vbases (binfo, data)
4558 /* If this is a virtual base, make sure it has the same offset as
4559 the shared copy. If it's a primary base, then we know it's
4561 if (TREE_VIA_VIRTUAL (binfo) && !BINFO_PRIMARY_MARKED_P (binfo))
4563 tree t = (tree) data;
4567 vbase = binfo_for_vbase (BINFO_TYPE (binfo), t);
4568 offset = size_diffop (BINFO_OFFSET (vbase), BINFO_OFFSET (binfo));
4569 propagate_binfo_offsets (binfo, offset);
4575 /* Set BINFO_OFFSET for all of the virtual bases for T. Update
4576 TYPE_ALIGN and TYPE_SIZE for T. BASE_OFFSETS is a varray mapping
4577 offsets to the types at those offsets. */
4580 layout_virtual_bases (t, base_offsets)
4582 varray_type *base_offsets;
4585 unsigned HOST_WIDE_INT dsize;
4586 unsigned HOST_WIDE_INT eoc;
4588 if (CLASSTYPE_N_BASECLASSES (t) == 0)
4591 #ifdef STRUCTURE_SIZE_BOUNDARY
4592 /* Packed structures don't need to have minimum size. */
4593 if (! TYPE_PACKED (t))
4594 TYPE_ALIGN (t) = MAX (TYPE_ALIGN (t), STRUCTURE_SIZE_BOUNDARY);
4597 /* DSIZE is the size of the class without the virtual bases. */
4598 dsize = tree_low_cst (TYPE_SIZE (t), 1);
4600 /* Make every class have alignment of at least one. */
4601 TYPE_ALIGN (t) = MAX (TYPE_ALIGN (t), BITS_PER_UNIT);
4603 /* Go through the virtual bases, allocating space for each virtual
4604 base that is not already a primary base class. Under the new
4605 ABI, these are allocated according to a depth-first left-to-right
4606 postorder traversal; in the new ABI, inheritance graph order is
4608 for (vbases = (flag_new_abi
4610 : CLASSTYPE_VBASECLASSES (t));
4612 vbases = TREE_CHAIN (vbases))
4618 if (!TREE_VIA_VIRTUAL (vbases))
4620 vbase = binfo_for_vbase (BINFO_TYPE (vbases), t);
4623 vbase = TREE_VALUE (vbases);
4625 if (!BINFO_VBASE_PRIMARY_P (vbase))
4627 /* This virtual base is not a primary base of any class in the
4628 hierarchy, so we have to add space for it. */
4630 unsigned int desired_align;
4632 basetype = BINFO_TYPE (vbase);
4635 desired_align = CLASSTYPE_ALIGN (basetype);
4637 /* Under the old ABI, virtual bases were aligned as for the
4638 entire base object (including its virtual bases). That's
4639 wasteful, in general. */
4640 desired_align = TYPE_ALIGN (basetype);
4641 TYPE_ALIGN (t) = MAX (TYPE_ALIGN (t), desired_align);
4643 /* Add padding so that we can put the virtual base class at an
4644 appropriately aligned offset. */
4645 dsize = CEIL (dsize, desired_align) * desired_align;
4647 /* Under the new ABI, we try to squish empty virtual bases in
4648 just like ordinary empty bases. */
4649 if (flag_new_abi && is_empty_class (basetype))
4650 layout_empty_base (vbase,
4651 size_int (CEIL (dsize, BITS_PER_UNIT)),
4657 offset = ssize_int (CEIL (dsize, BITS_PER_UNIT));
4658 offset = size_diffop (offset,
4660 BINFO_OFFSET (vbase)));
4662 /* And compute the offset of the virtual base. */
4663 propagate_binfo_offsets (vbase, offset);
4664 /* Every virtual baseclass takes a least a UNIT, so that
4665 we can take it's address and get something different
4667 dsize += MAX (BITS_PER_UNIT,
4668 tree_low_cst (CLASSTYPE_SIZE (basetype), 0));
4671 /* Keep track of the offsets assigned to this virtual base. */
4672 record_base_offsets (vbase, base_offsets);
4676 /* Make sure that all of the CLASSTYPE_VBASECLASSES have their
4677 BINFO_OFFSET set correctly. Those we just allocated certainly
4678 will. The others are primary baseclasses; we walk the hierarchy
4679 to find the primary copies and update the shared copy. */
4680 dfs_walk (TYPE_BINFO (t),
4681 dfs_set_offset_for_shared_vbases,
4682 dfs_unmarked_real_bases_queue_p,
4685 /* Now, go through the TYPE_BINFO hierarchy again, setting the
4686 BINFO_OFFSETs correctly for all non-primary copies of the virtual
4687 bases and their direct and indirect bases. The ambiguity checks
4688 in get_base_distance depend on the BINFO_OFFSETs being set
4690 dfs_walk (TYPE_BINFO (t), dfs_set_offset_for_unshared_vbases, NULL, t);
4692 /* If we had empty base classes that protruded beyond the end of the
4693 class, we didn't update DSIZE above; we were hoping to overlay
4694 multiple such bases at the same location. */
4695 eoc = end_of_class (t, /*include_virtuals_p=*/1);
4696 if (eoc * BITS_PER_UNIT > dsize)
4697 dsize = (eoc + 1) * BITS_PER_UNIT;
4699 /* Now, make sure that the total size of the type is a multiple of
4701 dsize = CEIL (dsize, TYPE_ALIGN (t)) * TYPE_ALIGN (t);
4702 TYPE_SIZE (t) = bitsize_int (dsize);
4703 TYPE_SIZE_UNIT (t) = convert (sizetype,
4704 size_binop (CEIL_DIV_EXPR, TYPE_SIZE (t),
4705 bitsize_unit_node));
4707 /* Check for ambiguous virtual bases. */
4709 for (vbases = CLASSTYPE_VBASECLASSES (t);
4711 vbases = TREE_CHAIN (vbases))
4713 tree basetype = BINFO_TYPE (TREE_VALUE (vbases));
4714 if (get_base_distance (basetype, t, 0, (tree*)0) == -2)
4715 cp_warning ("virtual base `%T' inaccessible in `%T' due to ambiguity",
4720 /* Returns the offset of the byte just past the end of the base class
4721 with the highest offset in T. If INCLUDE_VIRTUALS_P is zero, then
4722 only non-virtual bases are included. */
4724 static unsigned HOST_WIDE_INT
4725 end_of_class (t, include_virtuals_p)
4727 int include_virtuals_p;
4729 unsigned HOST_WIDE_INT result = 0;
4732 for (i = 0; i < CLASSTYPE_N_BASECLASSES (t); ++i)
4736 unsigned HOST_WIDE_INT end_of_base;
4738 base_binfo = BINFO_BASETYPE (TYPE_BINFO (t), i);
4740 if (!include_virtuals_p
4741 && TREE_VIA_VIRTUAL (base_binfo)
4742 && !BINFO_PRIMARY_MARKED_P (base_binfo))
4745 offset = size_binop (PLUS_EXPR,
4746 BINFO_OFFSET (base_binfo),
4747 CLASSTYPE_SIZE_UNIT (BINFO_TYPE (base_binfo)));
4748 end_of_base = tree_low_cst (offset, /*pos=*/1);
4749 if (end_of_base > result)
4750 result = end_of_base;
4756 /* Calculate the TYPE_SIZE, TYPE_ALIGN, etc for T. Calculate
4757 BINFO_OFFSETs for all of the base-classes. Position the vtable
4761 layout_class_type (t, empty_p, vfuns_p,
4762 new_virtuals_p, overridden_virtuals_p)
4766 tree *new_virtuals_p;
4767 tree *overridden_virtuals_p;
4769 tree non_static_data_members;
4772 record_layout_info rli;
4774 unsigned HOST_WIDE_INT eoc;
4776 /* Keep track of the first non-static data member. */
4777 non_static_data_members = TYPE_FIELDS (t);
4779 /* Start laying out the record. */
4780 rli = start_record_layout (t);
4782 /* If possible, we reuse the virtual function table pointer from one
4783 of our base classes. */
4784 determine_primary_base (t, vfuns_p);
4786 /* Create a pointer to our virtual function table. */
4787 vptr = create_vtable_ptr (t, empty_p, vfuns_p,
4788 new_virtuals_p, overridden_virtuals_p);
4790 /* Under the new ABI, the vptr is always the first thing in the
4792 if (flag_new_abi && vptr)
4794 TYPE_FIELDS (t) = chainon (vptr, TYPE_FIELDS (t));
4795 place_field (rli, vptr);
4798 /* Add pointers to all of our virtual base-classes. */
4799 TYPE_FIELDS (t) = chainon (build_vbase_pointer_fields (rli, empty_p),
4801 /* Build FIELD_DECLs for all of the non-virtual base-types. */
4802 v = build_base_fields (rli, empty_p);
4804 /* CLASSTYPE_INLINE_FRIENDS is really TYPE_NONCOPIED_PARTS. Thus,
4805 we have to save this before we start modifying
4806 TYPE_NONCOPIED_PARTS. */
4807 fixup_inline_methods (t);
4809 /* Layout the non-static data members. */
4810 for (field = non_static_data_members; field; field = TREE_CHAIN (field))
4816 /* We still pass things that aren't non-static data members to
4817 the back-end, in case it wants to do something with them. */
4818 if (TREE_CODE (field) != FIELD_DECL)
4820 place_field (rli, field);
4824 type = TREE_TYPE (field);
4826 /* If this field is a bit-field whose width is greater than its
4827 type, then there are some special rules for allocating it
4828 under the new ABI. Under the old ABI, there were no special
4829 rules, but the back-end can't handle bitfields longer than a
4830 `long long', so we use the same mechanism. */
4831 if (DECL_C_BIT_FIELD (field)
4833 && INT_CST_LT (TYPE_SIZE (type), DECL_SIZE (field)))
4835 && 0 < compare_tree_int (DECL_SIZE (field),
4837 (long_long_unsigned_type_node)))))
4839 integer_type_kind itk;
4842 /* We must allocate the bits as if suitably aligned for the
4843 longest integer type that fits in this many bits. type
4844 of the field. Then, we are supposed to use the left over
4845 bits as additional padding. */
4846 for (itk = itk_char; itk != itk_none; ++itk)
4847 if (INT_CST_LT (DECL_SIZE (field),
4848 TYPE_SIZE (integer_types[itk])))
4851 /* ITK now indicates a type that is too large for the
4852 field. We have to back up by one to find the largest
4854 integer_type = integer_types[itk - 1];
4855 padding = size_binop (MINUS_EXPR, DECL_SIZE (field),
4856 TYPE_SIZE (integer_type));
4857 DECL_SIZE (field) = TYPE_SIZE (integer_type);
4858 DECL_ALIGN (field) = TYPE_ALIGN (integer_type);
4859 DECL_USER_ALIGN (field) = TYPE_USER_ALIGN (integer_type);
4862 padding = NULL_TREE;
4864 /* Create a dummy BINFO corresponding to this field. */
4865 binfo = make_binfo (size_zero_node, type, NULL_TREE, NULL_TREE);
4866 unshare_base_binfos (binfo);
4867 layout_nonempty_base_or_field (rli, field, binfo, v);
4869 /* If we needed additional padding after this field, add it
4875 padding_field = build_decl (FIELD_DECL,
4878 DECL_BIT_FIELD (padding_field) = 1;
4879 DECL_SIZE (padding_field) = padding;
4880 DECL_ALIGN (padding_field) = 1;
4881 DECL_USER_ALIGN (padding_field) = 0;
4882 layout_nonempty_base_or_field (rli, padding_field, NULL_TREE, v);
4886 /* It might be the case that we grew the class to allocate a
4887 zero-sized base class. That won't be reflected in RLI, yet,
4888 because we are willing to overlay multiple bases at the same
4889 offset. However, now we need to make sure that RLI is big enough
4890 to reflect the entire class. */
4891 eoc = end_of_class (t, /*include_virtuals_p=*/0);
4892 if (TREE_CODE (rli_size_unit_so_far (rli)) == INTEGER_CST
4893 && compare_tree_int (rli_size_unit_so_far (rli), eoc) < 0)
4895 /* We don't handle zero-sized base classes specially under the
4896 old ABI, so if we get here, we had better be operating under
4897 the new ABI rules. */
4898 my_friendly_assert (flag_new_abi, 20000321);
4899 rli->offset = size_binop (MAX_EXPR, rli->offset, size_int (eoc + 1));
4900 rli->bitpos = bitsize_zero_node;
4903 /* We make all structures have at least one element, so that they
4904 have non-zero size. In the new ABI, the class may be empty even
4905 if it has basetypes. Therefore, we add the fake field after all
4906 the other fields; if there are already FIELD_DECLs on the list,
4907 their offsets will not be disturbed. */
4912 padding = build_decl (FIELD_DECL, NULL_TREE, char_type_node);
4913 place_field (rli, padding);
4914 TYPE_NONCOPIED_PARTS (t)
4915 = tree_cons (NULL_TREE, padding, TYPE_NONCOPIED_PARTS (t));
4916 TREE_STATIC (TYPE_NONCOPIED_PARTS (t)) = 1;
4919 /* Under the old ABI, the vptr comes at the very end of the
4921 if (!flag_new_abi && vptr)
4923 place_field (rli, vptr);
4924 TYPE_FIELDS (t) = chainon (TYPE_FIELDS (t), vptr);
4927 /* Let the back-end lay out the type. Note that at this point we
4928 have only included non-virtual base-classes; we will lay out the
4929 virtual base classes later. So, the TYPE_SIZE/TYPE_ALIGN after
4930 this call are not necessarily correct; they are just the size and
4931 alignment when no virtual base clases are used. */
4932 finish_record_layout (rli);
4934 /* Delete all zero-width bit-fields from the list of fields. Now
4935 that the type is laid out they are no longer important. */
4936 remove_zero_width_bit_fields (t);
4938 /* Remember the size and alignment of the class before adding
4939 the virtual bases. */
4940 if (*empty_p && flag_new_abi)
4942 CLASSTYPE_SIZE (t) = bitsize_zero_node;
4943 CLASSTYPE_SIZE_UNIT (t) = size_zero_node;
4945 else if (flag_new_abi && TYPE_HAS_COMPLEX_INIT_REF (t)
4946 && TYPE_HAS_COMPLEX_ASSIGN_REF (t))
4948 CLASSTYPE_SIZE (t) = TYPE_BINFO_SIZE (t);
4949 CLASSTYPE_SIZE_UNIT (t) = TYPE_BINFO_SIZE_UNIT (t);
4953 CLASSTYPE_SIZE (t) = TYPE_SIZE (t);
4954 CLASSTYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (t);
4957 CLASSTYPE_ALIGN (t) = TYPE_ALIGN (t);
4958 CLASSTYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (t);
4960 /* Set the TYPE_DECL for this type to contain the right
4961 value for DECL_OFFSET, so that we can use it as part
4962 of a COMPONENT_REF for multiple inheritance. */
4963 layout_decl (TYPE_MAIN_DECL (t), 0);
4965 /* Now fix up any virtual base class types that we left lying
4966 around. We must get these done before we try to lay out the
4967 virtual function table. As a side-effect, this will remove the
4968 base subobject fields. */
4969 layout_virtual_bases (t, &v);
4975 /* Create a RECORD_TYPE or UNION_TYPE node for a C struct or union declaration
4976 (or C++ class declaration).
4978 For C++, we must handle the building of derived classes.
4979 Also, C++ allows static class members. The way that this is
4980 handled is to keep the field name where it is (as the DECL_NAME
4981 of the field), and place the overloaded decl in the bit position
4982 of the field. layout_record and layout_union will know about this.
4984 More C++ hair: inline functions have text in their
4985 DECL_PENDING_INLINE_INFO nodes which must somehow be parsed into
4986 meaningful tree structure. After the struct has been laid out, set
4987 things up so that this can happen.
4989 And still more: virtual functions. In the case of single inheritance,
4990 when a new virtual function is seen which redefines a virtual function
4991 from the base class, the new virtual function is placed into
4992 the virtual function table at exactly the same address that
4993 it had in the base class. When this is extended to multiple
4994 inheritance, the same thing happens, except that multiple virtual
4995 function tables must be maintained. The first virtual function
4996 table is treated in exactly the same way as in the case of single
4997 inheritance. Additional virtual function tables have different
4998 DELTAs, which tell how to adjust `this' to point to the right thing.
5000 ATTRIBUTES is the set of decl attributes to be applied, if any. */
5008 /* The NEW_VIRTUALS is a TREE_LIST. The TREE_VALUE of each node is
5009 a FUNCTION_DECL. Each of these functions is a virtual function
5010 declared in T that does not override any virtual function from a
5012 tree new_virtuals = NULL_TREE;
5013 /* The OVERRIDDEN_VIRTUALS list is like the NEW_VIRTUALS list,
5014 except that each declaration here overrides the declaration from
5016 tree overridden_virtuals = NULL_TREE;
5021 if (COMPLETE_TYPE_P (t))
5023 if (IS_AGGR_TYPE (t))
5024 cp_error ("redefinition of `%#T'", t);
5026 my_friendly_abort (172);
5031 GNU_xref_decl (current_function_decl, t);
5033 /* If this type was previously laid out as a forward reference,
5034 make sure we lay it out again. */
5035 TYPE_SIZE (t) = NULL_TREE;
5036 CLASSTYPE_GOT_SEMICOLON (t) = 0;
5037 CLASSTYPE_VFIELD_PARENT (t) = -1;
5039 CLASSTYPE_RTTI (t) = NULL_TREE;
5041 /* Do end-of-class semantic processing: checking the validity of the
5042 bases and members and add implicitly generated methods. */
5043 check_bases_and_members (t, &empty);
5045 /* Layout the class itself. */
5046 layout_class_type (t, &empty, &vfuns,
5047 &new_virtuals, &overridden_virtuals);
5049 /* Set up the DECL_FIELD_BITPOS of the vfield if we need to, as we
5050 might need to know it for setting up the offsets in the vtable
5051 (or in thunks) below. */
5052 vfield = TYPE_VFIELD (t);
5053 if (vfield != NULL_TREE
5054 && DECL_FIELD_CONTEXT (vfield) != t)
5056 tree binfo = get_binfo (DECL_FIELD_CONTEXT (vfield), t, 0);
5058 vfield = copy_decl (vfield);
5060 DECL_FIELD_CONTEXT (vfield) = t;
5061 DECL_FIELD_OFFSET (vfield)
5062 = size_binop (PLUS_EXPR,
5063 BINFO_OFFSET (binfo),
5064 DECL_FIELD_OFFSET (vfield));
5065 TYPE_VFIELD (t) = vfield;
5069 = modify_all_vtables (t, &vfuns, nreverse (overridden_virtuals));
5071 /* If we created a new vtbl pointer for this class, add it to the
5073 if (TYPE_VFIELD (t) && !CLASSTYPE_HAS_PRIMARY_BASE_P (t))
5074 CLASSTYPE_VFIELDS (t)
5075 = chainon (CLASSTYPE_VFIELDS (t), build_tree_list (NULL_TREE, t));
5077 /* If necessary, create the primary vtable for this class. */
5079 || overridden_virtuals
5080 || (TYPE_CONTAINS_VPTR_P (t) && vptrs_present_everywhere_p ()))
5082 new_virtuals = nreverse (new_virtuals);
5083 /* We must enter these virtuals into the table. */
5084 if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t))
5085 build_primary_vtable (NULL_TREE, t);
5086 else if (! BINFO_NEW_VTABLE_MARKED (TYPE_BINFO (t), t))
5087 /* Here we know enough to change the type of our virtual
5088 function table, but we will wait until later this function. */
5089 build_primary_vtable (CLASSTYPE_PRIMARY_BINFO (t), t);
5091 /* If this type has basetypes with constructors, then those
5092 constructors might clobber the virtual function table. But
5093 they don't if the derived class shares the exact vtable of the base
5096 CLASSTYPE_NEEDS_VIRTUAL_REINIT (t) = 1;
5098 /* If we didn't need a new vtable, see if we should copy one from
5100 else if (CLASSTYPE_HAS_PRIMARY_BASE_P (t))
5102 tree binfo = CLASSTYPE_PRIMARY_BINFO (t);
5104 /* If this class uses a different vtable than its primary base
5105 then when we will need to initialize our vptr after the base
5106 class constructor runs. */
5107 if (TYPE_BINFO_VTABLE (t) != BINFO_VTABLE (binfo))
5108 CLASSTYPE_NEEDS_VIRTUAL_REINIT (t) = 1;
5111 if (TYPE_CONTAINS_VPTR_P (t))
5113 if (TYPE_BINFO_VTABLE (t))
5114 my_friendly_assert (DECL_VIRTUAL_P (TYPE_BINFO_VTABLE (t)),
5116 if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t))
5117 my_friendly_assert (TYPE_BINFO_VIRTUALS (t) == NULL_TREE,
5120 CLASSTYPE_VSIZE (t) = vfuns;
5121 /* Entries for virtual functions defined in the primary base are
5122 followed by entries for new functions unique to this class. */
5123 TYPE_BINFO_VIRTUALS (t)
5124 = chainon (TYPE_BINFO_VIRTUALS (t), new_virtuals);
5125 /* Finally, add entries for functions that override virtuals
5126 from non-primary bases. */
5127 TYPE_BINFO_VIRTUALS (t)
5128 = chainon (TYPE_BINFO_VIRTUALS (t), overridden_virtuals);
5131 finish_struct_bits (t);
5133 /* Complete the rtl for any static member objects of the type we're
5135 for (x = TYPE_FIELDS (t); x; x = TREE_CHAIN (x))
5137 if (TREE_CODE (x) == VAR_DECL && TREE_STATIC (x)
5138 && TREE_TYPE (x) == t)
5140 DECL_MODE (x) = TYPE_MODE (t);
5141 make_decl_rtl (x, NULL, 0);
5145 /* Done with FIELDS...now decide whether to sort these for
5146 faster lookups later.
5148 The C front-end only does this when n_fields > 15. We use
5149 a smaller number because most searches fail (succeeding
5150 ultimately as the search bores through the inheritance
5151 hierarchy), and we want this failure to occur quickly. */
5153 n_fields = count_fields (TYPE_FIELDS (t));
5156 tree field_vec = make_tree_vec (n_fields);
5157 add_fields_to_vec (TYPE_FIELDS (t), field_vec, 0);
5158 qsort (&TREE_VEC_ELT (field_vec, 0), n_fields, sizeof (tree),
5159 (int (*)(const void *, const void *))field_decl_cmp);
5160 if (! DECL_LANG_SPECIFIC (TYPE_MAIN_DECL (t)))
5161 retrofit_lang_decl (TYPE_MAIN_DECL (t));
5162 DECL_SORTED_FIELDS (TYPE_MAIN_DECL (t)) = field_vec;
5165 if (TYPE_HAS_CONSTRUCTOR (t))
5167 tree vfields = CLASSTYPE_VFIELDS (t);
5171 /* Mark the fact that constructor for T
5172 could affect anybody inheriting from T
5173 who wants to initialize vtables for VFIELDS's type. */
5174 if (VF_DERIVED_VALUE (vfields))
5175 TREE_ADDRESSABLE (vfields) = 1;
5176 vfields = TREE_CHAIN (vfields);
5180 /* Make the rtl for any new vtables we have created, and unmark
5181 the base types we marked. */
5183 /* Build the VTT for T. */
5186 if (TYPE_VFIELD (t))
5188 /* In addition to this one, all the other vfields should be listed. */
5189 /* Before that can be done, we have to have FIELD_DECLs for them, and
5190 a place to find them. */
5191 TYPE_NONCOPIED_PARTS (t)
5192 = tree_cons (default_conversion (TYPE_BINFO_VTABLE (t)),
5193 TYPE_VFIELD (t), TYPE_NONCOPIED_PARTS (t));
5195 if (warn_nonvdtor && TYPE_HAS_DESTRUCTOR (t)
5196 && DECL_VINDEX (TREE_VEC_ELT (CLASSTYPE_METHOD_VEC (t), 1)) == NULL_TREE)
5197 cp_warning ("`%#T' has virtual functions but non-virtual destructor",
5201 hack_incomplete_structures (t);
5203 if (warn_overloaded_virtual)
5206 maybe_suppress_debug_info (t);
5208 /* Finish debugging output for this type. */
5209 rest_of_type_compilation (t, toplevel_bindings_p ());
5212 /* When T was built up, the member declarations were added in reverse
5213 order. Rearrange them to declaration order. */
5216 unreverse_member_declarations (t)
5223 /* The TYPE_FIELDS, TYPE_METHODS, and CLASSTYPE_TAGS are all in
5224 reverse order. Put them in declaration order now. */
5225 TYPE_METHODS (t) = nreverse (TYPE_METHODS (t));
5226 CLASSTYPE_TAGS (t) = nreverse (CLASSTYPE_TAGS (t));
5228 /* Actually, for the TYPE_FIELDS, only the non TYPE_DECLs are in
5229 reverse order, so we can't just use nreverse. */
5231 for (x = TYPE_FIELDS (t);
5232 x && TREE_CODE (x) != TYPE_DECL;
5235 next = TREE_CHAIN (x);
5236 TREE_CHAIN (x) = prev;
5241 TREE_CHAIN (TYPE_FIELDS (t)) = x;
5243 TYPE_FIELDS (t) = prev;
5248 finish_struct (t, attributes)
5251 /* Now that we've got all the field declarations, reverse everything
5253 unreverse_member_declarations (t);
5255 cplus_decl_attributes (t, attributes, NULL_TREE);
5257 if (processing_template_decl)
5259 finish_struct_methods (t);
5260 TYPE_SIZE (t) = bitsize_zero_node;
5263 finish_struct_1 (t);
5265 TYPE_BEING_DEFINED (t) = 0;
5267 if (current_class_type)
5270 error ("trying to finish struct, but kicked out due to previous parse errors.");
5272 if (processing_template_decl)
5274 tree scope = current_scope ();
5275 if (scope && TREE_CODE (scope) == FUNCTION_DECL)
5276 add_tree (build_min (TAG_DEFN, t));
5282 /* Return the dynamic type of INSTANCE, if known.
5283 Used to determine whether the virtual function table is needed
5286 *NONNULL is set iff INSTANCE can be known to be nonnull, regardless
5287 of our knowledge of its type. *NONNULL should be initialized
5288 before this function is called. */
5291 fixed_type_or_null (instance, nonnull)
5295 switch (TREE_CODE (instance))
5298 /* Check that we are not going through a cast of some sort. */
5299 if (TREE_TYPE (instance)
5300 == TREE_TYPE (TREE_TYPE (TREE_OPERAND (instance, 0))))
5301 instance = TREE_OPERAND (instance, 0);
5302 /* fall through... */
5304 /* This is a call to a constructor, hence it's never zero. */
5305 if (TREE_HAS_CONSTRUCTOR (instance))
5309 return TREE_TYPE (instance);
5314 /* This is a call to a constructor, hence it's never zero. */
5315 if (TREE_HAS_CONSTRUCTOR (instance))
5319 return TREE_TYPE (instance);
5321 return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull);
5328 if (TREE_CODE (TREE_OPERAND (instance, 1)) == INTEGER_CST)
5329 /* Propagate nonnull. */
5330 fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull);
5331 if (TREE_CODE (TREE_OPERAND (instance, 0)) == ADDR_EXPR)
5332 return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull);
5337 return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull);
5342 return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull);
5345 return fixed_type_or_null (TREE_OPERAND (instance, 1), nonnull);
5349 if (TREE_CODE (TREE_TYPE (instance)) == ARRAY_TYPE
5350 && IS_AGGR_TYPE (TREE_TYPE (TREE_TYPE (instance))))
5354 return TREE_TYPE (TREE_TYPE (instance));
5356 /* fall through... */
5359 if (IS_AGGR_TYPE (TREE_TYPE (instance)))
5363 return TREE_TYPE (instance);
5367 if (instance == current_class_ptr
5368 && flag_this_is_variable <= 0)
5370 /* Normally, 'this' must be non-null. */
5371 if (flag_this_is_variable == 0)
5374 /* <0 means we're in a constructor and we know our type. */
5375 if (flag_this_is_variable < 0)
5376 return TREE_TYPE (TREE_TYPE (instance));
5378 else if (TREE_CODE (TREE_TYPE (instance)) == REFERENCE_TYPE)
5379 /* Reference variables should be references to objects. */
5389 /* Return non-zero if the dynamic type of INSTANCE is known, and equivalent
5390 to the static type. We also handle the case where INSTANCE is really
5393 Used to determine whether the virtual function table is needed
5396 *NONNULL is set iff INSTANCE can be known to be nonnull, regardless
5397 of our knowledge of its type. *NONNULL should be initialized
5398 before this function is called. */
5401 resolves_to_fixed_type_p (instance, nonnull)
5405 tree t = TREE_TYPE (instance);
5406 tree fixed = fixed_type_or_null (instance, nonnull);
5407 if (fixed == NULL_TREE)
5409 if (POINTER_TYPE_P (t))
5411 return same_type_ignoring_top_level_qualifiers_p (t, fixed);
5416 init_class_processing ()
5418 current_class_depth = 0;
5419 current_class_stack_size = 10;
5421 = (class_stack_node_t) xmalloc (current_class_stack_size
5422 * sizeof (struct class_stack_node));
5423 VARRAY_TREE_INIT (local_classes, 8, "local_classes");
5424 ggc_add_tree_varray_root (&local_classes, 1);
5426 access_default_node = build_int_2 (0, 0);
5427 access_public_node = build_int_2 (ak_public, 0);
5428 access_protected_node = build_int_2 (ak_protected, 0);
5429 access_private_node = build_int_2 (ak_private, 0);
5430 access_default_virtual_node = build_int_2 (4, 0);
5431 access_public_virtual_node = build_int_2 (4 | ak_public, 0);
5432 access_protected_virtual_node = build_int_2 (4 | ak_protected, 0);
5433 access_private_virtual_node = build_int_2 (4 | ak_private, 0);
5436 /* Set current scope to NAME. CODE tells us if this is a
5437 STRUCT, UNION, or ENUM environment.
5439 NAME may end up being NULL_TREE if this is an anonymous or
5440 late-bound struct (as in "struct { ... } foo;") */
5442 /* Set global variables CURRENT_CLASS_NAME and CURRENT_CLASS_TYPE to
5443 appropriate values, found by looking up the type definition of
5446 If MODIFY is 1, we set IDENTIFIER_CLASS_VALUE's of names
5447 which can be seen locally to the class. They are shadowed by
5448 any subsequent local declaration (including parameter names).
5450 If MODIFY is 2, we set IDENTIFIER_CLASS_VALUE's of names
5451 which have static meaning (i.e., static members, static
5452 member functions, enum declarations, etc).
5454 If MODIFY is 3, we set IDENTIFIER_CLASS_VALUE of names
5455 which can be seen locally to the class (as in 1), but
5456 know that we are doing this for declaration purposes
5457 (i.e. friend foo::bar (int)).
5459 So that we may avoid calls to lookup_name, we cache the _TYPE
5460 nodes of local TYPE_DECLs in the TREE_TYPE field of the name.
5462 For multiple inheritance, we perform a two-pass depth-first search
5463 of the type lattice. The first pass performs a pre-order search,
5464 marking types after the type has had its fields installed in
5465 the appropriate IDENTIFIER_CLASS_VALUE slot. The second pass merely
5466 unmarks the marked types. If a field or member function name
5467 appears in an ambiguous way, the IDENTIFIER_CLASS_VALUE of
5468 that name becomes `error_mark_node'. */
5471 pushclass (type, modify)
5475 type = TYPE_MAIN_VARIANT (type);
5477 /* Make sure there is enough room for the new entry on the stack. */
5478 if (current_class_depth + 1 >= current_class_stack_size)
5480 current_class_stack_size *= 2;
5482 = (class_stack_node_t) xrealloc (current_class_stack,
5483 current_class_stack_size
5484 * sizeof (struct class_stack_node));
5487 /* Insert a new entry on the class stack. */
5488 current_class_stack[current_class_depth].name = current_class_name;
5489 current_class_stack[current_class_depth].type = current_class_type;
5490 current_class_stack[current_class_depth].access = current_access_specifier;
5491 current_class_stack[current_class_depth].names_used = 0;
5492 current_class_depth++;
5494 /* Now set up the new type. */
5495 current_class_name = TYPE_NAME (type);
5496 if (TREE_CODE (current_class_name) == TYPE_DECL)
5497 current_class_name = DECL_NAME (current_class_name);
5498 current_class_type = type;
5500 /* By default, things in classes are private, while things in
5501 structures or unions are public. */
5502 current_access_specifier = (CLASSTYPE_DECLARED_CLASS (type)
5503 ? access_private_node
5504 : access_public_node);
5506 if (previous_class_type != NULL_TREE
5507 && (type != previous_class_type
5508 || !COMPLETE_TYPE_P (previous_class_type))
5509 && current_class_depth == 1)
5511 /* Forcibly remove any old class remnants. */
5512 invalidate_class_lookup_cache ();
5515 /* If we're about to enter a nested class, clear
5516 IDENTIFIER_CLASS_VALUE for the enclosing classes. */
5517 if (modify && current_class_depth > 1)
5518 clear_identifier_class_values ();
5523 if (CLASSTYPE_TEMPLATE_INFO (type))
5524 overload_template_name (type);
5529 if (type != previous_class_type || current_class_depth > 1)
5530 push_class_decls (type);
5535 /* We are re-entering the same class we just left, so we
5536 don't have to search the whole inheritance matrix to find
5537 all the decls to bind again. Instead, we install the
5538 cached class_shadowed list, and walk through it binding
5539 names and setting up IDENTIFIER_TYPE_VALUEs. */
5540 set_class_shadows (previous_class_values);
5541 for (item = previous_class_values; item; item = TREE_CHAIN (item))
5543 tree id = TREE_PURPOSE (item);
5544 tree decl = TREE_TYPE (item);
5546 push_class_binding (id, decl);
5547 if (TREE_CODE (decl) == TYPE_DECL)
5548 set_identifier_type_value (id, TREE_TYPE (decl));
5550 unuse_fields (type);
5553 storetags (CLASSTYPE_TAGS (type));
5557 /* When we exit a toplevel class scope, we save the
5558 IDENTIFIER_CLASS_VALUEs so that we can restore them quickly if we
5559 reenter the class. Here, we've entered some other class, so we
5560 must invalidate our cache. */
5563 invalidate_class_lookup_cache ()
5567 /* This code can be seen as a cache miss. When we've cached a
5568 class' scope's bindings and we can't use them, we need to reset
5569 them. This is it! */
5570 for (t = previous_class_values; t; t = TREE_CHAIN (t))
5571 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (t)) = NULL_TREE;
5573 previous_class_type = NULL_TREE;
5576 /* Get out of the current class scope. If we were in a class scope
5577 previously, that is the one popped to. */
5583 /* Since poplevel_class does the popping of class decls nowadays,
5584 this really only frees the obstack used for these decls. */
5587 current_class_depth--;
5588 current_class_name = current_class_stack[current_class_depth].name;
5589 current_class_type = current_class_stack[current_class_depth].type;
5590 current_access_specifier = current_class_stack[current_class_depth].access;
5591 if (current_class_stack[current_class_depth].names_used)
5592 splay_tree_delete (current_class_stack[current_class_depth].names_used);
5595 /* Returns 1 if current_class_type is either T or a nested type of T.
5596 We start looking from 1 because entry 0 is from global scope, and has
5600 currently_open_class (t)
5604 if (t == current_class_type)
5606 for (i = 1; i < current_class_depth; ++i)
5607 if (current_class_stack [i].type == t)
5612 /* If either current_class_type or one of its enclosing classes are derived
5613 from T, return the appropriate type. Used to determine how we found
5614 something via unqualified lookup. */
5617 currently_open_derived_class (t)
5622 if (DERIVED_FROM_P (t, current_class_type))
5623 return current_class_type;
5625 for (i = current_class_depth - 1; i > 0; --i)
5626 if (DERIVED_FROM_P (t, current_class_stack[i].type))
5627 return current_class_stack[i].type;
5632 /* When entering a class scope, all enclosing class scopes' names with
5633 static meaning (static variables, static functions, types and enumerators)
5634 have to be visible. This recursive function calls pushclass for all
5635 enclosing class contexts until global or a local scope is reached.
5636 TYPE is the enclosed class and MODIFY is equivalent with the pushclass
5637 formal of the same name. */
5640 push_nested_class (type, modify)
5646 /* A namespace might be passed in error cases, like A::B:C. */
5647 if (type == NULL_TREE
5648 || type == error_mark_node
5649 || TREE_CODE (type) == NAMESPACE_DECL
5650 || ! IS_AGGR_TYPE (type)
5651 || TREE_CODE (type) == TEMPLATE_TYPE_PARM
5652 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
5655 context = DECL_CONTEXT (TYPE_MAIN_DECL (type));
5657 if (context && CLASS_TYPE_P (context))
5658 push_nested_class (context, 2);
5659 pushclass (type, modify);
5662 /* Undoes a push_nested_class call. MODIFY is passed on to popclass. */
5667 tree context = DECL_CONTEXT (TYPE_MAIN_DECL (current_class_type));
5670 if (context && CLASS_TYPE_P (context))
5671 pop_nested_class ();
5674 /* Set global variables CURRENT_LANG_NAME to appropriate value
5675 so that behavior of name-mangling machinery is correct. */
5678 push_lang_context (name)
5681 *current_lang_stack++ = current_lang_name;
5682 if (current_lang_stack - &VARRAY_TREE (current_lang_base, 0)
5683 >= (ptrdiff_t) VARRAY_SIZE (current_lang_base))
5685 size_t old_size = VARRAY_SIZE (current_lang_base);
5687 VARRAY_GROW (current_lang_base, old_size + 10);
5688 current_lang_stack = &VARRAY_TREE (current_lang_base, old_size);
5691 if (name == lang_name_cplusplus)
5693 strict_prototype = strict_prototypes_lang_cplusplus;
5694 current_lang_name = name;
5696 else if (name == lang_name_java)
5698 strict_prototype = strict_prototypes_lang_cplusplus;
5699 current_lang_name = name;
5700 /* DECL_IGNORED_P is initially set for these types, to avoid clutter.
5701 (See record_builtin_java_type in decl.c.) However, that causes
5702 incorrect debug entries if these types are actually used.
5703 So we re-enable debug output after extern "Java". */
5704 DECL_IGNORED_P (TYPE_NAME (java_byte_type_node)) = 0;
5705 DECL_IGNORED_P (TYPE_NAME (java_short_type_node)) = 0;
5706 DECL_IGNORED_P (TYPE_NAME (java_int_type_node)) = 0;
5707 DECL_IGNORED_P (TYPE_NAME (java_long_type_node)) = 0;
5708 DECL_IGNORED_P (TYPE_NAME (java_float_type_node)) = 0;
5709 DECL_IGNORED_P (TYPE_NAME (java_double_type_node)) = 0;
5710 DECL_IGNORED_P (TYPE_NAME (java_char_type_node)) = 0;
5711 DECL_IGNORED_P (TYPE_NAME (java_boolean_type_node)) = 0;
5713 else if (name == lang_name_c)
5715 strict_prototype = strict_prototypes_lang_c;
5716 current_lang_name = name;
5719 error ("language string `\"%s\"' not recognized", IDENTIFIER_POINTER (name));
5722 /* Get out of the current language scope. */
5727 /* Clear the current entry so that garbage collector won't hold on
5729 *current_lang_stack = NULL_TREE;
5730 current_lang_name = *--current_lang_stack;
5731 if (current_lang_name == lang_name_cplusplus
5732 || current_lang_name == lang_name_java)
5733 strict_prototype = strict_prototypes_lang_cplusplus;
5734 else if (current_lang_name == lang_name_c)
5735 strict_prototype = strict_prototypes_lang_c;
5738 /* Type instantiation routines. */
5740 /* Given an OVERLOAD and a TARGET_TYPE, return the function that
5741 matches the TARGET_TYPE. If there is no satisfactory match, return
5742 error_mark_node, and issue an error message if COMPLAIN is
5743 non-zero. If TEMPLATE_ONLY, the name of the overloaded function
5744 was a template-id, and EXPLICIT_TARGS are the explicitly provided
5745 template arguments. */
5748 resolve_address_of_overloaded_function (target_type,
5757 tree explicit_targs;
5759 /* Here's what the standard says:
5763 If the name is a function template, template argument deduction
5764 is done, and if the argument deduction succeeds, the deduced
5765 arguments are used to generate a single template function, which
5766 is added to the set of overloaded functions considered.
5768 Non-member functions and static member functions match targets of
5769 type "pointer-to-function" or "reference-to-function." Nonstatic
5770 member functions match targets of type "pointer-to-member
5771 function;" the function type of the pointer to member is used to
5772 select the member function from the set of overloaded member
5773 functions. If a nonstatic member function is selected, the
5774 reference to the overloaded function name is required to have the
5775 form of a pointer to member as described in 5.3.1.
5777 If more than one function is selected, any template functions in
5778 the set are eliminated if the set also contains a non-template
5779 function, and any given template function is eliminated if the
5780 set contains a second template function that is more specialized
5781 than the first according to the partial ordering rules 14.5.5.2.
5782 After such eliminations, if any, there shall remain exactly one
5783 selected function. */
5786 int is_reference = 0;
5787 /* We store the matches in a TREE_LIST rooted here. The functions
5788 are the TREE_PURPOSE, not the TREE_VALUE, in this list, for easy
5789 interoperability with most_specialized_instantiation. */
5790 tree matches = NULL_TREE;
5793 /* By the time we get here, we should be seeing only real
5794 pointer-to-member types, not the internal POINTER_TYPE to
5795 METHOD_TYPE representation. */
5796 my_friendly_assert (!(TREE_CODE (target_type) == POINTER_TYPE
5797 && (TREE_CODE (TREE_TYPE (target_type))
5798 == METHOD_TYPE)), 0);
5800 if (TREE_CODE (overload) == COMPONENT_REF)
5801 overload = TREE_OPERAND (overload, 1);
5803 /* Check that the TARGET_TYPE is reasonable. */
5804 if (TYPE_PTRFN_P (target_type))
5807 else if (TYPE_PTRMEMFUNC_P (target_type))
5808 /* This is OK, too. */
5810 else if (TREE_CODE (target_type) == FUNCTION_TYPE)
5812 /* This is OK, too. This comes from a conversion to reference
5814 target_type = build_reference_type (target_type);
5820 cp_error("cannot resolve overloaded function `%D' based on conversion to type `%T'",
5821 DECL_NAME (OVL_FUNCTION (overload)), target_type);
5822 return error_mark_node;
5825 /* If we can find a non-template function that matches, we can just
5826 use it. There's no point in generating template instantiations
5827 if we're just going to throw them out anyhow. But, of course, we
5828 can only do this when we don't *need* a template function. */
5833 for (fns = overload; fns; fns = OVL_CHAIN (fns))
5835 tree fn = OVL_FUNCTION (fns);
5838 if (TREE_CODE (fn) == TEMPLATE_DECL)
5839 /* We're not looking for templates just yet. */
5842 if ((TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
5844 /* We're looking for a non-static member, and this isn't
5845 one, or vice versa. */
5848 /* See if there's a match. */
5849 fntype = TREE_TYPE (fn);
5851 fntype = build_ptrmemfunc_type (build_pointer_type (fntype));
5852 else if (!is_reference)
5853 fntype = build_pointer_type (fntype);
5855 if (can_convert_arg (target_type, fntype, fn))
5856 matches = tree_cons (fn, NULL_TREE, matches);
5860 /* Now, if we've already got a match (or matches), there's no need
5861 to proceed to the template functions. But, if we don't have a
5862 match we need to look at them, too. */
5865 tree target_fn_type;
5866 tree target_arg_types;
5867 tree target_ret_type;
5872 = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (target_type));
5874 target_fn_type = TREE_TYPE (target_type);
5875 target_arg_types = TYPE_ARG_TYPES (target_fn_type);
5876 target_ret_type = TREE_TYPE (target_fn_type);
5878 for (fns = overload; fns; fns = OVL_CHAIN (fns))
5880 tree fn = OVL_FUNCTION (fns);
5882 tree instantiation_type;
5885 if (TREE_CODE (fn) != TEMPLATE_DECL)
5886 /* We're only looking for templates. */
5889 if ((TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
5891 /* We're not looking for a non-static member, and this is
5892 one, or vice versa. */
5895 /* Try to do argument deduction. */
5896 targs = make_tree_vec (DECL_NTPARMS (fn));
5897 if (fn_type_unification (fn, explicit_targs, targs,
5898 target_arg_types, target_ret_type,
5900 /* Argument deduction failed. */
5903 /* Instantiate the template. */
5904 instantiation = instantiate_template (fn, targs);
5905 if (instantiation == error_mark_node)
5906 /* Instantiation failed. */
5909 /* See if there's a match. */
5910 instantiation_type = TREE_TYPE (instantiation);
5912 instantiation_type =
5913 build_ptrmemfunc_type (build_pointer_type (instantiation_type));
5914 else if (!is_reference)
5915 instantiation_type = build_pointer_type (instantiation_type);
5916 if (can_convert_arg (target_type, instantiation_type, instantiation))
5917 matches = tree_cons (instantiation, fn, matches);
5920 /* Now, remove all but the most specialized of the matches. */
5923 tree match = most_specialized_instantiation (matches,
5926 if (match != error_mark_node)
5927 matches = tree_cons (match, NULL_TREE, NULL_TREE);
5931 /* Now we should have exactly one function in MATCHES. */
5932 if (matches == NULL_TREE)
5934 /* There were *no* matches. */
5937 cp_error ("no matches converting function `%D' to type `%#T'",
5938 DECL_NAME (OVL_FUNCTION (overload)),
5941 /* print_candidates expects a chain with the functions in
5942 TREE_VALUE slots, so we cons one up here (we're losing anyway,
5943 so why be clever?). */
5944 for (; overload; overload = OVL_NEXT (overload))
5945 matches = tree_cons (NULL_TREE, OVL_CURRENT (overload),
5948 print_candidates (matches);
5950 return error_mark_node;
5952 else if (TREE_CHAIN (matches))
5954 /* There were too many matches. */
5960 cp_error ("converting overloaded function `%D' to type `%#T' is ambiguous",
5961 DECL_NAME (OVL_FUNCTION (overload)),
5964 /* Since print_candidates expects the functions in the
5965 TREE_VALUE slot, we flip them here. */
5966 for (match = matches; match; match = TREE_CHAIN (match))
5967 TREE_VALUE (match) = TREE_PURPOSE (match);
5969 print_candidates (matches);
5972 return error_mark_node;
5975 /* Good, exactly one match. Now, convert it to the correct type. */
5976 fn = TREE_PURPOSE (matches);
5980 if (TYPE_PTRFN_P (target_type) || TYPE_PTRMEMFUNC_P (target_type))
5981 return build_unary_op (ADDR_EXPR, fn, 0);
5984 /* The target must be a REFERENCE_TYPE. Above, build_unary_op
5985 will mark the function as addressed, but here we must do it
5987 mark_addressable (fn);
5993 /* This function will instantiate the type of the expression given in
5994 RHS to match the type of LHSTYPE. If errors exist, then return
5995 error_mark_node. We only complain is COMPLAIN is set. If we are
5996 not complaining, never modify rhs, as overload resolution wants to
5997 try many possible instantiations, in hopes that at least one will
6000 FLAGS is a bitmask, as we see at the top of the function.
6002 For non-recursive calls, LHSTYPE should be a function, pointer to
6003 function, or a pointer to member function. */
6006 instantiate_type (lhstype, rhs, flags)
6010 int complain = (flags & 1);
6011 int strict = (flags & 2) ? COMPARE_NO_ATTRIBUTES : COMPARE_STRICT;
6014 if (TREE_CODE (lhstype) == UNKNOWN_TYPE)
6017 error ("not enough type information");
6018 return error_mark_node;
6021 if (TREE_TYPE (rhs) != NULL_TREE && ! (type_unknown_p (rhs)))
6023 if (comptypes (lhstype, TREE_TYPE (rhs), strict))
6026 cp_error ("argument of type `%T' does not match `%T'",
6027 TREE_TYPE (rhs), lhstype);
6028 return error_mark_node;
6031 /* We don't overwrite rhs if it is an overloaded function.
6032 Copying it would destroy the tree link. */
6033 if (TREE_CODE (rhs) != OVERLOAD)
6034 rhs = copy_node (rhs);
6036 /* This should really only be used when attempting to distinguish
6037 what sort of a pointer to function we have. For now, any
6038 arithmetic operation which is not supported on pointers
6039 is rejected as an error. */
6041 switch (TREE_CODE (rhs))
6048 my_friendly_abort (177);
6049 return error_mark_node;
6056 new_rhs = instantiate_type (build_pointer_type (lhstype),
6057 TREE_OPERAND (rhs, 0), flags);
6058 if (new_rhs == error_mark_node)
6059 return error_mark_node;
6061 TREE_TYPE (rhs) = lhstype;
6062 TREE_OPERAND (rhs, 0) = new_rhs;
6067 rhs = copy_node (TREE_OPERAND (rhs, 0));
6068 TREE_TYPE (rhs) = unknown_type_node;
6069 return instantiate_type (lhstype, rhs, flags);
6073 r = instantiate_type (lhstype, TREE_OPERAND (rhs, 1), flags);
6076 if (r != error_mark_node && TYPE_PTRMEMFUNC_P (lhstype)
6077 && complain && !flag_ms_extensions)
6079 /* Note: we check this after the recursive call to avoid
6080 complaining about cases where overload resolution fails. */
6082 tree t = TREE_TYPE (TREE_OPERAND (rhs, 0));
6083 tree fn = PTRMEM_CST_MEMBER (r);
6085 my_friendly_assert (TREE_CODE (r) == PTRMEM_CST, 990811);
6088 ("object-dependent reference to `%E' can only be used in a call",
6091 (" to form a pointer to member function, say `&%T::%E'",
6099 rhs = TREE_OPERAND (rhs, 1);
6100 if (BASELINK_P (rhs))
6101 return instantiate_type (lhstype, TREE_VALUE (rhs), flags);
6103 /* This can happen if we are forming a pointer-to-member for a
6105 my_friendly_assert (TREE_CODE (rhs) == TEMPLATE_ID_EXPR, 0);
6109 case TEMPLATE_ID_EXPR:
6111 tree fns = TREE_OPERAND (rhs, 0);
6112 tree args = TREE_OPERAND (rhs, 1);
6115 resolve_address_of_overloaded_function (lhstype,
6118 /*template_only=*/1,
6120 if (TREE_CODE (fns) == COMPONENT_REF)
6130 resolve_address_of_overloaded_function (lhstype,
6133 /*template_only=*/0,
6134 /*explicit_targs=*/NULL_TREE);
6137 /* Now we should have a baselink. */
6138 my_friendly_assert (BASELINK_P (rhs), 990412);
6140 return instantiate_type (lhstype, TREE_VALUE (rhs), flags);
6143 /* This is too hard for now. */
6144 my_friendly_abort (183);
6145 return error_mark_node;
6150 TREE_OPERAND (rhs, 0)
6151 = instantiate_type (lhstype, TREE_OPERAND (rhs, 0), flags);
6152 if (TREE_OPERAND (rhs, 0) == error_mark_node)
6153 return error_mark_node;
6154 TREE_OPERAND (rhs, 1)
6155 = instantiate_type (lhstype, TREE_OPERAND (rhs, 1), flags);
6156 if (TREE_OPERAND (rhs, 1) == error_mark_node)
6157 return error_mark_node;
6159 TREE_TYPE (rhs) = lhstype;
6163 case TRUNC_DIV_EXPR:
6164 case FLOOR_DIV_EXPR:
6166 case ROUND_DIV_EXPR:
6168 case TRUNC_MOD_EXPR:
6169 case FLOOR_MOD_EXPR:
6171 case ROUND_MOD_EXPR:
6172 case FIX_ROUND_EXPR:
6173 case FIX_FLOOR_EXPR:
6175 case FIX_TRUNC_EXPR:
6191 case PREINCREMENT_EXPR:
6192 case PREDECREMENT_EXPR:
6193 case POSTINCREMENT_EXPR:
6194 case POSTDECREMENT_EXPR:
6196 error ("invalid operation on uninstantiated type");
6197 return error_mark_node;
6199 case TRUTH_AND_EXPR:
6201 case TRUTH_XOR_EXPR:
6208 case TRUTH_ANDIF_EXPR:
6209 case TRUTH_ORIF_EXPR:
6210 case TRUTH_NOT_EXPR:
6212 error ("not enough type information");
6213 return error_mark_node;
6216 if (type_unknown_p (TREE_OPERAND (rhs, 0)))
6219 error ("not enough type information");
6220 return error_mark_node;
6222 TREE_OPERAND (rhs, 1)
6223 = instantiate_type (lhstype, TREE_OPERAND (rhs, 1), flags);
6224 if (TREE_OPERAND (rhs, 1) == error_mark_node)
6225 return error_mark_node;
6226 TREE_OPERAND (rhs, 2)
6227 = instantiate_type (lhstype, TREE_OPERAND (rhs, 2), flags);
6228 if (TREE_OPERAND (rhs, 2) == error_mark_node)
6229 return error_mark_node;
6231 TREE_TYPE (rhs) = lhstype;
6235 TREE_OPERAND (rhs, 1)
6236 = instantiate_type (lhstype, TREE_OPERAND (rhs, 1), flags);
6237 if (TREE_OPERAND (rhs, 1) == error_mark_node)
6238 return error_mark_node;
6240 TREE_TYPE (rhs) = lhstype;
6244 return instantiate_type (lhstype, TREE_OPERAND (rhs, 0), flags);
6246 case ENTRY_VALUE_EXPR:
6247 my_friendly_abort (184);
6248 return error_mark_node;
6251 return error_mark_node;
6254 my_friendly_abort (185);
6255 return error_mark_node;
6259 /* Return the name of the virtual function pointer field
6260 (as an IDENTIFIER_NODE) for the given TYPE. Note that
6261 this may have to look back through base types to find the
6262 ultimate field name. (For single inheritance, these could
6263 all be the same name. Who knows for multiple inheritance). */
6266 get_vfield_name (type)
6269 tree binfo = TYPE_BINFO (type);
6272 while (BINFO_BASETYPES (binfo)
6273 && TYPE_CONTAINS_VPTR_P (BINFO_TYPE (BINFO_BASETYPE (binfo, 0)))
6274 && ! TREE_VIA_VIRTUAL (BINFO_BASETYPE (binfo, 0)))
6275 binfo = BINFO_BASETYPE (binfo, 0);
6277 type = BINFO_TYPE (binfo);
6278 buf = (char *) alloca (sizeof (VFIELD_NAME_FORMAT)
6279 + TYPE_NAME_LENGTH (type) + 2);
6280 sprintf (buf, VFIELD_NAME_FORMAT, TYPE_NAME_STRING (type));
6281 return get_identifier (buf);
6285 print_class_statistics ()
6287 #ifdef GATHER_STATISTICS
6288 fprintf (stderr, "convert_harshness = %d\n", n_convert_harshness);
6289 fprintf (stderr, "compute_conversion_costs = %d\n", n_compute_conversion_costs);
6290 fprintf (stderr, "build_method_call = %d (inner = %d)\n",
6291 n_build_method_call, n_inner_fields_searched);
6294 fprintf (stderr, "vtables = %d; vtable searches = %d\n",
6295 n_vtables, n_vtable_searches);
6296 fprintf (stderr, "vtable entries = %d; vtable elems = %d\n",
6297 n_vtable_entries, n_vtable_elems);
6302 /* Build a dummy reference to ourselves so Derived::Base (and A::A) works,
6303 according to [class]:
6304 The class-name is also inserted
6305 into the scope of the class itself. For purposes of access checking,
6306 the inserted class name is treated as if it were a public member name. */
6309 build_self_reference ()
6311 tree name = constructor_name (current_class_type);
6312 tree value = build_lang_decl (TYPE_DECL, name, current_class_type);
6315 DECL_NONLOCAL (value) = 1;
6316 DECL_CONTEXT (value) = current_class_type;
6317 DECL_ARTIFICIAL (value) = 1;
6319 if (processing_template_decl)
6320 value = push_template_decl (value);
6322 saved_cas = current_access_specifier;
6323 current_access_specifier = access_public_node;
6324 finish_member_declaration (value);
6325 current_access_specifier = saved_cas;
6328 /* Returns 1 if TYPE contains only padding bytes. */
6331 is_empty_class (type)
6336 if (type == error_mark_node)
6339 if (! IS_AGGR_TYPE (type))
6343 return integer_zerop (CLASSTYPE_SIZE (type));
6345 if (TYPE_BINFO_BASETYPES (type))
6347 t = TYPE_FIELDS (type);
6348 while (t && TREE_CODE (t) != FIELD_DECL)
6350 return (t == NULL_TREE);
6353 /* Find the enclosing class of the given NODE. NODE can be a *_DECL or
6354 a *_TYPE node. NODE can also be a local class. */
6357 get_enclosing_class (type)
6362 while (node && TREE_CODE (node) != NAMESPACE_DECL)
6364 switch (TREE_CODE_CLASS (TREE_CODE (node)))
6367 node = DECL_CONTEXT (node);
6373 node = TYPE_CONTEXT (node);
6377 my_friendly_abort (0);
6383 /* Return 1 if TYPE or one of its enclosing classes is derived from BASE. */
6386 is_base_of_enclosing_class (base, type)
6391 if (get_binfo (base, type, 0))
6394 type = get_enclosing_class (type);
6399 /* Note that NAME was looked up while the current class was being
6400 defined and that the result of that lookup was DECL. */
6403 maybe_note_name_used_in_class (name, decl)
6407 splay_tree names_used;
6409 /* If we're not defining a class, there's nothing to do. */
6410 if (!current_class_type || !TYPE_BEING_DEFINED (current_class_type))
6413 /* If there's already a binding for this NAME, then we don't have
6414 anything to worry about. */
6415 if (IDENTIFIER_CLASS_VALUE (name))
6418 if (!current_class_stack[current_class_depth - 1].names_used)
6419 current_class_stack[current_class_depth - 1].names_used
6420 = splay_tree_new (splay_tree_compare_pointers, 0, 0);
6421 names_used = current_class_stack[current_class_depth - 1].names_used;
6423 splay_tree_insert (names_used,
6424 (splay_tree_key) name,
6425 (splay_tree_value) decl);
6428 /* Note that NAME was declared (as DECL) in the current class. Check
6429 to see that the declaration is legal. */
6432 note_name_declared_in_class (name, decl)
6436 splay_tree names_used;
6439 /* Look to see if we ever used this name. */
6441 = current_class_stack[current_class_depth - 1].names_used;
6445 n = splay_tree_lookup (names_used, (splay_tree_key) name);
6448 /* [basic.scope.class]
6450 A name N used in a class S shall refer to the same declaration
6451 in its context and when re-evaluated in the completed scope of
6453 cp_error ("declaration of `%#D'", decl);
6454 cp_error_at ("changes meaning of `%s' from `%+#D'",
6455 IDENTIFIER_POINTER (DECL_NAME (OVL_CURRENT (decl))),
6460 /* Returns the VAR_DECL for the complete vtable associated with
6461 BINFO. (Under the new ABI, secondary vtables are merged with
6462 primary vtables; this function will return the VAR_DECL for the
6466 get_vtbl_decl_for_binfo (binfo)
6471 decl = BINFO_VTABLE (binfo);
6472 if (decl && TREE_CODE (decl) == PLUS_EXPR)
6474 my_friendly_assert (TREE_CODE (TREE_OPERAND (decl, 0)) == ADDR_EXPR,
6476 decl = TREE_OPERAND (TREE_OPERAND (decl, 0), 0);
6479 my_friendly_assert (TREE_CODE (decl) == VAR_DECL, 20000403);
6483 /* Dump the offsets of all the bases rooted at BINFO (in the hierarchy
6484 dominated by T) to stderr. INDENT should be zero when called from
6485 the top level; it is incremented recursively. */
6488 dump_class_hierarchy_r (t, binfo, indent)
6495 fprintf (stderr, "%*s0x%lx (%s) ", indent, "",
6496 (unsigned long) binfo,
6497 type_as_string (binfo, TS_PLAIN));
6498 fprintf (stderr, HOST_WIDE_INT_PRINT_DEC,
6499 tree_low_cst (BINFO_OFFSET (binfo), 0));
6500 if (TREE_VIA_VIRTUAL (binfo))
6501 fprintf (stderr, " virtual");
6502 if (BINFO_PRIMARY_MARKED_P (binfo)
6503 || (TREE_VIA_VIRTUAL (binfo)
6504 && BINFO_VBASE_PRIMARY_P (binfo_for_vbase (BINFO_TYPE (binfo),
6506 fprintf (stderr, " primary");
6507 fprintf (stderr, "\n");
6509 for (i = 0; i < BINFO_N_BASETYPES (binfo); ++i)
6510 dump_class_hierarchy_r (t, BINFO_BASETYPE (binfo, i), indent + 2);
6513 /* Dump the BINFO hierarchy for T. */
6516 dump_class_hierarchy (t)
6519 dump_class_hierarchy_r (t, TYPE_BINFO (t), 0);
6522 /* Virtual function table initialization. */
6524 /* Create all the necessary vtables for T and its base classes. */
6530 if (merge_primary_and_secondary_vtables_p ())
6535 /* Under the new ABI, we lay out the primary and secondary
6536 vtables in one contiguous vtable. The primary vtable is
6537 first, followed by the non-virtual secondary vtables in
6538 inheritance graph order. */
6539 list = build_tree_list (TYPE_BINFO_VTABLE (t), NULL_TREE);
6540 accumulate_vtbl_inits (TYPE_BINFO (t), TYPE_BINFO (t),
6541 TYPE_BINFO (t), t, list);
6542 /* Then come the virtual bases, also in inheritance graph
6544 for (vbase = TYPE_BINFO (t); vbase; vbase = TREE_CHAIN (vbase))
6546 if (!TREE_VIA_VIRTUAL (vbase))
6549 accumulate_vtbl_inits (vbase, vbase, TYPE_BINFO (t), t, list);
6552 if (TYPE_BINFO_VTABLE (t))
6553 initialize_vtable (TYPE_BINFO (t), TREE_VALUE (list));
6557 dfs_walk (TYPE_BINFO (t), dfs_finish_vtbls,
6558 dfs_unmarked_real_bases_queue_p, t);
6559 dfs_walk (TYPE_BINFO (t), dfs_unmark,
6560 dfs_marked_real_bases_queue_p, t);
6564 /* Called from finish_vtbls via dfs_walk. */
6567 dfs_finish_vtbls (binfo, data)
6571 tree t = (tree) data;
6573 if (BINFO_NEW_VTABLE_MARKED (binfo, t))
6574 initialize_vtable (binfo,
6575 build_vtbl_initializer (binfo, binfo, t,
6576 TYPE_BINFO (t), NULL));
6578 SET_BINFO_MARKED (binfo);
6583 /* Initialize the vtable for BINFO with the INITS. */
6586 initialize_vtable (binfo, inits)
6592 layout_vtable_decl (binfo, list_length (inits));
6593 decl = get_vtbl_decl_for_binfo (binfo);
6594 initialize_array (decl, inits);
6597 /* Initialize DECL (a declaration for a namespace-scope array) with
6601 initialize_array (decl, inits)
6607 context = DECL_CONTEXT (decl);
6608 DECL_CONTEXT (decl) = NULL_TREE;
6609 DECL_INITIAL (decl) = build_nt (CONSTRUCTOR, NULL_TREE, inits);
6610 cp_finish_decl (decl, DECL_INITIAL (decl), NULL_TREE, 0);
6611 DECL_CONTEXT (decl) = context;
6614 /* Build the VTT (virtual table table) for T. */
6625 /* Under the old ABI, we don't use VTTs. */
6629 /* Build up the initializers for the VTT. */
6631 index = size_zero_node;
6632 build_vtt_inits (TYPE_BINFO (t), t, /*virtual_vtts_p=*/1,
6635 /* If we didn't need a VTT, we're done. */
6639 /* Figure out the type of the VTT. */
6640 type = build_index_type (size_int (list_length (inits)));
6641 type = build_cplus_array_type (const_ptr_type_node, type);
6643 /* Now, build the VTT object itself. */
6644 vtt = build_vtable (t, get_vtt_name (t), type);
6645 pushdecl_top_level (vtt);
6646 initialize_array (vtt, inits);
6649 /* The type corresponding to BINFO is a base class of T, but BINFO is
6650 in the base class hierarchy of a class derived from T. Return the
6651 base, in T's hierarchy, that corresponds to BINFO. */
6654 get_matching_base (binfo, t)
6661 if (same_type_p (BINFO_TYPE (binfo), t))
6664 if (TREE_VIA_VIRTUAL (binfo))
6665 return binfo_for_vbase (BINFO_TYPE (binfo), t);
6667 derived = get_matching_base (BINFO_INHERITANCE_CHAIN (binfo), t);
6668 for (i = 0; i < BINFO_N_BASETYPES (derived); ++i)
6669 if (same_type_p (BINFO_TYPE (BINFO_BASETYPE (derived, i)),
6670 BINFO_TYPE (binfo)))
6671 return BINFO_BASETYPE (derived, i);
6673 my_friendly_abort (20000628);
6677 /* Recursively build the VTT-initializer for BINFO (which is in the
6678 hierarchy dominated by T). If VIRTUAL_VTTS_P is non-zero, then
6679 sub-VTTs for virtual bases are included. INITS points to the end
6680 of the initializer list to date. INDEX is the VTT index where the
6681 next element will be placed. */
6684 build_vtt_inits (binfo, t, virtual_vtts_p, inits, index)
6694 tree secondary_vptrs;
6697 /* We only need VTTs for subobjects with virtual bases. */
6698 if (!TYPE_USES_VIRTUAL_BASECLASSES (BINFO_TYPE (binfo)))
6701 /* We need to use a construction vtable if this is not the primary
6703 ctor_vtbl_p = !same_type_p (TREE_TYPE (binfo), t);
6706 build_ctor_vtbl_group (binfo, t);
6708 /* Record the offset in the VTT where this sub-VTT can be found. */
6709 BINFO_SUBVTT_INDEX (binfo) = *index;
6712 /* Add the address of the primary vtable for the complete object. */
6713 init = BINFO_VTABLE (binfo);
6714 if (TREE_CODE (init) == TREE_LIST)
6715 init = TREE_VALUE (init);
6716 *inits = build_tree_list (NULL_TREE, init);
6717 inits = &TREE_CHAIN (*inits);
6718 BINFO_VPTR_INDEX (binfo) = *index;
6719 *index = size_binop (PLUS_EXPR, *index, TYPE_SIZE_UNIT (ptr_type_node));
6721 /* Recursively add the secondary VTTs for non-virtual bases. */
6722 for (i = 0; i < BINFO_N_BASETYPES (binfo); ++i)
6724 b = BINFO_BASETYPE (binfo, i);
6725 if (!TREE_VIA_VIRTUAL (b))
6726 inits = build_vtt_inits (BINFO_BASETYPE (binfo, i), t,
6727 /*virtuals_vtts_p=*/0,
6731 /* Add secondary virtual pointers for all subobjects of BINFO with
6732 either virtual bases or virtual functions overridden along a
6733 virtual path between the declaration and D, except subobjects
6734 that are non-virtual primary bases. */
6735 secondary_vptrs = tree_cons (t, NULL_TREE, BINFO_TYPE (binfo));
6736 TREE_TYPE (secondary_vptrs) = *index;
6737 dfs_walk_real (binfo,
6738 dfs_build_secondary_vptr_vtt_inits,
6740 dfs_unmarked_real_bases_queue_p,
6742 dfs_walk (binfo, dfs_unmark, dfs_marked_real_bases_queue_p, t);
6743 *index = TREE_TYPE (secondary_vptrs);
6745 /* The secondary vptrs come back in reverse order. After we reverse
6746 them, and add the INITS, the last init will be the first element
6748 secondary_vptrs = TREE_VALUE (secondary_vptrs);
6749 if (secondary_vptrs)
6751 *inits = nreverse (secondary_vptrs);
6752 inits = &TREE_CHAIN (secondary_vptrs);
6753 my_friendly_assert (*inits == NULL_TREE, 20000517);
6756 /* Add the secondary VTTs for virtual bases. */
6758 for (b = TYPE_BINFO (BINFO_TYPE (binfo)); b; b = TREE_CHAIN (b))
6762 if (!TREE_VIA_VIRTUAL (b))
6765 vbase = binfo_for_vbase (BINFO_TYPE (b), t);
6766 inits = build_vtt_inits (vbase, t, /*virtual_vtts_p=*/0,
6770 dfs_walk (binfo, dfs_fixup_binfo_vtbls,
6771 dfs_unmarked_real_bases_queue_p,
6772 build_tree_list (t, binfo));
6777 /* Called from build_vtt_inits via dfs_walk. */
6780 dfs_build_secondary_vptr_vtt_inits (binfo, data)
6792 SET_BINFO_MARKED (binfo);
6794 /* We don't care about bases that don't have vtables. */
6795 if (!TYPE_VFIELD (BINFO_TYPE (binfo)))
6798 /* We're only interested in proper subobjects of T. */
6799 if (same_type_p (BINFO_TYPE (binfo), t))
6802 /* We're not interested in non-virtual primary bases. */
6803 if (!TREE_VIA_VIRTUAL (binfo) && BINFO_PRIMARY_MARKED_P (binfo))
6806 /* If BINFO doesn't have virtual bases, then we have to look to see
6807 whether or not any virtual functions were overidden along a
6808 virtual path. The point is that given:
6810 struct V { virtual void f(); int i; };
6811 struct C : public virtual V { void f (); };
6813 when we constrct C we need a secondary vptr for V-in-C because we
6814 don't know what the vcall offset for `f' should be. If `V' ends
6815 up in a different place in the complete object, then we'll need a
6816 different vcall offset than that present in the normal V-in-C
6818 if (!TYPE_USES_VIRTUAL_BASECLASSES (BINFO_TYPE (binfo))
6819 && !BINFO_OVERRIDE_ALONG_VIRTUAL_PATH_P (get_matching_base (binfo, t)))
6822 /* Record the index where this secondary vptr can be found. */
6823 index = TREE_TYPE (l);
6824 BINFO_VPTR_INDEX (binfo) = index;
6825 TREE_TYPE (l) = size_binop (PLUS_EXPR, index,
6826 TYPE_SIZE_UNIT (ptr_type_node));
6828 /* Add the initializer for the secondary vptr itself. */
6829 init = BINFO_VTABLE (binfo);
6830 if (TREE_CODE (init) == TREE_LIST)
6831 init = TREE_VALUE (init);
6832 TREE_VALUE (l) = tree_cons (NULL_TREE, init, TREE_VALUE (l));
6837 /* Called from build_vtt_inits via dfs_walk. */
6840 dfs_fixup_binfo_vtbls (binfo, data)
6844 CLEAR_BINFO_MARKED (binfo);
6846 /* We don't care about bases that don't have vtables. */
6847 if (!TYPE_VFIELD (BINFO_TYPE (binfo)))
6850 /* If we scribbled the construction vtable vptr into BINFO, clear it
6852 if (TREE_CODE (BINFO_VTABLE (binfo)) == TREE_LIST
6853 && (TREE_PURPOSE (BINFO_VTABLE (binfo))
6854 == TREE_VALUE ((tree) data)))
6855 BINFO_VTABLE (binfo) = TREE_CHAIN (BINFO_VTABLE (binfo));
6860 /* Build the construction vtable group for BINFO which is in the
6861 hierarchy dominated by T. */
6864 build_ctor_vtbl_group (binfo, t)
6875 /* See if we've already create this construction vtable group. */
6877 id = mangle_ctor_vtbl_for_type (t, binfo);
6879 id = get_ctor_vtbl_name (t, binfo);
6880 if (IDENTIFIER_GLOBAL_VALUE (id))
6883 /* Build a version of VTBL (with the wrong type) for use in
6884 constructing the addresses of secondary vtables in the
6885 construction vtable group. */
6886 vtbl = build_vtable (t, id, ptr_type_node);
6887 list = build_tree_list (vtbl, NULL_TREE);
6888 accumulate_vtbl_inits (binfo, TYPE_BINFO (TREE_TYPE (binfo)),
6890 for (vbase = TYPE_BINFO (TREE_TYPE (binfo));
6892 vbase = TREE_CHAIN (vbase))
6896 if (!TREE_VIA_VIRTUAL (vbase))
6899 b = binfo_for_vbase (BINFO_TYPE (vbase), t);
6900 accumulate_vtbl_inits (b, vbase, binfo, t, list);
6903 inits = TREE_VALUE (list);
6905 /* Figure out the type of the construction vtable. */
6906 type = build_index_type (size_int (list_length (inits)));
6907 type = build_cplus_array_type (vtable_entry_type, type);
6908 TREE_TYPE (vtbl) = type;
6910 /* Initialize the construction vtable. */
6911 pushdecl_top_level (vtbl);
6912 initialize_array (vtbl, inits);
6915 /* Add the vtbl initializers for BINFO (and its non-primary,
6916 non-virtual bases) to the list of INITS. BINFO is in the hierarchy
6917 dominated by T. ORIG_BINFO must have the same type as BINFO, but
6918 may be different from BINFO if we are building a construction
6919 vtable. RTTI_BINFO gives the object that should be used as the
6920 complete object for BINFO. */
6923 accumulate_vtbl_inits (binfo, orig_binfo, rtti_binfo, t, inits)
6933 my_friendly_assert (same_type_p (BINFO_TYPE (binfo),
6934 BINFO_TYPE (orig_binfo)),
6937 /* This is a construction vtable if the RTTI type is not the most
6938 derived type in the hierarchy. */
6939 ctor_vtbl_p = !same_type_p (BINFO_TYPE (rtti_binfo), t);
6941 /* If we're building a construction vtable, we're not interested in
6942 subobjects that don't require construction vtables. */
6944 && !TYPE_USES_VIRTUAL_BASECLASSES (BINFO_TYPE (binfo))
6945 && !(BINFO_OVERRIDE_ALONG_VIRTUAL_PATH_P
6946 (get_matching_base (binfo, BINFO_TYPE (rtti_binfo)))))
6949 /* Build the initializers for the BINFO-in-T vtable. */
6951 = chainon (TREE_VALUE (inits),
6952 dfs_accumulate_vtbl_inits (binfo, orig_binfo,
6953 rtti_binfo, t, inits));
6955 /* Walk the BINFO and its bases. We walk in preorder so that as we
6956 initialize each vtable we can figure out at what offset the
6957 secondary vtable lies from the primary vtable. We can't use
6958 dfs_walk here because we need to iterate through bases of BINFO
6959 and RTTI_BINFO simultaneously. */
6960 for (i = 0; i < BINFO_N_BASETYPES (binfo); ++i)
6964 base_binfo = BINFO_BASETYPE (binfo, i);
6965 /* Skip virtual bases. */
6966 if (TREE_VIA_VIRTUAL (base_binfo))
6968 accumulate_vtbl_inits (base_binfo,
6969 BINFO_BASETYPE (orig_binfo, i),
6976 /* Called from finish_vtbls via dfs_walk when using the new ABI.
6977 Accumulates the vtable initializers for all of the vtables into
6978 TREE_VALUE (DATA). Returns the initializers for the BINFO vtable. */
6981 dfs_accumulate_vtbl_inits (binfo, orig_binfo, rtti_binfo, t, l)
6988 tree inits = NULL_TREE;
6990 if (BINFO_NEW_VTABLE_MARKED (orig_binfo, t))
6996 /* Compute the initializer for this vtable. */
6997 inits = build_vtbl_initializer (binfo, orig_binfo, t, rtti_binfo,
7000 /* Figure out the position to which the VPTR should point. */
7001 vtbl = TREE_PURPOSE (l);
7002 vtbl = build1 (ADDR_EXPR,
7005 index = size_binop (PLUS_EXPR,
7006 size_int (non_fn_entries),
7007 size_int (list_length (TREE_VALUE (l))));
7008 index = size_binop (MULT_EXPR,
7009 TYPE_SIZE_UNIT (vtable_entry_type),
7011 vtbl = build (PLUS_EXPR, TREE_TYPE (vtbl), vtbl, index);
7012 TREE_CONSTANT (vtbl) = 1;
7014 /* For an ordinary vtable, set BINFO_VTABLE. */
7015 if (same_type_p (BINFO_TYPE (rtti_binfo), t))
7016 BINFO_VTABLE (binfo) = vtbl;
7017 /* For a construction vtable, we can't overwrite BINFO_VTABLE.
7018 So, we make a TREE_LIST. Later, dfs_fixup_binfo_vtbls will
7019 straighten this out. */
7021 BINFO_VTABLE (binfo) =
7022 tree_cons (rtti_binfo, vtbl, BINFO_VTABLE (binfo));
7028 /* Construct the initializer for BINFOs virtual function table. BINFO
7029 is part of the hierarchy dominated by T. If we're building a
7030 construction vtable, the ORIG_BINFO is the binfo we should use to
7031 find the actual function pointers to put in the vtable. Otherwise,
7032 ORIG_BINFO should be the same as BINFO. The RTTI_DOMINATOR is the
7033 BINFO that should be indicated by the RTTI information in the
7034 vtable; it will be a base class of T, rather than T itself, if we
7035 are building a construction vtable.
7037 The value returned is a TREE_LIST suitable for wrapping in a
7038 CONSTRUCTOR to use as the DECL_INITIAL for a vtable. If
7039 NON_FN_ENTRIES_P is not NULL, *NON_FN_ENTRIES_P is set to the
7040 number of non-function entries in the vtable. */
7043 build_vtbl_initializer (binfo, orig_binfo, t, rtti_binfo, non_fn_entries_p)
7048 int *non_fn_entries_p;
7053 vcall_offset_data vod;
7055 /* Initialize those parts of VOD that matter. */
7057 vod.inits = NULL_TREE;
7058 vod.last_init = &vod.inits;
7059 vod.primary_p = (binfo == TYPE_BINFO (t));
7060 /* The first vbase or vcall offset is at index -3 in the vtable. */
7061 vod.index = ssize_int (-3);
7063 /* Add entries to the vtable for RTTI. */
7064 build_rtti_vtbl_entries (binfo, rtti_binfo, &vod);
7066 /* Add the vcall and vbase offset entries. */
7067 build_vcall_and_vbase_vtbl_entries (binfo, &vod);
7068 /* Clear BINFO_VTABLE_PAATH_MARKED; it's set by
7069 build_vbase_offset_vtbl_entries. */
7070 for (vbase = CLASSTYPE_VBASECLASSES (t);
7072 vbase = TREE_CHAIN (vbase))
7073 CLEAR_BINFO_VTABLE_PATH_MARKED (TREE_VALUE (vbase));
7075 if (non_fn_entries_p)
7076 *non_fn_entries_p = list_length (vod.inits);
7078 /* Go through all the ordinary virtual functions, building up
7080 vfun_inits = NULL_TREE;
7081 for (v = BINFO_VIRTUALS (orig_binfo); v; v = TREE_CHAIN (v))
7089 /* Pull the offset for `this', and the function to call, out of
7091 delta = BV_DELTA (v);
7093 if (BV_USE_VCALL_INDEX_P (v))
7095 vcall_index = BV_VCALL_INDEX (v);
7096 my_friendly_assert (vcall_index != NULL_TREE, 20000621);
7099 vcall_index = NULL_TREE;
7102 my_friendly_assert (TREE_CODE (delta) == INTEGER_CST, 19990727);
7103 my_friendly_assert (TREE_CODE (fn) == FUNCTION_DECL, 19990727);
7105 /* You can't call an abstract virtual function; it's abstract.
7106 So, we replace these functions with __pure_virtual. */
7107 if (DECL_PURE_VIRTUAL_P (fn))
7110 /* Take the address of the function, considering it to be of an
7111 appropriate generic type. */
7112 pfn = build1 (ADDR_EXPR, vfunc_ptr_type_node, fn);
7113 /* The address of a function can't change. */
7114 TREE_CONSTANT (pfn) = 1;
7115 /* Enter it in the vtable. */
7116 init = build_vtable_entry (delta, vcall_index, pfn,
7117 BV_GENERATE_THUNK_WITH_VTABLE_P (v));
7118 /* And add it to the chain of initializers. */
7119 vfun_inits = tree_cons (NULL_TREE, init, vfun_inits);
7122 /* The initializers for virtual functions were built up in reverse
7123 order; straighten them out now. */
7124 vfun_inits = nreverse (vfun_inits);
7126 /* The negative offset initializers are also in reverse order. */
7127 vod.inits = nreverse (vod.inits);
7129 /* Chain the two together. */
7130 return chainon (vod.inits, vfun_inits);
7133 /* Sets vod->inits to be the initializers for the vbase and vcall
7134 offsets in BINFO, which is in the hierarchy dominated by T. */
7137 build_vcall_and_vbase_vtbl_entries (binfo, vod)
7139 vcall_offset_data *vod;
7143 /* If this is a derived class, we must first create entries
7144 corresponding to the primary base class. */
7145 b = BINFO_PRIMARY_BINFO (binfo);
7147 build_vcall_and_vbase_vtbl_entries (b, vod);
7149 /* Add the vbase entries for this base. */
7150 build_vbase_offset_vtbl_entries (binfo, vod);
7151 /* Add the vcall entries for this base. */
7152 build_vcall_offset_vtbl_entries (binfo, vod);
7155 /* Returns the initializers for the vbase offset entries in the vtable
7156 for BINFO (which is part of the class hierarchy dominated by T), in
7157 reverse order. VBASE_OFFSET_INDEX gives the vtable index
7158 where the next vbase offset will go. */
7161 build_vbase_offset_vtbl_entries (binfo, vod)
7163 vcall_offset_data *vod;
7168 /* Under the old ABI, pointers to virtual bases are stored in each
7170 if (!vbase_offsets_in_vtable_p ())
7173 /* If there are no virtual baseclasses, then there is nothing to
7175 if (!TYPE_USES_VIRTUAL_BASECLASSES (BINFO_TYPE (binfo)))
7180 /* Go through the virtual bases, adding the offsets. */
7181 for (vbase = TYPE_BINFO (BINFO_TYPE (binfo));
7183 vbase = TREE_CHAIN (vbase))
7188 if (!TREE_VIA_VIRTUAL (vbase))
7191 /* Find the instance of this virtual base in the complete
7193 b = binfo_for_vbase (BINFO_TYPE (vbase), t);
7195 /* If we've already got an offset for this virtual base, we
7196 don't need another one. */
7197 if (BINFO_VTABLE_PATH_MARKED (b))
7199 SET_BINFO_VTABLE_PATH_MARKED (b);
7201 /* Figure out where we can find this vbase offset. */
7202 delta = size_binop (MULT_EXPR,
7205 TYPE_SIZE_UNIT (vtable_entry_type)));
7207 BINFO_VPTR_FIELD (b) = delta;
7209 if (binfo != TYPE_BINFO (t))
7213 /* Find the instance of this virtual base in the type of BINFO. */
7214 orig_vbase = binfo_for_vbase (BINFO_TYPE (vbase),
7215 BINFO_TYPE (binfo));
7217 /* The vbase offset had better be the same. */
7218 if (!tree_int_cst_equal (delta,
7219 BINFO_VPTR_FIELD (orig_vbase)))
7220 my_friendly_abort (20000403);
7223 /* The next vbase will come at a more negative offset. */
7224 vod->index = size_binop (MINUS_EXPR, vod->index, ssize_int (1));
7226 /* The initializer is the delta from BINFO to this virtual base.
7227 The vbase offsets go in reverse inheritance-graph order, and
7228 we are walking in inheritance graph order so these end up in
7230 delta = size_diffop (BINFO_OFFSET (b), BINFO_OFFSET (binfo));
7232 = build_tree_list (NULL_TREE,
7233 fold (build1 (NOP_EXPR,
7236 vod->last_init = &TREE_CHAIN (*vod->last_init);
7240 /* Called from build_vcall_offset_vtbl_entries via dfs_walk. */
7243 dfs_build_vcall_offset_vtbl_entries (binfo, data)
7247 vcall_offset_data* vod;
7248 tree derived_virtuals;
7251 /* If BINFO is a primary base, this is the least derived class of
7252 BINFO that is not a primary base. */
7253 tree non_primary_binfo;
7254 /* The primary base of BINFO. */
7258 vod = (vcall_offset_data *) data;
7259 binfo_inits = NULL_TREE;
7261 /* We might be a primary base class. Go up the inheritance
7262 hierarchy until we find the class of which we are a primary base:
7263 it is the BINFO_VIRTUALS there that we need to consider. */
7264 non_primary_binfo = binfo;
7265 while (BINFO_INHERITANCE_CHAIN (non_primary_binfo))
7267 tree b = BINFO_INHERITANCE_CHAIN (non_primary_binfo);
7268 if (BINFO_PRIMARY_BINFO (b) != non_primary_binfo)
7270 non_primary_binfo = b;
7273 /* Skip virtuals that we have already handled in a primary base
7275 base_virtuals = BINFO_VIRTUALS (binfo);
7276 derived_virtuals = BINFO_VIRTUALS (non_primary_binfo);
7277 primary_binfo = BINFO_PRIMARY_BINFO (binfo);
7279 for (i = 0; i < CLASSTYPE_VSIZE (BINFO_TYPE (primary_binfo)); ++i)
7281 base_virtuals = TREE_CHAIN (base_virtuals);
7282 derived_virtuals = TREE_CHAIN (derived_virtuals);
7285 /* Make entries for the rest of the virtuals. */
7286 for (; base_virtuals;
7287 derived_virtuals = TREE_CHAIN (derived_virtuals),
7288 base_virtuals = TREE_CHAIN (base_virtuals))
7290 /* Figure out what function we're looking at. */
7291 tree fn = BV_FN (derived_virtuals);
7296 /* If there is already an entry for a function with the same
7297 signature as FN, then we do not need a second vcall offset.
7298 Check the list of functions already present in the derived
7300 for (i = 0; i < VARRAY_ACTIVE_SIZE (vod->fns); ++i)
7304 derived_entry = VARRAY_TREE (vod->fns, i);
7305 if (same_signature_p (BV_FN (derived_entry), fn))
7307 BV_VCALL_INDEX (derived_virtuals)
7308 = BV_VCALL_INDEX (derived_entry);
7312 if (i != VARRAY_ACTIVE_SIZE (vod->fns))
7315 /* The FN comes from BASE. So, we must caculate the adjustment
7316 from the virtual base that derived from BINFO to BASE. */
7317 base = DECL_CONTEXT (fn);
7318 base_binfo = get_binfo (base, vod->derived, /*protect=*/0);
7320 /* Compute the vcall offset. */
7324 fold (build1 (NOP_EXPR, vtable_entry_type,
7325 size_diffop (BINFO_OFFSET (base_binfo),
7326 BINFO_OFFSET (vod->vbase))))));
7327 vod->last_init = &TREE_CHAIN (*vod->last_init);
7329 /* If there is already a vcall index, then we are processing a
7330 construction vtable. The index should be the same as it was
7331 when we processed the vtable for the base class. */
7332 if (BV_VCALL_INDEX (derived_virtuals))
7333 my_friendly_assert (tree_int_cst_equal (BV_VCALL_INDEX
7337 /* Keep track of the vtable index where this vcall offset can be
7340 BV_VCALL_INDEX (derived_virtuals) = vod->index;
7342 /* The next vcall offset will be found at a more negative
7344 vod->index = size_binop (MINUS_EXPR, vod->index, ssize_int (1));
7346 /* Keep track of this function. */
7347 VARRAY_PUSH_TREE (vod->fns, derived_virtuals);
7353 /* Adds the initializers for the vcall offset entries in the vtable
7354 for BINFO (which is part of the class hierarchy dominated by T) to
7358 build_vcall_offset_vtbl_entries (binfo, vod)
7360 vcall_offset_data *vod;
7362 /* Under the old ABI, the adjustments to the `this' pointer were made
7364 if (!vcall_offsets_in_vtable_p ())
7367 /* We only need these entries if this base is a virtual base. */
7368 if (!TREE_VIA_VIRTUAL (binfo))
7371 /* We need a vcall offset for each of the virtual functions in this
7372 vtable. For example:
7374 class A { virtual void f (); };
7375 class B : virtual public A { };
7376 class C: virtual public A, public B {};
7383 The location of `A' is not at a fixed offset relative to `B'; the
7384 offset depends on the complete object derived from `B'. So,
7385 `B' vtable contains an entry for `f' that indicates by what
7386 amount the `this' pointer for `B' needs to be adjusted to arrive
7389 We need entries for all the functions in our primary vtable and
7390 in our non-virtual bases vtables. For each base, the entries
7391 appear in the same order as in the base; but the bases themselves
7392 appear in reverse depth-first, left-to-right order. */
7394 VARRAY_TREE_INIT (vod->fns, 32, "fns");
7395 dfs_walk_real (binfo,
7396 dfs_build_vcall_offset_vtbl_entries,
7400 VARRAY_FREE (vod->fns);
7403 /* Return vtbl initializers for the RTTI entries coresponding to the
7404 BINFO's vtable. The RTTI entries should indicate the object given
7408 build_rtti_vtbl_entries (binfo, rtti_binfo, vod)
7411 vcall_offset_data *vod;
7420 basetype = BINFO_TYPE (binfo);
7421 t = BINFO_TYPE (rtti_binfo);
7423 /* For a COM object there is no RTTI entry. */
7424 if (CLASSTYPE_COM_INTERFACE (basetype))
7427 /* To find the complete object, we will first convert to our most
7428 primary base, and then add the offset in the vtbl to that value. */
7430 while (CLASSTYPE_HAS_PRIMARY_BASE_P (BINFO_TYPE (b)))
7434 primary_base = BINFO_PRIMARY_BINFO (b);
7435 if (!BINFO_PRIMARY_MARKED_P (primary_base))
7439 offset = size_diffop (BINFO_OFFSET (rtti_binfo), BINFO_OFFSET (b));
7441 /* The second entry is, in the case of the new ABI, the address of
7442 the typeinfo object, or, in the case of the old ABI, a function
7443 which returns a typeinfo object. */
7444 if (new_abi_rtti_p ())
7447 decl = build_unary_op (ADDR_EXPR, get_tinfo_decl (t), 0);
7449 decl = integer_zero_node;
7451 /* Convert the declaration to a type that can be stored in the
7453 init = build1 (NOP_EXPR, vfunc_ptr_type_node, decl);
7454 TREE_CONSTANT (init) = 1;
7459 decl = get_tinfo_decl (t);
7461 decl = abort_fndecl;
7463 /* Convert the declaration to a type that can be stored in the
7465 init = build1 (ADDR_EXPR, vfunc_ptr_type_node, decl);
7466 TREE_CONSTANT (init) = 1;
7467 init = build_vtable_entry (offset, NULL_TREE, init,
7468 /*generate_with_vtable_p=*/0);
7470 *vod->last_init = build_tree_list (NULL_TREE, init);
7471 vod->last_init = &TREE_CHAIN (*vod->last_init);
7473 /* Add the offset-to-top entry. It comes earlier in the vtable that
7474 the the typeinfo entry. */
7475 if (flag_vtable_thunks)
7477 /* Convert the offset to look like a function pointer, so that
7478 we can put it in the vtable. */
7479 init = build1 (NOP_EXPR, vfunc_ptr_type_node, offset);
7480 TREE_CONSTANT (init) = 1;
7481 *vod->last_init = build_tree_list (NULL_TREE, init);
7482 vod->last_init = &TREE_CHAIN (*vod->last_init);
7486 /* Build an entry in the virtual function table. DELTA is the offset
7487 for the `this' pointer. VCALL_INDEX is the vtable index containing
7488 the vcall offset; zero if none. ENTRY is the virtual function
7489 table entry itself. It's TREE_TYPE must be VFUNC_PTR_TYPE_NODE,
7490 but it may not actually be a virtual function table pointer. (For
7491 example, it might be the address of the RTTI object, under the new
7495 build_vtable_entry (delta, vcall_index, entry, generate_with_vtable_p)
7499 int generate_with_vtable_p;
7501 if (flag_vtable_thunks)
7505 fn = TREE_OPERAND (entry, 0);
7506 if ((!integer_zerop (delta) || vcall_index != NULL_TREE)
7507 && fn != abort_fndecl
7508 && !DECL_TINFO_FN_P (fn))
7510 entry = make_thunk (entry, delta, vcall_index,
7511 generate_with_vtable_p);
7512 entry = build1 (ADDR_EXPR, vtable_entry_type, entry);
7513 TREE_READONLY (entry) = 1;
7514 TREE_CONSTANT (entry) = 1;
7516 #ifdef GATHER_STATISTICS
7517 n_vtable_entries += 1;
7523 tree elems = tree_cons (NULL_TREE, delta,
7524 tree_cons (NULL_TREE, integer_zero_node,
7525 build_tree_list (NULL_TREE, entry)));
7526 tree entry = build (CONSTRUCTOR, vtable_entry_type, NULL_TREE, elems);
7528 /* We don't use vcall offsets when not using vtable thunks. */
7529 my_friendly_assert (vcall_index == NULL_TREE, 20000125);
7531 /* DELTA used to be constructed by `size_int' and/or size_binop,
7532 which caused overflow problems when it was negative. That should
7535 if (! int_fits_type_p (delta, delta_type_node))
7537 if (flag_huge_objects)
7538 sorry ("object size exceeds built-in limit for virtual function table implementation");
7540 sorry ("object size exceeds normal limit for virtual function table implementation, recompile all source and use -fhuge-objects");
7543 TREE_CONSTANT (entry) = 1;
7544 TREE_STATIC (entry) = 1;
7545 TREE_READONLY (entry) = 1;
7547 #ifdef GATHER_STATISTICS
7548 n_vtable_entries += 1;