pipe - pre-MP work, change indexing to circular FIFO rindex/windex.
[dragonfly.git] / contrib / gcc-3.4 / gcc / cp / class.c
blobc14313c8bf8b196051cb2f2c44426e6c32a83244
1 /* Functions related to building classes and their related objects.
2 Copyright (C) 1987, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3 1999, 2000, 2001, 2002, 2003, 2004, 2005
4 Free Software Foundation, Inc.
5 Contributed by Michael Tiemann (tiemann@cygnus.com)
7 This file is part of GCC.
9 GCC is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2, or (at your option)
12 any later version.
14 GCC is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with GCC; see the file COPYING. If not, write to
21 the Free Software Foundation, 59 Temple Place - Suite 330,
22 Boston, MA 02111-1307, USA. */
25 /* High-level class interface. */
27 #include "config.h"
28 #include "system.h"
29 #include "coretypes.h"
30 #include "tm.h"
31 #include "tree.h"
32 #include "cp-tree.h"
33 #include "flags.h"
34 #include "rtl.h"
35 #include "output.h"
36 #include "toplev.h"
37 #include "lex.h"
38 #include "target.h"
39 #include "convert.h"
41 /* The number of nested classes being processed. If we are not in the
42 scope of any class, this is zero. */
44 int current_class_depth;
46 /* In order to deal with nested classes, we keep a stack of classes.
47 The topmost entry is the innermost class, and is the entry at index
48 CURRENT_CLASS_DEPTH */
50 typedef struct class_stack_node {
51 /* The name of the class. */
52 tree name;
54 /* The _TYPE node for the class. */
55 tree type;
57 /* The access specifier pending for new declarations in the scope of
58 this class. */
59 tree access;
61 /* If were defining TYPE, the names used in this class. */
62 splay_tree names_used;
63 }* class_stack_node_t;
65 typedef struct vtbl_init_data_s
67 /* The base for which we're building initializers. */
68 tree binfo;
69 /* The type of the most-derived type. */
70 tree derived;
71 /* The binfo for the dynamic type. This will be TYPE_BINFO (derived),
72 unless ctor_vtbl_p is true. */
73 tree rtti_binfo;
74 /* The negative-index vtable initializers built up so far. These
75 are in order from least negative index to most negative index. */
76 tree inits;
77 /* The last (i.e., most negative) entry in INITS. */
78 tree* last_init;
79 /* The binfo for the virtual base for which we're building
80 vcall offset initializers. */
81 tree vbase;
82 /* The functions in vbase for which we have already provided vcall
83 offsets. */
84 varray_type fns;
85 /* The vtable index of the next vcall or vbase offset. */
86 tree index;
87 /* Nonzero if we are building the initializer for the primary
88 vtable. */
89 int primary_vtbl_p;
90 /* Nonzero if we are building the initializer for a construction
91 vtable. */
92 int ctor_vtbl_p;
93 /* True when adding vcall offset entries to the vtable. False when
94 merely computing the indices. */
95 bool generate_vcall_entries;
96 } vtbl_init_data;
98 /* The type of a function passed to walk_subobject_offsets. */
99 typedef int (*subobject_offset_fn) (tree, tree, splay_tree);
101 /* The stack itself. This is a dynamically resized array. The
102 number of elements allocated is CURRENT_CLASS_STACK_SIZE. */
103 static int current_class_stack_size;
104 static class_stack_node_t current_class_stack;
106 /* An array of all local classes present in this translation unit, in
107 declaration order. */
108 varray_type local_classes;
110 static tree get_vfield_name (tree);
111 static void finish_struct_anon (tree);
112 static tree get_vtable_name (tree);
113 static tree get_basefndecls (tree, tree);
114 static int build_primary_vtable (tree, tree);
115 static int build_secondary_vtable (tree);
116 static void finish_vtbls (tree);
117 static void modify_vtable_entry (tree, tree, tree, tree, tree *);
118 static void finish_struct_bits (tree);
119 static int alter_access (tree, tree, tree);
120 static void handle_using_decl (tree, tree);
121 static void check_for_override (tree, tree);
122 static tree dfs_modify_vtables (tree, void *);
123 static tree modify_all_vtables (tree, tree);
124 static void determine_primary_base (tree);
125 static void finish_struct_methods (tree);
126 static void maybe_warn_about_overly_private_class (tree);
127 static int method_name_cmp (const void *, const void *);
128 static int resort_method_name_cmp (const void *, const void *);
129 static void add_implicitly_declared_members (tree, int, int, int);
130 static tree fixed_type_or_null (tree, int *, int *);
131 static tree resolve_address_of_overloaded_function (tree, tree, tsubst_flags_t,
132 bool, tree);
133 static tree build_vtbl_ref_1 (tree, tree);
134 static tree build_vtbl_initializer (tree, tree, tree, tree, int *);
135 static int count_fields (tree);
136 static int add_fields_to_record_type (tree, struct sorted_fields_type*, int);
137 static void check_bitfield_decl (tree);
138 static void check_field_decl (tree, tree, int *, int *, int *, int *);
139 static void check_field_decls (tree, tree *, int *, int *, int *);
140 static tree *build_base_field (record_layout_info, tree, splay_tree, tree *);
141 static void build_base_fields (record_layout_info, splay_tree, tree *);
142 static void check_methods (tree);
143 static void remove_zero_width_bit_fields (tree);
144 static void check_bases (tree, int *, int *, int *);
145 static void check_bases_and_members (tree);
146 static tree create_vtable_ptr (tree, tree *);
147 static void include_empty_classes (record_layout_info);
148 static void layout_class_type (tree, tree *);
149 static void fixup_pending_inline (tree);
150 static void fixup_inline_methods (tree);
151 static void set_primary_base (tree, tree);
152 static void propagate_binfo_offsets (tree, tree);
153 static void layout_virtual_bases (record_layout_info, splay_tree);
154 static void build_vbase_offset_vtbl_entries (tree, vtbl_init_data *);
155 static void add_vcall_offset_vtbl_entries_r (tree, vtbl_init_data *);
156 static void add_vcall_offset_vtbl_entries_1 (tree, vtbl_init_data *);
157 static void build_vcall_offset_vtbl_entries (tree, vtbl_init_data *);
158 static void add_vcall_offset (tree, tree, vtbl_init_data *);
159 static void layout_vtable_decl (tree, int);
160 static tree dfs_find_final_overrider (tree, void *);
161 static tree dfs_find_final_overrider_post (tree, void *);
162 static tree dfs_find_final_overrider_q (tree, int, void *);
163 static tree find_final_overrider (tree, tree, tree);
164 static int make_new_vtable (tree, tree);
165 static int maybe_indent_hierarchy (FILE *, int, int);
166 static tree dump_class_hierarchy_r (FILE *, int, tree, tree, int);
167 static void dump_class_hierarchy (tree);
168 static void dump_class_hierarchy_1 (FILE *, int, tree);
169 static void dump_array (FILE *, tree);
170 static void dump_vtable (tree, tree, tree);
171 static void dump_vtt (tree, tree);
172 static void dump_thunk (FILE *, int, tree);
173 static tree build_vtable (tree, tree, tree);
174 static void initialize_vtable (tree, tree);
175 static void initialize_array (tree, tree);
176 static void layout_nonempty_base_or_field (record_layout_info,
177 tree, tree, splay_tree);
178 static tree end_of_class (tree, int);
179 static bool layout_empty_base (tree, tree, splay_tree);
180 static void accumulate_vtbl_inits (tree, tree, tree, tree, tree);
181 static tree dfs_accumulate_vtbl_inits (tree, tree, tree, tree,
182 tree);
183 static void build_rtti_vtbl_entries (tree, vtbl_init_data *);
184 static void build_vcall_and_vbase_vtbl_entries (tree,
185 vtbl_init_data *);
186 static void mark_primary_bases (tree);
187 static void clone_constructors_and_destructors (tree);
188 static tree build_clone (tree, tree);
189 static void update_vtable_entry_for_fn (tree, tree, tree, tree *, unsigned);
190 static tree copy_virtuals (tree);
191 static void build_ctor_vtbl_group (tree, tree);
192 static void build_vtt (tree);
193 static tree binfo_ctor_vtable (tree);
194 static tree *build_vtt_inits (tree, tree, tree *, tree *);
195 static tree dfs_build_secondary_vptr_vtt_inits (tree, void *);
196 static tree dfs_ctor_vtable_bases_queue_p (tree, int, void *data);
197 static tree dfs_fixup_binfo_vtbls (tree, void *);
198 static int record_subobject_offset (tree, tree, splay_tree);
199 static int check_subobject_offset (tree, tree, splay_tree);
200 static int walk_subobject_offsets (tree, subobject_offset_fn,
201 tree, splay_tree, tree, int);
202 static void record_subobject_offsets (tree, tree, splay_tree, int);
203 static int layout_conflict_p (tree, tree, splay_tree, int);
204 static int splay_tree_compare_integer_csts (splay_tree_key k1,
205 splay_tree_key k2);
206 static void warn_about_ambiguous_bases (tree);
207 static bool type_requires_array_cookie (tree);
208 static bool contains_empty_class_p (tree);
209 static bool base_derived_from (tree, tree);
210 static int empty_base_at_nonzero_offset_p (tree, tree, splay_tree);
211 static tree end_of_base (tree);
212 static tree get_vcall_index (tree, tree);
214 /* Macros for dfs walking during vtt construction. See
215 dfs_ctor_vtable_bases_queue_p, dfs_build_secondary_vptr_vtt_inits
216 and dfs_fixup_binfo_vtbls. */
217 #define VTT_TOP_LEVEL_P(NODE) TREE_UNSIGNED (NODE)
218 #define VTT_MARKED_BINFO_P(NODE) TREE_USED (NODE)
220 /* Variables shared between class.c and call.c. */
222 #ifdef GATHER_STATISTICS
223 int n_vtables = 0;
224 int n_vtable_entries = 0;
225 int n_vtable_searches = 0;
226 int n_vtable_elems = 0;
227 int n_convert_harshness = 0;
228 int n_compute_conversion_costs = 0;
229 int n_inner_fields_searched = 0;
230 #endif
232 /* Convert to or from a base subobject. EXPR is an expression of type
233 `A' or `A*', an expression of type `B' or `B*' is returned. To
234 convert A to a base B, CODE is PLUS_EXPR and BINFO is the binfo for
235 the B base instance within A. To convert base A to derived B, CODE
236 is MINUS_EXPR and BINFO is the binfo for the A instance within B.
237 In this latter case, A must not be a morally virtual base of B.
238 NONNULL is true if EXPR is known to be non-NULL (this is only
239 needed when EXPR is of pointer type). CV qualifiers are preserved
240 from EXPR. */
242 tree
243 build_base_path (enum tree_code code,
244 tree expr,
245 tree binfo,
246 int nonnull)
248 tree v_binfo = NULL_TREE;
249 tree d_binfo = NULL_TREE;
250 tree probe;
251 tree offset;
252 tree target_type;
253 tree null_test = NULL;
254 tree ptr_target_type;
255 int fixed_type_p;
256 int want_pointer = TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE;
258 if (expr == error_mark_node || binfo == error_mark_node || !binfo)
259 return error_mark_node;
261 for (probe = binfo; probe; probe = BINFO_INHERITANCE_CHAIN (probe))
263 d_binfo = probe;
264 if (!v_binfo && TREE_VIA_VIRTUAL (probe))
265 v_binfo = probe;
268 probe = TYPE_MAIN_VARIANT (TREE_TYPE (expr));
269 if (want_pointer)
270 probe = TYPE_MAIN_VARIANT (TREE_TYPE (probe));
272 my_friendly_assert (code == MINUS_EXPR
273 ? same_type_p (BINFO_TYPE (binfo), probe)
274 : code == PLUS_EXPR
275 ? same_type_p (BINFO_TYPE (d_binfo), probe)
276 : false, 20010723);
278 if (code == MINUS_EXPR && v_binfo)
280 error ("cannot convert from base `%T' to derived type `%T' via virtual base `%T'",
281 BINFO_TYPE (binfo), BINFO_TYPE (d_binfo), BINFO_TYPE (v_binfo));
282 return error_mark_node;
285 if (!want_pointer)
286 /* This must happen before the call to save_expr. */
287 expr = build_unary_op (ADDR_EXPR, expr, 0);
289 fixed_type_p = resolves_to_fixed_type_p (expr, &nonnull);
290 if (fixed_type_p <= 0 && TREE_SIDE_EFFECTS (expr))
291 expr = save_expr (expr);
293 if (want_pointer && !nonnull)
294 null_test = build (EQ_EXPR, boolean_type_node, expr, integer_zero_node);
296 offset = BINFO_OFFSET (binfo);
298 if (v_binfo && fixed_type_p <= 0)
300 /* Going via virtual base V_BINFO. We need the static offset
301 from V_BINFO to BINFO, and the dynamic offset from D_BINFO to
302 V_BINFO. That offset is an entry in D_BINFO's vtable. */
303 tree v_offset;
305 if (fixed_type_p < 0 && in_base_initializer)
307 /* In a base member initializer, we cannot rely on
308 the vtable being set up. We have to use the vtt_parm. */
309 tree derived = BINFO_INHERITANCE_CHAIN (v_binfo);
311 v_offset = build (PLUS_EXPR, TREE_TYPE (current_vtt_parm),
312 current_vtt_parm, BINFO_VPTR_INDEX (derived));
314 v_offset = build1 (INDIRECT_REF,
315 TREE_TYPE (TYPE_VFIELD (BINFO_TYPE (derived))),
316 v_offset);
319 else
320 v_offset = build_vfield_ref (build_indirect_ref (expr, NULL),
321 TREE_TYPE (TREE_TYPE (expr)));
323 v_offset = build (PLUS_EXPR, TREE_TYPE (v_offset),
324 v_offset, BINFO_VPTR_FIELD (v_binfo));
325 v_offset = build1 (NOP_EXPR,
326 build_pointer_type (ptrdiff_type_node),
327 v_offset);
328 v_offset = build_indirect_ref (v_offset, NULL);
330 offset = convert_to_integer (ptrdiff_type_node,
331 size_diffop (offset,
332 BINFO_OFFSET (v_binfo)));
334 if (!integer_zerop (offset))
335 v_offset = build (code, ptrdiff_type_node, v_offset, offset);
337 if (fixed_type_p < 0)
338 /* Negative fixed_type_p means this is a constructor or destructor;
339 virtual base layout is fixed in in-charge [cd]tors, but not in
340 base [cd]tors. */
341 offset = build (COND_EXPR, ptrdiff_type_node,
342 build (EQ_EXPR, boolean_type_node,
343 current_in_charge_parm, integer_zero_node),
344 v_offset,
345 BINFO_OFFSET (binfo));
346 else
347 offset = v_offset;
350 target_type = code == PLUS_EXPR ? BINFO_TYPE (binfo) : BINFO_TYPE (d_binfo);
352 target_type = cp_build_qualified_type
353 (target_type, cp_type_quals (TREE_TYPE (TREE_TYPE (expr))));
354 ptr_target_type = build_pointer_type (target_type);
355 if (want_pointer)
356 target_type = ptr_target_type;
358 expr = build1 (NOP_EXPR, ptr_target_type, expr);
360 if (!integer_zerop (offset))
361 expr = build (code, ptr_target_type, expr, offset);
362 else
363 null_test = NULL;
365 if (!want_pointer)
366 expr = build_indirect_ref (expr, NULL);
368 if (null_test)
369 expr = build (COND_EXPR, target_type, null_test,
370 build1 (NOP_EXPR, target_type, integer_zero_node),
371 expr);
373 return expr;
376 /* Convert OBJECT to the base TYPE. If CHECK_ACCESS is true, an error
377 message is emitted if TYPE is inaccessible. OBJECT is assumed to
378 be non-NULL. */
380 tree
381 convert_to_base (tree object, tree type, bool check_access)
383 tree binfo;
385 binfo = lookup_base (TREE_TYPE (object), type,
386 check_access ? ba_check : ba_ignore,
387 NULL);
388 if (!binfo || binfo == error_mark_node)
389 return error_mark_node;
391 return build_base_path (PLUS_EXPR, object, binfo, /*nonnull=*/1);
394 /* EXPR is an expression with class type. BASE is a base class (a
395 BINFO) of that class type. Returns EXPR, converted to the BASE
396 type. This function assumes that EXPR is the most derived class;
397 therefore virtual bases can be found at their static offsets. */
399 tree
400 convert_to_base_statically (tree expr, tree base)
402 tree expr_type;
404 expr_type = TREE_TYPE (expr);
405 if (!same_type_p (expr_type, BINFO_TYPE (base)))
407 tree pointer_type;
409 pointer_type = build_pointer_type (expr_type);
410 expr = build_unary_op (ADDR_EXPR, expr, /*noconvert=*/1);
411 if (!integer_zerop (BINFO_OFFSET (base)))
412 expr = build (PLUS_EXPR, pointer_type, expr,
413 build_nop (pointer_type, BINFO_OFFSET (base)));
414 expr = build_nop (build_pointer_type (BINFO_TYPE (base)), expr);
415 expr = build1 (INDIRECT_REF, BINFO_TYPE (base), expr);
418 return expr;
422 /* Given an object INSTANCE, return an expression which yields the
423 vtable element corresponding to INDEX. There are many special
424 cases for INSTANCE which we take care of here, mainly to avoid
425 creating extra tree nodes when we don't have to. */
427 static tree
428 build_vtbl_ref_1 (tree instance, tree idx)
430 tree aref;
431 tree vtbl = NULL_TREE;
433 /* Try to figure out what a reference refers to, and
434 access its virtual function table directly. */
436 int cdtorp = 0;
437 tree fixed_type = fixed_type_or_null (instance, NULL, &cdtorp);
439 tree basetype = non_reference (TREE_TYPE (instance));
441 if (fixed_type && !cdtorp)
443 tree binfo = lookup_base (fixed_type, basetype,
444 ba_ignore|ba_quiet, NULL);
445 if (binfo)
446 vtbl = BINFO_VTABLE (binfo);
449 if (!vtbl)
450 vtbl = build_vfield_ref (instance, basetype);
452 assemble_external (vtbl);
454 aref = build_array_ref (vtbl, idx);
456 return aref;
459 tree
460 build_vtbl_ref (tree instance, tree idx)
462 tree aref = build_vtbl_ref_1 (instance, idx);
464 return aref;
467 /* Given an object INSTANCE, return an expression which yields a
468 function pointer corresponding to vtable element INDEX. */
470 tree
471 build_vfn_ref (tree instance, tree idx)
473 tree aref = build_vtbl_ref_1 (instance, idx);
475 /* When using function descriptors, the address of the
476 vtable entry is treated as a function pointer. */
477 if (TARGET_VTABLE_USES_DESCRIPTORS)
478 aref = build1 (NOP_EXPR, TREE_TYPE (aref),
479 build_unary_op (ADDR_EXPR, aref, /*noconvert=*/1));
481 return aref;
484 /* Return the name of the virtual function table (as an IDENTIFIER_NODE)
485 for the given TYPE. */
487 static tree
488 get_vtable_name (tree type)
490 return mangle_vtbl_for_type (type);
493 /* Return an IDENTIFIER_NODE for the name of the virtual table table
494 for TYPE. */
496 tree
497 get_vtt_name (tree type)
499 return mangle_vtt_for_type (type);
502 /* Create a VAR_DECL for a primary or secondary vtable for CLASS_TYPE.
503 (For a secondary vtable for B-in-D, CLASS_TYPE should be D, not B.)
504 Use NAME for the name of the vtable, and VTABLE_TYPE for its type. */
506 static tree
507 build_vtable (tree class_type, tree name, tree vtable_type)
509 tree decl;
511 decl = build_lang_decl (VAR_DECL, name, vtable_type);
512 /* vtable names are already mangled; give them their DECL_ASSEMBLER_NAME
513 now to avoid confusion in mangle_decl. */
514 SET_DECL_ASSEMBLER_NAME (decl, name);
515 DECL_CONTEXT (decl) = class_type;
516 DECL_ARTIFICIAL (decl) = 1;
517 TREE_STATIC (decl) = 1;
518 TREE_READONLY (decl) = 1;
519 DECL_VIRTUAL_P (decl) = 1;
520 DECL_ALIGN (decl) = TARGET_VTABLE_ENTRY_ALIGN;
521 DECL_VTABLE_OR_VTT_P (decl) = 1;
523 /* At one time the vtable info was grabbed 2 words at a time. This
524 fails on sparc unless you have 8-byte alignment. (tiemann) */
525 DECL_ALIGN (decl) = MAX (TYPE_ALIGN (double_type_node),
526 DECL_ALIGN (decl));
528 import_export_vtable (decl, class_type, 0);
530 return decl;
533 /* Get the VAR_DECL of the vtable for TYPE. TYPE need not be polymorphic,
534 or even complete. If this does not exist, create it. If COMPLETE is
535 nonzero, then complete the definition of it -- that will render it
536 impossible to actually build the vtable, but is useful to get at those
537 which are known to exist in the runtime. */
539 tree
540 get_vtable_decl (tree type, int complete)
542 tree decl;
544 if (CLASSTYPE_VTABLES (type))
545 return CLASSTYPE_VTABLES (type);
547 decl = build_vtable (type, get_vtable_name (type), vtbl_type_node);
548 CLASSTYPE_VTABLES (type) = decl;
550 if (complete)
552 DECL_EXTERNAL (decl) = 1;
553 cp_finish_decl (decl, NULL_TREE, NULL_TREE, 0);
556 return decl;
559 /* Returns a copy of the BINFO_VIRTUALS list in BINFO. The
560 BV_VCALL_INDEX for each entry is cleared. */
562 static tree
563 copy_virtuals (tree binfo)
565 tree copies;
566 tree t;
568 copies = copy_list (BINFO_VIRTUALS (binfo));
569 for (t = copies; t; t = TREE_CHAIN (t))
570 BV_VCALL_INDEX (t) = NULL_TREE;
572 return copies;
575 /* Build the primary virtual function table for TYPE. If BINFO is
576 non-NULL, build the vtable starting with the initial approximation
577 that it is the same as the one which is the head of the association
578 list. Returns a nonzero value if a new vtable is actually
579 created. */
581 static int
582 build_primary_vtable (tree binfo, tree type)
584 tree decl;
585 tree virtuals;
587 decl = get_vtable_decl (type, /*complete=*/0);
589 if (binfo)
591 if (BINFO_NEW_VTABLE_MARKED (binfo))
592 /* We have already created a vtable for this base, so there's
593 no need to do it again. */
594 return 0;
596 virtuals = copy_virtuals (binfo);
597 TREE_TYPE (decl) = TREE_TYPE (get_vtbl_decl_for_binfo (binfo));
598 DECL_SIZE (decl) = TYPE_SIZE (TREE_TYPE (decl));
599 DECL_SIZE_UNIT (decl) = TYPE_SIZE_UNIT (TREE_TYPE (decl));
601 else
603 my_friendly_assert (TREE_TYPE (decl) == vtbl_type_node, 20000118);
604 virtuals = NULL_TREE;
607 #ifdef GATHER_STATISTICS
608 n_vtables += 1;
609 n_vtable_elems += list_length (virtuals);
610 #endif
612 /* Initialize the association list for this type, based
613 on our first approximation. */
614 TYPE_BINFO_VTABLE (type) = decl;
615 TYPE_BINFO_VIRTUALS (type) = virtuals;
616 SET_BINFO_NEW_VTABLE_MARKED (TYPE_BINFO (type));
617 return 1;
620 /* Give BINFO a new virtual function table which is initialized
621 with a skeleton-copy of its original initialization. The only
622 entry that changes is the `delta' entry, so we can really
623 share a lot of structure.
625 FOR_TYPE is the most derived type which caused this table to
626 be needed.
628 Returns nonzero if we haven't met BINFO before.
630 The order in which vtables are built (by calling this function) for
631 an object must remain the same, otherwise a binary incompatibility
632 can result. */
634 static int
635 build_secondary_vtable (tree binfo)
637 if (BINFO_NEW_VTABLE_MARKED (binfo))
638 /* We already created a vtable for this base. There's no need to
639 do it again. */
640 return 0;
642 /* Remember that we've created a vtable for this BINFO, so that we
643 don't try to do so again. */
644 SET_BINFO_NEW_VTABLE_MARKED (binfo);
646 /* Make fresh virtual list, so we can smash it later. */
647 BINFO_VIRTUALS (binfo) = copy_virtuals (binfo);
649 /* Secondary vtables are laid out as part of the same structure as
650 the primary vtable. */
651 BINFO_VTABLE (binfo) = NULL_TREE;
652 return 1;
655 /* Create a new vtable for BINFO which is the hierarchy dominated by
656 T. Return nonzero if we actually created a new vtable. */
658 static int
659 make_new_vtable (tree t, tree binfo)
661 if (binfo == TYPE_BINFO (t))
662 /* In this case, it is *type*'s vtable we are modifying. We start
663 with the approximation that its vtable is that of the
664 immediate base class. */
665 /* ??? This actually passes TYPE_BINFO (t), not the primary base binfo,
666 since we've updated DECL_CONTEXT (TYPE_VFIELD (t)) by now. */
667 return build_primary_vtable (TYPE_BINFO (DECL_CONTEXT (TYPE_VFIELD (t))),
669 else
670 /* This is our very own copy of `basetype' to play with. Later,
671 we will fill in all the virtual functions that override the
672 virtual functions in these base classes which are not defined
673 by the current type. */
674 return build_secondary_vtable (binfo);
677 /* Make *VIRTUALS, an entry on the BINFO_VIRTUALS list for BINFO
678 (which is in the hierarchy dominated by T) list FNDECL as its
679 BV_FN. DELTA is the required constant adjustment from the `this'
680 pointer where the vtable entry appears to the `this' required when
681 the function is actually called. */
683 static void
684 modify_vtable_entry (tree t,
685 tree binfo,
686 tree fndecl,
687 tree delta,
688 tree *virtuals)
690 tree v;
692 v = *virtuals;
694 if (fndecl != BV_FN (v)
695 || !tree_int_cst_equal (delta, BV_DELTA (v)))
697 /* We need a new vtable for BINFO. */
698 if (make_new_vtable (t, binfo))
700 /* If we really did make a new vtable, we also made a copy
701 of the BINFO_VIRTUALS list. Now, we have to find the
702 corresponding entry in that list. */
703 *virtuals = BINFO_VIRTUALS (binfo);
704 while (BV_FN (*virtuals) != BV_FN (v))
705 *virtuals = TREE_CHAIN (*virtuals);
706 v = *virtuals;
709 BV_DELTA (v) = delta;
710 BV_VCALL_INDEX (v) = NULL_TREE;
711 BV_FN (v) = fndecl;
716 /* Add method METHOD to class TYPE. If ERROR_P is true, we are adding
717 the method after the class has already been defined because a
718 declaration for it was seen. (Even though that is erroneous, we
719 add the method for improved error recovery.) */
721 void
722 add_method (tree type, tree method, int error_p)
724 int using;
725 int len;
726 int slot;
727 tree method_vec;
728 int template_conv_p;
730 if (method == error_mark_node)
731 return;
733 using = (DECL_CONTEXT (method) != type);
734 template_conv_p = (TREE_CODE (method) == TEMPLATE_DECL
735 && DECL_TEMPLATE_CONV_FN_P (method));
737 if (!CLASSTYPE_METHOD_VEC (type))
738 /* Make a new method vector. We start with 8 entries. We must
739 allocate at least two (for constructors and destructors), and
740 we're going to end up with an assignment operator at some point
741 as well.
743 We could use a TREE_LIST for now, and convert it to a TREE_VEC
744 in finish_struct, but we would probably waste more memory
745 making the links in the list than we would by over-allocating
746 the size of the vector here. Furthermore, we would complicate
747 all the code that expects this to be a vector. */
748 CLASSTYPE_METHOD_VEC (type) = make_tree_vec (8);
750 method_vec = CLASSTYPE_METHOD_VEC (type);
751 len = TREE_VEC_LENGTH (method_vec);
753 /* Constructors and destructors go in special slots. */
754 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (method))
755 slot = CLASSTYPE_CONSTRUCTOR_SLOT;
756 else if (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (method))
758 slot = CLASSTYPE_DESTRUCTOR_SLOT;
759 TYPE_HAS_DESTRUCTOR (type) = 1;
761 if (TYPE_FOR_JAVA (type))
762 error (DECL_ARTIFICIAL (method)
763 ? "Java class '%T' cannot have an implicit non-trivial destructor"
764 : "Java class '%T' cannot have a destructor",
765 DECL_CONTEXT (method));
767 else
769 int have_template_convs_p = 0;
771 /* See if we already have an entry with this name. */
772 for (slot = CLASSTYPE_FIRST_CONVERSION_SLOT; slot < len; ++slot)
774 tree m = TREE_VEC_ELT (method_vec, slot);
776 if (!m)
777 break;
778 m = OVL_CURRENT (m);
780 if (template_conv_p)
782 have_template_convs_p = (TREE_CODE (m) == TEMPLATE_DECL
783 && DECL_TEMPLATE_CONV_FN_P (m));
785 /* If we need to move things up, see if there's
786 space. */
787 if (!have_template_convs_p)
789 slot = len - 1;
790 if (TREE_VEC_ELT (method_vec, slot))
791 slot++;
793 break;
795 if (DECL_NAME (m) == DECL_NAME (method))
796 break;
799 if (slot == len)
801 /* We need a bigger method vector. */
802 int new_len;
803 tree new_vec;
805 /* In the non-error case, we are processing a class
806 definition. Double the size of the vector to give room
807 for new methods. */
808 if (!error_p)
809 new_len = 2 * len;
810 /* In the error case, the vector is already complete. We
811 don't expect many errors, and the rest of the front-end
812 will get confused if there are empty slots in the vector. */
813 else
814 new_len = len + 1;
816 new_vec = make_tree_vec (new_len);
817 memcpy (&TREE_VEC_ELT (new_vec, 0), &TREE_VEC_ELT (method_vec, 0),
818 len * sizeof (tree));
819 len = new_len;
820 method_vec = CLASSTYPE_METHOD_VEC (type) = new_vec;
823 if (DECL_CONV_FN_P (method) && !TREE_VEC_ELT (method_vec, slot))
825 /* Type conversion operators have to come before ordinary
826 methods; add_conversions depends on this to speed up
827 looking for conversion operators. So, if necessary, we
828 slide some of the vector elements up. In theory, this
829 makes this algorithm O(N^2) but we don't expect many
830 conversion operators. */
831 if (template_conv_p)
832 slot = CLASSTYPE_FIRST_CONVERSION_SLOT;
833 else
834 for (slot = CLASSTYPE_FIRST_CONVERSION_SLOT; slot < len; ++slot)
836 tree fn = TREE_VEC_ELT (method_vec, slot);
838 if (!fn)
839 /* There are no more entries in the vector, so we
840 can insert the new conversion operator here. */
841 break;
843 if (!DECL_CONV_FN_P (OVL_CURRENT (fn)))
844 /* We can insert the new function right at the
845 SLOTth position. */
846 break;
849 if (template_conv_p && have_template_convs_p)
850 /*OK*/;
851 else if (!TREE_VEC_ELT (method_vec, slot))
852 /* There is nothing in the Ith slot, so we can avoid
853 moving anything. */
855 else
857 /* We know the last slot in the vector is empty
858 because we know that at this point there's room
859 for a new function. */
860 memmove (&TREE_VEC_ELT (method_vec, slot + 1),
861 &TREE_VEC_ELT (method_vec, slot),
862 (len - slot - 1) * sizeof (tree));
863 TREE_VEC_ELT (method_vec, slot) = NULL_TREE;
868 if (processing_template_decl)
869 /* TYPE is a template class. Don't issue any errors now; wait
870 until instantiation time to complain. */
872 else
874 tree fns;
876 /* Check to see if we've already got this method. */
877 for (fns = TREE_VEC_ELT (method_vec, slot);
878 fns;
879 fns = OVL_NEXT (fns))
881 tree fn = OVL_CURRENT (fns);
882 tree fn_type;
883 tree method_type;
884 tree parms1;
885 tree parms2;
887 if (TREE_CODE (fn) != TREE_CODE (method))
888 continue;
890 /* [over.load] Member function declarations with the
891 same name and the same parameter types cannot be
892 overloaded if any of them is a static member
893 function declaration.
895 [namespace.udecl] When a using-declaration brings names
896 from a base class into a derived class scope, member
897 functions in the derived class override and/or hide member
898 functions with the same name and parameter types in a base
899 class (rather than conflicting). */
900 fn_type = TREE_TYPE (fn);
901 method_type = TREE_TYPE (method);
902 parms1 = TYPE_ARG_TYPES (fn_type);
903 parms2 = TYPE_ARG_TYPES (method_type);
905 /* Compare the quals on the 'this' parm. Don't compare
906 the whole types, as used functions are treated as
907 coming from the using class in overload resolution. */
908 if (! DECL_STATIC_FUNCTION_P (fn)
909 && ! DECL_STATIC_FUNCTION_P (method)
910 && (TYPE_QUALS (TREE_TYPE (TREE_VALUE (parms1)))
911 != TYPE_QUALS (TREE_TYPE (TREE_VALUE (parms2)))))
912 continue;
914 /* For templates, the template parms must be identical. */
915 if (TREE_CODE (fn) == TEMPLATE_DECL
916 && (!same_type_p (TREE_TYPE (fn_type),
917 TREE_TYPE (method_type))
918 || !comp_template_parms (DECL_TEMPLATE_PARMS (fn),
919 DECL_TEMPLATE_PARMS (method))))
920 continue;
922 if (! DECL_STATIC_FUNCTION_P (fn))
923 parms1 = TREE_CHAIN (parms1);
924 if (! DECL_STATIC_FUNCTION_P (method))
925 parms2 = TREE_CHAIN (parms2);
927 if (compparms (parms1, parms2)
928 && (!DECL_CONV_FN_P (fn)
929 || same_type_p (TREE_TYPE (fn_type),
930 TREE_TYPE (method_type))))
932 if (using && DECL_CONTEXT (fn) == type)
933 /* Defer to the local function. */
934 return;
935 else
937 cp_error_at ("`%#D' and `%#D' cannot be overloaded",
938 method, fn);
940 /* We don't call duplicate_decls here to merge
941 the declarations because that will confuse
942 things if the methods have inline
943 definitions. In particular, we will crash
944 while processing the definitions. */
945 return;
951 /* Actually insert the new method. */
952 TREE_VEC_ELT (method_vec, slot)
953 = build_overload (method, TREE_VEC_ELT (method_vec, slot));
955 /* Add the new binding. */
956 if (!DECL_CONSTRUCTOR_P (method)
957 && !DECL_DESTRUCTOR_P (method))
958 push_class_level_binding (DECL_NAME (method),
959 TREE_VEC_ELT (method_vec, slot));
962 /* Subroutines of finish_struct. */
964 /* Change the access of FDECL to ACCESS in T. Return 1 if change was
965 legit, otherwise return 0. */
967 static int
968 alter_access (tree t, tree fdecl, tree access)
970 tree elem;
972 if (!DECL_LANG_SPECIFIC (fdecl))
973 retrofit_lang_decl (fdecl);
975 my_friendly_assert (!DECL_DISCRIMINATOR_P (fdecl), 20030624);
977 elem = purpose_member (t, DECL_ACCESS (fdecl));
978 if (elem)
980 if (TREE_VALUE (elem) != access)
982 if (TREE_CODE (TREE_TYPE (fdecl)) == FUNCTION_DECL)
983 cp_error_at ("conflicting access specifications for method `%D', ignored", TREE_TYPE (fdecl));
984 else
985 error ("conflicting access specifications for field `%s', ignored",
986 IDENTIFIER_POINTER (DECL_NAME (fdecl)));
988 else
990 /* They're changing the access to the same thing they changed
991 it to before. That's OK. */
995 else
997 perform_or_defer_access_check (TYPE_BINFO (t), fdecl);
998 DECL_ACCESS (fdecl) = tree_cons (t, access, DECL_ACCESS (fdecl));
999 return 1;
1001 return 0;
1004 /* Process the USING_DECL, which is a member of T. */
1006 static void
1007 handle_using_decl (tree using_decl, tree t)
1009 tree ctype = DECL_INITIAL (using_decl);
1010 tree name = DECL_NAME (using_decl);
1011 tree access
1012 = TREE_PRIVATE (using_decl) ? access_private_node
1013 : TREE_PROTECTED (using_decl) ? access_protected_node
1014 : access_public_node;
1015 tree fdecl, binfo;
1016 tree flist = NULL_TREE;
1017 tree old_value;
1019 if (ctype == error_mark_node)
1020 return;
1022 binfo = lookup_base (t, ctype, ba_any, NULL);
1023 if (! binfo)
1025 location_t saved_loc = input_location;
1027 input_location = DECL_SOURCE_LOCATION (using_decl);
1028 error_not_base_type (ctype, t);
1029 input_location = saved_loc;
1030 return;
1033 if (constructor_name_p (name, ctype))
1035 cp_error_at ("`%D' names constructor", using_decl);
1036 return;
1038 if (constructor_name_p (name, t))
1040 cp_error_at ("`%D' invalid in `%T'", using_decl, t);
1041 return;
1044 fdecl = lookup_member (binfo, name, 0, false);
1046 if (!fdecl)
1048 cp_error_at ("no members matching `%D' in `%#T'", using_decl, ctype);
1049 return;
1052 if (BASELINK_P (fdecl))
1053 /* Ignore base type this came from. */
1054 fdecl = BASELINK_FUNCTIONS (fdecl);
1056 old_value = IDENTIFIER_CLASS_VALUE (name);
1057 if (old_value)
1059 if (is_overloaded_fn (old_value))
1060 old_value = OVL_CURRENT (old_value);
1062 if (DECL_P (old_value) && DECL_CONTEXT (old_value) == t)
1063 /* OK */;
1064 else
1065 old_value = NULL_TREE;
1068 if (is_overloaded_fn (fdecl))
1069 flist = fdecl;
1071 if (! old_value)
1073 else if (is_overloaded_fn (old_value))
1075 if (flist)
1076 /* It's OK to use functions from a base when there are functions with
1077 the same name already present in the current class. */;
1078 else
1080 cp_error_at ("`%D' invalid in `%#T'", using_decl, t);
1081 cp_error_at (" because of local method `%#D' with same name",
1082 OVL_CURRENT (old_value));
1083 return;
1086 else if (!DECL_ARTIFICIAL (old_value))
1088 cp_error_at ("`%D' invalid in `%#T'", using_decl, t);
1089 cp_error_at (" because of local member `%#D' with same name", old_value);
1090 return;
1093 /* Make type T see field decl FDECL with access ACCESS. */
1094 if (flist)
1095 for (; flist; flist = OVL_NEXT (flist))
1097 add_method (t, OVL_CURRENT (flist), /*error_p=*/0);
1098 alter_access (t, OVL_CURRENT (flist), access);
1100 else
1101 alter_access (t, fdecl, access);
1104 /* Run through the base clases of T, updating
1105 CANT_HAVE_DEFAULT_CTOR_P, CANT_HAVE_CONST_CTOR_P, and
1106 NO_CONST_ASN_REF_P. Also set flag bits in T based on properties of
1107 the bases. */
1109 static void
1110 check_bases (tree t,
1111 int* cant_have_default_ctor_p,
1112 int* cant_have_const_ctor_p,
1113 int* no_const_asn_ref_p)
1115 int n_baseclasses;
1116 int i;
1117 int seen_non_virtual_nearly_empty_base_p;
1118 tree binfos;
1120 binfos = TYPE_BINFO_BASETYPES (t);
1121 n_baseclasses = CLASSTYPE_N_BASECLASSES (t);
1122 seen_non_virtual_nearly_empty_base_p = 0;
1124 /* An aggregate cannot have baseclasses. */
1125 CLASSTYPE_NON_AGGREGATE (t) |= (n_baseclasses != 0);
1127 for (i = 0; i < n_baseclasses; ++i)
1129 tree base_binfo;
1130 tree basetype;
1132 /* Figure out what base we're looking at. */
1133 base_binfo = TREE_VEC_ELT (binfos, i);
1134 basetype = TREE_TYPE (base_binfo);
1136 /* If the type of basetype is incomplete, then we already
1137 complained about that fact (and we should have fixed it up as
1138 well). */
1139 if (!COMPLETE_TYPE_P (basetype))
1141 int j;
1142 /* The base type is of incomplete type. It is
1143 probably best to pretend that it does not
1144 exist. */
1145 if (i == n_baseclasses-1)
1146 TREE_VEC_ELT (binfos, i) = NULL_TREE;
1147 TREE_VEC_LENGTH (binfos) -= 1;
1148 n_baseclasses -= 1;
1149 for (j = i; j+1 < n_baseclasses; j++)
1150 TREE_VEC_ELT (binfos, j) = TREE_VEC_ELT (binfos, j+1);
1151 continue;
1154 /* Effective C++ rule 14. We only need to check TYPE_POLYMORPHIC_P
1155 here because the case of virtual functions but non-virtual
1156 dtor is handled in finish_struct_1. */
1157 if (warn_ecpp && ! TYPE_POLYMORPHIC_P (basetype)
1158 && TYPE_HAS_DESTRUCTOR (basetype))
1159 warning ("base class `%#T' has a non-virtual destructor",
1160 basetype);
1162 /* If the base class doesn't have copy constructors or
1163 assignment operators that take const references, then the
1164 derived class cannot have such a member automatically
1165 generated. */
1166 if (! TYPE_HAS_CONST_INIT_REF (basetype))
1167 *cant_have_const_ctor_p = 1;
1168 if (TYPE_HAS_ASSIGN_REF (basetype)
1169 && !TYPE_HAS_CONST_ASSIGN_REF (basetype))
1170 *no_const_asn_ref_p = 1;
1171 /* Similarly, if the base class doesn't have a default
1172 constructor, then the derived class won't have an
1173 automatically generated default constructor. */
1174 if (TYPE_HAS_CONSTRUCTOR (basetype)
1175 && ! TYPE_HAS_DEFAULT_CONSTRUCTOR (basetype))
1177 *cant_have_default_ctor_p = 1;
1178 if (! TYPE_HAS_CONSTRUCTOR (t))
1179 pedwarn ("base `%T' with only non-default constructor in class without a constructor",
1180 basetype);
1183 if (TREE_VIA_VIRTUAL (base_binfo))
1184 /* A virtual base does not effect nearly emptiness. */
1186 else if (CLASSTYPE_NEARLY_EMPTY_P (basetype))
1188 if (seen_non_virtual_nearly_empty_base_p)
1189 /* And if there is more than one nearly empty base, then the
1190 derived class is not nearly empty either. */
1191 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
1192 else
1193 /* Remember we've seen one. */
1194 seen_non_virtual_nearly_empty_base_p = 1;
1196 else if (!is_empty_class (basetype))
1197 /* If the base class is not empty or nearly empty, then this
1198 class cannot be nearly empty. */
1199 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
1201 /* A lot of properties from the bases also apply to the derived
1202 class. */
1203 TYPE_NEEDS_CONSTRUCTING (t) |= TYPE_NEEDS_CONSTRUCTING (basetype);
1204 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
1205 |= TYPE_HAS_NONTRIVIAL_DESTRUCTOR (basetype);
1206 TYPE_HAS_COMPLEX_ASSIGN_REF (t)
1207 |= TYPE_HAS_COMPLEX_ASSIGN_REF (basetype);
1208 TYPE_HAS_COMPLEX_INIT_REF (t) |= TYPE_HAS_COMPLEX_INIT_REF (basetype);
1209 TYPE_POLYMORPHIC_P (t) |= TYPE_POLYMORPHIC_P (basetype);
1210 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t)
1211 |= CLASSTYPE_CONTAINS_EMPTY_CLASS_P (basetype);
1215 /* Set BINFO_PRIMARY_BASE_OF for all binfos in the hierarchy
1216 dominated by TYPE that are primary bases. */
1218 static void
1219 mark_primary_bases (tree type)
1221 tree binfo;
1223 /* Walk the bases in inheritance graph order. */
1224 for (binfo = TYPE_BINFO (type); binfo; binfo = TREE_CHAIN (binfo))
1226 tree base_binfo = get_primary_binfo (binfo);
1228 if (!base_binfo)
1229 /* Not a dynamic base. */;
1230 else if (BINFO_PRIMARY_P (base_binfo))
1231 BINFO_LOST_PRIMARY_P (binfo) = 1;
1232 else
1234 BINFO_PRIMARY_BASE_OF (base_binfo) = binfo;
1235 /* A virtual binfo might have been copied from within
1236 another hierarchy. As we're about to use it as a primary
1237 base, make sure the offsets match. */
1238 if (TREE_VIA_VIRTUAL (base_binfo))
1240 tree delta = size_diffop (convert (ssizetype,
1241 BINFO_OFFSET (binfo)),
1242 convert (ssizetype,
1243 BINFO_OFFSET (base_binfo)));
1245 propagate_binfo_offsets (base_binfo, delta);
1251 /* Make the BINFO the primary base of T. */
1253 static void
1254 set_primary_base (tree t, tree binfo)
1256 tree basetype;
1258 CLASSTYPE_PRIMARY_BINFO (t) = binfo;
1259 basetype = BINFO_TYPE (binfo);
1260 TYPE_BINFO_VTABLE (t) = TYPE_BINFO_VTABLE (basetype);
1261 TYPE_BINFO_VIRTUALS (t) = TYPE_BINFO_VIRTUALS (basetype);
1262 TYPE_VFIELD (t) = TYPE_VFIELD (basetype);
1265 /* Determine the primary class for T. */
1267 static void
1268 determine_primary_base (tree t)
1270 int i, n_baseclasses = CLASSTYPE_N_BASECLASSES (t);
1271 tree vbases;
1272 tree type_binfo;
1274 /* If there are no baseclasses, there is certainly no primary base. */
1275 if (n_baseclasses == 0)
1276 return;
1278 type_binfo = TYPE_BINFO (t);
1280 for (i = 0; i < n_baseclasses; i++)
1282 tree base_binfo = BINFO_BASETYPE (type_binfo, i);
1283 tree basetype = BINFO_TYPE (base_binfo);
1285 if (TYPE_CONTAINS_VPTR_P (basetype))
1287 /* We prefer a non-virtual base, although a virtual one will
1288 do. */
1289 if (TREE_VIA_VIRTUAL (base_binfo))
1290 continue;
1292 if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t))
1294 set_primary_base (t, base_binfo);
1295 CLASSTYPE_VFIELDS (t) = copy_list (CLASSTYPE_VFIELDS (basetype));
1297 else
1299 tree vfields;
1301 /* Only add unique vfields, and flatten them out as we go. */
1302 for (vfields = CLASSTYPE_VFIELDS (basetype);
1303 vfields;
1304 vfields = TREE_CHAIN (vfields))
1305 if (VF_BINFO_VALUE (vfields) == NULL_TREE
1306 || ! TREE_VIA_VIRTUAL (VF_BINFO_VALUE (vfields)))
1307 CLASSTYPE_VFIELDS (t)
1308 = tree_cons (base_binfo,
1309 VF_BASETYPE_VALUE (vfields),
1310 CLASSTYPE_VFIELDS (t));
1315 if (!TYPE_VFIELD (t))
1316 CLASSTYPE_PRIMARY_BINFO (t) = NULL_TREE;
1318 /* Find the indirect primary bases - those virtual bases which are primary
1319 bases of something else in this hierarchy. */
1320 for (vbases = CLASSTYPE_VBASECLASSES (t);
1321 vbases;
1322 vbases = TREE_CHAIN (vbases))
1324 tree vbase_binfo = TREE_VALUE (vbases);
1326 /* See if this virtual base is an indirect primary base. To be so,
1327 it must be a primary base within the hierarchy of one of our
1328 direct bases. */
1329 for (i = 0; i < n_baseclasses; ++i)
1331 tree basetype = TYPE_BINFO_BASETYPE (t, i);
1332 tree v;
1334 for (v = CLASSTYPE_VBASECLASSES (basetype);
1336 v = TREE_CHAIN (v))
1338 tree base_vbase = TREE_VALUE (v);
1340 if (BINFO_PRIMARY_P (base_vbase)
1341 && same_type_p (BINFO_TYPE (base_vbase),
1342 BINFO_TYPE (vbase_binfo)))
1344 BINFO_INDIRECT_PRIMARY_P (vbase_binfo) = 1;
1345 break;
1349 /* If we've discovered that this virtual base is an indirect
1350 primary base, then we can move on to the next virtual
1351 base. */
1352 if (BINFO_INDIRECT_PRIMARY_P (vbase_binfo))
1353 break;
1357 /* A "nearly-empty" virtual base class can be the primary base
1358 class, if no non-virtual polymorphic base can be found. */
1359 if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t))
1361 /* If not NULL, this is the best primary base candidate we have
1362 found so far. */
1363 tree candidate = NULL_TREE;
1364 tree base_binfo;
1366 /* Loop over the baseclasses. */
1367 for (base_binfo = TYPE_BINFO (t);
1368 base_binfo;
1369 base_binfo = TREE_CHAIN (base_binfo))
1371 tree basetype = BINFO_TYPE (base_binfo);
1373 if (TREE_VIA_VIRTUAL (base_binfo)
1374 && CLASSTYPE_NEARLY_EMPTY_P (basetype))
1376 /* If this is not an indirect primary base, then it's
1377 definitely our primary base. */
1378 if (!BINFO_INDIRECT_PRIMARY_P (base_binfo))
1380 candidate = base_binfo;
1381 break;
1384 /* If this is an indirect primary base, it still could be
1385 our primary base -- unless we later find there's another
1386 nearly-empty virtual base that isn't an indirect
1387 primary base. */
1388 if (!candidate)
1389 candidate = base_binfo;
1393 /* If we've got a primary base, use it. */
1394 if (candidate)
1396 set_primary_base (t, candidate);
1397 CLASSTYPE_VFIELDS (t)
1398 = copy_list (CLASSTYPE_VFIELDS (BINFO_TYPE (candidate)));
1402 /* Mark the primary base classes at this point. */
1403 mark_primary_bases (t);
1406 /* Set memoizing fields and bits of T (and its variants) for later
1407 use. */
1409 static void
1410 finish_struct_bits (tree t)
1412 int i, n_baseclasses = CLASSTYPE_N_BASECLASSES (t);
1414 /* Fix up variants (if any). */
1415 tree variants = TYPE_NEXT_VARIANT (t);
1416 while (variants)
1418 /* These fields are in the _TYPE part of the node, not in
1419 the TYPE_LANG_SPECIFIC component, so they are not shared. */
1420 TYPE_HAS_CONSTRUCTOR (variants) = TYPE_HAS_CONSTRUCTOR (t);
1421 TYPE_HAS_DESTRUCTOR (variants) = TYPE_HAS_DESTRUCTOR (t);
1422 TYPE_NEEDS_CONSTRUCTING (variants) = TYPE_NEEDS_CONSTRUCTING (t);
1423 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (variants)
1424 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t);
1426 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (variants)
1427 = TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (t);
1428 TYPE_POLYMORPHIC_P (variants) = TYPE_POLYMORPHIC_P (t);
1429 TYPE_USES_VIRTUAL_BASECLASSES (variants) = TYPE_USES_VIRTUAL_BASECLASSES (t);
1430 /* Copy whatever these are holding today. */
1431 TYPE_MIN_VALUE (variants) = TYPE_MIN_VALUE (t);
1432 TYPE_MAX_VALUE (variants) = TYPE_MAX_VALUE (t);
1433 TYPE_FIELDS (variants) = TYPE_FIELDS (t);
1434 TYPE_SIZE (variants) = TYPE_SIZE (t);
1435 TYPE_SIZE_UNIT (variants) = TYPE_SIZE_UNIT (t);
1436 variants = TYPE_NEXT_VARIANT (variants);
1439 if (n_baseclasses && TYPE_POLYMORPHIC_P (t))
1440 /* For a class w/o baseclasses, `finish_struct' has set
1441 CLASS_TYPE_ABSTRACT_VIRTUALS correctly (by
1442 definition). Similarly for a class whose base classes do not
1443 have vtables. When neither of these is true, we might have
1444 removed abstract virtuals (by providing a definition), added
1445 some (by declaring new ones), or redeclared ones from a base
1446 class. We need to recalculate what's really an abstract virtual
1447 at this point (by looking in the vtables). */
1448 get_pure_virtuals (t);
1450 if (n_baseclasses)
1452 /* Notice whether this class has type conversion functions defined. */
1453 tree binfo = TYPE_BINFO (t);
1454 tree binfos = BINFO_BASETYPES (binfo);
1455 tree basetype;
1457 for (i = n_baseclasses-1; i >= 0; i--)
1459 basetype = BINFO_TYPE (TREE_VEC_ELT (binfos, i));
1461 TYPE_HAS_CONVERSION (t) |= TYPE_HAS_CONVERSION (basetype);
1465 /* If this type has a copy constructor or a destructor, force its mode to
1466 be BLKmode, and force its TREE_ADDRESSABLE bit to be nonzero. This
1467 will cause it to be passed by invisible reference and prevent it from
1468 being returned in a register. */
1469 if (! TYPE_HAS_TRIVIAL_INIT_REF (t) || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t))
1471 tree variants;
1472 DECL_MODE (TYPE_MAIN_DECL (t)) = BLKmode;
1473 for (variants = t; variants; variants = TYPE_NEXT_VARIANT (variants))
1475 TYPE_MODE (variants) = BLKmode;
1476 TREE_ADDRESSABLE (variants) = 1;
1481 /* Issue warnings about T having private constructors, but no friends,
1482 and so forth.
1484 HAS_NONPRIVATE_METHOD is nonzero if T has any non-private methods or
1485 static members. HAS_NONPRIVATE_STATIC_FN is nonzero if T has any
1486 non-private static member functions. */
1488 static void
1489 maybe_warn_about_overly_private_class (tree t)
1491 int has_member_fn = 0;
1492 int has_nonprivate_method = 0;
1493 tree fn;
1495 if (!warn_ctor_dtor_privacy
1496 /* If the class has friends, those entities might create and
1497 access instances, so we should not warn. */
1498 || (CLASSTYPE_FRIEND_CLASSES (t)
1499 || DECL_FRIENDLIST (TYPE_MAIN_DECL (t)))
1500 /* We will have warned when the template was declared; there's
1501 no need to warn on every instantiation. */
1502 || CLASSTYPE_TEMPLATE_INSTANTIATION (t))
1503 /* There's no reason to even consider warning about this
1504 class. */
1505 return;
1507 /* We only issue one warning, if more than one applies, because
1508 otherwise, on code like:
1510 class A {
1511 // Oops - forgot `public:'
1512 A();
1513 A(const A&);
1514 ~A();
1517 we warn several times about essentially the same problem. */
1519 /* Check to see if all (non-constructor, non-destructor) member
1520 functions are private. (Since there are no friends or
1521 non-private statics, we can't ever call any of the private member
1522 functions.) */
1523 for (fn = TYPE_METHODS (t); fn; fn = TREE_CHAIN (fn))
1524 /* We're not interested in compiler-generated methods; they don't
1525 provide any way to call private members. */
1526 if (!DECL_ARTIFICIAL (fn))
1528 if (!TREE_PRIVATE (fn))
1530 if (DECL_STATIC_FUNCTION_P (fn))
1531 /* A non-private static member function is just like a
1532 friend; it can create and invoke private member
1533 functions, and be accessed without a class
1534 instance. */
1535 return;
1537 has_nonprivate_method = 1;
1538 /* Keep searching for a static member function. */
1540 else if (!DECL_CONSTRUCTOR_P (fn) && !DECL_DESTRUCTOR_P (fn))
1541 has_member_fn = 1;
1544 if (!has_nonprivate_method && has_member_fn)
1546 /* There are no non-private methods, and there's at least one
1547 private member function that isn't a constructor or
1548 destructor. (If all the private members are
1549 constructors/destructors we want to use the code below that
1550 issues error messages specifically referring to
1551 constructors/destructors.) */
1552 int i;
1553 tree binfo = TYPE_BINFO (t);
1555 for (i = 0; i < BINFO_N_BASETYPES (binfo); i++)
1556 if (BINFO_BASEACCESS (binfo, i) != access_private_node)
1558 has_nonprivate_method = 1;
1559 break;
1561 if (!has_nonprivate_method)
1563 warning ("all member functions in class `%T' are private", t);
1564 return;
1568 /* Even if some of the member functions are non-private, the class
1569 won't be useful for much if all the constructors or destructors
1570 are private: such an object can never be created or destroyed. */
1571 if (TYPE_HAS_DESTRUCTOR (t)
1572 && TREE_PRIVATE (CLASSTYPE_DESTRUCTORS (t)))
1574 warning ("`%#T' only defines a private destructor and has no friends",
1576 return;
1579 if (TYPE_HAS_CONSTRUCTOR (t))
1581 int nonprivate_ctor = 0;
1583 /* If a non-template class does not define a copy
1584 constructor, one is defined for it, enabling it to avoid
1585 this warning. For a template class, this does not
1586 happen, and so we would normally get a warning on:
1588 template <class T> class C { private: C(); };
1590 To avoid this asymmetry, we check TYPE_HAS_INIT_REF. All
1591 complete non-template or fully instantiated classes have this
1592 flag set. */
1593 if (!TYPE_HAS_INIT_REF (t))
1594 nonprivate_ctor = 1;
1595 else
1596 for (fn = TREE_VEC_ELT (CLASSTYPE_METHOD_VEC (t), 0);
1598 fn = OVL_NEXT (fn))
1600 tree ctor = OVL_CURRENT (fn);
1601 /* Ideally, we wouldn't count copy constructors (or, in
1602 fact, any constructor that takes an argument of the
1603 class type as a parameter) because such things cannot
1604 be used to construct an instance of the class unless
1605 you already have one. But, for now at least, we're
1606 more generous. */
1607 if (! TREE_PRIVATE (ctor))
1609 nonprivate_ctor = 1;
1610 break;
1614 if (nonprivate_ctor == 0)
1616 warning ("`%#T' only defines private constructors and has no friends",
1618 return;
1623 static struct {
1624 gt_pointer_operator new_value;
1625 void *cookie;
1626 } resort_data;
1628 /* Comparison function to compare two TYPE_METHOD_VEC entries by name. */
1630 static int
1631 method_name_cmp (const void* m1_p, const void* m2_p)
1633 const tree *const m1 = m1_p;
1634 const tree *const m2 = m2_p;
1636 if (*m1 == NULL_TREE && *m2 == NULL_TREE)
1637 return 0;
1638 if (*m1 == NULL_TREE)
1639 return -1;
1640 if (*m2 == NULL_TREE)
1641 return 1;
1642 if (DECL_NAME (OVL_CURRENT (*m1)) < DECL_NAME (OVL_CURRENT (*m2)))
1643 return -1;
1644 return 1;
1647 /* This routine compares two fields like method_name_cmp but using the
1648 pointer operator in resort_field_decl_data. */
1650 static int
1651 resort_method_name_cmp (const void* m1_p, const void* m2_p)
1653 const tree *const m1 = m1_p;
1654 const tree *const m2 = m2_p;
1655 if (*m1 == NULL_TREE && *m2 == NULL_TREE)
1656 return 0;
1657 if (*m1 == NULL_TREE)
1658 return -1;
1659 if (*m2 == NULL_TREE)
1660 return 1;
1662 tree d1 = DECL_NAME (OVL_CURRENT (*m1));
1663 tree d2 = DECL_NAME (OVL_CURRENT (*m2));
1664 resort_data.new_value (&d1, resort_data.cookie);
1665 resort_data.new_value (&d2, resort_data.cookie);
1666 if (d1 < d2)
1667 return -1;
1669 return 1;
1672 /* Resort TYPE_METHOD_VEC because pointers have been reordered. */
1674 void
1675 resort_type_method_vec (void* obj,
1676 void* orig_obj ATTRIBUTE_UNUSED ,
1677 gt_pointer_operator new_value,
1678 void* cookie)
1680 tree method_vec = obj;
1681 int len = TREE_VEC_LENGTH (method_vec);
1682 int slot;
1684 /* The type conversion ops have to live at the front of the vec, so we
1685 can't sort them. */
1686 for (slot = 2; slot < len; ++slot)
1688 tree fn = TREE_VEC_ELT (method_vec, slot);
1690 if (!DECL_CONV_FN_P (OVL_CURRENT (fn)))
1691 break;
1693 if (len - slot > 1)
1695 resort_data.new_value = new_value;
1696 resort_data.cookie = cookie;
1697 qsort (&TREE_VEC_ELT (method_vec, slot), len - slot, sizeof (tree),
1698 resort_method_name_cmp);
1702 /* Warn about duplicate methods in fn_fields. Also compact method
1703 lists so that lookup can be made faster.
1705 Data Structure: List of method lists. The outer list is a
1706 TREE_LIST, whose TREE_PURPOSE field is the field name and the
1707 TREE_VALUE is the DECL_CHAIN of the FUNCTION_DECLs. TREE_CHAIN
1708 links the entire list of methods for TYPE_METHODS. Friends are
1709 chained in the same way as member functions (? TREE_CHAIN or
1710 DECL_CHAIN), but they live in the TREE_TYPE field of the outer
1711 list. That allows them to be quickly deleted, and requires no
1712 extra storage.
1714 Sort methods that are not special (i.e., constructors, destructors,
1715 and type conversion operators) so that we can find them faster in
1716 search. */
1718 static void
1719 finish_struct_methods (tree t)
1721 tree fn_fields;
1722 tree method_vec;
1723 int slot, len;
1725 if (!TYPE_METHODS (t))
1727 /* Clear these for safety; perhaps some parsing error could set
1728 these incorrectly. */
1729 TYPE_HAS_CONSTRUCTOR (t) = 0;
1730 TYPE_HAS_DESTRUCTOR (t) = 0;
1731 CLASSTYPE_METHOD_VEC (t) = NULL_TREE;
1732 return;
1735 method_vec = CLASSTYPE_METHOD_VEC (t);
1736 my_friendly_assert (method_vec != NULL_TREE, 19991215);
1737 len = TREE_VEC_LENGTH (method_vec);
1739 /* First fill in entry 0 with the constructors, entry 1 with destructors,
1740 and the next few with type conversion operators (if any). */
1741 for (fn_fields = TYPE_METHODS (t); fn_fields;
1742 fn_fields = TREE_CHAIN (fn_fields))
1743 /* Clear out this flag. */
1744 DECL_IN_AGGR_P (fn_fields) = 0;
1746 if (TYPE_HAS_DESTRUCTOR (t) && !CLASSTYPE_DESTRUCTORS (t))
1747 /* We thought there was a destructor, but there wasn't. Some
1748 parse errors cause this anomalous situation. */
1749 TYPE_HAS_DESTRUCTOR (t) = 0;
1751 /* Issue warnings about private constructors and such. If there are
1752 no methods, then some public defaults are generated. */
1753 maybe_warn_about_overly_private_class (t);
1755 /* Now sort the methods. */
1756 while (len > 2 && TREE_VEC_ELT (method_vec, len-1) == NULL_TREE)
1757 len--;
1758 TREE_VEC_LENGTH (method_vec) = len;
1760 /* The type conversion ops have to live at the front of the vec, so we
1761 can't sort them. */
1762 for (slot = 2; slot < len; ++slot)
1764 tree fn = TREE_VEC_ELT (method_vec, slot);
1766 if (!DECL_CONV_FN_P (OVL_CURRENT (fn)))
1767 break;
1769 if (len - slot > 1)
1770 qsort (&TREE_VEC_ELT (method_vec, slot), len-slot, sizeof (tree),
1771 method_name_cmp);
1774 /* Make BINFO's vtable have N entries, including RTTI entries,
1775 vbase and vcall offsets, etc. Set its type and call the backend
1776 to lay it out. */
1778 static void
1779 layout_vtable_decl (tree binfo, int n)
1781 tree atype;
1782 tree vtable;
1784 atype = build_cplus_array_type (vtable_entry_type,
1785 build_index_type (size_int (n - 1)));
1786 layout_type (atype);
1788 /* We may have to grow the vtable. */
1789 vtable = get_vtbl_decl_for_binfo (binfo);
1790 if (!same_type_p (TREE_TYPE (vtable), atype))
1792 TREE_TYPE (vtable) = atype;
1793 DECL_SIZE (vtable) = DECL_SIZE_UNIT (vtable) = NULL_TREE;
1794 layout_decl (vtable, 0);
1798 /* True iff FNDECL and BASE_FNDECL (both non-static member functions)
1799 have the same signature. */
1802 same_signature_p (tree fndecl, tree base_fndecl)
1804 /* One destructor overrides another if they are the same kind of
1805 destructor. */
1806 if (DECL_DESTRUCTOR_P (base_fndecl) && DECL_DESTRUCTOR_P (fndecl)
1807 && special_function_p (base_fndecl) == special_function_p (fndecl))
1808 return 1;
1809 /* But a non-destructor never overrides a destructor, nor vice
1810 versa, nor do different kinds of destructors override
1811 one-another. For example, a complete object destructor does not
1812 override a deleting destructor. */
1813 if (DECL_DESTRUCTOR_P (base_fndecl) || DECL_DESTRUCTOR_P (fndecl))
1814 return 0;
1816 if (DECL_NAME (fndecl) == DECL_NAME (base_fndecl)
1817 || (DECL_CONV_FN_P (fndecl)
1818 && DECL_CONV_FN_P (base_fndecl)
1819 && same_type_p (DECL_CONV_FN_TYPE (fndecl),
1820 DECL_CONV_FN_TYPE (base_fndecl))))
1822 tree types, base_types;
1823 types = TYPE_ARG_TYPES (TREE_TYPE (fndecl));
1824 base_types = TYPE_ARG_TYPES (TREE_TYPE (base_fndecl));
1825 if ((TYPE_QUALS (TREE_TYPE (TREE_VALUE (base_types)))
1826 == TYPE_QUALS (TREE_TYPE (TREE_VALUE (types))))
1827 && compparms (TREE_CHAIN (base_types), TREE_CHAIN (types)))
1828 return 1;
1830 return 0;
1833 /* Returns TRUE if DERIVED is a binfo containing the binfo BASE as a
1834 subobject. */
1836 static bool
1837 base_derived_from (tree derived, tree base)
1839 tree probe;
1841 for (probe = base; probe; probe = BINFO_INHERITANCE_CHAIN (probe))
1843 if (probe == derived)
1844 return true;
1845 else if (TREE_VIA_VIRTUAL (probe))
1846 /* If we meet a virtual base, we can't follow the inheritance
1847 any more. See if the complete type of DERIVED contains
1848 such a virtual base. */
1849 return purpose_member (BINFO_TYPE (probe),
1850 CLASSTYPE_VBASECLASSES (BINFO_TYPE (derived)))
1851 != NULL_TREE;
1853 return false;
1856 typedef struct count_depth_data {
1857 /* The depth of the current subobject, with "1" as the depth of the
1858 most derived object in the hierarchy. */
1859 size_t depth;
1860 /* The maximum depth found so far. */
1861 size_t max_depth;
1862 } count_depth_data;
1864 /* Called from find_final_overrider via dfs_walk. */
1866 static tree
1867 dfs_depth_post (tree binfo ATTRIBUTE_UNUSED, void *data)
1869 count_depth_data *cd = (count_depth_data *) data;
1870 if (cd->depth > cd->max_depth)
1871 cd->max_depth = cd->depth;
1872 cd->depth--;
1873 return NULL_TREE;
1876 /* Called from find_final_overrider via dfs_walk. */
1878 static tree
1879 dfs_depth_q (tree derived, int i, void *data)
1881 count_depth_data *cd = (count_depth_data *) data;
1882 cd->depth++;
1883 return BINFO_BASETYPE (derived, i);
1886 typedef struct find_final_overrider_data_s {
1887 /* The function for which we are trying to find a final overrider. */
1888 tree fn;
1889 /* The base class in which the function was declared. */
1890 tree declaring_base;
1891 /* The most derived class in the hierarchy. */
1892 tree most_derived_type;
1893 /* The candidate overriders. */
1894 tree candidates;
1895 /* Each entry in this array is the next-most-derived class for a
1896 virtual base class along the current path. */
1897 tree *vpath_list;
1898 /* A pointer one past the top of the VPATH_LIST. */
1899 tree *vpath;
1900 } find_final_overrider_data;
1902 /* Add the overrider along the current path to FFOD->CANDIDATES.
1903 Returns true if an overrider was found; false otherwise. */
1905 static bool
1906 dfs_find_final_overrider_1 (tree binfo,
1907 tree *vpath,
1908 find_final_overrider_data *ffod)
1910 tree method;
1912 /* If BINFO is not the most derived type, try a more derived class.
1913 A definition there will overrider a definition here. */
1914 if (!same_type_p (BINFO_TYPE (binfo), ffod->most_derived_type))
1916 tree derived;
1918 if (TREE_VIA_VIRTUAL (binfo))
1919 derived = *--vpath;
1920 else
1921 derived = BINFO_INHERITANCE_CHAIN (binfo);
1922 if (dfs_find_final_overrider_1 (derived, vpath, ffod))
1923 return true;
1926 method = look_for_overrides_here (BINFO_TYPE (binfo), ffod->fn);
1927 if (method)
1929 tree *candidate = &ffod->candidates;
1931 /* Remove any candidates overridden by this new function. */
1932 while (*candidate)
1934 /* If *CANDIDATE overrides METHOD, then METHOD
1935 cannot override anything else on the list. */
1936 if (base_derived_from (TREE_VALUE (*candidate), binfo))
1937 return true;
1938 /* If METHOD overrides *CANDIDATE, remove *CANDIDATE. */
1939 if (base_derived_from (binfo, TREE_VALUE (*candidate)))
1940 *candidate = TREE_CHAIN (*candidate);
1941 else
1942 candidate = &TREE_CHAIN (*candidate);
1945 /* Add the new function. */
1946 ffod->candidates = tree_cons (method, binfo, ffod->candidates);
1947 return true;
1950 return false;
1953 /* Called from find_final_overrider via dfs_walk. */
1955 static tree
1956 dfs_find_final_overrider (tree binfo, void* data)
1958 find_final_overrider_data *ffod = (find_final_overrider_data *) data;
1960 if (binfo == ffod->declaring_base)
1961 dfs_find_final_overrider_1 (binfo, ffod->vpath, ffod);
1963 return NULL_TREE;
1966 static tree
1967 dfs_find_final_overrider_q (tree derived, int ix, void *data)
1969 tree binfo = BINFO_BASETYPE (derived, ix);
1970 find_final_overrider_data *ffod = (find_final_overrider_data *) data;
1972 if (TREE_VIA_VIRTUAL (binfo))
1973 *ffod->vpath++ = derived;
1975 return binfo;
1978 static tree
1979 dfs_find_final_overrider_post (tree binfo, void *data)
1981 find_final_overrider_data *ffod = (find_final_overrider_data *) data;
1983 if (TREE_VIA_VIRTUAL (binfo))
1984 ffod->vpath--;
1986 return NULL_TREE;
1989 /* Returns a TREE_LIST whose TREE_PURPOSE is the final overrider for
1990 FN and whose TREE_VALUE is the binfo for the base where the
1991 overriding occurs. BINFO (in the hierarchy dominated by the binfo
1992 DERIVED) is the base object in which FN is declared. */
1994 static tree
1995 find_final_overrider (tree derived, tree binfo, tree fn)
1997 find_final_overrider_data ffod;
1998 count_depth_data cd;
2000 /* Getting this right is a little tricky. This is valid:
2002 struct S { virtual void f (); };
2003 struct T { virtual void f (); };
2004 struct U : public S, public T { };
2006 even though calling `f' in `U' is ambiguous. But,
2008 struct R { virtual void f(); };
2009 struct S : virtual public R { virtual void f (); };
2010 struct T : virtual public R { virtual void f (); };
2011 struct U : public S, public T { };
2013 is not -- there's no way to decide whether to put `S::f' or
2014 `T::f' in the vtable for `R'.
2016 The solution is to look at all paths to BINFO. If we find
2017 different overriders along any two, then there is a problem. */
2018 if (DECL_THUNK_P (fn))
2019 fn = THUNK_TARGET (fn);
2021 /* Determine the depth of the hierarchy. */
2022 cd.depth = 0;
2023 cd.max_depth = 0;
2024 dfs_walk (derived, dfs_depth_post, dfs_depth_q, &cd);
2026 ffod.fn = fn;
2027 ffod.declaring_base = binfo;
2028 ffod.most_derived_type = BINFO_TYPE (derived);
2029 ffod.candidates = NULL_TREE;
2030 ffod.vpath_list = (tree *) xcalloc (cd.max_depth, sizeof (tree));
2031 ffod.vpath = ffod.vpath_list;
2033 dfs_walk_real (derived,
2034 dfs_find_final_overrider,
2035 dfs_find_final_overrider_post,
2036 dfs_find_final_overrider_q,
2037 &ffod);
2039 free (ffod.vpath_list);
2041 /* If there was no winner, issue an error message. */
2042 if (!ffod.candidates || TREE_CHAIN (ffod.candidates))
2043 return error_mark_node;
2045 return ffod.candidates;
2048 /* Return the index of the vcall offset for FN when TYPE is used as a
2049 virtual base. */
2051 static tree
2052 get_vcall_index (tree fn, tree type)
2054 tree v;
2056 for (v = CLASSTYPE_VCALL_INDICES (type); v; v = TREE_CHAIN (v))
2057 if ((DECL_DESTRUCTOR_P (fn) && DECL_DESTRUCTOR_P (TREE_PURPOSE (v)))
2058 || same_signature_p (fn, TREE_PURPOSE (v)))
2059 break;
2061 /* There should always be an appropriate index. */
2062 my_friendly_assert (v, 20021103);
2064 return TREE_VALUE (v);
2067 /* Update an entry in the vtable for BINFO, which is in the hierarchy
2068 dominated by T. FN has been overridden in BINFO; VIRTUALS points to the
2069 corresponding position in the BINFO_VIRTUALS list. */
2071 static void
2072 update_vtable_entry_for_fn (tree t, tree binfo, tree fn, tree* virtuals,
2073 unsigned ix)
2075 tree b;
2076 tree overrider;
2077 tree delta;
2078 tree virtual_base;
2079 tree first_defn;
2080 tree overrider_fn, overrider_target;
2081 tree target_fn = DECL_THUNK_P (fn) ? THUNK_TARGET (fn) : fn;
2082 tree over_return, base_return;
2083 bool lost = false;
2085 /* Find the nearest primary base (possibly binfo itself) which defines
2086 this function; this is the class the caller will convert to when
2087 calling FN through BINFO. */
2088 for (b = binfo; ; b = get_primary_binfo (b))
2090 my_friendly_assert (b, 20021227);
2091 if (look_for_overrides_here (BINFO_TYPE (b), target_fn))
2092 break;
2094 /* The nearest definition is from a lost primary. */
2095 if (BINFO_LOST_PRIMARY_P (b))
2096 lost = true;
2098 first_defn = b;
2100 /* Find the final overrider. */
2101 overrider = find_final_overrider (TYPE_BINFO (t), b, target_fn);
2102 if (overrider == error_mark_node)
2104 error ("no unique final overrider for `%D' in `%T'", target_fn, t);
2105 return;
2107 overrider_target = overrider_fn = TREE_PURPOSE (overrider);
2109 /* Check for adjusting covariant return types. */
2110 over_return = TREE_TYPE (TREE_TYPE (overrider_target));
2111 base_return = TREE_TYPE (TREE_TYPE (target_fn));
2113 if (POINTER_TYPE_P (over_return)
2114 && TREE_CODE (over_return) == TREE_CODE (base_return)
2115 && CLASS_TYPE_P (TREE_TYPE (over_return))
2116 && CLASS_TYPE_P (TREE_TYPE (base_return)))
2118 /* If FN is a covariant thunk, we must figure out the adjustment
2119 to the final base FN was converting to. As OVERRIDER_TARGET might
2120 also be converting to the return type of FN, we have to
2121 combine the two conversions here. */
2122 tree fixed_offset, virtual_offset;
2124 over_return = TREE_TYPE (over_return);
2125 base_return = TREE_TYPE (base_return);
2127 if (DECL_THUNK_P (fn))
2129 my_friendly_assert (DECL_RESULT_THUNK_P (fn), 20031211);
2130 fixed_offset = ssize_int (THUNK_FIXED_OFFSET (fn));
2131 virtual_offset = THUNK_VIRTUAL_OFFSET (fn);
2133 else
2134 fixed_offset = virtual_offset = NULL_TREE;
2136 if (virtual_offset)
2137 /* Find the equivalent binfo within the return type of the
2138 overriding function. We will want the vbase offset from
2139 there. */
2140 virtual_offset =
2141 TREE_VALUE (purpose_member
2142 (BINFO_TYPE (virtual_offset),
2143 CLASSTYPE_VBASECLASSES (over_return)));
2144 else if (!same_type_ignoring_top_level_qualifiers_p
2145 (over_return, base_return))
2147 /* There was no existing virtual thunk (which takes
2148 precedence). So find the binfo of the base function's
2149 return type within the overriding function's return type.
2150 We cannot call lookup base here, because we're inside a
2151 dfs_walk, and will therefore clobber the BINFO_MARKED
2152 flags. Fortunately we know the covariancy is valid (it
2153 has already been checked), so we can just iterate along
2154 the binfos, which have been chained in inheritance graph
2155 order. Of course it is lame that we have to repeat the
2156 search here anyway -- we should really be caching pieces
2157 of the vtable and avoiding this repeated work. */
2158 tree thunk_binfo, base_binfo;
2160 /* Find the base binfo within the overriding function's
2161 return type. We will always find a thunk_binfo, except
2162 when the covariancy is invalid (which we will have
2163 already diagnosed). */
2164 for (base_binfo = TYPE_BINFO (base_return),
2165 thunk_binfo = TYPE_BINFO (over_return);
2166 thunk_binfo;
2167 thunk_binfo = TREE_CHAIN (thunk_binfo))
2168 if (same_type_p (BINFO_TYPE (thunk_binfo),
2169 BINFO_TYPE (base_binfo)))
2170 break;
2172 /* See if virtual inheritance is involved. */
2173 for (virtual_offset = thunk_binfo;
2174 virtual_offset;
2175 virtual_offset = BINFO_INHERITANCE_CHAIN (virtual_offset))
2176 if (TREE_VIA_VIRTUAL (virtual_offset))
2177 break;
2179 if (virtual_offset
2180 || (thunk_binfo && !BINFO_OFFSET_ZEROP (thunk_binfo)))
2182 tree offset = convert (ssizetype, BINFO_OFFSET (thunk_binfo));
2184 if (virtual_offset)
2186 /* We convert via virtual base. Adjust the fixed
2187 offset to be from there. */
2188 offset = size_diffop
2189 (offset, convert
2190 (ssizetype, BINFO_OFFSET (virtual_offset)));
2192 if (fixed_offset)
2193 /* There was an existing fixed offset, this must be
2194 from the base just converted to, and the base the
2195 FN was thunking to. */
2196 fixed_offset = size_binop (PLUS_EXPR, fixed_offset, offset);
2197 else
2198 fixed_offset = offset;
2202 if (fixed_offset || virtual_offset)
2203 /* Replace the overriding function with a covariant thunk. We
2204 will emit the overriding function in its own slot as
2205 well. */
2206 overrider_fn = make_thunk (overrider_target, /*this_adjusting=*/0,
2207 fixed_offset, virtual_offset);
2209 else
2210 my_friendly_assert (!DECL_THUNK_P (fn), 20021231);
2212 /* Assume that we will produce a thunk that convert all the way to
2213 the final overrider, and not to an intermediate virtual base. */
2214 virtual_base = NULL_TREE;
2216 /* See if we can convert to an intermediate virtual base first, and then
2217 use the vcall offset located there to finish the conversion. */
2218 for (; b; b = BINFO_INHERITANCE_CHAIN (b))
2220 /* If we find the final overrider, then we can stop
2221 walking. */
2222 if (same_type_p (BINFO_TYPE (b),
2223 BINFO_TYPE (TREE_VALUE (overrider))))
2224 break;
2226 /* If we find a virtual base, and we haven't yet found the
2227 overrider, then there is a virtual base between the
2228 declaring base (first_defn) and the final overrider. */
2229 if (TREE_VIA_VIRTUAL (b))
2231 virtual_base = b;
2232 break;
2236 if (overrider_fn != overrider_target && !virtual_base)
2238 /* The ABI specifies that a covariant thunk includes a mangling
2239 for a this pointer adjustment. This-adjusting thunks that
2240 override a function from a virtual base have a vcall
2241 adjustment. When the virtual base in question is a primary
2242 virtual base, we know the adjustments are zero, (and in the
2243 non-covariant case, we would not use the thunk).
2244 Unfortunately we didn't notice this could happen, when
2245 designing the ABI and so never mandated that such a covariant
2246 thunk should be emitted. Because we must use the ABI mandated
2247 name, we must continue searching from the binfo where we
2248 found the most recent definition of the function, towards the
2249 primary binfo which first introduced the function into the
2250 vtable. If that enters a virtual base, we must use a vcall
2251 this-adjusting thunk. Bleah! */
2252 tree probe = first_defn;
2254 while ((probe = get_primary_binfo (probe))
2255 && (unsigned) list_length (BINFO_VIRTUALS (probe)) > ix)
2256 if (TREE_VIA_VIRTUAL (probe))
2257 virtual_base = probe;
2259 if (virtual_base)
2260 /* Even if we find a virtual base, the correct delta is
2261 between the overrider and the binfo we're building a vtable
2262 for. */
2263 goto virtual_covariant;
2266 /* Compute the constant adjustment to the `this' pointer. The
2267 `this' pointer, when this function is called, will point at BINFO
2268 (or one of its primary bases, which are at the same offset). */
2269 if (virtual_base)
2270 /* The `this' pointer needs to be adjusted from the declaration to
2271 the nearest virtual base. */
2272 delta = size_diffop (convert (ssizetype, BINFO_OFFSET (virtual_base)),
2273 convert (ssizetype, BINFO_OFFSET (first_defn)));
2274 else if (lost)
2275 /* If the nearest definition is in a lost primary, we don't need an
2276 entry in our vtable. Except possibly in a constructor vtable,
2277 if we happen to get our primary back. In that case, the offset
2278 will be zero, as it will be a primary base. */
2279 delta = size_zero_node;
2280 else
2281 /* The `this' pointer needs to be adjusted from pointing to
2282 BINFO to pointing at the base where the final overrider
2283 appears. */
2284 virtual_covariant:
2285 delta = size_diffop (convert (ssizetype,
2286 BINFO_OFFSET (TREE_VALUE (overrider))),
2287 convert (ssizetype, BINFO_OFFSET (binfo)));
2289 modify_vtable_entry (t, binfo, overrider_fn, delta, virtuals);
2291 if (virtual_base)
2292 BV_VCALL_INDEX (*virtuals)
2293 = get_vcall_index (overrider_target, BINFO_TYPE (virtual_base));
2296 /* Called from modify_all_vtables via dfs_walk. */
2298 static tree
2299 dfs_modify_vtables (tree binfo, void* data)
2301 if (/* There's no need to modify the vtable for a non-virtual
2302 primary base; we're not going to use that vtable anyhow.
2303 We do still need to do this for virtual primary bases, as they
2304 could become non-primary in a construction vtable. */
2305 (!BINFO_PRIMARY_P (binfo) || TREE_VIA_VIRTUAL (binfo))
2306 /* Similarly, a base without a vtable needs no modification. */
2307 && CLASSTYPE_VFIELDS (BINFO_TYPE (binfo)))
2309 tree t = (tree) data;
2310 tree virtuals;
2311 tree old_virtuals;
2312 unsigned ix;
2314 make_new_vtable (t, binfo);
2316 /* Now, go through each of the virtual functions in the virtual
2317 function table for BINFO. Find the final overrider, and
2318 update the BINFO_VIRTUALS list appropriately. */
2319 for (ix = 0, virtuals = BINFO_VIRTUALS (binfo),
2320 old_virtuals = BINFO_VIRTUALS (TYPE_BINFO (BINFO_TYPE (binfo)));
2321 virtuals;
2322 ix++, virtuals = TREE_CHAIN (virtuals),
2323 old_virtuals = TREE_CHAIN (old_virtuals))
2324 update_vtable_entry_for_fn (t,
2325 binfo,
2326 BV_FN (old_virtuals),
2327 &virtuals, ix);
2330 BINFO_MARKED (binfo) = 1;
2332 return NULL_TREE;
2335 /* Update all of the primary and secondary vtables for T. Create new
2336 vtables as required, and initialize their RTTI information. Each
2337 of the functions in VIRTUALS is declared in T and may override a
2338 virtual function from a base class; find and modify the appropriate
2339 entries to point to the overriding functions. Returns a list, in
2340 declaration order, of the virtual functions that are declared in T,
2341 but do not appear in the primary base class vtable, and which
2342 should therefore be appended to the end of the vtable for T. */
2344 static tree
2345 modify_all_vtables (tree t, tree virtuals)
2347 tree binfo = TYPE_BINFO (t);
2348 tree *fnsp;
2350 /* Update all of the vtables. */
2351 dfs_walk (binfo, dfs_modify_vtables, unmarkedp, t);
2352 dfs_walk (binfo, dfs_unmark, markedp, t);
2354 /* Add virtual functions not already in our primary vtable. These
2355 will be both those introduced by this class, and those overridden
2356 from secondary bases. It does not include virtuals merely
2357 inherited from secondary bases. */
2358 for (fnsp = &virtuals; *fnsp; )
2360 tree fn = TREE_VALUE (*fnsp);
2362 if (!value_member (fn, BINFO_VIRTUALS (binfo))
2363 || DECL_VINDEX (fn) == error_mark_node)
2365 /* We don't need to adjust the `this' pointer when
2366 calling this function. */
2367 BV_DELTA (*fnsp) = integer_zero_node;
2368 BV_VCALL_INDEX (*fnsp) = NULL_TREE;
2370 /* This is a function not already in our vtable. Keep it. */
2371 fnsp = &TREE_CHAIN (*fnsp);
2373 else
2374 /* We've already got an entry for this function. Skip it. */
2375 *fnsp = TREE_CHAIN (*fnsp);
2378 return virtuals;
2381 /* Get the base virtual function declarations in T that have the
2382 indicated NAME. */
2384 static tree
2385 get_basefndecls (tree name, tree t)
2387 tree methods;
2388 tree base_fndecls = NULL_TREE;
2389 int n_baseclasses = CLASSTYPE_N_BASECLASSES (t);
2390 int i;
2392 /* Find virtual functions in T with the indicated NAME. */
2393 i = lookup_fnfields_1 (t, name);
2394 if (i != -1)
2395 for (methods = TREE_VEC_ELT (CLASSTYPE_METHOD_VEC (t), i);
2396 methods;
2397 methods = OVL_NEXT (methods))
2399 tree method = OVL_CURRENT (methods);
2401 if (TREE_CODE (method) == FUNCTION_DECL
2402 && DECL_VINDEX (method))
2403 base_fndecls = tree_cons (NULL_TREE, method, base_fndecls);
2406 if (base_fndecls)
2407 return base_fndecls;
2409 for (i = 0; i < n_baseclasses; i++)
2411 tree basetype = TYPE_BINFO_BASETYPE (t, i);
2412 base_fndecls = chainon (get_basefndecls (name, basetype),
2413 base_fndecls);
2416 return base_fndecls;
2419 /* If this declaration supersedes the declaration of
2420 a method declared virtual in the base class, then
2421 mark this field as being virtual as well. */
2423 static void
2424 check_for_override (tree decl, tree ctype)
2426 if (TREE_CODE (decl) == TEMPLATE_DECL)
2427 /* In [temp.mem] we have:
2429 A specialization of a member function template does not
2430 override a virtual function from a base class. */
2431 return;
2432 if ((DECL_DESTRUCTOR_P (decl)
2433 || IDENTIFIER_VIRTUAL_P (DECL_NAME (decl))
2434 || DECL_CONV_FN_P (decl))
2435 && look_for_overrides (ctype, decl)
2436 && !DECL_STATIC_FUNCTION_P (decl))
2437 /* Set DECL_VINDEX to a value that is neither an INTEGER_CST nor
2438 the error_mark_node so that we know it is an overriding
2439 function. */
2440 DECL_VINDEX (decl) = decl;
2442 if (DECL_VIRTUAL_P (decl))
2444 if (!DECL_VINDEX (decl))
2445 DECL_VINDEX (decl) = error_mark_node;
2446 IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)) = 1;
2450 /* Warn about hidden virtual functions that are not overridden in t.
2451 We know that constructors and destructors don't apply. */
2453 void
2454 warn_hidden (tree t)
2456 tree method_vec = CLASSTYPE_METHOD_VEC (t);
2457 int n_methods = method_vec ? TREE_VEC_LENGTH (method_vec) : 0;
2458 int i;
2460 /* We go through each separately named virtual function. */
2461 for (i = 2; i < n_methods && TREE_VEC_ELT (method_vec, i); ++i)
2463 tree fns;
2464 tree name;
2465 tree fndecl;
2466 tree base_fndecls;
2467 int j;
2469 /* All functions in this slot in the CLASSTYPE_METHOD_VEC will
2470 have the same name. Figure out what name that is. */
2471 name = DECL_NAME (OVL_CURRENT (TREE_VEC_ELT (method_vec, i)));
2472 /* There are no possibly hidden functions yet. */
2473 base_fndecls = NULL_TREE;
2474 /* Iterate through all of the base classes looking for possibly
2475 hidden functions. */
2476 for (j = 0; j < CLASSTYPE_N_BASECLASSES (t); j++)
2478 tree basetype = TYPE_BINFO_BASETYPE (t, j);
2479 base_fndecls = chainon (get_basefndecls (name, basetype),
2480 base_fndecls);
2483 /* If there are no functions to hide, continue. */
2484 if (!base_fndecls)
2485 continue;
2487 /* Remove any overridden functions. */
2488 for (fns = TREE_VEC_ELT (method_vec, i); fns; fns = OVL_NEXT (fns))
2490 fndecl = OVL_CURRENT (fns);
2491 if (DECL_VINDEX (fndecl))
2493 tree *prev = &base_fndecls;
2495 while (*prev)
2496 /* If the method from the base class has the same
2497 signature as the method from the derived class, it
2498 has been overridden. */
2499 if (same_signature_p (fndecl, TREE_VALUE (*prev)))
2500 *prev = TREE_CHAIN (*prev);
2501 else
2502 prev = &TREE_CHAIN (*prev);
2506 /* Now give a warning for all base functions without overriders,
2507 as they are hidden. */
2508 while (base_fndecls)
2510 /* Here we know it is a hider, and no overrider exists. */
2511 cp_warning_at ("`%D' was hidden", TREE_VALUE (base_fndecls));
2512 cp_warning_at (" by `%D'",
2513 OVL_CURRENT (TREE_VEC_ELT (method_vec, i)));
2514 base_fndecls = TREE_CHAIN (base_fndecls);
2519 /* Check for things that are invalid. There are probably plenty of other
2520 things we should check for also. */
2522 static void
2523 finish_struct_anon (tree t)
2525 tree field;
2527 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
2529 if (TREE_STATIC (field))
2530 continue;
2531 if (TREE_CODE (field) != FIELD_DECL)
2532 continue;
2534 if (DECL_NAME (field) == NULL_TREE
2535 && ANON_AGGR_TYPE_P (TREE_TYPE (field)))
2537 tree elt = TYPE_FIELDS (TREE_TYPE (field));
2538 for (; elt; elt = TREE_CHAIN (elt))
2540 /* We're generally only interested in entities the user
2541 declared, but we also find nested classes by noticing
2542 the TYPE_DECL that we create implicitly. You're
2543 allowed to put one anonymous union inside another,
2544 though, so we explicitly tolerate that. We use
2545 TYPE_ANONYMOUS_P rather than ANON_AGGR_TYPE_P so that
2546 we also allow unnamed types used for defining fields. */
2547 if (DECL_ARTIFICIAL (elt)
2548 && (!DECL_IMPLICIT_TYPEDEF_P (elt)
2549 || TYPE_ANONYMOUS_P (TREE_TYPE (elt))))
2550 continue;
2552 if (TREE_CODE (elt) != FIELD_DECL)
2554 cp_pedwarn_at ("`%#D' invalid; an anonymous union can only have non-static data members",
2555 elt);
2556 continue;
2559 if (TREE_PRIVATE (elt))
2560 cp_pedwarn_at ("private member `%#D' in anonymous union",
2561 elt);
2562 else if (TREE_PROTECTED (elt))
2563 cp_pedwarn_at ("protected member `%#D' in anonymous union",
2564 elt);
2566 TREE_PRIVATE (elt) = TREE_PRIVATE (field);
2567 TREE_PROTECTED (elt) = TREE_PROTECTED (field);
2573 /* Add T to CLASSTYPE_DECL_LIST of current_class_type which
2574 will be used later during class template instantiation.
2575 When FRIEND_P is zero, T can be a static member data (VAR_DECL),
2576 a non-static member data (FIELD_DECL), a member function
2577 (FUNCTION_DECL), a nested type (RECORD_TYPE, ENUM_TYPE),
2578 a typedef (TYPE_DECL) or a member class template (TEMPLATE_DECL)
2579 When FRIEND_P is nonzero, T is either a friend class
2580 (RECORD_TYPE, TEMPLATE_DECL) or a friend function
2581 (FUNCTION_DECL, TEMPLATE_DECL). */
2583 void
2584 maybe_add_class_template_decl_list (tree type, tree t, int friend_p)
2586 /* Save some memory by not creating TREE_LIST if TYPE is not template. */
2587 if (CLASSTYPE_TEMPLATE_INFO (type))
2588 CLASSTYPE_DECL_LIST (type)
2589 = tree_cons (friend_p ? NULL_TREE : type,
2590 t, CLASSTYPE_DECL_LIST (type));
2593 /* Create default constructors, assignment operators, and so forth for
2594 the type indicated by T, if they are needed.
2595 CANT_HAVE_DEFAULT_CTOR, CANT_HAVE_CONST_CTOR, and
2596 CANT_HAVE_CONST_ASSIGNMENT are nonzero if, for whatever reason, the
2597 class cannot have a default constructor, copy constructor taking a
2598 const reference argument, or an assignment operator taking a const
2599 reference, respectively. If a virtual destructor is created, its
2600 DECL is returned; otherwise the return value is NULL_TREE. */
2602 static void
2603 add_implicitly_declared_members (tree t,
2604 int cant_have_default_ctor,
2605 int cant_have_const_cctor,
2606 int cant_have_const_assignment)
2608 tree default_fn;
2609 tree implicit_fns = NULL_TREE;
2610 tree virtual_dtor = NULL_TREE;
2611 tree *f;
2613 ++adding_implicit_members;
2615 /* Destructor. */
2616 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t) && !TYPE_HAS_DESTRUCTOR (t))
2618 default_fn = implicitly_declare_fn (sfk_destructor, t, /*const_p=*/0);
2619 check_for_override (default_fn, t);
2621 /* If we couldn't make it work, then pretend we didn't need it. */
2622 if (default_fn == void_type_node)
2623 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t) = 0;
2624 else
2626 TREE_CHAIN (default_fn) = implicit_fns;
2627 implicit_fns = default_fn;
2629 if (DECL_VINDEX (default_fn))
2630 virtual_dtor = default_fn;
2633 else
2634 /* Any non-implicit destructor is non-trivial. */
2635 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t) |= TYPE_HAS_DESTRUCTOR (t);
2637 /* Default constructor. */
2638 if (! TYPE_HAS_CONSTRUCTOR (t) && ! cant_have_default_ctor)
2640 default_fn = implicitly_declare_fn (sfk_constructor, t, /*const_p=*/0);
2641 TREE_CHAIN (default_fn) = implicit_fns;
2642 implicit_fns = default_fn;
2645 /* Copy constructor. */
2646 if (! TYPE_HAS_INIT_REF (t) && ! TYPE_FOR_JAVA (t))
2648 /* ARM 12.18: You get either X(X&) or X(const X&), but
2649 not both. --Chip */
2650 default_fn
2651 = implicitly_declare_fn (sfk_copy_constructor, t,
2652 /*const_p=*/!cant_have_const_cctor);
2653 TREE_CHAIN (default_fn) = implicit_fns;
2654 implicit_fns = default_fn;
2657 /* Assignment operator. */
2658 if (! TYPE_HAS_ASSIGN_REF (t) && ! TYPE_FOR_JAVA (t))
2660 default_fn
2661 = implicitly_declare_fn (sfk_assignment_operator, t,
2662 /*const_p=*/!cant_have_const_assignment);
2663 TREE_CHAIN (default_fn) = implicit_fns;
2664 implicit_fns = default_fn;
2667 /* Now, hook all of the new functions on to TYPE_METHODS,
2668 and add them to the CLASSTYPE_METHOD_VEC. */
2669 for (f = &implicit_fns; *f; f = &TREE_CHAIN (*f))
2671 add_method (t, *f, /*error_p=*/0);
2672 maybe_add_class_template_decl_list (current_class_type, *f, /*friend_p=*/0);
2674 if (abi_version_at_least (2))
2675 /* G++ 3.2 put the implicit destructor at the *beginning* of the
2676 list, which cause the destructor to be emitted in an incorrect
2677 location in the vtable. */
2678 TYPE_METHODS (t) = chainon (TYPE_METHODS (t), implicit_fns);
2679 else
2681 if (warn_abi && virtual_dtor)
2682 warning ("vtable layout for class `%T' may not be ABI-compliant "
2683 "and may change in a future version of GCC due to implicit "
2684 "virtual destructor",
2686 *f = TYPE_METHODS (t);
2687 TYPE_METHODS (t) = implicit_fns;
2690 --adding_implicit_members;
2693 /* Subroutine of finish_struct_1. Recursively count the number of fields
2694 in TYPE, including anonymous union members. */
2696 static int
2697 count_fields (tree fields)
2699 tree x;
2700 int n_fields = 0;
2701 for (x = fields; x; x = TREE_CHAIN (x))
2703 if (TREE_CODE (x) == FIELD_DECL && ANON_AGGR_TYPE_P (TREE_TYPE (x)))
2704 n_fields += count_fields (TYPE_FIELDS (TREE_TYPE (x)));
2705 else
2706 n_fields += 1;
2708 return n_fields;
2711 /* Subroutine of finish_struct_1. Recursively add all the fields in the
2712 TREE_LIST FIELDS to the SORTED_FIELDS_TYPE elts, starting at offset IDX. */
2714 static int
2715 add_fields_to_record_type (tree fields, struct sorted_fields_type *field_vec, int idx)
2717 tree x;
2718 for (x = fields; x; x = TREE_CHAIN (x))
2720 if (TREE_CODE (x) == FIELD_DECL && ANON_AGGR_TYPE_P (TREE_TYPE (x)))
2721 idx = add_fields_to_record_type (TYPE_FIELDS (TREE_TYPE (x)), field_vec, idx);
2722 else
2723 field_vec->elts[idx++] = x;
2725 return idx;
2728 /* FIELD is a bit-field. We are finishing the processing for its
2729 enclosing type. Issue any appropriate messages and set appropriate
2730 flags. */
2732 static void
2733 check_bitfield_decl (tree field)
2735 tree type = TREE_TYPE (field);
2736 tree w = NULL_TREE;
2738 /* Detect invalid bit-field type. */
2739 if (DECL_INITIAL (field)
2740 && ! INTEGRAL_TYPE_P (TREE_TYPE (field)))
2742 cp_error_at ("bit-field `%#D' with non-integral type", field);
2743 w = error_mark_node;
2746 /* Detect and ignore out of range field width. */
2747 if (DECL_INITIAL (field))
2749 w = DECL_INITIAL (field);
2751 /* Avoid the non_lvalue wrapper added by fold for PLUS_EXPRs. */
2752 STRIP_NOPS (w);
2754 /* detect invalid field size. */
2755 if (TREE_CODE (w) == CONST_DECL)
2756 w = DECL_INITIAL (w);
2757 else
2758 w = decl_constant_value (w);
2760 if (TREE_CODE (w) != INTEGER_CST)
2762 cp_error_at ("bit-field `%D' width not an integer constant",
2763 field);
2764 w = error_mark_node;
2766 else if (tree_int_cst_sgn (w) < 0)
2768 cp_error_at ("negative width in bit-field `%D'", field);
2769 w = error_mark_node;
2771 else if (integer_zerop (w) && DECL_NAME (field) != 0)
2773 cp_error_at ("zero width for bit-field `%D'", field);
2774 w = error_mark_node;
2776 else if (compare_tree_int (w, TYPE_PRECISION (type)) > 0
2777 && TREE_CODE (type) != ENUMERAL_TYPE
2778 && TREE_CODE (type) != BOOLEAN_TYPE)
2779 cp_warning_at ("width of `%D' exceeds its type", field);
2780 else if (TREE_CODE (type) == ENUMERAL_TYPE
2781 && (0 > compare_tree_int (w,
2782 min_precision (TYPE_MIN_VALUE (type),
2783 TREE_UNSIGNED (type)))
2784 || 0 > compare_tree_int (w,
2785 min_precision
2786 (TYPE_MAX_VALUE (type),
2787 TREE_UNSIGNED (type)))))
2788 cp_warning_at ("`%D' is too small to hold all values of `%#T'",
2789 field, type);
2792 /* Remove the bit-field width indicator so that the rest of the
2793 compiler does not treat that value as an initializer. */
2794 DECL_INITIAL (field) = NULL_TREE;
2796 if (w != error_mark_node)
2798 DECL_SIZE (field) = convert (bitsizetype, w);
2799 DECL_BIT_FIELD (field) = 1;
2801 else
2803 /* Non-bit-fields are aligned for their type. */
2804 DECL_BIT_FIELD (field) = 0;
2805 CLEAR_DECL_C_BIT_FIELD (field);
2809 /* FIELD is a non bit-field. We are finishing the processing for its
2810 enclosing type T. Issue any appropriate messages and set appropriate
2811 flags. */
2813 static void
2814 check_field_decl (tree field,
2815 tree t,
2816 int* cant_have_const_ctor,
2817 int* cant_have_default_ctor,
2818 int* no_const_asn_ref,
2819 int* any_default_members)
2821 tree type = strip_array_types (TREE_TYPE (field));
2823 /* An anonymous union cannot contain any fields which would change
2824 the settings of CANT_HAVE_CONST_CTOR and friends. */
2825 if (ANON_UNION_TYPE_P (type))
2827 /* And, we don't set TYPE_HAS_CONST_INIT_REF, etc., for anonymous
2828 structs. So, we recurse through their fields here. */
2829 else if (ANON_AGGR_TYPE_P (type))
2831 tree fields;
2833 for (fields = TYPE_FIELDS (type); fields; fields = TREE_CHAIN (fields))
2834 if (TREE_CODE (fields) == FIELD_DECL && !DECL_C_BIT_FIELD (field))
2835 check_field_decl (fields, t, cant_have_const_ctor,
2836 cant_have_default_ctor, no_const_asn_ref,
2837 any_default_members);
2839 /* Check members with class type for constructors, destructors,
2840 etc. */
2841 else if (CLASS_TYPE_P (type))
2843 /* Never let anything with uninheritable virtuals
2844 make it through without complaint. */
2845 abstract_virtuals_error (field, type);
2847 if (TREE_CODE (t) == UNION_TYPE)
2849 if (TYPE_NEEDS_CONSTRUCTING (type))
2850 cp_error_at ("member `%#D' with constructor not allowed in union",
2851 field);
2852 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
2853 cp_error_at ("member `%#D' with destructor not allowed in union",
2854 field);
2855 if (TYPE_HAS_COMPLEX_ASSIGN_REF (type))
2856 cp_error_at ("member `%#D' with copy assignment operator not allowed in union",
2857 field);
2859 else
2861 TYPE_NEEDS_CONSTRUCTING (t) |= TYPE_NEEDS_CONSTRUCTING (type);
2862 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
2863 |= TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type);
2864 TYPE_HAS_COMPLEX_ASSIGN_REF (t) |= TYPE_HAS_COMPLEX_ASSIGN_REF (type);
2865 TYPE_HAS_COMPLEX_INIT_REF (t) |= TYPE_HAS_COMPLEX_INIT_REF (type);
2868 if (!TYPE_HAS_CONST_INIT_REF (type))
2869 *cant_have_const_ctor = 1;
2871 if (!TYPE_HAS_CONST_ASSIGN_REF (type))
2872 *no_const_asn_ref = 1;
2874 if (TYPE_HAS_CONSTRUCTOR (type)
2875 && ! TYPE_HAS_DEFAULT_CONSTRUCTOR (type))
2876 *cant_have_default_ctor = 1;
2878 if (DECL_INITIAL (field) != NULL_TREE)
2880 /* `build_class_init_list' does not recognize
2881 non-FIELD_DECLs. */
2882 if (TREE_CODE (t) == UNION_TYPE && any_default_members != 0)
2883 error ("multiple fields in union `%T' initialized", t);
2884 *any_default_members = 1;
2888 /* Check the data members (both static and non-static), class-scoped
2889 typedefs, etc., appearing in the declaration of T. Issue
2890 appropriate diagnostics. Sets ACCESS_DECLS to a list (in
2891 declaration order) of access declarations; each TREE_VALUE in this
2892 list is a USING_DECL.
2894 In addition, set the following flags:
2896 EMPTY_P
2897 The class is empty, i.e., contains no non-static data members.
2899 CANT_HAVE_DEFAULT_CTOR_P
2900 This class cannot have an implicitly generated default
2901 constructor.
2903 CANT_HAVE_CONST_CTOR_P
2904 This class cannot have an implicitly generated copy constructor
2905 taking a const reference.
2907 CANT_HAVE_CONST_ASN_REF
2908 This class cannot have an implicitly generated assignment
2909 operator taking a const reference.
2911 All of these flags should be initialized before calling this
2912 function.
2914 Returns a pointer to the end of the TYPE_FIELDs chain; additional
2915 fields can be added by adding to this chain. */
2917 static void
2918 check_field_decls (tree t, tree *access_decls,
2919 int *cant_have_default_ctor_p,
2920 int *cant_have_const_ctor_p,
2921 int *no_const_asn_ref_p)
2923 tree *field;
2924 tree *next;
2925 int has_pointers;
2926 int any_default_members;
2928 /* Assume there are no access declarations. */
2929 *access_decls = NULL_TREE;
2930 /* Assume this class has no pointer members. */
2931 has_pointers = 0;
2932 /* Assume none of the members of this class have default
2933 initializations. */
2934 any_default_members = 0;
2936 for (field = &TYPE_FIELDS (t); *field; field = next)
2938 tree x = *field;
2939 tree type = TREE_TYPE (x);
2941 next = &TREE_CHAIN (x);
2943 if (TREE_CODE (x) == FIELD_DECL)
2945 if (TYPE_PACKED (t))
2947 if (!pod_type_p (TREE_TYPE (x)) && !TYPE_PACKED (TREE_TYPE (x)))
2948 cp_warning_at
2949 ("ignoring packed attribute on unpacked non-POD field `%#D'",
2951 else
2952 DECL_PACKED (x) = 1;
2955 if (DECL_C_BIT_FIELD (x) && integer_zerop (DECL_INITIAL (x)))
2956 /* We don't treat zero-width bitfields as making a class
2957 non-empty. */
2959 else
2961 tree element_type;
2963 /* The class is non-empty. */
2964 CLASSTYPE_EMPTY_P (t) = 0;
2965 /* The class is not even nearly empty. */
2966 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
2967 /* If one of the data members contains an empty class,
2968 so does T. */
2969 element_type = strip_array_types (type);
2970 if (CLASS_TYPE_P (element_type)
2971 && CLASSTYPE_CONTAINS_EMPTY_CLASS_P (element_type))
2972 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) = 1;
2976 if (TREE_CODE (x) == USING_DECL)
2978 /* Prune the access declaration from the list of fields. */
2979 *field = TREE_CHAIN (x);
2981 /* Save the access declarations for our caller. */
2982 *access_decls = tree_cons (NULL_TREE, x, *access_decls);
2984 /* Since we've reset *FIELD there's no reason to skip to the
2985 next field. */
2986 next = field;
2987 continue;
2990 if (TREE_CODE (x) == TYPE_DECL
2991 || TREE_CODE (x) == TEMPLATE_DECL)
2992 continue;
2994 /* If we've gotten this far, it's a data member, possibly static,
2995 or an enumerator. */
2996 DECL_CONTEXT (x) = t;
2998 /* When this goes into scope, it will be a non-local reference. */
2999 DECL_NONLOCAL (x) = 1;
3001 if (TREE_CODE (t) == UNION_TYPE)
3003 /* [class.union]
3005 If a union contains a static data member, or a member of
3006 reference type, the program is ill-formed. */
3007 if (TREE_CODE (x) == VAR_DECL)
3009 cp_error_at ("`%D' may not be static because it is a member of a union", x);
3010 continue;
3012 if (TREE_CODE (type) == REFERENCE_TYPE)
3014 cp_error_at ("`%D' may not have reference type `%T' because it is a member of a union",
3015 x, type);
3016 continue;
3020 /* ``A local class cannot have static data members.'' ARM 9.4 */
3021 if (current_function_decl && TREE_STATIC (x))
3022 cp_error_at ("field `%D' in local class cannot be static", x);
3024 /* Perform error checking that did not get done in
3025 grokdeclarator. */
3026 if (TREE_CODE (type) == FUNCTION_TYPE)
3028 cp_error_at ("field `%D' invalidly declared function type",
3030 type = build_pointer_type (type);
3031 TREE_TYPE (x) = type;
3033 else if (TREE_CODE (type) == METHOD_TYPE)
3035 cp_error_at ("field `%D' invalidly declared method type", x);
3036 type = build_pointer_type (type);
3037 TREE_TYPE (x) = type;
3040 if (type == error_mark_node)
3041 continue;
3043 if (TREE_CODE (x) == CONST_DECL || TREE_CODE (x) == VAR_DECL)
3044 continue;
3046 /* Now it can only be a FIELD_DECL. */
3048 if (TREE_PRIVATE (x) || TREE_PROTECTED (x))
3049 CLASSTYPE_NON_AGGREGATE (t) = 1;
3051 /* If this is of reference type, check if it needs an init.
3052 Also do a little ANSI jig if necessary. */
3053 if (TREE_CODE (type) == REFERENCE_TYPE)
3055 CLASSTYPE_NON_POD_P (t) = 1;
3056 if (DECL_INITIAL (x) == NULL_TREE)
3057 SET_CLASSTYPE_REF_FIELDS_NEED_INIT (t, 1);
3059 /* ARM $12.6.2: [A member initializer list] (or, for an
3060 aggregate, initialization by a brace-enclosed list) is the
3061 only way to initialize nonstatic const and reference
3062 members. */
3063 *cant_have_default_ctor_p = 1;
3064 TYPE_HAS_COMPLEX_ASSIGN_REF (t) = 1;
3066 if (! TYPE_HAS_CONSTRUCTOR (t) && CLASSTYPE_NON_AGGREGATE (t)
3067 && extra_warnings)
3068 cp_warning_at ("non-static reference `%#D' in class without a constructor", x);
3071 type = strip_array_types (type);
3073 if (TYPE_PTR_P (type))
3074 has_pointers = 1;
3076 if (CLASS_TYPE_P (type))
3078 if (CLASSTYPE_REF_FIELDS_NEED_INIT (type))
3079 SET_CLASSTYPE_REF_FIELDS_NEED_INIT (t, 1);
3080 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (type))
3081 SET_CLASSTYPE_READONLY_FIELDS_NEED_INIT (t, 1);
3084 if (DECL_MUTABLE_P (x) || TYPE_HAS_MUTABLE_P (type))
3085 CLASSTYPE_HAS_MUTABLE (t) = 1;
3087 if (! pod_type_p (type))
3088 /* DR 148 now allows pointers to members (which are POD themselves),
3089 to be allowed in POD structs. */
3090 CLASSTYPE_NON_POD_P (t) = 1;
3092 if (! zero_init_p (type))
3093 CLASSTYPE_NON_ZERO_INIT_P (t) = 1;
3095 /* If any field is const, the structure type is pseudo-const. */
3096 if (CP_TYPE_CONST_P (type))
3098 C_TYPE_FIELDS_READONLY (t) = 1;
3099 if (DECL_INITIAL (x) == NULL_TREE)
3100 SET_CLASSTYPE_READONLY_FIELDS_NEED_INIT (t, 1);
3102 /* ARM $12.6.2: [A member initializer list] (or, for an
3103 aggregate, initialization by a brace-enclosed list) is the
3104 only way to initialize nonstatic const and reference
3105 members. */
3106 *cant_have_default_ctor_p = 1;
3107 TYPE_HAS_COMPLEX_ASSIGN_REF (t) = 1;
3109 if (! TYPE_HAS_CONSTRUCTOR (t) && CLASSTYPE_NON_AGGREGATE (t)
3110 && extra_warnings)
3111 cp_warning_at ("non-static const member `%#D' in class without a constructor", x);
3113 /* A field that is pseudo-const makes the structure likewise. */
3114 else if (CLASS_TYPE_P (type))
3116 C_TYPE_FIELDS_READONLY (t) |= C_TYPE_FIELDS_READONLY (type);
3117 SET_CLASSTYPE_READONLY_FIELDS_NEED_INIT (t,
3118 CLASSTYPE_READONLY_FIELDS_NEED_INIT (t)
3119 | CLASSTYPE_READONLY_FIELDS_NEED_INIT (type));
3122 /* Core issue 80: A nonstatic data member is required to have a
3123 different name from the class iff the class has a
3124 user-defined constructor. */
3125 if (constructor_name_p (DECL_NAME (x), t) && TYPE_HAS_CONSTRUCTOR (t))
3126 cp_pedwarn_at ("field `%#D' with same name as class", x);
3128 /* We set DECL_C_BIT_FIELD in grokbitfield.
3129 If the type and width are valid, we'll also set DECL_BIT_FIELD. */
3130 if (DECL_C_BIT_FIELD (x))
3131 check_bitfield_decl (x);
3132 else
3133 check_field_decl (x, t,
3134 cant_have_const_ctor_p,
3135 cant_have_default_ctor_p,
3136 no_const_asn_ref_p,
3137 &any_default_members);
3140 /* Effective C++ rule 11. */
3141 if (has_pointers && warn_ecpp && TYPE_HAS_CONSTRUCTOR (t)
3142 && ! (TYPE_HAS_INIT_REF (t) && TYPE_HAS_ASSIGN_REF (t)))
3144 warning ("`%#T' has pointer data members", t);
3146 if (! TYPE_HAS_INIT_REF (t))
3148 warning (" but does not override `%T(const %T&)'", t, t);
3149 if (! TYPE_HAS_ASSIGN_REF (t))
3150 warning (" or `operator=(const %T&)'", t);
3152 else if (! TYPE_HAS_ASSIGN_REF (t))
3153 warning (" but does not override `operator=(const %T&)'", t);
3157 /* Check anonymous struct/anonymous union fields. */
3158 finish_struct_anon (t);
3160 /* We've built up the list of access declarations in reverse order.
3161 Fix that now. */
3162 *access_decls = nreverse (*access_decls);
3165 /* If TYPE is an empty class type, records its OFFSET in the table of
3166 OFFSETS. */
3168 static int
3169 record_subobject_offset (tree type, tree offset, splay_tree offsets)
3171 splay_tree_node n;
3173 if (!is_empty_class (type))
3174 return 0;
3176 /* Record the location of this empty object in OFFSETS. */
3177 n = splay_tree_lookup (offsets, (splay_tree_key) offset);
3178 if (!n)
3179 n = splay_tree_insert (offsets,
3180 (splay_tree_key) offset,
3181 (splay_tree_value) NULL_TREE);
3182 n->value = ((splay_tree_value)
3183 tree_cons (NULL_TREE,
3184 type,
3185 (tree) n->value));
3187 return 0;
3190 /* Returns nonzero if TYPE is an empty class type and there is
3191 already an entry in OFFSETS for the same TYPE as the same OFFSET. */
3193 static int
3194 check_subobject_offset (tree type, tree offset, splay_tree offsets)
3196 splay_tree_node n;
3197 tree t;
3199 if (!is_empty_class (type))
3200 return 0;
3202 /* Record the location of this empty object in OFFSETS. */
3203 n = splay_tree_lookup (offsets, (splay_tree_key) offset);
3204 if (!n)
3205 return 0;
3207 for (t = (tree) n->value; t; t = TREE_CHAIN (t))
3208 if (same_type_p (TREE_VALUE (t), type))
3209 return 1;
3211 return 0;
3214 /* Walk through all the subobjects of TYPE (located at OFFSET). Call
3215 F for every subobject, passing it the type, offset, and table of
3216 OFFSETS. If VBASES_P is one, then virtual non-primary bases should
3217 be traversed.
3219 If MAX_OFFSET is non-NULL, then subobjects with an offset greater
3220 than MAX_OFFSET will not be walked.
3222 If F returns a nonzero value, the traversal ceases, and that value
3223 is returned. Otherwise, returns zero. */
3225 static int
3226 walk_subobject_offsets (tree type,
3227 subobject_offset_fn f,
3228 tree offset,
3229 splay_tree offsets,
3230 tree max_offset,
3231 int vbases_p)
3233 int r = 0;
3234 tree type_binfo = NULL_TREE;
3236 /* If this OFFSET is bigger than the MAX_OFFSET, then we should
3237 stop. */
3238 if (max_offset && INT_CST_LT (max_offset, offset))
3239 return 0;
3241 if (!TYPE_P (type))
3243 if (abi_version_at_least (2))
3244 type_binfo = type;
3245 type = BINFO_TYPE (type);
3248 if (CLASS_TYPE_P (type))
3250 tree field;
3251 tree binfo;
3252 int i;
3254 /* Avoid recursing into objects that are not interesting. */
3255 if (!CLASSTYPE_CONTAINS_EMPTY_CLASS_P (type))
3256 return 0;
3258 /* Record the location of TYPE. */
3259 r = (*f) (type, offset, offsets);
3260 if (r)
3261 return r;
3263 /* Iterate through the direct base classes of TYPE. */
3264 if (!type_binfo)
3265 type_binfo = TYPE_BINFO (type);
3266 for (i = 0; i < BINFO_N_BASETYPES (type_binfo); ++i)
3268 tree binfo_offset;
3270 binfo = BINFO_BASETYPE (type_binfo, i);
3272 if (abi_version_at_least (2)
3273 && TREE_VIA_VIRTUAL (binfo))
3274 continue;
3276 if (!vbases_p
3277 && TREE_VIA_VIRTUAL (binfo)
3278 && !BINFO_PRIMARY_P (binfo))
3279 continue;
3281 if (!abi_version_at_least (2))
3282 binfo_offset = size_binop (PLUS_EXPR,
3283 offset,
3284 BINFO_OFFSET (binfo));
3285 else
3287 tree orig_binfo;
3288 /* We cannot rely on BINFO_OFFSET being set for the base
3289 class yet, but the offsets for direct non-virtual
3290 bases can be calculated by going back to the TYPE. */
3291 orig_binfo = BINFO_BASETYPE (TYPE_BINFO (type), i);
3292 binfo_offset = size_binop (PLUS_EXPR,
3293 offset,
3294 BINFO_OFFSET (orig_binfo));
3297 r = walk_subobject_offsets (binfo,
3299 binfo_offset,
3300 offsets,
3301 max_offset,
3302 (abi_version_at_least (2)
3303 ? /*vbases_p=*/0 : vbases_p));
3304 if (r)
3305 return r;
3308 if (abi_version_at_least (2))
3310 tree vbase;
3312 /* Iterate through the virtual base classes of TYPE. In G++
3313 3.2, we included virtual bases in the direct base class
3314 loop above, which results in incorrect results; the
3315 correct offsets for virtual bases are only known when
3316 working with the most derived type. */
3317 if (vbases_p)
3318 for (vbase = CLASSTYPE_VBASECLASSES (type);
3319 vbase;
3320 vbase = TREE_CHAIN (vbase))
3322 binfo = TREE_VALUE (vbase);
3323 r = walk_subobject_offsets (binfo,
3325 size_binop (PLUS_EXPR,
3326 offset,
3327 BINFO_OFFSET (binfo)),
3328 offsets,
3329 max_offset,
3330 /*vbases_p=*/0);
3331 if (r)
3332 return r;
3334 else
3336 /* We still have to walk the primary base, if it is
3337 virtual. (If it is non-virtual, then it was walked
3338 above.) */
3339 vbase = get_primary_binfo (type_binfo);
3340 if (vbase && TREE_VIA_VIRTUAL (vbase)
3341 && BINFO_PRIMARY_BASE_OF (vbase) == type_binfo)
3343 r = (walk_subobject_offsets
3344 (vbase, f, offset,
3345 offsets, max_offset, /*vbases_p=*/0));
3346 if (r)
3347 return r;
3352 /* Iterate through the fields of TYPE. */
3353 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
3354 if (TREE_CODE (field) == FIELD_DECL && !DECL_ARTIFICIAL (field))
3356 tree field_offset;
3358 if (abi_version_at_least (2))
3359 field_offset = byte_position (field);
3360 else
3361 /* In G++ 3.2, DECL_FIELD_OFFSET was used. */
3362 field_offset = DECL_FIELD_OFFSET (field);
3364 r = walk_subobject_offsets (TREE_TYPE (field),
3366 size_binop (PLUS_EXPR,
3367 offset,
3368 field_offset),
3369 offsets,
3370 max_offset,
3371 /*vbases_p=*/1);
3372 if (r)
3373 return r;
3376 else if (TREE_CODE (type) == ARRAY_TYPE)
3378 tree element_type = strip_array_types (type);
3379 tree domain = TYPE_DOMAIN (type);
3380 tree index;
3382 /* Avoid recursing into objects that are not interesting. */
3383 if (!CLASS_TYPE_P (element_type)
3384 || !CLASSTYPE_CONTAINS_EMPTY_CLASS_P (element_type))
3385 return 0;
3387 /* Step through each of the elements in the array. */
3388 for (index = size_zero_node;
3389 /* G++ 3.2 had an off-by-one error here. */
3390 (abi_version_at_least (2)
3391 ? !INT_CST_LT (TYPE_MAX_VALUE (domain), index)
3392 : INT_CST_LT (index, TYPE_MAX_VALUE (domain)));
3393 index = size_binop (PLUS_EXPR, index, size_one_node))
3395 r = walk_subobject_offsets (TREE_TYPE (type),
3397 offset,
3398 offsets,
3399 max_offset,
3400 /*vbases_p=*/1);
3401 if (r)
3402 return r;
3403 offset = size_binop (PLUS_EXPR, offset,
3404 TYPE_SIZE_UNIT (TREE_TYPE (type)));
3405 /* If this new OFFSET is bigger than the MAX_OFFSET, then
3406 there's no point in iterating through the remaining
3407 elements of the array. */
3408 if (max_offset && INT_CST_LT (max_offset, offset))
3409 break;
3413 return 0;
3416 /* Record all of the empty subobjects of TYPE (located at OFFSET) in
3417 OFFSETS. If VBASES_P is nonzero, virtual bases of TYPE are
3418 examined. */
3420 static void
3421 record_subobject_offsets (tree type,
3422 tree offset,
3423 splay_tree offsets,
3424 int vbases_p)
3426 walk_subobject_offsets (type, record_subobject_offset, offset,
3427 offsets, /*max_offset=*/NULL_TREE, vbases_p);
3430 /* Returns nonzero if any of the empty subobjects of TYPE (located at
3431 OFFSET) conflict with entries in OFFSETS. If VBASES_P is nonzero,
3432 virtual bases of TYPE are examined. */
3434 static int
3435 layout_conflict_p (tree type,
3436 tree offset,
3437 splay_tree offsets,
3438 int vbases_p)
3440 splay_tree_node max_node;
3442 /* Get the node in OFFSETS that indicates the maximum offset where
3443 an empty subobject is located. */
3444 max_node = splay_tree_max (offsets);
3445 /* If there aren't any empty subobjects, then there's no point in
3446 performing this check. */
3447 if (!max_node)
3448 return 0;
3450 return walk_subobject_offsets (type, check_subobject_offset, offset,
3451 offsets, (tree) (max_node->key),
3452 vbases_p);
3455 /* DECL is a FIELD_DECL corresponding either to a base subobject of a
3456 non-static data member of the type indicated by RLI. BINFO is the
3457 binfo corresponding to the base subobject, OFFSETS maps offsets to
3458 types already located at those offsets. This function determines
3459 the position of the DECL. */
3461 static void
3462 layout_nonempty_base_or_field (record_layout_info rli,
3463 tree decl,
3464 tree binfo,
3465 splay_tree offsets)
3467 tree offset = NULL_TREE;
3468 bool field_p;
3469 tree type;
3471 if (binfo)
3473 /* For the purposes of determining layout conflicts, we want to
3474 use the class type of BINFO; TREE_TYPE (DECL) will be the
3475 CLASSTYPE_AS_BASE version, which does not contain entries for
3476 zero-sized bases. */
3477 type = TREE_TYPE (binfo);
3478 field_p = false;
3480 else
3482 type = TREE_TYPE (decl);
3483 field_p = true;
3486 /* Try to place the field. It may take more than one try if we have
3487 a hard time placing the field without putting two objects of the
3488 same type at the same address. */
3489 while (1)
3491 struct record_layout_info_s old_rli = *rli;
3493 /* Place this field. */
3494 place_field (rli, decl);
3495 offset = byte_position (decl);
3497 /* We have to check to see whether or not there is already
3498 something of the same type at the offset we're about to use.
3499 For example, consider:
3501 struct S {};
3502 struct T : public S { int i; };
3503 struct U : public S, public T {};
3505 Here, we put S at offset zero in U. Then, we can't put T at
3506 offset zero -- its S component would be at the same address
3507 as the S we already allocated. So, we have to skip ahead.
3508 Since all data members, including those whose type is an
3509 empty class, have nonzero size, any overlap can happen only
3510 with a direct or indirect base-class -- it can't happen with
3511 a data member. */
3512 /* In a union, overlap is permitted; all members are placed at
3513 offset zero. */
3514 if (TREE_CODE (rli->t) == UNION_TYPE)
3515 break;
3516 /* G++ 3.2 did not check for overlaps when placing a non-empty
3517 virtual base. */
3518 if (!abi_version_at_least (2) && binfo && TREE_VIA_VIRTUAL (binfo))
3519 break;
3520 if (layout_conflict_p (field_p ? type : binfo, offset,
3521 offsets, field_p))
3523 /* Strip off the size allocated to this field. That puts us
3524 at the first place we could have put the field with
3525 proper alignment. */
3526 *rli = old_rli;
3528 /* Bump up by the alignment required for the type. */
3529 rli->bitpos
3530 = size_binop (PLUS_EXPR, rli->bitpos,
3531 bitsize_int (binfo
3532 ? CLASSTYPE_ALIGN (type)
3533 : TYPE_ALIGN (type)));
3534 normalize_rli (rli);
3536 else
3537 /* There was no conflict. We're done laying out this field. */
3538 break;
3541 /* Now that we know where it will be placed, update its
3542 BINFO_OFFSET. */
3543 if (binfo && CLASS_TYPE_P (BINFO_TYPE (binfo)))
3544 /* Indirect virtual bases may have a nonzero BINFO_OFFSET at
3545 this point because their BINFO_OFFSET is copied from another
3546 hierarchy. Therefore, we may not need to add the entire
3547 OFFSET. */
3548 propagate_binfo_offsets (binfo,
3549 size_diffop (convert (ssizetype, offset),
3550 convert (ssizetype,
3551 BINFO_OFFSET (binfo))));
3554 /* Returns true if TYPE is empty and OFFSET is nonzero. */
3556 static int
3557 empty_base_at_nonzero_offset_p (tree type,
3558 tree offset,
3559 splay_tree offsets ATTRIBUTE_UNUSED)
3561 return is_empty_class (type) && !integer_zerop (offset);
3564 /* Layout the empty base BINFO. EOC indicates the byte currently just
3565 past the end of the class, and should be correctly aligned for a
3566 class of the type indicated by BINFO; OFFSETS gives the offsets of
3567 the empty bases allocated so far. T is the most derived
3568 type. Return nonzero iff we added it at the end. */
3570 static bool
3571 layout_empty_base (tree binfo, tree eoc, splay_tree offsets)
3573 tree alignment;
3574 tree basetype = BINFO_TYPE (binfo);
3575 bool atend = false;
3577 /* This routine should only be used for empty classes. */
3578 my_friendly_assert (is_empty_class (basetype), 20000321);
3579 alignment = ssize_int (CLASSTYPE_ALIGN_UNIT (basetype));
3581 if (!integer_zerop (BINFO_OFFSET (binfo)))
3583 if (abi_version_at_least (2))
3584 propagate_binfo_offsets
3585 (binfo, size_diffop (size_zero_node, BINFO_OFFSET (binfo)));
3586 else if (warn_abi)
3587 warning ("offset of empty base `%T' may not be ABI-compliant and may"
3588 "change in a future version of GCC",
3589 BINFO_TYPE (binfo));
3592 /* This is an empty base class. We first try to put it at offset
3593 zero. */
3594 if (layout_conflict_p (binfo,
3595 BINFO_OFFSET (binfo),
3596 offsets,
3597 /*vbases_p=*/0))
3599 /* That didn't work. Now, we move forward from the next
3600 available spot in the class. */
3601 atend = true;
3602 propagate_binfo_offsets (binfo, convert (ssizetype, eoc));
3603 while (1)
3605 if (!layout_conflict_p (binfo,
3606 BINFO_OFFSET (binfo),
3607 offsets,
3608 /*vbases_p=*/0))
3609 /* We finally found a spot where there's no overlap. */
3610 break;
3612 /* There's overlap here, too. Bump along to the next spot. */
3613 propagate_binfo_offsets (binfo, alignment);
3616 return atend;
3619 /* Layout the the base given by BINFO in the class indicated by RLI.
3620 *BASE_ALIGN is a running maximum of the alignments of
3621 any base class. OFFSETS gives the location of empty base
3622 subobjects. T is the most derived type. Return nonzero if the new
3623 object cannot be nearly-empty. A new FIELD_DECL is inserted at
3624 *NEXT_FIELD, unless BINFO is for an empty base class.
3626 Returns the location at which the next field should be inserted. */
3628 static tree *
3629 build_base_field (record_layout_info rli, tree binfo,
3630 splay_tree offsets, tree *next_field)
3632 tree t = rli->t;
3633 tree basetype = BINFO_TYPE (binfo);
3635 if (!COMPLETE_TYPE_P (basetype))
3636 /* This error is now reported in xref_tag, thus giving better
3637 location information. */
3638 return next_field;
3640 /* Place the base class. */
3641 if (!is_empty_class (basetype))
3643 tree decl;
3645 /* The containing class is non-empty because it has a non-empty
3646 base class. */
3647 CLASSTYPE_EMPTY_P (t) = 0;
3649 /* Create the FIELD_DECL. */
3650 decl = build_decl (FIELD_DECL, NULL_TREE, CLASSTYPE_AS_BASE (basetype));
3651 DECL_ARTIFICIAL (decl) = 1;
3652 DECL_FIELD_CONTEXT (decl) = t;
3653 DECL_SIZE (decl) = CLASSTYPE_SIZE (basetype);
3654 DECL_SIZE_UNIT (decl) = CLASSTYPE_SIZE_UNIT (basetype);
3655 DECL_ALIGN (decl) = CLASSTYPE_ALIGN (basetype);
3656 DECL_USER_ALIGN (decl) = CLASSTYPE_USER_ALIGN (basetype);
3657 DECL_IGNORED_P (decl) = 1;
3659 /* Try to place the field. It may take more than one try if we
3660 have a hard time placing the field without putting two
3661 objects of the same type at the same address. */
3662 layout_nonempty_base_or_field (rli, decl, binfo, offsets);
3663 /* Add the new FIELD_DECL to the list of fields for T. */
3664 TREE_CHAIN (decl) = *next_field;
3665 *next_field = decl;
3666 next_field = &TREE_CHAIN (decl);
3668 else
3670 tree eoc;
3671 bool atend;
3673 /* On some platforms (ARM), even empty classes will not be
3674 byte-aligned. */
3675 eoc = round_up (rli_size_unit_so_far (rli),
3676 CLASSTYPE_ALIGN_UNIT (basetype));
3677 atend = layout_empty_base (binfo, eoc, offsets);
3678 /* A nearly-empty class "has no proper base class that is empty,
3679 not morally virtual, and at an offset other than zero." */
3680 if (!TREE_VIA_VIRTUAL (binfo) && CLASSTYPE_NEARLY_EMPTY_P (t))
3682 if (atend)
3683 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
3684 /* The check above (used in G++ 3.2) is insufficient because
3685 an empty class placed at offset zero might itself have an
3686 empty base at a nonzero offset. */
3687 else if (walk_subobject_offsets (basetype,
3688 empty_base_at_nonzero_offset_p,
3689 size_zero_node,
3690 /*offsets=*/NULL,
3691 /*max_offset=*/NULL_TREE,
3692 /*vbases_p=*/true))
3694 if (abi_version_at_least (2))
3695 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
3696 else if (warn_abi)
3697 warning ("class `%T' will be considered nearly empty in a "
3698 "future version of GCC", t);
3702 /* We do not create a FIELD_DECL for empty base classes because
3703 it might overlap some other field. We want to be able to
3704 create CONSTRUCTORs for the class by iterating over the
3705 FIELD_DECLs, and the back end does not handle overlapping
3706 FIELD_DECLs. */
3708 /* An empty virtual base causes a class to be non-empty
3709 -- but in that case we do not need to clear CLASSTYPE_EMPTY_P
3710 here because that was already done when the virtual table
3711 pointer was created. */
3714 /* Record the offsets of BINFO and its base subobjects. */
3715 record_subobject_offsets (binfo,
3716 BINFO_OFFSET (binfo),
3717 offsets,
3718 /*vbases_p=*/0);
3720 return next_field;
3723 /* Layout all of the non-virtual base classes. Record empty
3724 subobjects in OFFSETS. T is the most derived type. Return nonzero
3725 if the type cannot be nearly empty. The fields created
3726 corresponding to the base classes will be inserted at
3727 *NEXT_FIELD. */
3729 static void
3730 build_base_fields (record_layout_info rli,
3731 splay_tree offsets, tree *next_field)
3733 /* Chain to hold all the new FIELD_DECLs which stand in for base class
3734 subobjects. */
3735 tree t = rli->t;
3736 int n_baseclasses = CLASSTYPE_N_BASECLASSES (t);
3737 int i;
3739 /* The primary base class is always allocated first. */
3740 if (CLASSTYPE_HAS_PRIMARY_BASE_P (t))
3741 next_field = build_base_field (rli, CLASSTYPE_PRIMARY_BINFO (t),
3742 offsets, next_field);
3744 /* Now allocate the rest of the bases. */
3745 for (i = 0; i < n_baseclasses; ++i)
3747 tree base_binfo;
3749 base_binfo = BINFO_BASETYPE (TYPE_BINFO (t), i);
3751 /* The primary base was already allocated above, so we don't
3752 need to allocate it again here. */
3753 if (base_binfo == CLASSTYPE_PRIMARY_BINFO (t))
3754 continue;
3756 /* Virtual bases are added at the end (a primary virtual base
3757 will have already been added). */
3758 if (TREE_VIA_VIRTUAL (base_binfo))
3759 continue;
3761 next_field = build_base_field (rli, base_binfo,
3762 offsets, next_field);
3766 /* Go through the TYPE_METHODS of T issuing any appropriate
3767 diagnostics, figuring out which methods override which other
3768 methods, and so forth. */
3770 static void
3771 check_methods (tree t)
3773 tree x;
3775 for (x = TYPE_METHODS (t); x; x = TREE_CHAIN (x))
3777 /* If this was an evil function, don't keep it in class. */
3778 if (DECL_ASSEMBLER_NAME_SET_P (x)
3779 && IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (x)))
3780 continue;
3782 check_for_override (x, t);
3783 if (DECL_PURE_VIRTUAL_P (x) && ! DECL_VINDEX (x))
3784 cp_error_at ("initializer specified for non-virtual method `%D'", x);
3786 /* The name of the field is the original field name
3787 Save this in auxiliary field for later overloading. */
3788 if (DECL_VINDEX (x))
3790 TYPE_POLYMORPHIC_P (t) = 1;
3791 if (DECL_PURE_VIRTUAL_P (x))
3792 CLASSTYPE_PURE_VIRTUALS (t)
3793 = tree_cons (NULL_TREE, x, CLASSTYPE_PURE_VIRTUALS (t));
3798 /* FN is a constructor or destructor. Clone the declaration to create
3799 a specialized in-charge or not-in-charge version, as indicated by
3800 NAME. */
3802 static tree
3803 build_clone (tree fn, tree name)
3805 tree parms;
3806 tree clone;
3808 /* Copy the function. */
3809 clone = copy_decl (fn);
3810 /* Remember where this function came from. */
3811 DECL_CLONED_FUNCTION (clone) = fn;
3812 DECL_ABSTRACT_ORIGIN (clone) = fn;
3813 /* Reset the function name. */
3814 DECL_NAME (clone) = name;
3815 SET_DECL_ASSEMBLER_NAME (clone, NULL_TREE);
3816 /* There's no pending inline data for this function. */
3817 DECL_PENDING_INLINE_INFO (clone) = NULL;
3818 DECL_PENDING_INLINE_P (clone) = 0;
3819 /* And it hasn't yet been deferred. */
3820 DECL_DEFERRED_FN (clone) = 0;
3822 /* The base-class destructor is not virtual. */
3823 if (name == base_dtor_identifier)
3825 DECL_VIRTUAL_P (clone) = 0;
3826 if (TREE_CODE (clone) != TEMPLATE_DECL)
3827 DECL_VINDEX (clone) = NULL_TREE;
3830 /* If there was an in-charge parameter, drop it from the function
3831 type. */
3832 if (DECL_HAS_IN_CHARGE_PARM_P (clone))
3834 tree basetype;
3835 tree parmtypes;
3836 tree exceptions;
3838 exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (clone));
3839 basetype = TYPE_METHOD_BASETYPE (TREE_TYPE (clone));
3840 parmtypes = TYPE_ARG_TYPES (TREE_TYPE (clone));
3841 /* Skip the `this' parameter. */
3842 parmtypes = TREE_CHAIN (parmtypes);
3843 /* Skip the in-charge parameter. */
3844 parmtypes = TREE_CHAIN (parmtypes);
3845 /* And the VTT parm, in a complete [cd]tor. */
3846 if (DECL_HAS_VTT_PARM_P (fn)
3847 && ! DECL_NEEDS_VTT_PARM_P (clone))
3848 parmtypes = TREE_CHAIN (parmtypes);
3849 /* If this is subobject constructor or destructor, add the vtt
3850 parameter. */
3851 TREE_TYPE (clone)
3852 = build_method_type_directly (basetype,
3853 TREE_TYPE (TREE_TYPE (clone)),
3854 parmtypes);
3855 if (exceptions)
3856 TREE_TYPE (clone) = build_exception_variant (TREE_TYPE (clone),
3857 exceptions);
3858 TREE_TYPE (clone)
3859 = cp_build_type_attribute_variant (TREE_TYPE (clone),
3860 TYPE_ATTRIBUTES (TREE_TYPE (fn)));
3863 /* Copy the function parameters. But, DECL_ARGUMENTS on a TEMPLATE_DECL
3864 aren't function parameters; those are the template parameters. */
3865 if (TREE_CODE (clone) != TEMPLATE_DECL)
3867 DECL_ARGUMENTS (clone) = copy_list (DECL_ARGUMENTS (clone));
3868 /* Remove the in-charge parameter. */
3869 if (DECL_HAS_IN_CHARGE_PARM_P (clone))
3871 TREE_CHAIN (DECL_ARGUMENTS (clone))
3872 = TREE_CHAIN (TREE_CHAIN (DECL_ARGUMENTS (clone)));
3873 DECL_HAS_IN_CHARGE_PARM_P (clone) = 0;
3875 /* And the VTT parm, in a complete [cd]tor. */
3876 if (DECL_HAS_VTT_PARM_P (fn))
3878 if (DECL_NEEDS_VTT_PARM_P (clone))
3879 DECL_HAS_VTT_PARM_P (clone) = 1;
3880 else
3882 TREE_CHAIN (DECL_ARGUMENTS (clone))
3883 = TREE_CHAIN (TREE_CHAIN (DECL_ARGUMENTS (clone)));
3884 DECL_HAS_VTT_PARM_P (clone) = 0;
3888 for (parms = DECL_ARGUMENTS (clone); parms; parms = TREE_CHAIN (parms))
3890 DECL_CONTEXT (parms) = clone;
3891 cxx_dup_lang_specific_decl (parms);
3895 /* Create the RTL for this function. */
3896 SET_DECL_RTL (clone, NULL_RTX);
3897 rest_of_decl_compilation (clone, NULL, /*top_level=*/1, at_eof);
3899 /* Make it easy to find the CLONE given the FN. */
3900 TREE_CHAIN (clone) = TREE_CHAIN (fn);
3901 TREE_CHAIN (fn) = clone;
3903 /* If this is a template, handle the DECL_TEMPLATE_RESULT as well. */
3904 if (TREE_CODE (clone) == TEMPLATE_DECL)
3906 tree result;
3908 DECL_TEMPLATE_RESULT (clone)
3909 = build_clone (DECL_TEMPLATE_RESULT (clone), name);
3910 result = DECL_TEMPLATE_RESULT (clone);
3911 DECL_TEMPLATE_INFO (result) = copy_node (DECL_TEMPLATE_INFO (result));
3912 DECL_TI_TEMPLATE (result) = clone;
3914 else if (DECL_DEFERRED_FN (fn))
3915 defer_fn (clone);
3917 return clone;
3920 /* Produce declarations for all appropriate clones of FN. If
3921 UPDATE_METHOD_VEC_P is nonzero, the clones are added to the
3922 CLASTYPE_METHOD_VEC as well. */
3924 void
3925 clone_function_decl (tree fn, int update_method_vec_p)
3927 tree clone;
3929 /* Avoid inappropriate cloning. */
3930 if (TREE_CHAIN (fn)
3931 && DECL_CLONED_FUNCTION (TREE_CHAIN (fn)))
3932 return;
3934 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (fn))
3936 /* For each constructor, we need two variants: an in-charge version
3937 and a not-in-charge version. */
3938 clone = build_clone (fn, complete_ctor_identifier);
3939 if (update_method_vec_p)
3940 add_method (DECL_CONTEXT (clone), clone, /*error_p=*/0);
3941 clone = build_clone (fn, base_ctor_identifier);
3942 if (update_method_vec_p)
3943 add_method (DECL_CONTEXT (clone), clone, /*error_p=*/0);
3945 else
3947 my_friendly_assert (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (fn), 20000411);
3949 /* For each destructor, we need three variants: an in-charge
3950 version, a not-in-charge version, and an in-charge deleting
3951 version. We clone the deleting version first because that
3952 means it will go second on the TYPE_METHODS list -- and that
3953 corresponds to the correct layout order in the virtual
3954 function table.
3956 For a non-virtual destructor, we do not build a deleting
3957 destructor. */
3958 if (DECL_VIRTUAL_P (fn))
3960 clone = build_clone (fn, deleting_dtor_identifier);
3961 if (update_method_vec_p)
3962 add_method (DECL_CONTEXT (clone), clone, /*error_p=*/0);
3964 clone = build_clone (fn, complete_dtor_identifier);
3965 if (update_method_vec_p)
3966 add_method (DECL_CONTEXT (clone), clone, /*error_p=*/0);
3967 clone = build_clone (fn, base_dtor_identifier);
3968 if (update_method_vec_p)
3969 add_method (DECL_CONTEXT (clone), clone, /*error_p=*/0);
3972 /* Note that this is an abstract function that is never emitted. */
3973 DECL_ABSTRACT (fn) = 1;
3976 /* DECL is an in charge constructor, which is being defined. This will
3977 have had an in class declaration, from whence clones were
3978 declared. An out-of-class definition can specify additional default
3979 arguments. As it is the clones that are involved in overload
3980 resolution, we must propagate the information from the DECL to its
3981 clones. */
3983 void
3984 adjust_clone_args (tree decl)
3986 tree clone;
3988 for (clone = TREE_CHAIN (decl); clone && DECL_CLONED_FUNCTION (clone);
3989 clone = TREE_CHAIN (clone))
3991 tree orig_clone_parms = TYPE_ARG_TYPES (TREE_TYPE (clone));
3992 tree orig_decl_parms = TYPE_ARG_TYPES (TREE_TYPE (decl));
3993 tree decl_parms, clone_parms;
3995 clone_parms = orig_clone_parms;
3997 /* Skip the 'this' parameter. */
3998 orig_clone_parms = TREE_CHAIN (orig_clone_parms);
3999 orig_decl_parms = TREE_CHAIN (orig_decl_parms);
4001 if (DECL_HAS_IN_CHARGE_PARM_P (decl))
4002 orig_decl_parms = TREE_CHAIN (orig_decl_parms);
4003 if (DECL_HAS_VTT_PARM_P (decl))
4004 orig_decl_parms = TREE_CHAIN (orig_decl_parms);
4006 clone_parms = orig_clone_parms;
4007 if (DECL_HAS_VTT_PARM_P (clone))
4008 clone_parms = TREE_CHAIN (clone_parms);
4010 for (decl_parms = orig_decl_parms; decl_parms;
4011 decl_parms = TREE_CHAIN (decl_parms),
4012 clone_parms = TREE_CHAIN (clone_parms))
4014 my_friendly_assert (same_type_p (TREE_TYPE (decl_parms),
4015 TREE_TYPE (clone_parms)), 20010424);
4017 if (TREE_PURPOSE (decl_parms) && !TREE_PURPOSE (clone_parms))
4019 /* A default parameter has been added. Adjust the
4020 clone's parameters. */
4021 tree exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (clone));
4022 tree basetype = TYPE_METHOD_BASETYPE (TREE_TYPE (clone));
4023 tree type;
4025 clone_parms = orig_decl_parms;
4027 if (DECL_HAS_VTT_PARM_P (clone))
4029 clone_parms = tree_cons (TREE_PURPOSE (orig_clone_parms),
4030 TREE_VALUE (orig_clone_parms),
4031 clone_parms);
4032 TREE_TYPE (clone_parms) = TREE_TYPE (orig_clone_parms);
4034 type = build_method_type_directly (basetype,
4035 TREE_TYPE (TREE_TYPE (clone)),
4036 clone_parms);
4037 if (exceptions)
4038 type = build_exception_variant (type, exceptions);
4039 TREE_TYPE (clone) = type;
4041 clone_parms = NULL_TREE;
4042 break;
4045 my_friendly_assert (!clone_parms, 20010424);
4049 /* For each of the constructors and destructors in T, create an
4050 in-charge and not-in-charge variant. */
4052 static void
4053 clone_constructors_and_destructors (tree t)
4055 tree fns;
4057 /* If for some reason we don't have a CLASSTYPE_METHOD_VEC, we bail
4058 out now. */
4059 if (!CLASSTYPE_METHOD_VEC (t))
4060 return;
4062 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
4063 clone_function_decl (OVL_CURRENT (fns), /*update_method_vec_p=*/1);
4064 for (fns = CLASSTYPE_DESTRUCTORS (t); fns; fns = OVL_NEXT (fns))
4065 clone_function_decl (OVL_CURRENT (fns), /*update_method_vec_p=*/1);
4068 /* Remove all zero-width bit-fields from T. */
4070 static void
4071 remove_zero_width_bit_fields (tree t)
4073 tree *fieldsp;
4075 fieldsp = &TYPE_FIELDS (t);
4076 while (*fieldsp)
4078 if (TREE_CODE (*fieldsp) == FIELD_DECL
4079 && DECL_C_BIT_FIELD (*fieldsp)
4080 && DECL_INITIAL (*fieldsp))
4081 *fieldsp = TREE_CHAIN (*fieldsp);
4082 else
4083 fieldsp = &TREE_CHAIN (*fieldsp);
4087 /* Returns TRUE iff we need a cookie when dynamically allocating an
4088 array whose elements have the indicated class TYPE. */
4090 static bool
4091 type_requires_array_cookie (tree type)
4093 tree fns;
4094 bool has_two_argument_delete_p = false;
4096 my_friendly_assert (CLASS_TYPE_P (type), 20010712);
4098 /* If there's a non-trivial destructor, we need a cookie. In order
4099 to iterate through the array calling the destructor for each
4100 element, we'll have to know how many elements there are. */
4101 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
4102 return true;
4104 /* If the usual deallocation function is a two-argument whose second
4105 argument is of type `size_t', then we have to pass the size of
4106 the array to the deallocation function, so we will need to store
4107 a cookie. */
4108 fns = lookup_fnfields (TYPE_BINFO (type),
4109 ansi_opname (VEC_DELETE_EXPR),
4110 /*protect=*/0);
4111 /* If there are no `operator []' members, or the lookup is
4112 ambiguous, then we don't need a cookie. */
4113 if (!fns || fns == error_mark_node)
4114 return false;
4115 /* Loop through all of the functions. */
4116 for (fns = BASELINK_FUNCTIONS (fns); fns; fns = OVL_NEXT (fns))
4118 tree fn;
4119 tree second_parm;
4121 /* Select the current function. */
4122 fn = OVL_CURRENT (fns);
4123 /* See if this function is a one-argument delete function. If
4124 it is, then it will be the usual deallocation function. */
4125 second_parm = TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (fn)));
4126 if (second_parm == void_list_node)
4127 return false;
4128 /* Otherwise, if we have a two-argument function and the second
4129 argument is `size_t', it will be the usual deallocation
4130 function -- unless there is one-argument function, too. */
4131 if (TREE_CHAIN (second_parm) == void_list_node
4132 && same_type_p (TREE_VALUE (second_parm), sizetype))
4133 has_two_argument_delete_p = true;
4136 return has_two_argument_delete_p;
4139 /* Check the validity of the bases and members declared in T. Add any
4140 implicitly-generated functions (like copy-constructors and
4141 assignment operators). Compute various flag bits (like
4142 CLASSTYPE_NON_POD_T) for T. This routine works purely at the C++
4143 level: i.e., independently of the ABI in use. */
4145 static void
4146 check_bases_and_members (tree t)
4148 /* Nonzero if we are not allowed to generate a default constructor
4149 for this case. */
4150 int cant_have_default_ctor;
4151 /* Nonzero if the implicitly generated copy constructor should take
4152 a non-const reference argument. */
4153 int cant_have_const_ctor;
4154 /* Nonzero if the the implicitly generated assignment operator
4155 should take a non-const reference argument. */
4156 int no_const_asn_ref;
4157 tree access_decls;
4159 /* By default, we use const reference arguments and generate default
4160 constructors. */
4161 cant_have_default_ctor = 0;
4162 cant_have_const_ctor = 0;
4163 no_const_asn_ref = 0;
4165 /* Check all the base-classes. */
4166 check_bases (t, &cant_have_default_ctor, &cant_have_const_ctor,
4167 &no_const_asn_ref);
4169 /* Check all the data member declarations. */
4170 check_field_decls (t, &access_decls,
4171 &cant_have_default_ctor,
4172 &cant_have_const_ctor,
4173 &no_const_asn_ref);
4175 /* Check all the method declarations. */
4176 check_methods (t);
4178 /* A nearly-empty class has to be vptr-containing; a nearly empty
4179 class contains just a vptr. */
4180 if (!TYPE_CONTAINS_VPTR_P (t))
4181 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
4183 /* Do some bookkeeping that will guide the generation of implicitly
4184 declared member functions. */
4185 TYPE_HAS_COMPLEX_INIT_REF (t)
4186 |= (TYPE_HAS_INIT_REF (t)
4187 || TYPE_USES_VIRTUAL_BASECLASSES (t)
4188 || TYPE_POLYMORPHIC_P (t));
4189 TYPE_NEEDS_CONSTRUCTING (t)
4190 |= (TYPE_HAS_CONSTRUCTOR (t)
4191 || TYPE_USES_VIRTUAL_BASECLASSES (t)
4192 || TYPE_POLYMORPHIC_P (t));
4193 CLASSTYPE_NON_AGGREGATE (t) |= (TYPE_HAS_CONSTRUCTOR (t)
4194 || TYPE_POLYMORPHIC_P (t));
4195 CLASSTYPE_NON_POD_P (t)
4196 |= (CLASSTYPE_NON_AGGREGATE (t) || TYPE_HAS_DESTRUCTOR (t)
4197 || TYPE_HAS_ASSIGN_REF (t));
4198 TYPE_HAS_REAL_ASSIGN_REF (t) |= TYPE_HAS_ASSIGN_REF (t);
4199 TYPE_HAS_COMPLEX_ASSIGN_REF (t)
4200 |= TYPE_HAS_ASSIGN_REF (t) || TYPE_CONTAINS_VPTR_P (t);
4202 /* Synthesize any needed methods. Note that methods will be synthesized
4203 for anonymous unions; grok_x_components undoes that. */
4204 add_implicitly_declared_members (t, cant_have_default_ctor,
4205 cant_have_const_ctor,
4206 no_const_asn_ref);
4208 /* Create the in-charge and not-in-charge variants of constructors
4209 and destructors. */
4210 clone_constructors_and_destructors (t);
4212 /* Process the using-declarations. */
4213 for (; access_decls; access_decls = TREE_CHAIN (access_decls))
4214 handle_using_decl (TREE_VALUE (access_decls), t);
4216 /* Build and sort the CLASSTYPE_METHOD_VEC. */
4217 finish_struct_methods (t);
4219 /* Figure out whether or not we will need a cookie when dynamically
4220 allocating an array of this type. */
4221 TYPE_LANG_SPECIFIC (t)->u.c.vec_new_uses_cookie
4222 = type_requires_array_cookie (t);
4225 /* If T needs a pointer to its virtual function table, set TYPE_VFIELD
4226 accordingly. If a new vfield was created (because T doesn't have a
4227 primary base class), then the newly created field is returned. It
4228 is not added to the TYPE_FIELDS list; it is the caller's
4229 responsibility to do that. Accumulate declared virtual functions
4230 on VIRTUALS_P. */
4232 static tree
4233 create_vtable_ptr (tree t, tree* virtuals_p)
4235 tree fn;
4237 /* Collect the virtual functions declared in T. */
4238 for (fn = TYPE_METHODS (t); fn; fn = TREE_CHAIN (fn))
4239 if (DECL_VINDEX (fn) && !DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (fn)
4240 && TREE_CODE (DECL_VINDEX (fn)) != INTEGER_CST)
4242 tree new_virtual = make_node (TREE_LIST);
4244 BV_FN (new_virtual) = fn;
4245 BV_DELTA (new_virtual) = integer_zero_node;
4247 TREE_CHAIN (new_virtual) = *virtuals_p;
4248 *virtuals_p = new_virtual;
4251 /* If we couldn't find an appropriate base class, create a new field
4252 here. Even if there weren't any new virtual functions, we might need a
4253 new virtual function table if we're supposed to include vptrs in
4254 all classes that need them. */
4255 if (!TYPE_VFIELD (t) && (*virtuals_p || TYPE_CONTAINS_VPTR_P (t)))
4257 /* We build this decl with vtbl_ptr_type_node, which is a
4258 `vtable_entry_type*'. It might seem more precise to use
4259 `vtable_entry_type (*)[N]' where N is the number of firtual
4260 functions. However, that would require the vtable pointer in
4261 base classes to have a different type than the vtable pointer
4262 in derived classes. We could make that happen, but that
4263 still wouldn't solve all the problems. In particular, the
4264 type-based alias analysis code would decide that assignments
4265 to the base class vtable pointer can't alias assignments to
4266 the derived class vtable pointer, since they have different
4267 types. Thus, in a derived class destructor, where the base
4268 class constructor was inlined, we could generate bad code for
4269 setting up the vtable pointer.
4271 Therefore, we use one type for all vtable pointers. We still
4272 use a type-correct type; it's just doesn't indicate the array
4273 bounds. That's better than using `void*' or some such; it's
4274 cleaner, and it let's the alias analysis code know that these
4275 stores cannot alias stores to void*! */
4276 tree field;
4278 field = build_decl (FIELD_DECL, get_vfield_name (t), vtbl_ptr_type_node);
4279 SET_DECL_ASSEMBLER_NAME (field, get_identifier (VFIELD_BASE));
4280 DECL_VIRTUAL_P (field) = 1;
4281 DECL_ARTIFICIAL (field) = 1;
4282 DECL_FIELD_CONTEXT (field) = t;
4283 DECL_FCONTEXT (field) = t;
4285 TYPE_VFIELD (t) = field;
4287 /* This class is non-empty. */
4288 CLASSTYPE_EMPTY_P (t) = 0;
4290 if (CLASSTYPE_N_BASECLASSES (t))
4291 /* If there were any baseclasses, they can't possibly be at
4292 offset zero any more, because that's where the vtable
4293 pointer is. So, converting to a base class is going to
4294 take work. */
4295 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (t) = 1;
4297 return field;
4300 return NULL_TREE;
4303 /* Fixup the inline function given by INFO now that the class is
4304 complete. */
4306 static void
4307 fixup_pending_inline (tree fn)
4309 if (DECL_PENDING_INLINE_INFO (fn))
4311 tree args = DECL_ARGUMENTS (fn);
4312 while (args)
4314 DECL_CONTEXT (args) = fn;
4315 args = TREE_CHAIN (args);
4320 /* Fixup the inline methods and friends in TYPE now that TYPE is
4321 complete. */
4323 static void
4324 fixup_inline_methods (tree type)
4326 tree method = TYPE_METHODS (type);
4328 if (method && TREE_CODE (method) == TREE_VEC)
4330 if (TREE_VEC_ELT (method, 1))
4331 method = TREE_VEC_ELT (method, 1);
4332 else if (TREE_VEC_ELT (method, 0))
4333 method = TREE_VEC_ELT (method, 0);
4334 else
4335 method = TREE_VEC_ELT (method, 2);
4338 /* Do inline member functions. */
4339 for (; method; method = TREE_CHAIN (method))
4340 fixup_pending_inline (method);
4342 /* Do friends. */
4343 for (method = CLASSTYPE_INLINE_FRIENDS (type);
4344 method;
4345 method = TREE_CHAIN (method))
4346 fixup_pending_inline (TREE_VALUE (method));
4347 CLASSTYPE_INLINE_FRIENDS (type) = NULL_TREE;
4350 /* Add OFFSET to all base types of BINFO which is a base in the
4351 hierarchy dominated by T.
4353 OFFSET, which is a type offset, is number of bytes. */
4355 static void
4356 propagate_binfo_offsets (tree binfo, tree offset)
4358 int i;
4359 tree primary_binfo;
4361 /* Update BINFO's offset. */
4362 BINFO_OFFSET (binfo)
4363 = convert (sizetype,
4364 size_binop (PLUS_EXPR,
4365 convert (ssizetype, BINFO_OFFSET (binfo)),
4366 offset));
4368 /* Find the primary base class. */
4369 primary_binfo = get_primary_binfo (binfo);
4371 /* Scan all of the bases, pushing the BINFO_OFFSET adjust
4372 downwards. */
4373 for (i = -1; i < BINFO_N_BASETYPES (binfo); ++i)
4375 tree base_binfo;
4377 /* On the first time through the loop, do the primary base.
4378 Because the primary base need not be an immediate base, we
4379 must handle the primary base specially. */
4380 if (i == -1)
4382 if (!primary_binfo)
4383 continue;
4385 base_binfo = primary_binfo;
4387 else
4389 base_binfo = BINFO_BASETYPE (binfo, i);
4390 /* Don't do the primary base twice. */
4391 if (base_binfo == primary_binfo)
4392 continue;
4395 /* Skip virtual bases that aren't our canonical primary base. */
4396 if (TREE_VIA_VIRTUAL (base_binfo)
4397 && BINFO_PRIMARY_BASE_OF (base_binfo) != binfo)
4398 continue;
4400 propagate_binfo_offsets (base_binfo, offset);
4404 /* Set BINFO_OFFSET for all of the virtual bases for RLI->T. Update
4405 TYPE_ALIGN and TYPE_SIZE for T. OFFSETS gives the location of
4406 empty subobjects of T. */
4408 static void
4409 layout_virtual_bases (record_layout_info rli, splay_tree offsets)
4411 tree vbase;
4412 tree t = rli->t;
4413 bool first_vbase = true;
4414 tree *next_field;
4416 if (CLASSTYPE_N_BASECLASSES (t) == 0)
4417 return;
4419 if (!abi_version_at_least(2))
4421 /* In G++ 3.2, we incorrectly rounded the size before laying out
4422 the virtual bases. */
4423 finish_record_layout (rli, /*free_p=*/false);
4424 #ifdef STRUCTURE_SIZE_BOUNDARY
4425 /* Packed structures don't need to have minimum size. */
4426 if (! TYPE_PACKED (t))
4427 TYPE_ALIGN (t) = MAX (TYPE_ALIGN (t), (unsigned) STRUCTURE_SIZE_BOUNDARY);
4428 #endif
4429 rli->offset = TYPE_SIZE_UNIT (t);
4430 rli->bitpos = bitsize_zero_node;
4431 rli->record_align = TYPE_ALIGN (t);
4434 /* Find the last field. The artificial fields created for virtual
4435 bases will go after the last extant field to date. */
4436 next_field = &TYPE_FIELDS (t);
4437 while (*next_field)
4438 next_field = &TREE_CHAIN (*next_field);
4440 /* Go through the virtual bases, allocating space for each virtual
4441 base that is not already a primary base class. These are
4442 allocated in inheritance graph order. */
4443 for (vbase = TYPE_BINFO (t); vbase; vbase = TREE_CHAIN (vbase))
4445 if (!TREE_VIA_VIRTUAL (vbase))
4446 continue;
4448 if (!BINFO_PRIMARY_P (vbase))
4450 tree basetype = TREE_TYPE (vbase);
4452 /* This virtual base is not a primary base of any class in the
4453 hierarchy, so we have to add space for it. */
4454 next_field = build_base_field (rli, vbase,
4455 offsets, next_field);
4457 /* If the first virtual base might have been placed at a
4458 lower address, had we started from CLASSTYPE_SIZE, rather
4459 than TYPE_SIZE, issue a warning. There can be both false
4460 positives and false negatives from this warning in rare
4461 cases; to deal with all the possibilities would probably
4462 require performing both layout algorithms and comparing
4463 the results which is not particularly tractable. */
4464 if (warn_abi
4465 && first_vbase
4466 && (tree_int_cst_lt
4467 (size_binop (CEIL_DIV_EXPR,
4468 round_up (CLASSTYPE_SIZE (t),
4469 CLASSTYPE_ALIGN (basetype)),
4470 bitsize_unit_node),
4471 BINFO_OFFSET (vbase))))
4472 warning ("offset of virtual base `%T' is not ABI-compliant and may change in a future version of GCC",
4473 basetype);
4475 first_vbase = false;
4480 /* Returns the offset of the byte just past the end of the base class
4481 BINFO. */
4483 static tree
4484 end_of_base (tree binfo)
4486 tree size;
4488 if (is_empty_class (BINFO_TYPE (binfo)))
4489 /* An empty class has zero CLASSTYPE_SIZE_UNIT, but we need to
4490 allocate some space for it. It cannot have virtual bases, so
4491 TYPE_SIZE_UNIT is fine. */
4492 size = TYPE_SIZE_UNIT (BINFO_TYPE (binfo));
4493 else
4494 size = CLASSTYPE_SIZE_UNIT (BINFO_TYPE (binfo));
4496 return size_binop (PLUS_EXPR, BINFO_OFFSET (binfo), size);
4499 /* Returns the offset of the byte just past the end of the base class
4500 with the highest offset in T. If INCLUDE_VIRTUALS_P is zero, then
4501 only non-virtual bases are included. */
4503 static tree
4504 end_of_class (tree t, int include_virtuals_p)
4506 tree result = size_zero_node;
4507 tree binfo;
4508 tree offset;
4509 int i;
4511 for (i = 0; i < CLASSTYPE_N_BASECLASSES (t); ++i)
4513 binfo = BINFO_BASETYPE (TYPE_BINFO (t), i);
4515 if (!include_virtuals_p
4516 && TREE_VIA_VIRTUAL (binfo)
4517 && BINFO_PRIMARY_BASE_OF (binfo) != TYPE_BINFO (t))
4518 continue;
4520 offset = end_of_base (binfo);
4521 if (INT_CST_LT_UNSIGNED (result, offset))
4522 result = offset;
4525 /* G++ 3.2 did not check indirect virtual bases. */
4526 if (abi_version_at_least (2) && include_virtuals_p)
4527 for (binfo = CLASSTYPE_VBASECLASSES (t);
4528 binfo;
4529 binfo = TREE_CHAIN (binfo))
4531 offset = end_of_base (TREE_VALUE (binfo));
4532 if (INT_CST_LT_UNSIGNED (result, offset))
4533 result = offset;
4536 return result;
4539 /* Warn about bases of T that are inaccessible because they are
4540 ambiguous. For example:
4542 struct S {};
4543 struct T : public S {};
4544 struct U : public S, public T {};
4546 Here, `(S*) new U' is not allowed because there are two `S'
4547 subobjects of U. */
4549 static void
4550 warn_about_ambiguous_bases (tree t)
4552 int i;
4553 tree vbases;
4554 tree basetype;
4556 /* Check direct bases. */
4557 for (i = 0; i < CLASSTYPE_N_BASECLASSES (t); ++i)
4559 basetype = TYPE_BINFO_BASETYPE (t, i);
4561 if (!lookup_base (t, basetype, ba_ignore | ba_quiet, NULL))
4562 warning ("direct base `%T' inaccessible in `%T' due to ambiguity",
4563 basetype, t);
4566 /* Check for ambiguous virtual bases. */
4567 if (extra_warnings)
4568 for (vbases = CLASSTYPE_VBASECLASSES (t);
4569 vbases;
4570 vbases = TREE_CHAIN (vbases))
4572 basetype = BINFO_TYPE (TREE_VALUE (vbases));
4574 if (!lookup_base (t, basetype, ba_ignore | ba_quiet, NULL))
4575 warning ("virtual base `%T' inaccessible in `%T' due to ambiguity",
4576 basetype, t);
4580 /* Compare two INTEGER_CSTs K1 and K2. */
4582 static int
4583 splay_tree_compare_integer_csts (splay_tree_key k1, splay_tree_key k2)
4585 return tree_int_cst_compare ((tree) k1, (tree) k2);
4588 /* Increase the size indicated in RLI to account for empty classes
4589 that are "off the end" of the class. */
4591 static void
4592 include_empty_classes (record_layout_info rli)
4594 tree eoc;
4595 tree rli_size;
4597 /* It might be the case that we grew the class to allocate a
4598 zero-sized base class. That won't be reflected in RLI, yet,
4599 because we are willing to overlay multiple bases at the same
4600 offset. However, now we need to make sure that RLI is big enough
4601 to reflect the entire class. */
4602 eoc = end_of_class (rli->t,
4603 CLASSTYPE_AS_BASE (rli->t) != NULL_TREE);
4604 rli_size = rli_size_unit_so_far (rli);
4605 if (TREE_CODE (rli_size) == INTEGER_CST
4606 && INT_CST_LT_UNSIGNED (rli_size, eoc))
4608 if (!abi_version_at_least (2))
4609 /* In version 1 of the ABI, the size of a class that ends with
4610 a bitfield was not rounded up to a whole multiple of a
4611 byte. Because rli_size_unit_so_far returns only the number
4612 of fully allocated bytes, any extra bits were not included
4613 in the size. */
4614 rli->bitpos = round_down (rli->bitpos, BITS_PER_UNIT);
4615 else
4616 /* The size should have been rounded to a whole byte. */
4617 my_friendly_assert (tree_int_cst_equal (rli->bitpos,
4618 round_down (rli->bitpos,
4619 BITS_PER_UNIT)),
4620 20030903);
4621 rli->bitpos
4622 = size_binop (PLUS_EXPR,
4623 rli->bitpos,
4624 size_binop (MULT_EXPR,
4625 convert (bitsizetype,
4626 size_binop (MINUS_EXPR,
4627 eoc, rli_size)),
4628 bitsize_int (BITS_PER_UNIT)));
4629 normalize_rli (rli);
4633 /* Calculate the TYPE_SIZE, TYPE_ALIGN, etc for T. Calculate
4634 BINFO_OFFSETs for all of the base-classes. Position the vtable
4635 pointer. Accumulate declared virtual functions on VIRTUALS_P. */
4637 static void
4638 layout_class_type (tree t, tree *virtuals_p)
4640 tree non_static_data_members;
4641 tree field;
4642 tree vptr;
4643 record_layout_info rli;
4644 /* Maps offsets (represented as INTEGER_CSTs) to a TREE_LIST of
4645 types that appear at that offset. */
4646 splay_tree empty_base_offsets;
4647 /* True if the last field layed out was a bit-field. */
4648 bool last_field_was_bitfield = false;
4649 /* The location at which the next field should be inserted. */
4650 tree *next_field;
4651 /* T, as a base class. */
4652 tree base_t;
4654 /* Keep track of the first non-static data member. */
4655 non_static_data_members = TYPE_FIELDS (t);
4657 /* Start laying out the record. */
4658 rli = start_record_layout (t);
4660 /* If possible, we reuse the virtual function table pointer from one
4661 of our base classes. */
4662 determine_primary_base (t);
4664 /* Create a pointer to our virtual function table. */
4665 vptr = create_vtable_ptr (t, virtuals_p);
4667 /* The vptr is always the first thing in the class. */
4668 if (vptr)
4670 TREE_CHAIN (vptr) = TYPE_FIELDS (t);
4671 TYPE_FIELDS (t) = vptr;
4672 next_field = &TREE_CHAIN (vptr);
4673 place_field (rli, vptr);
4675 else
4676 next_field = &TYPE_FIELDS (t);
4678 /* Build FIELD_DECLs for all of the non-virtual base-types. */
4679 empty_base_offsets = splay_tree_new (splay_tree_compare_integer_csts,
4680 NULL, NULL);
4681 build_base_fields (rli, empty_base_offsets, next_field);
4683 /* Layout the non-static data members. */
4684 for (field = non_static_data_members; field; field = TREE_CHAIN (field))
4686 tree type;
4687 tree padding;
4689 /* We still pass things that aren't non-static data members to
4690 the back-end, in case it wants to do something with them. */
4691 if (TREE_CODE (field) != FIELD_DECL)
4693 place_field (rli, field);
4694 /* If the static data member has incomplete type, keep track
4695 of it so that it can be completed later. (The handling
4696 of pending statics in finish_record_layout is
4697 insufficient; consider:
4699 struct S1;
4700 struct S2 { static S1 s1; };
4702 At this point, finish_record_layout will be called, but
4703 S1 is still incomplete.) */
4704 if (TREE_CODE (field) == VAR_DECL)
4705 maybe_register_incomplete_var (field);
4706 continue;
4709 type = TREE_TYPE (field);
4711 padding = NULL_TREE;
4713 /* If this field is a bit-field whose width is greater than its
4714 type, then there are some special rules for allocating
4715 it. */
4716 if (DECL_C_BIT_FIELD (field)
4717 && INT_CST_LT (TYPE_SIZE (type), DECL_SIZE (field)))
4719 integer_type_kind itk;
4720 tree integer_type;
4721 bool was_unnamed_p = false;
4722 /* We must allocate the bits as if suitably aligned for the
4723 longest integer type that fits in this many bits. type
4724 of the field. Then, we are supposed to use the left over
4725 bits as additional padding. */
4726 for (itk = itk_char; itk != itk_none; ++itk)
4727 if (INT_CST_LT (DECL_SIZE (field),
4728 TYPE_SIZE (integer_types[itk])))
4729 break;
4731 /* ITK now indicates a type that is too large for the
4732 field. We have to back up by one to find the largest
4733 type that fits. */
4734 integer_type = integer_types[itk - 1];
4736 /* Figure out how much additional padding is required. GCC
4737 3.2 always created a padding field, even if it had zero
4738 width. */
4739 if (!abi_version_at_least (2)
4740 || INT_CST_LT (TYPE_SIZE (integer_type), DECL_SIZE (field)))
4742 if (abi_version_at_least (2) && TREE_CODE (t) == UNION_TYPE)
4743 /* In a union, the padding field must have the full width
4744 of the bit-field; all fields start at offset zero. */
4745 padding = DECL_SIZE (field);
4746 else
4748 if (warn_abi && TREE_CODE (t) == UNION_TYPE)
4749 warning ("size assigned to `%T' may not be "
4750 "ABI-compliant and may change in a future "
4751 "version of GCC",
4753 padding = size_binop (MINUS_EXPR, DECL_SIZE (field),
4754 TYPE_SIZE (integer_type));
4757 #ifdef PCC_BITFIELD_TYPE_MATTERS
4758 /* An unnamed bitfield does not normally affect the
4759 alignment of the containing class on a target where
4760 PCC_BITFIELD_TYPE_MATTERS. But, the C++ ABI does not
4761 make any exceptions for unnamed bitfields when the
4762 bitfields are longer than their types. Therefore, we
4763 temporarily give the field a name. */
4764 if (PCC_BITFIELD_TYPE_MATTERS && !DECL_NAME (field))
4766 was_unnamed_p = true;
4767 DECL_NAME (field) = make_anon_name ();
4769 #endif
4770 DECL_SIZE (field) = TYPE_SIZE (integer_type);
4771 DECL_ALIGN (field) = TYPE_ALIGN (integer_type);
4772 DECL_USER_ALIGN (field) = TYPE_USER_ALIGN (integer_type);
4773 layout_nonempty_base_or_field (rli, field, NULL_TREE,
4774 empty_base_offsets);
4775 if (was_unnamed_p)
4776 DECL_NAME (field) = NULL_TREE;
4777 /* Now that layout has been performed, set the size of the
4778 field to the size of its declared type; the rest of the
4779 field is effectively invisible. */
4780 DECL_SIZE (field) = TYPE_SIZE (type);
4781 /* We must also reset the DECL_MODE of the field. */
4782 if (abi_version_at_least (2))
4783 DECL_MODE (field) = TYPE_MODE (type);
4784 else if (warn_abi
4785 && DECL_MODE (field) != TYPE_MODE (type))
4786 /* Versions of G++ before G++ 3.4 did not reset the
4787 DECL_MODE. */
4788 warning ("the offset of `%D' may not be ABI-compliant and may "
4789 "change in a future version of GCC", field);
4791 else
4792 layout_nonempty_base_or_field (rli, field, NULL_TREE,
4793 empty_base_offsets);
4795 /* Remember the location of any empty classes in FIELD. */
4796 if (abi_version_at_least (2))
4797 record_subobject_offsets (TREE_TYPE (field),
4798 byte_position(field),
4799 empty_base_offsets,
4800 /*vbases_p=*/1);
4802 /* If a bit-field does not immediately follow another bit-field,
4803 and yet it starts in the middle of a byte, we have failed to
4804 comply with the ABI. */
4805 if (warn_abi
4806 && DECL_C_BIT_FIELD (field)
4807 && !last_field_was_bitfield
4808 && !integer_zerop (size_binop (TRUNC_MOD_EXPR,
4809 DECL_FIELD_BIT_OFFSET (field),
4810 bitsize_unit_node)))
4811 cp_warning_at ("offset of `%D' is not ABI-compliant and may change in a future version of GCC",
4812 field);
4814 /* G++ used to use DECL_FIELD_OFFSET as if it were the byte
4815 offset of the field. */
4816 if (warn_abi
4817 && !tree_int_cst_equal (DECL_FIELD_OFFSET (field),
4818 byte_position (field))
4819 && contains_empty_class_p (TREE_TYPE (field)))
4820 cp_warning_at ("`%D' contains empty classes which may cause base "
4821 "classes to be placed at different locations in a "
4822 "future version of GCC",
4823 field);
4825 /* If we needed additional padding after this field, add it
4826 now. */
4827 if (padding)
4829 tree padding_field;
4831 padding_field = build_decl (FIELD_DECL,
4832 NULL_TREE,
4833 char_type_node);
4834 DECL_BIT_FIELD (padding_field) = 1;
4835 DECL_SIZE (padding_field) = padding;
4836 DECL_CONTEXT (padding_field) = t;
4837 DECL_ARTIFICIAL (padding_field) = 1;
4838 layout_nonempty_base_or_field (rli, padding_field,
4839 NULL_TREE,
4840 empty_base_offsets);
4843 last_field_was_bitfield = DECL_C_BIT_FIELD (field);
4846 if (abi_version_at_least (2) && !integer_zerop (rli->bitpos))
4848 /* Make sure that we are on a byte boundary so that the size of
4849 the class without virtual bases will always be a round number
4850 of bytes. */
4851 rli->bitpos = round_up (rli->bitpos, BITS_PER_UNIT);
4852 normalize_rli (rli);
4855 /* G++ 3.2 does not allow virtual bases to be overlaid with tail
4856 padding. */
4857 if (!abi_version_at_least (2))
4858 include_empty_classes(rli);
4860 /* Delete all zero-width bit-fields from the list of fields. Now
4861 that the type is laid out they are no longer important. */
4862 remove_zero_width_bit_fields (t);
4864 /* Create the version of T used for virtual bases. We do not use
4865 make_aggr_type for this version; this is an artificial type. For
4866 a POD type, we just reuse T. */
4867 if (CLASSTYPE_NON_POD_P (t) || CLASSTYPE_EMPTY_P (t))
4869 base_t = make_node (TREE_CODE (t));
4871 /* Set the size and alignment for the new type. In G++ 3.2, all
4872 empty classes were considered to have size zero when used as
4873 base classes. */
4874 if (!abi_version_at_least (2) && CLASSTYPE_EMPTY_P (t))
4876 TYPE_SIZE (base_t) = bitsize_zero_node;
4877 TYPE_SIZE_UNIT (base_t) = size_zero_node;
4878 if (warn_abi && !integer_zerop (rli_size_unit_so_far (rli)))
4879 warning ("layout of classes derived from empty class `%T' "
4880 "may change in a future version of GCC",
4883 else
4885 tree eoc;
4887 /* If the ABI version is not at least two, and the last
4888 field was a bit-field, RLI may not be on a byte
4889 boundary. In particular, rli_size_unit_so_far might
4890 indicate the last complete byte, while rli_size_so_far
4891 indicates the total number of bits used. Therefore,
4892 rli_size_so_far, rather than rli_size_unit_so_far, is
4893 used to compute TYPE_SIZE_UNIT. */
4894 eoc = end_of_class (t, /*include_virtuals_p=*/0);
4895 TYPE_SIZE_UNIT (base_t)
4896 = size_binop (MAX_EXPR,
4897 convert (sizetype,
4898 size_binop (CEIL_DIV_EXPR,
4899 rli_size_so_far (rli),
4900 bitsize_int (BITS_PER_UNIT))),
4901 eoc);
4902 TYPE_SIZE (base_t)
4903 = size_binop (MAX_EXPR,
4904 rli_size_so_far (rli),
4905 size_binop (MULT_EXPR,
4906 convert (bitsizetype, eoc),
4907 bitsize_int (BITS_PER_UNIT)));
4909 TYPE_ALIGN (base_t) = rli->record_align;
4910 TYPE_USER_ALIGN (base_t) = TYPE_USER_ALIGN (t);
4912 /* Copy the fields from T. */
4913 next_field = &TYPE_FIELDS (base_t);
4914 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
4915 if (TREE_CODE (field) == FIELD_DECL)
4917 *next_field = build_decl (FIELD_DECL,
4918 DECL_NAME (field),
4919 TREE_TYPE (field));
4920 DECL_CONTEXT (*next_field) = base_t;
4921 DECL_FIELD_OFFSET (*next_field) = DECL_FIELD_OFFSET (field);
4922 DECL_FIELD_BIT_OFFSET (*next_field)
4923 = DECL_FIELD_BIT_OFFSET (field);
4924 DECL_SIZE (*next_field) = DECL_SIZE (field);
4925 DECL_MODE (*next_field) = DECL_MODE (field);
4926 next_field = &TREE_CHAIN (*next_field);
4929 /* Record the base version of the type. */
4930 CLASSTYPE_AS_BASE (t) = base_t;
4931 TYPE_CONTEXT (base_t) = t;
4933 else
4934 CLASSTYPE_AS_BASE (t) = t;
4936 /* Every empty class contains an empty class. */
4937 if (CLASSTYPE_EMPTY_P (t))
4938 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) = 1;
4940 /* Set the TYPE_DECL for this type to contain the right
4941 value for DECL_OFFSET, so that we can use it as part
4942 of a COMPONENT_REF for multiple inheritance. */
4943 layout_decl (TYPE_MAIN_DECL (t), 0);
4945 /* Now fix up any virtual base class types that we left lying
4946 around. We must get these done before we try to lay out the
4947 virtual function table. As a side-effect, this will remove the
4948 base subobject fields. */
4949 layout_virtual_bases (rli, empty_base_offsets);
4951 /* Make sure that empty classes are reflected in RLI at this
4952 point. */
4953 include_empty_classes(rli);
4955 /* Make sure not to create any structures with zero size. */
4956 if (integer_zerop (rli_size_unit_so_far (rli)) && CLASSTYPE_EMPTY_P (t))
4957 place_field (rli,
4958 build_decl (FIELD_DECL, NULL_TREE, char_type_node));
4960 /* Let the back-end lay out the type. */
4961 finish_record_layout (rli, /*free_p=*/true);
4963 /* Warn about bases that can't be talked about due to ambiguity. */
4964 warn_about_ambiguous_bases (t);
4966 /* Clean up. */
4967 splay_tree_delete (empty_base_offsets);
4970 /* Returns the virtual function with which the vtable for TYPE is
4971 emitted, or NULL_TREE if that heuristic is not applicable to TYPE. */
4973 static tree
4974 key_method (tree type)
4976 tree method;
4978 if (TYPE_FOR_JAVA (type)
4979 || processing_template_decl
4980 || CLASSTYPE_TEMPLATE_INSTANTIATION (type)
4981 || CLASSTYPE_INTERFACE_KNOWN (type))
4982 return NULL_TREE;
4984 for (method = TYPE_METHODS (type); method != NULL_TREE;
4985 method = TREE_CHAIN (method))
4986 if (DECL_VINDEX (method) != NULL_TREE
4987 && ! DECL_DECLARED_INLINE_P (method)
4988 && ! DECL_PURE_VIRTUAL_P (method))
4989 return method;
4991 return NULL_TREE;
4994 /* Perform processing required when the definition of T (a class type)
4995 is complete. */
4997 void
4998 finish_struct_1 (tree t)
5000 tree x;
5001 /* A TREE_LIST. The TREE_VALUE of each node is a FUNCTION_DECL. */
5002 tree virtuals = NULL_TREE;
5003 int n_fields = 0;
5004 tree vfield;
5006 if (COMPLETE_TYPE_P (t))
5008 if (IS_AGGR_TYPE (t))
5009 error ("redefinition of `%#T'", t);
5010 else
5011 abort ();
5012 popclass ();
5013 return;
5016 /* If this type was previously laid out as a forward reference,
5017 make sure we lay it out again. */
5018 TYPE_SIZE (t) = NULL_TREE;
5019 CLASSTYPE_PRIMARY_BINFO (t) = NULL_TREE;
5021 fixup_inline_methods (t);
5023 /* Make assumptions about the class; we'll reset the flags if
5024 necessary. */
5025 CLASSTYPE_EMPTY_P (t) = 1;
5026 CLASSTYPE_NEARLY_EMPTY_P (t) = 1;
5027 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) = 0;
5029 /* Do end-of-class semantic processing: checking the validity of the
5030 bases and members and add implicitly generated methods. */
5031 check_bases_and_members (t);
5033 /* Find the key method. */
5034 if (TYPE_CONTAINS_VPTR_P (t))
5036 CLASSTYPE_KEY_METHOD (t) = key_method (t);
5038 /* If a polymorphic class has no key method, we may emit the vtable
5039 in every translation unit where the class definition appears. */
5040 if (CLASSTYPE_KEY_METHOD (t) == NULL_TREE)
5041 keyed_classes = tree_cons (NULL_TREE, t, keyed_classes);
5044 /* Layout the class itself. */
5045 layout_class_type (t, &virtuals);
5046 if (CLASSTYPE_AS_BASE (t) != t)
5047 /* We use the base type for trivial assignments, and hence it
5048 needs a mode. */
5049 compute_record_mode (CLASSTYPE_AS_BASE (t));
5051 /* Make sure that we get our own copy of the vfield FIELD_DECL. */
5052 vfield = TYPE_VFIELD (t);
5053 if (vfield && CLASSTYPE_HAS_PRIMARY_BASE_P (t))
5055 tree primary = CLASSTYPE_PRIMARY_BINFO (t);
5057 my_friendly_assert (same_type_p (DECL_FIELD_CONTEXT (vfield),
5058 BINFO_TYPE (primary)),
5059 20010726);
5060 /* The vtable better be at the start. */
5061 my_friendly_assert (integer_zerop (DECL_FIELD_OFFSET (vfield)),
5062 20010726);
5063 my_friendly_assert (integer_zerop (BINFO_OFFSET (primary)),
5064 20010726);
5066 vfield = copy_decl (vfield);
5067 DECL_FIELD_CONTEXT (vfield) = t;
5068 TYPE_VFIELD (t) = vfield;
5070 else
5071 my_friendly_assert (!vfield || DECL_FIELD_CONTEXT (vfield) == t, 20010726);
5073 virtuals = modify_all_vtables (t, nreverse (virtuals));
5075 /* If we created a new vtbl pointer for this class, add it to the
5076 list. */
5077 if (TYPE_VFIELD (t) && !CLASSTYPE_HAS_PRIMARY_BASE_P (t))
5078 CLASSTYPE_VFIELDS (t)
5079 = chainon (CLASSTYPE_VFIELDS (t), build_tree_list (NULL_TREE, t));
5081 /* If necessary, create the primary vtable for this class. */
5082 if (virtuals || TYPE_CONTAINS_VPTR_P (t))
5084 /* We must enter these virtuals into the table. */
5085 if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t))
5086 build_primary_vtable (NULL_TREE, t);
5087 else if (! BINFO_NEW_VTABLE_MARKED (TYPE_BINFO (t)))
5088 /* Here we know enough to change the type of our virtual
5089 function table, but we will wait until later this function. */
5090 build_primary_vtable (CLASSTYPE_PRIMARY_BINFO (t), t);
5093 if (TYPE_CONTAINS_VPTR_P (t))
5095 int vindex;
5096 tree fn;
5098 if (TYPE_BINFO_VTABLE (t))
5099 my_friendly_assert (DECL_VIRTUAL_P (TYPE_BINFO_VTABLE (t)),
5100 20000116);
5101 if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t))
5102 my_friendly_assert (TYPE_BINFO_VIRTUALS (t) == NULL_TREE,
5103 20000116);
5105 /* Add entries for virtual functions introduced by this class. */
5106 TYPE_BINFO_VIRTUALS (t) = chainon (TYPE_BINFO_VIRTUALS (t), virtuals);
5108 /* Set DECL_VINDEX for all functions declared in this class. */
5109 for (vindex = 0, fn = BINFO_VIRTUALS (TYPE_BINFO (t));
5110 fn;
5111 fn = TREE_CHAIN (fn),
5112 vindex += (TARGET_VTABLE_USES_DESCRIPTORS
5113 ? TARGET_VTABLE_USES_DESCRIPTORS : 1))
5115 tree fndecl = BV_FN (fn);
5117 if (DECL_THUNK_P (fndecl))
5118 /* A thunk. We should never be calling this entry directly
5119 from this vtable -- we'd use the entry for the non
5120 thunk base function. */
5121 DECL_VINDEX (fndecl) = NULL_TREE;
5122 else if (TREE_CODE (DECL_VINDEX (fndecl)) != INTEGER_CST)
5123 DECL_VINDEX (fndecl) = build_shared_int_cst (vindex);
5127 finish_struct_bits (t);
5129 /* Complete the rtl for any static member objects of the type we're
5130 working on. */
5131 for (x = TYPE_FIELDS (t); x; x = TREE_CHAIN (x))
5132 if (TREE_CODE (x) == VAR_DECL && TREE_STATIC (x)
5133 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (x)), t))
5134 DECL_MODE (x) = TYPE_MODE (t);
5136 /* Done with FIELDS...now decide whether to sort these for
5137 faster lookups later.
5139 We use a small number because most searches fail (succeeding
5140 ultimately as the search bores through the inheritance
5141 hierarchy), and we want this failure to occur quickly. */
5143 n_fields = count_fields (TYPE_FIELDS (t));
5144 if (n_fields > 7)
5146 struct sorted_fields_type *field_vec = ggc_alloc (sizeof (struct sorted_fields_type)
5147 + n_fields * sizeof (tree));
5148 field_vec->len = n_fields;
5149 add_fields_to_record_type (TYPE_FIELDS (t), field_vec, 0);
5150 qsort (field_vec->elts, n_fields, sizeof (tree),
5151 field_decl_cmp);
5152 if (! DECL_LANG_SPECIFIC (TYPE_MAIN_DECL (t)))
5153 retrofit_lang_decl (TYPE_MAIN_DECL (t));
5154 DECL_SORTED_FIELDS (TYPE_MAIN_DECL (t)) = field_vec;
5157 if (TYPE_HAS_CONSTRUCTOR (t))
5159 tree vfields = CLASSTYPE_VFIELDS (t);
5161 for (vfields = CLASSTYPE_VFIELDS (t);
5162 vfields; vfields = TREE_CHAIN (vfields))
5163 /* Mark the fact that constructor for T could affect anybody
5164 inheriting from T who wants to initialize vtables for
5165 VFIELDS's type. */
5166 if (VF_BINFO_VALUE (vfields))
5167 TREE_ADDRESSABLE (vfields) = 1;
5170 /* Make the rtl for any new vtables we have created, and unmark
5171 the base types we marked. */
5172 finish_vtbls (t);
5174 /* Build the VTT for T. */
5175 build_vtt (t);
5177 if (warn_nonvdtor && TYPE_POLYMORPHIC_P (t) && TYPE_HAS_DESTRUCTOR (t)
5178 && DECL_VINDEX (TREE_VEC_ELT (CLASSTYPE_METHOD_VEC (t), 1)) == NULL_TREE)
5179 warning ("`%#T' has virtual functions but non-virtual destructor", t);
5181 complete_vars (t);
5183 if (warn_overloaded_virtual)
5184 warn_hidden (t);
5186 maybe_suppress_debug_info (t);
5188 dump_class_hierarchy (t);
5190 /* Finish debugging output for this type. */
5191 rest_of_type_compilation (t, ! LOCAL_CLASS_P (t));
5194 /* When T was built up, the member declarations were added in reverse
5195 order. Rearrange them to declaration order. */
5197 void
5198 unreverse_member_declarations (tree t)
5200 tree next;
5201 tree prev;
5202 tree x;
5204 /* The following lists are all in reverse order. Put them in
5205 declaration order now. */
5206 TYPE_METHODS (t) = nreverse (TYPE_METHODS (t));
5207 CLASSTYPE_DECL_LIST (t) = nreverse (CLASSTYPE_DECL_LIST (t));
5209 /* Actually, for the TYPE_FIELDS, only the non TYPE_DECLs are in
5210 reverse order, so we can't just use nreverse. */
5211 prev = NULL_TREE;
5212 for (x = TYPE_FIELDS (t);
5213 x && TREE_CODE (x) != TYPE_DECL;
5214 x = next)
5216 next = TREE_CHAIN (x);
5217 TREE_CHAIN (x) = prev;
5218 prev = x;
5220 if (prev)
5222 TREE_CHAIN (TYPE_FIELDS (t)) = x;
5223 if (prev)
5224 TYPE_FIELDS (t) = prev;
5228 tree
5229 finish_struct (tree t, tree attributes)
5231 location_t saved_loc = input_location;
5233 /* Now that we've got all the field declarations, reverse everything
5234 as necessary. */
5235 unreverse_member_declarations (t);
5237 cplus_decl_attributes (&t, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
5239 /* Nadger the current location so that diagnostics point to the start of
5240 the struct, not the end. */
5241 input_location = DECL_SOURCE_LOCATION (TYPE_NAME (t));
5243 if (processing_template_decl)
5245 finish_struct_methods (t);
5246 TYPE_SIZE (t) = bitsize_zero_node;
5247 TYPE_SIZE_UNIT (t) = size_zero_node;
5249 else
5250 finish_struct_1 (t);
5252 input_location = saved_loc;
5254 TYPE_BEING_DEFINED (t) = 0;
5256 if (current_class_type)
5257 popclass ();
5258 else
5259 error ("trying to finish struct, but kicked out due to previous parse errors");
5261 if (processing_template_decl && at_function_scope_p ())
5262 add_stmt (build_min (TAG_DEFN, t));
5264 return t;
5267 /* Return the dynamic type of INSTANCE, if known.
5268 Used to determine whether the virtual function table is needed
5269 or not.
5271 *NONNULL is set iff INSTANCE can be known to be nonnull, regardless
5272 of our knowledge of its type. *NONNULL should be initialized
5273 before this function is called. */
5275 static tree
5276 fixed_type_or_null (tree instance, int* nonnull, int* cdtorp)
5278 switch (TREE_CODE (instance))
5280 case INDIRECT_REF:
5281 if (POINTER_TYPE_P (TREE_TYPE (instance)))
5282 return NULL_TREE;
5283 else
5284 return fixed_type_or_null (TREE_OPERAND (instance, 0),
5285 nonnull, cdtorp);
5287 case CALL_EXPR:
5288 /* This is a call to a constructor, hence it's never zero. */
5289 if (TREE_HAS_CONSTRUCTOR (instance))
5291 if (nonnull)
5292 *nonnull = 1;
5293 return TREE_TYPE (instance);
5295 return NULL_TREE;
5297 case SAVE_EXPR:
5298 /* This is a call to a constructor, hence it's never zero. */
5299 if (TREE_HAS_CONSTRUCTOR (instance))
5301 if (nonnull)
5302 *nonnull = 1;
5303 return TREE_TYPE (instance);
5305 return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull, cdtorp);
5307 case RTL_EXPR:
5308 return NULL_TREE;
5310 case PLUS_EXPR:
5311 case MINUS_EXPR:
5312 if (TREE_CODE (TREE_OPERAND (instance, 0)) == ADDR_EXPR)
5313 return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull, cdtorp);
5314 if (TREE_CODE (TREE_OPERAND (instance, 1)) == INTEGER_CST)
5315 /* Propagate nonnull. */
5316 return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull, cdtorp);
5317 return NULL_TREE;
5319 case NOP_EXPR:
5320 case CONVERT_EXPR:
5321 return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull, cdtorp);
5323 case ADDR_EXPR:
5324 if (nonnull)
5325 *nonnull = 1;
5326 return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull, cdtorp);
5328 case COMPONENT_REF:
5329 return fixed_type_or_null (TREE_OPERAND (instance, 1), nonnull, cdtorp);
5331 case VAR_DECL:
5332 case FIELD_DECL:
5333 if (TREE_CODE (TREE_TYPE (instance)) == ARRAY_TYPE
5334 && IS_AGGR_TYPE (TREE_TYPE (TREE_TYPE (instance))))
5336 if (nonnull)
5337 *nonnull = 1;
5338 return TREE_TYPE (TREE_TYPE (instance));
5340 /* fall through... */
5341 case TARGET_EXPR:
5342 case PARM_DECL:
5343 case RESULT_DECL:
5344 if (IS_AGGR_TYPE (TREE_TYPE (instance)))
5346 if (nonnull)
5347 *nonnull = 1;
5348 return TREE_TYPE (instance);
5350 else if (instance == current_class_ptr)
5352 if (nonnull)
5353 *nonnull = 1;
5355 /* if we're in a ctor or dtor, we know our type. */
5356 if (DECL_LANG_SPECIFIC (current_function_decl)
5357 && (DECL_CONSTRUCTOR_P (current_function_decl)
5358 || DECL_DESTRUCTOR_P (current_function_decl)))
5360 if (cdtorp)
5361 *cdtorp = 1;
5362 return TREE_TYPE (TREE_TYPE (instance));
5365 else if (TREE_CODE (TREE_TYPE (instance)) == REFERENCE_TYPE)
5367 /* Reference variables should be references to objects. */
5368 if (nonnull)
5369 *nonnull = 1;
5371 /* DECL_VAR_MARKED_P is used to prevent recursion; a
5372 variable's initializer may refer to the variable
5373 itself. */
5374 if (TREE_CODE (instance) == VAR_DECL
5375 && DECL_INITIAL (instance)
5376 && !DECL_VAR_MARKED_P (instance))
5378 tree type;
5379 DECL_VAR_MARKED_P (instance) = 1;
5380 type = fixed_type_or_null (DECL_INITIAL (instance),
5381 nonnull, cdtorp);
5382 DECL_VAR_MARKED_P (instance) = 0;
5383 return type;
5386 return NULL_TREE;
5388 default:
5389 return NULL_TREE;
5393 /* Return nonzero if the dynamic type of INSTANCE is known, and
5394 equivalent to the static type. We also handle the case where
5395 INSTANCE is really a pointer. Return negative if this is a
5396 ctor/dtor. There the dynamic type is known, but this might not be
5397 the most derived base of the original object, and hence virtual
5398 bases may not be layed out according to this type.
5400 Used to determine whether the virtual function table is needed
5401 or not.
5403 *NONNULL is set iff INSTANCE can be known to be nonnull, regardless
5404 of our knowledge of its type. *NONNULL should be initialized
5405 before this function is called. */
5408 resolves_to_fixed_type_p (tree instance, int* nonnull)
5410 tree t = TREE_TYPE (instance);
5411 int cdtorp = 0;
5413 tree fixed = fixed_type_or_null (instance, nonnull, &cdtorp);
5414 if (fixed == NULL_TREE)
5415 return 0;
5416 if (POINTER_TYPE_P (t))
5417 t = TREE_TYPE (t);
5418 if (!same_type_ignoring_top_level_qualifiers_p (t, fixed))
5419 return 0;
5420 return cdtorp ? -1 : 1;
5424 void
5425 init_class_processing (void)
5427 current_class_depth = 0;
5428 current_class_stack_size = 10;
5429 current_class_stack
5430 = xmalloc (current_class_stack_size * sizeof (struct class_stack_node));
5431 VARRAY_TREE_INIT (local_classes, 8, "local_classes");
5433 ridpointers[(int) RID_PUBLIC] = access_public_node;
5434 ridpointers[(int) RID_PRIVATE] = access_private_node;
5435 ridpointers[(int) RID_PROTECTED] = access_protected_node;
5438 /* Set global variables CURRENT_CLASS_NAME and CURRENT_CLASS_TYPE as
5439 appropriate for TYPE.
5441 So that we may avoid calls to lookup_name, we cache the _TYPE
5442 nodes of local TYPE_DECLs in the TREE_TYPE field of the name.
5444 For multiple inheritance, we perform a two-pass depth-first search
5445 of the type lattice. The first pass performs a pre-order search,
5446 marking types after the type has had its fields installed in
5447 the appropriate IDENTIFIER_CLASS_VALUE slot. The second pass merely
5448 unmarks the marked types. If a field or member function name
5449 appears in an ambiguous way, the IDENTIFIER_CLASS_VALUE of
5450 that name becomes `error_mark_node'. */
5452 void
5453 pushclass (tree type)
5455 type = TYPE_MAIN_VARIANT (type);
5457 /* Make sure there is enough room for the new entry on the stack. */
5458 if (current_class_depth + 1 >= current_class_stack_size)
5460 current_class_stack_size *= 2;
5461 current_class_stack
5462 = xrealloc (current_class_stack,
5463 current_class_stack_size
5464 * sizeof (struct class_stack_node));
5467 /* Insert a new entry on the class stack. */
5468 current_class_stack[current_class_depth].name = current_class_name;
5469 current_class_stack[current_class_depth].type = current_class_type;
5470 current_class_stack[current_class_depth].access = current_access_specifier;
5471 current_class_stack[current_class_depth].names_used = 0;
5472 current_class_depth++;
5474 /* Now set up the new type. */
5475 current_class_name = TYPE_NAME (type);
5476 if (TREE_CODE (current_class_name) == TYPE_DECL)
5477 current_class_name = DECL_NAME (current_class_name);
5478 current_class_type = type;
5480 /* By default, things in classes are private, while things in
5481 structures or unions are public. */
5482 current_access_specifier = (CLASSTYPE_DECLARED_CLASS (type)
5483 ? access_private_node
5484 : access_public_node);
5486 if (previous_class_type != NULL_TREE
5487 && (type != previous_class_type
5488 || !COMPLETE_TYPE_P (previous_class_type))
5489 && current_class_depth == 1)
5491 /* Forcibly remove any old class remnants. */
5492 invalidate_class_lookup_cache ();
5495 /* If we're about to enter a nested class, clear
5496 IDENTIFIER_CLASS_VALUE for the enclosing classes. */
5497 if (current_class_depth > 1)
5498 clear_identifier_class_values ();
5500 pushlevel_class ();
5502 if (type != previous_class_type || current_class_depth > 1)
5504 push_class_decls (type);
5505 if (CLASSTYPE_TEMPLATE_INFO (type) && !CLASSTYPE_USE_TEMPLATE (type))
5507 /* If we are entering the scope of a template declaration (not a
5508 specialization), we need to push all the using decls with
5509 dependent scope too. */
5510 tree fields;
5512 for (fields = TYPE_FIELDS (type);
5513 fields; fields = TREE_CHAIN (fields))
5514 if (TREE_CODE (fields) == USING_DECL && !TREE_TYPE (fields))
5515 pushdecl_class_level (fields);
5518 else
5520 tree item;
5522 /* We are re-entering the same class we just left, so we don't
5523 have to search the whole inheritance matrix to find all the
5524 decls to bind again. Instead, we install the cached
5525 class_shadowed list, and walk through it binding names and
5526 setting up IDENTIFIER_TYPE_VALUEs. */
5527 set_class_shadows (previous_class_values);
5528 for (item = previous_class_values; item; item = TREE_CHAIN (item))
5530 tree id = TREE_PURPOSE (item);
5531 tree decl = TREE_TYPE (item);
5533 push_class_binding (id, decl);
5534 if (TREE_CODE (decl) == TYPE_DECL)
5535 set_identifier_type_value (id, decl);
5537 unuse_fields (type);
5540 cxx_remember_type_decls (CLASSTYPE_NESTED_UTDS (type));
5543 /* When we exit a toplevel class scope, we save the
5544 IDENTIFIER_CLASS_VALUEs so that we can restore them quickly if we
5545 reenter the class. Here, we've entered some other class, so we
5546 must invalidate our cache. */
5548 void
5549 invalidate_class_lookup_cache (void)
5551 tree t;
5553 /* The IDENTIFIER_CLASS_VALUEs are no longer valid. */
5554 for (t = previous_class_values; t; t = TREE_CHAIN (t))
5555 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (t)) = NULL_TREE;
5557 previous_class_values = NULL_TREE;
5558 previous_class_type = NULL_TREE;
5561 /* Get out of the current class scope. If we were in a class scope
5562 previously, that is the one popped to. */
5564 void
5565 popclass (void)
5567 poplevel_class ();
5568 pop_class_decls ();
5570 current_class_depth--;
5571 current_class_name = current_class_stack[current_class_depth].name;
5572 current_class_type = current_class_stack[current_class_depth].type;
5573 current_access_specifier = current_class_stack[current_class_depth].access;
5574 if (current_class_stack[current_class_depth].names_used)
5575 splay_tree_delete (current_class_stack[current_class_depth].names_used);
5578 /* Returns 1 if current_class_type is either T or a nested type of T.
5579 We start looking from 1 because entry 0 is from global scope, and has
5580 no type. */
5583 currently_open_class (tree t)
5585 int i;
5586 if (current_class_type && same_type_p (t, current_class_type))
5587 return 1;
5588 for (i = 1; i < current_class_depth; ++i)
5589 if (current_class_stack[i].type
5590 && same_type_p (current_class_stack [i].type, t))
5591 return 1;
5592 return 0;
5595 /* If either current_class_type or one of its enclosing classes are derived
5596 from T, return the appropriate type. Used to determine how we found
5597 something via unqualified lookup. */
5599 tree
5600 currently_open_derived_class (tree t)
5602 int i;
5604 /* The bases of a dependent type are unknown. */
5605 if (dependent_type_p (t))
5606 return NULL_TREE;
5608 if (!current_class_type)
5609 return NULL_TREE;
5611 if (DERIVED_FROM_P (t, current_class_type))
5612 return current_class_type;
5614 for (i = current_class_depth - 1; i > 0; --i)
5615 if (DERIVED_FROM_P (t, current_class_stack[i].type))
5616 return current_class_stack[i].type;
5618 return NULL_TREE;
5621 /* When entering a class scope, all enclosing class scopes' names with
5622 static meaning (static variables, static functions, types and
5623 enumerators) have to be visible. This recursive function calls
5624 pushclass for all enclosing class contexts until global or a local
5625 scope is reached. TYPE is the enclosed class. */
5627 void
5628 push_nested_class (tree type)
5630 tree context;
5632 /* A namespace might be passed in error cases, like A::B:C. */
5633 if (type == NULL_TREE
5634 || type == error_mark_node
5635 || TREE_CODE (type) == NAMESPACE_DECL
5636 || ! IS_AGGR_TYPE (type)
5637 || TREE_CODE (type) == TEMPLATE_TYPE_PARM
5638 || TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
5639 return;
5641 context = DECL_CONTEXT (TYPE_MAIN_DECL (type));
5643 if (context && CLASS_TYPE_P (context))
5644 push_nested_class (context);
5645 pushclass (type);
5648 /* Undoes a push_nested_class call. */
5650 void
5651 pop_nested_class (void)
5653 tree context = DECL_CONTEXT (TYPE_MAIN_DECL (current_class_type));
5655 popclass ();
5656 if (context && CLASS_TYPE_P (context))
5657 pop_nested_class ();
5660 /* Returns the number of extern "LANG" blocks we are nested within. */
5663 current_lang_depth (void)
5665 return VARRAY_ACTIVE_SIZE (current_lang_base);
5668 /* Set global variables CURRENT_LANG_NAME to appropriate value
5669 so that behavior of name-mangling machinery is correct. */
5671 void
5672 push_lang_context (tree name)
5674 VARRAY_PUSH_TREE (current_lang_base, current_lang_name);
5676 if (name == lang_name_cplusplus)
5678 current_lang_name = name;
5680 else if (name == lang_name_java)
5682 current_lang_name = name;
5683 /* DECL_IGNORED_P is initially set for these types, to avoid clutter.
5684 (See record_builtin_java_type in decl.c.) However, that causes
5685 incorrect debug entries if these types are actually used.
5686 So we re-enable debug output after extern "Java". */
5687 DECL_IGNORED_P (TYPE_NAME (java_byte_type_node)) = 0;
5688 DECL_IGNORED_P (TYPE_NAME (java_short_type_node)) = 0;
5689 DECL_IGNORED_P (TYPE_NAME (java_int_type_node)) = 0;
5690 DECL_IGNORED_P (TYPE_NAME (java_long_type_node)) = 0;
5691 DECL_IGNORED_P (TYPE_NAME (java_float_type_node)) = 0;
5692 DECL_IGNORED_P (TYPE_NAME (java_double_type_node)) = 0;
5693 DECL_IGNORED_P (TYPE_NAME (java_char_type_node)) = 0;
5694 DECL_IGNORED_P (TYPE_NAME (java_boolean_type_node)) = 0;
5696 else if (name == lang_name_c)
5698 current_lang_name = name;
5700 else
5701 error ("language string `\"%s\"' not recognized", IDENTIFIER_POINTER (name));
5704 /* Get out of the current language scope. */
5706 void
5707 pop_lang_context (void)
5709 current_lang_name = VARRAY_TOP_TREE (current_lang_base);
5710 VARRAY_POP (current_lang_base);
5713 /* Type instantiation routines. */
5715 /* Given an OVERLOAD and a TARGET_TYPE, return the function that
5716 matches the TARGET_TYPE. If there is no satisfactory match, return
5717 error_mark_node, and issue a error & warning messages under control
5718 of FLAGS. Permit pointers to member function if FLAGS permits. If
5719 TEMPLATE_ONLY, the name of the overloaded function was a
5720 template-id, and EXPLICIT_TARGS are the explicitly provided
5721 template arguments. */
5723 static tree
5724 resolve_address_of_overloaded_function (tree target_type,
5725 tree overload,
5726 tsubst_flags_t flags,
5727 bool template_only,
5728 tree explicit_targs)
5730 /* Here's what the standard says:
5732 [over.over]
5734 If the name is a function template, template argument deduction
5735 is done, and if the argument deduction succeeds, the deduced
5736 arguments are used to generate a single template function, which
5737 is added to the set of overloaded functions considered.
5739 Non-member functions and static member functions match targets of
5740 type "pointer-to-function" or "reference-to-function." Nonstatic
5741 member functions match targets of type "pointer-to-member
5742 function;" the function type of the pointer to member is used to
5743 select the member function from the set of overloaded member
5744 functions. If a nonstatic member function is selected, the
5745 reference to the overloaded function name is required to have the
5746 form of a pointer to member as described in 5.3.1.
5748 If more than one function is selected, any template functions in
5749 the set are eliminated if the set also contains a non-template
5750 function, and any given template function is eliminated if the
5751 set contains a second template function that is more specialized
5752 than the first according to the partial ordering rules 14.5.5.2.
5753 After such eliminations, if any, there shall remain exactly one
5754 selected function. */
5756 int is_ptrmem = 0;
5757 int is_reference = 0;
5758 /* We store the matches in a TREE_LIST rooted here. The functions
5759 are the TREE_PURPOSE, not the TREE_VALUE, in this list, for easy
5760 interoperability with most_specialized_instantiation. */
5761 tree matches = NULL_TREE;
5762 tree fn;
5764 /* By the time we get here, we should be seeing only real
5765 pointer-to-member types, not the internal POINTER_TYPE to
5766 METHOD_TYPE representation. */
5767 my_friendly_assert (!(TREE_CODE (target_type) == POINTER_TYPE
5768 && (TREE_CODE (TREE_TYPE (target_type))
5769 == METHOD_TYPE)), 0);
5771 my_friendly_assert (is_overloaded_fn (overload), 20030910);
5773 /* Check that the TARGET_TYPE is reasonable. */
5774 if (TYPE_PTRFN_P (target_type))
5775 /* This is OK. */;
5776 else if (TYPE_PTRMEMFUNC_P (target_type))
5777 /* This is OK, too. */
5778 is_ptrmem = 1;
5779 else if (TREE_CODE (target_type) == FUNCTION_TYPE)
5781 /* This is OK, too. This comes from a conversion to reference
5782 type. */
5783 target_type = build_reference_type (target_type);
5784 is_reference = 1;
5786 else
5788 if (flags & tf_error)
5789 error ("\
5790 cannot resolve overloaded function `%D' based on conversion to type `%T'",
5791 DECL_NAME (OVL_FUNCTION (overload)), target_type);
5792 return error_mark_node;
5795 /* If we can find a non-template function that matches, we can just
5796 use it. There's no point in generating template instantiations
5797 if we're just going to throw them out anyhow. But, of course, we
5798 can only do this when we don't *need* a template function. */
5799 if (!template_only)
5801 tree fns;
5803 for (fns = overload; fns; fns = OVL_NEXT (fns))
5805 tree fn = OVL_CURRENT (fns);
5806 tree fntype;
5808 if (TREE_CODE (fn) == TEMPLATE_DECL)
5809 /* We're not looking for templates just yet. */
5810 continue;
5812 if ((TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
5813 != is_ptrmem)
5814 /* We're looking for a non-static member, and this isn't
5815 one, or vice versa. */
5816 continue;
5818 /* Ignore anticipated decls of undeclared builtins. */
5819 if (DECL_ANTICIPATED (fn))
5820 continue;
5822 /* See if there's a match. */
5823 fntype = TREE_TYPE (fn);
5824 if (is_ptrmem)
5825 fntype = build_ptrmemfunc_type (build_pointer_type (fntype));
5826 else if (!is_reference)
5827 fntype = build_pointer_type (fntype);
5829 if (can_convert_arg (target_type, fntype, fn))
5830 matches = tree_cons (fn, NULL_TREE, matches);
5834 /* Now, if we've already got a match (or matches), there's no need
5835 to proceed to the template functions. But, if we don't have a
5836 match we need to look at them, too. */
5837 if (!matches)
5839 tree target_fn_type;
5840 tree target_arg_types;
5841 tree target_ret_type;
5842 tree fns;
5844 if (is_ptrmem)
5845 target_fn_type
5846 = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (target_type));
5847 else
5848 target_fn_type = TREE_TYPE (target_type);
5849 target_arg_types = TYPE_ARG_TYPES (target_fn_type);
5850 target_ret_type = TREE_TYPE (target_fn_type);
5852 /* Never do unification on the 'this' parameter. */
5853 if (TREE_CODE (target_fn_type) == METHOD_TYPE)
5854 target_arg_types = TREE_CHAIN (target_arg_types);
5856 for (fns = overload; fns; fns = OVL_NEXT (fns))
5858 tree fn = OVL_CURRENT (fns);
5859 tree instantiation;
5860 tree instantiation_type;
5861 tree targs;
5863 if (TREE_CODE (fn) != TEMPLATE_DECL)
5864 /* We're only looking for templates. */
5865 continue;
5867 if ((TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
5868 != is_ptrmem)
5869 /* We're not looking for a non-static member, and this is
5870 one, or vice versa. */
5871 continue;
5873 /* Try to do argument deduction. */
5874 targs = make_tree_vec (DECL_NTPARMS (fn));
5875 if (fn_type_unification (fn, explicit_targs, targs,
5876 target_arg_types, target_ret_type,
5877 DEDUCE_EXACT, -1) != 0)
5878 /* Argument deduction failed. */
5879 continue;
5881 /* Instantiate the template. */
5882 instantiation = instantiate_template (fn, targs, flags);
5883 if (instantiation == error_mark_node)
5884 /* Instantiation failed. */
5885 continue;
5887 /* See if there's a match. */
5888 instantiation_type = TREE_TYPE (instantiation);
5889 if (is_ptrmem)
5890 instantiation_type =
5891 build_ptrmemfunc_type (build_pointer_type (instantiation_type));
5892 else if (!is_reference)
5893 instantiation_type = build_pointer_type (instantiation_type);
5894 if (can_convert_arg (target_type, instantiation_type, instantiation))
5895 matches = tree_cons (instantiation, fn, matches);
5898 /* Now, remove all but the most specialized of the matches. */
5899 if (matches)
5901 tree match = most_specialized_instantiation (matches);
5903 if (match != error_mark_node)
5904 matches = tree_cons (match, NULL_TREE, NULL_TREE);
5908 /* Now we should have exactly one function in MATCHES. */
5909 if (matches == NULL_TREE)
5911 /* There were *no* matches. */
5912 if (flags & tf_error)
5914 error ("no matches converting function `%D' to type `%#T'",
5915 DECL_NAME (OVL_FUNCTION (overload)),
5916 target_type);
5918 /* print_candidates expects a chain with the functions in
5919 TREE_VALUE slots, so we cons one up here (we're losing anyway,
5920 so why be clever?). */
5921 for (; overload; overload = OVL_NEXT (overload))
5922 matches = tree_cons (NULL_TREE, OVL_CURRENT (overload),
5923 matches);
5925 print_candidates (matches);
5927 return error_mark_node;
5929 else if (TREE_CHAIN (matches))
5931 /* There were too many matches. */
5933 if (flags & tf_error)
5935 tree match;
5937 error ("converting overloaded function `%D' to type `%#T' is ambiguous",
5938 DECL_NAME (OVL_FUNCTION (overload)),
5939 target_type);
5941 /* Since print_candidates expects the functions in the
5942 TREE_VALUE slot, we flip them here. */
5943 for (match = matches; match; match = TREE_CHAIN (match))
5944 TREE_VALUE (match) = TREE_PURPOSE (match);
5946 print_candidates (matches);
5949 return error_mark_node;
5952 /* Good, exactly one match. Now, convert it to the correct type. */
5953 fn = TREE_PURPOSE (matches);
5955 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
5956 && !(flags & tf_ptrmem_ok) && !flag_ms_extensions)
5958 static int explained;
5960 if (!(flags & tf_error))
5961 return error_mark_node;
5963 pedwarn ("assuming pointer to member `%D'", fn);
5964 if (!explained)
5966 pedwarn ("(a pointer to member can only be formed with `&%E')", fn);
5967 explained = 1;
5971 /* If we're doing overload resolution purely for the purpose of
5972 determining conversion sequences, we should not consider the
5973 function used. If this conversion sequence is selected, the
5974 function will be marked as used at this point. */
5975 if (!(flags & tf_conv))
5976 mark_used (fn);
5978 if (TYPE_PTRFN_P (target_type) || TYPE_PTRMEMFUNC_P (target_type))
5979 return build_unary_op (ADDR_EXPR, fn, 0);
5980 else
5982 /* The target must be a REFERENCE_TYPE. Above, build_unary_op
5983 will mark the function as addressed, but here we must do it
5984 explicitly. */
5985 cxx_mark_addressable (fn);
5987 return fn;
5991 /* This function will instantiate the type of the expression given in
5992 RHS to match the type of LHSTYPE. If errors exist, then return
5993 error_mark_node. FLAGS is a bit mask. If TF_ERROR is set, then
5994 we complain on errors. If we are not complaining, never modify rhs,
5995 as overload resolution wants to try many possible instantiations, in
5996 the hope that at least one will work.
5998 For non-recursive calls, LHSTYPE should be a function, pointer to
5999 function, or a pointer to member function. */
6001 tree
6002 instantiate_type (tree lhstype, tree rhs, tsubst_flags_t flags)
6004 tsubst_flags_t flags_in = flags;
6006 flags &= ~tf_ptrmem_ok;
6008 if (TREE_CODE (lhstype) == UNKNOWN_TYPE)
6010 if (flags & tf_error)
6011 error ("not enough type information");
6012 return error_mark_node;
6015 if (TREE_TYPE (rhs) != NULL_TREE && ! (type_unknown_p (rhs)))
6017 if (same_type_p (lhstype, TREE_TYPE (rhs)))
6018 return rhs;
6019 if (flag_ms_extensions
6020 && TYPE_PTRMEMFUNC_P (lhstype)
6021 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (rhs)))
6022 /* Microsoft allows `A::f' to be resolved to a
6023 pointer-to-member. */
6025 else
6027 if (flags & tf_error)
6028 error ("argument of type `%T' does not match `%T'",
6029 TREE_TYPE (rhs), lhstype);
6030 return error_mark_node;
6034 if (TREE_CODE (rhs) == BASELINK)
6035 rhs = BASELINK_FUNCTIONS (rhs);
6037 /* We don't overwrite rhs if it is an overloaded function.
6038 Copying it would destroy the tree link. */
6039 if (TREE_CODE (rhs) != OVERLOAD)
6040 rhs = copy_node (rhs);
6042 /* This should really only be used when attempting to distinguish
6043 what sort of a pointer to function we have. For now, any
6044 arithmetic operation which is not supported on pointers
6045 is rejected as an error. */
6047 switch (TREE_CODE (rhs))
6049 case TYPE_EXPR:
6050 case CONVERT_EXPR:
6051 case SAVE_EXPR:
6052 case CONSTRUCTOR:
6053 case BUFFER_REF:
6054 abort ();
6055 return error_mark_node;
6057 case INDIRECT_REF:
6058 case ARRAY_REF:
6060 tree new_rhs;
6062 new_rhs = instantiate_type (build_pointer_type (lhstype),
6063 TREE_OPERAND (rhs, 0), flags);
6064 if (new_rhs == error_mark_node)
6065 return error_mark_node;
6067 TREE_TYPE (rhs) = lhstype;
6068 TREE_OPERAND (rhs, 0) = new_rhs;
6069 return rhs;
6072 case NOP_EXPR:
6073 rhs = copy_node (TREE_OPERAND (rhs, 0));
6074 TREE_TYPE (rhs) = unknown_type_node;
6075 return instantiate_type (lhstype, rhs, flags);
6077 case COMPONENT_REF:
6079 tree addr = instantiate_type (lhstype, TREE_OPERAND (rhs, 1), flags);
6081 if (addr != error_mark_node
6082 && TREE_SIDE_EFFECTS (TREE_OPERAND (rhs, 0)))
6083 /* Do not lose object's side effects. */
6084 addr = build (COMPOUND_EXPR, TREE_TYPE (addr),
6085 TREE_OPERAND (rhs, 0), addr);
6086 return addr;
6089 case OFFSET_REF:
6090 rhs = TREE_OPERAND (rhs, 1);
6091 if (BASELINK_P (rhs))
6092 return instantiate_type (lhstype, BASELINK_FUNCTIONS (rhs), flags_in);
6094 /* This can happen if we are forming a pointer-to-member for a
6095 member template. */
6096 my_friendly_assert (TREE_CODE (rhs) == TEMPLATE_ID_EXPR, 0);
6098 /* Fall through. */
6100 case TEMPLATE_ID_EXPR:
6102 tree fns = TREE_OPERAND (rhs, 0);
6103 tree args = TREE_OPERAND (rhs, 1);
6105 return
6106 resolve_address_of_overloaded_function (lhstype, fns, flags_in,
6107 /*template_only=*/true,
6108 args);
6111 case OVERLOAD:
6112 case FUNCTION_DECL:
6113 return
6114 resolve_address_of_overloaded_function (lhstype, rhs, flags_in,
6115 /*template_only=*/false,
6116 /*explicit_targs=*/NULL_TREE);
6118 case TREE_LIST:
6119 /* Now we should have a baselink. */
6120 my_friendly_assert (BASELINK_P (rhs), 990412);
6122 return instantiate_type (lhstype, BASELINK_FUNCTIONS (rhs), flags);
6124 case CALL_EXPR:
6125 /* This is too hard for now. */
6126 abort ();
6127 return error_mark_node;
6129 case PLUS_EXPR:
6130 case MINUS_EXPR:
6131 case COMPOUND_EXPR:
6132 TREE_OPERAND (rhs, 0)
6133 = instantiate_type (lhstype, TREE_OPERAND (rhs, 0), flags);
6134 if (TREE_OPERAND (rhs, 0) == error_mark_node)
6135 return error_mark_node;
6136 TREE_OPERAND (rhs, 1)
6137 = instantiate_type (lhstype, TREE_OPERAND (rhs, 1), flags);
6138 if (TREE_OPERAND (rhs, 1) == error_mark_node)
6139 return error_mark_node;
6141 TREE_TYPE (rhs) = lhstype;
6142 return rhs;
6144 case MULT_EXPR:
6145 case TRUNC_DIV_EXPR:
6146 case FLOOR_DIV_EXPR:
6147 case CEIL_DIV_EXPR:
6148 case ROUND_DIV_EXPR:
6149 case RDIV_EXPR:
6150 case TRUNC_MOD_EXPR:
6151 case FLOOR_MOD_EXPR:
6152 case CEIL_MOD_EXPR:
6153 case ROUND_MOD_EXPR:
6154 case FIX_ROUND_EXPR:
6155 case FIX_FLOOR_EXPR:
6156 case FIX_CEIL_EXPR:
6157 case FIX_TRUNC_EXPR:
6158 case FLOAT_EXPR:
6159 case NEGATE_EXPR:
6160 case ABS_EXPR:
6161 case MAX_EXPR:
6162 case MIN_EXPR:
6164 case BIT_AND_EXPR:
6165 case BIT_IOR_EXPR:
6166 case BIT_XOR_EXPR:
6167 case LSHIFT_EXPR:
6168 case RSHIFT_EXPR:
6169 case LROTATE_EXPR:
6170 case RROTATE_EXPR:
6172 case PREINCREMENT_EXPR:
6173 case PREDECREMENT_EXPR:
6174 case POSTINCREMENT_EXPR:
6175 case POSTDECREMENT_EXPR:
6176 if (flags & tf_error)
6177 error ("invalid operation on uninstantiated type");
6178 return error_mark_node;
6180 case TRUTH_AND_EXPR:
6181 case TRUTH_OR_EXPR:
6182 case TRUTH_XOR_EXPR:
6183 case LT_EXPR:
6184 case LE_EXPR:
6185 case GT_EXPR:
6186 case GE_EXPR:
6187 case EQ_EXPR:
6188 case NE_EXPR:
6189 case TRUTH_ANDIF_EXPR:
6190 case TRUTH_ORIF_EXPR:
6191 case TRUTH_NOT_EXPR:
6192 if (flags & tf_error)
6193 error ("not enough type information");
6194 return error_mark_node;
6196 case COND_EXPR:
6197 if (type_unknown_p (TREE_OPERAND (rhs, 0)))
6199 if (flags & tf_error)
6200 error ("not enough type information");
6201 return error_mark_node;
6203 TREE_OPERAND (rhs, 1)
6204 = instantiate_type (lhstype, TREE_OPERAND (rhs, 1), flags);
6205 if (TREE_OPERAND (rhs, 1) == error_mark_node)
6206 return error_mark_node;
6207 TREE_OPERAND (rhs, 2)
6208 = instantiate_type (lhstype, TREE_OPERAND (rhs, 2), flags);
6209 if (TREE_OPERAND (rhs, 2) == error_mark_node)
6210 return error_mark_node;
6212 TREE_TYPE (rhs) = lhstype;
6213 return rhs;
6215 case MODIFY_EXPR:
6216 TREE_OPERAND (rhs, 1)
6217 = instantiate_type (lhstype, TREE_OPERAND (rhs, 1), flags);
6218 if (TREE_OPERAND (rhs, 1) == error_mark_node)
6219 return error_mark_node;
6221 TREE_TYPE (rhs) = lhstype;
6222 return rhs;
6224 case ADDR_EXPR:
6226 if (PTRMEM_OK_P (rhs))
6227 flags |= tf_ptrmem_ok;
6229 return instantiate_type (lhstype, TREE_OPERAND (rhs, 0), flags);
6231 case ENTRY_VALUE_EXPR:
6232 abort ();
6233 return error_mark_node;
6235 case ERROR_MARK:
6236 return error_mark_node;
6238 default:
6239 abort ();
6240 return error_mark_node;
6244 /* Return the name of the virtual function pointer field
6245 (as an IDENTIFIER_NODE) for the given TYPE. Note that
6246 this may have to look back through base types to find the
6247 ultimate field name. (For single inheritance, these could
6248 all be the same name. Who knows for multiple inheritance). */
6250 static tree
6251 get_vfield_name (tree type)
6253 tree binfo = TYPE_BINFO (type);
6254 char *buf;
6256 while (BINFO_BASETYPES (binfo)
6257 && TYPE_CONTAINS_VPTR_P (BINFO_TYPE (BINFO_BASETYPE (binfo, 0)))
6258 && ! TREE_VIA_VIRTUAL (BINFO_BASETYPE (binfo, 0)))
6259 binfo = BINFO_BASETYPE (binfo, 0);
6261 type = BINFO_TYPE (binfo);
6262 buf = alloca (sizeof (VFIELD_NAME_FORMAT) + TYPE_NAME_LENGTH (type) + 2);
6263 sprintf (buf, VFIELD_NAME_FORMAT,
6264 IDENTIFIER_POINTER (constructor_name (type)));
6265 return get_identifier (buf);
6268 void
6269 print_class_statistics (void)
6271 #ifdef GATHER_STATISTICS
6272 fprintf (stderr, "convert_harshness = %d\n", n_convert_harshness);
6273 fprintf (stderr, "compute_conversion_costs = %d\n", n_compute_conversion_costs);
6274 if (n_vtables)
6276 fprintf (stderr, "vtables = %d; vtable searches = %d\n",
6277 n_vtables, n_vtable_searches);
6278 fprintf (stderr, "vtable entries = %d; vtable elems = %d\n",
6279 n_vtable_entries, n_vtable_elems);
6281 #endif
6284 /* Build a dummy reference to ourselves so Derived::Base (and A::A) works,
6285 according to [class]:
6286 The class-name is also inserted
6287 into the scope of the class itself. For purposes of access checking,
6288 the inserted class name is treated as if it were a public member name. */
6290 void
6291 build_self_reference (void)
6293 tree name = constructor_name (current_class_type);
6294 tree value = build_lang_decl (TYPE_DECL, name, current_class_type);
6295 tree saved_cas;
6297 DECL_NONLOCAL (value) = 1;
6298 DECL_CONTEXT (value) = current_class_type;
6299 DECL_ARTIFICIAL (value) = 1;
6300 SET_DECL_SELF_REFERENCE_P (value);
6302 if (processing_template_decl)
6303 value = push_template_decl (value);
6305 saved_cas = current_access_specifier;
6306 current_access_specifier = access_public_node;
6307 finish_member_declaration (value);
6308 current_access_specifier = saved_cas;
6311 /* Returns 1 if TYPE contains only padding bytes. */
6314 is_empty_class (tree type)
6316 if (type == error_mark_node)
6317 return 0;
6319 if (! IS_AGGR_TYPE (type))
6320 return 0;
6322 /* In G++ 3.2, whether or not a class was empty was determined by
6323 looking at its size. */
6324 if (abi_version_at_least (2))
6325 return CLASSTYPE_EMPTY_P (type);
6326 else
6327 return integer_zerop (CLASSTYPE_SIZE (type));
6330 /* Returns true if TYPE contains an empty class. */
6332 static bool
6333 contains_empty_class_p (tree type)
6335 if (is_empty_class (type))
6336 return true;
6337 if (CLASS_TYPE_P (type))
6339 tree field;
6340 int i;
6342 for (i = 0; i < CLASSTYPE_N_BASECLASSES (type); ++i)
6343 if (contains_empty_class_p (TYPE_BINFO_BASETYPE (type, i)))
6344 return true;
6345 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
6346 if (TREE_CODE (field) == FIELD_DECL
6347 && !DECL_ARTIFICIAL (field)
6348 && is_empty_class (TREE_TYPE (field)))
6349 return true;
6351 else if (TREE_CODE (type) == ARRAY_TYPE)
6352 return contains_empty_class_p (TREE_TYPE (type));
6353 return false;
6356 /* Find the enclosing class of the given NODE. NODE can be a *_DECL or
6357 a *_TYPE node. NODE can also be a local class. */
6359 tree
6360 get_enclosing_class (tree type)
6362 tree node = type;
6364 while (node && TREE_CODE (node) != NAMESPACE_DECL)
6366 switch (TREE_CODE_CLASS (TREE_CODE (node)))
6368 case 'd':
6369 node = DECL_CONTEXT (node);
6370 break;
6372 case 't':
6373 if (node != type)
6374 return node;
6375 node = TYPE_CONTEXT (node);
6376 break;
6378 default:
6379 abort ();
6382 return NULL_TREE;
6385 /* Note that NAME was looked up while the current class was being
6386 defined and that the result of that lookup was DECL. */
6388 void
6389 maybe_note_name_used_in_class (tree name, tree decl)
6391 splay_tree names_used;
6393 /* If we're not defining a class, there's nothing to do. */
6394 if (innermost_scope_kind() != sk_class)
6395 return;
6397 /* If there's already a binding for this NAME, then we don't have
6398 anything to worry about. */
6399 if (IDENTIFIER_CLASS_VALUE (name))
6400 return;
6402 if (!current_class_stack[current_class_depth - 1].names_used)
6403 current_class_stack[current_class_depth - 1].names_used
6404 = splay_tree_new (splay_tree_compare_pointers, 0, 0);
6405 names_used = current_class_stack[current_class_depth - 1].names_used;
6407 splay_tree_insert (names_used,
6408 (splay_tree_key) name,
6409 (splay_tree_value) decl);
6412 /* Note that NAME was declared (as DECL) in the current class. Check
6413 to see that the declaration is valid. */
6415 void
6416 note_name_declared_in_class (tree name, tree decl)
6418 splay_tree names_used;
6419 splay_tree_node n;
6421 /* Look to see if we ever used this name. */
6422 names_used
6423 = current_class_stack[current_class_depth - 1].names_used;
6424 if (!names_used)
6425 return;
6427 n = splay_tree_lookup (names_used, (splay_tree_key) name);
6428 if (n)
6430 /* [basic.scope.class]
6432 A name N used in a class S shall refer to the same declaration
6433 in its context and when re-evaluated in the completed scope of
6434 S. */
6435 error ("declaration of `%#D'", decl);
6436 cp_error_at ("changes meaning of `%D' from `%+#D'",
6437 DECL_NAME (OVL_CURRENT (decl)),
6438 (tree) n->value);
6442 /* Returns the VAR_DECL for the complete vtable associated with BINFO.
6443 Secondary vtables are merged with primary vtables; this function
6444 will return the VAR_DECL for the primary vtable. */
6446 tree
6447 get_vtbl_decl_for_binfo (tree binfo)
6449 tree decl;
6451 decl = BINFO_VTABLE (binfo);
6452 if (decl && TREE_CODE (decl) == PLUS_EXPR)
6454 my_friendly_assert (TREE_CODE (TREE_OPERAND (decl, 0)) == ADDR_EXPR,
6455 2000403);
6456 decl = TREE_OPERAND (TREE_OPERAND (decl, 0), 0);
6458 if (decl)
6459 my_friendly_assert (TREE_CODE (decl) == VAR_DECL, 20000403);
6460 return decl;
6464 /* Returns the binfo for the primary base of BINFO. If the resulting
6465 BINFO is a virtual base, and it is inherited elsewhere in the
6466 hierarchy, then the returned binfo might not be the primary base of
6467 BINFO in the complete object. Check BINFO_PRIMARY_P or
6468 BINFO_LOST_PRIMARY_P to be sure. */
6470 tree
6471 get_primary_binfo (tree binfo)
6473 tree primary_base;
6474 tree result;
6476 primary_base = CLASSTYPE_PRIMARY_BINFO (BINFO_TYPE (binfo));
6477 if (!primary_base)
6478 return NULL_TREE;
6480 result = copied_binfo (primary_base, binfo);
6481 return result;
6484 /* If INDENTED_P is zero, indent to INDENT. Return nonzero. */
6486 static int
6487 maybe_indent_hierarchy (FILE * stream, int indent, int indented_p)
6489 if (!indented_p)
6490 fprintf (stream, "%*s", indent, "");
6491 return 1;
6494 /* Dump the offsets of all the bases rooted at BINFO to STREAM.
6495 INDENT should be zero when called from the top level; it is
6496 incremented recursively. IGO indicates the next expected BINFO in
6497 inheritance graph ordering. */
6499 static tree
6500 dump_class_hierarchy_r (FILE *stream,
6501 int flags,
6502 tree binfo,
6503 tree igo,
6504 int indent)
6506 int indented = 0;
6507 tree base_binfos;
6509 indented = maybe_indent_hierarchy (stream, indent, 0);
6510 fprintf (stream, "%s (0x%lx) ",
6511 type_as_string (binfo, TFF_PLAIN_IDENTIFIER),
6512 (unsigned long) binfo);
6513 if (binfo != igo)
6515 fprintf (stream, "alternative-path\n");
6516 return igo;
6518 igo = TREE_CHAIN (binfo);
6520 fprintf (stream, HOST_WIDE_INT_PRINT_DEC,
6521 tree_low_cst (BINFO_OFFSET (binfo), 0));
6522 if (is_empty_class (BINFO_TYPE (binfo)))
6523 fprintf (stream, " empty");
6524 else if (CLASSTYPE_NEARLY_EMPTY_P (BINFO_TYPE (binfo)))
6525 fprintf (stream, " nearly-empty");
6526 if (TREE_VIA_VIRTUAL (binfo))
6527 fprintf (stream, " virtual");
6528 fprintf (stream, "\n");
6530 indented = 0;
6531 if (BINFO_PRIMARY_BASE_OF (binfo))
6533 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6534 fprintf (stream, " primary-for %s (0x%lx)",
6535 type_as_string (BINFO_PRIMARY_BASE_OF (binfo),
6536 TFF_PLAIN_IDENTIFIER),
6537 (unsigned long)BINFO_PRIMARY_BASE_OF (binfo));
6539 if (BINFO_LOST_PRIMARY_P (binfo))
6541 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6542 fprintf (stream, " lost-primary");
6544 if (indented)
6545 fprintf (stream, "\n");
6547 if (!(flags & TDF_SLIM))
6549 int indented = 0;
6551 if (BINFO_SUBVTT_INDEX (binfo))
6553 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6554 fprintf (stream, " subvttidx=%s",
6555 expr_as_string (BINFO_SUBVTT_INDEX (binfo),
6556 TFF_PLAIN_IDENTIFIER));
6558 if (BINFO_VPTR_INDEX (binfo))
6560 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6561 fprintf (stream, " vptridx=%s",
6562 expr_as_string (BINFO_VPTR_INDEX (binfo),
6563 TFF_PLAIN_IDENTIFIER));
6565 if (BINFO_VPTR_FIELD (binfo))
6567 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6568 fprintf (stream, " vbaseoffset=%s",
6569 expr_as_string (BINFO_VPTR_FIELD (binfo),
6570 TFF_PLAIN_IDENTIFIER));
6572 if (BINFO_VTABLE (binfo))
6574 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6575 fprintf (stream, " vptr=%s",
6576 expr_as_string (BINFO_VTABLE (binfo),
6577 TFF_PLAIN_IDENTIFIER));
6580 if (indented)
6581 fprintf (stream, "\n");
6584 base_binfos = BINFO_BASETYPES (binfo);
6585 if (base_binfos)
6587 int ix, n;
6589 n = TREE_VEC_LENGTH (base_binfos);
6590 for (ix = 0; ix != n; ix++)
6592 tree base_binfo = TREE_VEC_ELT (base_binfos, ix);
6594 igo = dump_class_hierarchy_r (stream, flags, base_binfo,
6595 igo, indent + 2);
6599 return igo;
6602 /* Dump the BINFO hierarchy for T. */
6604 static void
6605 dump_class_hierarchy_1 (FILE *stream, int flags, tree t)
6607 fprintf (stream, "Class %s\n", type_as_string (t, TFF_PLAIN_IDENTIFIER));
6608 fprintf (stream, " size=%lu align=%lu\n",
6609 (unsigned long)(tree_low_cst (TYPE_SIZE (t), 0) / BITS_PER_UNIT),
6610 (unsigned long)(TYPE_ALIGN (t) / BITS_PER_UNIT));
6611 fprintf (stream, " base size=%lu base align=%lu\n",
6612 (unsigned long)(tree_low_cst (TYPE_SIZE (CLASSTYPE_AS_BASE (t)), 0)
6613 / BITS_PER_UNIT),
6614 (unsigned long)(TYPE_ALIGN (CLASSTYPE_AS_BASE (t))
6615 / BITS_PER_UNIT));
6616 dump_class_hierarchy_r (stream, flags, TYPE_BINFO (t), TYPE_BINFO (t), 0);
6617 fprintf (stream, "\n");
6620 /* Debug interface to hierarchy dumping. */
6622 extern void
6623 debug_class (tree t)
6625 dump_class_hierarchy_1 (stderr, TDF_SLIM, t);
6628 static void
6629 dump_class_hierarchy (tree t)
6631 int flags;
6632 FILE *stream = dump_begin (TDI_class, &flags);
6634 if (stream)
6636 dump_class_hierarchy_1 (stream, flags, t);
6637 dump_end (TDI_class, stream);
6641 static void
6642 dump_array (FILE * stream, tree decl)
6644 tree inits;
6645 int ix;
6646 HOST_WIDE_INT elt;
6647 tree size = TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (decl)));
6649 elt = (tree_low_cst (TYPE_SIZE (TREE_TYPE (TREE_TYPE (decl))), 0)
6650 / BITS_PER_UNIT);
6651 fprintf (stream, "%s:", decl_as_string (decl, TFF_PLAIN_IDENTIFIER));
6652 fprintf (stream, " %s entries",
6653 expr_as_string (size_binop (PLUS_EXPR, size, size_one_node),
6654 TFF_PLAIN_IDENTIFIER));
6655 fprintf (stream, "\n");
6657 for (ix = 0, inits = CONSTRUCTOR_ELTS (DECL_INITIAL (decl));
6658 inits; ix++, inits = TREE_CHAIN (inits))
6659 fprintf (stream, "%-4ld %s\n", (long)(ix * elt),
6660 expr_as_string (TREE_VALUE (inits), TFF_PLAIN_IDENTIFIER));
6663 static void
6664 dump_vtable (tree t, tree binfo, tree vtable)
6666 int flags;
6667 FILE *stream = dump_begin (TDI_class, &flags);
6669 if (!stream)
6670 return;
6672 if (!(flags & TDF_SLIM))
6674 int ctor_vtbl_p = TYPE_BINFO (t) != binfo;
6676 fprintf (stream, "%s for %s",
6677 ctor_vtbl_p ? "Construction vtable" : "Vtable",
6678 type_as_string (binfo, TFF_PLAIN_IDENTIFIER));
6679 if (ctor_vtbl_p)
6681 if (!TREE_VIA_VIRTUAL (binfo))
6682 fprintf (stream, " (0x%lx instance)", (unsigned long)binfo);
6683 fprintf (stream, " in %s", type_as_string (t, TFF_PLAIN_IDENTIFIER));
6685 fprintf (stream, "\n");
6686 dump_array (stream, vtable);
6687 fprintf (stream, "\n");
6690 dump_end (TDI_class, stream);
6693 static void
6694 dump_vtt (tree t, tree vtt)
6696 int flags;
6697 FILE *stream = dump_begin (TDI_class, &flags);
6699 if (!stream)
6700 return;
6702 if (!(flags & TDF_SLIM))
6704 fprintf (stream, "VTT for %s\n",
6705 type_as_string (t, TFF_PLAIN_IDENTIFIER));
6706 dump_array (stream, vtt);
6707 fprintf (stream, "\n");
6710 dump_end (TDI_class, stream);
6713 /* Dump a function or thunk and its thunkees. */
6715 static void
6716 dump_thunk (FILE *stream, int indent, tree thunk)
6718 static const char spaces[] = " ";
6719 tree name = DECL_NAME (thunk);
6720 tree thunks;
6722 fprintf (stream, "%.*s%p %s %s", indent, spaces,
6723 (void *)thunk,
6724 !DECL_THUNK_P (thunk) ? "function"
6725 : DECL_THIS_THUNK_P (thunk) ? "this-thunk" : "covariant-thunk",
6726 name ? IDENTIFIER_POINTER (name) : "<unset>");
6727 if (DECL_THUNK_P (thunk))
6729 HOST_WIDE_INT fixed_adjust = THUNK_FIXED_OFFSET (thunk);
6730 tree virtual_adjust = THUNK_VIRTUAL_OFFSET (thunk);
6732 fprintf (stream, " fixed=" HOST_WIDE_INT_PRINT_DEC, fixed_adjust);
6733 if (!virtual_adjust)
6734 /*NOP*/;
6735 else if (DECL_THIS_THUNK_P (thunk))
6736 fprintf (stream, " vcall=" HOST_WIDE_INT_PRINT_DEC,
6737 tree_low_cst (virtual_adjust, 0));
6738 else
6739 fprintf (stream, " vbase=" HOST_WIDE_INT_PRINT_DEC "(%s)",
6740 tree_low_cst (BINFO_VPTR_FIELD (virtual_adjust), 0),
6741 type_as_string (BINFO_TYPE (virtual_adjust), TFF_SCOPE));
6742 if (THUNK_ALIAS (thunk))
6743 fprintf (stream, " alias to %p", (void *)THUNK_ALIAS (thunk));
6745 fprintf (stream, "\n");
6746 for (thunks = DECL_THUNKS (thunk); thunks; thunks = TREE_CHAIN (thunks))
6747 dump_thunk (stream, indent + 2, thunks);
6750 /* Dump the thunks for FN. */
6752 extern void
6753 debug_thunks (tree fn)
6755 dump_thunk (stderr, 0, fn);
6758 /* Virtual function table initialization. */
6760 /* Create all the necessary vtables for T and its base classes. */
6762 static void
6763 finish_vtbls (tree t)
6765 tree list;
6766 tree vbase;
6768 /* We lay out the primary and secondary vtables in one contiguous
6769 vtable. The primary vtable is first, followed by the non-virtual
6770 secondary vtables in inheritance graph order. */
6771 list = build_tree_list (TYPE_BINFO_VTABLE (t), NULL_TREE);
6772 accumulate_vtbl_inits (TYPE_BINFO (t), TYPE_BINFO (t),
6773 TYPE_BINFO (t), t, list);
6775 /* Then come the virtual bases, also in inheritance graph order. */
6776 for (vbase = TYPE_BINFO (t); vbase; vbase = TREE_CHAIN (vbase))
6778 if (!TREE_VIA_VIRTUAL (vbase))
6779 continue;
6780 accumulate_vtbl_inits (vbase, vbase, TYPE_BINFO (t), t, list);
6783 if (TYPE_BINFO_VTABLE (t))
6784 initialize_vtable (TYPE_BINFO (t), TREE_VALUE (list));
6787 /* Initialize the vtable for BINFO with the INITS. */
6789 static void
6790 initialize_vtable (tree binfo, tree inits)
6792 tree decl;
6794 layout_vtable_decl (binfo, list_length (inits));
6795 decl = get_vtbl_decl_for_binfo (binfo);
6796 initialize_array (decl, inits);
6797 dump_vtable (BINFO_TYPE (binfo), binfo, decl);
6800 /* Initialize DECL (a declaration for a namespace-scope array) with
6801 the INITS. */
6803 static void
6804 initialize_array (tree decl, tree inits)
6806 tree context;
6808 context = DECL_CONTEXT (decl);
6809 DECL_CONTEXT (decl) = NULL_TREE;
6810 DECL_INITIAL (decl) = build_constructor (NULL_TREE, inits);
6811 TREE_HAS_CONSTRUCTOR (DECL_INITIAL (decl)) = 1;
6812 cp_finish_decl (decl, DECL_INITIAL (decl), NULL_TREE, 0);
6813 DECL_CONTEXT (decl) = context;
6816 /* Build the VTT (virtual table table) for T.
6817 A class requires a VTT if it has virtual bases.
6819 This holds
6820 1 - primary virtual pointer for complete object T
6821 2 - secondary VTTs for each direct non-virtual base of T which requires a
6823 3 - secondary virtual pointers for each direct or indirect base of T which
6824 has virtual bases or is reachable via a virtual path from T.
6825 4 - secondary VTTs for each direct or indirect virtual base of T.
6827 Secondary VTTs look like complete object VTTs without part 4. */
6829 static void
6830 build_vtt (tree t)
6832 tree inits;
6833 tree type;
6834 tree vtt;
6835 tree index;
6837 /* Build up the initializers for the VTT. */
6838 inits = NULL_TREE;
6839 index = size_zero_node;
6840 build_vtt_inits (TYPE_BINFO (t), t, &inits, &index);
6842 /* If we didn't need a VTT, we're done. */
6843 if (!inits)
6844 return;
6846 /* Figure out the type of the VTT. */
6847 type = build_index_type (size_int (list_length (inits) - 1));
6848 type = build_cplus_array_type (const_ptr_type_node, type);
6850 /* Now, build the VTT object itself. */
6851 vtt = build_vtable (t, get_vtt_name (t), type);
6852 initialize_array (vtt, inits);
6853 /* Add the VTT to the vtables list. */
6854 TREE_CHAIN (vtt) = TREE_CHAIN (CLASSTYPE_VTABLES (t));
6855 TREE_CHAIN (CLASSTYPE_VTABLES (t)) = vtt;
6857 dump_vtt (t, vtt);
6860 /* When building a secondary VTT, BINFO_VTABLE is set to a TREE_LIST with
6861 PURPOSE the RTTI_BINFO, VALUE the real vtable pointer for this binfo,
6862 and CHAIN the vtable pointer for this binfo after construction is
6863 complete. VALUE can also be another BINFO, in which case we recurse. */
6865 static tree
6866 binfo_ctor_vtable (tree binfo)
6868 tree vt;
6870 while (1)
6872 vt = BINFO_VTABLE (binfo);
6873 if (TREE_CODE (vt) == TREE_LIST)
6874 vt = TREE_VALUE (vt);
6875 if (TREE_CODE (vt) == TREE_VEC)
6876 binfo = vt;
6877 else
6878 break;
6881 return vt;
6884 /* Recursively build the VTT-initializer for BINFO (which is in the
6885 hierarchy dominated by T). INITS points to the end of the initializer
6886 list to date. INDEX is the VTT index where the next element will be
6887 replaced. Iff BINFO is the binfo for T, this is the top level VTT (i.e.
6888 not a subvtt for some base of T). When that is so, we emit the sub-VTTs
6889 for virtual bases of T. When it is not so, we build the constructor
6890 vtables for the BINFO-in-T variant. */
6892 static tree *
6893 build_vtt_inits (tree binfo, tree t, tree* inits, tree* index)
6895 int i;
6896 tree b;
6897 tree init;
6898 tree secondary_vptrs;
6899 int top_level_p = same_type_p (TREE_TYPE (binfo), t);
6901 /* We only need VTTs for subobjects with virtual bases. */
6902 if (!TYPE_USES_VIRTUAL_BASECLASSES (BINFO_TYPE (binfo)))
6903 return inits;
6905 /* We need to use a construction vtable if this is not the primary
6906 VTT. */
6907 if (!top_level_p)
6909 build_ctor_vtbl_group (binfo, t);
6911 /* Record the offset in the VTT where this sub-VTT can be found. */
6912 BINFO_SUBVTT_INDEX (binfo) = *index;
6915 /* Add the address of the primary vtable for the complete object. */
6916 init = binfo_ctor_vtable (binfo);
6917 *inits = build_tree_list (NULL_TREE, init);
6918 inits = &TREE_CHAIN (*inits);
6919 if (top_level_p)
6921 my_friendly_assert (!BINFO_VPTR_INDEX (binfo), 20010129);
6922 BINFO_VPTR_INDEX (binfo) = *index;
6924 *index = size_binop (PLUS_EXPR, *index, TYPE_SIZE_UNIT (ptr_type_node));
6926 /* Recursively add the secondary VTTs for non-virtual bases. */
6927 for (i = 0; i < BINFO_N_BASETYPES (binfo); ++i)
6929 b = BINFO_BASETYPE (binfo, i);
6930 if (!TREE_VIA_VIRTUAL (b))
6931 inits = build_vtt_inits (BINFO_BASETYPE (binfo, i), t,
6932 inits, index);
6935 /* Add secondary virtual pointers for all subobjects of BINFO with
6936 either virtual bases or reachable along a virtual path, except
6937 subobjects that are non-virtual primary bases. */
6938 secondary_vptrs = tree_cons (t, NULL_TREE, BINFO_TYPE (binfo));
6939 TREE_TYPE (secondary_vptrs) = *index;
6940 VTT_TOP_LEVEL_P (secondary_vptrs) = top_level_p;
6941 VTT_MARKED_BINFO_P (secondary_vptrs) = 0;
6943 dfs_walk_real (binfo,
6944 dfs_build_secondary_vptr_vtt_inits,
6945 NULL,
6946 dfs_ctor_vtable_bases_queue_p,
6947 secondary_vptrs);
6948 VTT_MARKED_BINFO_P (secondary_vptrs) = 1;
6949 dfs_walk (binfo, dfs_unmark, dfs_ctor_vtable_bases_queue_p,
6950 secondary_vptrs);
6952 *index = TREE_TYPE (secondary_vptrs);
6954 /* The secondary vptrs come back in reverse order. After we reverse
6955 them, and add the INITS, the last init will be the first element
6956 of the chain. */
6957 secondary_vptrs = TREE_VALUE (secondary_vptrs);
6958 if (secondary_vptrs)
6960 *inits = nreverse (secondary_vptrs);
6961 inits = &TREE_CHAIN (secondary_vptrs);
6962 my_friendly_assert (*inits == NULL_TREE, 20000517);
6965 /* Add the secondary VTTs for virtual bases. */
6966 if (top_level_p)
6967 for (b = TYPE_BINFO (BINFO_TYPE (binfo)); b; b = TREE_CHAIN (b))
6969 if (!TREE_VIA_VIRTUAL (b))
6970 continue;
6972 inits = build_vtt_inits (b, t, inits, index);
6975 if (!top_level_p)
6977 tree data = tree_cons (t, binfo, NULL_TREE);
6978 VTT_TOP_LEVEL_P (data) = 0;
6979 VTT_MARKED_BINFO_P (data) = 0;
6981 dfs_walk (binfo, dfs_fixup_binfo_vtbls,
6982 dfs_ctor_vtable_bases_queue_p,
6983 data);
6986 return inits;
6989 /* Called from build_vtt_inits via dfs_walk. BINFO is the binfo
6990 for the base in most derived. DATA is a TREE_LIST who's
6991 TREE_CHAIN is the type of the base being
6992 constructed whilst this secondary vptr is live. The TREE_UNSIGNED
6993 flag of DATA indicates that this is a constructor vtable. The
6994 TREE_TOP_LEVEL flag indicates that this is the primary VTT. */
6996 static tree
6997 dfs_build_secondary_vptr_vtt_inits (tree binfo, void* data)
6999 tree l;
7000 tree t;
7001 tree init;
7002 tree index;
7003 int top_level_p;
7005 l = (tree) data;
7006 t = TREE_CHAIN (l);
7007 top_level_p = VTT_TOP_LEVEL_P (l);
7009 BINFO_MARKED (binfo) = 1;
7011 /* We don't care about bases that don't have vtables. */
7012 if (!TYPE_VFIELD (BINFO_TYPE (binfo)))
7013 return NULL_TREE;
7015 /* We're only interested in proper subobjects of T. */
7016 if (same_type_p (BINFO_TYPE (binfo), t))
7017 return NULL_TREE;
7019 /* We're not interested in non-virtual primary bases. */
7020 if (!TREE_VIA_VIRTUAL (binfo) && BINFO_PRIMARY_P (binfo))
7021 return NULL_TREE;
7023 /* If BINFO has virtual bases or is reachable via a virtual path
7024 from T, it'll have a secondary vptr. */
7025 if (!TYPE_USES_VIRTUAL_BASECLASSES (BINFO_TYPE (binfo))
7026 && !binfo_via_virtual (binfo, t))
7027 return NULL_TREE;
7029 /* Record the index where this secondary vptr can be found. */
7030 index = TREE_TYPE (l);
7031 if (top_level_p)
7033 my_friendly_assert (!BINFO_VPTR_INDEX (binfo), 20010129);
7034 BINFO_VPTR_INDEX (binfo) = index;
7036 TREE_TYPE (l) = size_binop (PLUS_EXPR, index,
7037 TYPE_SIZE_UNIT (ptr_type_node));
7039 /* Add the initializer for the secondary vptr itself. */
7040 if (top_level_p && TREE_VIA_VIRTUAL (binfo))
7042 /* It's a primary virtual base, and this is not the construction
7043 vtable. Find the base this is primary of in the inheritance graph,
7044 and use that base's vtable now. */
7045 while (BINFO_PRIMARY_BASE_OF (binfo))
7046 binfo = BINFO_PRIMARY_BASE_OF (binfo);
7048 init = binfo_ctor_vtable (binfo);
7049 TREE_VALUE (l) = tree_cons (NULL_TREE, init, TREE_VALUE (l));
7051 return NULL_TREE;
7054 /* dfs_walk_real predicate for building vtables. DATA is a TREE_LIST,
7055 VTT_MARKED_BINFO_P indicates whether marked or unmarked bases
7056 should be walked. TREE_PURPOSE is the TREE_TYPE that dominates the
7057 hierarchy. */
7059 static tree
7060 dfs_ctor_vtable_bases_queue_p (tree derived, int ix,
7061 void* data)
7063 tree binfo = BINFO_BASETYPE (derived, ix);
7065 if (!BINFO_MARKED (binfo) == VTT_MARKED_BINFO_P ((tree) data))
7066 return NULL_TREE;
7067 return binfo;
7070 /* Called from build_vtt_inits via dfs_walk. After building constructor
7071 vtables and generating the sub-vtt from them, we need to restore the
7072 BINFO_VTABLES that were scribbled on. DATA is a TREE_LIST whose
7073 TREE_VALUE is the TREE_TYPE of the base whose sub vtt was generated. */
7075 static tree
7076 dfs_fixup_binfo_vtbls (tree binfo, void* data)
7078 BINFO_MARKED (binfo) = 0;
7080 /* We don't care about bases that don't have vtables. */
7081 if (!TYPE_VFIELD (BINFO_TYPE (binfo)))
7082 return NULL_TREE;
7084 /* If we scribbled the construction vtable vptr into BINFO, clear it
7085 out now. */
7086 if (BINFO_VTABLE (binfo)
7087 && TREE_CODE (BINFO_VTABLE (binfo)) == TREE_LIST
7088 && (TREE_PURPOSE (BINFO_VTABLE (binfo))
7089 == TREE_VALUE ((tree) data)))
7090 BINFO_VTABLE (binfo) = TREE_CHAIN (BINFO_VTABLE (binfo));
7092 return NULL_TREE;
7095 /* Build the construction vtable group for BINFO which is in the
7096 hierarchy dominated by T. */
7098 static void
7099 build_ctor_vtbl_group (tree binfo, tree t)
7101 tree list;
7102 tree type;
7103 tree vtbl;
7104 tree inits;
7105 tree id;
7106 tree vbase;
7108 /* See if we've already created this construction vtable group. */
7109 id = mangle_ctor_vtbl_for_type (t, binfo);
7110 if (IDENTIFIER_GLOBAL_VALUE (id))
7111 return;
7113 my_friendly_assert (!same_type_p (BINFO_TYPE (binfo), t), 20010124);
7114 /* Build a version of VTBL (with the wrong type) for use in
7115 constructing the addresses of secondary vtables in the
7116 construction vtable group. */
7117 vtbl = build_vtable (t, id, ptr_type_node);
7118 list = build_tree_list (vtbl, NULL_TREE);
7119 accumulate_vtbl_inits (binfo, TYPE_BINFO (TREE_TYPE (binfo)),
7120 binfo, t, list);
7122 /* Add the vtables for each of our virtual bases using the vbase in T
7123 binfo. */
7124 for (vbase = TYPE_BINFO (BINFO_TYPE (binfo));
7125 vbase;
7126 vbase = TREE_CHAIN (vbase))
7128 tree b;
7130 if (!TREE_VIA_VIRTUAL (vbase))
7131 continue;
7132 b = copied_binfo (vbase, binfo);
7134 accumulate_vtbl_inits (b, vbase, binfo, t, list);
7136 inits = TREE_VALUE (list);
7138 /* Figure out the type of the construction vtable. */
7139 type = build_index_type (size_int (list_length (inits) - 1));
7140 type = build_cplus_array_type (vtable_entry_type, type);
7141 TREE_TYPE (vtbl) = type;
7143 /* Initialize the construction vtable. */
7144 CLASSTYPE_VTABLES (t) = chainon (CLASSTYPE_VTABLES (t), vtbl);
7145 initialize_array (vtbl, inits);
7146 dump_vtable (t, binfo, vtbl);
7149 /* Add the vtbl initializers for BINFO (and its bases other than
7150 non-virtual primaries) to the list of INITS. BINFO is in the
7151 hierarchy dominated by T. RTTI_BINFO is the binfo within T of
7152 the constructor the vtbl inits should be accumulated for. (If this
7153 is the complete object vtbl then RTTI_BINFO will be TYPE_BINFO (T).)
7154 ORIG_BINFO is the binfo for this object within BINFO_TYPE (RTTI_BINFO).
7155 BINFO is the active base equivalent of ORIG_BINFO in the inheritance
7156 graph of T. Both BINFO and ORIG_BINFO will have the same BINFO_TYPE,
7157 but are not necessarily the same in terms of layout. */
7159 static void
7160 accumulate_vtbl_inits (tree binfo,
7161 tree orig_binfo,
7162 tree rtti_binfo,
7163 tree t,
7164 tree inits)
7166 int i;
7167 int ctor_vtbl_p = !same_type_p (BINFO_TYPE (rtti_binfo), t);
7169 my_friendly_assert (same_type_p (BINFO_TYPE (binfo),
7170 BINFO_TYPE (orig_binfo)),
7171 20000517);
7173 /* If it doesn't have a vptr, we don't do anything. */
7174 if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
7175 return;
7177 /* If we're building a construction vtable, we're not interested in
7178 subobjects that don't require construction vtables. */
7179 if (ctor_vtbl_p
7180 && !TYPE_USES_VIRTUAL_BASECLASSES (BINFO_TYPE (binfo))
7181 && !binfo_via_virtual (orig_binfo, BINFO_TYPE (rtti_binfo)))
7182 return;
7184 /* Build the initializers for the BINFO-in-T vtable. */
7185 TREE_VALUE (inits)
7186 = chainon (TREE_VALUE (inits),
7187 dfs_accumulate_vtbl_inits (binfo, orig_binfo,
7188 rtti_binfo, t, inits));
7190 /* Walk the BINFO and its bases. We walk in preorder so that as we
7191 initialize each vtable we can figure out at what offset the
7192 secondary vtable lies from the primary vtable. We can't use
7193 dfs_walk here because we need to iterate through bases of BINFO
7194 and RTTI_BINFO simultaneously. */
7195 for (i = 0; i < BINFO_N_BASETYPES (binfo); ++i)
7197 tree base_binfo = BINFO_BASETYPE (binfo, i);
7199 /* Skip virtual bases. */
7200 if (TREE_VIA_VIRTUAL (base_binfo))
7201 continue;
7202 accumulate_vtbl_inits (base_binfo,
7203 BINFO_BASETYPE (orig_binfo, i),
7204 rtti_binfo, t,
7205 inits);
7209 /* Called from accumulate_vtbl_inits. Returns the initializers for
7210 the BINFO vtable. */
7212 static tree
7213 dfs_accumulate_vtbl_inits (tree binfo,
7214 tree orig_binfo,
7215 tree rtti_binfo,
7216 tree t,
7217 tree l)
7219 tree inits = NULL_TREE;
7220 tree vtbl = NULL_TREE;
7221 int ctor_vtbl_p = !same_type_p (BINFO_TYPE (rtti_binfo), t);
7223 if (ctor_vtbl_p
7224 && TREE_VIA_VIRTUAL (orig_binfo) && BINFO_PRIMARY_P (orig_binfo))
7226 /* In the hierarchy of BINFO_TYPE (RTTI_BINFO), this is a
7227 primary virtual base. If it is not the same primary in
7228 the hierarchy of T, we'll need to generate a ctor vtable
7229 for it, to place at its location in T. If it is the same
7230 primary, we still need a VTT entry for the vtable, but it
7231 should point to the ctor vtable for the base it is a
7232 primary for within the sub-hierarchy of RTTI_BINFO.
7234 There are three possible cases:
7236 1) We are in the same place.
7237 2) We are a primary base within a lost primary virtual base of
7238 RTTI_BINFO.
7239 3) We are primary to something not a base of RTTI_BINFO. */
7241 tree b = BINFO_PRIMARY_BASE_OF (binfo);
7242 tree last = NULL_TREE;
7244 /* First, look through the bases we are primary to for RTTI_BINFO
7245 or a virtual base. */
7246 for (; b; b = BINFO_PRIMARY_BASE_OF (b))
7248 last = b;
7249 if (TREE_VIA_VIRTUAL (b) || b == rtti_binfo)
7250 break;
7252 /* If we run out of primary links, keep looking down our
7253 inheritance chain; we might be an indirect primary. */
7254 if (b == NULL_TREE)
7255 for (b = last; b; b = BINFO_INHERITANCE_CHAIN (b))
7256 if (TREE_VIA_VIRTUAL (b) || b == rtti_binfo)
7257 break;
7259 /* If we found RTTI_BINFO, this is case 1. If we found a virtual
7260 base B and it is a base of RTTI_BINFO, this is case 2. In
7261 either case, we share our vtable with LAST, i.e. the
7262 derived-most base within B of which we are a primary. */
7263 if (b == rtti_binfo
7264 || (b && purpose_member (BINFO_TYPE (b),
7265 CLASSTYPE_VBASECLASSES (BINFO_TYPE (rtti_binfo)))))
7266 /* Just set our BINFO_VTABLE to point to LAST, as we may not have
7267 set LAST's BINFO_VTABLE yet. We'll extract the actual vptr in
7268 binfo_ctor_vtable after everything's been set up. */
7269 vtbl = last;
7271 /* Otherwise, this is case 3 and we get our own. */
7273 else if (!BINFO_NEW_VTABLE_MARKED (orig_binfo))
7274 return inits;
7276 if (!vtbl)
7278 tree index;
7279 int non_fn_entries;
7281 /* Compute the initializer for this vtable. */
7282 inits = build_vtbl_initializer (binfo, orig_binfo, t, rtti_binfo,
7283 &non_fn_entries);
7285 /* Figure out the position to which the VPTR should point. */
7286 vtbl = TREE_PURPOSE (l);
7287 vtbl = build1 (ADDR_EXPR,
7288 vtbl_ptr_type_node,
7289 vtbl);
7290 TREE_CONSTANT (vtbl) = 1;
7291 index = size_binop (PLUS_EXPR,
7292 size_int (non_fn_entries),
7293 size_int (list_length (TREE_VALUE (l))));
7294 index = size_binop (MULT_EXPR,
7295 TYPE_SIZE_UNIT (vtable_entry_type),
7296 index);
7297 vtbl = build (PLUS_EXPR, TREE_TYPE (vtbl), vtbl, index);
7298 TREE_CONSTANT (vtbl) = 1;
7301 if (ctor_vtbl_p)
7302 /* For a construction vtable, we can't overwrite BINFO_VTABLE.
7303 So, we make a TREE_LIST. Later, dfs_fixup_binfo_vtbls will
7304 straighten this out. */
7305 BINFO_VTABLE (binfo) = tree_cons (rtti_binfo, vtbl, BINFO_VTABLE (binfo));
7306 else if (BINFO_PRIMARY_P (binfo) && TREE_VIA_VIRTUAL (binfo))
7307 inits = NULL_TREE;
7308 else
7309 /* For an ordinary vtable, set BINFO_VTABLE. */
7310 BINFO_VTABLE (binfo) = vtbl;
7312 return inits;
7315 /* Construct the initializer for BINFO's virtual function table. BINFO
7316 is part of the hierarchy dominated by T. If we're building a
7317 construction vtable, the ORIG_BINFO is the binfo we should use to
7318 find the actual function pointers to put in the vtable - but they
7319 can be overridden on the path to most-derived in the graph that
7320 ORIG_BINFO belongs. Otherwise,
7321 ORIG_BINFO should be the same as BINFO. The RTTI_BINFO is the
7322 BINFO that should be indicated by the RTTI information in the
7323 vtable; it will be a base class of T, rather than T itself, if we
7324 are building a construction vtable.
7326 The value returned is a TREE_LIST suitable for wrapping in a
7327 CONSTRUCTOR to use as the DECL_INITIAL for a vtable. If
7328 NON_FN_ENTRIES_P is not NULL, *NON_FN_ENTRIES_P is set to the
7329 number of non-function entries in the vtable.
7331 It might seem that this function should never be called with a
7332 BINFO for which BINFO_PRIMARY_P holds, the vtable for such a
7333 base is always subsumed by a derived class vtable. However, when
7334 we are building construction vtables, we do build vtables for
7335 primary bases; we need these while the primary base is being
7336 constructed. */
7338 static tree
7339 build_vtbl_initializer (tree binfo,
7340 tree orig_binfo,
7341 tree t,
7342 tree rtti_binfo,
7343 int* non_fn_entries_p)
7345 tree v, b;
7346 tree vfun_inits;
7347 tree vbase;
7348 vtbl_init_data vid;
7350 /* Initialize VID. */
7351 memset (&vid, 0, sizeof (vid));
7352 vid.binfo = binfo;
7353 vid.derived = t;
7354 vid.rtti_binfo = rtti_binfo;
7355 vid.last_init = &vid.inits;
7356 vid.primary_vtbl_p = (binfo == TYPE_BINFO (t));
7357 vid.ctor_vtbl_p = !same_type_p (BINFO_TYPE (rtti_binfo), t);
7358 vid.generate_vcall_entries = true;
7359 /* The first vbase or vcall offset is at index -3 in the vtable. */
7360 vid.index = ssize_int (-3 * TARGET_VTABLE_DATA_ENTRY_DISTANCE);
7362 /* Add entries to the vtable for RTTI. */
7363 build_rtti_vtbl_entries (binfo, &vid);
7365 /* Create an array for keeping track of the functions we've
7366 processed. When we see multiple functions with the same
7367 signature, we share the vcall offsets. */
7368 VARRAY_TREE_INIT (vid.fns, 32, "fns");
7369 /* Add the vcall and vbase offset entries. */
7370 build_vcall_and_vbase_vtbl_entries (binfo, &vid);
7371 /* Clear BINFO_VTABLE_PATH_MARKED; it's set by
7372 build_vbase_offset_vtbl_entries. */
7373 for (vbase = CLASSTYPE_VBASECLASSES (t);
7374 vbase;
7375 vbase = TREE_CHAIN (vbase))
7376 BINFO_VTABLE_PATH_MARKED (TREE_VALUE (vbase)) = 0;
7378 /* If the target requires padding between data entries, add that now. */
7379 if (TARGET_VTABLE_DATA_ENTRY_DISTANCE > 1)
7381 tree cur, *prev;
7383 for (prev = &vid.inits; (cur = *prev); prev = &TREE_CHAIN (cur))
7385 tree add = cur;
7386 int i;
7388 for (i = 1; i < TARGET_VTABLE_DATA_ENTRY_DISTANCE; ++i)
7389 add = tree_cons (NULL_TREE,
7390 build1 (NOP_EXPR, vtable_entry_type,
7391 null_pointer_node),
7392 add);
7393 *prev = add;
7397 if (non_fn_entries_p)
7398 *non_fn_entries_p = list_length (vid.inits);
7400 /* Go through all the ordinary virtual functions, building up
7401 initializers. */
7402 vfun_inits = NULL_TREE;
7403 for (v = BINFO_VIRTUALS (orig_binfo); v; v = TREE_CHAIN (v))
7405 tree delta;
7406 tree vcall_index;
7407 tree fn, fn_original;
7408 tree init = NULL_TREE;
7410 fn = BV_FN (v);
7411 fn_original = fn;
7412 if (DECL_THUNK_P (fn))
7414 if (!DECL_NAME (fn))
7415 finish_thunk (fn);
7416 if (THUNK_ALIAS (fn))
7418 fn = THUNK_ALIAS (fn);
7419 BV_FN (v) = fn;
7421 fn_original = THUNK_TARGET (fn);
7424 /* If the only definition of this function signature along our
7425 primary base chain is from a lost primary, this vtable slot will
7426 never be used, so just zero it out. This is important to avoid
7427 requiring extra thunks which cannot be generated with the function.
7429 We first check this in update_vtable_entry_for_fn, so we handle
7430 restored primary bases properly; we also need to do it here so we
7431 zero out unused slots in ctor vtables, rather than filling themff
7432 with erroneous values (though harmless, apart from relocation
7433 costs). */
7434 for (b = binfo; ; b = get_primary_binfo (b))
7436 /* We found a defn before a lost primary; go ahead as normal. */
7437 if (look_for_overrides_here (BINFO_TYPE (b), fn_original))
7438 break;
7440 /* The nearest definition is from a lost primary; clear the
7441 slot. */
7442 if (BINFO_LOST_PRIMARY_P (b))
7444 init = size_zero_node;
7445 break;
7449 if (! init)
7451 /* Pull the offset for `this', and the function to call, out of
7452 the list. */
7453 delta = BV_DELTA (v);
7454 vcall_index = BV_VCALL_INDEX (v);
7456 my_friendly_assert (TREE_CODE (delta) == INTEGER_CST, 19990727);
7457 my_friendly_assert (TREE_CODE (fn) == FUNCTION_DECL, 19990727);
7459 /* You can't call an abstract virtual function; it's abstract.
7460 So, we replace these functions with __pure_virtual. */
7461 if (DECL_PURE_VIRTUAL_P (fn_original))
7462 fn = abort_fndecl;
7463 else if (!integer_zerop (delta) || vcall_index)
7465 fn = make_thunk (fn, /*this_adjusting=*/1, delta, vcall_index);
7466 if (!DECL_NAME (fn))
7467 finish_thunk (fn);
7469 /* Take the address of the function, considering it to be of an
7470 appropriate generic type. */
7471 init = build1 (ADDR_EXPR, vfunc_ptr_type_node, fn);
7472 /* The address of a function can't change. */
7473 TREE_CONSTANT (init) = 1;
7476 /* And add it to the chain of initializers. */
7477 if (TARGET_VTABLE_USES_DESCRIPTORS)
7479 int i;
7480 if (init == size_zero_node)
7481 for (i = 0; i < TARGET_VTABLE_USES_DESCRIPTORS; ++i)
7482 vfun_inits = tree_cons (NULL_TREE, init, vfun_inits);
7483 else
7484 for (i = 0; i < TARGET_VTABLE_USES_DESCRIPTORS; ++i)
7486 tree fdesc = build (FDESC_EXPR, vfunc_ptr_type_node,
7487 TREE_OPERAND (init, 0),
7488 build_int_2 (i, 0));
7489 TREE_CONSTANT (fdesc) = 1;
7491 vfun_inits = tree_cons (NULL_TREE, fdesc, vfun_inits);
7494 else
7495 vfun_inits = tree_cons (NULL_TREE, init, vfun_inits);
7498 /* The initializers for virtual functions were built up in reverse
7499 order; straighten them out now. */
7500 vfun_inits = nreverse (vfun_inits);
7502 /* The negative offset initializers are also in reverse order. */
7503 vid.inits = nreverse (vid.inits);
7505 /* Chain the two together. */
7506 return chainon (vid.inits, vfun_inits);
7509 /* Adds to vid->inits the initializers for the vbase and vcall
7510 offsets in BINFO, which is in the hierarchy dominated by T. */
7512 static void
7513 build_vcall_and_vbase_vtbl_entries (tree binfo, vtbl_init_data* vid)
7515 tree b;
7517 /* If this is a derived class, we must first create entries
7518 corresponding to the primary base class. */
7519 b = get_primary_binfo (binfo);
7520 if (b)
7521 build_vcall_and_vbase_vtbl_entries (b, vid);
7523 /* Add the vbase entries for this base. */
7524 build_vbase_offset_vtbl_entries (binfo, vid);
7525 /* Add the vcall entries for this base. */
7526 build_vcall_offset_vtbl_entries (binfo, vid);
7529 /* Returns the initializers for the vbase offset entries in the vtable
7530 for BINFO (which is part of the class hierarchy dominated by T), in
7531 reverse order. VBASE_OFFSET_INDEX gives the vtable index
7532 where the next vbase offset will go. */
7534 static void
7535 build_vbase_offset_vtbl_entries (tree binfo, vtbl_init_data* vid)
7537 tree vbase;
7538 tree t;
7539 tree non_primary_binfo;
7541 /* If there are no virtual baseclasses, then there is nothing to
7542 do. */
7543 if (!TYPE_USES_VIRTUAL_BASECLASSES (BINFO_TYPE (binfo)))
7544 return;
7546 t = vid->derived;
7548 /* We might be a primary base class. Go up the inheritance hierarchy
7549 until we find the most derived class of which we are a primary base:
7550 it is the offset of that which we need to use. */
7551 non_primary_binfo = binfo;
7552 while (BINFO_INHERITANCE_CHAIN (non_primary_binfo))
7554 tree b;
7556 /* If we have reached a virtual base, then it must be a primary
7557 base (possibly multi-level) of vid->binfo, or we wouldn't
7558 have called build_vcall_and_vbase_vtbl_entries for it. But it
7559 might be a lost primary, so just skip down to vid->binfo. */
7560 if (TREE_VIA_VIRTUAL (non_primary_binfo))
7562 non_primary_binfo = vid->binfo;
7563 break;
7566 b = BINFO_INHERITANCE_CHAIN (non_primary_binfo);
7567 if (get_primary_binfo (b) != non_primary_binfo)
7568 break;
7569 non_primary_binfo = b;
7572 /* Go through the virtual bases, adding the offsets. */
7573 for (vbase = TYPE_BINFO (BINFO_TYPE (binfo));
7574 vbase;
7575 vbase = TREE_CHAIN (vbase))
7577 tree b;
7578 tree delta;
7580 if (!TREE_VIA_VIRTUAL (vbase))
7581 continue;
7583 /* Find the instance of this virtual base in the complete
7584 object. */
7585 b = copied_binfo (vbase, binfo);
7587 /* If we've already got an offset for this virtual base, we
7588 don't need another one. */
7589 if (BINFO_VTABLE_PATH_MARKED (b))
7590 continue;
7591 BINFO_VTABLE_PATH_MARKED (b) = 1;
7593 /* Figure out where we can find this vbase offset. */
7594 delta = size_binop (MULT_EXPR,
7595 vid->index,
7596 convert (ssizetype,
7597 TYPE_SIZE_UNIT (vtable_entry_type)));
7598 if (vid->primary_vtbl_p)
7599 BINFO_VPTR_FIELD (b) = delta;
7601 if (binfo != TYPE_BINFO (t))
7603 /* The vbase offset had better be the same. */
7604 my_friendly_assert (tree_int_cst_equal (delta,
7605 BINFO_VPTR_FIELD (vbase)),
7606 20030202);
7609 /* The next vbase will come at a more negative offset. */
7610 vid->index = size_binop (MINUS_EXPR, vid->index,
7611 ssize_int (TARGET_VTABLE_DATA_ENTRY_DISTANCE));
7613 /* The initializer is the delta from BINFO to this virtual base.
7614 The vbase offsets go in reverse inheritance-graph order, and
7615 we are walking in inheritance graph order so these end up in
7616 the right order. */
7617 delta = size_diffop (BINFO_OFFSET (b), BINFO_OFFSET (non_primary_binfo));
7619 *vid->last_init
7620 = build_tree_list (NULL_TREE,
7621 fold (build1 (NOP_EXPR,
7622 vtable_entry_type,
7623 delta)));
7624 vid->last_init = &TREE_CHAIN (*vid->last_init);
7628 /* Adds the initializers for the vcall offset entries in the vtable
7629 for BINFO (which is part of the class hierarchy dominated by VID->DERIVED)
7630 to VID->INITS. */
7632 static void
7633 build_vcall_offset_vtbl_entries (tree binfo, vtbl_init_data* vid)
7635 /* We only need these entries if this base is a virtual base. We
7636 compute the indices -- but do not add to the vtable -- when
7637 building the main vtable for a class. */
7638 if (TREE_VIA_VIRTUAL (binfo) || binfo == TYPE_BINFO (vid->derived))
7640 /* We need a vcall offset for each of the virtual functions in this
7641 vtable. For example:
7643 class A { virtual void f (); };
7644 class B1 : virtual public A { virtual void f (); };
7645 class B2 : virtual public A { virtual void f (); };
7646 class C: public B1, public B2 { virtual void f (); };
7648 A C object has a primary base of B1, which has a primary base of A. A
7649 C also has a secondary base of B2, which no longer has a primary base
7650 of A. So the B2-in-C construction vtable needs a secondary vtable for
7651 A, which will adjust the A* to a B2* to call f. We have no way of
7652 knowing what (or even whether) this offset will be when we define B2,
7653 so we store this "vcall offset" in the A sub-vtable and look it up in
7654 a "virtual thunk" for B2::f.
7656 We need entries for all the functions in our primary vtable and
7657 in our non-virtual bases' secondary vtables. */
7658 vid->vbase = binfo;
7659 /* If we are just computing the vcall indices -- but do not need
7660 the actual entries -- not that. */
7661 if (!TREE_VIA_VIRTUAL (binfo))
7662 vid->generate_vcall_entries = false;
7663 /* Now, walk through the non-virtual bases, adding vcall offsets. */
7664 add_vcall_offset_vtbl_entries_r (binfo, vid);
7668 /* Build vcall offsets, starting with those for BINFO. */
7670 static void
7671 add_vcall_offset_vtbl_entries_r (tree binfo, vtbl_init_data* vid)
7673 int i;
7674 tree primary_binfo;
7676 /* Don't walk into virtual bases -- except, of course, for the
7677 virtual base for which we are building vcall offsets. Any
7678 primary virtual base will have already had its offsets generated
7679 through the recursion in build_vcall_and_vbase_vtbl_entries. */
7680 if (TREE_VIA_VIRTUAL (binfo) && vid->vbase != binfo)
7681 return;
7683 /* If BINFO has a primary base, process it first. */
7684 primary_binfo = get_primary_binfo (binfo);
7685 if (primary_binfo)
7686 add_vcall_offset_vtbl_entries_r (primary_binfo, vid);
7688 /* Add BINFO itself to the list. */
7689 add_vcall_offset_vtbl_entries_1 (binfo, vid);
7691 /* Scan the non-primary bases of BINFO. */
7692 for (i = 0; i < BINFO_N_BASETYPES (binfo); ++i)
7694 tree base_binfo;
7696 base_binfo = BINFO_BASETYPE (binfo, i);
7697 if (base_binfo != primary_binfo)
7698 add_vcall_offset_vtbl_entries_r (base_binfo, vid);
7702 /* Called from build_vcall_offset_vtbl_entries_r. */
7704 static void
7705 add_vcall_offset_vtbl_entries_1 (tree binfo, vtbl_init_data* vid)
7707 /* Make entries for the rest of the virtuals. */
7708 if (abi_version_at_least (2))
7710 tree orig_fn;
7712 /* The ABI requires that the methods be processed in declaration
7713 order. G++ 3.2 used the order in the vtable. */
7714 for (orig_fn = TYPE_METHODS (BINFO_TYPE (binfo));
7715 orig_fn;
7716 orig_fn = TREE_CHAIN (orig_fn))
7717 if (DECL_VINDEX (orig_fn))
7718 add_vcall_offset (orig_fn, binfo, vid);
7720 else
7722 tree derived_virtuals;
7723 tree base_virtuals;
7724 tree orig_virtuals;
7725 /* If BINFO is a primary base, the most derived class which has
7726 BINFO as a primary base; otherwise, just BINFO. */
7727 tree non_primary_binfo;
7729 /* We might be a primary base class. Go up the inheritance hierarchy
7730 until we find the most derived class of which we are a primary base:
7731 it is the BINFO_VIRTUALS there that we need to consider. */
7732 non_primary_binfo = binfo;
7733 while (BINFO_INHERITANCE_CHAIN (non_primary_binfo))
7735 tree b;
7737 /* If we have reached a virtual base, then it must be vid->vbase,
7738 because we ignore other virtual bases in
7739 add_vcall_offset_vtbl_entries_r. In turn, it must be a primary
7740 base (possibly multi-level) of vid->binfo, or we wouldn't
7741 have called build_vcall_and_vbase_vtbl_entries for it. But it
7742 might be a lost primary, so just skip down to vid->binfo. */
7743 if (TREE_VIA_VIRTUAL (non_primary_binfo))
7745 if (non_primary_binfo != vid->vbase)
7746 abort ();
7747 non_primary_binfo = vid->binfo;
7748 break;
7751 b = BINFO_INHERITANCE_CHAIN (non_primary_binfo);
7752 if (get_primary_binfo (b) != non_primary_binfo)
7753 break;
7754 non_primary_binfo = b;
7757 if (vid->ctor_vtbl_p)
7758 /* For a ctor vtable we need the equivalent binfo within the hierarchy
7759 where rtti_binfo is the most derived type. */
7760 non_primary_binfo
7761 = original_binfo (non_primary_binfo, vid->rtti_binfo);
7763 for (base_virtuals = BINFO_VIRTUALS (binfo),
7764 derived_virtuals = BINFO_VIRTUALS (non_primary_binfo),
7765 orig_virtuals = BINFO_VIRTUALS (TYPE_BINFO (BINFO_TYPE (binfo)));
7766 base_virtuals;
7767 base_virtuals = TREE_CHAIN (base_virtuals),
7768 derived_virtuals = TREE_CHAIN (derived_virtuals),
7769 orig_virtuals = TREE_CHAIN (orig_virtuals))
7771 tree orig_fn;
7773 /* Find the declaration that originally caused this function to
7774 be present in BINFO_TYPE (binfo). */
7775 orig_fn = BV_FN (orig_virtuals);
7777 /* When processing BINFO, we only want to generate vcall slots for
7778 function slots introduced in BINFO. So don't try to generate
7779 one if the function isn't even defined in BINFO. */
7780 if (!same_type_p (DECL_CONTEXT (orig_fn), BINFO_TYPE (binfo)))
7781 continue;
7783 add_vcall_offset (orig_fn, binfo, vid);
7788 /* Add a vcall offset entry for ORIG_FN to the vtable. */
7790 static void
7791 add_vcall_offset (tree orig_fn, tree binfo, vtbl_init_data *vid)
7793 size_t i;
7794 tree vcall_offset;
7796 /* If there is already an entry for a function with the same
7797 signature as FN, then we do not need a second vcall offset.
7798 Check the list of functions already present in the derived
7799 class vtable. */
7800 for (i = 0; i < VARRAY_ACTIVE_SIZE (vid->fns); ++i)
7802 tree derived_entry;
7804 derived_entry = VARRAY_TREE (vid->fns, i);
7805 if (same_signature_p (derived_entry, orig_fn)
7806 /* We only use one vcall offset for virtual destructors,
7807 even though there are two virtual table entries. */
7808 || (DECL_DESTRUCTOR_P (derived_entry)
7809 && DECL_DESTRUCTOR_P (orig_fn)))
7810 return;
7813 /* If we are building these vcall offsets as part of building
7814 the vtable for the most derived class, remember the vcall
7815 offset. */
7816 if (vid->binfo == TYPE_BINFO (vid->derived))
7817 CLASSTYPE_VCALL_INDICES (vid->derived)
7818 = tree_cons (orig_fn, vid->index,
7819 CLASSTYPE_VCALL_INDICES (vid->derived));
7821 /* The next vcall offset will be found at a more negative
7822 offset. */
7823 vid->index = size_binop (MINUS_EXPR, vid->index,
7824 ssize_int (TARGET_VTABLE_DATA_ENTRY_DISTANCE));
7826 /* Keep track of this function. */
7827 VARRAY_PUSH_TREE (vid->fns, orig_fn);
7829 if (vid->generate_vcall_entries)
7831 tree base;
7832 tree fn;
7834 /* Find the overriding function. */
7835 fn = find_final_overrider (vid->rtti_binfo, binfo, orig_fn);
7836 if (fn == error_mark_node)
7837 vcall_offset = build1 (NOP_EXPR, vtable_entry_type,
7838 integer_zero_node);
7839 else
7841 base = TREE_VALUE (fn);
7843 /* The vbase we're working on is a primary base of
7844 vid->binfo. But it might be a lost primary, so its
7845 BINFO_OFFSET might be wrong, so we just use the
7846 BINFO_OFFSET from vid->binfo. */
7847 vcall_offset = size_diffop (BINFO_OFFSET (base),
7848 BINFO_OFFSET (vid->binfo));
7849 vcall_offset = fold (build1 (NOP_EXPR, vtable_entry_type,
7850 vcall_offset));
7852 /* Add the initializer to the vtable. */
7853 *vid->last_init = build_tree_list (NULL_TREE, vcall_offset);
7854 vid->last_init = &TREE_CHAIN (*vid->last_init);
7858 /* Return vtbl initializers for the RTTI entries corresponding to the
7859 BINFO's vtable. The RTTI entries should indicate the object given
7860 by VID->rtti_binfo. */
7862 static void
7863 build_rtti_vtbl_entries (tree binfo, vtbl_init_data* vid)
7865 tree b;
7866 tree t;
7867 tree basetype;
7868 tree offset;
7869 tree decl;
7870 tree init;
7872 basetype = BINFO_TYPE (binfo);
7873 t = BINFO_TYPE (vid->rtti_binfo);
7875 /* To find the complete object, we will first convert to our most
7876 primary base, and then add the offset in the vtbl to that value. */
7877 b = binfo;
7878 while (CLASSTYPE_HAS_PRIMARY_BASE_P (BINFO_TYPE (b))
7879 && !BINFO_LOST_PRIMARY_P (b))
7881 tree primary_base;
7883 primary_base = get_primary_binfo (b);
7884 my_friendly_assert (BINFO_PRIMARY_BASE_OF (primary_base) == b, 20010127);
7885 b = primary_base;
7887 offset = size_diffop (BINFO_OFFSET (vid->rtti_binfo), BINFO_OFFSET (b));
7889 /* The second entry is the address of the typeinfo object. */
7890 if (flag_rtti)
7891 decl = build_address (get_tinfo_decl (t));
7892 else
7893 decl = integer_zero_node;
7895 /* Convert the declaration to a type that can be stored in the
7896 vtable. */
7897 init = build_nop (vfunc_ptr_type_node, decl);
7898 *vid->last_init = build_tree_list (NULL_TREE, init);
7899 vid->last_init = &TREE_CHAIN (*vid->last_init);
7901 /* Add the offset-to-top entry. It comes earlier in the vtable that
7902 the the typeinfo entry. Convert the offset to look like a
7903 function pointer, so that we can put it in the vtable. */
7904 init = build_nop (vfunc_ptr_type_node, offset);
7905 *vid->last_init = build_tree_list (NULL_TREE, init);
7906 vid->last_init = &TREE_CHAIN (*vid->last_init);