* gcc.dg/torture/tls/tls-reload-1.c: Add tls options.
[official-gcc.git] / gcc / cp / class.c
blob0aecabb380e6cda713abff0d226fb1bf308e73ee
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, 2011,
4 2012
5 Free Software Foundation, Inc.
6 Contributed by Michael Tiemann (tiemann@cygnus.com)
8 This file is part of GCC.
10 GCC is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 3, or (at your option)
13 any later version.
15 GCC is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
20 You should have received a copy of the GNU General Public License
21 along with GCC; see the file COPYING3. If not see
22 <http://www.gnu.org/licenses/>. */
25 /* High-level class interface. */
27 #include "config.h"
28 #include "system.h"
29 #include "coretypes.h"
30 #include "tm.h"
31 #include "tree.h"
32 #include "cp-tree.h"
33 #include "flags.h"
34 #include "toplev.h"
35 #include "target.h"
36 #include "convert.h"
37 #include "cgraph.h"
38 #include "dumpfile.h"
39 #include "splay-tree.h"
40 #include "pointer-set.h"
41 #include "hash-table.h"
43 /* The number of nested classes being processed. If we are not in the
44 scope of any class, this is zero. */
46 int current_class_depth;
48 /* In order to deal with nested classes, we keep a stack of classes.
49 The topmost entry is the innermost class, and is the entry at index
50 CURRENT_CLASS_DEPTH */
52 typedef struct class_stack_node {
53 /* The name of the class. */
54 tree name;
56 /* The _TYPE node for the class. */
57 tree type;
59 /* The access specifier pending for new declarations in the scope of
60 this class. */
61 tree access;
63 /* If were defining TYPE, the names used in this class. */
64 splay_tree names_used;
66 /* Nonzero if this class is no longer open, because of a call to
67 push_to_top_level. */
68 size_t hidden;
69 }* class_stack_node_t;
71 typedef struct vtbl_init_data_s
73 /* The base for which we're building initializers. */
74 tree binfo;
75 /* The type of the most-derived type. */
76 tree derived;
77 /* The binfo for the dynamic type. This will be TYPE_BINFO (derived),
78 unless ctor_vtbl_p is true. */
79 tree rtti_binfo;
80 /* The negative-index vtable initializers built up so far. These
81 are in order from least negative index to most negative index. */
82 vec<constructor_elt, va_gc> *inits;
83 /* The binfo for the virtual base for which we're building
84 vcall offset initializers. */
85 tree vbase;
86 /* The functions in vbase for which we have already provided vcall
87 offsets. */
88 vec<tree, va_gc> *fns;
89 /* The vtable index of the next vcall or vbase offset. */
90 tree index;
91 /* Nonzero if we are building the initializer for the primary
92 vtable. */
93 int primary_vtbl_p;
94 /* Nonzero if we are building the initializer for a construction
95 vtable. */
96 int ctor_vtbl_p;
97 /* True when adding vcall offset entries to the vtable. False when
98 merely computing the indices. */
99 bool generate_vcall_entries;
100 } vtbl_init_data;
102 /* The type of a function passed to walk_subobject_offsets. */
103 typedef int (*subobject_offset_fn) (tree, tree, splay_tree);
105 /* The stack itself. This is a dynamically resized array. The
106 number of elements allocated is CURRENT_CLASS_STACK_SIZE. */
107 static int current_class_stack_size;
108 static class_stack_node_t current_class_stack;
110 /* The size of the largest empty class seen in this translation unit. */
111 static GTY (()) tree sizeof_biggest_empty_class;
113 /* An array of all local classes present in this translation unit, in
114 declaration order. */
115 vec<tree, va_gc> *local_classes;
117 static tree get_vfield_name (tree);
118 static void finish_struct_anon (tree);
119 static tree get_vtable_name (tree);
120 static tree get_basefndecls (tree, tree);
121 static int build_primary_vtable (tree, tree);
122 static int build_secondary_vtable (tree);
123 static void finish_vtbls (tree);
124 static void modify_vtable_entry (tree, tree, tree, tree, tree *);
125 static void finish_struct_bits (tree);
126 static int alter_access (tree, tree, tree);
127 static void handle_using_decl (tree, tree);
128 static tree dfs_modify_vtables (tree, void *);
129 static tree modify_all_vtables (tree, tree);
130 static void determine_primary_bases (tree);
131 static void finish_struct_methods (tree);
132 static void maybe_warn_about_overly_private_class (tree);
133 static int method_name_cmp (const void *, const void *);
134 static int resort_method_name_cmp (const void *, const void *);
135 static void add_implicitly_declared_members (tree, tree*, int, int);
136 static tree fixed_type_or_null (tree, int *, int *);
137 static tree build_simple_base_path (tree expr, tree binfo);
138 static tree build_vtbl_ref_1 (tree, tree);
139 static void build_vtbl_initializer (tree, tree, tree, tree, int *,
140 vec<constructor_elt, va_gc> **);
141 static int count_fields (tree);
142 static int add_fields_to_record_type (tree, struct sorted_fields_type*, int);
143 static void insert_into_classtype_sorted_fields (tree, tree, int);
144 static bool check_bitfield_decl (tree);
145 static void check_field_decl (tree, tree, int *, int *, int *);
146 static void check_field_decls (tree, tree *, int *, int *);
147 static tree *build_base_field (record_layout_info, tree, splay_tree, tree *);
148 static void build_base_fields (record_layout_info, splay_tree, tree *);
149 static void check_methods (tree);
150 static void remove_zero_width_bit_fields (tree);
151 static void check_bases (tree, int *, int *);
152 static void check_bases_and_members (tree);
153 static tree create_vtable_ptr (tree, tree *);
154 static void include_empty_classes (record_layout_info);
155 static void layout_class_type (tree, tree *);
156 static void propagate_binfo_offsets (tree, tree);
157 static void layout_virtual_bases (record_layout_info, splay_tree);
158 static void build_vbase_offset_vtbl_entries (tree, vtbl_init_data *);
159 static void add_vcall_offset_vtbl_entries_r (tree, vtbl_init_data *);
160 static void add_vcall_offset_vtbl_entries_1 (tree, vtbl_init_data *);
161 static void build_vcall_offset_vtbl_entries (tree, vtbl_init_data *);
162 static void add_vcall_offset (tree, tree, vtbl_init_data *);
163 static void layout_vtable_decl (tree, int);
164 static tree dfs_find_final_overrider_pre (tree, void *);
165 static tree dfs_find_final_overrider_post (tree, void *);
166 static tree find_final_overrider (tree, tree, tree);
167 static int make_new_vtable (tree, tree);
168 static tree get_primary_binfo (tree);
169 static int maybe_indent_hierarchy (FILE *, int, int);
170 static tree dump_class_hierarchy_r (FILE *, int, tree, tree, int);
171 static void dump_class_hierarchy (tree);
172 static void dump_class_hierarchy_1 (FILE *, int, tree);
173 static void dump_array (FILE *, tree);
174 static void dump_vtable (tree, tree, tree);
175 static void dump_vtt (tree, tree);
176 static void dump_thunk (FILE *, int, tree);
177 static tree build_vtable (tree, tree, tree);
178 static void initialize_vtable (tree, vec<constructor_elt, va_gc> *);
179 static void layout_nonempty_base_or_field (record_layout_info,
180 tree, tree, splay_tree);
181 static tree end_of_class (tree, int);
182 static bool layout_empty_base (record_layout_info, tree, tree, splay_tree);
183 static void accumulate_vtbl_inits (tree, tree, tree, tree, tree,
184 vec<constructor_elt, va_gc> **);
185 static void dfs_accumulate_vtbl_inits (tree, tree, tree, tree, tree,
186 vec<constructor_elt, va_gc> **);
187 static void build_rtti_vtbl_entries (tree, vtbl_init_data *);
188 static void build_vcall_and_vbase_vtbl_entries (tree, vtbl_init_data *);
189 static void clone_constructors_and_destructors (tree);
190 static tree build_clone (tree, tree);
191 static void update_vtable_entry_for_fn (tree, tree, tree, tree *, unsigned);
192 static void build_ctor_vtbl_group (tree, tree);
193 static void build_vtt (tree);
194 static tree binfo_ctor_vtable (tree);
195 static void build_vtt_inits (tree, tree, vec<constructor_elt, va_gc> **,
196 tree *);
197 static tree dfs_build_secondary_vptr_vtt_inits (tree, void *);
198 static tree dfs_fixup_binfo_vtbls (tree, void *);
199 static int record_subobject_offset (tree, tree, splay_tree);
200 static int check_subobject_offset (tree, tree, splay_tree);
201 static int walk_subobject_offsets (tree, subobject_offset_fn,
202 tree, splay_tree, tree, int);
203 static void record_subobject_offsets (tree, tree, splay_tree, bool);
204 static int layout_conflict_p (tree, tree, splay_tree, int);
205 static int splay_tree_compare_integer_csts (splay_tree_key k1,
206 splay_tree_key k2);
207 static void warn_about_ambiguous_bases (tree);
208 static bool type_requires_array_cookie (tree);
209 static bool contains_empty_class_p (tree);
210 static bool base_derived_from (tree, tree);
211 static int empty_base_at_nonzero_offset_p (tree, tree, splay_tree);
212 static tree end_of_base (tree);
213 static tree get_vcall_index (tree, tree);
215 /* Variables shared between class.c and call.c. */
217 int n_vtables = 0;
218 int n_vtable_entries = 0;
219 int n_vtable_searches = 0;
220 int n_vtable_elems = 0;
221 int n_convert_harshness = 0;
222 int n_compute_conversion_costs = 0;
223 int n_inner_fields_searched = 0;
225 /* Convert to or from a base subobject. EXPR is an expression of type
226 `A' or `A*', an expression of type `B' or `B*' is returned. To
227 convert A to a base B, CODE is PLUS_EXPR and BINFO is the binfo for
228 the B base instance within A. To convert base A to derived B, CODE
229 is MINUS_EXPR and BINFO is the binfo for the A instance within B.
230 In this latter case, A must not be a morally virtual base of B.
231 NONNULL is true if EXPR is known to be non-NULL (this is only
232 needed when EXPR is of pointer type). CV qualifiers are preserved
233 from EXPR. */
235 tree
236 build_base_path (enum tree_code code,
237 tree expr,
238 tree binfo,
239 int nonnull,
240 tsubst_flags_t complain)
242 tree v_binfo = NULL_TREE;
243 tree d_binfo = NULL_TREE;
244 tree probe;
245 tree offset;
246 tree target_type;
247 tree null_test = NULL;
248 tree ptr_target_type;
249 int fixed_type_p;
250 int want_pointer = TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE;
251 bool has_empty = false;
252 bool virtual_access;
254 if (expr == error_mark_node || binfo == error_mark_node || !binfo)
255 return error_mark_node;
257 for (probe = binfo; probe; probe = BINFO_INHERITANCE_CHAIN (probe))
259 d_binfo = probe;
260 if (is_empty_class (BINFO_TYPE (probe)))
261 has_empty = true;
262 if (!v_binfo && BINFO_VIRTUAL_P (probe))
263 v_binfo = probe;
266 probe = TYPE_MAIN_VARIANT (TREE_TYPE (expr));
267 if (want_pointer)
268 probe = TYPE_MAIN_VARIANT (TREE_TYPE (probe));
270 if (code == PLUS_EXPR
271 && !SAME_BINFO_TYPE_P (BINFO_TYPE (d_binfo), probe))
273 /* This can happen when adjust_result_of_qualified_name_lookup can't
274 find a unique base binfo in a call to a member function. We
275 couldn't give the diagnostic then since we might have been calling
276 a static member function, so we do it now. */
277 if (complain & tf_error)
279 tree base = lookup_base (probe, BINFO_TYPE (d_binfo),
280 ba_unique, NULL, complain);
281 gcc_assert (base == error_mark_node);
283 return error_mark_node;
286 gcc_assert ((code == MINUS_EXPR
287 && SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), probe))
288 || code == PLUS_EXPR);
290 if (binfo == d_binfo)
291 /* Nothing to do. */
292 return expr;
294 if (code == MINUS_EXPR && v_binfo)
296 if (complain & tf_error)
297 error ("cannot convert from base %qT to derived type %qT via "
298 "virtual base %qT", BINFO_TYPE (binfo), BINFO_TYPE (d_binfo),
299 BINFO_TYPE (v_binfo));
300 return error_mark_node;
303 if (!want_pointer)
304 /* This must happen before the call to save_expr. */
305 expr = cp_build_addr_expr (expr, complain);
306 else
307 expr = mark_rvalue_use (expr);
309 offset = BINFO_OFFSET (binfo);
310 fixed_type_p = resolves_to_fixed_type_p (expr, &nonnull);
311 target_type = code == PLUS_EXPR ? BINFO_TYPE (binfo) : BINFO_TYPE (d_binfo);
312 /* TARGET_TYPE has been extracted from BINFO, and, is therefore always
313 cv-unqualified. Extract the cv-qualifiers from EXPR so that the
314 expression returned matches the input. */
315 target_type = cp_build_qualified_type
316 (target_type, cp_type_quals (TREE_TYPE (TREE_TYPE (expr))));
317 ptr_target_type = build_pointer_type (target_type);
319 /* Do we need to look in the vtable for the real offset? */
320 virtual_access = (v_binfo && fixed_type_p <= 0);
322 /* Don't bother with the calculations inside sizeof; they'll ICE if the
323 source type is incomplete and the pointer value doesn't matter. In a
324 template (even in fold_non_dependent_expr), we don't have vtables set
325 up properly yet, and the value doesn't matter there either; we're just
326 interested in the result of overload resolution. */
327 if (cp_unevaluated_operand != 0
328 || in_template_function ())
330 expr = build_nop (ptr_target_type, expr);
331 if (!want_pointer)
332 expr = build_indirect_ref (EXPR_LOCATION (expr), expr, RO_NULL);
333 return expr;
336 /* If we're in an NSDMI, we don't have the full constructor context yet
337 that we need for converting to a virtual base, so just build a stub
338 CONVERT_EXPR and expand it later in bot_replace. */
339 if (virtual_access && fixed_type_p < 0
340 && current_scope () != current_function_decl)
342 expr = build1 (CONVERT_EXPR, ptr_target_type, expr);
343 CONVERT_EXPR_VBASE_PATH (expr) = true;
344 if (!want_pointer)
345 expr = build_indirect_ref (EXPR_LOCATION (expr), expr, RO_NULL);
346 return expr;
349 /* Do we need to check for a null pointer? */
350 if (want_pointer && !nonnull)
352 /* If we know the conversion will not actually change the value
353 of EXPR, then we can avoid testing the expression for NULL.
354 We have to avoid generating a COMPONENT_REF for a base class
355 field, because other parts of the compiler know that such
356 expressions are always non-NULL. */
357 if (!virtual_access && integer_zerop (offset))
358 return build_nop (ptr_target_type, expr);
359 null_test = error_mark_node;
362 /* Protect against multiple evaluation if necessary. */
363 if (TREE_SIDE_EFFECTS (expr) && (null_test || virtual_access))
364 expr = save_expr (expr);
366 /* Now that we've saved expr, build the real null test. */
367 if (null_test)
369 tree zero = cp_convert (TREE_TYPE (expr), nullptr_node, complain);
370 null_test = fold_build2_loc (input_location, NE_EXPR, boolean_type_node,
371 expr, zero);
374 /* If this is a simple base reference, express it as a COMPONENT_REF. */
375 if (code == PLUS_EXPR && !virtual_access
376 /* We don't build base fields for empty bases, and they aren't very
377 interesting to the optimizers anyway. */
378 && !has_empty)
380 expr = cp_build_indirect_ref (expr, RO_NULL, complain);
381 expr = build_simple_base_path (expr, binfo);
382 if (want_pointer)
383 expr = build_address (expr);
384 target_type = TREE_TYPE (expr);
385 goto out;
388 if (virtual_access)
390 /* Going via virtual base V_BINFO. We need the static offset
391 from V_BINFO to BINFO, and the dynamic offset from D_BINFO to
392 V_BINFO. That offset is an entry in D_BINFO's vtable. */
393 tree v_offset;
395 if (fixed_type_p < 0 && in_base_initializer)
397 /* In a base member initializer, we cannot rely on the
398 vtable being set up. We have to indirect via the
399 vtt_parm. */
400 tree t;
402 t = TREE_TYPE (TYPE_VFIELD (current_class_type));
403 t = build_pointer_type (t);
404 v_offset = convert (t, current_vtt_parm);
405 v_offset = cp_build_indirect_ref (v_offset, RO_NULL, complain);
407 else
408 v_offset = build_vfield_ref (cp_build_indirect_ref (expr, RO_NULL,
409 complain),
410 TREE_TYPE (TREE_TYPE (expr)));
412 v_offset = fold_build_pointer_plus (v_offset, BINFO_VPTR_FIELD (v_binfo));
413 v_offset = build1 (NOP_EXPR,
414 build_pointer_type (ptrdiff_type_node),
415 v_offset);
416 v_offset = cp_build_indirect_ref (v_offset, RO_NULL, complain);
417 TREE_CONSTANT (v_offset) = 1;
419 offset = convert_to_integer (ptrdiff_type_node,
420 size_diffop_loc (input_location, offset,
421 BINFO_OFFSET (v_binfo)));
423 if (!integer_zerop (offset))
424 v_offset = build2 (code, ptrdiff_type_node, v_offset, offset);
426 if (fixed_type_p < 0)
427 /* Negative fixed_type_p means this is a constructor or destructor;
428 virtual base layout is fixed in in-charge [cd]tors, but not in
429 base [cd]tors. */
430 offset = build3 (COND_EXPR, ptrdiff_type_node,
431 build2 (EQ_EXPR, boolean_type_node,
432 current_in_charge_parm, integer_zero_node),
433 v_offset,
434 convert_to_integer (ptrdiff_type_node,
435 BINFO_OFFSET (binfo)));
436 else
437 offset = v_offset;
440 if (want_pointer)
441 target_type = ptr_target_type;
443 expr = build1 (NOP_EXPR, ptr_target_type, expr);
445 if (!integer_zerop (offset))
447 offset = fold_convert (sizetype, offset);
448 if (code == MINUS_EXPR)
449 offset = fold_build1_loc (input_location, NEGATE_EXPR, sizetype, offset);
450 expr = fold_build_pointer_plus (expr, offset);
452 else
453 null_test = NULL;
455 if (!want_pointer)
456 expr = cp_build_indirect_ref (expr, RO_NULL, complain);
458 out:
459 if (null_test)
460 expr = fold_build3_loc (input_location, COND_EXPR, target_type, null_test, expr,
461 build_zero_cst (target_type));
463 return expr;
466 /* Subroutine of build_base_path; EXPR and BINFO are as in that function.
467 Perform a derived-to-base conversion by recursively building up a
468 sequence of COMPONENT_REFs to the appropriate base fields. */
470 static tree
471 build_simple_base_path (tree expr, tree binfo)
473 tree type = BINFO_TYPE (binfo);
474 tree d_binfo = BINFO_INHERITANCE_CHAIN (binfo);
475 tree field;
477 if (d_binfo == NULL_TREE)
479 tree temp;
481 gcc_assert (TYPE_MAIN_VARIANT (TREE_TYPE (expr)) == type);
483 /* Transform `(a, b).x' into `(*(a, &b)).x', `(a ? b : c).x'
484 into `(*(a ? &b : &c)).x', and so on. A COND_EXPR is only
485 an lvalue in the front end; only _DECLs and _REFs are lvalues
486 in the back end. */
487 temp = unary_complex_lvalue (ADDR_EXPR, expr);
488 if (temp)
489 expr = cp_build_indirect_ref (temp, RO_NULL, tf_warning_or_error);
491 return expr;
494 /* Recurse. */
495 expr = build_simple_base_path (expr, d_binfo);
497 for (field = TYPE_FIELDS (BINFO_TYPE (d_binfo));
498 field; field = DECL_CHAIN (field))
499 /* Is this the base field created by build_base_field? */
500 if (TREE_CODE (field) == FIELD_DECL
501 && DECL_FIELD_IS_BASE (field)
502 && TREE_TYPE (field) == type
503 /* If we're looking for a field in the most-derived class,
504 also check the field offset; we can have two base fields
505 of the same type if one is an indirect virtual base and one
506 is a direct non-virtual base. */
507 && (BINFO_INHERITANCE_CHAIN (d_binfo)
508 || tree_int_cst_equal (byte_position (field),
509 BINFO_OFFSET (binfo))))
511 /* We don't use build_class_member_access_expr here, as that
512 has unnecessary checks, and more importantly results in
513 recursive calls to dfs_walk_once. */
514 int type_quals = cp_type_quals (TREE_TYPE (expr));
516 expr = build3 (COMPONENT_REF,
517 cp_build_qualified_type (type, type_quals),
518 expr, field, NULL_TREE);
519 expr = fold_if_not_in_template (expr);
521 /* Mark the expression const or volatile, as appropriate.
522 Even though we've dealt with the type above, we still have
523 to mark the expression itself. */
524 if (type_quals & TYPE_QUAL_CONST)
525 TREE_READONLY (expr) = 1;
526 if (type_quals & TYPE_QUAL_VOLATILE)
527 TREE_THIS_VOLATILE (expr) = 1;
529 return expr;
532 /* Didn't find the base field?!? */
533 gcc_unreachable ();
536 /* Convert OBJECT to the base TYPE. OBJECT is an expression whose
537 type is a class type or a pointer to a class type. In the former
538 case, TYPE is also a class type; in the latter it is another
539 pointer type. If CHECK_ACCESS is true, an error message is emitted
540 if TYPE is inaccessible. If OBJECT has pointer type, the value is
541 assumed to be non-NULL. */
543 tree
544 convert_to_base (tree object, tree type, bool check_access, bool nonnull,
545 tsubst_flags_t complain)
547 tree binfo;
548 tree object_type;
550 if (TYPE_PTR_P (TREE_TYPE (object)))
552 object_type = TREE_TYPE (TREE_TYPE (object));
553 type = TREE_TYPE (type);
555 else
556 object_type = TREE_TYPE (object);
558 binfo = lookup_base (object_type, type, check_access ? ba_check : ba_unique,
559 NULL, complain);
560 if (!binfo || binfo == error_mark_node)
561 return error_mark_node;
563 return build_base_path (PLUS_EXPR, object, binfo, nonnull, complain);
566 /* EXPR is an expression with unqualified class type. BASE is a base
567 binfo of that class type. Returns EXPR, converted to the BASE
568 type. This function assumes that EXPR is the most derived class;
569 therefore virtual bases can be found at their static offsets. */
571 tree
572 convert_to_base_statically (tree expr, tree base)
574 tree expr_type;
576 expr_type = TREE_TYPE (expr);
577 if (!SAME_BINFO_TYPE_P (BINFO_TYPE (base), expr_type))
579 /* If this is a non-empty base, use a COMPONENT_REF. */
580 if (!is_empty_class (BINFO_TYPE (base)))
581 return build_simple_base_path (expr, base);
583 /* We use fold_build2 and fold_convert below to simplify the trees
584 provided to the optimizers. It is not safe to call these functions
585 when processing a template because they do not handle C++-specific
586 trees. */
587 gcc_assert (!processing_template_decl);
588 expr = cp_build_addr_expr (expr, tf_warning_or_error);
589 if (!integer_zerop (BINFO_OFFSET (base)))
590 expr = fold_build_pointer_plus_loc (input_location,
591 expr, BINFO_OFFSET (base));
592 expr = fold_convert (build_pointer_type (BINFO_TYPE (base)), expr);
593 expr = build_fold_indirect_ref_loc (input_location, expr);
596 return expr;
600 tree
601 build_vfield_ref (tree datum, tree type)
603 tree vfield, vcontext;
605 if (datum == error_mark_node)
606 return error_mark_node;
608 /* First, convert to the requested type. */
609 if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (datum), type))
610 datum = convert_to_base (datum, type, /*check_access=*/false,
611 /*nonnull=*/true, tf_warning_or_error);
613 /* Second, the requested type may not be the owner of its own vptr.
614 If not, convert to the base class that owns it. We cannot use
615 convert_to_base here, because VCONTEXT may appear more than once
616 in the inheritance hierarchy of TYPE, and thus direct conversion
617 between the types may be ambiguous. Following the path back up
618 one step at a time via primary bases avoids the problem. */
619 vfield = TYPE_VFIELD (type);
620 vcontext = DECL_CONTEXT (vfield);
621 while (!same_type_ignoring_top_level_qualifiers_p (vcontext, type))
623 datum = build_simple_base_path (datum, CLASSTYPE_PRIMARY_BINFO (type));
624 type = TREE_TYPE (datum);
627 return build3 (COMPONENT_REF, TREE_TYPE (vfield), datum, vfield, NULL_TREE);
630 /* Given an object INSTANCE, return an expression which yields the
631 vtable element corresponding to INDEX. There are many special
632 cases for INSTANCE which we take care of here, mainly to avoid
633 creating extra tree nodes when we don't have to. */
635 static tree
636 build_vtbl_ref_1 (tree instance, tree idx)
638 tree aref;
639 tree vtbl = NULL_TREE;
641 /* Try to figure out what a reference refers to, and
642 access its virtual function table directly. */
644 int cdtorp = 0;
645 tree fixed_type = fixed_type_or_null (instance, NULL, &cdtorp);
647 tree basetype = non_reference (TREE_TYPE (instance));
649 if (fixed_type && !cdtorp)
651 tree binfo = lookup_base (fixed_type, basetype,
652 ba_unique, NULL, tf_none);
653 if (binfo && binfo != error_mark_node)
654 vtbl = unshare_expr (BINFO_VTABLE (binfo));
657 if (!vtbl)
658 vtbl = build_vfield_ref (instance, basetype);
660 aref = build_array_ref (input_location, vtbl, idx);
661 TREE_CONSTANT (aref) |= TREE_CONSTANT (vtbl) && TREE_CONSTANT (idx);
663 return aref;
666 tree
667 build_vtbl_ref (tree instance, tree idx)
669 tree aref = build_vtbl_ref_1 (instance, idx);
671 return aref;
674 /* Given a stable object pointer INSTANCE_PTR, return an expression which
675 yields a function pointer corresponding to vtable element INDEX. */
677 tree
678 build_vfn_ref (tree instance_ptr, tree idx)
680 tree aref;
682 aref = build_vtbl_ref_1 (cp_build_indirect_ref (instance_ptr, RO_NULL,
683 tf_warning_or_error),
684 idx);
686 /* When using function descriptors, the address of the
687 vtable entry is treated as a function pointer. */
688 if (TARGET_VTABLE_USES_DESCRIPTORS)
689 aref = build1 (NOP_EXPR, TREE_TYPE (aref),
690 cp_build_addr_expr (aref, tf_warning_or_error));
692 /* Remember this as a method reference, for later devirtualization. */
693 aref = build3 (OBJ_TYPE_REF, TREE_TYPE (aref), aref, instance_ptr, idx);
695 return aref;
698 /* Return the name of the virtual function table (as an IDENTIFIER_NODE)
699 for the given TYPE. */
701 static tree
702 get_vtable_name (tree type)
704 return mangle_vtbl_for_type (type);
707 /* DECL is an entity associated with TYPE, like a virtual table or an
708 implicitly generated constructor. Determine whether or not DECL
709 should have external or internal linkage at the object file
710 level. This routine does not deal with COMDAT linkage and other
711 similar complexities; it simply sets TREE_PUBLIC if it possible for
712 entities in other translation units to contain copies of DECL, in
713 the abstract. */
715 void
716 set_linkage_according_to_type (tree /*type*/, tree decl)
718 TREE_PUBLIC (decl) = 1;
719 determine_visibility (decl);
722 /* Create a VAR_DECL for a primary or secondary vtable for CLASS_TYPE.
723 (For a secondary vtable for B-in-D, CLASS_TYPE should be D, not B.)
724 Use NAME for the name of the vtable, and VTABLE_TYPE for its type. */
726 static tree
727 build_vtable (tree class_type, tree name, tree vtable_type)
729 tree decl;
731 decl = build_lang_decl (VAR_DECL, name, vtable_type);
732 /* vtable names are already mangled; give them their DECL_ASSEMBLER_NAME
733 now to avoid confusion in mangle_decl. */
734 SET_DECL_ASSEMBLER_NAME (decl, name);
735 DECL_CONTEXT (decl) = class_type;
736 DECL_ARTIFICIAL (decl) = 1;
737 TREE_STATIC (decl) = 1;
738 TREE_READONLY (decl) = 1;
739 DECL_VIRTUAL_P (decl) = 1;
740 DECL_ALIGN (decl) = TARGET_VTABLE_ENTRY_ALIGN;
741 DECL_VTABLE_OR_VTT_P (decl) = 1;
742 /* At one time the vtable info was grabbed 2 words at a time. This
743 fails on sparc unless you have 8-byte alignment. (tiemann) */
744 DECL_ALIGN (decl) = MAX (TYPE_ALIGN (double_type_node),
745 DECL_ALIGN (decl));
746 set_linkage_according_to_type (class_type, decl);
747 /* The vtable has not been defined -- yet. */
748 DECL_EXTERNAL (decl) = 1;
749 DECL_NOT_REALLY_EXTERN (decl) = 1;
751 /* Mark the VAR_DECL node representing the vtable itself as a
752 "gratuitous" one, thereby forcing dwarfout.c to ignore it. It
753 is rather important that such things be ignored because any
754 effort to actually generate DWARF for them will run into
755 trouble when/if we encounter code like:
757 #pragma interface
758 struct S { virtual void member (); };
760 because the artificial declaration of the vtable itself (as
761 manufactured by the g++ front end) will say that the vtable is
762 a static member of `S' but only *after* the debug output for
763 the definition of `S' has already been output. This causes
764 grief because the DWARF entry for the definition of the vtable
765 will try to refer back to an earlier *declaration* of the
766 vtable as a static member of `S' and there won't be one. We
767 might be able to arrange to have the "vtable static member"
768 attached to the member list for `S' before the debug info for
769 `S' get written (which would solve the problem) but that would
770 require more intrusive changes to the g++ front end. */
771 DECL_IGNORED_P (decl) = 1;
773 return decl;
776 /* Get the VAR_DECL of the vtable for TYPE. TYPE need not be polymorphic,
777 or even complete. If this does not exist, create it. If COMPLETE is
778 nonzero, then complete the definition of it -- that will render it
779 impossible to actually build the vtable, but is useful to get at those
780 which are known to exist in the runtime. */
782 tree
783 get_vtable_decl (tree type, int complete)
785 tree decl;
787 if (CLASSTYPE_VTABLES (type))
788 return CLASSTYPE_VTABLES (type);
790 decl = build_vtable (type, get_vtable_name (type), vtbl_type_node);
791 CLASSTYPE_VTABLES (type) = decl;
793 if (complete)
795 DECL_EXTERNAL (decl) = 1;
796 cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0);
799 return decl;
802 /* Build the primary virtual function table for TYPE. If BINFO is
803 non-NULL, build the vtable starting with the initial approximation
804 that it is the same as the one which is the head of the association
805 list. Returns a nonzero value if a new vtable is actually
806 created. */
808 static int
809 build_primary_vtable (tree binfo, tree type)
811 tree decl;
812 tree virtuals;
814 decl = get_vtable_decl (type, /*complete=*/0);
816 if (binfo)
818 if (BINFO_NEW_VTABLE_MARKED (binfo))
819 /* We have already created a vtable for this base, so there's
820 no need to do it again. */
821 return 0;
823 virtuals = copy_list (BINFO_VIRTUALS (binfo));
824 TREE_TYPE (decl) = TREE_TYPE (get_vtbl_decl_for_binfo (binfo));
825 DECL_SIZE (decl) = TYPE_SIZE (TREE_TYPE (decl));
826 DECL_SIZE_UNIT (decl) = TYPE_SIZE_UNIT (TREE_TYPE (decl));
828 else
830 gcc_assert (TREE_TYPE (decl) == vtbl_type_node);
831 virtuals = NULL_TREE;
834 if (GATHER_STATISTICS)
836 n_vtables += 1;
837 n_vtable_elems += list_length (virtuals);
840 /* Initialize the association list for this type, based
841 on our first approximation. */
842 BINFO_VTABLE (TYPE_BINFO (type)) = decl;
843 BINFO_VIRTUALS (TYPE_BINFO (type)) = virtuals;
844 SET_BINFO_NEW_VTABLE_MARKED (TYPE_BINFO (type));
845 return 1;
848 /* Give BINFO a new virtual function table which is initialized
849 with a skeleton-copy of its original initialization. The only
850 entry that changes is the `delta' entry, so we can really
851 share a lot of structure.
853 FOR_TYPE is the most derived type which caused this table to
854 be needed.
856 Returns nonzero if we haven't met BINFO before.
858 The order in which vtables are built (by calling this function) for
859 an object must remain the same, otherwise a binary incompatibility
860 can result. */
862 static int
863 build_secondary_vtable (tree binfo)
865 if (BINFO_NEW_VTABLE_MARKED (binfo))
866 /* We already created a vtable for this base. There's no need to
867 do it again. */
868 return 0;
870 /* Remember that we've created a vtable for this BINFO, so that we
871 don't try to do so again. */
872 SET_BINFO_NEW_VTABLE_MARKED (binfo);
874 /* Make fresh virtual list, so we can smash it later. */
875 BINFO_VIRTUALS (binfo) = copy_list (BINFO_VIRTUALS (binfo));
877 /* Secondary vtables are laid out as part of the same structure as
878 the primary vtable. */
879 BINFO_VTABLE (binfo) = NULL_TREE;
880 return 1;
883 /* Create a new vtable for BINFO which is the hierarchy dominated by
884 T. Return nonzero if we actually created a new vtable. */
886 static int
887 make_new_vtable (tree t, tree binfo)
889 if (binfo == TYPE_BINFO (t))
890 /* In this case, it is *type*'s vtable we are modifying. We start
891 with the approximation that its vtable is that of the
892 immediate base class. */
893 return build_primary_vtable (binfo, t);
894 else
895 /* This is our very own copy of `basetype' to play with. Later,
896 we will fill in all the virtual functions that override the
897 virtual functions in these base classes which are not defined
898 by the current type. */
899 return build_secondary_vtable (binfo);
902 /* Make *VIRTUALS, an entry on the BINFO_VIRTUALS list for BINFO
903 (which is in the hierarchy dominated by T) list FNDECL as its
904 BV_FN. DELTA is the required constant adjustment from the `this'
905 pointer where the vtable entry appears to the `this' required when
906 the function is actually called. */
908 static void
909 modify_vtable_entry (tree t,
910 tree binfo,
911 tree fndecl,
912 tree delta,
913 tree *virtuals)
915 tree v;
917 v = *virtuals;
919 if (fndecl != BV_FN (v)
920 || !tree_int_cst_equal (delta, BV_DELTA (v)))
922 /* We need a new vtable for BINFO. */
923 if (make_new_vtable (t, binfo))
925 /* If we really did make a new vtable, we also made a copy
926 of the BINFO_VIRTUALS list. Now, we have to find the
927 corresponding entry in that list. */
928 *virtuals = BINFO_VIRTUALS (binfo);
929 while (BV_FN (*virtuals) != BV_FN (v))
930 *virtuals = TREE_CHAIN (*virtuals);
931 v = *virtuals;
934 BV_DELTA (v) = delta;
935 BV_VCALL_INDEX (v) = NULL_TREE;
936 BV_FN (v) = fndecl;
941 /* Add method METHOD to class TYPE. If USING_DECL is non-null, it is
942 the USING_DECL naming METHOD. Returns true if the method could be
943 added to the method vec. */
945 bool
946 add_method (tree type, tree method, tree using_decl)
948 unsigned slot;
949 tree overload;
950 bool template_conv_p = false;
951 bool conv_p;
952 vec<tree, va_gc> *method_vec;
953 bool complete_p;
954 bool insert_p = false;
955 tree current_fns;
956 tree fns;
958 if (method == error_mark_node)
959 return false;
961 complete_p = COMPLETE_TYPE_P (type);
962 conv_p = DECL_CONV_FN_P (method);
963 if (conv_p)
964 template_conv_p = (TREE_CODE (method) == TEMPLATE_DECL
965 && DECL_TEMPLATE_CONV_FN_P (method));
967 method_vec = CLASSTYPE_METHOD_VEC (type);
968 if (!method_vec)
970 /* Make a new method vector. We start with 8 entries. We must
971 allocate at least two (for constructors and destructors), and
972 we're going to end up with an assignment operator at some
973 point as well. */
974 vec_alloc (method_vec, 8);
975 /* Create slots for constructors and destructors. */
976 method_vec->quick_push (NULL_TREE);
977 method_vec->quick_push (NULL_TREE);
978 CLASSTYPE_METHOD_VEC (type) = method_vec;
981 /* Maintain TYPE_HAS_USER_CONSTRUCTOR, etc. */
982 grok_special_member_properties (method);
984 /* Constructors and destructors go in special slots. */
985 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (method))
986 slot = CLASSTYPE_CONSTRUCTOR_SLOT;
987 else if (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (method))
989 slot = CLASSTYPE_DESTRUCTOR_SLOT;
991 if (TYPE_FOR_JAVA (type))
993 if (!DECL_ARTIFICIAL (method))
994 error ("Java class %qT cannot have a destructor", type);
995 else if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
996 error ("Java class %qT cannot have an implicit non-trivial "
997 "destructor",
998 type);
1001 else
1003 tree m;
1005 insert_p = true;
1006 /* See if we already have an entry with this name. */
1007 for (slot = CLASSTYPE_FIRST_CONVERSION_SLOT;
1008 vec_safe_iterate (method_vec, slot, &m);
1009 ++slot)
1011 m = OVL_CURRENT (m);
1012 if (template_conv_p)
1014 if (TREE_CODE (m) == TEMPLATE_DECL
1015 && DECL_TEMPLATE_CONV_FN_P (m))
1016 insert_p = false;
1017 break;
1019 if (conv_p && !DECL_CONV_FN_P (m))
1020 break;
1021 if (DECL_NAME (m) == DECL_NAME (method))
1023 insert_p = false;
1024 break;
1026 if (complete_p
1027 && !DECL_CONV_FN_P (m)
1028 && DECL_NAME (m) > DECL_NAME (method))
1029 break;
1032 current_fns = insert_p ? NULL_TREE : (*method_vec)[slot];
1034 /* Check to see if we've already got this method. */
1035 for (fns = current_fns; fns; fns = OVL_NEXT (fns))
1037 tree fn = OVL_CURRENT (fns);
1038 tree fn_type;
1039 tree method_type;
1040 tree parms1;
1041 tree parms2;
1043 if (TREE_CODE (fn) != TREE_CODE (method))
1044 continue;
1046 /* [over.load] Member function declarations with the
1047 same name and the same parameter types cannot be
1048 overloaded if any of them is a static member
1049 function declaration.
1051 [namespace.udecl] When a using-declaration brings names
1052 from a base class into a derived class scope, member
1053 functions in the derived class override and/or hide member
1054 functions with the same name and parameter types in a base
1055 class (rather than conflicting). */
1056 fn_type = TREE_TYPE (fn);
1057 method_type = TREE_TYPE (method);
1058 parms1 = TYPE_ARG_TYPES (fn_type);
1059 parms2 = TYPE_ARG_TYPES (method_type);
1061 /* Compare the quals on the 'this' parm. Don't compare
1062 the whole types, as used functions are treated as
1063 coming from the using class in overload resolution. */
1064 if (! DECL_STATIC_FUNCTION_P (fn)
1065 && ! DECL_STATIC_FUNCTION_P (method)
1066 && TREE_TYPE (TREE_VALUE (parms1)) != error_mark_node
1067 && TREE_TYPE (TREE_VALUE (parms2)) != error_mark_node
1068 && (cp_type_quals (TREE_TYPE (TREE_VALUE (parms1)))
1069 != cp_type_quals (TREE_TYPE (TREE_VALUE (parms2)))))
1070 continue;
1072 /* For templates, the return type and template parameters
1073 must be identical. */
1074 if (TREE_CODE (fn) == TEMPLATE_DECL
1075 && (!same_type_p (TREE_TYPE (fn_type),
1076 TREE_TYPE (method_type))
1077 || !comp_template_parms (DECL_TEMPLATE_PARMS (fn),
1078 DECL_TEMPLATE_PARMS (method))))
1079 continue;
1081 if (! DECL_STATIC_FUNCTION_P (fn))
1082 parms1 = TREE_CHAIN (parms1);
1083 if (! DECL_STATIC_FUNCTION_P (method))
1084 parms2 = TREE_CHAIN (parms2);
1086 if (compparms (parms1, parms2)
1087 && (!DECL_CONV_FN_P (fn)
1088 || same_type_p (TREE_TYPE (fn_type),
1089 TREE_TYPE (method_type))))
1091 /* For function versions, their parms and types match
1092 but they are not duplicates. Record function versions
1093 as and when they are found. extern "C" functions are
1094 not treated as versions. */
1095 if (TREE_CODE (fn) == FUNCTION_DECL
1096 && TREE_CODE (method) == FUNCTION_DECL
1097 && !DECL_EXTERN_C_P (fn)
1098 && !DECL_EXTERN_C_P (method)
1099 && targetm.target_option.function_versions (fn, method))
1101 /* Mark functions as versions if necessary. Modify the mangled
1102 decl name if necessary. */
1103 if (!DECL_FUNCTION_VERSIONED (fn))
1105 DECL_FUNCTION_VERSIONED (fn) = 1;
1106 if (DECL_ASSEMBLER_NAME_SET_P (fn))
1107 mangle_decl (fn);
1109 if (!DECL_FUNCTION_VERSIONED (method))
1111 DECL_FUNCTION_VERSIONED (method) = 1;
1112 if (DECL_ASSEMBLER_NAME_SET_P (method))
1113 mangle_decl (method);
1115 record_function_versions (fn, method);
1116 continue;
1118 if (DECL_INHERITED_CTOR_BASE (method))
1120 if (DECL_INHERITED_CTOR_BASE (fn))
1122 error_at (DECL_SOURCE_LOCATION (method),
1123 "%q#D inherited from %qT", method,
1124 DECL_INHERITED_CTOR_BASE (method));
1125 error_at (DECL_SOURCE_LOCATION (fn),
1126 "conflicts with version inherited from %qT",
1127 DECL_INHERITED_CTOR_BASE (fn));
1129 /* Otherwise defer to the other function. */
1130 return false;
1132 if (using_decl)
1134 if (DECL_CONTEXT (fn) == type)
1135 /* Defer to the local function. */
1136 return false;
1138 else
1140 error ("%q+#D cannot be overloaded", method);
1141 error ("with %q+#D", fn);
1144 /* We don't call duplicate_decls here to merge the
1145 declarations because that will confuse things if the
1146 methods have inline definitions. In particular, we
1147 will crash while processing the definitions. */
1148 return false;
1152 /* A class should never have more than one destructor. */
1153 if (current_fns && DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (method))
1154 return false;
1156 /* Add the new binding. */
1157 if (using_decl)
1159 overload = ovl_cons (method, current_fns);
1160 OVL_USED (overload) = true;
1162 else
1163 overload = build_overload (method, current_fns);
1165 if (conv_p)
1166 TYPE_HAS_CONVERSION (type) = 1;
1167 else if (slot >= CLASSTYPE_FIRST_CONVERSION_SLOT && !complete_p)
1168 push_class_level_binding (DECL_NAME (method), overload);
1170 if (insert_p)
1172 bool reallocated;
1174 /* We only expect to add few methods in the COMPLETE_P case, so
1175 just make room for one more method in that case. */
1176 if (complete_p)
1177 reallocated = vec_safe_reserve_exact (method_vec, 1);
1178 else
1179 reallocated = vec_safe_reserve (method_vec, 1);
1180 if (reallocated)
1181 CLASSTYPE_METHOD_VEC (type) = method_vec;
1182 if (slot == method_vec->length ())
1183 method_vec->quick_push (overload);
1184 else
1185 method_vec->quick_insert (slot, overload);
1187 else
1188 /* Replace the current slot. */
1189 (*method_vec)[slot] = overload;
1190 return true;
1193 /* Subroutines of finish_struct. */
1195 /* Change the access of FDECL to ACCESS in T. Return 1 if change was
1196 legit, otherwise return 0. */
1198 static int
1199 alter_access (tree t, tree fdecl, tree access)
1201 tree elem;
1203 if (!DECL_LANG_SPECIFIC (fdecl))
1204 retrofit_lang_decl (fdecl);
1206 gcc_assert (!DECL_DISCRIMINATOR_P (fdecl));
1208 elem = purpose_member (t, DECL_ACCESS (fdecl));
1209 if (elem)
1211 if (TREE_VALUE (elem) != access)
1213 if (TREE_CODE (TREE_TYPE (fdecl)) == FUNCTION_DECL)
1214 error ("conflicting access specifications for method"
1215 " %q+D, ignored", TREE_TYPE (fdecl));
1216 else
1217 error ("conflicting access specifications for field %qE, ignored",
1218 DECL_NAME (fdecl));
1220 else
1222 /* They're changing the access to the same thing they changed
1223 it to before. That's OK. */
1227 else
1229 perform_or_defer_access_check (TYPE_BINFO (t), fdecl, fdecl,
1230 tf_warning_or_error);
1231 DECL_ACCESS (fdecl) = tree_cons (t, access, DECL_ACCESS (fdecl));
1232 return 1;
1234 return 0;
1237 /* Process the USING_DECL, which is a member of T. */
1239 static void
1240 handle_using_decl (tree using_decl, tree t)
1242 tree decl = USING_DECL_DECLS (using_decl);
1243 tree name = DECL_NAME (using_decl);
1244 tree access
1245 = TREE_PRIVATE (using_decl) ? access_private_node
1246 : TREE_PROTECTED (using_decl) ? access_protected_node
1247 : access_public_node;
1248 tree flist = NULL_TREE;
1249 tree old_value;
1251 gcc_assert (!processing_template_decl && decl);
1253 old_value = lookup_member (t, name, /*protect=*/0, /*want_type=*/false,
1254 tf_warning_or_error);
1255 if (old_value)
1257 if (is_overloaded_fn (old_value))
1258 old_value = OVL_CURRENT (old_value);
1260 if (DECL_P (old_value) && DECL_CONTEXT (old_value) == t)
1261 /* OK */;
1262 else
1263 old_value = NULL_TREE;
1266 cp_emit_debug_info_for_using (decl, USING_DECL_SCOPE (using_decl));
1268 if (is_overloaded_fn (decl))
1269 flist = decl;
1271 if (! old_value)
1273 else if (is_overloaded_fn (old_value))
1275 if (flist)
1276 /* It's OK to use functions from a base when there are functions with
1277 the same name already present in the current class. */;
1278 else
1280 error ("%q+D invalid in %q#T", using_decl, t);
1281 error (" because of local method %q+#D with same name",
1282 OVL_CURRENT (old_value));
1283 return;
1286 else if (!DECL_ARTIFICIAL (old_value))
1288 error ("%q+D invalid in %q#T", using_decl, t);
1289 error (" because of local member %q+#D with same name", old_value);
1290 return;
1293 /* Make type T see field decl FDECL with access ACCESS. */
1294 if (flist)
1295 for (; flist; flist = OVL_NEXT (flist))
1297 add_method (t, OVL_CURRENT (flist), using_decl);
1298 alter_access (t, OVL_CURRENT (flist), access);
1300 else
1301 alter_access (t, decl, access);
1304 /* walk_tree callback for check_abi_tags: if the type at *TP involves any
1305 types with abi tags, add the corresponding identifiers to the VEC in
1306 *DATA and set IDENTIFIER_MARKED. */
1308 struct abi_tag_data
1310 tree t;
1311 tree subob;
1314 static tree
1315 find_abi_tags_r (tree *tp, int */*walk_subtrees*/, void *data)
1317 if (!TAGGED_TYPE_P (*tp))
1318 return NULL_TREE;
1320 if (tree attributes = lookup_attribute ("abi_tag", TYPE_ATTRIBUTES (*tp)))
1322 struct abi_tag_data *p = static_cast<struct abi_tag_data*>(data);
1323 for (tree list = TREE_VALUE (attributes); list;
1324 list = TREE_CHAIN (list))
1326 tree tag = TREE_VALUE (list);
1327 tree id = get_identifier (TREE_STRING_POINTER (tag));
1328 if (!IDENTIFIER_MARKED (id))
1330 if (TYPE_P (p->subob))
1332 warning (OPT_Wabi_tag, "%qT does not have the %E abi tag "
1333 "that base %qT has", p->t, tag, p->subob);
1334 inform (location_of (p->subob), "%qT declared here",
1335 p->subob);
1337 else
1339 warning (OPT_Wabi_tag, "%qT does not have the %E abi tag "
1340 "that %qT (used in the type of %qD) has",
1341 p->t, tag, *tp, p->subob);
1342 inform (location_of (p->subob), "%qD declared here",
1343 p->subob);
1344 inform (location_of (*tp), "%qT declared here", *tp);
1349 return NULL_TREE;
1352 /* Check that class T has all the abi tags that subobject SUBOB has, or
1353 warn if not. */
1355 static void
1356 check_abi_tags (tree t, tree subob)
1358 tree attributes = lookup_attribute ("abi_tag", TYPE_ATTRIBUTES (t));
1359 if (attributes)
1361 for (tree list = TREE_VALUE (attributes); list;
1362 list = TREE_CHAIN (list))
1364 tree tag = TREE_VALUE (list);
1365 tree id = get_identifier (TREE_STRING_POINTER (tag));
1366 IDENTIFIER_MARKED (id) = true;
1370 tree subtype = TYPE_P (subob) ? subob : TREE_TYPE (subob);
1371 struct abi_tag_data data = { t, subob };
1373 cp_walk_tree_without_duplicates (&subtype, find_abi_tags_r, &data);
1375 if (attributes)
1377 for (tree list = TREE_VALUE (attributes); list;
1378 list = TREE_CHAIN (list))
1380 tree tag = TREE_VALUE (list);
1381 tree id = get_identifier (TREE_STRING_POINTER (tag));
1382 IDENTIFIER_MARKED (id) = false;
1387 /* Run through the base classes of T, updating CANT_HAVE_CONST_CTOR_P,
1388 and NO_CONST_ASN_REF_P. Also set flag bits in T based on
1389 properties of the bases. */
1391 static void
1392 check_bases (tree t,
1393 int* cant_have_const_ctor_p,
1394 int* no_const_asn_ref_p)
1396 int i;
1397 bool seen_non_virtual_nearly_empty_base_p = 0;
1398 int seen_tm_mask = 0;
1399 tree base_binfo;
1400 tree binfo;
1401 tree field = NULL_TREE;
1403 if (!CLASSTYPE_NON_STD_LAYOUT (t))
1404 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
1405 if (TREE_CODE (field) == FIELD_DECL)
1406 break;
1408 for (binfo = TYPE_BINFO (t), i = 0;
1409 BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
1411 tree basetype = TREE_TYPE (base_binfo);
1413 gcc_assert (COMPLETE_TYPE_P (basetype));
1415 if (CLASSTYPE_FINAL (basetype))
1416 error ("cannot derive from %<final%> base %qT in derived type %qT",
1417 basetype, t);
1419 /* If any base class is non-literal, so is the derived class. */
1420 if (!CLASSTYPE_LITERAL_P (basetype))
1421 CLASSTYPE_LITERAL_P (t) = false;
1423 /* Effective C++ rule 14. We only need to check TYPE_POLYMORPHIC_P
1424 here because the case of virtual functions but non-virtual
1425 dtor is handled in finish_struct_1. */
1426 if (!TYPE_POLYMORPHIC_P (basetype))
1427 warning (OPT_Weffc__,
1428 "base class %q#T has a non-virtual destructor", basetype);
1430 /* If the base class doesn't have copy constructors or
1431 assignment operators that take const references, then the
1432 derived class cannot have such a member automatically
1433 generated. */
1434 if (TYPE_HAS_COPY_CTOR (basetype)
1435 && ! TYPE_HAS_CONST_COPY_CTOR (basetype))
1436 *cant_have_const_ctor_p = 1;
1437 if (TYPE_HAS_COPY_ASSIGN (basetype)
1438 && !TYPE_HAS_CONST_COPY_ASSIGN (basetype))
1439 *no_const_asn_ref_p = 1;
1441 if (BINFO_VIRTUAL_P (base_binfo))
1442 /* A virtual base does not effect nearly emptiness. */
1444 else if (CLASSTYPE_NEARLY_EMPTY_P (basetype))
1446 if (seen_non_virtual_nearly_empty_base_p)
1447 /* And if there is more than one nearly empty base, then the
1448 derived class is not nearly empty either. */
1449 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
1450 else
1451 /* Remember we've seen one. */
1452 seen_non_virtual_nearly_empty_base_p = 1;
1454 else if (!is_empty_class (basetype))
1455 /* If the base class is not empty or nearly empty, then this
1456 class cannot be nearly empty. */
1457 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
1459 /* A lot of properties from the bases also apply to the derived
1460 class. */
1461 TYPE_NEEDS_CONSTRUCTING (t) |= TYPE_NEEDS_CONSTRUCTING (basetype);
1462 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
1463 |= TYPE_HAS_NONTRIVIAL_DESTRUCTOR (basetype);
1464 TYPE_HAS_COMPLEX_COPY_ASSIGN (t)
1465 |= (TYPE_HAS_COMPLEX_COPY_ASSIGN (basetype)
1466 || !TYPE_HAS_COPY_ASSIGN (basetype));
1467 TYPE_HAS_COMPLEX_COPY_CTOR (t) |= (TYPE_HAS_COMPLEX_COPY_CTOR (basetype)
1468 || !TYPE_HAS_COPY_CTOR (basetype));
1469 TYPE_HAS_COMPLEX_MOVE_ASSIGN (t)
1470 |= TYPE_HAS_COMPLEX_MOVE_ASSIGN (basetype);
1471 TYPE_HAS_COMPLEX_MOVE_CTOR (t) |= TYPE_HAS_COMPLEX_MOVE_CTOR (basetype);
1472 TYPE_POLYMORPHIC_P (t) |= TYPE_POLYMORPHIC_P (basetype);
1473 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t)
1474 |= CLASSTYPE_CONTAINS_EMPTY_CLASS_P (basetype);
1475 TYPE_HAS_COMPLEX_DFLT (t) |= (!TYPE_HAS_DEFAULT_CONSTRUCTOR (basetype)
1476 || TYPE_HAS_COMPLEX_DFLT (basetype));
1478 /* A standard-layout class is a class that:
1480 * has no non-standard-layout base classes, */
1481 CLASSTYPE_NON_STD_LAYOUT (t) |= CLASSTYPE_NON_STD_LAYOUT (basetype);
1482 if (!CLASSTYPE_NON_STD_LAYOUT (t))
1484 tree basefield;
1485 /* ...has no base classes of the same type as the first non-static
1486 data member... */
1487 if (field && DECL_CONTEXT (field) == t
1488 && (same_type_ignoring_top_level_qualifiers_p
1489 (TREE_TYPE (field), basetype)))
1490 CLASSTYPE_NON_STD_LAYOUT (t) = 1;
1491 else
1492 /* ...either has no non-static data members in the most-derived
1493 class and at most one base class with non-static data
1494 members, or has no base classes with non-static data
1495 members */
1496 for (basefield = TYPE_FIELDS (basetype); basefield;
1497 basefield = DECL_CHAIN (basefield))
1498 if (TREE_CODE (basefield) == FIELD_DECL)
1500 if (field)
1501 CLASSTYPE_NON_STD_LAYOUT (t) = 1;
1502 else
1503 field = basefield;
1504 break;
1508 /* Don't bother collecting tm attributes if transactional memory
1509 support is not enabled. */
1510 if (flag_tm)
1512 tree tm_attr = find_tm_attribute (TYPE_ATTRIBUTES (basetype));
1513 if (tm_attr)
1514 seen_tm_mask |= tm_attr_to_mask (tm_attr);
1517 check_abi_tags (t, basetype);
1520 /* If one of the base classes had TM attributes, and the current class
1521 doesn't define its own, then the current class inherits one. */
1522 if (seen_tm_mask && !find_tm_attribute (TYPE_ATTRIBUTES (t)))
1524 tree tm_attr = tm_mask_to_attr (seen_tm_mask & -seen_tm_mask);
1525 TYPE_ATTRIBUTES (t) = tree_cons (tm_attr, NULL, TYPE_ATTRIBUTES (t));
1529 /* Determine all the primary bases within T. Sets BINFO_PRIMARY_BASE_P for
1530 those that are primaries. Sets BINFO_LOST_PRIMARY_P for those
1531 that have had a nearly-empty virtual primary base stolen by some
1532 other base in the hierarchy. Determines CLASSTYPE_PRIMARY_BASE for
1533 T. */
1535 static void
1536 determine_primary_bases (tree t)
1538 unsigned i;
1539 tree primary = NULL_TREE;
1540 tree type_binfo = TYPE_BINFO (t);
1541 tree base_binfo;
1543 /* Determine the primary bases of our bases. */
1544 for (base_binfo = TREE_CHAIN (type_binfo); base_binfo;
1545 base_binfo = TREE_CHAIN (base_binfo))
1547 tree primary = CLASSTYPE_PRIMARY_BINFO (BINFO_TYPE (base_binfo));
1549 /* See if we're the non-virtual primary of our inheritance
1550 chain. */
1551 if (!BINFO_VIRTUAL_P (base_binfo))
1553 tree parent = BINFO_INHERITANCE_CHAIN (base_binfo);
1554 tree parent_primary = CLASSTYPE_PRIMARY_BINFO (BINFO_TYPE (parent));
1556 if (parent_primary
1557 && SAME_BINFO_TYPE_P (BINFO_TYPE (base_binfo),
1558 BINFO_TYPE (parent_primary)))
1559 /* We are the primary binfo. */
1560 BINFO_PRIMARY_P (base_binfo) = 1;
1562 /* Determine if we have a virtual primary base, and mark it so.
1564 if (primary && BINFO_VIRTUAL_P (primary))
1566 tree this_primary = copied_binfo (primary, base_binfo);
1568 if (BINFO_PRIMARY_P (this_primary))
1569 /* Someone already claimed this base. */
1570 BINFO_LOST_PRIMARY_P (base_binfo) = 1;
1571 else
1573 tree delta;
1575 BINFO_PRIMARY_P (this_primary) = 1;
1576 BINFO_INHERITANCE_CHAIN (this_primary) = base_binfo;
1578 /* A virtual binfo might have been copied from within
1579 another hierarchy. As we're about to use it as a
1580 primary base, make sure the offsets match. */
1581 delta = size_diffop_loc (input_location,
1582 convert (ssizetype,
1583 BINFO_OFFSET (base_binfo)),
1584 convert (ssizetype,
1585 BINFO_OFFSET (this_primary)));
1587 propagate_binfo_offsets (this_primary, delta);
1592 /* First look for a dynamic direct non-virtual base. */
1593 for (i = 0; BINFO_BASE_ITERATE (type_binfo, i, base_binfo); i++)
1595 tree basetype = BINFO_TYPE (base_binfo);
1597 if (TYPE_CONTAINS_VPTR_P (basetype) && !BINFO_VIRTUAL_P (base_binfo))
1599 primary = base_binfo;
1600 goto found;
1604 /* A "nearly-empty" virtual base class can be the primary base
1605 class, if no non-virtual polymorphic base can be found. Look for
1606 a nearly-empty virtual dynamic base that is not already a primary
1607 base of something in the hierarchy. If there is no such base,
1608 just pick the first nearly-empty virtual base. */
1610 for (base_binfo = TREE_CHAIN (type_binfo); base_binfo;
1611 base_binfo = TREE_CHAIN (base_binfo))
1612 if (BINFO_VIRTUAL_P (base_binfo)
1613 && CLASSTYPE_NEARLY_EMPTY_P (BINFO_TYPE (base_binfo)))
1615 if (!BINFO_PRIMARY_P (base_binfo))
1617 /* Found one that is not primary. */
1618 primary = base_binfo;
1619 goto found;
1621 else if (!primary)
1622 /* Remember the first candidate. */
1623 primary = base_binfo;
1626 found:
1627 /* If we've got a primary base, use it. */
1628 if (primary)
1630 tree basetype = BINFO_TYPE (primary);
1632 CLASSTYPE_PRIMARY_BINFO (t) = primary;
1633 if (BINFO_PRIMARY_P (primary))
1634 /* We are stealing a primary base. */
1635 BINFO_LOST_PRIMARY_P (BINFO_INHERITANCE_CHAIN (primary)) = 1;
1636 BINFO_PRIMARY_P (primary) = 1;
1637 if (BINFO_VIRTUAL_P (primary))
1639 tree delta;
1641 BINFO_INHERITANCE_CHAIN (primary) = type_binfo;
1642 /* A virtual binfo might have been copied from within
1643 another hierarchy. As we're about to use it as a primary
1644 base, make sure the offsets match. */
1645 delta = size_diffop_loc (input_location, ssize_int (0),
1646 convert (ssizetype, BINFO_OFFSET (primary)));
1648 propagate_binfo_offsets (primary, delta);
1651 primary = TYPE_BINFO (basetype);
1653 TYPE_VFIELD (t) = TYPE_VFIELD (basetype);
1654 BINFO_VTABLE (type_binfo) = BINFO_VTABLE (primary);
1655 BINFO_VIRTUALS (type_binfo) = BINFO_VIRTUALS (primary);
1659 /* Update the variant types of T. */
1661 void
1662 fixup_type_variants (tree t)
1664 tree variants;
1666 if (!t)
1667 return;
1669 for (variants = TYPE_NEXT_VARIANT (t);
1670 variants;
1671 variants = TYPE_NEXT_VARIANT (variants))
1673 /* These fields are in the _TYPE part of the node, not in
1674 the TYPE_LANG_SPECIFIC component, so they are not shared. */
1675 TYPE_HAS_USER_CONSTRUCTOR (variants) = TYPE_HAS_USER_CONSTRUCTOR (t);
1676 TYPE_NEEDS_CONSTRUCTING (variants) = TYPE_NEEDS_CONSTRUCTING (t);
1677 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (variants)
1678 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t);
1680 TYPE_POLYMORPHIC_P (variants) = TYPE_POLYMORPHIC_P (t);
1682 TYPE_BINFO (variants) = TYPE_BINFO (t);
1684 /* Copy whatever these are holding today. */
1685 TYPE_VFIELD (variants) = TYPE_VFIELD (t);
1686 TYPE_METHODS (variants) = TYPE_METHODS (t);
1687 TYPE_FIELDS (variants) = TYPE_FIELDS (t);
1691 /* Early variant fixups: we apply attributes at the beginning of the class
1692 definition, and we need to fix up any variants that have already been
1693 made via elaborated-type-specifier so that check_qualified_type works. */
1695 void
1696 fixup_attribute_variants (tree t)
1698 tree variants;
1700 if (!t)
1701 return;
1703 for (variants = TYPE_NEXT_VARIANT (t);
1704 variants;
1705 variants = TYPE_NEXT_VARIANT (variants))
1707 /* These are the two fields that check_qualified_type looks at and
1708 are affected by attributes. */
1709 TYPE_ATTRIBUTES (variants) = TYPE_ATTRIBUTES (t);
1710 TYPE_ALIGN (variants) = TYPE_ALIGN (t);
1714 /* Set memoizing fields and bits of T (and its variants) for later
1715 use. */
1717 static void
1718 finish_struct_bits (tree t)
1720 /* Fix up variants (if any). */
1721 fixup_type_variants (t);
1723 if (BINFO_N_BASE_BINFOS (TYPE_BINFO (t)) && TYPE_POLYMORPHIC_P (t))
1724 /* For a class w/o baseclasses, 'finish_struct' has set
1725 CLASSTYPE_PURE_VIRTUALS correctly (by definition).
1726 Similarly for a class whose base classes do not have vtables.
1727 When neither of these is true, we might have removed abstract
1728 virtuals (by providing a definition), added some (by declaring
1729 new ones), or redeclared ones from a base class. We need to
1730 recalculate what's really an abstract virtual at this point (by
1731 looking in the vtables). */
1732 get_pure_virtuals (t);
1734 /* If this type has a copy constructor or a destructor, force its
1735 mode to be BLKmode, and force its TREE_ADDRESSABLE bit to be
1736 nonzero. This will cause it to be passed by invisible reference
1737 and prevent it from being returned in a register. */
1738 if (type_has_nontrivial_copy_init (t)
1739 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t))
1741 tree variants;
1742 DECL_MODE (TYPE_MAIN_DECL (t)) = BLKmode;
1743 for (variants = t; variants; variants = TYPE_NEXT_VARIANT (variants))
1745 SET_TYPE_MODE (variants, BLKmode);
1746 TREE_ADDRESSABLE (variants) = 1;
1751 /* Issue warnings about T having private constructors, but no friends,
1752 and so forth.
1754 HAS_NONPRIVATE_METHOD is nonzero if T has any non-private methods or
1755 static members. HAS_NONPRIVATE_STATIC_FN is nonzero if T has any
1756 non-private static member functions. */
1758 static void
1759 maybe_warn_about_overly_private_class (tree t)
1761 int has_member_fn = 0;
1762 int has_nonprivate_method = 0;
1763 tree fn;
1765 if (!warn_ctor_dtor_privacy
1766 /* If the class has friends, those entities might create and
1767 access instances, so we should not warn. */
1768 || (CLASSTYPE_FRIEND_CLASSES (t)
1769 || DECL_FRIENDLIST (TYPE_MAIN_DECL (t)))
1770 /* We will have warned when the template was declared; there's
1771 no need to warn on every instantiation. */
1772 || CLASSTYPE_TEMPLATE_INSTANTIATION (t))
1773 /* There's no reason to even consider warning about this
1774 class. */
1775 return;
1777 /* We only issue one warning, if more than one applies, because
1778 otherwise, on code like:
1780 class A {
1781 // Oops - forgot `public:'
1782 A();
1783 A(const A&);
1784 ~A();
1787 we warn several times about essentially the same problem. */
1789 /* Check to see if all (non-constructor, non-destructor) member
1790 functions are private. (Since there are no friends or
1791 non-private statics, we can't ever call any of the private member
1792 functions.) */
1793 for (fn = TYPE_METHODS (t); fn; fn = DECL_CHAIN (fn))
1794 /* We're not interested in compiler-generated methods; they don't
1795 provide any way to call private members. */
1796 if (!DECL_ARTIFICIAL (fn))
1798 if (!TREE_PRIVATE (fn))
1800 if (DECL_STATIC_FUNCTION_P (fn))
1801 /* A non-private static member function is just like a
1802 friend; it can create and invoke private member
1803 functions, and be accessed without a class
1804 instance. */
1805 return;
1807 has_nonprivate_method = 1;
1808 /* Keep searching for a static member function. */
1810 else if (!DECL_CONSTRUCTOR_P (fn) && !DECL_DESTRUCTOR_P (fn))
1811 has_member_fn = 1;
1814 if (!has_nonprivate_method && has_member_fn)
1816 /* There are no non-private methods, and there's at least one
1817 private member function that isn't a constructor or
1818 destructor. (If all the private members are
1819 constructors/destructors we want to use the code below that
1820 issues error messages specifically referring to
1821 constructors/destructors.) */
1822 unsigned i;
1823 tree binfo = TYPE_BINFO (t);
1825 for (i = 0; i != BINFO_N_BASE_BINFOS (binfo); i++)
1826 if (BINFO_BASE_ACCESS (binfo, i) != access_private_node)
1828 has_nonprivate_method = 1;
1829 break;
1831 if (!has_nonprivate_method)
1833 warning (OPT_Wctor_dtor_privacy,
1834 "all member functions in class %qT are private", t);
1835 return;
1839 /* Even if some of the member functions are non-private, the class
1840 won't be useful for much if all the constructors or destructors
1841 are private: such an object can never be created or destroyed. */
1842 fn = CLASSTYPE_DESTRUCTORS (t);
1843 if (fn && TREE_PRIVATE (fn))
1845 warning (OPT_Wctor_dtor_privacy,
1846 "%q#T only defines a private destructor and has no friends",
1848 return;
1851 /* Warn about classes that have private constructors and no friends. */
1852 if (TYPE_HAS_USER_CONSTRUCTOR (t)
1853 /* Implicitly generated constructors are always public. */
1854 && (!CLASSTYPE_LAZY_DEFAULT_CTOR (t)
1855 || !CLASSTYPE_LAZY_COPY_CTOR (t)))
1857 int nonprivate_ctor = 0;
1859 /* If a non-template class does not define a copy
1860 constructor, one is defined for it, enabling it to avoid
1861 this warning. For a template class, this does not
1862 happen, and so we would normally get a warning on:
1864 template <class T> class C { private: C(); };
1866 To avoid this asymmetry, we check TYPE_HAS_COPY_CTOR. All
1867 complete non-template or fully instantiated classes have this
1868 flag set. */
1869 if (!TYPE_HAS_COPY_CTOR (t))
1870 nonprivate_ctor = 1;
1871 else
1872 for (fn = CLASSTYPE_CONSTRUCTORS (t); fn; fn = OVL_NEXT (fn))
1874 tree ctor = OVL_CURRENT (fn);
1875 /* Ideally, we wouldn't count copy constructors (or, in
1876 fact, any constructor that takes an argument of the
1877 class type as a parameter) because such things cannot
1878 be used to construct an instance of the class unless
1879 you already have one. But, for now at least, we're
1880 more generous. */
1881 if (! TREE_PRIVATE (ctor))
1883 nonprivate_ctor = 1;
1884 break;
1888 if (nonprivate_ctor == 0)
1890 warning (OPT_Wctor_dtor_privacy,
1891 "%q#T only defines private constructors and has no friends",
1893 return;
1898 static struct {
1899 gt_pointer_operator new_value;
1900 void *cookie;
1901 } resort_data;
1903 /* Comparison function to compare two TYPE_METHOD_VEC entries by name. */
1905 static int
1906 method_name_cmp (const void* m1_p, const void* m2_p)
1908 const tree *const m1 = (const tree *) m1_p;
1909 const tree *const m2 = (const tree *) m2_p;
1911 if (*m1 == NULL_TREE && *m2 == NULL_TREE)
1912 return 0;
1913 if (*m1 == NULL_TREE)
1914 return -1;
1915 if (*m2 == NULL_TREE)
1916 return 1;
1917 if (DECL_NAME (OVL_CURRENT (*m1)) < DECL_NAME (OVL_CURRENT (*m2)))
1918 return -1;
1919 return 1;
1922 /* This routine compares two fields like method_name_cmp but using the
1923 pointer operator in resort_field_decl_data. */
1925 static int
1926 resort_method_name_cmp (const void* m1_p, const void* m2_p)
1928 const tree *const m1 = (const tree *) m1_p;
1929 const tree *const m2 = (const tree *) m2_p;
1930 if (*m1 == NULL_TREE && *m2 == NULL_TREE)
1931 return 0;
1932 if (*m1 == NULL_TREE)
1933 return -1;
1934 if (*m2 == NULL_TREE)
1935 return 1;
1937 tree d1 = DECL_NAME (OVL_CURRENT (*m1));
1938 tree d2 = DECL_NAME (OVL_CURRENT (*m2));
1939 resort_data.new_value (&d1, resort_data.cookie);
1940 resort_data.new_value (&d2, resort_data.cookie);
1941 if (d1 < d2)
1942 return -1;
1944 return 1;
1947 /* Resort TYPE_METHOD_VEC because pointers have been reordered. */
1949 void
1950 resort_type_method_vec (void* obj,
1951 void* /*orig_obj*/,
1952 gt_pointer_operator new_value,
1953 void* cookie)
1955 vec<tree, va_gc> *method_vec = (vec<tree, va_gc> *) obj;
1956 int len = vec_safe_length (method_vec);
1957 size_t slot;
1958 tree fn;
1960 /* The type conversion ops have to live at the front of the vec, so we
1961 can't sort them. */
1962 for (slot = CLASSTYPE_FIRST_CONVERSION_SLOT;
1963 vec_safe_iterate (method_vec, slot, &fn);
1964 ++slot)
1965 if (!DECL_CONV_FN_P (OVL_CURRENT (fn)))
1966 break;
1968 if (len - slot > 1)
1970 resort_data.new_value = new_value;
1971 resort_data.cookie = cookie;
1972 qsort (method_vec->address () + slot, len - slot, sizeof (tree),
1973 resort_method_name_cmp);
1977 /* Warn about duplicate methods in fn_fields.
1979 Sort methods that are not special (i.e., constructors, destructors,
1980 and type conversion operators) so that we can find them faster in
1981 search. */
1983 static void
1984 finish_struct_methods (tree t)
1986 tree fn_fields;
1987 vec<tree, va_gc> *method_vec;
1988 int slot, len;
1990 method_vec = CLASSTYPE_METHOD_VEC (t);
1991 if (!method_vec)
1992 return;
1994 len = method_vec->length ();
1996 /* Clear DECL_IN_AGGR_P for all functions. */
1997 for (fn_fields = TYPE_METHODS (t); fn_fields;
1998 fn_fields = DECL_CHAIN (fn_fields))
1999 DECL_IN_AGGR_P (fn_fields) = 0;
2001 /* Issue warnings about private constructors and such. If there are
2002 no methods, then some public defaults are generated. */
2003 maybe_warn_about_overly_private_class (t);
2005 /* The type conversion ops have to live at the front of the vec, so we
2006 can't sort them. */
2007 for (slot = CLASSTYPE_FIRST_CONVERSION_SLOT;
2008 method_vec->iterate (slot, &fn_fields);
2009 ++slot)
2010 if (!DECL_CONV_FN_P (OVL_CURRENT (fn_fields)))
2011 break;
2012 if (len - slot > 1)
2013 qsort (method_vec->address () + slot,
2014 len-slot, sizeof (tree), method_name_cmp);
2017 /* Make BINFO's vtable have N entries, including RTTI entries,
2018 vbase and vcall offsets, etc. Set its type and call the back end
2019 to lay it out. */
2021 static void
2022 layout_vtable_decl (tree binfo, int n)
2024 tree atype;
2025 tree vtable;
2027 atype = build_array_of_n_type (vtable_entry_type, n);
2028 layout_type (atype);
2030 /* We may have to grow the vtable. */
2031 vtable = get_vtbl_decl_for_binfo (binfo);
2032 if (!same_type_p (TREE_TYPE (vtable), atype))
2034 TREE_TYPE (vtable) = atype;
2035 DECL_SIZE (vtable) = DECL_SIZE_UNIT (vtable) = NULL_TREE;
2036 layout_decl (vtable, 0);
2040 /* True iff FNDECL and BASE_FNDECL (both non-static member functions)
2041 have the same signature. */
2044 same_signature_p (const_tree fndecl, const_tree base_fndecl)
2046 /* One destructor overrides another if they are the same kind of
2047 destructor. */
2048 if (DECL_DESTRUCTOR_P (base_fndecl) && DECL_DESTRUCTOR_P (fndecl)
2049 && special_function_p (base_fndecl) == special_function_p (fndecl))
2050 return 1;
2051 /* But a non-destructor never overrides a destructor, nor vice
2052 versa, nor do different kinds of destructors override
2053 one-another. For example, a complete object destructor does not
2054 override a deleting destructor. */
2055 if (DECL_DESTRUCTOR_P (base_fndecl) || DECL_DESTRUCTOR_P (fndecl))
2056 return 0;
2058 if (DECL_NAME (fndecl) == DECL_NAME (base_fndecl)
2059 || (DECL_CONV_FN_P (fndecl)
2060 && DECL_CONV_FN_P (base_fndecl)
2061 && same_type_p (DECL_CONV_FN_TYPE (fndecl),
2062 DECL_CONV_FN_TYPE (base_fndecl))))
2064 tree types, base_types;
2065 types = TYPE_ARG_TYPES (TREE_TYPE (fndecl));
2066 base_types = TYPE_ARG_TYPES (TREE_TYPE (base_fndecl));
2067 if ((cp_type_quals (TREE_TYPE (TREE_VALUE (base_types)))
2068 == cp_type_quals (TREE_TYPE (TREE_VALUE (types))))
2069 && compparms (TREE_CHAIN (base_types), TREE_CHAIN (types)))
2070 return 1;
2072 return 0;
2075 /* Returns TRUE if DERIVED is a binfo containing the binfo BASE as a
2076 subobject. */
2078 static bool
2079 base_derived_from (tree derived, tree base)
2081 tree probe;
2083 for (probe = base; probe; probe = BINFO_INHERITANCE_CHAIN (probe))
2085 if (probe == derived)
2086 return true;
2087 else if (BINFO_VIRTUAL_P (probe))
2088 /* If we meet a virtual base, we can't follow the inheritance
2089 any more. See if the complete type of DERIVED contains
2090 such a virtual base. */
2091 return (binfo_for_vbase (BINFO_TYPE (probe), BINFO_TYPE (derived))
2092 != NULL_TREE);
2094 return false;
2097 typedef struct find_final_overrider_data_s {
2098 /* The function for which we are trying to find a final overrider. */
2099 tree fn;
2100 /* The base class in which the function was declared. */
2101 tree declaring_base;
2102 /* The candidate overriders. */
2103 tree candidates;
2104 /* Path to most derived. */
2105 vec<tree> path;
2106 } find_final_overrider_data;
2108 /* Add the overrider along the current path to FFOD->CANDIDATES.
2109 Returns true if an overrider was found; false otherwise. */
2111 static bool
2112 dfs_find_final_overrider_1 (tree binfo,
2113 find_final_overrider_data *ffod,
2114 unsigned depth)
2116 tree method;
2118 /* If BINFO is not the most derived type, try a more derived class.
2119 A definition there will overrider a definition here. */
2120 if (depth)
2122 depth--;
2123 if (dfs_find_final_overrider_1
2124 (ffod->path[depth], ffod, depth))
2125 return true;
2128 method = look_for_overrides_here (BINFO_TYPE (binfo), ffod->fn);
2129 if (method)
2131 tree *candidate = &ffod->candidates;
2133 /* Remove any candidates overridden by this new function. */
2134 while (*candidate)
2136 /* If *CANDIDATE overrides METHOD, then METHOD
2137 cannot override anything else on the list. */
2138 if (base_derived_from (TREE_VALUE (*candidate), binfo))
2139 return true;
2140 /* If METHOD overrides *CANDIDATE, remove *CANDIDATE. */
2141 if (base_derived_from (binfo, TREE_VALUE (*candidate)))
2142 *candidate = TREE_CHAIN (*candidate);
2143 else
2144 candidate = &TREE_CHAIN (*candidate);
2147 /* Add the new function. */
2148 ffod->candidates = tree_cons (method, binfo, ffod->candidates);
2149 return true;
2152 return false;
2155 /* Called from find_final_overrider via dfs_walk. */
2157 static tree
2158 dfs_find_final_overrider_pre (tree binfo, void *data)
2160 find_final_overrider_data *ffod = (find_final_overrider_data *) data;
2162 if (binfo == ffod->declaring_base)
2163 dfs_find_final_overrider_1 (binfo, ffod, ffod->path.length ());
2164 ffod->path.safe_push (binfo);
2166 return NULL_TREE;
2169 static tree
2170 dfs_find_final_overrider_post (tree /*binfo*/, void *data)
2172 find_final_overrider_data *ffod = (find_final_overrider_data *) data;
2173 ffod->path.pop ();
2175 return NULL_TREE;
2178 /* Returns a TREE_LIST whose TREE_PURPOSE is the final overrider for
2179 FN and whose TREE_VALUE is the binfo for the base where the
2180 overriding occurs. BINFO (in the hierarchy dominated by the binfo
2181 DERIVED) is the base object in which FN is declared. */
2183 static tree
2184 find_final_overrider (tree derived, tree binfo, tree fn)
2186 find_final_overrider_data ffod;
2188 /* Getting this right is a little tricky. This is valid:
2190 struct S { virtual void f (); };
2191 struct T { virtual void f (); };
2192 struct U : public S, public T { };
2194 even though calling `f' in `U' is ambiguous. But,
2196 struct R { virtual void f(); };
2197 struct S : virtual public R { virtual void f (); };
2198 struct T : virtual public R { virtual void f (); };
2199 struct U : public S, public T { };
2201 is not -- there's no way to decide whether to put `S::f' or
2202 `T::f' in the vtable for `R'.
2204 The solution is to look at all paths to BINFO. If we find
2205 different overriders along any two, then there is a problem. */
2206 if (DECL_THUNK_P (fn))
2207 fn = THUNK_TARGET (fn);
2209 /* Determine the depth of the hierarchy. */
2210 ffod.fn = fn;
2211 ffod.declaring_base = binfo;
2212 ffod.candidates = NULL_TREE;
2213 ffod.path.create (30);
2215 dfs_walk_all (derived, dfs_find_final_overrider_pre,
2216 dfs_find_final_overrider_post, &ffod);
2218 ffod.path.release ();
2220 /* If there was no winner, issue an error message. */
2221 if (!ffod.candidates || TREE_CHAIN (ffod.candidates))
2222 return error_mark_node;
2224 return ffod.candidates;
2227 /* Return the index of the vcall offset for FN when TYPE is used as a
2228 virtual base. */
2230 static tree
2231 get_vcall_index (tree fn, tree type)
2233 vec<tree_pair_s, va_gc> *indices = CLASSTYPE_VCALL_INDICES (type);
2234 tree_pair_p p;
2235 unsigned ix;
2237 FOR_EACH_VEC_SAFE_ELT (indices, ix, p)
2238 if ((DECL_DESTRUCTOR_P (fn) && DECL_DESTRUCTOR_P (p->purpose))
2239 || same_signature_p (fn, p->purpose))
2240 return p->value;
2242 /* There should always be an appropriate index. */
2243 gcc_unreachable ();
2246 /* Update an entry in the vtable for BINFO, which is in the hierarchy
2247 dominated by T. FN is the old function; VIRTUALS points to the
2248 corresponding position in the new BINFO_VIRTUALS list. IX is the index
2249 of that entry in the list. */
2251 static void
2252 update_vtable_entry_for_fn (tree t, tree binfo, tree fn, tree* virtuals,
2253 unsigned ix)
2255 tree b;
2256 tree overrider;
2257 tree delta;
2258 tree virtual_base;
2259 tree first_defn;
2260 tree overrider_fn, overrider_target;
2261 tree target_fn = DECL_THUNK_P (fn) ? THUNK_TARGET (fn) : fn;
2262 tree over_return, base_return;
2263 bool lost = false;
2265 /* Find the nearest primary base (possibly binfo itself) which defines
2266 this function; this is the class the caller will convert to when
2267 calling FN through BINFO. */
2268 for (b = binfo; ; b = get_primary_binfo (b))
2270 gcc_assert (b);
2271 if (look_for_overrides_here (BINFO_TYPE (b), target_fn))
2272 break;
2274 /* The nearest definition is from a lost primary. */
2275 if (BINFO_LOST_PRIMARY_P (b))
2276 lost = true;
2278 first_defn = b;
2280 /* Find the final overrider. */
2281 overrider = find_final_overrider (TYPE_BINFO (t), b, target_fn);
2282 if (overrider == error_mark_node)
2284 error ("no unique final overrider for %qD in %qT", target_fn, t);
2285 return;
2287 overrider_target = overrider_fn = TREE_PURPOSE (overrider);
2289 /* Check for adjusting covariant return types. */
2290 over_return = TREE_TYPE (TREE_TYPE (overrider_target));
2291 base_return = TREE_TYPE (TREE_TYPE (target_fn));
2293 if (POINTER_TYPE_P (over_return)
2294 && TREE_CODE (over_return) == TREE_CODE (base_return)
2295 && CLASS_TYPE_P (TREE_TYPE (over_return))
2296 && CLASS_TYPE_P (TREE_TYPE (base_return))
2297 /* If the overrider is invalid, don't even try. */
2298 && !DECL_INVALID_OVERRIDER_P (overrider_target))
2300 /* If FN is a covariant thunk, we must figure out the adjustment
2301 to the final base FN was converting to. As OVERRIDER_TARGET might
2302 also be converting to the return type of FN, we have to
2303 combine the two conversions here. */
2304 tree fixed_offset, virtual_offset;
2306 over_return = TREE_TYPE (over_return);
2307 base_return = TREE_TYPE (base_return);
2309 if (DECL_THUNK_P (fn))
2311 gcc_assert (DECL_RESULT_THUNK_P (fn));
2312 fixed_offset = ssize_int (THUNK_FIXED_OFFSET (fn));
2313 virtual_offset = THUNK_VIRTUAL_OFFSET (fn);
2315 else
2316 fixed_offset = virtual_offset = NULL_TREE;
2318 if (virtual_offset)
2319 /* Find the equivalent binfo within the return type of the
2320 overriding function. We will want the vbase offset from
2321 there. */
2322 virtual_offset = binfo_for_vbase (BINFO_TYPE (virtual_offset),
2323 over_return);
2324 else if (!same_type_ignoring_top_level_qualifiers_p
2325 (over_return, base_return))
2327 /* There was no existing virtual thunk (which takes
2328 precedence). So find the binfo of the base function's
2329 return type within the overriding function's return type.
2330 We cannot call lookup base here, because we're inside a
2331 dfs_walk, and will therefore clobber the BINFO_MARKED
2332 flags. Fortunately we know the covariancy is valid (it
2333 has already been checked), so we can just iterate along
2334 the binfos, which have been chained in inheritance graph
2335 order. Of course it is lame that we have to repeat the
2336 search here anyway -- we should really be caching pieces
2337 of the vtable and avoiding this repeated work. */
2338 tree thunk_binfo, base_binfo;
2340 /* Find the base binfo within the overriding function's
2341 return type. We will always find a thunk_binfo, except
2342 when the covariancy is invalid (which we will have
2343 already diagnosed). */
2344 for (base_binfo = TYPE_BINFO (base_return),
2345 thunk_binfo = TYPE_BINFO (over_return);
2346 thunk_binfo;
2347 thunk_binfo = TREE_CHAIN (thunk_binfo))
2348 if (SAME_BINFO_TYPE_P (BINFO_TYPE (thunk_binfo),
2349 BINFO_TYPE (base_binfo)))
2350 break;
2352 /* See if virtual inheritance is involved. */
2353 for (virtual_offset = thunk_binfo;
2354 virtual_offset;
2355 virtual_offset = BINFO_INHERITANCE_CHAIN (virtual_offset))
2356 if (BINFO_VIRTUAL_P (virtual_offset))
2357 break;
2359 if (virtual_offset
2360 || (thunk_binfo && !BINFO_OFFSET_ZEROP (thunk_binfo)))
2362 tree offset = convert (ssizetype, BINFO_OFFSET (thunk_binfo));
2364 if (virtual_offset)
2366 /* We convert via virtual base. Adjust the fixed
2367 offset to be from there. */
2368 offset =
2369 size_diffop (offset,
2370 convert (ssizetype,
2371 BINFO_OFFSET (virtual_offset)));
2373 if (fixed_offset)
2374 /* There was an existing fixed offset, this must be
2375 from the base just converted to, and the base the
2376 FN was thunking to. */
2377 fixed_offset = size_binop (PLUS_EXPR, fixed_offset, offset);
2378 else
2379 fixed_offset = offset;
2383 if (fixed_offset || virtual_offset)
2384 /* Replace the overriding function with a covariant thunk. We
2385 will emit the overriding function in its own slot as
2386 well. */
2387 overrider_fn = make_thunk (overrider_target, /*this_adjusting=*/0,
2388 fixed_offset, virtual_offset);
2390 else
2391 gcc_assert (DECL_INVALID_OVERRIDER_P (overrider_target) ||
2392 !DECL_THUNK_P (fn));
2394 /* If we need a covariant thunk, then we may need to adjust first_defn.
2395 The ABI specifies that the thunks emitted with a function are
2396 determined by which bases the function overrides, so we need to be
2397 sure that we're using a thunk for some overridden base; even if we
2398 know that the necessary this adjustment is zero, there may not be an
2399 appropriate zero-this-adjusment thunk for us to use since thunks for
2400 overriding virtual bases always use the vcall offset.
2402 Furthermore, just choosing any base that overrides this function isn't
2403 quite right, as this slot won't be used for calls through a type that
2404 puts a covariant thunk here. Calling the function through such a type
2405 will use a different slot, and that slot is the one that determines
2406 the thunk emitted for that base.
2408 So, keep looking until we find the base that we're really overriding
2409 in this slot: the nearest primary base that doesn't use a covariant
2410 thunk in this slot. */
2411 if (overrider_target != overrider_fn)
2413 if (BINFO_TYPE (b) == DECL_CONTEXT (overrider_target))
2414 /* We already know that the overrider needs a covariant thunk. */
2415 b = get_primary_binfo (b);
2416 for (; ; b = get_primary_binfo (b))
2418 tree main_binfo = TYPE_BINFO (BINFO_TYPE (b));
2419 tree bv = chain_index (ix, BINFO_VIRTUALS (main_binfo));
2420 if (!DECL_THUNK_P (TREE_VALUE (bv)))
2421 break;
2422 if (BINFO_LOST_PRIMARY_P (b))
2423 lost = true;
2425 first_defn = b;
2428 /* Assume that we will produce a thunk that convert all the way to
2429 the final overrider, and not to an intermediate virtual base. */
2430 virtual_base = NULL_TREE;
2432 /* See if we can convert to an intermediate virtual base first, and then
2433 use the vcall offset located there to finish the conversion. */
2434 for (; b; b = BINFO_INHERITANCE_CHAIN (b))
2436 /* If we find the final overrider, then we can stop
2437 walking. */
2438 if (SAME_BINFO_TYPE_P (BINFO_TYPE (b),
2439 BINFO_TYPE (TREE_VALUE (overrider))))
2440 break;
2442 /* If we find a virtual base, and we haven't yet found the
2443 overrider, then there is a virtual base between the
2444 declaring base (first_defn) and the final overrider. */
2445 if (BINFO_VIRTUAL_P (b))
2447 virtual_base = b;
2448 break;
2452 /* Compute the constant adjustment to the `this' pointer. The
2453 `this' pointer, when this function is called, will point at BINFO
2454 (or one of its primary bases, which are at the same offset). */
2455 if (virtual_base)
2456 /* The `this' pointer needs to be adjusted from the declaration to
2457 the nearest virtual base. */
2458 delta = size_diffop_loc (input_location,
2459 convert (ssizetype, BINFO_OFFSET (virtual_base)),
2460 convert (ssizetype, BINFO_OFFSET (first_defn)));
2461 else if (lost)
2462 /* If the nearest definition is in a lost primary, we don't need an
2463 entry in our vtable. Except possibly in a constructor vtable,
2464 if we happen to get our primary back. In that case, the offset
2465 will be zero, as it will be a primary base. */
2466 delta = size_zero_node;
2467 else
2468 /* The `this' pointer needs to be adjusted from pointing to
2469 BINFO to pointing at the base where the final overrider
2470 appears. */
2471 delta = size_diffop_loc (input_location,
2472 convert (ssizetype,
2473 BINFO_OFFSET (TREE_VALUE (overrider))),
2474 convert (ssizetype, BINFO_OFFSET (binfo)));
2476 modify_vtable_entry (t, binfo, overrider_fn, delta, virtuals);
2478 if (virtual_base)
2479 BV_VCALL_INDEX (*virtuals)
2480 = get_vcall_index (overrider_target, BINFO_TYPE (virtual_base));
2481 else
2482 BV_VCALL_INDEX (*virtuals) = NULL_TREE;
2484 BV_LOST_PRIMARY (*virtuals) = lost;
2487 /* Called from modify_all_vtables via dfs_walk. */
2489 static tree
2490 dfs_modify_vtables (tree binfo, void* data)
2492 tree t = (tree) data;
2493 tree virtuals;
2494 tree old_virtuals;
2495 unsigned ix;
2497 if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
2498 /* A base without a vtable needs no modification, and its bases
2499 are uninteresting. */
2500 return dfs_skip_bases;
2502 if (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), t)
2503 && !CLASSTYPE_HAS_PRIMARY_BASE_P (t))
2504 /* Don't do the primary vtable, if it's new. */
2505 return NULL_TREE;
2507 if (BINFO_PRIMARY_P (binfo) && !BINFO_VIRTUAL_P (binfo))
2508 /* There's no need to modify the vtable for a non-virtual primary
2509 base; we're not going to use that vtable anyhow. We do still
2510 need to do this for virtual primary bases, as they could become
2511 non-primary in a construction vtable. */
2512 return NULL_TREE;
2514 make_new_vtable (t, binfo);
2516 /* Now, go through each of the virtual functions in the virtual
2517 function table for BINFO. Find the final overrider, and update
2518 the BINFO_VIRTUALS list appropriately. */
2519 for (ix = 0, virtuals = BINFO_VIRTUALS (binfo),
2520 old_virtuals = BINFO_VIRTUALS (TYPE_BINFO (BINFO_TYPE (binfo)));
2521 virtuals;
2522 ix++, virtuals = TREE_CHAIN (virtuals),
2523 old_virtuals = TREE_CHAIN (old_virtuals))
2524 update_vtable_entry_for_fn (t,
2525 binfo,
2526 BV_FN (old_virtuals),
2527 &virtuals, ix);
2529 return NULL_TREE;
2532 /* Update all of the primary and secondary vtables for T. Create new
2533 vtables as required, and initialize their RTTI information. Each
2534 of the functions in VIRTUALS is declared in T and may override a
2535 virtual function from a base class; find and modify the appropriate
2536 entries to point to the overriding functions. Returns a list, in
2537 declaration order, of the virtual functions that are declared in T,
2538 but do not appear in the primary base class vtable, and which
2539 should therefore be appended to the end of the vtable for T. */
2541 static tree
2542 modify_all_vtables (tree t, tree virtuals)
2544 tree binfo = TYPE_BINFO (t);
2545 tree *fnsp;
2547 /* Update all of the vtables. */
2548 dfs_walk_once (binfo, dfs_modify_vtables, NULL, t);
2550 /* Add virtual functions not already in our primary vtable. These
2551 will be both those introduced by this class, and those overridden
2552 from secondary bases. It does not include virtuals merely
2553 inherited from secondary bases. */
2554 for (fnsp = &virtuals; *fnsp; )
2556 tree fn = TREE_VALUE (*fnsp);
2558 if (!value_member (fn, BINFO_VIRTUALS (binfo))
2559 || DECL_VINDEX (fn) == error_mark_node)
2561 /* We don't need to adjust the `this' pointer when
2562 calling this function. */
2563 BV_DELTA (*fnsp) = integer_zero_node;
2564 BV_VCALL_INDEX (*fnsp) = NULL_TREE;
2566 /* This is a function not already in our vtable. Keep it. */
2567 fnsp = &TREE_CHAIN (*fnsp);
2569 else
2570 /* We've already got an entry for this function. Skip it. */
2571 *fnsp = TREE_CHAIN (*fnsp);
2574 return virtuals;
2577 /* Get the base virtual function declarations in T that have the
2578 indicated NAME. */
2580 static tree
2581 get_basefndecls (tree name, tree t)
2583 tree methods;
2584 tree base_fndecls = NULL_TREE;
2585 int n_baseclasses = BINFO_N_BASE_BINFOS (TYPE_BINFO (t));
2586 int i;
2588 /* Find virtual functions in T with the indicated NAME. */
2589 i = lookup_fnfields_1 (t, name);
2590 if (i != -1)
2591 for (methods = (*CLASSTYPE_METHOD_VEC (t))[i];
2592 methods;
2593 methods = OVL_NEXT (methods))
2595 tree method = OVL_CURRENT (methods);
2597 if (TREE_CODE (method) == FUNCTION_DECL
2598 && DECL_VINDEX (method))
2599 base_fndecls = tree_cons (NULL_TREE, method, base_fndecls);
2602 if (base_fndecls)
2603 return base_fndecls;
2605 for (i = 0; i < n_baseclasses; i++)
2607 tree basetype = BINFO_TYPE (BINFO_BASE_BINFO (TYPE_BINFO (t), i));
2608 base_fndecls = chainon (get_basefndecls (name, basetype),
2609 base_fndecls);
2612 return base_fndecls;
2615 /* If this declaration supersedes the declaration of
2616 a method declared virtual in the base class, then
2617 mark this field as being virtual as well. */
2619 void
2620 check_for_override (tree decl, tree ctype)
2622 bool overrides_found = false;
2623 if (TREE_CODE (decl) == TEMPLATE_DECL)
2624 /* In [temp.mem] we have:
2626 A specialization of a member function template does not
2627 override a virtual function from a base class. */
2628 return;
2629 if ((DECL_DESTRUCTOR_P (decl)
2630 || IDENTIFIER_VIRTUAL_P (DECL_NAME (decl))
2631 || DECL_CONV_FN_P (decl))
2632 && look_for_overrides (ctype, decl)
2633 && !DECL_STATIC_FUNCTION_P (decl))
2634 /* Set DECL_VINDEX to a value that is neither an INTEGER_CST nor
2635 the error_mark_node so that we know it is an overriding
2636 function. */
2638 DECL_VINDEX (decl) = decl;
2639 overrides_found = true;
2642 if (DECL_VIRTUAL_P (decl))
2644 if (!DECL_VINDEX (decl))
2645 DECL_VINDEX (decl) = error_mark_node;
2646 IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)) = 1;
2647 if (DECL_DESTRUCTOR_P (decl))
2648 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (ctype) = true;
2650 else if (DECL_FINAL_P (decl))
2651 error ("%q+#D marked final, but is not virtual", decl);
2652 if (DECL_OVERRIDE_P (decl) && !overrides_found)
2653 error ("%q+#D marked override, but does not override", decl);
2656 /* Warn about hidden virtual functions that are not overridden in t.
2657 We know that constructors and destructors don't apply. */
2659 static void
2660 warn_hidden (tree t)
2662 vec<tree, va_gc> *method_vec = CLASSTYPE_METHOD_VEC (t);
2663 tree fns;
2664 size_t i;
2666 /* We go through each separately named virtual function. */
2667 for (i = CLASSTYPE_FIRST_CONVERSION_SLOT;
2668 vec_safe_iterate (method_vec, i, &fns);
2669 ++i)
2671 tree fn;
2672 tree name;
2673 tree fndecl;
2674 tree base_fndecls;
2675 tree base_binfo;
2676 tree binfo;
2677 int j;
2679 /* All functions in this slot in the CLASSTYPE_METHOD_VEC will
2680 have the same name. Figure out what name that is. */
2681 name = DECL_NAME (OVL_CURRENT (fns));
2682 /* There are no possibly hidden functions yet. */
2683 base_fndecls = NULL_TREE;
2684 /* Iterate through all of the base classes looking for possibly
2685 hidden functions. */
2686 for (binfo = TYPE_BINFO (t), j = 0;
2687 BINFO_BASE_ITERATE (binfo, j, base_binfo); j++)
2689 tree basetype = BINFO_TYPE (base_binfo);
2690 base_fndecls = chainon (get_basefndecls (name, basetype),
2691 base_fndecls);
2694 /* If there are no functions to hide, continue. */
2695 if (!base_fndecls)
2696 continue;
2698 /* Remove any overridden functions. */
2699 for (fn = fns; fn; fn = OVL_NEXT (fn))
2701 fndecl = OVL_CURRENT (fn);
2702 if (DECL_VINDEX (fndecl))
2704 tree *prev = &base_fndecls;
2706 while (*prev)
2707 /* If the method from the base class has the same
2708 signature as the method from the derived class, it
2709 has been overridden. */
2710 if (same_signature_p (fndecl, TREE_VALUE (*prev)))
2711 *prev = TREE_CHAIN (*prev);
2712 else
2713 prev = &TREE_CHAIN (*prev);
2717 /* Now give a warning for all base functions without overriders,
2718 as they are hidden. */
2719 while (base_fndecls)
2721 /* Here we know it is a hider, and no overrider exists. */
2722 warning (OPT_Woverloaded_virtual, "%q+D was hidden", TREE_VALUE (base_fndecls));
2723 warning (OPT_Woverloaded_virtual, " by %q+D", fns);
2724 base_fndecls = TREE_CHAIN (base_fndecls);
2729 /* Check for things that are invalid. There are probably plenty of other
2730 things we should check for also. */
2732 static void
2733 finish_struct_anon (tree t)
2735 tree field;
2737 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
2739 if (TREE_STATIC (field))
2740 continue;
2741 if (TREE_CODE (field) != FIELD_DECL)
2742 continue;
2744 if (DECL_NAME (field) == NULL_TREE
2745 && ANON_AGGR_TYPE_P (TREE_TYPE (field)))
2747 bool is_union = TREE_CODE (TREE_TYPE (field)) == UNION_TYPE;
2748 tree elt = TYPE_FIELDS (TREE_TYPE (field));
2749 for (; elt; elt = DECL_CHAIN (elt))
2751 /* We're generally only interested in entities the user
2752 declared, but we also find nested classes by noticing
2753 the TYPE_DECL that we create implicitly. You're
2754 allowed to put one anonymous union inside another,
2755 though, so we explicitly tolerate that. We use
2756 TYPE_ANONYMOUS_P rather than ANON_AGGR_TYPE_P so that
2757 we also allow unnamed types used for defining fields. */
2758 if (DECL_ARTIFICIAL (elt)
2759 && (!DECL_IMPLICIT_TYPEDEF_P (elt)
2760 || TYPE_ANONYMOUS_P (TREE_TYPE (elt))))
2761 continue;
2763 if (TREE_CODE (elt) != FIELD_DECL)
2765 if (is_union)
2766 permerror (input_location, "%q+#D invalid; an anonymous union can "
2767 "only have non-static data members", elt);
2768 else
2769 permerror (input_location, "%q+#D invalid; an anonymous struct can "
2770 "only have non-static data members", elt);
2771 continue;
2774 if (TREE_PRIVATE (elt))
2776 if (is_union)
2777 permerror (input_location, "private member %q+#D in anonymous union", elt);
2778 else
2779 permerror (input_location, "private member %q+#D in anonymous struct", elt);
2781 else if (TREE_PROTECTED (elt))
2783 if (is_union)
2784 permerror (input_location, "protected member %q+#D in anonymous union", elt);
2785 else
2786 permerror (input_location, "protected member %q+#D in anonymous struct", elt);
2789 TREE_PRIVATE (elt) = TREE_PRIVATE (field);
2790 TREE_PROTECTED (elt) = TREE_PROTECTED (field);
2796 /* Add T to CLASSTYPE_DECL_LIST of current_class_type which
2797 will be used later during class template instantiation.
2798 When FRIEND_P is zero, T can be a static member data (VAR_DECL),
2799 a non-static member data (FIELD_DECL), a member function
2800 (FUNCTION_DECL), a nested type (RECORD_TYPE, ENUM_TYPE),
2801 a typedef (TYPE_DECL) or a member class template (TEMPLATE_DECL)
2802 When FRIEND_P is nonzero, T is either a friend class
2803 (RECORD_TYPE, TEMPLATE_DECL) or a friend function
2804 (FUNCTION_DECL, TEMPLATE_DECL). */
2806 void
2807 maybe_add_class_template_decl_list (tree type, tree t, int friend_p)
2809 /* Save some memory by not creating TREE_LIST if TYPE is not template. */
2810 if (CLASSTYPE_TEMPLATE_INFO (type))
2811 CLASSTYPE_DECL_LIST (type)
2812 = tree_cons (friend_p ? NULL_TREE : type,
2813 t, CLASSTYPE_DECL_LIST (type));
2816 /* This function is called from declare_virt_assop_and_dtor via
2817 dfs_walk_all.
2819 DATA is a type that direcly or indirectly inherits the base
2820 represented by BINFO. If BINFO contains a virtual assignment [copy
2821 assignment or move assigment] operator or a virtual constructor,
2822 declare that function in DATA if it hasn't been already declared. */
2824 static tree
2825 dfs_declare_virt_assop_and_dtor (tree binfo, void *data)
2827 tree bv, fn, t = (tree)data;
2828 tree opname = ansi_assopname (NOP_EXPR);
2830 gcc_assert (t && CLASS_TYPE_P (t));
2831 gcc_assert (binfo && TREE_CODE (binfo) == TREE_BINFO);
2833 if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
2834 /* A base without a vtable needs no modification, and its bases
2835 are uninteresting. */
2836 return dfs_skip_bases;
2838 if (BINFO_PRIMARY_P (binfo))
2839 /* If this is a primary base, then we have already looked at the
2840 virtual functions of its vtable. */
2841 return NULL_TREE;
2843 for (bv = BINFO_VIRTUALS (binfo); bv; bv = TREE_CHAIN (bv))
2845 fn = BV_FN (bv);
2847 if (DECL_NAME (fn) == opname)
2849 if (CLASSTYPE_LAZY_COPY_ASSIGN (t))
2850 lazily_declare_fn (sfk_copy_assignment, t);
2851 if (CLASSTYPE_LAZY_MOVE_ASSIGN (t))
2852 lazily_declare_fn (sfk_move_assignment, t);
2854 else if (DECL_DESTRUCTOR_P (fn)
2855 && CLASSTYPE_LAZY_DESTRUCTOR (t))
2856 lazily_declare_fn (sfk_destructor, t);
2859 return NULL_TREE;
2862 /* If the class type T has a direct or indirect base that contains a
2863 virtual assignment operator or a virtual destructor, declare that
2864 function in T if it hasn't been already declared. */
2866 static void
2867 declare_virt_assop_and_dtor (tree t)
2869 if (!(TYPE_POLYMORPHIC_P (t)
2870 && (CLASSTYPE_LAZY_COPY_ASSIGN (t)
2871 || CLASSTYPE_LAZY_MOVE_ASSIGN (t)
2872 || CLASSTYPE_LAZY_DESTRUCTOR (t))))
2873 return;
2875 dfs_walk_all (TYPE_BINFO (t),
2876 dfs_declare_virt_assop_and_dtor,
2877 NULL, t);
2880 /* Declare the inheriting constructor for class T inherited from base
2881 constructor CTOR with the parameter array PARMS of size NPARMS. */
2883 static void
2884 one_inheriting_sig (tree t, tree ctor, tree *parms, int nparms)
2886 /* We don't declare an inheriting ctor that would be a default,
2887 copy or move ctor for derived or base. */
2888 if (nparms == 0)
2889 return;
2890 if (nparms == 1
2891 && TREE_CODE (parms[0]) == REFERENCE_TYPE)
2893 tree parm = TYPE_MAIN_VARIANT (TREE_TYPE (parms[0]));
2894 if (parm == t || parm == DECL_CONTEXT (ctor))
2895 return;
2898 tree parmlist = void_list_node;
2899 for (int i = nparms - 1; i >= 0; i--)
2900 parmlist = tree_cons (NULL_TREE, parms[i], parmlist);
2901 tree fn = implicitly_declare_fn (sfk_inheriting_constructor,
2902 t, false, ctor, parmlist);
2903 if (add_method (t, fn, NULL_TREE))
2905 DECL_CHAIN (fn) = TYPE_METHODS (t);
2906 TYPE_METHODS (t) = fn;
2910 /* Declare all the inheriting constructors for class T inherited from base
2911 constructor CTOR. */
2913 static void
2914 one_inherited_ctor (tree ctor, tree t)
2916 tree parms = FUNCTION_FIRST_USER_PARMTYPE (ctor);
2918 tree *new_parms = XALLOCAVEC (tree, list_length (parms));
2919 int i = 0;
2920 for (; parms && parms != void_list_node; parms = TREE_CHAIN (parms))
2922 if (TREE_PURPOSE (parms))
2923 one_inheriting_sig (t, ctor, new_parms, i);
2924 new_parms[i++] = TREE_VALUE (parms);
2926 one_inheriting_sig (t, ctor, new_parms, i);
2927 if (parms == NULL_TREE)
2929 warning (OPT_Winherited_variadic_ctor,
2930 "the ellipsis in %qD is not inherited", ctor);
2931 inform (DECL_SOURCE_LOCATION (ctor), "%qD declared here", ctor);
2935 /* Create default constructors, assignment operators, and so forth for
2936 the type indicated by T, if they are needed. CANT_HAVE_CONST_CTOR,
2937 and CANT_HAVE_CONST_ASSIGNMENT are nonzero if, for whatever reason,
2938 the class cannot have a default constructor, copy constructor
2939 taking a const reference argument, or an assignment operator taking
2940 a const reference, respectively. */
2942 static void
2943 add_implicitly_declared_members (tree t, tree* access_decls,
2944 int cant_have_const_cctor,
2945 int cant_have_const_assignment)
2947 bool move_ok = false;
2949 if (cxx_dialect >= cxx0x && !CLASSTYPE_DESTRUCTORS (t)
2950 && !TYPE_HAS_COPY_CTOR (t) && !TYPE_HAS_COPY_ASSIGN (t)
2951 && !type_has_move_constructor (t) && !type_has_move_assign (t))
2952 move_ok = true;
2954 /* Destructor. */
2955 if (!CLASSTYPE_DESTRUCTORS (t))
2957 /* In general, we create destructors lazily. */
2958 CLASSTYPE_LAZY_DESTRUCTOR (t) = 1;
2960 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
2961 && TYPE_FOR_JAVA (t))
2962 /* But if this is a Java class, any non-trivial destructor is
2963 invalid, even if compiler-generated. Therefore, if the
2964 destructor is non-trivial we create it now. */
2965 lazily_declare_fn (sfk_destructor, t);
2968 /* [class.ctor]
2970 If there is no user-declared constructor for a class, a default
2971 constructor is implicitly declared. */
2972 if (! TYPE_HAS_USER_CONSTRUCTOR (t))
2974 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 1;
2975 CLASSTYPE_LAZY_DEFAULT_CTOR (t) = 1;
2976 if (cxx_dialect >= cxx0x)
2977 TYPE_HAS_CONSTEXPR_CTOR (t)
2978 /* This might force the declaration. */
2979 = type_has_constexpr_default_constructor (t);
2982 /* [class.ctor]
2984 If a class definition does not explicitly declare a copy
2985 constructor, one is declared implicitly. */
2986 if (! TYPE_HAS_COPY_CTOR (t) && ! TYPE_FOR_JAVA (t))
2988 TYPE_HAS_COPY_CTOR (t) = 1;
2989 TYPE_HAS_CONST_COPY_CTOR (t) = !cant_have_const_cctor;
2990 CLASSTYPE_LAZY_COPY_CTOR (t) = 1;
2991 if (move_ok)
2992 CLASSTYPE_LAZY_MOVE_CTOR (t) = 1;
2995 /* If there is no assignment operator, one will be created if and
2996 when it is needed. For now, just record whether or not the type
2997 of the parameter to the assignment operator will be a const or
2998 non-const reference. */
2999 if (!TYPE_HAS_COPY_ASSIGN (t) && !TYPE_FOR_JAVA (t))
3001 TYPE_HAS_COPY_ASSIGN (t) = 1;
3002 TYPE_HAS_CONST_COPY_ASSIGN (t) = !cant_have_const_assignment;
3003 CLASSTYPE_LAZY_COPY_ASSIGN (t) = 1;
3004 if (move_ok)
3005 CLASSTYPE_LAZY_MOVE_ASSIGN (t) = 1;
3008 /* We can't be lazy about declaring functions that might override
3009 a virtual function from a base class. */
3010 declare_virt_assop_and_dtor (t);
3012 while (*access_decls)
3014 tree using_decl = TREE_VALUE (*access_decls);
3015 tree decl = USING_DECL_DECLS (using_decl);
3016 if (DECL_SELF_REFERENCE_P (decl))
3018 /* declare, then remove the decl */
3019 tree ctor_list = lookup_fnfields_slot (TREE_TYPE (decl),
3020 ctor_identifier);
3021 location_t loc = input_location;
3022 input_location = DECL_SOURCE_LOCATION (using_decl);
3023 if (ctor_list)
3024 for (; ctor_list; ctor_list = OVL_NEXT (ctor_list))
3025 one_inherited_ctor (OVL_CURRENT (ctor_list), t);
3026 *access_decls = TREE_CHAIN (*access_decls);
3027 input_location = loc;
3029 else
3030 access_decls = &TREE_CHAIN (*access_decls);
3034 /* Subroutine of insert_into_classtype_sorted_fields. Recursively
3035 count the number of fields in TYPE, including anonymous union
3036 members. */
3038 static int
3039 count_fields (tree fields)
3041 tree x;
3042 int n_fields = 0;
3043 for (x = fields; x; x = DECL_CHAIN (x))
3045 if (TREE_CODE (x) == FIELD_DECL && ANON_AGGR_TYPE_P (TREE_TYPE (x)))
3046 n_fields += count_fields (TYPE_FIELDS (TREE_TYPE (x)));
3047 else
3048 n_fields += 1;
3050 return n_fields;
3053 /* Subroutine of insert_into_classtype_sorted_fields. Recursively add
3054 all the fields in the TREE_LIST FIELDS to the SORTED_FIELDS_TYPE
3055 elts, starting at offset IDX. */
3057 static int
3058 add_fields_to_record_type (tree fields, struct sorted_fields_type *field_vec, int idx)
3060 tree x;
3061 for (x = fields; x; x = DECL_CHAIN (x))
3063 if (TREE_CODE (x) == FIELD_DECL && ANON_AGGR_TYPE_P (TREE_TYPE (x)))
3064 idx = add_fields_to_record_type (TYPE_FIELDS (TREE_TYPE (x)), field_vec, idx);
3065 else
3066 field_vec->elts[idx++] = x;
3068 return idx;
3071 /* Add all of the enum values of ENUMTYPE, to the FIELD_VEC elts,
3072 starting at offset IDX. */
3074 static int
3075 add_enum_fields_to_record_type (tree enumtype,
3076 struct sorted_fields_type *field_vec,
3077 int idx)
3079 tree values;
3080 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
3081 field_vec->elts[idx++] = TREE_VALUE (values);
3082 return idx;
3085 /* FIELD is a bit-field. We are finishing the processing for its
3086 enclosing type. Issue any appropriate messages and set appropriate
3087 flags. Returns false if an error has been diagnosed. */
3089 static bool
3090 check_bitfield_decl (tree field)
3092 tree type = TREE_TYPE (field);
3093 tree w;
3095 /* Extract the declared width of the bitfield, which has been
3096 temporarily stashed in DECL_INITIAL. */
3097 w = DECL_INITIAL (field);
3098 gcc_assert (w != NULL_TREE);
3099 /* Remove the bit-field width indicator so that the rest of the
3100 compiler does not treat that value as an initializer. */
3101 DECL_INITIAL (field) = NULL_TREE;
3103 /* Detect invalid bit-field type. */
3104 if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
3106 error ("bit-field %q+#D with non-integral type", field);
3107 w = error_mark_node;
3109 else
3111 location_t loc = input_location;
3112 /* Avoid the non_lvalue wrapper added by fold for PLUS_EXPRs. */
3113 STRIP_NOPS (w);
3115 /* detect invalid field size. */
3116 input_location = DECL_SOURCE_LOCATION (field);
3117 w = cxx_constant_value (w);
3118 input_location = loc;
3120 if (TREE_CODE (w) != INTEGER_CST)
3122 error ("bit-field %q+D width not an integer constant", field);
3123 w = error_mark_node;
3125 else if (tree_int_cst_sgn (w) < 0)
3127 error ("negative width in bit-field %q+D", field);
3128 w = error_mark_node;
3130 else if (integer_zerop (w) && DECL_NAME (field) != 0)
3132 error ("zero width for bit-field %q+D", field);
3133 w = error_mark_node;
3135 else if (compare_tree_int (w, TYPE_PRECISION (type)) > 0
3136 && TREE_CODE (type) != ENUMERAL_TYPE
3137 && TREE_CODE (type) != BOOLEAN_TYPE)
3138 warning (0, "width of %q+D exceeds its type", field);
3139 else if (TREE_CODE (type) == ENUMERAL_TYPE
3140 && (0 > (compare_tree_int
3141 (w, TYPE_PRECISION (ENUM_UNDERLYING_TYPE (type))))))
3142 warning (0, "%q+D is too small to hold all values of %q#T", field, type);
3145 if (w != error_mark_node)
3147 DECL_SIZE (field) = convert (bitsizetype, w);
3148 DECL_BIT_FIELD (field) = 1;
3149 return true;
3151 else
3153 /* Non-bit-fields are aligned for their type. */
3154 DECL_BIT_FIELD (field) = 0;
3155 CLEAR_DECL_C_BIT_FIELD (field);
3156 return false;
3160 /* FIELD is a non bit-field. We are finishing the processing for its
3161 enclosing type T. Issue any appropriate messages and set appropriate
3162 flags. */
3164 static void
3165 check_field_decl (tree field,
3166 tree t,
3167 int* cant_have_const_ctor,
3168 int* no_const_asn_ref,
3169 int* any_default_members)
3171 tree type = strip_array_types (TREE_TYPE (field));
3173 /* In C++98 an anonymous union cannot contain any fields which would change
3174 the settings of CANT_HAVE_CONST_CTOR and friends. */
3175 if (ANON_UNION_TYPE_P (type) && cxx_dialect < cxx0x)
3177 /* And, we don't set TYPE_HAS_CONST_COPY_CTOR, etc., for anonymous
3178 structs. So, we recurse through their fields here. */
3179 else if (ANON_AGGR_TYPE_P (type))
3181 tree fields;
3183 for (fields = TYPE_FIELDS (type); fields; fields = DECL_CHAIN (fields))
3184 if (TREE_CODE (fields) == FIELD_DECL && !DECL_C_BIT_FIELD (field))
3185 check_field_decl (fields, t, cant_have_const_ctor,
3186 no_const_asn_ref, any_default_members);
3188 /* Check members with class type for constructors, destructors,
3189 etc. */
3190 else if (CLASS_TYPE_P (type))
3192 /* Never let anything with uninheritable virtuals
3193 make it through without complaint. */
3194 abstract_virtuals_error (field, type);
3196 if (TREE_CODE (t) == UNION_TYPE && cxx_dialect < cxx0x)
3198 static bool warned;
3199 int oldcount = errorcount;
3200 if (TYPE_NEEDS_CONSTRUCTING (type))
3201 error ("member %q+#D with constructor not allowed in union",
3202 field);
3203 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3204 error ("member %q+#D with destructor not allowed in union", field);
3205 if (TYPE_HAS_COMPLEX_COPY_ASSIGN (type))
3206 error ("member %q+#D with copy assignment operator not allowed in union",
3207 field);
3208 if (!warned && errorcount > oldcount)
3210 inform (DECL_SOURCE_LOCATION (field), "unrestricted unions "
3211 "only available with -std=c++11 or -std=gnu++11");
3212 warned = true;
3215 else
3217 TYPE_NEEDS_CONSTRUCTING (t) |= TYPE_NEEDS_CONSTRUCTING (type);
3218 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
3219 |= TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type);
3220 TYPE_HAS_COMPLEX_COPY_ASSIGN (t)
3221 |= (TYPE_HAS_COMPLEX_COPY_ASSIGN (type)
3222 || !TYPE_HAS_COPY_ASSIGN (type));
3223 TYPE_HAS_COMPLEX_COPY_CTOR (t) |= (TYPE_HAS_COMPLEX_COPY_CTOR (type)
3224 || !TYPE_HAS_COPY_CTOR (type));
3225 TYPE_HAS_COMPLEX_MOVE_ASSIGN (t) |= TYPE_HAS_COMPLEX_MOVE_ASSIGN (type);
3226 TYPE_HAS_COMPLEX_MOVE_CTOR (t) |= TYPE_HAS_COMPLEX_MOVE_CTOR (type);
3227 TYPE_HAS_COMPLEX_DFLT (t) |= (!TYPE_HAS_DEFAULT_CONSTRUCTOR (type)
3228 || TYPE_HAS_COMPLEX_DFLT (type));
3231 if (TYPE_HAS_COPY_CTOR (type)
3232 && !TYPE_HAS_CONST_COPY_CTOR (type))
3233 *cant_have_const_ctor = 1;
3235 if (TYPE_HAS_COPY_ASSIGN (type)
3236 && !TYPE_HAS_CONST_COPY_ASSIGN (type))
3237 *no_const_asn_ref = 1;
3240 check_abi_tags (t, field);
3242 if (DECL_INITIAL (field) != NULL_TREE)
3244 /* `build_class_init_list' does not recognize
3245 non-FIELD_DECLs. */
3246 if (TREE_CODE (t) == UNION_TYPE && *any_default_members != 0)
3247 error ("multiple fields in union %qT initialized", t);
3248 *any_default_members = 1;
3252 /* Check the data members (both static and non-static), class-scoped
3253 typedefs, etc., appearing in the declaration of T. Issue
3254 appropriate diagnostics. Sets ACCESS_DECLS to a list (in
3255 declaration order) of access declarations; each TREE_VALUE in this
3256 list is a USING_DECL.
3258 In addition, set the following flags:
3260 EMPTY_P
3261 The class is empty, i.e., contains no non-static data members.
3263 CANT_HAVE_CONST_CTOR_P
3264 This class cannot have an implicitly generated copy constructor
3265 taking a const reference.
3267 CANT_HAVE_CONST_ASN_REF
3268 This class cannot have an implicitly generated assignment
3269 operator taking a const reference.
3271 All of these flags should be initialized before calling this
3272 function.
3274 Returns a pointer to the end of the TYPE_FIELDs chain; additional
3275 fields can be added by adding to this chain. */
3277 static void
3278 check_field_decls (tree t, tree *access_decls,
3279 int *cant_have_const_ctor_p,
3280 int *no_const_asn_ref_p)
3282 tree *field;
3283 tree *next;
3284 bool has_pointers;
3285 int any_default_members;
3286 int cant_pack = 0;
3287 int field_access = -1;
3289 /* Assume there are no access declarations. */
3290 *access_decls = NULL_TREE;
3291 /* Assume this class has no pointer members. */
3292 has_pointers = false;
3293 /* Assume none of the members of this class have default
3294 initializations. */
3295 any_default_members = 0;
3297 for (field = &TYPE_FIELDS (t); *field; field = next)
3299 tree x = *field;
3300 tree type = TREE_TYPE (x);
3301 int this_field_access;
3303 next = &DECL_CHAIN (x);
3305 if (TREE_CODE (x) == USING_DECL)
3307 /* Save the access declarations for our caller. */
3308 *access_decls = tree_cons (NULL_TREE, x, *access_decls);
3309 continue;
3312 if (TREE_CODE (x) == TYPE_DECL
3313 || TREE_CODE (x) == TEMPLATE_DECL)
3314 continue;
3316 /* If we've gotten this far, it's a data member, possibly static,
3317 or an enumerator. */
3318 if (TREE_CODE (x) != CONST_DECL)
3319 DECL_CONTEXT (x) = t;
3321 /* When this goes into scope, it will be a non-local reference. */
3322 DECL_NONLOCAL (x) = 1;
3324 if (TREE_CODE (t) == UNION_TYPE)
3326 /* [class.union]
3328 If a union contains a static data member, or a member of
3329 reference type, the program is ill-formed. */
3330 if (TREE_CODE (x) == VAR_DECL)
3332 error ("%q+D may not be static because it is a member of a union", x);
3333 continue;
3335 if (TREE_CODE (type) == REFERENCE_TYPE)
3337 error ("%q+D may not have reference type %qT because"
3338 " it is a member of a union",
3339 x, type);
3340 continue;
3344 /* Perform error checking that did not get done in
3345 grokdeclarator. */
3346 if (TREE_CODE (type) == FUNCTION_TYPE)
3348 error ("field %q+D invalidly declared function type", x);
3349 type = build_pointer_type (type);
3350 TREE_TYPE (x) = type;
3352 else if (TREE_CODE (type) == METHOD_TYPE)
3354 error ("field %q+D invalidly declared method type", x);
3355 type = build_pointer_type (type);
3356 TREE_TYPE (x) = type;
3359 if (type == error_mark_node)
3360 continue;
3362 if (TREE_CODE (x) == CONST_DECL || TREE_CODE (x) == VAR_DECL)
3363 continue;
3365 /* Now it can only be a FIELD_DECL. */
3367 if (TREE_PRIVATE (x) || TREE_PROTECTED (x))
3368 CLASSTYPE_NON_AGGREGATE (t) = 1;
3370 /* If at least one non-static data member is non-literal, the whole
3371 class becomes non-literal. Note: if the type is incomplete we
3372 will complain later on. */
3373 if (COMPLETE_TYPE_P (type) && !literal_type_p (type))
3374 CLASSTYPE_LITERAL_P (t) = false;
3376 /* A standard-layout class is a class that:
3378 has the same access control (Clause 11) for all non-static data members,
3379 ... */
3380 this_field_access = TREE_PROTECTED (x) ? 1 : TREE_PRIVATE (x) ? 2 : 0;
3381 if (field_access == -1)
3382 field_access = this_field_access;
3383 else if (this_field_access != field_access)
3384 CLASSTYPE_NON_STD_LAYOUT (t) = 1;
3386 /* If this is of reference type, check if it needs an init. */
3387 if (TREE_CODE (type) == REFERENCE_TYPE)
3389 CLASSTYPE_NON_LAYOUT_POD_P (t) = 1;
3390 CLASSTYPE_NON_STD_LAYOUT (t) = 1;
3391 if (DECL_INITIAL (x) == NULL_TREE)
3392 SET_CLASSTYPE_REF_FIELDS_NEED_INIT (t, 1);
3394 /* ARM $12.6.2: [A member initializer list] (or, for an
3395 aggregate, initialization by a brace-enclosed list) is the
3396 only way to initialize nonstatic const and reference
3397 members. */
3398 TYPE_HAS_COMPLEX_COPY_ASSIGN (t) = 1;
3399 TYPE_HAS_COMPLEX_MOVE_ASSIGN (t) = 1;
3402 type = strip_array_types (type);
3404 if (TYPE_PACKED (t))
3406 if (!layout_pod_type_p (type) && !TYPE_PACKED (type))
3408 warning
3410 "ignoring packed attribute because of unpacked non-POD field %q+#D",
3412 cant_pack = 1;
3414 else if (DECL_C_BIT_FIELD (x)
3415 || TYPE_ALIGN (TREE_TYPE (x)) > BITS_PER_UNIT)
3416 DECL_PACKED (x) = 1;
3419 if (DECL_C_BIT_FIELD (x) && integer_zerop (DECL_INITIAL (x)))
3420 /* We don't treat zero-width bitfields as making a class
3421 non-empty. */
3423 else
3425 /* The class is non-empty. */
3426 CLASSTYPE_EMPTY_P (t) = 0;
3427 /* The class is not even nearly empty. */
3428 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
3429 /* If one of the data members contains an empty class,
3430 so does T. */
3431 if (CLASS_TYPE_P (type)
3432 && CLASSTYPE_CONTAINS_EMPTY_CLASS_P (type))
3433 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) = 1;
3436 /* This is used by -Weffc++ (see below). Warn only for pointers
3437 to members which might hold dynamic memory. So do not warn
3438 for pointers to functions or pointers to members. */
3439 if (TYPE_PTR_P (type)
3440 && !TYPE_PTRFN_P (type))
3441 has_pointers = true;
3443 if (CLASS_TYPE_P (type))
3445 if (CLASSTYPE_REF_FIELDS_NEED_INIT (type))
3446 SET_CLASSTYPE_REF_FIELDS_NEED_INIT (t, 1);
3447 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (type))
3448 SET_CLASSTYPE_READONLY_FIELDS_NEED_INIT (t, 1);
3451 if (DECL_MUTABLE_P (x) || TYPE_HAS_MUTABLE_P (type))
3452 CLASSTYPE_HAS_MUTABLE (t) = 1;
3454 if (! layout_pod_type_p (type))
3455 /* DR 148 now allows pointers to members (which are POD themselves),
3456 to be allowed in POD structs. */
3457 CLASSTYPE_NON_LAYOUT_POD_P (t) = 1;
3459 if (!std_layout_type_p (type))
3460 CLASSTYPE_NON_STD_LAYOUT (t) = 1;
3462 if (! zero_init_p (type))
3463 CLASSTYPE_NON_ZERO_INIT_P (t) = 1;
3465 /* We set DECL_C_BIT_FIELD in grokbitfield.
3466 If the type and width are valid, we'll also set DECL_BIT_FIELD. */
3467 if (! DECL_C_BIT_FIELD (x) || ! check_bitfield_decl (x))
3468 check_field_decl (x, t,
3469 cant_have_const_ctor_p,
3470 no_const_asn_ref_p,
3471 &any_default_members);
3473 /* Now that we've removed bit-field widths from DECL_INITIAL,
3474 anything left in DECL_INITIAL is an NSDMI that makes the class
3475 non-aggregate. */
3476 if (DECL_INITIAL (x))
3477 CLASSTYPE_NON_AGGREGATE (t) = true;
3479 /* If any field is const, the structure type is pseudo-const. */
3480 if (CP_TYPE_CONST_P (type))
3482 C_TYPE_FIELDS_READONLY (t) = 1;
3483 if (DECL_INITIAL (x) == NULL_TREE)
3484 SET_CLASSTYPE_READONLY_FIELDS_NEED_INIT (t, 1);
3486 /* ARM $12.6.2: [A member initializer list] (or, for an
3487 aggregate, initialization by a brace-enclosed list) is the
3488 only way to initialize nonstatic const and reference
3489 members. */
3490 TYPE_HAS_COMPLEX_COPY_ASSIGN (t) = 1;
3491 TYPE_HAS_COMPLEX_MOVE_ASSIGN (t) = 1;
3493 /* A field that is pseudo-const makes the structure likewise. */
3494 else if (CLASS_TYPE_P (type))
3496 C_TYPE_FIELDS_READONLY (t) |= C_TYPE_FIELDS_READONLY (type);
3497 SET_CLASSTYPE_READONLY_FIELDS_NEED_INIT (t,
3498 CLASSTYPE_READONLY_FIELDS_NEED_INIT (t)
3499 | CLASSTYPE_READONLY_FIELDS_NEED_INIT (type));
3502 /* Core issue 80: A nonstatic data member is required to have a
3503 different name from the class iff the class has a
3504 user-declared constructor. */
3505 if (constructor_name_p (DECL_NAME (x), t)
3506 && TYPE_HAS_USER_CONSTRUCTOR (t))
3507 permerror (input_location, "field %q+#D with same name as class", x);
3510 /* Effective C++ rule 11: if a class has dynamic memory held by pointers,
3511 it should also define a copy constructor and an assignment operator to
3512 implement the correct copy semantic (deep vs shallow, etc.). As it is
3513 not feasible to check whether the constructors do allocate dynamic memory
3514 and store it within members, we approximate the warning like this:
3516 -- Warn only if there are members which are pointers
3517 -- Warn only if there is a non-trivial constructor (otherwise,
3518 there cannot be memory allocated).
3519 -- Warn only if there is a non-trivial destructor. We assume that the
3520 user at least implemented the cleanup correctly, and a destructor
3521 is needed to free dynamic memory.
3523 This seems enough for practical purposes. */
3524 if (warn_ecpp
3525 && has_pointers
3526 && TYPE_HAS_USER_CONSTRUCTOR (t)
3527 && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
3528 && !(TYPE_HAS_COPY_CTOR (t) && TYPE_HAS_COPY_ASSIGN (t)))
3530 warning (OPT_Weffc__, "%q#T has pointer data members", t);
3532 if (! TYPE_HAS_COPY_CTOR (t))
3534 warning (OPT_Weffc__,
3535 " but does not override %<%T(const %T&)%>", t, t);
3536 if (!TYPE_HAS_COPY_ASSIGN (t))
3537 warning (OPT_Weffc__, " or %<operator=(const %T&)%>", t);
3539 else if (! TYPE_HAS_COPY_ASSIGN (t))
3540 warning (OPT_Weffc__,
3541 " but does not override %<operator=(const %T&)%>", t);
3544 /* Non-static data member initializers make the default constructor
3545 non-trivial. */
3546 if (any_default_members)
3548 TYPE_NEEDS_CONSTRUCTING (t) = true;
3549 TYPE_HAS_COMPLEX_DFLT (t) = true;
3552 /* If any of the fields couldn't be packed, unset TYPE_PACKED. */
3553 if (cant_pack)
3554 TYPE_PACKED (t) = 0;
3556 /* Check anonymous struct/anonymous union fields. */
3557 finish_struct_anon (t);
3559 /* We've built up the list of access declarations in reverse order.
3560 Fix that now. */
3561 *access_decls = nreverse (*access_decls);
3564 /* If TYPE is an empty class type, records its OFFSET in the table of
3565 OFFSETS. */
3567 static int
3568 record_subobject_offset (tree type, tree offset, splay_tree offsets)
3570 splay_tree_node n;
3572 if (!is_empty_class (type))
3573 return 0;
3575 /* Record the location of this empty object in OFFSETS. */
3576 n = splay_tree_lookup (offsets, (splay_tree_key) offset);
3577 if (!n)
3578 n = splay_tree_insert (offsets,
3579 (splay_tree_key) offset,
3580 (splay_tree_value) NULL_TREE);
3581 n->value = ((splay_tree_value)
3582 tree_cons (NULL_TREE,
3583 type,
3584 (tree) n->value));
3586 return 0;
3589 /* Returns nonzero if TYPE is an empty class type and there is
3590 already an entry in OFFSETS for the same TYPE as the same OFFSET. */
3592 static int
3593 check_subobject_offset (tree type, tree offset, splay_tree offsets)
3595 splay_tree_node n;
3596 tree t;
3598 if (!is_empty_class (type))
3599 return 0;
3601 /* Record the location of this empty object in OFFSETS. */
3602 n = splay_tree_lookup (offsets, (splay_tree_key) offset);
3603 if (!n)
3604 return 0;
3606 for (t = (tree) n->value; t; t = TREE_CHAIN (t))
3607 if (same_type_p (TREE_VALUE (t), type))
3608 return 1;
3610 return 0;
3613 /* Walk through all the subobjects of TYPE (located at OFFSET). Call
3614 F for every subobject, passing it the type, offset, and table of
3615 OFFSETS. If VBASES_P is one, then virtual non-primary bases should
3616 be traversed.
3618 If MAX_OFFSET is non-NULL, then subobjects with an offset greater
3619 than MAX_OFFSET will not be walked.
3621 If F returns a nonzero value, the traversal ceases, and that value
3622 is returned. Otherwise, returns zero. */
3624 static int
3625 walk_subobject_offsets (tree type,
3626 subobject_offset_fn f,
3627 tree offset,
3628 splay_tree offsets,
3629 tree max_offset,
3630 int vbases_p)
3632 int r = 0;
3633 tree type_binfo = NULL_TREE;
3635 /* If this OFFSET is bigger than the MAX_OFFSET, then we should
3636 stop. */
3637 if (max_offset && INT_CST_LT (max_offset, offset))
3638 return 0;
3640 if (type == error_mark_node)
3641 return 0;
3643 if (!TYPE_P (type))
3645 if (abi_version_at_least (2))
3646 type_binfo = type;
3647 type = BINFO_TYPE (type);
3650 if (CLASS_TYPE_P (type))
3652 tree field;
3653 tree binfo;
3654 int i;
3656 /* Avoid recursing into objects that are not interesting. */
3657 if (!CLASSTYPE_CONTAINS_EMPTY_CLASS_P (type))
3658 return 0;
3660 /* Record the location of TYPE. */
3661 r = (*f) (type, offset, offsets);
3662 if (r)
3663 return r;
3665 /* Iterate through the direct base classes of TYPE. */
3666 if (!type_binfo)
3667 type_binfo = TYPE_BINFO (type);
3668 for (i = 0; BINFO_BASE_ITERATE (type_binfo, i, binfo); i++)
3670 tree binfo_offset;
3672 if (abi_version_at_least (2)
3673 && BINFO_VIRTUAL_P (binfo))
3674 continue;
3676 if (!vbases_p
3677 && BINFO_VIRTUAL_P (binfo)
3678 && !BINFO_PRIMARY_P (binfo))
3679 continue;
3681 if (!abi_version_at_least (2))
3682 binfo_offset = size_binop (PLUS_EXPR,
3683 offset,
3684 BINFO_OFFSET (binfo));
3685 else
3687 tree orig_binfo;
3688 /* We cannot rely on BINFO_OFFSET being set for the base
3689 class yet, but the offsets for direct non-virtual
3690 bases can be calculated by going back to the TYPE. */
3691 orig_binfo = BINFO_BASE_BINFO (TYPE_BINFO (type), i);
3692 binfo_offset = size_binop (PLUS_EXPR,
3693 offset,
3694 BINFO_OFFSET (orig_binfo));
3697 r = walk_subobject_offsets (binfo,
3699 binfo_offset,
3700 offsets,
3701 max_offset,
3702 (abi_version_at_least (2)
3703 ? /*vbases_p=*/0 : vbases_p));
3704 if (r)
3705 return r;
3708 if (abi_version_at_least (2) && CLASSTYPE_VBASECLASSES (type))
3710 unsigned ix;
3711 vec<tree, va_gc> *vbases;
3713 /* Iterate through the virtual base classes of TYPE. In G++
3714 3.2, we included virtual bases in the direct base class
3715 loop above, which results in incorrect results; the
3716 correct offsets for virtual bases are only known when
3717 working with the most derived type. */
3718 if (vbases_p)
3719 for (vbases = CLASSTYPE_VBASECLASSES (type), ix = 0;
3720 vec_safe_iterate (vbases, ix, &binfo); ix++)
3722 r = walk_subobject_offsets (binfo,
3724 size_binop (PLUS_EXPR,
3725 offset,
3726 BINFO_OFFSET (binfo)),
3727 offsets,
3728 max_offset,
3729 /*vbases_p=*/0);
3730 if (r)
3731 return r;
3733 else
3735 /* We still have to walk the primary base, if it is
3736 virtual. (If it is non-virtual, then it was walked
3737 above.) */
3738 tree vbase = get_primary_binfo (type_binfo);
3740 if (vbase && BINFO_VIRTUAL_P (vbase)
3741 && BINFO_PRIMARY_P (vbase)
3742 && BINFO_INHERITANCE_CHAIN (vbase) == type_binfo)
3744 r = (walk_subobject_offsets
3745 (vbase, f, offset,
3746 offsets, max_offset, /*vbases_p=*/0));
3747 if (r)
3748 return r;
3753 /* Iterate through the fields of TYPE. */
3754 for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
3755 if (TREE_CODE (field) == FIELD_DECL && !DECL_ARTIFICIAL (field))
3757 tree field_offset;
3759 if (abi_version_at_least (2))
3760 field_offset = byte_position (field);
3761 else
3762 /* In G++ 3.2, DECL_FIELD_OFFSET was used. */
3763 field_offset = DECL_FIELD_OFFSET (field);
3765 r = walk_subobject_offsets (TREE_TYPE (field),
3767 size_binop (PLUS_EXPR,
3768 offset,
3769 field_offset),
3770 offsets,
3771 max_offset,
3772 /*vbases_p=*/1);
3773 if (r)
3774 return r;
3777 else if (TREE_CODE (type) == ARRAY_TYPE)
3779 tree element_type = strip_array_types (type);
3780 tree domain = TYPE_DOMAIN (type);
3781 tree index;
3783 /* Avoid recursing into objects that are not interesting. */
3784 if (!CLASS_TYPE_P (element_type)
3785 || !CLASSTYPE_CONTAINS_EMPTY_CLASS_P (element_type))
3786 return 0;
3788 /* Step through each of the elements in the array. */
3789 for (index = size_zero_node;
3790 /* G++ 3.2 had an off-by-one error here. */
3791 (abi_version_at_least (2)
3792 ? !INT_CST_LT (TYPE_MAX_VALUE (domain), index)
3793 : INT_CST_LT (index, TYPE_MAX_VALUE (domain)));
3794 index = size_binop (PLUS_EXPR, index, size_one_node))
3796 r = walk_subobject_offsets (TREE_TYPE (type),
3798 offset,
3799 offsets,
3800 max_offset,
3801 /*vbases_p=*/1);
3802 if (r)
3803 return r;
3804 offset = size_binop (PLUS_EXPR, offset,
3805 TYPE_SIZE_UNIT (TREE_TYPE (type)));
3806 /* If this new OFFSET is bigger than the MAX_OFFSET, then
3807 there's no point in iterating through the remaining
3808 elements of the array. */
3809 if (max_offset && INT_CST_LT (max_offset, offset))
3810 break;
3814 return 0;
3817 /* Record all of the empty subobjects of TYPE (either a type or a
3818 binfo). If IS_DATA_MEMBER is true, then a non-static data member
3819 is being placed at OFFSET; otherwise, it is a base class that is
3820 being placed at OFFSET. */
3822 static void
3823 record_subobject_offsets (tree type,
3824 tree offset,
3825 splay_tree offsets,
3826 bool is_data_member)
3828 tree max_offset;
3829 /* If recording subobjects for a non-static data member or a
3830 non-empty base class , we do not need to record offsets beyond
3831 the size of the biggest empty class. Additional data members
3832 will go at the end of the class. Additional base classes will go
3833 either at offset zero (if empty, in which case they cannot
3834 overlap with offsets past the size of the biggest empty class) or
3835 at the end of the class.
3837 However, if we are placing an empty base class, then we must record
3838 all offsets, as either the empty class is at offset zero (where
3839 other empty classes might later be placed) or at the end of the
3840 class (where other objects might then be placed, so other empty
3841 subobjects might later overlap). */
3842 if (is_data_member
3843 || !is_empty_class (BINFO_TYPE (type)))
3844 max_offset = sizeof_biggest_empty_class;
3845 else
3846 max_offset = NULL_TREE;
3847 walk_subobject_offsets (type, record_subobject_offset, offset,
3848 offsets, max_offset, is_data_member);
3851 /* Returns nonzero if any of the empty subobjects of TYPE (located at
3852 OFFSET) conflict with entries in OFFSETS. If VBASES_P is nonzero,
3853 virtual bases of TYPE are examined. */
3855 static int
3856 layout_conflict_p (tree type,
3857 tree offset,
3858 splay_tree offsets,
3859 int vbases_p)
3861 splay_tree_node max_node;
3863 /* Get the node in OFFSETS that indicates the maximum offset where
3864 an empty subobject is located. */
3865 max_node = splay_tree_max (offsets);
3866 /* If there aren't any empty subobjects, then there's no point in
3867 performing this check. */
3868 if (!max_node)
3869 return 0;
3871 return walk_subobject_offsets (type, check_subobject_offset, offset,
3872 offsets, (tree) (max_node->key),
3873 vbases_p);
3876 /* DECL is a FIELD_DECL corresponding either to a base subobject of a
3877 non-static data member of the type indicated by RLI. BINFO is the
3878 binfo corresponding to the base subobject, OFFSETS maps offsets to
3879 types already located at those offsets. This function determines
3880 the position of the DECL. */
3882 static void
3883 layout_nonempty_base_or_field (record_layout_info rli,
3884 tree decl,
3885 tree binfo,
3886 splay_tree offsets)
3888 tree offset = NULL_TREE;
3889 bool field_p;
3890 tree type;
3892 if (binfo)
3894 /* For the purposes of determining layout conflicts, we want to
3895 use the class type of BINFO; TREE_TYPE (DECL) will be the
3896 CLASSTYPE_AS_BASE version, which does not contain entries for
3897 zero-sized bases. */
3898 type = TREE_TYPE (binfo);
3899 field_p = false;
3901 else
3903 type = TREE_TYPE (decl);
3904 field_p = true;
3907 /* Try to place the field. It may take more than one try if we have
3908 a hard time placing the field without putting two objects of the
3909 same type at the same address. */
3910 while (1)
3912 struct record_layout_info_s old_rli = *rli;
3914 /* Place this field. */
3915 place_field (rli, decl);
3916 offset = byte_position (decl);
3918 /* We have to check to see whether or not there is already
3919 something of the same type at the offset we're about to use.
3920 For example, consider:
3922 struct S {};
3923 struct T : public S { int i; };
3924 struct U : public S, public T {};
3926 Here, we put S at offset zero in U. Then, we can't put T at
3927 offset zero -- its S component would be at the same address
3928 as the S we already allocated. So, we have to skip ahead.
3929 Since all data members, including those whose type is an
3930 empty class, have nonzero size, any overlap can happen only
3931 with a direct or indirect base-class -- it can't happen with
3932 a data member. */
3933 /* In a union, overlap is permitted; all members are placed at
3934 offset zero. */
3935 if (TREE_CODE (rli->t) == UNION_TYPE)
3936 break;
3937 /* G++ 3.2 did not check for overlaps when placing a non-empty
3938 virtual base. */
3939 if (!abi_version_at_least (2) && binfo && BINFO_VIRTUAL_P (binfo))
3940 break;
3941 if (layout_conflict_p (field_p ? type : binfo, offset,
3942 offsets, field_p))
3944 /* Strip off the size allocated to this field. That puts us
3945 at the first place we could have put the field with
3946 proper alignment. */
3947 *rli = old_rli;
3949 /* Bump up by the alignment required for the type. */
3950 rli->bitpos
3951 = size_binop (PLUS_EXPR, rli->bitpos,
3952 bitsize_int (binfo
3953 ? CLASSTYPE_ALIGN (type)
3954 : TYPE_ALIGN (type)));
3955 normalize_rli (rli);
3957 else
3958 /* There was no conflict. We're done laying out this field. */
3959 break;
3962 /* Now that we know where it will be placed, update its
3963 BINFO_OFFSET. */
3964 if (binfo && CLASS_TYPE_P (BINFO_TYPE (binfo)))
3965 /* Indirect virtual bases may have a nonzero BINFO_OFFSET at
3966 this point because their BINFO_OFFSET is copied from another
3967 hierarchy. Therefore, we may not need to add the entire
3968 OFFSET. */
3969 propagate_binfo_offsets (binfo,
3970 size_diffop_loc (input_location,
3971 convert (ssizetype, offset),
3972 convert (ssizetype,
3973 BINFO_OFFSET (binfo))));
3976 /* Returns true if TYPE is empty and OFFSET is nonzero. */
3978 static int
3979 empty_base_at_nonzero_offset_p (tree type,
3980 tree offset,
3981 splay_tree /*offsets*/)
3983 return is_empty_class (type) && !integer_zerop (offset);
3986 /* Layout the empty base BINFO. EOC indicates the byte currently just
3987 past the end of the class, and should be correctly aligned for a
3988 class of the type indicated by BINFO; OFFSETS gives the offsets of
3989 the empty bases allocated so far. T is the most derived
3990 type. Return nonzero iff we added it at the end. */
3992 static bool
3993 layout_empty_base (record_layout_info rli, tree binfo,
3994 tree eoc, splay_tree offsets)
3996 tree alignment;
3997 tree basetype = BINFO_TYPE (binfo);
3998 bool atend = false;
4000 /* This routine should only be used for empty classes. */
4001 gcc_assert (is_empty_class (basetype));
4002 alignment = ssize_int (CLASSTYPE_ALIGN_UNIT (basetype));
4004 if (!integer_zerop (BINFO_OFFSET (binfo)))
4006 if (abi_version_at_least (2))
4007 propagate_binfo_offsets
4008 (binfo, size_diffop_loc (input_location,
4009 size_zero_node, BINFO_OFFSET (binfo)));
4010 else
4011 warning (OPT_Wabi,
4012 "offset of empty base %qT may not be ABI-compliant and may"
4013 "change in a future version of GCC",
4014 BINFO_TYPE (binfo));
4017 /* This is an empty base class. We first try to put it at offset
4018 zero. */
4019 if (layout_conflict_p (binfo,
4020 BINFO_OFFSET (binfo),
4021 offsets,
4022 /*vbases_p=*/0))
4024 /* That didn't work. Now, we move forward from the next
4025 available spot in the class. */
4026 atend = true;
4027 propagate_binfo_offsets (binfo, convert (ssizetype, eoc));
4028 while (1)
4030 if (!layout_conflict_p (binfo,
4031 BINFO_OFFSET (binfo),
4032 offsets,
4033 /*vbases_p=*/0))
4034 /* We finally found a spot where there's no overlap. */
4035 break;
4037 /* There's overlap here, too. Bump along to the next spot. */
4038 propagate_binfo_offsets (binfo, alignment);
4042 if (CLASSTYPE_USER_ALIGN (basetype))
4044 rli->record_align = MAX (rli->record_align, CLASSTYPE_ALIGN (basetype));
4045 if (warn_packed)
4046 rli->unpacked_align = MAX (rli->unpacked_align, CLASSTYPE_ALIGN (basetype));
4047 TYPE_USER_ALIGN (rli->t) = 1;
4050 return atend;
4053 /* Layout the base given by BINFO in the class indicated by RLI.
4054 *BASE_ALIGN is a running maximum of the alignments of
4055 any base class. OFFSETS gives the location of empty base
4056 subobjects. T is the most derived type. Return nonzero if the new
4057 object cannot be nearly-empty. A new FIELD_DECL is inserted at
4058 *NEXT_FIELD, unless BINFO is for an empty base class.
4060 Returns the location at which the next field should be inserted. */
4062 static tree *
4063 build_base_field (record_layout_info rli, tree binfo,
4064 splay_tree offsets, tree *next_field)
4066 tree t = rli->t;
4067 tree basetype = BINFO_TYPE (binfo);
4069 if (!COMPLETE_TYPE_P (basetype))
4070 /* This error is now reported in xref_tag, thus giving better
4071 location information. */
4072 return next_field;
4074 /* Place the base class. */
4075 if (!is_empty_class (basetype))
4077 tree decl;
4079 /* The containing class is non-empty because it has a non-empty
4080 base class. */
4081 CLASSTYPE_EMPTY_P (t) = 0;
4083 /* Create the FIELD_DECL. */
4084 decl = build_decl (input_location,
4085 FIELD_DECL, NULL_TREE, CLASSTYPE_AS_BASE (basetype));
4086 DECL_ARTIFICIAL (decl) = 1;
4087 DECL_IGNORED_P (decl) = 1;
4088 DECL_FIELD_CONTEXT (decl) = t;
4089 if (CLASSTYPE_AS_BASE (basetype))
4091 DECL_SIZE (decl) = CLASSTYPE_SIZE (basetype);
4092 DECL_SIZE_UNIT (decl) = CLASSTYPE_SIZE_UNIT (basetype);
4093 DECL_ALIGN (decl) = CLASSTYPE_ALIGN (basetype);
4094 DECL_USER_ALIGN (decl) = CLASSTYPE_USER_ALIGN (basetype);
4095 DECL_MODE (decl) = TYPE_MODE (basetype);
4096 DECL_FIELD_IS_BASE (decl) = 1;
4098 /* Try to place the field. It may take more than one try if we
4099 have a hard time placing the field without putting two
4100 objects of the same type at the same address. */
4101 layout_nonempty_base_or_field (rli, decl, binfo, offsets);
4102 /* Add the new FIELD_DECL to the list of fields for T. */
4103 DECL_CHAIN (decl) = *next_field;
4104 *next_field = decl;
4105 next_field = &DECL_CHAIN (decl);
4108 else
4110 tree eoc;
4111 bool atend;
4113 /* On some platforms (ARM), even empty classes will not be
4114 byte-aligned. */
4115 eoc = round_up_loc (input_location,
4116 rli_size_unit_so_far (rli),
4117 CLASSTYPE_ALIGN_UNIT (basetype));
4118 atend = layout_empty_base (rli, binfo, eoc, offsets);
4119 /* A nearly-empty class "has no proper base class that is empty,
4120 not morally virtual, and at an offset other than zero." */
4121 if (!BINFO_VIRTUAL_P (binfo) && CLASSTYPE_NEARLY_EMPTY_P (t))
4123 if (atend)
4124 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
4125 /* The check above (used in G++ 3.2) is insufficient because
4126 an empty class placed at offset zero might itself have an
4127 empty base at a nonzero offset. */
4128 else if (walk_subobject_offsets (basetype,
4129 empty_base_at_nonzero_offset_p,
4130 size_zero_node,
4131 /*offsets=*/NULL,
4132 /*max_offset=*/NULL_TREE,
4133 /*vbases_p=*/true))
4135 if (abi_version_at_least (2))
4136 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
4137 else
4138 warning (OPT_Wabi,
4139 "class %qT will be considered nearly empty in a "
4140 "future version of GCC", t);
4144 /* We do not create a FIELD_DECL for empty base classes because
4145 it might overlap some other field. We want to be able to
4146 create CONSTRUCTORs for the class by iterating over the
4147 FIELD_DECLs, and the back end does not handle overlapping
4148 FIELD_DECLs. */
4150 /* An empty virtual base causes a class to be non-empty
4151 -- but in that case we do not need to clear CLASSTYPE_EMPTY_P
4152 here because that was already done when the virtual table
4153 pointer was created. */
4156 /* Record the offsets of BINFO and its base subobjects. */
4157 record_subobject_offsets (binfo,
4158 BINFO_OFFSET (binfo),
4159 offsets,
4160 /*is_data_member=*/false);
4162 return next_field;
4165 /* Layout all of the non-virtual base classes. Record empty
4166 subobjects in OFFSETS. T is the most derived type. Return nonzero
4167 if the type cannot be nearly empty. The fields created
4168 corresponding to the base classes will be inserted at
4169 *NEXT_FIELD. */
4171 static void
4172 build_base_fields (record_layout_info rli,
4173 splay_tree offsets, tree *next_field)
4175 /* Chain to hold all the new FIELD_DECLs which stand in for base class
4176 subobjects. */
4177 tree t = rli->t;
4178 int n_baseclasses = BINFO_N_BASE_BINFOS (TYPE_BINFO (t));
4179 int i;
4181 /* The primary base class is always allocated first. */
4182 if (CLASSTYPE_HAS_PRIMARY_BASE_P (t))
4183 next_field = build_base_field (rli, CLASSTYPE_PRIMARY_BINFO (t),
4184 offsets, next_field);
4186 /* Now allocate the rest of the bases. */
4187 for (i = 0; i < n_baseclasses; ++i)
4189 tree base_binfo;
4191 base_binfo = BINFO_BASE_BINFO (TYPE_BINFO (t), i);
4193 /* The primary base was already allocated above, so we don't
4194 need to allocate it again here. */
4195 if (base_binfo == CLASSTYPE_PRIMARY_BINFO (t))
4196 continue;
4198 /* Virtual bases are added at the end (a primary virtual base
4199 will have already been added). */
4200 if (BINFO_VIRTUAL_P (base_binfo))
4201 continue;
4203 next_field = build_base_field (rli, base_binfo,
4204 offsets, next_field);
4208 /* Go through the TYPE_METHODS of T issuing any appropriate
4209 diagnostics, figuring out which methods override which other
4210 methods, and so forth. */
4212 static void
4213 check_methods (tree t)
4215 tree x;
4217 for (x = TYPE_METHODS (t); x; x = DECL_CHAIN (x))
4219 check_for_override (x, t);
4220 if (DECL_PURE_VIRTUAL_P (x) && ! DECL_VINDEX (x))
4221 error ("initializer specified for non-virtual method %q+D", x);
4222 /* The name of the field is the original field name
4223 Save this in auxiliary field for later overloading. */
4224 if (DECL_VINDEX (x))
4226 TYPE_POLYMORPHIC_P (t) = 1;
4227 if (DECL_PURE_VIRTUAL_P (x))
4228 vec_safe_push (CLASSTYPE_PURE_VIRTUALS (t), x);
4230 /* All user-provided destructors are non-trivial.
4231 Constructors and assignment ops are handled in
4232 grok_special_member_properties. */
4233 if (DECL_DESTRUCTOR_P (x) && user_provided_p (x))
4234 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t) = 1;
4238 /* FN is a constructor or destructor. Clone the declaration to create
4239 a specialized in-charge or not-in-charge version, as indicated by
4240 NAME. */
4242 static tree
4243 build_clone (tree fn, tree name)
4245 tree parms;
4246 tree clone;
4248 /* Copy the function. */
4249 clone = copy_decl (fn);
4250 /* Reset the function name. */
4251 DECL_NAME (clone) = name;
4252 SET_DECL_ASSEMBLER_NAME (clone, NULL_TREE);
4253 /* Remember where this function came from. */
4254 DECL_ABSTRACT_ORIGIN (clone) = fn;
4255 /* Make it easy to find the CLONE given the FN. */
4256 DECL_CHAIN (clone) = DECL_CHAIN (fn);
4257 DECL_CHAIN (fn) = clone;
4259 /* If this is a template, do the rest on the DECL_TEMPLATE_RESULT. */
4260 if (TREE_CODE (clone) == TEMPLATE_DECL)
4262 tree result = build_clone (DECL_TEMPLATE_RESULT (clone), name);
4263 DECL_TEMPLATE_RESULT (clone) = result;
4264 DECL_TEMPLATE_INFO (result) = copy_node (DECL_TEMPLATE_INFO (result));
4265 DECL_TI_TEMPLATE (result) = clone;
4266 TREE_TYPE (clone) = TREE_TYPE (result);
4267 return clone;
4270 DECL_CLONED_FUNCTION (clone) = fn;
4271 /* There's no pending inline data for this function. */
4272 DECL_PENDING_INLINE_INFO (clone) = NULL;
4273 DECL_PENDING_INLINE_P (clone) = 0;
4275 /* The base-class destructor is not virtual. */
4276 if (name == base_dtor_identifier)
4278 DECL_VIRTUAL_P (clone) = 0;
4279 if (TREE_CODE (clone) != TEMPLATE_DECL)
4280 DECL_VINDEX (clone) = NULL_TREE;
4283 /* If there was an in-charge parameter, drop it from the function
4284 type. */
4285 if (DECL_HAS_IN_CHARGE_PARM_P (clone))
4287 tree basetype;
4288 tree parmtypes;
4289 tree exceptions;
4291 exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (clone));
4292 basetype = TYPE_METHOD_BASETYPE (TREE_TYPE (clone));
4293 parmtypes = TYPE_ARG_TYPES (TREE_TYPE (clone));
4294 /* Skip the `this' parameter. */
4295 parmtypes = TREE_CHAIN (parmtypes);
4296 /* Skip the in-charge parameter. */
4297 parmtypes = TREE_CHAIN (parmtypes);
4298 /* And the VTT parm, in a complete [cd]tor. */
4299 if (DECL_HAS_VTT_PARM_P (fn)
4300 && ! DECL_NEEDS_VTT_PARM_P (clone))
4301 parmtypes = TREE_CHAIN (parmtypes);
4302 /* If this is subobject constructor or destructor, add the vtt
4303 parameter. */
4304 TREE_TYPE (clone)
4305 = build_method_type_directly (basetype,
4306 TREE_TYPE (TREE_TYPE (clone)),
4307 parmtypes);
4308 if (exceptions)
4309 TREE_TYPE (clone) = build_exception_variant (TREE_TYPE (clone),
4310 exceptions);
4311 TREE_TYPE (clone)
4312 = cp_build_type_attribute_variant (TREE_TYPE (clone),
4313 TYPE_ATTRIBUTES (TREE_TYPE (fn)));
4316 /* Copy the function parameters. */
4317 DECL_ARGUMENTS (clone) = copy_list (DECL_ARGUMENTS (clone));
4318 /* Remove the in-charge parameter. */
4319 if (DECL_HAS_IN_CHARGE_PARM_P (clone))
4321 DECL_CHAIN (DECL_ARGUMENTS (clone))
4322 = DECL_CHAIN (DECL_CHAIN (DECL_ARGUMENTS (clone)));
4323 DECL_HAS_IN_CHARGE_PARM_P (clone) = 0;
4325 /* And the VTT parm, in a complete [cd]tor. */
4326 if (DECL_HAS_VTT_PARM_P (fn))
4328 if (DECL_NEEDS_VTT_PARM_P (clone))
4329 DECL_HAS_VTT_PARM_P (clone) = 1;
4330 else
4332 DECL_CHAIN (DECL_ARGUMENTS (clone))
4333 = DECL_CHAIN (DECL_CHAIN (DECL_ARGUMENTS (clone)));
4334 DECL_HAS_VTT_PARM_P (clone) = 0;
4338 for (parms = DECL_ARGUMENTS (clone); parms; parms = DECL_CHAIN (parms))
4340 DECL_CONTEXT (parms) = clone;
4341 cxx_dup_lang_specific_decl (parms);
4344 /* Create the RTL for this function. */
4345 SET_DECL_RTL (clone, NULL);
4346 rest_of_decl_compilation (clone, /*top_level=*/1, at_eof);
4348 if (pch_file)
4349 note_decl_for_pch (clone);
4351 return clone;
4354 /* Implementation of DECL_CLONED_FUNCTION and DECL_CLONED_FUNCTION_P, do
4355 not invoke this function directly.
4357 For a non-thunk function, returns the address of the slot for storing
4358 the function it is a clone of. Otherwise returns NULL_TREE.
4360 If JUST_TESTING, looks through TEMPLATE_DECL and returns NULL if
4361 cloned_function is unset. This is to support the separate
4362 DECL_CLONED_FUNCTION and DECL_CLONED_FUNCTION_P modes; using the latter
4363 on a template makes sense, but not the former. */
4365 tree *
4366 decl_cloned_function_p (const_tree decl, bool just_testing)
4368 tree *ptr;
4369 if (just_testing)
4370 decl = STRIP_TEMPLATE (decl);
4372 if (TREE_CODE (decl) != FUNCTION_DECL
4373 || !DECL_LANG_SPECIFIC (decl)
4374 || DECL_LANG_SPECIFIC (decl)->u.fn.thunk_p)
4376 #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
4377 if (!just_testing)
4378 lang_check_failed (__FILE__, __LINE__, __FUNCTION__);
4379 else
4380 #endif
4381 return NULL;
4384 ptr = &DECL_LANG_SPECIFIC (decl)->u.fn.u5.cloned_function;
4385 if (just_testing && *ptr == NULL_TREE)
4386 return NULL;
4387 else
4388 return ptr;
4391 /* Produce declarations for all appropriate clones of FN. If
4392 UPDATE_METHOD_VEC_P is nonzero, the clones are added to the
4393 CLASTYPE_METHOD_VEC as well. */
4395 void
4396 clone_function_decl (tree fn, int update_method_vec_p)
4398 tree clone;
4400 /* Avoid inappropriate cloning. */
4401 if (DECL_CHAIN (fn)
4402 && DECL_CLONED_FUNCTION_P (DECL_CHAIN (fn)))
4403 return;
4405 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (fn))
4407 /* For each constructor, we need two variants: an in-charge version
4408 and a not-in-charge version. */
4409 clone = build_clone (fn, complete_ctor_identifier);
4410 if (update_method_vec_p)
4411 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
4412 clone = build_clone (fn, base_ctor_identifier);
4413 if (update_method_vec_p)
4414 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
4416 else
4418 gcc_assert (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (fn));
4420 /* For each destructor, we need three variants: an in-charge
4421 version, a not-in-charge version, and an in-charge deleting
4422 version. We clone the deleting version first because that
4423 means it will go second on the TYPE_METHODS list -- and that
4424 corresponds to the correct layout order in the virtual
4425 function table.
4427 For a non-virtual destructor, we do not build a deleting
4428 destructor. */
4429 if (DECL_VIRTUAL_P (fn))
4431 clone = build_clone (fn, deleting_dtor_identifier);
4432 if (update_method_vec_p)
4433 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
4435 clone = build_clone (fn, complete_dtor_identifier);
4436 if (update_method_vec_p)
4437 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
4438 clone = build_clone (fn, base_dtor_identifier);
4439 if (update_method_vec_p)
4440 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
4443 /* Note that this is an abstract function that is never emitted. */
4444 DECL_ABSTRACT (fn) = 1;
4447 /* DECL is an in charge constructor, which is being defined. This will
4448 have had an in class declaration, from whence clones were
4449 declared. An out-of-class definition can specify additional default
4450 arguments. As it is the clones that are involved in overload
4451 resolution, we must propagate the information from the DECL to its
4452 clones. */
4454 void
4455 adjust_clone_args (tree decl)
4457 tree clone;
4459 for (clone = DECL_CHAIN (decl); clone && DECL_CLONED_FUNCTION_P (clone);
4460 clone = DECL_CHAIN (clone))
4462 tree orig_clone_parms = TYPE_ARG_TYPES (TREE_TYPE (clone));
4463 tree orig_decl_parms = TYPE_ARG_TYPES (TREE_TYPE (decl));
4464 tree decl_parms, clone_parms;
4466 clone_parms = orig_clone_parms;
4468 /* Skip the 'this' parameter. */
4469 orig_clone_parms = TREE_CHAIN (orig_clone_parms);
4470 orig_decl_parms = TREE_CHAIN (orig_decl_parms);
4472 if (DECL_HAS_IN_CHARGE_PARM_P (decl))
4473 orig_decl_parms = TREE_CHAIN (orig_decl_parms);
4474 if (DECL_HAS_VTT_PARM_P (decl))
4475 orig_decl_parms = TREE_CHAIN (orig_decl_parms);
4477 clone_parms = orig_clone_parms;
4478 if (DECL_HAS_VTT_PARM_P (clone))
4479 clone_parms = TREE_CHAIN (clone_parms);
4481 for (decl_parms = orig_decl_parms; decl_parms;
4482 decl_parms = TREE_CHAIN (decl_parms),
4483 clone_parms = TREE_CHAIN (clone_parms))
4485 gcc_assert (same_type_p (TREE_TYPE (decl_parms),
4486 TREE_TYPE (clone_parms)));
4488 if (TREE_PURPOSE (decl_parms) && !TREE_PURPOSE (clone_parms))
4490 /* A default parameter has been added. Adjust the
4491 clone's parameters. */
4492 tree exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (clone));
4493 tree attrs = TYPE_ATTRIBUTES (TREE_TYPE (clone));
4494 tree basetype = TYPE_METHOD_BASETYPE (TREE_TYPE (clone));
4495 tree type;
4497 clone_parms = orig_decl_parms;
4499 if (DECL_HAS_VTT_PARM_P (clone))
4501 clone_parms = tree_cons (TREE_PURPOSE (orig_clone_parms),
4502 TREE_VALUE (orig_clone_parms),
4503 clone_parms);
4504 TREE_TYPE (clone_parms) = TREE_TYPE (orig_clone_parms);
4506 type = build_method_type_directly (basetype,
4507 TREE_TYPE (TREE_TYPE (clone)),
4508 clone_parms);
4509 if (exceptions)
4510 type = build_exception_variant (type, exceptions);
4511 if (attrs)
4512 type = cp_build_type_attribute_variant (type, attrs);
4513 TREE_TYPE (clone) = type;
4515 clone_parms = NULL_TREE;
4516 break;
4519 gcc_assert (!clone_parms);
4523 /* For each of the constructors and destructors in T, create an
4524 in-charge and not-in-charge variant. */
4526 static void
4527 clone_constructors_and_destructors (tree t)
4529 tree fns;
4531 /* If for some reason we don't have a CLASSTYPE_METHOD_VEC, we bail
4532 out now. */
4533 if (!CLASSTYPE_METHOD_VEC (t))
4534 return;
4536 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
4537 clone_function_decl (OVL_CURRENT (fns), /*update_method_vec_p=*/1);
4538 for (fns = CLASSTYPE_DESTRUCTORS (t); fns; fns = OVL_NEXT (fns))
4539 clone_function_decl (OVL_CURRENT (fns), /*update_method_vec_p=*/1);
4542 /* Deduce noexcept for a destructor DTOR. */
4544 void
4545 deduce_noexcept_on_destructor (tree dtor)
4547 if (!TYPE_RAISES_EXCEPTIONS (TREE_TYPE (dtor)))
4549 tree ctx = DECL_CONTEXT (dtor);
4550 tree implicit_fn = implicitly_declare_fn (sfk_destructor, ctx,
4551 /*const_p=*/false,
4552 NULL, NULL);
4553 tree eh_spec = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (implicit_fn));
4554 TREE_TYPE (dtor) = build_exception_variant (TREE_TYPE (dtor), eh_spec);
4558 /* For each destructor in T, deduce noexcept:
4560 12.4/3: A declaration of a destructor that does not have an
4561 exception-specification is implicitly considered to have the
4562 same exception-specification as an implicit declaration (15.4). */
4564 static void
4565 deduce_noexcept_on_destructors (tree t)
4567 tree fns;
4569 /* If for some reason we don't have a CLASSTYPE_METHOD_VEC, we bail
4570 out now. */
4571 if (!CLASSTYPE_METHOD_VEC (t))
4572 return;
4574 for (fns = CLASSTYPE_DESTRUCTORS (t); fns; fns = OVL_NEXT (fns))
4575 deduce_noexcept_on_destructor (OVL_CURRENT (fns));
4578 /* Subroutine of set_one_vmethod_tm_attributes. Search base classes
4579 of TYPE for virtual functions which FNDECL overrides. Return a
4580 mask of the tm attributes found therein. */
4582 static int
4583 look_for_tm_attr_overrides (tree type, tree fndecl)
4585 tree binfo = TYPE_BINFO (type);
4586 tree base_binfo;
4587 int ix, found = 0;
4589 for (ix = 0; BINFO_BASE_ITERATE (binfo, ix, base_binfo); ++ix)
4591 tree o, basetype = BINFO_TYPE (base_binfo);
4593 if (!TYPE_POLYMORPHIC_P (basetype))
4594 continue;
4596 o = look_for_overrides_here (basetype, fndecl);
4597 if (o)
4598 found |= tm_attr_to_mask (find_tm_attribute
4599 (TYPE_ATTRIBUTES (TREE_TYPE (o))));
4600 else
4601 found |= look_for_tm_attr_overrides (basetype, fndecl);
4604 return found;
4607 /* Subroutine of set_method_tm_attributes. Handle the checks and
4608 inheritance for one virtual method FNDECL. */
4610 static void
4611 set_one_vmethod_tm_attributes (tree type, tree fndecl)
4613 tree tm_attr;
4614 int found, have;
4616 found = look_for_tm_attr_overrides (type, fndecl);
4618 /* If FNDECL doesn't actually override anything (i.e. T is the
4619 class that first declares FNDECL virtual), then we're done. */
4620 if (found == 0)
4621 return;
4623 tm_attr = find_tm_attribute (TYPE_ATTRIBUTES (TREE_TYPE (fndecl)));
4624 have = tm_attr_to_mask (tm_attr);
4626 /* Intel STM Language Extension 3.0, Section 4.2 table 4:
4627 tm_pure must match exactly, otherwise no weakening of
4628 tm_safe > tm_callable > nothing. */
4629 /* ??? The tm_pure attribute didn't make the transition to the
4630 multivendor language spec. */
4631 if (have == TM_ATTR_PURE)
4633 if (found != TM_ATTR_PURE)
4635 found &= -found;
4636 goto err_override;
4639 /* If the overridden function is tm_pure, then FNDECL must be. */
4640 else if (found == TM_ATTR_PURE && tm_attr)
4641 goto err_override;
4642 /* Look for base class combinations that cannot be satisfied. */
4643 else if (found != TM_ATTR_PURE && (found & TM_ATTR_PURE))
4645 found &= ~TM_ATTR_PURE;
4646 found &= -found;
4647 error_at (DECL_SOURCE_LOCATION (fndecl),
4648 "method overrides both %<transaction_pure%> and %qE methods",
4649 tm_mask_to_attr (found));
4651 /* If FNDECL did not declare an attribute, then inherit the most
4652 restrictive one. */
4653 else if (tm_attr == NULL)
4655 apply_tm_attr (fndecl, tm_mask_to_attr (found & -found));
4657 /* Otherwise validate that we're not weaker than a function
4658 that is being overridden. */
4659 else
4661 found &= -found;
4662 if (found <= TM_ATTR_CALLABLE && have > found)
4663 goto err_override;
4665 return;
4667 err_override:
4668 error_at (DECL_SOURCE_LOCATION (fndecl),
4669 "method declared %qE overriding %qE method",
4670 tm_attr, tm_mask_to_attr (found));
4673 /* For each of the methods in T, propagate a class-level tm attribute. */
4675 static void
4676 set_method_tm_attributes (tree t)
4678 tree class_tm_attr, fndecl;
4680 /* Don't bother collecting tm attributes if transactional memory
4681 support is not enabled. */
4682 if (!flag_tm)
4683 return;
4685 /* Process virtual methods first, as they inherit directly from the
4686 base virtual function and also require validation of new attributes. */
4687 if (TYPE_CONTAINS_VPTR_P (t))
4689 tree vchain;
4690 for (vchain = BINFO_VIRTUALS (TYPE_BINFO (t)); vchain;
4691 vchain = TREE_CHAIN (vchain))
4693 fndecl = BV_FN (vchain);
4694 if (DECL_THUNK_P (fndecl))
4695 fndecl = THUNK_TARGET (fndecl);
4696 set_one_vmethod_tm_attributes (t, fndecl);
4700 /* If the class doesn't have an attribute, nothing more to do. */
4701 class_tm_attr = find_tm_attribute (TYPE_ATTRIBUTES (t));
4702 if (class_tm_attr == NULL)
4703 return;
4705 /* Any method that does not yet have a tm attribute inherits
4706 the one from the class. */
4707 for (fndecl = TYPE_METHODS (t); fndecl; fndecl = TREE_CHAIN (fndecl))
4709 if (!find_tm_attribute (TYPE_ATTRIBUTES (TREE_TYPE (fndecl))))
4710 apply_tm_attr (fndecl, class_tm_attr);
4714 /* Returns true iff class T has a user-defined constructor other than
4715 the default constructor. */
4717 bool
4718 type_has_user_nondefault_constructor (tree t)
4720 tree fns;
4722 if (!TYPE_HAS_USER_CONSTRUCTOR (t))
4723 return false;
4725 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
4727 tree fn = OVL_CURRENT (fns);
4728 if (!DECL_ARTIFICIAL (fn)
4729 && (TREE_CODE (fn) == TEMPLATE_DECL
4730 || (skip_artificial_parms_for (fn, DECL_ARGUMENTS (fn))
4731 != NULL_TREE)))
4732 return true;
4735 return false;
4738 /* Returns the defaulted constructor if T has one. Otherwise, returns
4739 NULL_TREE. */
4741 tree
4742 in_class_defaulted_default_constructor (tree t)
4744 tree fns, args;
4746 if (!TYPE_HAS_USER_CONSTRUCTOR (t))
4747 return NULL_TREE;
4749 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
4751 tree fn = OVL_CURRENT (fns);
4753 if (DECL_DEFAULTED_IN_CLASS_P (fn))
4755 args = FUNCTION_FIRST_USER_PARMTYPE (fn);
4756 while (args && TREE_PURPOSE (args))
4757 args = TREE_CHAIN (args);
4758 if (!args || args == void_list_node)
4759 return fn;
4763 return NULL_TREE;
4766 /* Returns true iff FN is a user-provided function, i.e. user-declared
4767 and not defaulted at its first declaration; or explicit, private,
4768 protected, or non-const. */
4770 bool
4771 user_provided_p (tree fn)
4773 if (TREE_CODE (fn) == TEMPLATE_DECL)
4774 return true;
4775 else
4776 return (!DECL_ARTIFICIAL (fn)
4777 && !DECL_DEFAULTED_IN_CLASS_P (fn));
4780 /* Returns true iff class T has a user-provided constructor. */
4782 bool
4783 type_has_user_provided_constructor (tree t)
4785 tree fns;
4787 if (!CLASS_TYPE_P (t))
4788 return false;
4790 if (!TYPE_HAS_USER_CONSTRUCTOR (t))
4791 return false;
4793 /* This can happen in error cases; avoid crashing. */
4794 if (!CLASSTYPE_METHOD_VEC (t))
4795 return false;
4797 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
4798 if (user_provided_p (OVL_CURRENT (fns)))
4799 return true;
4801 return false;
4804 /* Returns true iff class T has a user-provided default constructor. */
4806 bool
4807 type_has_user_provided_default_constructor (tree t)
4809 tree fns;
4811 if (!TYPE_HAS_USER_CONSTRUCTOR (t))
4812 return false;
4814 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
4816 tree fn = OVL_CURRENT (fns);
4817 if (TREE_CODE (fn) == FUNCTION_DECL
4818 && user_provided_p (fn)
4819 && sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (fn)))
4820 return true;
4823 return false;
4826 /* If default-initialization leaves part of TYPE uninitialized, returns
4827 a DECL for the field or TYPE itself (DR 253). */
4829 tree
4830 default_init_uninitialized_part (tree type)
4832 tree t, r, binfo;
4833 int i;
4835 type = strip_array_types (type);
4836 if (!CLASS_TYPE_P (type))
4837 return type;
4838 if (type_has_user_provided_default_constructor (type))
4839 return NULL_TREE;
4840 for (binfo = TYPE_BINFO (type), i = 0;
4841 BINFO_BASE_ITERATE (binfo, i, t); ++i)
4843 r = default_init_uninitialized_part (BINFO_TYPE (t));
4844 if (r)
4845 return r;
4847 for (t = TYPE_FIELDS (type); t; t = DECL_CHAIN (t))
4848 if (TREE_CODE (t) == FIELD_DECL
4849 && !DECL_ARTIFICIAL (t)
4850 && !DECL_INITIAL (t))
4852 r = default_init_uninitialized_part (TREE_TYPE (t));
4853 if (r)
4854 return DECL_P (r) ? r : t;
4857 return NULL_TREE;
4860 /* Returns true iff for class T, a trivial synthesized default constructor
4861 would be constexpr. */
4863 bool
4864 trivial_default_constructor_is_constexpr (tree t)
4866 /* A defaulted trivial default constructor is constexpr
4867 if there is nothing to initialize. */
4868 gcc_assert (!TYPE_HAS_COMPLEX_DFLT (t));
4869 return is_really_empty_class (t);
4872 /* Returns true iff class T has a constexpr default constructor. */
4874 bool
4875 type_has_constexpr_default_constructor (tree t)
4877 tree fns;
4879 if (!CLASS_TYPE_P (t))
4881 /* The caller should have stripped an enclosing array. */
4882 gcc_assert (TREE_CODE (t) != ARRAY_TYPE);
4883 return false;
4885 if (CLASSTYPE_LAZY_DEFAULT_CTOR (t))
4887 if (!TYPE_HAS_COMPLEX_DFLT (t))
4888 return trivial_default_constructor_is_constexpr (t);
4889 /* Non-trivial, we need to check subobject constructors. */
4890 lazily_declare_fn (sfk_constructor, t);
4892 fns = locate_ctor (t);
4893 return (fns && DECL_DECLARED_CONSTEXPR_P (fns));
4896 /* Returns true iff class TYPE has a virtual destructor. */
4898 bool
4899 type_has_virtual_destructor (tree type)
4901 tree dtor;
4903 if (!CLASS_TYPE_P (type))
4904 return false;
4906 gcc_assert (COMPLETE_TYPE_P (type));
4907 dtor = CLASSTYPE_DESTRUCTORS (type);
4908 return (dtor && DECL_VIRTUAL_P (dtor));
4911 /* Returns true iff class T has a move constructor. */
4913 bool
4914 type_has_move_constructor (tree t)
4916 tree fns;
4918 if (CLASSTYPE_LAZY_MOVE_CTOR (t))
4920 gcc_assert (COMPLETE_TYPE_P (t));
4921 lazily_declare_fn (sfk_move_constructor, t);
4924 if (!CLASSTYPE_METHOD_VEC (t))
4925 return false;
4927 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
4928 if (move_fn_p (OVL_CURRENT (fns)))
4929 return true;
4931 return false;
4934 /* Returns true iff class T has a move assignment operator. */
4936 bool
4937 type_has_move_assign (tree t)
4939 tree fns;
4941 if (CLASSTYPE_LAZY_MOVE_ASSIGN (t))
4943 gcc_assert (COMPLETE_TYPE_P (t));
4944 lazily_declare_fn (sfk_move_assignment, t);
4947 for (fns = lookup_fnfields_slot_nolazy (t, ansi_assopname (NOP_EXPR));
4948 fns; fns = OVL_NEXT (fns))
4949 if (move_fn_p (OVL_CURRENT (fns)))
4950 return true;
4952 return false;
4955 /* Returns true iff class T has a move constructor that was explicitly
4956 declared in the class body. Note that this is different from
4957 "user-provided", which doesn't include functions that are defaulted in
4958 the class. */
4960 bool
4961 type_has_user_declared_move_constructor (tree t)
4963 tree fns;
4965 if (CLASSTYPE_LAZY_MOVE_CTOR (t))
4966 return false;
4968 if (!CLASSTYPE_METHOD_VEC (t))
4969 return false;
4971 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
4973 tree fn = OVL_CURRENT (fns);
4974 if (move_fn_p (fn) && !DECL_ARTIFICIAL (fn))
4975 return true;
4978 return false;
4981 /* Returns true iff class T has a move assignment operator that was
4982 explicitly declared in the class body. */
4984 bool
4985 type_has_user_declared_move_assign (tree t)
4987 tree fns;
4989 if (CLASSTYPE_LAZY_MOVE_ASSIGN (t))
4990 return false;
4992 for (fns = lookup_fnfields_slot_nolazy (t, ansi_assopname (NOP_EXPR));
4993 fns; fns = OVL_NEXT (fns))
4995 tree fn = OVL_CURRENT (fns);
4996 if (move_fn_p (fn) && !DECL_ARTIFICIAL (fn))
4997 return true;
5000 return false;
5003 /* Nonzero if we need to build up a constructor call when initializing an
5004 object of this class, either because it has a user-provided constructor
5005 or because it doesn't have a default constructor (so we need to give an
5006 error if no initializer is provided). Use TYPE_NEEDS_CONSTRUCTING when
5007 what you care about is whether or not an object can be produced by a
5008 constructor (e.g. so we don't set TREE_READONLY on const variables of
5009 such type); use this function when what you care about is whether or not
5010 to try to call a constructor to create an object. The latter case is
5011 the former plus some cases of constructors that cannot be called. */
5013 bool
5014 type_build_ctor_call (tree t)
5016 tree inner;
5017 if (TYPE_NEEDS_CONSTRUCTING (t))
5018 return true;
5019 inner = strip_array_types (t);
5020 return (CLASS_TYPE_P (inner) && !TYPE_HAS_DEFAULT_CONSTRUCTOR (inner)
5021 && !ANON_AGGR_TYPE_P (inner));
5024 /* Remove all zero-width bit-fields from T. */
5026 static void
5027 remove_zero_width_bit_fields (tree t)
5029 tree *fieldsp;
5031 fieldsp = &TYPE_FIELDS (t);
5032 while (*fieldsp)
5034 if (TREE_CODE (*fieldsp) == FIELD_DECL
5035 && DECL_C_BIT_FIELD (*fieldsp)
5036 /* We should not be confused by the fact that grokbitfield
5037 temporarily sets the width of the bit field into
5038 DECL_INITIAL (*fieldsp).
5039 check_bitfield_decl eventually sets DECL_SIZE (*fieldsp)
5040 to that width. */
5041 && integer_zerop (DECL_SIZE (*fieldsp)))
5042 *fieldsp = DECL_CHAIN (*fieldsp);
5043 else
5044 fieldsp = &DECL_CHAIN (*fieldsp);
5048 /* Returns TRUE iff we need a cookie when dynamically allocating an
5049 array whose elements have the indicated class TYPE. */
5051 static bool
5052 type_requires_array_cookie (tree type)
5054 tree fns;
5055 bool has_two_argument_delete_p = false;
5057 gcc_assert (CLASS_TYPE_P (type));
5059 /* If there's a non-trivial destructor, we need a cookie. In order
5060 to iterate through the array calling the destructor for each
5061 element, we'll have to know how many elements there are. */
5062 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
5063 return true;
5065 /* If the usual deallocation function is a two-argument whose second
5066 argument is of type `size_t', then we have to pass the size of
5067 the array to the deallocation function, so we will need to store
5068 a cookie. */
5069 fns = lookup_fnfields (TYPE_BINFO (type),
5070 ansi_opname (VEC_DELETE_EXPR),
5071 /*protect=*/0);
5072 /* If there are no `operator []' members, or the lookup is
5073 ambiguous, then we don't need a cookie. */
5074 if (!fns || fns == error_mark_node)
5075 return false;
5076 /* Loop through all of the functions. */
5077 for (fns = BASELINK_FUNCTIONS (fns); fns; fns = OVL_NEXT (fns))
5079 tree fn;
5080 tree second_parm;
5082 /* Select the current function. */
5083 fn = OVL_CURRENT (fns);
5084 /* See if this function is a one-argument delete function. If
5085 it is, then it will be the usual deallocation function. */
5086 second_parm = TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (fn)));
5087 if (second_parm == void_list_node)
5088 return false;
5089 /* Do not consider this function if its second argument is an
5090 ellipsis. */
5091 if (!second_parm)
5092 continue;
5093 /* Otherwise, if we have a two-argument function and the second
5094 argument is `size_t', it will be the usual deallocation
5095 function -- unless there is one-argument function, too. */
5096 if (TREE_CHAIN (second_parm) == void_list_node
5097 && same_type_p (TREE_VALUE (second_parm), size_type_node))
5098 has_two_argument_delete_p = true;
5101 return has_two_argument_delete_p;
5104 /* Finish computing the `literal type' property of class type T.
5106 At this point, we have already processed base classes and
5107 non-static data members. We need to check whether the copy
5108 constructor is trivial, the destructor is trivial, and there
5109 is a trivial default constructor or at least one constexpr
5110 constructor other than the copy constructor. */
5112 static void
5113 finalize_literal_type_property (tree t)
5115 tree fn;
5117 if (cxx_dialect < cxx0x
5118 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t))
5119 CLASSTYPE_LITERAL_P (t) = false;
5120 else if (CLASSTYPE_LITERAL_P (t) && !TYPE_HAS_TRIVIAL_DFLT (t)
5121 && CLASSTYPE_NON_AGGREGATE (t)
5122 && !TYPE_HAS_CONSTEXPR_CTOR (t))
5123 CLASSTYPE_LITERAL_P (t) = false;
5125 if (!CLASSTYPE_LITERAL_P (t))
5126 for (fn = TYPE_METHODS (t); fn; fn = DECL_CHAIN (fn))
5127 if (DECL_DECLARED_CONSTEXPR_P (fn)
5128 && TREE_CODE (fn) != TEMPLATE_DECL
5129 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
5130 && !DECL_CONSTRUCTOR_P (fn))
5132 DECL_DECLARED_CONSTEXPR_P (fn) = false;
5133 if (!DECL_GENERATED_P (fn))
5135 error ("enclosing class of constexpr non-static member "
5136 "function %q+#D is not a literal type", fn);
5137 explain_non_literal_class (t);
5142 /* T is a non-literal type used in a context which requires a constant
5143 expression. Explain why it isn't literal. */
5145 void
5146 explain_non_literal_class (tree t)
5148 static struct pointer_set_t *diagnosed;
5150 if (!CLASS_TYPE_P (t))
5151 return;
5152 t = TYPE_MAIN_VARIANT (t);
5154 if (diagnosed == NULL)
5155 diagnosed = pointer_set_create ();
5156 if (pointer_set_insert (diagnosed, t) != 0)
5157 /* Already explained. */
5158 return;
5160 inform (0, "%q+T is not literal because:", t);
5161 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t))
5162 inform (0, " %q+T has a non-trivial destructor", t);
5163 else if (CLASSTYPE_NON_AGGREGATE (t)
5164 && !TYPE_HAS_TRIVIAL_DFLT (t)
5165 && !TYPE_HAS_CONSTEXPR_CTOR (t))
5167 inform (0, " %q+T is not an aggregate, does not have a trivial "
5168 "default constructor, and has no constexpr constructor that "
5169 "is not a copy or move constructor", t);
5170 if (TYPE_HAS_DEFAULT_CONSTRUCTOR (t)
5171 && !type_has_user_provided_default_constructor (t))
5173 /* Note that we can't simply call locate_ctor because when the
5174 constructor is deleted it just returns NULL_TREE. */
5175 tree fns;
5176 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
5178 tree fn = OVL_CURRENT (fns);
5179 tree parms = TYPE_ARG_TYPES (TREE_TYPE (fn));
5181 parms = skip_artificial_parms_for (fn, parms);
5183 if (sufficient_parms_p (parms))
5185 if (DECL_DELETED_FN (fn))
5186 maybe_explain_implicit_delete (fn);
5187 else
5188 explain_invalid_constexpr_fn (fn);
5189 break;
5194 else
5196 tree binfo, base_binfo, field; int i;
5197 for (binfo = TYPE_BINFO (t), i = 0;
5198 BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
5200 tree basetype = TREE_TYPE (base_binfo);
5201 if (!CLASSTYPE_LITERAL_P (basetype))
5203 inform (0, " base class %qT of %q+T is non-literal",
5204 basetype, t);
5205 explain_non_literal_class (basetype);
5206 return;
5209 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
5211 tree ftype;
5212 if (TREE_CODE (field) != FIELD_DECL)
5213 continue;
5214 ftype = TREE_TYPE (field);
5215 if (!literal_type_p (ftype))
5217 inform (0, " non-static data member %q+D has "
5218 "non-literal type", field);
5219 if (CLASS_TYPE_P (ftype))
5220 explain_non_literal_class (ftype);
5226 /* Check the validity of the bases and members declared in T. Add any
5227 implicitly-generated functions (like copy-constructors and
5228 assignment operators). Compute various flag bits (like
5229 CLASSTYPE_NON_LAYOUT_POD_T) for T. This routine works purely at the C++
5230 level: i.e., independently of the ABI in use. */
5232 static void
5233 check_bases_and_members (tree t)
5235 /* Nonzero if the implicitly generated copy constructor should take
5236 a non-const reference argument. */
5237 int cant_have_const_ctor;
5238 /* Nonzero if the implicitly generated assignment operator
5239 should take a non-const reference argument. */
5240 int no_const_asn_ref;
5241 tree access_decls;
5242 bool saved_complex_asn_ref;
5243 bool saved_nontrivial_dtor;
5244 tree fn;
5246 /* By default, we use const reference arguments and generate default
5247 constructors. */
5248 cant_have_const_ctor = 0;
5249 no_const_asn_ref = 0;
5251 /* Deduce noexcept on destructors. */
5252 if (cxx_dialect >= cxx0x)
5253 deduce_noexcept_on_destructors (t);
5255 /* Check all the base-classes. */
5256 check_bases (t, &cant_have_const_ctor,
5257 &no_const_asn_ref);
5259 /* Check all the method declarations. */
5260 check_methods (t);
5262 /* Save the initial values of these flags which only indicate whether
5263 or not the class has user-provided functions. As we analyze the
5264 bases and members we can set these flags for other reasons. */
5265 saved_complex_asn_ref = TYPE_HAS_COMPLEX_COPY_ASSIGN (t);
5266 saved_nontrivial_dtor = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t);
5268 /* Check all the data member declarations. We cannot call
5269 check_field_decls until we have called check_bases check_methods,
5270 as check_field_decls depends on TYPE_HAS_NONTRIVIAL_DESTRUCTOR
5271 being set appropriately. */
5272 check_field_decls (t, &access_decls,
5273 &cant_have_const_ctor,
5274 &no_const_asn_ref);
5276 /* A nearly-empty class has to be vptr-containing; a nearly empty
5277 class contains just a vptr. */
5278 if (!TYPE_CONTAINS_VPTR_P (t))
5279 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
5281 /* Do some bookkeeping that will guide the generation of implicitly
5282 declared member functions. */
5283 TYPE_HAS_COMPLEX_COPY_CTOR (t) |= TYPE_CONTAINS_VPTR_P (t);
5284 TYPE_HAS_COMPLEX_MOVE_CTOR (t) |= TYPE_CONTAINS_VPTR_P (t);
5285 /* We need to call a constructor for this class if it has a
5286 user-provided constructor, or if the default constructor is going
5287 to initialize the vptr. (This is not an if-and-only-if;
5288 TYPE_NEEDS_CONSTRUCTING is set elsewhere if bases or members
5289 themselves need constructing.) */
5290 TYPE_NEEDS_CONSTRUCTING (t)
5291 |= (type_has_user_provided_constructor (t) || TYPE_CONTAINS_VPTR_P (t));
5292 /* [dcl.init.aggr]
5294 An aggregate is an array or a class with no user-provided
5295 constructors ... and no virtual functions.
5297 Again, other conditions for being an aggregate are checked
5298 elsewhere. */
5299 CLASSTYPE_NON_AGGREGATE (t)
5300 |= (type_has_user_provided_constructor (t) || TYPE_POLYMORPHIC_P (t));
5301 /* This is the C++98/03 definition of POD; it changed in C++0x, but we
5302 retain the old definition internally for ABI reasons. */
5303 CLASSTYPE_NON_LAYOUT_POD_P (t)
5304 |= (CLASSTYPE_NON_AGGREGATE (t)
5305 || saved_nontrivial_dtor || saved_complex_asn_ref);
5306 CLASSTYPE_NON_STD_LAYOUT (t) |= TYPE_CONTAINS_VPTR_P (t);
5307 TYPE_HAS_COMPLEX_COPY_ASSIGN (t) |= TYPE_CONTAINS_VPTR_P (t);
5308 TYPE_HAS_COMPLEX_MOVE_ASSIGN (t) |= TYPE_CONTAINS_VPTR_P (t);
5309 TYPE_HAS_COMPLEX_DFLT (t) |= TYPE_CONTAINS_VPTR_P (t);
5311 /* If the class has no user-declared constructor, but does have
5312 non-static const or reference data members that can never be
5313 initialized, issue a warning. */
5314 if (warn_uninitialized
5315 /* Classes with user-declared constructors are presumed to
5316 initialize these members. */
5317 && !TYPE_HAS_USER_CONSTRUCTOR (t)
5318 /* Aggregates can be initialized with brace-enclosed
5319 initializers. */
5320 && CLASSTYPE_NON_AGGREGATE (t))
5322 tree field;
5324 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
5326 tree type;
5328 if (TREE_CODE (field) != FIELD_DECL
5329 || DECL_INITIAL (field) != NULL_TREE)
5330 continue;
5332 type = TREE_TYPE (field);
5333 if (TREE_CODE (type) == REFERENCE_TYPE)
5334 warning (OPT_Wuninitialized, "non-static reference %q+#D "
5335 "in class without a constructor", field);
5336 else if (CP_TYPE_CONST_P (type)
5337 && (!CLASS_TYPE_P (type)
5338 || !TYPE_HAS_DEFAULT_CONSTRUCTOR (type)))
5339 warning (OPT_Wuninitialized, "non-static const member %q+#D "
5340 "in class without a constructor", field);
5344 /* Synthesize any needed methods. */
5345 add_implicitly_declared_members (t, &access_decls,
5346 cant_have_const_ctor,
5347 no_const_asn_ref);
5349 /* Check defaulted declarations here so we have cant_have_const_ctor
5350 and don't need to worry about clones. */
5351 for (fn = TYPE_METHODS (t); fn; fn = DECL_CHAIN (fn))
5352 if (!DECL_ARTIFICIAL (fn) && DECL_DEFAULTED_IN_CLASS_P (fn))
5354 int copy = copy_fn_p (fn);
5355 if (copy > 0)
5357 bool imp_const_p
5358 = (DECL_CONSTRUCTOR_P (fn) ? !cant_have_const_ctor
5359 : !no_const_asn_ref);
5360 bool fn_const_p = (copy == 2);
5362 if (fn_const_p && !imp_const_p)
5363 /* If the function is defaulted outside the class, we just
5364 give the synthesis error. */
5365 error ("%q+D declared to take const reference, but implicit "
5366 "declaration would take non-const", fn);
5368 defaulted_late_check (fn);
5371 if (LAMBDA_TYPE_P (t))
5373 /* "The closure type associated with a lambda-expression has a deleted
5374 default constructor and a deleted copy assignment operator." */
5375 TYPE_NEEDS_CONSTRUCTING (t) = 1;
5376 TYPE_HAS_COMPLEX_DFLT (t) = 1;
5377 TYPE_HAS_COMPLEX_COPY_ASSIGN (t) = 1;
5378 CLASSTYPE_LAZY_MOVE_ASSIGN (t) = 0;
5380 /* "This class type is not an aggregate." */
5381 CLASSTYPE_NON_AGGREGATE (t) = 1;
5384 /* Compute the 'literal type' property before we
5385 do anything with non-static member functions. */
5386 finalize_literal_type_property (t);
5388 /* Create the in-charge and not-in-charge variants of constructors
5389 and destructors. */
5390 clone_constructors_and_destructors (t);
5392 /* Process the using-declarations. */
5393 for (; access_decls; access_decls = TREE_CHAIN (access_decls))
5394 handle_using_decl (TREE_VALUE (access_decls), t);
5396 /* Build and sort the CLASSTYPE_METHOD_VEC. */
5397 finish_struct_methods (t);
5399 /* Figure out whether or not we will need a cookie when dynamically
5400 allocating an array of this type. */
5401 TYPE_LANG_SPECIFIC (t)->u.c.vec_new_uses_cookie
5402 = type_requires_array_cookie (t);
5405 /* If T needs a pointer to its virtual function table, set TYPE_VFIELD
5406 accordingly. If a new vfield was created (because T doesn't have a
5407 primary base class), then the newly created field is returned. It
5408 is not added to the TYPE_FIELDS list; it is the caller's
5409 responsibility to do that. Accumulate declared virtual functions
5410 on VIRTUALS_P. */
5412 static tree
5413 create_vtable_ptr (tree t, tree* virtuals_p)
5415 tree fn;
5417 /* Collect the virtual functions declared in T. */
5418 for (fn = TYPE_METHODS (t); fn; fn = DECL_CHAIN (fn))
5419 if (DECL_VINDEX (fn) && !DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (fn)
5420 && TREE_CODE (DECL_VINDEX (fn)) != INTEGER_CST)
5422 tree new_virtual = make_node (TREE_LIST);
5424 BV_FN (new_virtual) = fn;
5425 BV_DELTA (new_virtual) = integer_zero_node;
5426 BV_VCALL_INDEX (new_virtual) = NULL_TREE;
5428 TREE_CHAIN (new_virtual) = *virtuals_p;
5429 *virtuals_p = new_virtual;
5432 /* If we couldn't find an appropriate base class, create a new field
5433 here. Even if there weren't any new virtual functions, we might need a
5434 new virtual function table if we're supposed to include vptrs in
5435 all classes that need them. */
5436 if (!TYPE_VFIELD (t) && (*virtuals_p || TYPE_CONTAINS_VPTR_P (t)))
5438 /* We build this decl with vtbl_ptr_type_node, which is a
5439 `vtable_entry_type*'. It might seem more precise to use
5440 `vtable_entry_type (*)[N]' where N is the number of virtual
5441 functions. However, that would require the vtable pointer in
5442 base classes to have a different type than the vtable pointer
5443 in derived classes. We could make that happen, but that
5444 still wouldn't solve all the problems. In particular, the
5445 type-based alias analysis code would decide that assignments
5446 to the base class vtable pointer can't alias assignments to
5447 the derived class vtable pointer, since they have different
5448 types. Thus, in a derived class destructor, where the base
5449 class constructor was inlined, we could generate bad code for
5450 setting up the vtable pointer.
5452 Therefore, we use one type for all vtable pointers. We still
5453 use a type-correct type; it's just doesn't indicate the array
5454 bounds. That's better than using `void*' or some such; it's
5455 cleaner, and it let's the alias analysis code know that these
5456 stores cannot alias stores to void*! */
5457 tree field;
5459 field = build_decl (input_location,
5460 FIELD_DECL, get_vfield_name (t), vtbl_ptr_type_node);
5461 DECL_VIRTUAL_P (field) = 1;
5462 DECL_ARTIFICIAL (field) = 1;
5463 DECL_FIELD_CONTEXT (field) = t;
5464 DECL_FCONTEXT (field) = t;
5465 if (TYPE_PACKED (t))
5466 DECL_PACKED (field) = 1;
5468 TYPE_VFIELD (t) = field;
5470 /* This class is non-empty. */
5471 CLASSTYPE_EMPTY_P (t) = 0;
5473 return field;
5476 return NULL_TREE;
5479 /* Add OFFSET to all base types of BINFO which is a base in the
5480 hierarchy dominated by T.
5482 OFFSET, which is a type offset, is number of bytes. */
5484 static void
5485 propagate_binfo_offsets (tree binfo, tree offset)
5487 int i;
5488 tree primary_binfo;
5489 tree base_binfo;
5491 /* Update BINFO's offset. */
5492 BINFO_OFFSET (binfo)
5493 = convert (sizetype,
5494 size_binop (PLUS_EXPR,
5495 convert (ssizetype, BINFO_OFFSET (binfo)),
5496 offset));
5498 /* Find the primary base class. */
5499 primary_binfo = get_primary_binfo (binfo);
5501 if (primary_binfo && BINFO_INHERITANCE_CHAIN (primary_binfo) == binfo)
5502 propagate_binfo_offsets (primary_binfo, offset);
5504 /* Scan all of the bases, pushing the BINFO_OFFSET adjust
5505 downwards. */
5506 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
5508 /* Don't do the primary base twice. */
5509 if (base_binfo == primary_binfo)
5510 continue;
5512 if (BINFO_VIRTUAL_P (base_binfo))
5513 continue;
5515 propagate_binfo_offsets (base_binfo, offset);
5519 /* Set BINFO_OFFSET for all of the virtual bases for RLI->T. Update
5520 TYPE_ALIGN and TYPE_SIZE for T. OFFSETS gives the location of
5521 empty subobjects of T. */
5523 static void
5524 layout_virtual_bases (record_layout_info rli, splay_tree offsets)
5526 tree vbase;
5527 tree t = rli->t;
5528 bool first_vbase = true;
5529 tree *next_field;
5531 if (BINFO_N_BASE_BINFOS (TYPE_BINFO (t)) == 0)
5532 return;
5534 if (!abi_version_at_least(2))
5536 /* In G++ 3.2, we incorrectly rounded the size before laying out
5537 the virtual bases. */
5538 finish_record_layout (rli, /*free_p=*/false);
5539 #ifdef STRUCTURE_SIZE_BOUNDARY
5540 /* Packed structures don't need to have minimum size. */
5541 if (! TYPE_PACKED (t))
5542 TYPE_ALIGN (t) = MAX (TYPE_ALIGN (t), (unsigned) STRUCTURE_SIZE_BOUNDARY);
5543 #endif
5544 rli->offset = TYPE_SIZE_UNIT (t);
5545 rli->bitpos = bitsize_zero_node;
5546 rli->record_align = TYPE_ALIGN (t);
5549 /* Find the last field. The artificial fields created for virtual
5550 bases will go after the last extant field to date. */
5551 next_field = &TYPE_FIELDS (t);
5552 while (*next_field)
5553 next_field = &DECL_CHAIN (*next_field);
5555 /* Go through the virtual bases, allocating space for each virtual
5556 base that is not already a primary base class. These are
5557 allocated in inheritance graph order. */
5558 for (vbase = TYPE_BINFO (t); vbase; vbase = TREE_CHAIN (vbase))
5560 if (!BINFO_VIRTUAL_P (vbase))
5561 continue;
5563 if (!BINFO_PRIMARY_P (vbase))
5565 tree basetype = TREE_TYPE (vbase);
5567 /* This virtual base is not a primary base of any class in the
5568 hierarchy, so we have to add space for it. */
5569 next_field = build_base_field (rli, vbase,
5570 offsets, next_field);
5572 /* If the first virtual base might have been placed at a
5573 lower address, had we started from CLASSTYPE_SIZE, rather
5574 than TYPE_SIZE, issue a warning. There can be both false
5575 positives and false negatives from this warning in rare
5576 cases; to deal with all the possibilities would probably
5577 require performing both layout algorithms and comparing
5578 the results which is not particularly tractable. */
5579 if (warn_abi
5580 && first_vbase
5581 && (tree_int_cst_lt
5582 (size_binop (CEIL_DIV_EXPR,
5583 round_up_loc (input_location,
5584 CLASSTYPE_SIZE (t),
5585 CLASSTYPE_ALIGN (basetype)),
5586 bitsize_unit_node),
5587 BINFO_OFFSET (vbase))))
5588 warning (OPT_Wabi,
5589 "offset of virtual base %qT is not ABI-compliant and "
5590 "may change in a future version of GCC",
5591 basetype);
5593 first_vbase = false;
5598 /* Returns the offset of the byte just past the end of the base class
5599 BINFO. */
5601 static tree
5602 end_of_base (tree binfo)
5604 tree size;
5606 if (!CLASSTYPE_AS_BASE (BINFO_TYPE (binfo)))
5607 size = TYPE_SIZE_UNIT (char_type_node);
5608 else if (is_empty_class (BINFO_TYPE (binfo)))
5609 /* An empty class has zero CLASSTYPE_SIZE_UNIT, but we need to
5610 allocate some space for it. It cannot have virtual bases, so
5611 TYPE_SIZE_UNIT is fine. */
5612 size = TYPE_SIZE_UNIT (BINFO_TYPE (binfo));
5613 else
5614 size = CLASSTYPE_SIZE_UNIT (BINFO_TYPE (binfo));
5616 return size_binop (PLUS_EXPR, BINFO_OFFSET (binfo), size);
5619 /* Returns the offset of the byte just past the end of the base class
5620 with the highest offset in T. If INCLUDE_VIRTUALS_P is zero, then
5621 only non-virtual bases are included. */
5623 static tree
5624 end_of_class (tree t, int include_virtuals_p)
5626 tree result = size_zero_node;
5627 vec<tree, va_gc> *vbases;
5628 tree binfo;
5629 tree base_binfo;
5630 tree offset;
5631 int i;
5633 for (binfo = TYPE_BINFO (t), i = 0;
5634 BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
5636 if (!include_virtuals_p
5637 && BINFO_VIRTUAL_P (base_binfo)
5638 && (!BINFO_PRIMARY_P (base_binfo)
5639 || BINFO_INHERITANCE_CHAIN (base_binfo) != TYPE_BINFO (t)))
5640 continue;
5642 offset = end_of_base (base_binfo);
5643 if (INT_CST_LT_UNSIGNED (result, offset))
5644 result = offset;
5647 /* G++ 3.2 did not check indirect virtual bases. */
5648 if (abi_version_at_least (2) && include_virtuals_p)
5649 for (vbases = CLASSTYPE_VBASECLASSES (t), i = 0;
5650 vec_safe_iterate (vbases, i, &base_binfo); i++)
5652 offset = end_of_base (base_binfo);
5653 if (INT_CST_LT_UNSIGNED (result, offset))
5654 result = offset;
5657 return result;
5660 /* Warn about bases of T that are inaccessible because they are
5661 ambiguous. For example:
5663 struct S {};
5664 struct T : public S {};
5665 struct U : public S, public T {};
5667 Here, `(S*) new U' is not allowed because there are two `S'
5668 subobjects of U. */
5670 static void
5671 warn_about_ambiguous_bases (tree t)
5673 int i;
5674 vec<tree, va_gc> *vbases;
5675 tree basetype;
5676 tree binfo;
5677 tree base_binfo;
5679 /* If there are no repeated bases, nothing can be ambiguous. */
5680 if (!CLASSTYPE_REPEATED_BASE_P (t))
5681 return;
5683 /* Check direct bases. */
5684 for (binfo = TYPE_BINFO (t), i = 0;
5685 BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
5687 basetype = BINFO_TYPE (base_binfo);
5689 if (!uniquely_derived_from_p (basetype, t))
5690 warning (0, "direct base %qT inaccessible in %qT due to ambiguity",
5691 basetype, t);
5694 /* Check for ambiguous virtual bases. */
5695 if (extra_warnings)
5696 for (vbases = CLASSTYPE_VBASECLASSES (t), i = 0;
5697 vec_safe_iterate (vbases, i, &binfo); i++)
5699 basetype = BINFO_TYPE (binfo);
5701 if (!uniquely_derived_from_p (basetype, t))
5702 warning (OPT_Wextra, "virtual base %qT inaccessible in %qT due "
5703 "to ambiguity", basetype, t);
5707 /* Compare two INTEGER_CSTs K1 and K2. */
5709 static int
5710 splay_tree_compare_integer_csts (splay_tree_key k1, splay_tree_key k2)
5712 return tree_int_cst_compare ((tree) k1, (tree) k2);
5715 /* Increase the size indicated in RLI to account for empty classes
5716 that are "off the end" of the class. */
5718 static void
5719 include_empty_classes (record_layout_info rli)
5721 tree eoc;
5722 tree rli_size;
5724 /* It might be the case that we grew the class to allocate a
5725 zero-sized base class. That won't be reflected in RLI, yet,
5726 because we are willing to overlay multiple bases at the same
5727 offset. However, now we need to make sure that RLI is big enough
5728 to reflect the entire class. */
5729 eoc = end_of_class (rli->t,
5730 CLASSTYPE_AS_BASE (rli->t) != NULL_TREE);
5731 rli_size = rli_size_unit_so_far (rli);
5732 if (TREE_CODE (rli_size) == INTEGER_CST
5733 && INT_CST_LT_UNSIGNED (rli_size, eoc))
5735 if (!abi_version_at_least (2))
5736 /* In version 1 of the ABI, the size of a class that ends with
5737 a bitfield was not rounded up to a whole multiple of a
5738 byte. Because rli_size_unit_so_far returns only the number
5739 of fully allocated bytes, any extra bits were not included
5740 in the size. */
5741 rli->bitpos = round_down (rli->bitpos, BITS_PER_UNIT);
5742 else
5743 /* The size should have been rounded to a whole byte. */
5744 gcc_assert (tree_int_cst_equal
5745 (rli->bitpos, round_down (rli->bitpos, BITS_PER_UNIT)));
5746 rli->bitpos
5747 = size_binop (PLUS_EXPR,
5748 rli->bitpos,
5749 size_binop (MULT_EXPR,
5750 convert (bitsizetype,
5751 size_binop (MINUS_EXPR,
5752 eoc, rli_size)),
5753 bitsize_int (BITS_PER_UNIT)));
5754 normalize_rli (rli);
5758 /* Calculate the TYPE_SIZE, TYPE_ALIGN, etc for T. Calculate
5759 BINFO_OFFSETs for all of the base-classes. Position the vtable
5760 pointer. Accumulate declared virtual functions on VIRTUALS_P. */
5762 static void
5763 layout_class_type (tree t, tree *virtuals_p)
5765 tree non_static_data_members;
5766 tree field;
5767 tree vptr;
5768 record_layout_info rli;
5769 /* Maps offsets (represented as INTEGER_CSTs) to a TREE_LIST of
5770 types that appear at that offset. */
5771 splay_tree empty_base_offsets;
5772 /* True if the last field layed out was a bit-field. */
5773 bool last_field_was_bitfield = false;
5774 /* The location at which the next field should be inserted. */
5775 tree *next_field;
5776 /* T, as a base class. */
5777 tree base_t;
5779 /* Keep track of the first non-static data member. */
5780 non_static_data_members = TYPE_FIELDS (t);
5782 /* Start laying out the record. */
5783 rli = start_record_layout (t);
5785 /* Mark all the primary bases in the hierarchy. */
5786 determine_primary_bases (t);
5788 /* Create a pointer to our virtual function table. */
5789 vptr = create_vtable_ptr (t, virtuals_p);
5791 /* The vptr is always the first thing in the class. */
5792 if (vptr)
5794 DECL_CHAIN (vptr) = TYPE_FIELDS (t);
5795 TYPE_FIELDS (t) = vptr;
5796 next_field = &DECL_CHAIN (vptr);
5797 place_field (rli, vptr);
5799 else
5800 next_field = &TYPE_FIELDS (t);
5802 /* Build FIELD_DECLs for all of the non-virtual base-types. */
5803 empty_base_offsets = splay_tree_new (splay_tree_compare_integer_csts,
5804 NULL, NULL);
5805 build_base_fields (rli, empty_base_offsets, next_field);
5807 /* Layout the non-static data members. */
5808 for (field = non_static_data_members; field; field = DECL_CHAIN (field))
5810 tree type;
5811 tree padding;
5813 /* We still pass things that aren't non-static data members to
5814 the back end, in case it wants to do something with them. */
5815 if (TREE_CODE (field) != FIELD_DECL)
5817 place_field (rli, field);
5818 /* If the static data member has incomplete type, keep track
5819 of it so that it can be completed later. (The handling
5820 of pending statics in finish_record_layout is
5821 insufficient; consider:
5823 struct S1;
5824 struct S2 { static S1 s1; };
5826 At this point, finish_record_layout will be called, but
5827 S1 is still incomplete.) */
5828 if (TREE_CODE (field) == VAR_DECL)
5830 maybe_register_incomplete_var (field);
5831 /* The visibility of static data members is determined
5832 at their point of declaration, not their point of
5833 definition. */
5834 determine_visibility (field);
5836 continue;
5839 type = TREE_TYPE (field);
5840 if (type == error_mark_node)
5841 continue;
5843 padding = NULL_TREE;
5845 /* If this field is a bit-field whose width is greater than its
5846 type, then there are some special rules for allocating
5847 it. */
5848 if (DECL_C_BIT_FIELD (field)
5849 && INT_CST_LT (TYPE_SIZE (type), DECL_SIZE (field)))
5851 unsigned int itk;
5852 tree integer_type;
5853 bool was_unnamed_p = false;
5854 /* We must allocate the bits as if suitably aligned for the
5855 longest integer type that fits in this many bits. type
5856 of the field. Then, we are supposed to use the left over
5857 bits as additional padding. */
5858 for (itk = itk_char; itk != itk_none; ++itk)
5859 if (integer_types[itk] != NULL_TREE
5860 && (INT_CST_LT (size_int (MAX_FIXED_MODE_SIZE),
5861 TYPE_SIZE (integer_types[itk]))
5862 || INT_CST_LT (DECL_SIZE (field),
5863 TYPE_SIZE (integer_types[itk]))))
5864 break;
5866 /* ITK now indicates a type that is too large for the
5867 field. We have to back up by one to find the largest
5868 type that fits. */
5871 --itk;
5872 integer_type = integer_types[itk];
5873 } while (itk > 0 && integer_type == NULL_TREE);
5875 /* Figure out how much additional padding is required. GCC
5876 3.2 always created a padding field, even if it had zero
5877 width. */
5878 if (!abi_version_at_least (2)
5879 || INT_CST_LT (TYPE_SIZE (integer_type), DECL_SIZE (field)))
5881 if (abi_version_at_least (2) && TREE_CODE (t) == UNION_TYPE)
5882 /* In a union, the padding field must have the full width
5883 of the bit-field; all fields start at offset zero. */
5884 padding = DECL_SIZE (field);
5885 else
5887 if (TREE_CODE (t) == UNION_TYPE)
5888 warning (OPT_Wabi, "size assigned to %qT may not be "
5889 "ABI-compliant and may change in a future "
5890 "version of GCC",
5892 padding = size_binop (MINUS_EXPR, DECL_SIZE (field),
5893 TYPE_SIZE (integer_type));
5896 #ifdef PCC_BITFIELD_TYPE_MATTERS
5897 /* An unnamed bitfield does not normally affect the
5898 alignment of the containing class on a target where
5899 PCC_BITFIELD_TYPE_MATTERS. But, the C++ ABI does not
5900 make any exceptions for unnamed bitfields when the
5901 bitfields are longer than their types. Therefore, we
5902 temporarily give the field a name. */
5903 if (PCC_BITFIELD_TYPE_MATTERS && !DECL_NAME (field))
5905 was_unnamed_p = true;
5906 DECL_NAME (field) = make_anon_name ();
5908 #endif
5909 DECL_SIZE (field) = TYPE_SIZE (integer_type);
5910 DECL_ALIGN (field) = TYPE_ALIGN (integer_type);
5911 DECL_USER_ALIGN (field) = TYPE_USER_ALIGN (integer_type);
5912 layout_nonempty_base_or_field (rli, field, NULL_TREE,
5913 empty_base_offsets);
5914 if (was_unnamed_p)
5915 DECL_NAME (field) = NULL_TREE;
5916 /* Now that layout has been performed, set the size of the
5917 field to the size of its declared type; the rest of the
5918 field is effectively invisible. */
5919 DECL_SIZE (field) = TYPE_SIZE (type);
5920 /* We must also reset the DECL_MODE of the field. */
5921 if (abi_version_at_least (2))
5922 DECL_MODE (field) = TYPE_MODE (type);
5923 else if (warn_abi
5924 && DECL_MODE (field) != TYPE_MODE (type))
5925 /* Versions of G++ before G++ 3.4 did not reset the
5926 DECL_MODE. */
5927 warning (OPT_Wabi,
5928 "the offset of %qD may not be ABI-compliant and may "
5929 "change in a future version of GCC", field);
5931 else
5932 layout_nonempty_base_or_field (rli, field, NULL_TREE,
5933 empty_base_offsets);
5935 /* Remember the location of any empty classes in FIELD. */
5936 if (abi_version_at_least (2))
5937 record_subobject_offsets (TREE_TYPE (field),
5938 byte_position(field),
5939 empty_base_offsets,
5940 /*is_data_member=*/true);
5942 /* If a bit-field does not immediately follow another bit-field,
5943 and yet it starts in the middle of a byte, we have failed to
5944 comply with the ABI. */
5945 if (warn_abi
5946 && DECL_C_BIT_FIELD (field)
5947 /* The TREE_NO_WARNING flag gets set by Objective-C when
5948 laying out an Objective-C class. The ObjC ABI differs
5949 from the C++ ABI, and so we do not want a warning
5950 here. */
5951 && !TREE_NO_WARNING (field)
5952 && !last_field_was_bitfield
5953 && !integer_zerop (size_binop (TRUNC_MOD_EXPR,
5954 DECL_FIELD_BIT_OFFSET (field),
5955 bitsize_unit_node)))
5956 warning (OPT_Wabi, "offset of %q+D is not ABI-compliant and may "
5957 "change in a future version of GCC", field);
5959 /* G++ used to use DECL_FIELD_OFFSET as if it were the byte
5960 offset of the field. */
5961 if (warn_abi
5962 && !abi_version_at_least (2)
5963 && !tree_int_cst_equal (DECL_FIELD_OFFSET (field),
5964 byte_position (field))
5965 && contains_empty_class_p (TREE_TYPE (field)))
5966 warning (OPT_Wabi, "%q+D contains empty classes which may cause base "
5967 "classes to be placed at different locations in a "
5968 "future version of GCC", field);
5970 /* The middle end uses the type of expressions to determine the
5971 possible range of expression values. In order to optimize
5972 "x.i > 7" to "false" for a 2-bit bitfield "i", the middle end
5973 must be made aware of the width of "i", via its type.
5975 Because C++ does not have integer types of arbitrary width,
5976 we must (for the purposes of the front end) convert from the
5977 type assigned here to the declared type of the bitfield
5978 whenever a bitfield expression is used as an rvalue.
5979 Similarly, when assigning a value to a bitfield, the value
5980 must be converted to the type given the bitfield here. */
5981 if (DECL_C_BIT_FIELD (field))
5983 unsigned HOST_WIDE_INT width;
5984 tree ftype = TREE_TYPE (field);
5985 width = tree_low_cst (DECL_SIZE (field), /*unsignedp=*/1);
5986 if (width != TYPE_PRECISION (ftype))
5988 TREE_TYPE (field)
5989 = c_build_bitfield_integer_type (width,
5990 TYPE_UNSIGNED (ftype));
5991 TREE_TYPE (field)
5992 = cp_build_qualified_type (TREE_TYPE (field),
5993 cp_type_quals (ftype));
5997 /* If we needed additional padding after this field, add it
5998 now. */
5999 if (padding)
6001 tree padding_field;
6003 padding_field = build_decl (input_location,
6004 FIELD_DECL,
6005 NULL_TREE,
6006 char_type_node);
6007 DECL_BIT_FIELD (padding_field) = 1;
6008 DECL_SIZE (padding_field) = padding;
6009 DECL_CONTEXT (padding_field) = t;
6010 DECL_ARTIFICIAL (padding_field) = 1;
6011 DECL_IGNORED_P (padding_field) = 1;
6012 layout_nonempty_base_or_field (rli, padding_field,
6013 NULL_TREE,
6014 empty_base_offsets);
6017 last_field_was_bitfield = DECL_C_BIT_FIELD (field);
6020 if (abi_version_at_least (2) && !integer_zerop (rli->bitpos))
6022 /* Make sure that we are on a byte boundary so that the size of
6023 the class without virtual bases will always be a round number
6024 of bytes. */
6025 rli->bitpos = round_up_loc (input_location, rli->bitpos, BITS_PER_UNIT);
6026 normalize_rli (rli);
6029 /* G++ 3.2 does not allow virtual bases to be overlaid with tail
6030 padding. */
6031 if (!abi_version_at_least (2))
6032 include_empty_classes(rli);
6034 /* Delete all zero-width bit-fields from the list of fields. Now
6035 that the type is laid out they are no longer important. */
6036 remove_zero_width_bit_fields (t);
6038 /* Create the version of T used for virtual bases. We do not use
6039 make_class_type for this version; this is an artificial type. For
6040 a POD type, we just reuse T. */
6041 if (CLASSTYPE_NON_LAYOUT_POD_P (t) || CLASSTYPE_EMPTY_P (t))
6043 base_t = make_node (TREE_CODE (t));
6045 /* Set the size and alignment for the new type. In G++ 3.2, all
6046 empty classes were considered to have size zero when used as
6047 base classes. */
6048 if (!abi_version_at_least (2) && CLASSTYPE_EMPTY_P (t))
6050 TYPE_SIZE (base_t) = bitsize_zero_node;
6051 TYPE_SIZE_UNIT (base_t) = size_zero_node;
6052 if (warn_abi && !integer_zerop (rli_size_unit_so_far (rli)))
6053 warning (OPT_Wabi,
6054 "layout of classes derived from empty class %qT "
6055 "may change in a future version of GCC",
6058 else
6060 tree eoc;
6062 /* If the ABI version is not at least two, and the last
6063 field was a bit-field, RLI may not be on a byte
6064 boundary. In particular, rli_size_unit_so_far might
6065 indicate the last complete byte, while rli_size_so_far
6066 indicates the total number of bits used. Therefore,
6067 rli_size_so_far, rather than rli_size_unit_so_far, is
6068 used to compute TYPE_SIZE_UNIT. */
6069 eoc = end_of_class (t, /*include_virtuals_p=*/0);
6070 TYPE_SIZE_UNIT (base_t)
6071 = size_binop (MAX_EXPR,
6072 convert (sizetype,
6073 size_binop (CEIL_DIV_EXPR,
6074 rli_size_so_far (rli),
6075 bitsize_int (BITS_PER_UNIT))),
6076 eoc);
6077 TYPE_SIZE (base_t)
6078 = size_binop (MAX_EXPR,
6079 rli_size_so_far (rli),
6080 size_binop (MULT_EXPR,
6081 convert (bitsizetype, eoc),
6082 bitsize_int (BITS_PER_UNIT)));
6084 TYPE_ALIGN (base_t) = rli->record_align;
6085 TYPE_USER_ALIGN (base_t) = TYPE_USER_ALIGN (t);
6087 /* Copy the fields from T. */
6088 next_field = &TYPE_FIELDS (base_t);
6089 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
6090 if (TREE_CODE (field) == FIELD_DECL)
6092 *next_field = build_decl (input_location,
6093 FIELD_DECL,
6094 DECL_NAME (field),
6095 TREE_TYPE (field));
6096 DECL_CONTEXT (*next_field) = base_t;
6097 DECL_FIELD_OFFSET (*next_field) = DECL_FIELD_OFFSET (field);
6098 DECL_FIELD_BIT_OFFSET (*next_field)
6099 = DECL_FIELD_BIT_OFFSET (field);
6100 DECL_SIZE (*next_field) = DECL_SIZE (field);
6101 DECL_MODE (*next_field) = DECL_MODE (field);
6102 next_field = &DECL_CHAIN (*next_field);
6105 /* Record the base version of the type. */
6106 CLASSTYPE_AS_BASE (t) = base_t;
6107 TYPE_CONTEXT (base_t) = t;
6109 else
6110 CLASSTYPE_AS_BASE (t) = t;
6112 /* Every empty class contains an empty class. */
6113 if (CLASSTYPE_EMPTY_P (t))
6114 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) = 1;
6116 /* Set the TYPE_DECL for this type to contain the right
6117 value for DECL_OFFSET, so that we can use it as part
6118 of a COMPONENT_REF for multiple inheritance. */
6119 layout_decl (TYPE_MAIN_DECL (t), 0);
6121 /* Now fix up any virtual base class types that we left lying
6122 around. We must get these done before we try to lay out the
6123 virtual function table. As a side-effect, this will remove the
6124 base subobject fields. */
6125 layout_virtual_bases (rli, empty_base_offsets);
6127 /* Make sure that empty classes are reflected in RLI at this
6128 point. */
6129 include_empty_classes(rli);
6131 /* Make sure not to create any structures with zero size. */
6132 if (integer_zerop (rli_size_unit_so_far (rli)) && CLASSTYPE_EMPTY_P (t))
6133 place_field (rli,
6134 build_decl (input_location,
6135 FIELD_DECL, NULL_TREE, char_type_node));
6137 /* If this is a non-POD, declaring it packed makes a difference to how it
6138 can be used as a field; don't let finalize_record_size undo it. */
6139 if (TYPE_PACKED (t) && !layout_pod_type_p (t))
6140 rli->packed_maybe_necessary = true;
6142 /* Let the back end lay out the type. */
6143 finish_record_layout (rli, /*free_p=*/true);
6145 /* Warn about bases that can't be talked about due to ambiguity. */
6146 warn_about_ambiguous_bases (t);
6148 /* Now that we're done with layout, give the base fields the real types. */
6149 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
6150 if (DECL_ARTIFICIAL (field) && IS_FAKE_BASE_TYPE (TREE_TYPE (field)))
6151 TREE_TYPE (field) = TYPE_CONTEXT (TREE_TYPE (field));
6153 /* Clean up. */
6154 splay_tree_delete (empty_base_offsets);
6156 if (CLASSTYPE_EMPTY_P (t)
6157 && tree_int_cst_lt (sizeof_biggest_empty_class,
6158 TYPE_SIZE_UNIT (t)))
6159 sizeof_biggest_empty_class = TYPE_SIZE_UNIT (t);
6162 /* Determine the "key method" for the class type indicated by TYPE,
6163 and set CLASSTYPE_KEY_METHOD accordingly. */
6165 void
6166 determine_key_method (tree type)
6168 tree method;
6170 if (TYPE_FOR_JAVA (type)
6171 || processing_template_decl
6172 || CLASSTYPE_TEMPLATE_INSTANTIATION (type)
6173 || CLASSTYPE_INTERFACE_KNOWN (type))
6174 return;
6176 /* The key method is the first non-pure virtual function that is not
6177 inline at the point of class definition. On some targets the
6178 key function may not be inline; those targets should not call
6179 this function until the end of the translation unit. */
6180 for (method = TYPE_METHODS (type); method != NULL_TREE;
6181 method = DECL_CHAIN (method))
6182 if (DECL_VINDEX (method) != NULL_TREE
6183 && ! DECL_DECLARED_INLINE_P (method)
6184 && ! DECL_PURE_VIRTUAL_P (method))
6186 CLASSTYPE_KEY_METHOD (type) = method;
6187 break;
6190 return;
6194 /* Allocate and return an instance of struct sorted_fields_type with
6195 N fields. */
6197 static struct sorted_fields_type *
6198 sorted_fields_type_new (int n)
6200 struct sorted_fields_type *sft;
6201 sft = ggc_alloc_sorted_fields_type (sizeof (struct sorted_fields_type)
6202 + n * sizeof (tree));
6203 sft->len = n;
6205 return sft;
6209 /* Perform processing required when the definition of T (a class type)
6210 is complete. */
6212 void
6213 finish_struct_1 (tree t)
6215 tree x;
6216 /* A TREE_LIST. The TREE_VALUE of each node is a FUNCTION_DECL. */
6217 tree virtuals = NULL_TREE;
6219 if (COMPLETE_TYPE_P (t))
6221 gcc_assert (MAYBE_CLASS_TYPE_P (t));
6222 error ("redefinition of %q#T", t);
6223 popclass ();
6224 return;
6227 /* If this type was previously laid out as a forward reference,
6228 make sure we lay it out again. */
6229 TYPE_SIZE (t) = NULL_TREE;
6230 CLASSTYPE_PRIMARY_BINFO (t) = NULL_TREE;
6232 /* Make assumptions about the class; we'll reset the flags if
6233 necessary. */
6234 CLASSTYPE_EMPTY_P (t) = 1;
6235 CLASSTYPE_NEARLY_EMPTY_P (t) = 1;
6236 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) = 0;
6237 CLASSTYPE_LITERAL_P (t) = true;
6239 /* Do end-of-class semantic processing: checking the validity of the
6240 bases and members and add implicitly generated methods. */
6241 check_bases_and_members (t);
6243 /* Find the key method. */
6244 if (TYPE_CONTAINS_VPTR_P (t))
6246 /* The Itanium C++ ABI permits the key method to be chosen when
6247 the class is defined -- even though the key method so
6248 selected may later turn out to be an inline function. On
6249 some systems (such as ARM Symbian OS) the key method cannot
6250 be determined until the end of the translation unit. On such
6251 systems, we leave CLASSTYPE_KEY_METHOD set to NULL, which
6252 will cause the class to be added to KEYED_CLASSES. Then, in
6253 finish_file we will determine the key method. */
6254 if (targetm.cxx.key_method_may_be_inline ())
6255 determine_key_method (t);
6257 /* If a polymorphic class has no key method, we may emit the vtable
6258 in every translation unit where the class definition appears. */
6259 if (CLASSTYPE_KEY_METHOD (t) == NULL_TREE)
6260 keyed_classes = tree_cons (NULL_TREE, t, keyed_classes);
6263 /* Layout the class itself. */
6264 layout_class_type (t, &virtuals);
6265 if (CLASSTYPE_AS_BASE (t) != t)
6266 /* We use the base type for trivial assignments, and hence it
6267 needs a mode. */
6268 compute_record_mode (CLASSTYPE_AS_BASE (t));
6270 virtuals = modify_all_vtables (t, nreverse (virtuals));
6272 /* If necessary, create the primary vtable for this class. */
6273 if (virtuals || TYPE_CONTAINS_VPTR_P (t))
6275 /* We must enter these virtuals into the table. */
6276 if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t))
6277 build_primary_vtable (NULL_TREE, t);
6278 else if (! BINFO_NEW_VTABLE_MARKED (TYPE_BINFO (t)))
6279 /* Here we know enough to change the type of our virtual
6280 function table, but we will wait until later this function. */
6281 build_primary_vtable (CLASSTYPE_PRIMARY_BINFO (t), t);
6283 /* If we're warning about ABI tags, check the types of the new
6284 virtual functions. */
6285 if (warn_abi_tag)
6286 for (tree v = virtuals; v; v = TREE_CHAIN (v))
6287 check_abi_tags (t, TREE_VALUE (v));
6290 if (TYPE_CONTAINS_VPTR_P (t))
6292 int vindex;
6293 tree fn;
6295 if (BINFO_VTABLE (TYPE_BINFO (t)))
6296 gcc_assert (DECL_VIRTUAL_P (BINFO_VTABLE (TYPE_BINFO (t))));
6297 if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t))
6298 gcc_assert (BINFO_VIRTUALS (TYPE_BINFO (t)) == NULL_TREE);
6300 /* Add entries for virtual functions introduced by this class. */
6301 BINFO_VIRTUALS (TYPE_BINFO (t))
6302 = chainon (BINFO_VIRTUALS (TYPE_BINFO (t)), virtuals);
6304 /* Set DECL_VINDEX for all functions declared in this class. */
6305 for (vindex = 0, fn = BINFO_VIRTUALS (TYPE_BINFO (t));
6307 fn = TREE_CHAIN (fn),
6308 vindex += (TARGET_VTABLE_USES_DESCRIPTORS
6309 ? TARGET_VTABLE_USES_DESCRIPTORS : 1))
6311 tree fndecl = BV_FN (fn);
6313 if (DECL_THUNK_P (fndecl))
6314 /* A thunk. We should never be calling this entry directly
6315 from this vtable -- we'd use the entry for the non
6316 thunk base function. */
6317 DECL_VINDEX (fndecl) = NULL_TREE;
6318 else if (TREE_CODE (DECL_VINDEX (fndecl)) != INTEGER_CST)
6319 DECL_VINDEX (fndecl) = build_int_cst (NULL_TREE, vindex);
6323 finish_struct_bits (t);
6324 set_method_tm_attributes (t);
6326 /* Complete the rtl for any static member objects of the type we're
6327 working on. */
6328 for (x = TYPE_FIELDS (t); x; x = DECL_CHAIN (x))
6329 if (TREE_CODE (x) == VAR_DECL && TREE_STATIC (x)
6330 && TREE_TYPE (x) != error_mark_node
6331 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (x)), t))
6332 DECL_MODE (x) = TYPE_MODE (t);
6334 /* Done with FIELDS...now decide whether to sort these for
6335 faster lookups later.
6337 We use a small number because most searches fail (succeeding
6338 ultimately as the search bores through the inheritance
6339 hierarchy), and we want this failure to occur quickly. */
6341 insert_into_classtype_sorted_fields (TYPE_FIELDS (t), t, 8);
6343 /* Complain if one of the field types requires lower visibility. */
6344 constrain_class_visibility (t);
6346 /* Make the rtl for any new vtables we have created, and unmark
6347 the base types we marked. */
6348 finish_vtbls (t);
6350 /* Build the VTT for T. */
6351 build_vtt (t);
6353 /* This warning does not make sense for Java classes, since they
6354 cannot have destructors. */
6355 if (!TYPE_FOR_JAVA (t) && warn_nonvdtor && TYPE_POLYMORPHIC_P (t))
6357 tree dtor;
6359 dtor = CLASSTYPE_DESTRUCTORS (t);
6360 if (/* An implicitly declared destructor is always public. And,
6361 if it were virtual, we would have created it by now. */
6362 !dtor
6363 || (!DECL_VINDEX (dtor)
6364 && (/* public non-virtual */
6365 (!TREE_PRIVATE (dtor) && !TREE_PROTECTED (dtor))
6366 || (/* non-public non-virtual with friends */
6367 (TREE_PRIVATE (dtor) || TREE_PROTECTED (dtor))
6368 && (CLASSTYPE_FRIEND_CLASSES (t)
6369 || DECL_FRIENDLIST (TYPE_MAIN_DECL (t)))))))
6370 warning (OPT_Wnon_virtual_dtor,
6371 "%q#T has virtual functions and accessible"
6372 " non-virtual destructor", t);
6375 complete_vars (t);
6377 if (warn_overloaded_virtual)
6378 warn_hidden (t);
6380 /* Class layout, assignment of virtual table slots, etc., is now
6381 complete. Give the back end a chance to tweak the visibility of
6382 the class or perform any other required target modifications. */
6383 targetm.cxx.adjust_class_at_definition (t);
6385 maybe_suppress_debug_info (t);
6387 dump_class_hierarchy (t);
6389 /* Finish debugging output for this type. */
6390 rest_of_type_compilation (t, ! LOCAL_CLASS_P (t));
6392 if (TYPE_TRANSPARENT_AGGR (t))
6394 tree field = first_field (t);
6395 if (field == NULL_TREE || error_operand_p (field))
6397 error ("type transparent %q#T does not have any fields", t);
6398 TYPE_TRANSPARENT_AGGR (t) = 0;
6400 else if (DECL_ARTIFICIAL (field))
6402 if (DECL_FIELD_IS_BASE (field))
6403 error ("type transparent class %qT has base classes", t);
6404 else
6406 gcc_checking_assert (DECL_VIRTUAL_P (field));
6407 error ("type transparent class %qT has virtual functions", t);
6409 TYPE_TRANSPARENT_AGGR (t) = 0;
6411 else if (TYPE_MODE (t) != DECL_MODE (field))
6413 error ("type transparent %q#T cannot be made transparent because "
6414 "the type of the first field has a different ABI from the "
6415 "class overall", t);
6416 TYPE_TRANSPARENT_AGGR (t) = 0;
6421 /* Insert FIELDS into T for the sorted case if the FIELDS count is
6422 equal to THRESHOLD or greater than THRESHOLD. */
6424 static void
6425 insert_into_classtype_sorted_fields (tree fields, tree t, int threshold)
6427 int n_fields = count_fields (fields);
6428 if (n_fields >= threshold)
6430 struct sorted_fields_type *field_vec = sorted_fields_type_new (n_fields);
6431 add_fields_to_record_type (fields, field_vec, 0);
6432 qsort (field_vec->elts, n_fields, sizeof (tree), field_decl_cmp);
6433 CLASSTYPE_SORTED_FIELDS (t) = field_vec;
6437 /* Insert lately defined enum ENUMTYPE into T for the sorted case. */
6439 void
6440 insert_late_enum_def_into_classtype_sorted_fields (tree enumtype, tree t)
6442 struct sorted_fields_type *sorted_fields = CLASSTYPE_SORTED_FIELDS (t);
6443 if (sorted_fields)
6445 int i;
6446 int n_fields
6447 = list_length (TYPE_VALUES (enumtype)) + sorted_fields->len;
6448 struct sorted_fields_type *field_vec = sorted_fields_type_new (n_fields);
6450 for (i = 0; i < sorted_fields->len; ++i)
6451 field_vec->elts[i] = sorted_fields->elts[i];
6453 add_enum_fields_to_record_type (enumtype, field_vec,
6454 sorted_fields->len);
6455 qsort (field_vec->elts, n_fields, sizeof (tree), field_decl_cmp);
6456 CLASSTYPE_SORTED_FIELDS (t) = field_vec;
6460 /* When T was built up, the member declarations were added in reverse
6461 order. Rearrange them to declaration order. */
6463 void
6464 unreverse_member_declarations (tree t)
6466 tree next;
6467 tree prev;
6468 tree x;
6470 /* The following lists are all in reverse order. Put them in
6471 declaration order now. */
6472 TYPE_METHODS (t) = nreverse (TYPE_METHODS (t));
6473 CLASSTYPE_DECL_LIST (t) = nreverse (CLASSTYPE_DECL_LIST (t));
6475 /* Actually, for the TYPE_FIELDS, only the non TYPE_DECLs are in
6476 reverse order, so we can't just use nreverse. */
6477 prev = NULL_TREE;
6478 for (x = TYPE_FIELDS (t);
6479 x && TREE_CODE (x) != TYPE_DECL;
6480 x = next)
6482 next = DECL_CHAIN (x);
6483 DECL_CHAIN (x) = prev;
6484 prev = x;
6486 if (prev)
6488 DECL_CHAIN (TYPE_FIELDS (t)) = x;
6489 if (prev)
6490 TYPE_FIELDS (t) = prev;
6494 tree
6495 finish_struct (tree t, tree attributes)
6497 location_t saved_loc = input_location;
6499 /* Now that we've got all the field declarations, reverse everything
6500 as necessary. */
6501 unreverse_member_declarations (t);
6503 cplus_decl_attributes (&t, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
6505 /* Nadger the current location so that diagnostics point to the start of
6506 the struct, not the end. */
6507 input_location = DECL_SOURCE_LOCATION (TYPE_NAME (t));
6509 if (processing_template_decl)
6511 tree x;
6513 finish_struct_methods (t);
6514 TYPE_SIZE (t) = bitsize_zero_node;
6515 TYPE_SIZE_UNIT (t) = size_zero_node;
6517 /* We need to emit an error message if this type was used as a parameter
6518 and it is an abstract type, even if it is a template. We construct
6519 a simple CLASSTYPE_PURE_VIRTUALS list without taking bases into
6520 account and we call complete_vars with this type, which will check
6521 the PARM_DECLS. Note that while the type is being defined,
6522 CLASSTYPE_PURE_VIRTUALS contains the list of the inline friends
6523 (see CLASSTYPE_INLINE_FRIENDS) so we need to clear it. */
6524 CLASSTYPE_PURE_VIRTUALS (t) = NULL;
6525 for (x = TYPE_METHODS (t); x; x = DECL_CHAIN (x))
6526 if (DECL_PURE_VIRTUAL_P (x))
6527 vec_safe_push (CLASSTYPE_PURE_VIRTUALS (t), x);
6528 complete_vars (t);
6529 /* We need to add the target functions to the CLASSTYPE_METHOD_VEC if
6530 an enclosing scope is a template class, so that this function be
6531 found by lookup_fnfields_1 when the using declaration is not
6532 instantiated yet. */
6533 for (x = TYPE_FIELDS (t); x; x = DECL_CHAIN (x))
6534 if (TREE_CODE (x) == USING_DECL)
6536 tree fn = strip_using_decl (x);
6537 if (is_overloaded_fn (fn))
6538 for (; fn; fn = OVL_NEXT (fn))
6539 add_method (t, OVL_CURRENT (fn), x);
6542 /* Remember current #pragma pack value. */
6543 TYPE_PRECISION (t) = maximum_field_alignment;
6545 /* Fix up any variants we've already built. */
6546 for (x = TYPE_NEXT_VARIANT (t); x; x = TYPE_NEXT_VARIANT (x))
6548 TYPE_SIZE (x) = TYPE_SIZE (t);
6549 TYPE_SIZE_UNIT (x) = TYPE_SIZE_UNIT (t);
6550 TYPE_FIELDS (x) = TYPE_FIELDS (t);
6551 TYPE_METHODS (x) = TYPE_METHODS (t);
6554 else
6555 finish_struct_1 (t);
6557 input_location = saved_loc;
6559 TYPE_BEING_DEFINED (t) = 0;
6561 if (current_class_type)
6562 popclass ();
6563 else
6564 error ("trying to finish struct, but kicked out due to previous parse errors");
6566 if (processing_template_decl && at_function_scope_p ()
6567 /* Lambdas are defined by the LAMBDA_EXPR. */
6568 && !LAMBDA_TYPE_P (t))
6569 add_stmt (build_min (TAG_DEFN, t));
6571 return t;
6574 /* Hash table to avoid endless recursion when handling references. */
6575 static hash_table <pointer_hash <tree_node> > fixed_type_or_null_ref_ht;
6577 /* Return the dynamic type of INSTANCE, if known.
6578 Used to determine whether the virtual function table is needed
6579 or not.
6581 *NONNULL is set iff INSTANCE can be known to be nonnull, regardless
6582 of our knowledge of its type. *NONNULL should be initialized
6583 before this function is called. */
6585 static tree
6586 fixed_type_or_null (tree instance, int *nonnull, int *cdtorp)
6588 #define RECUR(T) fixed_type_or_null((T), nonnull, cdtorp)
6590 switch (TREE_CODE (instance))
6592 case INDIRECT_REF:
6593 if (POINTER_TYPE_P (TREE_TYPE (instance)))
6594 return NULL_TREE;
6595 else
6596 return RECUR (TREE_OPERAND (instance, 0));
6598 case CALL_EXPR:
6599 /* This is a call to a constructor, hence it's never zero. */
6600 if (TREE_HAS_CONSTRUCTOR (instance))
6602 if (nonnull)
6603 *nonnull = 1;
6604 return TREE_TYPE (instance);
6606 return NULL_TREE;
6608 case SAVE_EXPR:
6609 /* This is a call to a constructor, hence it's never zero. */
6610 if (TREE_HAS_CONSTRUCTOR (instance))
6612 if (nonnull)
6613 *nonnull = 1;
6614 return TREE_TYPE (instance);
6616 return RECUR (TREE_OPERAND (instance, 0));
6618 case POINTER_PLUS_EXPR:
6619 case PLUS_EXPR:
6620 case MINUS_EXPR:
6621 if (TREE_CODE (TREE_OPERAND (instance, 0)) == ADDR_EXPR)
6622 return RECUR (TREE_OPERAND (instance, 0));
6623 if (TREE_CODE (TREE_OPERAND (instance, 1)) == INTEGER_CST)
6624 /* Propagate nonnull. */
6625 return RECUR (TREE_OPERAND (instance, 0));
6627 return NULL_TREE;
6629 CASE_CONVERT:
6630 return RECUR (TREE_OPERAND (instance, 0));
6632 case ADDR_EXPR:
6633 instance = TREE_OPERAND (instance, 0);
6634 if (nonnull)
6636 /* Just because we see an ADDR_EXPR doesn't mean we're dealing
6637 with a real object -- given &p->f, p can still be null. */
6638 tree t = get_base_address (instance);
6639 /* ??? Probably should check DECL_WEAK here. */
6640 if (t && DECL_P (t))
6641 *nonnull = 1;
6643 return RECUR (instance);
6645 case COMPONENT_REF:
6646 /* If this component is really a base class reference, then the field
6647 itself isn't definitive. */
6648 if (DECL_FIELD_IS_BASE (TREE_OPERAND (instance, 1)))
6649 return RECUR (TREE_OPERAND (instance, 0));
6650 return RECUR (TREE_OPERAND (instance, 1));
6652 case VAR_DECL:
6653 case FIELD_DECL:
6654 if (TREE_CODE (TREE_TYPE (instance)) == ARRAY_TYPE
6655 && MAYBE_CLASS_TYPE_P (TREE_TYPE (TREE_TYPE (instance))))
6657 if (nonnull)
6658 *nonnull = 1;
6659 return TREE_TYPE (TREE_TYPE (instance));
6661 /* fall through... */
6662 case TARGET_EXPR:
6663 case PARM_DECL:
6664 case RESULT_DECL:
6665 if (MAYBE_CLASS_TYPE_P (TREE_TYPE (instance)))
6667 if (nonnull)
6668 *nonnull = 1;
6669 return TREE_TYPE (instance);
6671 else if (instance == current_class_ptr)
6673 if (nonnull)
6674 *nonnull = 1;
6676 /* if we're in a ctor or dtor, we know our type. If
6677 current_class_ptr is set but we aren't in a function, we're in
6678 an NSDMI (and therefore a constructor). */
6679 if (current_scope () != current_function_decl
6680 || (DECL_LANG_SPECIFIC (current_function_decl)
6681 && (DECL_CONSTRUCTOR_P (current_function_decl)
6682 || DECL_DESTRUCTOR_P (current_function_decl))))
6684 if (cdtorp)
6685 *cdtorp = 1;
6686 return TREE_TYPE (TREE_TYPE (instance));
6689 else if (TREE_CODE (TREE_TYPE (instance)) == REFERENCE_TYPE)
6691 /* We only need one hash table because it is always left empty. */
6692 if (!fixed_type_or_null_ref_ht.is_created ())
6693 fixed_type_or_null_ref_ht.create (37);
6695 /* Reference variables should be references to objects. */
6696 if (nonnull)
6697 *nonnull = 1;
6699 /* Enter the INSTANCE in a table to prevent recursion; a
6700 variable's initializer may refer to the variable
6701 itself. */
6702 if (TREE_CODE (instance) == VAR_DECL
6703 && DECL_INITIAL (instance)
6704 && !type_dependent_expression_p_push (DECL_INITIAL (instance))
6705 && !fixed_type_or_null_ref_ht.find (instance))
6707 tree type;
6708 tree_node **slot;
6710 slot = fixed_type_or_null_ref_ht.find_slot (instance, INSERT);
6711 *slot = instance;
6712 type = RECUR (DECL_INITIAL (instance));
6713 fixed_type_or_null_ref_ht.remove_elt (instance);
6715 return type;
6718 return NULL_TREE;
6720 default:
6721 return NULL_TREE;
6723 #undef RECUR
6726 /* Return nonzero if the dynamic type of INSTANCE is known, and
6727 equivalent to the static type. We also handle the case where
6728 INSTANCE is really a pointer. Return negative if this is a
6729 ctor/dtor. There the dynamic type is known, but this might not be
6730 the most derived base of the original object, and hence virtual
6731 bases may not be layed out according to this type.
6733 Used to determine whether the virtual function table is needed
6734 or not.
6736 *NONNULL is set iff INSTANCE can be known to be nonnull, regardless
6737 of our knowledge of its type. *NONNULL should be initialized
6738 before this function is called. */
6741 resolves_to_fixed_type_p (tree instance, int* nonnull)
6743 tree t = TREE_TYPE (instance);
6744 int cdtorp = 0;
6745 tree fixed;
6747 /* processing_template_decl can be false in a template if we're in
6748 fold_non_dependent_expr, but we still want to suppress this check. */
6749 if (in_template_function ())
6751 /* In a template we only care about the type of the result. */
6752 if (nonnull)
6753 *nonnull = true;
6754 return true;
6757 fixed = fixed_type_or_null (instance, nonnull, &cdtorp);
6758 if (fixed == NULL_TREE)
6759 return 0;
6760 if (POINTER_TYPE_P (t))
6761 t = TREE_TYPE (t);
6762 if (!same_type_ignoring_top_level_qualifiers_p (t, fixed))
6763 return 0;
6764 return cdtorp ? -1 : 1;
6768 void
6769 init_class_processing (void)
6771 current_class_depth = 0;
6772 current_class_stack_size = 10;
6773 current_class_stack
6774 = XNEWVEC (struct class_stack_node, current_class_stack_size);
6775 vec_alloc (local_classes, 8);
6776 sizeof_biggest_empty_class = size_zero_node;
6778 ridpointers[(int) RID_PUBLIC] = access_public_node;
6779 ridpointers[(int) RID_PRIVATE] = access_private_node;
6780 ridpointers[(int) RID_PROTECTED] = access_protected_node;
6783 /* Restore the cached PREVIOUS_CLASS_LEVEL. */
6785 static void
6786 restore_class_cache (void)
6788 tree type;
6790 /* We are re-entering the same class we just left, so we don't
6791 have to search the whole inheritance matrix to find all the
6792 decls to bind again. Instead, we install the cached
6793 class_shadowed list and walk through it binding names. */
6794 push_binding_level (previous_class_level);
6795 class_binding_level = previous_class_level;
6796 /* Restore IDENTIFIER_TYPE_VALUE. */
6797 for (type = class_binding_level->type_shadowed;
6798 type;
6799 type = TREE_CHAIN (type))
6800 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (type), TREE_TYPE (type));
6803 /* Set global variables CURRENT_CLASS_NAME and CURRENT_CLASS_TYPE as
6804 appropriate for TYPE.
6806 So that we may avoid calls to lookup_name, we cache the _TYPE
6807 nodes of local TYPE_DECLs in the TREE_TYPE field of the name.
6809 For multiple inheritance, we perform a two-pass depth-first search
6810 of the type lattice. */
6812 void
6813 pushclass (tree type)
6815 class_stack_node_t csn;
6817 type = TYPE_MAIN_VARIANT (type);
6819 /* Make sure there is enough room for the new entry on the stack. */
6820 if (current_class_depth + 1 >= current_class_stack_size)
6822 current_class_stack_size *= 2;
6823 current_class_stack
6824 = XRESIZEVEC (struct class_stack_node, current_class_stack,
6825 current_class_stack_size);
6828 /* Insert a new entry on the class stack. */
6829 csn = current_class_stack + current_class_depth;
6830 csn->name = current_class_name;
6831 csn->type = current_class_type;
6832 csn->access = current_access_specifier;
6833 csn->names_used = 0;
6834 csn->hidden = 0;
6835 current_class_depth++;
6837 /* Now set up the new type. */
6838 current_class_name = TYPE_NAME (type);
6839 if (TREE_CODE (current_class_name) == TYPE_DECL)
6840 current_class_name = DECL_NAME (current_class_name);
6841 current_class_type = type;
6843 /* By default, things in classes are private, while things in
6844 structures or unions are public. */
6845 current_access_specifier = (CLASSTYPE_DECLARED_CLASS (type)
6846 ? access_private_node
6847 : access_public_node);
6849 if (previous_class_level
6850 && type != previous_class_level->this_entity
6851 && current_class_depth == 1)
6853 /* Forcibly remove any old class remnants. */
6854 invalidate_class_lookup_cache ();
6857 if (!previous_class_level
6858 || type != previous_class_level->this_entity
6859 || current_class_depth > 1)
6860 pushlevel_class ();
6861 else
6862 restore_class_cache ();
6865 /* When we exit a toplevel class scope, we save its binding level so
6866 that we can restore it quickly. Here, we've entered some other
6867 class, so we must invalidate our cache. */
6869 void
6870 invalidate_class_lookup_cache (void)
6872 previous_class_level = NULL;
6875 /* Get out of the current class scope. If we were in a class scope
6876 previously, that is the one popped to. */
6878 void
6879 popclass (void)
6881 poplevel_class ();
6883 current_class_depth--;
6884 current_class_name = current_class_stack[current_class_depth].name;
6885 current_class_type = current_class_stack[current_class_depth].type;
6886 current_access_specifier = current_class_stack[current_class_depth].access;
6887 if (current_class_stack[current_class_depth].names_used)
6888 splay_tree_delete (current_class_stack[current_class_depth].names_used);
6891 /* Mark the top of the class stack as hidden. */
6893 void
6894 push_class_stack (void)
6896 if (current_class_depth)
6897 ++current_class_stack[current_class_depth - 1].hidden;
6900 /* Mark the top of the class stack as un-hidden. */
6902 void
6903 pop_class_stack (void)
6905 if (current_class_depth)
6906 --current_class_stack[current_class_depth - 1].hidden;
6909 /* Returns 1 if the class type currently being defined is either T or
6910 a nested type of T. */
6912 bool
6913 currently_open_class (tree t)
6915 int i;
6917 if (!CLASS_TYPE_P (t))
6918 return false;
6920 t = TYPE_MAIN_VARIANT (t);
6922 /* We start looking from 1 because entry 0 is from global scope,
6923 and has no type. */
6924 for (i = current_class_depth; i > 0; --i)
6926 tree c;
6927 if (i == current_class_depth)
6928 c = current_class_type;
6929 else
6931 if (current_class_stack[i].hidden)
6932 break;
6933 c = current_class_stack[i].type;
6935 if (!c)
6936 continue;
6937 if (same_type_p (c, t))
6938 return true;
6940 return false;
6943 /* If either current_class_type or one of its enclosing classes are derived
6944 from T, return the appropriate type. Used to determine how we found
6945 something via unqualified lookup. */
6947 tree
6948 currently_open_derived_class (tree t)
6950 int i;
6952 /* The bases of a dependent type are unknown. */
6953 if (dependent_type_p (t))
6954 return NULL_TREE;
6956 if (!current_class_type)
6957 return NULL_TREE;
6959 if (DERIVED_FROM_P (t, current_class_type))
6960 return current_class_type;
6962 for (i = current_class_depth - 1; i > 0; --i)
6964 if (current_class_stack[i].hidden)
6965 break;
6966 if (DERIVED_FROM_P (t, current_class_stack[i].type))
6967 return current_class_stack[i].type;
6970 return NULL_TREE;
6973 /* Returns the innermost class type which is not a lambda closure type. */
6975 tree
6976 current_nonlambda_class_type (void)
6978 int i;
6980 /* We start looking from 1 because entry 0 is from global scope,
6981 and has no type. */
6982 for (i = current_class_depth; i > 0; --i)
6984 tree c;
6985 if (i == current_class_depth)
6986 c = current_class_type;
6987 else
6989 if (current_class_stack[i].hidden)
6990 break;
6991 c = current_class_stack[i].type;
6993 if (!c)
6994 continue;
6995 if (!LAMBDA_TYPE_P (c))
6996 return c;
6998 return NULL_TREE;
7001 /* When entering a class scope, all enclosing class scopes' names with
7002 static meaning (static variables, static functions, types and
7003 enumerators) have to be visible. This recursive function calls
7004 pushclass for all enclosing class contexts until global or a local
7005 scope is reached. TYPE is the enclosed class. */
7007 void
7008 push_nested_class (tree type)
7010 /* A namespace might be passed in error cases, like A::B:C. */
7011 if (type == NULL_TREE
7012 || !CLASS_TYPE_P (type))
7013 return;
7015 push_nested_class (DECL_CONTEXT (TYPE_MAIN_DECL (type)));
7017 pushclass (type);
7020 /* Undoes a push_nested_class call. */
7022 void
7023 pop_nested_class (void)
7025 tree context = DECL_CONTEXT (TYPE_MAIN_DECL (current_class_type));
7027 popclass ();
7028 if (context && CLASS_TYPE_P (context))
7029 pop_nested_class ();
7032 /* Returns the number of extern "LANG" blocks we are nested within. */
7035 current_lang_depth (void)
7037 return vec_safe_length (current_lang_base);
7040 /* Set global variables CURRENT_LANG_NAME to appropriate value
7041 so that behavior of name-mangling machinery is correct. */
7043 void
7044 push_lang_context (tree name)
7046 vec_safe_push (current_lang_base, current_lang_name);
7048 if (name == lang_name_cplusplus)
7050 current_lang_name = name;
7052 else if (name == lang_name_java)
7054 current_lang_name = name;
7055 /* DECL_IGNORED_P is initially set for these types, to avoid clutter.
7056 (See record_builtin_java_type in decl.c.) However, that causes
7057 incorrect debug entries if these types are actually used.
7058 So we re-enable debug output after extern "Java". */
7059 DECL_IGNORED_P (TYPE_NAME (java_byte_type_node)) = 0;
7060 DECL_IGNORED_P (TYPE_NAME (java_short_type_node)) = 0;
7061 DECL_IGNORED_P (TYPE_NAME (java_int_type_node)) = 0;
7062 DECL_IGNORED_P (TYPE_NAME (java_long_type_node)) = 0;
7063 DECL_IGNORED_P (TYPE_NAME (java_float_type_node)) = 0;
7064 DECL_IGNORED_P (TYPE_NAME (java_double_type_node)) = 0;
7065 DECL_IGNORED_P (TYPE_NAME (java_char_type_node)) = 0;
7066 DECL_IGNORED_P (TYPE_NAME (java_boolean_type_node)) = 0;
7068 else if (name == lang_name_c)
7070 current_lang_name = name;
7072 else
7073 error ("language string %<\"%E\"%> not recognized", name);
7076 /* Get out of the current language scope. */
7078 void
7079 pop_lang_context (void)
7081 current_lang_name = current_lang_base->pop ();
7084 /* Type instantiation routines. */
7086 /* Given an OVERLOAD and a TARGET_TYPE, return the function that
7087 matches the TARGET_TYPE. If there is no satisfactory match, return
7088 error_mark_node, and issue an error & warning messages under
7089 control of FLAGS. Permit pointers to member function if FLAGS
7090 permits. If TEMPLATE_ONLY, the name of the overloaded function was
7091 a template-id, and EXPLICIT_TARGS are the explicitly provided
7092 template arguments.
7094 If OVERLOAD is for one or more member functions, then ACCESS_PATH
7095 is the base path used to reference those member functions. If
7096 the address is resolved to a member function, access checks will be
7097 performed and errors issued if appropriate. */
7099 static tree
7100 resolve_address_of_overloaded_function (tree target_type,
7101 tree overload,
7102 tsubst_flags_t flags,
7103 bool template_only,
7104 tree explicit_targs,
7105 tree access_path)
7107 /* Here's what the standard says:
7109 [over.over]
7111 If the name is a function template, template argument deduction
7112 is done, and if the argument deduction succeeds, the deduced
7113 arguments are used to generate a single template function, which
7114 is added to the set of overloaded functions considered.
7116 Non-member functions and static member functions match targets of
7117 type "pointer-to-function" or "reference-to-function." Nonstatic
7118 member functions match targets of type "pointer-to-member
7119 function;" the function type of the pointer to member is used to
7120 select the member function from the set of overloaded member
7121 functions. If a nonstatic member function is selected, the
7122 reference to the overloaded function name is required to have the
7123 form of a pointer to member as described in 5.3.1.
7125 If more than one function is selected, any template functions in
7126 the set are eliminated if the set also contains a non-template
7127 function, and any given template function is eliminated if the
7128 set contains a second template function that is more specialized
7129 than the first according to the partial ordering rules 14.5.5.2.
7130 After such eliminations, if any, there shall remain exactly one
7131 selected function. */
7133 int is_ptrmem = 0;
7134 /* We store the matches in a TREE_LIST rooted here. The functions
7135 are the TREE_PURPOSE, not the TREE_VALUE, in this list, for easy
7136 interoperability with most_specialized_instantiation. */
7137 tree matches = NULL_TREE;
7138 tree fn;
7139 tree target_fn_type;
7141 /* By the time we get here, we should be seeing only real
7142 pointer-to-member types, not the internal POINTER_TYPE to
7143 METHOD_TYPE representation. */
7144 gcc_assert (TREE_CODE (target_type) != POINTER_TYPE
7145 || TREE_CODE (TREE_TYPE (target_type)) != METHOD_TYPE);
7147 gcc_assert (is_overloaded_fn (overload));
7149 /* Check that the TARGET_TYPE is reasonable. */
7150 if (TYPE_PTRFN_P (target_type))
7151 /* This is OK. */;
7152 else if (TYPE_PTRMEMFUNC_P (target_type))
7153 /* This is OK, too. */
7154 is_ptrmem = 1;
7155 else if (TREE_CODE (target_type) == FUNCTION_TYPE)
7156 /* This is OK, too. This comes from a conversion to reference
7157 type. */
7158 target_type = build_reference_type (target_type);
7159 else
7161 if (flags & tf_error)
7162 error ("cannot resolve overloaded function %qD based on"
7163 " conversion to type %qT",
7164 DECL_NAME (OVL_FUNCTION (overload)), target_type);
7165 return error_mark_node;
7168 /* Non-member functions and static member functions match targets of type
7169 "pointer-to-function" or "reference-to-function." Nonstatic member
7170 functions match targets of type "pointer-to-member-function;" the
7171 function type of the pointer to member is used to select the member
7172 function from the set of overloaded member functions.
7174 So figure out the FUNCTION_TYPE that we want to match against. */
7175 target_fn_type = static_fn_type (target_type);
7177 /* If we can find a non-template function that matches, we can just
7178 use it. There's no point in generating template instantiations
7179 if we're just going to throw them out anyhow. But, of course, we
7180 can only do this when we don't *need* a template function. */
7181 if (!template_only)
7183 tree fns;
7185 for (fns = overload; fns; fns = OVL_NEXT (fns))
7187 tree fn = OVL_CURRENT (fns);
7189 if (TREE_CODE (fn) == TEMPLATE_DECL)
7190 /* We're not looking for templates just yet. */
7191 continue;
7193 if ((TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
7194 != is_ptrmem)
7195 /* We're looking for a non-static member, and this isn't
7196 one, or vice versa. */
7197 continue;
7199 /* Ignore functions which haven't been explicitly
7200 declared. */
7201 if (DECL_ANTICIPATED (fn))
7202 continue;
7204 /* See if there's a match. */
7205 if (same_type_p (target_fn_type, static_fn_type (fn)))
7206 matches = tree_cons (fn, NULL_TREE, matches);
7210 /* Now, if we've already got a match (or matches), there's no need
7211 to proceed to the template functions. But, if we don't have a
7212 match we need to look at them, too. */
7213 if (!matches)
7215 tree target_arg_types;
7216 tree target_ret_type;
7217 tree fns;
7218 tree *args;
7219 unsigned int nargs, ia;
7220 tree arg;
7222 target_arg_types = TYPE_ARG_TYPES (target_fn_type);
7223 target_ret_type = TREE_TYPE (target_fn_type);
7225 nargs = list_length (target_arg_types);
7226 args = XALLOCAVEC (tree, nargs);
7227 for (arg = target_arg_types, ia = 0;
7228 arg != NULL_TREE && arg != void_list_node;
7229 arg = TREE_CHAIN (arg), ++ia)
7230 args[ia] = TREE_VALUE (arg);
7231 nargs = ia;
7233 for (fns = overload; fns; fns = OVL_NEXT (fns))
7235 tree fn = OVL_CURRENT (fns);
7236 tree instantiation;
7237 tree targs;
7239 if (TREE_CODE (fn) != TEMPLATE_DECL)
7240 /* We're only looking for templates. */
7241 continue;
7243 if ((TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
7244 != is_ptrmem)
7245 /* We're not looking for a non-static member, and this is
7246 one, or vice versa. */
7247 continue;
7249 /* Try to do argument deduction. */
7250 targs = make_tree_vec (DECL_NTPARMS (fn));
7251 instantiation = fn_type_unification (fn, explicit_targs, targs, args,
7252 nargs, target_ret_type,
7253 DEDUCE_EXACT, LOOKUP_NORMAL,
7254 false);
7255 if (instantiation == error_mark_node)
7256 /* Instantiation failed. */
7257 continue;
7259 /* See if there's a match. */
7260 if (same_type_p (target_fn_type, static_fn_type (instantiation)))
7261 matches = tree_cons (instantiation, fn, matches);
7264 /* Now, remove all but the most specialized of the matches. */
7265 if (matches)
7267 tree match = most_specialized_instantiation (matches);
7269 if (match != error_mark_node)
7270 matches = tree_cons (TREE_PURPOSE (match),
7271 NULL_TREE,
7272 NULL_TREE);
7276 /* Now we should have exactly one function in MATCHES. */
7277 if (matches == NULL_TREE)
7279 /* There were *no* matches. */
7280 if (flags & tf_error)
7282 error ("no matches converting function %qD to type %q#T",
7283 DECL_NAME (OVL_CURRENT (overload)),
7284 target_type);
7286 print_candidates (overload);
7288 return error_mark_node;
7290 else if (TREE_CHAIN (matches))
7292 /* There were too many matches. First check if they're all
7293 the same function. */
7294 tree match = NULL_TREE;
7296 fn = TREE_PURPOSE (matches);
7298 /* For multi-versioned functions, more than one match is just fine and
7299 decls_match will return false as they are different. */
7300 for (match = TREE_CHAIN (matches); match; match = TREE_CHAIN (match))
7301 if (!decls_match (fn, TREE_PURPOSE (match))
7302 && !targetm.target_option.function_versions
7303 (fn, TREE_PURPOSE (match)))
7304 break;
7306 if (match)
7308 if (flags & tf_error)
7310 error ("converting overloaded function %qD to type %q#T is ambiguous",
7311 DECL_NAME (OVL_FUNCTION (overload)),
7312 target_type);
7314 /* Since print_candidates expects the functions in the
7315 TREE_VALUE slot, we flip them here. */
7316 for (match = matches; match; match = TREE_CHAIN (match))
7317 TREE_VALUE (match) = TREE_PURPOSE (match);
7319 print_candidates (matches);
7322 return error_mark_node;
7326 /* Good, exactly one match. Now, convert it to the correct type. */
7327 fn = TREE_PURPOSE (matches);
7329 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
7330 && !(flags & tf_ptrmem_ok) && !flag_ms_extensions)
7332 static int explained;
7334 if (!(flags & tf_error))
7335 return error_mark_node;
7337 permerror (input_location, "assuming pointer to member %qD", fn);
7338 if (!explained)
7340 inform (input_location, "(a pointer to member can only be formed with %<&%E%>)", fn);
7341 explained = 1;
7345 /* If a pointer to a function that is multi-versioned is requested, the
7346 pointer to the dispatcher function is returned instead. This works
7347 well because indirectly calling the function will dispatch the right
7348 function version at run-time. */
7349 if (DECL_FUNCTION_VERSIONED (fn))
7351 fn = get_function_version_dispatcher (fn);
7352 if (fn == NULL)
7353 return error_mark_node;
7354 /* Mark all the versions corresponding to the dispatcher as used. */
7355 if (!(flags & tf_conv))
7356 mark_versions_used (fn);
7359 /* If we're doing overload resolution purely for the purpose of
7360 determining conversion sequences, we should not consider the
7361 function used. If this conversion sequence is selected, the
7362 function will be marked as used at this point. */
7363 if (!(flags & tf_conv))
7365 /* Make =delete work with SFINAE. */
7366 if (DECL_DELETED_FN (fn) && !(flags & tf_error))
7367 return error_mark_node;
7369 mark_used (fn);
7372 /* We could not check access to member functions when this
7373 expression was originally created since we did not know at that
7374 time to which function the expression referred. */
7375 if (DECL_FUNCTION_MEMBER_P (fn))
7377 gcc_assert (access_path);
7378 perform_or_defer_access_check (access_path, fn, fn, flags);
7381 if (TYPE_PTRFN_P (target_type) || TYPE_PTRMEMFUNC_P (target_type))
7382 return cp_build_addr_expr (fn, flags);
7383 else
7385 /* The target must be a REFERENCE_TYPE. Above, cp_build_unary_op
7386 will mark the function as addressed, but here we must do it
7387 explicitly. */
7388 cxx_mark_addressable (fn);
7390 return fn;
7394 /* This function will instantiate the type of the expression given in
7395 RHS to match the type of LHSTYPE. If errors exist, then return
7396 error_mark_node. FLAGS is a bit mask. If TF_ERROR is set, then
7397 we complain on errors. If we are not complaining, never modify rhs,
7398 as overload resolution wants to try many possible instantiations, in
7399 the hope that at least one will work.
7401 For non-recursive calls, LHSTYPE should be a function, pointer to
7402 function, or a pointer to member function. */
7404 tree
7405 instantiate_type (tree lhstype, tree rhs, tsubst_flags_t flags)
7407 tsubst_flags_t flags_in = flags;
7408 tree access_path = NULL_TREE;
7410 flags &= ~tf_ptrmem_ok;
7412 if (lhstype == unknown_type_node)
7414 if (flags & tf_error)
7415 error ("not enough type information");
7416 return error_mark_node;
7419 if (TREE_TYPE (rhs) != NULL_TREE && ! (type_unknown_p (rhs)))
7421 if (same_type_p (lhstype, TREE_TYPE (rhs)))
7422 return rhs;
7423 if (flag_ms_extensions
7424 && TYPE_PTRMEMFUNC_P (lhstype)
7425 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (rhs)))
7426 /* Microsoft allows `A::f' to be resolved to a
7427 pointer-to-member. */
7429 else
7431 if (flags & tf_error)
7432 error ("cannot convert %qE from type %qT to type %qT",
7433 rhs, TREE_TYPE (rhs), lhstype);
7434 return error_mark_node;
7438 if (BASELINK_P (rhs))
7440 access_path = BASELINK_ACCESS_BINFO (rhs);
7441 rhs = BASELINK_FUNCTIONS (rhs);
7444 /* If we are in a template, and have a NON_DEPENDENT_EXPR, we cannot
7445 deduce any type information. */
7446 if (TREE_CODE (rhs) == NON_DEPENDENT_EXPR)
7448 if (flags & tf_error)
7449 error ("not enough type information");
7450 return error_mark_node;
7453 /* There only a few kinds of expressions that may have a type
7454 dependent on overload resolution. */
7455 gcc_assert (TREE_CODE (rhs) == ADDR_EXPR
7456 || TREE_CODE (rhs) == COMPONENT_REF
7457 || really_overloaded_fn (rhs)
7458 || (flag_ms_extensions && TREE_CODE (rhs) == FUNCTION_DECL));
7460 /* This should really only be used when attempting to distinguish
7461 what sort of a pointer to function we have. For now, any
7462 arithmetic operation which is not supported on pointers
7463 is rejected as an error. */
7465 switch (TREE_CODE (rhs))
7467 case COMPONENT_REF:
7469 tree member = TREE_OPERAND (rhs, 1);
7471 member = instantiate_type (lhstype, member, flags);
7472 if (member != error_mark_node
7473 && TREE_SIDE_EFFECTS (TREE_OPERAND (rhs, 0)))
7474 /* Do not lose object's side effects. */
7475 return build2 (COMPOUND_EXPR, TREE_TYPE (member),
7476 TREE_OPERAND (rhs, 0), member);
7477 return member;
7480 case OFFSET_REF:
7481 rhs = TREE_OPERAND (rhs, 1);
7482 if (BASELINK_P (rhs))
7483 return instantiate_type (lhstype, rhs, flags_in);
7485 /* This can happen if we are forming a pointer-to-member for a
7486 member template. */
7487 gcc_assert (TREE_CODE (rhs) == TEMPLATE_ID_EXPR);
7489 /* Fall through. */
7491 case TEMPLATE_ID_EXPR:
7493 tree fns = TREE_OPERAND (rhs, 0);
7494 tree args = TREE_OPERAND (rhs, 1);
7496 return
7497 resolve_address_of_overloaded_function (lhstype, fns, flags_in,
7498 /*template_only=*/true,
7499 args, access_path);
7502 case OVERLOAD:
7503 case FUNCTION_DECL:
7504 return
7505 resolve_address_of_overloaded_function (lhstype, rhs, flags_in,
7506 /*template_only=*/false,
7507 /*explicit_targs=*/NULL_TREE,
7508 access_path);
7510 case ADDR_EXPR:
7512 if (PTRMEM_OK_P (rhs))
7513 flags |= tf_ptrmem_ok;
7515 return instantiate_type (lhstype, TREE_OPERAND (rhs, 0), flags);
7518 case ERROR_MARK:
7519 return error_mark_node;
7521 default:
7522 gcc_unreachable ();
7524 return error_mark_node;
7527 /* Return the name of the virtual function pointer field
7528 (as an IDENTIFIER_NODE) for the given TYPE. Note that
7529 this may have to look back through base types to find the
7530 ultimate field name. (For single inheritance, these could
7531 all be the same name. Who knows for multiple inheritance). */
7533 static tree
7534 get_vfield_name (tree type)
7536 tree binfo, base_binfo;
7537 char *buf;
7539 for (binfo = TYPE_BINFO (type);
7540 BINFO_N_BASE_BINFOS (binfo);
7541 binfo = base_binfo)
7543 base_binfo = BINFO_BASE_BINFO (binfo, 0);
7545 if (BINFO_VIRTUAL_P (base_binfo)
7546 || !TYPE_CONTAINS_VPTR_P (BINFO_TYPE (base_binfo)))
7547 break;
7550 type = BINFO_TYPE (binfo);
7551 buf = (char *) alloca (sizeof (VFIELD_NAME_FORMAT)
7552 + TYPE_NAME_LENGTH (type) + 2);
7553 sprintf (buf, VFIELD_NAME_FORMAT,
7554 IDENTIFIER_POINTER (constructor_name (type)));
7555 return get_identifier (buf);
7558 void
7559 print_class_statistics (void)
7561 if (! GATHER_STATISTICS)
7562 return;
7564 fprintf (stderr, "convert_harshness = %d\n", n_convert_harshness);
7565 fprintf (stderr, "compute_conversion_costs = %d\n", n_compute_conversion_costs);
7566 if (n_vtables)
7568 fprintf (stderr, "vtables = %d; vtable searches = %d\n",
7569 n_vtables, n_vtable_searches);
7570 fprintf (stderr, "vtable entries = %d; vtable elems = %d\n",
7571 n_vtable_entries, n_vtable_elems);
7575 /* Build a dummy reference to ourselves so Derived::Base (and A::A) works,
7576 according to [class]:
7577 The class-name is also inserted
7578 into the scope of the class itself. For purposes of access checking,
7579 the inserted class name is treated as if it were a public member name. */
7581 void
7582 build_self_reference (void)
7584 tree name = constructor_name (current_class_type);
7585 tree value = build_lang_decl (TYPE_DECL, name, current_class_type);
7586 tree saved_cas;
7588 DECL_NONLOCAL (value) = 1;
7589 DECL_CONTEXT (value) = current_class_type;
7590 DECL_ARTIFICIAL (value) = 1;
7591 SET_DECL_SELF_REFERENCE_P (value);
7592 set_underlying_type (value);
7594 if (processing_template_decl)
7595 value = push_template_decl (value);
7597 saved_cas = current_access_specifier;
7598 current_access_specifier = access_public_node;
7599 finish_member_declaration (value);
7600 current_access_specifier = saved_cas;
7603 /* Returns 1 if TYPE contains only padding bytes. */
7606 is_empty_class (tree type)
7608 if (type == error_mark_node)
7609 return 0;
7611 if (! CLASS_TYPE_P (type))
7612 return 0;
7614 /* In G++ 3.2, whether or not a class was empty was determined by
7615 looking at its size. */
7616 if (abi_version_at_least (2))
7617 return CLASSTYPE_EMPTY_P (type);
7618 else
7619 return integer_zerop (CLASSTYPE_SIZE (type));
7622 /* Returns true if TYPE contains an empty class. */
7624 static bool
7625 contains_empty_class_p (tree type)
7627 if (is_empty_class (type))
7628 return true;
7629 if (CLASS_TYPE_P (type))
7631 tree field;
7632 tree binfo;
7633 tree base_binfo;
7634 int i;
7636 for (binfo = TYPE_BINFO (type), i = 0;
7637 BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
7638 if (contains_empty_class_p (BINFO_TYPE (base_binfo)))
7639 return true;
7640 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
7641 if (TREE_CODE (field) == FIELD_DECL
7642 && !DECL_ARTIFICIAL (field)
7643 && is_empty_class (TREE_TYPE (field)))
7644 return true;
7646 else if (TREE_CODE (type) == ARRAY_TYPE)
7647 return contains_empty_class_p (TREE_TYPE (type));
7648 return false;
7651 /* Returns true if TYPE contains no actual data, just various
7652 possible combinations of empty classes and possibly a vptr. */
7654 bool
7655 is_really_empty_class (tree type)
7657 if (CLASS_TYPE_P (type))
7659 tree field;
7660 tree binfo;
7661 tree base_binfo;
7662 int i;
7664 /* CLASSTYPE_EMPTY_P isn't set properly until the class is actually laid
7665 out, but we'd like to be able to check this before then. */
7666 if (COMPLETE_TYPE_P (type) && is_empty_class (type))
7667 return true;
7669 for (binfo = TYPE_BINFO (type), i = 0;
7670 BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
7671 if (!is_really_empty_class (BINFO_TYPE (base_binfo)))
7672 return false;
7673 for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
7674 if (TREE_CODE (field) == FIELD_DECL
7675 && !DECL_ARTIFICIAL (field)
7676 && !is_really_empty_class (TREE_TYPE (field)))
7677 return false;
7678 return true;
7680 else if (TREE_CODE (type) == ARRAY_TYPE)
7681 return is_really_empty_class (TREE_TYPE (type));
7682 return false;
7685 /* Note that NAME was looked up while the current class was being
7686 defined and that the result of that lookup was DECL. */
7688 void
7689 maybe_note_name_used_in_class (tree name, tree decl)
7691 splay_tree names_used;
7693 /* If we're not defining a class, there's nothing to do. */
7694 if (!(innermost_scope_kind() == sk_class
7695 && TYPE_BEING_DEFINED (current_class_type)
7696 && !LAMBDA_TYPE_P (current_class_type)))
7697 return;
7699 /* If there's already a binding for this NAME, then we don't have
7700 anything to worry about. */
7701 if (lookup_member (current_class_type, name,
7702 /*protect=*/0, /*want_type=*/false, tf_warning_or_error))
7703 return;
7705 if (!current_class_stack[current_class_depth - 1].names_used)
7706 current_class_stack[current_class_depth - 1].names_used
7707 = splay_tree_new (splay_tree_compare_pointers, 0, 0);
7708 names_used = current_class_stack[current_class_depth - 1].names_used;
7710 splay_tree_insert (names_used,
7711 (splay_tree_key) name,
7712 (splay_tree_value) decl);
7715 /* Note that NAME was declared (as DECL) in the current class. Check
7716 to see that the declaration is valid. */
7718 void
7719 note_name_declared_in_class (tree name, tree decl)
7721 splay_tree names_used;
7722 splay_tree_node n;
7724 /* Look to see if we ever used this name. */
7725 names_used
7726 = current_class_stack[current_class_depth - 1].names_used;
7727 if (!names_used)
7728 return;
7729 /* The C language allows members to be declared with a type of the same
7730 name, and the C++ standard says this diagnostic is not required. So
7731 allow it in extern "C" blocks unless predantic is specified.
7732 Allow it in all cases if -ms-extensions is specified. */
7733 if ((!pedantic && current_lang_name == lang_name_c)
7734 || flag_ms_extensions)
7735 return;
7736 n = splay_tree_lookup (names_used, (splay_tree_key) name);
7737 if (n)
7739 /* [basic.scope.class]
7741 A name N used in a class S shall refer to the same declaration
7742 in its context and when re-evaluated in the completed scope of
7743 S. */
7744 permerror (input_location, "declaration of %q#D", decl);
7745 permerror (input_location, "changes meaning of %qD from %q+#D",
7746 DECL_NAME (OVL_CURRENT (decl)), (tree) n->value);
7750 /* Returns the VAR_DECL for the complete vtable associated with BINFO.
7751 Secondary vtables are merged with primary vtables; this function
7752 will return the VAR_DECL for the primary vtable. */
7754 tree
7755 get_vtbl_decl_for_binfo (tree binfo)
7757 tree decl;
7759 decl = BINFO_VTABLE (binfo);
7760 if (decl && TREE_CODE (decl) == POINTER_PLUS_EXPR)
7762 gcc_assert (TREE_CODE (TREE_OPERAND (decl, 0)) == ADDR_EXPR);
7763 decl = TREE_OPERAND (TREE_OPERAND (decl, 0), 0);
7765 if (decl)
7766 gcc_assert (TREE_CODE (decl) == VAR_DECL);
7767 return decl;
7771 /* Returns the binfo for the primary base of BINFO. If the resulting
7772 BINFO is a virtual base, and it is inherited elsewhere in the
7773 hierarchy, then the returned binfo might not be the primary base of
7774 BINFO in the complete object. Check BINFO_PRIMARY_P or
7775 BINFO_LOST_PRIMARY_P to be sure. */
7777 static tree
7778 get_primary_binfo (tree binfo)
7780 tree primary_base;
7782 primary_base = CLASSTYPE_PRIMARY_BINFO (BINFO_TYPE (binfo));
7783 if (!primary_base)
7784 return NULL_TREE;
7786 return copied_binfo (primary_base, binfo);
7789 /* If INDENTED_P is zero, indent to INDENT. Return nonzero. */
7791 static int
7792 maybe_indent_hierarchy (FILE * stream, int indent, int indented_p)
7794 if (!indented_p)
7795 fprintf (stream, "%*s", indent, "");
7796 return 1;
7799 /* Dump the offsets of all the bases rooted at BINFO to STREAM.
7800 INDENT should be zero when called from the top level; it is
7801 incremented recursively. IGO indicates the next expected BINFO in
7802 inheritance graph ordering. */
7804 static tree
7805 dump_class_hierarchy_r (FILE *stream,
7806 int flags,
7807 tree binfo,
7808 tree igo,
7809 int indent)
7811 int indented = 0;
7812 tree base_binfo;
7813 int i;
7815 indented = maybe_indent_hierarchy (stream, indent, 0);
7816 fprintf (stream, "%s (0x" HOST_WIDE_INT_PRINT_HEX ") ",
7817 type_as_string (BINFO_TYPE (binfo), TFF_PLAIN_IDENTIFIER),
7818 (HOST_WIDE_INT) (uintptr_t) binfo);
7819 if (binfo != igo)
7821 fprintf (stream, "alternative-path\n");
7822 return igo;
7824 igo = TREE_CHAIN (binfo);
7826 fprintf (stream, HOST_WIDE_INT_PRINT_DEC,
7827 tree_low_cst (BINFO_OFFSET (binfo), 0));
7828 if (is_empty_class (BINFO_TYPE (binfo)))
7829 fprintf (stream, " empty");
7830 else if (CLASSTYPE_NEARLY_EMPTY_P (BINFO_TYPE (binfo)))
7831 fprintf (stream, " nearly-empty");
7832 if (BINFO_VIRTUAL_P (binfo))
7833 fprintf (stream, " virtual");
7834 fprintf (stream, "\n");
7836 indented = 0;
7837 if (BINFO_PRIMARY_P (binfo))
7839 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
7840 fprintf (stream, " primary-for %s (0x" HOST_WIDE_INT_PRINT_HEX ")",
7841 type_as_string (BINFO_TYPE (BINFO_INHERITANCE_CHAIN (binfo)),
7842 TFF_PLAIN_IDENTIFIER),
7843 (HOST_WIDE_INT) (uintptr_t) BINFO_INHERITANCE_CHAIN (binfo));
7845 if (BINFO_LOST_PRIMARY_P (binfo))
7847 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
7848 fprintf (stream, " lost-primary");
7850 if (indented)
7851 fprintf (stream, "\n");
7853 if (!(flags & TDF_SLIM))
7855 int indented = 0;
7857 if (BINFO_SUBVTT_INDEX (binfo))
7859 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
7860 fprintf (stream, " subvttidx=%s",
7861 expr_as_string (BINFO_SUBVTT_INDEX (binfo),
7862 TFF_PLAIN_IDENTIFIER));
7864 if (BINFO_VPTR_INDEX (binfo))
7866 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
7867 fprintf (stream, " vptridx=%s",
7868 expr_as_string (BINFO_VPTR_INDEX (binfo),
7869 TFF_PLAIN_IDENTIFIER));
7871 if (BINFO_VPTR_FIELD (binfo))
7873 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
7874 fprintf (stream, " vbaseoffset=%s",
7875 expr_as_string (BINFO_VPTR_FIELD (binfo),
7876 TFF_PLAIN_IDENTIFIER));
7878 if (BINFO_VTABLE (binfo))
7880 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
7881 fprintf (stream, " vptr=%s",
7882 expr_as_string (BINFO_VTABLE (binfo),
7883 TFF_PLAIN_IDENTIFIER));
7886 if (indented)
7887 fprintf (stream, "\n");
7890 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
7891 igo = dump_class_hierarchy_r (stream, flags, base_binfo, igo, indent + 2);
7893 return igo;
7896 /* Dump the BINFO hierarchy for T. */
7898 static void
7899 dump_class_hierarchy_1 (FILE *stream, int flags, tree t)
7901 fprintf (stream, "Class %s\n", type_as_string (t, TFF_PLAIN_IDENTIFIER));
7902 fprintf (stream, " size=%lu align=%lu\n",
7903 (unsigned long)(tree_low_cst (TYPE_SIZE (t), 0) / BITS_PER_UNIT),
7904 (unsigned long)(TYPE_ALIGN (t) / BITS_PER_UNIT));
7905 fprintf (stream, " base size=%lu base align=%lu\n",
7906 (unsigned long)(tree_low_cst (TYPE_SIZE (CLASSTYPE_AS_BASE (t)), 0)
7907 / BITS_PER_UNIT),
7908 (unsigned long)(TYPE_ALIGN (CLASSTYPE_AS_BASE (t))
7909 / BITS_PER_UNIT));
7910 dump_class_hierarchy_r (stream, flags, TYPE_BINFO (t), TYPE_BINFO (t), 0);
7911 fprintf (stream, "\n");
7914 /* Debug interface to hierarchy dumping. */
7916 void
7917 debug_class (tree t)
7919 dump_class_hierarchy_1 (stderr, TDF_SLIM, t);
7922 static void
7923 dump_class_hierarchy (tree t)
7925 int flags;
7926 FILE *stream = dump_begin (TDI_class, &flags);
7928 if (stream)
7930 dump_class_hierarchy_1 (stream, flags, t);
7931 dump_end (TDI_class, stream);
7935 static void
7936 dump_array (FILE * stream, tree decl)
7938 tree value;
7939 unsigned HOST_WIDE_INT ix;
7940 HOST_WIDE_INT elt;
7941 tree size = TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (decl)));
7943 elt = (tree_low_cst (TYPE_SIZE (TREE_TYPE (TREE_TYPE (decl))), 0)
7944 / BITS_PER_UNIT);
7945 fprintf (stream, "%s:", decl_as_string (decl, TFF_PLAIN_IDENTIFIER));
7946 fprintf (stream, " %s entries",
7947 expr_as_string (size_binop (PLUS_EXPR, size, size_one_node),
7948 TFF_PLAIN_IDENTIFIER));
7949 fprintf (stream, "\n");
7951 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (DECL_INITIAL (decl)),
7952 ix, value)
7953 fprintf (stream, "%-4ld %s\n", (long)(ix * elt),
7954 expr_as_string (value, TFF_PLAIN_IDENTIFIER));
7957 static void
7958 dump_vtable (tree t, tree binfo, tree vtable)
7960 int flags;
7961 FILE *stream = dump_begin (TDI_class, &flags);
7963 if (!stream)
7964 return;
7966 if (!(flags & TDF_SLIM))
7968 int ctor_vtbl_p = TYPE_BINFO (t) != binfo;
7970 fprintf (stream, "%s for %s",
7971 ctor_vtbl_p ? "Construction vtable" : "Vtable",
7972 type_as_string (BINFO_TYPE (binfo), TFF_PLAIN_IDENTIFIER));
7973 if (ctor_vtbl_p)
7975 if (!BINFO_VIRTUAL_P (binfo))
7976 fprintf (stream, " (0x" HOST_WIDE_INT_PRINT_HEX " instance)",
7977 (HOST_WIDE_INT) (uintptr_t) binfo);
7978 fprintf (stream, " in %s", type_as_string (t, TFF_PLAIN_IDENTIFIER));
7980 fprintf (stream, "\n");
7981 dump_array (stream, vtable);
7982 fprintf (stream, "\n");
7985 dump_end (TDI_class, stream);
7988 static void
7989 dump_vtt (tree t, tree vtt)
7991 int flags;
7992 FILE *stream = dump_begin (TDI_class, &flags);
7994 if (!stream)
7995 return;
7997 if (!(flags & TDF_SLIM))
7999 fprintf (stream, "VTT for %s\n",
8000 type_as_string (t, TFF_PLAIN_IDENTIFIER));
8001 dump_array (stream, vtt);
8002 fprintf (stream, "\n");
8005 dump_end (TDI_class, stream);
8008 /* Dump a function or thunk and its thunkees. */
8010 static void
8011 dump_thunk (FILE *stream, int indent, tree thunk)
8013 static const char spaces[] = " ";
8014 tree name = DECL_NAME (thunk);
8015 tree thunks;
8017 fprintf (stream, "%.*s%p %s %s", indent, spaces,
8018 (void *)thunk,
8019 !DECL_THUNK_P (thunk) ? "function"
8020 : DECL_THIS_THUNK_P (thunk) ? "this-thunk" : "covariant-thunk",
8021 name ? IDENTIFIER_POINTER (name) : "<unset>");
8022 if (DECL_THUNK_P (thunk))
8024 HOST_WIDE_INT fixed_adjust = THUNK_FIXED_OFFSET (thunk);
8025 tree virtual_adjust = THUNK_VIRTUAL_OFFSET (thunk);
8027 fprintf (stream, " fixed=" HOST_WIDE_INT_PRINT_DEC, fixed_adjust);
8028 if (!virtual_adjust)
8029 /*NOP*/;
8030 else if (DECL_THIS_THUNK_P (thunk))
8031 fprintf (stream, " vcall=" HOST_WIDE_INT_PRINT_DEC,
8032 tree_low_cst (virtual_adjust, 0));
8033 else
8034 fprintf (stream, " vbase=" HOST_WIDE_INT_PRINT_DEC "(%s)",
8035 tree_low_cst (BINFO_VPTR_FIELD (virtual_adjust), 0),
8036 type_as_string (BINFO_TYPE (virtual_adjust), TFF_SCOPE));
8037 if (THUNK_ALIAS (thunk))
8038 fprintf (stream, " alias to %p", (void *)THUNK_ALIAS (thunk));
8040 fprintf (stream, "\n");
8041 for (thunks = DECL_THUNKS (thunk); thunks; thunks = TREE_CHAIN (thunks))
8042 dump_thunk (stream, indent + 2, thunks);
8045 /* Dump the thunks for FN. */
8047 void
8048 debug_thunks (tree fn)
8050 dump_thunk (stderr, 0, fn);
8053 /* Virtual function table initialization. */
8055 /* Create all the necessary vtables for T and its base classes. */
8057 static void
8058 finish_vtbls (tree t)
8060 tree vbase;
8061 vec<constructor_elt, va_gc> *v = NULL;
8062 tree vtable = BINFO_VTABLE (TYPE_BINFO (t));
8064 /* We lay out the primary and secondary vtables in one contiguous
8065 vtable. The primary vtable is first, followed by the non-virtual
8066 secondary vtables in inheritance graph order. */
8067 accumulate_vtbl_inits (TYPE_BINFO (t), TYPE_BINFO (t), TYPE_BINFO (t),
8068 vtable, t, &v);
8070 /* Then come the virtual bases, also in inheritance graph order. */
8071 for (vbase = TYPE_BINFO (t); vbase; vbase = TREE_CHAIN (vbase))
8073 if (!BINFO_VIRTUAL_P (vbase))
8074 continue;
8075 accumulate_vtbl_inits (vbase, vbase, TYPE_BINFO (t), vtable, t, &v);
8078 if (BINFO_VTABLE (TYPE_BINFO (t)))
8079 initialize_vtable (TYPE_BINFO (t), v);
8082 /* Initialize the vtable for BINFO with the INITS. */
8084 static void
8085 initialize_vtable (tree binfo, vec<constructor_elt, va_gc> *inits)
8087 tree decl;
8089 layout_vtable_decl (binfo, vec_safe_length (inits));
8090 decl = get_vtbl_decl_for_binfo (binfo);
8091 initialize_artificial_var (decl, inits);
8092 dump_vtable (BINFO_TYPE (binfo), binfo, decl);
8095 /* Build the VTT (virtual table table) for T.
8096 A class requires a VTT if it has virtual bases.
8098 This holds
8099 1 - primary virtual pointer for complete object T
8100 2 - secondary VTTs for each direct non-virtual base of T which requires a
8102 3 - secondary virtual pointers for each direct or indirect base of T which
8103 has virtual bases or is reachable via a virtual path from T.
8104 4 - secondary VTTs for each direct or indirect virtual base of T.
8106 Secondary VTTs look like complete object VTTs without part 4. */
8108 static void
8109 build_vtt (tree t)
8111 tree type;
8112 tree vtt;
8113 tree index;
8114 vec<constructor_elt, va_gc> *inits;
8116 /* Build up the initializers for the VTT. */
8117 inits = NULL;
8118 index = size_zero_node;
8119 build_vtt_inits (TYPE_BINFO (t), t, &inits, &index);
8121 /* If we didn't need a VTT, we're done. */
8122 if (!inits)
8123 return;
8125 /* Figure out the type of the VTT. */
8126 type = build_array_of_n_type (const_ptr_type_node,
8127 inits->length ());
8129 /* Now, build the VTT object itself. */
8130 vtt = build_vtable (t, mangle_vtt_for_type (t), type);
8131 initialize_artificial_var (vtt, inits);
8132 /* Add the VTT to the vtables list. */
8133 DECL_CHAIN (vtt) = DECL_CHAIN (CLASSTYPE_VTABLES (t));
8134 DECL_CHAIN (CLASSTYPE_VTABLES (t)) = vtt;
8136 dump_vtt (t, vtt);
8139 /* When building a secondary VTT, BINFO_VTABLE is set to a TREE_LIST with
8140 PURPOSE the RTTI_BINFO, VALUE the real vtable pointer for this binfo,
8141 and CHAIN the vtable pointer for this binfo after construction is
8142 complete. VALUE can also be another BINFO, in which case we recurse. */
8144 static tree
8145 binfo_ctor_vtable (tree binfo)
8147 tree vt;
8149 while (1)
8151 vt = BINFO_VTABLE (binfo);
8152 if (TREE_CODE (vt) == TREE_LIST)
8153 vt = TREE_VALUE (vt);
8154 if (TREE_CODE (vt) == TREE_BINFO)
8155 binfo = vt;
8156 else
8157 break;
8160 return vt;
8163 /* Data for secondary VTT initialization. */
8164 typedef struct secondary_vptr_vtt_init_data_s
8166 /* Is this the primary VTT? */
8167 bool top_level_p;
8169 /* Current index into the VTT. */
8170 tree index;
8172 /* Vector of initializers built up. */
8173 vec<constructor_elt, va_gc> *inits;
8175 /* The type being constructed by this secondary VTT. */
8176 tree type_being_constructed;
8177 } secondary_vptr_vtt_init_data;
8179 /* Recursively build the VTT-initializer for BINFO (which is in the
8180 hierarchy dominated by T). INITS points to the end of the initializer
8181 list to date. INDEX is the VTT index where the next element will be
8182 replaced. Iff BINFO is the binfo for T, this is the top level VTT (i.e.
8183 not a subvtt for some base of T). When that is so, we emit the sub-VTTs
8184 for virtual bases of T. When it is not so, we build the constructor
8185 vtables for the BINFO-in-T variant. */
8187 static void
8188 build_vtt_inits (tree binfo, tree t, vec<constructor_elt, va_gc> **inits,
8189 tree *index)
8191 int i;
8192 tree b;
8193 tree init;
8194 secondary_vptr_vtt_init_data data;
8195 int top_level_p = SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), t);
8197 /* We only need VTTs for subobjects with virtual bases. */
8198 if (!CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo)))
8199 return;
8201 /* We need to use a construction vtable if this is not the primary
8202 VTT. */
8203 if (!top_level_p)
8205 build_ctor_vtbl_group (binfo, t);
8207 /* Record the offset in the VTT where this sub-VTT can be found. */
8208 BINFO_SUBVTT_INDEX (binfo) = *index;
8211 /* Add the address of the primary vtable for the complete object. */
8212 init = binfo_ctor_vtable (binfo);
8213 CONSTRUCTOR_APPEND_ELT (*inits, NULL_TREE, init);
8214 if (top_level_p)
8216 gcc_assert (!BINFO_VPTR_INDEX (binfo));
8217 BINFO_VPTR_INDEX (binfo) = *index;
8219 *index = size_binop (PLUS_EXPR, *index, TYPE_SIZE_UNIT (ptr_type_node));
8221 /* Recursively add the secondary VTTs for non-virtual bases. */
8222 for (i = 0; BINFO_BASE_ITERATE (binfo, i, b); ++i)
8223 if (!BINFO_VIRTUAL_P (b))
8224 build_vtt_inits (b, t, inits, index);
8226 /* Add secondary virtual pointers for all subobjects of BINFO with
8227 either virtual bases or reachable along a virtual path, except
8228 subobjects that are non-virtual primary bases. */
8229 data.top_level_p = top_level_p;
8230 data.index = *index;
8231 data.inits = *inits;
8232 data.type_being_constructed = BINFO_TYPE (binfo);
8234 dfs_walk_once (binfo, dfs_build_secondary_vptr_vtt_inits, NULL, &data);
8236 *index = data.index;
8238 /* data.inits might have grown as we added secondary virtual pointers.
8239 Make sure our caller knows about the new vector. */
8240 *inits = data.inits;
8242 if (top_level_p)
8243 /* Add the secondary VTTs for virtual bases in inheritance graph
8244 order. */
8245 for (b = TYPE_BINFO (BINFO_TYPE (binfo)); b; b = TREE_CHAIN (b))
8247 if (!BINFO_VIRTUAL_P (b))
8248 continue;
8250 build_vtt_inits (b, t, inits, index);
8252 else
8253 /* Remove the ctor vtables we created. */
8254 dfs_walk_all (binfo, dfs_fixup_binfo_vtbls, NULL, binfo);
8257 /* Called from build_vtt_inits via dfs_walk. BINFO is the binfo for the base
8258 in most derived. DATA is a SECONDARY_VPTR_VTT_INIT_DATA structure. */
8260 static tree
8261 dfs_build_secondary_vptr_vtt_inits (tree binfo, void *data_)
8263 secondary_vptr_vtt_init_data *data = (secondary_vptr_vtt_init_data *)data_;
8265 /* We don't care about bases that don't have vtables. */
8266 if (!TYPE_VFIELD (BINFO_TYPE (binfo)))
8267 return dfs_skip_bases;
8269 /* We're only interested in proper subobjects of the type being
8270 constructed. */
8271 if (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), data->type_being_constructed))
8272 return NULL_TREE;
8274 /* We're only interested in bases with virtual bases or reachable
8275 via a virtual path from the type being constructed. */
8276 if (!(CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo))
8277 || binfo_via_virtual (binfo, data->type_being_constructed)))
8278 return dfs_skip_bases;
8280 /* We're not interested in non-virtual primary bases. */
8281 if (!BINFO_VIRTUAL_P (binfo) && BINFO_PRIMARY_P (binfo))
8282 return NULL_TREE;
8284 /* Record the index where this secondary vptr can be found. */
8285 if (data->top_level_p)
8287 gcc_assert (!BINFO_VPTR_INDEX (binfo));
8288 BINFO_VPTR_INDEX (binfo) = data->index;
8290 if (BINFO_VIRTUAL_P (binfo))
8292 /* It's a primary virtual base, and this is not a
8293 construction vtable. Find the base this is primary of in
8294 the inheritance graph, and use that base's vtable
8295 now. */
8296 while (BINFO_PRIMARY_P (binfo))
8297 binfo = BINFO_INHERITANCE_CHAIN (binfo);
8301 /* Add the initializer for the secondary vptr itself. */
8302 CONSTRUCTOR_APPEND_ELT (data->inits, NULL_TREE, binfo_ctor_vtable (binfo));
8304 /* Advance the vtt index. */
8305 data->index = size_binop (PLUS_EXPR, data->index,
8306 TYPE_SIZE_UNIT (ptr_type_node));
8308 return NULL_TREE;
8311 /* Called from build_vtt_inits via dfs_walk. After building
8312 constructor vtables and generating the sub-vtt from them, we need
8313 to restore the BINFO_VTABLES that were scribbled on. DATA is the
8314 binfo of the base whose sub vtt was generated. */
8316 static tree
8317 dfs_fixup_binfo_vtbls (tree binfo, void* data)
8319 tree vtable = BINFO_VTABLE (binfo);
8321 if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
8322 /* If this class has no vtable, none of its bases do. */
8323 return dfs_skip_bases;
8325 if (!vtable)
8326 /* This might be a primary base, so have no vtable in this
8327 hierarchy. */
8328 return NULL_TREE;
8330 /* If we scribbled the construction vtable vptr into BINFO, clear it
8331 out now. */
8332 if (TREE_CODE (vtable) == TREE_LIST
8333 && (TREE_PURPOSE (vtable) == (tree) data))
8334 BINFO_VTABLE (binfo) = TREE_CHAIN (vtable);
8336 return NULL_TREE;
8339 /* Build the construction vtable group for BINFO which is in the
8340 hierarchy dominated by T. */
8342 static void
8343 build_ctor_vtbl_group (tree binfo, tree t)
8345 tree type;
8346 tree vtbl;
8347 tree id;
8348 tree vbase;
8349 vec<constructor_elt, va_gc> *v;
8351 /* See if we've already created this construction vtable group. */
8352 id = mangle_ctor_vtbl_for_type (t, binfo);
8353 if (IDENTIFIER_GLOBAL_VALUE (id))
8354 return;
8356 gcc_assert (!SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), t));
8357 /* Build a version of VTBL (with the wrong type) for use in
8358 constructing the addresses of secondary vtables in the
8359 construction vtable group. */
8360 vtbl = build_vtable (t, id, ptr_type_node);
8361 DECL_CONSTRUCTION_VTABLE_P (vtbl) = 1;
8363 v = NULL;
8364 accumulate_vtbl_inits (binfo, TYPE_BINFO (TREE_TYPE (binfo)),
8365 binfo, vtbl, t, &v);
8367 /* Add the vtables for each of our virtual bases using the vbase in T
8368 binfo. */
8369 for (vbase = TYPE_BINFO (BINFO_TYPE (binfo));
8370 vbase;
8371 vbase = TREE_CHAIN (vbase))
8373 tree b;
8375 if (!BINFO_VIRTUAL_P (vbase))
8376 continue;
8377 b = copied_binfo (vbase, binfo);
8379 accumulate_vtbl_inits (b, vbase, binfo, vtbl, t, &v);
8382 /* Figure out the type of the construction vtable. */
8383 type = build_array_of_n_type (vtable_entry_type, v->length ());
8384 layout_type (type);
8385 TREE_TYPE (vtbl) = type;
8386 DECL_SIZE (vtbl) = DECL_SIZE_UNIT (vtbl) = NULL_TREE;
8387 layout_decl (vtbl, 0);
8389 /* Initialize the construction vtable. */
8390 CLASSTYPE_VTABLES (t) = chainon (CLASSTYPE_VTABLES (t), vtbl);
8391 initialize_artificial_var (vtbl, v);
8392 dump_vtable (t, binfo, vtbl);
8395 /* Add the vtbl initializers for BINFO (and its bases other than
8396 non-virtual primaries) to the list of INITS. BINFO is in the
8397 hierarchy dominated by T. RTTI_BINFO is the binfo within T of
8398 the constructor the vtbl inits should be accumulated for. (If this
8399 is the complete object vtbl then RTTI_BINFO will be TYPE_BINFO (T).)
8400 ORIG_BINFO is the binfo for this object within BINFO_TYPE (RTTI_BINFO).
8401 BINFO is the active base equivalent of ORIG_BINFO in the inheritance
8402 graph of T. Both BINFO and ORIG_BINFO will have the same BINFO_TYPE,
8403 but are not necessarily the same in terms of layout. */
8405 static void
8406 accumulate_vtbl_inits (tree binfo,
8407 tree orig_binfo,
8408 tree rtti_binfo,
8409 tree vtbl,
8410 tree t,
8411 vec<constructor_elt, va_gc> **inits)
8413 int i;
8414 tree base_binfo;
8415 int ctor_vtbl_p = !SAME_BINFO_TYPE_P (BINFO_TYPE (rtti_binfo), t);
8417 gcc_assert (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), BINFO_TYPE (orig_binfo)));
8419 /* If it doesn't have a vptr, we don't do anything. */
8420 if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
8421 return;
8423 /* If we're building a construction vtable, we're not interested in
8424 subobjects that don't require construction vtables. */
8425 if (ctor_vtbl_p
8426 && !CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo))
8427 && !binfo_via_virtual (orig_binfo, BINFO_TYPE (rtti_binfo)))
8428 return;
8430 /* Build the initializers for the BINFO-in-T vtable. */
8431 dfs_accumulate_vtbl_inits (binfo, orig_binfo, rtti_binfo, vtbl, t, inits);
8433 /* Walk the BINFO and its bases. We walk in preorder so that as we
8434 initialize each vtable we can figure out at what offset the
8435 secondary vtable lies from the primary vtable. We can't use
8436 dfs_walk here because we need to iterate through bases of BINFO
8437 and RTTI_BINFO simultaneously. */
8438 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
8440 /* Skip virtual bases. */
8441 if (BINFO_VIRTUAL_P (base_binfo))
8442 continue;
8443 accumulate_vtbl_inits (base_binfo,
8444 BINFO_BASE_BINFO (orig_binfo, i),
8445 rtti_binfo, vtbl, t,
8446 inits);
8450 /* Called from accumulate_vtbl_inits. Adds the initializers for the
8451 BINFO vtable to L. */
8453 static void
8454 dfs_accumulate_vtbl_inits (tree binfo,
8455 tree orig_binfo,
8456 tree rtti_binfo,
8457 tree orig_vtbl,
8458 tree t,
8459 vec<constructor_elt, va_gc> **l)
8461 tree vtbl = NULL_TREE;
8462 int ctor_vtbl_p = !SAME_BINFO_TYPE_P (BINFO_TYPE (rtti_binfo), t);
8463 int n_inits;
8465 if (ctor_vtbl_p
8466 && BINFO_VIRTUAL_P (orig_binfo) && BINFO_PRIMARY_P (orig_binfo))
8468 /* In the hierarchy of BINFO_TYPE (RTTI_BINFO), this is a
8469 primary virtual base. If it is not the same primary in
8470 the hierarchy of T, we'll need to generate a ctor vtable
8471 for it, to place at its location in T. If it is the same
8472 primary, we still need a VTT entry for the vtable, but it
8473 should point to the ctor vtable for the base it is a
8474 primary for within the sub-hierarchy of RTTI_BINFO.
8476 There are three possible cases:
8478 1) We are in the same place.
8479 2) We are a primary base within a lost primary virtual base of
8480 RTTI_BINFO.
8481 3) We are primary to something not a base of RTTI_BINFO. */
8483 tree b;
8484 tree last = NULL_TREE;
8486 /* First, look through the bases we are primary to for RTTI_BINFO
8487 or a virtual base. */
8488 b = binfo;
8489 while (BINFO_PRIMARY_P (b))
8491 b = BINFO_INHERITANCE_CHAIN (b);
8492 last = b;
8493 if (BINFO_VIRTUAL_P (b) || b == rtti_binfo)
8494 goto found;
8496 /* If we run out of primary links, keep looking down our
8497 inheritance chain; we might be an indirect primary. */
8498 for (b = last; b; b = BINFO_INHERITANCE_CHAIN (b))
8499 if (BINFO_VIRTUAL_P (b) || b == rtti_binfo)
8500 break;
8501 found:
8503 /* If we found RTTI_BINFO, this is case 1. If we found a virtual
8504 base B and it is a base of RTTI_BINFO, this is case 2. In
8505 either case, we share our vtable with LAST, i.e. the
8506 derived-most base within B of which we are a primary. */
8507 if (b == rtti_binfo
8508 || (b && binfo_for_vbase (BINFO_TYPE (b), BINFO_TYPE (rtti_binfo))))
8509 /* Just set our BINFO_VTABLE to point to LAST, as we may not have
8510 set LAST's BINFO_VTABLE yet. We'll extract the actual vptr in
8511 binfo_ctor_vtable after everything's been set up. */
8512 vtbl = last;
8514 /* Otherwise, this is case 3 and we get our own. */
8516 else if (!BINFO_NEW_VTABLE_MARKED (orig_binfo))
8517 return;
8519 n_inits = vec_safe_length (*l);
8521 if (!vtbl)
8523 tree index;
8524 int non_fn_entries;
8526 /* Add the initializer for this vtable. */
8527 build_vtbl_initializer (binfo, orig_binfo, t, rtti_binfo,
8528 &non_fn_entries, l);
8530 /* Figure out the position to which the VPTR should point. */
8531 vtbl = build1 (ADDR_EXPR, vtbl_ptr_type_node, orig_vtbl);
8532 index = size_binop (MULT_EXPR,
8533 TYPE_SIZE_UNIT (vtable_entry_type),
8534 size_int (non_fn_entries + n_inits));
8535 vtbl = fold_build_pointer_plus (vtbl, index);
8538 if (ctor_vtbl_p)
8539 /* For a construction vtable, we can't overwrite BINFO_VTABLE.
8540 So, we make a TREE_LIST. Later, dfs_fixup_binfo_vtbls will
8541 straighten this out. */
8542 BINFO_VTABLE (binfo) = tree_cons (rtti_binfo, vtbl, BINFO_VTABLE (binfo));
8543 else if (BINFO_PRIMARY_P (binfo) && BINFO_VIRTUAL_P (binfo))
8544 /* Throw away any unneeded intializers. */
8545 (*l)->truncate (n_inits);
8546 else
8547 /* For an ordinary vtable, set BINFO_VTABLE. */
8548 BINFO_VTABLE (binfo) = vtbl;
8551 static GTY(()) tree abort_fndecl_addr;
8553 /* Construct the initializer for BINFO's virtual function table. BINFO
8554 is part of the hierarchy dominated by T. If we're building a
8555 construction vtable, the ORIG_BINFO is the binfo we should use to
8556 find the actual function pointers to put in the vtable - but they
8557 can be overridden on the path to most-derived in the graph that
8558 ORIG_BINFO belongs. Otherwise,
8559 ORIG_BINFO should be the same as BINFO. The RTTI_BINFO is the
8560 BINFO that should be indicated by the RTTI information in the
8561 vtable; it will be a base class of T, rather than T itself, if we
8562 are building a construction vtable.
8564 The value returned is a TREE_LIST suitable for wrapping in a
8565 CONSTRUCTOR to use as the DECL_INITIAL for a vtable. If
8566 NON_FN_ENTRIES_P is not NULL, *NON_FN_ENTRIES_P is set to the
8567 number of non-function entries in the vtable.
8569 It might seem that this function should never be called with a
8570 BINFO for which BINFO_PRIMARY_P holds, the vtable for such a
8571 base is always subsumed by a derived class vtable. However, when
8572 we are building construction vtables, we do build vtables for
8573 primary bases; we need these while the primary base is being
8574 constructed. */
8576 static void
8577 build_vtbl_initializer (tree binfo,
8578 tree orig_binfo,
8579 tree t,
8580 tree rtti_binfo,
8581 int* non_fn_entries_p,
8582 vec<constructor_elt, va_gc> **inits)
8584 tree v;
8585 vtbl_init_data vid;
8586 unsigned ix, jx;
8587 tree vbinfo;
8588 vec<tree, va_gc> *vbases;
8589 constructor_elt *e;
8591 /* Initialize VID. */
8592 memset (&vid, 0, sizeof (vid));
8593 vid.binfo = binfo;
8594 vid.derived = t;
8595 vid.rtti_binfo = rtti_binfo;
8596 vid.primary_vtbl_p = SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), t);
8597 vid.ctor_vtbl_p = !SAME_BINFO_TYPE_P (BINFO_TYPE (rtti_binfo), t);
8598 vid.generate_vcall_entries = true;
8599 /* The first vbase or vcall offset is at index -3 in the vtable. */
8600 vid.index = ssize_int(-3 * TARGET_VTABLE_DATA_ENTRY_DISTANCE);
8602 /* Add entries to the vtable for RTTI. */
8603 build_rtti_vtbl_entries (binfo, &vid);
8605 /* Create an array for keeping track of the functions we've
8606 processed. When we see multiple functions with the same
8607 signature, we share the vcall offsets. */
8608 vec_alloc (vid.fns, 32);
8609 /* Add the vcall and vbase offset entries. */
8610 build_vcall_and_vbase_vtbl_entries (binfo, &vid);
8612 /* Clear BINFO_VTABLE_PATH_MARKED; it's set by
8613 build_vbase_offset_vtbl_entries. */
8614 for (vbases = CLASSTYPE_VBASECLASSES (t), ix = 0;
8615 vec_safe_iterate (vbases, ix, &vbinfo); ix++)
8616 BINFO_VTABLE_PATH_MARKED (vbinfo) = 0;
8618 /* If the target requires padding between data entries, add that now. */
8619 if (TARGET_VTABLE_DATA_ENTRY_DISTANCE > 1)
8621 int n_entries = vec_safe_length (vid.inits);
8623 vec_safe_grow (vid.inits, TARGET_VTABLE_DATA_ENTRY_DISTANCE * n_entries);
8625 /* Move data entries into their new positions and add padding
8626 after the new positions. Iterate backwards so we don't
8627 overwrite entries that we would need to process later. */
8628 for (ix = n_entries - 1;
8629 vid.inits->iterate (ix, &e);
8630 ix--)
8632 int j;
8633 int new_position = (TARGET_VTABLE_DATA_ENTRY_DISTANCE * ix
8634 + (TARGET_VTABLE_DATA_ENTRY_DISTANCE - 1));
8636 (*vid.inits)[new_position] = *e;
8638 for (j = 1; j < TARGET_VTABLE_DATA_ENTRY_DISTANCE; ++j)
8640 constructor_elt *f = &(*vid.inits)[new_position - j];
8641 f->index = NULL_TREE;
8642 f->value = build1 (NOP_EXPR, vtable_entry_type,
8643 null_pointer_node);
8648 if (non_fn_entries_p)
8649 *non_fn_entries_p = vec_safe_length (vid.inits);
8651 /* The initializers for virtual functions were built up in reverse
8652 order. Straighten them out and add them to the running list in one
8653 step. */
8654 jx = vec_safe_length (*inits);
8655 vec_safe_grow (*inits, jx + vid.inits->length ());
8657 for (ix = vid.inits->length () - 1;
8658 vid.inits->iterate (ix, &e);
8659 ix--, jx++)
8660 (**inits)[jx] = *e;
8662 /* Go through all the ordinary virtual functions, building up
8663 initializers. */
8664 for (v = BINFO_VIRTUALS (orig_binfo); v; v = TREE_CHAIN (v))
8666 tree delta;
8667 tree vcall_index;
8668 tree fn, fn_original;
8669 tree init = NULL_TREE;
8671 fn = BV_FN (v);
8672 fn_original = fn;
8673 if (DECL_THUNK_P (fn))
8675 if (!DECL_NAME (fn))
8676 finish_thunk (fn);
8677 if (THUNK_ALIAS (fn))
8679 fn = THUNK_ALIAS (fn);
8680 BV_FN (v) = fn;
8682 fn_original = THUNK_TARGET (fn);
8685 /* If the only definition of this function signature along our
8686 primary base chain is from a lost primary, this vtable slot will
8687 never be used, so just zero it out. This is important to avoid
8688 requiring extra thunks which cannot be generated with the function.
8690 We first check this in update_vtable_entry_for_fn, so we handle
8691 restored primary bases properly; we also need to do it here so we
8692 zero out unused slots in ctor vtables, rather than filling them
8693 with erroneous values (though harmless, apart from relocation
8694 costs). */
8695 if (BV_LOST_PRIMARY (v))
8696 init = size_zero_node;
8698 if (! init)
8700 /* Pull the offset for `this', and the function to call, out of
8701 the list. */
8702 delta = BV_DELTA (v);
8703 vcall_index = BV_VCALL_INDEX (v);
8705 gcc_assert (TREE_CODE (delta) == INTEGER_CST);
8706 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
8708 /* You can't call an abstract virtual function; it's abstract.
8709 So, we replace these functions with __pure_virtual. */
8710 if (DECL_PURE_VIRTUAL_P (fn_original))
8712 fn = abort_fndecl;
8713 if (!TARGET_VTABLE_USES_DESCRIPTORS)
8715 if (abort_fndecl_addr == NULL)
8716 abort_fndecl_addr
8717 = fold_convert (vfunc_ptr_type_node,
8718 build_fold_addr_expr (fn));
8719 init = abort_fndecl_addr;
8722 /* Likewise for deleted virtuals. */
8723 else if (DECL_DELETED_FN (fn_original))
8725 fn = get_identifier ("__cxa_deleted_virtual");
8726 if (!get_global_value_if_present (fn, &fn))
8727 fn = push_library_fn (fn, (build_function_type_list
8728 (void_type_node, NULL_TREE)),
8729 NULL_TREE);
8730 if (!TARGET_VTABLE_USES_DESCRIPTORS)
8731 init = fold_convert (vfunc_ptr_type_node,
8732 build_fold_addr_expr (fn));
8734 else
8736 if (!integer_zerop (delta) || vcall_index)
8738 fn = make_thunk (fn, /*this_adjusting=*/1, delta, vcall_index);
8739 if (!DECL_NAME (fn))
8740 finish_thunk (fn);
8742 /* Take the address of the function, considering it to be of an
8743 appropriate generic type. */
8744 if (!TARGET_VTABLE_USES_DESCRIPTORS)
8745 init = fold_convert (vfunc_ptr_type_node,
8746 build_fold_addr_expr (fn));
8750 /* And add it to the chain of initializers. */
8751 if (TARGET_VTABLE_USES_DESCRIPTORS)
8753 int i;
8754 if (init == size_zero_node)
8755 for (i = 0; i < TARGET_VTABLE_USES_DESCRIPTORS; ++i)
8756 CONSTRUCTOR_APPEND_ELT (*inits, NULL_TREE, init);
8757 else
8758 for (i = 0; i < TARGET_VTABLE_USES_DESCRIPTORS; ++i)
8760 tree fdesc = build2 (FDESC_EXPR, vfunc_ptr_type_node,
8761 fn, build_int_cst (NULL_TREE, i));
8762 TREE_CONSTANT (fdesc) = 1;
8764 CONSTRUCTOR_APPEND_ELT (*inits, NULL_TREE, fdesc);
8767 else
8768 CONSTRUCTOR_APPEND_ELT (*inits, NULL_TREE, init);
8772 /* Adds to vid->inits the initializers for the vbase and vcall
8773 offsets in BINFO, which is in the hierarchy dominated by T. */
8775 static void
8776 build_vcall_and_vbase_vtbl_entries (tree binfo, vtbl_init_data* vid)
8778 tree b;
8780 /* If this is a derived class, we must first create entries
8781 corresponding to the primary base class. */
8782 b = get_primary_binfo (binfo);
8783 if (b)
8784 build_vcall_and_vbase_vtbl_entries (b, vid);
8786 /* Add the vbase entries for this base. */
8787 build_vbase_offset_vtbl_entries (binfo, vid);
8788 /* Add the vcall entries for this base. */
8789 build_vcall_offset_vtbl_entries (binfo, vid);
8792 /* Returns the initializers for the vbase offset entries in the vtable
8793 for BINFO (which is part of the class hierarchy dominated by T), in
8794 reverse order. VBASE_OFFSET_INDEX gives the vtable index
8795 where the next vbase offset will go. */
8797 static void
8798 build_vbase_offset_vtbl_entries (tree binfo, vtbl_init_data* vid)
8800 tree vbase;
8801 tree t;
8802 tree non_primary_binfo;
8804 /* If there are no virtual baseclasses, then there is nothing to
8805 do. */
8806 if (!CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo)))
8807 return;
8809 t = vid->derived;
8811 /* We might be a primary base class. Go up the inheritance hierarchy
8812 until we find the most derived class of which we are a primary base:
8813 it is the offset of that which we need to use. */
8814 non_primary_binfo = binfo;
8815 while (BINFO_INHERITANCE_CHAIN (non_primary_binfo))
8817 tree b;
8819 /* If we have reached a virtual base, then it must be a primary
8820 base (possibly multi-level) of vid->binfo, or we wouldn't
8821 have called build_vcall_and_vbase_vtbl_entries for it. But it
8822 might be a lost primary, so just skip down to vid->binfo. */
8823 if (BINFO_VIRTUAL_P (non_primary_binfo))
8825 non_primary_binfo = vid->binfo;
8826 break;
8829 b = BINFO_INHERITANCE_CHAIN (non_primary_binfo);
8830 if (get_primary_binfo (b) != non_primary_binfo)
8831 break;
8832 non_primary_binfo = b;
8835 /* Go through the virtual bases, adding the offsets. */
8836 for (vbase = TYPE_BINFO (BINFO_TYPE (binfo));
8837 vbase;
8838 vbase = TREE_CHAIN (vbase))
8840 tree b;
8841 tree delta;
8843 if (!BINFO_VIRTUAL_P (vbase))
8844 continue;
8846 /* Find the instance of this virtual base in the complete
8847 object. */
8848 b = copied_binfo (vbase, binfo);
8850 /* If we've already got an offset for this virtual base, we
8851 don't need another one. */
8852 if (BINFO_VTABLE_PATH_MARKED (b))
8853 continue;
8854 BINFO_VTABLE_PATH_MARKED (b) = 1;
8856 /* Figure out where we can find this vbase offset. */
8857 delta = size_binop (MULT_EXPR,
8858 vid->index,
8859 convert (ssizetype,
8860 TYPE_SIZE_UNIT (vtable_entry_type)));
8861 if (vid->primary_vtbl_p)
8862 BINFO_VPTR_FIELD (b) = delta;
8864 if (binfo != TYPE_BINFO (t))
8865 /* The vbase offset had better be the same. */
8866 gcc_assert (tree_int_cst_equal (delta, BINFO_VPTR_FIELD (vbase)));
8868 /* The next vbase will come at a more negative offset. */
8869 vid->index = size_binop (MINUS_EXPR, vid->index,
8870 ssize_int (TARGET_VTABLE_DATA_ENTRY_DISTANCE));
8872 /* The initializer is the delta from BINFO to this virtual base.
8873 The vbase offsets go in reverse inheritance-graph order, and
8874 we are walking in inheritance graph order so these end up in
8875 the right order. */
8876 delta = size_diffop_loc (input_location,
8877 BINFO_OFFSET (b), BINFO_OFFSET (non_primary_binfo));
8879 CONSTRUCTOR_APPEND_ELT (vid->inits, NULL_TREE,
8880 fold_build1_loc (input_location, NOP_EXPR,
8881 vtable_entry_type, delta));
8885 /* Adds the initializers for the vcall offset entries in the vtable
8886 for BINFO (which is part of the class hierarchy dominated by VID->DERIVED)
8887 to VID->INITS. */
8889 static void
8890 build_vcall_offset_vtbl_entries (tree binfo, vtbl_init_data* vid)
8892 /* We only need these entries if this base is a virtual base. We
8893 compute the indices -- but do not add to the vtable -- when
8894 building the main vtable for a class. */
8895 if (binfo == TYPE_BINFO (vid->derived)
8896 || (BINFO_VIRTUAL_P (binfo)
8897 /* If BINFO is RTTI_BINFO, then (since BINFO does not
8898 correspond to VID->DERIVED), we are building a primary
8899 construction virtual table. Since this is a primary
8900 virtual table, we do not need the vcall offsets for
8901 BINFO. */
8902 && binfo != vid->rtti_binfo))
8904 /* We need a vcall offset for each of the virtual functions in this
8905 vtable. For example:
8907 class A { virtual void f (); };
8908 class B1 : virtual public A { virtual void f (); };
8909 class B2 : virtual public A { virtual void f (); };
8910 class C: public B1, public B2 { virtual void f (); };
8912 A C object has a primary base of B1, which has a primary base of A. A
8913 C also has a secondary base of B2, which no longer has a primary base
8914 of A. So the B2-in-C construction vtable needs a secondary vtable for
8915 A, which will adjust the A* to a B2* to call f. We have no way of
8916 knowing what (or even whether) this offset will be when we define B2,
8917 so we store this "vcall offset" in the A sub-vtable and look it up in
8918 a "virtual thunk" for B2::f.
8920 We need entries for all the functions in our primary vtable and
8921 in our non-virtual bases' secondary vtables. */
8922 vid->vbase = binfo;
8923 /* If we are just computing the vcall indices -- but do not need
8924 the actual entries -- not that. */
8925 if (!BINFO_VIRTUAL_P (binfo))
8926 vid->generate_vcall_entries = false;
8927 /* Now, walk through the non-virtual bases, adding vcall offsets. */
8928 add_vcall_offset_vtbl_entries_r (binfo, vid);
8932 /* Build vcall offsets, starting with those for BINFO. */
8934 static void
8935 add_vcall_offset_vtbl_entries_r (tree binfo, vtbl_init_data* vid)
8937 int i;
8938 tree primary_binfo;
8939 tree base_binfo;
8941 /* Don't walk into virtual bases -- except, of course, for the
8942 virtual base for which we are building vcall offsets. Any
8943 primary virtual base will have already had its offsets generated
8944 through the recursion in build_vcall_and_vbase_vtbl_entries. */
8945 if (BINFO_VIRTUAL_P (binfo) && vid->vbase != binfo)
8946 return;
8948 /* If BINFO has a primary base, process it first. */
8949 primary_binfo = get_primary_binfo (binfo);
8950 if (primary_binfo)
8951 add_vcall_offset_vtbl_entries_r (primary_binfo, vid);
8953 /* Add BINFO itself to the list. */
8954 add_vcall_offset_vtbl_entries_1 (binfo, vid);
8956 /* Scan the non-primary bases of BINFO. */
8957 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
8958 if (base_binfo != primary_binfo)
8959 add_vcall_offset_vtbl_entries_r (base_binfo, vid);
8962 /* Called from build_vcall_offset_vtbl_entries_r. */
8964 static void
8965 add_vcall_offset_vtbl_entries_1 (tree binfo, vtbl_init_data* vid)
8967 /* Make entries for the rest of the virtuals. */
8968 if (abi_version_at_least (2))
8970 tree orig_fn;
8972 /* The ABI requires that the methods be processed in declaration
8973 order. G++ 3.2 used the order in the vtable. */
8974 for (orig_fn = TYPE_METHODS (BINFO_TYPE (binfo));
8975 orig_fn;
8976 orig_fn = DECL_CHAIN (orig_fn))
8977 if (DECL_VINDEX (orig_fn))
8978 add_vcall_offset (orig_fn, binfo, vid);
8980 else
8982 tree derived_virtuals;
8983 tree base_virtuals;
8984 tree orig_virtuals;
8985 /* If BINFO is a primary base, the most derived class which has
8986 BINFO as a primary base; otherwise, just BINFO. */
8987 tree non_primary_binfo;
8989 /* We might be a primary base class. Go up the inheritance hierarchy
8990 until we find the most derived class of which we are a primary base:
8991 it is the BINFO_VIRTUALS there that we need to consider. */
8992 non_primary_binfo = binfo;
8993 while (BINFO_INHERITANCE_CHAIN (non_primary_binfo))
8995 tree b;
8997 /* If we have reached a virtual base, then it must be vid->vbase,
8998 because we ignore other virtual bases in
8999 add_vcall_offset_vtbl_entries_r. In turn, it must be a primary
9000 base (possibly multi-level) of vid->binfo, or we wouldn't
9001 have called build_vcall_and_vbase_vtbl_entries for it. But it
9002 might be a lost primary, so just skip down to vid->binfo. */
9003 if (BINFO_VIRTUAL_P (non_primary_binfo))
9005 gcc_assert (non_primary_binfo == vid->vbase);
9006 non_primary_binfo = vid->binfo;
9007 break;
9010 b = BINFO_INHERITANCE_CHAIN (non_primary_binfo);
9011 if (get_primary_binfo (b) != non_primary_binfo)
9012 break;
9013 non_primary_binfo = b;
9016 if (vid->ctor_vtbl_p)
9017 /* For a ctor vtable we need the equivalent binfo within the hierarchy
9018 where rtti_binfo is the most derived type. */
9019 non_primary_binfo
9020 = original_binfo (non_primary_binfo, vid->rtti_binfo);
9022 for (base_virtuals = BINFO_VIRTUALS (binfo),
9023 derived_virtuals = BINFO_VIRTUALS (non_primary_binfo),
9024 orig_virtuals = BINFO_VIRTUALS (TYPE_BINFO (BINFO_TYPE (binfo)));
9025 base_virtuals;
9026 base_virtuals = TREE_CHAIN (base_virtuals),
9027 derived_virtuals = TREE_CHAIN (derived_virtuals),
9028 orig_virtuals = TREE_CHAIN (orig_virtuals))
9030 tree orig_fn;
9032 /* Find the declaration that originally caused this function to
9033 be present in BINFO_TYPE (binfo). */
9034 orig_fn = BV_FN (orig_virtuals);
9036 /* When processing BINFO, we only want to generate vcall slots for
9037 function slots introduced in BINFO. So don't try to generate
9038 one if the function isn't even defined in BINFO. */
9039 if (!SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), DECL_CONTEXT (orig_fn)))
9040 continue;
9042 add_vcall_offset (orig_fn, binfo, vid);
9047 /* Add a vcall offset entry for ORIG_FN to the vtable. */
9049 static void
9050 add_vcall_offset (tree orig_fn, tree binfo, vtbl_init_data *vid)
9052 size_t i;
9053 tree vcall_offset;
9054 tree derived_entry;
9056 /* If there is already an entry for a function with the same
9057 signature as FN, then we do not need a second vcall offset.
9058 Check the list of functions already present in the derived
9059 class vtable. */
9060 FOR_EACH_VEC_SAFE_ELT (vid->fns, i, derived_entry)
9062 if (same_signature_p (derived_entry, orig_fn)
9063 /* We only use one vcall offset for virtual destructors,
9064 even though there are two virtual table entries. */
9065 || (DECL_DESTRUCTOR_P (derived_entry)
9066 && DECL_DESTRUCTOR_P (orig_fn)))
9067 return;
9070 /* If we are building these vcall offsets as part of building
9071 the vtable for the most derived class, remember the vcall
9072 offset. */
9073 if (vid->binfo == TYPE_BINFO (vid->derived))
9075 tree_pair_s elt = {orig_fn, vid->index};
9076 vec_safe_push (CLASSTYPE_VCALL_INDICES (vid->derived), elt);
9079 /* The next vcall offset will be found at a more negative
9080 offset. */
9081 vid->index = size_binop (MINUS_EXPR, vid->index,
9082 ssize_int (TARGET_VTABLE_DATA_ENTRY_DISTANCE));
9084 /* Keep track of this function. */
9085 vec_safe_push (vid->fns, orig_fn);
9087 if (vid->generate_vcall_entries)
9089 tree base;
9090 tree fn;
9092 /* Find the overriding function. */
9093 fn = find_final_overrider (vid->rtti_binfo, binfo, orig_fn);
9094 if (fn == error_mark_node)
9095 vcall_offset = build_zero_cst (vtable_entry_type);
9096 else
9098 base = TREE_VALUE (fn);
9100 /* The vbase we're working on is a primary base of
9101 vid->binfo. But it might be a lost primary, so its
9102 BINFO_OFFSET might be wrong, so we just use the
9103 BINFO_OFFSET from vid->binfo. */
9104 vcall_offset = size_diffop_loc (input_location,
9105 BINFO_OFFSET (base),
9106 BINFO_OFFSET (vid->binfo));
9107 vcall_offset = fold_build1_loc (input_location,
9108 NOP_EXPR, vtable_entry_type,
9109 vcall_offset);
9111 /* Add the initializer to the vtable. */
9112 CONSTRUCTOR_APPEND_ELT (vid->inits, NULL_TREE, vcall_offset);
9116 /* Return vtbl initializers for the RTTI entries corresponding to the
9117 BINFO's vtable. The RTTI entries should indicate the object given
9118 by VID->rtti_binfo. */
9120 static void
9121 build_rtti_vtbl_entries (tree binfo, vtbl_init_data* vid)
9123 tree b;
9124 tree t;
9125 tree offset;
9126 tree decl;
9127 tree init;
9129 t = BINFO_TYPE (vid->rtti_binfo);
9131 /* To find the complete object, we will first convert to our most
9132 primary base, and then add the offset in the vtbl to that value. */
9133 b = binfo;
9134 while (CLASSTYPE_HAS_PRIMARY_BASE_P (BINFO_TYPE (b))
9135 && !BINFO_LOST_PRIMARY_P (b))
9137 tree primary_base;
9139 primary_base = get_primary_binfo (b);
9140 gcc_assert (BINFO_PRIMARY_P (primary_base)
9141 && BINFO_INHERITANCE_CHAIN (primary_base) == b);
9142 b = primary_base;
9144 offset = size_diffop_loc (input_location,
9145 BINFO_OFFSET (vid->rtti_binfo), BINFO_OFFSET (b));
9147 /* The second entry is the address of the typeinfo object. */
9148 if (flag_rtti)
9149 decl = build_address (get_tinfo_decl (t));
9150 else
9151 decl = integer_zero_node;
9153 /* Convert the declaration to a type that can be stored in the
9154 vtable. */
9155 init = build_nop (vfunc_ptr_type_node, decl);
9156 CONSTRUCTOR_APPEND_ELT (vid->inits, NULL_TREE, init);
9158 /* Add the offset-to-top entry. It comes earlier in the vtable than
9159 the typeinfo entry. Convert the offset to look like a
9160 function pointer, so that we can put it in the vtable. */
9161 init = build_nop (vfunc_ptr_type_node, offset);
9162 CONSTRUCTOR_APPEND_ELT (vid->inits, NULL_TREE, init);
9165 /* TRUE iff TYPE is uniquely derived from PARENT. Ignores
9166 accessibility. */
9168 bool
9169 uniquely_derived_from_p (tree parent, tree type)
9171 tree base = lookup_base (type, parent, ba_unique, NULL, tf_none);
9172 return base && base != error_mark_node;
9175 /* TRUE iff TYPE is publicly & uniquely derived from PARENT. */
9177 bool
9178 publicly_uniquely_derived_p (tree parent, tree type)
9180 tree base = lookup_base (type, parent, ba_ignore_scope | ba_check,
9181 NULL, tf_none);
9182 return base && base != error_mark_node;
9185 #include "gt-cp-class.h"