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