* typeck.c (comptypes): First determine if the types are compatible
[official-gcc.git] / gcc / cp / class.c
blobc684e81aedf955fe91eea2de99555fda8278dbb6
1 /* Functions related to building classes and their related objects.
2 Copyright (C) 1987, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
4 Contributed by Michael Tiemann (tiemann@cygnus.com)
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2, or (at your option)
11 any later version.
13 GCC is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING. If not, write to
20 the Free Software Foundation, 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA. */
24 /* High-level class interface. */
26 #include "config.h"
27 #include "system.h"
28 #include "coretypes.h"
29 #include "tm.h"
30 #include "tree.h"
31 #include "cp-tree.h"
32 #include "flags.h"
33 #include "rtl.h"
34 #include "output.h"
35 #include "toplev.h"
36 #include "target.h"
37 #include "convert.h"
39 /* The number of nested classes being processed. If we are not in the
40 scope of any class, this is zero. */
42 int current_class_depth;
44 /* In order to deal with nested classes, we keep a stack of classes.
45 The topmost entry is the innermost class, and is the entry at index
46 CURRENT_CLASS_DEPTH */
48 typedef struct class_stack_node {
49 /* The name of the class. */
50 tree name;
52 /* The _TYPE node for the class. */
53 tree type;
55 /* The access specifier pending for new declarations in the scope of
56 this class. */
57 tree access;
59 /* If were defining TYPE, the names used in this class. */
60 splay_tree names_used;
61 }* class_stack_node_t;
63 typedef struct vtbl_init_data_s
65 /* The base for which we're building initializers. */
66 tree binfo;
67 /* The type of the most-derived type. */
68 tree derived;
69 /* The binfo for the dynamic type. This will be TYPE_BINFO (derived),
70 unless ctor_vtbl_p is true. */
71 tree rtti_binfo;
72 /* The negative-index vtable initializers built up so far. These
73 are in order from least negative index to most negative index. */
74 tree inits;
75 /* The last (i.e., most negative) entry in INITS. */
76 tree* last_init;
77 /* The binfo for the virtual base for which we're building
78 vcall offset initializers. */
79 tree vbase;
80 /* The functions in vbase for which we have already provided vcall
81 offsets. */
82 varray_type fns;
83 /* The vtable index of the next vcall or vbase offset. */
84 tree index;
85 /* Nonzero if we are building the initializer for the primary
86 vtable. */
87 int primary_vtbl_p;
88 /* Nonzero if we are building the initializer for a construction
89 vtable. */
90 int ctor_vtbl_p;
91 /* True when adding vcall offset entries to the vtable. False when
92 merely computing the indices. */
93 bool generate_vcall_entries;
94 } vtbl_init_data;
96 /* The type of a function passed to walk_subobject_offsets. */
97 typedef int (*subobject_offset_fn) (tree, tree, splay_tree);
99 /* The stack itself. This is a dynamically resized array. The
100 number of elements allocated is CURRENT_CLASS_STACK_SIZE. */
101 static int current_class_stack_size;
102 static class_stack_node_t current_class_stack;
104 /* An array of all local classes present in this translation unit, in
105 declaration order. */
106 varray_type local_classes;
108 static tree get_vfield_name (tree);
109 static void finish_struct_anon (tree);
110 static tree get_vtable_name (tree);
111 static tree get_basefndecls (tree, tree);
112 static int build_primary_vtable (tree, tree);
113 static int build_secondary_vtable (tree);
114 static void finish_vtbls (tree);
115 static void modify_vtable_entry (tree, tree, tree, tree, tree *);
116 static void finish_struct_bits (tree);
117 static int alter_access (tree, tree, tree);
118 static void handle_using_decl (tree, tree);
119 static tree dfs_modify_vtables (tree, void *);
120 static tree modify_all_vtables (tree, tree);
121 static void determine_primary_bases (tree);
122 static void finish_struct_methods (tree);
123 static void maybe_warn_about_overly_private_class (tree);
124 static int method_name_cmp (const void *, const void *);
125 static int resort_method_name_cmp (const void *, const void *);
126 static void add_implicitly_declared_members (tree, int, int);
127 static tree fixed_type_or_null (tree, int *, int *);
128 static tree resolve_address_of_overloaded_function (tree, tree, tsubst_flags_t,
129 bool, tree);
130 static tree build_simple_base_path (tree expr, tree binfo);
131 static tree build_vtbl_ref_1 (tree, tree);
132 static tree build_vtbl_initializer (tree, tree, tree, tree, int *);
133 static int count_fields (tree);
134 static int add_fields_to_record_type (tree, struct sorted_fields_type*, int);
135 static void check_bitfield_decl (tree);
136 static void check_field_decl (tree, tree, int *, int *, int *);
137 static void check_field_decls (tree, tree *, int *, int *);
138 static tree *build_base_field (record_layout_info, tree, splay_tree, tree *);
139 static void build_base_fields (record_layout_info, splay_tree, tree *);
140 static void check_methods (tree);
141 static void remove_zero_width_bit_fields (tree);
142 static void check_bases (tree, int *, int *);
143 static void check_bases_and_members (tree);
144 static tree create_vtable_ptr (tree, tree *);
145 static void include_empty_classes (record_layout_info);
146 static void layout_class_type (tree, tree *);
147 static void fixup_pending_inline (tree);
148 static void fixup_inline_methods (tree);
149 static void propagate_binfo_offsets (tree, tree);
150 static void layout_virtual_bases (record_layout_info, splay_tree);
151 static void build_vbase_offset_vtbl_entries (tree, vtbl_init_data *);
152 static void add_vcall_offset_vtbl_entries_r (tree, vtbl_init_data *);
153 static void add_vcall_offset_vtbl_entries_1 (tree, vtbl_init_data *);
154 static void build_vcall_offset_vtbl_entries (tree, vtbl_init_data *);
155 static void add_vcall_offset (tree, tree, vtbl_init_data *);
156 static void layout_vtable_decl (tree, int);
157 static tree dfs_find_final_overrider_pre (tree, void *);
158 static tree dfs_find_final_overrider_post (tree, void *);
159 static tree find_final_overrider (tree, tree, tree);
160 static int make_new_vtable (tree, tree);
161 static int maybe_indent_hierarchy (FILE *, int, int);
162 static tree dump_class_hierarchy_r (FILE *, int, tree, tree, int);
163 static void dump_class_hierarchy (tree);
164 static void dump_class_hierarchy_1 (FILE *, int, tree);
165 static void dump_array (FILE *, tree);
166 static void dump_vtable (tree, tree, tree);
167 static void dump_vtt (tree, tree);
168 static void dump_thunk (FILE *, int, tree);
169 static tree build_vtable (tree, tree, tree);
170 static void initialize_vtable (tree, tree);
171 static void layout_nonempty_base_or_field (record_layout_info,
172 tree, tree, splay_tree);
173 static tree end_of_class (tree, int);
174 static bool layout_empty_base (tree, tree, splay_tree);
175 static void accumulate_vtbl_inits (tree, tree, tree, tree, tree);
176 static tree dfs_accumulate_vtbl_inits (tree, tree, tree, tree,
177 tree);
178 static void build_rtti_vtbl_entries (tree, vtbl_init_data *);
179 static void build_vcall_and_vbase_vtbl_entries (tree, vtbl_init_data *);
180 static void clone_constructors_and_destructors (tree);
181 static tree build_clone (tree, tree);
182 static void update_vtable_entry_for_fn (tree, tree, tree, tree *, unsigned);
183 static void build_ctor_vtbl_group (tree, tree);
184 static void build_vtt (tree);
185 static tree binfo_ctor_vtable (tree);
186 static tree *build_vtt_inits (tree, tree, tree *, tree *);
187 static tree dfs_build_secondary_vptr_vtt_inits (tree, void *);
188 static tree dfs_fixup_binfo_vtbls (tree, void *);
189 static int record_subobject_offset (tree, tree, splay_tree);
190 static int check_subobject_offset (tree, tree, splay_tree);
191 static int walk_subobject_offsets (tree, subobject_offset_fn,
192 tree, splay_tree, tree, int);
193 static void record_subobject_offsets (tree, tree, splay_tree, int);
194 static int layout_conflict_p (tree, tree, splay_tree, int);
195 static int splay_tree_compare_integer_csts (splay_tree_key k1,
196 splay_tree_key k2);
197 static void warn_about_ambiguous_bases (tree);
198 static bool type_requires_array_cookie (tree);
199 static bool contains_empty_class_p (tree);
200 static bool base_derived_from (tree, tree);
201 static int empty_base_at_nonzero_offset_p (tree, tree, splay_tree);
202 static tree end_of_base (tree);
203 static tree get_vcall_index (tree, tree);
205 /* Variables shared between class.c and call.c. */
207 #ifdef GATHER_STATISTICS
208 int n_vtables = 0;
209 int n_vtable_entries = 0;
210 int n_vtable_searches = 0;
211 int n_vtable_elems = 0;
212 int n_convert_harshness = 0;
213 int n_compute_conversion_costs = 0;
214 int n_inner_fields_searched = 0;
215 #endif
217 /* Convert to or from a base subobject. EXPR is an expression of type
218 `A' or `A*', an expression of type `B' or `B*' is returned. To
219 convert A to a base B, CODE is PLUS_EXPR and BINFO is the binfo for
220 the B base instance within A. To convert base A to derived B, CODE
221 is MINUS_EXPR and BINFO is the binfo for the A instance within B.
222 In this latter case, A must not be a morally virtual base of B.
223 NONNULL is true if EXPR is known to be non-NULL (this is only
224 needed when EXPR is of pointer type). CV qualifiers are preserved
225 from EXPR. */
227 tree
228 build_base_path (enum tree_code code,
229 tree expr,
230 tree binfo,
231 int nonnull)
233 tree v_binfo = NULL_TREE;
234 tree d_binfo = NULL_TREE;
235 tree probe;
236 tree offset;
237 tree target_type;
238 tree null_test = NULL;
239 tree ptr_target_type;
240 int fixed_type_p;
241 int want_pointer = TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE;
242 bool has_empty = false;
243 bool virtual_access;
245 if (expr == error_mark_node || binfo == error_mark_node || !binfo)
246 return error_mark_node;
248 for (probe = binfo; probe; probe = BINFO_INHERITANCE_CHAIN (probe))
250 d_binfo = probe;
251 if (is_empty_class (BINFO_TYPE (probe)))
252 has_empty = true;
253 if (!v_binfo && BINFO_VIRTUAL_P (probe))
254 v_binfo = probe;
257 probe = TYPE_MAIN_VARIANT (TREE_TYPE (expr));
258 if (want_pointer)
259 probe = TYPE_MAIN_VARIANT (TREE_TYPE (probe));
261 gcc_assert ((code == MINUS_EXPR
262 && SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), probe))
263 || (code == PLUS_EXPR
264 && SAME_BINFO_TYPE_P (BINFO_TYPE (d_binfo), probe)));
266 if (binfo == d_binfo)
267 /* Nothing to do. */
268 return expr;
270 if (code == MINUS_EXPR && v_binfo)
272 error ("cannot convert from base %qT to derived type %qT via virtual base %qT",
273 BINFO_TYPE (binfo), BINFO_TYPE (d_binfo), BINFO_TYPE (v_binfo));
274 return error_mark_node;
277 if (!want_pointer)
278 /* This must happen before the call to save_expr. */
279 expr = build_unary_op (ADDR_EXPR, expr, 0);
281 offset = BINFO_OFFSET (binfo);
282 fixed_type_p = resolves_to_fixed_type_p (expr, &nonnull);
284 /* Do we need to look in the vtable for the real offset? */
285 virtual_access = (v_binfo && fixed_type_p <= 0);
287 /* Do we need to check for a null pointer? */
288 if (want_pointer && !nonnull && (virtual_access || !integer_zerop (offset)))
289 null_test = error_mark_node;
291 /* Protect against multiple evaluation if necessary. */
292 if (TREE_SIDE_EFFECTS (expr) && (null_test || virtual_access))
293 expr = save_expr (expr);
295 /* Now that we've saved expr, build the real null test. */
296 if (null_test)
298 tree zero = cp_convert (TREE_TYPE (expr), integer_zero_node);
299 null_test = fold_build2 (NE_EXPR, boolean_type_node,
300 expr, zero);
303 /* If this is a simple base reference, express it as a COMPONENT_REF. */
304 if (code == PLUS_EXPR && !virtual_access
305 /* We don't build base fields for empty bases, and they aren't very
306 interesting to the optimizers anyway. */
307 && !has_empty)
309 expr = build_indirect_ref (expr, NULL);
310 expr = build_simple_base_path (expr, binfo);
311 if (want_pointer)
312 expr = build_address (expr);
313 target_type = TREE_TYPE (expr);
314 goto out;
317 if (virtual_access)
319 /* Going via virtual base V_BINFO. We need the static offset
320 from V_BINFO to BINFO, and the dynamic offset from D_BINFO to
321 V_BINFO. That offset is an entry in D_BINFO's vtable. */
322 tree v_offset;
324 if (fixed_type_p < 0 && in_base_initializer)
326 /* In a base member initializer, we cannot rely on
327 the vtable being set up. We have to use the vtt_parm. */
328 tree derived = BINFO_INHERITANCE_CHAIN (v_binfo);
329 tree t;
331 t = TREE_TYPE (TYPE_VFIELD (BINFO_TYPE (derived)));
332 t = build_pointer_type (t);
333 v_offset = convert (t, current_vtt_parm);
334 v_offset = build2 (PLUS_EXPR, t, v_offset,
335 BINFO_VPTR_INDEX (derived));
336 v_offset = build_indirect_ref (v_offset, NULL);
338 else
339 v_offset = build_vfield_ref (build_indirect_ref (expr, NULL),
340 TREE_TYPE (TREE_TYPE (expr)));
342 v_offset = build2 (PLUS_EXPR, TREE_TYPE (v_offset),
343 v_offset, BINFO_VPTR_FIELD (v_binfo));
344 v_offset = build1 (NOP_EXPR,
345 build_pointer_type (ptrdiff_type_node),
346 v_offset);
347 v_offset = build_indirect_ref (v_offset, NULL);
348 TREE_CONSTANT (v_offset) = 1;
349 TREE_INVARIANT (v_offset) = 1;
351 offset = convert_to_integer (ptrdiff_type_node,
352 size_diffop (offset,
353 BINFO_OFFSET (v_binfo)));
355 if (!integer_zerop (offset))
356 v_offset = build2 (code, ptrdiff_type_node, v_offset, offset);
358 if (fixed_type_p < 0)
359 /* Negative fixed_type_p means this is a constructor or destructor;
360 virtual base layout is fixed in in-charge [cd]tors, but not in
361 base [cd]tors. */
362 offset = build3 (COND_EXPR, ptrdiff_type_node,
363 build2 (EQ_EXPR, boolean_type_node,
364 current_in_charge_parm, integer_zero_node),
365 v_offset,
366 BINFO_OFFSET (binfo));
367 else
368 offset = v_offset;
371 target_type = code == PLUS_EXPR ? BINFO_TYPE (binfo) : BINFO_TYPE (d_binfo);
373 target_type = cp_build_qualified_type
374 (target_type, cp_type_quals (TREE_TYPE (TREE_TYPE (expr))));
375 ptr_target_type = build_pointer_type (target_type);
376 if (want_pointer)
377 target_type = ptr_target_type;
379 expr = build1 (NOP_EXPR, ptr_target_type, expr);
381 if (!integer_zerop (offset))
382 expr = build2 (code, ptr_target_type, expr, offset);
383 else
384 null_test = NULL;
386 if (!want_pointer)
387 expr = build_indirect_ref (expr, NULL);
389 out:
390 if (null_test)
391 expr = fold_build3 (COND_EXPR, target_type, null_test, expr,
392 fold_build1 (NOP_EXPR, target_type,
393 integer_zero_node));
395 return expr;
398 /* Subroutine of build_base_path; EXPR and BINFO are as in that function.
399 Perform a derived-to-base conversion by recursively building up a
400 sequence of COMPONENT_REFs to the appropriate base fields. */
402 static tree
403 build_simple_base_path (tree expr, tree binfo)
405 tree type = BINFO_TYPE (binfo);
406 tree d_binfo = BINFO_INHERITANCE_CHAIN (binfo);
407 tree field;
409 if (d_binfo == NULL_TREE)
411 tree temp;
413 gcc_assert (TYPE_MAIN_VARIANT (TREE_TYPE (expr)) == type);
415 /* Transform `(a, b).x' into `(*(a, &b)).x', `(a ? b : c).x'
416 into `(*(a ? &b : &c)).x', and so on. A COND_EXPR is only
417 an lvalue in the frontend; only _DECLs and _REFs are lvalues
418 in the backend. */
419 temp = unary_complex_lvalue (ADDR_EXPR, expr);
420 if (temp)
421 expr = build_indirect_ref (temp, NULL);
423 return expr;
426 /* Recurse. */
427 expr = build_simple_base_path (expr, d_binfo);
429 for (field = TYPE_FIELDS (BINFO_TYPE (d_binfo));
430 field; field = TREE_CHAIN (field))
431 /* Is this the base field created by build_base_field? */
432 if (TREE_CODE (field) == FIELD_DECL
433 && DECL_FIELD_IS_BASE (field)
434 && TREE_TYPE (field) == type)
436 /* We don't use build_class_member_access_expr here, as that
437 has unnecessary checks, and more importantly results in
438 recursive calls to dfs_walk_once. */
439 int type_quals = cp_type_quals (TREE_TYPE (expr));
441 expr = build3 (COMPONENT_REF,
442 cp_build_qualified_type (type, type_quals),
443 expr, field, NULL_TREE);
444 expr = fold_if_not_in_template (expr);
446 /* Mark the expression const or volatile, as appropriate.
447 Even though we've dealt with the type above, we still have
448 to mark the expression itself. */
449 if (type_quals & TYPE_QUAL_CONST)
450 TREE_READONLY (expr) = 1;
451 if (type_quals & TYPE_QUAL_VOLATILE)
452 TREE_THIS_VOLATILE (expr) = 1;
454 return expr;
457 /* Didn't find the base field?!? */
458 gcc_unreachable ();
461 /* Convert OBJECT to the base TYPE. OBJECT is an expression whose
462 type is a class type or a pointer to a class type. In the former
463 case, TYPE is also a class type; in the latter it is another
464 pointer type. If CHECK_ACCESS is true, an error message is emitted
465 if TYPE is inaccessible. If OBJECT has pointer type, the value is
466 assumed to be non-NULL. */
468 tree
469 convert_to_base (tree object, tree type, bool check_access, bool nonnull)
471 tree binfo;
472 tree object_type;
474 if (TYPE_PTR_P (TREE_TYPE (object)))
476 object_type = TREE_TYPE (TREE_TYPE (object));
477 type = TREE_TYPE (type);
479 else
480 object_type = TREE_TYPE (object);
482 binfo = lookup_base (object_type, type,
483 check_access ? ba_check : ba_unique,
484 NULL);
485 if (!binfo || binfo == error_mark_node)
486 return error_mark_node;
488 return build_base_path (PLUS_EXPR, object, binfo, nonnull);
491 /* EXPR is an expression with unqualified class type. BASE is a base
492 binfo of that class type. Returns EXPR, converted to the BASE
493 type. This function assumes that EXPR is the most derived class;
494 therefore virtual bases can be found at their static offsets. */
496 tree
497 convert_to_base_statically (tree expr, tree base)
499 tree expr_type;
501 expr_type = TREE_TYPE (expr);
502 if (!SAME_BINFO_TYPE_P (BINFO_TYPE (base), expr_type))
504 tree pointer_type;
506 pointer_type = build_pointer_type (expr_type);
507 expr = build_unary_op (ADDR_EXPR, expr, /*noconvert=*/1);
508 if (!integer_zerop (BINFO_OFFSET (base)))
509 expr = build2 (PLUS_EXPR, pointer_type, expr,
510 build_nop (pointer_type, BINFO_OFFSET (base)));
511 expr = build_nop (build_pointer_type (BINFO_TYPE (base)), expr);
512 expr = build1 (INDIRECT_REF, BINFO_TYPE (base), expr);
515 return expr;
519 tree
520 build_vfield_ref (tree datum, tree type)
522 tree vfield, vcontext;
524 if (datum == error_mark_node)
525 return error_mark_node;
527 /* First, convert to the requested type. */
528 if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (datum), type))
529 datum = convert_to_base (datum, type, /*check_access=*/false,
530 /*nonnull=*/true);
532 /* Second, the requested type may not be the owner of its own vptr.
533 If not, convert to the base class that owns it. We cannot use
534 convert_to_base here, because VCONTEXT may appear more than once
535 in the inheritance hierarchy of TYPE, and thus direct conversion
536 between the types may be ambiguous. Following the path back up
537 one step at a time via primary bases avoids the problem. */
538 vfield = TYPE_VFIELD (type);
539 vcontext = DECL_CONTEXT (vfield);
540 while (!same_type_ignoring_top_level_qualifiers_p (vcontext, type))
542 datum = build_simple_base_path (datum, CLASSTYPE_PRIMARY_BINFO (type));
543 type = TREE_TYPE (datum);
546 return build3 (COMPONENT_REF, TREE_TYPE (vfield), datum, vfield, NULL_TREE);
549 /* Given an object INSTANCE, return an expression which yields the
550 vtable element corresponding to INDEX. There are many special
551 cases for INSTANCE which we take care of here, mainly to avoid
552 creating extra tree nodes when we don't have to. */
554 static tree
555 build_vtbl_ref_1 (tree instance, tree idx)
557 tree aref;
558 tree vtbl = NULL_TREE;
560 /* Try to figure out what a reference refers to, and
561 access its virtual function table directly. */
563 int cdtorp = 0;
564 tree fixed_type = fixed_type_or_null (instance, NULL, &cdtorp);
566 tree basetype = non_reference (TREE_TYPE (instance));
568 if (fixed_type && !cdtorp)
570 tree binfo = lookup_base (fixed_type, basetype,
571 ba_unique | ba_quiet, NULL);
572 if (binfo)
573 vtbl = unshare_expr (BINFO_VTABLE (binfo));
576 if (!vtbl)
577 vtbl = build_vfield_ref (instance, basetype);
579 assemble_external (vtbl);
581 aref = build_array_ref (vtbl, idx);
582 TREE_CONSTANT (aref) |= TREE_CONSTANT (vtbl) && TREE_CONSTANT (idx);
583 TREE_INVARIANT (aref) = TREE_CONSTANT (aref);
585 return aref;
588 tree
589 build_vtbl_ref (tree instance, tree idx)
591 tree aref = build_vtbl_ref_1 (instance, idx);
593 return aref;
596 /* Given a stable object pointer INSTANCE_PTR, return an expression which
597 yields a function pointer corresponding to vtable element INDEX. */
599 tree
600 build_vfn_ref (tree instance_ptr, tree idx)
602 tree aref;
604 aref = build_vtbl_ref_1 (build_indirect_ref (instance_ptr, 0), idx);
606 /* When using function descriptors, the address of the
607 vtable entry is treated as a function pointer. */
608 if (TARGET_VTABLE_USES_DESCRIPTORS)
609 aref = build1 (NOP_EXPR, TREE_TYPE (aref),
610 build_unary_op (ADDR_EXPR, aref, /*noconvert=*/1));
612 /* Remember this as a method reference, for later devirtualization. */
613 aref = build3 (OBJ_TYPE_REF, TREE_TYPE (aref), aref, instance_ptr, idx);
615 return aref;
618 /* Return the name of the virtual function table (as an IDENTIFIER_NODE)
619 for the given TYPE. */
621 static tree
622 get_vtable_name (tree type)
624 return mangle_vtbl_for_type (type);
627 /* Return an IDENTIFIER_NODE for the name of the virtual table table
628 for TYPE. */
630 tree
631 get_vtt_name (tree type)
633 return mangle_vtt_for_type (type);
636 /* DECL is an entity associated with TYPE, like a virtual table or an
637 implicitly generated constructor. Determine whether or not DECL
638 should have external or internal linkage at the object file
639 level. This routine does not deal with COMDAT linkage and other
640 similar complexities; it simply sets TREE_PUBLIC if it possible for
641 entities in other translation units to contain copies of DECL, in
642 the abstract. */
644 void
645 set_linkage_according_to_type (tree type, tree decl)
647 /* If TYPE involves a local class in a function with internal
648 linkage, then DECL should have internal linkage too. Other local
649 classes have no linkage -- but if their containing functions
650 have external linkage, it makes sense for DECL to have external
651 linkage too. That will allow template definitions to be merged,
652 for example. */
653 if (no_linkage_check (type, /*relaxed_p=*/true))
655 TREE_PUBLIC (decl) = 0;
656 DECL_INTERFACE_KNOWN (decl) = 1;
658 else
659 TREE_PUBLIC (decl) = 1;
662 /* Create a VAR_DECL for a primary or secondary vtable for CLASS_TYPE.
663 (For a secondary vtable for B-in-D, CLASS_TYPE should be D, not B.)
664 Use NAME for the name of the vtable, and VTABLE_TYPE for its type. */
666 static tree
667 build_vtable (tree class_type, tree name, tree vtable_type)
669 tree decl;
671 decl = build_lang_decl (VAR_DECL, name, vtable_type);
672 /* vtable names are already mangled; give them their DECL_ASSEMBLER_NAME
673 now to avoid confusion in mangle_decl. */
674 SET_DECL_ASSEMBLER_NAME (decl, name);
675 DECL_CONTEXT (decl) = class_type;
676 DECL_ARTIFICIAL (decl) = 1;
677 TREE_STATIC (decl) = 1;
678 TREE_READONLY (decl) = 1;
679 DECL_VIRTUAL_P (decl) = 1;
680 DECL_ALIGN (decl) = TARGET_VTABLE_ENTRY_ALIGN;
681 DECL_VTABLE_OR_VTT_P (decl) = 1;
682 /* At one time the vtable info was grabbed 2 words at a time. This
683 fails on sparc unless you have 8-byte alignment. (tiemann) */
684 DECL_ALIGN (decl) = MAX (TYPE_ALIGN (double_type_node),
685 DECL_ALIGN (decl));
686 set_linkage_according_to_type (class_type, decl);
687 /* The vtable has not been defined -- yet. */
688 DECL_EXTERNAL (decl) = 1;
689 DECL_NOT_REALLY_EXTERN (decl) = 1;
691 /* Mark the VAR_DECL node representing the vtable itself as a
692 "gratuitous" one, thereby forcing dwarfout.c to ignore it. It
693 is rather important that such things be ignored because any
694 effort to actually generate DWARF for them will run into
695 trouble when/if we encounter code like:
697 #pragma interface
698 struct S { virtual void member (); };
700 because the artificial declaration of the vtable itself (as
701 manufactured by the g++ front end) will say that the vtable is
702 a static member of `S' but only *after* the debug output for
703 the definition of `S' has already been output. This causes
704 grief because the DWARF entry for the definition of the vtable
705 will try to refer back to an earlier *declaration* of the
706 vtable as a static member of `S' and there won't be one. We
707 might be able to arrange to have the "vtable static member"
708 attached to the member list for `S' before the debug info for
709 `S' get written (which would solve the problem) but that would
710 require more intrusive changes to the g++ front end. */
711 DECL_IGNORED_P (decl) = 1;
713 return decl;
716 /* Get the VAR_DECL of the vtable for TYPE. TYPE need not be polymorphic,
717 or even complete. If this does not exist, create it. If COMPLETE is
718 nonzero, then complete the definition of it -- that will render it
719 impossible to actually build the vtable, but is useful to get at those
720 which are known to exist in the runtime. */
722 tree
723 get_vtable_decl (tree type, int complete)
725 tree decl;
727 if (CLASSTYPE_VTABLES (type))
728 return CLASSTYPE_VTABLES (type);
730 decl = build_vtable (type, get_vtable_name (type), vtbl_type_node);
731 CLASSTYPE_VTABLES (type) = decl;
733 if (complete)
735 DECL_EXTERNAL (decl) = 1;
736 cp_finish_decl (decl, NULL_TREE, NULL_TREE, 0);
739 return decl;
742 /* Build the primary virtual function table for TYPE. If BINFO is
743 non-NULL, build the vtable starting with the initial approximation
744 that it is the same as the one which is the head of the association
745 list. Returns a nonzero value if a new vtable is actually
746 created. */
748 static int
749 build_primary_vtable (tree binfo, tree type)
751 tree decl;
752 tree virtuals;
754 decl = get_vtable_decl (type, /*complete=*/0);
756 if (binfo)
758 if (BINFO_NEW_VTABLE_MARKED (binfo))
759 /* We have already created a vtable for this base, so there's
760 no need to do it again. */
761 return 0;
763 virtuals = copy_list (BINFO_VIRTUALS (binfo));
764 TREE_TYPE (decl) = TREE_TYPE (get_vtbl_decl_for_binfo (binfo));
765 DECL_SIZE (decl) = TYPE_SIZE (TREE_TYPE (decl));
766 DECL_SIZE_UNIT (decl) = TYPE_SIZE_UNIT (TREE_TYPE (decl));
768 else
770 gcc_assert (TREE_TYPE (decl) == vtbl_type_node);
771 virtuals = NULL_TREE;
774 #ifdef GATHER_STATISTICS
775 n_vtables += 1;
776 n_vtable_elems += list_length (virtuals);
777 #endif
779 /* Initialize the association list for this type, based
780 on our first approximation. */
781 BINFO_VTABLE (TYPE_BINFO (type)) = decl;
782 BINFO_VIRTUALS (TYPE_BINFO (type)) = virtuals;
783 SET_BINFO_NEW_VTABLE_MARKED (TYPE_BINFO (type));
784 return 1;
787 /* Give BINFO a new virtual function table which is initialized
788 with a skeleton-copy of its original initialization. The only
789 entry that changes is the `delta' entry, so we can really
790 share a lot of structure.
792 FOR_TYPE is the most derived type which caused this table to
793 be needed.
795 Returns nonzero if we haven't met BINFO before.
797 The order in which vtables are built (by calling this function) for
798 an object must remain the same, otherwise a binary incompatibility
799 can result. */
801 static int
802 build_secondary_vtable (tree binfo)
804 if (BINFO_NEW_VTABLE_MARKED (binfo))
805 /* We already created a vtable for this base. There's no need to
806 do it again. */
807 return 0;
809 /* Remember that we've created a vtable for this BINFO, so that we
810 don't try to do so again. */
811 SET_BINFO_NEW_VTABLE_MARKED (binfo);
813 /* Make fresh virtual list, so we can smash it later. */
814 BINFO_VIRTUALS (binfo) = copy_list (BINFO_VIRTUALS (binfo));
816 /* Secondary vtables are laid out as part of the same structure as
817 the primary vtable. */
818 BINFO_VTABLE (binfo) = NULL_TREE;
819 return 1;
822 /* Create a new vtable for BINFO which is the hierarchy dominated by
823 T. Return nonzero if we actually created a new vtable. */
825 static int
826 make_new_vtable (tree t, tree binfo)
828 if (binfo == TYPE_BINFO (t))
829 /* In this case, it is *type*'s vtable we are modifying. We start
830 with the approximation that its vtable is that of the
831 immediate base class. */
832 return build_primary_vtable (binfo, t);
833 else
834 /* This is our very own copy of `basetype' to play with. Later,
835 we will fill in all the virtual functions that override the
836 virtual functions in these base classes which are not defined
837 by the current type. */
838 return build_secondary_vtable (binfo);
841 /* Make *VIRTUALS, an entry on the BINFO_VIRTUALS list for BINFO
842 (which is in the hierarchy dominated by T) list FNDECL as its
843 BV_FN. DELTA is the required constant adjustment from the `this'
844 pointer where the vtable entry appears to the `this' required when
845 the function is actually called. */
847 static void
848 modify_vtable_entry (tree t,
849 tree binfo,
850 tree fndecl,
851 tree delta,
852 tree *virtuals)
854 tree v;
856 v = *virtuals;
858 if (fndecl != BV_FN (v)
859 || !tree_int_cst_equal (delta, BV_DELTA (v)))
861 /* We need a new vtable for BINFO. */
862 if (make_new_vtable (t, binfo))
864 /* If we really did make a new vtable, we also made a copy
865 of the BINFO_VIRTUALS list. Now, we have to find the
866 corresponding entry in that list. */
867 *virtuals = BINFO_VIRTUALS (binfo);
868 while (BV_FN (*virtuals) != BV_FN (v))
869 *virtuals = TREE_CHAIN (*virtuals);
870 v = *virtuals;
873 BV_DELTA (v) = delta;
874 BV_VCALL_INDEX (v) = NULL_TREE;
875 BV_FN (v) = fndecl;
880 /* Add method METHOD to class TYPE. */
882 void
883 add_method (tree type, tree method)
885 int using;
886 unsigned slot;
887 tree overload;
888 bool template_conv_p = false;
889 bool conv_p;
890 VEC(tree) *method_vec;
891 bool complete_p;
892 bool insert_p = false;
893 tree current_fns;
895 if (method == error_mark_node)
896 return;
898 complete_p = COMPLETE_TYPE_P (type);
899 using = (DECL_CONTEXT (method) != type);
900 conv_p = DECL_CONV_FN_P (method);
901 if (conv_p)
902 template_conv_p = (TREE_CODE (method) == TEMPLATE_DECL
903 && DECL_TEMPLATE_CONV_FN_P (method));
905 method_vec = CLASSTYPE_METHOD_VEC (type);
906 if (!method_vec)
908 /* Make a new method vector. We start with 8 entries. We must
909 allocate at least two (for constructors and destructors), and
910 we're going to end up with an assignment operator at some
911 point as well. */
912 method_vec = VEC_alloc (tree, 8);
913 /* Create slots for constructors and destructors. */
914 VEC_quick_push (tree, method_vec, NULL_TREE);
915 VEC_quick_push (tree, method_vec, NULL_TREE);
916 CLASSTYPE_METHOD_VEC (type) = method_vec;
919 /* Constructors and destructors go in special slots. */
920 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (method))
921 slot = CLASSTYPE_CONSTRUCTOR_SLOT;
922 else if (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (method))
924 slot = CLASSTYPE_DESTRUCTOR_SLOT;
926 if (TYPE_FOR_JAVA (type))
928 if (!DECL_ARTIFICIAL (method))
929 error ("Java class %qT cannot have a destructor", type);
930 else if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
931 error ("Java class %qT cannot have an implicit non-trivial "
932 "destructor",
933 type);
936 else
938 tree m;
940 insert_p = true;
941 /* See if we already have an entry with this name. */
942 for (slot = CLASSTYPE_FIRST_CONVERSION_SLOT;
943 VEC_iterate (tree, method_vec, slot, m);
944 ++slot)
946 m = OVL_CURRENT (m);
947 if (template_conv_p)
949 if (TREE_CODE (m) == TEMPLATE_DECL
950 && DECL_TEMPLATE_CONV_FN_P (m))
951 insert_p = false;
952 break;
954 if (conv_p && !DECL_CONV_FN_P (m))
955 break;
956 if (DECL_NAME (m) == DECL_NAME (method))
958 insert_p = false;
959 break;
961 if (complete_p
962 && !DECL_CONV_FN_P (m)
963 && DECL_NAME (m) > DECL_NAME (method))
964 break;
967 current_fns = insert_p ? NULL_TREE : VEC_index (tree, method_vec, slot);
969 if (processing_template_decl)
970 /* TYPE is a template class. Don't issue any errors now; wait
971 until instantiation time to complain. */
973 else
975 tree fns;
977 /* Check to see if we've already got this method. */
978 for (fns = current_fns; fns; fns = OVL_NEXT (fns))
980 tree fn = OVL_CURRENT (fns);
981 tree parms1;
982 tree parms2;
983 bool same = 1;
985 if (TREE_CODE (fn) != TREE_CODE (method))
986 continue;
988 /* [over.load] Member function declarations with the
989 same name and the same parameter types cannot be
990 overloaded if any of them is a static member
991 function declaration.
993 [namespace.udecl] When a using-declaration brings names
994 from a base class into a derived class scope, member
995 functions in the derived class override and/or hide member
996 functions with the same name and parameter types in a base
997 class (rather than conflicting). */
998 parms1 = TYPE_ARG_TYPES (TREE_TYPE (fn));
999 parms2 = TYPE_ARG_TYPES (TREE_TYPE (method));
1001 /* Compare the quals on the 'this' parm. Don't compare
1002 the whole types, as used functions are treated as
1003 coming from the using class in overload resolution. */
1004 if (! DECL_STATIC_FUNCTION_P (fn)
1005 && ! DECL_STATIC_FUNCTION_P (method)
1006 && (TYPE_QUALS (TREE_TYPE (TREE_VALUE (parms1)))
1007 != TYPE_QUALS (TREE_TYPE (TREE_VALUE (parms2)))))
1008 same = 0;
1010 /* For templates, the template parms must be identical. */
1011 if (TREE_CODE (fn) == TEMPLATE_DECL
1012 && !comp_template_parms (DECL_TEMPLATE_PARMS (fn),
1013 DECL_TEMPLATE_PARMS (method)))
1014 same = 0;
1016 if (! DECL_STATIC_FUNCTION_P (fn))
1017 parms1 = TREE_CHAIN (parms1);
1018 if (! DECL_STATIC_FUNCTION_P (method))
1019 parms2 = TREE_CHAIN (parms2);
1021 if (same && compparms (parms1, parms2)
1022 && (!DECL_CONV_FN_P (fn)
1023 || same_type_p (TREE_TYPE (TREE_TYPE (fn)),
1024 TREE_TYPE (TREE_TYPE (method)))))
1026 if (using && DECL_CONTEXT (fn) == type)
1027 /* Defer to the local function. */
1028 return;
1029 else
1031 cp_error_at ("%q#D and %q#D cannot be overloaded",
1032 method, fn);
1034 /* We don't call duplicate_decls here to merge
1035 the declarations because that will confuse
1036 things if the methods have inline
1037 definitions. In particular, we will crash
1038 while processing the definitions. */
1039 return;
1045 /* Add the new binding. */
1046 overload = build_overload (method, current_fns);
1048 if (!conv_p && slot >= CLASSTYPE_FIRST_CONVERSION_SLOT && !complete_p)
1049 push_class_level_binding (DECL_NAME (method), overload);
1051 if (insert_p)
1053 /* We only expect to add few methods in the COMPLETE_P case, so
1054 just make room for one more method in that case. */
1055 if (VEC_reserve (tree, method_vec, complete_p ? 1 : -1))
1056 CLASSTYPE_METHOD_VEC (type) = method_vec;
1057 if (slot == VEC_length (tree, method_vec))
1058 VEC_quick_push (tree, method_vec, overload);
1059 else
1060 VEC_quick_insert (tree, method_vec, slot, overload);
1062 else
1063 /* Replace the current slot. */
1064 VEC_replace (tree, method_vec, slot, overload);
1067 /* Subroutines of finish_struct. */
1069 /* Change the access of FDECL to ACCESS in T. Return 1 if change was
1070 legit, otherwise return 0. */
1072 static int
1073 alter_access (tree t, tree fdecl, tree access)
1075 tree elem;
1077 if (!DECL_LANG_SPECIFIC (fdecl))
1078 retrofit_lang_decl (fdecl);
1080 gcc_assert (!DECL_DISCRIMINATOR_P (fdecl));
1082 elem = purpose_member (t, DECL_ACCESS (fdecl));
1083 if (elem)
1085 if (TREE_VALUE (elem) != access)
1087 if (TREE_CODE (TREE_TYPE (fdecl)) == FUNCTION_DECL)
1088 cp_error_at ("conflicting access specifications for method"
1089 " %qD, ignored", TREE_TYPE (fdecl));
1090 else
1091 error ("conflicting access specifications for field %qE, ignored",
1092 DECL_NAME (fdecl));
1094 else
1096 /* They're changing the access to the same thing they changed
1097 it to before. That's OK. */
1101 else
1103 perform_or_defer_access_check (TYPE_BINFO (t), fdecl);
1104 DECL_ACCESS (fdecl) = tree_cons (t, access, DECL_ACCESS (fdecl));
1105 return 1;
1107 return 0;
1110 /* Process the USING_DECL, which is a member of T. */
1112 static void
1113 handle_using_decl (tree using_decl, tree t)
1115 tree ctype = DECL_INITIAL (using_decl);
1116 tree name = DECL_NAME (using_decl);
1117 tree access
1118 = TREE_PRIVATE (using_decl) ? access_private_node
1119 : TREE_PROTECTED (using_decl) ? access_protected_node
1120 : access_public_node;
1121 tree fdecl, binfo;
1122 tree flist = NULL_TREE;
1123 tree old_value;
1125 if (ctype == error_mark_node)
1126 return;
1128 binfo = lookup_base (t, ctype, ba_any, NULL);
1129 if (! binfo)
1131 location_t saved_loc = input_location;
1133 input_location = DECL_SOURCE_LOCATION (using_decl);
1134 error_not_base_type (ctype, t);
1135 input_location = saved_loc;
1136 return;
1139 if (constructor_name_p (name, ctype))
1141 cp_error_at ("%qD names constructor", using_decl);
1142 return;
1144 if (constructor_name_p (name, t))
1146 cp_error_at ("%qD invalid in %qT", using_decl, t);
1147 return;
1150 fdecl = lookup_member (binfo, name, 0, false);
1152 if (!fdecl)
1154 cp_error_at ("no members matching %qD in %q#T", using_decl, ctype);
1155 return;
1158 if (BASELINK_P (fdecl))
1159 /* Ignore base type this came from. */
1160 fdecl = BASELINK_FUNCTIONS (fdecl);
1162 old_value = lookup_member (t, name, /*protect=*/0, /*want_type=*/false);
1163 if (old_value)
1165 if (is_overloaded_fn (old_value))
1166 old_value = OVL_CURRENT (old_value);
1168 if (DECL_P (old_value) && DECL_CONTEXT (old_value) == t)
1169 /* OK */;
1170 else
1171 old_value = NULL_TREE;
1174 if (is_overloaded_fn (fdecl))
1175 flist = fdecl;
1177 if (! old_value)
1179 else if (is_overloaded_fn (old_value))
1181 if (flist)
1182 /* It's OK to use functions from a base when there are functions with
1183 the same name already present in the current class. */;
1184 else
1186 cp_error_at ("%qD invalid in %q#T", using_decl, t);
1187 cp_error_at (" because of local method %q#D with same name",
1188 OVL_CURRENT (old_value));
1189 return;
1192 else if (!DECL_ARTIFICIAL (old_value))
1194 cp_error_at ("%qD invalid in %q#T", using_decl, t);
1195 cp_error_at (" because of local member %q#D with same name", old_value);
1196 return;
1199 /* Make type T see field decl FDECL with access ACCESS. */
1200 if (flist)
1201 for (; flist; flist = OVL_NEXT (flist))
1203 add_method (t, OVL_CURRENT (flist));
1204 alter_access (t, OVL_CURRENT (flist), access);
1206 else
1207 alter_access (t, fdecl, access);
1210 /* Run through the base classes of T, updating CANT_HAVE_CONST_CTOR_P,
1211 and NO_CONST_ASN_REF_P. Also set flag bits in T based on
1212 properties of the bases. */
1214 static void
1215 check_bases (tree t,
1216 int* cant_have_const_ctor_p,
1217 int* no_const_asn_ref_p)
1219 int i;
1220 int seen_non_virtual_nearly_empty_base_p;
1221 tree base_binfo;
1222 tree binfo;
1224 seen_non_virtual_nearly_empty_base_p = 0;
1226 for (binfo = TYPE_BINFO (t), i = 0;
1227 BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
1229 tree basetype = TREE_TYPE (base_binfo);
1231 gcc_assert (COMPLETE_TYPE_P (basetype));
1233 /* Effective C++ rule 14. We only need to check TYPE_POLYMORPHIC_P
1234 here because the case of virtual functions but non-virtual
1235 dtor is handled in finish_struct_1. */
1236 if (warn_ecpp && ! TYPE_POLYMORPHIC_P (basetype))
1237 warning ("base class %q#T has a non-virtual destructor", basetype);
1239 /* If the base class doesn't have copy constructors or
1240 assignment operators that take const references, then the
1241 derived class cannot have such a member automatically
1242 generated. */
1243 if (! TYPE_HAS_CONST_INIT_REF (basetype))
1244 *cant_have_const_ctor_p = 1;
1245 if (TYPE_HAS_ASSIGN_REF (basetype)
1246 && !TYPE_HAS_CONST_ASSIGN_REF (basetype))
1247 *no_const_asn_ref_p = 1;
1249 if (BINFO_VIRTUAL_P (base_binfo))
1250 /* A virtual base does not effect nearly emptiness. */
1252 else if (CLASSTYPE_NEARLY_EMPTY_P (basetype))
1254 if (seen_non_virtual_nearly_empty_base_p)
1255 /* And if there is more than one nearly empty base, then the
1256 derived class is not nearly empty either. */
1257 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
1258 else
1259 /* Remember we've seen one. */
1260 seen_non_virtual_nearly_empty_base_p = 1;
1262 else if (!is_empty_class (basetype))
1263 /* If the base class is not empty or nearly empty, then this
1264 class cannot be nearly empty. */
1265 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
1267 /* A lot of properties from the bases also apply to the derived
1268 class. */
1269 TYPE_NEEDS_CONSTRUCTING (t) |= TYPE_NEEDS_CONSTRUCTING (basetype);
1270 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
1271 |= TYPE_HAS_NONTRIVIAL_DESTRUCTOR (basetype);
1272 TYPE_HAS_COMPLEX_ASSIGN_REF (t)
1273 |= TYPE_HAS_COMPLEX_ASSIGN_REF (basetype);
1274 TYPE_HAS_COMPLEX_INIT_REF (t) |= TYPE_HAS_COMPLEX_INIT_REF (basetype);
1275 TYPE_POLYMORPHIC_P (t) |= TYPE_POLYMORPHIC_P (basetype);
1276 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t)
1277 |= CLASSTYPE_CONTAINS_EMPTY_CLASS_P (basetype);
1281 /* Determine all the primary bases within T. Sets BINFO_PRIMARY_BASE_P for
1282 those that are primaries. Sets BINFO_LOST_PRIMARY_P for those
1283 that have had a nearly-empty virtual primary base stolen by some
1284 other base in the hierarchy. Determines CLASSTYPE_PRIMARY_BASE for
1285 T. */
1287 static void
1288 determine_primary_bases (tree t)
1290 unsigned i;
1291 tree primary = NULL_TREE;
1292 tree type_binfo = TYPE_BINFO (t);
1293 tree base_binfo;
1295 /* Determine the primary bases of our bases. */
1296 for (base_binfo = TREE_CHAIN (type_binfo); base_binfo;
1297 base_binfo = TREE_CHAIN (base_binfo))
1299 tree primary = CLASSTYPE_PRIMARY_BINFO (BINFO_TYPE (base_binfo));
1301 /* See if we're the non-virtual primary of our inheritance
1302 chain. */
1303 if (!BINFO_VIRTUAL_P (base_binfo))
1305 tree parent = BINFO_INHERITANCE_CHAIN (base_binfo);
1306 tree parent_primary = CLASSTYPE_PRIMARY_BINFO (BINFO_TYPE (parent));
1308 if (parent_primary
1309 && SAME_BINFO_TYPE_P (BINFO_TYPE (base_binfo),
1310 BINFO_TYPE (parent_primary)))
1311 /* We are the primary binfo. */
1312 BINFO_PRIMARY_P (base_binfo) = 1;
1314 /* Determine if we have a virtual primary base, and mark it so.
1316 if (primary && BINFO_VIRTUAL_P (primary))
1318 tree this_primary = copied_binfo (primary, base_binfo);
1320 if (BINFO_PRIMARY_P (this_primary))
1321 /* Someone already claimed this base. */
1322 BINFO_LOST_PRIMARY_P (base_binfo) = 1;
1323 else
1325 tree delta;
1327 BINFO_PRIMARY_P (this_primary) = 1;
1328 BINFO_INHERITANCE_CHAIN (this_primary) = base_binfo;
1330 /* A virtual binfo might have been copied from within
1331 another hierarchy. As we're about to use it as a
1332 primary base, make sure the offsets match. */
1333 delta = size_diffop (convert (ssizetype,
1334 BINFO_OFFSET (base_binfo)),
1335 convert (ssizetype,
1336 BINFO_OFFSET (this_primary)));
1338 propagate_binfo_offsets (this_primary, delta);
1343 /* First look for a dynamic direct non-virtual base. */
1344 for (i = 0; BINFO_BASE_ITERATE (type_binfo, i, base_binfo); i++)
1346 tree basetype = BINFO_TYPE (base_binfo);
1348 if (TYPE_CONTAINS_VPTR_P (basetype) && !BINFO_VIRTUAL_P (base_binfo))
1350 primary = base_binfo;
1351 goto found;
1355 /* A "nearly-empty" virtual base class can be the primary base
1356 class, if no non-virtual polymorphic base can be found. Look for
1357 a nearly-empty virtual dynamic base that is not already a primary
1358 base of something in the hierarchy. If there is no such base,
1359 just pick the first nearly-empty virtual base. */
1361 for (base_binfo = TREE_CHAIN (type_binfo); base_binfo;
1362 base_binfo = TREE_CHAIN (base_binfo))
1363 if (BINFO_VIRTUAL_P (base_binfo)
1364 && CLASSTYPE_NEARLY_EMPTY_P (BINFO_TYPE (base_binfo)))
1366 if (!BINFO_PRIMARY_P (base_binfo))
1368 /* Found one that is not primary. */
1369 primary = base_binfo;
1370 goto found;
1372 else if (!primary)
1373 /* Remember the first candidate. */
1374 primary = base_binfo;
1377 found:
1378 /* If we've got a primary base, use it. */
1379 if (primary)
1381 tree basetype = BINFO_TYPE (primary);
1383 CLASSTYPE_PRIMARY_BINFO (t) = primary;
1384 if (BINFO_PRIMARY_P (primary))
1385 /* We are stealing a primary base. */
1386 BINFO_LOST_PRIMARY_P (BINFO_INHERITANCE_CHAIN (primary)) = 1;
1387 BINFO_PRIMARY_P (primary) = 1;
1388 if (BINFO_VIRTUAL_P (primary))
1390 tree delta;
1392 BINFO_INHERITANCE_CHAIN (primary) = type_binfo;
1393 /* A virtual binfo might have been copied from within
1394 another hierarchy. As we're about to use it as a primary
1395 base, make sure the offsets match. */
1396 delta = size_diffop (ssize_int (0),
1397 convert (ssizetype, BINFO_OFFSET (primary)));
1399 propagate_binfo_offsets (primary, delta);
1402 primary = TYPE_BINFO (basetype);
1404 TYPE_VFIELD (t) = TYPE_VFIELD (basetype);
1405 BINFO_VTABLE (type_binfo) = BINFO_VTABLE (primary);
1406 BINFO_VIRTUALS (type_binfo) = BINFO_VIRTUALS (primary);
1410 /* Set memoizing fields and bits of T (and its variants) for later
1411 use. */
1413 static void
1414 finish_struct_bits (tree t)
1416 tree variants;
1418 /* Fix up variants (if any). */
1419 for (variants = TYPE_NEXT_VARIANT (t);
1420 variants;
1421 variants = TYPE_NEXT_VARIANT (variants))
1423 /* These fields are in the _TYPE part of the node, not in
1424 the TYPE_LANG_SPECIFIC component, so they are not shared. */
1425 TYPE_HAS_CONSTRUCTOR (variants) = TYPE_HAS_CONSTRUCTOR (t);
1426 TYPE_NEEDS_CONSTRUCTING (variants) = TYPE_NEEDS_CONSTRUCTING (t);
1427 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (variants)
1428 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t);
1430 TYPE_POLYMORPHIC_P (variants) = TYPE_POLYMORPHIC_P (t);
1432 TYPE_BINFO (variants) = TYPE_BINFO (t);
1434 /* Copy whatever these are holding today. */
1435 TYPE_VFIELD (variants) = TYPE_VFIELD (t);
1436 TYPE_METHODS (variants) = TYPE_METHODS (t);
1437 TYPE_FIELDS (variants) = TYPE_FIELDS (t);
1438 TYPE_SIZE (variants) = TYPE_SIZE (t);
1439 TYPE_SIZE_UNIT (variants) = TYPE_SIZE_UNIT (t);
1442 if (BINFO_N_BASE_BINFOS (TYPE_BINFO (t)) && TYPE_POLYMORPHIC_P (t))
1443 /* For a class w/o baseclasses, 'finish_struct' has set
1444 CLASSTYPE_PURE_VIRTUALS correctly (by definition).
1445 Similarly for a class whose base classes do not have vtables.
1446 When neither of these is true, we might have removed abstract
1447 virtuals (by providing a definition), added some (by declaring
1448 new ones), or redeclared ones from a base class. We need to
1449 recalculate what's really an abstract virtual at this point (by
1450 looking in the vtables). */
1451 get_pure_virtuals (t);
1453 /* If this type has a copy constructor or a destructor, force its
1454 mode to be BLKmode, and force its TREE_ADDRESSABLE bit to be
1455 nonzero. This will cause it to be passed by invisible reference
1456 and prevent it from being returned in a register. */
1457 if (! TYPE_HAS_TRIVIAL_INIT_REF (t) || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t))
1459 tree variants;
1460 DECL_MODE (TYPE_MAIN_DECL (t)) = BLKmode;
1461 for (variants = t; variants; variants = TYPE_NEXT_VARIANT (variants))
1463 TYPE_MODE (variants) = BLKmode;
1464 TREE_ADDRESSABLE (variants) = 1;
1469 /* Issue warnings about T having private constructors, but no friends,
1470 and so forth.
1472 HAS_NONPRIVATE_METHOD is nonzero if T has any non-private methods or
1473 static members. HAS_NONPRIVATE_STATIC_FN is nonzero if T has any
1474 non-private static member functions. */
1476 static void
1477 maybe_warn_about_overly_private_class (tree t)
1479 int has_member_fn = 0;
1480 int has_nonprivate_method = 0;
1481 tree fn;
1483 if (!warn_ctor_dtor_privacy
1484 /* If the class has friends, those entities might create and
1485 access instances, so we should not warn. */
1486 || (CLASSTYPE_FRIEND_CLASSES (t)
1487 || DECL_FRIENDLIST (TYPE_MAIN_DECL (t)))
1488 /* We will have warned when the template was declared; there's
1489 no need to warn on every instantiation. */
1490 || CLASSTYPE_TEMPLATE_INSTANTIATION (t))
1491 /* There's no reason to even consider warning about this
1492 class. */
1493 return;
1495 /* We only issue one warning, if more than one applies, because
1496 otherwise, on code like:
1498 class A {
1499 // Oops - forgot `public:'
1500 A();
1501 A(const A&);
1502 ~A();
1505 we warn several times about essentially the same problem. */
1507 /* Check to see if all (non-constructor, non-destructor) member
1508 functions are private. (Since there are no friends or
1509 non-private statics, we can't ever call any of the private member
1510 functions.) */
1511 for (fn = TYPE_METHODS (t); fn; fn = TREE_CHAIN (fn))
1512 /* We're not interested in compiler-generated methods; they don't
1513 provide any way to call private members. */
1514 if (!DECL_ARTIFICIAL (fn))
1516 if (!TREE_PRIVATE (fn))
1518 if (DECL_STATIC_FUNCTION_P (fn))
1519 /* A non-private static member function is just like a
1520 friend; it can create and invoke private member
1521 functions, and be accessed without a class
1522 instance. */
1523 return;
1525 has_nonprivate_method = 1;
1526 /* Keep searching for a static member function. */
1528 else if (!DECL_CONSTRUCTOR_P (fn) && !DECL_DESTRUCTOR_P (fn))
1529 has_member_fn = 1;
1532 if (!has_nonprivate_method && has_member_fn)
1534 /* There are no non-private methods, and there's at least one
1535 private member function that isn't a constructor or
1536 destructor. (If all the private members are
1537 constructors/destructors we want to use the code below that
1538 issues error messages specifically referring to
1539 constructors/destructors.) */
1540 unsigned i;
1541 tree binfo = TYPE_BINFO (t);
1543 for (i = 0; i != BINFO_N_BASE_BINFOS (binfo); i++)
1544 if (BINFO_BASE_ACCESS (binfo, i) != access_private_node)
1546 has_nonprivate_method = 1;
1547 break;
1549 if (!has_nonprivate_method)
1551 warning ("all member functions in class %qT are private", t);
1552 return;
1556 /* Even if some of the member functions are non-private, the class
1557 won't be useful for much if all the constructors or destructors
1558 are private: such an object can never be created or destroyed. */
1559 fn = CLASSTYPE_DESTRUCTORS (t);
1560 if (fn && TREE_PRIVATE (fn))
1562 warning ("%q#T only defines a private destructor and has no friends",
1564 return;
1567 if (TYPE_HAS_CONSTRUCTOR (t))
1569 int nonprivate_ctor = 0;
1571 /* If a non-template class does not define a copy
1572 constructor, one is defined for it, enabling it to avoid
1573 this warning. For a template class, this does not
1574 happen, and so we would normally get a warning on:
1576 template <class T> class C { private: C(); };
1578 To avoid this asymmetry, we check TYPE_HAS_INIT_REF. All
1579 complete non-template or fully instantiated classes have this
1580 flag set. */
1581 if (!TYPE_HAS_INIT_REF (t))
1582 nonprivate_ctor = 1;
1583 else
1584 for (fn = CLASSTYPE_CONSTRUCTORS (t); fn; fn = OVL_NEXT (fn))
1586 tree ctor = OVL_CURRENT (fn);
1587 /* Ideally, we wouldn't count copy constructors (or, in
1588 fact, any constructor that takes an argument of the
1589 class type as a parameter) because such things cannot
1590 be used to construct an instance of the class unless
1591 you already have one. But, for now at least, we're
1592 more generous. */
1593 if (! TREE_PRIVATE (ctor))
1595 nonprivate_ctor = 1;
1596 break;
1600 if (nonprivate_ctor == 0)
1602 warning ("%q#T only defines private constructors and has no friends",
1604 return;
1609 static struct {
1610 gt_pointer_operator new_value;
1611 void *cookie;
1612 } resort_data;
1614 /* Comparison function to compare two TYPE_METHOD_VEC entries by name. */
1616 static int
1617 method_name_cmp (const void* m1_p, const void* m2_p)
1619 const tree *const m1 = m1_p;
1620 const tree *const m2 = m2_p;
1622 if (*m1 == NULL_TREE && *m2 == NULL_TREE)
1623 return 0;
1624 if (*m1 == NULL_TREE)
1625 return -1;
1626 if (*m2 == NULL_TREE)
1627 return 1;
1628 if (DECL_NAME (OVL_CURRENT (*m1)) < DECL_NAME (OVL_CURRENT (*m2)))
1629 return -1;
1630 return 1;
1633 /* This routine compares two fields like method_name_cmp but using the
1634 pointer operator in resort_field_decl_data. */
1636 static int
1637 resort_method_name_cmp (const void* m1_p, const void* m2_p)
1639 const tree *const m1 = m1_p;
1640 const tree *const m2 = m2_p;
1641 if (*m1 == NULL_TREE && *m2 == NULL_TREE)
1642 return 0;
1643 if (*m1 == NULL_TREE)
1644 return -1;
1645 if (*m2 == NULL_TREE)
1646 return 1;
1648 tree d1 = DECL_NAME (OVL_CURRENT (*m1));
1649 tree d2 = DECL_NAME (OVL_CURRENT (*m2));
1650 resort_data.new_value (&d1, resort_data.cookie);
1651 resort_data.new_value (&d2, resort_data.cookie);
1652 if (d1 < d2)
1653 return -1;
1655 return 1;
1658 /* Resort TYPE_METHOD_VEC because pointers have been reordered. */
1660 void
1661 resort_type_method_vec (void* obj,
1662 void* orig_obj ATTRIBUTE_UNUSED ,
1663 gt_pointer_operator new_value,
1664 void* cookie)
1666 VEC(tree) *method_vec = (VEC(tree) *) obj;
1667 int len = VEC_length (tree, method_vec);
1668 size_t slot;
1669 tree fn;
1671 /* The type conversion ops have to live at the front of the vec, so we
1672 can't sort them. */
1673 for (slot = CLASSTYPE_FIRST_CONVERSION_SLOT;
1674 VEC_iterate (tree, method_vec, slot, fn);
1675 ++slot)
1676 if (!DECL_CONV_FN_P (OVL_CURRENT (fn)))
1677 break;
1679 if (len - slot > 1)
1681 resort_data.new_value = new_value;
1682 resort_data.cookie = cookie;
1683 qsort (VEC_address (tree, method_vec) + slot, len - slot, sizeof (tree),
1684 resort_method_name_cmp);
1688 /* Warn about duplicate methods in fn_fields.
1690 Sort methods that are not special (i.e., constructors, destructors,
1691 and type conversion operators) so that we can find them faster in
1692 search. */
1694 static void
1695 finish_struct_methods (tree t)
1697 tree fn_fields;
1698 VEC(tree) *method_vec;
1699 int slot, len;
1701 method_vec = CLASSTYPE_METHOD_VEC (t);
1702 if (!method_vec)
1703 return;
1705 len = VEC_length (tree, method_vec);
1707 /* Clear DECL_IN_AGGR_P for all functions. */
1708 for (fn_fields = TYPE_METHODS (t); fn_fields;
1709 fn_fields = TREE_CHAIN (fn_fields))
1710 DECL_IN_AGGR_P (fn_fields) = 0;
1712 /* Issue warnings about private constructors and such. If there are
1713 no methods, then some public defaults are generated. */
1714 maybe_warn_about_overly_private_class (t);
1716 /* The type conversion ops have to live at the front of the vec, so we
1717 can't sort them. */
1718 for (slot = CLASSTYPE_FIRST_CONVERSION_SLOT;
1719 VEC_iterate (tree, method_vec, slot, fn_fields);
1720 ++slot)
1721 if (!DECL_CONV_FN_P (OVL_CURRENT (fn_fields)))
1722 break;
1723 if (len - slot > 1)
1724 qsort (VEC_address (tree, method_vec) + slot,
1725 len-slot, sizeof (tree), method_name_cmp);
1728 /* Make BINFO's vtable have N entries, including RTTI entries,
1729 vbase and vcall offsets, etc. Set its type and call the backend
1730 to lay it out. */
1732 static void
1733 layout_vtable_decl (tree binfo, int n)
1735 tree atype;
1736 tree vtable;
1738 atype = build_cplus_array_type (vtable_entry_type,
1739 build_index_type (size_int (n - 1)));
1740 layout_type (atype);
1742 /* We may have to grow the vtable. */
1743 vtable = get_vtbl_decl_for_binfo (binfo);
1744 if (!same_type_p (TREE_TYPE (vtable), atype))
1746 TREE_TYPE (vtable) = atype;
1747 DECL_SIZE (vtable) = DECL_SIZE_UNIT (vtable) = NULL_TREE;
1748 layout_decl (vtable, 0);
1752 /* True iff FNDECL and BASE_FNDECL (both non-static member functions)
1753 have the same signature. */
1756 same_signature_p (tree fndecl, tree base_fndecl)
1758 /* One destructor overrides another if they are the same kind of
1759 destructor. */
1760 if (DECL_DESTRUCTOR_P (base_fndecl) && DECL_DESTRUCTOR_P (fndecl)
1761 && special_function_p (base_fndecl) == special_function_p (fndecl))
1762 return 1;
1763 /* But a non-destructor never overrides a destructor, nor vice
1764 versa, nor do different kinds of destructors override
1765 one-another. For example, a complete object destructor does not
1766 override a deleting destructor. */
1767 if (DECL_DESTRUCTOR_P (base_fndecl) || DECL_DESTRUCTOR_P (fndecl))
1768 return 0;
1770 if (DECL_NAME (fndecl) == DECL_NAME (base_fndecl)
1771 || (DECL_CONV_FN_P (fndecl)
1772 && DECL_CONV_FN_P (base_fndecl)
1773 && same_type_p (DECL_CONV_FN_TYPE (fndecl),
1774 DECL_CONV_FN_TYPE (base_fndecl))))
1776 tree types, base_types;
1777 types = TYPE_ARG_TYPES (TREE_TYPE (fndecl));
1778 base_types = TYPE_ARG_TYPES (TREE_TYPE (base_fndecl));
1779 if ((TYPE_QUALS (TREE_TYPE (TREE_VALUE (base_types)))
1780 == TYPE_QUALS (TREE_TYPE (TREE_VALUE (types))))
1781 && compparms (TREE_CHAIN (base_types), TREE_CHAIN (types)))
1782 return 1;
1784 return 0;
1787 /* Returns TRUE if DERIVED is a binfo containing the binfo BASE as a
1788 subobject. */
1790 static bool
1791 base_derived_from (tree derived, tree base)
1793 tree probe;
1795 for (probe = base; probe; probe = BINFO_INHERITANCE_CHAIN (probe))
1797 if (probe == derived)
1798 return true;
1799 else if (BINFO_VIRTUAL_P (probe))
1800 /* If we meet a virtual base, we can't follow the inheritance
1801 any more. See if the complete type of DERIVED contains
1802 such a virtual base. */
1803 return (binfo_for_vbase (BINFO_TYPE (probe), BINFO_TYPE (derived))
1804 != NULL_TREE);
1806 return false;
1809 typedef struct find_final_overrider_data_s {
1810 /* The function for which we are trying to find a final overrider. */
1811 tree fn;
1812 /* The base class in which the function was declared. */
1813 tree declaring_base;
1814 /* The candidate overriders. */
1815 tree candidates;
1816 /* Path to most derived. */
1817 VEC (tree) *path;
1818 } find_final_overrider_data;
1820 /* Add the overrider along the current path to FFOD->CANDIDATES.
1821 Returns true if an overrider was found; false otherwise. */
1823 static bool
1824 dfs_find_final_overrider_1 (tree binfo,
1825 find_final_overrider_data *ffod,
1826 unsigned depth)
1828 tree method;
1830 /* If BINFO is not the most derived type, try a more derived class.
1831 A definition there will overrider a definition here. */
1832 if (depth)
1834 depth--;
1835 if (dfs_find_final_overrider_1
1836 (VEC_index (tree, ffod->path, depth), ffod, depth))
1837 return true;
1840 method = look_for_overrides_here (BINFO_TYPE (binfo), ffod->fn);
1841 if (method)
1843 tree *candidate = &ffod->candidates;
1845 /* Remove any candidates overridden by this new function. */
1846 while (*candidate)
1848 /* If *CANDIDATE overrides METHOD, then METHOD
1849 cannot override anything else on the list. */
1850 if (base_derived_from (TREE_VALUE (*candidate), binfo))
1851 return true;
1852 /* If METHOD overrides *CANDIDATE, remove *CANDIDATE. */
1853 if (base_derived_from (binfo, TREE_VALUE (*candidate)))
1854 *candidate = TREE_CHAIN (*candidate);
1855 else
1856 candidate = &TREE_CHAIN (*candidate);
1859 /* Add the new function. */
1860 ffod->candidates = tree_cons (method, binfo, ffod->candidates);
1861 return true;
1864 return false;
1867 /* Called from find_final_overrider via dfs_walk. */
1869 static tree
1870 dfs_find_final_overrider_pre (tree binfo, void *data)
1872 find_final_overrider_data *ffod = (find_final_overrider_data *) data;
1874 if (binfo == ffod->declaring_base)
1875 dfs_find_final_overrider_1 (binfo, ffod, VEC_length (tree, ffod->path));
1876 VEC_safe_push (tree, ffod->path, binfo);
1878 return NULL_TREE;
1881 static tree
1882 dfs_find_final_overrider_post (tree binfo ATTRIBUTE_UNUSED, void *data)
1884 find_final_overrider_data *ffod = (find_final_overrider_data *) data;
1885 VEC_pop (tree, ffod->path);
1887 return NULL_TREE;
1890 /* Returns a TREE_LIST whose TREE_PURPOSE is the final overrider for
1891 FN and whose TREE_VALUE is the binfo for the base where the
1892 overriding occurs. BINFO (in the hierarchy dominated by the binfo
1893 DERIVED) is the base object in which FN is declared. */
1895 static tree
1896 find_final_overrider (tree derived, tree binfo, tree fn)
1898 find_final_overrider_data ffod;
1900 /* Getting this right is a little tricky. This is valid:
1902 struct S { virtual void f (); };
1903 struct T { virtual void f (); };
1904 struct U : public S, public T { };
1906 even though calling `f' in `U' is ambiguous. But,
1908 struct R { virtual void f(); };
1909 struct S : virtual public R { virtual void f (); };
1910 struct T : virtual public R { virtual void f (); };
1911 struct U : public S, public T { };
1913 is not -- there's no way to decide whether to put `S::f' or
1914 `T::f' in the vtable for `R'.
1916 The solution is to look at all paths to BINFO. If we find
1917 different overriders along any two, then there is a problem. */
1918 if (DECL_THUNK_P (fn))
1919 fn = THUNK_TARGET (fn);
1921 /* Determine the depth of the hierarchy. */
1922 ffod.fn = fn;
1923 ffod.declaring_base = binfo;
1924 ffod.candidates = NULL_TREE;
1925 ffod.path = VEC_alloc (tree, 30);
1927 dfs_walk_all (derived, dfs_find_final_overrider_pre,
1928 dfs_find_final_overrider_post, &ffod);
1930 VEC_free (tree, ffod.path);
1932 /* If there was no winner, issue an error message. */
1933 if (!ffod.candidates || TREE_CHAIN (ffod.candidates))
1935 error ("no unique final overrider for %qD in %qT", fn,
1936 BINFO_TYPE (derived));
1937 return error_mark_node;
1940 return ffod.candidates;
1943 /* Return the index of the vcall offset for FN when TYPE is used as a
1944 virtual base. */
1946 static tree
1947 get_vcall_index (tree fn, tree type)
1949 VEC (tree_pair_s) *indices = CLASSTYPE_VCALL_INDICES (type);
1950 tree_pair_p p;
1951 unsigned ix;
1953 for (ix = 0; VEC_iterate (tree_pair_s, indices, ix, p); ix++)
1954 if ((DECL_DESTRUCTOR_P (fn) && DECL_DESTRUCTOR_P (p->purpose))
1955 || same_signature_p (fn, p->purpose))
1956 return p->value;
1958 /* There should always be an appropriate index. */
1959 gcc_unreachable ();
1962 /* Update an entry in the vtable for BINFO, which is in the hierarchy
1963 dominated by T. FN has been overridden in BINFO; VIRTUALS points to the
1964 corresponding position in the BINFO_VIRTUALS list. */
1966 static void
1967 update_vtable_entry_for_fn (tree t, tree binfo, tree fn, tree* virtuals,
1968 unsigned ix)
1970 tree b;
1971 tree overrider;
1972 tree delta;
1973 tree virtual_base;
1974 tree first_defn;
1975 tree overrider_fn, overrider_target;
1976 tree target_fn = DECL_THUNK_P (fn) ? THUNK_TARGET (fn) : fn;
1977 tree over_return, base_return;
1978 bool lost = false;
1980 /* Find the nearest primary base (possibly binfo itself) which defines
1981 this function; this is the class the caller will convert to when
1982 calling FN through BINFO. */
1983 for (b = binfo; ; b = get_primary_binfo (b))
1985 gcc_assert (b);
1986 if (look_for_overrides_here (BINFO_TYPE (b), target_fn))
1987 break;
1989 /* The nearest definition is from a lost primary. */
1990 if (BINFO_LOST_PRIMARY_P (b))
1991 lost = true;
1993 first_defn = b;
1995 /* Find the final overrider. */
1996 overrider = find_final_overrider (TYPE_BINFO (t), b, target_fn);
1997 if (overrider == error_mark_node)
1998 return;
1999 overrider_target = overrider_fn = TREE_PURPOSE (overrider);
2001 /* Check for adjusting covariant return types. */
2002 over_return = TREE_TYPE (TREE_TYPE (overrider_target));
2003 base_return = TREE_TYPE (TREE_TYPE (target_fn));
2005 if (POINTER_TYPE_P (over_return)
2006 && TREE_CODE (over_return) == TREE_CODE (base_return)
2007 && CLASS_TYPE_P (TREE_TYPE (over_return))
2008 && CLASS_TYPE_P (TREE_TYPE (base_return)))
2010 /* If FN is a covariant thunk, we must figure out the adjustment
2011 to the final base FN was converting to. As OVERRIDER_TARGET might
2012 also be converting to the return type of FN, we have to
2013 combine the two conversions here. */
2014 tree fixed_offset, virtual_offset;
2016 over_return = TREE_TYPE (over_return);
2017 base_return = TREE_TYPE (base_return);
2019 if (DECL_THUNK_P (fn))
2021 gcc_assert (DECL_RESULT_THUNK_P (fn));
2022 fixed_offset = ssize_int (THUNK_FIXED_OFFSET (fn));
2023 virtual_offset = THUNK_VIRTUAL_OFFSET (fn);
2025 else
2026 fixed_offset = virtual_offset = NULL_TREE;
2028 if (virtual_offset)
2029 /* Find the equivalent binfo within the return type of the
2030 overriding function. We will want the vbase offset from
2031 there. */
2032 virtual_offset = binfo_for_vbase (BINFO_TYPE (virtual_offset),
2033 over_return);
2034 else if (!same_type_ignoring_top_level_qualifiers_p
2035 (over_return, base_return))
2037 /* There was no existing virtual thunk (which takes
2038 precedence). So find the binfo of the base function's
2039 return type within the overriding function's return type.
2040 We cannot call lookup base here, because we're inside a
2041 dfs_walk, and will therefore clobber the BINFO_MARKED
2042 flags. Fortunately we know the covariancy is valid (it
2043 has already been checked), so we can just iterate along
2044 the binfos, which have been chained in inheritance graph
2045 order. Of course it is lame that we have to repeat the
2046 search here anyway -- we should really be caching pieces
2047 of the vtable and avoiding this repeated work. */
2048 tree thunk_binfo, base_binfo;
2050 /* Find the base binfo within the overriding function's
2051 return type. We will always find a thunk_binfo, except
2052 when the covariancy is invalid (which we will have
2053 already diagnosed). */
2054 for (base_binfo = TYPE_BINFO (base_return),
2055 thunk_binfo = TYPE_BINFO (over_return);
2056 thunk_binfo;
2057 thunk_binfo = TREE_CHAIN (thunk_binfo))
2058 if (SAME_BINFO_TYPE_P (BINFO_TYPE (thunk_binfo),
2059 BINFO_TYPE (base_binfo)))
2060 break;
2062 /* See if virtual inheritance is involved. */
2063 for (virtual_offset = thunk_binfo;
2064 virtual_offset;
2065 virtual_offset = BINFO_INHERITANCE_CHAIN (virtual_offset))
2066 if (BINFO_VIRTUAL_P (virtual_offset))
2067 break;
2069 if (virtual_offset
2070 || (thunk_binfo && !BINFO_OFFSET_ZEROP (thunk_binfo)))
2072 tree offset = convert (ssizetype, BINFO_OFFSET (thunk_binfo));
2074 if (virtual_offset)
2076 /* We convert via virtual base. Adjust the fixed
2077 offset to be from there. */
2078 offset = size_diffop
2079 (offset, convert
2080 (ssizetype, BINFO_OFFSET (virtual_offset)));
2082 if (fixed_offset)
2083 /* There was an existing fixed offset, this must be
2084 from the base just converted to, and the base the
2085 FN was thunking to. */
2086 fixed_offset = size_binop (PLUS_EXPR, fixed_offset, offset);
2087 else
2088 fixed_offset = offset;
2092 if (fixed_offset || virtual_offset)
2093 /* Replace the overriding function with a covariant thunk. We
2094 will emit the overriding function in its own slot as
2095 well. */
2096 overrider_fn = make_thunk (overrider_target, /*this_adjusting=*/0,
2097 fixed_offset, virtual_offset);
2099 else
2100 gcc_assert (!DECL_THUNK_P (fn));
2102 /* Assume that we will produce a thunk that convert all the way to
2103 the final overrider, and not to an intermediate virtual base. */
2104 virtual_base = NULL_TREE;
2106 /* See if we can convert to an intermediate virtual base first, and then
2107 use the vcall offset located there to finish the conversion. */
2108 for (; b; b = BINFO_INHERITANCE_CHAIN (b))
2110 /* If we find the final overrider, then we can stop
2111 walking. */
2112 if (SAME_BINFO_TYPE_P (BINFO_TYPE (b),
2113 BINFO_TYPE (TREE_VALUE (overrider))))
2114 break;
2116 /* If we find a virtual base, and we haven't yet found the
2117 overrider, then there is a virtual base between the
2118 declaring base (first_defn) and the final overrider. */
2119 if (BINFO_VIRTUAL_P (b))
2121 virtual_base = b;
2122 break;
2126 if (overrider_fn != overrider_target && !virtual_base)
2128 /* The ABI specifies that a covariant thunk includes a mangling
2129 for a this pointer adjustment. This-adjusting thunks that
2130 override a function from a virtual base have a vcall
2131 adjustment. When the virtual base in question is a primary
2132 virtual base, we know the adjustments are zero, (and in the
2133 non-covariant case, we would not use the thunk).
2134 Unfortunately we didn't notice this could happen, when
2135 designing the ABI and so never mandated that such a covariant
2136 thunk should be emitted. Because we must use the ABI mandated
2137 name, we must continue searching from the binfo where we
2138 found the most recent definition of the function, towards the
2139 primary binfo which first introduced the function into the
2140 vtable. If that enters a virtual base, we must use a vcall
2141 this-adjusting thunk. Bleah! */
2142 tree probe = first_defn;
2144 while ((probe = get_primary_binfo (probe))
2145 && (unsigned) list_length (BINFO_VIRTUALS (probe)) > ix)
2146 if (BINFO_VIRTUAL_P (probe))
2147 virtual_base = probe;
2149 if (virtual_base)
2150 /* Even if we find a virtual base, the correct delta is
2151 between the overrider and the binfo we're building a vtable
2152 for. */
2153 goto virtual_covariant;
2156 /* Compute the constant adjustment to the `this' pointer. The
2157 `this' pointer, when this function is called, will point at BINFO
2158 (or one of its primary bases, which are at the same offset). */
2159 if (virtual_base)
2160 /* The `this' pointer needs to be adjusted from the declaration to
2161 the nearest virtual base. */
2162 delta = size_diffop (convert (ssizetype, BINFO_OFFSET (virtual_base)),
2163 convert (ssizetype, BINFO_OFFSET (first_defn)));
2164 else if (lost)
2165 /* If the nearest definition is in a lost primary, we don't need an
2166 entry in our vtable. Except possibly in a constructor vtable,
2167 if we happen to get our primary back. In that case, the offset
2168 will be zero, as it will be a primary base. */
2169 delta = size_zero_node;
2170 else
2171 /* The `this' pointer needs to be adjusted from pointing to
2172 BINFO to pointing at the base where the final overrider
2173 appears. */
2174 virtual_covariant:
2175 delta = size_diffop (convert (ssizetype,
2176 BINFO_OFFSET (TREE_VALUE (overrider))),
2177 convert (ssizetype, BINFO_OFFSET (binfo)));
2179 modify_vtable_entry (t, binfo, overrider_fn, delta, virtuals);
2181 if (virtual_base)
2182 BV_VCALL_INDEX (*virtuals)
2183 = get_vcall_index (overrider_target, BINFO_TYPE (virtual_base));
2184 else
2185 BV_VCALL_INDEX (*virtuals) = NULL_TREE;
2188 /* Called from modify_all_vtables via dfs_walk. */
2190 static tree
2191 dfs_modify_vtables (tree binfo, void* data)
2193 tree t = (tree) data;
2194 tree virtuals;
2195 tree old_virtuals;
2196 unsigned ix;
2198 if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
2199 /* A base without a vtable needs no modification, and its bases
2200 are uninteresting. */
2201 return dfs_skip_bases;
2203 if (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), t)
2204 && !CLASSTYPE_HAS_PRIMARY_BASE_P (t))
2205 /* Don't do the primary vtable, if it's new. */
2206 return NULL_TREE;
2208 if (BINFO_PRIMARY_P (binfo) && !BINFO_VIRTUAL_P (binfo))
2209 /* There's no need to modify the vtable for a non-virtual primary
2210 base; we're not going to use that vtable anyhow. We do still
2211 need to do this for virtual primary bases, as they could become
2212 non-primary in a construction vtable. */
2213 return NULL_TREE;
2215 make_new_vtable (t, binfo);
2217 /* Now, go through each of the virtual functions in the virtual
2218 function table for BINFO. Find the final overrider, and update
2219 the BINFO_VIRTUALS list appropriately. */
2220 for (ix = 0, virtuals = BINFO_VIRTUALS (binfo),
2221 old_virtuals = BINFO_VIRTUALS (TYPE_BINFO (BINFO_TYPE (binfo)));
2222 virtuals;
2223 ix++, virtuals = TREE_CHAIN (virtuals),
2224 old_virtuals = TREE_CHAIN (old_virtuals))
2225 update_vtable_entry_for_fn (t,
2226 binfo,
2227 BV_FN (old_virtuals),
2228 &virtuals, ix);
2230 return NULL_TREE;
2233 /* Update all of the primary and secondary vtables for T. Create new
2234 vtables as required, and initialize their RTTI information. Each
2235 of the functions in VIRTUALS is declared in T and may override a
2236 virtual function from a base class; find and modify the appropriate
2237 entries to point to the overriding functions. Returns a list, in
2238 declaration order, of the virtual functions that are declared in T,
2239 but do not appear in the primary base class vtable, and which
2240 should therefore be appended to the end of the vtable for T. */
2242 static tree
2243 modify_all_vtables (tree t, tree virtuals)
2245 tree binfo = TYPE_BINFO (t);
2246 tree *fnsp;
2248 /* Update all of the vtables. */
2249 dfs_walk_once (binfo, dfs_modify_vtables, NULL, t);
2251 /* Add virtual functions not already in our primary vtable. These
2252 will be both those introduced by this class, and those overridden
2253 from secondary bases. It does not include virtuals merely
2254 inherited from secondary bases. */
2255 for (fnsp = &virtuals; *fnsp; )
2257 tree fn = TREE_VALUE (*fnsp);
2259 if (!value_member (fn, BINFO_VIRTUALS (binfo))
2260 || DECL_VINDEX (fn) == error_mark_node)
2262 /* We don't need to adjust the `this' pointer when
2263 calling this function. */
2264 BV_DELTA (*fnsp) = integer_zero_node;
2265 BV_VCALL_INDEX (*fnsp) = NULL_TREE;
2267 /* This is a function not already in our vtable. Keep it. */
2268 fnsp = &TREE_CHAIN (*fnsp);
2270 else
2271 /* We've already got an entry for this function. Skip it. */
2272 *fnsp = TREE_CHAIN (*fnsp);
2275 return virtuals;
2278 /* Get the base virtual function declarations in T that have the
2279 indicated NAME. */
2281 static tree
2282 get_basefndecls (tree name, tree t)
2284 tree methods;
2285 tree base_fndecls = NULL_TREE;
2286 int n_baseclasses = BINFO_N_BASE_BINFOS (TYPE_BINFO (t));
2287 int i;
2289 /* Find virtual functions in T with the indicated NAME. */
2290 i = lookup_fnfields_1 (t, name);
2291 if (i != -1)
2292 for (methods = VEC_index (tree, CLASSTYPE_METHOD_VEC (t), i);
2293 methods;
2294 methods = OVL_NEXT (methods))
2296 tree method = OVL_CURRENT (methods);
2298 if (TREE_CODE (method) == FUNCTION_DECL
2299 && DECL_VINDEX (method))
2300 base_fndecls = tree_cons (NULL_TREE, method, base_fndecls);
2303 if (base_fndecls)
2304 return base_fndecls;
2306 for (i = 0; i < n_baseclasses; i++)
2308 tree basetype = BINFO_TYPE (BINFO_BASE_BINFO (TYPE_BINFO (t), i));
2309 base_fndecls = chainon (get_basefndecls (name, basetype),
2310 base_fndecls);
2313 return base_fndecls;
2316 /* If this declaration supersedes the declaration of
2317 a method declared virtual in the base class, then
2318 mark this field as being virtual as well. */
2320 void
2321 check_for_override (tree decl, tree ctype)
2323 if (TREE_CODE (decl) == TEMPLATE_DECL)
2324 /* In [temp.mem] we have:
2326 A specialization of a member function template does not
2327 override a virtual function from a base class. */
2328 return;
2329 if ((DECL_DESTRUCTOR_P (decl)
2330 || IDENTIFIER_VIRTUAL_P (DECL_NAME (decl))
2331 || DECL_CONV_FN_P (decl))
2332 && look_for_overrides (ctype, decl)
2333 && !DECL_STATIC_FUNCTION_P (decl))
2334 /* Set DECL_VINDEX to a value that is neither an INTEGER_CST nor
2335 the error_mark_node so that we know it is an overriding
2336 function. */
2337 DECL_VINDEX (decl) = decl;
2339 if (DECL_VIRTUAL_P (decl))
2341 if (!DECL_VINDEX (decl))
2342 DECL_VINDEX (decl) = error_mark_node;
2343 IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)) = 1;
2347 /* Warn about hidden virtual functions that are not overridden in t.
2348 We know that constructors and destructors don't apply. */
2350 void
2351 warn_hidden (tree t)
2353 VEC(tree) *method_vec = CLASSTYPE_METHOD_VEC (t);
2354 tree fns;
2355 size_t i;
2357 /* We go through each separately named virtual function. */
2358 for (i = CLASSTYPE_FIRST_CONVERSION_SLOT;
2359 VEC_iterate (tree, method_vec, i, fns);
2360 ++i)
2362 tree fn;
2363 tree name;
2364 tree fndecl;
2365 tree base_fndecls;
2366 tree base_binfo;
2367 tree binfo;
2368 int j;
2370 /* All functions in this slot in the CLASSTYPE_METHOD_VEC will
2371 have the same name. Figure out what name that is. */
2372 name = DECL_NAME (OVL_CURRENT (fns));
2373 /* There are no possibly hidden functions yet. */
2374 base_fndecls = NULL_TREE;
2375 /* Iterate through all of the base classes looking for possibly
2376 hidden functions. */
2377 for (binfo = TYPE_BINFO (t), j = 0;
2378 BINFO_BASE_ITERATE (binfo, j, base_binfo); j++)
2380 tree basetype = BINFO_TYPE (base_binfo);
2381 base_fndecls = chainon (get_basefndecls (name, basetype),
2382 base_fndecls);
2385 /* If there are no functions to hide, continue. */
2386 if (!base_fndecls)
2387 continue;
2389 /* Remove any overridden functions. */
2390 for (fn = fns; fn; fn = OVL_NEXT (fn))
2392 fndecl = OVL_CURRENT (fn);
2393 if (DECL_VINDEX (fndecl))
2395 tree *prev = &base_fndecls;
2397 while (*prev)
2398 /* If the method from the base class has the same
2399 signature as the method from the derived class, it
2400 has been overridden. */
2401 if (same_signature_p (fndecl, TREE_VALUE (*prev)))
2402 *prev = TREE_CHAIN (*prev);
2403 else
2404 prev = &TREE_CHAIN (*prev);
2408 /* Now give a warning for all base functions without overriders,
2409 as they are hidden. */
2410 while (base_fndecls)
2412 /* Here we know it is a hider, and no overrider exists. */
2413 cp_warning_at ("%qD was hidden", TREE_VALUE (base_fndecls));
2414 cp_warning_at (" by %qD", fns);
2415 base_fndecls = TREE_CHAIN (base_fndecls);
2420 /* Check for things that are invalid. There are probably plenty of other
2421 things we should check for also. */
2423 static void
2424 finish_struct_anon (tree t)
2426 tree field;
2428 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
2430 if (TREE_STATIC (field))
2431 continue;
2432 if (TREE_CODE (field) != FIELD_DECL)
2433 continue;
2435 if (DECL_NAME (field) == NULL_TREE
2436 && ANON_AGGR_TYPE_P (TREE_TYPE (field)))
2438 tree elt = TYPE_FIELDS (TREE_TYPE (field));
2439 for (; elt; elt = TREE_CHAIN (elt))
2441 /* We're generally only interested in entities the user
2442 declared, but we also find nested classes by noticing
2443 the TYPE_DECL that we create implicitly. You're
2444 allowed to put one anonymous union inside another,
2445 though, so we explicitly tolerate that. We use
2446 TYPE_ANONYMOUS_P rather than ANON_AGGR_TYPE_P so that
2447 we also allow unnamed types used for defining fields. */
2448 if (DECL_ARTIFICIAL (elt)
2449 && (!DECL_IMPLICIT_TYPEDEF_P (elt)
2450 || TYPE_ANONYMOUS_P (TREE_TYPE (elt))))
2451 continue;
2453 if (TREE_CODE (elt) != FIELD_DECL)
2455 cp_pedwarn_at ("%q#D invalid; an anonymous union can "
2456 "only have non-static data members",
2457 elt);
2458 continue;
2461 if (TREE_PRIVATE (elt))
2462 cp_pedwarn_at ("private member %q#D in anonymous union",
2463 elt);
2464 else if (TREE_PROTECTED (elt))
2465 cp_pedwarn_at ("protected member %q#D in anonymous union",
2466 elt);
2468 TREE_PRIVATE (elt) = TREE_PRIVATE (field);
2469 TREE_PROTECTED (elt) = TREE_PROTECTED (field);
2475 /* Add T to CLASSTYPE_DECL_LIST of current_class_type which
2476 will be used later during class template instantiation.
2477 When FRIEND_P is zero, T can be a static member data (VAR_DECL),
2478 a non-static member data (FIELD_DECL), a member function
2479 (FUNCTION_DECL), a nested type (RECORD_TYPE, ENUM_TYPE),
2480 a typedef (TYPE_DECL) or a member class template (TEMPLATE_DECL)
2481 When FRIEND_P is nonzero, T is either a friend class
2482 (RECORD_TYPE, TEMPLATE_DECL) or a friend function
2483 (FUNCTION_DECL, TEMPLATE_DECL). */
2485 void
2486 maybe_add_class_template_decl_list (tree type, tree t, int friend_p)
2488 /* Save some memory by not creating TREE_LIST if TYPE is not template. */
2489 if (CLASSTYPE_TEMPLATE_INFO (type))
2490 CLASSTYPE_DECL_LIST (type)
2491 = tree_cons (friend_p ? NULL_TREE : type,
2492 t, CLASSTYPE_DECL_LIST (type));
2495 /* Create default constructors, assignment operators, and so forth for
2496 the type indicated by T, if they are needed. CANT_HAVE_CONST_CTOR,
2497 and CANT_HAVE_CONST_ASSIGNMENT are nonzero if, for whatever reason,
2498 the class cannot have a default constructor, copy constructor
2499 taking a const reference argument, or an assignment operator taking
2500 a const reference, respectively. */
2502 static void
2503 add_implicitly_declared_members (tree t,
2504 int cant_have_const_cctor,
2505 int cant_have_const_assignment)
2507 /* Destructor. */
2508 if (!CLASSTYPE_DESTRUCTORS (t))
2510 /* In general, we create destructors lazily. */
2511 CLASSTYPE_LAZY_DESTRUCTOR (t) = 1;
2512 /* However, if the implicit destructor is non-trivial
2513 destructor, we sometimes have to create it at this point. */
2514 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t))
2516 bool lazy_p = true;
2518 if (TYPE_FOR_JAVA (t))
2519 /* If this a Java class, any non-trivial destructor is
2520 invalid, even if compiler-generated. Therefore, if the
2521 destructor is non-trivial we create it now. */
2522 lazy_p = false;
2523 else
2525 tree binfo;
2526 tree base_binfo;
2527 int ix;
2529 /* If the implicit destructor will be virtual, then we must
2530 generate it now because (unfortunately) we do not
2531 generate virtual tables lazily. */
2532 binfo = TYPE_BINFO (t);
2533 for (ix = 0; BINFO_BASE_ITERATE (binfo, ix, base_binfo); ix++)
2535 tree base_type;
2536 tree dtor;
2538 base_type = BINFO_TYPE (base_binfo);
2539 dtor = CLASSTYPE_DESTRUCTORS (base_type);
2540 if (dtor && DECL_VIRTUAL_P (dtor))
2542 lazy_p = false;
2543 break;
2548 /* If we can't get away with being lazy, generate the destructor
2549 now. */
2550 if (!lazy_p)
2551 lazily_declare_fn (sfk_destructor, t);
2555 /* Default constructor. */
2556 if (! TYPE_HAS_CONSTRUCTOR (t))
2558 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 1;
2559 CLASSTYPE_LAZY_DEFAULT_CTOR (t) = 1;
2562 /* Copy constructor. */
2563 if (! TYPE_HAS_INIT_REF (t) && ! TYPE_FOR_JAVA (t))
2565 TYPE_HAS_INIT_REF (t) = 1;
2566 TYPE_HAS_CONST_INIT_REF (t) = !cant_have_const_cctor;
2567 CLASSTYPE_LAZY_COPY_CTOR (t) = 1;
2568 TYPE_HAS_CONSTRUCTOR (t) = 1;
2571 /* If there is no assignment operator, one will be created if and
2572 when it is needed. For now, just record whether or not the type
2573 of the parameter to the assignment operator will be a const or
2574 non-const reference. */
2575 if (!TYPE_HAS_ASSIGN_REF (t) && !TYPE_FOR_JAVA (t))
2577 TYPE_HAS_ASSIGN_REF (t) = 1;
2578 TYPE_HAS_CONST_ASSIGN_REF (t) = !cant_have_const_assignment;
2579 CLASSTYPE_LAZY_ASSIGNMENT_OP (t) = 1;
2583 /* Subroutine of finish_struct_1. Recursively count the number of fields
2584 in TYPE, including anonymous union members. */
2586 static int
2587 count_fields (tree fields)
2589 tree x;
2590 int n_fields = 0;
2591 for (x = fields; x; x = TREE_CHAIN (x))
2593 if (TREE_CODE (x) == FIELD_DECL && ANON_AGGR_TYPE_P (TREE_TYPE (x)))
2594 n_fields += count_fields (TYPE_FIELDS (TREE_TYPE (x)));
2595 else
2596 n_fields += 1;
2598 return n_fields;
2601 /* Subroutine of finish_struct_1. Recursively add all the fields in the
2602 TREE_LIST FIELDS to the SORTED_FIELDS_TYPE elts, starting at offset IDX. */
2604 static int
2605 add_fields_to_record_type (tree fields, struct sorted_fields_type *field_vec, int idx)
2607 tree x;
2608 for (x = fields; x; x = TREE_CHAIN (x))
2610 if (TREE_CODE (x) == FIELD_DECL && ANON_AGGR_TYPE_P (TREE_TYPE (x)))
2611 idx = add_fields_to_record_type (TYPE_FIELDS (TREE_TYPE (x)), field_vec, idx);
2612 else
2613 field_vec->elts[idx++] = x;
2615 return idx;
2618 /* FIELD is a bit-field. We are finishing the processing for its
2619 enclosing type. Issue any appropriate messages and set appropriate
2620 flags. */
2622 static void
2623 check_bitfield_decl (tree field)
2625 tree type = TREE_TYPE (field);
2626 tree w = NULL_TREE;
2628 /* Detect invalid bit-field type. */
2629 if (DECL_INITIAL (field)
2630 && ! INTEGRAL_TYPE_P (TREE_TYPE (field)))
2632 cp_error_at ("bit-field %q#D with non-integral type", field);
2633 w = error_mark_node;
2636 /* Detect and ignore out of range field width. */
2637 if (DECL_INITIAL (field))
2639 w = DECL_INITIAL (field);
2641 /* Avoid the non_lvalue wrapper added by fold for PLUS_EXPRs. */
2642 STRIP_NOPS (w);
2644 /* detect invalid field size. */
2645 w = integral_constant_value (w);
2647 if (TREE_CODE (w) != INTEGER_CST)
2649 cp_error_at ("bit-field %qD width not an integer constant",
2650 field);
2651 w = error_mark_node;
2653 else if (tree_int_cst_sgn (w) < 0)
2655 cp_error_at ("negative width in bit-field %qD", field);
2656 w = error_mark_node;
2658 else if (integer_zerop (w) && DECL_NAME (field) != 0)
2660 cp_error_at ("zero width for bit-field %qD", field);
2661 w = error_mark_node;
2663 else if (compare_tree_int (w, TYPE_PRECISION (type)) > 0
2664 && TREE_CODE (type) != ENUMERAL_TYPE
2665 && TREE_CODE (type) != BOOLEAN_TYPE)
2666 cp_warning_at ("width of %qD exceeds its type", field);
2667 else if (TREE_CODE (type) == ENUMERAL_TYPE
2668 && (0 > compare_tree_int (w,
2669 min_precision (TYPE_MIN_VALUE (type),
2670 TYPE_UNSIGNED (type)))
2671 || 0 > compare_tree_int (w,
2672 min_precision
2673 (TYPE_MAX_VALUE (type),
2674 TYPE_UNSIGNED (type)))))
2675 cp_warning_at ("%qD is too small to hold all values of %q#T",
2676 field, type);
2679 /* Remove the bit-field width indicator so that the rest of the
2680 compiler does not treat that value as an initializer. */
2681 DECL_INITIAL (field) = NULL_TREE;
2683 if (w != error_mark_node)
2685 DECL_SIZE (field) = convert (bitsizetype, w);
2686 DECL_BIT_FIELD (field) = 1;
2688 else
2690 /* Non-bit-fields are aligned for their type. */
2691 DECL_BIT_FIELD (field) = 0;
2692 CLEAR_DECL_C_BIT_FIELD (field);
2696 /* FIELD is a non bit-field. We are finishing the processing for its
2697 enclosing type T. Issue any appropriate messages and set appropriate
2698 flags. */
2700 static void
2701 check_field_decl (tree field,
2702 tree t,
2703 int* cant_have_const_ctor,
2704 int* no_const_asn_ref,
2705 int* any_default_members)
2707 tree type = strip_array_types (TREE_TYPE (field));
2709 /* An anonymous union cannot contain any fields which would change
2710 the settings of CANT_HAVE_CONST_CTOR and friends. */
2711 if (ANON_UNION_TYPE_P (type))
2713 /* And, we don't set TYPE_HAS_CONST_INIT_REF, etc., for anonymous
2714 structs. So, we recurse through their fields here. */
2715 else if (ANON_AGGR_TYPE_P (type))
2717 tree fields;
2719 for (fields = TYPE_FIELDS (type); fields; fields = TREE_CHAIN (fields))
2720 if (TREE_CODE (fields) == FIELD_DECL && !DECL_C_BIT_FIELD (field))
2721 check_field_decl (fields, t, cant_have_const_ctor,
2722 no_const_asn_ref, any_default_members);
2724 /* Check members with class type for constructors, destructors,
2725 etc. */
2726 else if (CLASS_TYPE_P (type))
2728 /* Never let anything with uninheritable virtuals
2729 make it through without complaint. */
2730 abstract_virtuals_error (field, type);
2732 if (TREE_CODE (t) == UNION_TYPE)
2734 if (TYPE_NEEDS_CONSTRUCTING (type))
2735 cp_error_at ("member %q#D with constructor not allowed in union",
2736 field);
2737 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
2738 cp_error_at ("member %q#D with destructor not allowed in union",
2739 field);
2740 if (TYPE_HAS_COMPLEX_ASSIGN_REF (type))
2741 cp_error_at ("member %q#D with copy assignment operator not allowed in union",
2742 field);
2744 else
2746 TYPE_NEEDS_CONSTRUCTING (t) |= TYPE_NEEDS_CONSTRUCTING (type);
2747 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
2748 |= TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type);
2749 TYPE_HAS_COMPLEX_ASSIGN_REF (t) |= TYPE_HAS_COMPLEX_ASSIGN_REF (type);
2750 TYPE_HAS_COMPLEX_INIT_REF (t) |= TYPE_HAS_COMPLEX_INIT_REF (type);
2753 if (!TYPE_HAS_CONST_INIT_REF (type))
2754 *cant_have_const_ctor = 1;
2756 if (!TYPE_HAS_CONST_ASSIGN_REF (type))
2757 *no_const_asn_ref = 1;
2759 if (DECL_INITIAL (field) != NULL_TREE)
2761 /* `build_class_init_list' does not recognize
2762 non-FIELD_DECLs. */
2763 if (TREE_CODE (t) == UNION_TYPE && any_default_members != 0)
2764 error ("multiple fields in union %qT initialized", t);
2765 *any_default_members = 1;
2769 /* Check the data members (both static and non-static), class-scoped
2770 typedefs, etc., appearing in the declaration of T. Issue
2771 appropriate diagnostics. Sets ACCESS_DECLS to a list (in
2772 declaration order) of access declarations; each TREE_VALUE in this
2773 list is a USING_DECL.
2775 In addition, set the following flags:
2777 EMPTY_P
2778 The class is empty, i.e., contains no non-static data members.
2780 CANT_HAVE_CONST_CTOR_P
2781 This class cannot have an implicitly generated copy constructor
2782 taking a const reference.
2784 CANT_HAVE_CONST_ASN_REF
2785 This class cannot have an implicitly generated assignment
2786 operator taking a const reference.
2788 All of these flags should be initialized before calling this
2789 function.
2791 Returns a pointer to the end of the TYPE_FIELDs chain; additional
2792 fields can be added by adding to this chain. */
2794 static void
2795 check_field_decls (tree t, tree *access_decls,
2796 int *cant_have_const_ctor_p,
2797 int *no_const_asn_ref_p)
2799 tree *field;
2800 tree *next;
2801 bool has_pointers;
2802 int any_default_members;
2804 /* Assume there are no access declarations. */
2805 *access_decls = NULL_TREE;
2806 /* Assume this class has no pointer members. */
2807 has_pointers = false;
2808 /* Assume none of the members of this class have default
2809 initializations. */
2810 any_default_members = 0;
2812 for (field = &TYPE_FIELDS (t); *field; field = next)
2814 tree x = *field;
2815 tree type = TREE_TYPE (x);
2817 next = &TREE_CHAIN (x);
2819 if (TREE_CODE (x) == FIELD_DECL)
2821 if (TYPE_PACKED (t))
2823 if (!pod_type_p (TREE_TYPE (x)) && !TYPE_PACKED (TREE_TYPE (x)))
2824 cp_warning_at
2825 ("ignoring packed attribute on unpacked non-POD field %q#D",
2827 else
2828 DECL_PACKED (x) = 1;
2831 if (DECL_C_BIT_FIELD (x) && integer_zerop (DECL_INITIAL (x)))
2832 /* We don't treat zero-width bitfields as making a class
2833 non-empty. */
2835 else
2837 tree element_type;
2839 /* The class is non-empty. */
2840 CLASSTYPE_EMPTY_P (t) = 0;
2841 /* The class is not even nearly empty. */
2842 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
2843 /* If one of the data members contains an empty class,
2844 so does T. */
2845 element_type = strip_array_types (type);
2846 if (CLASS_TYPE_P (element_type)
2847 && CLASSTYPE_CONTAINS_EMPTY_CLASS_P (element_type))
2848 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) = 1;
2852 if (TREE_CODE (x) == USING_DECL)
2854 /* Prune the access declaration from the list of fields. */
2855 *field = TREE_CHAIN (x);
2857 /* Save the access declarations for our caller. */
2858 *access_decls = tree_cons (NULL_TREE, x, *access_decls);
2860 /* Since we've reset *FIELD there's no reason to skip to the
2861 next field. */
2862 next = field;
2863 continue;
2866 if (TREE_CODE (x) == TYPE_DECL
2867 || TREE_CODE (x) == TEMPLATE_DECL)
2868 continue;
2870 /* If we've gotten this far, it's a data member, possibly static,
2871 or an enumerator. */
2872 DECL_CONTEXT (x) = t;
2874 /* When this goes into scope, it will be a non-local reference. */
2875 DECL_NONLOCAL (x) = 1;
2877 if (TREE_CODE (t) == UNION_TYPE)
2879 /* [class.union]
2881 If a union contains a static data member, or a member of
2882 reference type, the program is ill-formed. */
2883 if (TREE_CODE (x) == VAR_DECL)
2885 cp_error_at ("%qD may not be static because it is a member of a union", x);
2886 continue;
2888 if (TREE_CODE (type) == REFERENCE_TYPE)
2890 cp_error_at ("%qD may not have reference type %qT because"
2891 " it is a member of a union",
2892 x, type);
2893 continue;
2897 /* ``A local class cannot have static data members.'' ARM 9.4 */
2898 if (current_function_decl && TREE_STATIC (x))
2899 cp_error_at ("field %qD in local class cannot be static", x);
2901 /* Perform error checking that did not get done in
2902 grokdeclarator. */
2903 if (TREE_CODE (type) == FUNCTION_TYPE)
2905 cp_error_at ("field %qD invalidly declared function type", x);
2906 type = build_pointer_type (type);
2907 TREE_TYPE (x) = type;
2909 else if (TREE_CODE (type) == METHOD_TYPE)
2911 cp_error_at ("field %qD invalidly declared method type", x);
2912 type = build_pointer_type (type);
2913 TREE_TYPE (x) = type;
2916 if (type == error_mark_node)
2917 continue;
2919 if (TREE_CODE (x) == CONST_DECL || TREE_CODE (x) == VAR_DECL)
2920 continue;
2922 /* Now it can only be a FIELD_DECL. */
2924 if (TREE_PRIVATE (x) || TREE_PROTECTED (x))
2925 CLASSTYPE_NON_AGGREGATE (t) = 1;
2927 /* If this is of reference type, check if it needs an init.
2928 Also do a little ANSI jig if necessary. */
2929 if (TREE_CODE (type) == REFERENCE_TYPE)
2931 CLASSTYPE_NON_POD_P (t) = 1;
2932 if (DECL_INITIAL (x) == NULL_TREE)
2933 SET_CLASSTYPE_REF_FIELDS_NEED_INIT (t, 1);
2935 /* ARM $12.6.2: [A member initializer list] (or, for an
2936 aggregate, initialization by a brace-enclosed list) is the
2937 only way to initialize nonstatic const and reference
2938 members. */
2939 TYPE_HAS_COMPLEX_ASSIGN_REF (t) = 1;
2941 if (! TYPE_HAS_CONSTRUCTOR (t) && CLASSTYPE_NON_AGGREGATE (t)
2942 && extra_warnings)
2943 cp_warning_at ("non-static reference %q#D in class without a constructor", x);
2946 type = strip_array_types (type);
2948 /* This is used by -Weffc++ (see below). Warn only for pointers
2949 to members which might hold dynamic memory. So do not warn
2950 for pointers to functions or pointers to members. */
2951 if (TYPE_PTR_P (type)
2952 && !TYPE_PTRFN_P (type)
2953 && !TYPE_PTR_TO_MEMBER_P (type))
2954 has_pointers = true;
2956 if (CLASS_TYPE_P (type))
2958 if (CLASSTYPE_REF_FIELDS_NEED_INIT (type))
2959 SET_CLASSTYPE_REF_FIELDS_NEED_INIT (t, 1);
2960 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (type))
2961 SET_CLASSTYPE_READONLY_FIELDS_NEED_INIT (t, 1);
2964 if (DECL_MUTABLE_P (x) || TYPE_HAS_MUTABLE_P (type))
2965 CLASSTYPE_HAS_MUTABLE (t) = 1;
2967 if (! pod_type_p (type))
2968 /* DR 148 now allows pointers to members (which are POD themselves),
2969 to be allowed in POD structs. */
2970 CLASSTYPE_NON_POD_P (t) = 1;
2972 if (! zero_init_p (type))
2973 CLASSTYPE_NON_ZERO_INIT_P (t) = 1;
2975 /* If any field is const, the structure type is pseudo-const. */
2976 if (CP_TYPE_CONST_P (type))
2978 C_TYPE_FIELDS_READONLY (t) = 1;
2979 if (DECL_INITIAL (x) == NULL_TREE)
2980 SET_CLASSTYPE_READONLY_FIELDS_NEED_INIT (t, 1);
2982 /* ARM $12.6.2: [A member initializer list] (or, for an
2983 aggregate, initialization by a brace-enclosed list) is the
2984 only way to initialize nonstatic const and reference
2985 members. */
2986 TYPE_HAS_COMPLEX_ASSIGN_REF (t) = 1;
2988 if (! TYPE_HAS_CONSTRUCTOR (t) && CLASSTYPE_NON_AGGREGATE (t)
2989 && extra_warnings)
2990 cp_warning_at ("non-static const member %q#D in class without a constructor", x);
2992 /* A field that is pseudo-const makes the structure likewise. */
2993 else if (CLASS_TYPE_P (type))
2995 C_TYPE_FIELDS_READONLY (t) |= C_TYPE_FIELDS_READONLY (type);
2996 SET_CLASSTYPE_READONLY_FIELDS_NEED_INIT (t,
2997 CLASSTYPE_READONLY_FIELDS_NEED_INIT (t)
2998 | CLASSTYPE_READONLY_FIELDS_NEED_INIT (type));
3001 /* Core issue 80: A nonstatic data member is required to have a
3002 different name from the class iff the class has a
3003 user-defined constructor. */
3004 if (constructor_name_p (DECL_NAME (x), t) && TYPE_HAS_CONSTRUCTOR (t))
3005 cp_pedwarn_at ("field %q#D with same name as class", x);
3007 /* We set DECL_C_BIT_FIELD in grokbitfield.
3008 If the type and width are valid, we'll also set DECL_BIT_FIELD. */
3009 if (DECL_C_BIT_FIELD (x))
3010 check_bitfield_decl (x);
3011 else
3012 check_field_decl (x, t,
3013 cant_have_const_ctor_p,
3014 no_const_asn_ref_p,
3015 &any_default_members);
3018 /* Effective C++ rule 11: if a class has dynamic memory held by pointers,
3019 it should also define a copy constructor and an assignment operator to
3020 implement the correct copy semantic (deep vs shallow, etc.). As it is
3021 not feasible to check whether the constructors do allocate dynamic memory
3022 and store it within members, we approximate the warning like this:
3024 -- Warn only if there are members which are pointers
3025 -- Warn only if there is a non-trivial constructor (otherwise,
3026 there cannot be memory allocated).
3027 -- Warn only if there is a non-trivial destructor. We assume that the
3028 user at least implemented the cleanup correctly, and a destructor
3029 is needed to free dynamic memory.
3031 This seems enough for practical purposes. */
3032 if (warn_ecpp
3033 && has_pointers
3034 && TYPE_HAS_CONSTRUCTOR (t)
3035 && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
3036 && !(TYPE_HAS_INIT_REF (t) && TYPE_HAS_ASSIGN_REF (t)))
3038 warning ("%q#T has pointer data members", t);
3040 if (! TYPE_HAS_INIT_REF (t))
3042 warning (" but does not override %<%T(const %T&)%>", t, t);
3043 if (! TYPE_HAS_ASSIGN_REF (t))
3044 warning (" or %<operator=(const %T&)%>", t);
3046 else if (! TYPE_HAS_ASSIGN_REF (t))
3047 warning (" but does not override %<operator=(const %T&)%>", t);
3051 /* Check anonymous struct/anonymous union fields. */
3052 finish_struct_anon (t);
3054 /* We've built up the list of access declarations in reverse order.
3055 Fix that now. */
3056 *access_decls = nreverse (*access_decls);
3059 /* If TYPE is an empty class type, records its OFFSET in the table of
3060 OFFSETS. */
3062 static int
3063 record_subobject_offset (tree type, tree offset, splay_tree offsets)
3065 splay_tree_node n;
3067 if (!is_empty_class (type))
3068 return 0;
3070 /* Record the location of this empty object in OFFSETS. */
3071 n = splay_tree_lookup (offsets, (splay_tree_key) offset);
3072 if (!n)
3073 n = splay_tree_insert (offsets,
3074 (splay_tree_key) offset,
3075 (splay_tree_value) NULL_TREE);
3076 n->value = ((splay_tree_value)
3077 tree_cons (NULL_TREE,
3078 type,
3079 (tree) n->value));
3081 return 0;
3084 /* Returns nonzero if TYPE is an empty class type and there is
3085 already an entry in OFFSETS for the same TYPE as the same OFFSET. */
3087 static int
3088 check_subobject_offset (tree type, tree offset, splay_tree offsets)
3090 splay_tree_node n;
3091 tree t;
3093 if (!is_empty_class (type))
3094 return 0;
3096 /* Record the location of this empty object in OFFSETS. */
3097 n = splay_tree_lookup (offsets, (splay_tree_key) offset);
3098 if (!n)
3099 return 0;
3101 for (t = (tree) n->value; t; t = TREE_CHAIN (t))
3102 if (same_type_p (TREE_VALUE (t), type))
3103 return 1;
3105 return 0;
3108 /* Walk through all the subobjects of TYPE (located at OFFSET). Call
3109 F for every subobject, passing it the type, offset, and table of
3110 OFFSETS. If VBASES_P is one, then virtual non-primary bases should
3111 be traversed.
3113 If MAX_OFFSET is non-NULL, then subobjects with an offset greater
3114 than MAX_OFFSET will not be walked.
3116 If F returns a nonzero value, the traversal ceases, and that value
3117 is returned. Otherwise, returns zero. */
3119 static int
3120 walk_subobject_offsets (tree type,
3121 subobject_offset_fn f,
3122 tree offset,
3123 splay_tree offsets,
3124 tree max_offset,
3125 int vbases_p)
3127 int r = 0;
3128 tree type_binfo = NULL_TREE;
3130 /* If this OFFSET is bigger than the MAX_OFFSET, then we should
3131 stop. */
3132 if (max_offset && INT_CST_LT (max_offset, offset))
3133 return 0;
3135 if (!TYPE_P (type))
3137 if (abi_version_at_least (2))
3138 type_binfo = type;
3139 type = BINFO_TYPE (type);
3142 if (CLASS_TYPE_P (type))
3144 tree field;
3145 tree binfo;
3146 int i;
3148 /* Avoid recursing into objects that are not interesting. */
3149 if (!CLASSTYPE_CONTAINS_EMPTY_CLASS_P (type))
3150 return 0;
3152 /* Record the location of TYPE. */
3153 r = (*f) (type, offset, offsets);
3154 if (r)
3155 return r;
3157 /* Iterate through the direct base classes of TYPE. */
3158 if (!type_binfo)
3159 type_binfo = TYPE_BINFO (type);
3160 for (i = 0; BINFO_BASE_ITERATE (type_binfo, i, binfo); i++)
3162 tree binfo_offset;
3164 if (abi_version_at_least (2)
3165 && BINFO_VIRTUAL_P (binfo))
3166 continue;
3168 if (!vbases_p
3169 && BINFO_VIRTUAL_P (binfo)
3170 && !BINFO_PRIMARY_P (binfo))
3171 continue;
3173 if (!abi_version_at_least (2))
3174 binfo_offset = size_binop (PLUS_EXPR,
3175 offset,
3176 BINFO_OFFSET (binfo));
3177 else
3179 tree orig_binfo;
3180 /* We cannot rely on BINFO_OFFSET being set for the base
3181 class yet, but the offsets for direct non-virtual
3182 bases can be calculated by going back to the TYPE. */
3183 orig_binfo = BINFO_BASE_BINFO (TYPE_BINFO (type), i);
3184 binfo_offset = size_binop (PLUS_EXPR,
3185 offset,
3186 BINFO_OFFSET (orig_binfo));
3189 r = walk_subobject_offsets (binfo,
3191 binfo_offset,
3192 offsets,
3193 max_offset,
3194 (abi_version_at_least (2)
3195 ? /*vbases_p=*/0 : vbases_p));
3196 if (r)
3197 return r;
3200 if (abi_version_at_least (2) && CLASSTYPE_VBASECLASSES (type))
3202 unsigned ix;
3203 VEC (tree) *vbases;
3205 /* Iterate through the virtual base classes of TYPE. In G++
3206 3.2, we included virtual bases in the direct base class
3207 loop above, which results in incorrect results; the
3208 correct offsets for virtual bases are only known when
3209 working with the most derived type. */
3210 if (vbases_p)
3211 for (vbases = CLASSTYPE_VBASECLASSES (type), ix = 0;
3212 VEC_iterate (tree, vbases, ix, binfo); ix++)
3214 r = walk_subobject_offsets (binfo,
3216 size_binop (PLUS_EXPR,
3217 offset,
3218 BINFO_OFFSET (binfo)),
3219 offsets,
3220 max_offset,
3221 /*vbases_p=*/0);
3222 if (r)
3223 return r;
3225 else
3227 /* We still have to walk the primary base, if it is
3228 virtual. (If it is non-virtual, then it was walked
3229 above.) */
3230 tree vbase = get_primary_binfo (type_binfo);
3232 if (vbase && BINFO_VIRTUAL_P (vbase)
3233 && BINFO_PRIMARY_P (vbase)
3234 && BINFO_INHERITANCE_CHAIN (vbase) == type_binfo)
3236 r = (walk_subobject_offsets
3237 (vbase, f, offset,
3238 offsets, max_offset, /*vbases_p=*/0));
3239 if (r)
3240 return r;
3245 /* Iterate through the fields of TYPE. */
3246 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
3247 if (TREE_CODE (field) == FIELD_DECL && !DECL_ARTIFICIAL (field))
3249 tree field_offset;
3251 if (abi_version_at_least (2))
3252 field_offset = byte_position (field);
3253 else
3254 /* In G++ 3.2, DECL_FIELD_OFFSET was used. */
3255 field_offset = DECL_FIELD_OFFSET (field);
3257 r = walk_subobject_offsets (TREE_TYPE (field),
3259 size_binop (PLUS_EXPR,
3260 offset,
3261 field_offset),
3262 offsets,
3263 max_offset,
3264 /*vbases_p=*/1);
3265 if (r)
3266 return r;
3269 else if (TREE_CODE (type) == ARRAY_TYPE)
3271 tree element_type = strip_array_types (type);
3272 tree domain = TYPE_DOMAIN (type);
3273 tree index;
3275 /* Avoid recursing into objects that are not interesting. */
3276 if (!CLASS_TYPE_P (element_type)
3277 || !CLASSTYPE_CONTAINS_EMPTY_CLASS_P (element_type))
3278 return 0;
3280 /* Step through each of the elements in the array. */
3281 for (index = size_zero_node;
3282 /* G++ 3.2 had an off-by-one error here. */
3283 (abi_version_at_least (2)
3284 ? !INT_CST_LT (TYPE_MAX_VALUE (domain), index)
3285 : INT_CST_LT (index, TYPE_MAX_VALUE (domain)));
3286 index = size_binop (PLUS_EXPR, index, size_one_node))
3288 r = walk_subobject_offsets (TREE_TYPE (type),
3290 offset,
3291 offsets,
3292 max_offset,
3293 /*vbases_p=*/1);
3294 if (r)
3295 return r;
3296 offset = size_binop (PLUS_EXPR, offset,
3297 TYPE_SIZE_UNIT (TREE_TYPE (type)));
3298 /* If this new OFFSET is bigger than the MAX_OFFSET, then
3299 there's no point in iterating through the remaining
3300 elements of the array. */
3301 if (max_offset && INT_CST_LT (max_offset, offset))
3302 break;
3306 return 0;
3309 /* Record all of the empty subobjects of TYPE (located at OFFSET) in
3310 OFFSETS. If VBASES_P is nonzero, virtual bases of TYPE are
3311 examined. */
3313 static void
3314 record_subobject_offsets (tree type,
3315 tree offset,
3316 splay_tree offsets,
3317 int vbases_p)
3319 walk_subobject_offsets (type, record_subobject_offset, offset,
3320 offsets, /*max_offset=*/NULL_TREE, vbases_p);
3323 /* Returns nonzero if any of the empty subobjects of TYPE (located at
3324 OFFSET) conflict with entries in OFFSETS. If VBASES_P is nonzero,
3325 virtual bases of TYPE are examined. */
3327 static int
3328 layout_conflict_p (tree type,
3329 tree offset,
3330 splay_tree offsets,
3331 int vbases_p)
3333 splay_tree_node max_node;
3335 /* Get the node in OFFSETS that indicates the maximum offset where
3336 an empty subobject is located. */
3337 max_node = splay_tree_max (offsets);
3338 /* If there aren't any empty subobjects, then there's no point in
3339 performing this check. */
3340 if (!max_node)
3341 return 0;
3343 return walk_subobject_offsets (type, check_subobject_offset, offset,
3344 offsets, (tree) (max_node->key),
3345 vbases_p);
3348 /* DECL is a FIELD_DECL corresponding either to a base subobject of a
3349 non-static data member of the type indicated by RLI. BINFO is the
3350 binfo corresponding to the base subobject, OFFSETS maps offsets to
3351 types already located at those offsets. This function determines
3352 the position of the DECL. */
3354 static void
3355 layout_nonempty_base_or_field (record_layout_info rli,
3356 tree decl,
3357 tree binfo,
3358 splay_tree offsets)
3360 tree offset = NULL_TREE;
3361 bool field_p;
3362 tree type;
3364 if (binfo)
3366 /* For the purposes of determining layout conflicts, we want to
3367 use the class type of BINFO; TREE_TYPE (DECL) will be the
3368 CLASSTYPE_AS_BASE version, which does not contain entries for
3369 zero-sized bases. */
3370 type = TREE_TYPE (binfo);
3371 field_p = false;
3373 else
3375 type = TREE_TYPE (decl);
3376 field_p = true;
3379 /* Try to place the field. It may take more than one try if we have
3380 a hard time placing the field without putting two objects of the
3381 same type at the same address. */
3382 while (1)
3384 struct record_layout_info_s old_rli = *rli;
3386 /* Place this field. */
3387 place_field (rli, decl);
3388 offset = byte_position (decl);
3390 /* We have to check to see whether or not there is already
3391 something of the same type at the offset we're about to use.
3392 For example, consider:
3394 struct S {};
3395 struct T : public S { int i; };
3396 struct U : public S, public T {};
3398 Here, we put S at offset zero in U. Then, we can't put T at
3399 offset zero -- its S component would be at the same address
3400 as the S we already allocated. So, we have to skip ahead.
3401 Since all data members, including those whose type is an
3402 empty class, have nonzero size, any overlap can happen only
3403 with a direct or indirect base-class -- it can't happen with
3404 a data member. */
3405 /* In a union, overlap is permitted; all members are placed at
3406 offset zero. */
3407 if (TREE_CODE (rli->t) == UNION_TYPE)
3408 break;
3409 /* G++ 3.2 did not check for overlaps when placing a non-empty
3410 virtual base. */
3411 if (!abi_version_at_least (2) && binfo && BINFO_VIRTUAL_P (binfo))
3412 break;
3413 if (layout_conflict_p (field_p ? type : binfo, offset,
3414 offsets, field_p))
3416 /* Strip off the size allocated to this field. That puts us
3417 at the first place we could have put the field with
3418 proper alignment. */
3419 *rli = old_rli;
3421 /* Bump up by the alignment required for the type. */
3422 rli->bitpos
3423 = size_binop (PLUS_EXPR, rli->bitpos,
3424 bitsize_int (binfo
3425 ? CLASSTYPE_ALIGN (type)
3426 : TYPE_ALIGN (type)));
3427 normalize_rli (rli);
3429 else
3430 /* There was no conflict. We're done laying out this field. */
3431 break;
3434 /* Now that we know where it will be placed, update its
3435 BINFO_OFFSET. */
3436 if (binfo && CLASS_TYPE_P (BINFO_TYPE (binfo)))
3437 /* Indirect virtual bases may have a nonzero BINFO_OFFSET at
3438 this point because their BINFO_OFFSET is copied from another
3439 hierarchy. Therefore, we may not need to add the entire
3440 OFFSET. */
3441 propagate_binfo_offsets (binfo,
3442 size_diffop (convert (ssizetype, offset),
3443 convert (ssizetype,
3444 BINFO_OFFSET (binfo))));
3447 /* Returns true if TYPE is empty and OFFSET is nonzero. */
3449 static int
3450 empty_base_at_nonzero_offset_p (tree type,
3451 tree offset,
3452 splay_tree offsets ATTRIBUTE_UNUSED)
3454 return is_empty_class (type) && !integer_zerop (offset);
3457 /* Layout the empty base BINFO. EOC indicates the byte currently just
3458 past the end of the class, and should be correctly aligned for a
3459 class of the type indicated by BINFO; OFFSETS gives the offsets of
3460 the empty bases allocated so far. T is the most derived
3461 type. Return nonzero iff we added it at the end. */
3463 static bool
3464 layout_empty_base (tree binfo, tree eoc, splay_tree offsets)
3466 tree alignment;
3467 tree basetype = BINFO_TYPE (binfo);
3468 bool atend = false;
3470 /* This routine should only be used for empty classes. */
3471 gcc_assert (is_empty_class (basetype));
3472 alignment = ssize_int (CLASSTYPE_ALIGN_UNIT (basetype));
3474 if (!integer_zerop (BINFO_OFFSET (binfo)))
3476 if (abi_version_at_least (2))
3477 propagate_binfo_offsets
3478 (binfo, size_diffop (size_zero_node, BINFO_OFFSET (binfo)));
3479 else if (warn_abi)
3480 warning ("offset of empty base %qT may not be ABI-compliant and may"
3481 "change in a future version of GCC",
3482 BINFO_TYPE (binfo));
3485 /* This is an empty base class. We first try to put it at offset
3486 zero. */
3487 if (layout_conflict_p (binfo,
3488 BINFO_OFFSET (binfo),
3489 offsets,
3490 /*vbases_p=*/0))
3492 /* That didn't work. Now, we move forward from the next
3493 available spot in the class. */
3494 atend = true;
3495 propagate_binfo_offsets (binfo, convert (ssizetype, eoc));
3496 while (1)
3498 if (!layout_conflict_p (binfo,
3499 BINFO_OFFSET (binfo),
3500 offsets,
3501 /*vbases_p=*/0))
3502 /* We finally found a spot where there's no overlap. */
3503 break;
3505 /* There's overlap here, too. Bump along to the next spot. */
3506 propagate_binfo_offsets (binfo, alignment);
3509 return atend;
3512 /* Layout the base given by BINFO in the class indicated by RLI.
3513 *BASE_ALIGN is a running maximum of the alignments of
3514 any base class. OFFSETS gives the location of empty base
3515 subobjects. T is the most derived type. Return nonzero if the new
3516 object cannot be nearly-empty. A new FIELD_DECL is inserted at
3517 *NEXT_FIELD, unless BINFO is for an empty base class.
3519 Returns the location at which the next field should be inserted. */
3521 static tree *
3522 build_base_field (record_layout_info rli, tree binfo,
3523 splay_tree offsets, tree *next_field)
3525 tree t = rli->t;
3526 tree basetype = BINFO_TYPE (binfo);
3528 if (!COMPLETE_TYPE_P (basetype))
3529 /* This error is now reported in xref_tag, thus giving better
3530 location information. */
3531 return next_field;
3533 /* Place the base class. */
3534 if (!is_empty_class (basetype))
3536 tree decl;
3538 /* The containing class is non-empty because it has a non-empty
3539 base class. */
3540 CLASSTYPE_EMPTY_P (t) = 0;
3542 /* Create the FIELD_DECL. */
3543 decl = build_decl (FIELD_DECL, NULL_TREE, CLASSTYPE_AS_BASE (basetype));
3544 DECL_ARTIFICIAL (decl) = 1;
3545 DECL_IGNORED_P (decl) = 1;
3546 DECL_FIELD_CONTEXT (decl) = t;
3547 DECL_SIZE (decl) = CLASSTYPE_SIZE (basetype);
3548 DECL_SIZE_UNIT (decl) = CLASSTYPE_SIZE_UNIT (basetype);
3549 DECL_ALIGN (decl) = CLASSTYPE_ALIGN (basetype);
3550 DECL_USER_ALIGN (decl) = CLASSTYPE_USER_ALIGN (basetype);
3551 DECL_MODE (decl) = TYPE_MODE (basetype);
3552 DECL_FIELD_IS_BASE (decl) = 1;
3554 /* Try to place the field. It may take more than one try if we
3555 have a hard time placing the field without putting two
3556 objects of the same type at the same address. */
3557 layout_nonempty_base_or_field (rli, decl, binfo, offsets);
3558 /* Add the new FIELD_DECL to the list of fields for T. */
3559 TREE_CHAIN (decl) = *next_field;
3560 *next_field = decl;
3561 next_field = &TREE_CHAIN (decl);
3563 else
3565 tree eoc;
3566 bool atend;
3568 /* On some platforms (ARM), even empty classes will not be
3569 byte-aligned. */
3570 eoc = round_up (rli_size_unit_so_far (rli),
3571 CLASSTYPE_ALIGN_UNIT (basetype));
3572 atend = layout_empty_base (binfo, eoc, offsets);
3573 /* A nearly-empty class "has no proper base class that is empty,
3574 not morally virtual, and at an offset other than zero." */
3575 if (!BINFO_VIRTUAL_P (binfo) && CLASSTYPE_NEARLY_EMPTY_P (t))
3577 if (atend)
3578 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
3579 /* The check above (used in G++ 3.2) is insufficient because
3580 an empty class placed at offset zero might itself have an
3581 empty base at a nonzero offset. */
3582 else if (walk_subobject_offsets (basetype,
3583 empty_base_at_nonzero_offset_p,
3584 size_zero_node,
3585 /*offsets=*/NULL,
3586 /*max_offset=*/NULL_TREE,
3587 /*vbases_p=*/true))
3589 if (abi_version_at_least (2))
3590 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
3591 else if (warn_abi)
3592 warning ("class %qT will be considered nearly empty in a "
3593 "future version of GCC", t);
3597 /* We do not create a FIELD_DECL for empty base classes because
3598 it might overlap some other field. We want to be able to
3599 create CONSTRUCTORs for the class by iterating over the
3600 FIELD_DECLs, and the back end does not handle overlapping
3601 FIELD_DECLs. */
3603 /* An empty virtual base causes a class to be non-empty
3604 -- but in that case we do not need to clear CLASSTYPE_EMPTY_P
3605 here because that was already done when the virtual table
3606 pointer was created. */
3609 /* Record the offsets of BINFO and its base subobjects. */
3610 record_subobject_offsets (binfo,
3611 BINFO_OFFSET (binfo),
3612 offsets,
3613 /*vbases_p=*/0);
3615 return next_field;
3618 /* Layout all of the non-virtual base classes. Record empty
3619 subobjects in OFFSETS. T is the most derived type. Return nonzero
3620 if the type cannot be nearly empty. The fields created
3621 corresponding to the base classes will be inserted at
3622 *NEXT_FIELD. */
3624 static void
3625 build_base_fields (record_layout_info rli,
3626 splay_tree offsets, tree *next_field)
3628 /* Chain to hold all the new FIELD_DECLs which stand in for base class
3629 subobjects. */
3630 tree t = rli->t;
3631 int n_baseclasses = BINFO_N_BASE_BINFOS (TYPE_BINFO (t));
3632 int i;
3634 /* The primary base class is always allocated first. */
3635 if (CLASSTYPE_HAS_PRIMARY_BASE_P (t))
3636 next_field = build_base_field (rli, CLASSTYPE_PRIMARY_BINFO (t),
3637 offsets, next_field);
3639 /* Now allocate the rest of the bases. */
3640 for (i = 0; i < n_baseclasses; ++i)
3642 tree base_binfo;
3644 base_binfo = BINFO_BASE_BINFO (TYPE_BINFO (t), i);
3646 /* The primary base was already allocated above, so we don't
3647 need to allocate it again here. */
3648 if (base_binfo == CLASSTYPE_PRIMARY_BINFO (t))
3649 continue;
3651 /* Virtual bases are added at the end (a primary virtual base
3652 will have already been added). */
3653 if (BINFO_VIRTUAL_P (base_binfo))
3654 continue;
3656 next_field = build_base_field (rli, base_binfo,
3657 offsets, next_field);
3661 /* Go through the TYPE_METHODS of T issuing any appropriate
3662 diagnostics, figuring out which methods override which other
3663 methods, and so forth. */
3665 static void
3666 check_methods (tree t)
3668 tree x;
3670 for (x = TYPE_METHODS (t); x; x = TREE_CHAIN (x))
3672 check_for_override (x, t);
3673 if (DECL_PURE_VIRTUAL_P (x) && ! DECL_VINDEX (x))
3674 cp_error_at ("initializer specified for non-virtual method %qD", x);
3675 /* The name of the field is the original field name
3676 Save this in auxiliary field for later overloading. */
3677 if (DECL_VINDEX (x))
3679 TYPE_POLYMORPHIC_P (t) = 1;
3680 if (DECL_PURE_VIRTUAL_P (x))
3681 VEC_safe_push (tree, CLASSTYPE_PURE_VIRTUALS (t), x);
3683 /* All user-declared destructors are non-trivial. */
3684 if (DECL_DESTRUCTOR_P (x))
3685 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t) = 1;
3689 /* FN is a constructor or destructor. Clone the declaration to create
3690 a specialized in-charge or not-in-charge version, as indicated by
3691 NAME. */
3693 static tree
3694 build_clone (tree fn, tree name)
3696 tree parms;
3697 tree clone;
3699 /* Copy the function. */
3700 clone = copy_decl (fn);
3701 /* Remember where this function came from. */
3702 DECL_CLONED_FUNCTION (clone) = fn;
3703 DECL_ABSTRACT_ORIGIN (clone) = fn;
3704 /* Reset the function name. */
3705 DECL_NAME (clone) = name;
3706 SET_DECL_ASSEMBLER_NAME (clone, NULL_TREE);
3707 /* There's no pending inline data for this function. */
3708 DECL_PENDING_INLINE_INFO (clone) = NULL;
3709 DECL_PENDING_INLINE_P (clone) = 0;
3710 /* And it hasn't yet been deferred. */
3711 DECL_DEFERRED_FN (clone) = 0;
3713 /* The base-class destructor is not virtual. */
3714 if (name == base_dtor_identifier)
3716 DECL_VIRTUAL_P (clone) = 0;
3717 if (TREE_CODE (clone) != TEMPLATE_DECL)
3718 DECL_VINDEX (clone) = NULL_TREE;
3721 /* If there was an in-charge parameter, drop it from the function
3722 type. */
3723 if (DECL_HAS_IN_CHARGE_PARM_P (clone))
3725 tree basetype;
3726 tree parmtypes;
3727 tree exceptions;
3729 exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (clone));
3730 basetype = TYPE_METHOD_BASETYPE (TREE_TYPE (clone));
3731 parmtypes = TYPE_ARG_TYPES (TREE_TYPE (clone));
3732 /* Skip the `this' parameter. */
3733 parmtypes = TREE_CHAIN (parmtypes);
3734 /* Skip the in-charge parameter. */
3735 parmtypes = TREE_CHAIN (parmtypes);
3736 /* And the VTT parm, in a complete [cd]tor. */
3737 if (DECL_HAS_VTT_PARM_P (fn)
3738 && ! DECL_NEEDS_VTT_PARM_P (clone))
3739 parmtypes = TREE_CHAIN (parmtypes);
3740 /* If this is subobject constructor or destructor, add the vtt
3741 parameter. */
3742 TREE_TYPE (clone)
3743 = build_method_type_directly (basetype,
3744 TREE_TYPE (TREE_TYPE (clone)),
3745 parmtypes);
3746 if (exceptions)
3747 TREE_TYPE (clone) = build_exception_variant (TREE_TYPE (clone),
3748 exceptions);
3749 TREE_TYPE (clone)
3750 = cp_build_type_attribute_variant (TREE_TYPE (clone),
3751 TYPE_ATTRIBUTES (TREE_TYPE (fn)));
3754 /* Copy the function parameters. But, DECL_ARGUMENTS on a TEMPLATE_DECL
3755 aren't function parameters; those are the template parameters. */
3756 if (TREE_CODE (clone) != TEMPLATE_DECL)
3758 DECL_ARGUMENTS (clone) = copy_list (DECL_ARGUMENTS (clone));
3759 /* Remove the in-charge parameter. */
3760 if (DECL_HAS_IN_CHARGE_PARM_P (clone))
3762 TREE_CHAIN (DECL_ARGUMENTS (clone))
3763 = TREE_CHAIN (TREE_CHAIN (DECL_ARGUMENTS (clone)));
3764 DECL_HAS_IN_CHARGE_PARM_P (clone) = 0;
3766 /* And the VTT parm, in a complete [cd]tor. */
3767 if (DECL_HAS_VTT_PARM_P (fn))
3769 if (DECL_NEEDS_VTT_PARM_P (clone))
3770 DECL_HAS_VTT_PARM_P (clone) = 1;
3771 else
3773 TREE_CHAIN (DECL_ARGUMENTS (clone))
3774 = TREE_CHAIN (TREE_CHAIN (DECL_ARGUMENTS (clone)));
3775 DECL_HAS_VTT_PARM_P (clone) = 0;
3779 for (parms = DECL_ARGUMENTS (clone); parms; parms = TREE_CHAIN (parms))
3781 DECL_CONTEXT (parms) = clone;
3782 cxx_dup_lang_specific_decl (parms);
3786 /* Create the RTL for this function. */
3787 SET_DECL_RTL (clone, NULL_RTX);
3788 rest_of_decl_compilation (clone, /*top_level=*/1, at_eof);
3790 /* Make it easy to find the CLONE given the FN. */
3791 TREE_CHAIN (clone) = TREE_CHAIN (fn);
3792 TREE_CHAIN (fn) = clone;
3794 /* If this is a template, handle the DECL_TEMPLATE_RESULT as well. */
3795 if (TREE_CODE (clone) == TEMPLATE_DECL)
3797 tree result;
3799 DECL_TEMPLATE_RESULT (clone)
3800 = build_clone (DECL_TEMPLATE_RESULT (clone), name);
3801 result = DECL_TEMPLATE_RESULT (clone);
3802 DECL_TEMPLATE_INFO (result) = copy_node (DECL_TEMPLATE_INFO (result));
3803 DECL_TI_TEMPLATE (result) = clone;
3805 else if (pch_file)
3806 note_decl_for_pch (clone);
3808 return clone;
3811 /* Produce declarations for all appropriate clones of FN. If
3812 UPDATE_METHOD_VEC_P is nonzero, the clones are added to the
3813 CLASTYPE_METHOD_VEC as well. */
3815 void
3816 clone_function_decl (tree fn, int update_method_vec_p)
3818 tree clone;
3820 /* Avoid inappropriate cloning. */
3821 if (TREE_CHAIN (fn)
3822 && DECL_CLONED_FUNCTION (TREE_CHAIN (fn)))
3823 return;
3825 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (fn))
3827 /* For each constructor, we need two variants: an in-charge version
3828 and a not-in-charge version. */
3829 clone = build_clone (fn, complete_ctor_identifier);
3830 if (update_method_vec_p)
3831 add_method (DECL_CONTEXT (clone), clone);
3832 clone = build_clone (fn, base_ctor_identifier);
3833 if (update_method_vec_p)
3834 add_method (DECL_CONTEXT (clone), clone);
3836 else
3838 gcc_assert (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (fn));
3840 /* For each destructor, we need three variants: an in-charge
3841 version, a not-in-charge version, and an in-charge deleting
3842 version. We clone the deleting version first because that
3843 means it will go second on the TYPE_METHODS list -- and that
3844 corresponds to the correct layout order in the virtual
3845 function table.
3847 For a non-virtual destructor, we do not build a deleting
3848 destructor. */
3849 if (DECL_VIRTUAL_P (fn))
3851 clone = build_clone (fn, deleting_dtor_identifier);
3852 if (update_method_vec_p)
3853 add_method (DECL_CONTEXT (clone), clone);
3855 clone = build_clone (fn, complete_dtor_identifier);
3856 if (update_method_vec_p)
3857 add_method (DECL_CONTEXT (clone), clone);
3858 clone = build_clone (fn, base_dtor_identifier);
3859 if (update_method_vec_p)
3860 add_method (DECL_CONTEXT (clone), clone);
3863 /* Note that this is an abstract function that is never emitted. */
3864 DECL_ABSTRACT (fn) = 1;
3867 /* DECL is an in charge constructor, which is being defined. This will
3868 have had an in class declaration, from whence clones were
3869 declared. An out-of-class definition can specify additional default
3870 arguments. As it is the clones that are involved in overload
3871 resolution, we must propagate the information from the DECL to its
3872 clones. */
3874 void
3875 adjust_clone_args (tree decl)
3877 tree clone;
3879 for (clone = TREE_CHAIN (decl); clone && DECL_CLONED_FUNCTION (clone);
3880 clone = TREE_CHAIN (clone))
3882 tree orig_clone_parms = TYPE_ARG_TYPES (TREE_TYPE (clone));
3883 tree orig_decl_parms = TYPE_ARG_TYPES (TREE_TYPE (decl));
3884 tree decl_parms, clone_parms;
3886 clone_parms = orig_clone_parms;
3888 /* Skip the 'this' parameter. */
3889 orig_clone_parms = TREE_CHAIN (orig_clone_parms);
3890 orig_decl_parms = TREE_CHAIN (orig_decl_parms);
3892 if (DECL_HAS_IN_CHARGE_PARM_P (decl))
3893 orig_decl_parms = TREE_CHAIN (orig_decl_parms);
3894 if (DECL_HAS_VTT_PARM_P (decl))
3895 orig_decl_parms = TREE_CHAIN (orig_decl_parms);
3897 clone_parms = orig_clone_parms;
3898 if (DECL_HAS_VTT_PARM_P (clone))
3899 clone_parms = TREE_CHAIN (clone_parms);
3901 for (decl_parms = orig_decl_parms; decl_parms;
3902 decl_parms = TREE_CHAIN (decl_parms),
3903 clone_parms = TREE_CHAIN (clone_parms))
3905 gcc_assert (same_type_p (TREE_TYPE (decl_parms),
3906 TREE_TYPE (clone_parms)));
3908 if (TREE_PURPOSE (decl_parms) && !TREE_PURPOSE (clone_parms))
3910 /* A default parameter has been added. Adjust the
3911 clone's parameters. */
3912 tree exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (clone));
3913 tree basetype = TYPE_METHOD_BASETYPE (TREE_TYPE (clone));
3914 tree type;
3916 clone_parms = orig_decl_parms;
3918 if (DECL_HAS_VTT_PARM_P (clone))
3920 clone_parms = tree_cons (TREE_PURPOSE (orig_clone_parms),
3921 TREE_VALUE (orig_clone_parms),
3922 clone_parms);
3923 TREE_TYPE (clone_parms) = TREE_TYPE (orig_clone_parms);
3925 type = build_method_type_directly (basetype,
3926 TREE_TYPE (TREE_TYPE (clone)),
3927 clone_parms);
3928 if (exceptions)
3929 type = build_exception_variant (type, exceptions);
3930 TREE_TYPE (clone) = type;
3932 clone_parms = NULL_TREE;
3933 break;
3936 gcc_assert (!clone_parms);
3940 /* For each of the constructors and destructors in T, create an
3941 in-charge and not-in-charge variant. */
3943 static void
3944 clone_constructors_and_destructors (tree t)
3946 tree fns;
3948 /* If for some reason we don't have a CLASSTYPE_METHOD_VEC, we bail
3949 out now. */
3950 if (!CLASSTYPE_METHOD_VEC (t))
3951 return;
3953 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
3954 clone_function_decl (OVL_CURRENT (fns), /*update_method_vec_p=*/1);
3955 for (fns = CLASSTYPE_DESTRUCTORS (t); fns; fns = OVL_NEXT (fns))
3956 clone_function_decl (OVL_CURRENT (fns), /*update_method_vec_p=*/1);
3959 /* Remove all zero-width bit-fields from T. */
3961 static void
3962 remove_zero_width_bit_fields (tree t)
3964 tree *fieldsp;
3966 fieldsp = &TYPE_FIELDS (t);
3967 while (*fieldsp)
3969 if (TREE_CODE (*fieldsp) == FIELD_DECL
3970 && DECL_C_BIT_FIELD (*fieldsp)
3971 && DECL_INITIAL (*fieldsp))
3972 *fieldsp = TREE_CHAIN (*fieldsp);
3973 else
3974 fieldsp = &TREE_CHAIN (*fieldsp);
3978 /* Returns TRUE iff we need a cookie when dynamically allocating an
3979 array whose elements have the indicated class TYPE. */
3981 static bool
3982 type_requires_array_cookie (tree type)
3984 tree fns;
3985 bool has_two_argument_delete_p = false;
3987 gcc_assert (CLASS_TYPE_P (type));
3989 /* If there's a non-trivial destructor, we need a cookie. In order
3990 to iterate through the array calling the destructor for each
3991 element, we'll have to know how many elements there are. */
3992 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3993 return true;
3995 /* If the usual deallocation function is a two-argument whose second
3996 argument is of type `size_t', then we have to pass the size of
3997 the array to the deallocation function, so we will need to store
3998 a cookie. */
3999 fns = lookup_fnfields (TYPE_BINFO (type),
4000 ansi_opname (VEC_DELETE_EXPR),
4001 /*protect=*/0);
4002 /* If there are no `operator []' members, or the lookup is
4003 ambiguous, then we don't need a cookie. */
4004 if (!fns || fns == error_mark_node)
4005 return false;
4006 /* Loop through all of the functions. */
4007 for (fns = BASELINK_FUNCTIONS (fns); fns; fns = OVL_NEXT (fns))
4009 tree fn;
4010 tree second_parm;
4012 /* Select the current function. */
4013 fn = OVL_CURRENT (fns);
4014 /* See if this function is a one-argument delete function. If
4015 it is, then it will be the usual deallocation function. */
4016 second_parm = TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (fn)));
4017 if (second_parm == void_list_node)
4018 return false;
4019 /* Otherwise, if we have a two-argument function and the second
4020 argument is `size_t', it will be the usual deallocation
4021 function -- unless there is one-argument function, too. */
4022 if (TREE_CHAIN (second_parm) == void_list_node
4023 && same_type_p (TREE_VALUE (second_parm), sizetype))
4024 has_two_argument_delete_p = true;
4027 return has_two_argument_delete_p;
4030 /* Check the validity of the bases and members declared in T. Add any
4031 implicitly-generated functions (like copy-constructors and
4032 assignment operators). Compute various flag bits (like
4033 CLASSTYPE_NON_POD_T) for T. This routine works purely at the C++
4034 level: i.e., independently of the ABI in use. */
4036 static void
4037 check_bases_and_members (tree t)
4039 /* Nonzero if the implicitly generated copy constructor should take
4040 a non-const reference argument. */
4041 int cant_have_const_ctor;
4042 /* Nonzero if the implicitly generated assignment operator
4043 should take a non-const reference argument. */
4044 int no_const_asn_ref;
4045 tree access_decls;
4047 /* By default, we use const reference arguments and generate default
4048 constructors. */
4049 cant_have_const_ctor = 0;
4050 no_const_asn_ref = 0;
4052 /* Check all the base-classes. */
4053 check_bases (t, &cant_have_const_ctor,
4054 &no_const_asn_ref);
4056 /* Check all the method declarations. */
4057 check_methods (t);
4059 /* Check all the data member declarations. We cannot call
4060 check_field_decls until we have called check_bases check_methods,
4061 as check_field_decls depends on TYPE_HAS_NONTRIVIAL_DESTRUCTOR
4062 being set appropriately. */
4063 check_field_decls (t, &access_decls,
4064 &cant_have_const_ctor,
4065 &no_const_asn_ref);
4067 /* A nearly-empty class has to be vptr-containing; a nearly empty
4068 class contains just a vptr. */
4069 if (!TYPE_CONTAINS_VPTR_P (t))
4070 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
4072 /* Do some bookkeeping that will guide the generation of implicitly
4073 declared member functions. */
4074 TYPE_HAS_COMPLEX_INIT_REF (t)
4075 |= (TYPE_HAS_INIT_REF (t) || TYPE_CONTAINS_VPTR_P (t));
4076 TYPE_NEEDS_CONSTRUCTING (t)
4077 |= (TYPE_HAS_CONSTRUCTOR (t) || TYPE_CONTAINS_VPTR_P (t));
4078 CLASSTYPE_NON_AGGREGATE (t)
4079 |= (TYPE_HAS_CONSTRUCTOR (t) || TYPE_POLYMORPHIC_P (t));
4080 CLASSTYPE_NON_POD_P (t)
4081 |= (CLASSTYPE_NON_AGGREGATE (t)
4082 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
4083 || TYPE_HAS_ASSIGN_REF (t));
4084 TYPE_HAS_COMPLEX_ASSIGN_REF (t)
4085 |= TYPE_HAS_ASSIGN_REF (t) || TYPE_CONTAINS_VPTR_P (t);
4087 /* Synthesize any needed methods. */
4088 add_implicitly_declared_members (t,
4089 cant_have_const_ctor,
4090 no_const_asn_ref);
4092 /* Create the in-charge and not-in-charge variants of constructors
4093 and destructors. */
4094 clone_constructors_and_destructors (t);
4096 /* Process the using-declarations. */
4097 for (; access_decls; access_decls = TREE_CHAIN (access_decls))
4098 handle_using_decl (TREE_VALUE (access_decls), t);
4100 /* Build and sort the CLASSTYPE_METHOD_VEC. */
4101 finish_struct_methods (t);
4103 /* Figure out whether or not we will need a cookie when dynamically
4104 allocating an array of this type. */
4105 TYPE_LANG_SPECIFIC (t)->u.c.vec_new_uses_cookie
4106 = type_requires_array_cookie (t);
4109 /* If T needs a pointer to its virtual function table, set TYPE_VFIELD
4110 accordingly. If a new vfield was created (because T doesn't have a
4111 primary base class), then the newly created field is returned. It
4112 is not added to the TYPE_FIELDS list; it is the caller's
4113 responsibility to do that. Accumulate declared virtual functions
4114 on VIRTUALS_P. */
4116 static tree
4117 create_vtable_ptr (tree t, tree* virtuals_p)
4119 tree fn;
4121 /* Collect the virtual functions declared in T. */
4122 for (fn = TYPE_METHODS (t); fn; fn = TREE_CHAIN (fn))
4123 if (DECL_VINDEX (fn) && !DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (fn)
4124 && TREE_CODE (DECL_VINDEX (fn)) != INTEGER_CST)
4126 tree new_virtual = make_node (TREE_LIST);
4128 BV_FN (new_virtual) = fn;
4129 BV_DELTA (new_virtual) = integer_zero_node;
4130 BV_VCALL_INDEX (new_virtual) = NULL_TREE;
4132 TREE_CHAIN (new_virtual) = *virtuals_p;
4133 *virtuals_p = new_virtual;
4136 /* If we couldn't find an appropriate base class, create a new field
4137 here. Even if there weren't any new virtual functions, we might need a
4138 new virtual function table if we're supposed to include vptrs in
4139 all classes that need them. */
4140 if (!TYPE_VFIELD (t) && (*virtuals_p || TYPE_CONTAINS_VPTR_P (t)))
4142 /* We build this decl with vtbl_ptr_type_node, which is a
4143 `vtable_entry_type*'. It might seem more precise to use
4144 `vtable_entry_type (*)[N]' where N is the number of virtual
4145 functions. However, that would require the vtable pointer in
4146 base classes to have a different type than the vtable pointer
4147 in derived classes. We could make that happen, but that
4148 still wouldn't solve all the problems. In particular, the
4149 type-based alias analysis code would decide that assignments
4150 to the base class vtable pointer can't alias assignments to
4151 the derived class vtable pointer, since they have different
4152 types. Thus, in a derived class destructor, where the base
4153 class constructor was inlined, we could generate bad code for
4154 setting up the vtable pointer.
4156 Therefore, we use one type for all vtable pointers. We still
4157 use a type-correct type; it's just doesn't indicate the array
4158 bounds. That's better than using `void*' or some such; it's
4159 cleaner, and it let's the alias analysis code know that these
4160 stores cannot alias stores to void*! */
4161 tree field;
4163 field = build_decl (FIELD_DECL, get_vfield_name (t), vtbl_ptr_type_node);
4164 SET_DECL_ASSEMBLER_NAME (field, get_identifier (VFIELD_BASE));
4165 DECL_VIRTUAL_P (field) = 1;
4166 DECL_ARTIFICIAL (field) = 1;
4167 DECL_FIELD_CONTEXT (field) = t;
4168 DECL_FCONTEXT (field) = t;
4170 TYPE_VFIELD (t) = field;
4172 /* This class is non-empty. */
4173 CLASSTYPE_EMPTY_P (t) = 0;
4175 return field;
4178 return NULL_TREE;
4181 /* Fixup the inline function given by INFO now that the class is
4182 complete. */
4184 static void
4185 fixup_pending_inline (tree fn)
4187 if (DECL_PENDING_INLINE_INFO (fn))
4189 tree args = DECL_ARGUMENTS (fn);
4190 while (args)
4192 DECL_CONTEXT (args) = fn;
4193 args = TREE_CHAIN (args);
4198 /* Fixup the inline methods and friends in TYPE now that TYPE is
4199 complete. */
4201 static void
4202 fixup_inline_methods (tree type)
4204 tree method = TYPE_METHODS (type);
4205 VEC (tree) *friends;
4206 unsigned ix;
4208 if (method && TREE_CODE (method) == TREE_VEC)
4210 if (TREE_VEC_ELT (method, 1))
4211 method = TREE_VEC_ELT (method, 1);
4212 else if (TREE_VEC_ELT (method, 0))
4213 method = TREE_VEC_ELT (method, 0);
4214 else
4215 method = TREE_VEC_ELT (method, 2);
4218 /* Do inline member functions. */
4219 for (; method; method = TREE_CHAIN (method))
4220 fixup_pending_inline (method);
4222 /* Do friends. */
4223 for (friends = CLASSTYPE_INLINE_FRIENDS (type), ix = 0;
4224 VEC_iterate (tree, friends, ix, method); ix++)
4225 fixup_pending_inline (method);
4226 CLASSTYPE_INLINE_FRIENDS (type) = NULL;
4229 /* Add OFFSET to all base types of BINFO which is a base in the
4230 hierarchy dominated by T.
4232 OFFSET, which is a type offset, is number of bytes. */
4234 static void
4235 propagate_binfo_offsets (tree binfo, tree offset)
4237 int i;
4238 tree primary_binfo;
4239 tree base_binfo;
4241 /* Update BINFO's offset. */
4242 BINFO_OFFSET (binfo)
4243 = convert (sizetype,
4244 size_binop (PLUS_EXPR,
4245 convert (ssizetype, BINFO_OFFSET (binfo)),
4246 offset));
4248 /* Find the primary base class. */
4249 primary_binfo = get_primary_binfo (binfo);
4251 if (primary_binfo && BINFO_INHERITANCE_CHAIN (primary_binfo) == binfo)
4252 propagate_binfo_offsets (primary_binfo, offset);
4254 /* Scan all of the bases, pushing the BINFO_OFFSET adjust
4255 downwards. */
4256 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
4258 /* Don't do the primary base twice. */
4259 if (base_binfo == primary_binfo)
4260 continue;
4262 if (BINFO_VIRTUAL_P (base_binfo))
4263 continue;
4265 propagate_binfo_offsets (base_binfo, offset);
4269 /* Set BINFO_OFFSET for all of the virtual bases for RLI->T. Update
4270 TYPE_ALIGN and TYPE_SIZE for T. OFFSETS gives the location of
4271 empty subobjects of T. */
4273 static void
4274 layout_virtual_bases (record_layout_info rli, splay_tree offsets)
4276 tree vbase;
4277 tree t = rli->t;
4278 bool first_vbase = true;
4279 tree *next_field;
4281 if (BINFO_N_BASE_BINFOS (TYPE_BINFO (t)) == 0)
4282 return;
4284 if (!abi_version_at_least(2))
4286 /* In G++ 3.2, we incorrectly rounded the size before laying out
4287 the virtual bases. */
4288 finish_record_layout (rli, /*free_p=*/false);
4289 #ifdef STRUCTURE_SIZE_BOUNDARY
4290 /* Packed structures don't need to have minimum size. */
4291 if (! TYPE_PACKED (t))
4292 TYPE_ALIGN (t) = MAX (TYPE_ALIGN (t), (unsigned) STRUCTURE_SIZE_BOUNDARY);
4293 #endif
4294 rli->offset = TYPE_SIZE_UNIT (t);
4295 rli->bitpos = bitsize_zero_node;
4296 rli->record_align = TYPE_ALIGN (t);
4299 /* Find the last field. The artificial fields created for virtual
4300 bases will go after the last extant field to date. */
4301 next_field = &TYPE_FIELDS (t);
4302 while (*next_field)
4303 next_field = &TREE_CHAIN (*next_field);
4305 /* Go through the virtual bases, allocating space for each virtual
4306 base that is not already a primary base class. These are
4307 allocated in inheritance graph order. */
4308 for (vbase = TYPE_BINFO (t); vbase; vbase = TREE_CHAIN (vbase))
4310 if (!BINFO_VIRTUAL_P (vbase))
4311 continue;
4313 if (!BINFO_PRIMARY_P (vbase))
4315 tree basetype = TREE_TYPE (vbase);
4317 /* This virtual base is not a primary base of any class in the
4318 hierarchy, so we have to add space for it. */
4319 next_field = build_base_field (rli, vbase,
4320 offsets, next_field);
4322 /* If the first virtual base might have been placed at a
4323 lower address, had we started from CLASSTYPE_SIZE, rather
4324 than TYPE_SIZE, issue a warning. There can be both false
4325 positives and false negatives from this warning in rare
4326 cases; to deal with all the possibilities would probably
4327 require performing both layout algorithms and comparing
4328 the results which is not particularly tractable. */
4329 if (warn_abi
4330 && first_vbase
4331 && (tree_int_cst_lt
4332 (size_binop (CEIL_DIV_EXPR,
4333 round_up (CLASSTYPE_SIZE (t),
4334 CLASSTYPE_ALIGN (basetype)),
4335 bitsize_unit_node),
4336 BINFO_OFFSET (vbase))))
4337 warning ("offset of virtual base %qT is not ABI-compliant and "
4338 "may change in a future version of GCC",
4339 basetype);
4341 first_vbase = false;
4346 /* Returns the offset of the byte just past the end of the base class
4347 BINFO. */
4349 static tree
4350 end_of_base (tree binfo)
4352 tree size;
4354 if (is_empty_class (BINFO_TYPE (binfo)))
4355 /* An empty class has zero CLASSTYPE_SIZE_UNIT, but we need to
4356 allocate some space for it. It cannot have virtual bases, so
4357 TYPE_SIZE_UNIT is fine. */
4358 size = TYPE_SIZE_UNIT (BINFO_TYPE (binfo));
4359 else
4360 size = CLASSTYPE_SIZE_UNIT (BINFO_TYPE (binfo));
4362 return size_binop (PLUS_EXPR, BINFO_OFFSET (binfo), size);
4365 /* Returns the offset of the byte just past the end of the base class
4366 with the highest offset in T. If INCLUDE_VIRTUALS_P is zero, then
4367 only non-virtual bases are included. */
4369 static tree
4370 end_of_class (tree t, int include_virtuals_p)
4372 tree result = size_zero_node;
4373 VEC (tree) *vbases;
4374 tree binfo;
4375 tree base_binfo;
4376 tree offset;
4377 int i;
4379 for (binfo = TYPE_BINFO (t), i = 0;
4380 BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
4382 if (!include_virtuals_p
4383 && BINFO_VIRTUAL_P (base_binfo)
4384 && (!BINFO_PRIMARY_P (base_binfo)
4385 || BINFO_INHERITANCE_CHAIN (base_binfo) != TYPE_BINFO (t)))
4386 continue;
4388 offset = end_of_base (base_binfo);
4389 if (INT_CST_LT_UNSIGNED (result, offset))
4390 result = offset;
4393 /* G++ 3.2 did not check indirect virtual bases. */
4394 if (abi_version_at_least (2) && include_virtuals_p)
4395 for (vbases = CLASSTYPE_VBASECLASSES (t), i = 0;
4396 VEC_iterate (tree, vbases, i, base_binfo); i++)
4398 offset = end_of_base (base_binfo);
4399 if (INT_CST_LT_UNSIGNED (result, offset))
4400 result = offset;
4403 return result;
4406 /* Warn about bases of T that are inaccessible because they are
4407 ambiguous. For example:
4409 struct S {};
4410 struct T : public S {};
4411 struct U : public S, public T {};
4413 Here, `(S*) new U' is not allowed because there are two `S'
4414 subobjects of U. */
4416 static void
4417 warn_about_ambiguous_bases (tree t)
4419 int i;
4420 VEC (tree) *vbases;
4421 tree basetype;
4422 tree binfo;
4423 tree base_binfo;
4425 /* If there are no repeated bases, nothing can be ambiguous. */
4426 if (!CLASSTYPE_REPEATED_BASE_P (t))
4427 return;
4429 /* Check direct bases. */
4430 for (binfo = TYPE_BINFO (t), i = 0;
4431 BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
4433 basetype = BINFO_TYPE (base_binfo);
4435 if (!lookup_base (t, basetype, ba_unique | ba_quiet, NULL))
4436 warning ("direct base %qT inaccessible in %qT due to ambiguity",
4437 basetype, t);
4440 /* Check for ambiguous virtual bases. */
4441 if (extra_warnings)
4442 for (vbases = CLASSTYPE_VBASECLASSES (t), i = 0;
4443 VEC_iterate (tree, vbases, i, binfo); i++)
4445 basetype = BINFO_TYPE (binfo);
4447 if (!lookup_base (t, basetype, ba_unique | ba_quiet, NULL))
4448 warning ("virtual base %qT inaccessible in %qT due to ambiguity",
4449 basetype, t);
4453 /* Compare two INTEGER_CSTs K1 and K2. */
4455 static int
4456 splay_tree_compare_integer_csts (splay_tree_key k1, splay_tree_key k2)
4458 return tree_int_cst_compare ((tree) k1, (tree) k2);
4461 /* Increase the size indicated in RLI to account for empty classes
4462 that are "off the end" of the class. */
4464 static void
4465 include_empty_classes (record_layout_info rli)
4467 tree eoc;
4468 tree rli_size;
4470 /* It might be the case that we grew the class to allocate a
4471 zero-sized base class. That won't be reflected in RLI, yet,
4472 because we are willing to overlay multiple bases at the same
4473 offset. However, now we need to make sure that RLI is big enough
4474 to reflect the entire class. */
4475 eoc = end_of_class (rli->t,
4476 CLASSTYPE_AS_BASE (rli->t) != NULL_TREE);
4477 rli_size = rli_size_unit_so_far (rli);
4478 if (TREE_CODE (rli_size) == INTEGER_CST
4479 && INT_CST_LT_UNSIGNED (rli_size, eoc))
4481 if (!abi_version_at_least (2))
4482 /* In version 1 of the ABI, the size of a class that ends with
4483 a bitfield was not rounded up to a whole multiple of a
4484 byte. Because rli_size_unit_so_far returns only the number
4485 of fully allocated bytes, any extra bits were not included
4486 in the size. */
4487 rli->bitpos = round_down (rli->bitpos, BITS_PER_UNIT);
4488 else
4489 /* The size should have been rounded to a whole byte. */
4490 gcc_assert (tree_int_cst_equal
4491 (rli->bitpos, round_down (rli->bitpos, BITS_PER_UNIT)));
4492 rli->bitpos
4493 = size_binop (PLUS_EXPR,
4494 rli->bitpos,
4495 size_binop (MULT_EXPR,
4496 convert (bitsizetype,
4497 size_binop (MINUS_EXPR,
4498 eoc, rli_size)),
4499 bitsize_int (BITS_PER_UNIT)));
4500 normalize_rli (rli);
4504 /* Calculate the TYPE_SIZE, TYPE_ALIGN, etc for T. Calculate
4505 BINFO_OFFSETs for all of the base-classes. Position the vtable
4506 pointer. Accumulate declared virtual functions on VIRTUALS_P. */
4508 static void
4509 layout_class_type (tree t, tree *virtuals_p)
4511 tree non_static_data_members;
4512 tree field;
4513 tree vptr;
4514 record_layout_info rli;
4515 /* Maps offsets (represented as INTEGER_CSTs) to a TREE_LIST of
4516 types that appear at that offset. */
4517 splay_tree empty_base_offsets;
4518 /* True if the last field layed out was a bit-field. */
4519 bool last_field_was_bitfield = false;
4520 /* The location at which the next field should be inserted. */
4521 tree *next_field;
4522 /* T, as a base class. */
4523 tree base_t;
4525 /* Keep track of the first non-static data member. */
4526 non_static_data_members = TYPE_FIELDS (t);
4528 /* Start laying out the record. */
4529 rli = start_record_layout (t);
4531 /* Mark all the primary bases in the hierarchy. */
4532 determine_primary_bases (t);
4534 /* Create a pointer to our virtual function table. */
4535 vptr = create_vtable_ptr (t, virtuals_p);
4537 /* The vptr is always the first thing in the class. */
4538 if (vptr)
4540 TREE_CHAIN (vptr) = TYPE_FIELDS (t);
4541 TYPE_FIELDS (t) = vptr;
4542 next_field = &TREE_CHAIN (vptr);
4543 place_field (rli, vptr);
4545 else
4546 next_field = &TYPE_FIELDS (t);
4548 /* Build FIELD_DECLs for all of the non-virtual base-types. */
4549 empty_base_offsets = splay_tree_new (splay_tree_compare_integer_csts,
4550 NULL, NULL);
4551 build_base_fields (rli, empty_base_offsets, next_field);
4553 /* Layout the non-static data members. */
4554 for (field = non_static_data_members; field; field = TREE_CHAIN (field))
4556 tree type;
4557 tree padding;
4559 /* We still pass things that aren't non-static data members to
4560 the back-end, in case it wants to do something with them. */
4561 if (TREE_CODE (field) != FIELD_DECL)
4563 place_field (rli, field);
4564 /* If the static data member has incomplete type, keep track
4565 of it so that it can be completed later. (The handling
4566 of pending statics in finish_record_layout is
4567 insufficient; consider:
4569 struct S1;
4570 struct S2 { static S1 s1; };
4572 At this point, finish_record_layout will be called, but
4573 S1 is still incomplete.) */
4574 if (TREE_CODE (field) == VAR_DECL)
4576 maybe_register_incomplete_var (field);
4577 /* The visibility of static data members is determined
4578 at their point of declaration, not their point of
4579 definition. */
4580 determine_visibility (field);
4582 continue;
4585 type = TREE_TYPE (field);
4587 padding = NULL_TREE;
4589 /* If this field is a bit-field whose width is greater than its
4590 type, then there are some special rules for allocating
4591 it. */
4592 if (DECL_C_BIT_FIELD (field)
4593 && INT_CST_LT (TYPE_SIZE (type), DECL_SIZE (field)))
4595 integer_type_kind itk;
4596 tree integer_type;
4597 bool was_unnamed_p = false;
4598 /* We must allocate the bits as if suitably aligned for the
4599 longest integer type that fits in this many bits. type
4600 of the field. Then, we are supposed to use the left over
4601 bits as additional padding. */
4602 for (itk = itk_char; itk != itk_none; ++itk)
4603 if (INT_CST_LT (DECL_SIZE (field),
4604 TYPE_SIZE (integer_types[itk])))
4605 break;
4607 /* ITK now indicates a type that is too large for the
4608 field. We have to back up by one to find the largest
4609 type that fits. */
4610 integer_type = integer_types[itk - 1];
4612 /* Figure out how much additional padding is required. GCC
4613 3.2 always created a padding field, even if it had zero
4614 width. */
4615 if (!abi_version_at_least (2)
4616 || INT_CST_LT (TYPE_SIZE (integer_type), DECL_SIZE (field)))
4618 if (abi_version_at_least (2) && TREE_CODE (t) == UNION_TYPE)
4619 /* In a union, the padding field must have the full width
4620 of the bit-field; all fields start at offset zero. */
4621 padding = DECL_SIZE (field);
4622 else
4624 if (warn_abi && TREE_CODE (t) == UNION_TYPE)
4625 warning ("size assigned to %qT may not be "
4626 "ABI-compliant and may change in a future "
4627 "version of GCC",
4629 padding = size_binop (MINUS_EXPR, DECL_SIZE (field),
4630 TYPE_SIZE (integer_type));
4633 #ifdef PCC_BITFIELD_TYPE_MATTERS
4634 /* An unnamed bitfield does not normally affect the
4635 alignment of the containing class on a target where
4636 PCC_BITFIELD_TYPE_MATTERS. But, the C++ ABI does not
4637 make any exceptions for unnamed bitfields when the
4638 bitfields are longer than their types. Therefore, we
4639 temporarily give the field a name. */
4640 if (PCC_BITFIELD_TYPE_MATTERS && !DECL_NAME (field))
4642 was_unnamed_p = true;
4643 DECL_NAME (field) = make_anon_name ();
4645 #endif
4646 DECL_SIZE (field) = TYPE_SIZE (integer_type);
4647 DECL_ALIGN (field) = TYPE_ALIGN (integer_type);
4648 DECL_USER_ALIGN (field) = TYPE_USER_ALIGN (integer_type);
4649 layout_nonempty_base_or_field (rli, field, NULL_TREE,
4650 empty_base_offsets);
4651 if (was_unnamed_p)
4652 DECL_NAME (field) = NULL_TREE;
4653 /* Now that layout has been performed, set the size of the
4654 field to the size of its declared type; the rest of the
4655 field is effectively invisible. */
4656 DECL_SIZE (field) = TYPE_SIZE (type);
4657 /* We must also reset the DECL_MODE of the field. */
4658 if (abi_version_at_least (2))
4659 DECL_MODE (field) = TYPE_MODE (type);
4660 else if (warn_abi
4661 && DECL_MODE (field) != TYPE_MODE (type))
4662 /* Versions of G++ before G++ 3.4 did not reset the
4663 DECL_MODE. */
4664 warning ("the offset of %qD may not be ABI-compliant and may "
4665 "change in a future version of GCC", field);
4667 else
4668 layout_nonempty_base_or_field (rli, field, NULL_TREE,
4669 empty_base_offsets);
4671 /* Remember the location of any empty classes in FIELD. */
4672 if (abi_version_at_least (2))
4673 record_subobject_offsets (TREE_TYPE (field),
4674 byte_position(field),
4675 empty_base_offsets,
4676 /*vbases_p=*/1);
4678 /* If a bit-field does not immediately follow another bit-field,
4679 and yet it starts in the middle of a byte, we have failed to
4680 comply with the ABI. */
4681 if (warn_abi
4682 && DECL_C_BIT_FIELD (field)
4683 && !last_field_was_bitfield
4684 && !integer_zerop (size_binop (TRUNC_MOD_EXPR,
4685 DECL_FIELD_BIT_OFFSET (field),
4686 bitsize_unit_node)))
4687 cp_warning_at ("offset of %qD is not ABI-compliant and may "
4688 "change in a future version of GCC",
4689 field);
4691 /* G++ used to use DECL_FIELD_OFFSET as if it were the byte
4692 offset of the field. */
4693 if (warn_abi
4694 && !tree_int_cst_equal (DECL_FIELD_OFFSET (field),
4695 byte_position (field))
4696 && contains_empty_class_p (TREE_TYPE (field)))
4697 cp_warning_at ("%qD contains empty classes which may cause base "
4698 "classes to be placed at different locations in a "
4699 "future version of GCC",
4700 field);
4702 /* If we needed additional padding after this field, add it
4703 now. */
4704 if (padding)
4706 tree padding_field;
4708 padding_field = build_decl (FIELD_DECL,
4709 NULL_TREE,
4710 char_type_node);
4711 DECL_BIT_FIELD (padding_field) = 1;
4712 DECL_SIZE (padding_field) = padding;
4713 DECL_CONTEXT (padding_field) = t;
4714 DECL_ARTIFICIAL (padding_field) = 1;
4715 DECL_IGNORED_P (padding_field) = 1;
4716 layout_nonempty_base_or_field (rli, padding_field,
4717 NULL_TREE,
4718 empty_base_offsets);
4721 last_field_was_bitfield = DECL_C_BIT_FIELD (field);
4724 if (abi_version_at_least (2) && !integer_zerop (rli->bitpos))
4726 /* Make sure that we are on a byte boundary so that the size of
4727 the class without virtual bases will always be a round number
4728 of bytes. */
4729 rli->bitpos = round_up (rli->bitpos, BITS_PER_UNIT);
4730 normalize_rli (rli);
4733 /* G++ 3.2 does not allow virtual bases to be overlaid with tail
4734 padding. */
4735 if (!abi_version_at_least (2))
4736 include_empty_classes(rli);
4738 /* Delete all zero-width bit-fields from the list of fields. Now
4739 that the type is laid out they are no longer important. */
4740 remove_zero_width_bit_fields (t);
4742 /* Create the version of T used for virtual bases. We do not use
4743 make_aggr_type for this version; this is an artificial type. For
4744 a POD type, we just reuse T. */
4745 if (CLASSTYPE_NON_POD_P (t) || CLASSTYPE_EMPTY_P (t))
4747 base_t = make_node (TREE_CODE (t));
4749 /* Set the size and alignment for the new type. In G++ 3.2, all
4750 empty classes were considered to have size zero when used as
4751 base classes. */
4752 if (!abi_version_at_least (2) && CLASSTYPE_EMPTY_P (t))
4754 TYPE_SIZE (base_t) = bitsize_zero_node;
4755 TYPE_SIZE_UNIT (base_t) = size_zero_node;
4756 if (warn_abi && !integer_zerop (rli_size_unit_so_far (rli)))
4757 warning ("layout of classes derived from empty class %qT "
4758 "may change in a future version of GCC",
4761 else
4763 tree eoc;
4765 /* If the ABI version is not at least two, and the last
4766 field was a bit-field, RLI may not be on a byte
4767 boundary. In particular, rli_size_unit_so_far might
4768 indicate the last complete byte, while rli_size_so_far
4769 indicates the total number of bits used. Therefore,
4770 rli_size_so_far, rather than rli_size_unit_so_far, is
4771 used to compute TYPE_SIZE_UNIT. */
4772 eoc = end_of_class (t, /*include_virtuals_p=*/0);
4773 TYPE_SIZE_UNIT (base_t)
4774 = size_binop (MAX_EXPR,
4775 convert (sizetype,
4776 size_binop (CEIL_DIV_EXPR,
4777 rli_size_so_far (rli),
4778 bitsize_int (BITS_PER_UNIT))),
4779 eoc);
4780 TYPE_SIZE (base_t)
4781 = size_binop (MAX_EXPR,
4782 rli_size_so_far (rli),
4783 size_binop (MULT_EXPR,
4784 convert (bitsizetype, eoc),
4785 bitsize_int (BITS_PER_UNIT)));
4787 TYPE_ALIGN (base_t) = rli->record_align;
4788 TYPE_USER_ALIGN (base_t) = TYPE_USER_ALIGN (t);
4790 /* Copy the fields from T. */
4791 next_field = &TYPE_FIELDS (base_t);
4792 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
4793 if (TREE_CODE (field) == FIELD_DECL)
4795 *next_field = build_decl (FIELD_DECL,
4796 DECL_NAME (field),
4797 TREE_TYPE (field));
4798 DECL_CONTEXT (*next_field) = base_t;
4799 DECL_FIELD_OFFSET (*next_field) = DECL_FIELD_OFFSET (field);
4800 DECL_FIELD_BIT_OFFSET (*next_field)
4801 = DECL_FIELD_BIT_OFFSET (field);
4802 DECL_SIZE (*next_field) = DECL_SIZE (field);
4803 DECL_MODE (*next_field) = DECL_MODE (field);
4804 next_field = &TREE_CHAIN (*next_field);
4807 /* Record the base version of the type. */
4808 CLASSTYPE_AS_BASE (t) = base_t;
4809 TYPE_CONTEXT (base_t) = t;
4811 else
4812 CLASSTYPE_AS_BASE (t) = t;
4814 /* Every empty class contains an empty class. */
4815 if (CLASSTYPE_EMPTY_P (t))
4816 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) = 1;
4818 /* Set the TYPE_DECL for this type to contain the right
4819 value for DECL_OFFSET, so that we can use it as part
4820 of a COMPONENT_REF for multiple inheritance. */
4821 layout_decl (TYPE_MAIN_DECL (t), 0);
4823 /* Now fix up any virtual base class types that we left lying
4824 around. We must get these done before we try to lay out the
4825 virtual function table. As a side-effect, this will remove the
4826 base subobject fields. */
4827 layout_virtual_bases (rli, empty_base_offsets);
4829 /* Make sure that empty classes are reflected in RLI at this
4830 point. */
4831 include_empty_classes(rli);
4833 /* Make sure not to create any structures with zero size. */
4834 if (integer_zerop (rli_size_unit_so_far (rli)) && CLASSTYPE_EMPTY_P (t))
4835 place_field (rli,
4836 build_decl (FIELD_DECL, NULL_TREE, char_type_node));
4838 /* Let the back-end lay out the type. */
4839 finish_record_layout (rli, /*free_p=*/true);
4841 /* Warn about bases that can't be talked about due to ambiguity. */
4842 warn_about_ambiguous_bases (t);
4844 /* Now that we're done with layout, give the base fields the real types. */
4845 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
4846 if (DECL_ARTIFICIAL (field) && IS_FAKE_BASE_TYPE (TREE_TYPE (field)))
4847 TREE_TYPE (field) = TYPE_CONTEXT (TREE_TYPE (field));
4849 /* Clean up. */
4850 splay_tree_delete (empty_base_offsets);
4853 /* Determine the "key method" for the class type indicated by TYPE,
4854 and set CLASSTYPE_KEY_METHOD accordingly. */
4856 void
4857 determine_key_method (tree type)
4859 tree method;
4861 if (TYPE_FOR_JAVA (type)
4862 || processing_template_decl
4863 || CLASSTYPE_TEMPLATE_INSTANTIATION (type)
4864 || CLASSTYPE_INTERFACE_KNOWN (type))
4865 return;
4867 /* The key method is the first non-pure virtual function that is not
4868 inline at the point of class definition. On some targets the
4869 key function may not be inline; those targets should not call
4870 this function until the end of the translation unit. */
4871 for (method = TYPE_METHODS (type); method != NULL_TREE;
4872 method = TREE_CHAIN (method))
4873 if (DECL_VINDEX (method) != NULL_TREE
4874 && ! DECL_DECLARED_INLINE_P (method)
4875 && ! DECL_PURE_VIRTUAL_P (method))
4877 CLASSTYPE_KEY_METHOD (type) = method;
4878 break;
4881 return;
4884 /* Perform processing required when the definition of T (a class type)
4885 is complete. */
4887 void
4888 finish_struct_1 (tree t)
4890 tree x;
4891 /* A TREE_LIST. The TREE_VALUE of each node is a FUNCTION_DECL. */
4892 tree virtuals = NULL_TREE;
4893 int n_fields = 0;
4895 if (COMPLETE_TYPE_P (t))
4897 gcc_assert (IS_AGGR_TYPE (t));
4898 error ("redefinition of %q#T", t);
4899 popclass ();
4900 return;
4903 /* If this type was previously laid out as a forward reference,
4904 make sure we lay it out again. */
4905 TYPE_SIZE (t) = NULL_TREE;
4906 CLASSTYPE_PRIMARY_BINFO (t) = NULL_TREE;
4908 fixup_inline_methods (t);
4910 /* Make assumptions about the class; we'll reset the flags if
4911 necessary. */
4912 CLASSTYPE_EMPTY_P (t) = 1;
4913 CLASSTYPE_NEARLY_EMPTY_P (t) = 1;
4914 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) = 0;
4916 /* Do end-of-class semantic processing: checking the validity of the
4917 bases and members and add implicitly generated methods. */
4918 check_bases_and_members (t);
4920 /* Find the key method. */
4921 if (TYPE_CONTAINS_VPTR_P (t))
4923 /* The Itanium C++ ABI permits the key method to be chosen when
4924 the class is defined -- even though the key method so
4925 selected may later turn out to be an inline function. On
4926 some systems (such as ARM Symbian OS) the key method cannot
4927 be determined until the end of the translation unit. On such
4928 systems, we leave CLASSTYPE_KEY_METHOD set to NULL, which
4929 will cause the class to be added to KEYED_CLASSES. Then, in
4930 finish_file we will determine the key method. */
4931 if (targetm.cxx.key_method_may_be_inline ())
4932 determine_key_method (t);
4934 /* If a polymorphic class has no key method, we may emit the vtable
4935 in every translation unit where the class definition appears. */
4936 if (CLASSTYPE_KEY_METHOD (t) == NULL_TREE)
4937 keyed_classes = tree_cons (NULL_TREE, t, keyed_classes);
4940 /* Layout the class itself. */
4941 layout_class_type (t, &virtuals);
4942 if (CLASSTYPE_AS_BASE (t) != t)
4943 /* We use the base type for trivial assignments, and hence it
4944 needs a mode. */
4945 compute_record_mode (CLASSTYPE_AS_BASE (t));
4947 virtuals = modify_all_vtables (t, nreverse (virtuals));
4949 /* If necessary, create the primary vtable for this class. */
4950 if (virtuals || TYPE_CONTAINS_VPTR_P (t))
4952 /* We must enter these virtuals into the table. */
4953 if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t))
4954 build_primary_vtable (NULL_TREE, t);
4955 else if (! BINFO_NEW_VTABLE_MARKED (TYPE_BINFO (t)))
4956 /* Here we know enough to change the type of our virtual
4957 function table, but we will wait until later this function. */
4958 build_primary_vtable (CLASSTYPE_PRIMARY_BINFO (t), t);
4961 if (TYPE_CONTAINS_VPTR_P (t))
4963 int vindex;
4964 tree fn;
4966 if (BINFO_VTABLE (TYPE_BINFO (t)))
4967 gcc_assert (DECL_VIRTUAL_P (BINFO_VTABLE (TYPE_BINFO (t))));
4968 if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t))
4969 gcc_assert (BINFO_VIRTUALS (TYPE_BINFO (t)) == NULL_TREE);
4971 /* Add entries for virtual functions introduced by this class. */
4972 BINFO_VIRTUALS (TYPE_BINFO (t))
4973 = chainon (BINFO_VIRTUALS (TYPE_BINFO (t)), virtuals);
4975 /* Set DECL_VINDEX for all functions declared in this class. */
4976 for (vindex = 0, fn = BINFO_VIRTUALS (TYPE_BINFO (t));
4977 fn;
4978 fn = TREE_CHAIN (fn),
4979 vindex += (TARGET_VTABLE_USES_DESCRIPTORS
4980 ? TARGET_VTABLE_USES_DESCRIPTORS : 1))
4982 tree fndecl = BV_FN (fn);
4984 if (DECL_THUNK_P (fndecl))
4985 /* A thunk. We should never be calling this entry directly
4986 from this vtable -- we'd use the entry for the non
4987 thunk base function. */
4988 DECL_VINDEX (fndecl) = NULL_TREE;
4989 else if (TREE_CODE (DECL_VINDEX (fndecl)) != INTEGER_CST)
4990 DECL_VINDEX (fndecl) = build_int_cst (NULL_TREE, vindex);
4994 finish_struct_bits (t);
4996 /* Complete the rtl for any static member objects of the type we're
4997 working on. */
4998 for (x = TYPE_FIELDS (t); x; x = TREE_CHAIN (x))
4999 if (TREE_CODE (x) == VAR_DECL && TREE_STATIC (x)
5000 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (x)), t))
5001 DECL_MODE (x) = TYPE_MODE (t);
5003 /* Done with FIELDS...now decide whether to sort these for
5004 faster lookups later.
5006 We use a small number because most searches fail (succeeding
5007 ultimately as the search bores through the inheritance
5008 hierarchy), and we want this failure to occur quickly. */
5010 n_fields = count_fields (TYPE_FIELDS (t));
5011 if (n_fields > 7)
5013 struct sorted_fields_type *field_vec = GGC_NEWVAR
5014 (struct sorted_fields_type,
5015 sizeof (struct sorted_fields_type) + n_fields * sizeof (tree));
5016 field_vec->len = n_fields;
5017 add_fields_to_record_type (TYPE_FIELDS (t), field_vec, 0);
5018 qsort (field_vec->elts, n_fields, sizeof (tree),
5019 field_decl_cmp);
5020 if (! DECL_LANG_SPECIFIC (TYPE_MAIN_DECL (t)))
5021 retrofit_lang_decl (TYPE_MAIN_DECL (t));
5022 DECL_SORTED_FIELDS (TYPE_MAIN_DECL (t)) = field_vec;
5025 /* Make the rtl for any new vtables we have created, and unmark
5026 the base types we marked. */
5027 finish_vtbls (t);
5029 /* Build the VTT for T. */
5030 build_vtt (t);
5032 /* This warning does not make sense for Java classes, since they
5033 cannot have destructors. */
5034 if (!TYPE_FOR_JAVA (t) && warn_nonvdtor && TYPE_POLYMORPHIC_P (t))
5036 tree dtor;
5038 dtor = CLASSTYPE_DESTRUCTORS (t);
5039 /* Warn only if the dtor is non-private or the class has
5040 friends. */
5041 if (/* An implicitly declared destructor is always public. And,
5042 if it were virtual, we would have created it by now. */
5043 !dtor
5044 || (!DECL_VINDEX (dtor)
5045 && (!TREE_PRIVATE (dtor)
5046 || CLASSTYPE_FRIEND_CLASSES (t)
5047 || DECL_FRIENDLIST (TYPE_MAIN_DECL (t)))))
5048 warning ("%q#T has virtual functions but non-virtual destructor",
5052 complete_vars (t);
5054 if (warn_overloaded_virtual)
5055 warn_hidden (t);
5057 maybe_suppress_debug_info (t);
5059 dump_class_hierarchy (t);
5061 /* Finish debugging output for this type. */
5062 rest_of_type_compilation (t, ! LOCAL_CLASS_P (t));
5065 /* When T was built up, the member declarations were added in reverse
5066 order. Rearrange them to declaration order. */
5068 void
5069 unreverse_member_declarations (tree t)
5071 tree next;
5072 tree prev;
5073 tree x;
5075 /* The following lists are all in reverse order. Put them in
5076 declaration order now. */
5077 TYPE_METHODS (t) = nreverse (TYPE_METHODS (t));
5078 CLASSTYPE_DECL_LIST (t) = nreverse (CLASSTYPE_DECL_LIST (t));
5080 /* Actually, for the TYPE_FIELDS, only the non TYPE_DECLs are in
5081 reverse order, so we can't just use nreverse. */
5082 prev = NULL_TREE;
5083 for (x = TYPE_FIELDS (t);
5084 x && TREE_CODE (x) != TYPE_DECL;
5085 x = next)
5087 next = TREE_CHAIN (x);
5088 TREE_CHAIN (x) = prev;
5089 prev = x;
5091 if (prev)
5093 TREE_CHAIN (TYPE_FIELDS (t)) = x;
5094 if (prev)
5095 TYPE_FIELDS (t) = prev;
5099 tree
5100 finish_struct (tree t, tree attributes)
5102 location_t saved_loc = input_location;
5104 /* Now that we've got all the field declarations, reverse everything
5105 as necessary. */
5106 unreverse_member_declarations (t);
5108 cplus_decl_attributes (&t, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
5110 /* Nadger the current location so that diagnostics point to the start of
5111 the struct, not the end. */
5112 input_location = DECL_SOURCE_LOCATION (TYPE_NAME (t));
5114 if (processing_template_decl)
5116 tree x;
5118 finish_struct_methods (t);
5119 TYPE_SIZE (t) = bitsize_zero_node;
5120 TYPE_SIZE_UNIT (t) = size_zero_node;
5122 /* We need to emit an error message if this type was used as a parameter
5123 and it is an abstract type, even if it is a template. We construct
5124 a simple CLASSTYPE_PURE_VIRTUALS list without taking bases into
5125 account and we call complete_vars with this type, which will check
5126 the PARM_DECLS. Note that while the type is being defined,
5127 CLASSTYPE_PURE_VIRTUALS contains the list of the inline friends
5128 (see CLASSTYPE_INLINE_FRIENDS) so we need to clear it. */
5129 CLASSTYPE_PURE_VIRTUALS (t) = NULL;
5130 for (x = TYPE_METHODS (t); x; x = TREE_CHAIN (x))
5131 if (DECL_PURE_VIRTUAL_P (x))
5132 VEC_safe_push (tree, CLASSTYPE_PURE_VIRTUALS (t), x);
5133 complete_vars (t);
5135 else
5136 finish_struct_1 (t);
5138 input_location = saved_loc;
5140 TYPE_BEING_DEFINED (t) = 0;
5142 if (current_class_type)
5143 popclass ();
5144 else
5145 error ("trying to finish struct, but kicked out due to previous parse errors");
5147 if (processing_template_decl && at_function_scope_p ())
5148 add_stmt (build_min (TAG_DEFN, t));
5150 return t;
5153 /* Return the dynamic type of INSTANCE, if known.
5154 Used to determine whether the virtual function table is needed
5155 or not.
5157 *NONNULL is set iff INSTANCE can be known to be nonnull, regardless
5158 of our knowledge of its type. *NONNULL should be initialized
5159 before this function is called. */
5161 static tree
5162 fixed_type_or_null (tree instance, int* nonnull, int* cdtorp)
5164 switch (TREE_CODE (instance))
5166 case INDIRECT_REF:
5167 if (POINTER_TYPE_P (TREE_TYPE (instance)))
5168 return NULL_TREE;
5169 else
5170 return fixed_type_or_null (TREE_OPERAND (instance, 0),
5171 nonnull, cdtorp);
5173 case CALL_EXPR:
5174 /* This is a call to a constructor, hence it's never zero. */
5175 if (TREE_HAS_CONSTRUCTOR (instance))
5177 if (nonnull)
5178 *nonnull = 1;
5179 return TREE_TYPE (instance);
5181 return NULL_TREE;
5183 case SAVE_EXPR:
5184 /* This is a call to a constructor, hence it's never zero. */
5185 if (TREE_HAS_CONSTRUCTOR (instance))
5187 if (nonnull)
5188 *nonnull = 1;
5189 return TREE_TYPE (instance);
5191 return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull, cdtorp);
5193 case PLUS_EXPR:
5194 case MINUS_EXPR:
5195 if (TREE_CODE (TREE_OPERAND (instance, 0)) == ADDR_EXPR)
5196 return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull, cdtorp);
5197 if (TREE_CODE (TREE_OPERAND (instance, 1)) == INTEGER_CST)
5198 /* Propagate nonnull. */
5199 return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull, cdtorp);
5200 return NULL_TREE;
5202 case NOP_EXPR:
5203 case CONVERT_EXPR:
5204 return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull, cdtorp);
5206 case ADDR_EXPR:
5207 instance = TREE_OPERAND (instance, 0);
5208 if (nonnull)
5210 /* Just because we see an ADDR_EXPR doesn't mean we're dealing
5211 with a real object -- given &p->f, p can still be null. */
5212 tree t = get_base_address (instance);
5213 /* ??? Probably should check DECL_WEAK here. */
5214 if (t && DECL_P (t))
5215 *nonnull = 1;
5217 return fixed_type_or_null (instance, nonnull, cdtorp);
5219 case COMPONENT_REF:
5220 /* If this component is really a base class reference, then the field
5221 itself isn't definitive. */
5222 if (DECL_FIELD_IS_BASE (TREE_OPERAND (instance, 1)))
5223 return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull, cdtorp);
5224 return fixed_type_or_null (TREE_OPERAND (instance, 1), nonnull, cdtorp);
5226 case VAR_DECL:
5227 case FIELD_DECL:
5228 if (TREE_CODE (TREE_TYPE (instance)) == ARRAY_TYPE
5229 && IS_AGGR_TYPE (TREE_TYPE (TREE_TYPE (instance))))
5231 if (nonnull)
5232 *nonnull = 1;
5233 return TREE_TYPE (TREE_TYPE (instance));
5235 /* fall through... */
5236 case TARGET_EXPR:
5237 case PARM_DECL:
5238 case RESULT_DECL:
5239 if (IS_AGGR_TYPE (TREE_TYPE (instance)))
5241 if (nonnull)
5242 *nonnull = 1;
5243 return TREE_TYPE (instance);
5245 else if (instance == current_class_ptr)
5247 if (nonnull)
5248 *nonnull = 1;
5250 /* if we're in a ctor or dtor, we know our type. */
5251 if (DECL_LANG_SPECIFIC (current_function_decl)
5252 && (DECL_CONSTRUCTOR_P (current_function_decl)
5253 || DECL_DESTRUCTOR_P (current_function_decl)))
5255 if (cdtorp)
5256 *cdtorp = 1;
5257 return TREE_TYPE (TREE_TYPE (instance));
5260 else if (TREE_CODE (TREE_TYPE (instance)) == REFERENCE_TYPE)
5262 /* Reference variables should be references to objects. */
5263 if (nonnull)
5264 *nonnull = 1;
5266 /* DECL_VAR_MARKED_P is used to prevent recursion; a
5267 variable's initializer may refer to the variable
5268 itself. */
5269 if (TREE_CODE (instance) == VAR_DECL
5270 && DECL_INITIAL (instance)
5271 && !DECL_VAR_MARKED_P (instance))
5273 tree type;
5274 DECL_VAR_MARKED_P (instance) = 1;
5275 type = fixed_type_or_null (DECL_INITIAL (instance),
5276 nonnull, cdtorp);
5277 DECL_VAR_MARKED_P (instance) = 0;
5278 return type;
5281 return NULL_TREE;
5283 default:
5284 return NULL_TREE;
5288 /* Return nonzero if the dynamic type of INSTANCE is known, and
5289 equivalent to the static type. We also handle the case where
5290 INSTANCE is really a pointer. Return negative if this is a
5291 ctor/dtor. There the dynamic type is known, but this might not be
5292 the most derived base of the original object, and hence virtual
5293 bases may not be layed out according to this type.
5295 Used to determine whether the virtual function table is needed
5296 or not.
5298 *NONNULL is set iff INSTANCE can be known to be nonnull, regardless
5299 of our knowledge of its type. *NONNULL should be initialized
5300 before this function is called. */
5303 resolves_to_fixed_type_p (tree instance, int* nonnull)
5305 tree t = TREE_TYPE (instance);
5306 int cdtorp = 0;
5308 tree fixed = fixed_type_or_null (instance, nonnull, &cdtorp);
5309 if (fixed == NULL_TREE)
5310 return 0;
5311 if (POINTER_TYPE_P (t))
5312 t = TREE_TYPE (t);
5313 if (!same_type_ignoring_top_level_qualifiers_p (t, fixed))
5314 return 0;
5315 return cdtorp ? -1 : 1;
5319 void
5320 init_class_processing (void)
5322 current_class_depth = 0;
5323 current_class_stack_size = 10;
5324 current_class_stack
5325 = xmalloc (current_class_stack_size * sizeof (struct class_stack_node));
5326 VARRAY_TREE_INIT (local_classes, 8, "local_classes");
5328 ridpointers[(int) RID_PUBLIC] = access_public_node;
5329 ridpointers[(int) RID_PRIVATE] = access_private_node;
5330 ridpointers[(int) RID_PROTECTED] = access_protected_node;
5333 /* Restore the cached PREVIOUS_CLASS_LEVEL. */
5335 static void
5336 restore_class_cache (void)
5338 tree type;
5340 /* We are re-entering the same class we just left, so we don't
5341 have to search the whole inheritance matrix to find all the
5342 decls to bind again. Instead, we install the cached
5343 class_shadowed list and walk through it binding names. */
5344 push_binding_level (previous_class_level);
5345 class_binding_level = previous_class_level;
5346 /* Restore IDENTIFIER_TYPE_VALUE. */
5347 for (type = class_binding_level->type_shadowed;
5348 type;
5349 type = TREE_CHAIN (type))
5350 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (type), TREE_TYPE (type));
5353 /* Set global variables CURRENT_CLASS_NAME and CURRENT_CLASS_TYPE as
5354 appropriate for TYPE.
5356 So that we may avoid calls to lookup_name, we cache the _TYPE
5357 nodes of local TYPE_DECLs in the TREE_TYPE field of the name.
5359 For multiple inheritance, we perform a two-pass depth-first search
5360 of the type lattice. */
5362 void
5363 pushclass (tree type)
5365 type = TYPE_MAIN_VARIANT (type);
5367 /* Make sure there is enough room for the new entry on the stack. */
5368 if (current_class_depth + 1 >= current_class_stack_size)
5370 current_class_stack_size *= 2;
5371 current_class_stack
5372 = xrealloc (current_class_stack,
5373 current_class_stack_size
5374 * sizeof (struct class_stack_node));
5377 /* Insert a new entry on the class stack. */
5378 current_class_stack[current_class_depth].name = current_class_name;
5379 current_class_stack[current_class_depth].type = current_class_type;
5380 current_class_stack[current_class_depth].access = current_access_specifier;
5381 current_class_stack[current_class_depth].names_used = 0;
5382 current_class_depth++;
5384 /* Now set up the new type. */
5385 current_class_name = TYPE_NAME (type);
5386 if (TREE_CODE (current_class_name) == TYPE_DECL)
5387 current_class_name = DECL_NAME (current_class_name);
5388 current_class_type = type;
5390 /* By default, things in classes are private, while things in
5391 structures or unions are public. */
5392 current_access_specifier = (CLASSTYPE_DECLARED_CLASS (type)
5393 ? access_private_node
5394 : access_public_node);
5396 if (previous_class_level
5397 && type != previous_class_level->this_entity
5398 && current_class_depth == 1)
5400 /* Forcibly remove any old class remnants. */
5401 invalidate_class_lookup_cache ();
5404 if (!previous_class_level
5405 || type != previous_class_level->this_entity
5406 || current_class_depth > 1)
5407 pushlevel_class ();
5408 else
5409 restore_class_cache ();
5412 /* When we exit a toplevel class scope, we save its binding level so
5413 that we can restore it quickly. Here, we've entered some other
5414 class, so we must invalidate our cache. */
5416 void
5417 invalidate_class_lookup_cache (void)
5419 previous_class_level = NULL;
5422 /* Get out of the current class scope. If we were in a class scope
5423 previously, that is the one popped to. */
5425 void
5426 popclass (void)
5428 poplevel_class ();
5430 current_class_depth--;
5431 current_class_name = current_class_stack[current_class_depth].name;
5432 current_class_type = current_class_stack[current_class_depth].type;
5433 current_access_specifier = current_class_stack[current_class_depth].access;
5434 if (current_class_stack[current_class_depth].names_used)
5435 splay_tree_delete (current_class_stack[current_class_depth].names_used);
5438 /* Returns 1 if current_class_type is either T or a nested type of T.
5439 We start looking from 1 because entry 0 is from global scope, and has
5440 no type. */
5443 currently_open_class (tree t)
5445 int i;
5446 if (current_class_type && same_type_p (t, current_class_type))
5447 return 1;
5448 for (i = 1; i < current_class_depth; ++i)
5449 if (current_class_stack[i].type
5450 && same_type_p (current_class_stack [i].type, t))
5451 return 1;
5452 return 0;
5455 /* If either current_class_type or one of its enclosing classes are derived
5456 from T, return the appropriate type. Used to determine how we found
5457 something via unqualified lookup. */
5459 tree
5460 currently_open_derived_class (tree t)
5462 int i;
5464 /* The bases of a dependent type are unknown. */
5465 if (dependent_type_p (t))
5466 return NULL_TREE;
5468 if (!current_class_type)
5469 return NULL_TREE;
5471 if (DERIVED_FROM_P (t, current_class_type))
5472 return current_class_type;
5474 for (i = current_class_depth - 1; i > 0; --i)
5475 if (DERIVED_FROM_P (t, current_class_stack[i].type))
5476 return current_class_stack[i].type;
5478 return NULL_TREE;
5481 /* When entering a class scope, all enclosing class scopes' names with
5482 static meaning (static variables, static functions, types and
5483 enumerators) have to be visible. This recursive function calls
5484 pushclass for all enclosing class contexts until global or a local
5485 scope is reached. TYPE is the enclosed class. */
5487 void
5488 push_nested_class (tree type)
5490 tree context;
5492 /* A namespace might be passed in error cases, like A::B:C. */
5493 if (type == NULL_TREE
5494 || type == error_mark_node
5495 || TREE_CODE (type) == NAMESPACE_DECL
5496 || ! IS_AGGR_TYPE (type)
5497 || TREE_CODE (type) == TEMPLATE_TYPE_PARM
5498 || TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
5499 return;
5501 context = DECL_CONTEXT (TYPE_MAIN_DECL (type));
5503 if (context && CLASS_TYPE_P (context))
5504 push_nested_class (context);
5505 pushclass (type);
5508 /* Undoes a push_nested_class call. */
5510 void
5511 pop_nested_class (void)
5513 tree context = DECL_CONTEXT (TYPE_MAIN_DECL (current_class_type));
5515 popclass ();
5516 if (context && CLASS_TYPE_P (context))
5517 pop_nested_class ();
5520 /* Returns the number of extern "LANG" blocks we are nested within. */
5523 current_lang_depth (void)
5525 return VARRAY_ACTIVE_SIZE (current_lang_base);
5528 /* Set global variables CURRENT_LANG_NAME to appropriate value
5529 so that behavior of name-mangling machinery is correct. */
5531 void
5532 push_lang_context (tree name)
5534 VARRAY_PUSH_TREE (current_lang_base, current_lang_name);
5536 if (name == lang_name_cplusplus)
5538 current_lang_name = name;
5540 else if (name == lang_name_java)
5542 current_lang_name = name;
5543 /* DECL_IGNORED_P is initially set for these types, to avoid clutter.
5544 (See record_builtin_java_type in decl.c.) However, that causes
5545 incorrect debug entries if these types are actually used.
5546 So we re-enable debug output after extern "Java". */
5547 DECL_IGNORED_P (TYPE_NAME (java_byte_type_node)) = 0;
5548 DECL_IGNORED_P (TYPE_NAME (java_short_type_node)) = 0;
5549 DECL_IGNORED_P (TYPE_NAME (java_int_type_node)) = 0;
5550 DECL_IGNORED_P (TYPE_NAME (java_long_type_node)) = 0;
5551 DECL_IGNORED_P (TYPE_NAME (java_float_type_node)) = 0;
5552 DECL_IGNORED_P (TYPE_NAME (java_double_type_node)) = 0;
5553 DECL_IGNORED_P (TYPE_NAME (java_char_type_node)) = 0;
5554 DECL_IGNORED_P (TYPE_NAME (java_boolean_type_node)) = 0;
5556 else if (name == lang_name_c)
5558 current_lang_name = name;
5560 else
5561 error ("language string %<\"%E\"%> not recognized", name);
5564 /* Get out of the current language scope. */
5566 void
5567 pop_lang_context (void)
5569 current_lang_name = VARRAY_TOP_TREE (current_lang_base);
5570 VARRAY_POP (current_lang_base);
5573 /* Type instantiation routines. */
5575 /* Given an OVERLOAD and a TARGET_TYPE, return the function that
5576 matches the TARGET_TYPE. If there is no satisfactory match, return
5577 error_mark_node, and issue a error & warning messages under control
5578 of FLAGS. Permit pointers to member function if FLAGS permits. If
5579 TEMPLATE_ONLY, the name of the overloaded function was a
5580 template-id, and EXPLICIT_TARGS are the explicitly provided
5581 template arguments. */
5583 static tree
5584 resolve_address_of_overloaded_function (tree target_type,
5585 tree overload,
5586 tsubst_flags_t flags,
5587 bool template_only,
5588 tree explicit_targs)
5590 /* Here's what the standard says:
5592 [over.over]
5594 If the name is a function template, template argument deduction
5595 is done, and if the argument deduction succeeds, the deduced
5596 arguments are used to generate a single template function, which
5597 is added to the set of overloaded functions considered.
5599 Non-member functions and static member functions match targets of
5600 type "pointer-to-function" or "reference-to-function." Nonstatic
5601 member functions match targets of type "pointer-to-member
5602 function;" the function type of the pointer to member is used to
5603 select the member function from the set of overloaded member
5604 functions. If a nonstatic member function is selected, the
5605 reference to the overloaded function name is required to have the
5606 form of a pointer to member as described in 5.3.1.
5608 If more than one function is selected, any template functions in
5609 the set are eliminated if the set also contains a non-template
5610 function, and any given template function is eliminated if the
5611 set contains a second template function that is more specialized
5612 than the first according to the partial ordering rules 14.5.5.2.
5613 After such eliminations, if any, there shall remain exactly one
5614 selected function. */
5616 int is_ptrmem = 0;
5617 int is_reference = 0;
5618 /* We store the matches in a TREE_LIST rooted here. The functions
5619 are the TREE_PURPOSE, not the TREE_VALUE, in this list, for easy
5620 interoperability with most_specialized_instantiation. */
5621 tree matches = NULL_TREE;
5622 tree fn;
5624 /* By the time we get here, we should be seeing only real
5625 pointer-to-member types, not the internal POINTER_TYPE to
5626 METHOD_TYPE representation. */
5627 gcc_assert (TREE_CODE (target_type) != POINTER_TYPE
5628 || TREE_CODE (TREE_TYPE (target_type)) != METHOD_TYPE);
5630 gcc_assert (is_overloaded_fn (overload));
5632 /* Check that the TARGET_TYPE is reasonable. */
5633 if (TYPE_PTRFN_P (target_type))
5634 /* This is OK. */;
5635 else if (TYPE_PTRMEMFUNC_P (target_type))
5636 /* This is OK, too. */
5637 is_ptrmem = 1;
5638 else if (TREE_CODE (target_type) == FUNCTION_TYPE)
5640 /* This is OK, too. This comes from a conversion to reference
5641 type. */
5642 target_type = build_reference_type (target_type);
5643 is_reference = 1;
5645 else
5647 if (flags & tf_error)
5648 error ("cannot resolve overloaded function %qD based on"
5649 " conversion to type %qT",
5650 DECL_NAME (OVL_FUNCTION (overload)), target_type);
5651 return error_mark_node;
5654 /* If we can find a non-template function that matches, we can just
5655 use it. There's no point in generating template instantiations
5656 if we're just going to throw them out anyhow. But, of course, we
5657 can only do this when we don't *need* a template function. */
5658 if (!template_only)
5660 tree fns;
5662 for (fns = overload; fns; fns = OVL_NEXT (fns))
5664 tree fn = OVL_CURRENT (fns);
5665 tree fntype;
5667 if (TREE_CODE (fn) == TEMPLATE_DECL)
5668 /* We're not looking for templates just yet. */
5669 continue;
5671 if ((TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
5672 != is_ptrmem)
5673 /* We're looking for a non-static member, and this isn't
5674 one, or vice versa. */
5675 continue;
5677 /* Ignore anticipated decls of undeclared builtins. */
5678 if (DECL_ANTICIPATED (fn))
5679 continue;
5681 /* See if there's a match. */
5682 fntype = TREE_TYPE (fn);
5683 if (is_ptrmem)
5684 fntype = build_ptrmemfunc_type (build_pointer_type (fntype));
5685 else if (!is_reference)
5686 fntype = build_pointer_type (fntype);
5688 if (can_convert_arg (target_type, fntype, fn))
5689 matches = tree_cons (fn, NULL_TREE, matches);
5693 /* Now, if we've already got a match (or matches), there's no need
5694 to proceed to the template functions. But, if we don't have a
5695 match we need to look at them, too. */
5696 if (!matches)
5698 tree target_fn_type;
5699 tree target_arg_types;
5700 tree target_ret_type;
5701 tree fns;
5703 if (is_ptrmem)
5704 target_fn_type
5705 = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (target_type));
5706 else
5707 target_fn_type = TREE_TYPE (target_type);
5708 target_arg_types = TYPE_ARG_TYPES (target_fn_type);
5709 target_ret_type = TREE_TYPE (target_fn_type);
5711 /* Never do unification on the 'this' parameter. */
5712 if (TREE_CODE (target_fn_type) == METHOD_TYPE)
5713 target_arg_types = TREE_CHAIN (target_arg_types);
5715 for (fns = overload; fns; fns = OVL_NEXT (fns))
5717 tree fn = OVL_CURRENT (fns);
5718 tree instantiation;
5719 tree instantiation_type;
5720 tree targs;
5722 if (TREE_CODE (fn) != TEMPLATE_DECL)
5723 /* We're only looking for templates. */
5724 continue;
5726 if ((TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
5727 != is_ptrmem)
5728 /* We're not looking for a non-static member, and this is
5729 one, or vice versa. */
5730 continue;
5732 /* Try to do argument deduction. */
5733 targs = make_tree_vec (DECL_NTPARMS (fn));
5734 if (fn_type_unification (fn, explicit_targs, targs,
5735 target_arg_types, target_ret_type,
5736 DEDUCE_EXACT, -1) != 0)
5737 /* Argument deduction failed. */
5738 continue;
5740 /* Instantiate the template. */
5741 instantiation = instantiate_template (fn, targs, flags);
5742 if (instantiation == error_mark_node)
5743 /* Instantiation failed. */
5744 continue;
5746 /* See if there's a match. */
5747 instantiation_type = TREE_TYPE (instantiation);
5748 if (is_ptrmem)
5749 instantiation_type =
5750 build_ptrmemfunc_type (build_pointer_type (instantiation_type));
5751 else if (!is_reference)
5752 instantiation_type = build_pointer_type (instantiation_type);
5753 if (can_convert_arg (target_type, instantiation_type, instantiation))
5754 matches = tree_cons (instantiation, fn, matches);
5757 /* Now, remove all but the most specialized of the matches. */
5758 if (matches)
5760 tree match = most_specialized_instantiation (matches);
5762 if (match != error_mark_node)
5763 matches = tree_cons (match, NULL_TREE, NULL_TREE);
5767 /* Now we should have exactly one function in MATCHES. */
5768 if (matches == NULL_TREE)
5770 /* There were *no* matches. */
5771 if (flags & tf_error)
5773 error ("no matches converting function %qD to type %q#T",
5774 DECL_NAME (OVL_FUNCTION (overload)),
5775 target_type);
5777 /* print_candidates expects a chain with the functions in
5778 TREE_VALUE slots, so we cons one up here (we're losing anyway,
5779 so why be clever?). */
5780 for (; overload; overload = OVL_NEXT (overload))
5781 matches = tree_cons (NULL_TREE, OVL_CURRENT (overload),
5782 matches);
5784 print_candidates (matches);
5786 return error_mark_node;
5788 else if (TREE_CHAIN (matches))
5790 /* There were too many matches. */
5792 if (flags & tf_error)
5794 tree match;
5796 error ("converting overloaded function %qD to type %q#T is ambiguous",
5797 DECL_NAME (OVL_FUNCTION (overload)),
5798 target_type);
5800 /* Since print_candidates expects the functions in the
5801 TREE_VALUE slot, we flip them here. */
5802 for (match = matches; match; match = TREE_CHAIN (match))
5803 TREE_VALUE (match) = TREE_PURPOSE (match);
5805 print_candidates (matches);
5808 return error_mark_node;
5811 /* Good, exactly one match. Now, convert it to the correct type. */
5812 fn = TREE_PURPOSE (matches);
5814 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
5815 && !(flags & tf_ptrmem_ok) && !flag_ms_extensions)
5817 static int explained;
5819 if (!(flags & tf_error))
5820 return error_mark_node;
5822 pedwarn ("assuming pointer to member %qD", fn);
5823 if (!explained)
5825 pedwarn ("(a pointer to member can only be formed with %<&%E%>)", fn);
5826 explained = 1;
5830 /* If we're doing overload resolution purely for the purpose of
5831 determining conversion sequences, we should not consider the
5832 function used. If this conversion sequence is selected, the
5833 function will be marked as used at this point. */
5834 if (!(flags & tf_conv))
5835 mark_used (fn);
5837 if (TYPE_PTRFN_P (target_type) || TYPE_PTRMEMFUNC_P (target_type))
5838 return build_unary_op (ADDR_EXPR, fn, 0);
5839 else
5841 /* The target must be a REFERENCE_TYPE. Above, build_unary_op
5842 will mark the function as addressed, but here we must do it
5843 explicitly. */
5844 cxx_mark_addressable (fn);
5846 return fn;
5850 /* This function will instantiate the type of the expression given in
5851 RHS to match the type of LHSTYPE. If errors exist, then return
5852 error_mark_node. FLAGS is a bit mask. If TF_ERROR is set, then
5853 we complain on errors. If we are not complaining, never modify rhs,
5854 as overload resolution wants to try many possible instantiations, in
5855 the hope that at least one will work.
5857 For non-recursive calls, LHSTYPE should be a function, pointer to
5858 function, or a pointer to member function. */
5860 tree
5861 instantiate_type (tree lhstype, tree rhs, tsubst_flags_t flags)
5863 tsubst_flags_t flags_in = flags;
5865 flags &= ~tf_ptrmem_ok;
5867 if (TREE_CODE (lhstype) == UNKNOWN_TYPE)
5869 if (flags & tf_error)
5870 error ("not enough type information");
5871 return error_mark_node;
5874 if (TREE_TYPE (rhs) != NULL_TREE && ! (type_unknown_p (rhs)))
5876 if (same_type_p (lhstype, TREE_TYPE (rhs)))
5877 return rhs;
5878 if (flag_ms_extensions
5879 && TYPE_PTRMEMFUNC_P (lhstype)
5880 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (rhs)))
5881 /* Microsoft allows `A::f' to be resolved to a
5882 pointer-to-member. */
5884 else
5886 if (flags & tf_error)
5887 error ("argument of type %qT does not match %qT",
5888 TREE_TYPE (rhs), lhstype);
5889 return error_mark_node;
5893 if (TREE_CODE (rhs) == BASELINK)
5894 rhs = BASELINK_FUNCTIONS (rhs);
5896 /* If we are in a template, and have a NON_DEPENDENT_EXPR, we cannot
5897 deduce any type information. */
5898 if (TREE_CODE (rhs) == NON_DEPENDENT_EXPR)
5900 if (flags & tf_error)
5901 error ("not enough type information");
5902 return error_mark_node;
5905 /* We don't overwrite rhs if it is an overloaded function.
5906 Copying it would destroy the tree link. */
5907 if (TREE_CODE (rhs) != OVERLOAD)
5908 rhs = copy_node (rhs);
5910 /* This should really only be used when attempting to distinguish
5911 what sort of a pointer to function we have. For now, any
5912 arithmetic operation which is not supported on pointers
5913 is rejected as an error. */
5915 switch (TREE_CODE (rhs))
5917 case TYPE_EXPR:
5918 case CONVERT_EXPR:
5919 case SAVE_EXPR:
5920 case CONSTRUCTOR:
5921 gcc_unreachable ();
5923 case INDIRECT_REF:
5924 case ARRAY_REF:
5926 tree new_rhs;
5928 new_rhs = instantiate_type (build_pointer_type (lhstype),
5929 TREE_OPERAND (rhs, 0), flags);
5930 if (new_rhs == error_mark_node)
5931 return error_mark_node;
5933 TREE_TYPE (rhs) = lhstype;
5934 TREE_OPERAND (rhs, 0) = new_rhs;
5935 return rhs;
5938 case NOP_EXPR:
5939 rhs = copy_node (TREE_OPERAND (rhs, 0));
5940 TREE_TYPE (rhs) = unknown_type_node;
5941 return instantiate_type (lhstype, rhs, flags);
5943 case COMPONENT_REF:
5945 tree member = TREE_OPERAND (rhs, 1);
5947 member = instantiate_type (lhstype, member, flags);
5948 if (member != error_mark_node
5949 && TREE_SIDE_EFFECTS (TREE_OPERAND (rhs, 0)))
5950 /* Do not lose object's side effects. */
5951 return build2 (COMPOUND_EXPR, TREE_TYPE (member),
5952 TREE_OPERAND (rhs, 0), member);
5953 return member;
5956 case OFFSET_REF:
5957 rhs = TREE_OPERAND (rhs, 1);
5958 if (BASELINK_P (rhs))
5959 return instantiate_type (lhstype, BASELINK_FUNCTIONS (rhs), flags_in);
5961 /* This can happen if we are forming a pointer-to-member for a
5962 member template. */
5963 gcc_assert (TREE_CODE (rhs) == TEMPLATE_ID_EXPR);
5965 /* Fall through. */
5967 case TEMPLATE_ID_EXPR:
5969 tree fns = TREE_OPERAND (rhs, 0);
5970 tree args = TREE_OPERAND (rhs, 1);
5972 return
5973 resolve_address_of_overloaded_function (lhstype, fns, flags_in,
5974 /*template_only=*/true,
5975 args);
5978 case OVERLOAD:
5979 case FUNCTION_DECL:
5980 return
5981 resolve_address_of_overloaded_function (lhstype, rhs, flags_in,
5982 /*template_only=*/false,
5983 /*explicit_targs=*/NULL_TREE);
5985 case CALL_EXPR:
5986 /* This is too hard for now. */
5987 gcc_unreachable ();
5989 case PLUS_EXPR:
5990 case MINUS_EXPR:
5991 case COMPOUND_EXPR:
5992 TREE_OPERAND (rhs, 0)
5993 = instantiate_type (lhstype, TREE_OPERAND (rhs, 0), flags);
5994 if (TREE_OPERAND (rhs, 0) == error_mark_node)
5995 return error_mark_node;
5996 TREE_OPERAND (rhs, 1)
5997 = instantiate_type (lhstype, TREE_OPERAND (rhs, 1), flags);
5998 if (TREE_OPERAND (rhs, 1) == error_mark_node)
5999 return error_mark_node;
6001 TREE_TYPE (rhs) = lhstype;
6002 return rhs;
6004 case MULT_EXPR:
6005 case TRUNC_DIV_EXPR:
6006 case FLOOR_DIV_EXPR:
6007 case CEIL_DIV_EXPR:
6008 case ROUND_DIV_EXPR:
6009 case RDIV_EXPR:
6010 case TRUNC_MOD_EXPR:
6011 case FLOOR_MOD_EXPR:
6012 case CEIL_MOD_EXPR:
6013 case ROUND_MOD_EXPR:
6014 case FIX_ROUND_EXPR:
6015 case FIX_FLOOR_EXPR:
6016 case FIX_CEIL_EXPR:
6017 case FIX_TRUNC_EXPR:
6018 case FLOAT_EXPR:
6019 case NEGATE_EXPR:
6020 case ABS_EXPR:
6021 case MAX_EXPR:
6022 case MIN_EXPR:
6024 case BIT_AND_EXPR:
6025 case BIT_IOR_EXPR:
6026 case BIT_XOR_EXPR:
6027 case LSHIFT_EXPR:
6028 case RSHIFT_EXPR:
6029 case LROTATE_EXPR:
6030 case RROTATE_EXPR:
6032 case PREINCREMENT_EXPR:
6033 case PREDECREMENT_EXPR:
6034 case POSTINCREMENT_EXPR:
6035 case POSTDECREMENT_EXPR:
6036 if (flags & tf_error)
6037 error ("invalid operation on uninstantiated type");
6038 return error_mark_node;
6040 case TRUTH_AND_EXPR:
6041 case TRUTH_OR_EXPR:
6042 case TRUTH_XOR_EXPR:
6043 case LT_EXPR:
6044 case LE_EXPR:
6045 case GT_EXPR:
6046 case GE_EXPR:
6047 case EQ_EXPR:
6048 case NE_EXPR:
6049 case TRUTH_ANDIF_EXPR:
6050 case TRUTH_ORIF_EXPR:
6051 case TRUTH_NOT_EXPR:
6052 if (flags & tf_error)
6053 error ("not enough type information");
6054 return error_mark_node;
6056 case COND_EXPR:
6057 if (type_unknown_p (TREE_OPERAND (rhs, 0)))
6059 if (flags & tf_error)
6060 error ("not enough type information");
6061 return error_mark_node;
6063 TREE_OPERAND (rhs, 1)
6064 = instantiate_type (lhstype, TREE_OPERAND (rhs, 1), flags);
6065 if (TREE_OPERAND (rhs, 1) == error_mark_node)
6066 return error_mark_node;
6067 TREE_OPERAND (rhs, 2)
6068 = instantiate_type (lhstype, TREE_OPERAND (rhs, 2), flags);
6069 if (TREE_OPERAND (rhs, 2) == error_mark_node)
6070 return error_mark_node;
6072 TREE_TYPE (rhs) = lhstype;
6073 return rhs;
6075 case MODIFY_EXPR:
6076 TREE_OPERAND (rhs, 1)
6077 = instantiate_type (lhstype, TREE_OPERAND (rhs, 1), flags);
6078 if (TREE_OPERAND (rhs, 1) == error_mark_node)
6079 return error_mark_node;
6081 TREE_TYPE (rhs) = lhstype;
6082 return rhs;
6084 case ADDR_EXPR:
6086 if (PTRMEM_OK_P (rhs))
6087 flags |= tf_ptrmem_ok;
6089 return instantiate_type (lhstype, TREE_OPERAND (rhs, 0), flags);
6092 case ERROR_MARK:
6093 return error_mark_node;
6095 default:
6096 gcc_unreachable ();
6098 return error_mark_node;
6101 /* Return the name of the virtual function pointer field
6102 (as an IDENTIFIER_NODE) for the given TYPE. Note that
6103 this may have to look back through base types to find the
6104 ultimate field name. (For single inheritance, these could
6105 all be the same name. Who knows for multiple inheritance). */
6107 static tree
6108 get_vfield_name (tree type)
6110 tree binfo, base_binfo;
6111 char *buf;
6113 for (binfo = TYPE_BINFO (type);
6114 BINFO_N_BASE_BINFOS (binfo);
6115 binfo = base_binfo)
6117 base_binfo = BINFO_BASE_BINFO (binfo, 0);
6119 if (BINFO_VIRTUAL_P (base_binfo)
6120 || !TYPE_CONTAINS_VPTR_P (BINFO_TYPE (base_binfo)))
6121 break;
6124 type = BINFO_TYPE (binfo);
6125 buf = alloca (sizeof (VFIELD_NAME_FORMAT) + TYPE_NAME_LENGTH (type) + 2);
6126 sprintf (buf, VFIELD_NAME_FORMAT,
6127 IDENTIFIER_POINTER (constructor_name (type)));
6128 return get_identifier (buf);
6131 void
6132 print_class_statistics (void)
6134 #ifdef GATHER_STATISTICS
6135 fprintf (stderr, "convert_harshness = %d\n", n_convert_harshness);
6136 fprintf (stderr, "compute_conversion_costs = %d\n", n_compute_conversion_costs);
6137 if (n_vtables)
6139 fprintf (stderr, "vtables = %d; vtable searches = %d\n",
6140 n_vtables, n_vtable_searches);
6141 fprintf (stderr, "vtable entries = %d; vtable elems = %d\n",
6142 n_vtable_entries, n_vtable_elems);
6144 #endif
6147 /* Build a dummy reference to ourselves so Derived::Base (and A::A) works,
6148 according to [class]:
6149 The class-name is also inserted
6150 into the scope of the class itself. For purposes of access checking,
6151 the inserted class name is treated as if it were a public member name. */
6153 void
6154 build_self_reference (void)
6156 tree name = constructor_name (current_class_type);
6157 tree value = build_lang_decl (TYPE_DECL, name, current_class_type);
6158 tree saved_cas;
6160 DECL_NONLOCAL (value) = 1;
6161 DECL_CONTEXT (value) = current_class_type;
6162 DECL_ARTIFICIAL (value) = 1;
6163 SET_DECL_SELF_REFERENCE_P (value);
6165 if (processing_template_decl)
6166 value = push_template_decl (value);
6168 saved_cas = current_access_specifier;
6169 current_access_specifier = access_public_node;
6170 finish_member_declaration (value);
6171 current_access_specifier = saved_cas;
6174 /* Returns 1 if TYPE contains only padding bytes. */
6177 is_empty_class (tree type)
6179 if (type == error_mark_node)
6180 return 0;
6182 if (! IS_AGGR_TYPE (type))
6183 return 0;
6185 /* In G++ 3.2, whether or not a class was empty was determined by
6186 looking at its size. */
6187 if (abi_version_at_least (2))
6188 return CLASSTYPE_EMPTY_P (type);
6189 else
6190 return integer_zerop (CLASSTYPE_SIZE (type));
6193 /* Returns true if TYPE contains an empty class. */
6195 static bool
6196 contains_empty_class_p (tree type)
6198 if (is_empty_class (type))
6199 return true;
6200 if (CLASS_TYPE_P (type))
6202 tree field;
6203 tree binfo;
6204 tree base_binfo;
6205 int i;
6207 for (binfo = TYPE_BINFO (type), i = 0;
6208 BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
6209 if (contains_empty_class_p (BINFO_TYPE (base_binfo)))
6210 return true;
6211 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
6212 if (TREE_CODE (field) == FIELD_DECL
6213 && !DECL_ARTIFICIAL (field)
6214 && is_empty_class (TREE_TYPE (field)))
6215 return true;
6217 else if (TREE_CODE (type) == ARRAY_TYPE)
6218 return contains_empty_class_p (TREE_TYPE (type));
6219 return false;
6222 /* Note that NAME was looked up while the current class was being
6223 defined and that the result of that lookup was DECL. */
6225 void
6226 maybe_note_name_used_in_class (tree name, tree decl)
6228 splay_tree names_used;
6230 /* If we're not defining a class, there's nothing to do. */
6231 if (!(innermost_scope_kind() == sk_class
6232 && TYPE_BEING_DEFINED (current_class_type)))
6233 return;
6235 /* If there's already a binding for this NAME, then we don't have
6236 anything to worry about. */
6237 if (lookup_member (current_class_type, name,
6238 /*protect=*/0, /*want_type=*/false))
6239 return;
6241 if (!current_class_stack[current_class_depth - 1].names_used)
6242 current_class_stack[current_class_depth - 1].names_used
6243 = splay_tree_new (splay_tree_compare_pointers, 0, 0);
6244 names_used = current_class_stack[current_class_depth - 1].names_used;
6246 splay_tree_insert (names_used,
6247 (splay_tree_key) name,
6248 (splay_tree_value) decl);
6251 /* Note that NAME was declared (as DECL) in the current class. Check
6252 to see that the declaration is valid. */
6254 void
6255 note_name_declared_in_class (tree name, tree decl)
6257 splay_tree names_used;
6258 splay_tree_node n;
6260 /* Look to see if we ever used this name. */
6261 names_used
6262 = current_class_stack[current_class_depth - 1].names_used;
6263 if (!names_used)
6264 return;
6266 n = splay_tree_lookup (names_used, (splay_tree_key) name);
6267 if (n)
6269 /* [basic.scope.class]
6271 A name N used in a class S shall refer to the same declaration
6272 in its context and when re-evaluated in the completed scope of
6273 S. */
6274 error ("declaration of %q#D", decl);
6275 cp_error_at ("changes meaning of %qD from %q+#D",
6276 DECL_NAME (OVL_CURRENT (decl)),
6277 (tree) n->value);
6281 /* Returns the VAR_DECL for the complete vtable associated with BINFO.
6282 Secondary vtables are merged with primary vtables; this function
6283 will return the VAR_DECL for the primary vtable. */
6285 tree
6286 get_vtbl_decl_for_binfo (tree binfo)
6288 tree decl;
6290 decl = BINFO_VTABLE (binfo);
6291 if (decl && TREE_CODE (decl) == PLUS_EXPR)
6293 gcc_assert (TREE_CODE (TREE_OPERAND (decl, 0)) == ADDR_EXPR);
6294 decl = TREE_OPERAND (TREE_OPERAND (decl, 0), 0);
6296 if (decl)
6297 gcc_assert (TREE_CODE (decl) == VAR_DECL);
6298 return decl;
6302 /* Returns the binfo for the primary base of BINFO. If the resulting
6303 BINFO is a virtual base, and it is inherited elsewhere in the
6304 hierarchy, then the returned binfo might not be the primary base of
6305 BINFO in the complete object. Check BINFO_PRIMARY_P or
6306 BINFO_LOST_PRIMARY_P to be sure. */
6308 tree
6309 get_primary_binfo (tree binfo)
6311 tree primary_base;
6312 tree result;
6314 primary_base = CLASSTYPE_PRIMARY_BINFO (BINFO_TYPE (binfo));
6315 if (!primary_base)
6316 return NULL_TREE;
6318 result = copied_binfo (primary_base, binfo);
6319 return result;
6322 /* If INDENTED_P is zero, indent to INDENT. Return nonzero. */
6324 static int
6325 maybe_indent_hierarchy (FILE * stream, int indent, int indented_p)
6327 if (!indented_p)
6328 fprintf (stream, "%*s", indent, "");
6329 return 1;
6332 /* Dump the offsets of all the bases rooted at BINFO to STREAM.
6333 INDENT should be zero when called from the top level; it is
6334 incremented recursively. IGO indicates the next expected BINFO in
6335 inheritance graph ordering. */
6337 static tree
6338 dump_class_hierarchy_r (FILE *stream,
6339 int flags,
6340 tree binfo,
6341 tree igo,
6342 int indent)
6344 int indented = 0;
6345 tree base_binfo;
6346 int i;
6348 indented = maybe_indent_hierarchy (stream, indent, 0);
6349 fprintf (stream, "%s (0x%lx) ",
6350 type_as_string (BINFO_TYPE (binfo), TFF_PLAIN_IDENTIFIER),
6351 (unsigned long) binfo);
6352 if (binfo != igo)
6354 fprintf (stream, "alternative-path\n");
6355 return igo;
6357 igo = TREE_CHAIN (binfo);
6359 fprintf (stream, HOST_WIDE_INT_PRINT_DEC,
6360 tree_low_cst (BINFO_OFFSET (binfo), 0));
6361 if (is_empty_class (BINFO_TYPE (binfo)))
6362 fprintf (stream, " empty");
6363 else if (CLASSTYPE_NEARLY_EMPTY_P (BINFO_TYPE (binfo)))
6364 fprintf (stream, " nearly-empty");
6365 if (BINFO_VIRTUAL_P (binfo))
6366 fprintf (stream, " virtual");
6367 fprintf (stream, "\n");
6369 indented = 0;
6370 if (BINFO_PRIMARY_P (binfo))
6372 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6373 fprintf (stream, " primary-for %s (0x%lx)",
6374 type_as_string (BINFO_TYPE (BINFO_INHERITANCE_CHAIN (binfo)),
6375 TFF_PLAIN_IDENTIFIER),
6376 (unsigned long)BINFO_INHERITANCE_CHAIN (binfo));
6378 if (BINFO_LOST_PRIMARY_P (binfo))
6380 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6381 fprintf (stream, " lost-primary");
6383 if (indented)
6384 fprintf (stream, "\n");
6386 if (!(flags & TDF_SLIM))
6388 int indented = 0;
6390 if (BINFO_SUBVTT_INDEX (binfo))
6392 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6393 fprintf (stream, " subvttidx=%s",
6394 expr_as_string (BINFO_SUBVTT_INDEX (binfo),
6395 TFF_PLAIN_IDENTIFIER));
6397 if (BINFO_VPTR_INDEX (binfo))
6399 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6400 fprintf (stream, " vptridx=%s",
6401 expr_as_string (BINFO_VPTR_INDEX (binfo),
6402 TFF_PLAIN_IDENTIFIER));
6404 if (BINFO_VPTR_FIELD (binfo))
6406 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6407 fprintf (stream, " vbaseoffset=%s",
6408 expr_as_string (BINFO_VPTR_FIELD (binfo),
6409 TFF_PLAIN_IDENTIFIER));
6411 if (BINFO_VTABLE (binfo))
6413 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6414 fprintf (stream, " vptr=%s",
6415 expr_as_string (BINFO_VTABLE (binfo),
6416 TFF_PLAIN_IDENTIFIER));
6419 if (indented)
6420 fprintf (stream, "\n");
6423 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
6424 igo = dump_class_hierarchy_r (stream, flags, base_binfo, igo, indent + 2);
6426 return igo;
6429 /* Dump the BINFO hierarchy for T. */
6431 static void
6432 dump_class_hierarchy_1 (FILE *stream, int flags, tree t)
6434 fprintf (stream, "Class %s\n", type_as_string (t, TFF_PLAIN_IDENTIFIER));
6435 fprintf (stream, " size=%lu align=%lu\n",
6436 (unsigned long)(tree_low_cst (TYPE_SIZE (t), 0) / BITS_PER_UNIT),
6437 (unsigned long)(TYPE_ALIGN (t) / BITS_PER_UNIT));
6438 fprintf (stream, " base size=%lu base align=%lu\n",
6439 (unsigned long)(tree_low_cst (TYPE_SIZE (CLASSTYPE_AS_BASE (t)), 0)
6440 / BITS_PER_UNIT),
6441 (unsigned long)(TYPE_ALIGN (CLASSTYPE_AS_BASE (t))
6442 / BITS_PER_UNIT));
6443 dump_class_hierarchy_r (stream, flags, TYPE_BINFO (t), TYPE_BINFO (t), 0);
6444 fprintf (stream, "\n");
6447 /* Debug interface to hierarchy dumping. */
6449 extern void
6450 debug_class (tree t)
6452 dump_class_hierarchy_1 (stderr, TDF_SLIM, t);
6455 static void
6456 dump_class_hierarchy (tree t)
6458 int flags;
6459 FILE *stream = dump_begin (TDI_class, &flags);
6461 if (stream)
6463 dump_class_hierarchy_1 (stream, flags, t);
6464 dump_end (TDI_class, stream);
6468 static void
6469 dump_array (FILE * stream, tree decl)
6471 tree inits;
6472 int ix;
6473 HOST_WIDE_INT elt;
6474 tree size = TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (decl)));
6476 elt = (tree_low_cst (TYPE_SIZE (TREE_TYPE (TREE_TYPE (decl))), 0)
6477 / BITS_PER_UNIT);
6478 fprintf (stream, "%s:", decl_as_string (decl, TFF_PLAIN_IDENTIFIER));
6479 fprintf (stream, " %s entries",
6480 expr_as_string (size_binop (PLUS_EXPR, size, size_one_node),
6481 TFF_PLAIN_IDENTIFIER));
6482 fprintf (stream, "\n");
6484 for (ix = 0, inits = CONSTRUCTOR_ELTS (DECL_INITIAL (decl));
6485 inits; ix++, inits = TREE_CHAIN (inits))
6486 fprintf (stream, "%-4ld %s\n", (long)(ix * elt),
6487 expr_as_string (TREE_VALUE (inits), TFF_PLAIN_IDENTIFIER));
6490 static void
6491 dump_vtable (tree t, tree binfo, tree vtable)
6493 int flags;
6494 FILE *stream = dump_begin (TDI_class, &flags);
6496 if (!stream)
6497 return;
6499 if (!(flags & TDF_SLIM))
6501 int ctor_vtbl_p = TYPE_BINFO (t) != binfo;
6503 fprintf (stream, "%s for %s",
6504 ctor_vtbl_p ? "Construction vtable" : "Vtable",
6505 type_as_string (BINFO_TYPE (binfo), TFF_PLAIN_IDENTIFIER));
6506 if (ctor_vtbl_p)
6508 if (!BINFO_VIRTUAL_P (binfo))
6509 fprintf (stream, " (0x%lx instance)", (unsigned long)binfo);
6510 fprintf (stream, " in %s", type_as_string (t, TFF_PLAIN_IDENTIFIER));
6512 fprintf (stream, "\n");
6513 dump_array (stream, vtable);
6514 fprintf (stream, "\n");
6517 dump_end (TDI_class, stream);
6520 static void
6521 dump_vtt (tree t, tree vtt)
6523 int flags;
6524 FILE *stream = dump_begin (TDI_class, &flags);
6526 if (!stream)
6527 return;
6529 if (!(flags & TDF_SLIM))
6531 fprintf (stream, "VTT for %s\n",
6532 type_as_string (t, TFF_PLAIN_IDENTIFIER));
6533 dump_array (stream, vtt);
6534 fprintf (stream, "\n");
6537 dump_end (TDI_class, stream);
6540 /* Dump a function or thunk and its thunkees. */
6542 static void
6543 dump_thunk (FILE *stream, int indent, tree thunk)
6545 static const char spaces[] = " ";
6546 tree name = DECL_NAME (thunk);
6547 tree thunks;
6549 fprintf (stream, "%.*s%p %s %s", indent, spaces,
6550 (void *)thunk,
6551 !DECL_THUNK_P (thunk) ? "function"
6552 : DECL_THIS_THUNK_P (thunk) ? "this-thunk" : "covariant-thunk",
6553 name ? IDENTIFIER_POINTER (name) : "<unset>");
6554 if (DECL_THUNK_P (thunk))
6556 HOST_WIDE_INT fixed_adjust = THUNK_FIXED_OFFSET (thunk);
6557 tree virtual_adjust = THUNK_VIRTUAL_OFFSET (thunk);
6559 fprintf (stream, " fixed=" HOST_WIDE_INT_PRINT_DEC, fixed_adjust);
6560 if (!virtual_adjust)
6561 /*NOP*/;
6562 else if (DECL_THIS_THUNK_P (thunk))
6563 fprintf (stream, " vcall=" HOST_WIDE_INT_PRINT_DEC,
6564 tree_low_cst (virtual_adjust, 0));
6565 else
6566 fprintf (stream, " vbase=" HOST_WIDE_INT_PRINT_DEC "(%s)",
6567 tree_low_cst (BINFO_VPTR_FIELD (virtual_adjust), 0),
6568 type_as_string (BINFO_TYPE (virtual_adjust), TFF_SCOPE));
6569 if (THUNK_ALIAS (thunk))
6570 fprintf (stream, " alias to %p", (void *)THUNK_ALIAS (thunk));
6572 fprintf (stream, "\n");
6573 for (thunks = DECL_THUNKS (thunk); thunks; thunks = TREE_CHAIN (thunks))
6574 dump_thunk (stream, indent + 2, thunks);
6577 /* Dump the thunks for FN. */
6579 extern void
6580 debug_thunks (tree fn)
6582 dump_thunk (stderr, 0, fn);
6585 /* Virtual function table initialization. */
6587 /* Create all the necessary vtables for T and its base classes. */
6589 static void
6590 finish_vtbls (tree t)
6592 tree list;
6593 tree vbase;
6595 /* We lay out the primary and secondary vtables in one contiguous
6596 vtable. The primary vtable is first, followed by the non-virtual
6597 secondary vtables in inheritance graph order. */
6598 list = build_tree_list (BINFO_VTABLE (TYPE_BINFO (t)), NULL_TREE);
6599 accumulate_vtbl_inits (TYPE_BINFO (t), TYPE_BINFO (t),
6600 TYPE_BINFO (t), t, list);
6602 /* Then come the virtual bases, also in inheritance graph order. */
6603 for (vbase = TYPE_BINFO (t); vbase; vbase = TREE_CHAIN (vbase))
6605 if (!BINFO_VIRTUAL_P (vbase))
6606 continue;
6607 accumulate_vtbl_inits (vbase, vbase, TYPE_BINFO (t), t, list);
6610 if (BINFO_VTABLE (TYPE_BINFO (t)))
6611 initialize_vtable (TYPE_BINFO (t), TREE_VALUE (list));
6614 /* Initialize the vtable for BINFO with the INITS. */
6616 static void
6617 initialize_vtable (tree binfo, tree inits)
6619 tree decl;
6621 layout_vtable_decl (binfo, list_length (inits));
6622 decl = get_vtbl_decl_for_binfo (binfo);
6623 initialize_artificial_var (decl, inits);
6624 dump_vtable (BINFO_TYPE (binfo), binfo, decl);
6627 /* Build the VTT (virtual table table) for T.
6628 A class requires a VTT if it has virtual bases.
6630 This holds
6631 1 - primary virtual pointer for complete object T
6632 2 - secondary VTTs for each direct non-virtual base of T which requires a
6634 3 - secondary virtual pointers for each direct or indirect base of T which
6635 has virtual bases or is reachable via a virtual path from T.
6636 4 - secondary VTTs for each direct or indirect virtual base of T.
6638 Secondary VTTs look like complete object VTTs without part 4. */
6640 static void
6641 build_vtt (tree t)
6643 tree inits;
6644 tree type;
6645 tree vtt;
6646 tree index;
6648 /* Build up the initializers for the VTT. */
6649 inits = NULL_TREE;
6650 index = size_zero_node;
6651 build_vtt_inits (TYPE_BINFO (t), t, &inits, &index);
6653 /* If we didn't need a VTT, we're done. */
6654 if (!inits)
6655 return;
6657 /* Figure out the type of the VTT. */
6658 type = build_index_type (size_int (list_length (inits) - 1));
6659 type = build_cplus_array_type (const_ptr_type_node, type);
6661 /* Now, build the VTT object itself. */
6662 vtt = build_vtable (t, get_vtt_name (t), type);
6663 initialize_artificial_var (vtt, inits);
6664 /* Add the VTT to the vtables list. */
6665 TREE_CHAIN (vtt) = TREE_CHAIN (CLASSTYPE_VTABLES (t));
6666 TREE_CHAIN (CLASSTYPE_VTABLES (t)) = vtt;
6668 dump_vtt (t, vtt);
6671 /* When building a secondary VTT, BINFO_VTABLE is set to a TREE_LIST with
6672 PURPOSE the RTTI_BINFO, VALUE the real vtable pointer for this binfo,
6673 and CHAIN the vtable pointer for this binfo after construction is
6674 complete. VALUE can also be another BINFO, in which case we recurse. */
6676 static tree
6677 binfo_ctor_vtable (tree binfo)
6679 tree vt;
6681 while (1)
6683 vt = BINFO_VTABLE (binfo);
6684 if (TREE_CODE (vt) == TREE_LIST)
6685 vt = TREE_VALUE (vt);
6686 if (TREE_CODE (vt) == TREE_BINFO)
6687 binfo = vt;
6688 else
6689 break;
6692 return vt;
6695 /* Data for secondary VTT initialization. */
6696 typedef struct secondary_vptr_vtt_init_data_s
6698 /* Is this the primary VTT? */
6699 bool top_level_p;
6701 /* Current index into the VTT. */
6702 tree index;
6704 /* TREE_LIST of initializers built up. */
6705 tree inits;
6707 /* The type being constructed by this secondary VTT. */
6708 tree type_being_constructed;
6709 } secondary_vptr_vtt_init_data;
6711 /* Recursively build the VTT-initializer for BINFO (which is in the
6712 hierarchy dominated by T). INITS points to the end of the initializer
6713 list to date. INDEX is the VTT index where the next element will be
6714 replaced. Iff BINFO is the binfo for T, this is the top level VTT (i.e.
6715 not a subvtt for some base of T). When that is so, we emit the sub-VTTs
6716 for virtual bases of T. When it is not so, we build the constructor
6717 vtables for the BINFO-in-T variant. */
6719 static tree *
6720 build_vtt_inits (tree binfo, tree t, tree *inits, tree *index)
6722 int i;
6723 tree b;
6724 tree init;
6725 tree secondary_vptrs;
6726 secondary_vptr_vtt_init_data data;
6727 int top_level_p = SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), t);
6729 /* We only need VTTs for subobjects with virtual bases. */
6730 if (!CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo)))
6731 return inits;
6733 /* We need to use a construction vtable if this is not the primary
6734 VTT. */
6735 if (!top_level_p)
6737 build_ctor_vtbl_group (binfo, t);
6739 /* Record the offset in the VTT where this sub-VTT can be found. */
6740 BINFO_SUBVTT_INDEX (binfo) = *index;
6743 /* Add the address of the primary vtable for the complete object. */
6744 init = binfo_ctor_vtable (binfo);
6745 *inits = build_tree_list (NULL_TREE, init);
6746 inits = &TREE_CHAIN (*inits);
6747 if (top_level_p)
6749 gcc_assert (!BINFO_VPTR_INDEX (binfo));
6750 BINFO_VPTR_INDEX (binfo) = *index;
6752 *index = size_binop (PLUS_EXPR, *index, TYPE_SIZE_UNIT (ptr_type_node));
6754 /* Recursively add the secondary VTTs for non-virtual bases. */
6755 for (i = 0; BINFO_BASE_ITERATE (binfo, i, b); ++i)
6756 if (!BINFO_VIRTUAL_P (b))
6757 inits = build_vtt_inits (b, t, inits, index);
6759 /* Add secondary virtual pointers for all subobjects of BINFO with
6760 either virtual bases or reachable along a virtual path, except
6761 subobjects that are non-virtual primary bases. */
6762 data.top_level_p = top_level_p;
6763 data.index = *index;
6764 data.inits = NULL;
6765 data.type_being_constructed = BINFO_TYPE (binfo);
6767 dfs_walk_once (binfo, dfs_build_secondary_vptr_vtt_inits, NULL, &data);
6769 *index = data.index;
6771 /* The secondary vptrs come back in reverse order. After we reverse
6772 them, and add the INITS, the last init will be the first element
6773 of the chain. */
6774 secondary_vptrs = data.inits;
6775 if (secondary_vptrs)
6777 *inits = nreverse (secondary_vptrs);
6778 inits = &TREE_CHAIN (secondary_vptrs);
6779 gcc_assert (*inits == NULL_TREE);
6782 if (top_level_p)
6783 /* Add the secondary VTTs for virtual bases in inheritance graph
6784 order. */
6785 for (b = TYPE_BINFO (BINFO_TYPE (binfo)); b; b = TREE_CHAIN (b))
6787 if (!BINFO_VIRTUAL_P (b))
6788 continue;
6790 inits = build_vtt_inits (b, t, inits, index);
6792 else
6793 /* Remove the ctor vtables we created. */
6794 dfs_walk_all (binfo, dfs_fixup_binfo_vtbls, NULL, binfo);
6796 return inits;
6799 /* Called from build_vtt_inits via dfs_walk. BINFO is the binfo for the base
6800 in most derived. DATA is a SECONDARY_VPTR_VTT_INIT_DATA structure. */
6802 static tree
6803 dfs_build_secondary_vptr_vtt_inits (tree binfo, void *data_)
6805 secondary_vptr_vtt_init_data *data = (secondary_vptr_vtt_init_data *)data_;
6807 /* We don't care about bases that don't have vtables. */
6808 if (!TYPE_VFIELD (BINFO_TYPE (binfo)))
6809 return dfs_skip_bases;
6811 /* We're only interested in proper subobjects of the type being
6812 constructed. */
6813 if (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), data->type_being_constructed))
6814 return NULL_TREE;
6816 /* We're only interested in bases with virtual bases or reachable
6817 via a virtual path from the type being constructed. */
6818 if (!(CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo))
6819 || binfo_via_virtual (binfo, data->type_being_constructed)))
6820 return dfs_skip_bases;
6822 /* We're not interested in non-virtual primary bases. */
6823 if (!BINFO_VIRTUAL_P (binfo) && BINFO_PRIMARY_P (binfo))
6824 return NULL_TREE;
6826 /* Record the index where this secondary vptr can be found. */
6827 if (data->top_level_p)
6829 gcc_assert (!BINFO_VPTR_INDEX (binfo));
6830 BINFO_VPTR_INDEX (binfo) = data->index;
6832 if (BINFO_VIRTUAL_P (binfo))
6834 /* It's a primary virtual base, and this is not a
6835 construction vtable. Find the base this is primary of in
6836 the inheritance graph, and use that base's vtable
6837 now. */
6838 while (BINFO_PRIMARY_P (binfo))
6839 binfo = BINFO_INHERITANCE_CHAIN (binfo);
6843 /* Add the initializer for the secondary vptr itself. */
6844 data->inits = tree_cons (NULL_TREE, binfo_ctor_vtable (binfo), data->inits);
6846 /* Advance the vtt index. */
6847 data->index = size_binop (PLUS_EXPR, data->index,
6848 TYPE_SIZE_UNIT (ptr_type_node));
6850 return NULL_TREE;
6853 /* Called from build_vtt_inits via dfs_walk. After building
6854 constructor vtables and generating the sub-vtt from them, we need
6855 to restore the BINFO_VTABLES that were scribbled on. DATA is the
6856 binfo of the base whose sub vtt was generated. */
6858 static tree
6859 dfs_fixup_binfo_vtbls (tree binfo, void* data)
6861 tree vtable = BINFO_VTABLE (binfo);
6863 if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
6864 /* If this class has no vtable, none of its bases do. */
6865 return dfs_skip_bases;
6867 if (!vtable)
6868 /* This might be a primary base, so have no vtable in this
6869 hierarchy. */
6870 return NULL_TREE;
6872 /* If we scribbled the construction vtable vptr into BINFO, clear it
6873 out now. */
6874 if (TREE_CODE (vtable) == TREE_LIST
6875 && (TREE_PURPOSE (vtable) == (tree) data))
6876 BINFO_VTABLE (binfo) = TREE_CHAIN (vtable);
6878 return NULL_TREE;
6881 /* Build the construction vtable group for BINFO which is in the
6882 hierarchy dominated by T. */
6884 static void
6885 build_ctor_vtbl_group (tree binfo, tree t)
6887 tree list;
6888 tree type;
6889 tree vtbl;
6890 tree inits;
6891 tree id;
6892 tree vbase;
6894 /* See if we've already created this construction vtable group. */
6895 id = mangle_ctor_vtbl_for_type (t, binfo);
6896 if (IDENTIFIER_GLOBAL_VALUE (id))
6897 return;
6899 gcc_assert (!SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), t));
6900 /* Build a version of VTBL (with the wrong type) for use in
6901 constructing the addresses of secondary vtables in the
6902 construction vtable group. */
6903 vtbl = build_vtable (t, id, ptr_type_node);
6904 DECL_CONSTRUCTION_VTABLE_P (vtbl) = 1;
6905 list = build_tree_list (vtbl, NULL_TREE);
6906 accumulate_vtbl_inits (binfo, TYPE_BINFO (TREE_TYPE (binfo)),
6907 binfo, t, list);
6909 /* Add the vtables for each of our virtual bases using the vbase in T
6910 binfo. */
6911 for (vbase = TYPE_BINFO (BINFO_TYPE (binfo));
6912 vbase;
6913 vbase = TREE_CHAIN (vbase))
6915 tree b;
6917 if (!BINFO_VIRTUAL_P (vbase))
6918 continue;
6919 b = copied_binfo (vbase, binfo);
6921 accumulate_vtbl_inits (b, vbase, binfo, t, list);
6923 inits = TREE_VALUE (list);
6925 /* Figure out the type of the construction vtable. */
6926 type = build_index_type (size_int (list_length (inits) - 1));
6927 type = build_cplus_array_type (vtable_entry_type, type);
6928 TREE_TYPE (vtbl) = type;
6930 /* Initialize the construction vtable. */
6931 CLASSTYPE_VTABLES (t) = chainon (CLASSTYPE_VTABLES (t), vtbl);
6932 initialize_artificial_var (vtbl, inits);
6933 dump_vtable (t, binfo, vtbl);
6936 /* Add the vtbl initializers for BINFO (and its bases other than
6937 non-virtual primaries) to the list of INITS. BINFO is in the
6938 hierarchy dominated by T. RTTI_BINFO is the binfo within T of
6939 the constructor the vtbl inits should be accumulated for. (If this
6940 is the complete object vtbl then RTTI_BINFO will be TYPE_BINFO (T).)
6941 ORIG_BINFO is the binfo for this object within BINFO_TYPE (RTTI_BINFO).
6942 BINFO is the active base equivalent of ORIG_BINFO in the inheritance
6943 graph of T. Both BINFO and ORIG_BINFO will have the same BINFO_TYPE,
6944 but are not necessarily the same in terms of layout. */
6946 static void
6947 accumulate_vtbl_inits (tree binfo,
6948 tree orig_binfo,
6949 tree rtti_binfo,
6950 tree t,
6951 tree inits)
6953 int i;
6954 tree base_binfo;
6955 int ctor_vtbl_p = !SAME_BINFO_TYPE_P (BINFO_TYPE (rtti_binfo), t);
6957 gcc_assert (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), BINFO_TYPE (orig_binfo)));
6959 /* If it doesn't have a vptr, we don't do anything. */
6960 if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
6961 return;
6963 /* If we're building a construction vtable, we're not interested in
6964 subobjects that don't require construction vtables. */
6965 if (ctor_vtbl_p
6966 && !CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo))
6967 && !binfo_via_virtual (orig_binfo, BINFO_TYPE (rtti_binfo)))
6968 return;
6970 /* Build the initializers for the BINFO-in-T vtable. */
6971 TREE_VALUE (inits)
6972 = chainon (TREE_VALUE (inits),
6973 dfs_accumulate_vtbl_inits (binfo, orig_binfo,
6974 rtti_binfo, t, inits));
6976 /* Walk the BINFO and its bases. We walk in preorder so that as we
6977 initialize each vtable we can figure out at what offset the
6978 secondary vtable lies from the primary vtable. We can't use
6979 dfs_walk here because we need to iterate through bases of BINFO
6980 and RTTI_BINFO simultaneously. */
6981 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
6983 /* Skip virtual bases. */
6984 if (BINFO_VIRTUAL_P (base_binfo))
6985 continue;
6986 accumulate_vtbl_inits (base_binfo,
6987 BINFO_BASE_BINFO (orig_binfo, i),
6988 rtti_binfo, t,
6989 inits);
6993 /* Called from accumulate_vtbl_inits. Returns the initializers for
6994 the BINFO vtable. */
6996 static tree
6997 dfs_accumulate_vtbl_inits (tree binfo,
6998 tree orig_binfo,
6999 tree rtti_binfo,
7000 tree t,
7001 tree l)
7003 tree inits = NULL_TREE;
7004 tree vtbl = NULL_TREE;
7005 int ctor_vtbl_p = !SAME_BINFO_TYPE_P (BINFO_TYPE (rtti_binfo), t);
7007 if (ctor_vtbl_p
7008 && BINFO_VIRTUAL_P (orig_binfo) && BINFO_PRIMARY_P (orig_binfo))
7010 /* In the hierarchy of BINFO_TYPE (RTTI_BINFO), this is a
7011 primary virtual base. If it is not the same primary in
7012 the hierarchy of T, we'll need to generate a ctor vtable
7013 for it, to place at its location in T. If it is the same
7014 primary, we still need a VTT entry for the vtable, but it
7015 should point to the ctor vtable for the base it is a
7016 primary for within the sub-hierarchy of RTTI_BINFO.
7018 There are three possible cases:
7020 1) We are in the same place.
7021 2) We are a primary base within a lost primary virtual base of
7022 RTTI_BINFO.
7023 3) We are primary to something not a base of RTTI_BINFO. */
7025 tree b;
7026 tree last = NULL_TREE;
7028 /* First, look through the bases we are primary to for RTTI_BINFO
7029 or a virtual base. */
7030 b = binfo;
7031 while (BINFO_PRIMARY_P (b))
7033 b = BINFO_INHERITANCE_CHAIN (b);
7034 last = b;
7035 if (BINFO_VIRTUAL_P (b) || b == rtti_binfo)
7036 goto found;
7038 /* If we run out of primary links, keep looking down our
7039 inheritance chain; we might be an indirect primary. */
7040 for (b = last; b; b = BINFO_INHERITANCE_CHAIN (b))
7041 if (BINFO_VIRTUAL_P (b) || b == rtti_binfo)
7042 break;
7043 found:
7045 /* If we found RTTI_BINFO, this is case 1. If we found a virtual
7046 base B and it is a base of RTTI_BINFO, this is case 2. In
7047 either case, we share our vtable with LAST, i.e. the
7048 derived-most base within B of which we are a primary. */
7049 if (b == rtti_binfo
7050 || (b && binfo_for_vbase (BINFO_TYPE (b), BINFO_TYPE (rtti_binfo))))
7051 /* Just set our BINFO_VTABLE to point to LAST, as we may not have
7052 set LAST's BINFO_VTABLE yet. We'll extract the actual vptr in
7053 binfo_ctor_vtable after everything's been set up. */
7054 vtbl = last;
7056 /* Otherwise, this is case 3 and we get our own. */
7058 else if (!BINFO_NEW_VTABLE_MARKED (orig_binfo))
7059 return inits;
7061 if (!vtbl)
7063 tree index;
7064 int non_fn_entries;
7066 /* Compute the initializer for this vtable. */
7067 inits = build_vtbl_initializer (binfo, orig_binfo, t, rtti_binfo,
7068 &non_fn_entries);
7070 /* Figure out the position to which the VPTR should point. */
7071 vtbl = TREE_PURPOSE (l);
7072 vtbl = build1 (ADDR_EXPR, vtbl_ptr_type_node, vtbl);
7073 index = size_binop (PLUS_EXPR,
7074 size_int (non_fn_entries),
7075 size_int (list_length (TREE_VALUE (l))));
7076 index = size_binop (MULT_EXPR,
7077 TYPE_SIZE_UNIT (vtable_entry_type),
7078 index);
7079 vtbl = build2 (PLUS_EXPR, TREE_TYPE (vtbl), vtbl, index);
7082 if (ctor_vtbl_p)
7083 /* For a construction vtable, we can't overwrite BINFO_VTABLE.
7084 So, we make a TREE_LIST. Later, dfs_fixup_binfo_vtbls will
7085 straighten this out. */
7086 BINFO_VTABLE (binfo) = tree_cons (rtti_binfo, vtbl, BINFO_VTABLE (binfo));
7087 else if (BINFO_PRIMARY_P (binfo) && BINFO_VIRTUAL_P (binfo))
7088 inits = NULL_TREE;
7089 else
7090 /* For an ordinary vtable, set BINFO_VTABLE. */
7091 BINFO_VTABLE (binfo) = vtbl;
7093 return inits;
7096 static GTY(()) tree abort_fndecl_addr;
7098 /* Construct the initializer for BINFO's virtual function table. BINFO
7099 is part of the hierarchy dominated by T. If we're building a
7100 construction vtable, the ORIG_BINFO is the binfo we should use to
7101 find the actual function pointers to put in the vtable - but they
7102 can be overridden on the path to most-derived in the graph that
7103 ORIG_BINFO belongs. Otherwise,
7104 ORIG_BINFO should be the same as BINFO. The RTTI_BINFO is the
7105 BINFO that should be indicated by the RTTI information in the
7106 vtable; it will be a base class of T, rather than T itself, if we
7107 are building a construction vtable.
7109 The value returned is a TREE_LIST suitable for wrapping in a
7110 CONSTRUCTOR to use as the DECL_INITIAL for a vtable. If
7111 NON_FN_ENTRIES_P is not NULL, *NON_FN_ENTRIES_P is set to the
7112 number of non-function entries in the vtable.
7114 It might seem that this function should never be called with a
7115 BINFO for which BINFO_PRIMARY_P holds, the vtable for such a
7116 base is always subsumed by a derived class vtable. However, when
7117 we are building construction vtables, we do build vtables for
7118 primary bases; we need these while the primary base is being
7119 constructed. */
7121 static tree
7122 build_vtbl_initializer (tree binfo,
7123 tree orig_binfo,
7124 tree t,
7125 tree rtti_binfo,
7126 int* non_fn_entries_p)
7128 tree v, b;
7129 tree vfun_inits;
7130 vtbl_init_data vid;
7131 unsigned ix;
7132 tree vbinfo;
7133 VEC (tree) *vbases;
7135 /* Initialize VID. */
7136 memset (&vid, 0, sizeof (vid));
7137 vid.binfo = binfo;
7138 vid.derived = t;
7139 vid.rtti_binfo = rtti_binfo;
7140 vid.last_init = &vid.inits;
7141 vid.primary_vtbl_p = SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), t);
7142 vid.ctor_vtbl_p = !SAME_BINFO_TYPE_P (BINFO_TYPE (rtti_binfo), t);
7143 vid.generate_vcall_entries = true;
7144 /* The first vbase or vcall offset is at index -3 in the vtable. */
7145 vid.index = ssize_int(-3 * TARGET_VTABLE_DATA_ENTRY_DISTANCE);
7147 /* Add entries to the vtable for RTTI. */
7148 build_rtti_vtbl_entries (binfo, &vid);
7150 /* Create an array for keeping track of the functions we've
7151 processed. When we see multiple functions with the same
7152 signature, we share the vcall offsets. */
7153 VARRAY_TREE_INIT (vid.fns, 32, "fns");
7154 /* Add the vcall and vbase offset entries. */
7155 build_vcall_and_vbase_vtbl_entries (binfo, &vid);
7157 /* Clear BINFO_VTABLE_PATH_MARKED; it's set by
7158 build_vbase_offset_vtbl_entries. */
7159 for (vbases = CLASSTYPE_VBASECLASSES (t), ix = 0;
7160 VEC_iterate (tree, vbases, ix, vbinfo); ix++)
7161 BINFO_VTABLE_PATH_MARKED (vbinfo) = 0;
7163 /* If the target requires padding between data entries, add that now. */
7164 if (TARGET_VTABLE_DATA_ENTRY_DISTANCE > 1)
7166 tree cur, *prev;
7168 for (prev = &vid.inits; (cur = *prev); prev = &TREE_CHAIN (cur))
7170 tree add = cur;
7171 int i;
7173 for (i = 1; i < TARGET_VTABLE_DATA_ENTRY_DISTANCE; ++i)
7174 add = tree_cons (NULL_TREE,
7175 build1 (NOP_EXPR, vtable_entry_type,
7176 null_pointer_node),
7177 add);
7178 *prev = add;
7182 if (non_fn_entries_p)
7183 *non_fn_entries_p = list_length (vid.inits);
7185 /* Go through all the ordinary virtual functions, building up
7186 initializers. */
7187 vfun_inits = NULL_TREE;
7188 for (v = BINFO_VIRTUALS (orig_binfo); v; v = TREE_CHAIN (v))
7190 tree delta;
7191 tree vcall_index;
7192 tree fn, fn_original;
7193 tree init = NULL_TREE;
7195 fn = BV_FN (v);
7196 fn_original = fn;
7197 if (DECL_THUNK_P (fn))
7199 if (!DECL_NAME (fn))
7200 finish_thunk (fn);
7201 if (THUNK_ALIAS (fn))
7203 fn = THUNK_ALIAS (fn);
7204 BV_FN (v) = fn;
7206 fn_original = THUNK_TARGET (fn);
7209 /* If the only definition of this function signature along our
7210 primary base chain is from a lost primary, this vtable slot will
7211 never be used, so just zero it out. This is important to avoid
7212 requiring extra thunks which cannot be generated with the function.
7214 We first check this in update_vtable_entry_for_fn, so we handle
7215 restored primary bases properly; we also need to do it here so we
7216 zero out unused slots in ctor vtables, rather than filling themff
7217 with erroneous values (though harmless, apart from relocation
7218 costs). */
7219 for (b = binfo; ; b = get_primary_binfo (b))
7221 /* We found a defn before a lost primary; go ahead as normal. */
7222 if (look_for_overrides_here (BINFO_TYPE (b), fn_original))
7223 break;
7225 /* The nearest definition is from a lost primary; clear the
7226 slot. */
7227 if (BINFO_LOST_PRIMARY_P (b))
7229 init = size_zero_node;
7230 break;
7234 if (! init)
7236 /* Pull the offset for `this', and the function to call, out of
7237 the list. */
7238 delta = BV_DELTA (v);
7239 vcall_index = BV_VCALL_INDEX (v);
7241 gcc_assert (TREE_CODE (delta) == INTEGER_CST);
7242 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
7244 /* You can't call an abstract virtual function; it's abstract.
7245 So, we replace these functions with __pure_virtual. */
7246 if (DECL_PURE_VIRTUAL_P (fn_original))
7248 fn = abort_fndecl;
7249 if (abort_fndecl_addr == NULL)
7250 abort_fndecl_addr = build1 (ADDR_EXPR, vfunc_ptr_type_node, fn);
7251 init = abort_fndecl_addr;
7253 else
7255 if (!integer_zerop (delta) || vcall_index)
7257 fn = make_thunk (fn, /*this_adjusting=*/1, delta, vcall_index);
7258 if (!DECL_NAME (fn))
7259 finish_thunk (fn);
7261 /* Take the address of the function, considering it to be of an
7262 appropriate generic type. */
7263 init = build1 (ADDR_EXPR, vfunc_ptr_type_node, fn);
7267 /* And add it to the chain of initializers. */
7268 if (TARGET_VTABLE_USES_DESCRIPTORS)
7270 int i;
7271 if (init == size_zero_node)
7272 for (i = 0; i < TARGET_VTABLE_USES_DESCRIPTORS; ++i)
7273 vfun_inits = tree_cons (NULL_TREE, init, vfun_inits);
7274 else
7275 for (i = 0; i < TARGET_VTABLE_USES_DESCRIPTORS; ++i)
7277 tree fdesc = build2 (FDESC_EXPR, vfunc_ptr_type_node,
7278 TREE_OPERAND (init, 0),
7279 build_int_cst (NULL_TREE, i));
7280 TREE_CONSTANT (fdesc) = 1;
7281 TREE_INVARIANT (fdesc) = 1;
7283 vfun_inits = tree_cons (NULL_TREE, fdesc, vfun_inits);
7286 else
7287 vfun_inits = tree_cons (NULL_TREE, init, vfun_inits);
7290 /* The initializers for virtual functions were built up in reverse
7291 order; straighten them out now. */
7292 vfun_inits = nreverse (vfun_inits);
7294 /* The negative offset initializers are also in reverse order. */
7295 vid.inits = nreverse (vid.inits);
7297 /* Chain the two together. */
7298 return chainon (vid.inits, vfun_inits);
7301 /* Adds to vid->inits the initializers for the vbase and vcall
7302 offsets in BINFO, which is in the hierarchy dominated by T. */
7304 static void
7305 build_vcall_and_vbase_vtbl_entries (tree binfo, vtbl_init_data* vid)
7307 tree b;
7309 /* If this is a derived class, we must first create entries
7310 corresponding to the primary base class. */
7311 b = get_primary_binfo (binfo);
7312 if (b)
7313 build_vcall_and_vbase_vtbl_entries (b, vid);
7315 /* Add the vbase entries for this base. */
7316 build_vbase_offset_vtbl_entries (binfo, vid);
7317 /* Add the vcall entries for this base. */
7318 build_vcall_offset_vtbl_entries (binfo, vid);
7321 /* Returns the initializers for the vbase offset entries in the vtable
7322 for BINFO (which is part of the class hierarchy dominated by T), in
7323 reverse order. VBASE_OFFSET_INDEX gives the vtable index
7324 where the next vbase offset will go. */
7326 static void
7327 build_vbase_offset_vtbl_entries (tree binfo, vtbl_init_data* vid)
7329 tree vbase;
7330 tree t;
7331 tree non_primary_binfo;
7333 /* If there are no virtual baseclasses, then there is nothing to
7334 do. */
7335 if (!CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo)))
7336 return;
7338 t = vid->derived;
7340 /* We might be a primary base class. Go up the inheritance hierarchy
7341 until we find the most derived class of which we are a primary base:
7342 it is the offset of that which we need to use. */
7343 non_primary_binfo = binfo;
7344 while (BINFO_INHERITANCE_CHAIN (non_primary_binfo))
7346 tree b;
7348 /* If we have reached a virtual base, then it must be a primary
7349 base (possibly multi-level) of vid->binfo, or we wouldn't
7350 have called build_vcall_and_vbase_vtbl_entries for it. But it
7351 might be a lost primary, so just skip down to vid->binfo. */
7352 if (BINFO_VIRTUAL_P (non_primary_binfo))
7354 non_primary_binfo = vid->binfo;
7355 break;
7358 b = BINFO_INHERITANCE_CHAIN (non_primary_binfo);
7359 if (get_primary_binfo (b) != non_primary_binfo)
7360 break;
7361 non_primary_binfo = b;
7364 /* Go through the virtual bases, adding the offsets. */
7365 for (vbase = TYPE_BINFO (BINFO_TYPE (binfo));
7366 vbase;
7367 vbase = TREE_CHAIN (vbase))
7369 tree b;
7370 tree delta;
7372 if (!BINFO_VIRTUAL_P (vbase))
7373 continue;
7375 /* Find the instance of this virtual base in the complete
7376 object. */
7377 b = copied_binfo (vbase, binfo);
7379 /* If we've already got an offset for this virtual base, we
7380 don't need another one. */
7381 if (BINFO_VTABLE_PATH_MARKED (b))
7382 continue;
7383 BINFO_VTABLE_PATH_MARKED (b) = 1;
7385 /* Figure out where we can find this vbase offset. */
7386 delta = size_binop (MULT_EXPR,
7387 vid->index,
7388 convert (ssizetype,
7389 TYPE_SIZE_UNIT (vtable_entry_type)));
7390 if (vid->primary_vtbl_p)
7391 BINFO_VPTR_FIELD (b) = delta;
7393 if (binfo != TYPE_BINFO (t))
7394 /* The vbase offset had better be the same. */
7395 gcc_assert (tree_int_cst_equal (delta, BINFO_VPTR_FIELD (vbase)));
7397 /* The next vbase will come at a more negative offset. */
7398 vid->index = size_binop (MINUS_EXPR, vid->index,
7399 ssize_int (TARGET_VTABLE_DATA_ENTRY_DISTANCE));
7401 /* The initializer is the delta from BINFO to this virtual base.
7402 The vbase offsets go in reverse inheritance-graph order, and
7403 we are walking in inheritance graph order so these end up in
7404 the right order. */
7405 delta = size_diffop (BINFO_OFFSET (b), BINFO_OFFSET (non_primary_binfo));
7407 *vid->last_init
7408 = build_tree_list (NULL_TREE,
7409 fold_build1 (NOP_EXPR,
7410 vtable_entry_type,
7411 delta));
7412 vid->last_init = &TREE_CHAIN (*vid->last_init);
7416 /* Adds the initializers for the vcall offset entries in the vtable
7417 for BINFO (which is part of the class hierarchy dominated by VID->DERIVED)
7418 to VID->INITS. */
7420 static void
7421 build_vcall_offset_vtbl_entries (tree binfo, vtbl_init_data* vid)
7423 /* We only need these entries if this base is a virtual base. We
7424 compute the indices -- but do not add to the vtable -- when
7425 building the main vtable for a class. */
7426 if (BINFO_VIRTUAL_P (binfo) || binfo == TYPE_BINFO (vid->derived))
7428 /* We need a vcall offset for each of the virtual functions in this
7429 vtable. For example:
7431 class A { virtual void f (); };
7432 class B1 : virtual public A { virtual void f (); };
7433 class B2 : virtual public A { virtual void f (); };
7434 class C: public B1, public B2 { virtual void f (); };
7436 A C object has a primary base of B1, which has a primary base of A. A
7437 C also has a secondary base of B2, which no longer has a primary base
7438 of A. So the B2-in-C construction vtable needs a secondary vtable for
7439 A, which will adjust the A* to a B2* to call f. We have no way of
7440 knowing what (or even whether) this offset will be when we define B2,
7441 so we store this "vcall offset" in the A sub-vtable and look it up in
7442 a "virtual thunk" for B2::f.
7444 We need entries for all the functions in our primary vtable and
7445 in our non-virtual bases' secondary vtables. */
7446 vid->vbase = binfo;
7447 /* If we are just computing the vcall indices -- but do not need
7448 the actual entries -- not that. */
7449 if (!BINFO_VIRTUAL_P (binfo))
7450 vid->generate_vcall_entries = false;
7451 /* Now, walk through the non-virtual bases, adding vcall offsets. */
7452 add_vcall_offset_vtbl_entries_r (binfo, vid);
7456 /* Build vcall offsets, starting with those for BINFO. */
7458 static void
7459 add_vcall_offset_vtbl_entries_r (tree binfo, vtbl_init_data* vid)
7461 int i;
7462 tree primary_binfo;
7463 tree base_binfo;
7465 /* Don't walk into virtual bases -- except, of course, for the
7466 virtual base for which we are building vcall offsets. Any
7467 primary virtual base will have already had its offsets generated
7468 through the recursion in build_vcall_and_vbase_vtbl_entries. */
7469 if (BINFO_VIRTUAL_P (binfo) && vid->vbase != binfo)
7470 return;
7472 /* If BINFO has a primary base, process it first. */
7473 primary_binfo = get_primary_binfo (binfo);
7474 if (primary_binfo)
7475 add_vcall_offset_vtbl_entries_r (primary_binfo, vid);
7477 /* Add BINFO itself to the list. */
7478 add_vcall_offset_vtbl_entries_1 (binfo, vid);
7480 /* Scan the non-primary bases of BINFO. */
7481 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
7482 if (base_binfo != primary_binfo)
7483 add_vcall_offset_vtbl_entries_r (base_binfo, vid);
7486 /* Called from build_vcall_offset_vtbl_entries_r. */
7488 static void
7489 add_vcall_offset_vtbl_entries_1 (tree binfo, vtbl_init_data* vid)
7491 /* Make entries for the rest of the virtuals. */
7492 if (abi_version_at_least (2))
7494 tree orig_fn;
7496 /* The ABI requires that the methods be processed in declaration
7497 order. G++ 3.2 used the order in the vtable. */
7498 for (orig_fn = TYPE_METHODS (BINFO_TYPE (binfo));
7499 orig_fn;
7500 orig_fn = TREE_CHAIN (orig_fn))
7501 if (DECL_VINDEX (orig_fn))
7502 add_vcall_offset (orig_fn, binfo, vid);
7504 else
7506 tree derived_virtuals;
7507 tree base_virtuals;
7508 tree orig_virtuals;
7509 /* If BINFO is a primary base, the most derived class which has
7510 BINFO as a primary base; otherwise, just BINFO. */
7511 tree non_primary_binfo;
7513 /* We might be a primary base class. Go up the inheritance hierarchy
7514 until we find the most derived class of which we are a primary base:
7515 it is the BINFO_VIRTUALS there that we need to consider. */
7516 non_primary_binfo = binfo;
7517 while (BINFO_INHERITANCE_CHAIN (non_primary_binfo))
7519 tree b;
7521 /* If we have reached a virtual base, then it must be vid->vbase,
7522 because we ignore other virtual bases in
7523 add_vcall_offset_vtbl_entries_r. In turn, it must be a primary
7524 base (possibly multi-level) of vid->binfo, or we wouldn't
7525 have called build_vcall_and_vbase_vtbl_entries for it. But it
7526 might be a lost primary, so just skip down to vid->binfo. */
7527 if (BINFO_VIRTUAL_P (non_primary_binfo))
7529 gcc_assert (non_primary_binfo == vid->vbase);
7530 non_primary_binfo = vid->binfo;
7531 break;
7534 b = BINFO_INHERITANCE_CHAIN (non_primary_binfo);
7535 if (get_primary_binfo (b) != non_primary_binfo)
7536 break;
7537 non_primary_binfo = b;
7540 if (vid->ctor_vtbl_p)
7541 /* For a ctor vtable we need the equivalent binfo within the hierarchy
7542 where rtti_binfo is the most derived type. */
7543 non_primary_binfo
7544 = original_binfo (non_primary_binfo, vid->rtti_binfo);
7546 for (base_virtuals = BINFO_VIRTUALS (binfo),
7547 derived_virtuals = BINFO_VIRTUALS (non_primary_binfo),
7548 orig_virtuals = BINFO_VIRTUALS (TYPE_BINFO (BINFO_TYPE (binfo)));
7549 base_virtuals;
7550 base_virtuals = TREE_CHAIN (base_virtuals),
7551 derived_virtuals = TREE_CHAIN (derived_virtuals),
7552 orig_virtuals = TREE_CHAIN (orig_virtuals))
7554 tree orig_fn;
7556 /* Find the declaration that originally caused this function to
7557 be present in BINFO_TYPE (binfo). */
7558 orig_fn = BV_FN (orig_virtuals);
7560 /* When processing BINFO, we only want to generate vcall slots for
7561 function slots introduced in BINFO. So don't try to generate
7562 one if the function isn't even defined in BINFO. */
7563 if (!SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), DECL_CONTEXT (orig_fn)))
7564 continue;
7566 add_vcall_offset (orig_fn, binfo, vid);
7571 /* Add a vcall offset entry for ORIG_FN to the vtable. */
7573 static void
7574 add_vcall_offset (tree orig_fn, tree binfo, vtbl_init_data *vid)
7576 size_t i;
7577 tree vcall_offset;
7579 /* If there is already an entry for a function with the same
7580 signature as FN, then we do not need a second vcall offset.
7581 Check the list of functions already present in the derived
7582 class vtable. */
7583 for (i = 0; i < VARRAY_ACTIVE_SIZE (vid->fns); ++i)
7585 tree derived_entry;
7587 derived_entry = VARRAY_TREE (vid->fns, i);
7588 if (same_signature_p (derived_entry, orig_fn)
7589 /* We only use one vcall offset for virtual destructors,
7590 even though there are two virtual table entries. */
7591 || (DECL_DESTRUCTOR_P (derived_entry)
7592 && DECL_DESTRUCTOR_P (orig_fn)))
7593 return;
7596 /* If we are building these vcall offsets as part of building
7597 the vtable for the most derived class, remember the vcall
7598 offset. */
7599 if (vid->binfo == TYPE_BINFO (vid->derived))
7601 tree_pair_p elt = VEC_safe_push (tree_pair_s,
7602 CLASSTYPE_VCALL_INDICES (vid->derived),
7603 NULL);
7604 elt->purpose = orig_fn;
7605 elt->value = vid->index;
7608 /* The next vcall offset will be found at a more negative
7609 offset. */
7610 vid->index = size_binop (MINUS_EXPR, vid->index,
7611 ssize_int (TARGET_VTABLE_DATA_ENTRY_DISTANCE));
7613 /* Keep track of this function. */
7614 VARRAY_PUSH_TREE (vid->fns, orig_fn);
7616 if (vid->generate_vcall_entries)
7618 tree base;
7619 tree fn;
7621 /* Find the overriding function. */
7622 fn = find_final_overrider (vid->rtti_binfo, binfo, orig_fn);
7623 if (fn == error_mark_node)
7624 vcall_offset = build1 (NOP_EXPR, vtable_entry_type,
7625 integer_zero_node);
7626 else
7628 base = TREE_VALUE (fn);
7630 /* The vbase we're working on is a primary base of
7631 vid->binfo. But it might be a lost primary, so its
7632 BINFO_OFFSET might be wrong, so we just use the
7633 BINFO_OFFSET from vid->binfo. */
7634 vcall_offset = size_diffop (BINFO_OFFSET (base),
7635 BINFO_OFFSET (vid->binfo));
7636 vcall_offset = fold_build1 (NOP_EXPR, vtable_entry_type,
7637 vcall_offset);
7639 /* Add the initializer to the vtable. */
7640 *vid->last_init = build_tree_list (NULL_TREE, vcall_offset);
7641 vid->last_init = &TREE_CHAIN (*vid->last_init);
7645 /* Return vtbl initializers for the RTTI entries corresponding to the
7646 BINFO's vtable. The RTTI entries should indicate the object given
7647 by VID->rtti_binfo. */
7649 static void
7650 build_rtti_vtbl_entries (tree binfo, vtbl_init_data* vid)
7652 tree b;
7653 tree t;
7654 tree basetype;
7655 tree offset;
7656 tree decl;
7657 tree init;
7659 basetype = BINFO_TYPE (binfo);
7660 t = BINFO_TYPE (vid->rtti_binfo);
7662 /* To find the complete object, we will first convert to our most
7663 primary base, and then add the offset in the vtbl to that value. */
7664 b = binfo;
7665 while (CLASSTYPE_HAS_PRIMARY_BASE_P (BINFO_TYPE (b))
7666 && !BINFO_LOST_PRIMARY_P (b))
7668 tree primary_base;
7670 primary_base = get_primary_binfo (b);
7671 gcc_assert (BINFO_PRIMARY_P (primary_base)
7672 && BINFO_INHERITANCE_CHAIN (primary_base) == b);
7673 b = primary_base;
7675 offset = size_diffop (BINFO_OFFSET (vid->rtti_binfo), BINFO_OFFSET (b));
7677 /* The second entry is the address of the typeinfo object. */
7678 if (flag_rtti)
7679 decl = build_address (get_tinfo_decl (t));
7680 else
7681 decl = integer_zero_node;
7683 /* Convert the declaration to a type that can be stored in the
7684 vtable. */
7685 init = build_nop (vfunc_ptr_type_node, decl);
7686 *vid->last_init = build_tree_list (NULL_TREE, init);
7687 vid->last_init = &TREE_CHAIN (*vid->last_init);
7689 /* Add the offset-to-top entry. It comes earlier in the vtable than
7690 the typeinfo entry. Convert the offset to look like a
7691 function pointer, so that we can put it in the vtable. */
7692 init = build_nop (vfunc_ptr_type_node, offset);
7693 *vid->last_init = build_tree_list (NULL_TREE, init);
7694 vid->last_init = &TREE_CHAIN (*vid->last_init);
7697 /* Fold a OBJ_TYPE_REF expression to the address of a function.
7698 KNOWN_TYPE carries the true type of OBJ_TYPE_REF_OBJECT(REF). */
7700 tree
7701 cp_fold_obj_type_ref (tree ref, tree known_type)
7703 HOST_WIDE_INT index = tree_low_cst (OBJ_TYPE_REF_TOKEN (ref), 1);
7704 HOST_WIDE_INT i = 0;
7705 tree v = BINFO_VIRTUALS (TYPE_BINFO (known_type));
7706 tree fndecl;
7708 while (i != index)
7710 i += (TARGET_VTABLE_USES_DESCRIPTORS
7711 ? TARGET_VTABLE_USES_DESCRIPTORS : 1);
7712 v = TREE_CHAIN (v);
7715 fndecl = BV_FN (v);
7717 #ifdef ENABLE_CHECKING
7718 gcc_assert (tree_int_cst_equal (OBJ_TYPE_REF_TOKEN (ref),
7719 DECL_VINDEX (fndecl)));
7720 #endif
7722 return build_address (fndecl);
7725 #include "gt-cp-class.h"