OpenCores
URL https://opencores.org/ocsvn/scarts/scarts/trunk

Subversion Repositories scarts

[/] [scarts/] [trunk/] [toolchain/] [scarts-gcc/] [gcc-4.1.1/] [gcc/] [cp/] [class.c] - Blame information for rev 20

Go to most recent revision | Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.