class.c (build_vtable): Align vtables to TARGET_VTABLE_ENTRY_ALIGN ignoring other...
[gcc.git] / gcc / cp / class.c
1 /* Functions related to building classes and their related objects.
2 Copyright (C) 1987-2014 Free Software Foundation, Inc.
3 Contributed by Michael Tiemann (tiemann@cygnus.com)
4
5 This file is part of GCC.
6
7 GCC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3, or (at your option)
10 any later version.
11
12 GCC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3. If not see
19 <http://www.gnu.org/licenses/>. */
20
21
22 /* High-level class interface. */
23
24 #include "config.h"
25 #include "system.h"
26 #include "coretypes.h"
27 #include "tm.h"
28 #include "tree.h"
29 #include "stringpool.h"
30 #include "stor-layout.h"
31 #include "attribs.h"
32 #include "pointer-set.h"
33 #include "hash-table.h"
34 #include "cp-tree.h"
35 #include "flags.h"
36 #include "toplev.h"
37 #include "target.h"
38 #include "convert.h"
39 #include "cgraph.h"
40 #include "dumpfile.h"
41 #include "splay-tree.h"
42 #include "gimplify.h"
43 #include "wide-int.h"
44
45 /* The number of nested classes being processed. If we are not in the
46 scope of any class, this is zero. */
47
48 int current_class_depth;
49
50 /* In order to deal with nested classes, we keep a stack of classes.
51 The topmost entry is the innermost class, and is the entry at index
52 CURRENT_CLASS_DEPTH */
53
54 typedef struct class_stack_node {
55 /* The name of the class. */
56 tree name;
57
58 /* The _TYPE node for the class. */
59 tree type;
60
61 /* The access specifier pending for new declarations in the scope of
62 this class. */
63 tree access;
64
65 /* If were defining TYPE, the names used in this class. */
66 splay_tree names_used;
67
68 /* Nonzero if this class is no longer open, because of a call to
69 push_to_top_level. */
70 size_t hidden;
71 }* class_stack_node_t;
72
73 typedef struct vtbl_init_data_s
74 {
75 /* The base for which we're building initializers. */
76 tree binfo;
77 /* The type of the most-derived type. */
78 tree derived;
79 /* The binfo for the dynamic type. This will be TYPE_BINFO (derived),
80 unless ctor_vtbl_p is true. */
81 tree rtti_binfo;
82 /* The negative-index vtable initializers built up so far. These
83 are in order from least negative index to most negative index. */
84 vec<constructor_elt, va_gc> *inits;
85 /* The binfo for the virtual base for which we're building
86 vcall offset initializers. */
87 tree vbase;
88 /* The functions in vbase for which we have already provided vcall
89 offsets. */
90 vec<tree, va_gc> *fns;
91 /* The vtable index of the next vcall or vbase offset. */
92 tree index;
93 /* Nonzero if we are building the initializer for the primary
94 vtable. */
95 int primary_vtbl_p;
96 /* Nonzero if we are building the initializer for a construction
97 vtable. */
98 int ctor_vtbl_p;
99 /* True when adding vcall offset entries to the vtable. False when
100 merely computing the indices. */
101 bool generate_vcall_entries;
102 } vtbl_init_data;
103
104 /* The type of a function passed to walk_subobject_offsets. */
105 typedef int (*subobject_offset_fn) (tree, tree, splay_tree);
106
107 /* The stack itself. This is a dynamically resized array. The
108 number of elements allocated is CURRENT_CLASS_STACK_SIZE. */
109 static int current_class_stack_size;
110 static class_stack_node_t current_class_stack;
111
112 /* The size of the largest empty class seen in this translation unit. */
113 static GTY (()) tree sizeof_biggest_empty_class;
114
115 /* An array of all local classes present in this translation unit, in
116 declaration order. */
117 vec<tree, va_gc> *local_classes;
118
119 static tree get_vfield_name (tree);
120 static void finish_struct_anon (tree);
121 static tree get_vtable_name (tree);
122 static tree get_basefndecls (tree, tree);
123 static int build_primary_vtable (tree, tree);
124 static int build_secondary_vtable (tree);
125 static void finish_vtbls (tree);
126 static void modify_vtable_entry (tree, tree, tree, tree, tree *);
127 static void finish_struct_bits (tree);
128 static int alter_access (tree, tree, tree);
129 static void handle_using_decl (tree, tree);
130 static tree dfs_modify_vtables (tree, void *);
131 static tree modify_all_vtables (tree, tree);
132 static void determine_primary_bases (tree);
133 static void finish_struct_methods (tree);
134 static void maybe_warn_about_overly_private_class (tree);
135 static int method_name_cmp (const void *, const void *);
136 static int resort_method_name_cmp (const void *, const void *);
137 static void add_implicitly_declared_members (tree, tree*, int, int);
138 static tree fixed_type_or_null (tree, int *, int *);
139 static tree build_simple_base_path (tree expr, tree binfo);
140 static tree build_vtbl_ref_1 (tree, tree);
141 static void build_vtbl_initializer (tree, tree, tree, tree, int *,
142 vec<constructor_elt, va_gc> **);
143 static int count_fields (tree);
144 static int add_fields_to_record_type (tree, struct sorted_fields_type*, int);
145 static void insert_into_classtype_sorted_fields (tree, tree, int);
146 static bool check_bitfield_decl (tree);
147 static void check_field_decl (tree, tree, int *, int *, int *);
148 static void check_field_decls (tree, tree *, int *, int *);
149 static tree *build_base_field (record_layout_info, tree, splay_tree, tree *);
150 static void build_base_fields (record_layout_info, splay_tree, tree *);
151 static void check_methods (tree);
152 static void remove_zero_width_bit_fields (tree);
153 static bool accessible_nvdtor_p (tree);
154 static void check_bases (tree, int *, int *);
155 static void check_bases_and_members (tree);
156 static tree create_vtable_ptr (tree, tree *);
157 static void include_empty_classes (record_layout_info);
158 static void layout_class_type (tree, tree *);
159 static void propagate_binfo_offsets (tree, tree);
160 static void layout_virtual_bases (record_layout_info, splay_tree);
161 static void build_vbase_offset_vtbl_entries (tree, vtbl_init_data *);
162 static void add_vcall_offset_vtbl_entries_r (tree, vtbl_init_data *);
163 static void add_vcall_offset_vtbl_entries_1 (tree, vtbl_init_data *);
164 static void build_vcall_offset_vtbl_entries (tree, vtbl_init_data *);
165 static void add_vcall_offset (tree, tree, vtbl_init_data *);
166 static void layout_vtable_decl (tree, int);
167 static tree dfs_find_final_overrider_pre (tree, void *);
168 static tree dfs_find_final_overrider_post (tree, void *);
169 static tree find_final_overrider (tree, tree, tree);
170 static int make_new_vtable (tree, tree);
171 static tree get_primary_binfo (tree);
172 static int maybe_indent_hierarchy (FILE *, int, int);
173 static tree dump_class_hierarchy_r (FILE *, int, tree, tree, int);
174 static void dump_class_hierarchy (tree);
175 static void dump_class_hierarchy_1 (FILE *, int, tree);
176 static void dump_array (FILE *, tree);
177 static void dump_vtable (tree, tree, tree);
178 static void dump_vtt (tree, tree);
179 static void dump_thunk (FILE *, int, tree);
180 static tree build_vtable (tree, tree, tree);
181 static void initialize_vtable (tree, vec<constructor_elt, va_gc> *);
182 static void layout_nonempty_base_or_field (record_layout_info,
183 tree, tree, splay_tree);
184 static tree end_of_class (tree, int);
185 static bool layout_empty_base (record_layout_info, tree, tree, splay_tree);
186 static void accumulate_vtbl_inits (tree, tree, tree, tree, tree,
187 vec<constructor_elt, va_gc> **);
188 static void dfs_accumulate_vtbl_inits (tree, tree, tree, tree, tree,
189 vec<constructor_elt, va_gc> **);
190 static void build_rtti_vtbl_entries (tree, vtbl_init_data *);
191 static void build_vcall_and_vbase_vtbl_entries (tree, vtbl_init_data *);
192 static void clone_constructors_and_destructors (tree);
193 static tree build_clone (tree, tree);
194 static void update_vtable_entry_for_fn (tree, tree, tree, tree *, unsigned);
195 static void build_ctor_vtbl_group (tree, tree);
196 static void build_vtt (tree);
197 static tree binfo_ctor_vtable (tree);
198 static void build_vtt_inits (tree, tree, vec<constructor_elt, va_gc> **,
199 tree *);
200 static tree dfs_build_secondary_vptr_vtt_inits (tree, void *);
201 static tree dfs_fixup_binfo_vtbls (tree, void *);
202 static int record_subobject_offset (tree, tree, splay_tree);
203 static int check_subobject_offset (tree, tree, splay_tree);
204 static int walk_subobject_offsets (tree, subobject_offset_fn,
205 tree, splay_tree, tree, int);
206 static void record_subobject_offsets (tree, tree, splay_tree, bool);
207 static int layout_conflict_p (tree, tree, splay_tree, int);
208 static int splay_tree_compare_integer_csts (splay_tree_key k1,
209 splay_tree_key k2);
210 static void warn_about_ambiguous_bases (tree);
211 static bool type_requires_array_cookie (tree);
212 static bool contains_empty_class_p (tree);
213 static bool base_derived_from (tree, tree);
214 static int empty_base_at_nonzero_offset_p (tree, tree, splay_tree);
215 static tree end_of_base (tree);
216 static tree get_vcall_index (tree, tree);
217
218 /* Variables shared between class.c and call.c. */
219
220 int n_vtables = 0;
221 int n_vtable_entries = 0;
222 int n_vtable_searches = 0;
223 int n_vtable_elems = 0;
224 int n_convert_harshness = 0;
225 int n_compute_conversion_costs = 0;
226 int n_inner_fields_searched = 0;
227
228 /* Convert to or from a base subobject. EXPR is an expression of type
229 `A' or `A*', an expression of type `B' or `B*' is returned. To
230 convert A to a base B, CODE is PLUS_EXPR and BINFO is the binfo for
231 the B base instance within A. To convert base A to derived B, CODE
232 is MINUS_EXPR and BINFO is the binfo for the A instance within B.
233 In this latter case, A must not be a morally virtual base of B.
234 NONNULL is true if EXPR is known to be non-NULL (this is only
235 needed when EXPR is of pointer type). CV qualifiers are preserved
236 from EXPR. */
237
238 tree
239 build_base_path (enum tree_code code,
240 tree expr,
241 tree binfo,
242 int nonnull,
243 tsubst_flags_t complain)
244 {
245 tree v_binfo = NULL_TREE;
246 tree d_binfo = NULL_TREE;
247 tree probe;
248 tree offset;
249 tree target_type;
250 tree null_test = NULL;
251 tree ptr_target_type;
252 int fixed_type_p;
253 int want_pointer = TYPE_PTR_P (TREE_TYPE (expr));
254 bool has_empty = false;
255 bool virtual_access;
256
257 if (expr == error_mark_node || binfo == error_mark_node || !binfo)
258 return error_mark_node;
259
260 for (probe = binfo; probe; probe = BINFO_INHERITANCE_CHAIN (probe))
261 {
262 d_binfo = probe;
263 if (is_empty_class (BINFO_TYPE (probe)))
264 has_empty = true;
265 if (!v_binfo && BINFO_VIRTUAL_P (probe))
266 v_binfo = probe;
267 }
268
269 probe = TYPE_MAIN_VARIANT (TREE_TYPE (expr));
270 if (want_pointer)
271 probe = TYPE_MAIN_VARIANT (TREE_TYPE (probe));
272
273 if (code == PLUS_EXPR
274 && !SAME_BINFO_TYPE_P (BINFO_TYPE (d_binfo), probe))
275 {
276 /* This can happen when adjust_result_of_qualified_name_lookup can't
277 find a unique base binfo in a call to a member function. We
278 couldn't give the diagnostic then since we might have been calling
279 a static member function, so we do it now. */
280 if (complain & tf_error)
281 {
282 tree base = lookup_base (probe, BINFO_TYPE (d_binfo),
283 ba_unique, NULL, complain);
284 gcc_assert (base == error_mark_node);
285 }
286 return error_mark_node;
287 }
288
289 gcc_assert ((code == MINUS_EXPR
290 && SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), probe))
291 || code == PLUS_EXPR);
292
293 if (binfo == d_binfo)
294 /* Nothing to do. */
295 return expr;
296
297 if (code == MINUS_EXPR && v_binfo)
298 {
299 if (complain & tf_error)
300 {
301 if (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), BINFO_TYPE (v_binfo)))
302 {
303 if (want_pointer)
304 error ("cannot convert from pointer to base class %qT to "
305 "pointer to derived class %qT because the base is "
306 "virtual", BINFO_TYPE (binfo), BINFO_TYPE (d_binfo));
307 else
308 error ("cannot convert from base class %qT to derived "
309 "class %qT because the base is virtual",
310 BINFO_TYPE (binfo), BINFO_TYPE (d_binfo));
311 }
312 else
313 {
314 if (want_pointer)
315 error ("cannot convert from pointer to base class %qT to "
316 "pointer to derived class %qT via virtual base %qT",
317 BINFO_TYPE (binfo), BINFO_TYPE (d_binfo),
318 BINFO_TYPE (v_binfo));
319 else
320 error ("cannot convert from base class %qT to derived "
321 "class %qT via virtual base %qT", BINFO_TYPE (binfo),
322 BINFO_TYPE (d_binfo), BINFO_TYPE (v_binfo));
323 }
324 }
325 return error_mark_node;
326 }
327
328 if (!want_pointer)
329 /* This must happen before the call to save_expr. */
330 expr = cp_build_addr_expr (expr, complain);
331 else
332 expr = mark_rvalue_use (expr);
333
334 offset = BINFO_OFFSET (binfo);
335 fixed_type_p = resolves_to_fixed_type_p (expr, &nonnull);
336 target_type = code == PLUS_EXPR ? BINFO_TYPE (binfo) : BINFO_TYPE (d_binfo);
337 /* TARGET_TYPE has been extracted from BINFO, and, is therefore always
338 cv-unqualified. Extract the cv-qualifiers from EXPR so that the
339 expression returned matches the input. */
340 target_type = cp_build_qualified_type
341 (target_type, cp_type_quals (TREE_TYPE (TREE_TYPE (expr))));
342 ptr_target_type = build_pointer_type (target_type);
343
344 /* Do we need to look in the vtable for the real offset? */
345 virtual_access = (v_binfo && fixed_type_p <= 0);
346
347 /* Don't bother with the calculations inside sizeof; they'll ICE if the
348 source type is incomplete and the pointer value doesn't matter. In a
349 template (even in fold_non_dependent_expr), we don't have vtables set
350 up properly yet, and the value doesn't matter there either; we're just
351 interested in the result of overload resolution. */
352 if (cp_unevaluated_operand != 0
353 || in_template_function ())
354 {
355 expr = build_nop (ptr_target_type, expr);
356 if (!want_pointer)
357 expr = build_indirect_ref (EXPR_LOCATION (expr), expr, RO_NULL);
358 return expr;
359 }
360
361 /* If we're in an NSDMI, we don't have the full constructor context yet
362 that we need for converting to a virtual base, so just build a stub
363 CONVERT_EXPR and expand it later in bot_replace. */
364 if (virtual_access && fixed_type_p < 0
365 && current_scope () != current_function_decl)
366 {
367 expr = build1 (CONVERT_EXPR, ptr_target_type, expr);
368 CONVERT_EXPR_VBASE_PATH (expr) = true;
369 if (!want_pointer)
370 expr = build_indirect_ref (EXPR_LOCATION (expr), expr, RO_NULL);
371 return expr;
372 }
373
374 /* Do we need to check for a null pointer? */
375 if (want_pointer && !nonnull)
376 {
377 /* If we know the conversion will not actually change the value
378 of EXPR, then we can avoid testing the expression for NULL.
379 We have to avoid generating a COMPONENT_REF for a base class
380 field, because other parts of the compiler know that such
381 expressions are always non-NULL. */
382 if (!virtual_access && integer_zerop (offset))
383 return build_nop (ptr_target_type, expr);
384 null_test = error_mark_node;
385 }
386
387 /* Protect against multiple evaluation if necessary. */
388 if (TREE_SIDE_EFFECTS (expr) && (null_test || virtual_access))
389 expr = save_expr (expr);
390
391 /* Now that we've saved expr, build the real null test. */
392 if (null_test)
393 {
394 tree zero = cp_convert (TREE_TYPE (expr), nullptr_node, complain);
395 null_test = fold_build2_loc (input_location, NE_EXPR, boolean_type_node,
396 expr, zero);
397 }
398
399 /* If this is a simple base reference, express it as a COMPONENT_REF. */
400 if (code == PLUS_EXPR && !virtual_access
401 /* We don't build base fields for empty bases, and they aren't very
402 interesting to the optimizers anyway. */
403 && !has_empty)
404 {
405 expr = cp_build_indirect_ref (expr, RO_NULL, complain);
406 expr = build_simple_base_path (expr, binfo);
407 if (want_pointer)
408 expr = build_address (expr);
409 target_type = TREE_TYPE (expr);
410 goto out;
411 }
412
413 if (virtual_access)
414 {
415 /* Going via virtual base V_BINFO. We need the static offset
416 from V_BINFO to BINFO, and the dynamic offset from D_BINFO to
417 V_BINFO. That offset is an entry in D_BINFO's vtable. */
418 tree v_offset;
419
420 if (fixed_type_p < 0 && in_base_initializer)
421 {
422 /* In a base member initializer, we cannot rely on the
423 vtable being set up. We have to indirect via the
424 vtt_parm. */
425 tree t;
426
427 t = TREE_TYPE (TYPE_VFIELD (current_class_type));
428 t = build_pointer_type (t);
429 v_offset = convert (t, current_vtt_parm);
430 v_offset = cp_build_indirect_ref (v_offset, RO_NULL, complain);
431 }
432 else
433 v_offset = build_vfield_ref (cp_build_indirect_ref (expr, RO_NULL,
434 complain),
435 TREE_TYPE (TREE_TYPE (expr)));
436
437 if (v_offset == error_mark_node)
438 return error_mark_node;
439
440 v_offset = fold_build_pointer_plus (v_offset, BINFO_VPTR_FIELD (v_binfo));
441 v_offset = build1 (NOP_EXPR,
442 build_pointer_type (ptrdiff_type_node),
443 v_offset);
444 v_offset = cp_build_indirect_ref (v_offset, RO_NULL, complain);
445 TREE_CONSTANT (v_offset) = 1;
446
447 offset = convert_to_integer (ptrdiff_type_node,
448 size_diffop_loc (input_location, offset,
449 BINFO_OFFSET (v_binfo)));
450
451 if (!integer_zerop (offset))
452 v_offset = build2 (code, ptrdiff_type_node, v_offset, offset);
453
454 if (fixed_type_p < 0)
455 /* Negative fixed_type_p means this is a constructor or destructor;
456 virtual base layout is fixed in in-charge [cd]tors, but not in
457 base [cd]tors. */
458 offset = build3 (COND_EXPR, ptrdiff_type_node,
459 build2 (EQ_EXPR, boolean_type_node,
460 current_in_charge_parm, integer_zero_node),
461 v_offset,
462 convert_to_integer (ptrdiff_type_node,
463 BINFO_OFFSET (binfo)));
464 else
465 offset = v_offset;
466 }
467
468 if (want_pointer)
469 target_type = ptr_target_type;
470
471 expr = build1 (NOP_EXPR, ptr_target_type, expr);
472
473 if (!integer_zerop (offset))
474 {
475 offset = fold_convert (sizetype, offset);
476 if (code == MINUS_EXPR)
477 offset = fold_build1_loc (input_location, NEGATE_EXPR, sizetype, offset);
478 expr = fold_build_pointer_plus (expr, offset);
479 }
480 else
481 null_test = NULL;
482
483 if (!want_pointer)
484 expr = cp_build_indirect_ref (expr, RO_NULL, complain);
485
486 out:
487 if (null_test)
488 expr = fold_build3_loc (input_location, COND_EXPR, target_type, null_test, expr,
489 build_zero_cst (target_type));
490
491 return expr;
492 }
493
494 /* Subroutine of build_base_path; EXPR and BINFO are as in that function.
495 Perform a derived-to-base conversion by recursively building up a
496 sequence of COMPONENT_REFs to the appropriate base fields. */
497
498 static tree
499 build_simple_base_path (tree expr, tree binfo)
500 {
501 tree type = BINFO_TYPE (binfo);
502 tree d_binfo = BINFO_INHERITANCE_CHAIN (binfo);
503 tree field;
504
505 if (d_binfo == NULL_TREE)
506 {
507 tree temp;
508
509 gcc_assert (TYPE_MAIN_VARIANT (TREE_TYPE (expr)) == type);
510
511 /* Transform `(a, b).x' into `(*(a, &b)).x', `(a ? b : c).x'
512 into `(*(a ? &b : &c)).x', and so on. A COND_EXPR is only
513 an lvalue in the front end; only _DECLs and _REFs are lvalues
514 in the back end. */
515 temp = unary_complex_lvalue (ADDR_EXPR, expr);
516 if (temp)
517 expr = cp_build_indirect_ref (temp, RO_NULL, tf_warning_or_error);
518
519 return expr;
520 }
521
522 /* Recurse. */
523 expr = build_simple_base_path (expr, d_binfo);
524
525 for (field = TYPE_FIELDS (BINFO_TYPE (d_binfo));
526 field; field = DECL_CHAIN (field))
527 /* Is this the base field created by build_base_field? */
528 if (TREE_CODE (field) == FIELD_DECL
529 && DECL_FIELD_IS_BASE (field)
530 && TREE_TYPE (field) == type
531 /* If we're looking for a field in the most-derived class,
532 also check the field offset; we can have two base fields
533 of the same type if one is an indirect virtual base and one
534 is a direct non-virtual base. */
535 && (BINFO_INHERITANCE_CHAIN (d_binfo)
536 || tree_int_cst_equal (byte_position (field),
537 BINFO_OFFSET (binfo))))
538 {
539 /* We don't use build_class_member_access_expr here, as that
540 has unnecessary checks, and more importantly results in
541 recursive calls to dfs_walk_once. */
542 int type_quals = cp_type_quals (TREE_TYPE (expr));
543
544 expr = build3 (COMPONENT_REF,
545 cp_build_qualified_type (type, type_quals),
546 expr, field, NULL_TREE);
547 expr = fold_if_not_in_template (expr);
548
549 /* Mark the expression const or volatile, as appropriate.
550 Even though we've dealt with the type above, we still have
551 to mark the expression itself. */
552 if (type_quals & TYPE_QUAL_CONST)
553 TREE_READONLY (expr) = 1;
554 if (type_quals & TYPE_QUAL_VOLATILE)
555 TREE_THIS_VOLATILE (expr) = 1;
556
557 return expr;
558 }
559
560 /* Didn't find the base field?!? */
561 gcc_unreachable ();
562 }
563
564 /* Convert OBJECT to the base TYPE. OBJECT is an expression whose
565 type is a class type or a pointer to a class type. In the former
566 case, TYPE is also a class type; in the latter it is another
567 pointer type. If CHECK_ACCESS is true, an error message is emitted
568 if TYPE is inaccessible. If OBJECT has pointer type, the value is
569 assumed to be non-NULL. */
570
571 tree
572 convert_to_base (tree object, tree type, bool check_access, bool nonnull,
573 tsubst_flags_t complain)
574 {
575 tree binfo;
576 tree object_type;
577
578 if (TYPE_PTR_P (TREE_TYPE (object)))
579 {
580 object_type = TREE_TYPE (TREE_TYPE (object));
581 type = TREE_TYPE (type);
582 }
583 else
584 object_type = TREE_TYPE (object);
585
586 binfo = lookup_base (object_type, type, check_access ? ba_check : ba_unique,
587 NULL, complain);
588 if (!binfo || binfo == error_mark_node)
589 return error_mark_node;
590
591 return build_base_path (PLUS_EXPR, object, binfo, nonnull, complain);
592 }
593
594 /* EXPR is an expression with unqualified class type. BASE is a base
595 binfo of that class type. Returns EXPR, converted to the BASE
596 type. This function assumes that EXPR is the most derived class;
597 therefore virtual bases can be found at their static offsets. */
598
599 tree
600 convert_to_base_statically (tree expr, tree base)
601 {
602 tree expr_type;
603
604 expr_type = TREE_TYPE (expr);
605 if (!SAME_BINFO_TYPE_P (BINFO_TYPE (base), expr_type))
606 {
607 /* If this is a non-empty base, use a COMPONENT_REF. */
608 if (!is_empty_class (BINFO_TYPE (base)))
609 return build_simple_base_path (expr, base);
610
611 /* We use fold_build2 and fold_convert below to simplify the trees
612 provided to the optimizers. It is not safe to call these functions
613 when processing a template because they do not handle C++-specific
614 trees. */
615 gcc_assert (!processing_template_decl);
616 expr = cp_build_addr_expr (expr, tf_warning_or_error);
617 if (!integer_zerop (BINFO_OFFSET (base)))
618 expr = fold_build_pointer_plus_loc (input_location,
619 expr, BINFO_OFFSET (base));
620 expr = fold_convert (build_pointer_type (BINFO_TYPE (base)), expr);
621 expr = build_fold_indirect_ref_loc (input_location, expr);
622 }
623
624 return expr;
625 }
626
627 \f
628 tree
629 build_vfield_ref (tree datum, tree type)
630 {
631 tree vfield, vcontext;
632
633 if (datum == error_mark_node
634 /* Can happen in case of duplicate base types (c++/59082). */
635 || !TYPE_VFIELD (type))
636 return error_mark_node;
637
638 /* First, convert to the requested type. */
639 if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (datum), type))
640 datum = convert_to_base (datum, type, /*check_access=*/false,
641 /*nonnull=*/true, tf_warning_or_error);
642
643 /* Second, the requested type may not be the owner of its own vptr.
644 If not, convert to the base class that owns it. We cannot use
645 convert_to_base here, because VCONTEXT may appear more than once
646 in the inheritance hierarchy of TYPE, and thus direct conversion
647 between the types may be ambiguous. Following the path back up
648 one step at a time via primary bases avoids the problem. */
649 vfield = TYPE_VFIELD (type);
650 vcontext = DECL_CONTEXT (vfield);
651 while (!same_type_ignoring_top_level_qualifiers_p (vcontext, type))
652 {
653 datum = build_simple_base_path (datum, CLASSTYPE_PRIMARY_BINFO (type));
654 type = TREE_TYPE (datum);
655 }
656
657 return build3 (COMPONENT_REF, TREE_TYPE (vfield), datum, vfield, NULL_TREE);
658 }
659
660 /* Given an object INSTANCE, return an expression which yields the
661 vtable element corresponding to INDEX. There are many special
662 cases for INSTANCE which we take care of here, mainly to avoid
663 creating extra tree nodes when we don't have to. */
664
665 static tree
666 build_vtbl_ref_1 (tree instance, tree idx)
667 {
668 tree aref;
669 tree vtbl = NULL_TREE;
670
671 /* Try to figure out what a reference refers to, and
672 access its virtual function table directly. */
673
674 int cdtorp = 0;
675 tree fixed_type = fixed_type_or_null (instance, NULL, &cdtorp);
676
677 tree basetype = non_reference (TREE_TYPE (instance));
678
679 if (fixed_type && !cdtorp)
680 {
681 tree binfo = lookup_base (fixed_type, basetype,
682 ba_unique, NULL, tf_none);
683 if (binfo && binfo != error_mark_node)
684 vtbl = unshare_expr (BINFO_VTABLE (binfo));
685 }
686
687 if (!vtbl)
688 vtbl = build_vfield_ref (instance, basetype);
689
690 aref = build_array_ref (input_location, vtbl, idx);
691 TREE_CONSTANT (aref) |= TREE_CONSTANT (vtbl) && TREE_CONSTANT (idx);
692
693 return aref;
694 }
695
696 tree
697 build_vtbl_ref (tree instance, tree idx)
698 {
699 tree aref = build_vtbl_ref_1 (instance, idx);
700
701 return aref;
702 }
703
704 /* Given a stable object pointer INSTANCE_PTR, return an expression which
705 yields a function pointer corresponding to vtable element INDEX. */
706
707 tree
708 build_vfn_ref (tree instance_ptr, tree idx)
709 {
710 tree aref;
711
712 aref = build_vtbl_ref_1 (cp_build_indirect_ref (instance_ptr, RO_NULL,
713 tf_warning_or_error),
714 idx);
715
716 /* When using function descriptors, the address of the
717 vtable entry is treated as a function pointer. */
718 if (TARGET_VTABLE_USES_DESCRIPTORS)
719 aref = build1 (NOP_EXPR, TREE_TYPE (aref),
720 cp_build_addr_expr (aref, tf_warning_or_error));
721
722 /* Remember this as a method reference, for later devirtualization. */
723 aref = build3 (OBJ_TYPE_REF, TREE_TYPE (aref), aref, instance_ptr, idx);
724
725 return aref;
726 }
727
728 /* Return the name of the virtual function table (as an IDENTIFIER_NODE)
729 for the given TYPE. */
730
731 static tree
732 get_vtable_name (tree type)
733 {
734 return mangle_vtbl_for_type (type);
735 }
736
737 /* DECL is an entity associated with TYPE, like a virtual table or an
738 implicitly generated constructor. Determine whether or not DECL
739 should have external or internal linkage at the object file
740 level. This routine does not deal with COMDAT linkage and other
741 similar complexities; it simply sets TREE_PUBLIC if it possible for
742 entities in other translation units to contain copies of DECL, in
743 the abstract. */
744
745 void
746 set_linkage_according_to_type (tree /*type*/, tree decl)
747 {
748 TREE_PUBLIC (decl) = 1;
749 determine_visibility (decl);
750 }
751
752 /* Create a VAR_DECL for a primary or secondary vtable for CLASS_TYPE.
753 (For a secondary vtable for B-in-D, CLASS_TYPE should be D, not B.)
754 Use NAME for the name of the vtable, and VTABLE_TYPE for its type. */
755
756 static tree
757 build_vtable (tree class_type, tree name, tree vtable_type)
758 {
759 tree decl;
760
761 decl = build_lang_decl (VAR_DECL, name, vtable_type);
762 /* vtable names are already mangled; give them their DECL_ASSEMBLER_NAME
763 now to avoid confusion in mangle_decl. */
764 SET_DECL_ASSEMBLER_NAME (decl, name);
765 DECL_CONTEXT (decl) = class_type;
766 DECL_ARTIFICIAL (decl) = 1;
767 TREE_STATIC (decl) = 1;
768 TREE_READONLY (decl) = 1;
769 DECL_VIRTUAL_P (decl) = 1;
770 DECL_ALIGN (decl) = TARGET_VTABLE_ENTRY_ALIGN;
771 DECL_USER_ALIGN (decl) = true;
772 DECL_VTABLE_OR_VTT_P (decl) = 1;
773 set_linkage_according_to_type (class_type, decl);
774 /* The vtable has not been defined -- yet. */
775 DECL_EXTERNAL (decl) = 1;
776 DECL_NOT_REALLY_EXTERN (decl) = 1;
777
778 /* Mark the VAR_DECL node representing the vtable itself as a
779 "gratuitous" one, thereby forcing dwarfout.c to ignore it. It
780 is rather important that such things be ignored because any
781 effort to actually generate DWARF for them will run into
782 trouble when/if we encounter code like:
783
784 #pragma interface
785 struct S { virtual void member (); };
786
787 because the artificial declaration of the vtable itself (as
788 manufactured by the g++ front end) will say that the vtable is
789 a static member of `S' but only *after* the debug output for
790 the definition of `S' has already been output. This causes
791 grief because the DWARF entry for the definition of the vtable
792 will try to refer back to an earlier *declaration* of the
793 vtable as a static member of `S' and there won't be one. We
794 might be able to arrange to have the "vtable static member"
795 attached to the member list for `S' before the debug info for
796 `S' get written (which would solve the problem) but that would
797 require more intrusive changes to the g++ front end. */
798 DECL_IGNORED_P (decl) = 1;
799
800 return decl;
801 }
802
803 /* Get the VAR_DECL of the vtable for TYPE. TYPE need not be polymorphic,
804 or even complete. If this does not exist, create it. If COMPLETE is
805 nonzero, then complete the definition of it -- that will render it
806 impossible to actually build the vtable, but is useful to get at those
807 which are known to exist in the runtime. */
808
809 tree
810 get_vtable_decl (tree type, int complete)
811 {
812 tree decl;
813
814 if (CLASSTYPE_VTABLES (type))
815 return CLASSTYPE_VTABLES (type);
816
817 decl = build_vtable (type, get_vtable_name (type), vtbl_type_node);
818 CLASSTYPE_VTABLES (type) = decl;
819
820 if (complete)
821 {
822 DECL_EXTERNAL (decl) = 1;
823 cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0);
824 }
825
826 return decl;
827 }
828
829 /* Build the primary virtual function table for TYPE. If BINFO is
830 non-NULL, build the vtable starting with the initial approximation
831 that it is the same as the one which is the head of the association
832 list. Returns a nonzero value if a new vtable is actually
833 created. */
834
835 static int
836 build_primary_vtable (tree binfo, tree type)
837 {
838 tree decl;
839 tree virtuals;
840
841 decl = get_vtable_decl (type, /*complete=*/0);
842
843 if (binfo)
844 {
845 if (BINFO_NEW_VTABLE_MARKED (binfo))
846 /* We have already created a vtable for this base, so there's
847 no need to do it again. */
848 return 0;
849
850 virtuals = copy_list (BINFO_VIRTUALS (binfo));
851 TREE_TYPE (decl) = TREE_TYPE (get_vtbl_decl_for_binfo (binfo));
852 DECL_SIZE (decl) = TYPE_SIZE (TREE_TYPE (decl));
853 DECL_SIZE_UNIT (decl) = TYPE_SIZE_UNIT (TREE_TYPE (decl));
854 }
855 else
856 {
857 gcc_assert (TREE_TYPE (decl) == vtbl_type_node);
858 virtuals = NULL_TREE;
859 }
860
861 if (GATHER_STATISTICS)
862 {
863 n_vtables += 1;
864 n_vtable_elems += list_length (virtuals);
865 }
866
867 /* Initialize the association list for this type, based
868 on our first approximation. */
869 BINFO_VTABLE (TYPE_BINFO (type)) = decl;
870 BINFO_VIRTUALS (TYPE_BINFO (type)) = virtuals;
871 SET_BINFO_NEW_VTABLE_MARKED (TYPE_BINFO (type));
872 return 1;
873 }
874
875 /* Give BINFO a new virtual function table which is initialized
876 with a skeleton-copy of its original initialization. The only
877 entry that changes is the `delta' entry, so we can really
878 share a lot of structure.
879
880 FOR_TYPE is the most derived type which caused this table to
881 be needed.
882
883 Returns nonzero if we haven't met BINFO before.
884
885 The order in which vtables are built (by calling this function) for
886 an object must remain the same, otherwise a binary incompatibility
887 can result. */
888
889 static int
890 build_secondary_vtable (tree binfo)
891 {
892 if (BINFO_NEW_VTABLE_MARKED (binfo))
893 /* We already created a vtable for this base. There's no need to
894 do it again. */
895 return 0;
896
897 /* Remember that we've created a vtable for this BINFO, so that we
898 don't try to do so again. */
899 SET_BINFO_NEW_VTABLE_MARKED (binfo);
900
901 /* Make fresh virtual list, so we can smash it later. */
902 BINFO_VIRTUALS (binfo) = copy_list (BINFO_VIRTUALS (binfo));
903
904 /* Secondary vtables are laid out as part of the same structure as
905 the primary vtable. */
906 BINFO_VTABLE (binfo) = NULL_TREE;
907 return 1;
908 }
909
910 /* Create a new vtable for BINFO which is the hierarchy dominated by
911 T. Return nonzero if we actually created a new vtable. */
912
913 static int
914 make_new_vtable (tree t, tree binfo)
915 {
916 if (binfo == TYPE_BINFO (t))
917 /* In this case, it is *type*'s vtable we are modifying. We start
918 with the approximation that its vtable is that of the
919 immediate base class. */
920 return build_primary_vtable (binfo, t);
921 else
922 /* This is our very own copy of `basetype' to play with. Later,
923 we will fill in all the virtual functions that override the
924 virtual functions in these base classes which are not defined
925 by the current type. */
926 return build_secondary_vtable (binfo);
927 }
928
929 /* Make *VIRTUALS, an entry on the BINFO_VIRTUALS list for BINFO
930 (which is in the hierarchy dominated by T) list FNDECL as its
931 BV_FN. DELTA is the required constant adjustment from the `this'
932 pointer where the vtable entry appears to the `this' required when
933 the function is actually called. */
934
935 static void
936 modify_vtable_entry (tree t,
937 tree binfo,
938 tree fndecl,
939 tree delta,
940 tree *virtuals)
941 {
942 tree v;
943
944 v = *virtuals;
945
946 if (fndecl != BV_FN (v)
947 || !tree_int_cst_equal (delta, BV_DELTA (v)))
948 {
949 /* We need a new vtable for BINFO. */
950 if (make_new_vtable (t, binfo))
951 {
952 /* If we really did make a new vtable, we also made a copy
953 of the BINFO_VIRTUALS list. Now, we have to find the
954 corresponding entry in that list. */
955 *virtuals = BINFO_VIRTUALS (binfo);
956 while (BV_FN (*virtuals) != BV_FN (v))
957 *virtuals = TREE_CHAIN (*virtuals);
958 v = *virtuals;
959 }
960
961 BV_DELTA (v) = delta;
962 BV_VCALL_INDEX (v) = NULL_TREE;
963 BV_FN (v) = fndecl;
964 }
965 }
966
967 \f
968 /* Add method METHOD to class TYPE. If USING_DECL is non-null, it is
969 the USING_DECL naming METHOD. Returns true if the method could be
970 added to the method vec. */
971
972 bool
973 add_method (tree type, tree method, tree using_decl)
974 {
975 unsigned slot;
976 tree overload;
977 bool template_conv_p = false;
978 bool conv_p;
979 vec<tree, va_gc> *method_vec;
980 bool complete_p;
981 bool insert_p = false;
982 tree current_fns;
983 tree fns;
984
985 if (method == error_mark_node)
986 return false;
987
988 complete_p = COMPLETE_TYPE_P (type);
989 conv_p = DECL_CONV_FN_P (method);
990 if (conv_p)
991 template_conv_p = (TREE_CODE (method) == TEMPLATE_DECL
992 && DECL_TEMPLATE_CONV_FN_P (method));
993
994 method_vec = CLASSTYPE_METHOD_VEC (type);
995 if (!method_vec)
996 {
997 /* Make a new method vector. We start with 8 entries. We must
998 allocate at least two (for constructors and destructors), and
999 we're going to end up with an assignment operator at some
1000 point as well. */
1001 vec_alloc (method_vec, 8);
1002 /* Create slots for constructors and destructors. */
1003 method_vec->quick_push (NULL_TREE);
1004 method_vec->quick_push (NULL_TREE);
1005 CLASSTYPE_METHOD_VEC (type) = method_vec;
1006 }
1007
1008 /* Maintain TYPE_HAS_USER_CONSTRUCTOR, etc. */
1009 grok_special_member_properties (method);
1010
1011 /* Constructors and destructors go in special slots. */
1012 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (method))
1013 slot = CLASSTYPE_CONSTRUCTOR_SLOT;
1014 else if (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (method))
1015 {
1016 slot = CLASSTYPE_DESTRUCTOR_SLOT;
1017
1018 if (TYPE_FOR_JAVA (type))
1019 {
1020 if (!DECL_ARTIFICIAL (method))
1021 error ("Java class %qT cannot have a destructor", type);
1022 else if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
1023 error ("Java class %qT cannot have an implicit non-trivial "
1024 "destructor",
1025 type);
1026 }
1027 }
1028 else
1029 {
1030 tree m;
1031
1032 insert_p = true;
1033 /* See if we already have an entry with this name. */
1034 for (slot = CLASSTYPE_FIRST_CONVERSION_SLOT;
1035 vec_safe_iterate (method_vec, slot, &m);
1036 ++slot)
1037 {
1038 m = OVL_CURRENT (m);
1039 if (template_conv_p)
1040 {
1041 if (TREE_CODE (m) == TEMPLATE_DECL
1042 && DECL_TEMPLATE_CONV_FN_P (m))
1043 insert_p = false;
1044 break;
1045 }
1046 if (conv_p && !DECL_CONV_FN_P (m))
1047 break;
1048 if (DECL_NAME (m) == DECL_NAME (method))
1049 {
1050 insert_p = false;
1051 break;
1052 }
1053 if (complete_p
1054 && !DECL_CONV_FN_P (m)
1055 && DECL_NAME (m) > DECL_NAME (method))
1056 break;
1057 }
1058 }
1059 current_fns = insert_p ? NULL_TREE : (*method_vec)[slot];
1060
1061 /* Check to see if we've already got this method. */
1062 for (fns = current_fns; fns; fns = OVL_NEXT (fns))
1063 {
1064 tree fn = OVL_CURRENT (fns);
1065 tree fn_type;
1066 tree method_type;
1067 tree parms1;
1068 tree parms2;
1069
1070 if (TREE_CODE (fn) != TREE_CODE (method))
1071 continue;
1072
1073 /* [over.load] Member function declarations with the
1074 same name and the same parameter types cannot be
1075 overloaded if any of them is a static member
1076 function declaration.
1077
1078 [over.load] Member function declarations with the same name and
1079 the same parameter-type-list as well as member function template
1080 declarations with the same name, the same parameter-type-list, and
1081 the same template parameter lists cannot be overloaded if any of
1082 them, but not all, have a ref-qualifier.
1083
1084 [namespace.udecl] When a using-declaration brings names
1085 from a base class into a derived class scope, member
1086 functions in the derived class override and/or hide member
1087 functions with the same name and parameter types in a base
1088 class (rather than conflicting). */
1089 fn_type = TREE_TYPE (fn);
1090 method_type = TREE_TYPE (method);
1091 parms1 = TYPE_ARG_TYPES (fn_type);
1092 parms2 = TYPE_ARG_TYPES (method_type);
1093
1094 /* Compare the quals on the 'this' parm. Don't compare
1095 the whole types, as used functions are treated as
1096 coming from the using class in overload resolution. */
1097 if (! DECL_STATIC_FUNCTION_P (fn)
1098 && ! DECL_STATIC_FUNCTION_P (method)
1099 /* Either both or neither need to be ref-qualified for
1100 differing quals to allow overloading. */
1101 && (FUNCTION_REF_QUALIFIED (fn_type)
1102 == FUNCTION_REF_QUALIFIED (method_type))
1103 && (type_memfn_quals (fn_type) != type_memfn_quals (method_type)
1104 || type_memfn_rqual (fn_type) != type_memfn_rqual (method_type)))
1105 continue;
1106
1107 /* For templates, the return type and template parameters
1108 must be identical. */
1109 if (TREE_CODE (fn) == TEMPLATE_DECL
1110 && (!same_type_p (TREE_TYPE (fn_type),
1111 TREE_TYPE (method_type))
1112 || !comp_template_parms (DECL_TEMPLATE_PARMS (fn),
1113 DECL_TEMPLATE_PARMS (method))))
1114 continue;
1115
1116 if (! DECL_STATIC_FUNCTION_P (fn))
1117 parms1 = TREE_CHAIN (parms1);
1118 if (! DECL_STATIC_FUNCTION_P (method))
1119 parms2 = TREE_CHAIN (parms2);
1120
1121 if (compparms (parms1, parms2)
1122 && (!DECL_CONV_FN_P (fn)
1123 || same_type_p (TREE_TYPE (fn_type),
1124 TREE_TYPE (method_type))))
1125 {
1126 /* For function versions, their parms and types match
1127 but they are not duplicates. Record function versions
1128 as and when they are found. extern "C" functions are
1129 not treated as versions. */
1130 if (TREE_CODE (fn) == FUNCTION_DECL
1131 && TREE_CODE (method) == FUNCTION_DECL
1132 && !DECL_EXTERN_C_P (fn)
1133 && !DECL_EXTERN_C_P (method)
1134 && targetm.target_option.function_versions (fn, method))
1135 {
1136 /* Mark functions as versions if necessary. Modify the mangled
1137 decl name if necessary. */
1138 if (!DECL_FUNCTION_VERSIONED (fn))
1139 {
1140 DECL_FUNCTION_VERSIONED (fn) = 1;
1141 if (DECL_ASSEMBLER_NAME_SET_P (fn))
1142 mangle_decl (fn);
1143 }
1144 if (!DECL_FUNCTION_VERSIONED (method))
1145 {
1146 DECL_FUNCTION_VERSIONED (method) = 1;
1147 if (DECL_ASSEMBLER_NAME_SET_P (method))
1148 mangle_decl (method);
1149 }
1150 record_function_versions (fn, method);
1151 continue;
1152 }
1153 if (DECL_INHERITED_CTOR_BASE (method))
1154 {
1155 if (DECL_INHERITED_CTOR_BASE (fn))
1156 {
1157 error_at (DECL_SOURCE_LOCATION (method),
1158 "%q#D inherited from %qT", method,
1159 DECL_INHERITED_CTOR_BASE (method));
1160 error_at (DECL_SOURCE_LOCATION (fn),
1161 "conflicts with version inherited from %qT",
1162 DECL_INHERITED_CTOR_BASE (fn));
1163 }
1164 /* Otherwise defer to the other function. */
1165 return false;
1166 }
1167 if (using_decl)
1168 {
1169 if (DECL_CONTEXT (fn) == type)
1170 /* Defer to the local function. */
1171 return false;
1172 }
1173 else
1174 {
1175 error ("%q+#D cannot be overloaded", method);
1176 error ("with %q+#D", fn);
1177 }
1178
1179 /* We don't call duplicate_decls here to merge the
1180 declarations because that will confuse things if the
1181 methods have inline definitions. In particular, we
1182 will crash while processing the definitions. */
1183 return false;
1184 }
1185 }
1186
1187 /* A class should never have more than one destructor. */
1188 if (current_fns && DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (method))
1189 return false;
1190
1191 /* Add the new binding. */
1192 if (using_decl)
1193 {
1194 overload = ovl_cons (method, current_fns);
1195 OVL_USED (overload) = true;
1196 }
1197 else
1198 overload = build_overload (method, current_fns);
1199
1200 if (conv_p)
1201 TYPE_HAS_CONVERSION (type) = 1;
1202 else if (slot >= CLASSTYPE_FIRST_CONVERSION_SLOT && !complete_p)
1203 push_class_level_binding (DECL_NAME (method), overload);
1204
1205 if (insert_p)
1206 {
1207 bool reallocated;
1208
1209 /* We only expect to add few methods in the COMPLETE_P case, so
1210 just make room for one more method in that case. */
1211 if (complete_p)
1212 reallocated = vec_safe_reserve_exact (method_vec, 1);
1213 else
1214 reallocated = vec_safe_reserve (method_vec, 1);
1215 if (reallocated)
1216 CLASSTYPE_METHOD_VEC (type) = method_vec;
1217 if (slot == method_vec->length ())
1218 method_vec->quick_push (overload);
1219 else
1220 method_vec->quick_insert (slot, overload);
1221 }
1222 else
1223 /* Replace the current slot. */
1224 (*method_vec)[slot] = overload;
1225 return true;
1226 }
1227
1228 /* Subroutines of finish_struct. */
1229
1230 /* Change the access of FDECL to ACCESS in T. Return 1 if change was
1231 legit, otherwise return 0. */
1232
1233 static int
1234 alter_access (tree t, tree fdecl, tree access)
1235 {
1236 tree elem;
1237
1238 if (!DECL_LANG_SPECIFIC (fdecl))
1239 retrofit_lang_decl (fdecl);
1240
1241 gcc_assert (!DECL_DISCRIMINATOR_P (fdecl));
1242
1243 elem = purpose_member (t, DECL_ACCESS (fdecl));
1244 if (elem)
1245 {
1246 if (TREE_VALUE (elem) != access)
1247 {
1248 if (TREE_CODE (TREE_TYPE (fdecl)) == FUNCTION_DECL)
1249 error ("conflicting access specifications for method"
1250 " %q+D, ignored", TREE_TYPE (fdecl));
1251 else
1252 error ("conflicting access specifications for field %qE, ignored",
1253 DECL_NAME (fdecl));
1254 }
1255 else
1256 {
1257 /* They're changing the access to the same thing they changed
1258 it to before. That's OK. */
1259 ;
1260 }
1261 }
1262 else
1263 {
1264 perform_or_defer_access_check (TYPE_BINFO (t), fdecl, fdecl,
1265 tf_warning_or_error);
1266 DECL_ACCESS (fdecl) = tree_cons (t, access, DECL_ACCESS (fdecl));
1267 return 1;
1268 }
1269 return 0;
1270 }
1271
1272 /* Process the USING_DECL, which is a member of T. */
1273
1274 static void
1275 handle_using_decl (tree using_decl, tree t)
1276 {
1277 tree decl = USING_DECL_DECLS (using_decl);
1278 tree name = DECL_NAME (using_decl);
1279 tree access
1280 = TREE_PRIVATE (using_decl) ? access_private_node
1281 : TREE_PROTECTED (using_decl) ? access_protected_node
1282 : access_public_node;
1283 tree flist = NULL_TREE;
1284 tree old_value;
1285
1286 gcc_assert (!processing_template_decl && decl);
1287
1288 old_value = lookup_member (t, name, /*protect=*/0, /*want_type=*/false,
1289 tf_warning_or_error);
1290 if (old_value)
1291 {
1292 if (is_overloaded_fn (old_value))
1293 old_value = OVL_CURRENT (old_value);
1294
1295 if (DECL_P (old_value) && DECL_CONTEXT (old_value) == t)
1296 /* OK */;
1297 else
1298 old_value = NULL_TREE;
1299 }
1300
1301 cp_emit_debug_info_for_using (decl, USING_DECL_SCOPE (using_decl));
1302
1303 if (is_overloaded_fn (decl))
1304 flist = decl;
1305
1306 if (! old_value)
1307 ;
1308 else if (is_overloaded_fn (old_value))
1309 {
1310 if (flist)
1311 /* It's OK to use functions from a base when there are functions with
1312 the same name already present in the current class. */;
1313 else
1314 {
1315 error ("%q+D invalid in %q#T", using_decl, t);
1316 error (" because of local method %q+#D with same name",
1317 OVL_CURRENT (old_value));
1318 return;
1319 }
1320 }
1321 else if (!DECL_ARTIFICIAL (old_value))
1322 {
1323 error ("%q+D invalid in %q#T", using_decl, t);
1324 error (" because of local member %q+#D with same name", old_value);
1325 return;
1326 }
1327
1328 /* Make type T see field decl FDECL with access ACCESS. */
1329 if (flist)
1330 for (; flist; flist = OVL_NEXT (flist))
1331 {
1332 add_method (t, OVL_CURRENT (flist), using_decl);
1333 alter_access (t, OVL_CURRENT (flist), access);
1334 }
1335 else
1336 alter_access (t, decl, access);
1337 }
1338 \f
1339 /* walk_tree callback for check_abi_tags: if the type at *TP involves any
1340 types with abi tags, add the corresponding identifiers to the VEC in
1341 *DATA and set IDENTIFIER_MARKED. */
1342
1343 struct abi_tag_data
1344 {
1345 tree t;
1346 tree subob;
1347 // error_mark_node to get diagnostics; otherwise collect missing tags here
1348 tree tags;
1349 };
1350
1351 static tree
1352 find_abi_tags_r (tree *tp, int *walk_subtrees, void *data)
1353 {
1354 if (!OVERLOAD_TYPE_P (*tp))
1355 return NULL_TREE;
1356
1357 /* walk_tree shouldn't be walking into any subtrees of a RECORD_TYPE
1358 anyway, but let's make sure of it. */
1359 *walk_subtrees = false;
1360
1361 if (tree attributes = lookup_attribute ("abi_tag", TYPE_ATTRIBUTES (*tp)))
1362 {
1363 struct abi_tag_data *p = static_cast<struct abi_tag_data*>(data);
1364 for (tree list = TREE_VALUE (attributes); list;
1365 list = TREE_CHAIN (list))
1366 {
1367 tree tag = TREE_VALUE (list);
1368 tree id = get_identifier (TREE_STRING_POINTER (tag));
1369 if (!IDENTIFIER_MARKED (id))
1370 {
1371 if (p->tags != error_mark_node)
1372 {
1373 /* We're collecting tags from template arguments. */
1374 tree str = build_string (IDENTIFIER_LENGTH (id),
1375 IDENTIFIER_POINTER (id));
1376 p->tags = tree_cons (NULL_TREE, str, p->tags);
1377 ABI_TAG_IMPLICIT (p->tags) = true;
1378
1379 /* Don't inherit this tag multiple times. */
1380 IDENTIFIER_MARKED (id) = true;
1381 }
1382
1383 /* Otherwise we're diagnosing missing tags. */
1384 else if (TYPE_P (p->subob))
1385 {
1386 if (warning (OPT_Wabi_tag, "%qT does not have the %E abi tag "
1387 "that base %qT has", p->t, tag, p->subob))
1388 inform (location_of (p->subob), "%qT declared here",
1389 p->subob);
1390 }
1391 else
1392 {
1393 if (warning (OPT_Wabi_tag, "%qT does not have the %E abi tag "
1394 "that %qT (used in the type of %qD) has",
1395 p->t, tag, *tp, p->subob))
1396 {
1397 inform (location_of (p->subob), "%qD declared here",
1398 p->subob);
1399 inform (location_of (*tp), "%qT declared here", *tp);
1400 }
1401 }
1402 }
1403 }
1404 }
1405 return NULL_TREE;
1406 }
1407
1408 /* Set IDENTIFIER_MARKED on all the ABI tags on T and its (transitively
1409 complete) template arguments. */
1410
1411 static void
1412 mark_type_abi_tags (tree t, bool val)
1413 {
1414 tree attributes = lookup_attribute ("abi_tag", TYPE_ATTRIBUTES (t));
1415 if (attributes)
1416 {
1417 for (tree list = TREE_VALUE (attributes); list;
1418 list = TREE_CHAIN (list))
1419 {
1420 tree tag = TREE_VALUE (list);
1421 tree id = get_identifier (TREE_STRING_POINTER (tag));
1422 IDENTIFIER_MARKED (id) = val;
1423 }
1424 }
1425 }
1426
1427 /* Check that class T has all the abi tags that subobject SUBOB has, or
1428 warn if not. */
1429
1430 static void
1431 check_abi_tags (tree t, tree subob)
1432 {
1433 mark_type_abi_tags (t, true);
1434
1435 tree subtype = TYPE_P (subob) ? subob : TREE_TYPE (subob);
1436 struct abi_tag_data data = { t, subob, error_mark_node };
1437
1438 cp_walk_tree_without_duplicates (&subtype, find_abi_tags_r, &data);
1439
1440 mark_type_abi_tags (t, false);
1441 }
1442
1443 void
1444 inherit_targ_abi_tags (tree t)
1445 {
1446 if (CLASSTYPE_TEMPLATE_INFO (t) == NULL_TREE)
1447 return;
1448
1449 mark_type_abi_tags (t, true);
1450
1451 tree args = CLASSTYPE_TI_ARGS (t);
1452 struct abi_tag_data data = { t, NULL_TREE, NULL_TREE };
1453 for (int i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
1454 {
1455 tree level = TMPL_ARGS_LEVEL (args, i+1);
1456 for (int j = 0; j < TREE_VEC_LENGTH (level); ++j)
1457 {
1458 tree arg = TREE_VEC_ELT (level, j);
1459 data.subob = arg;
1460 cp_walk_tree_without_duplicates (&arg, find_abi_tags_r, &data);
1461 }
1462 }
1463
1464 // If we found some tags on our template arguments, add them to our
1465 // abi_tag attribute.
1466 if (data.tags)
1467 {
1468 tree attr = lookup_attribute ("abi_tag", TYPE_ATTRIBUTES (t));
1469 if (attr)
1470 TREE_VALUE (attr) = chainon (data.tags, TREE_VALUE (attr));
1471 else
1472 TYPE_ATTRIBUTES (t)
1473 = tree_cons (get_identifier ("abi_tag"), data.tags,
1474 TYPE_ATTRIBUTES (t));
1475 }
1476
1477 mark_type_abi_tags (t, false);
1478 }
1479
1480 /* Return true, iff class T has a non-virtual destructor that is
1481 accessible from outside the class heirarchy (i.e. is public, or
1482 there's a suitable friend. */
1483
1484 static bool
1485 accessible_nvdtor_p (tree t)
1486 {
1487 tree dtor = CLASSTYPE_DESTRUCTORS (t);
1488
1489 /* An implicitly declared destructor is always public. And,
1490 if it were virtual, we would have created it by now. */
1491 if (!dtor)
1492 return true;
1493
1494 if (DECL_VINDEX (dtor))
1495 return false; /* Virtual */
1496
1497 if (!TREE_PRIVATE (dtor) && !TREE_PROTECTED (dtor))
1498 return true; /* Public */
1499
1500 if (CLASSTYPE_FRIEND_CLASSES (t)
1501 || DECL_FRIENDLIST (TYPE_MAIN_DECL (t)))
1502 return true; /* Has friends */
1503
1504 return false;
1505 }
1506
1507 /* Run through the base classes of T, updating CANT_HAVE_CONST_CTOR_P,
1508 and NO_CONST_ASN_REF_P. Also set flag bits in T based on
1509 properties of the bases. */
1510
1511 static void
1512 check_bases (tree t,
1513 int* cant_have_const_ctor_p,
1514 int* no_const_asn_ref_p)
1515 {
1516 int i;
1517 bool seen_non_virtual_nearly_empty_base_p = 0;
1518 int seen_tm_mask = 0;
1519 tree base_binfo;
1520 tree binfo;
1521 tree field = NULL_TREE;
1522
1523 if (!CLASSTYPE_NON_STD_LAYOUT (t))
1524 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
1525 if (TREE_CODE (field) == FIELD_DECL)
1526 break;
1527
1528 for (binfo = TYPE_BINFO (t), i = 0;
1529 BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
1530 {
1531 tree basetype = TREE_TYPE (base_binfo);
1532
1533 gcc_assert (COMPLETE_TYPE_P (basetype));
1534
1535 if (CLASSTYPE_FINAL (basetype))
1536 error ("cannot derive from %<final%> base %qT in derived type %qT",
1537 basetype, t);
1538
1539 /* If any base class is non-literal, so is the derived class. */
1540 if (!CLASSTYPE_LITERAL_P (basetype))
1541 CLASSTYPE_LITERAL_P (t) = false;
1542
1543 /* If the base class doesn't have copy constructors or
1544 assignment operators that take const references, then the
1545 derived class cannot have such a member automatically
1546 generated. */
1547 if (TYPE_HAS_COPY_CTOR (basetype)
1548 && ! TYPE_HAS_CONST_COPY_CTOR (basetype))
1549 *cant_have_const_ctor_p = 1;
1550 if (TYPE_HAS_COPY_ASSIGN (basetype)
1551 && !TYPE_HAS_CONST_COPY_ASSIGN (basetype))
1552 *no_const_asn_ref_p = 1;
1553
1554 if (BINFO_VIRTUAL_P (base_binfo))
1555 /* A virtual base does not effect nearly emptiness. */
1556 ;
1557 else if (CLASSTYPE_NEARLY_EMPTY_P (basetype))
1558 {
1559 if (seen_non_virtual_nearly_empty_base_p)
1560 /* And if there is more than one nearly empty base, then the
1561 derived class is not nearly empty either. */
1562 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
1563 else
1564 /* Remember we've seen one. */
1565 seen_non_virtual_nearly_empty_base_p = 1;
1566 }
1567 else if (!is_empty_class (basetype))
1568 /* If the base class is not empty or nearly empty, then this
1569 class cannot be nearly empty. */
1570 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
1571
1572 /* A lot of properties from the bases also apply to the derived
1573 class. */
1574 TYPE_NEEDS_CONSTRUCTING (t) |= TYPE_NEEDS_CONSTRUCTING (basetype);
1575 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
1576 |= TYPE_HAS_NONTRIVIAL_DESTRUCTOR (basetype);
1577 TYPE_HAS_COMPLEX_COPY_ASSIGN (t)
1578 |= (TYPE_HAS_COMPLEX_COPY_ASSIGN (basetype)
1579 || !TYPE_HAS_COPY_ASSIGN (basetype));
1580 TYPE_HAS_COMPLEX_COPY_CTOR (t) |= (TYPE_HAS_COMPLEX_COPY_CTOR (basetype)
1581 || !TYPE_HAS_COPY_CTOR (basetype));
1582 TYPE_HAS_COMPLEX_MOVE_ASSIGN (t)
1583 |= TYPE_HAS_COMPLEX_MOVE_ASSIGN (basetype);
1584 TYPE_HAS_COMPLEX_MOVE_CTOR (t) |= TYPE_HAS_COMPLEX_MOVE_CTOR (basetype);
1585 TYPE_POLYMORPHIC_P (t) |= TYPE_POLYMORPHIC_P (basetype);
1586 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t)
1587 |= CLASSTYPE_CONTAINS_EMPTY_CLASS_P (basetype);
1588 TYPE_HAS_COMPLEX_DFLT (t) |= (!TYPE_HAS_DEFAULT_CONSTRUCTOR (basetype)
1589 || TYPE_HAS_COMPLEX_DFLT (basetype));
1590 SET_CLASSTYPE_READONLY_FIELDS_NEED_INIT
1591 (t, CLASSTYPE_READONLY_FIELDS_NEED_INIT (t)
1592 | CLASSTYPE_READONLY_FIELDS_NEED_INIT (basetype));
1593 SET_CLASSTYPE_REF_FIELDS_NEED_INIT
1594 (t, CLASSTYPE_REF_FIELDS_NEED_INIT (t)
1595 | CLASSTYPE_REF_FIELDS_NEED_INIT (basetype));
1596
1597 /* A standard-layout class is a class that:
1598 ...
1599 * has no non-standard-layout base classes, */
1600 CLASSTYPE_NON_STD_LAYOUT (t) |= CLASSTYPE_NON_STD_LAYOUT (basetype);
1601 if (!CLASSTYPE_NON_STD_LAYOUT (t))
1602 {
1603 tree basefield;
1604 /* ...has no base classes of the same type as the first non-static
1605 data member... */
1606 if (field && DECL_CONTEXT (field) == t
1607 && (same_type_ignoring_top_level_qualifiers_p
1608 (TREE_TYPE (field), basetype)))
1609 CLASSTYPE_NON_STD_LAYOUT (t) = 1;
1610 else
1611 /* ...either has no non-static data members in the most-derived
1612 class and at most one base class with non-static data
1613 members, or has no base classes with non-static data
1614 members */
1615 for (basefield = TYPE_FIELDS (basetype); basefield;
1616 basefield = DECL_CHAIN (basefield))
1617 if (TREE_CODE (basefield) == FIELD_DECL)
1618 {
1619 if (field)
1620 CLASSTYPE_NON_STD_LAYOUT (t) = 1;
1621 else
1622 field = basefield;
1623 break;
1624 }
1625 }
1626
1627 /* Don't bother collecting tm attributes if transactional memory
1628 support is not enabled. */
1629 if (flag_tm)
1630 {
1631 tree tm_attr = find_tm_attribute (TYPE_ATTRIBUTES (basetype));
1632 if (tm_attr)
1633 seen_tm_mask |= tm_attr_to_mask (tm_attr);
1634 }
1635
1636 check_abi_tags (t, basetype);
1637 }
1638
1639 /* If one of the base classes had TM attributes, and the current class
1640 doesn't define its own, then the current class inherits one. */
1641 if (seen_tm_mask && !find_tm_attribute (TYPE_ATTRIBUTES (t)))
1642 {
1643 tree tm_attr = tm_mask_to_attr (seen_tm_mask & -seen_tm_mask);
1644 TYPE_ATTRIBUTES (t) = tree_cons (tm_attr, NULL, TYPE_ATTRIBUTES (t));
1645 }
1646 }
1647
1648 /* Determine all the primary bases within T. Sets BINFO_PRIMARY_BASE_P for
1649 those that are primaries. Sets BINFO_LOST_PRIMARY_P for those
1650 that have had a nearly-empty virtual primary base stolen by some
1651 other base in the hierarchy. Determines CLASSTYPE_PRIMARY_BASE for
1652 T. */
1653
1654 static void
1655 determine_primary_bases (tree t)
1656 {
1657 unsigned i;
1658 tree primary = NULL_TREE;
1659 tree type_binfo = TYPE_BINFO (t);
1660 tree base_binfo;
1661
1662 /* Determine the primary bases of our bases. */
1663 for (base_binfo = TREE_CHAIN (type_binfo); base_binfo;
1664 base_binfo = TREE_CHAIN (base_binfo))
1665 {
1666 tree primary = CLASSTYPE_PRIMARY_BINFO (BINFO_TYPE (base_binfo));
1667
1668 /* See if we're the non-virtual primary of our inheritance
1669 chain. */
1670 if (!BINFO_VIRTUAL_P (base_binfo))
1671 {
1672 tree parent = BINFO_INHERITANCE_CHAIN (base_binfo);
1673 tree parent_primary = CLASSTYPE_PRIMARY_BINFO (BINFO_TYPE (parent));
1674
1675 if (parent_primary
1676 && SAME_BINFO_TYPE_P (BINFO_TYPE (base_binfo),
1677 BINFO_TYPE (parent_primary)))
1678 /* We are the primary binfo. */
1679 BINFO_PRIMARY_P (base_binfo) = 1;
1680 }
1681 /* Determine if we have a virtual primary base, and mark it so.
1682 */
1683 if (primary && BINFO_VIRTUAL_P (primary))
1684 {
1685 tree this_primary = copied_binfo (primary, base_binfo);
1686
1687 if (BINFO_PRIMARY_P (this_primary))
1688 /* Someone already claimed this base. */
1689 BINFO_LOST_PRIMARY_P (base_binfo) = 1;
1690 else
1691 {
1692 tree delta;
1693
1694 BINFO_PRIMARY_P (this_primary) = 1;
1695 BINFO_INHERITANCE_CHAIN (this_primary) = base_binfo;
1696
1697 /* A virtual binfo might have been copied from within
1698 another hierarchy. As we're about to use it as a
1699 primary base, make sure the offsets match. */
1700 delta = size_diffop_loc (input_location,
1701 convert (ssizetype,
1702 BINFO_OFFSET (base_binfo)),
1703 convert (ssizetype,
1704 BINFO_OFFSET (this_primary)));
1705
1706 propagate_binfo_offsets (this_primary, delta);
1707 }
1708 }
1709 }
1710
1711 /* First look for a dynamic direct non-virtual base. */
1712 for (i = 0; BINFO_BASE_ITERATE (type_binfo, i, base_binfo); i++)
1713 {
1714 tree basetype = BINFO_TYPE (base_binfo);
1715
1716 if (TYPE_CONTAINS_VPTR_P (basetype) && !BINFO_VIRTUAL_P (base_binfo))
1717 {
1718 primary = base_binfo;
1719 goto found;
1720 }
1721 }
1722
1723 /* A "nearly-empty" virtual base class can be the primary base
1724 class, if no non-virtual polymorphic base can be found. Look for
1725 a nearly-empty virtual dynamic base that is not already a primary
1726 base of something in the hierarchy. If there is no such base,
1727 just pick the first nearly-empty virtual base. */
1728
1729 for (base_binfo = TREE_CHAIN (type_binfo); base_binfo;
1730 base_binfo = TREE_CHAIN (base_binfo))
1731 if (BINFO_VIRTUAL_P (base_binfo)
1732 && CLASSTYPE_NEARLY_EMPTY_P (BINFO_TYPE (base_binfo)))
1733 {
1734 if (!BINFO_PRIMARY_P (base_binfo))
1735 {
1736 /* Found one that is not primary. */
1737 primary = base_binfo;
1738 goto found;
1739 }
1740 else if (!primary)
1741 /* Remember the first candidate. */
1742 primary = base_binfo;
1743 }
1744
1745 found:
1746 /* If we've got a primary base, use it. */
1747 if (primary)
1748 {
1749 tree basetype = BINFO_TYPE (primary);
1750
1751 CLASSTYPE_PRIMARY_BINFO (t) = primary;
1752 if (BINFO_PRIMARY_P (primary))
1753 /* We are stealing a primary base. */
1754 BINFO_LOST_PRIMARY_P (BINFO_INHERITANCE_CHAIN (primary)) = 1;
1755 BINFO_PRIMARY_P (primary) = 1;
1756 if (BINFO_VIRTUAL_P (primary))
1757 {
1758 tree delta;
1759
1760 BINFO_INHERITANCE_CHAIN (primary) = type_binfo;
1761 /* A virtual binfo might have been copied from within
1762 another hierarchy. As we're about to use it as a primary
1763 base, make sure the offsets match. */
1764 delta = size_diffop_loc (input_location, ssize_int (0),
1765 convert (ssizetype, BINFO_OFFSET (primary)));
1766
1767 propagate_binfo_offsets (primary, delta);
1768 }
1769
1770 primary = TYPE_BINFO (basetype);
1771
1772 TYPE_VFIELD (t) = TYPE_VFIELD (basetype);
1773 BINFO_VTABLE (type_binfo) = BINFO_VTABLE (primary);
1774 BINFO_VIRTUALS (type_binfo) = BINFO_VIRTUALS (primary);
1775 }
1776 }
1777
1778 /* Update the variant types of T. */
1779
1780 void
1781 fixup_type_variants (tree t)
1782 {
1783 tree variants;
1784
1785 if (!t)
1786 return;
1787
1788 for (variants = TYPE_NEXT_VARIANT (t);
1789 variants;
1790 variants = TYPE_NEXT_VARIANT (variants))
1791 {
1792 /* These fields are in the _TYPE part of the node, not in
1793 the TYPE_LANG_SPECIFIC component, so they are not shared. */
1794 TYPE_HAS_USER_CONSTRUCTOR (variants) = TYPE_HAS_USER_CONSTRUCTOR (t);
1795 TYPE_NEEDS_CONSTRUCTING (variants) = TYPE_NEEDS_CONSTRUCTING (t);
1796 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (variants)
1797 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t);
1798
1799 TYPE_POLYMORPHIC_P (variants) = TYPE_POLYMORPHIC_P (t);
1800
1801 TYPE_BINFO (variants) = TYPE_BINFO (t);
1802
1803 /* Copy whatever these are holding today. */
1804 TYPE_VFIELD (variants) = TYPE_VFIELD (t);
1805 TYPE_METHODS (variants) = TYPE_METHODS (t);
1806 TYPE_FIELDS (variants) = TYPE_FIELDS (t);
1807 }
1808 }
1809
1810 /* Early variant fixups: we apply attributes at the beginning of the class
1811 definition, and we need to fix up any variants that have already been
1812 made via elaborated-type-specifier so that check_qualified_type works. */
1813
1814 void
1815 fixup_attribute_variants (tree t)
1816 {
1817 tree variants;
1818
1819 if (!t)
1820 return;
1821
1822 for (variants = TYPE_NEXT_VARIANT (t);
1823 variants;
1824 variants = TYPE_NEXT_VARIANT (variants))
1825 {
1826 /* These are the two fields that check_qualified_type looks at and
1827 are affected by attributes. */
1828 TYPE_ATTRIBUTES (variants) = TYPE_ATTRIBUTES (t);
1829 TYPE_ALIGN (variants) = TYPE_ALIGN (t);
1830 }
1831 }
1832 \f
1833 /* Set memoizing fields and bits of T (and its variants) for later
1834 use. */
1835
1836 static void
1837 finish_struct_bits (tree t)
1838 {
1839 /* Fix up variants (if any). */
1840 fixup_type_variants (t);
1841
1842 if (BINFO_N_BASE_BINFOS (TYPE_BINFO (t)) && TYPE_POLYMORPHIC_P (t))
1843 /* For a class w/o baseclasses, 'finish_struct' has set
1844 CLASSTYPE_PURE_VIRTUALS correctly (by definition).
1845 Similarly for a class whose base classes do not have vtables.
1846 When neither of these is true, we might have removed abstract
1847 virtuals (by providing a definition), added some (by declaring
1848 new ones), or redeclared ones from a base class. We need to
1849 recalculate what's really an abstract virtual at this point (by
1850 looking in the vtables). */
1851 get_pure_virtuals (t);
1852
1853 /* If this type has a copy constructor or a destructor, force its
1854 mode to be BLKmode, and force its TREE_ADDRESSABLE bit to be
1855 nonzero. This will cause it to be passed by invisible reference
1856 and prevent it from being returned in a register. */
1857 if (type_has_nontrivial_copy_init (t)
1858 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t))
1859 {
1860 tree variants;
1861 DECL_MODE (TYPE_MAIN_DECL (t)) = BLKmode;
1862 for (variants = t; variants; variants = TYPE_NEXT_VARIANT (variants))
1863 {
1864 SET_TYPE_MODE (variants, BLKmode);
1865 TREE_ADDRESSABLE (variants) = 1;
1866 }
1867 }
1868 }
1869
1870 /* Issue warnings about T having private constructors, but no friends,
1871 and so forth.
1872
1873 HAS_NONPRIVATE_METHOD is nonzero if T has any non-private methods or
1874 static members. HAS_NONPRIVATE_STATIC_FN is nonzero if T has any
1875 non-private static member functions. */
1876
1877 static void
1878 maybe_warn_about_overly_private_class (tree t)
1879 {
1880 int has_member_fn = 0;
1881 int has_nonprivate_method = 0;
1882 tree fn;
1883
1884 if (!warn_ctor_dtor_privacy
1885 /* If the class has friends, those entities might create and
1886 access instances, so we should not warn. */
1887 || (CLASSTYPE_FRIEND_CLASSES (t)
1888 || DECL_FRIENDLIST (TYPE_MAIN_DECL (t)))
1889 /* We will have warned when the template was declared; there's
1890 no need to warn on every instantiation. */
1891 || CLASSTYPE_TEMPLATE_INSTANTIATION (t))
1892 /* There's no reason to even consider warning about this
1893 class. */
1894 return;
1895
1896 /* We only issue one warning, if more than one applies, because
1897 otherwise, on code like:
1898
1899 class A {
1900 // Oops - forgot `public:'
1901 A();
1902 A(const A&);
1903 ~A();
1904 };
1905
1906 we warn several times about essentially the same problem. */
1907
1908 /* Check to see if all (non-constructor, non-destructor) member
1909 functions are private. (Since there are no friends or
1910 non-private statics, we can't ever call any of the private member
1911 functions.) */
1912 for (fn = TYPE_METHODS (t); fn; fn = DECL_CHAIN (fn))
1913 /* We're not interested in compiler-generated methods; they don't
1914 provide any way to call private members. */
1915 if (!DECL_ARTIFICIAL (fn))
1916 {
1917 if (!TREE_PRIVATE (fn))
1918 {
1919 if (DECL_STATIC_FUNCTION_P (fn))
1920 /* A non-private static member function is just like a
1921 friend; it can create and invoke private member
1922 functions, and be accessed without a class
1923 instance. */
1924 return;
1925
1926 has_nonprivate_method = 1;
1927 /* Keep searching for a static member function. */
1928 }
1929 else if (!DECL_CONSTRUCTOR_P (fn) && !DECL_DESTRUCTOR_P (fn))
1930 has_member_fn = 1;
1931 }
1932
1933 if (!has_nonprivate_method && has_member_fn)
1934 {
1935 /* There are no non-private methods, and there's at least one
1936 private member function that isn't a constructor or
1937 destructor. (If all the private members are
1938 constructors/destructors we want to use the code below that
1939 issues error messages specifically referring to
1940 constructors/destructors.) */
1941 unsigned i;
1942 tree binfo = TYPE_BINFO (t);
1943
1944 for (i = 0; i != BINFO_N_BASE_BINFOS (binfo); i++)
1945 if (BINFO_BASE_ACCESS (binfo, i) != access_private_node)
1946 {
1947 has_nonprivate_method = 1;
1948 break;
1949 }
1950 if (!has_nonprivate_method)
1951 {
1952 warning (OPT_Wctor_dtor_privacy,
1953 "all member functions in class %qT are private", t);
1954 return;
1955 }
1956 }
1957
1958 /* Even if some of the member functions are non-private, the class
1959 won't be useful for much if all the constructors or destructors
1960 are private: such an object can never be created or destroyed. */
1961 fn = CLASSTYPE_DESTRUCTORS (t);
1962 if (fn && TREE_PRIVATE (fn))
1963 {
1964 warning (OPT_Wctor_dtor_privacy,
1965 "%q#T only defines a private destructor and has no friends",
1966 t);
1967 return;
1968 }
1969
1970 /* Warn about classes that have private constructors and no friends. */
1971 if (TYPE_HAS_USER_CONSTRUCTOR (t)
1972 /* Implicitly generated constructors are always public. */
1973 && (!CLASSTYPE_LAZY_DEFAULT_CTOR (t)
1974 || !CLASSTYPE_LAZY_COPY_CTOR (t)))
1975 {
1976 int nonprivate_ctor = 0;
1977
1978 /* If a non-template class does not define a copy
1979 constructor, one is defined for it, enabling it to avoid
1980 this warning. For a template class, this does not
1981 happen, and so we would normally get a warning on:
1982
1983 template <class T> class C { private: C(); };
1984
1985 To avoid this asymmetry, we check TYPE_HAS_COPY_CTOR. All
1986 complete non-template or fully instantiated classes have this
1987 flag set. */
1988 if (!TYPE_HAS_COPY_CTOR (t))
1989 nonprivate_ctor = 1;
1990 else
1991 for (fn = CLASSTYPE_CONSTRUCTORS (t); fn; fn = OVL_NEXT (fn))
1992 {
1993 tree ctor = OVL_CURRENT (fn);
1994 /* Ideally, we wouldn't count copy constructors (or, in
1995 fact, any constructor that takes an argument of the
1996 class type as a parameter) because such things cannot
1997 be used to construct an instance of the class unless
1998 you already have one. But, for now at least, we're
1999 more generous. */
2000 if (! TREE_PRIVATE (ctor))
2001 {
2002 nonprivate_ctor = 1;
2003 break;
2004 }
2005 }
2006
2007 if (nonprivate_ctor == 0)
2008 {
2009 warning (OPT_Wctor_dtor_privacy,
2010 "%q#T only defines private constructors and has no friends",
2011 t);
2012 return;
2013 }
2014 }
2015 }
2016
2017 static struct {
2018 gt_pointer_operator new_value;
2019 void *cookie;
2020 } resort_data;
2021
2022 /* Comparison function to compare two TYPE_METHOD_VEC entries by name. */
2023
2024 static int
2025 method_name_cmp (const void* m1_p, const void* m2_p)
2026 {
2027 const tree *const m1 = (const tree *) m1_p;
2028 const tree *const m2 = (const tree *) m2_p;
2029
2030 if (*m1 == NULL_TREE && *m2 == NULL_TREE)
2031 return 0;
2032 if (*m1 == NULL_TREE)
2033 return -1;
2034 if (*m2 == NULL_TREE)
2035 return 1;
2036 if (DECL_NAME (OVL_CURRENT (*m1)) < DECL_NAME (OVL_CURRENT (*m2)))
2037 return -1;
2038 return 1;
2039 }
2040
2041 /* This routine compares two fields like method_name_cmp but using the
2042 pointer operator in resort_field_decl_data. */
2043
2044 static int
2045 resort_method_name_cmp (const void* m1_p, const void* m2_p)
2046 {
2047 const tree *const m1 = (const tree *) m1_p;
2048 const tree *const m2 = (const tree *) m2_p;
2049 if (*m1 == NULL_TREE && *m2 == NULL_TREE)
2050 return 0;
2051 if (*m1 == NULL_TREE)
2052 return -1;
2053 if (*m2 == NULL_TREE)
2054 return 1;
2055 {
2056 tree d1 = DECL_NAME (OVL_CURRENT (*m1));
2057 tree d2 = DECL_NAME (OVL_CURRENT (*m2));
2058 resort_data.new_value (&d1, resort_data.cookie);
2059 resort_data.new_value (&d2, resort_data.cookie);
2060 if (d1 < d2)
2061 return -1;
2062 }
2063 return 1;
2064 }
2065
2066 /* Resort TYPE_METHOD_VEC because pointers have been reordered. */
2067
2068 void
2069 resort_type_method_vec (void* obj,
2070 void* /*orig_obj*/,
2071 gt_pointer_operator new_value,
2072 void* cookie)
2073 {
2074 vec<tree, va_gc> *method_vec = (vec<tree, va_gc> *) obj;
2075 int len = vec_safe_length (method_vec);
2076 size_t slot;
2077 tree fn;
2078
2079 /* The type conversion ops have to live at the front of the vec, so we
2080 can't sort them. */
2081 for (slot = CLASSTYPE_FIRST_CONVERSION_SLOT;
2082 vec_safe_iterate (method_vec, slot, &fn);
2083 ++slot)
2084 if (!DECL_CONV_FN_P (OVL_CURRENT (fn)))
2085 break;
2086
2087 if (len - slot > 1)
2088 {
2089 resort_data.new_value = new_value;
2090 resort_data.cookie = cookie;
2091 qsort (method_vec->address () + slot, len - slot, sizeof (tree),
2092 resort_method_name_cmp);
2093 }
2094 }
2095
2096 /* Warn about duplicate methods in fn_fields.
2097
2098 Sort methods that are not special (i.e., constructors, destructors,
2099 and type conversion operators) so that we can find them faster in
2100 search. */
2101
2102 static void
2103 finish_struct_methods (tree t)
2104 {
2105 tree fn_fields;
2106 vec<tree, va_gc> *method_vec;
2107 int slot, len;
2108
2109 method_vec = CLASSTYPE_METHOD_VEC (t);
2110 if (!method_vec)
2111 return;
2112
2113 len = method_vec->length ();
2114
2115 /* Clear DECL_IN_AGGR_P for all functions. */
2116 for (fn_fields = TYPE_METHODS (t); fn_fields;
2117 fn_fields = DECL_CHAIN (fn_fields))
2118 DECL_IN_AGGR_P (fn_fields) = 0;
2119
2120 /* Issue warnings about private constructors and such. If there are
2121 no methods, then some public defaults are generated. */
2122 maybe_warn_about_overly_private_class (t);
2123
2124 /* The type conversion ops have to live at the front of the vec, so we
2125 can't sort them. */
2126 for (slot = CLASSTYPE_FIRST_CONVERSION_SLOT;
2127 method_vec->iterate (slot, &fn_fields);
2128 ++slot)
2129 if (!DECL_CONV_FN_P (OVL_CURRENT (fn_fields)))
2130 break;
2131 if (len - slot > 1)
2132 qsort (method_vec->address () + slot,
2133 len-slot, sizeof (tree), method_name_cmp);
2134 }
2135
2136 /* Make BINFO's vtable have N entries, including RTTI entries,
2137 vbase and vcall offsets, etc. Set its type and call the back end
2138 to lay it out. */
2139
2140 static void
2141 layout_vtable_decl (tree binfo, int n)
2142 {
2143 tree atype;
2144 tree vtable;
2145
2146 atype = build_array_of_n_type (vtable_entry_type, n);
2147 layout_type (atype);
2148
2149 /* We may have to grow the vtable. */
2150 vtable = get_vtbl_decl_for_binfo (binfo);
2151 if (!same_type_p (TREE_TYPE (vtable), atype))
2152 {
2153 TREE_TYPE (vtable) = atype;
2154 DECL_SIZE (vtable) = DECL_SIZE_UNIT (vtable) = NULL_TREE;
2155 layout_decl (vtable, 0);
2156 }
2157 }
2158
2159 /* True iff FNDECL and BASE_FNDECL (both non-static member functions)
2160 have the same signature. */
2161
2162 int
2163 same_signature_p (const_tree fndecl, const_tree base_fndecl)
2164 {
2165 /* One destructor overrides another if they are the same kind of
2166 destructor. */
2167 if (DECL_DESTRUCTOR_P (base_fndecl) && DECL_DESTRUCTOR_P (fndecl)
2168 && special_function_p (base_fndecl) == special_function_p (fndecl))
2169 return 1;
2170 /* But a non-destructor never overrides a destructor, nor vice
2171 versa, nor do different kinds of destructors override
2172 one-another. For example, a complete object destructor does not
2173 override a deleting destructor. */
2174 if (DECL_DESTRUCTOR_P (base_fndecl) || DECL_DESTRUCTOR_P (fndecl))
2175 return 0;
2176
2177 if (DECL_NAME (fndecl) == DECL_NAME (base_fndecl)
2178 || (DECL_CONV_FN_P (fndecl)
2179 && DECL_CONV_FN_P (base_fndecl)
2180 && same_type_p (DECL_CONV_FN_TYPE (fndecl),
2181 DECL_CONV_FN_TYPE (base_fndecl))))
2182 {
2183 tree fntype = TREE_TYPE (fndecl);
2184 tree base_fntype = TREE_TYPE (base_fndecl);
2185 if (type_memfn_quals (fntype) == type_memfn_quals (base_fntype)
2186 && type_memfn_rqual (fntype) == type_memfn_rqual (base_fntype)
2187 && compparms (FUNCTION_FIRST_USER_PARMTYPE (fndecl),
2188 FUNCTION_FIRST_USER_PARMTYPE (base_fndecl)))
2189 return 1;
2190 }
2191 return 0;
2192 }
2193
2194 /* Returns TRUE if DERIVED is a binfo containing the binfo BASE as a
2195 subobject. */
2196
2197 static bool
2198 base_derived_from (tree derived, tree base)
2199 {
2200 tree probe;
2201
2202 for (probe = base; probe; probe = BINFO_INHERITANCE_CHAIN (probe))
2203 {
2204 if (probe == derived)
2205 return true;
2206 else if (BINFO_VIRTUAL_P (probe))
2207 /* If we meet a virtual base, we can't follow the inheritance
2208 any more. See if the complete type of DERIVED contains
2209 such a virtual base. */
2210 return (binfo_for_vbase (BINFO_TYPE (probe), BINFO_TYPE (derived))
2211 != NULL_TREE);
2212 }
2213 return false;
2214 }
2215
2216 typedef struct find_final_overrider_data_s {
2217 /* The function for which we are trying to find a final overrider. */
2218 tree fn;
2219 /* The base class in which the function was declared. */
2220 tree declaring_base;
2221 /* The candidate overriders. */
2222 tree candidates;
2223 /* Path to most derived. */
2224 vec<tree> path;
2225 } find_final_overrider_data;
2226
2227 /* Add the overrider along the current path to FFOD->CANDIDATES.
2228 Returns true if an overrider was found; false otherwise. */
2229
2230 static bool
2231 dfs_find_final_overrider_1 (tree binfo,
2232 find_final_overrider_data *ffod,
2233 unsigned depth)
2234 {
2235 tree method;
2236
2237 /* If BINFO is not the most derived type, try a more derived class.
2238 A definition there will overrider a definition here. */
2239 if (depth)
2240 {
2241 depth--;
2242 if (dfs_find_final_overrider_1
2243 (ffod->path[depth], ffod, depth))
2244 return true;
2245 }
2246
2247 method = look_for_overrides_here (BINFO_TYPE (binfo), ffod->fn);
2248 if (method)
2249 {
2250 tree *candidate = &ffod->candidates;
2251
2252 /* Remove any candidates overridden by this new function. */
2253 while (*candidate)
2254 {
2255 /* If *CANDIDATE overrides METHOD, then METHOD
2256 cannot override anything else on the list. */
2257 if (base_derived_from (TREE_VALUE (*candidate), binfo))
2258 return true;
2259 /* If METHOD overrides *CANDIDATE, remove *CANDIDATE. */
2260 if (base_derived_from (binfo, TREE_VALUE (*candidate)))
2261 *candidate = TREE_CHAIN (*candidate);
2262 else
2263 candidate = &TREE_CHAIN (*candidate);
2264 }
2265
2266 /* Add the new function. */
2267 ffod->candidates = tree_cons (method, binfo, ffod->candidates);
2268 return true;
2269 }
2270
2271 return false;
2272 }
2273
2274 /* Called from find_final_overrider via dfs_walk. */
2275
2276 static tree
2277 dfs_find_final_overrider_pre (tree binfo, void *data)
2278 {
2279 find_final_overrider_data *ffod = (find_final_overrider_data *) data;
2280
2281 if (binfo == ffod->declaring_base)
2282 dfs_find_final_overrider_1 (binfo, ffod, ffod->path.length ());
2283 ffod->path.safe_push (binfo);
2284
2285 return NULL_TREE;
2286 }
2287
2288 static tree
2289 dfs_find_final_overrider_post (tree /*binfo*/, void *data)
2290 {
2291 find_final_overrider_data *ffod = (find_final_overrider_data *) data;
2292 ffod->path.pop ();
2293
2294 return NULL_TREE;
2295 }
2296
2297 /* Returns a TREE_LIST whose TREE_PURPOSE is the final overrider for
2298 FN and whose TREE_VALUE is the binfo for the base where the
2299 overriding occurs. BINFO (in the hierarchy dominated by the binfo
2300 DERIVED) is the base object in which FN is declared. */
2301
2302 static tree
2303 find_final_overrider (tree derived, tree binfo, tree fn)
2304 {
2305 find_final_overrider_data ffod;
2306
2307 /* Getting this right is a little tricky. This is valid:
2308
2309 struct S { virtual void f (); };
2310 struct T { virtual void f (); };
2311 struct U : public S, public T { };
2312
2313 even though calling `f' in `U' is ambiguous. But,
2314
2315 struct R { virtual void f(); };
2316 struct S : virtual public R { virtual void f (); };
2317 struct T : virtual public R { virtual void f (); };
2318 struct U : public S, public T { };
2319
2320 is not -- there's no way to decide whether to put `S::f' or
2321 `T::f' in the vtable for `R'.
2322
2323 The solution is to look at all paths to BINFO. If we find
2324 different overriders along any two, then there is a problem. */
2325 if (DECL_THUNK_P (fn))
2326 fn = THUNK_TARGET (fn);
2327
2328 /* Determine the depth of the hierarchy. */
2329 ffod.fn = fn;
2330 ffod.declaring_base = binfo;
2331 ffod.candidates = NULL_TREE;
2332 ffod.path.create (30);
2333
2334 dfs_walk_all (derived, dfs_find_final_overrider_pre,
2335 dfs_find_final_overrider_post, &ffod);
2336
2337 ffod.path.release ();
2338
2339 /* If there was no winner, issue an error message. */
2340 if (!ffod.candidates || TREE_CHAIN (ffod.candidates))
2341 return error_mark_node;
2342
2343 return ffod.candidates;
2344 }
2345
2346 /* Return the index of the vcall offset for FN when TYPE is used as a
2347 virtual base. */
2348
2349 static tree
2350 get_vcall_index (tree fn, tree type)
2351 {
2352 vec<tree_pair_s, va_gc> *indices = CLASSTYPE_VCALL_INDICES (type);
2353 tree_pair_p p;
2354 unsigned ix;
2355
2356 FOR_EACH_VEC_SAFE_ELT (indices, ix, p)
2357 if ((DECL_DESTRUCTOR_P (fn) && DECL_DESTRUCTOR_P (p->purpose))
2358 || same_signature_p (fn, p->purpose))
2359 return p->value;
2360
2361 /* There should always be an appropriate index. */
2362 gcc_unreachable ();
2363 }
2364
2365 /* Update an entry in the vtable for BINFO, which is in the hierarchy
2366 dominated by T. FN is the old function; VIRTUALS points to the
2367 corresponding position in the new BINFO_VIRTUALS list. IX is the index
2368 of that entry in the list. */
2369
2370 static void
2371 update_vtable_entry_for_fn (tree t, tree binfo, tree fn, tree* virtuals,
2372 unsigned ix)
2373 {
2374 tree b;
2375 tree overrider;
2376 tree delta;
2377 tree virtual_base;
2378 tree first_defn;
2379 tree overrider_fn, overrider_target;
2380 tree target_fn = DECL_THUNK_P (fn) ? THUNK_TARGET (fn) : fn;
2381 tree over_return, base_return;
2382 bool lost = false;
2383
2384 /* Find the nearest primary base (possibly binfo itself) which defines
2385 this function; this is the class the caller will convert to when
2386 calling FN through BINFO. */
2387 for (b = binfo; ; b = get_primary_binfo (b))
2388 {
2389 gcc_assert (b);
2390 if (look_for_overrides_here (BINFO_TYPE (b), target_fn))
2391 break;
2392
2393 /* The nearest definition is from a lost primary. */
2394 if (BINFO_LOST_PRIMARY_P (b))
2395 lost = true;
2396 }
2397 first_defn = b;
2398
2399 /* Find the final overrider. */
2400 overrider = find_final_overrider (TYPE_BINFO (t), b, target_fn);
2401 if (overrider == error_mark_node)
2402 {
2403 error ("no unique final overrider for %qD in %qT", target_fn, t);
2404 return;
2405 }
2406 overrider_target = overrider_fn = TREE_PURPOSE (overrider);
2407
2408 /* Check for adjusting covariant return types. */
2409 over_return = TREE_TYPE (TREE_TYPE (overrider_target));
2410 base_return = TREE_TYPE (TREE_TYPE (target_fn));
2411
2412 if (POINTER_TYPE_P (over_return)
2413 && TREE_CODE (over_return) == TREE_CODE (base_return)
2414 && CLASS_TYPE_P (TREE_TYPE (over_return))
2415 && CLASS_TYPE_P (TREE_TYPE (base_return))
2416 /* If the overrider is invalid, don't even try. */
2417 && !DECL_INVALID_OVERRIDER_P (overrider_target))
2418 {
2419 /* If FN is a covariant thunk, we must figure out the adjustment
2420 to the final base FN was converting to. As OVERRIDER_TARGET might
2421 also be converting to the return type of FN, we have to
2422 combine the two conversions here. */
2423 tree fixed_offset, virtual_offset;
2424
2425 over_return = TREE_TYPE (over_return);
2426 base_return = TREE_TYPE (base_return);
2427
2428 if (DECL_THUNK_P (fn))
2429 {
2430 gcc_assert (DECL_RESULT_THUNK_P (fn));
2431 fixed_offset = ssize_int (THUNK_FIXED_OFFSET (fn));
2432 virtual_offset = THUNK_VIRTUAL_OFFSET (fn);
2433 }
2434 else
2435 fixed_offset = virtual_offset = NULL_TREE;
2436
2437 if (virtual_offset)
2438 /* Find the equivalent binfo within the return type of the
2439 overriding function. We will want the vbase offset from
2440 there. */
2441 virtual_offset = binfo_for_vbase (BINFO_TYPE (virtual_offset),
2442 over_return);
2443 else if (!same_type_ignoring_top_level_qualifiers_p
2444 (over_return, base_return))
2445 {
2446 /* There was no existing virtual thunk (which takes
2447 precedence). So find the binfo of the base function's
2448 return type within the overriding function's return type.
2449 We cannot call lookup base here, because we're inside a
2450 dfs_walk, and will therefore clobber the BINFO_MARKED
2451 flags. Fortunately we know the covariancy is valid (it
2452 has already been checked), so we can just iterate along
2453 the binfos, which have been chained in inheritance graph
2454 order. Of course it is lame that we have to repeat the
2455 search here anyway -- we should really be caching pieces
2456 of the vtable and avoiding this repeated work. */
2457 tree thunk_binfo, base_binfo;
2458
2459 /* Find the base binfo within the overriding function's
2460 return type. We will always find a thunk_binfo, except
2461 when the covariancy is invalid (which we will have
2462 already diagnosed). */
2463 for (base_binfo = TYPE_BINFO (base_return),
2464 thunk_binfo = TYPE_BINFO (over_return);
2465 thunk_binfo;
2466 thunk_binfo = TREE_CHAIN (thunk_binfo))
2467 if (SAME_BINFO_TYPE_P (BINFO_TYPE (thunk_binfo),
2468 BINFO_TYPE (base_binfo)))
2469 break;
2470
2471 /* See if virtual inheritance is involved. */
2472 for (virtual_offset = thunk_binfo;
2473 virtual_offset;
2474 virtual_offset = BINFO_INHERITANCE_CHAIN (virtual_offset))
2475 if (BINFO_VIRTUAL_P (virtual_offset))
2476 break;
2477
2478 if (virtual_offset
2479 || (thunk_binfo && !BINFO_OFFSET_ZEROP (thunk_binfo)))
2480 {
2481 tree offset = convert (ssizetype, BINFO_OFFSET (thunk_binfo));
2482
2483 if (virtual_offset)
2484 {
2485 /* We convert via virtual base. Adjust the fixed
2486 offset to be from there. */
2487 offset =
2488 size_diffop (offset,
2489 convert (ssizetype,
2490 BINFO_OFFSET (virtual_offset)));
2491 }
2492 if (fixed_offset)
2493 /* There was an existing fixed offset, this must be
2494 from the base just converted to, and the base the
2495 FN was thunking to. */
2496 fixed_offset = size_binop (PLUS_EXPR, fixed_offset, offset);
2497 else
2498 fixed_offset = offset;
2499 }
2500 }
2501
2502 if (fixed_offset || virtual_offset)
2503 /* Replace the overriding function with a covariant thunk. We
2504 will emit the overriding function in its own slot as
2505 well. */
2506 overrider_fn = make_thunk (overrider_target, /*this_adjusting=*/0,
2507 fixed_offset, virtual_offset);
2508 }
2509 else
2510 gcc_assert (DECL_INVALID_OVERRIDER_P (overrider_target) ||
2511 !DECL_THUNK_P (fn));
2512
2513 /* If we need a covariant thunk, then we may need to adjust first_defn.
2514 The ABI specifies that the thunks emitted with a function are
2515 determined by which bases the function overrides, so we need to be
2516 sure that we're using a thunk for some overridden base; even if we
2517 know that the necessary this adjustment is zero, there may not be an
2518 appropriate zero-this-adjusment thunk for us to use since thunks for
2519 overriding virtual bases always use the vcall offset.
2520
2521 Furthermore, just choosing any base that overrides this function isn't
2522 quite right, as this slot won't be used for calls through a type that
2523 puts a covariant thunk here. Calling the function through such a type
2524 will use a different slot, and that slot is the one that determines
2525 the thunk emitted for that base.
2526
2527 So, keep looking until we find the base that we're really overriding
2528 in this slot: the nearest primary base that doesn't use a covariant
2529 thunk in this slot. */
2530 if (overrider_target != overrider_fn)
2531 {
2532 if (BINFO_TYPE (b) == DECL_CONTEXT (overrider_target))
2533 /* We already know that the overrider needs a covariant thunk. */
2534 b = get_primary_binfo (b);
2535 for (; ; b = get_primary_binfo (b))
2536 {
2537 tree main_binfo = TYPE_BINFO (BINFO_TYPE (b));
2538 tree bv = chain_index (ix, BINFO_VIRTUALS (main_binfo));
2539 if (!DECL_THUNK_P (TREE_VALUE (bv)))
2540 break;
2541 if (BINFO_LOST_PRIMARY_P (b))
2542 lost = true;
2543 }
2544 first_defn = b;
2545 }
2546
2547 /* Assume that we will produce a thunk that convert all the way to
2548 the final overrider, and not to an intermediate virtual base. */
2549 virtual_base = NULL_TREE;
2550
2551 /* See if we can convert to an intermediate virtual base first, and then
2552 use the vcall offset located there to finish the conversion. */
2553 for (; b; b = BINFO_INHERITANCE_CHAIN (b))
2554 {
2555 /* If we find the final overrider, then we can stop
2556 walking. */
2557 if (SAME_BINFO_TYPE_P (BINFO_TYPE (b),
2558 BINFO_TYPE (TREE_VALUE (overrider))))
2559 break;
2560
2561 /* If we find a virtual base, and we haven't yet found the
2562 overrider, then there is a virtual base between the
2563 declaring base (first_defn) and the final overrider. */
2564 if (BINFO_VIRTUAL_P (b))
2565 {
2566 virtual_base = b;
2567 break;
2568 }
2569 }
2570
2571 /* Compute the constant adjustment to the `this' pointer. The
2572 `this' pointer, when this function is called, will point at BINFO
2573 (or one of its primary bases, which are at the same offset). */
2574 if (virtual_base)
2575 /* The `this' pointer needs to be adjusted from the declaration to
2576 the nearest virtual base. */
2577 delta = size_diffop_loc (input_location,
2578 convert (ssizetype, BINFO_OFFSET (virtual_base)),
2579 convert (ssizetype, BINFO_OFFSET (first_defn)));
2580 else if (lost)
2581 /* If the nearest definition is in a lost primary, we don't need an
2582 entry in our vtable. Except possibly in a constructor vtable,
2583 if we happen to get our primary back. In that case, the offset
2584 will be zero, as it will be a primary base. */
2585 delta = size_zero_node;
2586 else
2587 /* The `this' pointer needs to be adjusted from pointing to
2588 BINFO to pointing at the base where the final overrider
2589 appears. */
2590 delta = size_diffop_loc (input_location,
2591 convert (ssizetype,
2592 BINFO_OFFSET (TREE_VALUE (overrider))),
2593 convert (ssizetype, BINFO_OFFSET (binfo)));
2594
2595 modify_vtable_entry (t, binfo, overrider_fn, delta, virtuals);
2596
2597 if (virtual_base)
2598 BV_VCALL_INDEX (*virtuals)
2599 = get_vcall_index (overrider_target, BINFO_TYPE (virtual_base));
2600 else
2601 BV_VCALL_INDEX (*virtuals) = NULL_TREE;
2602
2603 BV_LOST_PRIMARY (*virtuals) = lost;
2604 }
2605
2606 /* Called from modify_all_vtables via dfs_walk. */
2607
2608 static tree
2609 dfs_modify_vtables (tree binfo, void* data)
2610 {
2611 tree t = (tree) data;
2612 tree virtuals;
2613 tree old_virtuals;
2614 unsigned ix;
2615
2616 if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
2617 /* A base without a vtable needs no modification, and its bases
2618 are uninteresting. */
2619 return dfs_skip_bases;
2620
2621 if (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), t)
2622 && !CLASSTYPE_HAS_PRIMARY_BASE_P (t))
2623 /* Don't do the primary vtable, if it's new. */
2624 return NULL_TREE;
2625
2626 if (BINFO_PRIMARY_P (binfo) && !BINFO_VIRTUAL_P (binfo))
2627 /* There's no need to modify the vtable for a non-virtual primary
2628 base; we're not going to use that vtable anyhow. We do still
2629 need to do this for virtual primary bases, as they could become
2630 non-primary in a construction vtable. */
2631 return NULL_TREE;
2632
2633 make_new_vtable (t, binfo);
2634
2635 /* Now, go through each of the virtual functions in the virtual
2636 function table for BINFO. Find the final overrider, and update
2637 the BINFO_VIRTUALS list appropriately. */
2638 for (ix = 0, virtuals = BINFO_VIRTUALS (binfo),
2639 old_virtuals = BINFO_VIRTUALS (TYPE_BINFO (BINFO_TYPE (binfo)));
2640 virtuals;
2641 ix++, virtuals = TREE_CHAIN (virtuals),
2642 old_virtuals = TREE_CHAIN (old_virtuals))
2643 update_vtable_entry_for_fn (t,
2644 binfo,
2645 BV_FN (old_virtuals),
2646 &virtuals, ix);
2647
2648 return NULL_TREE;
2649 }
2650
2651 /* Update all of the primary and secondary vtables for T. Create new
2652 vtables as required, and initialize their RTTI information. Each
2653 of the functions in VIRTUALS is declared in T and may override a
2654 virtual function from a base class; find and modify the appropriate
2655 entries to point to the overriding functions. Returns a list, in
2656 declaration order, of the virtual functions that are declared in T,
2657 but do not appear in the primary base class vtable, and which
2658 should therefore be appended to the end of the vtable for T. */
2659
2660 static tree
2661 modify_all_vtables (tree t, tree virtuals)
2662 {
2663 tree binfo = TYPE_BINFO (t);
2664 tree *fnsp;
2665
2666 /* Mangle the vtable name before entering dfs_walk (c++/51884). */
2667 if (TYPE_CONTAINS_VPTR_P (t))
2668 get_vtable_decl (t, false);
2669
2670 /* Update all of the vtables. */
2671 dfs_walk_once (binfo, dfs_modify_vtables, NULL, t);
2672
2673 /* Add virtual functions not already in our primary vtable. These
2674 will be both those introduced by this class, and those overridden
2675 from secondary bases. It does not include virtuals merely
2676 inherited from secondary bases. */
2677 for (fnsp = &virtuals; *fnsp; )
2678 {
2679 tree fn = TREE_VALUE (*fnsp);
2680
2681 if (!value_member (fn, BINFO_VIRTUALS (binfo))
2682 || DECL_VINDEX (fn) == error_mark_node)
2683 {
2684 /* We don't need to adjust the `this' pointer when
2685 calling this function. */
2686 BV_DELTA (*fnsp) = integer_zero_node;
2687 BV_VCALL_INDEX (*fnsp) = NULL_TREE;
2688
2689 /* This is a function not already in our vtable. Keep it. */
2690 fnsp = &TREE_CHAIN (*fnsp);
2691 }
2692 else
2693 /* We've already got an entry for this function. Skip it. */
2694 *fnsp = TREE_CHAIN (*fnsp);
2695 }
2696
2697 return virtuals;
2698 }
2699
2700 /* Get the base virtual function declarations in T that have the
2701 indicated NAME. */
2702
2703 static tree
2704 get_basefndecls (tree name, tree t)
2705 {
2706 tree methods;
2707 tree base_fndecls = NULL_TREE;
2708 int n_baseclasses = BINFO_N_BASE_BINFOS (TYPE_BINFO (t));
2709 int i;
2710
2711 /* Find virtual functions in T with the indicated NAME. */
2712 i = lookup_fnfields_1 (t, name);
2713 if (i != -1)
2714 for (methods = (*CLASSTYPE_METHOD_VEC (t))[i];
2715 methods;
2716 methods = OVL_NEXT (methods))
2717 {
2718 tree method = OVL_CURRENT (methods);
2719
2720 if (TREE_CODE (method) == FUNCTION_DECL
2721 && DECL_VINDEX (method))
2722 base_fndecls = tree_cons (NULL_TREE, method, base_fndecls);
2723 }
2724
2725 if (base_fndecls)
2726 return base_fndecls;
2727
2728 for (i = 0; i < n_baseclasses; i++)
2729 {
2730 tree basetype = BINFO_TYPE (BINFO_BASE_BINFO (TYPE_BINFO (t), i));
2731 base_fndecls = chainon (get_basefndecls (name, basetype),
2732 base_fndecls);
2733 }
2734
2735 return base_fndecls;
2736 }
2737
2738 /* If this declaration supersedes the declaration of
2739 a method declared virtual in the base class, then
2740 mark this field as being virtual as well. */
2741
2742 void
2743 check_for_override (tree decl, tree ctype)
2744 {
2745 bool overrides_found = false;
2746 if (TREE_CODE (decl) == TEMPLATE_DECL)
2747 /* In [temp.mem] we have:
2748
2749 A specialization of a member function template does not
2750 override a virtual function from a base class. */
2751 return;
2752 if ((DECL_DESTRUCTOR_P (decl)
2753 || IDENTIFIER_VIRTUAL_P (DECL_NAME (decl))
2754 || DECL_CONV_FN_P (decl))
2755 && look_for_overrides (ctype, decl)
2756 && !DECL_STATIC_FUNCTION_P (decl))
2757 /* Set DECL_VINDEX to a value that is neither an INTEGER_CST nor
2758 the error_mark_node so that we know it is an overriding
2759 function. */
2760 {
2761 DECL_VINDEX (decl) = decl;
2762 overrides_found = true;
2763 }
2764
2765 if (DECL_VIRTUAL_P (decl))
2766 {
2767 if (!DECL_VINDEX (decl))
2768 DECL_VINDEX (decl) = error_mark_node;
2769 IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)) = 1;
2770 if (DECL_DESTRUCTOR_P (decl))
2771 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (ctype) = true;
2772 }
2773 else if (DECL_FINAL_P (decl))
2774 error ("%q+#D marked final, but is not virtual", decl);
2775 if (DECL_OVERRIDE_P (decl) && !overrides_found)
2776 error ("%q+#D marked override, but does not override", decl);
2777 }
2778
2779 /* Warn about hidden virtual functions that are not overridden in t.
2780 We know that constructors and destructors don't apply. */
2781
2782 static void
2783 warn_hidden (tree t)
2784 {
2785 vec<tree, va_gc> *method_vec = CLASSTYPE_METHOD_VEC (t);
2786 tree fns;
2787 size_t i;
2788
2789 /* We go through each separately named virtual function. */
2790 for (i = CLASSTYPE_FIRST_CONVERSION_SLOT;
2791 vec_safe_iterate (method_vec, i, &fns);
2792 ++i)
2793 {
2794 tree fn;
2795 tree name;
2796 tree fndecl;
2797 tree base_fndecls;
2798 tree base_binfo;
2799 tree binfo;
2800 int j;
2801
2802 /* All functions in this slot in the CLASSTYPE_METHOD_VEC will
2803 have the same name. Figure out what name that is. */
2804 name = DECL_NAME (OVL_CURRENT (fns));
2805 /* There are no possibly hidden functions yet. */
2806 base_fndecls = NULL_TREE;
2807 /* Iterate through all of the base classes looking for possibly
2808 hidden functions. */
2809 for (binfo = TYPE_BINFO (t), j = 0;
2810 BINFO_BASE_ITERATE (binfo, j, base_binfo); j++)
2811 {
2812 tree basetype = BINFO_TYPE (base_binfo);
2813 base_fndecls = chainon (get_basefndecls (name, basetype),
2814 base_fndecls);
2815 }
2816
2817 /* If there are no functions to hide, continue. */
2818 if (!base_fndecls)
2819 continue;
2820
2821 /* Remove any overridden functions. */
2822 for (fn = fns; fn; fn = OVL_NEXT (fn))
2823 {
2824 fndecl = OVL_CURRENT (fn);
2825 if (DECL_VINDEX (fndecl))
2826 {
2827 tree *prev = &base_fndecls;
2828
2829 while (*prev)
2830 /* If the method from the base class has the same
2831 signature as the method from the derived class, it
2832 has been overridden. */
2833 if (same_signature_p (fndecl, TREE_VALUE (*prev)))
2834 *prev = TREE_CHAIN (*prev);
2835 else
2836 prev = &TREE_CHAIN (*prev);
2837 }
2838 }
2839
2840 /* Now give a warning for all base functions without overriders,
2841 as they are hidden. */
2842 while (base_fndecls)
2843 {
2844 /* Here we know it is a hider, and no overrider exists. */
2845 warning (OPT_Woverloaded_virtual, "%q+D was hidden", TREE_VALUE (base_fndecls));
2846 warning (OPT_Woverloaded_virtual, " by %q+D", fns);
2847 base_fndecls = TREE_CHAIN (base_fndecls);
2848 }
2849 }
2850 }
2851
2852 /* Recursive helper for finish_struct_anon. */
2853
2854 static void
2855 finish_struct_anon_r (tree field, bool complain)
2856 {
2857 bool is_union = TREE_CODE (TREE_TYPE (field)) == UNION_TYPE;
2858 tree elt = TYPE_FIELDS (TREE_TYPE (field));
2859 for (; elt; elt = DECL_CHAIN (elt))
2860 {
2861 /* We're generally only interested in entities the user
2862 declared, but we also find nested classes by noticing
2863 the TYPE_DECL that we create implicitly. You're
2864 allowed to put one anonymous union inside another,
2865 though, so we explicitly tolerate that. We use
2866 TYPE_ANONYMOUS_P rather than ANON_AGGR_TYPE_P so that
2867 we also allow unnamed types used for defining fields. */
2868 if (DECL_ARTIFICIAL (elt)
2869 && (!DECL_IMPLICIT_TYPEDEF_P (elt)
2870 || TYPE_ANONYMOUS_P (TREE_TYPE (elt))))
2871 continue;
2872
2873 if (TREE_CODE (elt) != FIELD_DECL)
2874 {
2875 /* We already complained about static data members in
2876 finish_static_data_member_decl. */
2877 if (complain && TREE_CODE (elt) != VAR_DECL)
2878 {
2879 if (is_union)
2880 permerror (input_location,
2881 "%q+#D invalid; an anonymous union can "
2882 "only have non-static data members", elt);
2883 else
2884 permerror (input_location,
2885 "%q+#D invalid; an anonymous struct can "
2886 "only have non-static data members", elt);
2887 }
2888 continue;
2889 }
2890
2891 if (complain)
2892 {
2893 if (TREE_PRIVATE (elt))
2894 {
2895 if (is_union)
2896 permerror (input_location,
2897 "private member %q+#D in anonymous union", elt);
2898 else
2899 permerror (input_location,
2900 "private member %q+#D in anonymous struct", elt);
2901 }
2902 else if (TREE_PROTECTED (elt))
2903 {
2904 if (is_union)
2905 permerror (input_location,
2906 "protected member %q+#D in anonymous union", elt);
2907 else
2908 permerror (input_location,
2909 "protected member %q+#D in anonymous struct", elt);
2910 }
2911 }
2912
2913 TREE_PRIVATE (elt) = TREE_PRIVATE (field);
2914 TREE_PROTECTED (elt) = TREE_PROTECTED (field);
2915
2916 /* Recurse into the anonymous aggregates to handle correctly
2917 access control (c++/24926):
2918
2919 class A {
2920 union {
2921 union {
2922 int i;
2923 };
2924 };
2925 };
2926
2927 int j=A().i; */
2928 if (DECL_NAME (elt) == NULL_TREE
2929 && ANON_AGGR_TYPE_P (TREE_TYPE (elt)))
2930 finish_struct_anon_r (elt, /*complain=*/false);
2931 }
2932 }
2933
2934 /* Check for things that are invalid. There are probably plenty of other
2935 things we should check for also. */
2936
2937 static void
2938 finish_struct_anon (tree t)
2939 {
2940 for (tree field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
2941 {
2942 if (TREE_STATIC (field))
2943 continue;
2944 if (TREE_CODE (field) != FIELD_DECL)
2945 continue;
2946
2947 if (DECL_NAME (field) == NULL_TREE
2948 && ANON_AGGR_TYPE_P (TREE_TYPE (field)))
2949 finish_struct_anon_r (field, /*complain=*/true);
2950 }
2951 }
2952
2953 /* Add T to CLASSTYPE_DECL_LIST of current_class_type which
2954 will be used later during class template instantiation.
2955 When FRIEND_P is zero, T can be a static member data (VAR_DECL),
2956 a non-static member data (FIELD_DECL), a member function
2957 (FUNCTION_DECL), a nested type (RECORD_TYPE, ENUM_TYPE),
2958 a typedef (TYPE_DECL) or a member class template (TEMPLATE_DECL)
2959 When FRIEND_P is nonzero, T is either a friend class
2960 (RECORD_TYPE, TEMPLATE_DECL) or a friend function
2961 (FUNCTION_DECL, TEMPLATE_DECL). */
2962
2963 void
2964 maybe_add_class_template_decl_list (tree type, tree t, int friend_p)
2965 {
2966 /* Save some memory by not creating TREE_LIST if TYPE is not template. */
2967 if (CLASSTYPE_TEMPLATE_INFO (type))
2968 CLASSTYPE_DECL_LIST (type)
2969 = tree_cons (friend_p ? NULL_TREE : type,
2970 t, CLASSTYPE_DECL_LIST (type));
2971 }
2972
2973 /* This function is called from declare_virt_assop_and_dtor via
2974 dfs_walk_all.
2975
2976 DATA is a type that direcly or indirectly inherits the base
2977 represented by BINFO. If BINFO contains a virtual assignment [copy
2978 assignment or move assigment] operator or a virtual constructor,
2979 declare that function in DATA if it hasn't been already declared. */
2980
2981 static tree
2982 dfs_declare_virt_assop_and_dtor (tree binfo, void *data)
2983 {
2984 tree bv, fn, t = (tree)data;
2985 tree opname = ansi_assopname (NOP_EXPR);
2986
2987 gcc_assert (t && CLASS_TYPE_P (t));
2988 gcc_assert (binfo && TREE_CODE (binfo) == TREE_BINFO);
2989
2990 if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
2991 /* A base without a vtable needs no modification, and its bases
2992 are uninteresting. */
2993 return dfs_skip_bases;
2994
2995 if (BINFO_PRIMARY_P (binfo))
2996 /* If this is a primary base, then we have already looked at the
2997 virtual functions of its vtable. */
2998 return NULL_TREE;
2999
3000 for (bv = BINFO_VIRTUALS (binfo); bv; bv = TREE_CHAIN (bv))
3001 {
3002 fn = BV_FN (bv);
3003
3004 if (DECL_NAME (fn) == opname)
3005 {
3006 if (CLASSTYPE_LAZY_COPY_ASSIGN (t))
3007 lazily_declare_fn (sfk_copy_assignment, t);
3008 if (CLASSTYPE_LAZY_MOVE_ASSIGN (t))
3009 lazily_declare_fn (sfk_move_assignment, t);
3010 }
3011 else if (DECL_DESTRUCTOR_P (fn)
3012 && CLASSTYPE_LAZY_DESTRUCTOR (t))
3013 lazily_declare_fn (sfk_destructor, t);
3014 }
3015
3016 return NULL_TREE;
3017 }
3018
3019 /* If the class type T has a direct or indirect base that contains a
3020 virtual assignment operator or a virtual destructor, declare that
3021 function in T if it hasn't been already declared. */
3022
3023 static void
3024 declare_virt_assop_and_dtor (tree t)
3025 {
3026 if (!(TYPE_POLYMORPHIC_P (t)
3027 && (CLASSTYPE_LAZY_COPY_ASSIGN (t)
3028 || CLASSTYPE_LAZY_MOVE_ASSIGN (t)
3029 || CLASSTYPE_LAZY_DESTRUCTOR (t))))
3030 return;
3031
3032 dfs_walk_all (TYPE_BINFO (t),
3033 dfs_declare_virt_assop_and_dtor,
3034 NULL, t);
3035 }
3036
3037 /* Declare the inheriting constructor for class T inherited from base
3038 constructor CTOR with the parameter array PARMS of size NPARMS. */
3039
3040 static void
3041 one_inheriting_sig (tree t, tree ctor, tree *parms, int nparms)
3042 {
3043 /* We don't declare an inheriting ctor that would be a default,
3044 copy or move ctor for derived or base. */
3045 if (nparms == 0)
3046 return;
3047 if (nparms == 1
3048 && TREE_CODE (parms[0]) == REFERENCE_TYPE)
3049 {
3050 tree parm = TYPE_MAIN_VARIANT (TREE_TYPE (parms[0]));
3051 if (parm == t || parm == DECL_CONTEXT (ctor))
3052 return;
3053 }
3054
3055 tree parmlist = void_list_node;
3056 for (int i = nparms - 1; i >= 0; i--)
3057 parmlist = tree_cons (NULL_TREE, parms[i], parmlist);
3058 tree fn = implicitly_declare_fn (sfk_inheriting_constructor,
3059 t, false, ctor, parmlist);
3060 if (add_method (t, fn, NULL_TREE))
3061 {
3062 DECL_CHAIN (fn) = TYPE_METHODS (t);
3063 TYPE_METHODS (t) = fn;
3064 }
3065 }
3066
3067 /* Declare all the inheriting constructors for class T inherited from base
3068 constructor CTOR. */
3069
3070 static void
3071 one_inherited_ctor (tree ctor, tree t)
3072 {
3073 tree parms = FUNCTION_FIRST_USER_PARMTYPE (ctor);
3074
3075 tree *new_parms = XALLOCAVEC (tree, list_length (parms));
3076 int i = 0;
3077 for (; parms && parms != void_list_node; parms = TREE_CHAIN (parms))
3078 {
3079 if (TREE_PURPOSE (parms))
3080 one_inheriting_sig (t, ctor, new_parms, i);
3081 new_parms[i++] = TREE_VALUE (parms);
3082 }
3083 one_inheriting_sig (t, ctor, new_parms, i);
3084 if (parms == NULL_TREE)
3085 {
3086 if (warning (OPT_Winherited_variadic_ctor,
3087 "the ellipsis in %qD is not inherited", ctor))
3088 inform (DECL_SOURCE_LOCATION (ctor), "%qD declared here", ctor);
3089 }
3090 }
3091
3092 /* Create default constructors, assignment operators, and so forth for
3093 the type indicated by T, if they are needed. CANT_HAVE_CONST_CTOR,
3094 and CANT_HAVE_CONST_ASSIGNMENT are nonzero if, for whatever reason,
3095 the class cannot have a default constructor, copy constructor
3096 taking a const reference argument, or an assignment operator taking
3097 a const reference, respectively. */
3098
3099 static void
3100 add_implicitly_declared_members (tree t, tree* access_decls,
3101 int cant_have_const_cctor,
3102 int cant_have_const_assignment)
3103 {
3104 bool move_ok = false;
3105
3106 if (cxx_dialect >= cxx11 && !CLASSTYPE_DESTRUCTORS (t)
3107 && !TYPE_HAS_COPY_CTOR (t) && !TYPE_HAS_COPY_ASSIGN (t)
3108 && !type_has_move_constructor (t) && !type_has_move_assign (t))
3109 move_ok = true;
3110
3111 /* Destructor. */
3112 if (!CLASSTYPE_DESTRUCTORS (t))
3113 {
3114 /* In general, we create destructors lazily. */
3115 CLASSTYPE_LAZY_DESTRUCTOR (t) = 1;
3116
3117 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
3118 && TYPE_FOR_JAVA (t))
3119 /* But if this is a Java class, any non-trivial destructor is
3120 invalid, even if compiler-generated. Therefore, if the
3121 destructor is non-trivial we create it now. */
3122 lazily_declare_fn (sfk_destructor, t);
3123 }
3124
3125 /* [class.ctor]
3126
3127 If there is no user-declared constructor for a class, a default
3128 constructor is implicitly declared. */
3129 if (! TYPE_HAS_USER_CONSTRUCTOR (t))
3130 {
3131 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 1;
3132 CLASSTYPE_LAZY_DEFAULT_CTOR (t) = 1;
3133 if (cxx_dialect >= cxx11)
3134 TYPE_HAS_CONSTEXPR_CTOR (t)
3135 /* This might force the declaration. */
3136 = type_has_constexpr_default_constructor (t);
3137 }
3138
3139 /* [class.ctor]
3140
3141 If a class definition does not explicitly declare a copy
3142 constructor, one is declared implicitly. */
3143 if (! TYPE_HAS_COPY_CTOR (t) && ! TYPE_FOR_JAVA (t))
3144 {
3145 TYPE_HAS_COPY_CTOR (t) = 1;
3146 TYPE_HAS_CONST_COPY_CTOR (t) = !cant_have_const_cctor;
3147 CLASSTYPE_LAZY_COPY_CTOR (t) = 1;
3148 if (move_ok)
3149 CLASSTYPE_LAZY_MOVE_CTOR (t) = 1;
3150 }
3151
3152 /* If there is no assignment operator, one will be created if and
3153 when it is needed. For now, just record whether or not the type
3154 of the parameter to the assignment operator will be a const or
3155 non-const reference. */
3156 if (!TYPE_HAS_COPY_ASSIGN (t) && !TYPE_FOR_JAVA (t))
3157 {
3158 TYPE_HAS_COPY_ASSIGN (t) = 1;
3159 TYPE_HAS_CONST_COPY_ASSIGN (t) = !cant_have_const_assignment;
3160 CLASSTYPE_LAZY_COPY_ASSIGN (t) = 1;
3161 if (move_ok)
3162 CLASSTYPE_LAZY_MOVE_ASSIGN (t) = 1;
3163 }
3164
3165 /* We can't be lazy about declaring functions that might override
3166 a virtual function from a base class. */
3167 declare_virt_assop_and_dtor (t);
3168
3169 while (*access_decls)
3170 {
3171 tree using_decl = TREE_VALUE (*access_decls);
3172 tree decl = USING_DECL_DECLS (using_decl);
3173 if (DECL_NAME (using_decl) == ctor_identifier)
3174 {
3175 /* declare, then remove the decl */
3176 tree ctor_list = decl;
3177 location_t loc = input_location;
3178 input_location = DECL_SOURCE_LOCATION (using_decl);
3179 if (ctor_list)
3180 for (; ctor_list; ctor_list = OVL_NEXT (ctor_list))
3181 one_inherited_ctor (OVL_CURRENT (ctor_list), t);
3182 *access_decls = TREE_CHAIN (*access_decls);
3183 input_location = loc;
3184 }
3185 else
3186 access_decls = &TREE_CHAIN (*access_decls);
3187 }
3188 }
3189
3190 /* Subroutine of insert_into_classtype_sorted_fields. Recursively
3191 count the number of fields in TYPE, including anonymous union
3192 members. */
3193
3194 static int
3195 count_fields (tree fields)
3196 {
3197 tree x;
3198 int n_fields = 0;
3199 for (x = fields; x; x = DECL_CHAIN (x))
3200 {
3201 if (TREE_CODE (x) == FIELD_DECL && ANON_AGGR_TYPE_P (TREE_TYPE (x)))
3202 n_fields += count_fields (TYPE_FIELDS (TREE_TYPE (x)));
3203 else
3204 n_fields += 1;
3205 }
3206 return n_fields;
3207 }
3208
3209 /* Subroutine of insert_into_classtype_sorted_fields. Recursively add
3210 all the fields in the TREE_LIST FIELDS to the SORTED_FIELDS_TYPE
3211 elts, starting at offset IDX. */
3212
3213 static int
3214 add_fields_to_record_type (tree fields, struct sorted_fields_type *field_vec, int idx)
3215 {
3216 tree x;
3217 for (x = fields; x; x = DECL_CHAIN (x))
3218 {
3219 if (TREE_CODE (x) == FIELD_DECL && ANON_AGGR_TYPE_P (TREE_TYPE (x)))
3220 idx = add_fields_to_record_type (TYPE_FIELDS (TREE_TYPE (x)), field_vec, idx);
3221 else
3222 field_vec->elts[idx++] = x;
3223 }
3224 return idx;
3225 }
3226
3227 /* Add all of the enum values of ENUMTYPE, to the FIELD_VEC elts,
3228 starting at offset IDX. */
3229
3230 static int
3231 add_enum_fields_to_record_type (tree enumtype,
3232 struct sorted_fields_type *field_vec,
3233 int idx)
3234 {
3235 tree values;
3236 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
3237 field_vec->elts[idx++] = TREE_VALUE (values);
3238 return idx;
3239 }
3240
3241 /* FIELD is a bit-field. We are finishing the processing for its
3242 enclosing type. Issue any appropriate messages and set appropriate
3243 flags. Returns false if an error has been diagnosed. */
3244
3245 static bool
3246 check_bitfield_decl (tree field)
3247 {
3248 tree type = TREE_TYPE (field);
3249 tree w;
3250
3251 /* Extract the declared width of the bitfield, which has been
3252 temporarily stashed in DECL_INITIAL. */
3253 w = DECL_INITIAL (field);
3254 gcc_assert (w != NULL_TREE);
3255 /* Remove the bit-field width indicator so that the rest of the
3256 compiler does not treat that value as an initializer. */
3257 DECL_INITIAL (field) = NULL_TREE;
3258
3259 /* Detect invalid bit-field type. */
3260 if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
3261 {
3262 error ("bit-field %q+#D with non-integral type", field);
3263 w = error_mark_node;
3264 }
3265 else
3266 {
3267 location_t loc = input_location;
3268 /* Avoid the non_lvalue wrapper added by fold for PLUS_EXPRs. */
3269 STRIP_NOPS (w);
3270
3271 /* detect invalid field size. */
3272 input_location = DECL_SOURCE_LOCATION (field);
3273 w = cxx_constant_value (w);
3274 input_location = loc;
3275
3276 if (TREE_CODE (w) != INTEGER_CST)
3277 {
3278 error ("bit-field %q+D width not an integer constant", field);
3279 w = error_mark_node;
3280 }
3281 else if (tree_int_cst_sgn (w) < 0)
3282 {
3283 error ("negative width in bit-field %q+D", field);
3284 w = error_mark_node;
3285 }
3286 else if (integer_zerop (w) && DECL_NAME (field) != 0)
3287 {
3288 error ("zero width for bit-field %q+D", field);
3289 w = error_mark_node;
3290 }
3291 else if ((TREE_CODE (type) != ENUMERAL_TYPE
3292 && TREE_CODE (type) != BOOLEAN_TYPE
3293 && compare_tree_int (w, TYPE_PRECISION (type)) > 0)
3294 || ((TREE_CODE (type) == ENUMERAL_TYPE
3295 || TREE_CODE (type) == BOOLEAN_TYPE)
3296 && tree_int_cst_lt (TYPE_SIZE (type), w)))
3297 warning (0, "width of %q+D exceeds its type", field);
3298 else if (TREE_CODE (type) == ENUMERAL_TYPE
3299 && (0 > (compare_tree_int
3300 (w, TYPE_PRECISION (ENUM_UNDERLYING_TYPE (type))))))
3301 warning (0, "%q+D is too small to hold all values of %q#T", field, type);
3302 }
3303
3304 if (w != error_mark_node)
3305 {
3306 DECL_SIZE (field) = convert (bitsizetype, w);
3307 DECL_BIT_FIELD (field) = 1;
3308 return true;
3309 }
3310 else
3311 {
3312 /* Non-bit-fields are aligned for their type. */
3313 DECL_BIT_FIELD (field) = 0;
3314 CLEAR_DECL_C_BIT_FIELD (field);
3315 return false;
3316 }
3317 }
3318
3319 /* FIELD is a non bit-field. We are finishing the processing for its
3320 enclosing type T. Issue any appropriate messages and set appropriate
3321 flags. */
3322
3323 static void
3324 check_field_decl (tree field,
3325 tree t,
3326 int* cant_have_const_ctor,
3327 int* no_const_asn_ref,
3328 int* any_default_members)
3329 {
3330 tree type = strip_array_types (TREE_TYPE (field));
3331
3332 /* In C++98 an anonymous union cannot contain any fields which would change
3333 the settings of CANT_HAVE_CONST_CTOR and friends. */
3334 if (ANON_UNION_TYPE_P (type) && cxx_dialect < cxx11)
3335 ;
3336 /* And, we don't set TYPE_HAS_CONST_COPY_CTOR, etc., for anonymous
3337 structs. So, we recurse through their fields here. */
3338 else if (ANON_AGGR_TYPE_P (type))
3339 {
3340 tree fields;
3341
3342 for (fields = TYPE_FIELDS (type); fields; fields = DECL_CHAIN (fields))
3343 if (TREE_CODE (fields) == FIELD_DECL && !DECL_C_BIT_FIELD (field))
3344 check_field_decl (fields, t, cant_have_const_ctor,
3345 no_const_asn_ref, any_default_members);
3346 }
3347 /* Check members with class type for constructors, destructors,
3348 etc. */
3349 else if (CLASS_TYPE_P (type))
3350 {
3351 /* Never let anything with uninheritable virtuals
3352 make it through without complaint. */
3353 abstract_virtuals_error (field, type);
3354
3355 if (TREE_CODE (t) == UNION_TYPE && cxx_dialect < cxx11)
3356 {
3357 static bool warned;
3358 int oldcount = errorcount;
3359 if (TYPE_NEEDS_CONSTRUCTING (type))
3360 error ("member %q+#D with constructor not allowed in union",
3361 field);
3362 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3363 error ("member %q+#D with destructor not allowed in union", field);
3364 if (TYPE_HAS_COMPLEX_COPY_ASSIGN (type))
3365 error ("member %q+#D with copy assignment operator not allowed in union",
3366 field);
3367 if (!warned && errorcount > oldcount)
3368 {
3369 inform (DECL_SOURCE_LOCATION (field), "unrestricted unions "
3370 "only available with -std=c++11 or -std=gnu++11");
3371 warned = true;
3372 }
3373 }
3374 else
3375 {
3376 TYPE_NEEDS_CONSTRUCTING (t) |= TYPE_NEEDS_CONSTRUCTING (type);
3377 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
3378 |= TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type);
3379 TYPE_HAS_COMPLEX_COPY_ASSIGN (t)
3380 |= (TYPE_HAS_COMPLEX_COPY_ASSIGN (type)
3381 || !TYPE_HAS_COPY_ASSIGN (type));
3382 TYPE_HAS_COMPLEX_COPY_CTOR (t) |= (TYPE_HAS_COMPLEX_COPY_CTOR (type)
3383 || !TYPE_HAS_COPY_CTOR (type));
3384 TYPE_HAS_COMPLEX_MOVE_ASSIGN (t) |= TYPE_HAS_COMPLEX_MOVE_ASSIGN (type);
3385 TYPE_HAS_COMPLEX_MOVE_CTOR (t) |= TYPE_HAS_COMPLEX_MOVE_CTOR (type);
3386 TYPE_HAS_COMPLEX_DFLT (t) |= (!TYPE_HAS_DEFAULT_CONSTRUCTOR (type)
3387 || TYPE_HAS_COMPLEX_DFLT (type));
3388 }
3389
3390 if (TYPE_HAS_COPY_CTOR (type)
3391 && !TYPE_HAS_CONST_COPY_CTOR (type))
3392 *cant_have_const_ctor = 1;
3393
3394 if (TYPE_HAS_COPY_ASSIGN (type)
3395 && !TYPE_HAS_CONST_COPY_ASSIGN (type))
3396 *no_const_asn_ref = 1;
3397 }
3398
3399 check_abi_tags (t, field);
3400
3401 if (DECL_INITIAL (field) != NULL_TREE)
3402 {
3403 /* `build_class_init_list' does not recognize
3404 non-FIELD_DECLs. */
3405 if (TREE_CODE (t) == UNION_TYPE && *any_default_members != 0)
3406 error ("multiple fields in union %qT initialized", t);
3407 *any_default_members = 1;
3408 }
3409 }
3410
3411 /* Check the data members (both static and non-static), class-scoped
3412 typedefs, etc., appearing in the declaration of T. Issue
3413 appropriate diagnostics. Sets ACCESS_DECLS to a list (in
3414 declaration order) of access declarations; each TREE_VALUE in this
3415 list is a USING_DECL.
3416
3417 In addition, set the following flags:
3418
3419 EMPTY_P
3420 The class is empty, i.e., contains no non-static data members.
3421
3422 CANT_HAVE_CONST_CTOR_P
3423 This class cannot have an implicitly generated copy constructor
3424 taking a const reference.
3425
3426 CANT_HAVE_CONST_ASN_REF
3427 This class cannot have an implicitly generated assignment
3428 operator taking a const reference.
3429
3430 All of these flags should be initialized before calling this
3431 function.
3432
3433 Returns a pointer to the end of the TYPE_FIELDs chain; additional
3434 fields can be added by adding to this chain. */
3435
3436 static void
3437 check_field_decls (tree t, tree *access_decls,
3438 int *cant_have_const_ctor_p,
3439 int *no_const_asn_ref_p)
3440 {
3441 tree *field;
3442 tree *next;
3443 bool has_pointers;
3444 int any_default_members;
3445 int cant_pack = 0;
3446 int field_access = -1;
3447
3448 /* Assume there are no access declarations. */
3449 *access_decls = NULL_TREE;
3450 /* Assume this class has no pointer members. */
3451 has_pointers = false;
3452 /* Assume none of the members of this class have default
3453 initializations. */
3454 any_default_members = 0;
3455
3456 for (field = &TYPE_FIELDS (t); *field; field = next)
3457 {
3458 tree x = *field;
3459 tree type = TREE_TYPE (x);
3460 int this_field_access;
3461
3462 next = &DECL_CHAIN (x);
3463
3464 if (TREE_CODE (x) == USING_DECL)
3465 {
3466 /* Save the access declarations for our caller. */
3467 *access_decls = tree_cons (NULL_TREE, x, *access_decls);
3468 continue;
3469 }
3470
3471 if (TREE_CODE (x) == TYPE_DECL
3472 || TREE_CODE (x) == TEMPLATE_DECL)
3473 continue;
3474
3475 /* If we've gotten this far, it's a data member, possibly static,
3476 or an enumerator. */
3477 if (TREE_CODE (x) != CONST_DECL)
3478 DECL_CONTEXT (x) = t;
3479
3480 /* When this goes into scope, it will be a non-local reference. */
3481 DECL_NONLOCAL (x) = 1;
3482
3483 if (TREE_CODE (t) == UNION_TYPE)
3484 {
3485 /* [class.union]
3486
3487 If a union contains a static data member, or a member of
3488 reference type, the program is ill-formed. */
3489 if (VAR_P (x))
3490 {
3491 error ("%q+D may not be static because it is a member of a union", x);
3492 continue;
3493 }
3494 if (TREE_CODE (type) == REFERENCE_TYPE)
3495 {
3496 error ("%q+D may not have reference type %qT because"
3497 " it is a member of a union",
3498 x, type);
3499 continue;
3500 }
3501 }
3502
3503 /* Perform error checking that did not get done in
3504 grokdeclarator. */
3505 if (TREE_CODE (type) == FUNCTION_TYPE)
3506 {
3507 error ("field %q+D invalidly declared function type", x);
3508 type = build_pointer_type (type);
3509 TREE_TYPE (x) = type;
3510 }
3511 else if (TREE_CODE (type) == METHOD_TYPE)
3512 {
3513 error ("field %q+D invalidly declared method type", x);
3514 type = build_pointer_type (type);
3515 TREE_TYPE (x) = type;
3516 }
3517
3518 if (type == error_mark_node)
3519 continue;
3520
3521 if (TREE_CODE (x) == CONST_DECL || VAR_P (x))
3522 continue;
3523
3524 /* Now it can only be a FIELD_DECL. */
3525
3526 if (TREE_PRIVATE (x) || TREE_PROTECTED (x))
3527 CLASSTYPE_NON_AGGREGATE (t) = 1;
3528
3529 /* If at least one non-static data member is non-literal, the whole
3530 class becomes non-literal. Note: if the type is incomplete we
3531 will complain later on. */
3532 if (COMPLETE_TYPE_P (type) && !literal_type_p (type))
3533 CLASSTYPE_LITERAL_P (t) = false;
3534
3535 /* A standard-layout class is a class that:
3536 ...
3537 has the same access control (Clause 11) for all non-static data members,
3538 ... */
3539 this_field_access = TREE_PROTECTED (x) ? 1 : TREE_PRIVATE (x) ? 2 : 0;
3540 if (field_access == -1)
3541 field_access = this_field_access;
3542 else if (this_field_access != field_access)
3543 CLASSTYPE_NON_STD_LAYOUT (t) = 1;
3544
3545 /* If this is of reference type, check if it needs an init. */
3546 if (TREE_CODE (type) == REFERENCE_TYPE)
3547 {
3548 CLASSTYPE_NON_LAYOUT_POD_P (t) = 1;
3549 CLASSTYPE_NON_STD_LAYOUT (t) = 1;
3550 if (DECL_INITIAL (x) == NULL_TREE)
3551 SET_CLASSTYPE_REF_FIELDS_NEED_INIT (t, 1);
3552
3553 /* ARM $12.6.2: [A member initializer list] (or, for an
3554 aggregate, initialization by a brace-enclosed list) is the
3555 only way to initialize nonstatic const and reference
3556 members. */
3557 TYPE_HAS_COMPLEX_COPY_ASSIGN (t) = 1;
3558 TYPE_HAS_COMPLEX_MOVE_ASSIGN (t) = 1;
3559 }
3560
3561 type = strip_array_types (type);
3562
3563 if (TYPE_PACKED (t))
3564 {
3565 if (!layout_pod_type_p (type) && !TYPE_PACKED (type))
3566 {
3567 warning
3568 (0,
3569 "ignoring packed attribute because of unpacked non-POD field %q+#D",
3570 x);
3571 cant_pack = 1;
3572 }
3573 else if (DECL_C_BIT_FIELD (x)
3574 || TYPE_ALIGN (TREE_TYPE (x)) > BITS_PER_UNIT)
3575 DECL_PACKED (x) = 1;
3576 }
3577
3578 if (DECL_C_BIT_FIELD (x) && integer_zerop (DECL_INITIAL (x)))
3579 /* We don't treat zero-width bitfields as making a class
3580 non-empty. */
3581 ;
3582 else
3583 {
3584 /* The class is non-empty. */
3585 CLASSTYPE_EMPTY_P (t) = 0;
3586 /* The class is not even nearly empty. */
3587 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
3588 /* If one of the data members contains an empty class,
3589 so does T. */
3590 if (CLASS_TYPE_P (type)
3591 && CLASSTYPE_CONTAINS_EMPTY_CLASS_P (type))
3592 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) = 1;
3593 }
3594
3595 /* This is used by -Weffc++ (see below). Warn only for pointers
3596 to members which might hold dynamic memory. So do not warn
3597 for pointers to functions or pointers to members. */
3598 if (TYPE_PTR_P (type)
3599 && !TYPE_PTRFN_P (type))
3600 has_pointers = true;
3601
3602 if (CLASS_TYPE_P (type))
3603 {
3604 if (CLASSTYPE_REF_FIELDS_NEED_INIT (type))
3605 SET_CLASSTYPE_REF_FIELDS_NEED_INIT (t, 1);
3606 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (type))
3607 SET_CLASSTYPE_READONLY_FIELDS_NEED_INIT (t, 1);
3608 }
3609
3610 if (DECL_MUTABLE_P (x) || TYPE_HAS_MUTABLE_P (type))
3611 CLASSTYPE_HAS_MUTABLE (t) = 1;
3612
3613 if (DECL_MUTABLE_P (x))
3614 {
3615 if (CP_TYPE_CONST_P (type))
3616 {
3617 error ("member %q+D cannot be declared both %<const%> "
3618 "and %<mutable%>", x);
3619 continue;
3620 }
3621 if (TREE_CODE (type) == REFERENCE_TYPE)
3622 {
3623 error ("member %q+D cannot be declared as a %<mutable%> "
3624 "reference", x);
3625 continue;
3626 }
3627 }
3628
3629 if (! layout_pod_type_p (type))
3630 /* DR 148 now allows pointers to members (which are POD themselves),
3631 to be allowed in POD structs. */
3632 CLASSTYPE_NON_LAYOUT_POD_P (t) = 1;
3633
3634 if (!std_layout_type_p (type))
3635 CLASSTYPE_NON_STD_LAYOUT (t) = 1;
3636
3637 if (! zero_init_p (type))
3638 CLASSTYPE_NON_ZERO_INIT_P (t) = 1;
3639
3640 /* We set DECL_C_BIT_FIELD in grokbitfield.
3641 If the type and width are valid, we'll also set DECL_BIT_FIELD. */
3642 if (! DECL_C_BIT_FIELD (x) || ! check_bitfield_decl (x))
3643 check_field_decl (x, t,
3644 cant_have_const_ctor_p,
3645 no_const_asn_ref_p,
3646 &any_default_members);
3647
3648 /* Now that we've removed bit-field widths from DECL_INITIAL,
3649 anything left in DECL_INITIAL is an NSDMI that makes the class
3650 non-aggregate. */
3651 if (DECL_INITIAL (x))
3652 CLASSTYPE_NON_AGGREGATE (t) = true;
3653
3654 /* If any field is const, the structure type is pseudo-const. */
3655 if (CP_TYPE_CONST_P (type))
3656 {
3657 C_TYPE_FIELDS_READONLY (t) = 1;
3658 if (DECL_INITIAL (x) == NULL_TREE)
3659 SET_CLASSTYPE_READONLY_FIELDS_NEED_INIT (t, 1);
3660
3661 /* ARM $12.6.2: [A member initializer list] (or, for an
3662 aggregate, initialization by a brace-enclosed list) is the
3663 only way to initialize nonstatic const and reference
3664 members. */
3665 TYPE_HAS_COMPLEX_COPY_ASSIGN (t) = 1;
3666 TYPE_HAS_COMPLEX_MOVE_ASSIGN (t) = 1;
3667 }
3668 /* A field that is pseudo-const makes the structure likewise. */
3669 else if (CLASS_TYPE_P (type))
3670 {
3671 C_TYPE_FIELDS_READONLY (t) |= C_TYPE_FIELDS_READONLY (type);
3672 SET_CLASSTYPE_READONLY_FIELDS_NEED_INIT (t,
3673 CLASSTYPE_READONLY_FIELDS_NEED_INIT (t)
3674 | CLASSTYPE_READONLY_FIELDS_NEED_INIT (type));
3675 }
3676
3677 /* Core issue 80: A nonstatic data member is required to have a
3678 different name from the class iff the class has a
3679 user-declared constructor. */
3680 if (constructor_name_p (DECL_NAME (x), t)
3681 && TYPE_HAS_USER_CONSTRUCTOR (t))
3682 permerror (input_location, "field %q+#D with same name as class", x);
3683 }
3684
3685 /* Effective C++ rule 11: if a class has dynamic memory held by pointers,
3686 it should also define a copy constructor and an assignment operator to
3687 implement the correct copy semantic (deep vs shallow, etc.). As it is
3688 not feasible to check whether the constructors do allocate dynamic memory
3689 and store it within members, we approximate the warning like this:
3690
3691 -- Warn only if there are members which are pointers
3692 -- Warn only if there is a non-trivial constructor (otherwise,
3693 there cannot be memory allocated).
3694 -- Warn only if there is a non-trivial destructor. We assume that the
3695 user at least implemented the cleanup correctly, and a destructor
3696 is needed to free dynamic memory.
3697
3698 This seems enough for practical purposes. */
3699 if (warn_ecpp
3700 && has_pointers
3701 && TYPE_HAS_USER_CONSTRUCTOR (t)
3702 && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
3703 && !(TYPE_HAS_COPY_CTOR (t) && TYPE_HAS_COPY_ASSIGN (t)))
3704 {
3705 warning (OPT_Weffc__, "%q#T has pointer data members", t);
3706
3707 if (! TYPE_HAS_COPY_CTOR (t))
3708 {
3709 warning (OPT_Weffc__,
3710 " but does not override %<%T(const %T&)%>", t, t);
3711 if (!TYPE_HAS_COPY_ASSIGN (t))
3712 warning (OPT_Weffc__, " or %<operator=(const %T&)%>", t);
3713 }
3714 else if (! TYPE_HAS_COPY_ASSIGN (t))
3715 warning (OPT_Weffc__,
3716 " but does not override %<operator=(const %T&)%>", t);
3717 }
3718
3719 /* Non-static data member initializers make the default constructor
3720 non-trivial. */
3721 if (any_default_members)
3722 {
3723 TYPE_NEEDS_CONSTRUCTING (t) = true;
3724 TYPE_HAS_COMPLEX_DFLT (t) = true;
3725 }
3726
3727 /* If any of the fields couldn't be packed, unset TYPE_PACKED. */
3728 if (cant_pack)
3729 TYPE_PACKED (t) = 0;
3730
3731 /* Check anonymous struct/anonymous union fields. */
3732 finish_struct_anon (t);
3733
3734 /* We've built up the list of access declarations in reverse order.
3735 Fix that now. */
3736 *access_decls = nreverse (*access_decls);
3737 }
3738
3739 /* If TYPE is an empty class type, records its OFFSET in the table of
3740 OFFSETS. */
3741
3742 static int
3743 record_subobject_offset (tree type, tree offset, splay_tree offsets)
3744 {
3745 splay_tree_node n;
3746
3747 if (!is_empty_class (type))
3748 return 0;
3749
3750 /* Record the location of this empty object in OFFSETS. */
3751 n = splay_tree_lookup (offsets, (splay_tree_key) offset);
3752 if (!n)
3753 n = splay_tree_insert (offsets,
3754 (splay_tree_key) offset,
3755 (splay_tree_value) NULL_TREE);
3756 n->value = ((splay_tree_value)
3757 tree_cons (NULL_TREE,
3758 type,
3759 (tree) n->value));
3760
3761 return 0;
3762 }
3763
3764 /* Returns nonzero if TYPE is an empty class type and there is
3765 already an entry in OFFSETS for the same TYPE as the same OFFSET. */
3766
3767 static int
3768 check_subobject_offset (tree type, tree offset, splay_tree offsets)
3769 {
3770 splay_tree_node n;
3771 tree t;
3772
3773 if (!is_empty_class (type))
3774 return 0;
3775
3776 /* Record the location of this empty object in OFFSETS. */
3777 n = splay_tree_lookup (offsets, (splay_tree_key) offset);
3778 if (!n)
3779 return 0;
3780
3781 for (t = (tree) n->value; t; t = TREE_CHAIN (t))
3782 if (same_type_p (TREE_VALUE (t), type))
3783 return 1;
3784
3785 return 0;
3786 }
3787
3788 /* Walk through all the subobjects of TYPE (located at OFFSET). Call
3789 F for every subobject, passing it the type, offset, and table of
3790 OFFSETS. If VBASES_P is one, then virtual non-primary bases should
3791 be traversed.
3792
3793 If MAX_OFFSET is non-NULL, then subobjects with an offset greater
3794 than MAX_OFFSET will not be walked.
3795
3796 If F returns a nonzero value, the traversal ceases, and that value
3797 is returned. Otherwise, returns zero. */
3798
3799 static int
3800 walk_subobject_offsets (tree type,
3801 subobject_offset_fn f,
3802 tree offset,
3803 splay_tree offsets,
3804 tree max_offset,
3805 int vbases_p)
3806 {
3807 int r = 0;
3808 tree type_binfo = NULL_TREE;
3809
3810 /* If this OFFSET is bigger than the MAX_OFFSET, then we should
3811 stop. */
3812 if (max_offset && tree_int_cst_lt (max_offset, offset))
3813 return 0;
3814
3815 if (type == error_mark_node)
3816 return 0;
3817
3818 if (!TYPE_P (type))
3819 {
3820 if (abi_version_at_least (2))
3821 type_binfo = type;
3822 type = BINFO_TYPE (type);
3823 }
3824
3825 if (CLASS_TYPE_P (type))
3826 {
3827 tree field;
3828 tree binfo;
3829 int i;
3830
3831 /* Avoid recursing into objects that are not interesting. */
3832 if (!CLASSTYPE_CONTAINS_EMPTY_CLASS_P (type))
3833 return 0;
3834
3835 /* Record the location of TYPE. */
3836 r = (*f) (type, offset, offsets);
3837 if (r)
3838 return r;
3839
3840 /* Iterate through the direct base classes of TYPE. */
3841 if (!type_binfo)
3842 type_binfo = TYPE_BINFO (type);
3843 for (i = 0; BINFO_BASE_ITERATE (type_binfo, i, binfo); i++)
3844 {
3845 tree binfo_offset;
3846
3847 if (abi_version_at_least (2)
3848 && BINFO_VIRTUAL_P (binfo))
3849 continue;
3850
3851 if (!vbases_p
3852 && BINFO_VIRTUAL_P (binfo)
3853 && !BINFO_PRIMARY_P (binfo))
3854 continue;
3855
3856 if (!abi_version_at_least (2))
3857 binfo_offset = size_binop (PLUS_EXPR,
3858 offset,
3859 BINFO_OFFSET (binfo));
3860 else
3861 {
3862 tree orig_binfo;
3863 /* We cannot rely on BINFO_OFFSET being set for the base
3864 class yet, but the offsets for direct non-virtual
3865 bases can be calculated by going back to the TYPE. */
3866 orig_binfo = BINFO_BASE_BINFO (TYPE_BINFO (type), i);
3867 binfo_offset = size_binop (PLUS_EXPR,
3868 offset,
3869 BINFO_OFFSET (orig_binfo));
3870 }
3871
3872 r = walk_subobject_offsets (binfo,
3873 f,
3874 binfo_offset,
3875 offsets,
3876 max_offset,
3877 (abi_version_at_least (2)
3878 ? /*vbases_p=*/0 : vbases_p));
3879 if (r)
3880 return r;
3881 }
3882
3883 if (abi_version_at_least (2) && CLASSTYPE_VBASECLASSES (type))
3884 {
3885 unsigned ix;
3886 vec<tree, va_gc> *vbases;
3887
3888 /* Iterate through the virtual base classes of TYPE. In G++
3889 3.2, we included virtual bases in the direct base class
3890 loop above, which results in incorrect results; the
3891 correct offsets for virtual bases are only known when
3892 working with the most derived type. */
3893 if (vbases_p)
3894 for (vbases = CLASSTYPE_VBASECLASSES (type), ix = 0;
3895 vec_safe_iterate (vbases, ix, &binfo); ix++)
3896 {
3897 r = walk_subobject_offsets (binfo,
3898 f,
3899 size_binop (PLUS_EXPR,
3900 offset,
3901 BINFO_OFFSET (binfo)),
3902 offsets,
3903 max_offset,
3904 /*vbases_p=*/0);
3905 if (r)
3906 return r;
3907 }
3908 else
3909 {
3910 /* We still have to walk the primary base, if it is
3911 virtual. (If it is non-virtual, then it was walked
3912 above.) */
3913 tree vbase = get_primary_binfo (type_binfo);
3914
3915 if (vbase && BINFO_VIRTUAL_P (vbase)
3916 && BINFO_PRIMARY_P (vbase)
3917 && BINFO_INHERITANCE_CHAIN (vbase) == type_binfo)
3918 {
3919 r = (walk_subobject_offsets
3920 (vbase, f, offset,
3921 offsets, max_offset, /*vbases_p=*/0));
3922 if (r)
3923 return r;
3924 }
3925 }
3926 }
3927
3928 /* Iterate through the fields of TYPE. */
3929 for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
3930 if (TREE_CODE (field) == FIELD_DECL
3931 && TREE_TYPE (field) != error_mark_node
3932 && !DECL_ARTIFICIAL (field))
3933 {
3934 tree field_offset;
3935
3936 if (abi_version_at_least (2))
3937 field_offset = byte_position (field);
3938 else
3939 /* In G++ 3.2, DECL_FIELD_OFFSET was used. */
3940 field_offset = DECL_FIELD_OFFSET (field);
3941
3942 r = walk_subobject_offsets (TREE_TYPE (field),
3943 f,
3944 size_binop (PLUS_EXPR,
3945 offset,
3946 field_offset),
3947 offsets,
3948 max_offset,
3949 /*vbases_p=*/1);
3950 if (r)
3951 return r;
3952 }
3953 }
3954 else if (TREE_CODE (type) == ARRAY_TYPE)
3955 {
3956 tree element_type = strip_array_types (type);
3957 tree domain = TYPE_DOMAIN (type);
3958 tree index;
3959
3960 /* Avoid recursing into objects that are not interesting. */
3961 if (!CLASS_TYPE_P (element_type)
3962 || !CLASSTYPE_CONTAINS_EMPTY_CLASS_P (element_type))
3963 return 0;
3964
3965 /* Step through each of the elements in the array. */
3966 for (index = size_zero_node;
3967 /* G++ 3.2 had an off-by-one error here. */
3968 (abi_version_at_least (2)
3969 ? !tree_int_cst_lt (TYPE_MAX_VALUE (domain), index)
3970 : tree_int_cst_lt (index, TYPE_MAX_VALUE (domain)));
3971 index = size_binop (PLUS_EXPR, index, size_one_node))
3972 {
3973 r = walk_subobject_offsets (TREE_TYPE (type),
3974 f,
3975 offset,
3976 offsets,
3977 max_offset,
3978 /*vbases_p=*/1);
3979 if (r)
3980 return r;
3981 offset = size_binop (PLUS_EXPR, offset,
3982 TYPE_SIZE_UNIT (TREE_TYPE (type)));
3983 /* If this new OFFSET is bigger than the MAX_OFFSET, then
3984 there's no point in iterating through the remaining
3985 elements of the array. */
3986 if (max_offset && tree_int_cst_lt (max_offset, offset))
3987 break;
3988 }
3989 }
3990
3991 return 0;
3992 }
3993
3994 /* Record all of the empty subobjects of TYPE (either a type or a
3995 binfo). If IS_DATA_MEMBER is true, then a non-static data member
3996 is being placed at OFFSET; otherwise, it is a base class that is
3997 being placed at OFFSET. */
3998
3999 static void
4000 record_subobject_offsets (tree type,
4001 tree offset,
4002 splay_tree offsets,
4003 bool is_data_member)
4004 {
4005 tree max_offset;
4006 /* If recording subobjects for a non-static data member or a
4007 non-empty base class , we do not need to record offsets beyond
4008 the size of the biggest empty class. Additional data members
4009 will go at the end of the class. Additional base classes will go
4010 either at offset zero (if empty, in which case they cannot
4011 overlap with offsets past the size of the biggest empty class) or
4012 at the end of the class.
4013
4014 However, if we are placing an empty base class, then we must record
4015 all offsets, as either the empty class is at offset zero (where
4016 other empty classes might later be placed) or at the end of the
4017 class (where other objects might then be placed, so other empty
4018 subobjects might later overlap). */
4019 if (is_data_member
4020 || !is_empty_class (BINFO_TYPE (type)))
4021 max_offset = sizeof_biggest_empty_class;
4022 else
4023 max_offset = NULL_TREE;
4024 walk_subobject_offsets (type, record_subobject_offset, offset,
4025 offsets, max_offset, is_data_member);
4026 }
4027
4028 /* Returns nonzero if any of the empty subobjects of TYPE (located at
4029 OFFSET) conflict with entries in OFFSETS. If VBASES_P is nonzero,
4030 virtual bases of TYPE are examined. */
4031
4032 static int
4033 layout_conflict_p (tree type,
4034 tree offset,
4035 splay_tree offsets,
4036 int vbases_p)
4037 {
4038 splay_tree_node max_node;
4039
4040 /* Get the node in OFFSETS that indicates the maximum offset where
4041 an empty subobject is located. */
4042 max_node = splay_tree_max (offsets);
4043 /* If there aren't any empty subobjects, then there's no point in
4044 performing this check. */
4045 if (!max_node)
4046 return 0;
4047
4048 return walk_subobject_offsets (type, check_subobject_offset, offset,
4049 offsets, (tree) (max_node->key),
4050 vbases_p);
4051 }
4052
4053 /* DECL is a FIELD_DECL corresponding either to a base subobject of a
4054 non-static data member of the type indicated by RLI. BINFO is the
4055 binfo corresponding to the base subobject, OFFSETS maps offsets to
4056 types already located at those offsets. This function determines
4057 the position of the DECL. */
4058
4059 static void
4060 layout_nonempty_base_or_field (record_layout_info rli,
4061 tree decl,
4062 tree binfo,
4063 splay_tree offsets)
4064 {
4065 tree offset = NULL_TREE;
4066 bool field_p;
4067 tree type;
4068
4069 if (binfo)
4070 {
4071 /* For the purposes of determining layout conflicts, we want to
4072 use the class type of BINFO; TREE_TYPE (DECL) will be the
4073 CLASSTYPE_AS_BASE version, which does not contain entries for
4074 zero-sized bases. */
4075 type = TREE_TYPE (binfo);
4076 field_p = false;
4077 }
4078 else
4079 {
4080 type = TREE_TYPE (decl);
4081 field_p = true;
4082 }
4083
4084 /* Try to place the field. It may take more than one try if we have
4085 a hard time placing the field without putting two objects of the
4086 same type at the same address. */
4087 while (1)
4088 {
4089 struct record_layout_info_s old_rli = *rli;
4090
4091 /* Place this field. */
4092 place_field (rli, decl);
4093 offset = byte_position (decl);
4094
4095 /* We have to check to see whether or not there is already
4096 something of the same type at the offset we're about to use.
4097 For example, consider:
4098
4099 struct S {};
4100 struct T : public S { int i; };
4101 struct U : public S, public T {};
4102
4103 Here, we put S at offset zero in U. Then, we can't put T at
4104 offset zero -- its S component would be at the same address
4105 as the S we already allocated. So, we have to skip ahead.
4106 Since all data members, including those whose type is an
4107 empty class, have nonzero size, any overlap can happen only
4108 with a direct or indirect base-class -- it can't happen with
4109 a data member. */
4110 /* In a union, overlap is permitted; all members are placed at
4111 offset zero. */
4112 if (TREE_CODE (rli->t) == UNION_TYPE)
4113 break;
4114 /* G++ 3.2 did not check for overlaps when placing a non-empty
4115 virtual base. */
4116 if (!abi_version_at_least (2) && binfo && BINFO_VIRTUAL_P (binfo))
4117 break;
4118 if (layout_conflict_p (field_p ? type : binfo, offset,
4119 offsets, field_p))
4120 {
4121 /* Strip off the size allocated to this field. That puts us
4122 at the first place we could have put the field with
4123 proper alignment. */
4124 *rli = old_rli;
4125
4126 /* Bump up by the alignment required for the type. */
4127 rli->bitpos
4128 = size_binop (PLUS_EXPR, rli->bitpos,
4129 bitsize_int (binfo
4130 ? CLASSTYPE_ALIGN (type)
4131 : TYPE_ALIGN (type)));
4132 normalize_rli (rli);
4133 }
4134 else
4135 /* There was no conflict. We're done laying out this field. */
4136 break;
4137 }
4138
4139 /* Now that we know where it will be placed, update its
4140 BINFO_OFFSET. */
4141 if (binfo && CLASS_TYPE_P (BINFO_TYPE (binfo)))
4142 /* Indirect virtual bases may have a nonzero BINFO_OFFSET at
4143 this point because their BINFO_OFFSET is copied from another
4144 hierarchy. Therefore, we may not need to add the entire
4145 OFFSET. */
4146 propagate_binfo_offsets (binfo,
4147 size_diffop_loc (input_location,
4148 convert (ssizetype, offset),
4149 convert (ssizetype,
4150 BINFO_OFFSET (binfo))));
4151 }
4152
4153 /* Returns true if TYPE is empty and OFFSET is nonzero. */
4154
4155 static int
4156 empty_base_at_nonzero_offset_p (tree type,
4157 tree offset,
4158 splay_tree /*offsets*/)
4159 {
4160 return is_empty_class (type) && !integer_zerop (offset);
4161 }
4162
4163 /* Layout the empty base BINFO. EOC indicates the byte currently just
4164 past the end of the class, and should be correctly aligned for a
4165 class of the type indicated by BINFO; OFFSETS gives the offsets of
4166 the empty bases allocated so far. T is the most derived
4167 type. Return nonzero iff we added it at the end. */
4168
4169 static bool
4170 layout_empty_base (record_layout_info rli, tree binfo,
4171 tree eoc, splay_tree offsets)
4172 {
4173 tree alignment;
4174 tree basetype = BINFO_TYPE (binfo);
4175 bool atend = false;
4176
4177 /* This routine should only be used for empty classes. */
4178 gcc_assert (is_empty_class (basetype));
4179 alignment = ssize_int (CLASSTYPE_ALIGN_UNIT (basetype));
4180
4181 if (!integer_zerop (BINFO_OFFSET (binfo)))
4182 {
4183 if (abi_version_at_least (2))
4184 propagate_binfo_offsets
4185 (binfo, size_diffop_loc (input_location,
4186 size_zero_node, BINFO_OFFSET (binfo)));
4187 else
4188 warning (OPT_Wabi,
4189 "offset of empty base %qT may not be ABI-compliant and may"
4190 "change in a future version of GCC",
4191 BINFO_TYPE (binfo));
4192 }
4193
4194 /* This is an empty base class. We first try to put it at offset
4195 zero. */
4196 if (layout_conflict_p (binfo,
4197 BINFO_OFFSET (binfo),
4198 offsets,
4199 /*vbases_p=*/0))
4200 {
4201 /* That didn't work. Now, we move forward from the next
4202 available spot in the class. */
4203 atend = true;
4204 propagate_binfo_offsets (binfo, convert (ssizetype, eoc));
4205 while (1)
4206 {
4207 if (!layout_conflict_p (binfo,
4208 BINFO_OFFSET (binfo),
4209 offsets,
4210 /*vbases_p=*/0))
4211 /* We finally found a spot where there's no overlap. */
4212 break;
4213
4214 /* There's overlap here, too. Bump along to the next spot. */
4215 propagate_binfo_offsets (binfo, alignment);
4216 }
4217 }
4218
4219 if (CLASSTYPE_USER_ALIGN (basetype))
4220 {
4221 rli->record_align = MAX (rli->record_align, CLASSTYPE_ALIGN (basetype));
4222 if (warn_packed)
4223 rli->unpacked_align = MAX (rli->unpacked_align, CLASSTYPE_ALIGN (basetype));
4224 TYPE_USER_ALIGN (rli->t) = 1;
4225 }
4226
4227 return atend;
4228 }
4229
4230 /* Layout the base given by BINFO in the class indicated by RLI.
4231 *BASE_ALIGN is a running maximum of the alignments of
4232 any base class. OFFSETS gives the location of empty base
4233 subobjects. T is the most derived type. Return nonzero if the new
4234 object cannot be nearly-empty. A new FIELD_DECL is inserted at
4235 *NEXT_FIELD, unless BINFO is for an empty base class.
4236
4237 Returns the location at which the next field should be inserted. */
4238
4239 static tree *
4240 build_base_field (record_layout_info rli, tree binfo,
4241 splay_tree offsets, tree *next_field)
4242 {
4243 tree t = rli->t;
4244 tree basetype = BINFO_TYPE (binfo);
4245
4246 if (!COMPLETE_TYPE_P (basetype))
4247 /* This error is now reported in xref_tag, thus giving better
4248 location information. */
4249 return next_field;
4250
4251 /* Place the base class. */
4252 if (!is_empty_class (basetype))
4253 {
4254 tree decl;
4255
4256 /* The containing class is non-empty because it has a non-empty
4257 base class. */
4258 CLASSTYPE_EMPTY_P (t) = 0;
4259
4260 /* Create the FIELD_DECL. */
4261 decl = build_decl (input_location,
4262 FIELD_DECL, NULL_TREE, CLASSTYPE_AS_BASE (basetype));
4263 DECL_ARTIFICIAL (decl) = 1;
4264 DECL_IGNORED_P (decl) = 1;
4265 DECL_FIELD_CONTEXT (decl) = t;
4266 if (CLASSTYPE_AS_BASE (basetype))
4267 {
4268 DECL_SIZE (decl) = CLASSTYPE_SIZE (basetype);
4269 DECL_SIZE_UNIT (decl) = CLASSTYPE_SIZE_UNIT (basetype);
4270 DECL_ALIGN (decl) = CLASSTYPE_ALIGN (basetype);
4271 DECL_USER_ALIGN (decl) = CLASSTYPE_USER_ALIGN (basetype);
4272 DECL_MODE (decl) = TYPE_MODE (basetype);
4273 DECL_FIELD_IS_BASE (decl) = 1;
4274
4275 /* Try to place the field. It may take more than one try if we
4276 have a hard time placing the field without putting two
4277 objects of the same type at the same address. */
4278 layout_nonempty_base_or_field (rli, decl, binfo, offsets);
4279 /* Add the new FIELD_DECL to the list of fields for T. */
4280 DECL_CHAIN (decl) = *next_field;
4281 *next_field = decl;
4282 next_field = &DECL_CHAIN (decl);
4283 }
4284 }
4285 else
4286 {
4287 tree eoc;
4288 bool atend;
4289
4290 /* On some platforms (ARM), even empty classes will not be
4291 byte-aligned. */
4292 eoc = round_up_loc (input_location,
4293 rli_size_unit_so_far (rli),
4294 CLASSTYPE_ALIGN_UNIT (basetype));
4295 atend = layout_empty_base (rli, binfo, eoc, offsets);
4296 /* A nearly-empty class "has no proper base class that is empty,
4297 not morally virtual, and at an offset other than zero." */
4298 if (!BINFO_VIRTUAL_P (binfo) && CLASSTYPE_NEARLY_EMPTY_P (t))
4299 {
4300 if (atend)
4301 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
4302 /* The check above (used in G++ 3.2) is insufficient because
4303 an empty class placed at offset zero might itself have an
4304 empty base at a nonzero offset. */
4305 else if (walk_subobject_offsets (basetype,
4306 empty_base_at_nonzero_offset_p,
4307 size_zero_node,
4308 /*offsets=*/NULL,
4309 /*max_offset=*/NULL_TREE,
4310 /*vbases_p=*/true))
4311 {
4312 if (abi_version_at_least (2))
4313 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
4314 else
4315 warning (OPT_Wabi,
4316 "class %qT will be considered nearly empty in a "
4317 "future version of GCC", t);
4318 }
4319 }
4320
4321 /* We do not create a FIELD_DECL for empty base classes because
4322 it might overlap some other field. We want to be able to
4323 create CONSTRUCTORs for the class by iterating over the
4324 FIELD_DECLs, and the back end does not handle overlapping
4325 FIELD_DECLs. */
4326
4327 /* An empty virtual base causes a class to be non-empty
4328 -- but in that case we do not need to clear CLASSTYPE_EMPTY_P
4329 here because that was already done when the virtual table
4330 pointer was created. */
4331 }
4332
4333 /* Record the offsets of BINFO and its base subobjects. */
4334 record_subobject_offsets (binfo,
4335 BINFO_OFFSET (binfo),
4336 offsets,
4337 /*is_data_member=*/false);
4338
4339 return next_field;
4340 }
4341
4342 /* Layout all of the non-virtual base classes. Record empty
4343 subobjects in OFFSETS. T is the most derived type. Return nonzero
4344 if the type cannot be nearly empty. The fields created
4345 corresponding to the base classes will be inserted at
4346 *NEXT_FIELD. */
4347
4348 static void
4349 build_base_fields (record_layout_info rli,
4350 splay_tree offsets, tree *next_field)
4351 {
4352 /* Chain to hold all the new FIELD_DECLs which stand in for base class
4353 subobjects. */
4354 tree t = rli->t;
4355 int n_baseclasses = BINFO_N_BASE_BINFOS (TYPE_BINFO (t));
4356 int i;
4357
4358 /* The primary base class is always allocated first. */
4359 if (CLASSTYPE_HAS_PRIMARY_BASE_P (t))
4360 next_field = build_base_field (rli, CLASSTYPE_PRIMARY_BINFO (t),
4361 offsets, next_field);
4362
4363 /* Now allocate the rest of the bases. */
4364 for (i = 0; i < n_baseclasses; ++i)
4365 {
4366 tree base_binfo;
4367
4368 base_binfo = BINFO_BASE_BINFO (TYPE_BINFO (t), i);
4369
4370 /* The primary base was already allocated above, so we don't
4371 need to allocate it again here. */
4372 if (base_binfo == CLASSTYPE_PRIMARY_BINFO (t))
4373 continue;
4374
4375 /* Virtual bases are added at the end (a primary virtual base
4376 will have already been added). */
4377 if (BINFO_VIRTUAL_P (base_binfo))
4378 continue;
4379
4380 next_field = build_base_field (rli, base_binfo,
4381 offsets, next_field);
4382 }
4383 }
4384
4385 /* Go through the TYPE_METHODS of T issuing any appropriate
4386 diagnostics, figuring out which methods override which other
4387 methods, and so forth. */
4388
4389 static void
4390 check_methods (tree t)
4391 {
4392 tree x;
4393
4394 for (x = TYPE_METHODS (t); x; x = DECL_CHAIN (x))
4395 {
4396 check_for_override (x, t);
4397 if (DECL_PURE_VIRTUAL_P (x) && ! DECL_VINDEX (x))
4398 error ("initializer specified for non-virtual method %q+D", x);
4399 /* The name of the field is the original field name
4400 Save this in auxiliary field for later overloading. */
4401 if (DECL_VINDEX (x))
4402 {
4403 TYPE_POLYMORPHIC_P (t) = 1;
4404 if (DECL_PURE_VIRTUAL_P (x))
4405 vec_safe_push (CLASSTYPE_PURE_VIRTUALS (t), x);
4406 }
4407 /* All user-provided destructors are non-trivial.
4408 Constructors and assignment ops are handled in
4409 grok_special_member_properties. */
4410 if (DECL_DESTRUCTOR_P (x) && user_provided_p (x))
4411 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t) = 1;
4412 }
4413 }
4414
4415 /* FN is a constructor or destructor. Clone the declaration to create
4416 a specialized in-charge or not-in-charge version, as indicated by
4417 NAME. */
4418
4419 static tree
4420 build_clone (tree fn, tree name)
4421 {
4422 tree parms;
4423 tree clone;
4424
4425 /* Copy the function. */
4426 clone = copy_decl (fn);
4427 /* Reset the function name. */
4428 DECL_NAME (clone) = name;
4429 SET_DECL_ASSEMBLER_NAME (clone, NULL_TREE);
4430 /* Remember where this function came from. */
4431 DECL_ABSTRACT_ORIGIN (clone) = fn;
4432 /* Make it easy to find the CLONE given the FN. */
4433 DECL_CHAIN (clone) = DECL_CHAIN (fn);
4434 DECL_CHAIN (fn) = clone;
4435
4436 /* If this is a template, do the rest on the DECL_TEMPLATE_RESULT. */
4437 if (TREE_CODE (clone) == TEMPLATE_DECL)
4438 {
4439 tree result = build_clone (DECL_TEMPLATE_RESULT (clone), name);
4440 DECL_TEMPLATE_RESULT (clone) = result;
4441 DECL_TEMPLATE_INFO (result) = copy_node (DECL_TEMPLATE_INFO (result));
4442 DECL_TI_TEMPLATE (result) = clone;
4443 TREE_TYPE (clone) = TREE_TYPE (result);
4444 return clone;
4445 }
4446
4447 DECL_CLONED_FUNCTION (clone) = fn;
4448 /* There's no pending inline data for this function. */
4449 DECL_PENDING_INLINE_INFO (clone) = NULL;
4450 DECL_PENDING_INLINE_P (clone) = 0;
4451
4452 /* The base-class destructor is not virtual. */
4453 if (name == base_dtor_identifier)
4454 {
4455 DECL_VIRTUAL_P (clone) = 0;
4456 if (TREE_CODE (clone) != TEMPLATE_DECL)
4457 DECL_VINDEX (clone) = NULL_TREE;
4458 }
4459
4460 /* If there was an in-charge parameter, drop it from the function
4461 type. */
4462 if (DECL_HAS_IN_CHARGE_PARM_P (clone))
4463 {
4464 tree basetype;
4465 tree parmtypes;
4466 tree exceptions;
4467
4468 exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (clone));
4469 basetype = TYPE_METHOD_BASETYPE (TREE_TYPE (clone));
4470 parmtypes = TYPE_ARG_TYPES (TREE_TYPE (clone));
4471 /* Skip the `this' parameter. */
4472 parmtypes = TREE_CHAIN (parmtypes);
4473 /* Skip the in-charge parameter. */
4474 parmtypes = TREE_CHAIN (parmtypes);
4475 /* And the VTT parm, in a complete [cd]tor. */
4476 if (DECL_HAS_VTT_PARM_P (fn)
4477 && ! DECL_NEEDS_VTT_PARM_P (clone))
4478 parmtypes = TREE_CHAIN (parmtypes);
4479 /* If this is subobject constructor or destructor, add the vtt
4480 parameter. */
4481 TREE_TYPE (clone)
4482 = build_method_type_directly (basetype,
4483 TREE_TYPE (TREE_TYPE (clone)),
4484 parmtypes);
4485 if (exceptions)
4486 TREE_TYPE (clone) = build_exception_variant (TREE_TYPE (clone),
4487 exceptions);
4488 TREE_TYPE (clone)
4489 = cp_build_type_attribute_variant (TREE_TYPE (clone),
4490 TYPE_ATTRIBUTES (TREE_TYPE (fn)));
4491 }
4492
4493 /* Copy the function parameters. */
4494 DECL_ARGUMENTS (clone) = copy_list (DECL_ARGUMENTS (clone));
4495 /* Remove the in-charge parameter. */
4496 if (DECL_HAS_IN_CHARGE_PARM_P (clone))
4497 {
4498 DECL_CHAIN (DECL_ARGUMENTS (clone))
4499 = DECL_CHAIN (DECL_CHAIN (DECL_ARGUMENTS (clone)));
4500 DECL_HAS_IN_CHARGE_PARM_P (clone) = 0;
4501 }
4502 /* And the VTT parm, in a complete [cd]tor. */
4503 if (DECL_HAS_VTT_PARM_P (fn))
4504 {
4505 if (DECL_NEEDS_VTT_PARM_P (clone))
4506 DECL_HAS_VTT_PARM_P (clone) = 1;
4507 else
4508 {
4509 DECL_CHAIN (DECL_ARGUMENTS (clone))
4510 = DECL_CHAIN (DECL_CHAIN (DECL_ARGUMENTS (clone)));
4511 DECL_HAS_VTT_PARM_P (clone) = 0;
4512 }
4513 }
4514
4515 for (parms = DECL_ARGUMENTS (clone); parms; parms = DECL_CHAIN (parms))
4516 {
4517 DECL_CONTEXT (parms) = clone;
4518 cxx_dup_lang_specific_decl (parms);
4519 }
4520
4521 /* Create the RTL for this function. */
4522 SET_DECL_RTL (clone, NULL);
4523 rest_of_decl_compilation (clone, /*top_level=*/1, at_eof);
4524
4525 if (pch_file)
4526 note_decl_for_pch (clone);
4527
4528 return clone;
4529 }
4530
4531 /* Implementation of DECL_CLONED_FUNCTION and DECL_CLONED_FUNCTION_P, do
4532 not invoke this function directly.
4533
4534 For a non-thunk function, returns the address of the slot for storing
4535 the function it is a clone of. Otherwise returns NULL_TREE.
4536
4537 If JUST_TESTING, looks through TEMPLATE_DECL and returns NULL if
4538 cloned_function is unset. This is to support the separate
4539 DECL_CLONED_FUNCTION and DECL_CLONED_FUNCTION_P modes; using the latter
4540 on a template makes sense, but not the former. */
4541
4542 tree *
4543 decl_cloned_function_p (const_tree decl, bool just_testing)
4544 {
4545 tree *ptr;
4546 if (just_testing)
4547 decl = STRIP_TEMPLATE (decl);
4548
4549 if (TREE_CODE (decl) != FUNCTION_DECL
4550 || !DECL_LANG_SPECIFIC (decl)
4551 || DECL_LANG_SPECIFIC (decl)->u.fn.thunk_p)
4552 {
4553 #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
4554 if (!just_testing)
4555 lang_check_failed (__FILE__, __LINE__, __FUNCTION__);
4556 else
4557 #endif
4558 return NULL;
4559 }
4560
4561 ptr = &DECL_LANG_SPECIFIC (decl)->u.fn.u5.cloned_function;
4562 if (just_testing && *ptr == NULL_TREE)
4563 return NULL;
4564 else
4565 return ptr;
4566 }
4567
4568 /* Produce declarations for all appropriate clones of FN. If
4569 UPDATE_METHOD_VEC_P is nonzero, the clones are added to the
4570 CLASTYPE_METHOD_VEC as well. */
4571
4572 void
4573 clone_function_decl (tree fn, int update_method_vec_p)
4574 {
4575 tree clone;
4576
4577 /* Avoid inappropriate cloning. */
4578 if (DECL_CHAIN (fn)
4579 && DECL_CLONED_FUNCTION_P (DECL_CHAIN (fn)))
4580 return;
4581
4582 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (fn))
4583 {
4584 /* For each constructor, we need two variants: an in-charge version
4585 and a not-in-charge version. */
4586 clone = build_clone (fn, complete_ctor_identifier);
4587 if (update_method_vec_p)
4588 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
4589 clone = build_clone (fn, base_ctor_identifier);
4590 if (update_method_vec_p)
4591 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
4592 }
4593 else
4594 {
4595 gcc_assert (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (fn));
4596
4597 /* For each destructor, we need three variants: an in-charge
4598 version, a not-in-charge version, and an in-charge deleting
4599 version. We clone the deleting version first because that
4600 means it will go second on the TYPE_METHODS list -- and that
4601 corresponds to the correct layout order in the virtual
4602 function table.
4603
4604 For a non-virtual destructor, we do not build a deleting
4605 destructor. */
4606 if (DECL_VIRTUAL_P (fn))
4607 {
4608 clone = build_clone (fn, deleting_dtor_identifier);
4609 if (update_method_vec_p)
4610 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
4611 }
4612 clone = build_clone (fn, complete_dtor_identifier);
4613 if (update_method_vec_p)
4614 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
4615 clone = build_clone (fn, base_dtor_identifier);
4616 if (update_method_vec_p)
4617 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
4618 }
4619
4620 /* Note that this is an abstract function that is never emitted. */
4621 DECL_ABSTRACT (fn) = 1;
4622 }
4623
4624 /* DECL is an in charge constructor, which is being defined. This will
4625 have had an in class declaration, from whence clones were
4626 declared. An out-of-class definition can specify additional default
4627 arguments. As it is the clones that are involved in overload
4628 resolution, we must propagate the information from the DECL to its
4629 clones. */
4630
4631 void
4632 adjust_clone_args (tree decl)
4633 {
4634 tree clone;
4635
4636 for (clone = DECL_CHAIN (decl); clone && DECL_CLONED_FUNCTION_P (clone);
4637 clone = DECL_CHAIN (clone))
4638 {
4639 tree orig_clone_parms = TYPE_ARG_TYPES (TREE_TYPE (clone));
4640 tree orig_decl_parms = TYPE_ARG_TYPES (TREE_TYPE (decl));
4641 tree decl_parms, clone_parms;
4642
4643 clone_parms = orig_clone_parms;
4644
4645 /* Skip the 'this' parameter. */
4646 orig_clone_parms = TREE_CHAIN (orig_clone_parms);
4647 orig_decl_parms = TREE_CHAIN (orig_decl_parms);
4648
4649 if (DECL_HAS_IN_CHARGE_PARM_P (decl))
4650 orig_decl_parms = TREE_CHAIN (orig_decl_parms);
4651 if (DECL_HAS_VTT_PARM_P (decl))
4652 orig_decl_parms = TREE_CHAIN (orig_decl_parms);
4653
4654 clone_parms = orig_clone_parms;
4655 if (DECL_HAS_VTT_PARM_P (clone))
4656 clone_parms = TREE_CHAIN (clone_parms);
4657
4658 for (decl_parms = orig_decl_parms; decl_parms;
4659 decl_parms = TREE_CHAIN (decl_parms),
4660 clone_parms = TREE_CHAIN (clone_parms))
4661 {
4662 gcc_assert (same_type_p (TREE_TYPE (decl_parms),
4663 TREE_TYPE (clone_parms)));
4664
4665 if (TREE_PURPOSE (decl_parms) && !TREE_PURPOSE (clone_parms))
4666 {
4667 /* A default parameter has been added. Adjust the
4668 clone's parameters. */
4669 tree exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (clone));
4670 tree attrs = TYPE_ATTRIBUTES (TREE_TYPE (clone));
4671 tree basetype = TYPE_METHOD_BASETYPE (TREE_TYPE (clone));
4672 tree type;
4673
4674 clone_parms = orig_decl_parms;
4675
4676 if (DECL_HAS_VTT_PARM_P (clone))
4677 {
4678 clone_parms = tree_cons (TREE_PURPOSE (orig_clone_parms),
4679 TREE_VALUE (orig_clone_parms),
4680 clone_parms);
4681 TREE_TYPE (clone_parms) = TREE_TYPE (orig_clone_parms);
4682 }
4683 type = build_method_type_directly (basetype,
4684 TREE_TYPE (TREE_TYPE (clone)),
4685 clone_parms);
4686 if (exceptions)
4687 type = build_exception_variant (type, exceptions);
4688 if (attrs)
4689 type = cp_build_type_attribute_variant (type, attrs);
4690 TREE_TYPE (clone) = type;
4691
4692 clone_parms = NULL_TREE;
4693 break;
4694 }
4695 }
4696 gcc_assert (!clone_parms);
4697 }
4698 }
4699
4700 /* For each of the constructors and destructors in T, create an
4701 in-charge and not-in-charge variant. */
4702
4703 static void
4704 clone_constructors_and_destructors (tree t)
4705 {
4706 tree fns;
4707
4708 /* If for some reason we don't have a CLASSTYPE_METHOD_VEC, we bail
4709 out now. */
4710 if (!CLASSTYPE_METHOD_VEC (t))
4711 return;
4712
4713 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
4714 clone_function_decl (OVL_CURRENT (fns), /*update_method_vec_p=*/1);
4715 for (fns = CLASSTYPE_DESTRUCTORS (t); fns; fns = OVL_NEXT (fns))
4716 clone_function_decl (OVL_CURRENT (fns), /*update_method_vec_p=*/1);
4717 }
4718
4719 /* Deduce noexcept for a destructor DTOR. */
4720
4721 void
4722 deduce_noexcept_on_destructor (tree dtor)
4723 {
4724 if (!TYPE_RAISES_EXCEPTIONS (TREE_TYPE (dtor)))
4725 {
4726 tree eh_spec = unevaluated_noexcept_spec ();
4727 TREE_TYPE (dtor) = build_exception_variant (TREE_TYPE (dtor), eh_spec);
4728 }
4729 }
4730
4731 /* For each destructor in T, deduce noexcept:
4732
4733 12.4/3: A declaration of a destructor that does not have an
4734 exception-specification is implicitly considered to have the
4735 same exception-specification as an implicit declaration (15.4). */
4736
4737 static void
4738 deduce_noexcept_on_destructors (tree t)
4739 {
4740 /* If for some reason we don't have a CLASSTYPE_METHOD_VEC, we bail
4741 out now. */
4742 if (!CLASSTYPE_METHOD_VEC (t))
4743 return;
4744
4745 for (tree fns = CLASSTYPE_DESTRUCTORS (t); fns; fns = OVL_NEXT (fns))
4746 deduce_noexcept_on_destructor (OVL_CURRENT (fns));
4747 }
4748
4749 /* Subroutine of set_one_vmethod_tm_attributes. Search base classes
4750 of TYPE for virtual functions which FNDECL overrides. Return a
4751 mask of the tm attributes found therein. */
4752
4753 static int
4754 look_for_tm_attr_overrides (tree type, tree fndecl)
4755 {
4756 tree binfo = TYPE_BINFO (type);
4757 tree base_binfo;
4758 int ix, found = 0;
4759
4760 for (ix = 0; BINFO_BASE_ITERATE (binfo, ix, base_binfo); ++ix)
4761 {
4762 tree o, basetype = BINFO_TYPE (base_binfo);
4763
4764 if (!TYPE_POLYMORPHIC_P (basetype))
4765 continue;
4766
4767 o = look_for_overrides_here (basetype, fndecl);
4768 if (o)
4769 found |= tm_attr_to_mask (find_tm_attribute
4770 (TYPE_ATTRIBUTES (TREE_TYPE (o))));
4771 else
4772 found |= look_for_tm_attr_overrides (basetype, fndecl);
4773 }
4774
4775 return found;
4776 }
4777
4778 /* Subroutine of set_method_tm_attributes. Handle the checks and
4779 inheritance for one virtual method FNDECL. */
4780
4781 static void
4782 set_one_vmethod_tm_attributes (tree type, tree fndecl)
4783 {
4784 tree tm_attr;
4785 int found, have;
4786
4787 found = look_for_tm_attr_overrides (type, fndecl);
4788
4789 /* If FNDECL doesn't actually override anything (i.e. T is the
4790 class that first declares FNDECL virtual), then we're done. */
4791 if (found == 0)
4792 return;
4793
4794 tm_attr = find_tm_attribute (TYPE_ATTRIBUTES (TREE_TYPE (fndecl)));
4795 have = tm_attr_to_mask (tm_attr);
4796
4797 /* Intel STM Language Extension 3.0, Section 4.2 table 4:
4798 tm_pure must match exactly, otherwise no weakening of
4799 tm_safe > tm_callable > nothing. */
4800 /* ??? The tm_pure attribute didn't make the transition to the
4801 multivendor language spec. */
4802 if (have == TM_ATTR_PURE)
4803 {
4804 if (found != TM_ATTR_PURE)
4805 {
4806 found &= -found;
4807 goto err_override;
4808 }
4809 }
4810 /* If the overridden function is tm_pure, then FNDECL must be. */
4811 else if (found == TM_ATTR_PURE && tm_attr)
4812 goto err_override;
4813 /* Look for base class combinations that cannot be satisfied. */
4814 else if (found != TM_ATTR_PURE && (found & TM_ATTR_PURE))
4815 {
4816 found &= ~TM_ATTR_PURE;
4817 found &= -found;
4818 error_at (DECL_SOURCE_LOCATION (fndecl),
4819 "method overrides both %<transaction_pure%> and %qE methods",
4820 tm_mask_to_attr (found));
4821 }
4822 /* If FNDECL did not declare an attribute, then inherit the most
4823 restrictive one. */
4824 else if (tm_attr == NULL)
4825 {
4826 apply_tm_attr (fndecl, tm_mask_to_attr (found & -found));
4827 }
4828 /* Otherwise validate that we're not weaker than a function
4829 that is being overridden. */
4830 else
4831 {
4832 found &= -found;
4833 if (found <= TM_ATTR_CALLABLE && have > found)
4834 goto err_override;
4835 }
4836 return;
4837
4838 err_override:
4839 error_at (DECL_SOURCE_LOCATION (fndecl),
4840 "method declared %qE overriding %qE method",
4841 tm_attr, tm_mask_to_attr (found));
4842 }
4843
4844 /* For each of the methods in T, propagate a class-level tm attribute. */
4845
4846 static void
4847 set_method_tm_attributes (tree t)
4848 {
4849 tree class_tm_attr, fndecl;
4850
4851 /* Don't bother collecting tm attributes if transactional memory
4852 support is not enabled. */
4853 if (!flag_tm)
4854 return;
4855
4856 /* Process virtual methods first, as they inherit directly from the
4857 base virtual function and also require validation of new attributes. */
4858 if (TYPE_CONTAINS_VPTR_P (t))
4859 {
4860 tree vchain;
4861 for (vchain = BINFO_VIRTUALS (TYPE_BINFO (t)); vchain;
4862 vchain = TREE_CHAIN (vchain))
4863 {
4864 fndecl = BV_FN (vchain);
4865 if (DECL_THUNK_P (fndecl))
4866 fndecl = THUNK_TARGET (fndecl);
4867 set_one_vmethod_tm_attributes (t, fndecl);
4868 }
4869 }
4870
4871 /* If the class doesn't have an attribute, nothing more to do. */
4872 class_tm_attr = find_tm_attribute (TYPE_ATTRIBUTES (t));
4873 if (class_tm_attr == NULL)
4874 return;
4875
4876 /* Any method that does not yet have a tm attribute inherits
4877 the one from the class. */
4878 for (fndecl = TYPE_METHODS (t); fndecl; fndecl = TREE_CHAIN (fndecl))
4879 {
4880 if (!find_tm_attribute (TYPE_ATTRIBUTES (TREE_TYPE (fndecl))))
4881 apply_tm_attr (fndecl, class_tm_attr);
4882 }
4883 }
4884
4885 /* Returns true iff class T has a user-defined constructor other than
4886 the default constructor. */
4887
4888 bool
4889 type_has_user_nondefault_constructor (tree t)
4890 {
4891 tree fns;
4892
4893 if (!TYPE_HAS_USER_CONSTRUCTOR (t))
4894 return false;
4895
4896 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
4897 {
4898 tree fn = OVL_CURRENT (fns);
4899 if (!DECL_ARTIFICIAL (fn)
4900 && (TREE_CODE (fn) == TEMPLATE_DECL
4901 || (skip_artificial_parms_for (fn, DECL_ARGUMENTS (fn))
4902 != NULL_TREE)))
4903 return true;
4904 }
4905
4906 return false;
4907 }
4908
4909 /* Returns the defaulted constructor if T has one. Otherwise, returns
4910 NULL_TREE. */
4911
4912 tree
4913 in_class_defaulted_default_constructor (tree t)
4914 {
4915 tree fns, args;
4916
4917 if (!TYPE_HAS_USER_CONSTRUCTOR (t))
4918 return NULL_TREE;
4919
4920 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
4921 {
4922 tree fn = OVL_CURRENT (fns);
4923
4924 if (DECL_DEFAULTED_IN_CLASS_P (fn))
4925 {
4926 args = FUNCTION_FIRST_USER_PARMTYPE (fn);
4927 while (args && TREE_PURPOSE (args))
4928 args = TREE_CHAIN (args);
4929 if (!args || args == void_list_node)
4930 return fn;
4931 }
4932 }
4933
4934 return NULL_TREE;
4935 }
4936
4937 /* Returns true iff FN is a user-provided function, i.e. user-declared
4938 and not defaulted at its first declaration; or explicit, private,
4939 protected, or non-const. */
4940
4941 bool
4942 user_provided_p (tree fn)
4943 {
4944 if (TREE_CODE (fn) == TEMPLATE_DECL)
4945 return true;
4946 else
4947 return (!DECL_ARTIFICIAL (fn)
4948 && !(DECL_INITIALIZED_IN_CLASS_P (fn)
4949 && (DECL_DEFAULTED_FN (fn) || DECL_DELETED_FN (fn))));
4950 }
4951
4952 /* Returns true iff class T has a user-provided constructor. */
4953
4954 bool
4955 type_has_user_provided_constructor (tree t)
4956 {
4957 tree fns;
4958
4959 if (!CLASS_TYPE_P (t))
4960 return false;
4961
4962 if (!TYPE_HAS_USER_CONSTRUCTOR (t))
4963 return false;
4964
4965 /* This can happen in error cases; avoid crashing. */
4966 if (!CLASSTYPE_METHOD_VEC (t))
4967 return false;
4968
4969 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
4970 if (user_provided_p (OVL_CURRENT (fns)))
4971 return true;
4972
4973 return false;
4974 }
4975
4976 /* Returns true iff class T has a user-provided default constructor. */
4977
4978 bool
4979 type_has_user_provided_default_constructor (tree t)
4980 {
4981 tree fns;
4982
4983 if (!TYPE_HAS_USER_CONSTRUCTOR (t))
4984 return false;
4985
4986 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
4987 {
4988 tree fn = OVL_CURRENT (fns);
4989 if (TREE_CODE (fn) == FUNCTION_DECL
4990 && user_provided_p (fn)
4991 && sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (fn)))
4992 return true;
4993 }
4994
4995 return false;
4996 }
4997
4998 /* TYPE is being used as a virtual base, and has a non-trivial move
4999 assignment. Return true if this is due to there being a user-provided
5000 move assignment in TYPE or one of its subobjects; if there isn't, then
5001 multiple move assignment can't cause any harm. */
5002
5003 bool
5004 vbase_has_user_provided_move_assign (tree type)
5005 {
5006 /* Does the type itself have a user-provided move assignment operator? */
5007 for (tree fns
5008 = lookup_fnfields_slot_nolazy (type, ansi_assopname (NOP_EXPR));
5009 fns; fns = OVL_NEXT (fns))
5010 {
5011 tree fn = OVL_CURRENT (fns);
5012 if (move_fn_p (fn) && user_provided_p (fn))
5013 return true;
5014 }
5015
5016 /* Do any of its bases? */
5017 tree binfo = TYPE_BINFO (type);
5018 tree base_binfo;
5019 for (int i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
5020 if (vbase_has_user_provided_move_assign (BINFO_TYPE (base_binfo)))
5021 return true;
5022
5023 /* Or non-static data members? */
5024 for (tree field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
5025 {
5026 if (TREE_CODE (field) == FIELD_DECL
5027 && CLASS_TYPE_P (TREE_TYPE (field))
5028 && vbase_has_user_provided_move_assign (TREE_TYPE (field)))
5029 return true;
5030 }
5031
5032 /* Seems not. */
5033 return false;
5034 }
5035
5036 /* If default-initialization leaves part of TYPE uninitialized, returns
5037 a DECL for the field or TYPE itself (DR 253). */
5038
5039 tree
5040 default_init_uninitialized_part (tree type)
5041 {
5042 tree t, r, binfo;
5043 int i;
5044
5045 type = strip_array_types (type);
5046 if (!CLASS_TYPE_P (type))
5047 return type;
5048 if (type_has_user_provided_default_constructor (type))
5049 return NULL_TREE;
5050 for (binfo = TYPE_BINFO (type), i = 0;
5051 BINFO_BASE_ITERATE (binfo, i, t); ++i)
5052 {
5053 r = default_init_uninitialized_part (BINFO_TYPE (t));
5054 if (r)
5055 return r;
5056 }
5057 for (t = TYPE_FIELDS (type); t; t = DECL_CHAIN (t))
5058 if (TREE_CODE (t) == FIELD_DECL
5059 && !DECL_ARTIFICIAL (t)
5060 && !DECL_INITIAL (t))
5061 {
5062 r = default_init_uninitialized_part (TREE_TYPE (t));
5063 if (r)
5064 return DECL_P (r) ? r : t;
5065 }
5066
5067 return NULL_TREE;
5068 }
5069
5070 /* Returns true iff for class T, a trivial synthesized default constructor
5071 would be constexpr. */
5072
5073 bool
5074 trivial_default_constructor_is_constexpr (tree t)
5075 {
5076 /* A defaulted trivial default constructor is constexpr
5077 if there is nothing to initialize. */
5078 gcc_assert (!TYPE_HAS_COMPLEX_DFLT (t));
5079 return is_really_empty_class (t);
5080 }
5081
5082 /* Returns true iff class T has a constexpr default constructor. */
5083
5084 bool
5085 type_has_constexpr_default_constructor (tree t)
5086 {
5087 tree fns;
5088
5089 if (!CLASS_TYPE_P (t))
5090 {
5091 /* The caller should have stripped an enclosing array. */
5092 gcc_assert (TREE_CODE (t) != ARRAY_TYPE);
5093 return false;
5094 }
5095 if (CLASSTYPE_LAZY_DEFAULT_CTOR (t))
5096 {
5097 if (!TYPE_HAS_COMPLEX_DFLT (t))
5098 return trivial_default_constructor_is_constexpr (t);
5099 /* Non-trivial, we need to check subobject constructors. */
5100 lazily_declare_fn (sfk_constructor, t);
5101 }
5102 fns = locate_ctor (t);
5103 return (fns && DECL_DECLARED_CONSTEXPR_P (fns));
5104 }
5105
5106 /* Returns true iff class TYPE has a virtual destructor. */
5107
5108 bool
5109 type_has_virtual_destructor (tree type)
5110 {
5111 tree dtor;
5112
5113 if (!CLASS_TYPE_P (type))
5114 return false;
5115
5116 gcc_assert (COMPLETE_TYPE_P (type));
5117 dtor = CLASSTYPE_DESTRUCTORS (type);
5118 return (dtor && DECL_VIRTUAL_P (dtor));
5119 }
5120
5121 /* Returns true iff class T has a move constructor. */
5122
5123 bool
5124 type_has_move_constructor (tree t)
5125 {
5126 tree fns;
5127
5128 if (CLASSTYPE_LAZY_MOVE_CTOR (t))
5129 {
5130 gcc_assert (COMPLETE_TYPE_P (t));
5131 lazily_declare_fn (sfk_move_constructor, t);
5132 }
5133
5134 if (!CLASSTYPE_METHOD_VEC (t))
5135 return false;
5136
5137 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
5138 if (move_fn_p (OVL_CURRENT (fns)))
5139 return true;
5140
5141 return false;
5142 }
5143
5144 /* Returns true iff class T has a move assignment operator. */
5145
5146 bool
5147 type_has_move_assign (tree t)
5148 {
5149 tree fns;
5150
5151 if (CLASSTYPE_LAZY_MOVE_ASSIGN (t))
5152 {
5153 gcc_assert (COMPLETE_TYPE_P (t));
5154 lazily_declare_fn (sfk_move_assignment, t);
5155 }
5156
5157 for (fns = lookup_fnfields_slot_nolazy (t, ansi_assopname (NOP_EXPR));
5158 fns; fns = OVL_NEXT (fns))
5159 if (move_fn_p (OVL_CURRENT (fns)))
5160 return true;
5161
5162 return false;
5163 }
5164
5165 /* Returns true iff class T has a move constructor that was explicitly
5166 declared in the class body. Note that this is different from
5167 "user-provided", which doesn't include functions that are defaulted in
5168 the class. */
5169
5170 bool
5171 type_has_user_declared_move_constructor (tree t)
5172 {
5173 tree fns;
5174
5175 if (CLASSTYPE_LAZY_MOVE_CTOR (t))
5176 return false;
5177
5178 if (!CLASSTYPE_METHOD_VEC (t))
5179 return false;
5180
5181 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
5182 {
5183 tree fn = OVL_CURRENT (fns);
5184 if (move_fn_p (fn) && !DECL_ARTIFICIAL (fn))
5185 return true;
5186 }
5187
5188 return false;
5189 }
5190
5191 /* Returns true iff class T has a move assignment operator that was
5192 explicitly declared in the class body. */
5193
5194 bool
5195 type_has_user_declared_move_assign (tree t)
5196 {
5197 tree fns;
5198
5199 if (CLASSTYPE_LAZY_MOVE_ASSIGN (t))
5200 return false;
5201
5202 for (fns = lookup_fnfields_slot_nolazy (t, ansi_assopname (NOP_EXPR));
5203 fns; fns = OVL_NEXT (fns))
5204 {
5205 tree fn = OVL_CURRENT (fns);
5206 if (move_fn_p (fn) && !DECL_ARTIFICIAL (fn))
5207 return true;
5208 }
5209
5210 return false;
5211 }
5212
5213 /* Nonzero if we need to build up a constructor call when initializing an
5214 object of this class, either because it has a user-declared constructor
5215 or because it doesn't have a default constructor (so we need to give an
5216 error if no initializer is provided). Use TYPE_NEEDS_CONSTRUCTING when
5217 what you care about is whether or not an object can be produced by a
5218 constructor (e.g. so we don't set TREE_READONLY on const variables of
5219 such type); use this function when what you care about is whether or not
5220 to try to call a constructor to create an object. The latter case is
5221 the former plus some cases of constructors that cannot be called. */
5222
5223 bool
5224 type_build_ctor_call (tree t)
5225 {
5226 tree inner;
5227 if (TYPE_NEEDS_CONSTRUCTING (t))
5228 return true;
5229 inner = strip_array_types (t);
5230 if (!CLASS_TYPE_P (inner) || ANON_AGGR_TYPE_P (inner))
5231 return false;
5232 if (!TYPE_HAS_DEFAULT_CONSTRUCTOR (inner))
5233 return true;
5234 if (cxx_dialect < cxx11)
5235 return false;
5236 /* A user-declared constructor might be private, and a constructor might
5237 be trivial but deleted. */
5238 for (tree fns = lookup_fnfields_slot (inner, complete_ctor_identifier);
5239 fns; fns = OVL_NEXT (fns))
5240 {
5241 tree fn = OVL_CURRENT (fns);
5242 if (!DECL_ARTIFICIAL (fn)
5243 || DECL_DELETED_FN (fn))
5244 return true;
5245 }
5246 return false;
5247 }
5248
5249 /* Like type_build_ctor_call, but for destructors. */
5250
5251 bool
5252 type_build_dtor_call (tree t)
5253 {
5254 tree inner;
5255 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t))
5256 return true;
5257 inner = strip_array_types (t);
5258 if (!CLASS_TYPE_P (inner) || ANON_AGGR_TYPE_P (inner)
5259 || !COMPLETE_TYPE_P (inner))
5260 return false;
5261 if (cxx_dialect < cxx11)
5262 return false;
5263 /* A user-declared destructor might be private, and a destructor might
5264 be trivial but deleted. */
5265 for (tree fns = lookup_fnfields_slot (inner, complete_dtor_identifier);
5266 fns; fns = OVL_NEXT (fns))
5267 {
5268 tree fn = OVL_CURRENT (fns);
5269 if (!DECL_ARTIFICIAL (fn)
5270 || DECL_DELETED_FN (fn))
5271 return true;
5272 }
5273 return false;
5274 }
5275
5276 /* Remove all zero-width bit-fields from T. */
5277
5278 static void
5279 remove_zero_width_bit_fields (tree t)
5280 {
5281 tree *fieldsp;
5282
5283 fieldsp = &TYPE_FIELDS (t);
5284 while (*fieldsp)
5285 {
5286 if (TREE_CODE (*fieldsp) == FIELD_DECL
5287 && DECL_C_BIT_FIELD (*fieldsp)
5288 /* We should not be confused by the fact that grokbitfield
5289 temporarily sets the width of the bit field into
5290 DECL_INITIAL (*fieldsp).
5291 check_bitfield_decl eventually sets DECL_SIZE (*fieldsp)
5292 to that width. */
5293 && integer_zerop (DECL_SIZE (*fieldsp)))
5294 *fieldsp = DECL_CHAIN (*fieldsp);
5295 else
5296 fieldsp = &DECL_CHAIN (*fieldsp);
5297 }
5298 }
5299
5300 /* Returns TRUE iff we need a cookie when dynamically allocating an
5301 array whose elements have the indicated class TYPE. */
5302
5303 static bool
5304 type_requires_array_cookie (tree type)
5305 {
5306 tree fns;
5307 bool has_two_argument_delete_p = false;
5308
5309 gcc_assert (CLASS_TYPE_P (type));
5310
5311 /* If there's a non-trivial destructor, we need a cookie. In order
5312 to iterate through the array calling the destructor for each
5313 element, we'll have to know how many elements there are. */
5314 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
5315 return true;
5316
5317 /* If the usual deallocation function is a two-argument whose second
5318 argument is of type `size_t', then we have to pass the size of
5319 the array to the deallocation function, so we will need to store
5320 a cookie. */
5321 fns = lookup_fnfields (TYPE_BINFO (type),
5322 ansi_opname (VEC_DELETE_EXPR),
5323 /*protect=*/0);
5324 /* If there are no `operator []' members, or the lookup is
5325 ambiguous, then we don't need a cookie. */
5326 if (!fns || fns == error_mark_node)
5327 return false;
5328 /* Loop through all of the functions. */
5329 for (fns = BASELINK_FUNCTIONS (fns); fns; fns = OVL_NEXT (fns))
5330 {
5331 tree fn;
5332 tree second_parm;
5333
5334 /* Select the current function. */
5335 fn = OVL_CURRENT (fns);
5336 /* See if this function is a one-argument delete function. If
5337 it is, then it will be the usual deallocation function. */
5338 second_parm = TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (fn)));
5339 if (second_parm == void_list_node)
5340 return false;
5341 /* Do not consider this function if its second argument is an
5342 ellipsis. */
5343 if (!second_parm)
5344 continue;
5345 /* Otherwise, if we have a two-argument function and the second
5346 argument is `size_t', it will be the usual deallocation
5347 function -- unless there is one-argument function, too. */
5348 if (TREE_CHAIN (second_parm) == void_list_node
5349 && same_type_p (TREE_VALUE (second_parm), size_type_node))
5350 has_two_argument_delete_p = true;
5351 }
5352
5353 return has_two_argument_delete_p;
5354 }
5355
5356 /* Finish computing the `literal type' property of class type T.
5357
5358 At this point, we have already processed base classes and
5359 non-static data members. We need to check whether the copy
5360 constructor is trivial, the destructor is trivial, and there
5361 is a trivial default constructor or at least one constexpr
5362 constructor other than the copy constructor. */
5363
5364 static void
5365 finalize_literal_type_property (tree t)
5366 {
5367 tree fn;
5368
5369 if (cxx_dialect < cxx11
5370 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t))
5371 CLASSTYPE_LITERAL_P (t) = false;
5372 else if (CLASSTYPE_LITERAL_P (t) && !TYPE_HAS_TRIVIAL_DFLT (t)
5373 && CLASSTYPE_NON_AGGREGATE (t)
5374 && !TYPE_HAS_CONSTEXPR_CTOR (t))
5375 CLASSTYPE_LITERAL_P (t) = false;
5376
5377 if (!CLASSTYPE_LITERAL_P (t))
5378 for (fn = TYPE_METHODS (t); fn; fn = DECL_CHAIN (fn))
5379 if (DECL_DECLARED_CONSTEXPR_P (fn)
5380 && TREE_CODE (fn) != TEMPLATE_DECL
5381 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
5382 && !DECL_CONSTRUCTOR_P (fn))
5383 {
5384 DECL_DECLARED_CONSTEXPR_P (fn) = false;
5385 if (!DECL_GENERATED_P (fn))
5386 {
5387 error ("enclosing class of constexpr non-static member "
5388 "function %q+#D is not a literal type", fn);
5389 explain_non_literal_class (t);
5390 }
5391 }
5392 }
5393
5394 /* T is a non-literal type used in a context which requires a constant
5395 expression. Explain why it isn't literal. */
5396
5397 void
5398 explain_non_literal_class (tree t)
5399 {
5400 static struct pointer_set_t *diagnosed;
5401
5402 if (!CLASS_TYPE_P (t))
5403 return;
5404 t = TYPE_MAIN_VARIANT (t);
5405
5406 if (diagnosed == NULL)
5407 diagnosed = pointer_set_create ();
5408 if (pointer_set_insert (diagnosed, t) != 0)
5409 /* Already explained. */
5410 return;
5411
5412 inform (0, "%q+T is not literal because:", t);
5413 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t))
5414 inform (0, " %q+T has a non-trivial destructor", t);
5415 else if (CLASSTYPE_NON_AGGREGATE (t)
5416 && !TYPE_HAS_TRIVIAL_DFLT (t)
5417 && !TYPE_HAS_CONSTEXPR_CTOR (t))
5418 {
5419 inform (0, " %q+T is not an aggregate, does not have a trivial "
5420 "default constructor, and has no constexpr constructor that "
5421 "is not a copy or move constructor", t);
5422 if (TYPE_HAS_DEFAULT_CONSTRUCTOR (t)
5423 && !type_has_user_provided_default_constructor (t))
5424 {
5425 /* Note that we can't simply call locate_ctor because when the
5426 constructor is deleted it just returns NULL_TREE. */
5427 tree fns;
5428 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
5429 {
5430 tree fn = OVL_CURRENT (fns);
5431 tree parms = TYPE_ARG_TYPES (TREE_TYPE (fn));
5432
5433 parms = skip_artificial_parms_for (fn, parms);
5434
5435 if (sufficient_parms_p (parms))
5436 {
5437 if (DECL_DELETED_FN (fn))
5438 maybe_explain_implicit_delete (fn);
5439 else
5440 explain_invalid_constexpr_fn (fn);
5441 break;
5442 }
5443 }
5444 }
5445 }
5446 else
5447 {
5448 tree binfo, base_binfo, field; int i;
5449 for (binfo = TYPE_BINFO (t), i = 0;
5450 BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
5451 {
5452 tree basetype = TREE_TYPE (base_binfo);
5453 if (!CLASSTYPE_LITERAL_P (basetype))
5454 {
5455 inform (0, " base class %qT of %q+T is non-literal",
5456 basetype, t);
5457 explain_non_literal_class (basetype);
5458 return;
5459 }
5460 }
5461 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
5462 {
5463 tree ftype;
5464 if (TREE_CODE (field) != FIELD_DECL)
5465 continue;
5466 ftype = TREE_TYPE (field);
5467 if (!literal_type_p (ftype))
5468 {
5469 inform (0, " non-static data member %q+D has "
5470 "non-literal type", field);
5471 if (CLASS_TYPE_P (ftype))
5472 explain_non_literal_class (ftype);
5473 }
5474 }
5475 }
5476 }
5477
5478 /* Check the validity of the bases and members declared in T. Add any
5479 implicitly-generated functions (like copy-constructors and
5480 assignment operators). Compute various flag bits (like
5481 CLASSTYPE_NON_LAYOUT_POD_T) for T. This routine works purely at the C++
5482 level: i.e., independently of the ABI in use. */
5483
5484 static void
5485 check_bases_and_members (tree t)
5486 {
5487 /* Nonzero if the implicitly generated copy constructor should take
5488 a non-const reference argument. */
5489 int cant_have_const_ctor;
5490 /* Nonzero if the implicitly generated assignment operator
5491 should take a non-const reference argument. */
5492 int no_const_asn_ref;
5493 tree access_decls;
5494 bool saved_complex_asn_ref;
5495 bool saved_nontrivial_dtor;
5496 tree fn;
5497
5498 /* Pick up any abi_tags from our template arguments before checking. */
5499 inherit_targ_abi_tags (t);
5500
5501 /* By default, we use const reference arguments and generate default
5502 constructors. */
5503 cant_have_const_ctor = 0;
5504 no_const_asn_ref = 0;
5505
5506 /* Check all the base-classes. */
5507 check_bases (t, &cant_have_const_ctor,
5508 &no_const_asn_ref);
5509
5510 /* Deduce noexcept on destructors. This needs to happen after we've set
5511 triviality flags appropriately for our bases. */
5512 if (cxx_dialect >= cxx11)
5513 deduce_noexcept_on_destructors (t);
5514
5515 /* Check all the method declarations. */
5516 check_methods (t);
5517
5518 /* Save the initial values of these flags which only indicate whether
5519 or not the class has user-provided functions. As we analyze the
5520 bases and members we can set these flags for other reasons. */
5521 saved_complex_asn_ref = TYPE_HAS_COMPLEX_COPY_ASSIGN (t);
5522 saved_nontrivial_dtor = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t);
5523
5524 /* Check all the data member declarations. We cannot call
5525 check_field_decls until we have called check_bases check_methods,
5526 as check_field_decls depends on TYPE_HAS_NONTRIVIAL_DESTRUCTOR
5527 being set appropriately. */
5528 check_field_decls (t, &access_decls,
5529 &cant_have_const_ctor,
5530 &no_const_asn_ref);
5531
5532 /* A nearly-empty class has to be vptr-containing; a nearly empty
5533 class contains just a vptr. */
5534 if (!TYPE_CONTAINS_VPTR_P (t))
5535 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
5536
5537 /* Do some bookkeeping that will guide the generation of implicitly
5538 declared member functions. */
5539 TYPE_HAS_COMPLEX_COPY_CTOR (t) |= TYPE_CONTAINS_VPTR_P (t);
5540 TYPE_HAS_COMPLEX_MOVE_CTOR (t) |= TYPE_CONTAINS_VPTR_P (t);
5541 /* We need to call a constructor for this class if it has a
5542 user-provided constructor, or if the default constructor is going
5543 to initialize the vptr. (This is not an if-and-only-if;
5544 TYPE_NEEDS_CONSTRUCTING is set elsewhere if bases or members
5545 themselves need constructing.) */
5546 TYPE_NEEDS_CONSTRUCTING (t)
5547 |= (type_has_user_provided_constructor (t) || TYPE_CONTAINS_VPTR_P (t));
5548 /* [dcl.init.aggr]
5549
5550 An aggregate is an array or a class with no user-provided
5551 constructors ... and no virtual functions.
5552
5553 Again, other conditions for being an aggregate are checked
5554 elsewhere. */
5555 CLASSTYPE_NON_AGGREGATE (t)
5556 |= (type_has_user_provided_constructor (t) || TYPE_POLYMORPHIC_P (t));
5557 /* This is the C++98/03 definition of POD; it changed in C++0x, but we
5558 retain the old definition internally for ABI reasons. */
5559 CLASSTYPE_NON_LAYOUT_POD_P (t)
5560 |= (CLASSTYPE_NON_AGGREGATE (t)
5561 || saved_nontrivial_dtor || saved_complex_asn_ref);
5562 CLASSTYPE_NON_STD_LAYOUT (t) |= TYPE_CONTAINS_VPTR_P (t);
5563 TYPE_HAS_COMPLEX_COPY_ASSIGN (t) |= TYPE_CONTAINS_VPTR_P (t);
5564 TYPE_HAS_COMPLEX_MOVE_ASSIGN (t) |= TYPE_CONTAINS_VPTR_P (t);
5565 TYPE_HAS_COMPLEX_DFLT (t) |= TYPE_CONTAINS_VPTR_P (t);
5566
5567 /* Warn if a public base of a polymorphic type has an accessible
5568 non-virtual destructor. It is only now that we know the class is
5569 polymorphic. Although a polymorphic base will have a already
5570 been diagnosed during its definition, we warn on use too. */
5571 if (TYPE_POLYMORPHIC_P (t) && warn_nonvdtor)
5572 {
5573 tree binfo = TYPE_BINFO (t);
5574 vec<tree, va_gc> *accesses = BINFO_BASE_ACCESSES (binfo);
5575 tree base_binfo;
5576 unsigned i;
5577
5578 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
5579 {
5580 tree basetype = TREE_TYPE (base_binfo);
5581
5582 if ((*accesses)[i] == access_public_node
5583 && (TYPE_POLYMORPHIC_P (basetype) || warn_ecpp)
5584 && accessible_nvdtor_p (basetype))
5585 warning (OPT_Wnon_virtual_dtor,
5586 "base class %q#T has accessible non-virtual destructor",
5587 basetype);
5588 }
5589 }
5590
5591 /* If the class has no user-declared constructor, but does have
5592 non-static const or reference data members that can never be
5593 initialized, issue a warning. */
5594 if (warn_uninitialized
5595 /* Classes with user-declared constructors are presumed to
5596 initialize these members. */
5597 && !TYPE_HAS_USER_CONSTRUCTOR (t)
5598 /* Aggregates can be initialized with brace-enclosed
5599 initializers. */
5600 && CLASSTYPE_NON_AGGREGATE (t))
5601 {
5602 tree field;
5603
5604 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
5605 {
5606 tree type;
5607
5608 if (TREE_CODE (field) != FIELD_DECL
5609 || DECL_INITIAL (field) != NULL_TREE)
5610 continue;
5611
5612 type = TREE_TYPE (field);
5613 if (TREE_CODE (type) == REFERENCE_TYPE)
5614 warning (OPT_Wuninitialized, "non-static reference %q+#D "
5615 "in class without a constructor", field);
5616 else if (CP_TYPE_CONST_P (type)
5617 && (!CLASS_TYPE_P (type)
5618 || !TYPE_HAS_DEFAULT_CONSTRUCTOR (type)))
5619 warning (OPT_Wuninitialized, "non-static const member %q+#D "
5620 "in class without a constructor", field);
5621 }
5622 }
5623
5624 /* Synthesize any needed methods. */
5625 add_implicitly_declared_members (t, &access_decls,
5626 cant_have_const_ctor,
5627 no_const_asn_ref);
5628
5629 /* Check defaulted declarations here so we have cant_have_const_ctor
5630 and don't need to worry about clones. */
5631 for (fn = TYPE_METHODS (t); fn; fn = DECL_CHAIN (fn))
5632 if (!DECL_ARTIFICIAL (fn) && DECL_DEFAULTED_IN_CLASS_P (fn))
5633 {
5634 int copy = copy_fn_p (fn);
5635 if (copy > 0)
5636 {
5637 bool imp_const_p
5638 = (DECL_CONSTRUCTOR_P (fn) ? !cant_have_const_ctor
5639 : !no_const_asn_ref);
5640 bool fn_const_p = (copy == 2);
5641
5642 if (fn_const_p && !imp_const_p)
5643 /* If the function is defaulted outside the class, we just
5644 give the synthesis error. */
5645 error ("%q+D declared to take const reference, but implicit "
5646 "declaration would take non-const", fn);
5647 }
5648 defaulted_late_check (fn);
5649 }
5650
5651 if (LAMBDA_TYPE_P (t))
5652 {
5653 /* "The closure type associated with a lambda-expression has a deleted
5654 default constructor and a deleted copy assignment operator." */
5655 TYPE_NEEDS_CONSTRUCTING (t) = 1;
5656 TYPE_HAS_COMPLEX_DFLT (t) = 1;
5657 TYPE_HAS_COMPLEX_COPY_ASSIGN (t) = 1;
5658 CLASSTYPE_LAZY_MOVE_ASSIGN (t) = 0;
5659
5660 /* "This class type is not an aggregate." */
5661 CLASSTYPE_NON_AGGREGATE (t) = 1;
5662 }
5663
5664 /* Compute the 'literal type' property before we
5665 do anything with non-static member functions. */
5666 finalize_literal_type_property (t);
5667
5668 /* Create the in-charge and not-in-charge variants of constructors
5669 and destructors. */
5670 clone_constructors_and_destructors (t);
5671
5672 /* Process the using-declarations. */
5673 for (; access_decls; access_decls = TREE_CHAIN (access_decls))
5674 handle_using_decl (TREE_VALUE (access_decls), t);
5675
5676 /* Build and sort the CLASSTYPE_METHOD_VEC. */
5677 finish_struct_methods (t);
5678
5679 /* Figure out whether or not we will need a cookie when dynamically
5680 allocating an array of this type. */
5681 TYPE_LANG_SPECIFIC (t)->u.c.vec_new_uses_cookie
5682 = type_requires_array_cookie (t);
5683 }
5684
5685 /* If T needs a pointer to its virtual function table, set TYPE_VFIELD
5686 accordingly. If a new vfield was created (because T doesn't have a
5687 primary base class), then the newly created field is returned. It
5688 is not added to the TYPE_FIELDS list; it is the caller's
5689 responsibility to do that. Accumulate declared virtual functions
5690 on VIRTUALS_P. */
5691
5692 static tree
5693 create_vtable_ptr (tree t, tree* virtuals_p)
5694 {
5695 tree fn;
5696
5697 /* Collect the virtual functions declared in T. */
5698 for (fn = TYPE_METHODS (t); fn; fn = DECL_CHAIN (fn))
5699 if (DECL_VINDEX (fn) && !DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (fn)
5700 && TREE_CODE (DECL_VINDEX (fn)) != INTEGER_CST)
5701 {
5702 tree new_virtual = make_node (TREE_LIST);
5703
5704 BV_FN (new_virtual) = fn;
5705 BV_DELTA (new_virtual) = integer_zero_node;
5706 BV_VCALL_INDEX (new_virtual) = NULL_TREE;
5707
5708 TREE_CHAIN (new_virtual) = *virtuals_p;
5709 *virtuals_p = new_virtual;
5710 }
5711
5712 /* If we couldn't find an appropriate base class, create a new field
5713 here. Even if there weren't any new virtual functions, we might need a
5714 new virtual function table if we're supposed to include vptrs in
5715 all classes that need them. */
5716 if (!TYPE_VFIELD (t) && (*virtuals_p || TYPE_CONTAINS_VPTR_P (t)))
5717 {
5718 /* We build this decl with vtbl_ptr_type_node, which is a
5719 `vtable_entry_type*'. It might seem more precise to use
5720 `vtable_entry_type (*)[N]' where N is the number of virtual
5721 functions. However, that would require the vtable pointer in
5722 base classes to have a different type than the vtable pointer
5723 in derived classes. We could make that happen, but that
5724 still wouldn't solve all the problems. In particular, the
5725 type-based alias analysis code would decide that assignments
5726 to the base class vtable pointer can't alias assignments to
5727 the derived class vtable pointer, since they have different
5728 types. Thus, in a derived class destructor, where the base
5729 class constructor was inlined, we could generate bad code for
5730 setting up the vtable pointer.
5731
5732 Therefore, we use one type for all vtable pointers. We still
5733 use a type-correct type; it's just doesn't indicate the array
5734 bounds. That's better than using `void*' or some such; it's
5735 cleaner, and it let's the alias analysis code know that these
5736 stores cannot alias stores to void*! */
5737 tree field;
5738
5739 field = build_decl (input_location,
5740 FIELD_DECL, get_vfield_name (t), vtbl_ptr_type_node);
5741 DECL_VIRTUAL_P (field) = 1;
5742 DECL_ARTIFICIAL (field) = 1;
5743 DECL_FIELD_CONTEXT (field) = t;
5744 DECL_FCONTEXT (field) = t;
5745 if (TYPE_PACKED (t))
5746 DECL_PACKED (field) = 1;
5747
5748 TYPE_VFIELD (t) = field;
5749
5750 /* This class is non-empty. */
5751 CLASSTYPE_EMPTY_P (t) = 0;
5752
5753 return field;
5754 }
5755
5756 return NULL_TREE;
5757 }
5758
5759 /* Add OFFSET to all base types of BINFO which is a base in the
5760 hierarchy dominated by T.
5761
5762 OFFSET, which is a type offset, is number of bytes. */
5763
5764 static void
5765 propagate_binfo_offsets (tree binfo, tree offset)
5766 {
5767 int i;
5768 tree primary_binfo;
5769 tree base_binfo;
5770
5771 /* Update BINFO's offset. */
5772 BINFO_OFFSET (binfo)
5773 = convert (sizetype,
5774 size_binop (PLUS_EXPR,
5775 convert (ssizetype, BINFO_OFFSET (binfo)),
5776 offset));
5777
5778 /* Find the primary base class. */
5779 primary_binfo = get_primary_binfo (binfo);
5780
5781 if (primary_binfo && BINFO_INHERITANCE_CHAIN (primary_binfo) == binfo)
5782 propagate_binfo_offsets (primary_binfo, offset);
5783
5784 /* Scan all of the bases, pushing the BINFO_OFFSET adjust
5785 downwards. */
5786 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
5787 {
5788 /* Don't do the primary base twice. */
5789 if (base_binfo == primary_binfo)
5790 continue;
5791
5792 if (BINFO_VIRTUAL_P (base_binfo))
5793 continue;
5794
5795 propagate_binfo_offsets (base_binfo, offset);
5796 }
5797 }
5798
5799 /* Set BINFO_OFFSET for all of the virtual bases for RLI->T. Update
5800 TYPE_ALIGN and TYPE_SIZE for T. OFFSETS gives the location of
5801 empty subobjects of T. */
5802
5803 static void
5804 layout_virtual_bases (record_layout_info rli, splay_tree offsets)
5805 {
5806 tree vbase;
5807 tree t = rli->t;
5808 bool first_vbase = true;
5809 tree *next_field;
5810
5811 if (BINFO_N_BASE_BINFOS (TYPE_BINFO (t)) == 0)
5812 return;
5813
5814 if (!abi_version_at_least(2))
5815 {
5816 /* In G++ 3.2, we incorrectly rounded the size before laying out
5817 the virtual bases. */
5818 finish_record_layout (rli, /*free_p=*/false);
5819 #ifdef STRUCTURE_SIZE_BOUNDARY
5820 /* Packed structures don't need to have minimum size. */
5821 if (! TYPE_PACKED (t))
5822 TYPE_ALIGN (t) = MAX (TYPE_ALIGN (t), (unsigned) STRUCTURE_SIZE_BOUNDARY);
5823 #endif
5824 rli->offset = TYPE_SIZE_UNIT (t);
5825 rli->bitpos = bitsize_zero_node;
5826 rli->record_align = TYPE_ALIGN (t);
5827 }
5828
5829 /* Find the last field. The artificial fields created for virtual
5830 bases will go after the last extant field to date. */
5831 next_field = &TYPE_FIELDS (t);
5832 while (*next_field)
5833 next_field = &DECL_CHAIN (*next_field);
5834
5835 /* Go through the virtual bases, allocating space for each virtual
5836 base that is not already a primary base class. These are
5837 allocated in inheritance graph order. */
5838 for (vbase = TYPE_BINFO (t); vbase; vbase = TREE_CHAIN (vbase))
5839 {
5840 if (!BINFO_VIRTUAL_P (vbase))
5841 continue;
5842
5843 if (!BINFO_PRIMARY_P (vbase))
5844 {
5845 tree basetype = TREE_TYPE (vbase);
5846
5847 /* This virtual base is not a primary base of any class in the
5848 hierarchy, so we have to add space for it. */
5849 next_field = build_base_field (rli, vbase,
5850 offsets, next_field);
5851
5852 /* If the first virtual base might have been placed at a
5853 lower address, had we started from CLASSTYPE_SIZE, rather
5854 than TYPE_SIZE, issue a warning. There can be both false
5855 positives and false negatives from this warning in rare
5856 cases; to deal with all the possibilities would probably
5857 require performing both layout algorithms and comparing
5858 the results which is not particularly tractable. */
5859 if (warn_abi
5860 && first_vbase
5861 && (tree_int_cst_lt
5862 (size_binop (CEIL_DIV_EXPR,
5863 round_up_loc (input_location,
5864 CLASSTYPE_SIZE (t),
5865 CLASSTYPE_ALIGN (basetype)),
5866 bitsize_unit_node),
5867 BINFO_OFFSET (vbase))))
5868 warning (OPT_Wabi,
5869 "offset of virtual base %qT is not ABI-compliant and "
5870 "may change in a future version of GCC",
5871 basetype);
5872
5873 first_vbase = false;
5874 }
5875 }
5876 }
5877
5878 /* Returns the offset of the byte just past the end of the base class
5879 BINFO. */
5880
5881 static tree
5882 end_of_base (tree binfo)
5883 {
5884 tree size;
5885
5886 if (!CLASSTYPE_AS_BASE (BINFO_TYPE (binfo)))
5887 size = TYPE_SIZE_UNIT (char_type_node);
5888 else if (is_empty_class (BINFO_TYPE (binfo)))
5889 /* An empty class has zero CLASSTYPE_SIZE_UNIT, but we need to
5890 allocate some space for it. It cannot have virtual bases, so
5891 TYPE_SIZE_UNIT is fine. */
5892 size = TYPE_SIZE_UNIT (BINFO_TYPE (binfo));
5893 else
5894 size = CLASSTYPE_SIZE_UNIT (BINFO_TYPE (binfo));
5895
5896 return size_binop (PLUS_EXPR, BINFO_OFFSET (binfo), size);
5897 }
5898
5899 /* Returns the offset of the byte just past the end of the base class
5900 with the highest offset in T. If INCLUDE_VIRTUALS_P is zero, then
5901 only non-virtual bases are included. */
5902
5903 static tree
5904 end_of_class (tree t, int include_virtuals_p)
5905 {
5906 tree result = size_zero_node;
5907 vec<tree, va_gc> *vbases;
5908 tree binfo;
5909 tree base_binfo;
5910 tree offset;
5911 int i;
5912
5913 for (binfo = TYPE_BINFO (t), i = 0;
5914 BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
5915 {
5916 if (!include_virtuals_p
5917 && BINFO_VIRTUAL_P (base_binfo)
5918 && (!BINFO_PRIMARY_P (base_binfo)
5919 || BINFO_INHERITANCE_CHAIN (base_binfo) != TYPE_BINFO (t)))
5920 continue;
5921
5922 offset = end_of_base (base_binfo);
5923 if (tree_int_cst_lt (result, offset))
5924 result = offset;
5925 }
5926
5927 /* G++ 3.2 did not check indirect virtual bases. */
5928 if (abi_version_at_least (2) && include_virtuals_p)
5929 for (vbases = CLASSTYPE_VBASECLASSES (t), i = 0;
5930 vec_safe_iterate (vbases, i, &base_binfo); i++)
5931 {
5932 offset = end_of_base (base_binfo);
5933 if (tree_int_cst_lt (result, offset))
5934 result = offset;
5935 }
5936
5937 return result;
5938 }
5939
5940 /* Warn about bases of T that are inaccessible because they are
5941 ambiguous. For example:
5942
5943 struct S {};
5944 struct T : public S {};
5945 struct U : public S, public T {};
5946
5947 Here, `(S*) new U' is not allowed because there are two `S'
5948 subobjects of U. */
5949
5950 static void
5951 warn_about_ambiguous_bases (tree t)
5952 {
5953 int i;
5954 vec<tree, va_gc> *vbases;
5955 tree basetype;
5956 tree binfo;
5957 tree base_binfo;
5958
5959 /* If there are no repeated bases, nothing can be ambiguous. */
5960 if (!CLASSTYPE_REPEATED_BASE_P (t))
5961 return;
5962
5963 /* Check direct bases. */
5964 for (binfo = TYPE_BINFO (t), i = 0;
5965 BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
5966 {
5967 basetype = BINFO_TYPE (base_binfo);
5968
5969 if (!uniquely_derived_from_p (basetype, t))
5970 warning (0, "direct base %qT inaccessible in %qT due to ambiguity",
5971 basetype, t);
5972 }
5973
5974 /* Check for ambiguous virtual bases. */
5975 if (extra_warnings)
5976 for (vbases = CLASSTYPE_VBASECLASSES (t), i = 0;
5977 vec_safe_iterate (vbases, i, &binfo); i++)
5978 {
5979 basetype = BINFO_TYPE (binfo);
5980
5981 if (!uniquely_derived_from_p (basetype, t))
5982 warning (OPT_Wextra, "virtual base %qT inaccessible in %qT due "
5983 "to ambiguity", basetype, t);
5984 }
5985 }
5986
5987 /* Compare two INTEGER_CSTs K1 and K2. */
5988
5989 static int
5990 splay_tree_compare_integer_csts (splay_tree_key k1, splay_tree_key k2)
5991 {
5992 return tree_int_cst_compare ((tree) k1, (tree) k2);
5993 }
5994
5995 /* Increase the size indicated in RLI to account for empty classes
5996 that are "off the end" of the class. */
5997
5998 static void
5999 include_empty_classes (record_layout_info rli)
6000 {
6001 tree eoc;
6002 tree rli_size;
6003
6004 /* It might be the case that we grew the class to allocate a
6005 zero-sized base class. That won't be reflected in RLI, yet,
6006 because we are willing to overlay multiple bases at the same
6007 offset. However, now we need to make sure that RLI is big enough
6008 to reflect the entire class. */
6009 eoc = end_of_class (rli->t,
6010 CLASSTYPE_AS_BASE (rli->t) != NULL_TREE);
6011 rli_size = rli_size_unit_so_far (rli);
6012 if (TREE_CODE (rli_size) == INTEGER_CST
6013 && tree_int_cst_lt (rli_size, eoc))
6014 {
6015 if (!abi_version_at_least (2))
6016 /* In version 1 of the ABI, the size of a class that ends with
6017 a bitfield was not rounded up to a whole multiple of a
6018 byte. Because rli_size_unit_so_far returns only the number
6019 of fully allocated bytes, any extra bits were not included
6020 in the size. */
6021 rli->bitpos = round_down (rli->bitpos, BITS_PER_UNIT);
6022 else
6023 /* The size should have been rounded to a whole byte. */
6024 gcc_assert (tree_int_cst_equal
6025 (rli->bitpos, round_down (rli->bitpos, BITS_PER_UNIT)));
6026 rli->bitpos
6027 = size_binop (PLUS_EXPR,
6028 rli->bitpos,
6029 size_binop (MULT_EXPR,
6030 convert (bitsizetype,
6031 size_binop (MINUS_EXPR,
6032 eoc, rli_size)),
6033 bitsize_int (BITS_PER_UNIT)));
6034 normalize_rli (rli);
6035 }
6036 }
6037
6038 /* Calculate the TYPE_SIZE, TYPE_ALIGN, etc for T. Calculate
6039 BINFO_OFFSETs for all of the base-classes. Position the vtable
6040 pointer. Accumulate declared virtual functions on VIRTUALS_P. */
6041
6042 static void
6043 layout_class_type (tree t, tree *virtuals_p)
6044 {
6045 tree non_static_data_members;
6046 tree field;
6047 tree vptr;
6048 record_layout_info rli;
6049 /* Maps offsets (represented as INTEGER_CSTs) to a TREE_LIST of
6050 types that appear at that offset. */
6051 splay_tree empty_base_offsets;
6052 /* True if the last field laid out was a bit-field. */
6053 bool last_field_was_bitfield = false;
6054 /* The location at which the next field should be inserted. */
6055 tree *next_field;
6056 /* T, as a base class. */
6057 tree base_t;
6058
6059 /* Keep track of the first non-static data member. */
6060 non_static_data_members = TYPE_FIELDS (t);
6061
6062 /* Start laying out the record. */
6063 rli = start_record_layout (t);
6064
6065 /* Mark all the primary bases in the hierarchy. */
6066 determine_primary_bases (t);
6067
6068 /* Create a pointer to our virtual function table. */
6069 vptr = create_vtable_ptr (t, virtuals_p);
6070
6071 /* The vptr is always the first thing in the class. */
6072 if (vptr)
6073 {
6074 DECL_CHAIN (vptr) = TYPE_FIELDS (t);
6075 TYPE_FIELDS (t) = vptr;
6076 next_field = &DECL_CHAIN (vptr);
6077 place_field (rli, vptr);
6078 }
6079 else
6080 next_field = &TYPE_FIELDS (t);
6081
6082 /* Build FIELD_DECLs for all of the non-virtual base-types. */
6083 empty_base_offsets = splay_tree_new (splay_tree_compare_integer_csts,
6084 NULL, NULL);
6085 build_base_fields (rli, empty_base_offsets, next_field);
6086
6087 /* Layout the non-static data members. */
6088 for (field = non_static_data_members; field; field = DECL_CHAIN (field))
6089 {
6090 tree type;
6091 tree padding;
6092
6093 /* We still pass things that aren't non-static data members to
6094 the back end, in case it wants to do something with them. */
6095 if (TREE_CODE (field) != FIELD_DECL)
6096 {
6097 place_field (rli, field);
6098 /* If the static data member has incomplete type, keep track
6099 of it so that it can be completed later. (The handling
6100 of pending statics in finish_record_layout is
6101 insufficient; consider:
6102
6103 struct S1;
6104 struct S2 { static S1 s1; };
6105
6106 At this point, finish_record_layout will be called, but
6107 S1 is still incomplete.) */
6108 if (VAR_P (field))
6109 {
6110 maybe_register_incomplete_var (field);
6111 /* The visibility of static data members is determined
6112 at their point of declaration, not their point of
6113 definition. */
6114 determine_visibility (field);
6115 }
6116 continue;
6117 }
6118
6119 type = TREE_TYPE (field);
6120 if (type == error_mark_node)
6121 continue;
6122
6123 padding = NULL_TREE;
6124
6125 /* If this field is a bit-field whose width is greater than its
6126 type, then there are some special rules for allocating
6127 it. */
6128 if (DECL_C_BIT_FIELD (field)
6129 && tree_int_cst_lt (TYPE_SIZE (type), DECL_SIZE (field)))
6130 {
6131 unsigned int itk;
6132 tree integer_type;
6133 bool was_unnamed_p = false;
6134 /* We must allocate the bits as if suitably aligned for the
6135 longest integer type that fits in this many bits. type
6136 of the field. Then, we are supposed to use the left over
6137 bits as additional padding. */
6138 for (itk = itk_char; itk != itk_none; ++itk)
6139 if (integer_types[itk] != NULL_TREE
6140 && (tree_int_cst_lt (size_int (MAX_FIXED_MODE_SIZE),
6141 TYPE_SIZE (integer_types[itk]))
6142 || tree_int_cst_lt (DECL_SIZE (field),
6143 TYPE_SIZE (integer_types[itk]))))
6144 break;
6145
6146 /* ITK now indicates a type that is too large for the
6147 field. We have to back up by one to find the largest
6148 type that fits. */
6149 do
6150 {
6151 --itk;
6152 integer_type = integer_types[itk];
6153 } while (itk > 0 && integer_type == NULL_TREE);
6154
6155 /* Figure out how much additional padding is required. GCC
6156 3.2 always created a padding field, even if it had zero
6157 width. */
6158 if (!abi_version_at_least (2)
6159 || tree_int_cst_lt (TYPE_SIZE (integer_type), DECL_SIZE (field)))
6160 {
6161 if (abi_version_at_least (2) && TREE_CODE (t) == UNION_TYPE)
6162 /* In a union, the padding field must have the full width
6163 of the bit-field; all fields start at offset zero. */
6164 padding = DECL_SIZE (field);
6165 else
6166 {
6167 if (TREE_CODE (t) == UNION_TYPE)
6168 warning (OPT_Wabi, "size assigned to %qT may not be "
6169 "ABI-compliant and may change in a future "
6170 "version of GCC",
6171 t);
6172 padding = size_binop (MINUS_EXPR, DECL_SIZE (field),
6173 TYPE_SIZE (integer_type));
6174 }
6175 }
6176 #ifdef PCC_BITFIELD_TYPE_MATTERS
6177 /* An unnamed bitfield does not normally affect the
6178 alignment of the containing class on a target where
6179 PCC_BITFIELD_TYPE_MATTERS. But, the C++ ABI does not
6180 make any exceptions for unnamed bitfields when the
6181 bitfields are longer than their types. Therefore, we
6182 temporarily give the field a name. */
6183 if (PCC_BITFIELD_TYPE_MATTERS && !DECL_NAME (field))
6184 {
6185 was_unnamed_p = true;
6186 DECL_NAME (field) = make_anon_name ();
6187 }
6188 #endif
6189 DECL_SIZE (field) = TYPE_SIZE (integer_type);
6190 DECL_ALIGN (field) = TYPE_ALIGN (integer_type);
6191 DECL_USER_ALIGN (field) = TYPE_USER_ALIGN (integer_type);
6192 layout_nonempty_base_or_field (rli, field, NULL_TREE,
6193 empty_base_offsets);
6194 if (was_unnamed_p)
6195 DECL_NAME (field) = NULL_TREE;
6196 /* Now that layout has been performed, set the size of the
6197 field to the size of its declared type; the rest of the
6198 field is effectively invisible. */
6199 DECL_SIZE (field) = TYPE_SIZE (type);
6200 /* We must also reset the DECL_MODE of the field. */
6201 if (abi_version_at_least (2))
6202 DECL_MODE (field) = TYPE_MODE (type);
6203 else if (warn_abi
6204 && DECL_MODE (field) != TYPE_MODE (type))
6205 /* Versions of G++ before G++ 3.4 did not reset the
6206 DECL_MODE. */
6207 warning (OPT_Wabi,
6208 "the offset of %qD may not be ABI-compliant and may "
6209 "change in a future version of GCC", field);
6210 }
6211 else
6212 layout_nonempty_base_or_field (rli, field, NULL_TREE,
6213 empty_base_offsets);
6214
6215 /* Remember the location of any empty classes in FIELD. */
6216 if (abi_version_at_least (2))
6217 record_subobject_offsets (TREE_TYPE (field),
6218 byte_position(field),
6219 empty_base_offsets,
6220 /*is_data_member=*/true);
6221
6222 /* If a bit-field does not immediately follow another bit-field,
6223 and yet it starts in the middle of a byte, we have failed to
6224 comply with the ABI. */
6225 if (warn_abi
6226 && DECL_C_BIT_FIELD (field)
6227 /* The TREE_NO_WARNING flag gets set by Objective-C when
6228 laying out an Objective-C class. The ObjC ABI differs
6229 from the C++ ABI, and so we do not want a warning
6230 here. */
6231 && !TREE_NO_WARNING (field)
6232 && !last_field_was_bitfield
6233 && !integer_zerop (size_binop (TRUNC_MOD_EXPR,
6234 DECL_FIELD_BIT_OFFSET (field),
6235 bitsize_unit_node)))
6236 warning (OPT_Wabi, "offset of %q+D is not ABI-compliant and may "
6237 "change in a future version of GCC", field);
6238
6239 /* G++ used to use DECL_FIELD_OFFSET as if it were the byte
6240 offset of the field. */
6241 if (warn_abi
6242 && !abi_version_at_least (2)
6243 && !tree_int_cst_equal (DECL_FIELD_OFFSET (field),
6244 byte_position (field))
6245 && contains_empty_class_p (TREE_TYPE (field)))
6246 warning (OPT_Wabi, "%q+D contains empty classes which may cause base "
6247 "classes to be placed at different locations in a "
6248 "future version of GCC", field);
6249
6250 /* The middle end uses the type of expressions to determine the
6251 possible range of expression values. In order to optimize
6252 "x.i > 7" to "false" for a 2-bit bitfield "i", the middle end
6253 must be made aware of the width of "i", via its type.
6254
6255 Because C++ does not have integer types of arbitrary width,
6256 we must (for the purposes of the front end) convert from the
6257 type assigned here to the declared type of the bitfield
6258 whenever a bitfield expression is used as an rvalue.
6259 Similarly, when assigning a value to a bitfield, the value
6260 must be converted to the type given the bitfield here. */
6261 if (DECL_C_BIT_FIELD (field))
6262 {
6263 unsigned HOST_WIDE_INT width;
6264 tree ftype = TREE_TYPE (field);
6265 width = tree_to_uhwi (DECL_SIZE (field));
6266 if (width != TYPE_PRECISION (ftype))
6267 {
6268 TREE_TYPE (field)
6269 = c_build_bitfield_integer_type (width,
6270 TYPE_UNSIGNED (ftype));
6271 TREE_TYPE (field)
6272 = cp_build_qualified_type (TREE_TYPE (field),
6273 cp_type_quals (ftype));
6274 }
6275 }
6276
6277 /* If we needed additional padding after this field, add it
6278 now. */
6279 if (padding)
6280 {
6281 tree padding_field;
6282
6283 padding_field = build_decl (input_location,
6284 FIELD_DECL,
6285 NULL_TREE,
6286 char_type_node);
6287 DECL_BIT_FIELD (padding_field) = 1;
6288 DECL_SIZE (padding_field) = padding;
6289 DECL_CONTEXT (padding_field) = t;
6290 DECL_ARTIFICIAL (padding_field) = 1;
6291 DECL_IGNORED_P (padding_field) = 1;
6292 layout_nonempty_base_or_field (rli, padding_field,
6293 NULL_TREE,
6294 empty_base_offsets);
6295 }
6296
6297 last_field_was_bitfield = DECL_C_BIT_FIELD (field);
6298 }
6299
6300 if (abi_version_at_least (2) && !integer_zerop (rli->bitpos))
6301 {
6302 /* Make sure that we are on a byte boundary so that the size of
6303 the class without virtual bases will always be a round number
6304 of bytes. */
6305 rli->bitpos = round_up_loc (input_location, rli->bitpos, BITS_PER_UNIT);
6306 normalize_rli (rli);
6307 }
6308
6309 /* G++ 3.2 does not allow virtual bases to be overlaid with tail
6310 padding. */
6311 if (!abi_version_at_least (2))
6312 include_empty_classes(rli);
6313
6314 /* Delete all zero-width bit-fields from the list of fields. Now
6315 that the type is laid out they are no longer important. */
6316 remove_zero_width_bit_fields (t);
6317
6318 /* Create the version of T used for virtual bases. We do not use
6319 make_class_type for this version; this is an artificial type. For
6320 a POD type, we just reuse T. */
6321 if (CLASSTYPE_NON_LAYOUT_POD_P (t) || CLASSTYPE_EMPTY_P (t))
6322 {
6323 base_t = make_node (TREE_CODE (t));
6324
6325 /* Set the size and alignment for the new type. In G++ 3.2, all
6326 empty classes were considered to have size zero when used as
6327 base classes. */
6328 if (!abi_version_at_least (2) && CLASSTYPE_EMPTY_P (t))
6329 {
6330 TYPE_SIZE (base_t) = bitsize_zero_node;
6331 TYPE_SIZE_UNIT (base_t) = size_zero_node;
6332 if (warn_abi && !integer_zerop (rli_size_unit_so_far (rli)))
6333 warning (OPT_Wabi,
6334 "layout of classes derived from empty class %qT "
6335 "may change in a future version of GCC",
6336 t);
6337 }
6338 else
6339 {
6340 tree eoc;
6341
6342 /* If the ABI version is not at least two, and the last
6343 field was a bit-field, RLI may not be on a byte
6344 boundary. In particular, rli_size_unit_so_far might
6345 indicate the last complete byte, while rli_size_so_far
6346 indicates the total number of bits used. Therefore,
6347 rli_size_so_far, rather than rli_size_unit_so_far, is
6348 used to compute TYPE_SIZE_UNIT. */
6349 eoc = end_of_class (t, /*include_virtuals_p=*/0);
6350 TYPE_SIZE_UNIT (base_t)
6351 = size_binop (MAX_EXPR,
6352 convert (sizetype,
6353 size_binop (CEIL_DIV_EXPR,
6354 rli_size_so_far (rli),
6355 bitsize_int (BITS_PER_UNIT))),
6356 eoc);
6357 TYPE_SIZE (base_t)
6358 = size_binop (MAX_EXPR,
6359 rli_size_so_far (rli),
6360 size_binop (MULT_EXPR,
6361 convert (bitsizetype, eoc),
6362 bitsize_int (BITS_PER_UNIT)));
6363 }
6364 TYPE_ALIGN (base_t) = rli->record_align;
6365 TYPE_USER_ALIGN (base_t) = TYPE_USER_ALIGN (t);
6366
6367 /* Copy the fields from T. */
6368 next_field = &TYPE_FIELDS (base_t);
6369 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
6370 if (TREE_CODE (field) == FIELD_DECL)
6371 {
6372 *next_field = build_decl (input_location,
6373 FIELD_DECL,
6374 DECL_NAME (field),
6375 TREE_TYPE (field));
6376 DECL_CONTEXT (*next_field) = base_t;
6377 DECL_FIELD_OFFSET (*next_field) = DECL_FIELD_OFFSET (field);
6378 DECL_FIELD_BIT_OFFSET (*next_field)
6379 = DECL_FIELD_BIT_OFFSET (field);
6380 DECL_SIZE (*next_field) = DECL_SIZE (field);
6381 DECL_MODE (*next_field) = DECL_MODE (field);
6382 next_field = &DECL_CHAIN (*next_field);
6383 }
6384
6385 /* Record the base version of the type. */
6386 CLASSTYPE_AS_BASE (t) = base_t;
6387 TYPE_CONTEXT (base_t) = t;
6388 }
6389 else
6390 CLASSTYPE_AS_BASE (t) = t;
6391
6392 /* Every empty class contains an empty class. */
6393 if (CLASSTYPE_EMPTY_P (t))
6394 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) = 1;
6395
6396 /* Set the TYPE_DECL for this type to contain the right
6397 value for DECL_OFFSET, so that we can use it as part
6398 of a COMPONENT_REF for multiple inheritance. */
6399 layout_decl (TYPE_MAIN_DECL (t), 0);
6400
6401 /* Now fix up any virtual base class types that we left lying
6402 around. We must get these done before we try to lay out the
6403 virtual function table. As a side-effect, this will remove the
6404 base subobject fields. */
6405 layout_virtual_bases (rli, empty_base_offsets);
6406
6407 /* Make sure that empty classes are reflected in RLI at this
6408 point. */
6409 include_empty_classes(rli);
6410
6411 /* Make sure not to create any structures with zero size. */
6412 if (integer_zerop (rli_size_unit_so_far (rli)) && CLASSTYPE_EMPTY_P (t))
6413 place_field (rli,
6414 build_decl (input_location,
6415 FIELD_DECL, NULL_TREE, char_type_node));
6416
6417 /* If this is a non-POD, declaring it packed makes a difference to how it
6418 can be used as a field; don't let finalize_record_size undo it. */
6419 if (TYPE_PACKED (t) && !layout_pod_type_p (t))
6420 rli->packed_maybe_necessary = true;
6421
6422 /* Let the back end lay out the type. */
6423 finish_record_layout (rli, /*free_p=*/true);
6424
6425 if (TYPE_SIZE_UNIT (t)
6426 && TREE_CODE (TYPE_SIZE_UNIT (t)) == INTEGER_CST
6427 && !TREE_OVERFLOW (TYPE_SIZE_UNIT (t))
6428 && !valid_constant_size_p (TYPE_SIZE_UNIT (t)))
6429 error ("type %qT is too large", t);
6430
6431 /* Warn about bases that can't be talked about due to ambiguity. */
6432 warn_about_ambiguous_bases (t);
6433
6434 /* Now that we're done with layout, give the base fields the real types. */
6435 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
6436 if (DECL_ARTIFICIAL (field) && IS_FAKE_BASE_TYPE (TREE_TYPE (field)))
6437 TREE_TYPE (field) = TYPE_CONTEXT (TREE_TYPE (field));
6438
6439 /* Clean up. */
6440 splay_tree_delete (empty_base_offsets);
6441
6442 if (CLASSTYPE_EMPTY_P (t)
6443 && tree_int_cst_lt (sizeof_biggest_empty_class,
6444 TYPE_SIZE_UNIT (t)))
6445 sizeof_biggest_empty_class = TYPE_SIZE_UNIT (t);
6446 }
6447
6448 /* Determine the "key method" for the class type indicated by TYPE,
6449 and set CLASSTYPE_KEY_METHOD accordingly. */
6450
6451 void
6452 determine_key_method (tree type)
6453 {
6454 tree method;
6455
6456 if (TYPE_FOR_JAVA (type)
6457 || processing_template_decl
6458 || CLASSTYPE_TEMPLATE_INSTANTIATION (type)
6459 || CLASSTYPE_INTERFACE_KNOWN (type))
6460 return;
6461
6462 /* The key method is the first non-pure virtual function that is not
6463 inline at the point of class definition. On some targets the
6464 key function may not be inline; those targets should not call
6465 this function until the end of the translation unit. */
6466 for (method = TYPE_METHODS (type); method != NULL_TREE;
6467 method = DECL_CHAIN (method))
6468 if (DECL_VINDEX (method) != NULL_TREE
6469 && ! DECL_DECLARED_INLINE_P (method)
6470 && ! DECL_PURE_VIRTUAL_P (method))
6471 {
6472 CLASSTYPE_KEY_METHOD (type) = method;
6473 break;
6474 }
6475
6476 return;
6477 }
6478
6479
6480 /* Allocate and return an instance of struct sorted_fields_type with
6481 N fields. */
6482
6483 static struct sorted_fields_type *
6484 sorted_fields_type_new (int n)
6485 {
6486 struct sorted_fields_type *sft;
6487 sft = (sorted_fields_type *) ggc_internal_alloc (sizeof (sorted_fields_type)
6488 + n * sizeof (tree));
6489 sft->len = n;
6490
6491 return sft;
6492 }
6493
6494
6495 /* Perform processing required when the definition of T (a class type)
6496 is complete. */
6497
6498 void
6499 finish_struct_1 (tree t)
6500 {
6501 tree x;
6502 /* A TREE_LIST. The TREE_VALUE of each node is a FUNCTION_DECL. */
6503 tree virtuals = NULL_TREE;
6504
6505 if (COMPLETE_TYPE_P (t))
6506 {
6507 gcc_assert (MAYBE_CLASS_TYPE_P (t));
6508 error ("redefinition of %q#T", t);
6509 popclass ();
6510 return;
6511 }
6512
6513 /* If this type was previously laid out as a forward reference,
6514 make sure we lay it out again. */
6515 TYPE_SIZE (t) = NULL_TREE;
6516 CLASSTYPE_PRIMARY_BINFO (t) = NULL_TREE;
6517
6518 /* Make assumptions about the class; we'll reset the flags if
6519 necessary. */
6520 CLASSTYPE_EMPTY_P (t) = 1;
6521 CLASSTYPE_NEARLY_EMPTY_P (t) = 1;
6522 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) = 0;
6523 CLASSTYPE_LITERAL_P (t) = true;
6524
6525 /* Do end-of-class semantic processing: checking the validity of the
6526 bases and members and add implicitly generated methods. */
6527 check_bases_and_members (t);
6528
6529 /* Find the key method. */
6530 if (TYPE_CONTAINS_VPTR_P (t))
6531 {
6532 /* The Itanium C++ ABI permits the key method to be chosen when
6533 the class is defined -- even though the key method so
6534 selected may later turn out to be an inline function. On
6535 some systems (such as ARM Symbian OS) the key method cannot
6536 be determined until the end of the translation unit. On such
6537 systems, we leave CLASSTYPE_KEY_METHOD set to NULL, which
6538 will cause the class to be added to KEYED_CLASSES. Then, in
6539 finish_file we will determine the key method. */
6540 if (targetm.cxx.key_method_may_be_inline ())
6541 determine_key_method (t);
6542
6543 /* If a polymorphic class has no key method, we may emit the vtable
6544 in every translation unit where the class definition appears. */
6545 if (CLASSTYPE_KEY_METHOD (t) == NULL_TREE)
6546 keyed_classes = tree_cons (NULL_TREE, t, keyed_classes);
6547 }
6548
6549 /* Layout the class itself. */
6550 layout_class_type (t, &virtuals);
6551 if (CLASSTYPE_AS_BASE (t) != t)
6552 /* We use the base type for trivial assignments, and hence it
6553 needs a mode. */
6554 compute_record_mode (CLASSTYPE_AS_BASE (t));
6555
6556 virtuals = modify_all_vtables (t, nreverse (virtuals));
6557
6558 /* If necessary, create the primary vtable for this class. */
6559 if (virtuals || TYPE_CONTAINS_VPTR_P (t))
6560 {
6561 /* We must enter these virtuals into the table. */
6562 if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t))
6563 build_primary_vtable (NULL_TREE, t);
6564 else if (! BINFO_NEW_VTABLE_MARKED (TYPE_BINFO (t)))
6565 /* Here we know enough to change the type of our virtual
6566 function table, but we will wait until later this function. */
6567 build_primary_vtable (CLASSTYPE_PRIMARY_BINFO (t), t);
6568
6569 /* If we're warning about ABI tags, check the types of the new
6570 virtual functions. */
6571 if (warn_abi_tag)
6572 for (tree v = virtuals; v; v = TREE_CHAIN (v))
6573 check_abi_tags (t, TREE_VALUE (v));
6574 }
6575
6576 if (TYPE_CONTAINS_VPTR_P (t))
6577 {
6578 int vindex;
6579 tree fn;
6580
6581 if (BINFO_VTABLE (TYPE_BINFO (t)))
6582 gcc_assert (DECL_VIRTUAL_P (BINFO_VTABLE (TYPE_BINFO (t))));
6583 if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t))
6584 gcc_assert (BINFO_VIRTUALS (TYPE_BINFO (t)) == NULL_TREE);
6585
6586 /* Add entries for virtual functions introduced by this class. */
6587 BINFO_VIRTUALS (TYPE_BINFO (t))
6588 = chainon (BINFO_VIRTUALS (TYPE_BINFO (t)), virtuals);
6589
6590 /* Set DECL_VINDEX for all functions declared in this class. */
6591 for (vindex = 0, fn = BINFO_VIRTUALS (TYPE_BINFO (t));
6592 fn;
6593 fn = TREE_CHAIN (fn),
6594 vindex += (TARGET_VTABLE_USES_DESCRIPTORS
6595 ? TARGET_VTABLE_USES_DESCRIPTORS : 1))
6596 {
6597 tree fndecl = BV_FN (fn);
6598
6599 if (DECL_THUNK_P (fndecl))
6600 /* A thunk. We should never be calling this entry directly
6601 from this vtable -- we'd use the entry for the non
6602 thunk base function. */
6603 DECL_VINDEX (fndecl) = NULL_TREE;
6604 else if (TREE_CODE (DECL_VINDEX (fndecl)) != INTEGER_CST)
6605 DECL_VINDEX (fndecl) = build_int_cst (NULL_TREE, vindex);
6606 }
6607 }
6608
6609 finish_struct_bits (t);
6610 set_method_tm_attributes (t);
6611
6612 /* Complete the rtl for any static member objects of the type we're
6613 working on. */
6614 for (x = TYPE_FIELDS (t); x; x = DECL_CHAIN (x))
6615 if (VAR_P (x) && TREE_STATIC (x)
6616 && TREE_TYPE (x) != error_mark_node
6617 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (x)), t))
6618 DECL_MODE (x) = TYPE_MODE (t);
6619
6620 /* Done with FIELDS...now decide whether to sort these for
6621 faster lookups later.
6622
6623 We use a small number because most searches fail (succeeding
6624 ultimately as the search bores through the inheritance
6625 hierarchy), and we want this failure to occur quickly. */
6626
6627 insert_into_classtype_sorted_fields (TYPE_FIELDS (t), t, 8);
6628
6629 /* Complain if one of the field types requires lower visibility. */
6630 constrain_class_visibility (t);
6631
6632 /* Make the rtl for any new vtables we have created, and unmark
6633 the base types we marked. */
6634 finish_vtbls (t);
6635
6636 /* Build the VTT for T. */
6637 build_vtt (t);
6638
6639 /* This warning does not make sense for Java classes, since they
6640 cannot have destructors. */
6641 if (!TYPE_FOR_JAVA (t) && warn_nonvdtor
6642 && TYPE_POLYMORPHIC_P (t) && accessible_nvdtor_p (t))
6643 warning (OPT_Wnon_virtual_dtor,
6644 "%q#T has virtual functions and accessible"
6645 " non-virtual destructor", t);
6646
6647 complete_vars (t);
6648
6649 if (warn_overloaded_virtual)
6650 warn_hidden (t);
6651
6652 /* Class layout, assignment of virtual table slots, etc., is now
6653 complete. Give the back end a chance to tweak the visibility of
6654 the class or perform any other required target modifications. */
6655 targetm.cxx.adjust_class_at_definition (t);
6656
6657 maybe_suppress_debug_info (t);
6658
6659 if (flag_vtable_verify)
6660 vtv_save_class_info (t);
6661
6662 dump_class_hierarchy (t);
6663
6664 /* Finish debugging output for this type. */
6665 rest_of_type_compilation (t, ! LOCAL_CLASS_P (t));
6666
6667 if (TYPE_TRANSPARENT_AGGR (t))
6668 {
6669 tree field = first_field (t);
6670 if (field == NULL_TREE || error_operand_p (field))
6671 {
6672 error ("type transparent %q#T does not have any fields", t);
6673 TYPE_TRANSPARENT_AGGR (t) = 0;
6674 }
6675 else if (DECL_ARTIFICIAL (field))
6676 {
6677 if (DECL_FIELD_IS_BASE (field))
6678 error ("type transparent class %qT has base classes", t);
6679 else
6680 {
6681 gcc_checking_assert (DECL_VIRTUAL_P (field));
6682 error ("type transparent class %qT has virtual functions", t);
6683 }
6684 TYPE_TRANSPARENT_AGGR (t) = 0;
6685 }
6686 else if (TYPE_MODE (t) != DECL_MODE (field))
6687 {
6688 error ("type transparent %q#T cannot be made transparent because "
6689 "the type of the first field has a different ABI from the "
6690 "class overall", t);
6691 TYPE_TRANSPARENT_AGGR (t) = 0;
6692 }
6693 }
6694 }
6695
6696 /* Insert FIELDS into T for the sorted case if the FIELDS count is
6697 equal to THRESHOLD or greater than THRESHOLD. */
6698
6699 static void
6700 insert_into_classtype_sorted_fields (tree fields, tree t, int threshold)
6701 {
6702 int n_fields = count_fields (fields);
6703 if (n_fields >= threshold)
6704 {
6705 struct sorted_fields_type *field_vec = sorted_fields_type_new (n_fields);
6706 add_fields_to_record_type (fields, field_vec, 0);
6707 qsort (field_vec->elts, n_fields, sizeof (tree), field_decl_cmp);
6708 CLASSTYPE_SORTED_FIELDS (t) = field_vec;
6709 }
6710 }
6711
6712 /* Insert lately defined enum ENUMTYPE into T for the sorted case. */
6713
6714 void
6715 insert_late_enum_def_into_classtype_sorted_fields (tree enumtype, tree t)
6716 {
6717 struct sorted_fields_type *sorted_fields = CLASSTYPE_SORTED_FIELDS (t);
6718 if (sorted_fields)
6719 {
6720 int i;
6721 int n_fields
6722 = list_length (TYPE_VALUES (enumtype)) + sorted_fields->len;
6723 struct sorted_fields_type *field_vec = sorted_fields_type_new (n_fields);
6724
6725 for (i = 0; i < sorted_fields->len; ++i)
6726 field_vec->elts[i] = sorted_fields->elts[i];
6727
6728 add_enum_fields_to_record_type (enumtype, field_vec,
6729 sorted_fields->len);
6730 qsort (field_vec->elts, n_fields, sizeof (tree), field_decl_cmp);
6731 CLASSTYPE_SORTED_FIELDS (t) = field_vec;
6732 }
6733 }
6734
6735 /* When T was built up, the member declarations were added in reverse
6736 order. Rearrange them to declaration order. */
6737
6738 void
6739 unreverse_member_declarations (tree t)
6740 {
6741 tree next;
6742 tree prev;
6743 tree x;
6744
6745 /* The following lists are all in reverse order. Put them in
6746 declaration order now. */
6747 TYPE_METHODS (t) = nreverse (TYPE_METHODS (t));
6748 CLASSTYPE_DECL_LIST (t) = nreverse (CLASSTYPE_DECL_LIST (t));
6749
6750 /* Actually, for the TYPE_FIELDS, only the non TYPE_DECLs are in
6751 reverse order, so we can't just use nreverse. */
6752 prev = NULL_TREE;
6753 for (x = TYPE_FIELDS (t);
6754 x && TREE_CODE (x) != TYPE_DECL;
6755 x = next)
6756 {
6757 next = DECL_CHAIN (x);
6758 DECL_CHAIN (x) = prev;
6759 prev = x;
6760 }
6761 if (prev)
6762 {
6763 DECL_CHAIN (TYPE_FIELDS (t)) = x;
6764 if (prev)
6765 TYPE_FIELDS (t) = prev;
6766 }
6767 }
6768
6769 tree
6770 finish_struct (tree t, tree attributes)
6771 {
6772 location_t saved_loc = input_location;
6773
6774 /* Now that we've got all the field declarations, reverse everything
6775 as necessary. */
6776 unreverse_member_declarations (t);
6777
6778 cplus_decl_attributes (&t, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
6779
6780 /* Nadger the current location so that diagnostics point to the start of
6781 the struct, not the end. */
6782 input_location = DECL_SOURCE_LOCATION (TYPE_NAME (t));
6783
6784 if (processing_template_decl)
6785 {
6786 tree x;
6787
6788 finish_struct_methods (t);
6789 TYPE_SIZE (t) = bitsize_zero_node;
6790 TYPE_SIZE_UNIT (t) = size_zero_node;
6791
6792 /* We need to emit an error message if this type was used as a parameter
6793 and it is an abstract type, even if it is a template. We construct
6794 a simple CLASSTYPE_PURE_VIRTUALS list without taking bases into
6795 account and we call complete_vars with this type, which will check
6796 the PARM_DECLS. Note that while the type is being defined,
6797 CLASSTYPE_PURE_VIRTUALS contains the list of the inline friends
6798 (see CLASSTYPE_INLINE_FRIENDS) so we need to clear it. */
6799 CLASSTYPE_PURE_VIRTUALS (t) = NULL;
6800 for (x = TYPE_METHODS (t); x; x = DECL_CHAIN (x))
6801 if (DECL_PURE_VIRTUAL_P (x))
6802 vec_safe_push (CLASSTYPE_PURE_VIRTUALS (t), x);
6803 complete_vars (t);
6804 /* We need to add the target functions to the CLASSTYPE_METHOD_VEC if
6805 an enclosing scope is a template class, so that this function be
6806 found by lookup_fnfields_1 when the using declaration is not
6807 instantiated yet. */
6808 for (x = TYPE_FIELDS (t); x; x = DECL_CHAIN (x))
6809 if (TREE_CODE (x) == USING_DECL)
6810 {
6811 tree fn = strip_using_decl (x);
6812 if (is_overloaded_fn (fn))
6813 for (; fn; fn = OVL_NEXT (fn))
6814 add_method (t, OVL_CURRENT (fn), x);
6815 }
6816
6817 /* Remember current #pragma pack value. */
6818 TYPE_PRECISION (t) = maximum_field_alignment;
6819
6820 /* Fix up any variants we've already built. */
6821 for (x = TYPE_NEXT_VARIANT (t); x; x = TYPE_NEXT_VARIANT (x))
6822 {
6823 TYPE_SIZE (x) = TYPE_SIZE (t);
6824 TYPE_SIZE_UNIT (x) = TYPE_SIZE_UNIT (t);
6825 TYPE_FIELDS (x) = TYPE_FIELDS (t);
6826 TYPE_METHODS (x) = TYPE_METHODS (t);
6827 }
6828 }
6829 else
6830 finish_struct_1 (t);
6831
6832 input_location = saved_loc;
6833
6834 TYPE_BEING_DEFINED (t) = 0;
6835
6836 if (current_class_type)
6837 popclass ();
6838 else
6839 error ("trying to finish struct, but kicked out due to previous parse errors");
6840
6841 if (processing_template_decl && at_function_scope_p ()
6842 /* Lambdas are defined by the LAMBDA_EXPR. */
6843 && !LAMBDA_TYPE_P (t))
6844 add_stmt (build_min (TAG_DEFN, t));
6845
6846 return t;
6847 }
6848 \f
6849 /* Hash table to avoid endless recursion when handling references. */
6850 static hash_table <pointer_hash <tree_node> > fixed_type_or_null_ref_ht;
6851
6852 /* Return the dynamic type of INSTANCE, if known.
6853 Used to determine whether the virtual function table is needed
6854 or not.
6855
6856 *NONNULL is set iff INSTANCE can be known to be nonnull, regardless
6857 of our knowledge of its type. *NONNULL should be initialized
6858 before this function is called. */
6859
6860 static tree
6861 fixed_type_or_null (tree instance, int *nonnull, int *cdtorp)
6862 {
6863 #define RECUR(T) fixed_type_or_null((T), nonnull, cdtorp)
6864
6865 switch (TREE_CODE (instance))
6866 {
6867 case INDIRECT_REF:
6868 if (POINTER_TYPE_P (TREE_TYPE (instance)))
6869 return NULL_TREE;
6870 else
6871 return RECUR (TREE_OPERAND (instance, 0));
6872
6873 case CALL_EXPR:
6874 /* This is a call to a constructor, hence it's never zero. */
6875 if (TREE_HAS_CONSTRUCTOR (instance))
6876 {
6877 if (nonnull)
6878 *nonnull = 1;
6879 return TREE_TYPE (instance);
6880 }
6881 return NULL_TREE;
6882
6883 case SAVE_EXPR:
6884 /* This is a call to a constructor, hence it's never zero. */
6885 if (TREE_HAS_CONSTRUCTOR (instance))
6886 {
6887 if (nonnull)
6888 *nonnull = 1;
6889 return TREE_TYPE (instance);
6890 }
6891 return RECUR (TREE_OPERAND (instance, 0));
6892
6893 case POINTER_PLUS_EXPR:
6894 case PLUS_EXPR:
6895 case MINUS_EXPR:
6896 if (TREE_CODE (TREE_OPERAND (instance, 0)) == ADDR_EXPR)
6897 return RECUR (TREE_OPERAND (instance, 0));
6898 if (TREE_CODE (TREE_OPERAND (instance, 1)) == INTEGER_CST)
6899 /* Propagate nonnull. */
6900 return RECUR (TREE_OPERAND (instance, 0));
6901
6902 return NULL_TREE;
6903
6904 CASE_CONVERT:
6905 return RECUR (TREE_OPERAND (instance, 0));
6906
6907 case ADDR_EXPR:
6908 instance = TREE_OPERAND (instance, 0);
6909 if (nonnull)
6910 {
6911 /* Just because we see an ADDR_EXPR doesn't mean we're dealing
6912 with a real object -- given &p->f, p can still be null. */
6913 tree t = get_base_address (instance);
6914 /* ??? Probably should check DECL_WEAK here. */
6915 if (t && DECL_P (t))
6916 *nonnull = 1;
6917 }
6918 return RECUR (instance);
6919
6920 case COMPONENT_REF:
6921 /* If this component is really a base class reference, then the field
6922 itself isn't definitive. */
6923 if (DECL_FIELD_IS_BASE (TREE_OPERAND (instance, 1)))
6924 return RECUR (TREE_OPERAND (instance, 0));
6925 return RECUR (TREE_OPERAND (instance, 1));
6926
6927 case VAR_DECL:
6928 case FIELD_DECL:
6929 if (TREE_CODE (TREE_TYPE (instance)) == ARRAY_TYPE
6930 && MAYBE_CLASS_TYPE_P (TREE_TYPE (TREE_TYPE (instance))))
6931 {
6932 if (nonnull)
6933 *nonnull = 1;
6934 return TREE_TYPE (TREE_TYPE (instance));
6935 }
6936 /* fall through... */
6937 case TARGET_EXPR:
6938 case PARM_DECL:
6939 case RESULT_DECL:
6940 if (MAYBE_CLASS_TYPE_P (TREE_TYPE (instance)))
6941 {
6942 if (nonnull)
6943 *nonnull = 1;
6944 return TREE_TYPE (instance);
6945 }
6946 else if (instance == current_class_ptr)
6947 {
6948 if (nonnull)
6949 *nonnull = 1;
6950
6951 /* if we're in a ctor or dtor, we know our type. If
6952 current_class_ptr is set but we aren't in a function, we're in
6953 an NSDMI (and therefore a constructor). */
6954 if (current_scope () != current_function_decl
6955 || (DECL_LANG_SPECIFIC (current_function_decl)
6956 && (DECL_CONSTRUCTOR_P (current_function_decl)
6957 || DECL_DESTRUCTOR_P (current_function_decl))))
6958 {
6959 if (cdtorp)
6960 *cdtorp = 1;
6961 return TREE_TYPE (TREE_TYPE (instance));
6962 }
6963 }
6964 else if (TREE_CODE (TREE_TYPE (instance)) == REFERENCE_TYPE)
6965 {
6966 /* We only need one hash table because it is always left empty. */
6967 if (!fixed_type_or_null_ref_ht.is_created ())
6968 fixed_type_or_null_ref_ht.create (37);
6969
6970 /* Reference variables should be references to objects. */
6971 if (nonnull)
6972 *nonnull = 1;
6973
6974 /* Enter the INSTANCE in a table to prevent recursion; a
6975 variable's initializer may refer to the variable
6976 itself. */
6977 if (VAR_P (instance)
6978 && DECL_INITIAL (instance)
6979 && !type_dependent_expression_p_push (DECL_INITIAL (instance))
6980 && !fixed_type_or_null_ref_ht.find (instance))
6981 {
6982 tree type;
6983 tree_node **slot;
6984
6985 slot = fixed_type_or_null_ref_ht.find_slot (instance, INSERT);
6986 *slot = instance;
6987 type = RECUR (DECL_INITIAL (instance));
6988 fixed_type_or_null_ref_ht.remove_elt (instance);
6989
6990 return type;
6991 }
6992 }
6993 return NULL_TREE;
6994
6995 default:
6996 return NULL_TREE;
6997 }
6998 #undef RECUR
6999 }
7000
7001 /* Return nonzero if the dynamic type of INSTANCE is known, and
7002 equivalent to the static type. We also handle the case where
7003 INSTANCE is really a pointer. Return negative if this is a
7004 ctor/dtor. There the dynamic type is known, but this might not be
7005 the most derived base of the original object, and hence virtual
7006 bases may not be laid out according to this type.
7007
7008 Used to determine whether the virtual function table is needed
7009 or not.
7010
7011 *NONNULL is set iff INSTANCE can be known to be nonnull, regardless
7012 of our knowledge of its type. *NONNULL should be initialized
7013 before this function is called. */
7014
7015 int
7016 resolves_to_fixed_type_p (tree instance, int* nonnull)
7017 {
7018 tree t = TREE_TYPE (instance);
7019 int cdtorp = 0;
7020 tree fixed;
7021
7022 /* processing_template_decl can be false in a template if we're in
7023 fold_non_dependent_expr, but we still want to suppress this check. */
7024 if (in_template_function ())
7025 {
7026 /* In a template we only care about the type of the result. */
7027 if (nonnull)
7028 *nonnull = true;
7029 return true;
7030 }
7031
7032 fixed = fixed_type_or_null (instance, nonnull, &cdtorp);
7033 if (fixed == NULL_TREE)
7034 return 0;
7035 if (POINTER_TYPE_P (t))
7036 t = TREE_TYPE (t);
7037 if (!same_type_ignoring_top_level_qualifiers_p (t, fixed))
7038 return 0;
7039 return cdtorp ? -1 : 1;
7040 }
7041
7042 \f
7043 void
7044 init_class_processing (void)
7045 {
7046 current_class_depth = 0;
7047 current_class_stack_size = 10;
7048 current_class_stack
7049 = XNEWVEC (struct class_stack_node, current_class_stack_size);
7050 vec_alloc (local_classes, 8);
7051 sizeof_biggest_empty_class = size_zero_node;
7052
7053 ridpointers[(int) RID_PUBLIC] = access_public_node;
7054 ridpointers[(int) RID_PRIVATE] = access_private_node;
7055 ridpointers[(int) RID_PROTECTED] = access_protected_node;
7056 }
7057
7058 /* Restore the cached PREVIOUS_CLASS_LEVEL. */
7059
7060 static void
7061 restore_class_cache (void)
7062 {
7063 tree type;
7064
7065 /* We are re-entering the same class we just left, so we don't
7066 have to search the whole inheritance matrix to find all the
7067 decls to bind again. Instead, we install the cached
7068 class_shadowed list and walk through it binding names. */
7069 push_binding_level (previous_class_level);
7070 class_binding_level = previous_class_level;
7071 /* Restore IDENTIFIER_TYPE_VALUE. */
7072 for (type = class_binding_level->type_shadowed;
7073 type;
7074 type = TREE_CHAIN (type))
7075 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (type), TREE_TYPE (type));
7076 }
7077
7078 /* Set global variables CURRENT_CLASS_NAME and CURRENT_CLASS_TYPE as
7079 appropriate for TYPE.
7080
7081 So that we may avoid calls to lookup_name, we cache the _TYPE
7082 nodes of local TYPE_DECLs in the TREE_TYPE field of the name.
7083
7084 For multiple inheritance, we perform a two-pass depth-first search
7085 of the type lattice. */
7086
7087 void
7088 pushclass (tree type)
7089 {
7090 class_stack_node_t csn;
7091
7092 type = TYPE_MAIN_VARIANT (type);
7093
7094 /* Make sure there is enough room for the new entry on the stack. */
7095 if (current_class_depth + 1 >= current_class_stack_size)
7096 {
7097 current_class_stack_size *= 2;
7098 current_class_stack
7099 = XRESIZEVEC (struct class_stack_node, current_class_stack,
7100 current_class_stack_size);
7101 }
7102
7103 /* Insert a new entry on the class stack. */
7104 csn = current_class_stack + current_class_depth;
7105 csn->name = current_class_name;
7106 csn->type = current_class_type;
7107 csn->access = current_access_specifier;
7108 csn->names_used = 0;
7109 csn->hidden = 0;
7110 current_class_depth++;
7111
7112 /* Now set up the new type. */
7113 current_class_name = TYPE_NAME (type);
7114 if (TREE_CODE (current_class_name) == TYPE_DECL)
7115 current_class_name = DECL_NAME (current_class_name);
7116 current_class_type = type;
7117
7118 /* By default, things in classes are private, while things in
7119 structures or unions are public. */
7120 current_access_specifier = (CLASSTYPE_DECLARED_CLASS (type)
7121 ? access_private_node
7122 : access_public_node);
7123
7124 if (previous_class_level
7125 && type != previous_class_level->this_entity
7126 && current_class_depth == 1)
7127 {
7128 /* Forcibly remove any old class remnants. */
7129 invalidate_class_lookup_cache ();
7130 }
7131
7132 if (!previous_class_level
7133 || type != previous_class_level->this_entity
7134 || current_class_depth > 1)
7135 pushlevel_class ();
7136 else
7137 restore_class_cache ();
7138 }
7139
7140 /* When we exit a toplevel class scope, we save its binding level so
7141 that we can restore it quickly. Here, we've entered some other
7142 class, so we must invalidate our cache. */
7143
7144 void
7145 invalidate_class_lookup_cache (void)
7146 {
7147 previous_class_level = NULL;
7148 }
7149
7150 /* Get out of the current class scope. If we were in a class scope
7151 previously, that is the one popped to. */
7152
7153 void
7154 popclass (void)
7155 {
7156 poplevel_class ();
7157
7158 current_class_depth--;
7159 current_class_name = current_class_stack[current_class_depth].name;
7160 current_class_type = current_class_stack[current_class_depth].type;
7161 current_access_specifier = current_class_stack[current_class_depth].access;
7162 if (current_class_stack[current_class_depth].names_used)
7163 splay_tree_delete (current_class_stack[current_class_depth].names_used);
7164 }
7165
7166 /* Mark the top of the class stack as hidden. */
7167
7168 void
7169 push_class_stack (void)
7170 {
7171 if (current_class_depth)
7172 ++current_class_stack[current_class_depth - 1].hidden;
7173 }
7174
7175 /* Mark the top of the class stack as un-hidden. */
7176
7177 void
7178 pop_class_stack (void)
7179 {
7180 if (current_class_depth)
7181 --current_class_stack[current_class_depth - 1].hidden;
7182 }
7183
7184 /* Returns 1 if the class type currently being defined is either T or
7185 a nested type of T. */
7186
7187 bool
7188 currently_open_class (tree t)
7189 {
7190 int i;
7191
7192 if (!CLASS_TYPE_P (t))
7193 return false;
7194
7195 t = TYPE_MAIN_VARIANT (t);
7196
7197 /* We start looking from 1 because entry 0 is from global scope,
7198 and has no type. */
7199 for (i = current_class_depth; i > 0; --i)
7200 {
7201 tree c;
7202 if (i == current_class_depth)
7203 c = current_class_type;
7204 else
7205 {
7206 if (current_class_stack[i].hidden)
7207 break;
7208 c = current_class_stack[i].type;
7209 }
7210 if (!c)
7211 continue;
7212 if (same_type_p (c, t))
7213 return true;
7214 }
7215 return false;
7216 }
7217
7218 /* If either current_class_type or one of its enclosing classes are derived
7219 from T, return the appropriate type. Used to determine how we found
7220 something via unqualified lookup. */
7221
7222 tree
7223 currently_open_derived_class (tree t)
7224 {
7225 int i;
7226
7227 /* The bases of a dependent type are unknown. */
7228 if (dependent_type_p (t))
7229 return NULL_TREE;
7230
7231 if (!current_class_type)
7232 return NULL_TREE;
7233
7234 if (DERIVED_FROM_P (t, current_class_type))
7235 return current_class_type;
7236
7237 for (i = current_class_depth - 1; i > 0; --i)
7238 {
7239 if (current_class_stack[i].hidden)
7240 break;
7241 if (DERIVED_FROM_P (t, current_class_stack[i].type))
7242 return current_class_stack[i].type;
7243 }
7244
7245 return NULL_TREE;
7246 }
7247
7248 /* Returns the innermost class type which is not a lambda closure type. */
7249
7250 tree
7251 current_nonlambda_class_type (void)
7252 {
7253 int i;
7254
7255 /* We start looking from 1 because entry 0 is from global scope,
7256 and has no type. */
7257 for (i = current_class_depth; i > 0; --i)
7258 {
7259 tree c;
7260 if (i == current_class_depth)
7261 c = current_class_type;
7262 else
7263 {
7264 if (current_class_stack[i].hidden)
7265 break;
7266 c = current_class_stack[i].type;
7267 }
7268 if (!c)
7269 continue;
7270 if (!LAMBDA_TYPE_P (c))
7271 return c;
7272 }
7273 return NULL_TREE;
7274 }
7275
7276 /* When entering a class scope, all enclosing class scopes' names with
7277 static meaning (static variables, static functions, types and
7278 enumerators) have to be visible. This recursive function calls
7279 pushclass for all enclosing class contexts until global or a local
7280 scope is reached. TYPE is the enclosed class. */
7281
7282 void
7283 push_nested_class (tree type)
7284 {
7285 /* A namespace might be passed in error cases, like A::B:C. */
7286 if (type == NULL_TREE
7287 || !CLASS_TYPE_P (type))
7288 return;
7289
7290 push_nested_class (DECL_CONTEXT (TYPE_MAIN_DECL (type)));
7291
7292 pushclass (type);
7293 }
7294
7295 /* Undoes a push_nested_class call. */
7296
7297 void
7298 pop_nested_class (void)
7299 {
7300 tree context = DECL_CONTEXT (TYPE_MAIN_DECL (current_class_type));
7301
7302 popclass ();
7303 if (context && CLASS_TYPE_P (context))
7304 pop_nested_class ();
7305 }
7306
7307 /* Returns the number of extern "LANG" blocks we are nested within. */
7308
7309 int
7310 current_lang_depth (void)
7311 {
7312 return vec_safe_length (current_lang_base);
7313 }
7314
7315 /* Set global variables CURRENT_LANG_NAME to appropriate value
7316 so that behavior of name-mangling machinery is correct. */
7317
7318 void
7319 push_lang_context (tree name)
7320 {
7321 vec_safe_push (current_lang_base, current_lang_name);
7322
7323 if (name == lang_name_cplusplus)
7324 {
7325 current_lang_name = name;
7326 }
7327 else if (name == lang_name_java)
7328 {
7329 current_lang_name = name;
7330 /* DECL_IGNORED_P is initially set for these types, to avoid clutter.
7331 (See record_builtin_java_type in decl.c.) However, that causes
7332 incorrect debug entries if these types are actually used.
7333 So we re-enable debug output after extern "Java". */
7334 DECL_IGNORED_P (TYPE_NAME (java_byte_type_node)) = 0;
7335 DECL_IGNORED_P (TYPE_NAME (java_short_type_node)) = 0;
7336 DECL_IGNORED_P (TYPE_NAME (java_int_type_node)) = 0;
7337 DECL_IGNORED_P (TYPE_NAME (java_long_type_node)) = 0;
7338 DECL_IGNORED_P (TYPE_NAME (java_float_type_node)) = 0;
7339 DECL_IGNORED_P (TYPE_NAME (java_double_type_node)) = 0;
7340 DECL_IGNORED_P (TYPE_NAME (java_char_type_node)) = 0;
7341 DECL_IGNORED_P (TYPE_NAME (java_boolean_type_node)) = 0;
7342 }
7343 else if (name == lang_name_c)
7344 {
7345 current_lang_name = name;
7346 }
7347 else
7348 error ("language string %<\"%E\"%> not recognized", name);
7349 }
7350
7351 /* Get out of the current language scope. */
7352
7353 void
7354 pop_lang_context (void)
7355 {
7356 current_lang_name = current_lang_base->pop ();
7357 }
7358 \f
7359 /* Type instantiation routines. */
7360
7361 /* Given an OVERLOAD and a TARGET_TYPE, return the function that
7362 matches the TARGET_TYPE. If there is no satisfactory match, return
7363 error_mark_node, and issue an error & warning messages under
7364 control of FLAGS. Permit pointers to member function if FLAGS
7365 permits. If TEMPLATE_ONLY, the name of the overloaded function was
7366 a template-id, and EXPLICIT_TARGS are the explicitly provided
7367 template arguments.
7368
7369 If OVERLOAD is for one or more member functions, then ACCESS_PATH
7370 is the base path used to reference those member functions. If
7371 the address is resolved to a member function, access checks will be
7372 performed and errors issued if appropriate. */
7373
7374 static tree
7375 resolve_address_of_overloaded_function (tree target_type,
7376 tree overload,
7377 tsubst_flags_t flags,
7378 bool template_only,
7379 tree explicit_targs,
7380 tree access_path)
7381 {
7382 /* Here's what the standard says:
7383
7384 [over.over]
7385
7386 If the name is a function template, template argument deduction
7387 is done, and if the argument deduction succeeds, the deduced
7388 arguments are used to generate a single template function, which
7389 is added to the set of overloaded functions considered.
7390
7391 Non-member functions and static member functions match targets of
7392 type "pointer-to-function" or "reference-to-function." Nonstatic
7393 member functions match targets of type "pointer-to-member
7394 function;" the function type of the pointer to member is used to
7395 select the member function from the set of overloaded member
7396 functions. If a nonstatic member function is selected, the
7397 reference to the overloaded function name is required to have the
7398 form of a pointer to member as described in 5.3.1.
7399
7400 If more than one function is selected, any template functions in
7401 the set are eliminated if the set also contains a non-template
7402 function, and any given template function is eliminated if the
7403 set contains a second template function that is more specialized
7404 than the first according to the partial ordering rules 14.5.5.2.
7405 After such eliminations, if any, there shall remain exactly one
7406 selected function. */
7407
7408 int is_ptrmem = 0;
7409 /* We store the matches in a TREE_LIST rooted here. The functions
7410 are the TREE_PURPOSE, not the TREE_VALUE, in this list, for easy
7411 interoperability with most_specialized_instantiation. */
7412 tree matches = NULL_TREE;
7413 tree fn;
7414 tree target_fn_type;
7415
7416 /* By the time we get here, we should be seeing only real
7417 pointer-to-member types, not the internal POINTER_TYPE to
7418 METHOD_TYPE representation. */
7419 gcc_assert (!TYPE_PTR_P (target_type)
7420 || TREE_CODE (TREE_TYPE (target_type)) != METHOD_TYPE);
7421
7422 gcc_assert (is_overloaded_fn (overload));
7423
7424 /* Check that the TARGET_TYPE is reasonable. */
7425 if (TYPE_PTRFN_P (target_type)
7426 || TYPE_REFFN_P (target_type))
7427 /* This is OK. */;
7428 else if (TYPE_PTRMEMFUNC_P (target_type))
7429 /* This is OK, too. */
7430 is_ptrmem = 1;
7431 else if (TREE_CODE (target_type) == FUNCTION_TYPE)
7432 /* This is OK, too. This comes from a conversion to reference
7433 type. */
7434 target_type = build_reference_type (target_type);
7435 else
7436 {
7437 if (flags & tf_error)
7438 error ("cannot resolve overloaded function %qD based on"
7439 " conversion to type %qT",
7440 DECL_NAME (OVL_FUNCTION (overload)), target_type);
7441 return error_mark_node;
7442 }
7443
7444 /* Non-member functions and static member functions match targets of type
7445 "pointer-to-function" or "reference-to-function." Nonstatic member
7446 functions match targets of type "pointer-to-member-function;" the
7447 function type of the pointer to member is used to select the member
7448 function from the set of overloaded member functions.
7449
7450 So figure out the FUNCTION_TYPE that we want to match against. */
7451 target_fn_type = static_fn_type (target_type);
7452
7453 /* If we can find a non-template function that matches, we can just
7454 use it. There's no point in generating template instantiations
7455 if we're just going to throw them out anyhow. But, of course, we
7456 can only do this when we don't *need* a template function. */
7457 if (!template_only)
7458 {
7459 tree fns;
7460
7461 for (fns = overload; fns; fns = OVL_NEXT (fns))
7462 {
7463 tree fn = OVL_CURRENT (fns);
7464
7465 if (TREE_CODE (fn) == TEMPLATE_DECL)
7466 /* We're not looking for templates just yet. */
7467 continue;
7468
7469 if ((TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
7470 != is_ptrmem)
7471 /* We're looking for a non-static member, and this isn't
7472 one, or vice versa. */
7473 continue;
7474
7475 /* Ignore functions which haven't been explicitly
7476 declared. */
7477 if (DECL_ANTICIPATED (fn))
7478 continue;
7479
7480 /* See if there's a match. */
7481 if (same_type_p (target_fn_type, static_fn_type (fn)))
7482 matches = tree_cons (fn, NULL_TREE, matches);
7483 }
7484 }
7485
7486 /* Now, if we've already got a match (or matches), there's no need
7487 to proceed to the template functions. But, if we don't have a
7488 match we need to look at them, too. */
7489 if (!matches)
7490 {
7491 tree target_arg_types;
7492 tree target_ret_type;
7493 tree fns;
7494 tree *args;
7495 unsigned int nargs, ia;
7496 tree arg;
7497
7498 target_arg_types = TYPE_ARG_TYPES (target_fn_type);
7499 target_ret_type = TREE_TYPE (target_fn_type);
7500
7501 nargs = list_length (target_arg_types);
7502 args = XALLOCAVEC (tree, nargs);
7503 for (arg = target_arg_types, ia = 0;
7504 arg != NULL_TREE && arg != void_list_node;
7505 arg = TREE_CHAIN (arg), ++ia)
7506 args[ia] = TREE_VALUE (arg);
7507 nargs = ia;
7508
7509 for (fns = overload; fns; fns = OVL_NEXT (fns))
7510 {
7511 tree fn = OVL_CURRENT (fns);
7512 tree instantiation;
7513 tree targs;
7514
7515 if (TREE_CODE (fn) != TEMPLATE_DECL)
7516 /* We're only looking for templates. */
7517 continue;
7518
7519 if ((TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
7520 != is_ptrmem)
7521 /* We're not looking for a non-static member, and this is
7522 one, or vice versa. */
7523 continue;
7524
7525 tree ret = target_ret_type;
7526
7527 /* If the template has a deduced return type, don't expose it to
7528 template argument deduction. */
7529 if (undeduced_auto_decl (fn))
7530 ret = NULL_TREE;
7531
7532 /* Try to do argument deduction. */
7533 targs = make_tree_vec (DECL_NTPARMS (fn));
7534 instantiation = fn_type_unification (fn, explicit_targs, targs, args,
7535 nargs, ret,
7536 DEDUCE_EXACT, LOOKUP_NORMAL,
7537 false, false);
7538 if (instantiation == error_mark_node)
7539 /* Instantiation failed. */
7540 continue;
7541
7542 /* And now force instantiation to do return type deduction. */
7543 if (undeduced_auto_decl (instantiation))
7544 {
7545 ++function_depth;
7546 instantiate_decl (instantiation, /*defer*/false, /*class*/false);
7547 --function_depth;
7548
7549 require_deduced_type (instantiation);
7550 }
7551
7552 /* See if there's a match. */
7553 if (same_type_p (target_fn_type, static_fn_type (instantiation)))
7554 matches = tree_cons (instantiation, fn, matches);
7555 }
7556
7557 /* Now, remove all but the most specialized of the matches. */
7558 if (matches)
7559 {
7560 tree match = most_specialized_instantiation (matches);
7561
7562 if (match != error_mark_node)
7563 matches = tree_cons (TREE_PURPOSE (match),
7564 NULL_TREE,
7565 NULL_TREE);
7566 }
7567 }
7568
7569 /* Now we should have exactly one function in MATCHES. */
7570 if (matches == NULL_TREE)
7571 {
7572 /* There were *no* matches. */
7573 if (flags & tf_error)
7574 {
7575 error ("no matches converting function %qD to type %q#T",
7576 DECL_NAME (OVL_CURRENT (overload)),
7577 target_type);
7578
7579 print_candidates (overload);
7580 }
7581 return error_mark_node;
7582 }
7583 else if (TREE_CHAIN (matches))
7584 {
7585 /* There were too many matches. First check if they're all
7586 the same function. */
7587 tree match = NULL_TREE;
7588
7589 fn = TREE_PURPOSE (matches);
7590
7591 /* For multi-versioned functions, more than one match is just fine and
7592 decls_match will return false as they are different. */
7593 for (match = TREE_CHAIN (matches); match; match = TREE_CHAIN (match))
7594 if (!decls_match (fn, TREE_PURPOSE (match))
7595 && !targetm.target_option.function_versions
7596 (fn, TREE_PURPOSE (match)))
7597 break;
7598
7599 if (match)
7600 {
7601 if (flags & tf_error)
7602 {
7603 error ("converting overloaded function %qD to type %q#T is ambiguous",
7604 DECL_NAME (OVL_FUNCTION (overload)),
7605 target_type);
7606
7607 /* Since print_candidates expects the functions in the
7608 TREE_VALUE slot, we flip them here. */
7609 for (match = matches; match; match = TREE_CHAIN (match))
7610 TREE_VALUE (match) = TREE_PURPOSE (match);
7611
7612 print_candidates (matches);
7613 }
7614
7615 return error_mark_node;
7616 }
7617 }
7618
7619 /* Good, exactly one match. Now, convert it to the correct type. */
7620 fn = TREE_PURPOSE (matches);
7621
7622 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
7623 && !(flags & tf_ptrmem_ok) && !flag_ms_extensions)
7624 {
7625 static int explained;
7626
7627 if (!(flags & tf_error))
7628 return error_mark_node;
7629
7630 permerror (input_location, "assuming pointer to member %qD", fn);
7631 if (!explained)
7632 {
7633 inform (input_location, "(a pointer to member can only be formed with %<&%E%>)", fn);
7634 explained = 1;
7635 }
7636 }
7637
7638 /* If a pointer to a function that is multi-versioned is requested, the
7639 pointer to the dispatcher function is returned instead. This works
7640 well because indirectly calling the function will dispatch the right
7641 function version at run-time. */
7642 if (DECL_FUNCTION_VERSIONED (fn))
7643 {
7644 fn = get_function_version_dispatcher (fn);
7645 if (fn == NULL)
7646 return error_mark_node;
7647 /* Mark all the versions corresponding to the dispatcher as used. */
7648 if (!(flags & tf_conv))
7649 mark_versions_used (fn);
7650 }
7651
7652 /* If we're doing overload resolution purely for the purpose of
7653 determining conversion sequences, we should not consider the
7654 function used. If this conversion sequence is selected, the
7655 function will be marked as used at this point. */
7656 if (!(flags & tf_conv))
7657 {
7658 /* Make =delete work with SFINAE. */
7659 if (DECL_DELETED_FN (fn) && !(flags & tf_error))
7660 return error_mark_node;
7661
7662 mark_used (fn);
7663 }
7664
7665 /* We could not check access to member functions when this
7666 expression was originally created since we did not know at that
7667 time to which function the expression referred. */
7668 if (DECL_FUNCTION_MEMBER_P (fn))
7669 {
7670 gcc_assert (access_path);
7671 perform_or_defer_access_check (access_path, fn, fn, flags);
7672 }
7673
7674 if (TYPE_PTRFN_P (target_type) || TYPE_PTRMEMFUNC_P (target_type))
7675 return cp_build_addr_expr (fn, flags);
7676 else
7677 {
7678 /* The target must be a REFERENCE_TYPE. Above, cp_build_unary_op
7679 will mark the function as addressed, but here we must do it
7680 explicitly. */
7681 cxx_mark_addressable (fn);
7682
7683 return fn;
7684 }
7685 }
7686
7687 /* This function will instantiate the type of the expression given in
7688 RHS to match the type of LHSTYPE. If errors exist, then return
7689 error_mark_node. FLAGS is a bit mask. If TF_ERROR is set, then
7690 we complain on errors. If we are not complaining, never modify rhs,
7691 as overload resolution wants to try many possible instantiations, in
7692 the hope that at least one will work.
7693
7694 For non-recursive calls, LHSTYPE should be a function, pointer to
7695 function, or a pointer to member function. */
7696
7697 tree
7698 instantiate_type (tree lhstype, tree rhs, tsubst_flags_t flags)
7699 {
7700 tsubst_flags_t flags_in = flags;
7701 tree access_path = NULL_TREE;
7702
7703 flags &= ~tf_ptrmem_ok;
7704
7705 if (lhstype == unknown_type_node)
7706 {
7707 if (flags & tf_error)
7708 error ("not enough type information");
7709 return error_mark_node;
7710 }
7711
7712 if (TREE_TYPE (rhs) != NULL_TREE && ! (type_unknown_p (rhs)))
7713 {
7714 tree fntype = non_reference (lhstype);
7715 if (same_type_p (fntype, TREE_TYPE (rhs)))
7716 return rhs;
7717 if (flag_ms_extensions
7718 && TYPE_PTRMEMFUNC_P (fntype)
7719 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (rhs)))
7720 /* Microsoft allows `A::f' to be resolved to a
7721 pointer-to-member. */
7722 ;
7723 else
7724 {
7725 if (flags & tf_error)
7726 error ("cannot convert %qE from type %qT to type %qT",
7727 rhs, TREE_TYPE (rhs), fntype);
7728 return error_mark_node;
7729 }
7730 }
7731
7732 if (BASELINK_P (rhs))
7733 {
7734 access_path = BASELINK_ACCESS_BINFO (rhs);
7735 rhs = BASELINK_FUNCTIONS (rhs);
7736 }
7737
7738 /* If we are in a template, and have a NON_DEPENDENT_EXPR, we cannot
7739 deduce any type information. */
7740 if (TREE_CODE (rhs) == NON_DEPENDENT_EXPR)
7741 {
7742 if (flags & tf_error)
7743 error ("not enough type information");
7744 return error_mark_node;
7745 }
7746
7747 /* There only a few kinds of expressions that may have a type
7748 dependent on overload resolution. */
7749 gcc_assert (TREE_CODE (rhs) == ADDR_EXPR
7750 || TREE_CODE (rhs) == COMPONENT_REF
7751 || is_overloaded_fn (rhs)
7752 || (flag_ms_extensions && TREE_CODE (rhs) == FUNCTION_DECL));
7753
7754 /* This should really only be used when attempting to distinguish
7755 what sort of a pointer to function we have. For now, any
7756 arithmetic operation which is not supported on pointers
7757 is rejected as an error. */
7758
7759 switch (TREE_CODE (rhs))
7760 {
7761 case COMPONENT_REF:
7762 {
7763 tree member = TREE_OPERAND (rhs, 1);
7764
7765 member = instantiate_type (lhstype, member, flags);
7766 if (member != error_mark_node
7767 && TREE_SIDE_EFFECTS (TREE_OPERAND (rhs, 0)))
7768 /* Do not lose object's side effects. */
7769 return build2 (COMPOUND_EXPR, TREE_TYPE (member),
7770 TREE_OPERAND (rhs, 0), member);
7771 return member;
7772 }
7773
7774 case OFFSET_REF:
7775 rhs = TREE_OPERAND (rhs, 1);
7776 if (BASELINK_P (rhs))
7777 return instantiate_type (lhstype, rhs, flags_in);
7778
7779 /* This can happen if we are forming a pointer-to-member for a
7780 member template. */
7781 gcc_assert (TREE_CODE (rhs) == TEMPLATE_ID_EXPR);
7782
7783 /* Fall through. */
7784
7785 case TEMPLATE_ID_EXPR:
7786 {
7787 tree fns = TREE_OPERAND (rhs, 0);
7788 tree args = TREE_OPERAND (rhs, 1);
7789
7790 return
7791 resolve_address_of_overloaded_function (lhstype, fns, flags_in,
7792 /*template_only=*/true,
7793 args, access_path);
7794 }
7795
7796 case OVERLOAD:
7797 case FUNCTION_DECL:
7798 return
7799 resolve_address_of_overloaded_function (lhstype, rhs, flags_in,
7800 /*template_only=*/false,
7801 /*explicit_targs=*/NULL_TREE,
7802 access_path);
7803
7804 case ADDR_EXPR:
7805 {
7806 if (PTRMEM_OK_P (rhs))
7807 flags |= tf_ptrmem_ok;
7808
7809 return instantiate_type (lhstype, TREE_OPERAND (rhs, 0), flags);
7810 }
7811
7812 case ERROR_MARK:
7813 return error_mark_node;
7814
7815 default:
7816 gcc_unreachable ();
7817 }
7818 return error_mark_node;
7819 }
7820 \f
7821 /* Return the name of the virtual function pointer field
7822 (as an IDENTIFIER_NODE) for the given TYPE. Note that
7823 this may have to look back through base types to find the
7824 ultimate field name. (For single inheritance, these could
7825 all be the same name. Who knows for multiple inheritance). */
7826
7827 static tree
7828 get_vfield_name (tree type)
7829 {
7830 tree binfo, base_binfo;
7831 char *buf;
7832
7833 for (binfo = TYPE_BINFO (type);
7834 BINFO_N_BASE_BINFOS (binfo);
7835 binfo = base_binfo)
7836 {
7837 base_binfo = BINFO_BASE_BINFO (binfo, 0);
7838
7839 if (BINFO_VIRTUAL_P (base_binfo)
7840 || !TYPE_CONTAINS_VPTR_P (BINFO_TYPE (base_binfo)))
7841 break;
7842 }
7843
7844 type = BINFO_TYPE (binfo);
7845 buf = (char *) alloca (sizeof (VFIELD_NAME_FORMAT)
7846 + TYPE_NAME_LENGTH (type) + 2);
7847 sprintf (buf, VFIELD_NAME_FORMAT,
7848 IDENTIFIER_POINTER (constructor_name (type)));
7849 return get_identifier (buf);
7850 }
7851
7852 void
7853 print_class_statistics (void)
7854 {
7855 if (! GATHER_STATISTICS)
7856 return;
7857
7858 fprintf (stderr, "convert_harshness = %d\n", n_convert_harshness);
7859 fprintf (stderr, "compute_conversion_costs = %d\n", n_compute_conversion_costs);
7860 if (n_vtables)
7861 {
7862 fprintf (stderr, "vtables = %d; vtable searches = %d\n",
7863 n_vtables, n_vtable_searches);
7864 fprintf (stderr, "vtable entries = %d; vtable elems = %d\n",
7865 n_vtable_entries, n_vtable_elems);
7866 }
7867 }
7868
7869 /* Build a dummy reference to ourselves so Derived::Base (and A::A) works,
7870 according to [class]:
7871 The class-name is also inserted
7872 into the scope of the class itself. For purposes of access checking,
7873 the inserted class name is treated as if it were a public member name. */
7874
7875 void
7876 build_self_reference (void)
7877 {
7878 tree name = constructor_name (current_class_type);
7879 tree value = build_lang_decl (TYPE_DECL, name, current_class_type);
7880 tree saved_cas;
7881
7882 DECL_NONLOCAL (value) = 1;
7883 DECL_CONTEXT (value) = current_class_type;
7884 DECL_ARTIFICIAL (value) = 1;
7885 SET_DECL_SELF_REFERENCE_P (value);
7886 set_underlying_type (value);
7887
7888 if (processing_template_decl)
7889 value = push_template_decl (value);
7890
7891 saved_cas = current_access_specifier;
7892 current_access_specifier = access_public_node;
7893 finish_member_declaration (value);
7894 current_access_specifier = saved_cas;
7895 }
7896
7897 /* Returns 1 if TYPE contains only padding bytes. */
7898
7899 int
7900 is_empty_class (tree type)
7901 {
7902 if (type == error_mark_node)
7903 return 0;
7904
7905 if (! CLASS_TYPE_P (type))
7906 return 0;
7907
7908 /* In G++ 3.2, whether or not a class was empty was determined by
7909 looking at its size. */
7910 if (abi_version_at_least (2))
7911 return CLASSTYPE_EMPTY_P (type);
7912 else
7913 return integer_zerop (CLASSTYPE_SIZE (type));
7914 }
7915
7916 /* Returns true if TYPE contains an empty class. */
7917
7918 static bool
7919 contains_empty_class_p (tree type)
7920 {
7921 if (is_empty_class (type))
7922 return true;
7923 if (CLASS_TYPE_P (type))
7924 {
7925 tree field;
7926 tree binfo;
7927 tree base_binfo;
7928 int i;
7929
7930 for (binfo = TYPE_BINFO (type), i = 0;
7931 BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
7932 if (contains_empty_class_p (BINFO_TYPE (base_binfo)))
7933 return true;
7934 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
7935 if (TREE_CODE (field) == FIELD_DECL
7936 && !DECL_ARTIFICIAL (field)
7937 && is_empty_class (TREE_TYPE (field)))
7938 return true;
7939 }
7940 else if (TREE_CODE (type) == ARRAY_TYPE)
7941 return contains_empty_class_p (TREE_TYPE (type));
7942 return false;
7943 }
7944
7945 /* Returns true if TYPE contains no actual data, just various
7946 possible combinations of empty classes and possibly a vptr. */
7947
7948 bool
7949 is_really_empty_class (tree type)
7950 {
7951 if (CLASS_TYPE_P (type))
7952 {
7953 tree field;
7954 tree binfo;
7955 tree base_binfo;
7956 int i;
7957
7958 /* CLASSTYPE_EMPTY_P isn't set properly until the class is actually laid
7959 out, but we'd like to be able to check this before then. */
7960 if (COMPLETE_TYPE_P (type) && is_empty_class (type))
7961 return true;
7962
7963 for (binfo = TYPE_BINFO (type), i = 0;
7964 BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
7965 if (!is_really_empty_class (BINFO_TYPE (base_binfo)))
7966 return false;
7967 for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
7968 if (TREE_CODE (field) == FIELD_DECL
7969 && !DECL_ARTIFICIAL (field)
7970 && !is_really_empty_class (TREE_TYPE (field)))
7971 return false;
7972 return true;
7973 }
7974 else if (TREE_CODE (type) == ARRAY_TYPE)
7975 return is_really_empty_class (TREE_TYPE (type));
7976 return false;
7977 }
7978
7979 /* Note that NAME was looked up while the current class was being
7980 defined and that the result of that lookup was DECL. */
7981
7982 void
7983 maybe_note_name_used_in_class (tree name, tree decl)
7984 {
7985 splay_tree names_used;
7986
7987 /* If we're not defining a class, there's nothing to do. */
7988 if (!(innermost_scope_kind() == sk_class
7989 && TYPE_BEING_DEFINED (current_class_type)
7990 && !LAMBDA_TYPE_P (current_class_type)))
7991 return;
7992
7993 /* If there's already a binding for this NAME, then we don't have
7994 anything to worry about. */
7995 if (lookup_member (current_class_type, name,
7996 /*protect=*/0, /*want_type=*/false, tf_warning_or_error))
7997 return;
7998
7999 if (!current_class_stack[current_class_depth - 1].names_used)
8000 current_class_stack[current_class_depth - 1].names_used
8001 = splay_tree_new (splay_tree_compare_pointers, 0, 0);
8002 names_used = current_class_stack[current_class_depth - 1].names_used;
8003
8004 splay_tree_insert (names_used,
8005 (splay_tree_key) name,
8006 (splay_tree_value) decl);
8007 }
8008
8009 /* Note that NAME was declared (as DECL) in the current class. Check
8010 to see that the declaration is valid. */
8011
8012 void
8013 note_name_declared_in_class (tree name, tree decl)
8014 {
8015 splay_tree names_used;
8016 splay_tree_node n;
8017
8018 /* Look to see if we ever used this name. */
8019 names_used
8020 = current_class_stack[current_class_depth - 1].names_used;
8021 if (!names_used)
8022 return;
8023 /* The C language allows members to be declared with a type of the same
8024 name, and the C++ standard says this diagnostic is not required. So
8025 allow it in extern "C" blocks unless predantic is specified.
8026 Allow it in all cases if -ms-extensions is specified. */
8027 if ((!pedantic && current_lang_name == lang_name_c)
8028 || flag_ms_extensions)
8029 return;
8030 n = splay_tree_lookup (names_used, (splay_tree_key) name);
8031 if (n)
8032 {
8033 /* [basic.scope.class]
8034
8035 A name N used in a class S shall refer to the same declaration
8036 in its context and when re-evaluated in the completed scope of
8037 S. */
8038 permerror (input_location, "declaration of %q#D", decl);
8039 permerror (input_location, "changes meaning of %qD from %q+#D",
8040 DECL_NAME (OVL_CURRENT (decl)), (tree) n->value);
8041 }
8042 }
8043
8044 /* Returns the VAR_DECL for the complete vtable associated with BINFO.
8045 Secondary vtables are merged with primary vtables; this function
8046 will return the VAR_DECL for the primary vtable. */
8047
8048 tree
8049 get_vtbl_decl_for_binfo (tree binfo)
8050 {
8051 tree decl;
8052
8053 decl = BINFO_VTABLE (binfo);
8054 if (decl && TREE_CODE (decl) == POINTER_PLUS_EXPR)
8055 {
8056 gcc_assert (TREE_CODE (TREE_OPERAND (decl, 0)) == ADDR_EXPR);
8057 decl = TREE_OPERAND (TREE_OPERAND (decl, 0), 0);
8058 }
8059 if (decl)
8060 gcc_assert (VAR_P (decl));
8061 return decl;
8062 }
8063
8064
8065 /* Returns the binfo for the primary base of BINFO. If the resulting
8066 BINFO is a virtual base, and it is inherited elsewhere in the
8067 hierarchy, then the returned binfo might not be the primary base of
8068 BINFO in the complete object. Check BINFO_PRIMARY_P or
8069 BINFO_LOST_PRIMARY_P to be sure. */
8070
8071 static tree
8072 get_primary_binfo (tree binfo)
8073 {
8074 tree primary_base;
8075
8076 primary_base = CLASSTYPE_PRIMARY_BINFO (BINFO_TYPE (binfo));
8077 if (!primary_base)
8078 return NULL_TREE;
8079
8080 return copied_binfo (primary_base, binfo);
8081 }
8082
8083 /* If INDENTED_P is zero, indent to INDENT. Return nonzero. */
8084
8085 static int
8086 maybe_indent_hierarchy (FILE * stream, int indent, int indented_p)
8087 {
8088 if (!indented_p)
8089 fprintf (stream, "%*s", indent, "");
8090 return 1;
8091 }
8092
8093 /* Dump the offsets of all the bases rooted at BINFO to STREAM.
8094 INDENT should be zero when called from the top level; it is
8095 incremented recursively. IGO indicates the next expected BINFO in
8096 inheritance graph ordering. */
8097
8098 static tree
8099 dump_class_hierarchy_r (FILE *stream,
8100 int flags,
8101 tree binfo,
8102 tree igo,
8103 int indent)
8104 {
8105 int indented = 0;
8106 tree base_binfo;
8107 int i;
8108
8109 indented = maybe_indent_hierarchy (stream, indent, 0);
8110 fprintf (stream, "%s (0x" HOST_WIDE_INT_PRINT_HEX ") ",
8111 type_as_string (BINFO_TYPE (binfo), TFF_PLAIN_IDENTIFIER),
8112 (HOST_WIDE_INT) (uintptr_t) binfo);
8113 if (binfo != igo)
8114 {
8115 fprintf (stream, "alternative-path\n");
8116 return igo;
8117 }
8118 igo = TREE_CHAIN (binfo);
8119
8120 fprintf (stream, HOST_WIDE_INT_PRINT_DEC,
8121 tree_to_shwi (BINFO_OFFSET (binfo)));
8122 if (is_empty_class (BINFO_TYPE (binfo)))
8123 fprintf (stream, " empty");
8124 else if (CLASSTYPE_NEARLY_EMPTY_P (BINFO_TYPE (binfo)))
8125 fprintf (stream, " nearly-empty");
8126 if (BINFO_VIRTUAL_P (binfo))
8127 fprintf (stream, " virtual");
8128 fprintf (stream, "\n");
8129
8130 indented = 0;
8131 if (BINFO_PRIMARY_P (binfo))
8132 {
8133 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
8134 fprintf (stream, " primary-for %s (0x" HOST_WIDE_INT_PRINT_HEX ")",
8135 type_as_string (BINFO_TYPE (BINFO_INHERITANCE_CHAIN (binfo)),
8136 TFF_PLAIN_IDENTIFIER),
8137 (HOST_WIDE_INT) (uintptr_t) BINFO_INHERITANCE_CHAIN (binfo));
8138 }
8139 if (BINFO_LOST_PRIMARY_P (binfo))
8140 {
8141 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
8142 fprintf (stream, " lost-primary");
8143 }
8144 if (indented)
8145 fprintf (stream, "\n");
8146
8147 if (!(flags & TDF_SLIM))
8148 {
8149 int indented = 0;
8150
8151 if (BINFO_SUBVTT_INDEX (binfo))
8152 {
8153 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
8154 fprintf (stream, " subvttidx=%s",
8155 expr_as_string (BINFO_SUBVTT_INDEX (binfo),
8156 TFF_PLAIN_IDENTIFIER));
8157 }
8158 if (BINFO_VPTR_INDEX (binfo))
8159 {
8160 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
8161 fprintf (stream, " vptridx=%s",
8162 expr_as_string (BINFO_VPTR_INDEX (binfo),
8163 TFF_PLAIN_IDENTIFIER));
8164 }
8165 if (BINFO_VPTR_FIELD (binfo))
8166 {
8167 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
8168 fprintf (stream, " vbaseoffset=%s",
8169 expr_as_string (BINFO_VPTR_FIELD (binfo),
8170 TFF_PLAIN_IDENTIFIER));
8171 }
8172 if (BINFO_VTABLE (binfo))
8173 {
8174 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
8175 fprintf (stream, " vptr=%s",
8176 expr_as_string (BINFO_VTABLE (binfo),
8177 TFF_PLAIN_IDENTIFIER));
8178 }
8179
8180 if (indented)
8181 fprintf (stream, "\n");
8182 }
8183
8184 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
8185 igo = dump_class_hierarchy_r (stream, flags, base_binfo, igo, indent + 2);
8186
8187 return igo;
8188 }
8189
8190 /* Dump the BINFO hierarchy for T. */
8191
8192 static void
8193 dump_class_hierarchy_1 (FILE *stream, int flags, tree t)
8194 {
8195 fprintf (stream, "Class %s\n", type_as_string (t, TFF_PLAIN_IDENTIFIER));
8196 fprintf (stream, " size=%lu align=%lu\n",
8197 (unsigned long)(tree_to_shwi (TYPE_SIZE (t)) / BITS_PER_UNIT),
8198 (unsigned long)(TYPE_ALIGN (t) / BITS_PER_UNIT));
8199 fprintf (stream, " base size=%lu base align=%lu\n",
8200 (unsigned long)(tree_to_shwi (TYPE_SIZE (CLASSTYPE_AS_BASE (t)))
8201 / BITS_PER_UNIT),
8202 (unsigned long)(TYPE_ALIGN (CLASSTYPE_AS_BASE (t))
8203 / BITS_PER_UNIT));
8204 dump_class_hierarchy_r (stream, flags, TYPE_BINFO (t), TYPE_BINFO (t), 0);
8205 fprintf (stream, "\n");
8206 }
8207
8208 /* Debug interface to hierarchy dumping. */
8209
8210 void
8211 debug_class (tree t)
8212 {
8213 dump_class_hierarchy_1 (stderr, TDF_SLIM, t);
8214 }
8215
8216 static void
8217 dump_class_hierarchy (tree t)
8218 {
8219 int flags;
8220 FILE *stream = dump_begin (TDI_class, &flags);
8221
8222 if (stream)
8223 {
8224 dump_class_hierarchy_1 (stream, flags, t);
8225 dump_end (TDI_class, stream);
8226 }
8227 }
8228
8229 static void
8230 dump_array (FILE * stream, tree decl)
8231 {
8232 tree value;
8233 unsigned HOST_WIDE_INT ix;
8234 HOST_WIDE_INT elt;
8235 tree size = TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (decl)));
8236
8237 elt = (tree_to_shwi (TYPE_SIZE (TREE_TYPE (TREE_TYPE (decl))))
8238 / BITS_PER_UNIT);
8239 fprintf (stream, "%s:", decl_as_string (decl, TFF_PLAIN_IDENTIFIER));
8240 fprintf (stream, " %s entries",
8241 expr_as_string (size_binop (PLUS_EXPR, size, size_one_node),
8242 TFF_PLAIN_IDENTIFIER));
8243 fprintf (stream, "\n");
8244
8245 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (DECL_INITIAL (decl)),
8246 ix, value)
8247 fprintf (stream, "%-4ld %s\n", (long)(ix * elt),
8248 expr_as_string (value, TFF_PLAIN_IDENTIFIER));
8249 }
8250
8251 static void
8252 dump_vtable (tree t, tree binfo, tree vtable)
8253 {
8254 int flags;
8255 FILE *stream = dump_begin (TDI_class, &flags);
8256
8257 if (!stream)
8258 return;
8259
8260 if (!(flags & TDF_SLIM))
8261 {
8262 int ctor_vtbl_p = TYPE_BINFO (t) != binfo;
8263
8264 fprintf (stream, "%s for %s",
8265 ctor_vtbl_p ? "Construction vtable" : "Vtable",
8266 type_as_string (BINFO_TYPE (binfo), TFF_PLAIN_IDENTIFIER));
8267 if (ctor_vtbl_p)
8268 {
8269 if (!BINFO_VIRTUAL_P (binfo))
8270 fprintf (stream, " (0x" HOST_WIDE_INT_PRINT_HEX " instance)",
8271 (HOST_WIDE_INT) (uintptr_t) binfo);
8272 fprintf (stream, " in %s", type_as_string (t, TFF_PLAIN_IDENTIFIER));
8273 }
8274 fprintf (stream, "\n");
8275 dump_array (stream, vtable);
8276 fprintf (stream, "\n");
8277 }
8278
8279 dump_end (TDI_class, stream);
8280 }
8281
8282 static void
8283 dump_vtt (tree t, tree vtt)
8284 {
8285 int flags;
8286 FILE *stream = dump_begin (TDI_class, &flags);
8287
8288 if (!stream)
8289 return;
8290
8291 if (!(flags & TDF_SLIM))
8292 {
8293 fprintf (stream, "VTT for %s\n",
8294 type_as_string (t, TFF_PLAIN_IDENTIFIER));
8295 dump_array (stream, vtt);
8296 fprintf (stream, "\n");
8297 }
8298
8299 dump_end (TDI_class, stream);
8300 }
8301
8302 /* Dump a function or thunk and its thunkees. */
8303
8304 static void
8305 dump_thunk (FILE *stream, int indent, tree thunk)
8306 {
8307 static const char spaces[] = " ";
8308 tree name = DECL_NAME (thunk);
8309 tree thunks;
8310
8311 fprintf (stream, "%.*s%p %s %s", indent, spaces,
8312 (void *)thunk,
8313 !DECL_THUNK_P (thunk) ? "function"
8314 : DECL_THIS_THUNK_P (thunk) ? "this-thunk" : "covariant-thunk",
8315 name ? IDENTIFIER_POINTER (name) : "<unset>");
8316 if (DECL_THUNK_P (thunk))
8317 {
8318 HOST_WIDE_INT fixed_adjust = THUNK_FIXED_OFFSET (thunk);
8319 tree virtual_adjust = THUNK_VIRTUAL_OFFSET (thunk);
8320
8321 fprintf (stream, " fixed=" HOST_WIDE_INT_PRINT_DEC, fixed_adjust);
8322 if (!virtual_adjust)
8323 /*NOP*/;
8324 else if (DECL_THIS_THUNK_P (thunk))
8325 fprintf (stream, " vcall=" HOST_WIDE_INT_PRINT_DEC,
8326 tree_to_shwi (virtual_adjust));
8327 else
8328 fprintf (stream, " vbase=" HOST_WIDE_INT_PRINT_DEC "(%s)",
8329 tree_to_shwi (BINFO_VPTR_FIELD (virtual_adjust)),
8330 type_as_string (BINFO_TYPE (virtual_adjust), TFF_SCOPE));
8331 if (THUNK_ALIAS (thunk))
8332 fprintf (stream, " alias to %p", (void *)THUNK_ALIAS (thunk));
8333 }
8334 fprintf (stream, "\n");
8335 for (thunks = DECL_THUNKS (thunk); thunks; thunks = TREE_CHAIN (thunks))
8336 dump_thunk (stream, indent + 2, thunks);
8337 }
8338
8339 /* Dump the thunks for FN. */
8340
8341 void
8342 debug_thunks (tree fn)
8343 {
8344 dump_thunk (stderr, 0, fn);
8345 }
8346
8347 /* Virtual function table initialization. */
8348
8349 /* Create all the necessary vtables for T and its base classes. */
8350
8351 static void
8352 finish_vtbls (tree t)
8353 {
8354 tree vbase;
8355 vec<constructor_elt, va_gc> *v = NULL;
8356 tree vtable = BINFO_VTABLE (TYPE_BINFO (t));
8357
8358 /* We lay out the primary and secondary vtables in one contiguous
8359 vtable. The primary vtable is first, followed by the non-virtual
8360 secondary vtables in inheritance graph order. */
8361 accumulate_vtbl_inits (TYPE_BINFO (t), TYPE_BINFO (t), TYPE_BINFO (t),
8362 vtable, t, &v);
8363
8364 /* Then come the virtual bases, also in inheritance graph order. */
8365 for (vbase = TYPE_BINFO (t); vbase; vbase = TREE_CHAIN (vbase))
8366 {
8367 if (!BINFO_VIRTUAL_P (vbase))
8368 continue;
8369 accumulate_vtbl_inits (vbase, vbase, TYPE_BINFO (t), vtable, t, &v);
8370 }
8371
8372 if (BINFO_VTABLE (TYPE_BINFO (t)))
8373 initialize_vtable (TYPE_BINFO (t), v);
8374 }
8375
8376 /* Initialize the vtable for BINFO with the INITS. */
8377
8378 static void
8379 initialize_vtable (tree binfo, vec<constructor_elt, va_gc> *inits)
8380 {
8381 tree decl;
8382
8383 layout_vtable_decl (binfo, vec_safe_length (inits));
8384 decl = get_vtbl_decl_for_binfo (binfo);
8385 initialize_artificial_var (decl, inits);
8386 dump_vtable (BINFO_TYPE (binfo), binfo, decl);
8387 }
8388
8389 /* Build the VTT (virtual table table) for T.
8390 A class requires a VTT if it has virtual bases.
8391
8392 This holds
8393 1 - primary virtual pointer for complete object T
8394 2 - secondary VTTs for each direct non-virtual base of T which requires a
8395 VTT
8396 3 - secondary virtual pointers for each direct or indirect base of T which
8397 has virtual bases or is reachable via a virtual path from T.
8398 4 - secondary VTTs for each direct or indirect virtual base of T.
8399
8400 Secondary VTTs look like complete object VTTs without part 4. */
8401
8402 static void
8403 build_vtt (tree t)
8404 {
8405 tree type;
8406 tree vtt;
8407 tree index;
8408 vec<constructor_elt, va_gc> *inits;
8409
8410 /* Build up the initializers for the VTT. */
8411 inits = NULL;
8412 index = size_zero_node;
8413 build_vtt_inits (TYPE_BINFO (t), t, &inits, &index);
8414
8415 /* If we didn't need a VTT, we're done. */
8416 if (!inits)
8417 return;
8418
8419 /* Figure out the type of the VTT. */
8420 type = build_array_of_n_type (const_ptr_type_node,
8421 inits->length ());
8422
8423 /* Now, build the VTT object itself. */
8424 vtt = build_vtable (t, mangle_vtt_for_type (t), type);
8425 initialize_artificial_var (vtt, inits);
8426 /* Add the VTT to the vtables list. */
8427 DECL_CHAIN (vtt) = DECL_CHAIN (CLASSTYPE_VTABLES (t));
8428 DECL_CHAIN (CLASSTYPE_VTABLES (t)) = vtt;
8429
8430 dump_vtt (t, vtt);
8431 }
8432
8433 /* When building a secondary VTT, BINFO_VTABLE is set to a TREE_LIST with
8434 PURPOSE the RTTI_BINFO, VALUE the real vtable pointer for this binfo,
8435 and CHAIN the vtable pointer for this binfo after construction is
8436 complete. VALUE can also be another BINFO, in which case we recurse. */
8437
8438 static tree
8439 binfo_ctor_vtable (tree binfo)
8440 {
8441 tree vt;
8442
8443 while (1)
8444 {
8445 vt = BINFO_VTABLE (binfo);
8446 if (TREE_CODE (vt) == TREE_LIST)
8447 vt = TREE_VALUE (vt);
8448 if (TREE_CODE (vt) == TREE_BINFO)
8449 binfo = vt;
8450 else
8451 break;
8452 }
8453
8454 return vt;
8455 }
8456
8457 /* Data for secondary VTT initialization. */
8458 typedef struct secondary_vptr_vtt_init_data_s
8459 {
8460 /* Is this the primary VTT? */
8461 bool top_level_p;
8462
8463 /* Current index into the VTT. */
8464 tree index;
8465
8466 /* Vector of initializers built up. */
8467 vec<constructor_elt, va_gc> *inits;
8468
8469 /* The type being constructed by this secondary VTT. */
8470 tree type_being_constructed;
8471 } secondary_vptr_vtt_init_data;
8472
8473 /* Recursively build the VTT-initializer for BINFO (which is in the
8474 hierarchy dominated by T). INITS points to the end of the initializer
8475 list to date. INDEX is the VTT index where the next element will be
8476 replaced. Iff BINFO is the binfo for T, this is the top level VTT (i.e.
8477 not a subvtt for some base of T). When that is so, we emit the sub-VTTs
8478 for virtual bases of T. When it is not so, we build the constructor
8479 vtables for the BINFO-in-T variant. */
8480
8481 static void
8482 build_vtt_inits (tree binfo, tree t, vec<constructor_elt, va_gc> **inits,
8483 tree *index)
8484 {
8485 int i;
8486 tree b;
8487 tree init;
8488 secondary_vptr_vtt_init_data data;
8489 int top_level_p = SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), t);
8490
8491 /* We only need VTTs for subobjects with virtual bases. */
8492 if (!CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo)))
8493 return;
8494
8495 /* We need to use a construction vtable if this is not the primary
8496 VTT. */
8497 if (!top_level_p)
8498 {
8499 build_ctor_vtbl_group (binfo, t);
8500
8501 /* Record the offset in the VTT where this sub-VTT can be found. */
8502 BINFO_SUBVTT_INDEX (binfo) = *index;
8503 }
8504
8505 /* Add the address of the primary vtable for the complete object. */
8506 init = binfo_ctor_vtable (binfo);
8507 CONSTRUCTOR_APPEND_ELT (*inits, NULL_TREE, init);
8508 if (top_level_p)
8509 {
8510 gcc_assert (!BINFO_VPTR_INDEX (binfo));
8511 BINFO_VPTR_INDEX (binfo) = *index;
8512 }
8513 *index = size_binop (PLUS_EXPR, *index, TYPE_SIZE_UNIT (ptr_type_node));
8514
8515 /* Recursively add the secondary VTTs for non-virtual bases. */
8516 for (i = 0; BINFO_BASE_ITERATE (binfo, i, b); ++i)
8517 if (!BINFO_VIRTUAL_P (b))
8518 build_vtt_inits (b, t, inits, index);
8519
8520 /* Add secondary virtual pointers for all subobjects of BINFO with
8521 either virtual bases or reachable along a virtual path, except
8522 subobjects that are non-virtual primary bases. */
8523 data.top_level_p = top_level_p;
8524 data.index = *index;
8525 data.inits = *inits;
8526 data.type_being_constructed = BINFO_TYPE (binfo);
8527
8528 dfs_walk_once (binfo, dfs_build_secondary_vptr_vtt_inits, NULL, &data);
8529
8530 *index = data.index;
8531
8532 /* data.inits might have grown as we added secondary virtual pointers.
8533 Make sure our caller knows about the new vector. */
8534 *inits = data.inits;
8535
8536 if (top_level_p)
8537 /* Add the secondary VTTs for virtual bases in inheritance graph
8538 order. */
8539 for (b = TYPE_BINFO (BINFO_TYPE (binfo)); b; b = TREE_CHAIN (b))
8540 {
8541 if (!BINFO_VIRTUAL_P (b))
8542 continue;
8543
8544 build_vtt_inits (b, t, inits, index);
8545 }
8546 else
8547 /* Remove the ctor vtables we created. */
8548 dfs_walk_all (binfo, dfs_fixup_binfo_vtbls, NULL, binfo);
8549 }
8550
8551 /* Called from build_vtt_inits via dfs_walk. BINFO is the binfo for the base
8552 in most derived. DATA is a SECONDARY_VPTR_VTT_INIT_DATA structure. */
8553
8554 static tree
8555 dfs_build_secondary_vptr_vtt_inits (tree binfo, void *data_)
8556 {
8557 secondary_vptr_vtt_init_data *data = (secondary_vptr_vtt_init_data *)data_;
8558
8559 /* We don't care about bases that don't have vtables. */
8560 if (!TYPE_VFIELD (BINFO_TYPE (binfo)))
8561 return dfs_skip_bases;
8562
8563 /* We're only interested in proper subobjects of the type being
8564 constructed. */
8565 if (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), data->type_being_constructed))
8566 return NULL_TREE;
8567
8568 /* We're only interested in bases with virtual bases or reachable
8569 via a virtual path from the type being constructed. */
8570 if (!(CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo))
8571 || binfo_via_virtual (binfo, data->type_being_constructed)))
8572 return dfs_skip_bases;
8573
8574 /* We're not interested in non-virtual primary bases. */
8575 if (!BINFO_VIRTUAL_P (binfo) && BINFO_PRIMARY_P (binfo))
8576 return NULL_TREE;
8577
8578 /* Record the index where this secondary vptr can be found. */
8579 if (data->top_level_p)
8580 {
8581 gcc_assert (!BINFO_VPTR_INDEX (binfo));
8582 BINFO_VPTR_INDEX (binfo) = data->index;
8583
8584 if (BINFO_VIRTUAL_P (binfo))
8585 {
8586 /* It's a primary virtual base, and this is not a
8587 construction vtable. Find the base this is primary of in
8588 the inheritance graph, and use that base's vtable
8589 now. */
8590 while (BINFO_PRIMARY_P (binfo))
8591 binfo = BINFO_INHERITANCE_CHAIN (binfo);
8592 }
8593 }
8594
8595 /* Add the initializer for the secondary vptr itself. */
8596 CONSTRUCTOR_APPEND_ELT (data->inits, NULL_TREE, binfo_ctor_vtable (binfo));
8597
8598 /* Advance the vtt index. */
8599 data->index = size_binop (PLUS_EXPR, data->index,
8600 TYPE_SIZE_UNIT (ptr_type_node));
8601
8602 return NULL_TREE;
8603 }
8604
8605 /* Called from build_vtt_inits via dfs_walk. After building
8606 constructor vtables and generating the sub-vtt from them, we need
8607 to restore the BINFO_VTABLES that were scribbled on. DATA is the
8608 binfo of the base whose sub vtt was generated. */
8609
8610 static tree
8611 dfs_fixup_binfo_vtbls (tree binfo, void* data)
8612 {
8613 tree vtable = BINFO_VTABLE (binfo);
8614
8615 if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
8616 /* If this class has no vtable, none of its bases do. */
8617 return dfs_skip_bases;
8618
8619 if (!vtable)
8620 /* This might be a primary base, so have no vtable in this
8621 hierarchy. */
8622 return NULL_TREE;
8623
8624 /* If we scribbled the construction vtable vptr into BINFO, clear it
8625 out now. */
8626 if (TREE_CODE (vtable) == TREE_LIST
8627 && (TREE_PURPOSE (vtable) == (tree) data))
8628 BINFO_VTABLE (binfo) = TREE_CHAIN (vtable);
8629
8630 return NULL_TREE;
8631 }
8632
8633 /* Build the construction vtable group for BINFO which is in the
8634 hierarchy dominated by T. */
8635
8636 static void
8637 build_ctor_vtbl_group (tree binfo, tree t)
8638 {
8639 tree type;
8640 tree vtbl;
8641 tree id;
8642 tree vbase;
8643 vec<constructor_elt, va_gc> *v;
8644
8645 /* See if we've already created this construction vtable group. */
8646 id = mangle_ctor_vtbl_for_type (t, binfo);
8647 if (IDENTIFIER_GLOBAL_VALUE (id))
8648 return;
8649
8650 gcc_assert (!SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), t));
8651 /* Build a version of VTBL (with the wrong type) for use in
8652 constructing the addresses of secondary vtables in the
8653 construction vtable group. */
8654 vtbl = build_vtable (t, id, ptr_type_node);
8655 DECL_CONSTRUCTION_VTABLE_P (vtbl) = 1;
8656 /* Don't export construction vtables from shared libraries. Even on
8657 targets that don't support hidden visibility, this tells
8658 can_refer_decl_in_current_unit_p not to assume that it's safe to
8659 access from a different compilation unit (bz 54314). */
8660 DECL_VISIBILITY (vtbl) = VISIBILITY_HIDDEN;
8661 DECL_VISIBILITY_SPECIFIED (vtbl) = true;
8662
8663 v = NULL;
8664 accumulate_vtbl_inits (binfo, TYPE_BINFO (TREE_TYPE (binfo)),
8665 binfo, vtbl, t, &v);
8666
8667 /* Add the vtables for each of our virtual bases using the vbase in T
8668 binfo. */
8669 for (vbase = TYPE_BINFO (BINFO_TYPE (binfo));
8670 vbase;
8671 vbase = TREE_CHAIN (vbase))
8672 {
8673 tree b;
8674
8675 if (!BINFO_VIRTUAL_P (vbase))
8676 continue;
8677 b = copied_binfo (vbase, binfo);
8678
8679 accumulate_vtbl_inits (b, vbase, binfo, vtbl, t, &v);
8680 }
8681
8682 /* Figure out the type of the construction vtable. */
8683 type = build_array_of_n_type (vtable_entry_type, v->length ());
8684 layout_type (type);
8685 TREE_TYPE (vtbl) = type;
8686 DECL_SIZE (vtbl) = DECL_SIZE_UNIT (vtbl) = NULL_TREE;
8687 layout_decl (vtbl, 0);
8688
8689 /* Initialize the construction vtable. */
8690 CLASSTYPE_VTABLES (t) = chainon (CLASSTYPE_VTABLES (t), vtbl);
8691 initialize_artificial_var (vtbl, v);
8692 dump_vtable (t, binfo, vtbl);
8693 }
8694
8695 /* Add the vtbl initializers for BINFO (and its bases other than
8696 non-virtual primaries) to the list of INITS. BINFO is in the
8697 hierarchy dominated by T. RTTI_BINFO is the binfo within T of
8698 the constructor the vtbl inits should be accumulated for. (If this
8699 is the complete object vtbl then RTTI_BINFO will be TYPE_BINFO (T).)
8700 ORIG_BINFO is the binfo for this object within BINFO_TYPE (RTTI_BINFO).
8701 BINFO is the active base equivalent of ORIG_BINFO in the inheritance
8702 graph of T. Both BINFO and ORIG_BINFO will have the same BINFO_TYPE,
8703 but are not necessarily the same in terms of layout. */
8704
8705 static void
8706 accumulate_vtbl_inits (tree binfo,
8707 tree orig_binfo,
8708 tree rtti_binfo,
8709 tree vtbl,
8710 tree t,
8711 vec<constructor_elt, va_gc> **inits)
8712 {
8713 int i;
8714 tree base_binfo;
8715 int ctor_vtbl_p = !SAME_BINFO_TYPE_P (BINFO_TYPE (rtti_binfo), t);
8716
8717 gcc_assert (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), BINFO_TYPE (orig_binfo)));
8718
8719 /* If it doesn't have a vptr, we don't do anything. */
8720 if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
8721 return;
8722
8723 /* If we're building a construction vtable, we're not interested in
8724 subobjects that don't require construction vtables. */
8725 if (ctor_vtbl_p
8726 && !CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo))
8727 && !binfo_via_virtual (orig_binfo, BINFO_TYPE (rtti_binfo)))
8728 return;
8729
8730 /* Build the initializers for the BINFO-in-T vtable. */
8731 dfs_accumulate_vtbl_inits (binfo, orig_binfo, rtti_binfo, vtbl, t, inits);
8732
8733 /* Walk the BINFO and its bases. We walk in preorder so that as we
8734 initialize each vtable we can figure out at what offset the
8735 secondary vtable lies from the primary vtable. We can't use
8736 dfs_walk here because we need to iterate through bases of BINFO
8737 and RTTI_BINFO simultaneously. */
8738 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
8739 {
8740 /* Skip virtual bases. */
8741 if (BINFO_VIRTUAL_P (base_binfo))
8742 continue;
8743 accumulate_vtbl_inits (base_binfo,
8744 BINFO_BASE_BINFO (orig_binfo, i),
8745 rtti_binfo, vtbl, t,
8746 inits);
8747 }
8748 }
8749
8750 /* Called from accumulate_vtbl_inits. Adds the initializers for the
8751 BINFO vtable to L. */
8752
8753 static void
8754 dfs_accumulate_vtbl_inits (tree binfo,
8755 tree orig_binfo,
8756 tree rtti_binfo,
8757 tree orig_vtbl,
8758 tree t,
8759 vec<constructor_elt, va_gc> **l)
8760 {
8761 tree vtbl = NULL_TREE;
8762 int ctor_vtbl_p = !SAME_BINFO_TYPE_P (BINFO_TYPE (rtti_binfo), t);
8763 int n_inits;
8764
8765 if (ctor_vtbl_p
8766 && BINFO_VIRTUAL_P (orig_binfo) && BINFO_PRIMARY_P (orig_binfo))
8767 {
8768 /* In the hierarchy of BINFO_TYPE (RTTI_BINFO), this is a
8769 primary virtual base. If it is not the same primary in
8770 the hierarchy of T, we'll need to generate a ctor vtable
8771 for it, to place at its location in T. If it is the same
8772 primary, we still need a VTT entry for the vtable, but it
8773 should point to the ctor vtable for the base it is a
8774 primary for within the sub-hierarchy of RTTI_BINFO.
8775
8776 There are three possible cases:
8777
8778 1) We are in the same place.
8779 2) We are a primary base within a lost primary virtual base of
8780 RTTI_BINFO.
8781 3) We are primary to something not a base of RTTI_BINFO. */
8782
8783 tree b;
8784 tree last = NULL_TREE;
8785
8786 /* First, look through the bases we are primary to for RTTI_BINFO
8787 or a virtual base. */
8788 b = binfo;
8789 while (BINFO_PRIMARY_P (b))
8790 {
8791 b = BINFO_INHERITANCE_CHAIN (b);
8792 last = b;
8793 if (BINFO_VIRTUAL_P (b) || b == rtti_binfo)
8794 goto found;
8795 }
8796 /* If we run out of primary links, keep looking down our
8797 inheritance chain; we might be an indirect primary. */
8798 for (b = last; b; b = BINFO_INHERITANCE_CHAIN (b))
8799 if (BINFO_VIRTUAL_P (b) || b == rtti_binfo)
8800 break;
8801 found:
8802
8803 /* If we found RTTI_BINFO, this is case 1. If we found a virtual
8804 base B and it is a base of RTTI_BINFO, this is case 2. In
8805 either case, we share our vtable with LAST, i.e. the
8806 derived-most base within B of which we are a primary. */
8807 if (b == rtti_binfo
8808 || (b && binfo_for_vbase (BINFO_TYPE (b), BINFO_TYPE (rtti_binfo))))
8809 /* Just set our BINFO_VTABLE to point to LAST, as we may not have
8810 set LAST's BINFO_VTABLE yet. We'll extract the actual vptr in
8811 binfo_ctor_vtable after everything's been set up. */
8812 vtbl = last;
8813
8814 /* Otherwise, this is case 3 and we get our own. */
8815 }
8816 else if (!BINFO_NEW_VTABLE_MARKED (orig_binfo))
8817 return;
8818
8819 n_inits = vec_safe_length (*l);
8820
8821 if (!vtbl)
8822 {
8823 tree index;
8824 int non_fn_entries;
8825
8826 /* Add the initializer for this vtable. */
8827 build_vtbl_initializer (binfo, orig_binfo, t, rtti_binfo,
8828 &non_fn_entries, l);
8829
8830 /* Figure out the position to which the VPTR should point. */
8831 vtbl = build1 (ADDR_EXPR, vtbl_ptr_type_node, orig_vtbl);
8832 index = size_binop (MULT_EXPR,
8833 TYPE_SIZE_UNIT (vtable_entry_type),
8834 size_int (non_fn_entries + n_inits));
8835 vtbl = fold_build_pointer_plus (vtbl, index);
8836 }
8837
8838 if (ctor_vtbl_p)
8839 /* For a construction vtable, we can't overwrite BINFO_VTABLE.
8840 So, we make a TREE_LIST. Later, dfs_fixup_binfo_vtbls will
8841 straighten this out. */
8842 BINFO_VTABLE (binfo) = tree_cons (rtti_binfo, vtbl, BINFO_VTABLE (binfo));
8843 else if (BINFO_PRIMARY_P (binfo) && BINFO_VIRTUAL_P (binfo))
8844 /* Throw away any unneeded intializers. */
8845 (*l)->truncate (n_inits);
8846 else
8847 /* For an ordinary vtable, set BINFO_VTABLE. */
8848 BINFO_VTABLE (binfo) = vtbl;
8849 }
8850
8851 static GTY(()) tree abort_fndecl_addr;
8852
8853 /* Construct the initializer for BINFO's virtual function table. BINFO
8854 is part of the hierarchy dominated by T. If we're building a
8855 construction vtable, the ORIG_BINFO is the binfo we should use to
8856 find the actual function pointers to put in the vtable - but they
8857 can be overridden on the path to most-derived in the graph that
8858 ORIG_BINFO belongs. Otherwise,
8859 ORIG_BINFO should be the same as BINFO. The RTTI_BINFO is the
8860 BINFO that should be indicated by the RTTI information in the
8861 vtable; it will be a base class of T, rather than T itself, if we
8862 are building a construction vtable.
8863
8864 The value returned is a TREE_LIST suitable for wrapping in a
8865 CONSTRUCTOR to use as the DECL_INITIAL for a vtable. If
8866 NON_FN_ENTRIES_P is not NULL, *NON_FN_ENTRIES_P is set to the
8867 number of non-function entries in the vtable.
8868
8869 It might seem that this function should never be called with a
8870 BINFO for which BINFO_PRIMARY_P holds, the vtable for such a
8871 base is always subsumed by a derived class vtable. However, when
8872 we are building construction vtables, we do build vtables for
8873 primary bases; we need these while the primary base is being
8874 constructed. */
8875
8876 static void
8877 build_vtbl_initializer (tree binfo,
8878 tree orig_binfo,
8879 tree t,
8880 tree rtti_binfo,
8881 int* non_fn_entries_p,
8882 vec<constructor_elt, va_gc> **inits)
8883 {
8884 tree v;
8885 vtbl_init_data vid;
8886 unsigned ix, jx;
8887 tree vbinfo;
8888 vec<tree, va_gc> *vbases;
8889 constructor_elt *e;
8890
8891 /* Initialize VID. */
8892 memset (&vid, 0, sizeof (vid));
8893 vid.binfo = binfo;
8894 vid.derived = t;
8895 vid.rtti_binfo = rtti_binfo;
8896 vid.primary_vtbl_p = SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), t);
8897 vid.ctor_vtbl_p = !SAME_BINFO_TYPE_P (BINFO_TYPE (rtti_binfo), t);
8898 vid.generate_vcall_entries = true;
8899 /* The first vbase or vcall offset is at index -3 in the vtable. */
8900 vid.index = ssize_int(-3 * TARGET_VTABLE_DATA_ENTRY_DISTANCE);
8901
8902 /* Add entries to the vtable for RTTI. */
8903 build_rtti_vtbl_entries (binfo, &vid);
8904
8905 /* Create an array for keeping track of the functions we've
8906 processed. When we see multiple functions with the same
8907 signature, we share the vcall offsets. */
8908 vec_alloc (vid.fns, 32);
8909 /* Add the vcall and vbase offset entries. */
8910 build_vcall_and_vbase_vtbl_entries (binfo, &vid);
8911
8912 /* Clear BINFO_VTABLE_PATH_MARKED; it's set by
8913 build_vbase_offset_vtbl_entries. */
8914 for (vbases = CLASSTYPE_VBASECLASSES (t), ix = 0;
8915 vec_safe_iterate (vbases, ix, &vbinfo); ix++)
8916 BINFO_VTABLE_PATH_MARKED (vbinfo) = 0;
8917
8918 /* If the target requires padding between data entries, add that now. */
8919 if (TARGET_VTABLE_DATA_ENTRY_DISTANCE > 1)
8920 {
8921 int n_entries = vec_safe_length (vid.inits);
8922
8923 vec_safe_grow (vid.inits, TARGET_VTABLE_DATA_ENTRY_DISTANCE * n_entries);
8924
8925 /* Move data entries into their new positions and add padding
8926 after the new positions. Iterate backwards so we don't
8927 overwrite entries that we would need to process later. */
8928 for (ix = n_entries - 1;
8929 vid.inits->iterate (ix, &e);
8930 ix--)
8931 {
8932 int j;
8933 int new_position = (TARGET_VTABLE_DATA_ENTRY_DISTANCE * ix
8934 + (TARGET_VTABLE_DATA_ENTRY_DISTANCE - 1));
8935
8936 (*vid.inits)[new_position] = *e;
8937
8938 for (j = 1; j < TARGET_VTABLE_DATA_ENTRY_DISTANCE; ++j)
8939 {
8940 constructor_elt *f = &(*vid.inits)[new_position - j];
8941 f->index = NULL_TREE;
8942 f->value = build1 (NOP_EXPR, vtable_entry_type,
8943 null_pointer_node);
8944 }
8945 }
8946 }
8947
8948 if (non_fn_entries_p)
8949 *non_fn_entries_p = vec_safe_length (vid.inits);
8950
8951 /* The initializers for virtual functions were built up in reverse
8952 order. Straighten them out and add them to the running list in one
8953 step. */
8954 jx = vec_safe_length (*inits);
8955 vec_safe_grow (*inits, jx + vid.inits->length ());
8956
8957 for (ix = vid.inits->length () - 1;
8958 vid.inits->iterate (ix, &e);
8959 ix--, jx++)
8960 (**inits)[jx] = *e;
8961
8962 /* Go through all the ordinary virtual functions, building up
8963 initializers. */
8964 for (v = BINFO_VIRTUALS (orig_binfo); v; v = TREE_CHAIN (v))
8965 {
8966 tree delta;
8967 tree vcall_index;
8968 tree fn, fn_original;
8969 tree init = NULL_TREE;
8970
8971 fn = BV_FN (v);
8972 fn_original = fn;
8973 if (DECL_THUNK_P (fn))
8974 {
8975 if (!DECL_NAME (fn))
8976 finish_thunk (fn);
8977 if (THUNK_ALIAS (fn))
8978 {
8979 fn = THUNK_ALIAS (fn);
8980 BV_FN (v) = fn;
8981 }
8982 fn_original = THUNK_TARGET (fn);
8983 }
8984
8985 /* If the only definition of this function signature along our
8986 primary base chain is from a lost primary, this vtable slot will
8987 never be used, so just zero it out. This is important to avoid
8988 requiring extra thunks which cannot be generated with the function.
8989
8990 We first check this in update_vtable_entry_for_fn, so we handle
8991 restored primary bases properly; we also need to do it here so we
8992 zero out unused slots in ctor vtables, rather than filling them
8993 with erroneous values (though harmless, apart from relocation
8994 costs). */
8995 if (BV_LOST_PRIMARY (v))
8996 init = size_zero_node;
8997
8998 if (! init)
8999 {
9000 /* Pull the offset for `this', and the function to call, out of
9001 the list. */
9002 delta = BV_DELTA (v);
9003 vcall_index = BV_VCALL_INDEX (v);
9004
9005 gcc_assert (TREE_CODE (delta) == INTEGER_CST);
9006 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
9007
9008 /* You can't call an abstract virtual function; it's abstract.
9009 So, we replace these functions with __pure_virtual. */
9010 if (DECL_PURE_VIRTUAL_P (fn_original))
9011 {
9012 fn = abort_fndecl;
9013 if (!TARGET_VTABLE_USES_DESCRIPTORS)
9014 {
9015 if (abort_fndecl_addr == NULL)
9016 abort_fndecl_addr
9017 = fold_convert (vfunc_ptr_type_node,
9018 build_fold_addr_expr (fn));
9019 init = abort_fndecl_addr;
9020 }
9021 }
9022 /* Likewise for deleted virtuals. */
9023 else if (DECL_DELETED_FN (fn_original))
9024 {
9025 fn = get_identifier ("__cxa_deleted_virtual");
9026 if (!get_global_value_if_present (fn, &fn))
9027 fn = push_library_fn (fn, (build_function_type_list
9028 (void_type_node, NULL_TREE)),
9029 NULL_TREE, ECF_NORETURN);
9030 if (!TARGET_VTABLE_USES_DESCRIPTORS)
9031 init = fold_convert (vfunc_ptr_type_node,
9032 build_fold_addr_expr (fn));
9033 }
9034 else
9035 {
9036 if (!integer_zerop (delta) || vcall_index)
9037 {
9038 fn = make_thunk (fn, /*this_adjusting=*/1, delta, vcall_index);
9039 if (!DECL_NAME (fn))
9040 finish_thunk (fn);
9041 }
9042 /* Take the address of the function, considering it to be of an
9043 appropriate generic type. */
9044 if (!TARGET_VTABLE_USES_DESCRIPTORS)
9045 init = fold_convert (vfunc_ptr_type_node,
9046 build_fold_addr_expr (fn));
9047 /* Don't refer to a virtual destructor from a constructor
9048 vtable or a vtable for an abstract class, since destroying
9049 an object under construction is undefined behavior and we
9050 don't want it to be considered a candidate for speculative
9051 devirtualization. But do create the thunk for ABI
9052 compliance. */
9053 if (DECL_DESTRUCTOR_P (fn_original)
9054 && (CLASSTYPE_PURE_VIRTUALS (DECL_CONTEXT (fn_original))
9055 || orig_binfo != binfo))
9056 init = size_zero_node;
9057 }
9058 }
9059
9060 /* And add it to the chain of initializers. */
9061 if (TARGET_VTABLE_USES_DESCRIPTORS)
9062 {
9063 int i;
9064 if (init == size_zero_node)
9065 for (i = 0; i < TARGET_VTABLE_USES_DESCRIPTORS; ++i)
9066 CONSTRUCTOR_APPEND_ELT (*inits, NULL_TREE, init);
9067 else
9068 for (i = 0; i < TARGET_VTABLE_USES_DESCRIPTORS; ++i)
9069 {
9070 tree fdesc = build2 (FDESC_EXPR, vfunc_ptr_type_node,
9071 fn, build_int_cst (NULL_TREE, i));
9072 TREE_CONSTANT (fdesc) = 1;
9073
9074 CONSTRUCTOR_APPEND_ELT (*inits, NULL_TREE, fdesc);
9075 }
9076 }
9077 else
9078 CONSTRUCTOR_APPEND_ELT (*inits, NULL_TREE, init);
9079 }
9080 }
9081
9082 /* Adds to vid->inits the initializers for the vbase and vcall
9083 offsets in BINFO, which is in the hierarchy dominated by T. */
9084
9085 static void
9086 build_vcall_and_vbase_vtbl_entries (tree binfo, vtbl_init_data* vid)
9087 {
9088 tree b;
9089
9090 /* If this is a derived class, we must first create entries
9091 corresponding to the primary base class. */
9092 b = get_primary_binfo (binfo);
9093 if (b)
9094 build_vcall_and_vbase_vtbl_entries (b, vid);
9095
9096 /* Add the vbase entries for this base. */
9097 build_vbase_offset_vtbl_entries (binfo, vid);
9098 /* Add the vcall entries for this base. */
9099 build_vcall_offset_vtbl_entries (binfo, vid);
9100 }
9101
9102 /* Returns the initializers for the vbase offset entries in the vtable
9103 for BINFO (which is part of the class hierarchy dominated by T), in
9104 reverse order. VBASE_OFFSET_INDEX gives the vtable index
9105 where the next vbase offset will go. */
9106
9107 static void
9108 build_vbase_offset_vtbl_entries (tree binfo, vtbl_init_data* vid)
9109 {
9110 tree vbase;
9111 tree t;
9112 tree non_primary_binfo;
9113
9114 /* If there are no virtual baseclasses, then there is nothing to
9115 do. */
9116 if (!CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo)))
9117 return;
9118
9119 t = vid->derived;
9120
9121 /* We might be a primary base class. Go up the inheritance hierarchy
9122 until we find the most derived class of which we are a primary base:
9123 it is the offset of that which we need to use. */
9124 non_primary_binfo = binfo;
9125 while (BINFO_INHERITANCE_CHAIN (non_primary_binfo))
9126 {
9127 tree b;
9128
9129 /* If we have reached a virtual base, then it must be a primary
9130 base (possibly multi-level) of vid->binfo, or we wouldn't
9131 have called build_vcall_and_vbase_vtbl_entries for it. But it
9132 might be a lost primary, so just skip down to vid->binfo. */
9133 if (BINFO_VIRTUAL_P (non_primary_binfo))
9134 {
9135 non_primary_binfo = vid->binfo;
9136 break;
9137 }
9138
9139 b = BINFO_INHERITANCE_CHAIN (non_primary_binfo);
9140 if (get_primary_binfo (b) != non_primary_binfo)
9141 break;
9142 non_primary_binfo = b;
9143 }
9144
9145 /* Go through the virtual bases, adding the offsets. */
9146 for (vbase = TYPE_BINFO (BINFO_TYPE (binfo));
9147 vbase;
9148 vbase = TREE_CHAIN (vbase))
9149 {
9150 tree b;
9151 tree delta;
9152
9153 if (!BINFO_VIRTUAL_P (vbase))
9154 continue;
9155
9156 /* Find the instance of this virtual base in the complete
9157 object. */
9158 b = copied_binfo (vbase, binfo);
9159
9160 /* If we've already got an offset for this virtual base, we
9161 don't need another one. */
9162 if (BINFO_VTABLE_PATH_MARKED (b))
9163 continue;
9164 BINFO_VTABLE_PATH_MARKED (b) = 1;
9165
9166 /* Figure out where we can find this vbase offset. */
9167 delta = size_binop (MULT_EXPR,
9168 vid->index,
9169 convert (ssizetype,
9170 TYPE_SIZE_UNIT (vtable_entry_type)));
9171 if (vid->primary_vtbl_p)
9172 BINFO_VPTR_FIELD (b) = delta;
9173
9174 if (binfo != TYPE_BINFO (t))
9175 /* The vbase offset had better be the same. */
9176 gcc_assert (tree_int_cst_equal (delta, BINFO_VPTR_FIELD (vbase)));
9177
9178 /* The next vbase will come at a more negative offset. */
9179 vid->index = size_binop (MINUS_EXPR, vid->index,
9180 ssize_int (TARGET_VTABLE_DATA_ENTRY_DISTANCE));
9181
9182 /* The initializer is the delta from BINFO to this virtual base.
9183 The vbase offsets go in reverse inheritance-graph order, and
9184 we are walking in inheritance graph order so these end up in
9185 the right order. */
9186 delta = size_diffop_loc (input_location,
9187 BINFO_OFFSET (b), BINFO_OFFSET (non_primary_binfo));
9188
9189 CONSTRUCTOR_APPEND_ELT (vid->inits, NULL_TREE,
9190 fold_build1_loc (input_location, NOP_EXPR,
9191 vtable_entry_type, delta));
9192 }
9193 }
9194
9195 /* Adds the initializers for the vcall offset entries in the vtable
9196 for BINFO (which is part of the class hierarchy dominated by VID->DERIVED)
9197 to VID->INITS. */
9198
9199 static void
9200 build_vcall_offset_vtbl_entries (tree binfo, vtbl_init_data* vid)
9201 {
9202 /* We only need these entries if this base is a virtual base. We
9203 compute the indices -- but do not add to the vtable -- when
9204 building the main vtable for a class. */
9205 if (binfo == TYPE_BINFO (vid->derived)
9206 || (BINFO_VIRTUAL_P (binfo)
9207 /* If BINFO is RTTI_BINFO, then (since BINFO does not
9208 correspond to VID->DERIVED), we are building a primary
9209 construction virtual table. Since this is a primary
9210 virtual table, we do not need the vcall offsets for
9211 BINFO. */
9212 && binfo != vid->rtti_binfo))
9213 {
9214 /* We need a vcall offset for each of the virtual functions in this
9215 vtable. For example:
9216
9217 class A { virtual void f (); };
9218 class B1 : virtual public A { virtual void f (); };
9219 class B2 : virtual public A { virtual void f (); };
9220 class C: public B1, public B2 { virtual void f (); };
9221
9222 A C object has a primary base of B1, which has a primary base of A. A
9223 C also has a secondary base of B2, which no longer has a primary base
9224 of A. So the B2-in-C construction vtable needs a secondary vtable for
9225 A, which will adjust the A* to a B2* to call f. We have no way of
9226 knowing what (or even whether) this offset will be when we define B2,
9227 so we store this "vcall offset" in the A sub-vtable and look it up in
9228 a "virtual thunk" for B2::f.
9229
9230 We need entries for all the functions in our primary vtable and
9231 in our non-virtual bases' secondary vtables. */
9232 vid->vbase = binfo;
9233 /* If we are just computing the vcall indices -- but do not need
9234 the actual entries -- not that. */
9235 if (!BINFO_VIRTUAL_P (binfo))
9236 vid->generate_vcall_entries = false;
9237 /* Now, walk through the non-virtual bases, adding vcall offsets. */
9238 add_vcall_offset_vtbl_entries_r (binfo, vid);
9239 }
9240 }
9241
9242 /* Build vcall offsets, starting with those for BINFO. */
9243
9244 static void
9245 add_vcall_offset_vtbl_entries_r (tree binfo, vtbl_init_data* vid)
9246 {
9247 int i;
9248 tree primary_binfo;
9249 tree base_binfo;
9250
9251 /* Don't walk into virtual bases -- except, of course, for the
9252 virtual base for which we are building vcall offsets. Any
9253 primary virtual base will have already had its offsets generated
9254 through the recursion in build_vcall_and_vbase_vtbl_entries. */
9255 if (BINFO_VIRTUAL_P (binfo) && vid->vbase != binfo)
9256 return;
9257
9258 /* If BINFO has a primary base, process it first. */
9259 primary_binfo = get_primary_binfo (binfo);
9260 if (primary_binfo)
9261 add_vcall_offset_vtbl_entries_r (primary_binfo, vid);
9262
9263 /* Add BINFO itself to the list. */
9264 add_vcall_offset_vtbl_entries_1 (binfo, vid);
9265
9266 /* Scan the non-primary bases of BINFO. */
9267 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
9268 if (base_binfo != primary_binfo)
9269 add_vcall_offset_vtbl_entries_r (base_binfo, vid);
9270 }
9271
9272 /* Called from build_vcall_offset_vtbl_entries_r. */
9273
9274 static void
9275 add_vcall_offset_vtbl_entries_1 (tree binfo, vtbl_init_data* vid)
9276 {
9277 /* Make entries for the rest of the virtuals. */
9278 if (abi_version_at_least (2))
9279 {
9280 tree orig_fn;
9281
9282 /* The ABI requires that the methods be processed in declaration
9283 order. G++ 3.2 used the order in the vtable. */
9284 for (orig_fn = TYPE_METHODS (BINFO_TYPE (binfo));
9285 orig_fn;
9286 orig_fn = DECL_CHAIN (orig_fn))
9287 if (DECL_VINDEX (orig_fn))
9288 add_vcall_offset (orig_fn, binfo, vid);
9289 }
9290 else
9291 {
9292 tree derived_virtuals;
9293 tree base_virtuals;
9294 tree orig_virtuals;
9295 /* If BINFO is a primary base, the most derived class which has
9296 BINFO as a primary base; otherwise, just BINFO. */
9297 tree non_primary_binfo;
9298
9299 /* We might be a primary base class. Go up the inheritance hierarchy
9300 until we find the most derived class of which we are a primary base:
9301 it is the BINFO_VIRTUALS there that we need to consider. */
9302 non_primary_binfo = binfo;
9303 while (BINFO_INHERITANCE_CHAIN (non_primary_binfo))
9304 {
9305 tree b;
9306
9307 /* If we have reached a virtual base, then it must be vid->vbase,
9308 because we ignore other virtual bases in
9309 add_vcall_offset_vtbl_entries_r. In turn, it must be a primary
9310 base (possibly multi-level) of vid->binfo, or we wouldn't
9311 have called build_vcall_and_vbase_vtbl_entries for it. But it
9312 might be a lost primary, so just skip down to vid->binfo. */
9313 if (BINFO_VIRTUAL_P (non_primary_binfo))
9314 {
9315 gcc_assert (non_primary_binfo == vid->vbase);
9316 non_primary_binfo = vid->binfo;
9317 break;
9318 }
9319
9320 b = BINFO_INHERITANCE_CHAIN (non_primary_binfo);
9321 if (get_primary_binfo (b) != non_primary_binfo)
9322 break;
9323 non_primary_binfo = b;
9324 }
9325
9326 if (vid->ctor_vtbl_p)
9327 /* For a ctor vtable we need the equivalent binfo within the hierarchy
9328 where rtti_binfo is the most derived type. */
9329 non_primary_binfo
9330 = original_binfo (non_primary_binfo, vid->rtti_binfo);
9331
9332 for (base_virtuals = BINFO_VIRTUALS (binfo),
9333 derived_virtuals = BINFO_VIRTUALS (non_primary_binfo),
9334 orig_virtuals = BINFO_VIRTUALS (TYPE_BINFO (BINFO_TYPE (binfo)));
9335 base_virtuals;
9336 base_virtuals = TREE_CHAIN (base_virtuals),
9337 derived_virtuals = TREE_CHAIN (derived_virtuals),
9338 orig_virtuals = TREE_CHAIN (orig_virtuals))
9339 {
9340 tree orig_fn;
9341
9342 /* Find the declaration that originally caused this function to
9343 be present in BINFO_TYPE (binfo). */
9344 orig_fn = BV_FN (orig_virtuals);
9345
9346 /* When processing BINFO, we only want to generate vcall slots for
9347 function slots introduced in BINFO. So don't try to generate
9348 one if the function isn't even defined in BINFO. */
9349 if (!SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), DECL_CONTEXT (orig_fn)))
9350 continue;
9351
9352 add_vcall_offset (orig_fn, binfo, vid);
9353 }
9354 }
9355 }
9356
9357 /* Add a vcall offset entry for ORIG_FN to the vtable. */
9358
9359 static void
9360 add_vcall_offset (tree orig_fn, tree binfo, vtbl_init_data *vid)
9361 {
9362 size_t i;
9363 tree vcall_offset;
9364 tree derived_entry;
9365
9366 /* If there is already an entry for a function with the same
9367 signature as FN, then we do not need a second vcall offset.
9368 Check the list of functions already present in the derived
9369 class vtable. */
9370 FOR_EACH_VEC_SAFE_ELT (vid->fns, i, derived_entry)
9371 {
9372 if (same_signature_p (derived_entry, orig_fn)
9373 /* We only use one vcall offset for virtual destructors,
9374 even though there are two virtual table entries. */
9375 || (DECL_DESTRUCTOR_P (derived_entry)
9376 && DECL_DESTRUCTOR_P (orig_fn)))
9377 return;
9378 }
9379
9380 /* If we are building these vcall offsets as part of building
9381 the vtable for the most derived class, remember the vcall
9382 offset. */
9383 if (vid->binfo == TYPE_BINFO (vid->derived))
9384 {
9385 tree_pair_s elt = {orig_fn, vid->index};
9386 vec_safe_push (CLASSTYPE_VCALL_INDICES (vid->derived), elt);
9387 }
9388
9389 /* The next vcall offset will be found at a more negative
9390 offset. */
9391 vid->index = size_binop (MINUS_EXPR, vid->index,
9392 ssize_int (TARGET_VTABLE_DATA_ENTRY_DISTANCE));
9393
9394 /* Keep track of this function. */
9395 vec_safe_push (vid->fns, orig_fn);
9396
9397 if (vid->generate_vcall_entries)
9398 {
9399 tree base;
9400 tree fn;
9401
9402 /* Find the overriding function. */
9403 fn = find_final_overrider (vid->rtti_binfo, binfo, orig_fn);
9404 if (fn == error_mark_node)
9405 vcall_offset = build_zero_cst (vtable_entry_type);
9406 else
9407 {
9408 base = TREE_VALUE (fn);
9409
9410 /* The vbase we're working on is a primary base of
9411 vid->binfo. But it might be a lost primary, so its
9412 BINFO_OFFSET might be wrong, so we just use the
9413 BINFO_OFFSET from vid->binfo. */
9414 vcall_offset = size_diffop_loc (input_location,
9415 BINFO_OFFSET (base),
9416 BINFO_OFFSET (vid->binfo));
9417 vcall_offset = fold_build1_loc (input_location,
9418 NOP_EXPR, vtable_entry_type,
9419 vcall_offset);
9420 }
9421 /* Add the initializer to the vtable. */
9422 CONSTRUCTOR_APPEND_ELT (vid->inits, NULL_TREE, vcall_offset);
9423 }
9424 }
9425
9426 /* Return vtbl initializers for the RTTI entries corresponding to the
9427 BINFO's vtable. The RTTI entries should indicate the object given
9428 by VID->rtti_binfo. */
9429
9430 static void
9431 build_rtti_vtbl_entries (tree binfo, vtbl_init_data* vid)
9432 {
9433 tree b;
9434 tree t;
9435 tree offset;
9436 tree decl;
9437 tree init;
9438
9439 t = BINFO_TYPE (vid->rtti_binfo);
9440
9441 /* To find the complete object, we will first convert to our most
9442 primary base, and then add the offset in the vtbl to that value. */
9443 b = binfo;
9444 while (CLASSTYPE_HAS_PRIMARY_BASE_P (BINFO_TYPE (b))
9445 && !BINFO_LOST_PRIMARY_P (b))
9446 {
9447 tree primary_base;
9448
9449 primary_base = get_primary_binfo (b);
9450 gcc_assert (BINFO_PRIMARY_P (primary_base)
9451 && BINFO_INHERITANCE_CHAIN (primary_base) == b);
9452 b = primary_base;
9453 }
9454 offset = size_diffop_loc (input_location,
9455 BINFO_OFFSET (vid->rtti_binfo), BINFO_OFFSET (b));
9456
9457 /* The second entry is the address of the typeinfo object. */
9458 if (flag_rtti)
9459 decl = build_address (get_tinfo_decl (t));
9460 else
9461 decl = integer_zero_node;
9462
9463 /* Convert the declaration to a type that can be stored in the
9464 vtable. */
9465 init = build_nop (vfunc_ptr_type_node, decl);
9466 CONSTRUCTOR_APPEND_ELT (vid->inits, NULL_TREE, init);
9467
9468 /* Add the offset-to-top entry. It comes earlier in the vtable than
9469 the typeinfo entry. Convert the offset to look like a
9470 function pointer, so that we can put it in the vtable. */
9471 init = build_nop (vfunc_ptr_type_node, offset);
9472 CONSTRUCTOR_APPEND_ELT (vid->inits, NULL_TREE, init);
9473 }
9474
9475 /* TRUE iff TYPE is uniquely derived from PARENT. Ignores
9476 accessibility. */
9477
9478 bool
9479 uniquely_derived_from_p (tree parent, tree type)
9480 {
9481 tree base = lookup_base (type, parent, ba_unique, NULL, tf_none);
9482 return base && base != error_mark_node;
9483 }
9484
9485 /* TRUE iff TYPE is publicly & uniquely derived from PARENT. */
9486
9487 bool
9488 publicly_uniquely_derived_p (tree parent, tree type)
9489 {
9490 tree base = lookup_base (type, parent, ba_ignore_scope | ba_check,
9491 NULL, tf_none);
9492 return base && base != error_mark_node;
9493 }
9494
9495 /* CTX1 and CTX2 are declaration contexts. Return the innermost common
9496 class between them, if any. */
9497
9498 tree
9499 common_enclosing_class (tree ctx1, tree ctx2)
9500 {
9501 if (!TYPE_P (ctx1) || !TYPE_P (ctx2))
9502 return NULL_TREE;
9503 gcc_assert (ctx1 == TYPE_MAIN_VARIANT (ctx1)
9504 && ctx2 == TYPE_MAIN_VARIANT (ctx2));
9505 if (ctx1 == ctx2)
9506 return ctx1;
9507 for (tree t = ctx1; TYPE_P (t); t = TYPE_CONTEXT (t))
9508 TYPE_MARKED_P (t) = true;
9509 tree found = NULL_TREE;
9510 for (tree t = ctx2; TYPE_P (t); t = TYPE_CONTEXT (t))
9511 if (TYPE_MARKED_P (t))
9512 {
9513 found = t;
9514 break;
9515 }
9516 for (tree t = ctx1; TYPE_P (t); t = TYPE_CONTEXT (t))
9517 TYPE_MARKED_P (t) = false;
9518 return found;
9519 }
9520
9521 #include "gt-cp-class.h"