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