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