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