OSDN Git Service

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