Fix bug in vtable initialization
[official-gcc.git] / gcc / cp / class.c
blobfd0f011d0aedceea0fbf5401b61fd554e7ca93e9
1 /* Functions related to building classes and their related objects.
2 Copyright (C) 1987, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010
4 Free Software Foundation, Inc.
5 Contributed by Michael Tiemann (tiemann@cygnus.com)
7 This file is part of GCC.
9 GCC is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3, or (at your option)
12 any later version.
14 GCC is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with GCC; see the file COPYING3. If not see
21 <http://www.gnu.org/licenses/>. */
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 "output.h"
34 #include "toplev.h"
35 #include "target.h"
36 #include "convert.h"
37 #include "cgraph.h"
38 #include "tree-dump.h"
39 #include "splay-tree.h"
40 #include "pointer-set.h"
42 /* The number of nested classes being processed. If we are not in the
43 scope of any class, this is zero. */
45 int current_class_depth;
47 /* In order to deal with nested classes, we keep a stack of classes.
48 The topmost entry is the innermost class, and is the entry at index
49 CURRENT_CLASS_DEPTH */
51 typedef struct class_stack_node {
52 /* The name of the class. */
53 tree name;
55 /* The _TYPE node for the class. */
56 tree type;
58 /* The access specifier pending for new declarations in the scope of
59 this class. */
60 tree access;
62 /* If were defining TYPE, the names used in this class. */
63 splay_tree names_used;
65 /* Nonzero if this class is no longer open, because of a call to
66 push_to_top_level. */
67 size_t hidden;
68 }* class_stack_node_t;
70 typedef struct vtbl_init_data_s
72 /* The base for which we're building initializers. */
73 tree binfo;
74 /* The type of the most-derived type. */
75 tree derived;
76 /* The binfo for the dynamic type. This will be TYPE_BINFO (derived),
77 unless ctor_vtbl_p is true. */
78 tree rtti_binfo;
79 /* The negative-index vtable initializers built up so far. These
80 are in order from least negative index to most negative index. */
81 VEC(constructor_elt,gc) *inits;
82 /* The binfo for the virtual base for which we're building
83 vcall offset initializers. */
84 tree vbase;
85 /* The functions in vbase for which we have already provided vcall
86 offsets. */
87 VEC(tree,gc) *fns;
88 /* The vtable index of the next vcall or vbase offset. */
89 tree index;
90 /* Nonzero if we are building the initializer for the primary
91 vtable. */
92 int primary_vtbl_p;
93 /* Nonzero if we are building the initializer for a construction
94 vtable. */
95 int ctor_vtbl_p;
96 /* True when adding vcall offset entries to the vtable. False when
97 merely computing the indices. */
98 bool generate_vcall_entries;
99 } vtbl_init_data;
101 /* The type of a function passed to walk_subobject_offsets. */
102 typedef int (*subobject_offset_fn) (tree, tree, splay_tree);
104 /* The stack itself. This is a dynamically resized array. The
105 number of elements allocated is CURRENT_CLASS_STACK_SIZE. */
106 static int current_class_stack_size;
107 static class_stack_node_t current_class_stack;
109 /* The size of the largest empty class seen in this translation unit. */
110 static GTY (()) tree sizeof_biggest_empty_class;
112 /* An array of all local classes present in this translation unit, in
113 declaration order. */
114 VEC(tree,gc) *local_classes;
116 static tree get_vfield_name (tree);
117 static void finish_struct_anon (tree);
118 static tree get_vtable_name (tree);
119 static tree get_basefndecls (tree, tree);
120 static int build_primary_vtable (tree, tree);
121 static int build_secondary_vtable (tree);
122 static void finish_vtbls (tree);
123 static void modify_vtable_entry (tree, tree, tree, tree, tree *);
124 static void finish_struct_bits (tree);
125 static int alter_access (tree, tree, tree);
126 static void handle_using_decl (tree, tree);
127 static tree dfs_modify_vtables (tree, void *);
128 static tree modify_all_vtables (tree, tree);
129 static void determine_primary_bases (tree);
130 static void finish_struct_methods (tree);
131 static void maybe_warn_about_overly_private_class (tree);
132 static int method_name_cmp (const void *, const void *);
133 static int resort_method_name_cmp (const void *, const void *);
134 static void add_implicitly_declared_members (tree, int, int);
135 static tree fixed_type_or_null (tree, int *, int *);
136 static tree build_simple_base_path (tree expr, tree binfo);
137 static tree build_vtbl_ref_1 (tree, tree);
138 static void build_vtbl_initializer (tree, tree, tree, tree, int *,
139 VEC(constructor_elt,gc) **);
140 static int count_fields (tree);
141 static int add_fields_to_record_type (tree, struct sorted_fields_type*, int);
142 static bool check_bitfield_decl (tree);
143 static void check_field_decl (tree, tree, int *, int *, int *);
144 static void check_field_decls (tree, tree *, int *, int *);
145 static tree *build_base_field (record_layout_info, tree, splay_tree, tree *);
146 static void build_base_fields (record_layout_info, splay_tree, tree *);
147 static void check_methods (tree);
148 static void remove_zero_width_bit_fields (tree);
149 static void check_bases (tree, int *, int *);
150 static void check_bases_and_members (tree);
151 static tree create_vtable_ptr (tree, tree *);
152 static void include_empty_classes (record_layout_info);
153 static void layout_class_type (tree, tree *);
154 static void propagate_binfo_offsets (tree, tree);
155 static void layout_virtual_bases (record_layout_info, splay_tree);
156 static void build_vbase_offset_vtbl_entries (tree, vtbl_init_data *);
157 static void add_vcall_offset_vtbl_entries_r (tree, vtbl_init_data *);
158 static void add_vcall_offset_vtbl_entries_1 (tree, vtbl_init_data *);
159 static void build_vcall_offset_vtbl_entries (tree, vtbl_init_data *);
160 static void add_vcall_offset (tree, tree, vtbl_init_data *);
161 static void layout_vtable_decl (tree, int);
162 static tree dfs_find_final_overrider_pre (tree, void *);
163 static tree dfs_find_final_overrider_post (tree, void *);
164 static tree find_final_overrider (tree, tree, tree);
165 static int make_new_vtable (tree, tree);
166 static tree get_primary_binfo (tree);
167 static int maybe_indent_hierarchy (FILE *, int, int);
168 static tree dump_class_hierarchy_r (FILE *, int, tree, tree, int);
169 static void dump_class_hierarchy (tree);
170 static void dump_class_hierarchy_1 (FILE *, int, tree);
171 static void dump_array (FILE *, tree);
172 static void dump_vtable (tree, tree, tree);
173 static void dump_vtt (tree, tree);
174 static void dump_thunk (FILE *, int, tree);
175 static tree build_vtable (tree, tree, tree);
176 static void initialize_vtable (tree, VEC(constructor_elt,gc) *);
177 static void layout_nonempty_base_or_field (record_layout_info,
178 tree, tree, splay_tree);
179 static tree end_of_class (tree, int);
180 static bool layout_empty_base (record_layout_info, tree, tree, splay_tree);
181 static void accumulate_vtbl_inits (tree, tree, tree, tree, tree,
182 VEC(constructor_elt,gc) **);
183 static void dfs_accumulate_vtbl_inits (tree, tree, tree, tree, tree,
184 VEC(constructor_elt,gc) **);
185 static void build_rtti_vtbl_entries (tree, vtbl_init_data *);
186 static void build_vcall_and_vbase_vtbl_entries (tree, vtbl_init_data *);
187 static void clone_constructors_and_destructors (tree);
188 static tree build_clone (tree, tree);
189 static void update_vtable_entry_for_fn (tree, tree, tree, tree *, unsigned);
190 static void build_ctor_vtbl_group (tree, tree);
191 static void build_vtt (tree);
192 static tree binfo_ctor_vtable (tree);
193 static void build_vtt_inits (tree, tree, VEC(constructor_elt,gc) **, tree *);
194 static tree dfs_build_secondary_vptr_vtt_inits (tree, void *);
195 static tree dfs_fixup_binfo_vtbls (tree, void *);
196 static int record_subobject_offset (tree, tree, splay_tree);
197 static int check_subobject_offset (tree, tree, splay_tree);
198 static int walk_subobject_offsets (tree, subobject_offset_fn,
199 tree, splay_tree, tree, int);
200 static void record_subobject_offsets (tree, tree, splay_tree, bool);
201 static int layout_conflict_p (tree, tree, splay_tree, int);
202 static int splay_tree_compare_integer_csts (splay_tree_key k1,
203 splay_tree_key k2);
204 static void warn_about_ambiguous_bases (tree);
205 static bool type_requires_array_cookie (tree);
206 static bool contains_empty_class_p (tree);
207 static bool base_derived_from (tree, tree);
208 static int empty_base_at_nonzero_offset_p (tree, tree, splay_tree);
209 static tree end_of_base (tree);
210 static tree get_vcall_index (tree, tree);
212 /* Variables shared between class.c and call.c. */
214 #ifdef GATHER_STATISTICS
215 int n_vtables = 0;
216 int n_vtable_entries = 0;
217 int n_vtable_searches = 0;
218 int n_vtable_elems = 0;
219 int n_convert_harshness = 0;
220 int n_compute_conversion_costs = 0;
221 int n_inner_fields_searched = 0;
222 #endif
224 /* Convert to or from a base subobject. EXPR is an expression of type
225 `A' or `A*', an expression of type `B' or `B*' is returned. To
226 convert A to a base B, CODE is PLUS_EXPR and BINFO is the binfo for
227 the B base instance within A. To convert base A to derived B, CODE
228 is MINUS_EXPR and BINFO is the binfo for the A instance within B.
229 In this latter case, A must not be a morally virtual base of B.
230 NONNULL is true if EXPR is known to be non-NULL (this is only
231 needed when EXPR is of pointer type). CV qualifiers are preserved
232 from EXPR. */
234 tree
235 build_base_path (enum tree_code code,
236 tree expr,
237 tree binfo,
238 int nonnull)
240 tree v_binfo = NULL_TREE;
241 tree d_binfo = NULL_TREE;
242 tree probe;
243 tree offset;
244 tree target_type;
245 tree null_test = NULL;
246 tree ptr_target_type;
247 int fixed_type_p;
248 int want_pointer = TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE;
249 bool has_empty = false;
250 bool virtual_access;
252 if (expr == error_mark_node || binfo == error_mark_node || !binfo)
253 return error_mark_node;
255 for (probe = binfo; probe; probe = BINFO_INHERITANCE_CHAIN (probe))
257 d_binfo = probe;
258 if (is_empty_class (BINFO_TYPE (probe)))
259 has_empty = true;
260 if (!v_binfo && BINFO_VIRTUAL_P (probe))
261 v_binfo = probe;
264 probe = TYPE_MAIN_VARIANT (TREE_TYPE (expr));
265 if (want_pointer)
266 probe = TYPE_MAIN_VARIANT (TREE_TYPE (probe));
268 gcc_assert ((code == MINUS_EXPR
269 && SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), probe))
270 || (code == PLUS_EXPR
271 && SAME_BINFO_TYPE_P (BINFO_TYPE (d_binfo), probe)));
273 if (binfo == d_binfo)
274 /* Nothing to do. */
275 return expr;
277 if (code == MINUS_EXPR && v_binfo)
279 error ("cannot convert from base %qT to derived type %qT via virtual base %qT",
280 BINFO_TYPE (binfo), BINFO_TYPE (d_binfo), BINFO_TYPE (v_binfo));
281 return error_mark_node;
284 if (!want_pointer)
285 /* This must happen before the call to save_expr. */
286 expr = cp_build_addr_expr (expr, tf_warning_or_error);
287 else
288 expr = mark_rvalue_use (expr);
290 offset = BINFO_OFFSET (binfo);
291 fixed_type_p = resolves_to_fixed_type_p (expr, &nonnull);
292 target_type = code == PLUS_EXPR ? BINFO_TYPE (binfo) : BINFO_TYPE (d_binfo);
293 /* TARGET_TYPE has been extracted from BINFO, and, is therefore always
294 cv-unqualified. Extract the cv-qualifiers from EXPR so that the
295 expression returned matches the input. */
296 target_type = cp_build_qualified_type
297 (target_type, cp_type_quals (TREE_TYPE (TREE_TYPE (expr))));
298 ptr_target_type = build_pointer_type (target_type);
300 /* Do we need to look in the vtable for the real offset? */
301 virtual_access = (v_binfo && fixed_type_p <= 0);
303 /* Don't bother with the calculations inside sizeof; they'll ICE if the
304 source type is incomplete and the pointer value doesn't matter. */
305 if (cp_unevaluated_operand != 0)
307 expr = build_nop (ptr_target_type, expr);
308 if (!want_pointer)
309 expr = build_indirect_ref (EXPR_LOCATION (expr), expr, RO_NULL);
310 return expr;
313 /* Do we need to check for a null pointer? */
314 if (want_pointer && !nonnull)
316 /* If we know the conversion will not actually change the value
317 of EXPR, then we can avoid testing the expression for NULL.
318 We have to avoid generating a COMPONENT_REF for a base class
319 field, because other parts of the compiler know that such
320 expressions are always non-NULL. */
321 if (!virtual_access && integer_zerop (offset))
322 return build_nop (ptr_target_type, expr);
323 null_test = error_mark_node;
326 /* Protect against multiple evaluation if necessary. */
327 if (TREE_SIDE_EFFECTS (expr) && (null_test || virtual_access))
328 expr = save_expr (expr);
330 /* Now that we've saved expr, build the real null test. */
331 if (null_test)
333 tree zero = cp_convert (TREE_TYPE (expr), integer_zero_node);
334 null_test = fold_build2_loc (input_location, NE_EXPR, boolean_type_node,
335 expr, zero);
338 /* If this is a simple base reference, express it as a COMPONENT_REF. */
339 if (code == PLUS_EXPR && !virtual_access
340 /* We don't build base fields for empty bases, and they aren't very
341 interesting to the optimizers anyway. */
342 && !has_empty)
344 expr = cp_build_indirect_ref (expr, RO_NULL, tf_warning_or_error);
345 expr = build_simple_base_path (expr, binfo);
346 if (want_pointer)
347 expr = build_address (expr);
348 target_type = TREE_TYPE (expr);
349 goto out;
352 if (virtual_access)
354 /* Going via virtual base V_BINFO. We need the static offset
355 from V_BINFO to BINFO, and the dynamic offset from D_BINFO to
356 V_BINFO. That offset is an entry in D_BINFO's vtable. */
357 tree v_offset;
359 if (fixed_type_p < 0 && in_base_initializer)
361 /* In a base member initializer, we cannot rely on the
362 vtable being set up. We have to indirect via the
363 vtt_parm. */
364 tree t;
366 t = TREE_TYPE (TYPE_VFIELD (current_class_type));
367 t = build_pointer_type (t);
368 v_offset = convert (t, current_vtt_parm);
369 v_offset = cp_build_indirect_ref (v_offset, RO_NULL,
370 tf_warning_or_error);
372 else
373 v_offset = build_vfield_ref (cp_build_indirect_ref (expr, RO_NULL,
374 tf_warning_or_error),
375 TREE_TYPE (TREE_TYPE (expr)));
377 v_offset = fold_build_pointer_plus (v_offset, BINFO_VPTR_FIELD (v_binfo));
378 v_offset = build1 (NOP_EXPR,
379 build_pointer_type (ptrdiff_type_node),
380 v_offset);
381 v_offset = cp_build_indirect_ref (v_offset, RO_NULL, tf_warning_or_error);
382 TREE_CONSTANT (v_offset) = 1;
384 offset = convert_to_integer (ptrdiff_type_node,
385 size_diffop_loc (input_location, offset,
386 BINFO_OFFSET (v_binfo)));
388 if (!integer_zerop (offset))
389 v_offset = build2 (code, ptrdiff_type_node, v_offset, offset);
391 if (fixed_type_p < 0)
392 /* Negative fixed_type_p means this is a constructor or destructor;
393 virtual base layout is fixed in in-charge [cd]tors, but not in
394 base [cd]tors. */
395 offset = build3 (COND_EXPR, ptrdiff_type_node,
396 build2 (EQ_EXPR, boolean_type_node,
397 current_in_charge_parm, integer_zero_node),
398 v_offset,
399 convert_to_integer (ptrdiff_type_node,
400 BINFO_OFFSET (binfo)));
401 else
402 offset = v_offset;
405 if (want_pointer)
406 target_type = ptr_target_type;
408 expr = build1 (NOP_EXPR, ptr_target_type, expr);
410 if (!integer_zerop (offset))
412 offset = fold_convert (sizetype, offset);
413 if (code == MINUS_EXPR)
414 offset = fold_build1_loc (input_location, NEGATE_EXPR, sizetype, offset);
415 expr = fold_build_pointer_plus (expr, offset);
417 else
418 null_test = NULL;
420 if (!want_pointer)
421 expr = cp_build_indirect_ref (expr, RO_NULL, tf_warning_or_error);
423 out:
424 if (null_test)
425 expr = fold_build3_loc (input_location, COND_EXPR, target_type, null_test, expr,
426 build_zero_cst (target_type));
428 return expr;
431 /* Subroutine of build_base_path; EXPR and BINFO are as in that function.
432 Perform a derived-to-base conversion by recursively building up a
433 sequence of COMPONENT_REFs to the appropriate base fields. */
435 static tree
436 build_simple_base_path (tree expr, tree binfo)
438 tree type = BINFO_TYPE (binfo);
439 tree d_binfo = BINFO_INHERITANCE_CHAIN (binfo);
440 tree field;
442 if (d_binfo == NULL_TREE)
444 tree temp;
446 gcc_assert (TYPE_MAIN_VARIANT (TREE_TYPE (expr)) == type);
448 /* Transform `(a, b).x' into `(*(a, &b)).x', `(a ? b : c).x'
449 into `(*(a ? &b : &c)).x', and so on. A COND_EXPR is only
450 an lvalue in the front end; only _DECLs and _REFs are lvalues
451 in the back end. */
452 temp = unary_complex_lvalue (ADDR_EXPR, expr);
453 if (temp)
454 expr = cp_build_indirect_ref (temp, RO_NULL, tf_warning_or_error);
456 return expr;
459 /* Recurse. */
460 expr = build_simple_base_path (expr, d_binfo);
462 for (field = TYPE_FIELDS (BINFO_TYPE (d_binfo));
463 field; field = DECL_CHAIN (field))
464 /* Is this the base field created by build_base_field? */
465 if (TREE_CODE (field) == FIELD_DECL
466 && DECL_FIELD_IS_BASE (field)
467 && TREE_TYPE (field) == type)
469 /* We don't use build_class_member_access_expr here, as that
470 has unnecessary checks, and more importantly results in
471 recursive calls to dfs_walk_once. */
472 int type_quals = cp_type_quals (TREE_TYPE (expr));
474 expr = build3 (COMPONENT_REF,
475 cp_build_qualified_type (type, type_quals),
476 expr, field, NULL_TREE);
477 expr = fold_if_not_in_template (expr);
479 /* Mark the expression const or volatile, as appropriate.
480 Even though we've dealt with the type above, we still have
481 to mark the expression itself. */
482 if (type_quals & TYPE_QUAL_CONST)
483 TREE_READONLY (expr) = 1;
484 if (type_quals & TYPE_QUAL_VOLATILE)
485 TREE_THIS_VOLATILE (expr) = 1;
487 return expr;
490 /* Didn't find the base field?!? */
491 gcc_unreachable ();
494 /* Convert OBJECT to the base TYPE. OBJECT is an expression whose
495 type is a class type or a pointer to a class type. In the former
496 case, TYPE is also a class type; in the latter it is another
497 pointer type. If CHECK_ACCESS is true, an error message is emitted
498 if TYPE is inaccessible. If OBJECT has pointer type, the value is
499 assumed to be non-NULL. */
501 tree
502 convert_to_base (tree object, tree type, bool check_access, bool nonnull,
503 tsubst_flags_t complain)
505 tree binfo;
506 tree object_type;
507 base_access access;
509 if (TYPE_PTR_P (TREE_TYPE (object)))
511 object_type = TREE_TYPE (TREE_TYPE (object));
512 type = TREE_TYPE (type);
514 else
515 object_type = TREE_TYPE (object);
517 access = check_access ? ba_check : ba_unique;
518 if (!(complain & tf_error))
519 access |= ba_quiet;
520 binfo = lookup_base (object_type, type,
521 access,
522 NULL);
523 if (!binfo || binfo == error_mark_node)
524 return error_mark_node;
526 return build_base_path (PLUS_EXPR, object, binfo, nonnull);
529 /* EXPR is an expression with unqualified class type. BASE is a base
530 binfo of that class type. Returns EXPR, converted to the BASE
531 type. This function assumes that EXPR is the most derived class;
532 therefore virtual bases can be found at their static offsets. */
534 tree
535 convert_to_base_statically (tree expr, tree base)
537 tree expr_type;
539 expr_type = TREE_TYPE (expr);
540 if (!SAME_BINFO_TYPE_P (BINFO_TYPE (base), expr_type))
542 /* We use fold_build2 and fold_convert below to simplify the trees
543 provided to the optimizers. It is not safe to call these functions
544 when processing a template because they do not handle C++-specific
545 trees. */
546 gcc_assert (!processing_template_decl);
547 expr = cp_build_addr_expr (expr, tf_warning_or_error);
548 if (!integer_zerop (BINFO_OFFSET (base)))
549 expr = fold_build_pointer_plus_loc (input_location,
550 expr, BINFO_OFFSET (base));
551 expr = fold_convert (build_pointer_type (BINFO_TYPE (base)), expr);
552 expr = build_fold_indirect_ref_loc (input_location, expr);
555 return expr;
559 tree
560 build_vfield_ref (tree datum, tree type)
562 tree vfield, vcontext;
564 if (datum == error_mark_node)
565 return error_mark_node;
567 /* First, convert to the requested type. */
568 if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (datum), type))
569 datum = convert_to_base (datum, type, /*check_access=*/false,
570 /*nonnull=*/true, tf_warning_or_error);
572 /* Second, the requested type may not be the owner of its own vptr.
573 If not, convert to the base class that owns it. We cannot use
574 convert_to_base here, because VCONTEXT may appear more than once
575 in the inheritance hierarchy of TYPE, and thus direct conversion
576 between the types may be ambiguous. Following the path back up
577 one step at a time via primary bases avoids the problem. */
578 vfield = TYPE_VFIELD (type);
579 vcontext = DECL_CONTEXT (vfield);
580 while (!same_type_ignoring_top_level_qualifiers_p (vcontext, type))
582 datum = build_simple_base_path (datum, CLASSTYPE_PRIMARY_BINFO (type));
583 type = TREE_TYPE (datum);
586 return build3 (COMPONENT_REF, TREE_TYPE (vfield), datum, vfield, NULL_TREE);
589 /* Given an object INSTANCE, return an expression which yields the
590 vtable element corresponding to INDEX. There are many special
591 cases for INSTANCE which we take care of here, mainly to avoid
592 creating extra tree nodes when we don't have to. */
594 static tree
595 build_vtbl_ref_1 (tree instance, tree idx)
597 tree aref;
598 tree vtbl = NULL_TREE;
600 /* Try to figure out what a reference refers to, and
601 access its virtual function table directly. */
603 int cdtorp = 0;
604 tree fixed_type = fixed_type_or_null (instance, NULL, &cdtorp);
606 tree basetype = non_reference (TREE_TYPE (instance));
608 if (fixed_type && !cdtorp)
610 tree binfo = lookup_base (fixed_type, basetype,
611 ba_unique | ba_quiet, NULL);
612 if (binfo)
613 vtbl = unshare_expr (BINFO_VTABLE (binfo));
616 if (!vtbl)
617 vtbl = build_vfield_ref (instance, basetype);
619 aref = build_array_ref (input_location, vtbl, idx);
620 TREE_CONSTANT (aref) |= TREE_CONSTANT (vtbl) && TREE_CONSTANT (idx);
622 return aref;
625 tree
626 build_vtbl_ref (tree instance, tree idx)
628 tree aref = build_vtbl_ref_1 (instance, idx);
630 return aref;
633 /* Given a stable object pointer INSTANCE_PTR, return an expression which
634 yields a function pointer corresponding to vtable element INDEX. */
636 tree
637 build_vfn_ref (tree instance_ptr, tree idx)
639 tree aref;
641 aref = build_vtbl_ref_1 (cp_build_indirect_ref (instance_ptr, RO_NULL,
642 tf_warning_or_error),
643 idx);
645 /* When using function descriptors, the address of the
646 vtable entry is treated as a function pointer. */
647 if (TARGET_VTABLE_USES_DESCRIPTORS)
648 aref = build1 (NOP_EXPR, TREE_TYPE (aref),
649 cp_build_addr_expr (aref, tf_warning_or_error));
651 /* Remember this as a method reference, for later devirtualization. */
652 aref = build3 (OBJ_TYPE_REF, TREE_TYPE (aref), aref, instance_ptr, idx);
654 return aref;
657 /* Return the name of the virtual function table (as an IDENTIFIER_NODE)
658 for the given TYPE. */
660 static tree
661 get_vtable_name (tree type)
663 return mangle_vtbl_for_type (type);
666 /* DECL is an entity associated with TYPE, like a virtual table or an
667 implicitly generated constructor. Determine whether or not DECL
668 should have external or internal linkage at the object file
669 level. This routine does not deal with COMDAT linkage and other
670 similar complexities; it simply sets TREE_PUBLIC if it possible for
671 entities in other translation units to contain copies of DECL, in
672 the abstract. */
674 void
675 set_linkage_according_to_type (tree type ATTRIBUTE_UNUSED, tree decl)
677 TREE_PUBLIC (decl) = 1;
678 determine_visibility (decl);
681 /* Create a VAR_DECL for a primary or secondary vtable for CLASS_TYPE.
682 (For a secondary vtable for B-in-D, CLASS_TYPE should be D, not B.)
683 Use NAME for the name of the vtable, and VTABLE_TYPE for its type. */
685 static tree
686 build_vtable (tree class_type, tree name, tree vtable_type)
688 tree decl;
690 decl = build_lang_decl (VAR_DECL, name, vtable_type);
691 /* vtable names are already mangled; give them their DECL_ASSEMBLER_NAME
692 now to avoid confusion in mangle_decl. */
693 SET_DECL_ASSEMBLER_NAME (decl, name);
694 DECL_CONTEXT (decl) = class_type;
695 DECL_ARTIFICIAL (decl) = 1;
696 TREE_STATIC (decl) = 1;
697 TREE_READONLY (decl) = 1;
698 DECL_VIRTUAL_P (decl) = 1;
699 DECL_ALIGN (decl) = TARGET_VTABLE_ENTRY_ALIGN;
700 DECL_VTABLE_OR_VTT_P (decl) = 1;
701 /* At one time the vtable info was grabbed 2 words at a time. This
702 fails on sparc unless you have 8-byte alignment. (tiemann) */
703 DECL_ALIGN (decl) = MAX (TYPE_ALIGN (double_type_node),
704 DECL_ALIGN (decl));
705 set_linkage_according_to_type (class_type, decl);
706 /* The vtable has not been defined -- yet. */
707 DECL_EXTERNAL (decl) = 1;
708 DECL_NOT_REALLY_EXTERN (decl) = 1;
710 /* Mark the VAR_DECL node representing the vtable itself as a
711 "gratuitous" one, thereby forcing dwarfout.c to ignore it. It
712 is rather important that such things be ignored because any
713 effort to actually generate DWARF for them will run into
714 trouble when/if we encounter code like:
716 #pragma interface
717 struct S { virtual void member (); };
719 because the artificial declaration of the vtable itself (as
720 manufactured by the g++ front end) will say that the vtable is
721 a static member of `S' but only *after* the debug output for
722 the definition of `S' has already been output. This causes
723 grief because the DWARF entry for the definition of the vtable
724 will try to refer back to an earlier *declaration* of the
725 vtable as a static member of `S' and there won't be one. We
726 might be able to arrange to have the "vtable static member"
727 attached to the member list for `S' before the debug info for
728 `S' get written (which would solve the problem) but that would
729 require more intrusive changes to the g++ front end. */
730 DECL_IGNORED_P (decl) = 1;
732 return decl;
735 /* Get the VAR_DECL of the vtable for TYPE. TYPE need not be polymorphic,
736 or even complete. If this does not exist, create it. If COMPLETE is
737 nonzero, then complete the definition of it -- that will render it
738 impossible to actually build the vtable, but is useful to get at those
739 which are known to exist in the runtime. */
741 tree
742 get_vtable_decl (tree type, int complete)
744 tree decl;
746 if (CLASSTYPE_VTABLES (type))
747 return CLASSTYPE_VTABLES (type);
749 decl = build_vtable (type, get_vtable_name (type), vtbl_type_node);
750 CLASSTYPE_VTABLES (type) = decl;
752 if (complete)
754 DECL_EXTERNAL (decl) = 1;
755 cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0);
758 return decl;
761 /* Build the primary virtual function table for TYPE. If BINFO is
762 non-NULL, build the vtable starting with the initial approximation
763 that it is the same as the one which is the head of the association
764 list. Returns a nonzero value if a new vtable is actually
765 created. */
767 static int
768 build_primary_vtable (tree binfo, tree type)
770 tree decl;
771 tree virtuals;
773 decl = get_vtable_decl (type, /*complete=*/0);
775 if (binfo)
777 if (BINFO_NEW_VTABLE_MARKED (binfo))
778 /* We have already created a vtable for this base, so there's
779 no need to do it again. */
780 return 0;
782 virtuals = copy_list (BINFO_VIRTUALS (binfo));
783 TREE_TYPE (decl) = TREE_TYPE (get_vtbl_decl_for_binfo (binfo));
784 DECL_SIZE (decl) = TYPE_SIZE (TREE_TYPE (decl));
785 DECL_SIZE_UNIT (decl) = TYPE_SIZE_UNIT (TREE_TYPE (decl));
787 else
789 gcc_assert (TREE_TYPE (decl) == vtbl_type_node);
790 virtuals = NULL_TREE;
793 #ifdef GATHER_STATISTICS
794 n_vtables += 1;
795 n_vtable_elems += list_length (virtuals);
796 #endif
798 /* Initialize the association list for this type, based
799 on our first approximation. */
800 BINFO_VTABLE (TYPE_BINFO (type)) = decl;
801 BINFO_VIRTUALS (TYPE_BINFO (type)) = virtuals;
802 SET_BINFO_NEW_VTABLE_MARKED (TYPE_BINFO (type));
803 return 1;
806 /* Give BINFO a new virtual function table which is initialized
807 with a skeleton-copy of its original initialization. The only
808 entry that changes is the `delta' entry, so we can really
809 share a lot of structure.
811 FOR_TYPE is the most derived type which caused this table to
812 be needed.
814 Returns nonzero if we haven't met BINFO before.
816 The order in which vtables are built (by calling this function) for
817 an object must remain the same, otherwise a binary incompatibility
818 can result. */
820 static int
821 build_secondary_vtable (tree binfo)
823 if (BINFO_NEW_VTABLE_MARKED (binfo))
824 /* We already created a vtable for this base. There's no need to
825 do it again. */
826 return 0;
828 /* Remember that we've created a vtable for this BINFO, so that we
829 don't try to do so again. */
830 SET_BINFO_NEW_VTABLE_MARKED (binfo);
832 /* Make fresh virtual list, so we can smash it later. */
833 BINFO_VIRTUALS (binfo) = copy_list (BINFO_VIRTUALS (binfo));
835 /* Secondary vtables are laid out as part of the same structure as
836 the primary vtable. */
837 BINFO_VTABLE (binfo) = NULL_TREE;
838 return 1;
841 /* Create a new vtable for BINFO which is the hierarchy dominated by
842 T. Return nonzero if we actually created a new vtable. */
844 static int
845 make_new_vtable (tree t, tree binfo)
847 if (binfo == TYPE_BINFO (t))
848 /* In this case, it is *type*'s vtable we are modifying. We start
849 with the approximation that its vtable is that of the
850 immediate base class. */
851 return build_primary_vtable (binfo, t);
852 else
853 /* This is our very own copy of `basetype' to play with. Later,
854 we will fill in all the virtual functions that override the
855 virtual functions in these base classes which are not defined
856 by the current type. */
857 return build_secondary_vtable (binfo);
860 /* Make *VIRTUALS, an entry on the BINFO_VIRTUALS list for BINFO
861 (which is in the hierarchy dominated by T) list FNDECL as its
862 BV_FN. DELTA is the required constant adjustment from the `this'
863 pointer where the vtable entry appears to the `this' required when
864 the function is actually called. */
866 static void
867 modify_vtable_entry (tree t,
868 tree binfo,
869 tree fndecl,
870 tree delta,
871 tree *virtuals)
873 tree v;
875 v = *virtuals;
877 if (fndecl != BV_FN (v)
878 || !tree_int_cst_equal (delta, BV_DELTA (v)))
880 /* We need a new vtable for BINFO. */
881 if (make_new_vtable (t, binfo))
883 /* If we really did make a new vtable, we also made a copy
884 of the BINFO_VIRTUALS list. Now, we have to find the
885 corresponding entry in that list. */
886 *virtuals = BINFO_VIRTUALS (binfo);
887 while (BV_FN (*virtuals) != BV_FN (v))
888 *virtuals = TREE_CHAIN (*virtuals);
889 v = *virtuals;
892 BV_DELTA (v) = delta;
893 BV_VCALL_INDEX (v) = NULL_TREE;
894 BV_FN (v) = fndecl;
899 /* Add method METHOD to class TYPE. If USING_DECL is non-null, it is
900 the USING_DECL naming METHOD. Returns true if the method could be
901 added to the method vec. */
903 bool
904 add_method (tree type, tree method, tree using_decl)
906 unsigned slot;
907 tree overload;
908 bool template_conv_p = false;
909 bool conv_p;
910 VEC(tree,gc) *method_vec;
911 bool complete_p;
912 bool insert_p = false;
913 tree current_fns;
914 tree fns;
916 if (method == error_mark_node)
917 return false;
919 complete_p = COMPLETE_TYPE_P (type);
920 conv_p = DECL_CONV_FN_P (method);
921 if (conv_p)
922 template_conv_p = (TREE_CODE (method) == TEMPLATE_DECL
923 && DECL_TEMPLATE_CONV_FN_P (method));
925 method_vec = CLASSTYPE_METHOD_VEC (type);
926 if (!method_vec)
928 /* Make a new method vector. We start with 8 entries. We must
929 allocate at least two (for constructors and destructors), and
930 we're going to end up with an assignment operator at some
931 point as well. */
932 method_vec = VEC_alloc (tree, gc, 8);
933 /* Create slots for constructors and destructors. */
934 VEC_quick_push (tree, method_vec, NULL_TREE);
935 VEC_quick_push (tree, method_vec, NULL_TREE);
936 CLASSTYPE_METHOD_VEC (type) = method_vec;
939 /* Maintain TYPE_HAS_USER_CONSTRUCTOR, etc. */
940 grok_special_member_properties (method);
942 /* Constructors and destructors go in special slots. */
943 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (method))
944 slot = CLASSTYPE_CONSTRUCTOR_SLOT;
945 else if (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (method))
947 slot = CLASSTYPE_DESTRUCTOR_SLOT;
949 if (TYPE_FOR_JAVA (type))
951 if (!DECL_ARTIFICIAL (method))
952 error ("Java class %qT cannot have a destructor", type);
953 else if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
954 error ("Java class %qT cannot have an implicit non-trivial "
955 "destructor",
956 type);
959 else
961 tree m;
963 insert_p = true;
964 /* See if we already have an entry with this name. */
965 for (slot = CLASSTYPE_FIRST_CONVERSION_SLOT;
966 VEC_iterate (tree, method_vec, slot, m);
967 ++slot)
969 m = OVL_CURRENT (m);
970 if (template_conv_p)
972 if (TREE_CODE (m) == TEMPLATE_DECL
973 && DECL_TEMPLATE_CONV_FN_P (m))
974 insert_p = false;
975 break;
977 if (conv_p && !DECL_CONV_FN_P (m))
978 break;
979 if (DECL_NAME (m) == DECL_NAME (method))
981 insert_p = false;
982 break;
984 if (complete_p
985 && !DECL_CONV_FN_P (m)
986 && DECL_NAME (m) > DECL_NAME (method))
987 break;
990 current_fns = insert_p ? NULL_TREE : VEC_index (tree, method_vec, slot);
992 /* Check to see if we've already got this method. */
993 for (fns = current_fns; fns; fns = OVL_NEXT (fns))
995 tree fn = OVL_CURRENT (fns);
996 tree fn_type;
997 tree method_type;
998 tree parms1;
999 tree parms2;
1001 if (TREE_CODE (fn) != TREE_CODE (method))
1002 continue;
1004 /* [over.load] Member function declarations with the
1005 same name and the same parameter types cannot be
1006 overloaded if any of them is a static member
1007 function declaration.
1009 [namespace.udecl] When a using-declaration brings names
1010 from a base class into a derived class scope, member
1011 functions in the derived class override and/or hide member
1012 functions with the same name and parameter types in a base
1013 class (rather than conflicting). */
1014 fn_type = TREE_TYPE (fn);
1015 method_type = TREE_TYPE (method);
1016 parms1 = TYPE_ARG_TYPES (fn_type);
1017 parms2 = TYPE_ARG_TYPES (method_type);
1019 /* Compare the quals on the 'this' parm. Don't compare
1020 the whole types, as used functions are treated as
1021 coming from the using class in overload resolution. */
1022 if (! DECL_STATIC_FUNCTION_P (fn)
1023 && ! DECL_STATIC_FUNCTION_P (method)
1024 && TREE_TYPE (TREE_VALUE (parms1)) != error_mark_node
1025 && TREE_TYPE (TREE_VALUE (parms2)) != error_mark_node
1026 && (cp_type_quals (TREE_TYPE (TREE_VALUE (parms1)))
1027 != cp_type_quals (TREE_TYPE (TREE_VALUE (parms2)))))
1028 continue;
1030 /* For templates, the return type and template parameters
1031 must be identical. */
1032 if (TREE_CODE (fn) == TEMPLATE_DECL
1033 && (!same_type_p (TREE_TYPE (fn_type),
1034 TREE_TYPE (method_type))
1035 || !comp_template_parms (DECL_TEMPLATE_PARMS (fn),
1036 DECL_TEMPLATE_PARMS (method))))
1037 continue;
1039 if (! DECL_STATIC_FUNCTION_P (fn))
1040 parms1 = TREE_CHAIN (parms1);
1041 if (! DECL_STATIC_FUNCTION_P (method))
1042 parms2 = TREE_CHAIN (parms2);
1044 if (compparms (parms1, parms2)
1045 && (!DECL_CONV_FN_P (fn)
1046 || same_type_p (TREE_TYPE (fn_type),
1047 TREE_TYPE (method_type))))
1049 if (using_decl)
1051 if (DECL_CONTEXT (fn) == type)
1052 /* Defer to the local function. */
1053 return false;
1054 if (DECL_CONTEXT (fn) == DECL_CONTEXT (method))
1055 error ("repeated using declaration %q+D", using_decl);
1056 else
1057 error ("using declaration %q+D conflicts with a previous using declaration",
1058 using_decl);
1060 else
1062 error ("%q+#D cannot be overloaded", method);
1063 error ("with %q+#D", fn);
1066 /* We don't call duplicate_decls here to merge the
1067 declarations because that will confuse things if the
1068 methods have inline definitions. In particular, we
1069 will crash while processing the definitions. */
1070 return false;
1074 /* A class should never have more than one destructor. */
1075 if (current_fns && DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (method))
1076 return false;
1078 /* Add the new binding. */
1079 overload = build_overload (method, current_fns);
1081 if (conv_p)
1082 TYPE_HAS_CONVERSION (type) = 1;
1083 else if (slot >= CLASSTYPE_FIRST_CONVERSION_SLOT && !complete_p)
1084 push_class_level_binding (DECL_NAME (method), overload);
1086 if (insert_p)
1088 bool reallocated;
1090 /* We only expect to add few methods in the COMPLETE_P case, so
1091 just make room for one more method in that case. */
1092 if (complete_p)
1093 reallocated = VEC_reserve_exact (tree, gc, method_vec, 1);
1094 else
1095 reallocated = VEC_reserve (tree, gc, method_vec, 1);
1096 if (reallocated)
1097 CLASSTYPE_METHOD_VEC (type) = method_vec;
1098 if (slot == VEC_length (tree, method_vec))
1099 VEC_quick_push (tree, method_vec, overload);
1100 else
1101 VEC_quick_insert (tree, method_vec, slot, overload);
1103 else
1104 /* Replace the current slot. */
1105 VEC_replace (tree, method_vec, slot, overload);
1106 return true;
1109 /* Subroutines of finish_struct. */
1111 /* Change the access of FDECL to ACCESS in T. Return 1 if change was
1112 legit, otherwise return 0. */
1114 static int
1115 alter_access (tree t, tree fdecl, tree access)
1117 tree elem;
1119 if (!DECL_LANG_SPECIFIC (fdecl))
1120 retrofit_lang_decl (fdecl);
1122 gcc_assert (!DECL_DISCRIMINATOR_P (fdecl));
1124 elem = purpose_member (t, DECL_ACCESS (fdecl));
1125 if (elem)
1127 if (TREE_VALUE (elem) != access)
1129 if (TREE_CODE (TREE_TYPE (fdecl)) == FUNCTION_DECL)
1130 error ("conflicting access specifications for method"
1131 " %q+D, ignored", TREE_TYPE (fdecl));
1132 else
1133 error ("conflicting access specifications for field %qE, ignored",
1134 DECL_NAME (fdecl));
1136 else
1138 /* They're changing the access to the same thing they changed
1139 it to before. That's OK. */
1143 else
1145 perform_or_defer_access_check (TYPE_BINFO (t), fdecl, fdecl);
1146 DECL_ACCESS (fdecl) = tree_cons (t, access, DECL_ACCESS (fdecl));
1147 return 1;
1149 return 0;
1152 /* Process the USING_DECL, which is a member of T. */
1154 static void
1155 handle_using_decl (tree using_decl, tree t)
1157 tree decl = USING_DECL_DECLS (using_decl);
1158 tree name = DECL_NAME (using_decl);
1159 tree access
1160 = TREE_PRIVATE (using_decl) ? access_private_node
1161 : TREE_PROTECTED (using_decl) ? access_protected_node
1162 : access_public_node;
1163 tree flist = NULL_TREE;
1164 tree old_value;
1166 gcc_assert (!processing_template_decl && decl);
1168 old_value = lookup_member (t, name, /*protect=*/0, /*want_type=*/false);
1169 if (old_value)
1171 if (is_overloaded_fn (old_value))
1172 old_value = OVL_CURRENT (old_value);
1174 if (DECL_P (old_value) && DECL_CONTEXT (old_value) == t)
1175 /* OK */;
1176 else
1177 old_value = NULL_TREE;
1180 cp_emit_debug_info_for_using (decl, USING_DECL_SCOPE (using_decl));
1182 if (is_overloaded_fn (decl))
1183 flist = decl;
1185 if (! old_value)
1187 else if (is_overloaded_fn (old_value))
1189 if (flist)
1190 /* It's OK to use functions from a base when there are functions with
1191 the same name already present in the current class. */;
1192 else
1194 error ("%q+D invalid in %q#T", using_decl, t);
1195 error (" because of local method %q+#D with same name",
1196 OVL_CURRENT (old_value));
1197 return;
1200 else if (!DECL_ARTIFICIAL (old_value))
1202 error ("%q+D invalid in %q#T", using_decl, t);
1203 error (" because of local member %q+#D with same name", old_value);
1204 return;
1207 /* Make type T see field decl FDECL with access ACCESS. */
1208 if (flist)
1209 for (; flist; flist = OVL_NEXT (flist))
1211 add_method (t, OVL_CURRENT (flist), using_decl);
1212 alter_access (t, OVL_CURRENT (flist), access);
1214 else
1215 alter_access (t, decl, access);
1218 /* Run through the base classes of T, updating CANT_HAVE_CONST_CTOR_P,
1219 and NO_CONST_ASN_REF_P. Also set flag bits in T based on
1220 properties of the bases. */
1222 static void
1223 check_bases (tree t,
1224 int* cant_have_const_ctor_p,
1225 int* no_const_asn_ref_p)
1227 int i;
1228 int seen_non_virtual_nearly_empty_base_p;
1229 tree base_binfo;
1230 tree binfo;
1231 tree field = NULL_TREE;
1233 seen_non_virtual_nearly_empty_base_p = 0;
1235 if (!CLASSTYPE_NON_STD_LAYOUT (t))
1236 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
1237 if (TREE_CODE (field) == FIELD_DECL)
1238 break;
1240 for (binfo = TYPE_BINFO (t), i = 0;
1241 BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
1243 tree basetype = TREE_TYPE (base_binfo);
1245 gcc_assert (COMPLETE_TYPE_P (basetype));
1247 if (CLASSTYPE_FINAL (basetype))
1248 error ("cannot derive from %<final%> base %qT in derived type %qT",
1249 basetype, t);
1251 /* If any base class is non-literal, so is the derived class. */
1252 if (!CLASSTYPE_LITERAL_P (basetype))
1253 CLASSTYPE_LITERAL_P (t) = false;
1255 /* Effective C++ rule 14. We only need to check TYPE_POLYMORPHIC_P
1256 here because the case of virtual functions but non-virtual
1257 dtor is handled in finish_struct_1. */
1258 if (!TYPE_POLYMORPHIC_P (basetype))
1259 warning (OPT_Weffc__,
1260 "base class %q#T has a non-virtual destructor", basetype);
1262 /* If the base class doesn't have copy constructors or
1263 assignment operators that take const references, then the
1264 derived class cannot have such a member automatically
1265 generated. */
1266 if (TYPE_HAS_COPY_CTOR (basetype)
1267 && ! TYPE_HAS_CONST_COPY_CTOR (basetype))
1268 *cant_have_const_ctor_p = 1;
1269 if (TYPE_HAS_COPY_ASSIGN (basetype)
1270 && !TYPE_HAS_CONST_COPY_ASSIGN (basetype))
1271 *no_const_asn_ref_p = 1;
1273 if (BINFO_VIRTUAL_P (base_binfo))
1274 /* A virtual base does not effect nearly emptiness. */
1276 else if (CLASSTYPE_NEARLY_EMPTY_P (basetype))
1278 if (seen_non_virtual_nearly_empty_base_p)
1279 /* And if there is more than one nearly empty base, then the
1280 derived class is not nearly empty either. */
1281 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
1282 else
1283 /* Remember we've seen one. */
1284 seen_non_virtual_nearly_empty_base_p = 1;
1286 else if (!is_empty_class (basetype))
1287 /* If the base class is not empty or nearly empty, then this
1288 class cannot be nearly empty. */
1289 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
1291 /* A lot of properties from the bases also apply to the derived
1292 class. */
1293 TYPE_NEEDS_CONSTRUCTING (t) |= TYPE_NEEDS_CONSTRUCTING (basetype);
1294 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
1295 |= TYPE_HAS_NONTRIVIAL_DESTRUCTOR (basetype);
1296 TYPE_HAS_COMPLEX_COPY_ASSIGN (t)
1297 |= (TYPE_HAS_COMPLEX_COPY_ASSIGN (basetype)
1298 || !TYPE_HAS_COPY_ASSIGN (basetype));
1299 TYPE_HAS_COMPLEX_COPY_CTOR (t) |= (TYPE_HAS_COMPLEX_COPY_CTOR (basetype)
1300 || !TYPE_HAS_COPY_CTOR (basetype));
1301 TYPE_HAS_COMPLEX_MOVE_ASSIGN (t)
1302 |= TYPE_HAS_COMPLEX_MOVE_ASSIGN (basetype);
1303 TYPE_HAS_COMPLEX_MOVE_CTOR (t) |= TYPE_HAS_COMPLEX_MOVE_CTOR (basetype);
1304 TYPE_POLYMORPHIC_P (t) |= TYPE_POLYMORPHIC_P (basetype);
1305 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t)
1306 |= CLASSTYPE_CONTAINS_EMPTY_CLASS_P (basetype);
1307 TYPE_HAS_COMPLEX_DFLT (t) |= (!TYPE_HAS_DEFAULT_CONSTRUCTOR (basetype)
1308 || TYPE_HAS_COMPLEX_DFLT (basetype));
1310 /* A standard-layout class is a class that:
1312 * has no non-standard-layout base classes, */
1313 CLASSTYPE_NON_STD_LAYOUT (t) |= CLASSTYPE_NON_STD_LAYOUT (basetype);
1314 if (!CLASSTYPE_NON_STD_LAYOUT (t))
1316 tree basefield;
1317 /* ...has no base classes of the same type as the first non-static
1318 data member... */
1319 if (field && DECL_CONTEXT (field) == t
1320 && (same_type_ignoring_top_level_qualifiers_p
1321 (TREE_TYPE (field), basetype)))
1322 CLASSTYPE_NON_STD_LAYOUT (t) = 1;
1323 else
1324 /* ...either has no non-static data members in the most-derived
1325 class and at most one base class with non-static data
1326 members, or has no base classes with non-static data
1327 members */
1328 for (basefield = TYPE_FIELDS (basetype); basefield;
1329 basefield = DECL_CHAIN (basefield))
1330 if (TREE_CODE (basefield) == FIELD_DECL)
1332 if (field)
1333 CLASSTYPE_NON_STD_LAYOUT (t) = 1;
1334 else
1335 field = basefield;
1336 break;
1342 /* Determine all the primary bases within T. Sets BINFO_PRIMARY_BASE_P for
1343 those that are primaries. Sets BINFO_LOST_PRIMARY_P for those
1344 that have had a nearly-empty virtual primary base stolen by some
1345 other base in the hierarchy. Determines CLASSTYPE_PRIMARY_BASE for
1346 T. */
1348 static void
1349 determine_primary_bases (tree t)
1351 unsigned i;
1352 tree primary = NULL_TREE;
1353 tree type_binfo = TYPE_BINFO (t);
1354 tree base_binfo;
1356 /* Determine the primary bases of our bases. */
1357 for (base_binfo = TREE_CHAIN (type_binfo); base_binfo;
1358 base_binfo = TREE_CHAIN (base_binfo))
1360 tree primary = CLASSTYPE_PRIMARY_BINFO (BINFO_TYPE (base_binfo));
1362 /* See if we're the non-virtual primary of our inheritance
1363 chain. */
1364 if (!BINFO_VIRTUAL_P (base_binfo))
1366 tree parent = BINFO_INHERITANCE_CHAIN (base_binfo);
1367 tree parent_primary = CLASSTYPE_PRIMARY_BINFO (BINFO_TYPE (parent));
1369 if (parent_primary
1370 && SAME_BINFO_TYPE_P (BINFO_TYPE (base_binfo),
1371 BINFO_TYPE (parent_primary)))
1372 /* We are the primary binfo. */
1373 BINFO_PRIMARY_P (base_binfo) = 1;
1375 /* Determine if we have a virtual primary base, and mark it so.
1377 if (primary && BINFO_VIRTUAL_P (primary))
1379 tree this_primary = copied_binfo (primary, base_binfo);
1381 if (BINFO_PRIMARY_P (this_primary))
1382 /* Someone already claimed this base. */
1383 BINFO_LOST_PRIMARY_P (base_binfo) = 1;
1384 else
1386 tree delta;
1388 BINFO_PRIMARY_P (this_primary) = 1;
1389 BINFO_INHERITANCE_CHAIN (this_primary) = base_binfo;
1391 /* A virtual binfo might have been copied from within
1392 another hierarchy. As we're about to use it as a
1393 primary base, make sure the offsets match. */
1394 delta = size_diffop_loc (input_location,
1395 convert (ssizetype,
1396 BINFO_OFFSET (base_binfo)),
1397 convert (ssizetype,
1398 BINFO_OFFSET (this_primary)));
1400 propagate_binfo_offsets (this_primary, delta);
1405 /* First look for a dynamic direct non-virtual base. */
1406 for (i = 0; BINFO_BASE_ITERATE (type_binfo, i, base_binfo); i++)
1408 tree basetype = BINFO_TYPE (base_binfo);
1410 if (TYPE_CONTAINS_VPTR_P (basetype) && !BINFO_VIRTUAL_P (base_binfo))
1412 primary = base_binfo;
1413 goto found;
1417 /* A "nearly-empty" virtual base class can be the primary base
1418 class, if no non-virtual polymorphic base can be found. Look for
1419 a nearly-empty virtual dynamic base that is not already a primary
1420 base of something in the hierarchy. If there is no such base,
1421 just pick the first nearly-empty virtual base. */
1423 for (base_binfo = TREE_CHAIN (type_binfo); base_binfo;
1424 base_binfo = TREE_CHAIN (base_binfo))
1425 if (BINFO_VIRTUAL_P (base_binfo)
1426 && CLASSTYPE_NEARLY_EMPTY_P (BINFO_TYPE (base_binfo)))
1428 if (!BINFO_PRIMARY_P (base_binfo))
1430 /* Found one that is not primary. */
1431 primary = base_binfo;
1432 goto found;
1434 else if (!primary)
1435 /* Remember the first candidate. */
1436 primary = base_binfo;
1439 found:
1440 /* If we've got a primary base, use it. */
1441 if (primary)
1443 tree basetype = BINFO_TYPE (primary);
1445 CLASSTYPE_PRIMARY_BINFO (t) = primary;
1446 if (BINFO_PRIMARY_P (primary))
1447 /* We are stealing a primary base. */
1448 BINFO_LOST_PRIMARY_P (BINFO_INHERITANCE_CHAIN (primary)) = 1;
1449 BINFO_PRIMARY_P (primary) = 1;
1450 if (BINFO_VIRTUAL_P (primary))
1452 tree delta;
1454 BINFO_INHERITANCE_CHAIN (primary) = type_binfo;
1455 /* A virtual binfo might have been copied from within
1456 another hierarchy. As we're about to use it as a primary
1457 base, make sure the offsets match. */
1458 delta = size_diffop_loc (input_location, ssize_int (0),
1459 convert (ssizetype, BINFO_OFFSET (primary)));
1461 propagate_binfo_offsets (primary, delta);
1464 primary = TYPE_BINFO (basetype);
1466 TYPE_VFIELD (t) = TYPE_VFIELD (basetype);
1467 BINFO_VTABLE (type_binfo) = BINFO_VTABLE (primary);
1468 BINFO_VIRTUALS (type_binfo) = BINFO_VIRTUALS (primary);
1472 /* Update the variant types of T. */
1474 void
1475 fixup_type_variants (tree t)
1477 tree variants;
1479 if (!t)
1480 return;
1482 for (variants = TYPE_NEXT_VARIANT (t);
1483 variants;
1484 variants = TYPE_NEXT_VARIANT (variants))
1486 /* These fields are in the _TYPE part of the node, not in
1487 the TYPE_LANG_SPECIFIC component, so they are not shared. */
1488 TYPE_HAS_USER_CONSTRUCTOR (variants) = TYPE_HAS_USER_CONSTRUCTOR (t);
1489 TYPE_NEEDS_CONSTRUCTING (variants) = TYPE_NEEDS_CONSTRUCTING (t);
1490 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (variants)
1491 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t);
1493 TYPE_POLYMORPHIC_P (variants) = TYPE_POLYMORPHIC_P (t);
1495 TYPE_BINFO (variants) = TYPE_BINFO (t);
1497 /* Copy whatever these are holding today. */
1498 TYPE_VFIELD (variants) = TYPE_VFIELD (t);
1499 TYPE_METHODS (variants) = TYPE_METHODS (t);
1500 TYPE_FIELDS (variants) = TYPE_FIELDS (t);
1504 /* Early variant fixups: we apply attributes at the beginning of the class
1505 definition, and we need to fix up any variants that have already been
1506 made via elaborated-type-specifier so that check_qualified_type works. */
1508 void
1509 fixup_attribute_variants (tree t)
1511 tree variants;
1513 if (!t)
1514 return;
1516 for (variants = TYPE_NEXT_VARIANT (t);
1517 variants;
1518 variants = TYPE_NEXT_VARIANT (variants))
1520 /* These are the two fields that check_qualified_type looks at and
1521 are affected by attributes. */
1522 TYPE_ATTRIBUTES (variants) = TYPE_ATTRIBUTES (t);
1523 TYPE_ALIGN (variants) = TYPE_ALIGN (t);
1527 /* Set memoizing fields and bits of T (and its variants) for later
1528 use. */
1530 static void
1531 finish_struct_bits (tree t)
1533 /* Fix up variants (if any). */
1534 fixup_type_variants (t);
1536 if (BINFO_N_BASE_BINFOS (TYPE_BINFO (t)) && TYPE_POLYMORPHIC_P (t))
1537 /* For a class w/o baseclasses, 'finish_struct' has set
1538 CLASSTYPE_PURE_VIRTUALS correctly (by definition).
1539 Similarly for a class whose base classes do not have vtables.
1540 When neither of these is true, we might have removed abstract
1541 virtuals (by providing a definition), added some (by declaring
1542 new ones), or redeclared ones from a base class. We need to
1543 recalculate what's really an abstract virtual at this point (by
1544 looking in the vtables). */
1545 get_pure_virtuals (t);
1547 /* If this type has a copy constructor or a destructor, force its
1548 mode to be BLKmode, and force its TREE_ADDRESSABLE bit to be
1549 nonzero. This will cause it to be passed by invisible reference
1550 and prevent it from being returned in a register. */
1551 if (type_has_nontrivial_copy_init (t)
1552 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t))
1554 tree variants;
1555 DECL_MODE (TYPE_MAIN_DECL (t)) = BLKmode;
1556 for (variants = t; variants; variants = TYPE_NEXT_VARIANT (variants))
1558 SET_TYPE_MODE (variants, BLKmode);
1559 TREE_ADDRESSABLE (variants) = 1;
1564 /* Issue warnings about T having private constructors, but no friends,
1565 and so forth.
1567 HAS_NONPRIVATE_METHOD is nonzero if T has any non-private methods or
1568 static members. HAS_NONPRIVATE_STATIC_FN is nonzero if T has any
1569 non-private static member functions. */
1571 static void
1572 maybe_warn_about_overly_private_class (tree t)
1574 int has_member_fn = 0;
1575 int has_nonprivate_method = 0;
1576 tree fn;
1578 if (!warn_ctor_dtor_privacy
1579 /* If the class has friends, those entities might create and
1580 access instances, so we should not warn. */
1581 || (CLASSTYPE_FRIEND_CLASSES (t)
1582 || DECL_FRIENDLIST (TYPE_MAIN_DECL (t)))
1583 /* We will have warned when the template was declared; there's
1584 no need to warn on every instantiation. */
1585 || CLASSTYPE_TEMPLATE_INSTANTIATION (t))
1586 /* There's no reason to even consider warning about this
1587 class. */
1588 return;
1590 /* We only issue one warning, if more than one applies, because
1591 otherwise, on code like:
1593 class A {
1594 // Oops - forgot `public:'
1595 A();
1596 A(const A&);
1597 ~A();
1600 we warn several times about essentially the same problem. */
1602 /* Check to see if all (non-constructor, non-destructor) member
1603 functions are private. (Since there are no friends or
1604 non-private statics, we can't ever call any of the private member
1605 functions.) */
1606 for (fn = TYPE_METHODS (t); fn; fn = DECL_CHAIN (fn))
1607 /* We're not interested in compiler-generated methods; they don't
1608 provide any way to call private members. */
1609 if (!DECL_ARTIFICIAL (fn))
1611 if (!TREE_PRIVATE (fn))
1613 if (DECL_STATIC_FUNCTION_P (fn))
1614 /* A non-private static member function is just like a
1615 friend; it can create and invoke private member
1616 functions, and be accessed without a class
1617 instance. */
1618 return;
1620 has_nonprivate_method = 1;
1621 /* Keep searching for a static member function. */
1623 else if (!DECL_CONSTRUCTOR_P (fn) && !DECL_DESTRUCTOR_P (fn))
1624 has_member_fn = 1;
1627 if (!has_nonprivate_method && has_member_fn)
1629 /* There are no non-private methods, and there's at least one
1630 private member function that isn't a constructor or
1631 destructor. (If all the private members are
1632 constructors/destructors we want to use the code below that
1633 issues error messages specifically referring to
1634 constructors/destructors.) */
1635 unsigned i;
1636 tree binfo = TYPE_BINFO (t);
1638 for (i = 0; i != BINFO_N_BASE_BINFOS (binfo); i++)
1639 if (BINFO_BASE_ACCESS (binfo, i) != access_private_node)
1641 has_nonprivate_method = 1;
1642 break;
1644 if (!has_nonprivate_method)
1646 warning (OPT_Wctor_dtor_privacy,
1647 "all member functions in class %qT are private", t);
1648 return;
1652 /* Even if some of the member functions are non-private, the class
1653 won't be useful for much if all the constructors or destructors
1654 are private: such an object can never be created or destroyed. */
1655 fn = CLASSTYPE_DESTRUCTORS (t);
1656 if (fn && TREE_PRIVATE (fn))
1658 warning (OPT_Wctor_dtor_privacy,
1659 "%q#T only defines a private destructor and has no friends",
1661 return;
1664 /* Warn about classes that have private constructors and no friends. */
1665 if (TYPE_HAS_USER_CONSTRUCTOR (t)
1666 /* Implicitly generated constructors are always public. */
1667 && (!CLASSTYPE_LAZY_DEFAULT_CTOR (t)
1668 || !CLASSTYPE_LAZY_COPY_CTOR (t)))
1670 int nonprivate_ctor = 0;
1672 /* If a non-template class does not define a copy
1673 constructor, one is defined for it, enabling it to avoid
1674 this warning. For a template class, this does not
1675 happen, and so we would normally get a warning on:
1677 template <class T> class C { private: C(); };
1679 To avoid this asymmetry, we check TYPE_HAS_COPY_CTOR. All
1680 complete non-template or fully instantiated classes have this
1681 flag set. */
1682 if (!TYPE_HAS_COPY_CTOR (t))
1683 nonprivate_ctor = 1;
1684 else
1685 for (fn = CLASSTYPE_CONSTRUCTORS (t); fn; fn = OVL_NEXT (fn))
1687 tree ctor = OVL_CURRENT (fn);
1688 /* Ideally, we wouldn't count copy constructors (or, in
1689 fact, any constructor that takes an argument of the
1690 class type as a parameter) because such things cannot
1691 be used to construct an instance of the class unless
1692 you already have one. But, for now at least, we're
1693 more generous. */
1694 if (! TREE_PRIVATE (ctor))
1696 nonprivate_ctor = 1;
1697 break;
1701 if (nonprivate_ctor == 0)
1703 warning (OPT_Wctor_dtor_privacy,
1704 "%q#T only defines private constructors and has no friends",
1706 return;
1711 static struct {
1712 gt_pointer_operator new_value;
1713 void *cookie;
1714 } resort_data;
1716 /* Comparison function to compare two TYPE_METHOD_VEC entries by name. */
1718 static int
1719 method_name_cmp (const void* m1_p, const void* m2_p)
1721 const tree *const m1 = (const tree *) m1_p;
1722 const tree *const m2 = (const tree *) m2_p;
1724 if (*m1 == NULL_TREE && *m2 == NULL_TREE)
1725 return 0;
1726 if (*m1 == NULL_TREE)
1727 return -1;
1728 if (*m2 == NULL_TREE)
1729 return 1;
1730 if (DECL_NAME (OVL_CURRENT (*m1)) < DECL_NAME (OVL_CURRENT (*m2)))
1731 return -1;
1732 return 1;
1735 /* This routine compares two fields like method_name_cmp but using the
1736 pointer operator in resort_field_decl_data. */
1738 static int
1739 resort_method_name_cmp (const void* m1_p, const void* m2_p)
1741 const tree *const m1 = (const tree *) m1_p;
1742 const tree *const m2 = (const tree *) m2_p;
1743 if (*m1 == NULL_TREE && *m2 == NULL_TREE)
1744 return 0;
1745 if (*m1 == NULL_TREE)
1746 return -1;
1747 if (*m2 == NULL_TREE)
1748 return 1;
1750 tree d1 = DECL_NAME (OVL_CURRENT (*m1));
1751 tree d2 = DECL_NAME (OVL_CURRENT (*m2));
1752 resort_data.new_value (&d1, resort_data.cookie);
1753 resort_data.new_value (&d2, resort_data.cookie);
1754 if (d1 < d2)
1755 return -1;
1757 return 1;
1760 /* Resort TYPE_METHOD_VEC because pointers have been reordered. */
1762 void
1763 resort_type_method_vec (void* obj,
1764 void* orig_obj ATTRIBUTE_UNUSED ,
1765 gt_pointer_operator new_value,
1766 void* cookie)
1768 VEC(tree,gc) *method_vec = (VEC(tree,gc) *) obj;
1769 int len = VEC_length (tree, method_vec);
1770 size_t slot;
1771 tree fn;
1773 /* The type conversion ops have to live at the front of the vec, so we
1774 can't sort them. */
1775 for (slot = CLASSTYPE_FIRST_CONVERSION_SLOT;
1776 VEC_iterate (tree, method_vec, slot, fn);
1777 ++slot)
1778 if (!DECL_CONV_FN_P (OVL_CURRENT (fn)))
1779 break;
1781 if (len - slot > 1)
1783 resort_data.new_value = new_value;
1784 resort_data.cookie = cookie;
1785 qsort (VEC_address (tree, method_vec) + slot, len - slot, sizeof (tree),
1786 resort_method_name_cmp);
1790 /* Warn about duplicate methods in fn_fields.
1792 Sort methods that are not special (i.e., constructors, destructors,
1793 and type conversion operators) so that we can find them faster in
1794 search. */
1796 static void
1797 finish_struct_methods (tree t)
1799 tree fn_fields;
1800 VEC(tree,gc) *method_vec;
1801 int slot, len;
1803 method_vec = CLASSTYPE_METHOD_VEC (t);
1804 if (!method_vec)
1805 return;
1807 len = VEC_length (tree, method_vec);
1809 /* Clear DECL_IN_AGGR_P for all functions. */
1810 for (fn_fields = TYPE_METHODS (t); fn_fields;
1811 fn_fields = DECL_CHAIN (fn_fields))
1812 DECL_IN_AGGR_P (fn_fields) = 0;
1814 /* Issue warnings about private constructors and such. If there are
1815 no methods, then some public defaults are generated. */
1816 maybe_warn_about_overly_private_class (t);
1818 /* The type conversion ops have to live at the front of the vec, so we
1819 can't sort them. */
1820 for (slot = CLASSTYPE_FIRST_CONVERSION_SLOT;
1821 VEC_iterate (tree, method_vec, slot, fn_fields);
1822 ++slot)
1823 if (!DECL_CONV_FN_P (OVL_CURRENT (fn_fields)))
1824 break;
1825 if (len - slot > 1)
1826 qsort (VEC_address (tree, method_vec) + slot,
1827 len-slot, sizeof (tree), method_name_cmp);
1830 /* Make BINFO's vtable have N entries, including RTTI entries,
1831 vbase and vcall offsets, etc. Set its type and call the back end
1832 to lay it out. */
1834 static void
1835 layout_vtable_decl (tree binfo, int n)
1837 tree atype;
1838 tree vtable;
1840 atype = build_array_of_n_type (vtable_entry_type, n);
1841 layout_type (atype);
1843 /* We may have to grow the vtable. */
1844 vtable = get_vtbl_decl_for_binfo (binfo);
1845 if (!same_type_p (TREE_TYPE (vtable), atype))
1847 TREE_TYPE (vtable) = atype;
1848 DECL_SIZE (vtable) = DECL_SIZE_UNIT (vtable) = NULL_TREE;
1849 layout_decl (vtable, 0);
1853 /* True iff FNDECL and BASE_FNDECL (both non-static member functions)
1854 have the same signature. */
1857 same_signature_p (const_tree fndecl, const_tree base_fndecl)
1859 /* One destructor overrides another if they are the same kind of
1860 destructor. */
1861 if (DECL_DESTRUCTOR_P (base_fndecl) && DECL_DESTRUCTOR_P (fndecl)
1862 && special_function_p (base_fndecl) == special_function_p (fndecl))
1863 return 1;
1864 /* But a non-destructor never overrides a destructor, nor vice
1865 versa, nor do different kinds of destructors override
1866 one-another. For example, a complete object destructor does not
1867 override a deleting destructor. */
1868 if (DECL_DESTRUCTOR_P (base_fndecl) || DECL_DESTRUCTOR_P (fndecl))
1869 return 0;
1871 if (DECL_NAME (fndecl) == DECL_NAME (base_fndecl)
1872 || (DECL_CONV_FN_P (fndecl)
1873 && DECL_CONV_FN_P (base_fndecl)
1874 && same_type_p (DECL_CONV_FN_TYPE (fndecl),
1875 DECL_CONV_FN_TYPE (base_fndecl))))
1877 tree types, base_types;
1878 types = TYPE_ARG_TYPES (TREE_TYPE (fndecl));
1879 base_types = TYPE_ARG_TYPES (TREE_TYPE (base_fndecl));
1880 if ((cp_type_quals (TREE_TYPE (TREE_VALUE (base_types)))
1881 == cp_type_quals (TREE_TYPE (TREE_VALUE (types))))
1882 && compparms (TREE_CHAIN (base_types), TREE_CHAIN (types)))
1883 return 1;
1885 return 0;
1888 /* Returns TRUE if DERIVED is a binfo containing the binfo BASE as a
1889 subobject. */
1891 static bool
1892 base_derived_from (tree derived, tree base)
1894 tree probe;
1896 for (probe = base; probe; probe = BINFO_INHERITANCE_CHAIN (probe))
1898 if (probe == derived)
1899 return true;
1900 else if (BINFO_VIRTUAL_P (probe))
1901 /* If we meet a virtual base, we can't follow the inheritance
1902 any more. See if the complete type of DERIVED contains
1903 such a virtual base. */
1904 return (binfo_for_vbase (BINFO_TYPE (probe), BINFO_TYPE (derived))
1905 != NULL_TREE);
1907 return false;
1910 typedef struct find_final_overrider_data_s {
1911 /* The function for which we are trying to find a final overrider. */
1912 tree fn;
1913 /* The base class in which the function was declared. */
1914 tree declaring_base;
1915 /* The candidate overriders. */
1916 tree candidates;
1917 /* Path to most derived. */
1918 VEC(tree,heap) *path;
1919 } find_final_overrider_data;
1921 /* Add the overrider along the current path to FFOD->CANDIDATES.
1922 Returns true if an overrider was found; false otherwise. */
1924 static bool
1925 dfs_find_final_overrider_1 (tree binfo,
1926 find_final_overrider_data *ffod,
1927 unsigned depth)
1929 tree method;
1931 /* If BINFO is not the most derived type, try a more derived class.
1932 A definition there will overrider a definition here. */
1933 if (depth)
1935 depth--;
1936 if (dfs_find_final_overrider_1
1937 (VEC_index (tree, ffod->path, depth), ffod, depth))
1938 return true;
1941 method = look_for_overrides_here (BINFO_TYPE (binfo), ffod->fn);
1942 if (method)
1944 tree *candidate = &ffod->candidates;
1946 /* Remove any candidates overridden by this new function. */
1947 while (*candidate)
1949 /* If *CANDIDATE overrides METHOD, then METHOD
1950 cannot override anything else on the list. */
1951 if (base_derived_from (TREE_VALUE (*candidate), binfo))
1952 return true;
1953 /* If METHOD overrides *CANDIDATE, remove *CANDIDATE. */
1954 if (base_derived_from (binfo, TREE_VALUE (*candidate)))
1955 *candidate = TREE_CHAIN (*candidate);
1956 else
1957 candidate = &TREE_CHAIN (*candidate);
1960 /* Add the new function. */
1961 ffod->candidates = tree_cons (method, binfo, ffod->candidates);
1962 return true;
1965 return false;
1968 /* Called from find_final_overrider via dfs_walk. */
1970 static tree
1971 dfs_find_final_overrider_pre (tree binfo, void *data)
1973 find_final_overrider_data *ffod = (find_final_overrider_data *) data;
1975 if (binfo == ffod->declaring_base)
1976 dfs_find_final_overrider_1 (binfo, ffod, VEC_length (tree, ffod->path));
1977 VEC_safe_push (tree, heap, ffod->path, binfo);
1979 return NULL_TREE;
1982 static tree
1983 dfs_find_final_overrider_post (tree binfo ATTRIBUTE_UNUSED, void *data)
1985 find_final_overrider_data *ffod = (find_final_overrider_data *) data;
1986 VEC_pop (tree, ffod->path);
1988 return NULL_TREE;
1991 /* Returns a TREE_LIST whose TREE_PURPOSE is the final overrider for
1992 FN and whose TREE_VALUE is the binfo for the base where the
1993 overriding occurs. BINFO (in the hierarchy dominated by the binfo
1994 DERIVED) is the base object in which FN is declared. */
1996 static tree
1997 find_final_overrider (tree derived, tree binfo, tree fn)
1999 find_final_overrider_data ffod;
2001 /* Getting this right is a little tricky. This is valid:
2003 struct S { virtual void f (); };
2004 struct T { virtual void f (); };
2005 struct U : public S, public T { };
2007 even though calling `f' in `U' is ambiguous. But,
2009 struct R { virtual void f(); };
2010 struct S : virtual public R { virtual void f (); };
2011 struct T : virtual public R { virtual void f (); };
2012 struct U : public S, public T { };
2014 is not -- there's no way to decide whether to put `S::f' or
2015 `T::f' in the vtable for `R'.
2017 The solution is to look at all paths to BINFO. If we find
2018 different overriders along any two, then there is a problem. */
2019 if (DECL_THUNK_P (fn))
2020 fn = THUNK_TARGET (fn);
2022 /* Determine the depth of the hierarchy. */
2023 ffod.fn = fn;
2024 ffod.declaring_base = binfo;
2025 ffod.candidates = NULL_TREE;
2026 ffod.path = VEC_alloc (tree, heap, 30);
2028 dfs_walk_all (derived, dfs_find_final_overrider_pre,
2029 dfs_find_final_overrider_post, &ffod);
2031 VEC_free (tree, heap, ffod.path);
2033 /* If there was no winner, issue an error message. */
2034 if (!ffod.candidates || TREE_CHAIN (ffod.candidates))
2035 return error_mark_node;
2037 return ffod.candidates;
2040 /* Return the index of the vcall offset for FN when TYPE is used as a
2041 virtual base. */
2043 static tree
2044 get_vcall_index (tree fn, tree type)
2046 VEC(tree_pair_s,gc) *indices = CLASSTYPE_VCALL_INDICES (type);
2047 tree_pair_p p;
2048 unsigned ix;
2050 FOR_EACH_VEC_ELT (tree_pair_s, indices, ix, p)
2051 if ((DECL_DESTRUCTOR_P (fn) && DECL_DESTRUCTOR_P (p->purpose))
2052 || same_signature_p (fn, p->purpose))
2053 return p->value;
2055 /* There should always be an appropriate index. */
2056 gcc_unreachable ();
2059 /* Update an entry in the vtable for BINFO, which is in the hierarchy
2060 dominated by T. FN is the old function; VIRTUALS points to the
2061 corresponding position in the new BINFO_VIRTUALS list. IX is the index
2062 of that entry in the list. */
2064 static void
2065 update_vtable_entry_for_fn (tree t, tree binfo, tree fn, tree* virtuals,
2066 unsigned ix)
2068 tree b;
2069 tree overrider;
2070 tree delta;
2071 tree virtual_base;
2072 tree first_defn;
2073 tree overrider_fn, overrider_target;
2074 tree target_fn = DECL_THUNK_P (fn) ? THUNK_TARGET (fn) : fn;
2075 tree over_return, base_return;
2076 bool lost = false;
2078 /* Find the nearest primary base (possibly binfo itself) which defines
2079 this function; this is the class the caller will convert to when
2080 calling FN through BINFO. */
2081 for (b = binfo; ; b = get_primary_binfo (b))
2083 gcc_assert (b);
2084 if (look_for_overrides_here (BINFO_TYPE (b), target_fn))
2085 break;
2087 /* The nearest definition is from a lost primary. */
2088 if (BINFO_LOST_PRIMARY_P (b))
2089 lost = true;
2091 first_defn = b;
2093 /* Find the final overrider. */
2094 overrider = find_final_overrider (TYPE_BINFO (t), b, target_fn);
2095 if (overrider == error_mark_node)
2097 error ("no unique final overrider for %qD in %qT", target_fn, t);
2098 return;
2100 overrider_target = overrider_fn = TREE_PURPOSE (overrider);
2102 /* Check for adjusting covariant return types. */
2103 over_return = TREE_TYPE (TREE_TYPE (overrider_target));
2104 base_return = TREE_TYPE (TREE_TYPE (target_fn));
2106 if (POINTER_TYPE_P (over_return)
2107 && TREE_CODE (over_return) == TREE_CODE (base_return)
2108 && CLASS_TYPE_P (TREE_TYPE (over_return))
2109 && CLASS_TYPE_P (TREE_TYPE (base_return))
2110 /* If the overrider is invalid, don't even try. */
2111 && !DECL_INVALID_OVERRIDER_P (overrider_target))
2113 /* If FN is a covariant thunk, we must figure out the adjustment
2114 to the final base FN was converting to. As OVERRIDER_TARGET might
2115 also be converting to the return type of FN, we have to
2116 combine the two conversions here. */
2117 tree fixed_offset, virtual_offset;
2119 over_return = TREE_TYPE (over_return);
2120 base_return = TREE_TYPE (base_return);
2122 if (DECL_THUNK_P (fn))
2124 gcc_assert (DECL_RESULT_THUNK_P (fn));
2125 fixed_offset = ssize_int (THUNK_FIXED_OFFSET (fn));
2126 virtual_offset = THUNK_VIRTUAL_OFFSET (fn);
2128 else
2129 fixed_offset = virtual_offset = NULL_TREE;
2131 if (virtual_offset)
2132 /* Find the equivalent binfo within the return type of the
2133 overriding function. We will want the vbase offset from
2134 there. */
2135 virtual_offset = binfo_for_vbase (BINFO_TYPE (virtual_offset),
2136 over_return);
2137 else if (!same_type_ignoring_top_level_qualifiers_p
2138 (over_return, base_return))
2140 /* There was no existing virtual thunk (which takes
2141 precedence). So find the binfo of the base function's
2142 return type within the overriding function's return type.
2143 We cannot call lookup base here, because we're inside a
2144 dfs_walk, and will therefore clobber the BINFO_MARKED
2145 flags. Fortunately we know the covariancy is valid (it
2146 has already been checked), so we can just iterate along
2147 the binfos, which have been chained in inheritance graph
2148 order. Of course it is lame that we have to repeat the
2149 search here anyway -- we should really be caching pieces
2150 of the vtable and avoiding this repeated work. */
2151 tree thunk_binfo, base_binfo;
2153 /* Find the base binfo within the overriding function's
2154 return type. We will always find a thunk_binfo, except
2155 when the covariancy is invalid (which we will have
2156 already diagnosed). */
2157 for (base_binfo = TYPE_BINFO (base_return),
2158 thunk_binfo = TYPE_BINFO (over_return);
2159 thunk_binfo;
2160 thunk_binfo = TREE_CHAIN (thunk_binfo))
2161 if (SAME_BINFO_TYPE_P (BINFO_TYPE (thunk_binfo),
2162 BINFO_TYPE (base_binfo)))
2163 break;
2165 /* See if virtual inheritance is involved. */
2166 for (virtual_offset = thunk_binfo;
2167 virtual_offset;
2168 virtual_offset = BINFO_INHERITANCE_CHAIN (virtual_offset))
2169 if (BINFO_VIRTUAL_P (virtual_offset))
2170 break;
2172 if (virtual_offset
2173 || (thunk_binfo && !BINFO_OFFSET_ZEROP (thunk_binfo)))
2175 tree offset = convert (ssizetype, BINFO_OFFSET (thunk_binfo));
2177 if (virtual_offset)
2179 /* We convert via virtual base. Adjust the fixed
2180 offset to be from there. */
2181 offset =
2182 size_diffop (offset,
2183 convert (ssizetype,
2184 BINFO_OFFSET (virtual_offset)));
2186 if (fixed_offset)
2187 /* There was an existing fixed offset, this must be
2188 from the base just converted to, and the base the
2189 FN was thunking to. */
2190 fixed_offset = size_binop (PLUS_EXPR, fixed_offset, offset);
2191 else
2192 fixed_offset = offset;
2196 if (fixed_offset || virtual_offset)
2197 /* Replace the overriding function with a covariant thunk. We
2198 will emit the overriding function in its own slot as
2199 well. */
2200 overrider_fn = make_thunk (overrider_target, /*this_adjusting=*/0,
2201 fixed_offset, virtual_offset);
2203 else
2204 gcc_assert (DECL_INVALID_OVERRIDER_P (overrider_target) ||
2205 !DECL_THUNK_P (fn));
2207 /* If we need a covariant thunk, then we may need to adjust first_defn.
2208 The ABI specifies that the thunks emitted with a function are
2209 determined by which bases the function overrides, so we need to be
2210 sure that we're using a thunk for some overridden base; even if we
2211 know that the necessary this adjustment is zero, there may not be an
2212 appropriate zero-this-adjusment thunk for us to use since thunks for
2213 overriding virtual bases always use the vcall offset.
2215 Furthermore, just choosing any base that overrides this function isn't
2216 quite right, as this slot won't be used for calls through a type that
2217 puts a covariant thunk here. Calling the function through such a type
2218 will use a different slot, and that slot is the one that determines
2219 the thunk emitted for that base.
2221 So, keep looking until we find the base that we're really overriding
2222 in this slot: the nearest primary base that doesn't use a covariant
2223 thunk in this slot. */
2224 if (overrider_target != overrider_fn)
2226 if (BINFO_TYPE (b) == DECL_CONTEXT (overrider_target))
2227 /* We already know that the overrider needs a covariant thunk. */
2228 b = get_primary_binfo (b);
2229 for (; ; b = get_primary_binfo (b))
2231 tree main_binfo = TYPE_BINFO (BINFO_TYPE (b));
2232 tree bv = chain_index (ix, BINFO_VIRTUALS (main_binfo));
2233 if (!DECL_THUNK_P (TREE_VALUE (bv)))
2234 break;
2235 if (BINFO_LOST_PRIMARY_P (b))
2236 lost = true;
2238 first_defn = b;
2241 /* Assume that we will produce a thunk that convert all the way to
2242 the final overrider, and not to an intermediate virtual base. */
2243 virtual_base = NULL_TREE;
2245 /* See if we can convert to an intermediate virtual base first, and then
2246 use the vcall offset located there to finish the conversion. */
2247 for (; b; b = BINFO_INHERITANCE_CHAIN (b))
2249 /* If we find the final overrider, then we can stop
2250 walking. */
2251 if (SAME_BINFO_TYPE_P (BINFO_TYPE (b),
2252 BINFO_TYPE (TREE_VALUE (overrider))))
2253 break;
2255 /* If we find a virtual base, and we haven't yet found the
2256 overrider, then there is a virtual base between the
2257 declaring base (first_defn) and the final overrider. */
2258 if (BINFO_VIRTUAL_P (b))
2260 virtual_base = b;
2261 break;
2265 /* Compute the constant adjustment to the `this' pointer. The
2266 `this' pointer, when this function is called, will point at BINFO
2267 (or one of its primary bases, which are at the same offset). */
2268 if (virtual_base)
2269 /* The `this' pointer needs to be adjusted from the declaration to
2270 the nearest virtual base. */
2271 delta = size_diffop_loc (input_location,
2272 convert (ssizetype, BINFO_OFFSET (virtual_base)),
2273 convert (ssizetype, BINFO_OFFSET (first_defn)));
2274 else if (lost)
2275 /* If the nearest definition is in a lost primary, we don't need an
2276 entry in our vtable. Except possibly in a constructor vtable,
2277 if we happen to get our primary back. In that case, the offset
2278 will be zero, as it will be a primary base. */
2279 delta = size_zero_node;
2280 else
2281 /* The `this' pointer needs to be adjusted from pointing to
2282 BINFO to pointing at the base where the final overrider
2283 appears. */
2284 delta = size_diffop_loc (input_location,
2285 convert (ssizetype,
2286 BINFO_OFFSET (TREE_VALUE (overrider))),
2287 convert (ssizetype, BINFO_OFFSET (binfo)));
2289 modify_vtable_entry (t, binfo, overrider_fn, delta, virtuals);
2291 if (virtual_base)
2292 BV_VCALL_INDEX (*virtuals)
2293 = get_vcall_index (overrider_target, BINFO_TYPE (virtual_base));
2294 else
2295 BV_VCALL_INDEX (*virtuals) = NULL_TREE;
2297 BV_LOST_PRIMARY (*virtuals) = lost;
2300 /* Called from modify_all_vtables via dfs_walk. */
2302 static tree
2303 dfs_modify_vtables (tree binfo, void* data)
2305 tree t = (tree) data;
2306 tree virtuals;
2307 tree old_virtuals;
2308 unsigned ix;
2310 if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
2311 /* A base without a vtable needs no modification, and its bases
2312 are uninteresting. */
2313 return dfs_skip_bases;
2315 if (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), t)
2316 && !CLASSTYPE_HAS_PRIMARY_BASE_P (t))
2317 /* Don't do the primary vtable, if it's new. */
2318 return NULL_TREE;
2320 if (BINFO_PRIMARY_P (binfo) && !BINFO_VIRTUAL_P (binfo))
2321 /* There's no need to modify the vtable for a non-virtual primary
2322 base; we're not going to use that vtable anyhow. We do still
2323 need to do this for virtual primary bases, as they could become
2324 non-primary in a construction vtable. */
2325 return NULL_TREE;
2327 make_new_vtable (t, binfo);
2329 /* Now, go through each of the virtual functions in the virtual
2330 function table for BINFO. Find the final overrider, and update
2331 the BINFO_VIRTUALS list appropriately. */
2332 for (ix = 0, virtuals = BINFO_VIRTUALS (binfo),
2333 old_virtuals = BINFO_VIRTUALS (TYPE_BINFO (BINFO_TYPE (binfo)));
2334 virtuals;
2335 ix++, virtuals = TREE_CHAIN (virtuals),
2336 old_virtuals = TREE_CHAIN (old_virtuals))
2337 update_vtable_entry_for_fn (t,
2338 binfo,
2339 BV_FN (old_virtuals),
2340 &virtuals, ix);
2342 return NULL_TREE;
2345 /* Update all of the primary and secondary vtables for T. Create new
2346 vtables as required, and initialize their RTTI information. Each
2347 of the functions in VIRTUALS is declared in T and may override a
2348 virtual function from a base class; find and modify the appropriate
2349 entries to point to the overriding functions. Returns a list, in
2350 declaration order, of the virtual functions that are declared in T,
2351 but do not appear in the primary base class vtable, and which
2352 should therefore be appended to the end of the vtable for T. */
2354 static tree
2355 modify_all_vtables (tree t, tree virtuals)
2357 tree binfo = TYPE_BINFO (t);
2358 tree *fnsp;
2360 /* Update all of the vtables. */
2361 dfs_walk_once (binfo, dfs_modify_vtables, NULL, t);
2363 /* Add virtual functions not already in our primary vtable. These
2364 will be both those introduced by this class, and those overridden
2365 from secondary bases. It does not include virtuals merely
2366 inherited from secondary bases. */
2367 for (fnsp = &virtuals; *fnsp; )
2369 tree fn = TREE_VALUE (*fnsp);
2371 if (!value_member (fn, BINFO_VIRTUALS (binfo))
2372 || DECL_VINDEX (fn) == error_mark_node)
2374 /* We don't need to adjust the `this' pointer when
2375 calling this function. */
2376 BV_DELTA (*fnsp) = integer_zero_node;
2377 BV_VCALL_INDEX (*fnsp) = NULL_TREE;
2379 /* This is a function not already in our vtable. Keep it. */
2380 fnsp = &TREE_CHAIN (*fnsp);
2382 else
2383 /* We've already got an entry for this function. Skip it. */
2384 *fnsp = TREE_CHAIN (*fnsp);
2387 return virtuals;
2390 /* Get the base virtual function declarations in T that have the
2391 indicated NAME. */
2393 static tree
2394 get_basefndecls (tree name, tree t)
2396 tree methods;
2397 tree base_fndecls = NULL_TREE;
2398 int n_baseclasses = BINFO_N_BASE_BINFOS (TYPE_BINFO (t));
2399 int i;
2401 /* Find virtual functions in T with the indicated NAME. */
2402 i = lookup_fnfields_1 (t, name);
2403 if (i != -1)
2404 for (methods = VEC_index (tree, CLASSTYPE_METHOD_VEC (t), i);
2405 methods;
2406 methods = OVL_NEXT (methods))
2408 tree method = OVL_CURRENT (methods);
2410 if (TREE_CODE (method) == FUNCTION_DECL
2411 && DECL_VINDEX (method))
2412 base_fndecls = tree_cons (NULL_TREE, method, base_fndecls);
2415 if (base_fndecls)
2416 return base_fndecls;
2418 for (i = 0; i < n_baseclasses; i++)
2420 tree basetype = BINFO_TYPE (BINFO_BASE_BINFO (TYPE_BINFO (t), i));
2421 base_fndecls = chainon (get_basefndecls (name, basetype),
2422 base_fndecls);
2425 return base_fndecls;
2428 /* If this declaration supersedes the declaration of
2429 a method declared virtual in the base class, then
2430 mark this field as being virtual as well. */
2432 void
2433 check_for_override (tree decl, tree ctype)
2435 bool overrides_found = false;
2436 if (TREE_CODE (decl) == TEMPLATE_DECL)
2437 /* In [temp.mem] we have:
2439 A specialization of a member function template does not
2440 override a virtual function from a base class. */
2441 return;
2442 if ((DECL_DESTRUCTOR_P (decl)
2443 || IDENTIFIER_VIRTUAL_P (DECL_NAME (decl))
2444 || DECL_CONV_FN_P (decl))
2445 && look_for_overrides (ctype, decl)
2446 && !DECL_STATIC_FUNCTION_P (decl))
2447 /* Set DECL_VINDEX to a value that is neither an INTEGER_CST nor
2448 the error_mark_node so that we know it is an overriding
2449 function. */
2451 DECL_VINDEX (decl) = decl;
2452 overrides_found = true;
2455 if (DECL_VIRTUAL_P (decl))
2457 if (!DECL_VINDEX (decl))
2458 DECL_VINDEX (decl) = error_mark_node;
2459 IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)) = 1;
2460 if (DECL_DESTRUCTOR_P (decl))
2461 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (ctype) = true;
2463 else if (DECL_FINAL_P (decl))
2464 error ("%q+#D marked final, but is not virtual", decl);
2465 if (DECL_OVERRIDE_P (decl) && !overrides_found)
2466 error ("%q+#D marked override, but does not override", decl);
2469 /* Warn about hidden virtual functions that are not overridden in t.
2470 We know that constructors and destructors don't apply. */
2472 static void
2473 warn_hidden (tree t)
2475 VEC(tree,gc) *method_vec = CLASSTYPE_METHOD_VEC (t);
2476 tree fns;
2477 size_t i;
2479 /* We go through each separately named virtual function. */
2480 for (i = CLASSTYPE_FIRST_CONVERSION_SLOT;
2481 VEC_iterate (tree, method_vec, i, fns);
2482 ++i)
2484 tree fn;
2485 tree name;
2486 tree fndecl;
2487 tree base_fndecls;
2488 tree base_binfo;
2489 tree binfo;
2490 int j;
2492 /* All functions in this slot in the CLASSTYPE_METHOD_VEC will
2493 have the same name. Figure out what name that is. */
2494 name = DECL_NAME (OVL_CURRENT (fns));
2495 /* There are no possibly hidden functions yet. */
2496 base_fndecls = NULL_TREE;
2497 /* Iterate through all of the base classes looking for possibly
2498 hidden functions. */
2499 for (binfo = TYPE_BINFO (t), j = 0;
2500 BINFO_BASE_ITERATE (binfo, j, base_binfo); j++)
2502 tree basetype = BINFO_TYPE (base_binfo);
2503 base_fndecls = chainon (get_basefndecls (name, basetype),
2504 base_fndecls);
2507 /* If there are no functions to hide, continue. */
2508 if (!base_fndecls)
2509 continue;
2511 /* Remove any overridden functions. */
2512 for (fn = fns; fn; fn = OVL_NEXT (fn))
2514 fndecl = OVL_CURRENT (fn);
2515 if (DECL_VINDEX (fndecl))
2517 tree *prev = &base_fndecls;
2519 while (*prev)
2520 /* If the method from the base class has the same
2521 signature as the method from the derived class, it
2522 has been overridden. */
2523 if (same_signature_p (fndecl, TREE_VALUE (*prev)))
2524 *prev = TREE_CHAIN (*prev);
2525 else
2526 prev = &TREE_CHAIN (*prev);
2530 /* Now give a warning for all base functions without overriders,
2531 as they are hidden. */
2532 while (base_fndecls)
2534 /* Here we know it is a hider, and no overrider exists. */
2535 warning (OPT_Woverloaded_virtual, "%q+D was hidden", TREE_VALUE (base_fndecls));
2536 warning (OPT_Woverloaded_virtual, " by %q+D", fns);
2537 base_fndecls = TREE_CHAIN (base_fndecls);
2542 /* Check for things that are invalid. There are probably plenty of other
2543 things we should check for also. */
2545 static void
2546 finish_struct_anon (tree t)
2548 tree field;
2550 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
2552 if (TREE_STATIC (field))
2553 continue;
2554 if (TREE_CODE (field) != FIELD_DECL)
2555 continue;
2557 if (DECL_NAME (field) == NULL_TREE
2558 && ANON_AGGR_TYPE_P (TREE_TYPE (field)))
2560 bool is_union = TREE_CODE (TREE_TYPE (field)) == UNION_TYPE;
2561 tree elt = TYPE_FIELDS (TREE_TYPE (field));
2562 for (; elt; elt = DECL_CHAIN (elt))
2564 /* We're generally only interested in entities the user
2565 declared, but we also find nested classes by noticing
2566 the TYPE_DECL that we create implicitly. You're
2567 allowed to put one anonymous union inside another,
2568 though, so we explicitly tolerate that. We use
2569 TYPE_ANONYMOUS_P rather than ANON_AGGR_TYPE_P so that
2570 we also allow unnamed types used for defining fields. */
2571 if (DECL_ARTIFICIAL (elt)
2572 && (!DECL_IMPLICIT_TYPEDEF_P (elt)
2573 || TYPE_ANONYMOUS_P (TREE_TYPE (elt))))
2574 continue;
2576 if (TREE_CODE (elt) != FIELD_DECL)
2578 if (is_union)
2579 permerror (input_location, "%q+#D invalid; an anonymous union can "
2580 "only have non-static data members", elt);
2581 else
2582 permerror (input_location, "%q+#D invalid; an anonymous struct can "
2583 "only have non-static data members", elt);
2584 continue;
2587 if (TREE_PRIVATE (elt))
2589 if (is_union)
2590 permerror (input_location, "private member %q+#D in anonymous union", elt);
2591 else
2592 permerror (input_location, "private member %q+#D in anonymous struct", elt);
2594 else if (TREE_PROTECTED (elt))
2596 if (is_union)
2597 permerror (input_location, "protected member %q+#D in anonymous union", elt);
2598 else
2599 permerror (input_location, "protected member %q+#D in anonymous struct", elt);
2602 TREE_PRIVATE (elt) = TREE_PRIVATE (field);
2603 TREE_PROTECTED (elt) = TREE_PROTECTED (field);
2609 /* Add T to CLASSTYPE_DECL_LIST of current_class_type which
2610 will be used later during class template instantiation.
2611 When FRIEND_P is zero, T can be a static member data (VAR_DECL),
2612 a non-static member data (FIELD_DECL), a member function
2613 (FUNCTION_DECL), a nested type (RECORD_TYPE, ENUM_TYPE),
2614 a typedef (TYPE_DECL) or a member class template (TEMPLATE_DECL)
2615 When FRIEND_P is nonzero, T is either a friend class
2616 (RECORD_TYPE, TEMPLATE_DECL) or a friend function
2617 (FUNCTION_DECL, TEMPLATE_DECL). */
2619 void
2620 maybe_add_class_template_decl_list (tree type, tree t, int friend_p)
2622 /* Save some memory by not creating TREE_LIST if TYPE is not template. */
2623 if (CLASSTYPE_TEMPLATE_INFO (type))
2624 CLASSTYPE_DECL_LIST (type)
2625 = tree_cons (friend_p ? NULL_TREE : type,
2626 t, CLASSTYPE_DECL_LIST (type));
2629 /* This function is called from declare_virt_assop_and_dtor via
2630 dfs_walk_all.
2632 DATA is a type that direcly or indirectly inherits the base
2633 represented by BINFO. If BINFO contains a virtual assignment [copy
2634 assignment or move assigment] operator or a virtual constructor,
2635 declare that function in DATA if it hasn't been already declared. */
2637 static tree
2638 dfs_declare_virt_assop_and_dtor (tree binfo, void *data)
2640 tree bv, fn, t = (tree)data;
2641 tree opname = ansi_assopname (NOP_EXPR);
2643 gcc_assert (t && CLASS_TYPE_P (t));
2644 gcc_assert (binfo && TREE_CODE (binfo) == TREE_BINFO);
2646 if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
2647 /* A base without a vtable needs no modification, and its bases
2648 are uninteresting. */
2649 return dfs_skip_bases;
2651 if (BINFO_PRIMARY_P (binfo))
2652 /* If this is a primary base, then we have already looked at the
2653 virtual functions of its vtable. */
2654 return NULL_TREE;
2656 for (bv = BINFO_VIRTUALS (binfo); bv; bv = TREE_CHAIN (bv))
2658 fn = BV_FN (bv);
2660 if (DECL_NAME (fn) == opname)
2662 if (CLASSTYPE_LAZY_COPY_ASSIGN (t))
2663 lazily_declare_fn (sfk_copy_assignment, t);
2664 if (CLASSTYPE_LAZY_MOVE_ASSIGN (t))
2665 lazily_declare_fn (sfk_move_assignment, t);
2667 else if (DECL_DESTRUCTOR_P (fn)
2668 && CLASSTYPE_LAZY_DESTRUCTOR (t))
2669 lazily_declare_fn (sfk_destructor, t);
2672 return NULL_TREE;
2675 /* If the class type T has a direct or indirect base that contains a
2676 virtual assignment operator or a virtual destructor, declare that
2677 function in T if it hasn't been already declared. */
2679 static void
2680 declare_virt_assop_and_dtor (tree t)
2682 if (!(TYPE_POLYMORPHIC_P (t)
2683 && (CLASSTYPE_LAZY_COPY_ASSIGN (t)
2684 || CLASSTYPE_LAZY_MOVE_ASSIGN (t)
2685 || CLASSTYPE_LAZY_DESTRUCTOR (t))))
2686 return;
2688 dfs_walk_all (TYPE_BINFO (t),
2689 dfs_declare_virt_assop_and_dtor,
2690 NULL, t);
2693 /* Create default constructors, assignment operators, and so forth for
2694 the type indicated by T, if they are needed. CANT_HAVE_CONST_CTOR,
2695 and CANT_HAVE_CONST_ASSIGNMENT are nonzero if, for whatever reason,
2696 the class cannot have a default constructor, copy constructor
2697 taking a const reference argument, or an assignment operator taking
2698 a const reference, respectively. */
2700 static void
2701 add_implicitly_declared_members (tree t,
2702 int cant_have_const_cctor,
2703 int cant_have_const_assignment)
2705 /* Destructor. */
2706 if (!CLASSTYPE_DESTRUCTORS (t))
2708 /* In general, we create destructors lazily. */
2709 CLASSTYPE_LAZY_DESTRUCTOR (t) = 1;
2711 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
2712 && TYPE_FOR_JAVA (t))
2713 /* But if this is a Java class, any non-trivial destructor is
2714 invalid, even if compiler-generated. Therefore, if the
2715 destructor is non-trivial we create it now. */
2716 lazily_declare_fn (sfk_destructor, t);
2719 /* [class.ctor]
2721 If there is no user-declared constructor for a class, a default
2722 constructor is implicitly declared. */
2723 if (! TYPE_HAS_USER_CONSTRUCTOR (t))
2725 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 1;
2726 CLASSTYPE_LAZY_DEFAULT_CTOR (t) = 1;
2727 if (cxx_dialect >= cxx0x)
2728 TYPE_HAS_CONSTEXPR_CTOR (t)
2729 = synthesized_default_constructor_is_constexpr (t);
2732 /* [class.ctor]
2734 If a class definition does not explicitly declare a copy
2735 constructor, one is declared implicitly. */
2736 if (! TYPE_HAS_COPY_CTOR (t) && ! TYPE_FOR_JAVA (t)
2737 && !type_has_move_constructor (t))
2739 TYPE_HAS_COPY_CTOR (t) = 1;
2740 TYPE_HAS_CONST_COPY_CTOR (t) = !cant_have_const_cctor;
2741 CLASSTYPE_LAZY_COPY_CTOR (t) = 1;
2742 if (cxx_dialect >= cxx0x)
2743 CLASSTYPE_LAZY_MOVE_CTOR (t) = 1;
2746 /* If there is no assignment operator, one will be created if and
2747 when it is needed. For now, just record whether or not the type
2748 of the parameter to the assignment operator will be a const or
2749 non-const reference. */
2750 if (!TYPE_HAS_COPY_ASSIGN (t) && !TYPE_FOR_JAVA (t)
2751 && !type_has_move_assign (t))
2753 TYPE_HAS_COPY_ASSIGN (t) = 1;
2754 TYPE_HAS_CONST_COPY_ASSIGN (t) = !cant_have_const_assignment;
2755 CLASSTYPE_LAZY_COPY_ASSIGN (t) = 1;
2756 if (cxx_dialect >= cxx0x)
2757 CLASSTYPE_LAZY_MOVE_ASSIGN (t) = 1;
2760 /* We can't be lazy about declaring functions that might override
2761 a virtual function from a base class. */
2762 declare_virt_assop_and_dtor (t);
2765 /* Subroutine of finish_struct_1. Recursively count the number of fields
2766 in TYPE, including anonymous union members. */
2768 static int
2769 count_fields (tree fields)
2771 tree x;
2772 int n_fields = 0;
2773 for (x = fields; x; x = DECL_CHAIN (x))
2775 if (TREE_CODE (x) == FIELD_DECL && ANON_AGGR_TYPE_P (TREE_TYPE (x)))
2776 n_fields += count_fields (TYPE_FIELDS (TREE_TYPE (x)));
2777 else
2778 n_fields += 1;
2780 return n_fields;
2783 /* Subroutine of finish_struct_1. Recursively add all the fields in the
2784 TREE_LIST FIELDS to the SORTED_FIELDS_TYPE elts, starting at offset IDX. */
2786 static int
2787 add_fields_to_record_type (tree fields, struct sorted_fields_type *field_vec, int idx)
2789 tree x;
2790 for (x = fields; x; x = DECL_CHAIN (x))
2792 if (TREE_CODE (x) == FIELD_DECL && ANON_AGGR_TYPE_P (TREE_TYPE (x)))
2793 idx = add_fields_to_record_type (TYPE_FIELDS (TREE_TYPE (x)), field_vec, idx);
2794 else
2795 field_vec->elts[idx++] = x;
2797 return idx;
2800 /* FIELD is a bit-field. We are finishing the processing for its
2801 enclosing type. Issue any appropriate messages and set appropriate
2802 flags. Returns false if an error has been diagnosed. */
2804 static bool
2805 check_bitfield_decl (tree field)
2807 tree type = TREE_TYPE (field);
2808 tree w;
2810 /* Extract the declared width of the bitfield, which has been
2811 temporarily stashed in DECL_INITIAL. */
2812 w = DECL_INITIAL (field);
2813 gcc_assert (w != NULL_TREE);
2814 /* Remove the bit-field width indicator so that the rest of the
2815 compiler does not treat that value as an initializer. */
2816 DECL_INITIAL (field) = NULL_TREE;
2818 /* Detect invalid bit-field type. */
2819 if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
2821 error ("bit-field %q+#D with non-integral type", field);
2822 w = error_mark_node;
2824 else
2826 location_t loc = input_location;
2827 /* Avoid the non_lvalue wrapper added by fold for PLUS_EXPRs. */
2828 STRIP_NOPS (w);
2830 /* detect invalid field size. */
2831 input_location = DECL_SOURCE_LOCATION (field);
2832 w = cxx_constant_value (w);
2833 input_location = loc;
2835 if (TREE_CODE (w) != INTEGER_CST)
2837 error ("bit-field %q+D width not an integer constant", field);
2838 w = error_mark_node;
2840 else if (tree_int_cst_sgn (w) < 0)
2842 error ("negative width in bit-field %q+D", field);
2843 w = error_mark_node;
2845 else if (integer_zerop (w) && DECL_NAME (field) != 0)
2847 error ("zero width for bit-field %q+D", field);
2848 w = error_mark_node;
2850 else if (compare_tree_int (w, TYPE_PRECISION (type)) > 0
2851 && TREE_CODE (type) != ENUMERAL_TYPE
2852 && TREE_CODE (type) != BOOLEAN_TYPE)
2853 warning (0, "width of %q+D exceeds its type", field);
2854 else if (TREE_CODE (type) == ENUMERAL_TYPE
2855 && (0 > (compare_tree_int
2856 (w, TYPE_PRECISION (ENUM_UNDERLYING_TYPE (type))))))
2857 warning (0, "%q+D is too small to hold all values of %q#T", field, type);
2860 if (w != error_mark_node)
2862 DECL_SIZE (field) = convert (bitsizetype, w);
2863 DECL_BIT_FIELD (field) = 1;
2864 return true;
2866 else
2868 /* Non-bit-fields are aligned for their type. */
2869 DECL_BIT_FIELD (field) = 0;
2870 CLEAR_DECL_C_BIT_FIELD (field);
2871 return false;
2875 /* FIELD is a non bit-field. We are finishing the processing for its
2876 enclosing type T. Issue any appropriate messages and set appropriate
2877 flags. */
2879 static void
2880 check_field_decl (tree field,
2881 tree t,
2882 int* cant_have_const_ctor,
2883 int* no_const_asn_ref,
2884 int* any_default_members)
2886 tree type = strip_array_types (TREE_TYPE (field));
2888 /* In C++98 an anonymous union cannot contain any fields which would change
2889 the settings of CANT_HAVE_CONST_CTOR and friends. */
2890 if (ANON_UNION_TYPE_P (type) && cxx_dialect < cxx0x)
2892 /* And, we don't set TYPE_HAS_CONST_COPY_CTOR, etc., for anonymous
2893 structs. So, we recurse through their fields here. */
2894 else if (ANON_AGGR_TYPE_P (type))
2896 tree fields;
2898 for (fields = TYPE_FIELDS (type); fields; fields = DECL_CHAIN (fields))
2899 if (TREE_CODE (fields) == FIELD_DECL && !DECL_C_BIT_FIELD (field))
2900 check_field_decl (fields, t, cant_have_const_ctor,
2901 no_const_asn_ref, any_default_members);
2903 /* Check members with class type for constructors, destructors,
2904 etc. */
2905 else if (CLASS_TYPE_P (type))
2907 /* Never let anything with uninheritable virtuals
2908 make it through without complaint. */
2909 abstract_virtuals_error (field, type);
2911 if (TREE_CODE (t) == UNION_TYPE && cxx_dialect < cxx0x)
2913 static bool warned;
2914 int oldcount = errorcount;
2915 if (TYPE_NEEDS_CONSTRUCTING (type))
2916 error ("member %q+#D with constructor not allowed in union",
2917 field);
2918 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
2919 error ("member %q+#D with destructor not allowed in union", field);
2920 if (TYPE_HAS_COMPLEX_COPY_ASSIGN (type))
2921 error ("member %q+#D with copy assignment operator not allowed in union",
2922 field);
2923 if (!warned && errorcount > oldcount)
2925 inform (DECL_SOURCE_LOCATION (field), "unrestricted unions "
2926 "only available with -std=c++0x or -std=gnu++0x");
2927 warned = true;
2930 else
2932 TYPE_NEEDS_CONSTRUCTING (t) |= TYPE_NEEDS_CONSTRUCTING (type);
2933 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
2934 |= TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type);
2935 TYPE_HAS_COMPLEX_COPY_ASSIGN (t)
2936 |= (TYPE_HAS_COMPLEX_COPY_ASSIGN (type)
2937 || !TYPE_HAS_COPY_ASSIGN (type));
2938 TYPE_HAS_COMPLEX_COPY_CTOR (t) |= (TYPE_HAS_COMPLEX_COPY_CTOR (type)
2939 || !TYPE_HAS_COPY_CTOR (type));
2940 TYPE_HAS_COMPLEX_MOVE_ASSIGN (t) |= TYPE_HAS_COMPLEX_MOVE_ASSIGN (type);
2941 TYPE_HAS_COMPLEX_MOVE_CTOR (t) |= TYPE_HAS_COMPLEX_MOVE_CTOR (type);
2942 TYPE_HAS_COMPLEX_DFLT (t) |= (!TYPE_HAS_DEFAULT_CONSTRUCTOR (type)
2943 || TYPE_HAS_COMPLEX_DFLT (type));
2946 if (TYPE_HAS_COPY_CTOR (type)
2947 && !TYPE_HAS_CONST_COPY_CTOR (type))
2948 *cant_have_const_ctor = 1;
2950 if (TYPE_HAS_COPY_ASSIGN (type)
2951 && !TYPE_HAS_CONST_COPY_ASSIGN (type))
2952 *no_const_asn_ref = 1;
2954 if (DECL_INITIAL (field) != NULL_TREE)
2956 /* `build_class_init_list' does not recognize
2957 non-FIELD_DECLs. */
2958 if (TREE_CODE (t) == UNION_TYPE && any_default_members != 0)
2959 error ("multiple fields in union %qT initialized", t);
2960 *any_default_members = 1;
2964 /* Check the data members (both static and non-static), class-scoped
2965 typedefs, etc., appearing in the declaration of T. Issue
2966 appropriate diagnostics. Sets ACCESS_DECLS to a list (in
2967 declaration order) of access declarations; each TREE_VALUE in this
2968 list is a USING_DECL.
2970 In addition, set the following flags:
2972 EMPTY_P
2973 The class is empty, i.e., contains no non-static data members.
2975 CANT_HAVE_CONST_CTOR_P
2976 This class cannot have an implicitly generated copy constructor
2977 taking a const reference.
2979 CANT_HAVE_CONST_ASN_REF
2980 This class cannot have an implicitly generated assignment
2981 operator taking a const reference.
2983 All of these flags should be initialized before calling this
2984 function.
2986 Returns a pointer to the end of the TYPE_FIELDs chain; additional
2987 fields can be added by adding to this chain. */
2989 static void
2990 check_field_decls (tree t, tree *access_decls,
2991 int *cant_have_const_ctor_p,
2992 int *no_const_asn_ref_p)
2994 tree *field;
2995 tree *next;
2996 bool has_pointers;
2997 int any_default_members;
2998 int cant_pack = 0;
2999 int field_access = -1;
3001 /* Assume there are no access declarations. */
3002 *access_decls = NULL_TREE;
3003 /* Assume this class has no pointer members. */
3004 has_pointers = false;
3005 /* Assume none of the members of this class have default
3006 initializations. */
3007 any_default_members = 0;
3009 for (field = &TYPE_FIELDS (t); *field; field = next)
3011 tree x = *field;
3012 tree type = TREE_TYPE (x);
3013 int this_field_access;
3015 next = &DECL_CHAIN (x);
3017 if (TREE_CODE (x) == USING_DECL)
3019 /* Prune the access declaration from the list of fields. */
3020 *field = DECL_CHAIN (x);
3022 /* Save the access declarations for our caller. */
3023 *access_decls = tree_cons (NULL_TREE, x, *access_decls);
3025 /* Since we've reset *FIELD there's no reason to skip to the
3026 next field. */
3027 next = field;
3028 continue;
3031 if (TREE_CODE (x) == TYPE_DECL
3032 || TREE_CODE (x) == TEMPLATE_DECL)
3033 continue;
3035 /* If we've gotten this far, it's a data member, possibly static,
3036 or an enumerator. */
3037 DECL_CONTEXT (x) = t;
3039 /* When this goes into scope, it will be a non-local reference. */
3040 DECL_NONLOCAL (x) = 1;
3042 if (TREE_CODE (t) == UNION_TYPE)
3044 /* [class.union]
3046 If a union contains a static data member, or a member of
3047 reference type, the program is ill-formed. */
3048 if (TREE_CODE (x) == VAR_DECL)
3050 error ("%q+D may not be static because it is a member of a union", x);
3051 continue;
3053 if (TREE_CODE (type) == REFERENCE_TYPE)
3055 error ("%q+D may not have reference type %qT because"
3056 " it is a member of a union",
3057 x, type);
3058 continue;
3062 /* Perform error checking that did not get done in
3063 grokdeclarator. */
3064 if (TREE_CODE (type) == FUNCTION_TYPE)
3066 error ("field %q+D invalidly declared function type", x);
3067 type = build_pointer_type (type);
3068 TREE_TYPE (x) = type;
3070 else if (TREE_CODE (type) == METHOD_TYPE)
3072 error ("field %q+D invalidly declared method type", x);
3073 type = build_pointer_type (type);
3074 TREE_TYPE (x) = type;
3077 if (type == error_mark_node)
3078 continue;
3080 if (TREE_CODE (x) == CONST_DECL || TREE_CODE (x) == VAR_DECL)
3081 continue;
3083 /* Now it can only be a FIELD_DECL. */
3085 if (TREE_PRIVATE (x) || TREE_PROTECTED (x))
3086 CLASSTYPE_NON_AGGREGATE (t) = 1;
3088 /* If at least one non-static data member is non-literal, the whole
3089 class becomes non-literal. */
3090 if (!literal_type_p (type))
3091 CLASSTYPE_LITERAL_P (t) = false;
3093 /* A standard-layout class is a class that:
3095 has the same access control (Clause 11) for all non-static data members,
3096 ... */
3097 this_field_access = TREE_PROTECTED (x) ? 1 : TREE_PRIVATE (x) ? 2 : 0;
3098 if (field_access == -1)
3099 field_access = this_field_access;
3100 else if (this_field_access != field_access)
3101 CLASSTYPE_NON_STD_LAYOUT (t) = 1;
3103 /* If this is of reference type, check if it needs an init. */
3104 if (TREE_CODE (type) == REFERENCE_TYPE)
3106 CLASSTYPE_NON_LAYOUT_POD_P (t) = 1;
3107 CLASSTYPE_NON_STD_LAYOUT (t) = 1;
3108 if (DECL_INITIAL (x) == NULL_TREE)
3109 SET_CLASSTYPE_REF_FIELDS_NEED_INIT (t, 1);
3111 /* ARM $12.6.2: [A member initializer list] (or, for an
3112 aggregate, initialization by a brace-enclosed list) is the
3113 only way to initialize nonstatic const and reference
3114 members. */
3115 TYPE_HAS_COMPLEX_COPY_ASSIGN (t) = 1;
3116 TYPE_HAS_COMPLEX_MOVE_ASSIGN (t) = 1;
3119 type = strip_array_types (type);
3121 if (TYPE_PACKED (t))
3123 if (!layout_pod_type_p (type) && !TYPE_PACKED (type))
3125 warning
3127 "ignoring packed attribute because of unpacked non-POD field %q+#D",
3129 cant_pack = 1;
3131 else if (DECL_C_BIT_FIELD (x)
3132 || TYPE_ALIGN (TREE_TYPE (x)) > BITS_PER_UNIT)
3133 DECL_PACKED (x) = 1;
3136 if (DECL_C_BIT_FIELD (x) && integer_zerop (DECL_INITIAL (x)))
3137 /* We don't treat zero-width bitfields as making a class
3138 non-empty. */
3140 else
3142 /* The class is non-empty. */
3143 CLASSTYPE_EMPTY_P (t) = 0;
3144 /* The class is not even nearly empty. */
3145 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
3146 /* If one of the data members contains an empty class,
3147 so does T. */
3148 if (CLASS_TYPE_P (type)
3149 && CLASSTYPE_CONTAINS_EMPTY_CLASS_P (type))
3150 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) = 1;
3153 /* This is used by -Weffc++ (see below). Warn only for pointers
3154 to members which might hold dynamic memory. So do not warn
3155 for pointers to functions or pointers to members. */
3156 if (TYPE_PTR_P (type)
3157 && !TYPE_PTRFN_P (type)
3158 && !TYPE_PTR_TO_MEMBER_P (type))
3159 has_pointers = true;
3161 if (CLASS_TYPE_P (type))
3163 if (CLASSTYPE_REF_FIELDS_NEED_INIT (type))
3164 SET_CLASSTYPE_REF_FIELDS_NEED_INIT (t, 1);
3165 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (type))
3166 SET_CLASSTYPE_READONLY_FIELDS_NEED_INIT (t, 1);
3169 if (DECL_MUTABLE_P (x) || TYPE_HAS_MUTABLE_P (type))
3170 CLASSTYPE_HAS_MUTABLE (t) = 1;
3172 if (! layout_pod_type_p (type))
3173 /* DR 148 now allows pointers to members (which are POD themselves),
3174 to be allowed in POD structs. */
3175 CLASSTYPE_NON_LAYOUT_POD_P (t) = 1;
3177 if (!std_layout_type_p (type))
3178 CLASSTYPE_NON_STD_LAYOUT (t) = 1;
3180 if (! zero_init_p (type))
3181 CLASSTYPE_NON_ZERO_INIT_P (t) = 1;
3183 /* We set DECL_C_BIT_FIELD in grokbitfield.
3184 If the type and width are valid, we'll also set DECL_BIT_FIELD. */
3185 if (! DECL_C_BIT_FIELD (x) || ! check_bitfield_decl (x))
3186 check_field_decl (x, t,
3187 cant_have_const_ctor_p,
3188 no_const_asn_ref_p,
3189 &any_default_members);
3191 /* If any field is const, the structure type is pseudo-const. */
3192 if (CP_TYPE_CONST_P (type))
3194 C_TYPE_FIELDS_READONLY (t) = 1;
3195 if (DECL_INITIAL (x) == NULL_TREE)
3196 SET_CLASSTYPE_READONLY_FIELDS_NEED_INIT (t, 1);
3198 /* ARM $12.6.2: [A member initializer list] (or, for an
3199 aggregate, initialization by a brace-enclosed list) is the
3200 only way to initialize nonstatic const and reference
3201 members. */
3202 TYPE_HAS_COMPLEX_COPY_ASSIGN (t) = 1;
3203 TYPE_HAS_COMPLEX_MOVE_ASSIGN (t) = 1;
3205 /* A field that is pseudo-const makes the structure likewise. */
3206 else if (CLASS_TYPE_P (type))
3208 C_TYPE_FIELDS_READONLY (t) |= C_TYPE_FIELDS_READONLY (type);
3209 SET_CLASSTYPE_READONLY_FIELDS_NEED_INIT (t,
3210 CLASSTYPE_READONLY_FIELDS_NEED_INIT (t)
3211 | CLASSTYPE_READONLY_FIELDS_NEED_INIT (type));
3214 /* Core issue 80: A nonstatic data member is required to have a
3215 different name from the class iff the class has a
3216 user-declared constructor. */
3217 if (constructor_name_p (DECL_NAME (x), t)
3218 && TYPE_HAS_USER_CONSTRUCTOR (t))
3219 permerror (input_location, "field %q+#D with same name as class", x);
3222 /* Effective C++ rule 11: if a class has dynamic memory held by pointers,
3223 it should also define a copy constructor and an assignment operator to
3224 implement the correct copy semantic (deep vs shallow, etc.). As it is
3225 not feasible to check whether the constructors do allocate dynamic memory
3226 and store it within members, we approximate the warning like this:
3228 -- Warn only if there are members which are pointers
3229 -- Warn only if there is a non-trivial constructor (otherwise,
3230 there cannot be memory allocated).
3231 -- Warn only if there is a non-trivial destructor. We assume that the
3232 user at least implemented the cleanup correctly, and a destructor
3233 is needed to free dynamic memory.
3235 This seems enough for practical purposes. */
3236 if (warn_ecpp
3237 && has_pointers
3238 && TYPE_HAS_USER_CONSTRUCTOR (t)
3239 && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
3240 && !(TYPE_HAS_COPY_CTOR (t) && TYPE_HAS_COPY_ASSIGN (t)))
3242 warning (OPT_Weffc__, "%q#T has pointer data members", t);
3244 if (! TYPE_HAS_COPY_CTOR (t))
3246 warning (OPT_Weffc__,
3247 " but does not override %<%T(const %T&)%>", t, t);
3248 if (!TYPE_HAS_COPY_ASSIGN (t))
3249 warning (OPT_Weffc__, " or %<operator=(const %T&)%>", t);
3251 else if (! TYPE_HAS_COPY_ASSIGN (t))
3252 warning (OPT_Weffc__,
3253 " but does not override %<operator=(const %T&)%>", t);
3256 /* If any of the fields couldn't be packed, unset TYPE_PACKED. */
3257 if (cant_pack)
3258 TYPE_PACKED (t) = 0;
3260 /* Check anonymous struct/anonymous union fields. */
3261 finish_struct_anon (t);
3263 /* We've built up the list of access declarations in reverse order.
3264 Fix that now. */
3265 *access_decls = nreverse (*access_decls);
3268 /* If TYPE is an empty class type, records its OFFSET in the table of
3269 OFFSETS. */
3271 static int
3272 record_subobject_offset (tree type, tree offset, splay_tree offsets)
3274 splay_tree_node n;
3276 if (!is_empty_class (type))
3277 return 0;
3279 /* Record the location of this empty object in OFFSETS. */
3280 n = splay_tree_lookup (offsets, (splay_tree_key) offset);
3281 if (!n)
3282 n = splay_tree_insert (offsets,
3283 (splay_tree_key) offset,
3284 (splay_tree_value) NULL_TREE);
3285 n->value = ((splay_tree_value)
3286 tree_cons (NULL_TREE,
3287 type,
3288 (tree) n->value));
3290 return 0;
3293 /* Returns nonzero if TYPE is an empty class type and there is
3294 already an entry in OFFSETS for the same TYPE as the same OFFSET. */
3296 static int
3297 check_subobject_offset (tree type, tree offset, splay_tree offsets)
3299 splay_tree_node n;
3300 tree t;
3302 if (!is_empty_class (type))
3303 return 0;
3305 /* Record the location of this empty object in OFFSETS. */
3306 n = splay_tree_lookup (offsets, (splay_tree_key) offset);
3307 if (!n)
3308 return 0;
3310 for (t = (tree) n->value; t; t = TREE_CHAIN (t))
3311 if (same_type_p (TREE_VALUE (t), type))
3312 return 1;
3314 return 0;
3317 /* Walk through all the subobjects of TYPE (located at OFFSET). Call
3318 F for every subobject, passing it the type, offset, and table of
3319 OFFSETS. If VBASES_P is one, then virtual non-primary bases should
3320 be traversed.
3322 If MAX_OFFSET is non-NULL, then subobjects with an offset greater
3323 than MAX_OFFSET will not be walked.
3325 If F returns a nonzero value, the traversal ceases, and that value
3326 is returned. Otherwise, returns zero. */
3328 static int
3329 walk_subobject_offsets (tree type,
3330 subobject_offset_fn f,
3331 tree offset,
3332 splay_tree offsets,
3333 tree max_offset,
3334 int vbases_p)
3336 int r = 0;
3337 tree type_binfo = NULL_TREE;
3339 /* If this OFFSET is bigger than the MAX_OFFSET, then we should
3340 stop. */
3341 if (max_offset && INT_CST_LT (max_offset, offset))
3342 return 0;
3344 if (type == error_mark_node)
3345 return 0;
3347 if (!TYPE_P (type))
3349 if (abi_version_at_least (2))
3350 type_binfo = type;
3351 type = BINFO_TYPE (type);
3354 if (CLASS_TYPE_P (type))
3356 tree field;
3357 tree binfo;
3358 int i;
3360 /* Avoid recursing into objects that are not interesting. */
3361 if (!CLASSTYPE_CONTAINS_EMPTY_CLASS_P (type))
3362 return 0;
3364 /* Record the location of TYPE. */
3365 r = (*f) (type, offset, offsets);
3366 if (r)
3367 return r;
3369 /* Iterate through the direct base classes of TYPE. */
3370 if (!type_binfo)
3371 type_binfo = TYPE_BINFO (type);
3372 for (i = 0; BINFO_BASE_ITERATE (type_binfo, i, binfo); i++)
3374 tree binfo_offset;
3376 if (abi_version_at_least (2)
3377 && BINFO_VIRTUAL_P (binfo))
3378 continue;
3380 if (!vbases_p
3381 && BINFO_VIRTUAL_P (binfo)
3382 && !BINFO_PRIMARY_P (binfo))
3383 continue;
3385 if (!abi_version_at_least (2))
3386 binfo_offset = size_binop (PLUS_EXPR,
3387 offset,
3388 BINFO_OFFSET (binfo));
3389 else
3391 tree orig_binfo;
3392 /* We cannot rely on BINFO_OFFSET being set for the base
3393 class yet, but the offsets for direct non-virtual
3394 bases can be calculated by going back to the TYPE. */
3395 orig_binfo = BINFO_BASE_BINFO (TYPE_BINFO (type), i);
3396 binfo_offset = size_binop (PLUS_EXPR,
3397 offset,
3398 BINFO_OFFSET (orig_binfo));
3401 r = walk_subobject_offsets (binfo,
3403 binfo_offset,
3404 offsets,
3405 max_offset,
3406 (abi_version_at_least (2)
3407 ? /*vbases_p=*/0 : vbases_p));
3408 if (r)
3409 return r;
3412 if (abi_version_at_least (2) && CLASSTYPE_VBASECLASSES (type))
3414 unsigned ix;
3415 VEC(tree,gc) *vbases;
3417 /* Iterate through the virtual base classes of TYPE. In G++
3418 3.2, we included virtual bases in the direct base class
3419 loop above, which results in incorrect results; the
3420 correct offsets for virtual bases are only known when
3421 working with the most derived type. */
3422 if (vbases_p)
3423 for (vbases = CLASSTYPE_VBASECLASSES (type), ix = 0;
3424 VEC_iterate (tree, vbases, ix, binfo); ix++)
3426 r = walk_subobject_offsets (binfo,
3428 size_binop (PLUS_EXPR,
3429 offset,
3430 BINFO_OFFSET (binfo)),
3431 offsets,
3432 max_offset,
3433 /*vbases_p=*/0);
3434 if (r)
3435 return r;
3437 else
3439 /* We still have to walk the primary base, if it is
3440 virtual. (If it is non-virtual, then it was walked
3441 above.) */
3442 tree vbase = get_primary_binfo (type_binfo);
3444 if (vbase && BINFO_VIRTUAL_P (vbase)
3445 && BINFO_PRIMARY_P (vbase)
3446 && BINFO_INHERITANCE_CHAIN (vbase) == type_binfo)
3448 r = (walk_subobject_offsets
3449 (vbase, f, offset,
3450 offsets, max_offset, /*vbases_p=*/0));
3451 if (r)
3452 return r;
3457 /* Iterate through the fields of TYPE. */
3458 for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
3459 if (TREE_CODE (field) == FIELD_DECL && !DECL_ARTIFICIAL (field))
3461 tree field_offset;
3463 if (abi_version_at_least (2))
3464 field_offset = byte_position (field);
3465 else
3466 /* In G++ 3.2, DECL_FIELD_OFFSET was used. */
3467 field_offset = DECL_FIELD_OFFSET (field);
3469 r = walk_subobject_offsets (TREE_TYPE (field),
3471 size_binop (PLUS_EXPR,
3472 offset,
3473 field_offset),
3474 offsets,
3475 max_offset,
3476 /*vbases_p=*/1);
3477 if (r)
3478 return r;
3481 else if (TREE_CODE (type) == ARRAY_TYPE)
3483 tree element_type = strip_array_types (type);
3484 tree domain = TYPE_DOMAIN (type);
3485 tree index;
3487 /* Avoid recursing into objects that are not interesting. */
3488 if (!CLASS_TYPE_P (element_type)
3489 || !CLASSTYPE_CONTAINS_EMPTY_CLASS_P (element_type))
3490 return 0;
3492 /* Step through each of the elements in the array. */
3493 for (index = size_zero_node;
3494 /* G++ 3.2 had an off-by-one error here. */
3495 (abi_version_at_least (2)
3496 ? !INT_CST_LT (TYPE_MAX_VALUE (domain), index)
3497 : INT_CST_LT (index, TYPE_MAX_VALUE (domain)));
3498 index = size_binop (PLUS_EXPR, index, size_one_node))
3500 r = walk_subobject_offsets (TREE_TYPE (type),
3502 offset,
3503 offsets,
3504 max_offset,
3505 /*vbases_p=*/1);
3506 if (r)
3507 return r;
3508 offset = size_binop (PLUS_EXPR, offset,
3509 TYPE_SIZE_UNIT (TREE_TYPE (type)));
3510 /* If this new OFFSET is bigger than the MAX_OFFSET, then
3511 there's no point in iterating through the remaining
3512 elements of the array. */
3513 if (max_offset && INT_CST_LT (max_offset, offset))
3514 break;
3518 return 0;
3521 /* Record all of the empty subobjects of TYPE (either a type or a
3522 binfo). If IS_DATA_MEMBER is true, then a non-static data member
3523 is being placed at OFFSET; otherwise, it is a base class that is
3524 being placed at OFFSET. */
3526 static void
3527 record_subobject_offsets (tree type,
3528 tree offset,
3529 splay_tree offsets,
3530 bool is_data_member)
3532 tree max_offset;
3533 /* If recording subobjects for a non-static data member or a
3534 non-empty base class , we do not need to record offsets beyond
3535 the size of the biggest empty class. Additional data members
3536 will go at the end of the class. Additional base classes will go
3537 either at offset zero (if empty, in which case they cannot
3538 overlap with offsets past the size of the biggest empty class) or
3539 at the end of the class.
3541 However, if we are placing an empty base class, then we must record
3542 all offsets, as either the empty class is at offset zero (where
3543 other empty classes might later be placed) or at the end of the
3544 class (where other objects might then be placed, so other empty
3545 subobjects might later overlap). */
3546 if (is_data_member
3547 || !is_empty_class (BINFO_TYPE (type)))
3548 max_offset = sizeof_biggest_empty_class;
3549 else
3550 max_offset = NULL_TREE;
3551 walk_subobject_offsets (type, record_subobject_offset, offset,
3552 offsets, max_offset, is_data_member);
3555 /* Returns nonzero if any of the empty subobjects of TYPE (located at
3556 OFFSET) conflict with entries in OFFSETS. If VBASES_P is nonzero,
3557 virtual bases of TYPE are examined. */
3559 static int
3560 layout_conflict_p (tree type,
3561 tree offset,
3562 splay_tree offsets,
3563 int vbases_p)
3565 splay_tree_node max_node;
3567 /* Get the node in OFFSETS that indicates the maximum offset where
3568 an empty subobject is located. */
3569 max_node = splay_tree_max (offsets);
3570 /* If there aren't any empty subobjects, then there's no point in
3571 performing this check. */
3572 if (!max_node)
3573 return 0;
3575 return walk_subobject_offsets (type, check_subobject_offset, offset,
3576 offsets, (tree) (max_node->key),
3577 vbases_p);
3580 /* DECL is a FIELD_DECL corresponding either to a base subobject of a
3581 non-static data member of the type indicated by RLI. BINFO is the
3582 binfo corresponding to the base subobject, OFFSETS maps offsets to
3583 types already located at those offsets. This function determines
3584 the position of the DECL. */
3586 static void
3587 layout_nonempty_base_or_field (record_layout_info rli,
3588 tree decl,
3589 tree binfo,
3590 splay_tree offsets)
3592 tree offset = NULL_TREE;
3593 bool field_p;
3594 tree type;
3596 if (binfo)
3598 /* For the purposes of determining layout conflicts, we want to
3599 use the class type of BINFO; TREE_TYPE (DECL) will be the
3600 CLASSTYPE_AS_BASE version, which does not contain entries for
3601 zero-sized bases. */
3602 type = TREE_TYPE (binfo);
3603 field_p = false;
3605 else
3607 type = TREE_TYPE (decl);
3608 field_p = true;
3611 /* Try to place the field. It may take more than one try if we have
3612 a hard time placing the field without putting two objects of the
3613 same type at the same address. */
3614 while (1)
3616 struct record_layout_info_s old_rli = *rli;
3618 /* Place this field. */
3619 place_field (rli, decl);
3620 offset = byte_position (decl);
3622 /* We have to check to see whether or not there is already
3623 something of the same type at the offset we're about to use.
3624 For example, consider:
3626 struct S {};
3627 struct T : public S { int i; };
3628 struct U : public S, public T {};
3630 Here, we put S at offset zero in U. Then, we can't put T at
3631 offset zero -- its S component would be at the same address
3632 as the S we already allocated. So, we have to skip ahead.
3633 Since all data members, including those whose type is an
3634 empty class, have nonzero size, any overlap can happen only
3635 with a direct or indirect base-class -- it can't happen with
3636 a data member. */
3637 /* In a union, overlap is permitted; all members are placed at
3638 offset zero. */
3639 if (TREE_CODE (rli->t) == UNION_TYPE)
3640 break;
3641 /* G++ 3.2 did not check for overlaps when placing a non-empty
3642 virtual base. */
3643 if (!abi_version_at_least (2) && binfo && BINFO_VIRTUAL_P (binfo))
3644 break;
3645 if (layout_conflict_p (field_p ? type : binfo, offset,
3646 offsets, field_p))
3648 /* Strip off the size allocated to this field. That puts us
3649 at the first place we could have put the field with
3650 proper alignment. */
3651 *rli = old_rli;
3653 /* Bump up by the alignment required for the type. */
3654 rli->bitpos
3655 = size_binop (PLUS_EXPR, rli->bitpos,
3656 bitsize_int (binfo
3657 ? CLASSTYPE_ALIGN (type)
3658 : TYPE_ALIGN (type)));
3659 normalize_rli (rli);
3661 else
3662 /* There was no conflict. We're done laying out this field. */
3663 break;
3666 /* Now that we know where it will be placed, update its
3667 BINFO_OFFSET. */
3668 if (binfo && CLASS_TYPE_P (BINFO_TYPE (binfo)))
3669 /* Indirect virtual bases may have a nonzero BINFO_OFFSET at
3670 this point because their BINFO_OFFSET is copied from another
3671 hierarchy. Therefore, we may not need to add the entire
3672 OFFSET. */
3673 propagate_binfo_offsets (binfo,
3674 size_diffop_loc (input_location,
3675 convert (ssizetype, offset),
3676 convert (ssizetype,
3677 BINFO_OFFSET (binfo))));
3680 /* Returns true if TYPE is empty and OFFSET is nonzero. */
3682 static int
3683 empty_base_at_nonzero_offset_p (tree type,
3684 tree offset,
3685 splay_tree offsets ATTRIBUTE_UNUSED)
3687 return is_empty_class (type) && !integer_zerop (offset);
3690 /* Layout the empty base BINFO. EOC indicates the byte currently just
3691 past the end of the class, and should be correctly aligned for a
3692 class of the type indicated by BINFO; OFFSETS gives the offsets of
3693 the empty bases allocated so far. T is the most derived
3694 type. Return nonzero iff we added it at the end. */
3696 static bool
3697 layout_empty_base (record_layout_info rli, tree binfo,
3698 tree eoc, splay_tree offsets)
3700 tree alignment;
3701 tree basetype = BINFO_TYPE (binfo);
3702 bool atend = false;
3704 /* This routine should only be used for empty classes. */
3705 gcc_assert (is_empty_class (basetype));
3706 alignment = ssize_int (CLASSTYPE_ALIGN_UNIT (basetype));
3708 if (!integer_zerop (BINFO_OFFSET (binfo)))
3710 if (abi_version_at_least (2))
3711 propagate_binfo_offsets
3712 (binfo, size_diffop_loc (input_location,
3713 size_zero_node, BINFO_OFFSET (binfo)));
3714 else
3715 warning (OPT_Wabi,
3716 "offset of empty base %qT may not be ABI-compliant and may"
3717 "change in a future version of GCC",
3718 BINFO_TYPE (binfo));
3721 /* This is an empty base class. We first try to put it at offset
3722 zero. */
3723 if (layout_conflict_p (binfo,
3724 BINFO_OFFSET (binfo),
3725 offsets,
3726 /*vbases_p=*/0))
3728 /* That didn't work. Now, we move forward from the next
3729 available spot in the class. */
3730 atend = true;
3731 propagate_binfo_offsets (binfo, convert (ssizetype, eoc));
3732 while (1)
3734 if (!layout_conflict_p (binfo,
3735 BINFO_OFFSET (binfo),
3736 offsets,
3737 /*vbases_p=*/0))
3738 /* We finally found a spot where there's no overlap. */
3739 break;
3741 /* There's overlap here, too. Bump along to the next spot. */
3742 propagate_binfo_offsets (binfo, alignment);
3746 if (CLASSTYPE_USER_ALIGN (basetype))
3748 rli->record_align = MAX (rli->record_align, CLASSTYPE_ALIGN (basetype));
3749 if (warn_packed)
3750 rli->unpacked_align = MAX (rli->unpacked_align, CLASSTYPE_ALIGN (basetype));
3751 TYPE_USER_ALIGN (rli->t) = 1;
3754 return atend;
3757 /* Layout the base given by BINFO in the class indicated by RLI.
3758 *BASE_ALIGN is a running maximum of the alignments of
3759 any base class. OFFSETS gives the location of empty base
3760 subobjects. T is the most derived type. Return nonzero if the new
3761 object cannot be nearly-empty. A new FIELD_DECL is inserted at
3762 *NEXT_FIELD, unless BINFO is for an empty base class.
3764 Returns the location at which the next field should be inserted. */
3766 static tree *
3767 build_base_field (record_layout_info rli, tree binfo,
3768 splay_tree offsets, tree *next_field)
3770 tree t = rli->t;
3771 tree basetype = BINFO_TYPE (binfo);
3773 if (!COMPLETE_TYPE_P (basetype))
3774 /* This error is now reported in xref_tag, thus giving better
3775 location information. */
3776 return next_field;
3778 /* Place the base class. */
3779 if (!is_empty_class (basetype))
3781 tree decl;
3783 /* The containing class is non-empty because it has a non-empty
3784 base class. */
3785 CLASSTYPE_EMPTY_P (t) = 0;
3787 /* Create the FIELD_DECL. */
3788 decl = build_decl (input_location,
3789 FIELD_DECL, NULL_TREE, CLASSTYPE_AS_BASE (basetype));
3790 DECL_ARTIFICIAL (decl) = 1;
3791 DECL_IGNORED_P (decl) = 1;
3792 DECL_FIELD_CONTEXT (decl) = t;
3793 if (CLASSTYPE_AS_BASE (basetype))
3795 DECL_SIZE (decl) = CLASSTYPE_SIZE (basetype);
3796 DECL_SIZE_UNIT (decl) = CLASSTYPE_SIZE_UNIT (basetype);
3797 DECL_ALIGN (decl) = CLASSTYPE_ALIGN (basetype);
3798 DECL_USER_ALIGN (decl) = CLASSTYPE_USER_ALIGN (basetype);
3799 DECL_MODE (decl) = TYPE_MODE (basetype);
3800 DECL_FIELD_IS_BASE (decl) = 1;
3802 /* Try to place the field. It may take more than one try if we
3803 have a hard time placing the field without putting two
3804 objects of the same type at the same address. */
3805 layout_nonempty_base_or_field (rli, decl, binfo, offsets);
3806 /* Add the new FIELD_DECL to the list of fields for T. */
3807 DECL_CHAIN (decl) = *next_field;
3808 *next_field = decl;
3809 next_field = &DECL_CHAIN (decl);
3812 else
3814 tree eoc;
3815 bool atend;
3817 /* On some platforms (ARM), even empty classes will not be
3818 byte-aligned. */
3819 eoc = round_up_loc (input_location,
3820 rli_size_unit_so_far (rli),
3821 CLASSTYPE_ALIGN_UNIT (basetype));
3822 atend = layout_empty_base (rli, binfo, eoc, offsets);
3823 /* A nearly-empty class "has no proper base class that is empty,
3824 not morally virtual, and at an offset other than zero." */
3825 if (!BINFO_VIRTUAL_P (binfo) && CLASSTYPE_NEARLY_EMPTY_P (t))
3827 if (atend)
3828 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
3829 /* The check above (used in G++ 3.2) is insufficient because
3830 an empty class placed at offset zero might itself have an
3831 empty base at a nonzero offset. */
3832 else if (walk_subobject_offsets (basetype,
3833 empty_base_at_nonzero_offset_p,
3834 size_zero_node,
3835 /*offsets=*/NULL,
3836 /*max_offset=*/NULL_TREE,
3837 /*vbases_p=*/true))
3839 if (abi_version_at_least (2))
3840 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
3841 else
3842 warning (OPT_Wabi,
3843 "class %qT will be considered nearly empty in a "
3844 "future version of GCC", t);
3848 /* We do not create a FIELD_DECL for empty base classes because
3849 it might overlap some other field. We want to be able to
3850 create CONSTRUCTORs for the class by iterating over the
3851 FIELD_DECLs, and the back end does not handle overlapping
3852 FIELD_DECLs. */
3854 /* An empty virtual base causes a class to be non-empty
3855 -- but in that case we do not need to clear CLASSTYPE_EMPTY_P
3856 here because that was already done when the virtual table
3857 pointer was created. */
3860 /* Record the offsets of BINFO and its base subobjects. */
3861 record_subobject_offsets (binfo,
3862 BINFO_OFFSET (binfo),
3863 offsets,
3864 /*is_data_member=*/false);
3866 return next_field;
3869 /* Layout all of the non-virtual base classes. Record empty
3870 subobjects in OFFSETS. T is the most derived type. Return nonzero
3871 if the type cannot be nearly empty. The fields created
3872 corresponding to the base classes will be inserted at
3873 *NEXT_FIELD. */
3875 static void
3876 build_base_fields (record_layout_info rli,
3877 splay_tree offsets, tree *next_field)
3879 /* Chain to hold all the new FIELD_DECLs which stand in for base class
3880 subobjects. */
3881 tree t = rli->t;
3882 int n_baseclasses = BINFO_N_BASE_BINFOS (TYPE_BINFO (t));
3883 int i;
3885 /* The primary base class is always allocated first. */
3886 if (CLASSTYPE_HAS_PRIMARY_BASE_P (t))
3887 next_field = build_base_field (rli, CLASSTYPE_PRIMARY_BINFO (t),
3888 offsets, next_field);
3890 /* Now allocate the rest of the bases. */
3891 for (i = 0; i < n_baseclasses; ++i)
3893 tree base_binfo;
3895 base_binfo = BINFO_BASE_BINFO (TYPE_BINFO (t), i);
3897 /* The primary base was already allocated above, so we don't
3898 need to allocate it again here. */
3899 if (base_binfo == CLASSTYPE_PRIMARY_BINFO (t))
3900 continue;
3902 /* Virtual bases are added at the end (a primary virtual base
3903 will have already been added). */
3904 if (BINFO_VIRTUAL_P (base_binfo))
3905 continue;
3907 next_field = build_base_field (rli, base_binfo,
3908 offsets, next_field);
3912 /* Go through the TYPE_METHODS of T issuing any appropriate
3913 diagnostics, figuring out which methods override which other
3914 methods, and so forth. */
3916 static void
3917 check_methods (tree t)
3919 tree x;
3921 for (x = TYPE_METHODS (t); x; x = DECL_CHAIN (x))
3923 check_for_override (x, t);
3924 if (DECL_PURE_VIRTUAL_P (x) && ! DECL_VINDEX (x))
3925 error ("initializer specified for non-virtual method %q+D", x);
3926 /* The name of the field is the original field name
3927 Save this in auxiliary field for later overloading. */
3928 if (DECL_VINDEX (x))
3930 TYPE_POLYMORPHIC_P (t) = 1;
3931 if (DECL_PURE_VIRTUAL_P (x))
3932 VEC_safe_push (tree, gc, CLASSTYPE_PURE_VIRTUALS (t), x);
3934 /* All user-provided destructors are non-trivial.
3935 Constructors and assignment ops are handled in
3936 grok_special_member_properties. */
3937 if (DECL_DESTRUCTOR_P (x) && user_provided_p (x))
3938 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t) = 1;
3942 /* FN is a constructor or destructor. Clone the declaration to create
3943 a specialized in-charge or not-in-charge version, as indicated by
3944 NAME. */
3946 static tree
3947 build_clone (tree fn, tree name)
3949 tree parms;
3950 tree clone;
3952 /* Copy the function. */
3953 clone = copy_decl (fn);
3954 /* Reset the function name. */
3955 DECL_NAME (clone) = name;
3956 SET_DECL_ASSEMBLER_NAME (clone, NULL_TREE);
3957 /* Remember where this function came from. */
3958 DECL_ABSTRACT_ORIGIN (clone) = fn;
3959 /* Make it easy to find the CLONE given the FN. */
3960 DECL_CHAIN (clone) = DECL_CHAIN (fn);
3961 DECL_CHAIN (fn) = clone;
3963 /* If this is a template, do the rest on the DECL_TEMPLATE_RESULT. */
3964 if (TREE_CODE (clone) == TEMPLATE_DECL)
3966 tree result = build_clone (DECL_TEMPLATE_RESULT (clone), name);
3967 DECL_TEMPLATE_RESULT (clone) = result;
3968 DECL_TEMPLATE_INFO (result) = copy_node (DECL_TEMPLATE_INFO (result));
3969 DECL_TI_TEMPLATE (result) = clone;
3970 TREE_TYPE (clone) = TREE_TYPE (result);
3971 return clone;
3974 DECL_CLONED_FUNCTION (clone) = fn;
3975 /* There's no pending inline data for this function. */
3976 DECL_PENDING_INLINE_INFO (clone) = NULL;
3977 DECL_PENDING_INLINE_P (clone) = 0;
3979 /* The base-class destructor is not virtual. */
3980 if (name == base_dtor_identifier)
3982 DECL_VIRTUAL_P (clone) = 0;
3983 if (TREE_CODE (clone) != TEMPLATE_DECL)
3984 DECL_VINDEX (clone) = NULL_TREE;
3987 /* If there was an in-charge parameter, drop it from the function
3988 type. */
3989 if (DECL_HAS_IN_CHARGE_PARM_P (clone))
3991 tree basetype;
3992 tree parmtypes;
3993 tree exceptions;
3995 exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (clone));
3996 basetype = TYPE_METHOD_BASETYPE (TREE_TYPE (clone));
3997 parmtypes = TYPE_ARG_TYPES (TREE_TYPE (clone));
3998 /* Skip the `this' parameter. */
3999 parmtypes = TREE_CHAIN (parmtypes);
4000 /* Skip the in-charge parameter. */
4001 parmtypes = TREE_CHAIN (parmtypes);
4002 /* And the VTT parm, in a complete [cd]tor. */
4003 if (DECL_HAS_VTT_PARM_P (fn)
4004 && ! DECL_NEEDS_VTT_PARM_P (clone))
4005 parmtypes = TREE_CHAIN (parmtypes);
4006 /* If this is subobject constructor or destructor, add the vtt
4007 parameter. */
4008 TREE_TYPE (clone)
4009 = build_method_type_directly (basetype,
4010 TREE_TYPE (TREE_TYPE (clone)),
4011 parmtypes);
4012 if (exceptions)
4013 TREE_TYPE (clone) = build_exception_variant (TREE_TYPE (clone),
4014 exceptions);
4015 TREE_TYPE (clone)
4016 = cp_build_type_attribute_variant (TREE_TYPE (clone),
4017 TYPE_ATTRIBUTES (TREE_TYPE (fn)));
4020 /* Copy the function parameters. */
4021 DECL_ARGUMENTS (clone) = copy_list (DECL_ARGUMENTS (clone));
4022 /* Remove the in-charge parameter. */
4023 if (DECL_HAS_IN_CHARGE_PARM_P (clone))
4025 DECL_CHAIN (DECL_ARGUMENTS (clone))
4026 = DECL_CHAIN (DECL_CHAIN (DECL_ARGUMENTS (clone)));
4027 DECL_HAS_IN_CHARGE_PARM_P (clone) = 0;
4029 /* And the VTT parm, in a complete [cd]tor. */
4030 if (DECL_HAS_VTT_PARM_P (fn))
4032 if (DECL_NEEDS_VTT_PARM_P (clone))
4033 DECL_HAS_VTT_PARM_P (clone) = 1;
4034 else
4036 DECL_CHAIN (DECL_ARGUMENTS (clone))
4037 = DECL_CHAIN (DECL_CHAIN (DECL_ARGUMENTS (clone)));
4038 DECL_HAS_VTT_PARM_P (clone) = 0;
4042 for (parms = DECL_ARGUMENTS (clone); parms; parms = DECL_CHAIN (parms))
4044 DECL_CONTEXT (parms) = clone;
4045 cxx_dup_lang_specific_decl (parms);
4048 /* Create the RTL for this function. */
4049 SET_DECL_RTL (clone, NULL);
4050 rest_of_decl_compilation (clone, /*top_level=*/1, at_eof);
4052 if (pch_file)
4053 note_decl_for_pch (clone);
4055 return clone;
4058 /* Implementation of DECL_CLONED_FUNCTION and DECL_CLONED_FUNCTION_P, do
4059 not invoke this function directly.
4061 For a non-thunk function, returns the address of the slot for storing
4062 the function it is a clone of. Otherwise returns NULL_TREE.
4064 If JUST_TESTING, looks through TEMPLATE_DECL and returns NULL if
4065 cloned_function is unset. This is to support the separate
4066 DECL_CLONED_FUNCTION and DECL_CLONED_FUNCTION_P modes; using the latter
4067 on a template makes sense, but not the former. */
4069 tree *
4070 decl_cloned_function_p (const_tree decl, bool just_testing)
4072 tree *ptr;
4073 if (just_testing)
4074 decl = STRIP_TEMPLATE (decl);
4076 if (TREE_CODE (decl) != FUNCTION_DECL
4077 || !DECL_LANG_SPECIFIC (decl)
4078 || DECL_LANG_SPECIFIC (decl)->u.fn.thunk_p)
4080 #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
4081 if (!just_testing)
4082 lang_check_failed (__FILE__, __LINE__, __FUNCTION__);
4083 else
4084 #endif
4085 return NULL;
4088 ptr = &DECL_LANG_SPECIFIC (decl)->u.fn.u5.cloned_function;
4089 if (just_testing && *ptr == NULL_TREE)
4090 return NULL;
4091 else
4092 return ptr;
4095 /* Produce declarations for all appropriate clones of FN. If
4096 UPDATE_METHOD_VEC_P is nonzero, the clones are added to the
4097 CLASTYPE_METHOD_VEC as well. */
4099 void
4100 clone_function_decl (tree fn, int update_method_vec_p)
4102 tree clone;
4104 /* Avoid inappropriate cloning. */
4105 if (DECL_CHAIN (fn)
4106 && DECL_CLONED_FUNCTION_P (DECL_CHAIN (fn)))
4107 return;
4109 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (fn))
4111 /* For each constructor, we need two variants: an in-charge version
4112 and a not-in-charge version. */
4113 clone = build_clone (fn, complete_ctor_identifier);
4114 if (update_method_vec_p)
4115 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
4116 clone = build_clone (fn, base_ctor_identifier);
4117 if (update_method_vec_p)
4118 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
4120 else
4122 gcc_assert (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (fn));
4124 /* For each destructor, we need three variants: an in-charge
4125 version, a not-in-charge version, and an in-charge deleting
4126 version. We clone the deleting version first because that
4127 means it will go second on the TYPE_METHODS list -- and that
4128 corresponds to the correct layout order in the virtual
4129 function table.
4131 For a non-virtual destructor, we do not build a deleting
4132 destructor. */
4133 if (DECL_VIRTUAL_P (fn))
4135 clone = build_clone (fn, deleting_dtor_identifier);
4136 if (update_method_vec_p)
4137 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
4139 clone = build_clone (fn, complete_dtor_identifier);
4140 if (update_method_vec_p)
4141 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
4142 clone = build_clone (fn, base_dtor_identifier);
4143 if (update_method_vec_p)
4144 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
4147 /* Note that this is an abstract function that is never emitted. */
4148 DECL_ABSTRACT (fn) = 1;
4151 /* DECL is an in charge constructor, which is being defined. This will
4152 have had an in class declaration, from whence clones were
4153 declared. An out-of-class definition can specify additional default
4154 arguments. As it is the clones that are involved in overload
4155 resolution, we must propagate the information from the DECL to its
4156 clones. */
4158 void
4159 adjust_clone_args (tree decl)
4161 tree clone;
4163 for (clone = DECL_CHAIN (decl); clone && DECL_CLONED_FUNCTION_P (clone);
4164 clone = DECL_CHAIN (clone))
4166 tree orig_clone_parms = TYPE_ARG_TYPES (TREE_TYPE (clone));
4167 tree orig_decl_parms = TYPE_ARG_TYPES (TREE_TYPE (decl));
4168 tree decl_parms, clone_parms;
4170 clone_parms = orig_clone_parms;
4172 /* Skip the 'this' parameter. */
4173 orig_clone_parms = TREE_CHAIN (orig_clone_parms);
4174 orig_decl_parms = TREE_CHAIN (orig_decl_parms);
4176 if (DECL_HAS_IN_CHARGE_PARM_P (decl))
4177 orig_decl_parms = TREE_CHAIN (orig_decl_parms);
4178 if (DECL_HAS_VTT_PARM_P (decl))
4179 orig_decl_parms = TREE_CHAIN (orig_decl_parms);
4181 clone_parms = orig_clone_parms;
4182 if (DECL_HAS_VTT_PARM_P (clone))
4183 clone_parms = TREE_CHAIN (clone_parms);
4185 for (decl_parms = orig_decl_parms; decl_parms;
4186 decl_parms = TREE_CHAIN (decl_parms),
4187 clone_parms = TREE_CHAIN (clone_parms))
4189 gcc_assert (same_type_p (TREE_TYPE (decl_parms),
4190 TREE_TYPE (clone_parms)));
4192 if (TREE_PURPOSE (decl_parms) && !TREE_PURPOSE (clone_parms))
4194 /* A default parameter has been added. Adjust the
4195 clone's parameters. */
4196 tree exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (clone));
4197 tree attrs = TYPE_ATTRIBUTES (TREE_TYPE (clone));
4198 tree basetype = TYPE_METHOD_BASETYPE (TREE_TYPE (clone));
4199 tree type;
4201 clone_parms = orig_decl_parms;
4203 if (DECL_HAS_VTT_PARM_P (clone))
4205 clone_parms = tree_cons (TREE_PURPOSE (orig_clone_parms),
4206 TREE_VALUE (orig_clone_parms),
4207 clone_parms);
4208 TREE_TYPE (clone_parms) = TREE_TYPE (orig_clone_parms);
4210 type = build_method_type_directly (basetype,
4211 TREE_TYPE (TREE_TYPE (clone)),
4212 clone_parms);
4213 if (exceptions)
4214 type = build_exception_variant (type, exceptions);
4215 if (attrs)
4216 type = cp_build_type_attribute_variant (type, attrs);
4217 TREE_TYPE (clone) = type;
4219 clone_parms = NULL_TREE;
4220 break;
4223 gcc_assert (!clone_parms);
4227 /* For each of the constructors and destructors in T, create an
4228 in-charge and not-in-charge variant. */
4230 static void
4231 clone_constructors_and_destructors (tree t)
4233 tree fns;
4235 /* If for some reason we don't have a CLASSTYPE_METHOD_VEC, we bail
4236 out now. */
4237 if (!CLASSTYPE_METHOD_VEC (t))
4238 return;
4240 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
4241 clone_function_decl (OVL_CURRENT (fns), /*update_method_vec_p=*/1);
4242 for (fns = CLASSTYPE_DESTRUCTORS (t); fns; fns = OVL_NEXT (fns))
4243 clone_function_decl (OVL_CURRENT (fns), /*update_method_vec_p=*/1);
4246 /* Returns true iff class T has a user-defined constructor other than
4247 the default constructor. */
4249 bool
4250 type_has_user_nondefault_constructor (tree t)
4252 tree fns;
4254 if (!TYPE_HAS_USER_CONSTRUCTOR (t))
4255 return false;
4257 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
4259 tree fn = OVL_CURRENT (fns);
4260 if (!DECL_ARTIFICIAL (fn)
4261 && (TREE_CODE (fn) == TEMPLATE_DECL
4262 || (skip_artificial_parms_for (fn, DECL_ARGUMENTS (fn))
4263 != NULL_TREE)))
4264 return true;
4267 return false;
4270 /* Returns the defaulted constructor if T has one. Otherwise, returns
4271 NULL_TREE. */
4273 tree
4274 in_class_defaulted_default_constructor (tree t)
4276 tree fns, args;
4278 if (!TYPE_HAS_USER_CONSTRUCTOR (t))
4279 return NULL_TREE;
4281 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
4283 tree fn = OVL_CURRENT (fns);
4285 if (DECL_DEFAULTED_IN_CLASS_P (fn))
4287 args = FUNCTION_FIRST_USER_PARMTYPE (fn);
4288 while (args && TREE_PURPOSE (args))
4289 args = TREE_CHAIN (args);
4290 if (!args || args == void_list_node)
4291 return fn;
4295 return NULL_TREE;
4298 /* Returns true iff FN is a user-provided function, i.e. user-declared
4299 and not defaulted at its first declaration; or explicit, private,
4300 protected, or non-const. */
4302 bool
4303 user_provided_p (tree fn)
4305 if (TREE_CODE (fn) == TEMPLATE_DECL)
4306 return true;
4307 else
4308 return (!DECL_ARTIFICIAL (fn)
4309 && !DECL_DEFAULTED_IN_CLASS_P (fn));
4312 /* Returns true iff class T has a user-provided constructor. */
4314 bool
4315 type_has_user_provided_constructor (tree t)
4317 tree fns;
4319 if (!CLASS_TYPE_P (t))
4320 return false;
4322 if (!TYPE_HAS_USER_CONSTRUCTOR (t))
4323 return false;
4325 /* This can happen in error cases; avoid crashing. */
4326 if (!CLASSTYPE_METHOD_VEC (t))
4327 return false;
4329 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
4330 if (user_provided_p (OVL_CURRENT (fns)))
4331 return true;
4333 return false;
4336 /* Returns true iff class T has a user-provided default constructor. */
4338 bool
4339 type_has_user_provided_default_constructor (tree t)
4341 tree fns;
4343 if (!TYPE_HAS_USER_CONSTRUCTOR (t))
4344 return false;
4346 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
4348 tree fn = OVL_CURRENT (fns);
4349 if (TREE_CODE (fn) == FUNCTION_DECL
4350 && user_provided_p (fn)
4351 && sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (fn)))
4352 return true;
4355 return false;
4358 /* Returns true iff for class T, a synthesized default constructor
4359 would be constexpr. */
4361 bool
4362 synthesized_default_constructor_is_constexpr (tree t)
4364 /* A defaulted default constructor is constexpr
4365 if there is nothing to initialize. */
4366 /* FIXME adjust for non-static data member initializers. */
4367 return is_really_empty_class (t);
4370 /* Returns true iff class T has a constexpr default constructor. */
4372 bool
4373 type_has_constexpr_default_constructor (tree t)
4375 tree fns;
4377 if (!CLASS_TYPE_P (t))
4379 /* The caller should have stripped an enclosing array. */
4380 gcc_assert (TREE_CODE (t) != ARRAY_TYPE);
4381 return false;
4383 if (CLASSTYPE_LAZY_DEFAULT_CTOR (t))
4384 return synthesized_default_constructor_is_constexpr (t);
4385 fns = locate_ctor (t);
4386 return (fns && DECL_DECLARED_CONSTEXPR_P (fns));
4389 /* Returns true iff class TYPE has a virtual destructor. */
4391 bool
4392 type_has_virtual_destructor (tree type)
4394 tree dtor;
4396 if (!CLASS_TYPE_P (type))
4397 return false;
4399 gcc_assert (COMPLETE_TYPE_P (type));
4400 dtor = CLASSTYPE_DESTRUCTORS (type);
4401 return (dtor && DECL_VIRTUAL_P (dtor));
4404 /* Returns true iff class T has a move constructor. */
4406 bool
4407 type_has_move_constructor (tree t)
4409 tree fns;
4411 if (CLASSTYPE_LAZY_MOVE_CTOR (t))
4413 gcc_assert (COMPLETE_TYPE_P (t));
4414 lazily_declare_fn (sfk_move_constructor, t);
4417 if (!CLASSTYPE_METHOD_VEC (t))
4418 return false;
4420 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
4421 if (move_fn_p (OVL_CURRENT (fns)))
4422 return true;
4424 return false;
4427 /* Returns true iff class T has a move assignment operator. */
4429 bool
4430 type_has_move_assign (tree t)
4432 tree fns;
4434 if (CLASSTYPE_LAZY_MOVE_ASSIGN (t))
4436 gcc_assert (COMPLETE_TYPE_P (t));
4437 lazily_declare_fn (sfk_move_assignment, t);
4440 for (fns = lookup_fnfields_slot (t, ansi_assopname (NOP_EXPR));
4441 fns; fns = OVL_NEXT (fns))
4442 if (move_fn_p (OVL_CURRENT (fns)))
4443 return true;
4445 return false;
4448 /* Nonzero if we need to build up a constructor call when initializing an
4449 object of this class, either because it has a user-provided constructor
4450 or because it doesn't have a default constructor (so we need to give an
4451 error if no initializer is provided). Use TYPE_NEEDS_CONSTRUCTING when
4452 what you care about is whether or not an object can be produced by a
4453 constructor (e.g. so we don't set TREE_READONLY on const variables of
4454 such type); use this function when what you care about is whether or not
4455 to try to call a constructor to create an object. The latter case is
4456 the former plus some cases of constructors that cannot be called. */
4458 bool
4459 type_build_ctor_call (tree t)
4461 tree inner;
4462 if (TYPE_NEEDS_CONSTRUCTING (t))
4463 return true;
4464 inner = strip_array_types (t);
4465 return (CLASS_TYPE_P (inner) && !TYPE_HAS_DEFAULT_CONSTRUCTOR (inner)
4466 && !ANON_AGGR_TYPE_P (inner));
4469 /* Remove all zero-width bit-fields from T. */
4471 static void
4472 remove_zero_width_bit_fields (tree t)
4474 tree *fieldsp;
4476 fieldsp = &TYPE_FIELDS (t);
4477 while (*fieldsp)
4479 if (TREE_CODE (*fieldsp) == FIELD_DECL
4480 && DECL_C_BIT_FIELD (*fieldsp)
4481 /* We should not be confused by the fact that grokbitfield
4482 temporarily sets the width of the bit field into
4483 DECL_INITIAL (*fieldsp).
4484 check_bitfield_decl eventually sets DECL_SIZE (*fieldsp)
4485 to that width. */
4486 && integer_zerop (DECL_SIZE (*fieldsp)))
4487 *fieldsp = DECL_CHAIN (*fieldsp);
4488 else
4489 fieldsp = &DECL_CHAIN (*fieldsp);
4493 /* Returns TRUE iff we need a cookie when dynamically allocating an
4494 array whose elements have the indicated class TYPE. */
4496 static bool
4497 type_requires_array_cookie (tree type)
4499 tree fns;
4500 bool has_two_argument_delete_p = false;
4502 gcc_assert (CLASS_TYPE_P (type));
4504 /* If there's a non-trivial destructor, we need a cookie. In order
4505 to iterate through the array calling the destructor for each
4506 element, we'll have to know how many elements there are. */
4507 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
4508 return true;
4510 /* If the usual deallocation function is a two-argument whose second
4511 argument is of type `size_t', then we have to pass the size of
4512 the array to the deallocation function, so we will need to store
4513 a cookie. */
4514 fns = lookup_fnfields (TYPE_BINFO (type),
4515 ansi_opname (VEC_DELETE_EXPR),
4516 /*protect=*/0);
4517 /* If there are no `operator []' members, or the lookup is
4518 ambiguous, then we don't need a cookie. */
4519 if (!fns || fns == error_mark_node)
4520 return false;
4521 /* Loop through all of the functions. */
4522 for (fns = BASELINK_FUNCTIONS (fns); fns; fns = OVL_NEXT (fns))
4524 tree fn;
4525 tree second_parm;
4527 /* Select the current function. */
4528 fn = OVL_CURRENT (fns);
4529 /* See if this function is a one-argument delete function. If
4530 it is, then it will be the usual deallocation function. */
4531 second_parm = TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (fn)));
4532 if (second_parm == void_list_node)
4533 return false;
4534 /* Do not consider this function if its second argument is an
4535 ellipsis. */
4536 if (!second_parm)
4537 continue;
4538 /* Otherwise, if we have a two-argument function and the second
4539 argument is `size_t', it will be the usual deallocation
4540 function -- unless there is one-argument function, too. */
4541 if (TREE_CHAIN (second_parm) == void_list_node
4542 && same_type_p (TREE_VALUE (second_parm), size_type_node))
4543 has_two_argument_delete_p = true;
4546 return has_two_argument_delete_p;
4549 /* Finish computing the `literal type' property of class type T.
4551 At this point, we have already processed base classes and
4552 non-static data members. We need to check whether the copy
4553 constructor is trivial, the destructor is trivial, and there
4554 is a trivial default constructor or at least one constexpr
4555 constructor other than the copy constructor. */
4557 static void
4558 finalize_literal_type_property (tree t)
4560 tree fn;
4562 if (cxx_dialect < cxx0x
4563 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t))
4564 CLASSTYPE_LITERAL_P (t) = false;
4565 else if (CLASSTYPE_LITERAL_P (t) && !TYPE_HAS_TRIVIAL_DFLT (t)
4566 && CLASSTYPE_NON_AGGREGATE (t)
4567 && !TYPE_HAS_CONSTEXPR_CTOR (t))
4568 CLASSTYPE_LITERAL_P (t) = false;
4570 if (!CLASSTYPE_LITERAL_P (t))
4571 for (fn = TYPE_METHODS (t); fn; fn = DECL_CHAIN (fn))
4572 if (DECL_DECLARED_CONSTEXPR_P (fn)
4573 && TREE_CODE (fn) != TEMPLATE_DECL
4574 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
4575 && !DECL_CONSTRUCTOR_P (fn))
4577 DECL_DECLARED_CONSTEXPR_P (fn) = false;
4578 if (!DECL_TEMPLATE_INFO (fn))
4580 error ("enclosing class of constexpr non-static member "
4581 "function %q+#D is not a literal type", fn);
4582 explain_non_literal_class (t);
4587 /* T is a non-literal type used in a context which requires a constant
4588 expression. Explain why it isn't literal. */
4590 void
4591 explain_non_literal_class (tree t)
4593 static struct pointer_set_t *diagnosed;
4595 if (!CLASS_TYPE_P (t))
4596 return;
4597 t = TYPE_MAIN_VARIANT (t);
4599 if (diagnosed == NULL)
4600 diagnosed = pointer_set_create ();
4601 if (pointer_set_insert (diagnosed, t) != 0)
4602 /* Already explained. */
4603 return;
4605 inform (0, "%q+T is not literal because:", t);
4606 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t))
4607 inform (0, " %q+T has a non-trivial destructor", t);
4608 else if (CLASSTYPE_NON_AGGREGATE (t)
4609 && !TYPE_HAS_TRIVIAL_DFLT (t)
4610 && !TYPE_HAS_CONSTEXPR_CTOR (t))
4611 inform (0, " %q+T is not an aggregate, does not have a trivial "
4612 "default constructor, and has no constexpr constructor that "
4613 "is not a copy or move constructor", t);
4614 else
4616 tree binfo, base_binfo, field; int i;
4617 for (binfo = TYPE_BINFO (t), i = 0;
4618 BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
4620 tree basetype = TREE_TYPE (base_binfo);
4621 if (!CLASSTYPE_LITERAL_P (basetype))
4623 inform (0, " base class %qT of %q+T is non-literal",
4624 basetype, t);
4625 explain_non_literal_class (basetype);
4626 return;
4629 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
4631 tree ftype;
4632 if (TREE_CODE (field) != FIELD_DECL)
4633 continue;
4634 ftype = TREE_TYPE (field);
4635 if (!literal_type_p (ftype))
4637 inform (0, " non-static data member %q+D has "
4638 "non-literal type", field);
4639 if (CLASS_TYPE_P (ftype))
4640 explain_non_literal_class (ftype);
4646 /* Check the validity of the bases and members declared in T. Add any
4647 implicitly-generated functions (like copy-constructors and
4648 assignment operators). Compute various flag bits (like
4649 CLASSTYPE_NON_LAYOUT_POD_T) for T. This routine works purely at the C++
4650 level: i.e., independently of the ABI in use. */
4652 static void
4653 check_bases_and_members (tree t)
4655 /* Nonzero if the implicitly generated copy constructor should take
4656 a non-const reference argument. */
4657 int cant_have_const_ctor;
4658 /* Nonzero if the implicitly generated assignment operator
4659 should take a non-const reference argument. */
4660 int no_const_asn_ref;
4661 tree access_decls;
4662 bool saved_complex_asn_ref;
4663 bool saved_nontrivial_dtor;
4664 tree fn;
4666 /* By default, we use const reference arguments and generate default
4667 constructors. */
4668 cant_have_const_ctor = 0;
4669 no_const_asn_ref = 0;
4671 /* Check all the base-classes. */
4672 check_bases (t, &cant_have_const_ctor,
4673 &no_const_asn_ref);
4675 /* Check all the method declarations. */
4676 check_methods (t);
4678 /* Save the initial values of these flags which only indicate whether
4679 or not the class has user-provided functions. As we analyze the
4680 bases and members we can set these flags for other reasons. */
4681 saved_complex_asn_ref = TYPE_HAS_COMPLEX_COPY_ASSIGN (t);
4682 saved_nontrivial_dtor = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t);
4684 /* Check all the data member declarations. We cannot call
4685 check_field_decls until we have called check_bases check_methods,
4686 as check_field_decls depends on TYPE_HAS_NONTRIVIAL_DESTRUCTOR
4687 being set appropriately. */
4688 check_field_decls (t, &access_decls,
4689 &cant_have_const_ctor,
4690 &no_const_asn_ref);
4692 /* A nearly-empty class has to be vptr-containing; a nearly empty
4693 class contains just a vptr. */
4694 if (!TYPE_CONTAINS_VPTR_P (t))
4695 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
4697 /* Do some bookkeeping that will guide the generation of implicitly
4698 declared member functions. */
4699 TYPE_HAS_COMPLEX_COPY_CTOR (t) |= TYPE_CONTAINS_VPTR_P (t);
4700 TYPE_HAS_COMPLEX_MOVE_CTOR (t) |= TYPE_CONTAINS_VPTR_P (t);
4701 /* We need to call a constructor for this class if it has a
4702 user-provided constructor, or if the default constructor is going
4703 to initialize the vptr. (This is not an if-and-only-if;
4704 TYPE_NEEDS_CONSTRUCTING is set elsewhere if bases or members
4705 themselves need constructing.) */
4706 TYPE_NEEDS_CONSTRUCTING (t)
4707 |= (type_has_user_provided_constructor (t) || TYPE_CONTAINS_VPTR_P (t));
4708 /* [dcl.init.aggr]
4710 An aggregate is an array or a class with no user-provided
4711 constructors ... and no virtual functions.
4713 Again, other conditions for being an aggregate are checked
4714 elsewhere. */
4715 CLASSTYPE_NON_AGGREGATE (t)
4716 |= (type_has_user_provided_constructor (t) || TYPE_POLYMORPHIC_P (t));
4717 /* This is the C++98/03 definition of POD; it changed in C++0x, but we
4718 retain the old definition internally for ABI reasons. */
4719 CLASSTYPE_NON_LAYOUT_POD_P (t)
4720 |= (CLASSTYPE_NON_AGGREGATE (t)
4721 || saved_nontrivial_dtor || saved_complex_asn_ref);
4722 CLASSTYPE_NON_STD_LAYOUT (t) |= TYPE_CONTAINS_VPTR_P (t);
4723 TYPE_HAS_COMPLEX_COPY_ASSIGN (t) |= TYPE_CONTAINS_VPTR_P (t);
4724 TYPE_HAS_COMPLEX_MOVE_ASSIGN (t) |= TYPE_CONTAINS_VPTR_P (t);
4725 TYPE_HAS_COMPLEX_DFLT (t) |= TYPE_CONTAINS_VPTR_P (t);
4727 /* If the class has no user-declared constructor, but does have
4728 non-static const or reference data members that can never be
4729 initialized, issue a warning. */
4730 if (warn_uninitialized
4731 /* Classes with user-declared constructors are presumed to
4732 initialize these members. */
4733 && !TYPE_HAS_USER_CONSTRUCTOR (t)
4734 /* Aggregates can be initialized with brace-enclosed
4735 initializers. */
4736 && CLASSTYPE_NON_AGGREGATE (t))
4738 tree field;
4740 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
4742 tree type;
4744 if (TREE_CODE (field) != FIELD_DECL)
4745 continue;
4747 type = TREE_TYPE (field);
4748 if (TREE_CODE (type) == REFERENCE_TYPE)
4749 warning (OPT_Wuninitialized, "non-static reference %q+#D "
4750 "in class without a constructor", field);
4751 else if (CP_TYPE_CONST_P (type)
4752 && (!CLASS_TYPE_P (type)
4753 || !TYPE_HAS_DEFAULT_CONSTRUCTOR (type)))
4754 warning (OPT_Wuninitialized, "non-static const member %q+#D "
4755 "in class without a constructor", field);
4759 /* Synthesize any needed methods. */
4760 add_implicitly_declared_members (t,
4761 cant_have_const_ctor,
4762 no_const_asn_ref);
4764 /* Check defaulted declarations here so we have cant_have_const_ctor
4765 and don't need to worry about clones. */
4766 for (fn = TYPE_METHODS (t); fn; fn = DECL_CHAIN (fn))
4767 if (DECL_DEFAULTED_IN_CLASS_P (fn))
4769 int copy = copy_fn_p (fn);
4770 if (copy > 0)
4772 bool imp_const_p
4773 = (DECL_CONSTRUCTOR_P (fn) ? !cant_have_const_ctor
4774 : !no_const_asn_ref);
4775 bool fn_const_p = (copy == 2);
4777 if (fn_const_p && !imp_const_p)
4778 /* If the function is defaulted outside the class, we just
4779 give the synthesis error. */
4780 error ("%q+D declared to take const reference, but implicit "
4781 "declaration would take non-const", fn);
4782 else if (imp_const_p && !fn_const_p)
4783 error ("%q+D declared to take non-const reference cannot be "
4784 "defaulted in the class body", fn);
4786 defaulted_late_check (fn);
4789 if (LAMBDA_TYPE_P (t))
4791 /* "The closure type associated with a lambda-expression has a deleted
4792 default constructor and a deleted copy assignment operator." */
4793 TYPE_NEEDS_CONSTRUCTING (t) = 1;
4794 TYPE_HAS_COMPLEX_DFLT (t) = 1;
4795 TYPE_HAS_COMPLEX_COPY_ASSIGN (t) = 1;
4796 CLASSTYPE_LAZY_MOVE_ASSIGN (t) = 0;
4798 /* "This class type is not an aggregate." */
4799 CLASSTYPE_NON_AGGREGATE (t) = 1;
4802 /* Compute the 'literal type' property before we
4803 do anything with non-static member functions. */
4804 finalize_literal_type_property (t);
4806 /* Create the in-charge and not-in-charge variants of constructors
4807 and destructors. */
4808 clone_constructors_and_destructors (t);
4810 /* Process the using-declarations. */
4811 for (; access_decls; access_decls = TREE_CHAIN (access_decls))
4812 handle_using_decl (TREE_VALUE (access_decls), t);
4814 /* Build and sort the CLASSTYPE_METHOD_VEC. */
4815 finish_struct_methods (t);
4817 /* Figure out whether or not we will need a cookie when dynamically
4818 allocating an array of this type. */
4819 TYPE_LANG_SPECIFIC (t)->u.c.vec_new_uses_cookie
4820 = type_requires_array_cookie (t);
4823 /* If T needs a pointer to its virtual function table, set TYPE_VFIELD
4824 accordingly. If a new vfield was created (because T doesn't have a
4825 primary base class), then the newly created field is returned. It
4826 is not added to the TYPE_FIELDS list; it is the caller's
4827 responsibility to do that. Accumulate declared virtual functions
4828 on VIRTUALS_P. */
4830 static tree
4831 create_vtable_ptr (tree t, tree* virtuals_p)
4833 tree fn;
4835 /* Collect the virtual functions declared in T. */
4836 for (fn = TYPE_METHODS (t); fn; fn = DECL_CHAIN (fn))
4837 if (DECL_VINDEX (fn) && !DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (fn)
4838 && TREE_CODE (DECL_VINDEX (fn)) != INTEGER_CST)
4840 tree new_virtual = make_node (TREE_LIST);
4842 BV_FN (new_virtual) = fn;
4843 BV_DELTA (new_virtual) = integer_zero_node;
4844 BV_VCALL_INDEX (new_virtual) = NULL_TREE;
4846 TREE_CHAIN (new_virtual) = *virtuals_p;
4847 *virtuals_p = new_virtual;
4850 /* If we couldn't find an appropriate base class, create a new field
4851 here. Even if there weren't any new virtual functions, we might need a
4852 new virtual function table if we're supposed to include vptrs in
4853 all classes that need them. */
4854 if (!TYPE_VFIELD (t) && (*virtuals_p || TYPE_CONTAINS_VPTR_P (t)))
4856 /* We build this decl with vtbl_ptr_type_node, which is a
4857 `vtable_entry_type*'. It might seem more precise to use
4858 `vtable_entry_type (*)[N]' where N is the number of virtual
4859 functions. However, that would require the vtable pointer in
4860 base classes to have a different type than the vtable pointer
4861 in derived classes. We could make that happen, but that
4862 still wouldn't solve all the problems. In particular, the
4863 type-based alias analysis code would decide that assignments
4864 to the base class vtable pointer can't alias assignments to
4865 the derived class vtable pointer, since they have different
4866 types. Thus, in a derived class destructor, where the base
4867 class constructor was inlined, we could generate bad code for
4868 setting up the vtable pointer.
4870 Therefore, we use one type for all vtable pointers. We still
4871 use a type-correct type; it's just doesn't indicate the array
4872 bounds. That's better than using `void*' or some such; it's
4873 cleaner, and it let's the alias analysis code know that these
4874 stores cannot alias stores to void*! */
4875 tree field;
4877 field = build_decl (input_location,
4878 FIELD_DECL, get_vfield_name (t), vtbl_ptr_type_node);
4879 DECL_VIRTUAL_P (field) = 1;
4880 DECL_ARTIFICIAL (field) = 1;
4881 DECL_FIELD_CONTEXT (field) = t;
4882 DECL_FCONTEXT (field) = t;
4883 if (TYPE_PACKED (t))
4884 DECL_PACKED (field) = 1;
4886 TYPE_VFIELD (t) = field;
4888 /* This class is non-empty. */
4889 CLASSTYPE_EMPTY_P (t) = 0;
4891 return field;
4894 return NULL_TREE;
4897 /* Add OFFSET to all base types of BINFO which is a base in the
4898 hierarchy dominated by T.
4900 OFFSET, which is a type offset, is number of bytes. */
4902 static void
4903 propagate_binfo_offsets (tree binfo, tree offset)
4905 int i;
4906 tree primary_binfo;
4907 tree base_binfo;
4909 /* Update BINFO's offset. */
4910 BINFO_OFFSET (binfo)
4911 = convert (sizetype,
4912 size_binop (PLUS_EXPR,
4913 convert (ssizetype, BINFO_OFFSET (binfo)),
4914 offset));
4916 /* Find the primary base class. */
4917 primary_binfo = get_primary_binfo (binfo);
4919 if (primary_binfo && BINFO_INHERITANCE_CHAIN (primary_binfo) == binfo)
4920 propagate_binfo_offsets (primary_binfo, offset);
4922 /* Scan all of the bases, pushing the BINFO_OFFSET adjust
4923 downwards. */
4924 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
4926 /* Don't do the primary base twice. */
4927 if (base_binfo == primary_binfo)
4928 continue;
4930 if (BINFO_VIRTUAL_P (base_binfo))
4931 continue;
4933 propagate_binfo_offsets (base_binfo, offset);
4937 /* Set BINFO_OFFSET for all of the virtual bases for RLI->T. Update
4938 TYPE_ALIGN and TYPE_SIZE for T. OFFSETS gives the location of
4939 empty subobjects of T. */
4941 static void
4942 layout_virtual_bases (record_layout_info rli, splay_tree offsets)
4944 tree vbase;
4945 tree t = rli->t;
4946 bool first_vbase = true;
4947 tree *next_field;
4949 if (BINFO_N_BASE_BINFOS (TYPE_BINFO (t)) == 0)
4950 return;
4952 if (!abi_version_at_least(2))
4954 /* In G++ 3.2, we incorrectly rounded the size before laying out
4955 the virtual bases. */
4956 finish_record_layout (rli, /*free_p=*/false);
4957 #ifdef STRUCTURE_SIZE_BOUNDARY
4958 /* Packed structures don't need to have minimum size. */
4959 if (! TYPE_PACKED (t))
4960 TYPE_ALIGN (t) = MAX (TYPE_ALIGN (t), (unsigned) STRUCTURE_SIZE_BOUNDARY);
4961 #endif
4962 rli->offset = TYPE_SIZE_UNIT (t);
4963 rli->bitpos = bitsize_zero_node;
4964 rli->record_align = TYPE_ALIGN (t);
4967 /* Find the last field. The artificial fields created for virtual
4968 bases will go after the last extant field to date. */
4969 next_field = &TYPE_FIELDS (t);
4970 while (*next_field)
4971 next_field = &DECL_CHAIN (*next_field);
4973 /* Go through the virtual bases, allocating space for each virtual
4974 base that is not already a primary base class. These are
4975 allocated in inheritance graph order. */
4976 for (vbase = TYPE_BINFO (t); vbase; vbase = TREE_CHAIN (vbase))
4978 if (!BINFO_VIRTUAL_P (vbase))
4979 continue;
4981 if (!BINFO_PRIMARY_P (vbase))
4983 tree basetype = TREE_TYPE (vbase);
4985 /* This virtual base is not a primary base of any class in the
4986 hierarchy, so we have to add space for it. */
4987 next_field = build_base_field (rli, vbase,
4988 offsets, next_field);
4990 /* If the first virtual base might have been placed at a
4991 lower address, had we started from CLASSTYPE_SIZE, rather
4992 than TYPE_SIZE, issue a warning. There can be both false
4993 positives and false negatives from this warning in rare
4994 cases; to deal with all the possibilities would probably
4995 require performing both layout algorithms and comparing
4996 the results which is not particularly tractable. */
4997 if (warn_abi
4998 && first_vbase
4999 && (tree_int_cst_lt
5000 (size_binop (CEIL_DIV_EXPR,
5001 round_up_loc (input_location,
5002 CLASSTYPE_SIZE (t),
5003 CLASSTYPE_ALIGN (basetype)),
5004 bitsize_unit_node),
5005 BINFO_OFFSET (vbase))))
5006 warning (OPT_Wabi,
5007 "offset of virtual base %qT is not ABI-compliant and "
5008 "may change in a future version of GCC",
5009 basetype);
5011 first_vbase = false;
5016 /* Returns the offset of the byte just past the end of the base class
5017 BINFO. */
5019 static tree
5020 end_of_base (tree binfo)
5022 tree size;
5024 if (!CLASSTYPE_AS_BASE (BINFO_TYPE (binfo)))
5025 size = TYPE_SIZE_UNIT (char_type_node);
5026 else if (is_empty_class (BINFO_TYPE (binfo)))
5027 /* An empty class has zero CLASSTYPE_SIZE_UNIT, but we need to
5028 allocate some space for it. It cannot have virtual bases, so
5029 TYPE_SIZE_UNIT is fine. */
5030 size = TYPE_SIZE_UNIT (BINFO_TYPE (binfo));
5031 else
5032 size = CLASSTYPE_SIZE_UNIT (BINFO_TYPE (binfo));
5034 return size_binop (PLUS_EXPR, BINFO_OFFSET (binfo), size);
5037 /* Returns the offset of the byte just past the end of the base class
5038 with the highest offset in T. If INCLUDE_VIRTUALS_P is zero, then
5039 only non-virtual bases are included. */
5041 static tree
5042 end_of_class (tree t, int include_virtuals_p)
5044 tree result = size_zero_node;
5045 VEC(tree,gc) *vbases;
5046 tree binfo;
5047 tree base_binfo;
5048 tree offset;
5049 int i;
5051 for (binfo = TYPE_BINFO (t), i = 0;
5052 BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
5054 if (!include_virtuals_p
5055 && BINFO_VIRTUAL_P (base_binfo)
5056 && (!BINFO_PRIMARY_P (base_binfo)
5057 || BINFO_INHERITANCE_CHAIN (base_binfo) != TYPE_BINFO (t)))
5058 continue;
5060 offset = end_of_base (base_binfo);
5061 if (INT_CST_LT_UNSIGNED (result, offset))
5062 result = offset;
5065 /* G++ 3.2 did not check indirect virtual bases. */
5066 if (abi_version_at_least (2) && include_virtuals_p)
5067 for (vbases = CLASSTYPE_VBASECLASSES (t), i = 0;
5068 VEC_iterate (tree, vbases, i, base_binfo); i++)
5070 offset = end_of_base (base_binfo);
5071 if (INT_CST_LT_UNSIGNED (result, offset))
5072 result = offset;
5075 return result;
5078 /* Warn about bases of T that are inaccessible because they are
5079 ambiguous. For example:
5081 struct S {};
5082 struct T : public S {};
5083 struct U : public S, public T {};
5085 Here, `(S*) new U' is not allowed because there are two `S'
5086 subobjects of U. */
5088 static void
5089 warn_about_ambiguous_bases (tree t)
5091 int i;
5092 VEC(tree,gc) *vbases;
5093 tree basetype;
5094 tree binfo;
5095 tree base_binfo;
5097 /* If there are no repeated bases, nothing can be ambiguous. */
5098 if (!CLASSTYPE_REPEATED_BASE_P (t))
5099 return;
5101 /* Check direct bases. */
5102 for (binfo = TYPE_BINFO (t), i = 0;
5103 BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
5105 basetype = BINFO_TYPE (base_binfo);
5107 if (!lookup_base (t, basetype, ba_unique | ba_quiet, NULL))
5108 warning (0, "direct base %qT inaccessible in %qT due to ambiguity",
5109 basetype, t);
5112 /* Check for ambiguous virtual bases. */
5113 if (extra_warnings)
5114 for (vbases = CLASSTYPE_VBASECLASSES (t), i = 0;
5115 VEC_iterate (tree, vbases, i, binfo); i++)
5117 basetype = BINFO_TYPE (binfo);
5119 if (!lookup_base (t, basetype, ba_unique | ba_quiet, NULL))
5120 warning (OPT_Wextra, "virtual base %qT inaccessible in %qT due to ambiguity",
5121 basetype, t);
5125 /* Compare two INTEGER_CSTs K1 and K2. */
5127 static int
5128 splay_tree_compare_integer_csts (splay_tree_key k1, splay_tree_key k2)
5130 return tree_int_cst_compare ((tree) k1, (tree) k2);
5133 /* Increase the size indicated in RLI to account for empty classes
5134 that are "off the end" of the class. */
5136 static void
5137 include_empty_classes (record_layout_info rli)
5139 tree eoc;
5140 tree rli_size;
5142 /* It might be the case that we grew the class to allocate a
5143 zero-sized base class. That won't be reflected in RLI, yet,
5144 because we are willing to overlay multiple bases at the same
5145 offset. However, now we need to make sure that RLI is big enough
5146 to reflect the entire class. */
5147 eoc = end_of_class (rli->t,
5148 CLASSTYPE_AS_BASE (rli->t) != NULL_TREE);
5149 rli_size = rli_size_unit_so_far (rli);
5150 if (TREE_CODE (rli_size) == INTEGER_CST
5151 && INT_CST_LT_UNSIGNED (rli_size, eoc))
5153 if (!abi_version_at_least (2))
5154 /* In version 1 of the ABI, the size of a class that ends with
5155 a bitfield was not rounded up to a whole multiple of a
5156 byte. Because rli_size_unit_so_far returns only the number
5157 of fully allocated bytes, any extra bits were not included
5158 in the size. */
5159 rli->bitpos = round_down (rli->bitpos, BITS_PER_UNIT);
5160 else
5161 /* The size should have been rounded to a whole byte. */
5162 gcc_assert (tree_int_cst_equal
5163 (rli->bitpos, round_down (rli->bitpos, BITS_PER_UNIT)));
5164 rli->bitpos
5165 = size_binop (PLUS_EXPR,
5166 rli->bitpos,
5167 size_binop (MULT_EXPR,
5168 convert (bitsizetype,
5169 size_binop (MINUS_EXPR,
5170 eoc, rli_size)),
5171 bitsize_int (BITS_PER_UNIT)));
5172 normalize_rli (rli);
5176 /* Calculate the TYPE_SIZE, TYPE_ALIGN, etc for T. Calculate
5177 BINFO_OFFSETs for all of the base-classes. Position the vtable
5178 pointer. Accumulate declared virtual functions on VIRTUALS_P. */
5180 static void
5181 layout_class_type (tree t, tree *virtuals_p)
5183 tree non_static_data_members;
5184 tree field;
5185 tree vptr;
5186 record_layout_info rli;
5187 /* Maps offsets (represented as INTEGER_CSTs) to a TREE_LIST of
5188 types that appear at that offset. */
5189 splay_tree empty_base_offsets;
5190 /* True if the last field layed out was a bit-field. */
5191 bool last_field_was_bitfield = false;
5192 /* The location at which the next field should be inserted. */
5193 tree *next_field;
5194 /* T, as a base class. */
5195 tree base_t;
5197 /* Keep track of the first non-static data member. */
5198 non_static_data_members = TYPE_FIELDS (t);
5200 /* Start laying out the record. */
5201 rli = start_record_layout (t);
5203 /* Mark all the primary bases in the hierarchy. */
5204 determine_primary_bases (t);
5206 /* Create a pointer to our virtual function table. */
5207 vptr = create_vtable_ptr (t, virtuals_p);
5209 /* The vptr is always the first thing in the class. */
5210 if (vptr)
5212 DECL_CHAIN (vptr) = TYPE_FIELDS (t);
5213 TYPE_FIELDS (t) = vptr;
5214 next_field = &DECL_CHAIN (vptr);
5215 place_field (rli, vptr);
5217 else
5218 next_field = &TYPE_FIELDS (t);
5220 /* Build FIELD_DECLs for all of the non-virtual base-types. */
5221 empty_base_offsets = splay_tree_new (splay_tree_compare_integer_csts,
5222 NULL, NULL);
5223 build_base_fields (rli, empty_base_offsets, next_field);
5225 /* Layout the non-static data members. */
5226 for (field = non_static_data_members; field; field = DECL_CHAIN (field))
5228 tree type;
5229 tree padding;
5231 /* We still pass things that aren't non-static data members to
5232 the back end, in case it wants to do something with them. */
5233 if (TREE_CODE (field) != FIELD_DECL)
5235 place_field (rli, field);
5236 /* If the static data member has incomplete type, keep track
5237 of it so that it can be completed later. (The handling
5238 of pending statics in finish_record_layout is
5239 insufficient; consider:
5241 struct S1;
5242 struct S2 { static S1 s1; };
5244 At this point, finish_record_layout will be called, but
5245 S1 is still incomplete.) */
5246 if (TREE_CODE (field) == VAR_DECL)
5248 maybe_register_incomplete_var (field);
5249 /* The visibility of static data members is determined
5250 at their point of declaration, not their point of
5251 definition. */
5252 determine_visibility (field);
5254 continue;
5257 type = TREE_TYPE (field);
5258 if (type == error_mark_node)
5259 continue;
5261 padding = NULL_TREE;
5263 /* If this field is a bit-field whose width is greater than its
5264 type, then there are some special rules for allocating
5265 it. */
5266 if (DECL_C_BIT_FIELD (field)
5267 && INT_CST_LT (TYPE_SIZE (type), DECL_SIZE (field)))
5269 unsigned int itk;
5270 tree integer_type;
5271 bool was_unnamed_p = false;
5272 /* We must allocate the bits as if suitably aligned for the
5273 longest integer type that fits in this many bits. type
5274 of the field. Then, we are supposed to use the left over
5275 bits as additional padding. */
5276 for (itk = itk_char; itk != itk_none; ++itk)
5277 if (integer_types[itk] != NULL_TREE
5278 && (INT_CST_LT (size_int (MAX_FIXED_MODE_SIZE),
5279 TYPE_SIZE (integer_types[itk]))
5280 || INT_CST_LT (DECL_SIZE (field),
5281 TYPE_SIZE (integer_types[itk]))))
5282 break;
5284 /* ITK now indicates a type that is too large for the
5285 field. We have to back up by one to find the largest
5286 type that fits. */
5289 --itk;
5290 integer_type = integer_types[itk];
5291 } while (itk > 0 && integer_type == NULL_TREE);
5293 /* Figure out how much additional padding is required. GCC
5294 3.2 always created a padding field, even if it had zero
5295 width. */
5296 if (!abi_version_at_least (2)
5297 || INT_CST_LT (TYPE_SIZE (integer_type), DECL_SIZE (field)))
5299 if (abi_version_at_least (2) && TREE_CODE (t) == UNION_TYPE)
5300 /* In a union, the padding field must have the full width
5301 of the bit-field; all fields start at offset zero. */
5302 padding = DECL_SIZE (field);
5303 else
5305 if (TREE_CODE (t) == UNION_TYPE)
5306 warning (OPT_Wabi, "size assigned to %qT may not be "
5307 "ABI-compliant and may change in a future "
5308 "version of GCC",
5310 padding = size_binop (MINUS_EXPR, DECL_SIZE (field),
5311 TYPE_SIZE (integer_type));
5314 #ifdef PCC_BITFIELD_TYPE_MATTERS
5315 /* An unnamed bitfield does not normally affect the
5316 alignment of the containing class on a target where
5317 PCC_BITFIELD_TYPE_MATTERS. But, the C++ ABI does not
5318 make any exceptions for unnamed bitfields when the
5319 bitfields are longer than their types. Therefore, we
5320 temporarily give the field a name. */
5321 if (PCC_BITFIELD_TYPE_MATTERS && !DECL_NAME (field))
5323 was_unnamed_p = true;
5324 DECL_NAME (field) = make_anon_name ();
5326 #endif
5327 DECL_SIZE (field) = TYPE_SIZE (integer_type);
5328 DECL_ALIGN (field) = TYPE_ALIGN (integer_type);
5329 DECL_USER_ALIGN (field) = TYPE_USER_ALIGN (integer_type);
5330 layout_nonempty_base_or_field (rli, field, NULL_TREE,
5331 empty_base_offsets);
5332 if (was_unnamed_p)
5333 DECL_NAME (field) = NULL_TREE;
5334 /* Now that layout has been performed, set the size of the
5335 field to the size of its declared type; the rest of the
5336 field is effectively invisible. */
5337 DECL_SIZE (field) = TYPE_SIZE (type);
5338 /* We must also reset the DECL_MODE of the field. */
5339 if (abi_version_at_least (2))
5340 DECL_MODE (field) = TYPE_MODE (type);
5341 else if (warn_abi
5342 && DECL_MODE (field) != TYPE_MODE (type))
5343 /* Versions of G++ before G++ 3.4 did not reset the
5344 DECL_MODE. */
5345 warning (OPT_Wabi,
5346 "the offset of %qD may not be ABI-compliant and may "
5347 "change in a future version of GCC", field);
5349 else
5350 layout_nonempty_base_or_field (rli, field, NULL_TREE,
5351 empty_base_offsets);
5353 /* Remember the location of any empty classes in FIELD. */
5354 if (abi_version_at_least (2))
5355 record_subobject_offsets (TREE_TYPE (field),
5356 byte_position(field),
5357 empty_base_offsets,
5358 /*is_data_member=*/true);
5360 /* If a bit-field does not immediately follow another bit-field,
5361 and yet it starts in the middle of a byte, we have failed to
5362 comply with the ABI. */
5363 if (warn_abi
5364 && DECL_C_BIT_FIELD (field)
5365 /* The TREE_NO_WARNING flag gets set by Objective-C when
5366 laying out an Objective-C class. The ObjC ABI differs
5367 from the C++ ABI, and so we do not want a warning
5368 here. */
5369 && !TREE_NO_WARNING (field)
5370 && !last_field_was_bitfield
5371 && !integer_zerop (size_binop (TRUNC_MOD_EXPR,
5372 DECL_FIELD_BIT_OFFSET (field),
5373 bitsize_unit_node)))
5374 warning (OPT_Wabi, "offset of %q+D is not ABI-compliant and may "
5375 "change in a future version of GCC", field);
5377 /* G++ used to use DECL_FIELD_OFFSET as if it were the byte
5378 offset of the field. */
5379 if (warn_abi
5380 && !abi_version_at_least (2)
5381 && !tree_int_cst_equal (DECL_FIELD_OFFSET (field),
5382 byte_position (field))
5383 && contains_empty_class_p (TREE_TYPE (field)))
5384 warning (OPT_Wabi, "%q+D contains empty classes which may cause base "
5385 "classes to be placed at different locations in a "
5386 "future version of GCC", field);
5388 /* The middle end uses the type of expressions to determine the
5389 possible range of expression values. In order to optimize
5390 "x.i > 7" to "false" for a 2-bit bitfield "i", the middle end
5391 must be made aware of the width of "i", via its type.
5393 Because C++ does not have integer types of arbitrary width,
5394 we must (for the purposes of the front end) convert from the
5395 type assigned here to the declared type of the bitfield
5396 whenever a bitfield expression is used as an rvalue.
5397 Similarly, when assigning a value to a bitfield, the value
5398 must be converted to the type given the bitfield here. */
5399 if (DECL_C_BIT_FIELD (field))
5401 unsigned HOST_WIDE_INT width;
5402 tree ftype = TREE_TYPE (field);
5403 width = tree_low_cst (DECL_SIZE (field), /*unsignedp=*/1);
5404 if (width != TYPE_PRECISION (ftype))
5406 TREE_TYPE (field)
5407 = c_build_bitfield_integer_type (width,
5408 TYPE_UNSIGNED (ftype));
5409 TREE_TYPE (field)
5410 = cp_build_qualified_type (TREE_TYPE (field),
5411 cp_type_quals (ftype));
5415 /* If we needed additional padding after this field, add it
5416 now. */
5417 if (padding)
5419 tree padding_field;
5421 padding_field = build_decl (input_location,
5422 FIELD_DECL,
5423 NULL_TREE,
5424 char_type_node);
5425 DECL_BIT_FIELD (padding_field) = 1;
5426 DECL_SIZE (padding_field) = padding;
5427 DECL_CONTEXT (padding_field) = t;
5428 DECL_ARTIFICIAL (padding_field) = 1;
5429 DECL_IGNORED_P (padding_field) = 1;
5430 layout_nonempty_base_or_field (rli, padding_field,
5431 NULL_TREE,
5432 empty_base_offsets);
5435 last_field_was_bitfield = DECL_C_BIT_FIELD (field);
5438 if (abi_version_at_least (2) && !integer_zerop (rli->bitpos))
5440 /* Make sure that we are on a byte boundary so that the size of
5441 the class without virtual bases will always be a round number
5442 of bytes. */
5443 rli->bitpos = round_up_loc (input_location, rli->bitpos, BITS_PER_UNIT);
5444 normalize_rli (rli);
5447 /* G++ 3.2 does not allow virtual bases to be overlaid with tail
5448 padding. */
5449 if (!abi_version_at_least (2))
5450 include_empty_classes(rli);
5452 /* Delete all zero-width bit-fields from the list of fields. Now
5453 that the type is laid out they are no longer important. */
5454 remove_zero_width_bit_fields (t);
5456 /* Create the version of T used for virtual bases. We do not use
5457 make_class_type for this version; this is an artificial type. For
5458 a POD type, we just reuse T. */
5459 if (CLASSTYPE_NON_LAYOUT_POD_P (t) || CLASSTYPE_EMPTY_P (t))
5461 base_t = make_node (TREE_CODE (t));
5463 /* Set the size and alignment for the new type. In G++ 3.2, all
5464 empty classes were considered to have size zero when used as
5465 base classes. */
5466 if (!abi_version_at_least (2) && CLASSTYPE_EMPTY_P (t))
5468 TYPE_SIZE (base_t) = bitsize_zero_node;
5469 TYPE_SIZE_UNIT (base_t) = size_zero_node;
5470 if (warn_abi && !integer_zerop (rli_size_unit_so_far (rli)))
5471 warning (OPT_Wabi,
5472 "layout of classes derived from empty class %qT "
5473 "may change in a future version of GCC",
5476 else
5478 tree eoc;
5480 /* If the ABI version is not at least two, and the last
5481 field was a bit-field, RLI may not be on a byte
5482 boundary. In particular, rli_size_unit_so_far might
5483 indicate the last complete byte, while rli_size_so_far
5484 indicates the total number of bits used. Therefore,
5485 rli_size_so_far, rather than rli_size_unit_so_far, is
5486 used to compute TYPE_SIZE_UNIT. */
5487 eoc = end_of_class (t, /*include_virtuals_p=*/0);
5488 TYPE_SIZE_UNIT (base_t)
5489 = size_binop (MAX_EXPR,
5490 convert (sizetype,
5491 size_binop (CEIL_DIV_EXPR,
5492 rli_size_so_far (rli),
5493 bitsize_int (BITS_PER_UNIT))),
5494 eoc);
5495 TYPE_SIZE (base_t)
5496 = size_binop (MAX_EXPR,
5497 rli_size_so_far (rli),
5498 size_binop (MULT_EXPR,
5499 convert (bitsizetype, eoc),
5500 bitsize_int (BITS_PER_UNIT)));
5502 TYPE_ALIGN (base_t) = rli->record_align;
5503 TYPE_USER_ALIGN (base_t) = TYPE_USER_ALIGN (t);
5505 /* Copy the fields from T. */
5506 next_field = &TYPE_FIELDS (base_t);
5507 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
5508 if (TREE_CODE (field) == FIELD_DECL)
5510 *next_field = build_decl (input_location,
5511 FIELD_DECL,
5512 DECL_NAME (field),
5513 TREE_TYPE (field));
5514 DECL_CONTEXT (*next_field) = base_t;
5515 DECL_FIELD_OFFSET (*next_field) = DECL_FIELD_OFFSET (field);
5516 DECL_FIELD_BIT_OFFSET (*next_field)
5517 = DECL_FIELD_BIT_OFFSET (field);
5518 DECL_SIZE (*next_field) = DECL_SIZE (field);
5519 DECL_MODE (*next_field) = DECL_MODE (field);
5520 next_field = &DECL_CHAIN (*next_field);
5523 /* Record the base version of the type. */
5524 CLASSTYPE_AS_BASE (t) = base_t;
5525 TYPE_CONTEXT (base_t) = t;
5527 else
5528 CLASSTYPE_AS_BASE (t) = t;
5530 /* Every empty class contains an empty class. */
5531 if (CLASSTYPE_EMPTY_P (t))
5532 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) = 1;
5534 /* Set the TYPE_DECL for this type to contain the right
5535 value for DECL_OFFSET, so that we can use it as part
5536 of a COMPONENT_REF for multiple inheritance. */
5537 layout_decl (TYPE_MAIN_DECL (t), 0);
5539 /* Now fix up any virtual base class types that we left lying
5540 around. We must get these done before we try to lay out the
5541 virtual function table. As a side-effect, this will remove the
5542 base subobject fields. */
5543 layout_virtual_bases (rli, empty_base_offsets);
5545 /* Make sure that empty classes are reflected in RLI at this
5546 point. */
5547 include_empty_classes(rli);
5549 /* Make sure not to create any structures with zero size. */
5550 if (integer_zerop (rli_size_unit_so_far (rli)) && CLASSTYPE_EMPTY_P (t))
5551 place_field (rli,
5552 build_decl (input_location,
5553 FIELD_DECL, NULL_TREE, char_type_node));
5555 /* If this is a non-POD, declaring it packed makes a difference to how it
5556 can be used as a field; don't let finalize_record_size undo it. */
5557 if (TYPE_PACKED (t) && !layout_pod_type_p (t))
5558 rli->packed_maybe_necessary = true;
5560 /* Let the back end lay out the type. */
5561 finish_record_layout (rli, /*free_p=*/true);
5563 /* Warn about bases that can't be talked about due to ambiguity. */
5564 warn_about_ambiguous_bases (t);
5566 /* Now that we're done with layout, give the base fields the real types. */
5567 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
5568 if (DECL_ARTIFICIAL (field) && IS_FAKE_BASE_TYPE (TREE_TYPE (field)))
5569 TREE_TYPE (field) = TYPE_CONTEXT (TREE_TYPE (field));
5571 /* Clean up. */
5572 splay_tree_delete (empty_base_offsets);
5574 if (CLASSTYPE_EMPTY_P (t)
5575 && tree_int_cst_lt (sizeof_biggest_empty_class,
5576 TYPE_SIZE_UNIT (t)))
5577 sizeof_biggest_empty_class = TYPE_SIZE_UNIT (t);
5580 /* Determine the "key method" for the class type indicated by TYPE,
5581 and set CLASSTYPE_KEY_METHOD accordingly. */
5583 void
5584 determine_key_method (tree type)
5586 tree method;
5588 if (TYPE_FOR_JAVA (type)
5589 || processing_template_decl
5590 || CLASSTYPE_TEMPLATE_INSTANTIATION (type)
5591 || CLASSTYPE_INTERFACE_KNOWN (type))
5592 return;
5594 /* The key method is the first non-pure virtual function that is not
5595 inline at the point of class definition. On some targets the
5596 key function may not be inline; those targets should not call
5597 this function until the end of the translation unit. */
5598 for (method = TYPE_METHODS (type); method != NULL_TREE;
5599 method = DECL_CHAIN (method))
5600 if (DECL_VINDEX (method) != NULL_TREE
5601 && ! DECL_DECLARED_INLINE_P (method)
5602 && ! DECL_PURE_VIRTUAL_P (method))
5604 CLASSTYPE_KEY_METHOD (type) = method;
5605 break;
5608 return;
5611 /* Perform processing required when the definition of T (a class type)
5612 is complete. */
5614 void
5615 finish_struct_1 (tree t)
5617 tree x;
5618 /* A TREE_LIST. The TREE_VALUE of each node is a FUNCTION_DECL. */
5619 tree virtuals = NULL_TREE;
5620 int n_fields = 0;
5622 if (COMPLETE_TYPE_P (t))
5624 gcc_assert (MAYBE_CLASS_TYPE_P (t));
5625 error ("redefinition of %q#T", t);
5626 popclass ();
5627 return;
5630 /* If this type was previously laid out as a forward reference,
5631 make sure we lay it out again. */
5632 TYPE_SIZE (t) = NULL_TREE;
5633 CLASSTYPE_PRIMARY_BINFO (t) = NULL_TREE;
5635 /* Make assumptions about the class; we'll reset the flags if
5636 necessary. */
5637 CLASSTYPE_EMPTY_P (t) = 1;
5638 CLASSTYPE_NEARLY_EMPTY_P (t) = 1;
5639 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) = 0;
5640 CLASSTYPE_LITERAL_P (t) = true;
5642 /* Do end-of-class semantic processing: checking the validity of the
5643 bases and members and add implicitly generated methods. */
5644 check_bases_and_members (t);
5646 /* Find the key method. */
5647 if (TYPE_CONTAINS_VPTR_P (t))
5649 /* The Itanium C++ ABI permits the key method to be chosen when
5650 the class is defined -- even though the key method so
5651 selected may later turn out to be an inline function. On
5652 some systems (such as ARM Symbian OS) the key method cannot
5653 be determined until the end of the translation unit. On such
5654 systems, we leave CLASSTYPE_KEY_METHOD set to NULL, which
5655 will cause the class to be added to KEYED_CLASSES. Then, in
5656 finish_file we will determine the key method. */
5657 if (targetm.cxx.key_method_may_be_inline ())
5658 determine_key_method (t);
5660 /* If a polymorphic class has no key method, we may emit the vtable
5661 in every translation unit where the class definition appears. */
5662 if (CLASSTYPE_KEY_METHOD (t) == NULL_TREE)
5663 keyed_classes = tree_cons (NULL_TREE, t, keyed_classes);
5666 /* Layout the class itself. */
5667 layout_class_type (t, &virtuals);
5668 if (CLASSTYPE_AS_BASE (t) != t)
5669 /* We use the base type for trivial assignments, and hence it
5670 needs a mode. */
5671 compute_record_mode (CLASSTYPE_AS_BASE (t));
5673 virtuals = modify_all_vtables (t, nreverse (virtuals));
5675 /* If necessary, create the primary vtable for this class. */
5676 if (virtuals || TYPE_CONTAINS_VPTR_P (t))
5678 /* We must enter these virtuals into the table. */
5679 if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t))
5680 build_primary_vtable (NULL_TREE, t);
5681 else if (! BINFO_NEW_VTABLE_MARKED (TYPE_BINFO (t)))
5682 /* Here we know enough to change the type of our virtual
5683 function table, but we will wait until later this function. */
5684 build_primary_vtable (CLASSTYPE_PRIMARY_BINFO (t), t);
5687 if (TYPE_CONTAINS_VPTR_P (t))
5689 int vindex;
5690 tree fn;
5692 if (BINFO_VTABLE (TYPE_BINFO (t)))
5693 gcc_assert (DECL_VIRTUAL_P (BINFO_VTABLE (TYPE_BINFO (t))));
5694 if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t))
5695 gcc_assert (BINFO_VIRTUALS (TYPE_BINFO (t)) == NULL_TREE);
5697 /* Add entries for virtual functions introduced by this class. */
5698 BINFO_VIRTUALS (TYPE_BINFO (t))
5699 = chainon (BINFO_VIRTUALS (TYPE_BINFO (t)), virtuals);
5701 /* Set DECL_VINDEX for all functions declared in this class. */
5702 for (vindex = 0, fn = BINFO_VIRTUALS (TYPE_BINFO (t));
5704 fn = TREE_CHAIN (fn),
5705 vindex += (TARGET_VTABLE_USES_DESCRIPTORS
5706 ? TARGET_VTABLE_USES_DESCRIPTORS : 1))
5708 tree fndecl = BV_FN (fn);
5710 if (DECL_THUNK_P (fndecl))
5711 /* A thunk. We should never be calling this entry directly
5712 from this vtable -- we'd use the entry for the non
5713 thunk base function. */
5714 DECL_VINDEX (fndecl) = NULL_TREE;
5715 else if (TREE_CODE (DECL_VINDEX (fndecl)) != INTEGER_CST)
5716 DECL_VINDEX (fndecl) = build_int_cst (NULL_TREE, vindex);
5720 finish_struct_bits (t);
5722 /* Complete the rtl for any static member objects of the type we're
5723 working on. */
5724 for (x = TYPE_FIELDS (t); x; x = DECL_CHAIN (x))
5725 if (TREE_CODE (x) == VAR_DECL && TREE_STATIC (x)
5726 && TREE_TYPE (x) != error_mark_node
5727 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (x)), t))
5728 DECL_MODE (x) = TYPE_MODE (t);
5730 /* Done with FIELDS...now decide whether to sort these for
5731 faster lookups later.
5733 We use a small number because most searches fail (succeeding
5734 ultimately as the search bores through the inheritance
5735 hierarchy), and we want this failure to occur quickly. */
5737 n_fields = count_fields (TYPE_FIELDS (t));
5738 if (n_fields > 7)
5740 struct sorted_fields_type *field_vec = ggc_alloc_sorted_fields_type
5741 (sizeof (struct sorted_fields_type) + n_fields * sizeof (tree));
5742 field_vec->len = n_fields;
5743 add_fields_to_record_type (TYPE_FIELDS (t), field_vec, 0);
5744 qsort (field_vec->elts, n_fields, sizeof (tree),
5745 field_decl_cmp);
5746 CLASSTYPE_SORTED_FIELDS (t) = field_vec;
5749 /* Complain if one of the field types requires lower visibility. */
5750 constrain_class_visibility (t);
5752 /* Make the rtl for any new vtables we have created, and unmark
5753 the base types we marked. */
5754 finish_vtbls (t);
5756 /* Build the VTT for T. */
5757 build_vtt (t);
5759 /* This warning does not make sense for Java classes, since they
5760 cannot have destructors. */
5761 if (!TYPE_FOR_JAVA (t) && warn_nonvdtor && TYPE_POLYMORPHIC_P (t))
5763 tree dtor;
5765 dtor = CLASSTYPE_DESTRUCTORS (t);
5766 if (/* An implicitly declared destructor is always public. And,
5767 if it were virtual, we would have created it by now. */
5768 !dtor
5769 || (!DECL_VINDEX (dtor)
5770 && (/* public non-virtual */
5771 (!TREE_PRIVATE (dtor) && !TREE_PROTECTED (dtor))
5772 || (/* non-public non-virtual with friends */
5773 (TREE_PRIVATE (dtor) || TREE_PROTECTED (dtor))
5774 && (CLASSTYPE_FRIEND_CLASSES (t)
5775 || DECL_FRIENDLIST (TYPE_MAIN_DECL (t)))))))
5776 warning (OPT_Wnon_virtual_dtor,
5777 "%q#T has virtual functions and accessible"
5778 " non-virtual destructor", t);
5781 complete_vars (t);
5783 if (warn_overloaded_virtual)
5784 warn_hidden (t);
5786 /* Class layout, assignment of virtual table slots, etc., is now
5787 complete. Give the back end a chance to tweak the visibility of
5788 the class or perform any other required target modifications. */
5789 targetm.cxx.adjust_class_at_definition (t);
5791 maybe_suppress_debug_info (t);
5793 dump_class_hierarchy (t);
5795 /* Finish debugging output for this type. */
5796 rest_of_type_compilation (t, ! LOCAL_CLASS_P (t));
5799 /* When T was built up, the member declarations were added in reverse
5800 order. Rearrange them to declaration order. */
5802 void
5803 unreverse_member_declarations (tree t)
5805 tree next;
5806 tree prev;
5807 tree x;
5809 /* The following lists are all in reverse order. Put them in
5810 declaration order now. */
5811 TYPE_METHODS (t) = nreverse (TYPE_METHODS (t));
5812 CLASSTYPE_DECL_LIST (t) = nreverse (CLASSTYPE_DECL_LIST (t));
5814 /* Actually, for the TYPE_FIELDS, only the non TYPE_DECLs are in
5815 reverse order, so we can't just use nreverse. */
5816 prev = NULL_TREE;
5817 for (x = TYPE_FIELDS (t);
5818 x && TREE_CODE (x) != TYPE_DECL;
5819 x = next)
5821 next = DECL_CHAIN (x);
5822 DECL_CHAIN (x) = prev;
5823 prev = x;
5825 if (prev)
5827 DECL_CHAIN (TYPE_FIELDS (t)) = x;
5828 if (prev)
5829 TYPE_FIELDS (t) = prev;
5833 tree
5834 finish_struct (tree t, tree attributes)
5836 location_t saved_loc = input_location;
5838 /* Now that we've got all the field declarations, reverse everything
5839 as necessary. */
5840 unreverse_member_declarations (t);
5842 cplus_decl_attributes (&t, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
5844 /* Nadger the current location so that diagnostics point to the start of
5845 the struct, not the end. */
5846 input_location = DECL_SOURCE_LOCATION (TYPE_NAME (t));
5848 if (processing_template_decl)
5850 tree x;
5852 finish_struct_methods (t);
5853 TYPE_SIZE (t) = bitsize_zero_node;
5854 TYPE_SIZE_UNIT (t) = size_zero_node;
5856 /* We need to emit an error message if this type was used as a parameter
5857 and it is an abstract type, even if it is a template. We construct
5858 a simple CLASSTYPE_PURE_VIRTUALS list without taking bases into
5859 account and we call complete_vars with this type, which will check
5860 the PARM_DECLS. Note that while the type is being defined,
5861 CLASSTYPE_PURE_VIRTUALS contains the list of the inline friends
5862 (see CLASSTYPE_INLINE_FRIENDS) so we need to clear it. */
5863 CLASSTYPE_PURE_VIRTUALS (t) = NULL;
5864 for (x = TYPE_METHODS (t); x; x = DECL_CHAIN (x))
5865 if (DECL_PURE_VIRTUAL_P (x))
5866 VEC_safe_push (tree, gc, CLASSTYPE_PURE_VIRTUALS (t), x);
5867 complete_vars (t);
5869 /* Remember current #pragma pack value. */
5870 TYPE_PRECISION (t) = maximum_field_alignment;
5872 else
5873 finish_struct_1 (t);
5875 input_location = saved_loc;
5877 TYPE_BEING_DEFINED (t) = 0;
5879 if (current_class_type)
5880 popclass ();
5881 else
5882 error ("trying to finish struct, but kicked out due to previous parse errors");
5884 if (processing_template_decl && at_function_scope_p ())
5885 add_stmt (build_min (TAG_DEFN, t));
5887 return t;
5890 /* Return the dynamic type of INSTANCE, if known.
5891 Used to determine whether the virtual function table is needed
5892 or not.
5894 *NONNULL is set iff INSTANCE can be known to be nonnull, regardless
5895 of our knowledge of its type. *NONNULL should be initialized
5896 before this function is called. */
5898 static tree
5899 fixed_type_or_null (tree instance, int *nonnull, int *cdtorp)
5901 #define RECUR(T) fixed_type_or_null((T), nonnull, cdtorp)
5903 switch (TREE_CODE (instance))
5905 case INDIRECT_REF:
5906 if (POINTER_TYPE_P (TREE_TYPE (instance)))
5907 return NULL_TREE;
5908 else
5909 return RECUR (TREE_OPERAND (instance, 0));
5911 case CALL_EXPR:
5912 /* This is a call to a constructor, hence it's never zero. */
5913 if (TREE_HAS_CONSTRUCTOR (instance))
5915 if (nonnull)
5916 *nonnull = 1;
5917 return TREE_TYPE (instance);
5919 return NULL_TREE;
5921 case SAVE_EXPR:
5922 /* This is a call to a constructor, hence it's never zero. */
5923 if (TREE_HAS_CONSTRUCTOR (instance))
5925 if (nonnull)
5926 *nonnull = 1;
5927 return TREE_TYPE (instance);
5929 return RECUR (TREE_OPERAND (instance, 0));
5931 case POINTER_PLUS_EXPR:
5932 case PLUS_EXPR:
5933 case MINUS_EXPR:
5934 if (TREE_CODE (TREE_OPERAND (instance, 0)) == ADDR_EXPR)
5935 return RECUR (TREE_OPERAND (instance, 0));
5936 if (TREE_CODE (TREE_OPERAND (instance, 1)) == INTEGER_CST)
5937 /* Propagate nonnull. */
5938 return RECUR (TREE_OPERAND (instance, 0));
5940 return NULL_TREE;
5942 CASE_CONVERT:
5943 return RECUR (TREE_OPERAND (instance, 0));
5945 case ADDR_EXPR:
5946 instance = TREE_OPERAND (instance, 0);
5947 if (nonnull)
5949 /* Just because we see an ADDR_EXPR doesn't mean we're dealing
5950 with a real object -- given &p->f, p can still be null. */
5951 tree t = get_base_address (instance);
5952 /* ??? Probably should check DECL_WEAK here. */
5953 if (t && DECL_P (t))
5954 *nonnull = 1;
5956 return RECUR (instance);
5958 case COMPONENT_REF:
5959 /* If this component is really a base class reference, then the field
5960 itself isn't definitive. */
5961 if (DECL_FIELD_IS_BASE (TREE_OPERAND (instance, 1)))
5962 return RECUR (TREE_OPERAND (instance, 0));
5963 return RECUR (TREE_OPERAND (instance, 1));
5965 case VAR_DECL:
5966 case FIELD_DECL:
5967 if (TREE_CODE (TREE_TYPE (instance)) == ARRAY_TYPE
5968 && MAYBE_CLASS_TYPE_P (TREE_TYPE (TREE_TYPE (instance))))
5970 if (nonnull)
5971 *nonnull = 1;
5972 return TREE_TYPE (TREE_TYPE (instance));
5974 /* fall through... */
5975 case TARGET_EXPR:
5976 case PARM_DECL:
5977 case RESULT_DECL:
5978 if (MAYBE_CLASS_TYPE_P (TREE_TYPE (instance)))
5980 if (nonnull)
5981 *nonnull = 1;
5982 return TREE_TYPE (instance);
5984 else if (instance == current_class_ptr)
5986 if (nonnull)
5987 *nonnull = 1;
5989 /* if we're in a ctor or dtor, we know our type. */
5990 if (DECL_LANG_SPECIFIC (current_function_decl)
5991 && (DECL_CONSTRUCTOR_P (current_function_decl)
5992 || DECL_DESTRUCTOR_P (current_function_decl)))
5994 if (cdtorp)
5995 *cdtorp = 1;
5996 return TREE_TYPE (TREE_TYPE (instance));
5999 else if (TREE_CODE (TREE_TYPE (instance)) == REFERENCE_TYPE)
6001 /* We only need one hash table because it is always left empty. */
6002 static htab_t ht;
6003 if (!ht)
6004 ht = htab_create (37,
6005 htab_hash_pointer,
6006 htab_eq_pointer,
6007 /*htab_del=*/NULL);
6009 /* Reference variables should be references to objects. */
6010 if (nonnull)
6011 *nonnull = 1;
6013 /* Enter the INSTANCE in a table to prevent recursion; a
6014 variable's initializer may refer to the variable
6015 itself. */
6016 if (TREE_CODE (instance) == VAR_DECL
6017 && DECL_INITIAL (instance)
6018 && !type_dependent_expression_p_push (DECL_INITIAL (instance))
6019 && !htab_find (ht, instance))
6021 tree type;
6022 void **slot;
6024 slot = htab_find_slot (ht, instance, INSERT);
6025 *slot = instance;
6026 type = RECUR (DECL_INITIAL (instance));
6027 htab_remove_elt (ht, instance);
6029 return type;
6032 return NULL_TREE;
6034 default:
6035 return NULL_TREE;
6037 #undef RECUR
6040 /* Return nonzero if the dynamic type of INSTANCE is known, and
6041 equivalent to the static type. We also handle the case where
6042 INSTANCE is really a pointer. Return negative if this is a
6043 ctor/dtor. There the dynamic type is known, but this might not be
6044 the most derived base of the original object, and hence virtual
6045 bases may not be layed out according to this type.
6047 Used to determine whether the virtual function table is needed
6048 or not.
6050 *NONNULL is set iff INSTANCE can be known to be nonnull, regardless
6051 of our knowledge of its type. *NONNULL should be initialized
6052 before this function is called. */
6055 resolves_to_fixed_type_p (tree instance, int* nonnull)
6057 tree t = TREE_TYPE (instance);
6058 int cdtorp = 0;
6059 tree fixed;
6061 if (processing_template_decl)
6063 /* In a template we only care about the type of the result. */
6064 if (nonnull)
6065 *nonnull = true;
6066 return true;
6069 fixed = fixed_type_or_null (instance, nonnull, &cdtorp);
6070 if (fixed == NULL_TREE)
6071 return 0;
6072 if (POINTER_TYPE_P (t))
6073 t = TREE_TYPE (t);
6074 if (!same_type_ignoring_top_level_qualifiers_p (t, fixed))
6075 return 0;
6076 return cdtorp ? -1 : 1;
6080 void
6081 init_class_processing (void)
6083 current_class_depth = 0;
6084 current_class_stack_size = 10;
6085 current_class_stack
6086 = XNEWVEC (struct class_stack_node, current_class_stack_size);
6087 local_classes = VEC_alloc (tree, gc, 8);
6088 sizeof_biggest_empty_class = size_zero_node;
6090 ridpointers[(int) RID_PUBLIC] = access_public_node;
6091 ridpointers[(int) RID_PRIVATE] = access_private_node;
6092 ridpointers[(int) RID_PROTECTED] = access_protected_node;
6095 /* Restore the cached PREVIOUS_CLASS_LEVEL. */
6097 static void
6098 restore_class_cache (void)
6100 tree type;
6102 /* We are re-entering the same class we just left, so we don't
6103 have to search the whole inheritance matrix to find all the
6104 decls to bind again. Instead, we install the cached
6105 class_shadowed list and walk through it binding names. */
6106 push_binding_level (previous_class_level);
6107 class_binding_level = previous_class_level;
6108 /* Restore IDENTIFIER_TYPE_VALUE. */
6109 for (type = class_binding_level->type_shadowed;
6110 type;
6111 type = TREE_CHAIN (type))
6112 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (type), TREE_TYPE (type));
6115 /* Set global variables CURRENT_CLASS_NAME and CURRENT_CLASS_TYPE as
6116 appropriate for TYPE.
6118 So that we may avoid calls to lookup_name, we cache the _TYPE
6119 nodes of local TYPE_DECLs in the TREE_TYPE field of the name.
6121 For multiple inheritance, we perform a two-pass depth-first search
6122 of the type lattice. */
6124 void
6125 pushclass (tree type)
6127 class_stack_node_t csn;
6129 type = TYPE_MAIN_VARIANT (type);
6131 /* Make sure there is enough room for the new entry on the stack. */
6132 if (current_class_depth + 1 >= current_class_stack_size)
6134 current_class_stack_size *= 2;
6135 current_class_stack
6136 = XRESIZEVEC (struct class_stack_node, current_class_stack,
6137 current_class_stack_size);
6140 /* Insert a new entry on the class stack. */
6141 csn = current_class_stack + current_class_depth;
6142 csn->name = current_class_name;
6143 csn->type = current_class_type;
6144 csn->access = current_access_specifier;
6145 csn->names_used = 0;
6146 csn->hidden = 0;
6147 current_class_depth++;
6149 /* Now set up the new type. */
6150 current_class_name = TYPE_NAME (type);
6151 if (TREE_CODE (current_class_name) == TYPE_DECL)
6152 current_class_name = DECL_NAME (current_class_name);
6153 current_class_type = type;
6155 /* By default, things in classes are private, while things in
6156 structures or unions are public. */
6157 current_access_specifier = (CLASSTYPE_DECLARED_CLASS (type)
6158 ? access_private_node
6159 : access_public_node);
6161 if (previous_class_level
6162 && type != previous_class_level->this_entity
6163 && current_class_depth == 1)
6165 /* Forcibly remove any old class remnants. */
6166 invalidate_class_lookup_cache ();
6169 if (!previous_class_level
6170 || type != previous_class_level->this_entity
6171 || current_class_depth > 1)
6172 pushlevel_class ();
6173 else
6174 restore_class_cache ();
6177 /* When we exit a toplevel class scope, we save its binding level so
6178 that we can restore it quickly. Here, we've entered some other
6179 class, so we must invalidate our cache. */
6181 void
6182 invalidate_class_lookup_cache (void)
6184 previous_class_level = NULL;
6187 /* Get out of the current class scope. If we were in a class scope
6188 previously, that is the one popped to. */
6190 void
6191 popclass (void)
6193 poplevel_class ();
6195 current_class_depth--;
6196 current_class_name = current_class_stack[current_class_depth].name;
6197 current_class_type = current_class_stack[current_class_depth].type;
6198 current_access_specifier = current_class_stack[current_class_depth].access;
6199 if (current_class_stack[current_class_depth].names_used)
6200 splay_tree_delete (current_class_stack[current_class_depth].names_used);
6203 /* Mark the top of the class stack as hidden. */
6205 void
6206 push_class_stack (void)
6208 if (current_class_depth)
6209 ++current_class_stack[current_class_depth - 1].hidden;
6212 /* Mark the top of the class stack as un-hidden. */
6214 void
6215 pop_class_stack (void)
6217 if (current_class_depth)
6218 --current_class_stack[current_class_depth - 1].hidden;
6221 /* Returns 1 if the class type currently being defined is either T or
6222 a nested type of T. */
6224 bool
6225 currently_open_class (tree t)
6227 int i;
6229 if (!CLASS_TYPE_P (t))
6230 return false;
6232 t = TYPE_MAIN_VARIANT (t);
6234 /* We start looking from 1 because entry 0 is from global scope,
6235 and has no type. */
6236 for (i = current_class_depth; i > 0; --i)
6238 tree c;
6239 if (i == current_class_depth)
6240 c = current_class_type;
6241 else
6243 if (current_class_stack[i].hidden)
6244 break;
6245 c = current_class_stack[i].type;
6247 if (!c)
6248 continue;
6249 if (same_type_p (c, t))
6250 return true;
6252 return false;
6255 /* If either current_class_type or one of its enclosing classes are derived
6256 from T, return the appropriate type. Used to determine how we found
6257 something via unqualified lookup. */
6259 tree
6260 currently_open_derived_class (tree t)
6262 int i;
6264 /* The bases of a dependent type are unknown. */
6265 if (dependent_type_p (t))
6266 return NULL_TREE;
6268 if (!current_class_type)
6269 return NULL_TREE;
6271 if (DERIVED_FROM_P (t, current_class_type))
6272 return current_class_type;
6274 for (i = current_class_depth - 1; i > 0; --i)
6276 if (current_class_stack[i].hidden)
6277 break;
6278 if (DERIVED_FROM_P (t, current_class_stack[i].type))
6279 return current_class_stack[i].type;
6282 return NULL_TREE;
6285 /* Returns the innermost class type which is not a lambda closure type. */
6287 tree
6288 current_nonlambda_class_type (void)
6290 int i;
6292 /* We start looking from 1 because entry 0 is from global scope,
6293 and has no type. */
6294 for (i = current_class_depth; i > 0; --i)
6296 tree c;
6297 if (i == current_class_depth)
6298 c = current_class_type;
6299 else
6301 if (current_class_stack[i].hidden)
6302 break;
6303 c = current_class_stack[i].type;
6305 if (!c)
6306 continue;
6307 if (!LAMBDA_TYPE_P (c))
6308 return c;
6310 return NULL_TREE;
6313 /* When entering a class scope, all enclosing class scopes' names with
6314 static meaning (static variables, static functions, types and
6315 enumerators) have to be visible. This recursive function calls
6316 pushclass for all enclosing class contexts until global or a local
6317 scope is reached. TYPE is the enclosed class. */
6319 void
6320 push_nested_class (tree type)
6322 /* A namespace might be passed in error cases, like A::B:C. */
6323 if (type == NULL_TREE
6324 || !CLASS_TYPE_P (type))
6325 return;
6327 push_nested_class (DECL_CONTEXT (TYPE_MAIN_DECL (type)));
6329 pushclass (type);
6332 /* Undoes a push_nested_class call. */
6334 void
6335 pop_nested_class (void)
6337 tree context = DECL_CONTEXT (TYPE_MAIN_DECL (current_class_type));
6339 popclass ();
6340 if (context && CLASS_TYPE_P (context))
6341 pop_nested_class ();
6344 /* Returns the number of extern "LANG" blocks we are nested within. */
6347 current_lang_depth (void)
6349 return VEC_length (tree, current_lang_base);
6352 /* Set global variables CURRENT_LANG_NAME to appropriate value
6353 so that behavior of name-mangling machinery is correct. */
6355 void
6356 push_lang_context (tree name)
6358 VEC_safe_push (tree, gc, current_lang_base, current_lang_name);
6360 if (name == lang_name_cplusplus)
6362 current_lang_name = name;
6364 else if (name == lang_name_java)
6366 current_lang_name = name;
6367 /* DECL_IGNORED_P is initially set for these types, to avoid clutter.
6368 (See record_builtin_java_type in decl.c.) However, that causes
6369 incorrect debug entries if these types are actually used.
6370 So we re-enable debug output after extern "Java". */
6371 DECL_IGNORED_P (TYPE_NAME (java_byte_type_node)) = 0;
6372 DECL_IGNORED_P (TYPE_NAME (java_short_type_node)) = 0;
6373 DECL_IGNORED_P (TYPE_NAME (java_int_type_node)) = 0;
6374 DECL_IGNORED_P (TYPE_NAME (java_long_type_node)) = 0;
6375 DECL_IGNORED_P (TYPE_NAME (java_float_type_node)) = 0;
6376 DECL_IGNORED_P (TYPE_NAME (java_double_type_node)) = 0;
6377 DECL_IGNORED_P (TYPE_NAME (java_char_type_node)) = 0;
6378 DECL_IGNORED_P (TYPE_NAME (java_boolean_type_node)) = 0;
6380 else if (name == lang_name_c)
6382 current_lang_name = name;
6384 else
6385 error ("language string %<\"%E\"%> not recognized", name);
6388 /* Get out of the current language scope. */
6390 void
6391 pop_lang_context (void)
6393 current_lang_name = VEC_pop (tree, current_lang_base);
6396 /* Type instantiation routines. */
6398 /* Given an OVERLOAD and a TARGET_TYPE, return the function that
6399 matches the TARGET_TYPE. If there is no satisfactory match, return
6400 error_mark_node, and issue an error & warning messages under
6401 control of FLAGS. Permit pointers to member function if FLAGS
6402 permits. If TEMPLATE_ONLY, the name of the overloaded function was
6403 a template-id, and EXPLICIT_TARGS are the explicitly provided
6404 template arguments.
6406 If OVERLOAD is for one or more member functions, then ACCESS_PATH
6407 is the base path used to reference those member functions. If
6408 TF_NO_ACCESS_CONTROL is not set in FLAGS, and the address is
6409 resolved to a member function, access checks will be performed and
6410 errors issued if appropriate. */
6412 static tree
6413 resolve_address_of_overloaded_function (tree target_type,
6414 tree overload,
6415 tsubst_flags_t flags,
6416 bool template_only,
6417 tree explicit_targs,
6418 tree access_path)
6420 /* Here's what the standard says:
6422 [over.over]
6424 If the name is a function template, template argument deduction
6425 is done, and if the argument deduction succeeds, the deduced
6426 arguments are used to generate a single template function, which
6427 is added to the set of overloaded functions considered.
6429 Non-member functions and static member functions match targets of
6430 type "pointer-to-function" or "reference-to-function." Nonstatic
6431 member functions match targets of type "pointer-to-member
6432 function;" the function type of the pointer to member is used to
6433 select the member function from the set of overloaded member
6434 functions. If a nonstatic member function is selected, the
6435 reference to the overloaded function name is required to have the
6436 form of a pointer to member as described in 5.3.1.
6438 If more than one function is selected, any template functions in
6439 the set are eliminated if the set also contains a non-template
6440 function, and any given template function is eliminated if the
6441 set contains a second template function that is more specialized
6442 than the first according to the partial ordering rules 14.5.5.2.
6443 After such eliminations, if any, there shall remain exactly one
6444 selected function. */
6446 int is_ptrmem = 0;
6447 /* We store the matches in a TREE_LIST rooted here. The functions
6448 are the TREE_PURPOSE, not the TREE_VALUE, in this list, for easy
6449 interoperability with most_specialized_instantiation. */
6450 tree matches = NULL_TREE;
6451 tree fn;
6452 tree target_fn_type;
6454 /* By the time we get here, we should be seeing only real
6455 pointer-to-member types, not the internal POINTER_TYPE to
6456 METHOD_TYPE representation. */
6457 gcc_assert (TREE_CODE (target_type) != POINTER_TYPE
6458 || TREE_CODE (TREE_TYPE (target_type)) != METHOD_TYPE);
6460 gcc_assert (is_overloaded_fn (overload));
6462 /* Check that the TARGET_TYPE is reasonable. */
6463 if (TYPE_PTRFN_P (target_type))
6464 /* This is OK. */;
6465 else if (TYPE_PTRMEMFUNC_P (target_type))
6466 /* This is OK, too. */
6467 is_ptrmem = 1;
6468 else if (TREE_CODE (target_type) == FUNCTION_TYPE)
6469 /* This is OK, too. This comes from a conversion to reference
6470 type. */
6471 target_type = build_reference_type (target_type);
6472 else
6474 if (flags & tf_error)
6475 error ("cannot resolve overloaded function %qD based on"
6476 " conversion to type %qT",
6477 DECL_NAME (OVL_FUNCTION (overload)), target_type);
6478 return error_mark_node;
6481 /* Non-member functions and static member functions match targets of type
6482 "pointer-to-function" or "reference-to-function." Nonstatic member
6483 functions match targets of type "pointer-to-member-function;" the
6484 function type of the pointer to member is used to select the member
6485 function from the set of overloaded member functions.
6487 So figure out the FUNCTION_TYPE that we want to match against. */
6488 target_fn_type = static_fn_type (target_type);
6490 /* If we can find a non-template function that matches, we can just
6491 use it. There's no point in generating template instantiations
6492 if we're just going to throw them out anyhow. But, of course, we
6493 can only do this when we don't *need* a template function. */
6494 if (!template_only)
6496 tree fns;
6498 for (fns = overload; fns; fns = OVL_NEXT (fns))
6500 tree fn = OVL_CURRENT (fns);
6502 if (TREE_CODE (fn) == TEMPLATE_DECL)
6503 /* We're not looking for templates just yet. */
6504 continue;
6506 if ((TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
6507 != is_ptrmem)
6508 /* We're looking for a non-static member, and this isn't
6509 one, or vice versa. */
6510 continue;
6512 /* Ignore functions which haven't been explicitly
6513 declared. */
6514 if (DECL_ANTICIPATED (fn))
6515 continue;
6517 /* See if there's a match. */
6518 if (same_type_p (target_fn_type, static_fn_type (fn)))
6519 matches = tree_cons (fn, NULL_TREE, matches);
6523 /* Now, if we've already got a match (or matches), there's no need
6524 to proceed to the template functions. But, if we don't have a
6525 match we need to look at them, too. */
6526 if (!matches)
6528 tree target_arg_types;
6529 tree target_ret_type;
6530 tree fns;
6531 tree *args;
6532 unsigned int nargs, ia;
6533 tree arg;
6535 target_arg_types = TYPE_ARG_TYPES (target_fn_type);
6536 target_ret_type = TREE_TYPE (target_fn_type);
6538 nargs = list_length (target_arg_types);
6539 args = XALLOCAVEC (tree, nargs);
6540 for (arg = target_arg_types, ia = 0;
6541 arg != NULL_TREE && arg != void_list_node;
6542 arg = TREE_CHAIN (arg), ++ia)
6543 args[ia] = TREE_VALUE (arg);
6544 nargs = ia;
6546 for (fns = overload; fns; fns = OVL_NEXT (fns))
6548 tree fn = OVL_CURRENT (fns);
6549 tree instantiation;
6550 tree targs;
6552 if (TREE_CODE (fn) != TEMPLATE_DECL)
6553 /* We're only looking for templates. */
6554 continue;
6556 if ((TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
6557 != is_ptrmem)
6558 /* We're not looking for a non-static member, and this is
6559 one, or vice versa. */
6560 continue;
6562 /* Try to do argument deduction. */
6563 targs = make_tree_vec (DECL_NTPARMS (fn));
6564 if (fn_type_unification (fn, explicit_targs, targs, args, nargs,
6565 target_ret_type, DEDUCE_EXACT,
6566 LOOKUP_NORMAL, false))
6567 /* Argument deduction failed. */
6568 continue;
6570 /* Instantiate the template. */
6571 instantiation = instantiate_template (fn, targs, flags);
6572 if (instantiation == error_mark_node)
6573 /* Instantiation failed. */
6574 continue;
6576 /* See if there's a match. */
6577 if (same_type_p (target_fn_type, static_fn_type (instantiation)))
6578 matches = tree_cons (instantiation, fn, matches);
6581 /* Now, remove all but the most specialized of the matches. */
6582 if (matches)
6584 tree match = most_specialized_instantiation (matches);
6586 if (match != error_mark_node)
6587 matches = tree_cons (TREE_PURPOSE (match),
6588 NULL_TREE,
6589 NULL_TREE);
6593 /* Now we should have exactly one function in MATCHES. */
6594 if (matches == NULL_TREE)
6596 /* There were *no* matches. */
6597 if (flags & tf_error)
6599 error ("no matches converting function %qD to type %q#T",
6600 DECL_NAME (OVL_CURRENT (overload)),
6601 target_type);
6603 print_candidates (overload);
6605 return error_mark_node;
6607 else if (TREE_CHAIN (matches))
6609 /* There were too many matches. First check if they're all
6610 the same function. */
6611 tree match;
6613 fn = TREE_PURPOSE (matches);
6614 for (match = TREE_CHAIN (matches); match; match = TREE_CHAIN (match))
6615 if (!decls_match (fn, TREE_PURPOSE (match)))
6616 break;
6618 if (match)
6620 if (flags & tf_error)
6622 error ("converting overloaded function %qD to type %q#T is ambiguous",
6623 DECL_NAME (OVL_FUNCTION (overload)),
6624 target_type);
6626 /* Since print_candidates expects the functions in the
6627 TREE_VALUE slot, we flip them here. */
6628 for (match = matches; match; match = TREE_CHAIN (match))
6629 TREE_VALUE (match) = TREE_PURPOSE (match);
6631 print_candidates (matches);
6634 return error_mark_node;
6638 /* Good, exactly one match. Now, convert it to the correct type. */
6639 fn = TREE_PURPOSE (matches);
6641 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
6642 && !(flags & tf_ptrmem_ok) && !flag_ms_extensions)
6644 static int explained;
6646 if (!(flags & tf_error))
6647 return error_mark_node;
6649 permerror (input_location, "assuming pointer to member %qD", fn);
6650 if (!explained)
6652 inform (input_location, "(a pointer to member can only be formed with %<&%E%>)", fn);
6653 explained = 1;
6657 /* If we're doing overload resolution purely for the purpose of
6658 determining conversion sequences, we should not consider the
6659 function used. If this conversion sequence is selected, the
6660 function will be marked as used at this point. */
6661 if (!(flags & tf_conv))
6663 /* Make =delete work with SFINAE. */
6664 if (DECL_DELETED_FN (fn) && !(flags & tf_error))
6665 return error_mark_node;
6667 mark_used (fn);
6670 /* We could not check access to member functions when this
6671 expression was originally created since we did not know at that
6672 time to which function the expression referred. */
6673 if (!(flags & tf_no_access_control)
6674 && DECL_FUNCTION_MEMBER_P (fn))
6676 gcc_assert (access_path);
6677 perform_or_defer_access_check (access_path, fn, fn);
6680 if (TYPE_PTRFN_P (target_type) || TYPE_PTRMEMFUNC_P (target_type))
6681 return cp_build_addr_expr (fn, flags);
6682 else
6684 /* The target must be a REFERENCE_TYPE. Above, cp_build_unary_op
6685 will mark the function as addressed, but here we must do it
6686 explicitly. */
6687 cxx_mark_addressable (fn);
6689 return fn;
6693 /* This function will instantiate the type of the expression given in
6694 RHS to match the type of LHSTYPE. If errors exist, then return
6695 error_mark_node. FLAGS is a bit mask. If TF_ERROR is set, then
6696 we complain on errors. If we are not complaining, never modify rhs,
6697 as overload resolution wants to try many possible instantiations, in
6698 the hope that at least one will work.
6700 For non-recursive calls, LHSTYPE should be a function, pointer to
6701 function, or a pointer to member function. */
6703 tree
6704 instantiate_type (tree lhstype, tree rhs, tsubst_flags_t flags)
6706 tsubst_flags_t flags_in = flags;
6707 tree access_path = NULL_TREE;
6709 flags &= ~tf_ptrmem_ok;
6711 if (lhstype == unknown_type_node)
6713 if (flags & tf_error)
6714 error ("not enough type information");
6715 return error_mark_node;
6718 if (TREE_TYPE (rhs) != NULL_TREE && ! (type_unknown_p (rhs)))
6720 if (same_type_p (lhstype, TREE_TYPE (rhs)))
6721 return rhs;
6722 if (flag_ms_extensions
6723 && TYPE_PTRMEMFUNC_P (lhstype)
6724 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (rhs)))
6725 /* Microsoft allows `A::f' to be resolved to a
6726 pointer-to-member. */
6728 else
6730 if (flags & tf_error)
6731 error ("argument of type %qT does not match %qT",
6732 TREE_TYPE (rhs), lhstype);
6733 return error_mark_node;
6737 if (TREE_CODE (rhs) == BASELINK)
6739 access_path = BASELINK_ACCESS_BINFO (rhs);
6740 rhs = BASELINK_FUNCTIONS (rhs);
6743 /* If we are in a template, and have a NON_DEPENDENT_EXPR, we cannot
6744 deduce any type information. */
6745 if (TREE_CODE (rhs) == NON_DEPENDENT_EXPR)
6747 if (flags & tf_error)
6748 error ("not enough type information");
6749 return error_mark_node;
6752 /* There only a few kinds of expressions that may have a type
6753 dependent on overload resolution. */
6754 gcc_assert (TREE_CODE (rhs) == ADDR_EXPR
6755 || TREE_CODE (rhs) == COMPONENT_REF
6756 || really_overloaded_fn (rhs)
6757 || (flag_ms_extensions && TREE_CODE (rhs) == FUNCTION_DECL));
6759 /* This should really only be used when attempting to distinguish
6760 what sort of a pointer to function we have. For now, any
6761 arithmetic operation which is not supported on pointers
6762 is rejected as an error. */
6764 switch (TREE_CODE (rhs))
6766 case COMPONENT_REF:
6768 tree member = TREE_OPERAND (rhs, 1);
6770 member = instantiate_type (lhstype, member, flags);
6771 if (member != error_mark_node
6772 && TREE_SIDE_EFFECTS (TREE_OPERAND (rhs, 0)))
6773 /* Do not lose object's side effects. */
6774 return build2 (COMPOUND_EXPR, TREE_TYPE (member),
6775 TREE_OPERAND (rhs, 0), member);
6776 return member;
6779 case OFFSET_REF:
6780 rhs = TREE_OPERAND (rhs, 1);
6781 if (BASELINK_P (rhs))
6782 return instantiate_type (lhstype, rhs, flags_in);
6784 /* This can happen if we are forming a pointer-to-member for a
6785 member template. */
6786 gcc_assert (TREE_CODE (rhs) == TEMPLATE_ID_EXPR);
6788 /* Fall through. */
6790 case TEMPLATE_ID_EXPR:
6792 tree fns = TREE_OPERAND (rhs, 0);
6793 tree args = TREE_OPERAND (rhs, 1);
6795 return
6796 resolve_address_of_overloaded_function (lhstype, fns, flags_in,
6797 /*template_only=*/true,
6798 args, access_path);
6801 case OVERLOAD:
6802 case FUNCTION_DECL:
6803 return
6804 resolve_address_of_overloaded_function (lhstype, rhs, flags_in,
6805 /*template_only=*/false,
6806 /*explicit_targs=*/NULL_TREE,
6807 access_path);
6809 case ADDR_EXPR:
6811 if (PTRMEM_OK_P (rhs))
6812 flags |= tf_ptrmem_ok;
6814 return instantiate_type (lhstype, TREE_OPERAND (rhs, 0), flags);
6817 case ERROR_MARK:
6818 return error_mark_node;
6820 default:
6821 gcc_unreachable ();
6823 return error_mark_node;
6826 /* Return the name of the virtual function pointer field
6827 (as an IDENTIFIER_NODE) for the given TYPE. Note that
6828 this may have to look back through base types to find the
6829 ultimate field name. (For single inheritance, these could
6830 all be the same name. Who knows for multiple inheritance). */
6832 static tree
6833 get_vfield_name (tree type)
6835 tree binfo, base_binfo;
6836 char *buf;
6838 for (binfo = TYPE_BINFO (type);
6839 BINFO_N_BASE_BINFOS (binfo);
6840 binfo = base_binfo)
6842 base_binfo = BINFO_BASE_BINFO (binfo, 0);
6844 if (BINFO_VIRTUAL_P (base_binfo)
6845 || !TYPE_CONTAINS_VPTR_P (BINFO_TYPE (base_binfo)))
6846 break;
6849 type = BINFO_TYPE (binfo);
6850 buf = (char *) alloca (sizeof (VFIELD_NAME_FORMAT)
6851 + TYPE_NAME_LENGTH (type) + 2);
6852 sprintf (buf, VFIELD_NAME_FORMAT,
6853 IDENTIFIER_POINTER (constructor_name (type)));
6854 return get_identifier (buf);
6857 void
6858 print_class_statistics (void)
6860 #ifdef GATHER_STATISTICS
6861 fprintf (stderr, "convert_harshness = %d\n", n_convert_harshness);
6862 fprintf (stderr, "compute_conversion_costs = %d\n", n_compute_conversion_costs);
6863 if (n_vtables)
6865 fprintf (stderr, "vtables = %d; vtable searches = %d\n",
6866 n_vtables, n_vtable_searches);
6867 fprintf (stderr, "vtable entries = %d; vtable elems = %d\n",
6868 n_vtable_entries, n_vtable_elems);
6870 #endif
6873 /* Build a dummy reference to ourselves so Derived::Base (and A::A) works,
6874 according to [class]:
6875 The class-name is also inserted
6876 into the scope of the class itself. For purposes of access checking,
6877 the inserted class name is treated as if it were a public member name. */
6879 void
6880 build_self_reference (void)
6882 tree name = constructor_name (current_class_type);
6883 tree value = build_lang_decl (TYPE_DECL, name, current_class_type);
6884 tree saved_cas;
6886 DECL_NONLOCAL (value) = 1;
6887 DECL_CONTEXT (value) = current_class_type;
6888 DECL_ARTIFICIAL (value) = 1;
6889 SET_DECL_SELF_REFERENCE_P (value);
6890 set_underlying_type (value);
6892 if (processing_template_decl)
6893 value = push_template_decl (value);
6895 saved_cas = current_access_specifier;
6896 current_access_specifier = access_public_node;
6897 finish_member_declaration (value);
6898 current_access_specifier = saved_cas;
6901 /* Returns 1 if TYPE contains only padding bytes. */
6904 is_empty_class (tree type)
6906 if (type == error_mark_node)
6907 return 0;
6909 if (! CLASS_TYPE_P (type))
6910 return 0;
6912 /* In G++ 3.2, whether or not a class was empty was determined by
6913 looking at its size. */
6914 if (abi_version_at_least (2))
6915 return CLASSTYPE_EMPTY_P (type);
6916 else
6917 return integer_zerop (CLASSTYPE_SIZE (type));
6920 /* Returns true if TYPE contains an empty class. */
6922 static bool
6923 contains_empty_class_p (tree type)
6925 if (is_empty_class (type))
6926 return true;
6927 if (CLASS_TYPE_P (type))
6929 tree field;
6930 tree binfo;
6931 tree base_binfo;
6932 int i;
6934 for (binfo = TYPE_BINFO (type), i = 0;
6935 BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
6936 if (contains_empty_class_p (BINFO_TYPE (base_binfo)))
6937 return true;
6938 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
6939 if (TREE_CODE (field) == FIELD_DECL
6940 && !DECL_ARTIFICIAL (field)
6941 && is_empty_class (TREE_TYPE (field)))
6942 return true;
6944 else if (TREE_CODE (type) == ARRAY_TYPE)
6945 return contains_empty_class_p (TREE_TYPE (type));
6946 return false;
6949 /* Returns true if TYPE contains no actual data, just various
6950 possible combinations of empty classes and possibly a vptr. */
6952 bool
6953 is_really_empty_class (tree type)
6955 if (CLASS_TYPE_P (type))
6957 tree field;
6958 tree binfo;
6959 tree base_binfo;
6960 int i;
6962 /* CLASSTYPE_EMPTY_P isn't set properly until the class is actually laid
6963 out, but we'd like to be able to check this before then. */
6964 if (COMPLETE_TYPE_P (type) && is_empty_class (type))
6965 return true;
6967 for (binfo = TYPE_BINFO (type), i = 0;
6968 BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
6969 if (!is_really_empty_class (BINFO_TYPE (base_binfo)))
6970 return false;
6971 for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
6972 if (TREE_CODE (field) == FIELD_DECL
6973 && !DECL_ARTIFICIAL (field)
6974 && !is_really_empty_class (TREE_TYPE (field)))
6975 return false;
6976 return true;
6978 else if (TREE_CODE (type) == ARRAY_TYPE)
6979 return is_really_empty_class (TREE_TYPE (type));
6980 return false;
6983 /* Note that NAME was looked up while the current class was being
6984 defined and that the result of that lookup was DECL. */
6986 void
6987 maybe_note_name_used_in_class (tree name, tree decl)
6989 splay_tree names_used;
6991 /* If we're not defining a class, there's nothing to do. */
6992 if (!(innermost_scope_kind() == sk_class
6993 && TYPE_BEING_DEFINED (current_class_type)
6994 && !LAMBDA_TYPE_P (current_class_type)))
6995 return;
6997 /* If there's already a binding for this NAME, then we don't have
6998 anything to worry about. */
6999 if (lookup_member (current_class_type, name,
7000 /*protect=*/0, /*want_type=*/false))
7001 return;
7003 if (!current_class_stack[current_class_depth - 1].names_used)
7004 current_class_stack[current_class_depth - 1].names_used
7005 = splay_tree_new (splay_tree_compare_pointers, 0, 0);
7006 names_used = current_class_stack[current_class_depth - 1].names_used;
7008 splay_tree_insert (names_used,
7009 (splay_tree_key) name,
7010 (splay_tree_value) decl);
7013 /* Note that NAME was declared (as DECL) in the current class. Check
7014 to see that the declaration is valid. */
7016 void
7017 note_name_declared_in_class (tree name, tree decl)
7019 splay_tree names_used;
7020 splay_tree_node n;
7022 /* Look to see if we ever used this name. */
7023 names_used
7024 = current_class_stack[current_class_depth - 1].names_used;
7025 if (!names_used)
7026 return;
7027 /* The C language allows members to be declared with a type of the same
7028 name, and the C++ standard says this diagnostic is not required. So
7029 allow it in extern "C" blocks unless predantic is specified.
7030 Allow it in all cases if -ms-extensions is specified. */
7031 if ((!pedantic && current_lang_name == lang_name_c)
7032 || flag_ms_extensions)
7033 return;
7034 n = splay_tree_lookup (names_used, (splay_tree_key) name);
7035 if (n)
7037 /* [basic.scope.class]
7039 A name N used in a class S shall refer to the same declaration
7040 in its context and when re-evaluated in the completed scope of
7041 S. */
7042 permerror (input_location, "declaration of %q#D", decl);
7043 permerror (input_location, "changes meaning of %qD from %q+#D",
7044 DECL_NAME (OVL_CURRENT (decl)), (tree) n->value);
7048 /* Returns the VAR_DECL for the complete vtable associated with BINFO.
7049 Secondary vtables are merged with primary vtables; this function
7050 will return the VAR_DECL for the primary vtable. */
7052 tree
7053 get_vtbl_decl_for_binfo (tree binfo)
7055 tree decl;
7057 decl = BINFO_VTABLE (binfo);
7058 if (decl && TREE_CODE (decl) == POINTER_PLUS_EXPR)
7060 gcc_assert (TREE_CODE (TREE_OPERAND (decl, 0)) == ADDR_EXPR);
7061 decl = TREE_OPERAND (TREE_OPERAND (decl, 0), 0);
7063 if (decl)
7064 gcc_assert (TREE_CODE (decl) == VAR_DECL);
7065 return decl;
7069 /* Returns the binfo for the primary base of BINFO. If the resulting
7070 BINFO is a virtual base, and it is inherited elsewhere in the
7071 hierarchy, then the returned binfo might not be the primary base of
7072 BINFO in the complete object. Check BINFO_PRIMARY_P or
7073 BINFO_LOST_PRIMARY_P to be sure. */
7075 static tree
7076 get_primary_binfo (tree binfo)
7078 tree primary_base;
7080 primary_base = CLASSTYPE_PRIMARY_BINFO (BINFO_TYPE (binfo));
7081 if (!primary_base)
7082 return NULL_TREE;
7084 return copied_binfo (primary_base, binfo);
7087 /* If INDENTED_P is zero, indent to INDENT. Return nonzero. */
7089 static int
7090 maybe_indent_hierarchy (FILE * stream, int indent, int indented_p)
7092 if (!indented_p)
7093 fprintf (stream, "%*s", indent, "");
7094 return 1;
7097 /* Dump the offsets of all the bases rooted at BINFO to STREAM.
7098 INDENT should be zero when called from the top level; it is
7099 incremented recursively. IGO indicates the next expected BINFO in
7100 inheritance graph ordering. */
7102 static tree
7103 dump_class_hierarchy_r (FILE *stream,
7104 int flags,
7105 tree binfo,
7106 tree igo,
7107 int indent)
7109 int indented = 0;
7110 tree base_binfo;
7111 int i;
7113 indented = maybe_indent_hierarchy (stream, indent, 0);
7114 fprintf (stream, "%s (0x%lx) ",
7115 type_as_string (BINFO_TYPE (binfo), TFF_PLAIN_IDENTIFIER),
7116 (unsigned long) binfo);
7117 if (binfo != igo)
7119 fprintf (stream, "alternative-path\n");
7120 return igo;
7122 igo = TREE_CHAIN (binfo);
7124 fprintf (stream, HOST_WIDE_INT_PRINT_DEC,
7125 tree_low_cst (BINFO_OFFSET (binfo), 0));
7126 if (is_empty_class (BINFO_TYPE (binfo)))
7127 fprintf (stream, " empty");
7128 else if (CLASSTYPE_NEARLY_EMPTY_P (BINFO_TYPE (binfo)))
7129 fprintf (stream, " nearly-empty");
7130 if (BINFO_VIRTUAL_P (binfo))
7131 fprintf (stream, " virtual");
7132 fprintf (stream, "\n");
7134 indented = 0;
7135 if (BINFO_PRIMARY_P (binfo))
7137 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
7138 fprintf (stream, " primary-for %s (0x%lx)",
7139 type_as_string (BINFO_TYPE (BINFO_INHERITANCE_CHAIN (binfo)),
7140 TFF_PLAIN_IDENTIFIER),
7141 (unsigned long)BINFO_INHERITANCE_CHAIN (binfo));
7143 if (BINFO_LOST_PRIMARY_P (binfo))
7145 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
7146 fprintf (stream, " lost-primary");
7148 if (indented)
7149 fprintf (stream, "\n");
7151 if (!(flags & TDF_SLIM))
7153 int indented = 0;
7155 if (BINFO_SUBVTT_INDEX (binfo))
7157 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
7158 fprintf (stream, " subvttidx=%s",
7159 expr_as_string (BINFO_SUBVTT_INDEX (binfo),
7160 TFF_PLAIN_IDENTIFIER));
7162 if (BINFO_VPTR_INDEX (binfo))
7164 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
7165 fprintf (stream, " vptridx=%s",
7166 expr_as_string (BINFO_VPTR_INDEX (binfo),
7167 TFF_PLAIN_IDENTIFIER));
7169 if (BINFO_VPTR_FIELD (binfo))
7171 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
7172 fprintf (stream, " vbaseoffset=%s",
7173 expr_as_string (BINFO_VPTR_FIELD (binfo),
7174 TFF_PLAIN_IDENTIFIER));
7176 if (BINFO_VTABLE (binfo))
7178 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
7179 fprintf (stream, " vptr=%s",
7180 expr_as_string (BINFO_VTABLE (binfo),
7181 TFF_PLAIN_IDENTIFIER));
7184 if (indented)
7185 fprintf (stream, "\n");
7188 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
7189 igo = dump_class_hierarchy_r (stream, flags, base_binfo, igo, indent + 2);
7191 return igo;
7194 /* Dump the BINFO hierarchy for T. */
7196 static void
7197 dump_class_hierarchy_1 (FILE *stream, int flags, tree t)
7199 fprintf (stream, "Class %s\n", type_as_string (t, TFF_PLAIN_IDENTIFIER));
7200 fprintf (stream, " size=%lu align=%lu\n",
7201 (unsigned long)(tree_low_cst (TYPE_SIZE (t), 0) / BITS_PER_UNIT),
7202 (unsigned long)(TYPE_ALIGN (t) / BITS_PER_UNIT));
7203 fprintf (stream, " base size=%lu base align=%lu\n",
7204 (unsigned long)(tree_low_cst (TYPE_SIZE (CLASSTYPE_AS_BASE (t)), 0)
7205 / BITS_PER_UNIT),
7206 (unsigned long)(TYPE_ALIGN (CLASSTYPE_AS_BASE (t))
7207 / BITS_PER_UNIT));
7208 dump_class_hierarchy_r (stream, flags, TYPE_BINFO (t), TYPE_BINFO (t), 0);
7209 fprintf (stream, "\n");
7212 /* Debug interface to hierarchy dumping. */
7214 void
7215 debug_class (tree t)
7217 dump_class_hierarchy_1 (stderr, TDF_SLIM, t);
7220 static void
7221 dump_class_hierarchy (tree t)
7223 int flags;
7224 FILE *stream = dump_begin (TDI_class, &flags);
7226 if (stream)
7228 dump_class_hierarchy_1 (stream, flags, t);
7229 dump_end (TDI_class, stream);
7233 static void
7234 dump_array (FILE * stream, tree decl)
7236 tree value;
7237 unsigned HOST_WIDE_INT ix;
7238 HOST_WIDE_INT elt;
7239 tree size = TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (decl)));
7241 elt = (tree_low_cst (TYPE_SIZE (TREE_TYPE (TREE_TYPE (decl))), 0)
7242 / BITS_PER_UNIT);
7243 fprintf (stream, "%s:", decl_as_string (decl, TFF_PLAIN_IDENTIFIER));
7244 fprintf (stream, " %s entries",
7245 expr_as_string (size_binop (PLUS_EXPR, size, size_one_node),
7246 TFF_PLAIN_IDENTIFIER));
7247 fprintf (stream, "\n");
7249 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (DECL_INITIAL (decl)),
7250 ix, value)
7251 fprintf (stream, "%-4ld %s\n", (long)(ix * elt),
7252 expr_as_string (value, TFF_PLAIN_IDENTIFIER));
7255 static void
7256 dump_vtable (tree t, tree binfo, tree vtable)
7258 int flags;
7259 FILE *stream = dump_begin (TDI_class, &flags);
7261 if (!stream)
7262 return;
7264 if (!(flags & TDF_SLIM))
7266 int ctor_vtbl_p = TYPE_BINFO (t) != binfo;
7268 fprintf (stream, "%s for %s",
7269 ctor_vtbl_p ? "Construction vtable" : "Vtable",
7270 type_as_string (BINFO_TYPE (binfo), TFF_PLAIN_IDENTIFIER));
7271 if (ctor_vtbl_p)
7273 if (!BINFO_VIRTUAL_P (binfo))
7274 fprintf (stream, " (0x%lx instance)", (unsigned long)binfo);
7275 fprintf (stream, " in %s", type_as_string (t, TFF_PLAIN_IDENTIFIER));
7277 fprintf (stream, "\n");
7278 dump_array (stream, vtable);
7279 fprintf (stream, "\n");
7282 dump_end (TDI_class, stream);
7285 static void
7286 dump_vtt (tree t, tree vtt)
7288 int flags;
7289 FILE *stream = dump_begin (TDI_class, &flags);
7291 if (!stream)
7292 return;
7294 if (!(flags & TDF_SLIM))
7296 fprintf (stream, "VTT for %s\n",
7297 type_as_string (t, TFF_PLAIN_IDENTIFIER));
7298 dump_array (stream, vtt);
7299 fprintf (stream, "\n");
7302 dump_end (TDI_class, stream);
7305 /* Dump a function or thunk and its thunkees. */
7307 static void
7308 dump_thunk (FILE *stream, int indent, tree thunk)
7310 static const char spaces[] = " ";
7311 tree name = DECL_NAME (thunk);
7312 tree thunks;
7314 fprintf (stream, "%.*s%p %s %s", indent, spaces,
7315 (void *)thunk,
7316 !DECL_THUNK_P (thunk) ? "function"
7317 : DECL_THIS_THUNK_P (thunk) ? "this-thunk" : "covariant-thunk",
7318 name ? IDENTIFIER_POINTER (name) : "<unset>");
7319 if (DECL_THUNK_P (thunk))
7321 HOST_WIDE_INT fixed_adjust = THUNK_FIXED_OFFSET (thunk);
7322 tree virtual_adjust = THUNK_VIRTUAL_OFFSET (thunk);
7324 fprintf (stream, " fixed=" HOST_WIDE_INT_PRINT_DEC, fixed_adjust);
7325 if (!virtual_adjust)
7326 /*NOP*/;
7327 else if (DECL_THIS_THUNK_P (thunk))
7328 fprintf (stream, " vcall=" HOST_WIDE_INT_PRINT_DEC,
7329 tree_low_cst (virtual_adjust, 0));
7330 else
7331 fprintf (stream, " vbase=" HOST_WIDE_INT_PRINT_DEC "(%s)",
7332 tree_low_cst (BINFO_VPTR_FIELD (virtual_adjust), 0),
7333 type_as_string (BINFO_TYPE (virtual_adjust), TFF_SCOPE));
7334 if (THUNK_ALIAS (thunk))
7335 fprintf (stream, " alias to %p", (void *)THUNK_ALIAS (thunk));
7337 fprintf (stream, "\n");
7338 for (thunks = DECL_THUNKS (thunk); thunks; thunks = TREE_CHAIN (thunks))
7339 dump_thunk (stream, indent + 2, thunks);
7342 /* Dump the thunks for FN. */
7344 void
7345 debug_thunks (tree fn)
7347 dump_thunk (stderr, 0, fn);
7350 /* Virtual function table initialization. */
7352 /* Create all the necessary vtables for T and its base classes. */
7354 static void
7355 finish_vtbls (tree t)
7357 tree vbase;
7358 VEC(constructor_elt,gc) *v = NULL;
7359 tree vtable = BINFO_VTABLE (TYPE_BINFO (t));
7361 /* We lay out the primary and secondary vtables in one contiguous
7362 vtable. The primary vtable is first, followed by the non-virtual
7363 secondary vtables in inheritance graph order. */
7364 accumulate_vtbl_inits (TYPE_BINFO (t), TYPE_BINFO (t), TYPE_BINFO (t),
7365 vtable, t, &v);
7367 /* Then come the virtual bases, also in inheritance graph order. */
7368 for (vbase = TYPE_BINFO (t); vbase; vbase = TREE_CHAIN (vbase))
7370 if (!BINFO_VIRTUAL_P (vbase))
7371 continue;
7372 accumulate_vtbl_inits (vbase, vbase, TYPE_BINFO (t), vtable, t, &v);
7375 if (BINFO_VTABLE (TYPE_BINFO (t)))
7376 initialize_vtable (TYPE_BINFO (t), v);
7379 /* Initialize the vtable for BINFO with the INITS. */
7381 static void
7382 initialize_vtable (tree binfo, VEC(constructor_elt,gc) *inits)
7384 tree decl;
7386 layout_vtable_decl (binfo, VEC_length (constructor_elt, inits));
7387 decl = get_vtbl_decl_for_binfo (binfo);
7388 initialize_artificial_var (decl, inits);
7389 dump_vtable (BINFO_TYPE (binfo), binfo, decl);
7392 /* Build the VTT (virtual table table) for T.
7393 A class requires a VTT if it has virtual bases.
7395 This holds
7396 1 - primary virtual pointer for complete object T
7397 2 - secondary VTTs for each direct non-virtual base of T which requires a
7399 3 - secondary virtual pointers for each direct or indirect base of T which
7400 has virtual bases or is reachable via a virtual path from T.
7401 4 - secondary VTTs for each direct or indirect virtual base of T.
7403 Secondary VTTs look like complete object VTTs without part 4. */
7405 static void
7406 build_vtt (tree t)
7408 tree type;
7409 tree vtt;
7410 tree index;
7411 VEC(constructor_elt,gc) *inits;
7413 /* Build up the initializers for the VTT. */
7414 inits = NULL;
7415 index = size_zero_node;
7416 build_vtt_inits (TYPE_BINFO (t), t, &inits, &index);
7418 /* If we didn't need a VTT, we're done. */
7419 if (!inits)
7420 return;
7422 /* Figure out the type of the VTT. */
7423 type = build_array_of_n_type (const_ptr_type_node,
7424 VEC_length (constructor_elt, inits));
7426 /* Now, build the VTT object itself. */
7427 vtt = build_vtable (t, mangle_vtt_for_type (t), type);
7428 initialize_artificial_var (vtt, inits);
7429 /* Add the VTT to the vtables list. */
7430 DECL_CHAIN (vtt) = DECL_CHAIN (CLASSTYPE_VTABLES (t));
7431 DECL_CHAIN (CLASSTYPE_VTABLES (t)) = vtt;
7433 dump_vtt (t, vtt);
7436 /* When building a secondary VTT, BINFO_VTABLE is set to a TREE_LIST with
7437 PURPOSE the RTTI_BINFO, VALUE the real vtable pointer for this binfo,
7438 and CHAIN the vtable pointer for this binfo after construction is
7439 complete. VALUE can also be another BINFO, in which case we recurse. */
7441 static tree
7442 binfo_ctor_vtable (tree binfo)
7444 tree vt;
7446 while (1)
7448 vt = BINFO_VTABLE (binfo);
7449 if (TREE_CODE (vt) == TREE_LIST)
7450 vt = TREE_VALUE (vt);
7451 if (TREE_CODE (vt) == TREE_BINFO)
7452 binfo = vt;
7453 else
7454 break;
7457 return vt;
7460 /* Data for secondary VTT initialization. */
7461 typedef struct secondary_vptr_vtt_init_data_s
7463 /* Is this the primary VTT? */
7464 bool top_level_p;
7466 /* Current index into the VTT. */
7467 tree index;
7469 /* Vector of initializers built up. */
7470 VEC(constructor_elt,gc) *inits;
7472 /* The type being constructed by this secondary VTT. */
7473 tree type_being_constructed;
7474 } secondary_vptr_vtt_init_data;
7476 /* Recursively build the VTT-initializer for BINFO (which is in the
7477 hierarchy dominated by T). INITS points to the end of the initializer
7478 list to date. INDEX is the VTT index where the next element will be
7479 replaced. Iff BINFO is the binfo for T, this is the top level VTT (i.e.
7480 not a subvtt for some base of T). When that is so, we emit the sub-VTTs
7481 for virtual bases of T. When it is not so, we build the constructor
7482 vtables for the BINFO-in-T variant. */
7484 static void
7485 build_vtt_inits (tree binfo, tree t, VEC(constructor_elt,gc) **inits, tree *index)
7487 int i;
7488 tree b;
7489 tree init;
7490 secondary_vptr_vtt_init_data data;
7491 int top_level_p = SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), t);
7493 /* We only need VTTs for subobjects with virtual bases. */
7494 if (!CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo)))
7495 return;
7497 /* We need to use a construction vtable if this is not the primary
7498 VTT. */
7499 if (!top_level_p)
7501 build_ctor_vtbl_group (binfo, t);
7503 /* Record the offset in the VTT where this sub-VTT can be found. */
7504 BINFO_SUBVTT_INDEX (binfo) = *index;
7507 /* Add the address of the primary vtable for the complete object. */
7508 init = binfo_ctor_vtable (binfo);
7509 CONSTRUCTOR_APPEND_ELT (*inits, NULL_TREE, init);
7510 if (top_level_p)
7512 gcc_assert (!BINFO_VPTR_INDEX (binfo));
7513 BINFO_VPTR_INDEX (binfo) = *index;
7515 *index = size_binop (PLUS_EXPR, *index, TYPE_SIZE_UNIT (ptr_type_node));
7517 /* Recursively add the secondary VTTs for non-virtual bases. */
7518 for (i = 0; BINFO_BASE_ITERATE (binfo, i, b); ++i)
7519 if (!BINFO_VIRTUAL_P (b))
7520 build_vtt_inits (b, t, inits, index);
7522 /* Add secondary virtual pointers for all subobjects of BINFO with
7523 either virtual bases or reachable along a virtual path, except
7524 subobjects that are non-virtual primary bases. */
7525 data.top_level_p = top_level_p;
7526 data.index = *index;
7527 data.inits = *inits;
7528 data.type_being_constructed = BINFO_TYPE (binfo);
7530 dfs_walk_once (binfo, dfs_build_secondary_vptr_vtt_inits, NULL, &data);
7532 *index = data.index;
7534 /* data.inits might have grown as we added secondary virtual pointers.
7535 Make sure our caller knows about the new vector. */
7536 *inits = data.inits;
7538 if (top_level_p)
7539 /* Add the secondary VTTs for virtual bases in inheritance graph
7540 order. */
7541 for (b = TYPE_BINFO (BINFO_TYPE (binfo)); b; b = TREE_CHAIN (b))
7543 if (!BINFO_VIRTUAL_P (b))
7544 continue;
7546 build_vtt_inits (b, t, inits, index);
7548 else
7549 /* Remove the ctor vtables we created. */
7550 dfs_walk_all (binfo, dfs_fixup_binfo_vtbls, NULL, binfo);
7553 /* Called from build_vtt_inits via dfs_walk. BINFO is the binfo for the base
7554 in most derived. DATA is a SECONDARY_VPTR_VTT_INIT_DATA structure. */
7556 static tree
7557 dfs_build_secondary_vptr_vtt_inits (tree binfo, void *data_)
7559 secondary_vptr_vtt_init_data *data = (secondary_vptr_vtt_init_data *)data_;
7561 /* We don't care about bases that don't have vtables. */
7562 if (!TYPE_VFIELD (BINFO_TYPE (binfo)))
7563 return dfs_skip_bases;
7565 /* We're only interested in proper subobjects of the type being
7566 constructed. */
7567 if (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), data->type_being_constructed))
7568 return NULL_TREE;
7570 /* We're only interested in bases with virtual bases or reachable
7571 via a virtual path from the type being constructed. */
7572 if (!(CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo))
7573 || binfo_via_virtual (binfo, data->type_being_constructed)))
7574 return dfs_skip_bases;
7576 /* We're not interested in non-virtual primary bases. */
7577 if (!BINFO_VIRTUAL_P (binfo) && BINFO_PRIMARY_P (binfo))
7578 return NULL_TREE;
7580 /* Record the index where this secondary vptr can be found. */
7581 if (data->top_level_p)
7583 gcc_assert (!BINFO_VPTR_INDEX (binfo));
7584 BINFO_VPTR_INDEX (binfo) = data->index;
7586 if (BINFO_VIRTUAL_P (binfo))
7588 /* It's a primary virtual base, and this is not a
7589 construction vtable. Find the base this is primary of in
7590 the inheritance graph, and use that base's vtable
7591 now. */
7592 while (BINFO_PRIMARY_P (binfo))
7593 binfo = BINFO_INHERITANCE_CHAIN (binfo);
7597 /* Add the initializer for the secondary vptr itself. */
7598 CONSTRUCTOR_APPEND_ELT (data->inits, NULL_TREE, binfo_ctor_vtable (binfo));
7600 /* Advance the vtt index. */
7601 data->index = size_binop (PLUS_EXPR, data->index,
7602 TYPE_SIZE_UNIT (ptr_type_node));
7604 return NULL_TREE;
7607 /* Called from build_vtt_inits via dfs_walk. After building
7608 constructor vtables and generating the sub-vtt from them, we need
7609 to restore the BINFO_VTABLES that were scribbled on. DATA is the
7610 binfo of the base whose sub vtt was generated. */
7612 static tree
7613 dfs_fixup_binfo_vtbls (tree binfo, void* data)
7615 tree vtable = BINFO_VTABLE (binfo);
7617 if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
7618 /* If this class has no vtable, none of its bases do. */
7619 return dfs_skip_bases;
7621 if (!vtable)
7622 /* This might be a primary base, so have no vtable in this
7623 hierarchy. */
7624 return NULL_TREE;
7626 /* If we scribbled the construction vtable vptr into BINFO, clear it
7627 out now. */
7628 if (TREE_CODE (vtable) == TREE_LIST
7629 && (TREE_PURPOSE (vtable) == (tree) data))
7630 BINFO_VTABLE (binfo) = TREE_CHAIN (vtable);
7632 return NULL_TREE;
7635 /* Build the construction vtable group for BINFO which is in the
7636 hierarchy dominated by T. */
7638 static void
7639 build_ctor_vtbl_group (tree binfo, tree t)
7641 tree type;
7642 tree vtbl;
7643 tree id;
7644 tree vbase;
7645 VEC(constructor_elt,gc) *v;
7647 /* See if we've already created this construction vtable group. */
7648 id = mangle_ctor_vtbl_for_type (t, binfo);
7649 if (IDENTIFIER_GLOBAL_VALUE (id))
7650 return;
7652 gcc_assert (!SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), t));
7653 /* Build a version of VTBL (with the wrong type) for use in
7654 constructing the addresses of secondary vtables in the
7655 construction vtable group. */
7656 vtbl = build_vtable (t, id, ptr_type_node);
7657 DECL_CONSTRUCTION_VTABLE_P (vtbl) = 1;
7659 v = NULL;
7660 accumulate_vtbl_inits (binfo, TYPE_BINFO (TREE_TYPE (binfo)),
7661 binfo, vtbl, t, &v);
7663 /* Add the vtables for each of our virtual bases using the vbase in T
7664 binfo. */
7665 for (vbase = TYPE_BINFO (BINFO_TYPE (binfo));
7666 vbase;
7667 vbase = TREE_CHAIN (vbase))
7669 tree b;
7671 if (!BINFO_VIRTUAL_P (vbase))
7672 continue;
7673 b = copied_binfo (vbase, binfo);
7675 accumulate_vtbl_inits (b, vbase, binfo, vtbl, t, &v);
7678 /* Figure out the type of the construction vtable. */
7679 type = build_array_of_n_type (vtable_entry_type,
7680 VEC_length (constructor_elt, v));
7681 layout_type (type);
7682 TREE_TYPE (vtbl) = type;
7683 DECL_SIZE (vtbl) = DECL_SIZE_UNIT (vtbl) = NULL_TREE;
7684 layout_decl (vtbl, 0);
7686 /* Initialize the construction vtable. */
7687 CLASSTYPE_VTABLES (t) = chainon (CLASSTYPE_VTABLES (t), vtbl);
7688 initialize_artificial_var (vtbl, v);
7689 dump_vtable (t, binfo, vtbl);
7692 /* Add the vtbl initializers for BINFO (and its bases other than
7693 non-virtual primaries) to the list of INITS. BINFO is in the
7694 hierarchy dominated by T. RTTI_BINFO is the binfo within T of
7695 the constructor the vtbl inits should be accumulated for. (If this
7696 is the complete object vtbl then RTTI_BINFO will be TYPE_BINFO (T).)
7697 ORIG_BINFO is the binfo for this object within BINFO_TYPE (RTTI_BINFO).
7698 BINFO is the active base equivalent of ORIG_BINFO in the inheritance
7699 graph of T. Both BINFO and ORIG_BINFO will have the same BINFO_TYPE,
7700 but are not necessarily the same in terms of layout. */
7702 static void
7703 accumulate_vtbl_inits (tree binfo,
7704 tree orig_binfo,
7705 tree rtti_binfo,
7706 tree vtbl,
7707 tree t,
7708 VEC(constructor_elt,gc) **inits)
7710 int i;
7711 tree base_binfo;
7712 int ctor_vtbl_p = !SAME_BINFO_TYPE_P (BINFO_TYPE (rtti_binfo), t);
7714 gcc_assert (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), BINFO_TYPE (orig_binfo)));
7716 /* If it doesn't have a vptr, we don't do anything. */
7717 if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
7718 return;
7720 /* If we're building a construction vtable, we're not interested in
7721 subobjects that don't require construction vtables. */
7722 if (ctor_vtbl_p
7723 && !CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo))
7724 && !binfo_via_virtual (orig_binfo, BINFO_TYPE (rtti_binfo)))
7725 return;
7727 /* Build the initializers for the BINFO-in-T vtable. */
7728 dfs_accumulate_vtbl_inits (binfo, orig_binfo, rtti_binfo, vtbl, t, inits);
7730 /* Walk the BINFO and its bases. We walk in preorder so that as we
7731 initialize each vtable we can figure out at what offset the
7732 secondary vtable lies from the primary vtable. We can't use
7733 dfs_walk here because we need to iterate through bases of BINFO
7734 and RTTI_BINFO simultaneously. */
7735 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
7737 /* Skip virtual bases. */
7738 if (BINFO_VIRTUAL_P (base_binfo))
7739 continue;
7740 accumulate_vtbl_inits (base_binfo,
7741 BINFO_BASE_BINFO (orig_binfo, i),
7742 rtti_binfo, vtbl, t,
7743 inits);
7747 /* Called from accumulate_vtbl_inits. Adds the initializers for the
7748 BINFO vtable to L. */
7750 static void
7751 dfs_accumulate_vtbl_inits (tree binfo,
7752 tree orig_binfo,
7753 tree rtti_binfo,
7754 tree orig_vtbl,
7755 tree t,
7756 VEC(constructor_elt,gc) **l)
7758 tree vtbl = NULL_TREE;
7759 int ctor_vtbl_p = !SAME_BINFO_TYPE_P (BINFO_TYPE (rtti_binfo), t);
7760 int n_inits;
7762 if (ctor_vtbl_p
7763 && BINFO_VIRTUAL_P (orig_binfo) && BINFO_PRIMARY_P (orig_binfo))
7765 /* In the hierarchy of BINFO_TYPE (RTTI_BINFO), this is a
7766 primary virtual base. If it is not the same primary in
7767 the hierarchy of T, we'll need to generate a ctor vtable
7768 for it, to place at its location in T. If it is the same
7769 primary, we still need a VTT entry for the vtable, but it
7770 should point to the ctor vtable for the base it is a
7771 primary for within the sub-hierarchy of RTTI_BINFO.
7773 There are three possible cases:
7775 1) We are in the same place.
7776 2) We are a primary base within a lost primary virtual base of
7777 RTTI_BINFO.
7778 3) We are primary to something not a base of RTTI_BINFO. */
7780 tree b;
7781 tree last = NULL_TREE;
7783 /* First, look through the bases we are primary to for RTTI_BINFO
7784 or a virtual base. */
7785 b = binfo;
7786 while (BINFO_PRIMARY_P (b))
7788 b = BINFO_INHERITANCE_CHAIN (b);
7789 last = b;
7790 if (BINFO_VIRTUAL_P (b) || b == rtti_binfo)
7791 goto found;
7793 /* If we run out of primary links, keep looking down our
7794 inheritance chain; we might be an indirect primary. */
7795 for (b = last; b; b = BINFO_INHERITANCE_CHAIN (b))
7796 if (BINFO_VIRTUAL_P (b) || b == rtti_binfo)
7797 break;
7798 found:
7800 /* If we found RTTI_BINFO, this is case 1. If we found a virtual
7801 base B and it is a base of RTTI_BINFO, this is case 2. In
7802 either case, we share our vtable with LAST, i.e. the
7803 derived-most base within B of which we are a primary. */
7804 if (b == rtti_binfo
7805 || (b && binfo_for_vbase (BINFO_TYPE (b), BINFO_TYPE (rtti_binfo))))
7806 /* Just set our BINFO_VTABLE to point to LAST, as we may not have
7807 set LAST's BINFO_VTABLE yet. We'll extract the actual vptr in
7808 binfo_ctor_vtable after everything's been set up. */
7809 vtbl = last;
7811 /* Otherwise, this is case 3 and we get our own. */
7813 else if (!BINFO_NEW_VTABLE_MARKED (orig_binfo))
7814 return;
7816 n_inits = VEC_length (constructor_elt, *l);
7818 if (!vtbl)
7820 tree index;
7821 int non_fn_entries;
7823 /* Add the initializer for this vtable. */
7824 build_vtbl_initializer (binfo, orig_binfo, t, rtti_binfo,
7825 &non_fn_entries, l);
7827 /* Figure out the position to which the VPTR should point. */
7828 vtbl = build1 (ADDR_EXPR, vtbl_ptr_type_node, orig_vtbl);
7829 index = size_binop (MULT_EXPR,
7830 TYPE_SIZE_UNIT (vtable_entry_type),
7831 size_int (non_fn_entries + n_inits));
7832 vtbl = fold_build_pointer_plus (vtbl, index);
7835 if (ctor_vtbl_p)
7836 /* For a construction vtable, we can't overwrite BINFO_VTABLE.
7837 So, we make a TREE_LIST. Later, dfs_fixup_binfo_vtbls will
7838 straighten this out. */
7839 BINFO_VTABLE (binfo) = tree_cons (rtti_binfo, vtbl, BINFO_VTABLE (binfo));
7840 else if (BINFO_PRIMARY_P (binfo) && BINFO_VIRTUAL_P (binfo))
7841 /* Throw away any unneeded intializers. */
7842 VEC_truncate (constructor_elt, *l, n_inits);
7843 else
7844 /* For an ordinary vtable, set BINFO_VTABLE. */
7845 BINFO_VTABLE (binfo) = vtbl;
7848 static GTY(()) tree abort_fndecl_addr;
7850 /* Construct the initializer for BINFO's virtual function table. BINFO
7851 is part of the hierarchy dominated by T. If we're building a
7852 construction vtable, the ORIG_BINFO is the binfo we should use to
7853 find the actual function pointers to put in the vtable - but they
7854 can be overridden on the path to most-derived in the graph that
7855 ORIG_BINFO belongs. Otherwise,
7856 ORIG_BINFO should be the same as BINFO. The RTTI_BINFO is the
7857 BINFO that should be indicated by the RTTI information in the
7858 vtable; it will be a base class of T, rather than T itself, if we
7859 are building a construction vtable.
7861 The value returned is a TREE_LIST suitable for wrapping in a
7862 CONSTRUCTOR to use as the DECL_INITIAL for a vtable. If
7863 NON_FN_ENTRIES_P is not NULL, *NON_FN_ENTRIES_P is set to the
7864 number of non-function entries in the vtable.
7866 It might seem that this function should never be called with a
7867 BINFO for which BINFO_PRIMARY_P holds, the vtable for such a
7868 base is always subsumed by a derived class vtable. However, when
7869 we are building construction vtables, we do build vtables for
7870 primary bases; we need these while the primary base is being
7871 constructed. */
7873 static void
7874 build_vtbl_initializer (tree binfo,
7875 tree orig_binfo,
7876 tree t,
7877 tree rtti_binfo,
7878 int* non_fn_entries_p,
7879 VEC(constructor_elt,gc) **inits)
7881 tree v;
7882 vtbl_init_data vid;
7883 unsigned ix, jx;
7884 tree vbinfo;
7885 VEC(tree,gc) *vbases;
7886 constructor_elt *e;
7888 /* Initialize VID. */
7889 memset (&vid, 0, sizeof (vid));
7890 vid.binfo = binfo;
7891 vid.derived = t;
7892 vid.rtti_binfo = rtti_binfo;
7893 vid.primary_vtbl_p = SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), t);
7894 vid.ctor_vtbl_p = !SAME_BINFO_TYPE_P (BINFO_TYPE (rtti_binfo), t);
7895 vid.generate_vcall_entries = true;
7896 /* The first vbase or vcall offset is at index -3 in the vtable. */
7897 vid.index = ssize_int(-3 * TARGET_VTABLE_DATA_ENTRY_DISTANCE);
7899 /* Add entries to the vtable for RTTI. */
7900 build_rtti_vtbl_entries (binfo, &vid);
7902 /* Create an array for keeping track of the functions we've
7903 processed. When we see multiple functions with the same
7904 signature, we share the vcall offsets. */
7905 vid.fns = VEC_alloc (tree, gc, 32);
7906 /* Add the vcall and vbase offset entries. */
7907 build_vcall_and_vbase_vtbl_entries (binfo, &vid);
7909 /* Clear BINFO_VTABLE_PATH_MARKED; it's set by
7910 build_vbase_offset_vtbl_entries. */
7911 for (vbases = CLASSTYPE_VBASECLASSES (t), ix = 0;
7912 VEC_iterate (tree, vbases, ix, vbinfo); ix++)
7913 BINFO_VTABLE_PATH_MARKED (vbinfo) = 0;
7915 /* If the target requires padding between data entries, add that now. */
7916 if (TARGET_VTABLE_DATA_ENTRY_DISTANCE > 1)
7918 int n_entries = VEC_length (constructor_elt, vid.inits);
7920 VEC_safe_grow (constructor_elt, gc, vid.inits,
7921 TARGET_VTABLE_DATA_ENTRY_DISTANCE * n_entries);
7923 /* Move data entries into their new positions and add padding
7924 after the new positions. Iterate backwards so we don't
7925 overwrite entries that we would need to process later. */
7926 for (ix = n_entries - 1;
7927 VEC_iterate (constructor_elt, vid.inits, ix, e);
7928 ix--)
7930 int j;
7931 int new_position = (TARGET_VTABLE_DATA_ENTRY_DISTANCE * ix
7932 + (TARGET_VTABLE_DATA_ENTRY_DISTANCE - 1));
7934 VEC_replace (constructor_elt, vid.inits, new_position, e);
7936 for (j = 1; j < TARGET_VTABLE_DATA_ENTRY_DISTANCE; ++j)
7938 constructor_elt *f = VEC_index (constructor_elt, vid.inits,
7939 new_position - j);
7940 f->index = NULL_TREE;
7941 f->value = build1 (NOP_EXPR, vtable_entry_type,
7942 null_pointer_node);
7947 if (non_fn_entries_p)
7948 *non_fn_entries_p = VEC_length (constructor_elt, vid.inits);
7950 /* The initializers for virtual functions were built up in reverse
7951 order. Straighten them out and add them to the running list in one
7952 step. */
7953 jx = VEC_length (constructor_elt, *inits);
7954 VEC_safe_grow (constructor_elt, gc, *inits,
7955 (jx + VEC_length (constructor_elt, vid.inits)));
7957 for (ix = VEC_length (constructor_elt, vid.inits) - 1;
7958 VEC_iterate (constructor_elt, vid.inits, ix, e);
7959 ix--, jx++)
7960 VEC_replace (constructor_elt, *inits, jx, e);
7962 /* Go through all the ordinary virtual functions, building up
7963 initializers. */
7964 for (v = BINFO_VIRTUALS (orig_binfo); v; v = TREE_CHAIN (v))
7966 tree delta;
7967 tree vcall_index;
7968 tree fn, fn_original;
7969 tree init = NULL_TREE;
7971 fn = BV_FN (v);
7972 fn_original = fn;
7973 if (DECL_THUNK_P (fn))
7975 if (!DECL_NAME (fn))
7976 finish_thunk (fn);
7977 if (THUNK_ALIAS (fn))
7979 fn = THUNK_ALIAS (fn);
7980 BV_FN (v) = fn;
7982 fn_original = THUNK_TARGET (fn);
7985 /* If the only definition of this function signature along our
7986 primary base chain is from a lost primary, this vtable slot will
7987 never be used, so just zero it out. This is important to avoid
7988 requiring extra thunks which cannot be generated with the function.
7990 We first check this in update_vtable_entry_for_fn, so we handle
7991 restored primary bases properly; we also need to do it here so we
7992 zero out unused slots in ctor vtables, rather than filling them
7993 with erroneous values (though harmless, apart from relocation
7994 costs). */
7995 if (BV_LOST_PRIMARY (v))
7996 init = size_zero_node;
7998 if (! init)
8000 /* Pull the offset for `this', and the function to call, out of
8001 the list. */
8002 delta = BV_DELTA (v);
8003 vcall_index = BV_VCALL_INDEX (v);
8005 gcc_assert (TREE_CODE (delta) == INTEGER_CST);
8006 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
8008 /* You can't call an abstract virtual function; it's abstract.
8009 So, we replace these functions with __pure_virtual. */
8010 if (DECL_PURE_VIRTUAL_P (fn_original))
8012 fn = abort_fndecl;
8013 if (!TARGET_VTABLE_USES_DESCRIPTORS)
8015 if (abort_fndecl_addr == NULL)
8016 abort_fndecl_addr
8017 = fold_convert (vfunc_ptr_type_node,
8018 build_fold_addr_expr (fn));
8019 init = abort_fndecl_addr;
8022 else
8024 if (!integer_zerop (delta) || vcall_index)
8026 fn = make_thunk (fn, /*this_adjusting=*/1, delta, vcall_index);
8027 if (!DECL_NAME (fn))
8028 finish_thunk (fn);
8030 /* Take the address of the function, considering it to be of an
8031 appropriate generic type. */
8032 if (!TARGET_VTABLE_USES_DESCRIPTORS)
8033 init = fold_convert (vfunc_ptr_type_node,
8034 build_fold_addr_expr (fn));
8038 /* And add it to the chain of initializers. */
8039 if (TARGET_VTABLE_USES_DESCRIPTORS)
8041 int i;
8042 if (init == size_zero_node)
8043 for (i = 0; i < TARGET_VTABLE_USES_DESCRIPTORS; ++i)
8044 CONSTRUCTOR_APPEND_ELT (*inits, NULL_TREE, init);
8045 else
8046 for (i = 0; i < TARGET_VTABLE_USES_DESCRIPTORS; ++i)
8048 tree fdesc = build2 (FDESC_EXPR, vfunc_ptr_type_node,
8049 fn, build_int_cst (NULL_TREE, i));
8050 TREE_CONSTANT (fdesc) = 1;
8052 CONSTRUCTOR_APPEND_ELT (*inits, NULL_TREE, fdesc);
8055 else
8056 CONSTRUCTOR_APPEND_ELT (*inits, NULL_TREE, init);
8060 /* Adds to vid->inits the initializers for the vbase and vcall
8061 offsets in BINFO, which is in the hierarchy dominated by T. */
8063 static void
8064 build_vcall_and_vbase_vtbl_entries (tree binfo, vtbl_init_data* vid)
8066 tree b;
8068 /* If this is a derived class, we must first create entries
8069 corresponding to the primary base class. */
8070 b = get_primary_binfo (binfo);
8071 if (b)
8072 build_vcall_and_vbase_vtbl_entries (b, vid);
8074 /* Add the vbase entries for this base. */
8075 build_vbase_offset_vtbl_entries (binfo, vid);
8076 /* Add the vcall entries for this base. */
8077 build_vcall_offset_vtbl_entries (binfo, vid);
8080 /* Returns the initializers for the vbase offset entries in the vtable
8081 for BINFO (which is part of the class hierarchy dominated by T), in
8082 reverse order. VBASE_OFFSET_INDEX gives the vtable index
8083 where the next vbase offset will go. */
8085 static void
8086 build_vbase_offset_vtbl_entries (tree binfo, vtbl_init_data* vid)
8088 tree vbase;
8089 tree t;
8090 tree non_primary_binfo;
8092 /* If there are no virtual baseclasses, then there is nothing to
8093 do. */
8094 if (!CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo)))
8095 return;
8097 t = vid->derived;
8099 /* We might be a primary base class. Go up the inheritance hierarchy
8100 until we find the most derived class of which we are a primary base:
8101 it is the offset of that which we need to use. */
8102 non_primary_binfo = binfo;
8103 while (BINFO_INHERITANCE_CHAIN (non_primary_binfo))
8105 tree b;
8107 /* If we have reached a virtual base, then it must be a primary
8108 base (possibly multi-level) of vid->binfo, or we wouldn't
8109 have called build_vcall_and_vbase_vtbl_entries for it. But it
8110 might be a lost primary, so just skip down to vid->binfo. */
8111 if (BINFO_VIRTUAL_P (non_primary_binfo))
8113 non_primary_binfo = vid->binfo;
8114 break;
8117 b = BINFO_INHERITANCE_CHAIN (non_primary_binfo);
8118 if (get_primary_binfo (b) != non_primary_binfo)
8119 break;
8120 non_primary_binfo = b;
8123 /* Go through the virtual bases, adding the offsets. */
8124 for (vbase = TYPE_BINFO (BINFO_TYPE (binfo));
8125 vbase;
8126 vbase = TREE_CHAIN (vbase))
8128 tree b;
8129 tree delta;
8131 if (!BINFO_VIRTUAL_P (vbase))
8132 continue;
8134 /* Find the instance of this virtual base in the complete
8135 object. */
8136 b = copied_binfo (vbase, binfo);
8138 /* If we've already got an offset for this virtual base, we
8139 don't need another one. */
8140 if (BINFO_VTABLE_PATH_MARKED (b))
8141 continue;
8142 BINFO_VTABLE_PATH_MARKED (b) = 1;
8144 /* Figure out where we can find this vbase offset. */
8145 delta = size_binop (MULT_EXPR,
8146 vid->index,
8147 convert (ssizetype,
8148 TYPE_SIZE_UNIT (vtable_entry_type)));
8149 if (vid->primary_vtbl_p)
8150 BINFO_VPTR_FIELD (b) = delta;
8152 if (binfo != TYPE_BINFO (t))
8153 /* The vbase offset had better be the same. */
8154 gcc_assert (tree_int_cst_equal (delta, BINFO_VPTR_FIELD (vbase)));
8156 /* The next vbase will come at a more negative offset. */
8157 vid->index = size_binop (MINUS_EXPR, vid->index,
8158 ssize_int (TARGET_VTABLE_DATA_ENTRY_DISTANCE));
8160 /* The initializer is the delta from BINFO to this virtual base.
8161 The vbase offsets go in reverse inheritance-graph order, and
8162 we are walking in inheritance graph order so these end up in
8163 the right order. */
8164 delta = size_diffop_loc (input_location,
8165 BINFO_OFFSET (b), BINFO_OFFSET (non_primary_binfo));
8167 CONSTRUCTOR_APPEND_ELT (vid->inits, NULL_TREE,
8168 fold_build1_loc (input_location, NOP_EXPR,
8169 vtable_entry_type, delta));
8173 /* Adds the initializers for the vcall offset entries in the vtable
8174 for BINFO (which is part of the class hierarchy dominated by VID->DERIVED)
8175 to VID->INITS. */
8177 static void
8178 build_vcall_offset_vtbl_entries (tree binfo, vtbl_init_data* vid)
8180 /* We only need these entries if this base is a virtual base. We
8181 compute the indices -- but do not add to the vtable -- when
8182 building the main vtable for a class. */
8183 if (binfo == TYPE_BINFO (vid->derived)
8184 || (BINFO_VIRTUAL_P (binfo)
8185 /* If BINFO is RTTI_BINFO, then (since BINFO does not
8186 correspond to VID->DERIVED), we are building a primary
8187 construction virtual table. Since this is a primary
8188 virtual table, we do not need the vcall offsets for
8189 BINFO. */
8190 && binfo != vid->rtti_binfo))
8192 /* We need a vcall offset for each of the virtual functions in this
8193 vtable. For example:
8195 class A { virtual void f (); };
8196 class B1 : virtual public A { virtual void f (); };
8197 class B2 : virtual public A { virtual void f (); };
8198 class C: public B1, public B2 { virtual void f (); };
8200 A C object has a primary base of B1, which has a primary base of A. A
8201 C also has a secondary base of B2, which no longer has a primary base
8202 of A. So the B2-in-C construction vtable needs a secondary vtable for
8203 A, which will adjust the A* to a B2* to call f. We have no way of
8204 knowing what (or even whether) this offset will be when we define B2,
8205 so we store this "vcall offset" in the A sub-vtable and look it up in
8206 a "virtual thunk" for B2::f.
8208 We need entries for all the functions in our primary vtable and
8209 in our non-virtual bases' secondary vtables. */
8210 vid->vbase = binfo;
8211 /* If we are just computing the vcall indices -- but do not need
8212 the actual entries -- not that. */
8213 if (!BINFO_VIRTUAL_P (binfo))
8214 vid->generate_vcall_entries = false;
8215 /* Now, walk through the non-virtual bases, adding vcall offsets. */
8216 add_vcall_offset_vtbl_entries_r (binfo, vid);
8220 /* Build vcall offsets, starting with those for BINFO. */
8222 static void
8223 add_vcall_offset_vtbl_entries_r (tree binfo, vtbl_init_data* vid)
8225 int i;
8226 tree primary_binfo;
8227 tree base_binfo;
8229 /* Don't walk into virtual bases -- except, of course, for the
8230 virtual base for which we are building vcall offsets. Any
8231 primary virtual base will have already had its offsets generated
8232 through the recursion in build_vcall_and_vbase_vtbl_entries. */
8233 if (BINFO_VIRTUAL_P (binfo) && vid->vbase != binfo)
8234 return;
8236 /* If BINFO has a primary base, process it first. */
8237 primary_binfo = get_primary_binfo (binfo);
8238 if (primary_binfo)
8239 add_vcall_offset_vtbl_entries_r (primary_binfo, vid);
8241 /* Add BINFO itself to the list. */
8242 add_vcall_offset_vtbl_entries_1 (binfo, vid);
8244 /* Scan the non-primary bases of BINFO. */
8245 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
8246 if (base_binfo != primary_binfo)
8247 add_vcall_offset_vtbl_entries_r (base_binfo, vid);
8250 /* Called from build_vcall_offset_vtbl_entries_r. */
8252 static void
8253 add_vcall_offset_vtbl_entries_1 (tree binfo, vtbl_init_data* vid)
8255 /* Make entries for the rest of the virtuals. */
8256 if (abi_version_at_least (2))
8258 tree orig_fn;
8260 /* The ABI requires that the methods be processed in declaration
8261 order. G++ 3.2 used the order in the vtable. */
8262 for (orig_fn = TYPE_METHODS (BINFO_TYPE (binfo));
8263 orig_fn;
8264 orig_fn = DECL_CHAIN (orig_fn))
8265 if (DECL_VINDEX (orig_fn))
8266 add_vcall_offset (orig_fn, binfo, vid);
8268 else
8270 tree derived_virtuals;
8271 tree base_virtuals;
8272 tree orig_virtuals;
8273 /* If BINFO is a primary base, the most derived class which has
8274 BINFO as a primary base; otherwise, just BINFO. */
8275 tree non_primary_binfo;
8277 /* We might be a primary base class. Go up the inheritance hierarchy
8278 until we find the most derived class of which we are a primary base:
8279 it is the BINFO_VIRTUALS there that we need to consider. */
8280 non_primary_binfo = binfo;
8281 while (BINFO_INHERITANCE_CHAIN (non_primary_binfo))
8283 tree b;
8285 /* If we have reached a virtual base, then it must be vid->vbase,
8286 because we ignore other virtual bases in
8287 add_vcall_offset_vtbl_entries_r. In turn, it must be a primary
8288 base (possibly multi-level) of vid->binfo, or we wouldn't
8289 have called build_vcall_and_vbase_vtbl_entries for it. But it
8290 might be a lost primary, so just skip down to vid->binfo. */
8291 if (BINFO_VIRTUAL_P (non_primary_binfo))
8293 gcc_assert (non_primary_binfo == vid->vbase);
8294 non_primary_binfo = vid->binfo;
8295 break;
8298 b = BINFO_INHERITANCE_CHAIN (non_primary_binfo);
8299 if (get_primary_binfo (b) != non_primary_binfo)
8300 break;
8301 non_primary_binfo = b;
8304 if (vid->ctor_vtbl_p)
8305 /* For a ctor vtable we need the equivalent binfo within the hierarchy
8306 where rtti_binfo is the most derived type. */
8307 non_primary_binfo
8308 = original_binfo (non_primary_binfo, vid->rtti_binfo);
8310 for (base_virtuals = BINFO_VIRTUALS (binfo),
8311 derived_virtuals = BINFO_VIRTUALS (non_primary_binfo),
8312 orig_virtuals = BINFO_VIRTUALS (TYPE_BINFO (BINFO_TYPE (binfo)));
8313 base_virtuals;
8314 base_virtuals = TREE_CHAIN (base_virtuals),
8315 derived_virtuals = TREE_CHAIN (derived_virtuals),
8316 orig_virtuals = TREE_CHAIN (orig_virtuals))
8318 tree orig_fn;
8320 /* Find the declaration that originally caused this function to
8321 be present in BINFO_TYPE (binfo). */
8322 orig_fn = BV_FN (orig_virtuals);
8324 /* When processing BINFO, we only want to generate vcall slots for
8325 function slots introduced in BINFO. So don't try to generate
8326 one if the function isn't even defined in BINFO. */
8327 if (!SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), DECL_CONTEXT (orig_fn)))
8328 continue;
8330 add_vcall_offset (orig_fn, binfo, vid);
8335 /* Add a vcall offset entry for ORIG_FN to the vtable. */
8337 static void
8338 add_vcall_offset (tree orig_fn, tree binfo, vtbl_init_data *vid)
8340 size_t i;
8341 tree vcall_offset;
8342 tree derived_entry;
8344 /* If there is already an entry for a function with the same
8345 signature as FN, then we do not need a second vcall offset.
8346 Check the list of functions already present in the derived
8347 class vtable. */
8348 FOR_EACH_VEC_ELT (tree, vid->fns, i, derived_entry)
8350 if (same_signature_p (derived_entry, orig_fn)
8351 /* We only use one vcall offset for virtual destructors,
8352 even though there are two virtual table entries. */
8353 || (DECL_DESTRUCTOR_P (derived_entry)
8354 && DECL_DESTRUCTOR_P (orig_fn)))
8355 return;
8358 /* If we are building these vcall offsets as part of building
8359 the vtable for the most derived class, remember the vcall
8360 offset. */
8361 if (vid->binfo == TYPE_BINFO (vid->derived))
8363 tree_pair_p elt = VEC_safe_push (tree_pair_s, gc,
8364 CLASSTYPE_VCALL_INDICES (vid->derived),
8365 NULL);
8366 elt->purpose = orig_fn;
8367 elt->value = vid->index;
8370 /* The next vcall offset will be found at a more negative
8371 offset. */
8372 vid->index = size_binop (MINUS_EXPR, vid->index,
8373 ssize_int (TARGET_VTABLE_DATA_ENTRY_DISTANCE));
8375 /* Keep track of this function. */
8376 VEC_safe_push (tree, gc, vid->fns, orig_fn);
8378 if (vid->generate_vcall_entries)
8380 tree base;
8381 tree fn;
8383 /* Find the overriding function. */
8384 fn = find_final_overrider (vid->rtti_binfo, binfo, orig_fn);
8385 if (fn == error_mark_node)
8386 vcall_offset = build_zero_cst (vtable_entry_type);
8387 else
8389 base = TREE_VALUE (fn);
8391 /* The vbase we're working on is a primary base of
8392 vid->binfo. But it might be a lost primary, so its
8393 BINFO_OFFSET might be wrong, so we just use the
8394 BINFO_OFFSET from vid->binfo. */
8395 vcall_offset = size_diffop_loc (input_location,
8396 BINFO_OFFSET (base),
8397 BINFO_OFFSET (vid->binfo));
8398 vcall_offset = fold_build1_loc (input_location,
8399 NOP_EXPR, vtable_entry_type,
8400 vcall_offset);
8402 /* Add the initializer to the vtable. */
8403 CONSTRUCTOR_APPEND_ELT (vid->inits, NULL_TREE, vcall_offset);
8407 /* Return vtbl initializers for the RTTI entries corresponding to the
8408 BINFO's vtable. The RTTI entries should indicate the object given
8409 by VID->rtti_binfo. */
8411 static void
8412 build_rtti_vtbl_entries (tree binfo, vtbl_init_data* vid)
8414 tree b;
8415 tree t;
8416 tree offset;
8417 tree decl;
8418 tree init;
8420 t = BINFO_TYPE (vid->rtti_binfo);
8422 /* To find the complete object, we will first convert to our most
8423 primary base, and then add the offset in the vtbl to that value. */
8424 b = binfo;
8425 while (CLASSTYPE_HAS_PRIMARY_BASE_P (BINFO_TYPE (b))
8426 && !BINFO_LOST_PRIMARY_P (b))
8428 tree primary_base;
8430 primary_base = get_primary_binfo (b);
8431 gcc_assert (BINFO_PRIMARY_P (primary_base)
8432 && BINFO_INHERITANCE_CHAIN (primary_base) == b);
8433 b = primary_base;
8435 offset = size_diffop_loc (input_location,
8436 BINFO_OFFSET (vid->rtti_binfo), BINFO_OFFSET (b));
8438 /* The second entry is the address of the typeinfo object. */
8439 if (flag_rtti)
8440 decl = build_address (get_tinfo_decl (t));
8441 else
8442 decl = integer_zero_node;
8444 /* Convert the declaration to a type that can be stored in the
8445 vtable. */
8446 init = build_nop (vfunc_ptr_type_node, decl);
8447 CONSTRUCTOR_APPEND_ELT (vid->inits, NULL_TREE, init);
8449 /* Add the offset-to-top entry. It comes earlier in the vtable than
8450 the typeinfo entry. Convert the offset to look like a
8451 function pointer, so that we can put it in the vtable. */
8452 init = build_nop (vfunc_ptr_type_node, offset);
8453 CONSTRUCTOR_APPEND_ELT (vid->inits, NULL_TREE, init);
8456 #include "gt-cp-class.h"