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