]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/cp/class.c
[multiple changes]
[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
af287697
MM
4889/* Determine the "key method" for the class type indicated by TYPE,
4890 and set CLASSTYPE_KEY_METHOD accordingly. */
9aad8f83 4891
af287697
MM
4892void
4893determine_key_method (tree type)
9aad8f83
MA
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))
af287697 4901 return;
9aad8f83 4902
af287697
MM
4903 /* The key method is the first non-pure virtual function that is not
4904 inline at the point of class definition. On some targets the
4905 key function may not be inline; those targets should not call
4906 this function until the end of the translation unit. */
9aad8f83
MA
4907 for (method = TYPE_METHODS (type); method != NULL_TREE;
4908 method = TREE_CHAIN (method))
4909 if (DECL_VINDEX (method) != NULL_TREE
4910 && ! DECL_DECLARED_INLINE_P (method)
4911 && ! DECL_PURE_VIRTUAL_P (method))
af287697
MM
4912 {
4913 CLASSTYPE_KEY_METHOD (type) = method;
4914 break;
4915 }
9aad8f83 4916
af287697 4917 return;
9aad8f83
MA
4918}
4919
548502d3
MM
4920/* Perform processing required when the definition of T (a class type)
4921 is complete. */
2ef16140
MM
4922
4923void
94edc4ab 4924finish_struct_1 (tree t)
2ef16140
MM
4925{
4926 tree x;
00a17e31 4927 /* A TREE_LIST. The TREE_VALUE of each node is a FUNCTION_DECL. */
e6858a84 4928 tree virtuals = NULL_TREE;
2ef16140
MM
4929 int n_fields = 0;
4930 tree vfield;
2ef16140 4931
d0f062fb 4932 if (COMPLETE_TYPE_P (t))
2ef16140 4933 {
8dc2b103
NS
4934 gcc_assert (IS_AGGR_TYPE (t));
4935 error ("redefinition of `%#T'", t);
2ef16140
MM
4936 popclass ();
4937 return;
4938 }
4939
2ef16140
MM
4940 /* If this type was previously laid out as a forward reference,
4941 make sure we lay it out again. */
2ef16140 4942 TYPE_SIZE (t) = NULL_TREE;
911a71a7 4943 CLASSTYPE_PRIMARY_BINFO (t) = NULL_TREE;
2ef16140 4944
6d0a3f67
NS
4945 fixup_inline_methods (t);
4946
5ec1192e
MM
4947 /* Make assumptions about the class; we'll reset the flags if
4948 necessary. */
58731fd1
MM
4949 CLASSTYPE_EMPTY_P (t) = 1;
4950 CLASSTYPE_NEARLY_EMPTY_P (t) = 1;
5ec1192e 4951 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) = 0;
58731fd1 4952
2ef16140 4953 /* Do end-of-class semantic processing: checking the validity of the
03702748 4954 bases and members and add implicitly generated methods. */
58731fd1 4955 check_bases_and_members (t);
2ef16140 4956
f4f206f4 4957 /* Find the key method. */
a63996f1 4958 if (TYPE_CONTAINS_VPTR_P (t))
9aad8f83 4959 {
af287697
MM
4960 /* The Itanium C++ ABI permits the key method to be chosen when
4961 the class is defined -- even though the key method so
4962 selected may later turn out to be an inline function. On
4963 some systems (such as ARM Symbian OS) the key method cannot
4964 be determined until the end of the translation unit. On such
4965 systems, we leave CLASSTYPE_KEY_METHOD set to NULL, which
4966 will cause the class to be added to KEYED_CLASSES. Then, in
4967 finish_file we will determine the key method. */
4968 if (targetm.cxx.key_method_may_be_inline ())
4969 determine_key_method (t);
9aad8f83
MA
4970
4971 /* If a polymorphic class has no key method, we may emit the vtable
9bcb9aae 4972 in every translation unit where the class definition appears. */
9aad8f83
MA
4973 if (CLASSTYPE_KEY_METHOD (t) == NULL_TREE)
4974 keyed_classes = tree_cons (NULL_TREE, t, keyed_classes);
4975 }
4976
2ef16140 4977 /* Layout the class itself. */
e93ee644 4978 layout_class_type (t, &virtuals);
a0c68737
NS
4979 if (CLASSTYPE_AS_BASE (t) != t)
4980 /* We use the base type for trivial assignments, and hence it
4981 needs a mode. */
4982 compute_record_mode (CLASSTYPE_AS_BASE (t));
8ebeee52 4983
d0cd8b44 4984 /* Make sure that we get our own copy of the vfield FIELD_DECL. */
3ef397c1 4985 vfield = TYPE_VFIELD (t);
d60d223b 4986 if (vfield && CLASSTYPE_HAS_PRIMARY_BASE_P (t))
2986ae00 4987 {
d60d223b
NS
4988 tree primary = CLASSTYPE_PRIMARY_BINFO (t);
4989
50bc768d
NS
4990 gcc_assert (same_type_p (DECL_FIELD_CONTEXT (vfield),
4991 BINFO_TYPE (primary)));
00a17e31 4992 /* The vtable better be at the start. */
50bc768d
NS
4993 gcc_assert (integer_zerop (DECL_FIELD_OFFSET (vfield)));
4994 gcc_assert (integer_zerop (BINFO_OFFSET (primary)));
d60d223b 4995
0acf7199 4996 vfield = copy_decl (vfield);
2986ae00 4997 DECL_FIELD_CONTEXT (vfield) = t;
d3a3fb6a 4998 TYPE_VFIELD (t) = vfield;
2986ae00 4999 }
d60d223b 5000 else
50bc768d 5001 gcc_assert (!vfield || DECL_FIELD_CONTEXT (vfield) == t);
4c6b7393 5002
e93ee644 5003 virtuals = modify_all_vtables (t, nreverse (virtuals));
db5ae43f 5004
5e19c053 5005 /* If necessary, create the primary vtable for this class. */
e6858a84 5006 if (virtuals || TYPE_CONTAINS_VPTR_P (t))
8d08fdba 5007 {
8d08fdba 5008 /* We must enter these virtuals into the table. */
3ef397c1 5009 if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t))
da3d4dfa 5010 build_primary_vtable (NULL_TREE, t);
dbbf88d1 5011 else if (! BINFO_NEW_VTABLE_MARKED (TYPE_BINFO (t)))
0533d788
MM
5012 /* Here we know enough to change the type of our virtual
5013 function table, but we will wait until later this function. */
28531dd0 5014 build_primary_vtable (CLASSTYPE_PRIMARY_BINFO (t), t);
8d08fdba
MS
5015 }
5016
bbd15aac 5017 if (TYPE_CONTAINS_VPTR_P (t))
8d08fdba 5018 {
e93ee644
MM
5019 int vindex;
5020 tree fn;
5021
604a3205 5022 if (BINFO_VTABLE (TYPE_BINFO (t)))
50bc768d 5023 gcc_assert (DECL_VIRTUAL_P (BINFO_VTABLE (TYPE_BINFO (t))));
1eb4bea9 5024 if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t))
50bc768d 5025 gcc_assert (BINFO_VIRTUALS (TYPE_BINFO (t)) == NULL_TREE);
1eb4bea9 5026
e6858a84 5027 /* Add entries for virtual functions introduced by this class. */
604a3205
NS
5028 BINFO_VIRTUALS (TYPE_BINFO (t))
5029 = chainon (BINFO_VIRTUALS (TYPE_BINFO (t)), virtuals);
e93ee644
MM
5030
5031 /* Set DECL_VINDEX for all functions declared in this class. */
5032 for (vindex = 0, fn = BINFO_VIRTUALS (TYPE_BINFO (t));
5033 fn;
5034 fn = TREE_CHAIN (fn),
5035 vindex += (TARGET_VTABLE_USES_DESCRIPTORS
5036 ? TARGET_VTABLE_USES_DESCRIPTORS : 1))
4977bab6
ZW
5037 {
5038 tree fndecl = BV_FN (fn);
5039
5040 if (DECL_THUNK_P (fndecl))
5041 /* A thunk. We should never be calling this entry directly
5042 from this vtable -- we'd use the entry for the non
5043 thunk base function. */
5044 DECL_VINDEX (fndecl) = NULL_TREE;
5045 else if (TREE_CODE (DECL_VINDEX (fndecl)) != INTEGER_CST)
7d60be94 5046 DECL_VINDEX (fndecl) = build_int_cst (NULL_TREE, vindex);
4977bab6 5047 }
8d08fdba
MS
5048 }
5049
d2c5305b 5050 finish_struct_bits (t);
8d08fdba 5051
f30432d7
MS
5052 /* Complete the rtl for any static member objects of the type we're
5053 working on. */
58010b57 5054 for (x = TYPE_FIELDS (t); x; x = TREE_CHAIN (x))
19e7881c 5055 if (TREE_CODE (x) == VAR_DECL && TREE_STATIC (x)
c7f4981a 5056 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (x)), t))
19e7881c 5057 DECL_MODE (x) = TYPE_MODE (t);
8d08fdba 5058
f90cdf34 5059 /* Done with FIELDS...now decide whether to sort these for
58010b57 5060 faster lookups later.
f90cdf34 5061
6c73ad72 5062 We use a small number because most searches fail (succeeding
f90cdf34
MT
5063 ultimately as the search bores through the inheritance
5064 hierarchy), and we want this failure to occur quickly. */
5065
58010b57
MM
5066 n_fields = count_fields (TYPE_FIELDS (t));
5067 if (n_fields > 7)
f90cdf34 5068 {
99dd239f
GDR
5069 struct sorted_fields_type *field_vec = GGC_NEWVAR
5070 (struct sorted_fields_type,
5071 sizeof (struct sorted_fields_type) + n_fields * sizeof (tree));
d07605f5
AP
5072 field_vec->len = n_fields;
5073 add_fields_to_record_type (TYPE_FIELDS (t), field_vec, 0);
5074 qsort (field_vec->elts, n_fields, sizeof (tree),
17211ab5 5075 field_decl_cmp);
f90cdf34
MT
5076 if (! DECL_LANG_SPECIFIC (TYPE_MAIN_DECL (t)))
5077 retrofit_lang_decl (TYPE_MAIN_DECL (t));
5078 DECL_SORTED_FIELDS (TYPE_MAIN_DECL (t)) = field_vec;
5079 }
5080
8d7a5379
MM
5081 /* Make the rtl for any new vtables we have created, and unmark
5082 the base types we marked. */
5083 finish_vtbls (t);
9965d119 5084
23656158
MM
5085 /* Build the VTT for T. */
5086 build_vtt (t);
8d7a5379 5087
0830ae44 5088 if (warn_nonvdtor && TYPE_POLYMORPHIC_P (t) && TYPE_HAS_DESTRUCTOR (t)
aaaa46d2 5089 && !DECL_VINDEX (CLASSTYPE_DESTRUCTORS (t)))
9fd8f60d
TM
5090
5091 {
aaaa46d2 5092 tree dtor = CLASSTYPE_DESTRUCTORS (t);
9fd8f60d
TM
5093
5094 /* Warn only if the dtor is non-private or the class has friends */
5095 if (!TREE_PRIVATE (dtor) ||
5096 (CLASSTYPE_FRIEND_CLASSES (t) ||
5097 DECL_FRIENDLIST (TYPE_MAIN_DECL (t))))
5098 warning ("%#T' has virtual functions but non-virtual destructor", t);
5099 }
8d08fdba 5100
0154eaa8 5101 complete_vars (t);
8d08fdba 5102
9e9ff709
MS
5103 if (warn_overloaded_virtual)
5104 warn_hidden (t);
8d08fdba 5105
ae673f14 5106 maybe_suppress_debug_info (t);
8d08fdba 5107
b7442fb5
NS
5108 dump_class_hierarchy (t);
5109
d2e5ee5c 5110 /* Finish debugging output for this type. */
881c6935 5111 rest_of_type_compilation (t, ! LOCAL_CLASS_P (t));
8d08fdba 5112}
f30432d7 5113
61a127b3
MM
5114/* When T was built up, the member declarations were added in reverse
5115 order. Rearrange them to declaration order. */
5116
5117void
94edc4ab 5118unreverse_member_declarations (tree t)
61a127b3
MM
5119{
5120 tree next;
5121 tree prev;
5122 tree x;
5123
7088fca9
KL
5124 /* The following lists are all in reverse order. Put them in
5125 declaration order now. */
61a127b3 5126 TYPE_METHODS (t) = nreverse (TYPE_METHODS (t));
7088fca9 5127 CLASSTYPE_DECL_LIST (t) = nreverse (CLASSTYPE_DECL_LIST (t));
61a127b3
MM
5128
5129 /* Actually, for the TYPE_FIELDS, only the non TYPE_DECLs are in
5130 reverse order, so we can't just use nreverse. */
5131 prev = NULL_TREE;
5132 for (x = TYPE_FIELDS (t);
5133 x && TREE_CODE (x) != TYPE_DECL;
5134 x = next)
5135 {
5136 next = TREE_CHAIN (x);
5137 TREE_CHAIN (x) = prev;
5138 prev = x;
5139 }
5140 if (prev)
5141 {
5142 TREE_CHAIN (TYPE_FIELDS (t)) = x;
5143 if (prev)
5144 TYPE_FIELDS (t) = prev;
5145 }
5146}
5147
f30432d7 5148tree
94edc4ab 5149finish_struct (tree t, tree attributes)
f30432d7 5150{
82a98427 5151 location_t saved_loc = input_location;
1f0d71c5 5152
61a127b3
MM
5153 /* Now that we've got all the field declarations, reverse everything
5154 as necessary. */
5155 unreverse_member_declarations (t);
f30432d7 5156
91d231cb 5157 cplus_decl_attributes (&t, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
6467930b 5158
1f0d71c5
NS
5159 /* Nadger the current location so that diagnostics point to the start of
5160 the struct, not the end. */
f31686a3 5161 input_location = DECL_SOURCE_LOCATION (TYPE_NAME (t));
1f0d71c5 5162
5566b478 5163 if (processing_template_decl)
f30432d7 5164 {
7fb213d8
GB
5165 tree x;
5166
b0e0b31f 5167 finish_struct_methods (t);
867580ce 5168 TYPE_SIZE (t) = bitsize_zero_node;
7fb213d8
GB
5169
5170 /* We need to emit an error message if this type was used as a parameter
5171 and it is an abstract type, even if it is a template. We construct
5172 a simple CLASSTYPE_PURE_VIRTUALS list without taking bases into
5173 account and we call complete_vars with this type, which will check
5174 the PARM_DECLS. Note that while the type is being defined,
5175 CLASSTYPE_PURE_VIRTUALS contains the list of the inline friends
5176 (see CLASSTYPE_INLINE_FRIENDS) so we need to clear it. */
5177 CLASSTYPE_PURE_VIRTUALS (t) = NULL_TREE;
5178 for (x = TYPE_METHODS (t); x; x = TREE_CHAIN (x))
5179 if (DECL_PURE_VIRTUAL_P (x))
5180 CLASSTYPE_PURE_VIRTUALS (t)
5181 = tree_cons (NULL_TREE, x, CLASSTYPE_PURE_VIRTUALS (t));
5182 complete_vars (t);
6f1b4c42 5183 }
f30432d7 5184 else
9f33663b 5185 finish_struct_1 (t);
5566b478 5186
82a98427 5187 input_location = saved_loc;
1f0d71c5 5188
5566b478 5189 TYPE_BEING_DEFINED (t) = 0;
8f032717 5190
5566b478 5191 if (current_class_type)
b74a0560 5192 popclass ();
5566b478 5193 else
357351e5 5194 error ("trying to finish struct, but kicked out due to previous parse errors");
5566b478 5195
5f261ba9
MM
5196 if (processing_template_decl && at_function_scope_p ())
5197 add_stmt (build_min (TAG_DEFN, t));
ae673f14 5198
5566b478 5199 return t;
f30432d7 5200}
8d08fdba 5201\f
51ddb82e 5202/* Return the dynamic type of INSTANCE, if known.
8d08fdba
MS
5203 Used to determine whether the virtual function table is needed
5204 or not.
5205
5206 *NONNULL is set iff INSTANCE can be known to be nonnull, regardless
97d953bb
MM
5207 of our knowledge of its type. *NONNULL should be initialized
5208 before this function is called. */
e92cc029 5209
d8e178a0 5210static tree
94edc4ab 5211fixed_type_or_null (tree instance, int* nonnull, int* cdtorp)
8d08fdba
MS
5212{
5213 switch (TREE_CODE (instance))
5214 {
5215 case INDIRECT_REF:
608afcc5 5216 if (POINTER_TYPE_P (TREE_TYPE (instance)))
a0de9d20
JM
5217 return NULL_TREE;
5218 else
5219 return fixed_type_or_null (TREE_OPERAND (instance, 0),
5220 nonnull, cdtorp);
5221
8d08fdba
MS
5222 case CALL_EXPR:
5223 /* This is a call to a constructor, hence it's never zero. */
5224 if (TREE_HAS_CONSTRUCTOR (instance))
5225 {
5226 if (nonnull)
5227 *nonnull = 1;
51ddb82e 5228 return TREE_TYPE (instance);
8d08fdba 5229 }
51ddb82e 5230 return NULL_TREE;
8d08fdba
MS
5231
5232 case SAVE_EXPR:
5233 /* This is a call to a constructor, hence it's never zero. */
5234 if (TREE_HAS_CONSTRUCTOR (instance))
5235 {
5236 if (nonnull)
5237 *nonnull = 1;
51ddb82e 5238 return TREE_TYPE (instance);
8d08fdba 5239 }
394fd776 5240 return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull, cdtorp);
8d08fdba 5241
8d08fdba
MS
5242 case PLUS_EXPR:
5243 case MINUS_EXPR:
394fd776
NS
5244 if (TREE_CODE (TREE_OPERAND (instance, 0)) == ADDR_EXPR)
5245 return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull, cdtorp);
8d08fdba
MS
5246 if (TREE_CODE (TREE_OPERAND (instance, 1)) == INTEGER_CST)
5247 /* Propagate nonnull. */
f63ab951 5248 return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull, cdtorp);
51ddb82e 5249 return NULL_TREE;
8d08fdba
MS
5250
5251 case NOP_EXPR:
5252 case CONVERT_EXPR:
394fd776 5253 return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull, cdtorp);
8d08fdba
MS
5254
5255 case ADDR_EXPR:
88f19756 5256 instance = TREE_OPERAND (instance, 0);
8d08fdba 5257 if (nonnull)
88f19756
RH
5258 {
5259 /* Just because we see an ADDR_EXPR doesn't mean we're dealing
5260 with a real object -- given &p->f, p can still be null. */
5261 tree t = get_base_address (instance);
5262 /* ??? Probably should check DECL_WEAK here. */
5263 if (t && DECL_P (t))
5264 *nonnull = 1;
5265 }
5266 return fixed_type_or_null (instance, nonnull, cdtorp);
8d08fdba
MS
5267
5268 case COMPONENT_REF:
642124c6
RH
5269 /* If this component is really a base class reference, then the field
5270 itself isn't definitive. */
5271 if (DECL_FIELD_IS_BASE (TREE_OPERAND (instance, 1)))
5272 return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull, cdtorp);
394fd776 5273 return fixed_type_or_null (TREE_OPERAND (instance, 1), nonnull, cdtorp);
8d08fdba 5274
8d08fdba
MS
5275 case VAR_DECL:
5276 case FIELD_DECL:
5277 if (TREE_CODE (TREE_TYPE (instance)) == ARRAY_TYPE
5278 && IS_AGGR_TYPE (TREE_TYPE (TREE_TYPE (instance))))
5279 {
5280 if (nonnull)
5281 *nonnull = 1;
51ddb82e 5282 return TREE_TYPE (TREE_TYPE (instance));
8d08fdba 5283 }
e92cc029 5284 /* fall through... */
8d08fdba
MS
5285 case TARGET_EXPR:
5286 case PARM_DECL:
f63ab951 5287 case RESULT_DECL:
8d08fdba
MS
5288 if (IS_AGGR_TYPE (TREE_TYPE (instance)))
5289 {
5290 if (nonnull)
5291 *nonnull = 1;
51ddb82e 5292 return TREE_TYPE (instance);
8d08fdba 5293 }
394fd776
NS
5294 else if (instance == current_class_ptr)
5295 {
5296 if (nonnull)
5297 *nonnull = 1;
5298
00a17e31 5299 /* if we're in a ctor or dtor, we know our type. */
394fd776
NS
5300 if (DECL_LANG_SPECIFIC (current_function_decl)
5301 && (DECL_CONSTRUCTOR_P (current_function_decl)
5302 || DECL_DESTRUCTOR_P (current_function_decl)))
5303 {
5304 if (cdtorp)
5305 *cdtorp = 1;
5306 return TREE_TYPE (TREE_TYPE (instance));
5307 }
5308 }
5309 else if (TREE_CODE (TREE_TYPE (instance)) == REFERENCE_TYPE)
5310 {
5311 /* Reference variables should be references to objects. */
5312 if (nonnull)
8d08fdba 5313 *nonnull = 1;
772f8889
MM
5314
5315 /* DECL_VAR_MARKED_P is used to prevent recursion; a
5316 variable's initializer may refer to the variable
5317 itself. */
5318 if (TREE_CODE (instance) == VAR_DECL
5319 && DECL_INITIAL (instance)
5320 && !DECL_VAR_MARKED_P (instance))
5321 {
5322 tree type;
5323 DECL_VAR_MARKED_P (instance) = 1;
5324 type = fixed_type_or_null (DECL_INITIAL (instance),
5325 nonnull, cdtorp);
5326 DECL_VAR_MARKED_P (instance) = 0;
5327 return type;
5328 }
8d08fdba 5329 }
51ddb82e 5330 return NULL_TREE;
8d08fdba
MS
5331
5332 default:
51ddb82e 5333 return NULL_TREE;
8d08fdba
MS
5334 }
5335}
51ddb82e 5336
838dfd8a 5337/* Return nonzero if the dynamic type of INSTANCE is known, and
338d90b8
NS
5338 equivalent to the static type. We also handle the case where
5339 INSTANCE is really a pointer. Return negative if this is a
5340 ctor/dtor. There the dynamic type is known, but this might not be
5341 the most derived base of the original object, and hence virtual
5342 bases may not be layed out according to this type.
51ddb82e
JM
5343
5344 Used to determine whether the virtual function table is needed
5345 or not.
5346
5347 *NONNULL is set iff INSTANCE can be known to be nonnull, regardless
97d953bb
MM
5348 of our knowledge of its type. *NONNULL should be initialized
5349 before this function is called. */
51ddb82e
JM
5350
5351int
94edc4ab 5352resolves_to_fixed_type_p (tree instance, int* nonnull)
51ddb82e
JM
5353{
5354 tree t = TREE_TYPE (instance);
394fd776
NS
5355 int cdtorp = 0;
5356
5357 tree fixed = fixed_type_or_null (instance, nonnull, &cdtorp);
51ddb82e
JM
5358 if (fixed == NULL_TREE)
5359 return 0;
5360 if (POINTER_TYPE_P (t))
5361 t = TREE_TYPE (t);
394fd776
NS
5362 if (!same_type_ignoring_top_level_qualifiers_p (t, fixed))
5363 return 0;
5364 return cdtorp ? -1 : 1;
51ddb82e
JM
5365}
5366
8d08fdba
MS
5367\f
5368void
94edc4ab 5369init_class_processing (void)
8d08fdba
MS
5370{
5371 current_class_depth = 0;
61a127b3
MM
5372 current_class_stack_size = 10;
5373 current_class_stack
c68b0a84 5374 = xmalloc (current_class_stack_size * sizeof (struct class_stack_node));
1f6e1acc 5375 VARRAY_TREE_INIT (local_classes, 8, "local_classes");
8d08fdba 5376
0e5921e8
ZW
5377 ridpointers[(int) RID_PUBLIC] = access_public_node;
5378 ridpointers[(int) RID_PRIVATE] = access_private_node;
5379 ridpointers[(int) RID_PROTECTED] = access_protected_node;
8d08fdba
MS
5380}
5381
39fb05d0
MM
5382/* Restore the cached PREVIOUS_CLASS_LEVEL. */
5383
5384static void
5385restore_class_cache (void)
5386{
39fb05d0 5387 tree type;
39fb05d0
MM
5388
5389 /* We are re-entering the same class we just left, so we don't
5390 have to search the whole inheritance matrix to find all the
5391 decls to bind again. Instead, we install the cached
5392 class_shadowed list and walk through it binding names. */
5393 push_binding_level (previous_class_level);
5394 class_binding_level = previous_class_level;
39fb05d0
MM
5395 /* Restore IDENTIFIER_TYPE_VALUE. */
5396 for (type = class_binding_level->type_shadowed;
5397 type;
5398 type = TREE_CHAIN (type))
5399 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (type), TREE_TYPE (type));
5400}
5401
a723baf1
MM
5402/* Set global variables CURRENT_CLASS_NAME and CURRENT_CLASS_TYPE as
5403 appropriate for TYPE.
8d08fdba 5404
8d08fdba
MS
5405 So that we may avoid calls to lookup_name, we cache the _TYPE
5406 nodes of local TYPE_DECLs in the TREE_TYPE field of the name.
5407
5408 For multiple inheritance, we perform a two-pass depth-first search
39fb05d0 5409 of the type lattice. */
8d08fdba
MS
5410
5411void
29370796 5412pushclass (tree type)
8d08fdba 5413{
7fb4a8f7 5414 type = TYPE_MAIN_VARIANT (type);
8d08fdba 5415
61a127b3
MM
5416 /* Make sure there is enough room for the new entry on the stack. */
5417 if (current_class_depth + 1 >= current_class_stack_size)
8d08fdba 5418 {
61a127b3
MM
5419 current_class_stack_size *= 2;
5420 current_class_stack
c68b0a84
KG
5421 = xrealloc (current_class_stack,
5422 current_class_stack_size
5423 * sizeof (struct class_stack_node));
8d08fdba
MS
5424 }
5425
61a127b3
MM
5426 /* Insert a new entry on the class stack. */
5427 current_class_stack[current_class_depth].name = current_class_name;
5428 current_class_stack[current_class_depth].type = current_class_type;
5429 current_class_stack[current_class_depth].access = current_access_specifier;
8f032717 5430 current_class_stack[current_class_depth].names_used = 0;
61a127b3
MM
5431 current_class_depth++;
5432
5433 /* Now set up the new type. */
8d08fdba
MS
5434 current_class_name = TYPE_NAME (type);
5435 if (TREE_CODE (current_class_name) == TYPE_DECL)
5436 current_class_name = DECL_NAME (current_class_name);
5437 current_class_type = type;
5438
61a127b3
MM
5439 /* By default, things in classes are private, while things in
5440 structures or unions are public. */
5441 current_access_specifier = (CLASSTYPE_DECLARED_CLASS (type)
5442 ? access_private_node
5443 : access_public_node);
5444
89b578be
MM
5445 if (previous_class_level
5446 && type != previous_class_level->this_entity
8d08fdba
MS
5447 && current_class_depth == 1)
5448 {
5449 /* Forcibly remove any old class remnants. */
8f032717 5450 invalidate_class_lookup_cache ();
8d08fdba
MS
5451 }
5452
89b578be
MM
5453 if (!previous_class_level
5454 || type != previous_class_level->this_entity
5455 || current_class_depth > 1)
90ea9897 5456 pushlevel_class ();
29370796 5457 else
39fb05d0 5458 restore_class_cache ();
29370796
NS
5459
5460 cxx_remember_type_decls (CLASSTYPE_NESTED_UTDS (type));
8f032717
MM
5461}
5462
39fb05d0
MM
5463/* When we exit a toplevel class scope, we save its binding level so
5464 that we can restore it quickly. Here, we've entered some other
5465 class, so we must invalidate our cache. */
8d08fdba 5466
8f032717 5467void
94edc4ab 5468invalidate_class_lookup_cache (void)
8f032717 5469{
89b578be 5470 previous_class_level = NULL;
8d08fdba
MS
5471}
5472
5473/* Get out of the current class scope. If we were in a class scope
b74a0560 5474 previously, that is the one popped to. */
e92cc029 5475
8d08fdba 5476void
94edc4ab 5477popclass (void)
8d08fdba 5478{
273a708f 5479 poplevel_class ();
8d08fdba
MS
5480
5481 current_class_depth--;
61a127b3
MM
5482 current_class_name = current_class_stack[current_class_depth].name;
5483 current_class_type = current_class_stack[current_class_depth].type;
5484 current_access_specifier = current_class_stack[current_class_depth].access;
8f032717
MM
5485 if (current_class_stack[current_class_depth].names_used)
5486 splay_tree_delete (current_class_stack[current_class_depth].names_used);
8d08fdba
MS
5487}
5488
70adf8a9
JM
5489/* Returns 1 if current_class_type is either T or a nested type of T.
5490 We start looking from 1 because entry 0 is from global scope, and has
5491 no type. */
b9082e8a
JM
5492
5493int
94edc4ab 5494currently_open_class (tree t)
b9082e8a
JM
5495{
5496 int i;
14d22dd6 5497 if (current_class_type && same_type_p (t, current_class_type))
b9082e8a 5498 return 1;
70adf8a9 5499 for (i = 1; i < current_class_depth; ++i)
14d22dd6
MM
5500 if (current_class_stack[i].type
5501 && same_type_p (current_class_stack [i].type, t))
b9082e8a
JM
5502 return 1;
5503 return 0;
5504}
5505
70adf8a9
JM
5506/* If either current_class_type or one of its enclosing classes are derived
5507 from T, return the appropriate type. Used to determine how we found
5508 something via unqualified lookup. */
5509
5510tree
94edc4ab 5511currently_open_derived_class (tree t)
70adf8a9
JM
5512{
5513 int i;
5514
9bcb9aae 5515 /* The bases of a dependent type are unknown. */
1fb3244a
MM
5516 if (dependent_type_p (t))
5517 return NULL_TREE;
5518
c44e68a5
KL
5519 if (!current_class_type)
5520 return NULL_TREE;
5521
70adf8a9
JM
5522 if (DERIVED_FROM_P (t, current_class_type))
5523 return current_class_type;
5524
5525 for (i = current_class_depth - 1; i > 0; --i)
5526 if (DERIVED_FROM_P (t, current_class_stack[i].type))
5527 return current_class_stack[i].type;
5528
5529 return NULL_TREE;
5530}
5531
8d08fdba 5532/* When entering a class scope, all enclosing class scopes' names with
14d22dd6
MM
5533 static meaning (static variables, static functions, types and
5534 enumerators) have to be visible. This recursive function calls
5535 pushclass for all enclosing class contexts until global or a local
5536 scope is reached. TYPE is the enclosed class. */
8d08fdba
MS
5537
5538void
14d22dd6 5539push_nested_class (tree type)
8d08fdba 5540{
a28e3c7f
MS
5541 tree context;
5542
b262d64c 5543 /* A namespace might be passed in error cases, like A::B:C. */
07c88314
MM
5544 if (type == NULL_TREE
5545 || type == error_mark_node
b262d64c 5546 || TREE_CODE (type) == NAMESPACE_DECL
07c88314 5547 || ! IS_AGGR_TYPE (type)
73b0fce8 5548 || TREE_CODE (type) == TEMPLATE_TYPE_PARM
a1281f45 5549 || TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
a28e3c7f
MS
5550 return;
5551
d2e5ee5c 5552 context = DECL_CONTEXT (TYPE_MAIN_DECL (type));
8d08fdba 5553
6b400b21 5554 if (context && CLASS_TYPE_P (context))
14d22dd6 5555 push_nested_class (context);
29370796 5556 pushclass (type);
8d08fdba
MS
5557}
5558
a723baf1 5559/* Undoes a push_nested_class call. */
8d08fdba
MS
5560
5561void
94edc4ab 5562pop_nested_class (void)
8d08fdba 5563{
d2e5ee5c 5564 tree context = DECL_CONTEXT (TYPE_MAIN_DECL (current_class_type));
8d08fdba 5565
b74a0560 5566 popclass ();
6b400b21 5567 if (context && CLASS_TYPE_P (context))
b74a0560 5568 pop_nested_class ();
8d08fdba
MS
5569}
5570
46ccf50a
JM
5571/* Returns the number of extern "LANG" blocks we are nested within. */
5572
5573int
94edc4ab 5574current_lang_depth (void)
46ccf50a
JM
5575{
5576 return VARRAY_ACTIVE_SIZE (current_lang_base);
5577}
5578
8d08fdba
MS
5579/* Set global variables CURRENT_LANG_NAME to appropriate value
5580 so that behavior of name-mangling machinery is correct. */
5581
5582void
94edc4ab 5583push_lang_context (tree name)
8d08fdba 5584{
46ccf50a 5585 VARRAY_PUSH_TREE (current_lang_base, current_lang_name);
8d08fdba 5586
e229f2cd 5587 if (name == lang_name_cplusplus)
8d08fdba 5588 {
8d08fdba
MS
5589 current_lang_name = name;
5590 }
e229f2cd
PB
5591 else if (name == lang_name_java)
5592 {
e229f2cd
PB
5593 current_lang_name = name;
5594 /* DECL_IGNORED_P is initially set for these types, to avoid clutter.
5595 (See record_builtin_java_type in decl.c.) However, that causes
5596 incorrect debug entries if these types are actually used.
00a17e31 5597 So we re-enable debug output after extern "Java". */
e3cd9945
APB
5598 DECL_IGNORED_P (TYPE_NAME (java_byte_type_node)) = 0;
5599 DECL_IGNORED_P (TYPE_NAME (java_short_type_node)) = 0;
5600 DECL_IGNORED_P (TYPE_NAME (java_int_type_node)) = 0;
5601 DECL_IGNORED_P (TYPE_NAME (java_long_type_node)) = 0;
5602 DECL_IGNORED_P (TYPE_NAME (java_float_type_node)) = 0;
5603 DECL_IGNORED_P (TYPE_NAME (java_double_type_node)) = 0;
5604 DECL_IGNORED_P (TYPE_NAME (java_char_type_node)) = 0;
5605 DECL_IGNORED_P (TYPE_NAME (java_boolean_type_node)) = 0;
e229f2cd 5606 }
8d08fdba
MS
5607 else if (name == lang_name_c)
5608 {
8d08fdba
MS
5609 current_lang_name = name;
5610 }
5611 else
4460cef2 5612 error ("language string `\"%E\"' not recognized", name);
8d08fdba
MS
5613}
5614
5615/* Get out of the current language scope. */
e92cc029 5616
8d08fdba 5617void
94edc4ab 5618pop_lang_context (void)
8d08fdba 5619{
46ccf50a
JM
5620 current_lang_name = VARRAY_TOP_TREE (current_lang_base);
5621 VARRAY_POP (current_lang_base);
8d08fdba 5622}
8d08fdba
MS
5623\f
5624/* Type instantiation routines. */
5625
104bf76a
MM
5626/* Given an OVERLOAD and a TARGET_TYPE, return the function that
5627 matches the TARGET_TYPE. If there is no satisfactory match, return
92af500d
NS
5628 error_mark_node, and issue a error & warning messages under control
5629 of FLAGS. Permit pointers to member function if FLAGS permits. If
5630 TEMPLATE_ONLY, the name of the overloaded function was a
5631 template-id, and EXPLICIT_TARGS are the explicitly provided
104bf76a
MM
5632 template arguments. */
5633
2c73f9f5 5634static tree
94edc4ab
NN
5635resolve_address_of_overloaded_function (tree target_type,
5636 tree overload,
92af500d
NS
5637 tsubst_flags_t flags,
5638 bool template_only,
94edc4ab 5639 tree explicit_targs)
2c73f9f5 5640{
104bf76a
MM
5641 /* Here's what the standard says:
5642
5643 [over.over]
5644
5645 If the name is a function template, template argument deduction
5646 is done, and if the argument deduction succeeds, the deduced
5647 arguments are used to generate a single template function, which
5648 is added to the set of overloaded functions considered.
5649
5650 Non-member functions and static member functions match targets of
5651 type "pointer-to-function" or "reference-to-function." Nonstatic
5652 member functions match targets of type "pointer-to-member
5653 function;" the function type of the pointer to member is used to
5654 select the member function from the set of overloaded member
5655 functions. If a nonstatic member function is selected, the
5656 reference to the overloaded function name is required to have the
5657 form of a pointer to member as described in 5.3.1.
5658
5659 If more than one function is selected, any template functions in
5660 the set are eliminated if the set also contains a non-template
5661 function, and any given template function is eliminated if the
5662 set contains a second template function that is more specialized
5663 than the first according to the partial ordering rules 14.5.5.2.
5664 After such eliminations, if any, there shall remain exactly one
5665 selected function. */
5666
5667 int is_ptrmem = 0;
5668 int is_reference = 0;
5669 /* We store the matches in a TREE_LIST rooted here. The functions
5670 are the TREE_PURPOSE, not the TREE_VALUE, in this list, for easy
5671 interoperability with most_specialized_instantiation. */
5672 tree matches = NULL_TREE;
50714e79 5673 tree fn;
104bf76a 5674
d8f8dca1
MM
5675 /* By the time we get here, we should be seeing only real
5676 pointer-to-member types, not the internal POINTER_TYPE to
5677 METHOD_TYPE representation. */
50bc768d
NS
5678 gcc_assert (TREE_CODE (target_type) != POINTER_TYPE
5679 || TREE_CODE (TREE_TYPE (target_type)) != METHOD_TYPE);
104bf76a 5680
50bc768d 5681 gcc_assert (is_overloaded_fn (overload));
92af500d 5682
104bf76a
MM
5683 /* Check that the TARGET_TYPE is reasonable. */
5684 if (TYPE_PTRFN_P (target_type))
381ddaa6 5685 /* This is OK. */;
104bf76a
MM
5686 else if (TYPE_PTRMEMFUNC_P (target_type))
5687 /* This is OK, too. */
5688 is_ptrmem = 1;
5689 else if (TREE_CODE (target_type) == FUNCTION_TYPE)
5690 {
5691 /* This is OK, too. This comes from a conversion to reference
5692 type. */
5693 target_type = build_reference_type (target_type);
5694 is_reference = 1;
5695 }
5696 else
5697 {
92af500d 5698 if (flags & tf_error)
33bd39a2 5699 error ("\
381ddaa6
JM
5700cannot resolve overloaded function `%D' based on conversion to type `%T'",
5701 DECL_NAME (OVL_FUNCTION (overload)), target_type);
104bf76a
MM
5702 return error_mark_node;
5703 }
5704
5705 /* If we can find a non-template function that matches, we can just
5706 use it. There's no point in generating template instantiations
5707 if we're just going to throw them out anyhow. But, of course, we
5708 can only do this when we don't *need* a template function. */
5709 if (!template_only)
5710 {
5711 tree fns;
5712
a723baf1 5713 for (fns = overload; fns; fns = OVL_NEXT (fns))
104bf76a 5714 {
a723baf1 5715 tree fn = OVL_CURRENT (fns);
104bf76a 5716 tree fntype;
2c73f9f5 5717
104bf76a
MM
5718 if (TREE_CODE (fn) == TEMPLATE_DECL)
5719 /* We're not looking for templates just yet. */
5720 continue;
5721
5722 if ((TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
5723 != is_ptrmem)
5724 /* We're looking for a non-static member, and this isn't
5725 one, or vice versa. */
5726 continue;
34ff2673
RS
5727
5728 /* Ignore anticipated decls of undeclared builtins. */
5729 if (DECL_ANTICIPATED (fn))
5730 continue;
5731
104bf76a
MM
5732 /* See if there's a match. */
5733 fntype = TREE_TYPE (fn);
5734 if (is_ptrmem)
5735 fntype = build_ptrmemfunc_type (build_pointer_type (fntype));
5736 else if (!is_reference)
5737 fntype = build_pointer_type (fntype);
5738
5739 if (can_convert_arg (target_type, fntype, fn))
e1b3e07d 5740 matches = tree_cons (fn, NULL_TREE, matches);
104bf76a
MM
5741 }
5742 }
5743
5744 /* Now, if we've already got a match (or matches), there's no need
5745 to proceed to the template functions. But, if we don't have a
5746 match we need to look at them, too. */
5747 if (!matches)
2c73f9f5 5748 {
104bf76a
MM
5749 tree target_fn_type;
5750 tree target_arg_types;
8d3631f8 5751 tree target_ret_type;
104bf76a
MM
5752 tree fns;
5753
5754 if (is_ptrmem)
4393e105
MM
5755 target_fn_type
5756 = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (target_type));
2c73f9f5 5757 else
4393e105
MM
5758 target_fn_type = TREE_TYPE (target_type);
5759 target_arg_types = TYPE_ARG_TYPES (target_fn_type);
8d3631f8 5760 target_ret_type = TREE_TYPE (target_fn_type);
e5214479
JM
5761
5762 /* Never do unification on the 'this' parameter. */
5763 if (TREE_CODE (target_fn_type) == METHOD_TYPE)
5764 target_arg_types = TREE_CHAIN (target_arg_types);
4393e105 5765
a723baf1 5766 for (fns = overload; fns; fns = OVL_NEXT (fns))
104bf76a 5767 {
a723baf1 5768 tree fn = OVL_CURRENT (fns);
104bf76a
MM
5769 tree instantiation;
5770 tree instantiation_type;
5771 tree targs;
5772
5773 if (TREE_CODE (fn) != TEMPLATE_DECL)
5774 /* We're only looking for templates. */
5775 continue;
5776
5777 if ((TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
5778 != is_ptrmem)
4393e105 5779 /* We're not looking for a non-static member, and this is
104bf76a
MM
5780 one, or vice versa. */
5781 continue;
5782
104bf76a 5783 /* Try to do argument deduction. */
f31c0a32 5784 targs = make_tree_vec (DECL_NTPARMS (fn));
4393e105 5785 if (fn_type_unification (fn, explicit_targs, targs,
8d3631f8 5786 target_arg_types, target_ret_type,
e5214479 5787 DEDUCE_EXACT, -1) != 0)
104bf76a
MM
5788 /* Argument deduction failed. */
5789 continue;
5790
5791 /* Instantiate the template. */
92af500d 5792 instantiation = instantiate_template (fn, targs, flags);
104bf76a
MM
5793 if (instantiation == error_mark_node)
5794 /* Instantiation failed. */
5795 continue;
5796
5797 /* See if there's a match. */
5798 instantiation_type = TREE_TYPE (instantiation);
5799 if (is_ptrmem)
5800 instantiation_type =
5801 build_ptrmemfunc_type (build_pointer_type (instantiation_type));
5802 else if (!is_reference)
5803 instantiation_type = build_pointer_type (instantiation_type);
5804 if (can_convert_arg (target_type, instantiation_type, instantiation))
e1b3e07d 5805 matches = tree_cons (instantiation, fn, matches);
104bf76a
MM
5806 }
5807
5808 /* Now, remove all but the most specialized of the matches. */
5809 if (matches)
5810 {
e5214479 5811 tree match = most_specialized_instantiation (matches);
104bf76a
MM
5812
5813 if (match != error_mark_node)
e1b3e07d 5814 matches = tree_cons (match, NULL_TREE, NULL_TREE);
104bf76a
MM
5815 }
5816 }
5817
5818 /* Now we should have exactly one function in MATCHES. */
5819 if (matches == NULL_TREE)
5820 {
5821 /* There were *no* matches. */
92af500d 5822 if (flags & tf_error)
104bf76a 5823 {
33bd39a2 5824 error ("no matches converting function `%D' to type `%#T'",
104bf76a
MM
5825 DECL_NAME (OVL_FUNCTION (overload)),
5826 target_type);
6b9b6b15
JM
5827
5828 /* print_candidates expects a chain with the functions in
5829 TREE_VALUE slots, so we cons one up here (we're losing anyway,
5830 so why be clever?). */
5831 for (; overload; overload = OVL_NEXT (overload))
e1b3e07d
MM
5832 matches = tree_cons (NULL_TREE, OVL_CURRENT (overload),
5833 matches);
6b9b6b15
JM
5834
5835 print_candidates (matches);
104bf76a
MM
5836 }
5837 return error_mark_node;
2c73f9f5 5838 }
104bf76a
MM
5839 else if (TREE_CHAIN (matches))
5840 {
5841 /* There were too many matches. */
5842
92af500d 5843 if (flags & tf_error)
104bf76a
MM
5844 {
5845 tree match;
5846
33bd39a2 5847 error ("converting overloaded function `%D' to type `%#T' is ambiguous",
104bf76a
MM
5848 DECL_NAME (OVL_FUNCTION (overload)),
5849 target_type);
5850
5851 /* Since print_candidates expects the functions in the
5852 TREE_VALUE slot, we flip them here. */
5853 for (match = matches; match; match = TREE_CHAIN (match))
5854 TREE_VALUE (match) = TREE_PURPOSE (match);
5855
5856 print_candidates (matches);
5857 }
5858
5859 return error_mark_node;
5860 }
5861
50714e79
MM
5862 /* Good, exactly one match. Now, convert it to the correct type. */
5863 fn = TREE_PURPOSE (matches);
5864
b1ce3eb2 5865 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
92af500d 5866 && !(flags & tf_ptrmem_ok) && !flag_ms_extensions)
19420d00 5867 {
b1ce3eb2
NS
5868 static int explained;
5869
92af500d 5870 if (!(flags & tf_error))
19420d00
NS
5871 return error_mark_node;
5872
33bd39a2 5873 pedwarn ("assuming pointer to member `%D'", fn);
b1ce3eb2
NS
5874 if (!explained)
5875 {
33bd39a2 5876 pedwarn ("(a pointer to member can only be formed with `&%E')", fn);
b1ce3eb2
NS
5877 explained = 1;
5878 }
19420d00 5879 }
84583208
MM
5880
5881 /* If we're doing overload resolution purely for the purpose of
5882 determining conversion sequences, we should not consider the
5883 function used. If this conversion sequence is selected, the
5884 function will be marked as used at this point. */
5885 if (!(flags & tf_conv))
5886 mark_used (fn);
a6ecf8b6 5887
50714e79
MM
5888 if (TYPE_PTRFN_P (target_type) || TYPE_PTRMEMFUNC_P (target_type))
5889 return build_unary_op (ADDR_EXPR, fn, 0);
5890 else
5891 {
5892 /* The target must be a REFERENCE_TYPE. Above, build_unary_op
5893 will mark the function as addressed, but here we must do it
5894 explicitly. */
dffd7eb6 5895 cxx_mark_addressable (fn);
50714e79
MM
5896
5897 return fn;
5898 }
2c73f9f5
ML
5899}
5900
ec255269
MS
5901/* This function will instantiate the type of the expression given in
5902 RHS to match the type of LHSTYPE. If errors exist, then return
92af500d 5903 error_mark_node. FLAGS is a bit mask. If TF_ERROR is set, then
5e76004e
NS
5904 we complain on errors. If we are not complaining, never modify rhs,
5905 as overload resolution wants to try many possible instantiations, in
5906 the hope that at least one will work.
5907
e6e174e5
JM
5908 For non-recursive calls, LHSTYPE should be a function, pointer to
5909 function, or a pointer to member function. */
e92cc029 5910
8d08fdba 5911tree
94edc4ab 5912instantiate_type (tree lhstype, tree rhs, tsubst_flags_t flags)
8d08fdba 5913{
92af500d 5914 tsubst_flags_t flags_in = flags;
19420d00 5915
c2ea3a40 5916 flags &= ~tf_ptrmem_ok;
105d8e1f 5917
8d08fdba
MS
5918 if (TREE_CODE (lhstype) == UNKNOWN_TYPE)
5919 {
92af500d 5920 if (flags & tf_error)
8251199e 5921 error ("not enough type information");
8d08fdba
MS
5922 return error_mark_node;
5923 }
5924
5925 if (TREE_TYPE (rhs) != NULL_TREE && ! (type_unknown_p (rhs)))
abff8e06 5926 {
8f4b394d 5927 if (same_type_p (lhstype, TREE_TYPE (rhs)))
abff8e06 5928 return rhs;
a723baf1
MM
5929 if (flag_ms_extensions
5930 && TYPE_PTRMEMFUNC_P (lhstype)
5931 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (rhs)))
5932 /* Microsoft allows `A::f' to be resolved to a
5933 pointer-to-member. */
5934 ;
5935 else
5936 {
92af500d 5937 if (flags & tf_error)
a723baf1
MM
5938 error ("argument of type `%T' does not match `%T'",
5939 TREE_TYPE (rhs), lhstype);
5940 return error_mark_node;
5941 }
abff8e06 5942 }
8d08fdba 5943
50ad9642
MM
5944 if (TREE_CODE (rhs) == BASELINK)
5945 rhs = BASELINK_FUNCTIONS (rhs);
5946
2c73f9f5
ML
5947 /* We don't overwrite rhs if it is an overloaded function.
5948 Copying it would destroy the tree link. */
5949 if (TREE_CODE (rhs) != OVERLOAD)
5950 rhs = copy_node (rhs);
c73964b2 5951
8d08fdba
MS
5952 /* This should really only be used when attempting to distinguish
5953 what sort of a pointer to function we have. For now, any
5954 arithmetic operation which is not supported on pointers
5955 is rejected as an error. */
5956
5957 switch (TREE_CODE (rhs))
5958 {
5959 case TYPE_EXPR:
5960 case CONVERT_EXPR:
5961 case SAVE_EXPR:
5962 case CONSTRUCTOR:
8dc2b103 5963 gcc_unreachable ();
8d08fdba
MS
5964
5965 case INDIRECT_REF:
5966 case ARRAY_REF:
ec255269
MS
5967 {
5968 tree new_rhs;
8d08fdba 5969
ec255269 5970 new_rhs = instantiate_type (build_pointer_type (lhstype),
940ff223 5971 TREE_OPERAND (rhs, 0), flags);
ec255269
MS
5972 if (new_rhs == error_mark_node)
5973 return error_mark_node;
5974
5975 TREE_TYPE (rhs) = lhstype;
5976 TREE_OPERAND (rhs, 0) = new_rhs;
5977 return rhs;
5978 }
8d08fdba
MS
5979
5980 case NOP_EXPR:
5981 rhs = copy_node (TREE_OPERAND (rhs, 0));
5982 TREE_TYPE (rhs) = unknown_type_node;
940ff223 5983 return instantiate_type (lhstype, rhs, flags);
8d08fdba
MS
5984
5985 case COMPONENT_REF:
92af500d
NS
5986 {
5987 tree addr = instantiate_type (lhstype, TREE_OPERAND (rhs, 1), flags);
5988
5989 if (addr != error_mark_node
5990 && TREE_SIDE_EFFECTS (TREE_OPERAND (rhs, 0)))
04c06002 5991 /* Do not lose object's side effects. */
f293ce4b
RS
5992 addr = build2 (COMPOUND_EXPR, TREE_TYPE (addr),
5993 TREE_OPERAND (rhs, 0), addr);
92af500d
NS
5994 return addr;
5995 }
8d08fdba 5996
2a238a97 5997 case OFFSET_REF:
05e0b2f4
JM
5998 rhs = TREE_OPERAND (rhs, 1);
5999 if (BASELINK_P (rhs))
92af500d 6000 return instantiate_type (lhstype, BASELINK_FUNCTIONS (rhs), flags_in);
05e0b2f4 6001
2a238a97
MM
6002 /* This can happen if we are forming a pointer-to-member for a
6003 member template. */
50bc768d 6004 gcc_assert (TREE_CODE (rhs) == TEMPLATE_ID_EXPR);
05e0b2f4 6005
2a238a97 6006 /* Fall through. */
874503bc 6007
386b8a85 6008 case TEMPLATE_ID_EXPR:
2bdb0643
JM
6009 {
6010 tree fns = TREE_OPERAND (rhs, 0);
6011 tree args = TREE_OPERAND (rhs, 1);
6012
19420d00 6013 return
92af500d
NS
6014 resolve_address_of_overloaded_function (lhstype, fns, flags_in,
6015 /*template_only=*/true,
2bdb0643 6016 args);
2bdb0643 6017 }
386b8a85 6018
2c73f9f5 6019 case OVERLOAD:
a723baf1 6020 case FUNCTION_DECL:
104bf76a 6021 return
92af500d
NS
6022 resolve_address_of_overloaded_function (lhstype, rhs, flags_in,
6023 /*template_only=*/false,
104bf76a 6024 /*explicit_targs=*/NULL_TREE);
2c73f9f5
ML
6025
6026 case TREE_LIST:
00a17e31 6027 /* Now we should have a baselink. */
50bc768d 6028 gcc_assert (BASELINK_P (rhs));
e5966228 6029
da15dae6 6030 return instantiate_type (lhstype, BASELINK_FUNCTIONS (rhs), flags);
8d08fdba
MS
6031
6032 case CALL_EXPR:
6033 /* This is too hard for now. */
8dc2b103 6034 gcc_unreachable ();
8d08fdba
MS
6035
6036 case PLUS_EXPR:
6037 case MINUS_EXPR:
6038 case COMPOUND_EXPR:
a0a33927 6039 TREE_OPERAND (rhs, 0)
940ff223 6040 = instantiate_type (lhstype, TREE_OPERAND (rhs, 0), flags);
8d08fdba
MS
6041 if (TREE_OPERAND (rhs, 0) == error_mark_node)
6042 return error_mark_node;
a0a33927 6043 TREE_OPERAND (rhs, 1)
940ff223 6044 = instantiate_type (lhstype, TREE_OPERAND (rhs, 1), flags);
8d08fdba
MS
6045 if (TREE_OPERAND (rhs, 1) == error_mark_node)
6046 return error_mark_node;
6047
6048 TREE_TYPE (rhs) = lhstype;
6049 return rhs;
6050
6051 case MULT_EXPR:
6052 case TRUNC_DIV_EXPR:
6053 case FLOOR_DIV_EXPR:
6054 case CEIL_DIV_EXPR:
6055 case ROUND_DIV_EXPR:
6056 case RDIV_EXPR:
6057 case TRUNC_MOD_EXPR:
6058 case FLOOR_MOD_EXPR:
6059 case CEIL_MOD_EXPR:
6060 case ROUND_MOD_EXPR:
6061 case FIX_ROUND_EXPR:
6062 case FIX_FLOOR_EXPR:
6063 case FIX_CEIL_EXPR:
6064 case FIX_TRUNC_EXPR:
6065 case FLOAT_EXPR:
6066 case NEGATE_EXPR:
6067 case ABS_EXPR:
6068 case MAX_EXPR:
6069 case MIN_EXPR:
8d08fdba
MS
6070
6071 case BIT_AND_EXPR:
6072 case BIT_IOR_EXPR:
6073 case BIT_XOR_EXPR:
6074 case LSHIFT_EXPR:
6075 case RSHIFT_EXPR:
6076 case LROTATE_EXPR:
6077 case RROTATE_EXPR:
6078
6079 case PREINCREMENT_EXPR:
6080 case PREDECREMENT_EXPR:
6081 case POSTINCREMENT_EXPR:
6082 case POSTDECREMENT_EXPR:
92af500d 6083 if (flags & tf_error)
8251199e 6084 error ("invalid operation on uninstantiated type");
8d08fdba
MS
6085 return error_mark_node;
6086
6087 case TRUTH_AND_EXPR:
6088 case TRUTH_OR_EXPR:
6089 case TRUTH_XOR_EXPR:
6090 case LT_EXPR:
6091 case LE_EXPR:
6092 case GT_EXPR:
6093 case GE_EXPR:
6094 case EQ_EXPR:
6095 case NE_EXPR:
6096 case TRUTH_ANDIF_EXPR:
6097 case TRUTH_ORIF_EXPR:
6098 case TRUTH_NOT_EXPR:
92af500d 6099 if (flags & tf_error)
8251199e 6100 error ("not enough type information");
8d08fdba
MS
6101 return error_mark_node;
6102
ca36f057
MM
6103 case COND_EXPR:
6104 if (type_unknown_p (TREE_OPERAND (rhs, 0)))
6105 {
92af500d 6106 if (flags & tf_error)
ca36f057
MM
6107 error ("not enough type information");
6108 return error_mark_node;
6109 }
6110 TREE_OPERAND (rhs, 1)
6111 = instantiate_type (lhstype, TREE_OPERAND (rhs, 1), flags);
6112 if (TREE_OPERAND (rhs, 1) == error_mark_node)
6113 return error_mark_node;
6114 TREE_OPERAND (rhs, 2)
6115 = instantiate_type (lhstype, TREE_OPERAND (rhs, 2), flags);
6116 if (TREE_OPERAND (rhs, 2) == error_mark_node)
6117 return error_mark_node;
6118
6119 TREE_TYPE (rhs) = lhstype;
6120 return rhs;
6121
6122 case MODIFY_EXPR:
6123 TREE_OPERAND (rhs, 1)
6124 = instantiate_type (lhstype, TREE_OPERAND (rhs, 1), flags);
6125 if (TREE_OPERAND (rhs, 1) == error_mark_node)
6126 return error_mark_node;
6127
6128 TREE_TYPE (rhs) = lhstype;
6129 return rhs;
6130
6131 case ADDR_EXPR:
19420d00
NS
6132 {
6133 if (PTRMEM_OK_P (rhs))
c2ea3a40 6134 flags |= tf_ptrmem_ok;
19420d00 6135
ca36f057 6136 return instantiate_type (lhstype, TREE_OPERAND (rhs, 0), flags);
19420d00 6137 }
ca36f057
MM
6138
6139 case ERROR_MARK:
6140 return error_mark_node;
6141
6142 default:
8dc2b103 6143 gcc_unreachable ();
ca36f057 6144 }
8dc2b103 6145 return error_mark_node;
ca36f057
MM
6146}
6147\f
6148/* Return the name of the virtual function pointer field
6149 (as an IDENTIFIER_NODE) for the given TYPE. Note that
6150 this may have to look back through base types to find the
6151 ultimate field name. (For single inheritance, these could
6152 all be the same name. Who knows for multiple inheritance). */
6153
6154static tree
94edc4ab 6155get_vfield_name (tree type)
ca36f057 6156{
37a247a0 6157 tree binfo, base_binfo;
ca36f057
MM
6158 char *buf;
6159
37a247a0 6160 for (binfo = TYPE_BINFO (type);
fa743e8c 6161 BINFO_N_BASE_BINFOS (binfo);
37a247a0
NS
6162 binfo = base_binfo)
6163 {
6164 base_binfo = BINFO_BASE_BINFO (binfo, 0);
ca36f057 6165
37a247a0
NS
6166 if (BINFO_VIRTUAL_P (base_binfo)
6167 || !TYPE_CONTAINS_VPTR_P (BINFO_TYPE (base_binfo)))
6168 break;
6169 }
6170
ca36f057 6171 type = BINFO_TYPE (binfo);
c68b0a84 6172 buf = alloca (sizeof (VFIELD_NAME_FORMAT) + TYPE_NAME_LENGTH (type) + 2);
ea122333
JM
6173 sprintf (buf, VFIELD_NAME_FORMAT,
6174 IDENTIFIER_POINTER (constructor_name (type)));
ca36f057
MM
6175 return get_identifier (buf);
6176}
6177
6178void
94edc4ab 6179print_class_statistics (void)
ca36f057
MM
6180{
6181#ifdef GATHER_STATISTICS
6182 fprintf (stderr, "convert_harshness = %d\n", n_convert_harshness);
6183 fprintf (stderr, "compute_conversion_costs = %d\n", n_compute_conversion_costs);
ca36f057
MM
6184 if (n_vtables)
6185 {
6186 fprintf (stderr, "vtables = %d; vtable searches = %d\n",
6187 n_vtables, n_vtable_searches);
6188 fprintf (stderr, "vtable entries = %d; vtable elems = %d\n",
6189 n_vtable_entries, n_vtable_elems);
6190 }
6191#endif
6192}
6193
6194/* Build a dummy reference to ourselves so Derived::Base (and A::A) works,
6195 according to [class]:
6196 The class-name is also inserted
6197 into the scope of the class itself. For purposes of access checking,
6198 the inserted class name is treated as if it were a public member name. */
6199
6200void
94edc4ab 6201build_self_reference (void)
ca36f057
MM
6202{
6203 tree name = constructor_name (current_class_type);
6204 tree value = build_lang_decl (TYPE_DECL, name, current_class_type);
6205 tree saved_cas;
6206
6207 DECL_NONLOCAL (value) = 1;
6208 DECL_CONTEXT (value) = current_class_type;
6209 DECL_ARTIFICIAL (value) = 1;
a3d87771 6210 SET_DECL_SELF_REFERENCE_P (value);
ca36f057
MM
6211
6212 if (processing_template_decl)
6213 value = push_template_decl (value);
6214
6215 saved_cas = current_access_specifier;
6216 current_access_specifier = access_public_node;
6217 finish_member_declaration (value);
6218 current_access_specifier = saved_cas;
6219}
6220
6221/* Returns 1 if TYPE contains only padding bytes. */
6222
6223int
94edc4ab 6224is_empty_class (tree type)
ca36f057 6225{
ca36f057
MM
6226 if (type == error_mark_node)
6227 return 0;
6228
6229 if (! IS_AGGR_TYPE (type))
6230 return 0;
6231
58731fd1
MM
6232 /* In G++ 3.2, whether or not a class was empty was determined by
6233 looking at its size. */
6234 if (abi_version_at_least (2))
6235 return CLASSTYPE_EMPTY_P (type);
6236 else
6237 return integer_zerop (CLASSTYPE_SIZE (type));
ca36f057
MM
6238}
6239
956d9305
MM
6240/* Returns true if TYPE contains an empty class. */
6241
6242static bool
6243contains_empty_class_p (tree type)
6244{
6245 if (is_empty_class (type))
6246 return true;
6247 if (CLASS_TYPE_P (type))
6248 {
6249 tree field;
fa743e8c
NS
6250 tree binfo;
6251 tree base_binfo;
956d9305
MM
6252 int i;
6253
fa743e8c
NS
6254 for (binfo = TYPE_BINFO (type), i = 0;
6255 BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
6256 if (contains_empty_class_p (BINFO_TYPE (base_binfo)))
956d9305
MM
6257 return true;
6258 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
17bbb839
MM
6259 if (TREE_CODE (field) == FIELD_DECL
6260 && !DECL_ARTIFICIAL (field)
6261 && is_empty_class (TREE_TYPE (field)))
956d9305
MM
6262 return true;
6263 }
6264 else if (TREE_CODE (type) == ARRAY_TYPE)
6265 return contains_empty_class_p (TREE_TYPE (type));
6266 return false;
6267}
6268
ca36f057
MM
6269/* Find the enclosing class of the given NODE. NODE can be a *_DECL or
6270 a *_TYPE node. NODE can also be a local class. */
6271
6272tree
94edc4ab 6273get_enclosing_class (tree type)
ca36f057
MM
6274{
6275 tree node = type;
6276
6277 while (node && TREE_CODE (node) != NAMESPACE_DECL)
6278 {
6279 switch (TREE_CODE_CLASS (TREE_CODE (node)))
6280 {
6281 case 'd':
6282 node = DECL_CONTEXT (node);
6283 break;
6284
6285 case 't':
6286 if (node != type)
6287 return node;
6288 node = TYPE_CONTEXT (node);
6289 break;
6290
6291 default:
8dc2b103 6292 gcc_unreachable ();
ca36f057
MM
6293 }
6294 }
6295 return NULL_TREE;
6296}
6297
ca36f057
MM
6298/* Note that NAME was looked up while the current class was being
6299 defined and that the result of that lookup was DECL. */
6300
6301void
94edc4ab 6302maybe_note_name_used_in_class (tree name, tree decl)
ca36f057
MM
6303{
6304 splay_tree names_used;
6305
6306 /* If we're not defining a class, there's nothing to do. */
39fb05d0
MM
6307 if (!(innermost_scope_kind() == sk_class
6308 && TYPE_BEING_DEFINED (current_class_type)))
ca36f057
MM
6309 return;
6310
6311 /* If there's already a binding for this NAME, then we don't have
6312 anything to worry about. */
39fb05d0
MM
6313 if (lookup_member (current_class_type, name,
6314 /*protect=*/0, /*want_type=*/false))
ca36f057
MM
6315 return;
6316
6317 if (!current_class_stack[current_class_depth - 1].names_used)
6318 current_class_stack[current_class_depth - 1].names_used
6319 = splay_tree_new (splay_tree_compare_pointers, 0, 0);
6320 names_used = current_class_stack[current_class_depth - 1].names_used;
6321
6322 splay_tree_insert (names_used,
6323 (splay_tree_key) name,
6324 (splay_tree_value) decl);
6325}
6326
6327/* Note that NAME was declared (as DECL) in the current class. Check
0e339752 6328 to see that the declaration is valid. */
ca36f057
MM
6329
6330void
94edc4ab 6331note_name_declared_in_class (tree name, tree decl)
ca36f057
MM
6332{
6333 splay_tree names_used;
6334 splay_tree_node n;
6335
6336 /* Look to see if we ever used this name. */
6337 names_used
6338 = current_class_stack[current_class_depth - 1].names_used;
6339 if (!names_used)
6340 return;
6341
6342 n = splay_tree_lookup (names_used, (splay_tree_key) name);
6343 if (n)
6344 {
6345 /* [basic.scope.class]
6346
6347 A name N used in a class S shall refer to the same declaration
6348 in its context and when re-evaluated in the completed scope of
6349 S. */
33bd39a2 6350 error ("declaration of `%#D'", decl);
38da6039
NS
6351 cp_error_at ("changes meaning of `%D' from `%+#D'",
6352 DECL_NAME (OVL_CURRENT (decl)),
ca36f057
MM
6353 (tree) n->value);
6354 }
6355}
6356
3461fba7
NS
6357/* Returns the VAR_DECL for the complete vtable associated with BINFO.
6358 Secondary vtables are merged with primary vtables; this function
6359 will return the VAR_DECL for the primary vtable. */
ca36f057 6360
c35cce41 6361tree
94edc4ab 6362get_vtbl_decl_for_binfo (tree binfo)
c35cce41
MM
6363{
6364 tree decl;
6365
6366 decl = BINFO_VTABLE (binfo);
6367 if (decl && TREE_CODE (decl) == PLUS_EXPR)
6368 {
50bc768d 6369 gcc_assert (TREE_CODE (TREE_OPERAND (decl, 0)) == ADDR_EXPR);
c35cce41
MM
6370 decl = TREE_OPERAND (TREE_OPERAND (decl, 0), 0);
6371 }
6372 if (decl)
50bc768d 6373 gcc_assert (TREE_CODE (decl) == VAR_DECL);
c35cce41
MM
6374 return decl;
6375}
6376
911a71a7 6377
dbbf88d1
NS
6378/* Returns the binfo for the primary base of BINFO. If the resulting
6379 BINFO is a virtual base, and it is inherited elsewhere in the
6380 hierarchy, then the returned binfo might not be the primary base of
6381 BINFO in the complete object. Check BINFO_PRIMARY_P or
6382 BINFO_LOST_PRIMARY_P to be sure. */
911a71a7
MM
6383
6384tree
94edc4ab 6385get_primary_binfo (tree binfo)
911a71a7
MM
6386{
6387 tree primary_base;
dbbf88d1 6388 tree result;
623fe76a 6389
911a71a7
MM
6390 primary_base = CLASSTYPE_PRIMARY_BINFO (BINFO_TYPE (binfo));
6391 if (!primary_base)
6392 return NULL_TREE;
6393
dbbf88d1 6394 result = copied_binfo (primary_base, binfo);
911a71a7
MM
6395 return result;
6396}
6397
838dfd8a 6398/* If INDENTED_P is zero, indent to INDENT. Return nonzero. */
b7442fb5
NS
6399
6400static int
94edc4ab 6401maybe_indent_hierarchy (FILE * stream, int indent, int indented_p)
b7442fb5
NS
6402{
6403 if (!indented_p)
6404 fprintf (stream, "%*s", indent, "");
6405 return 1;
6406}
6407
dbbf88d1
NS
6408/* Dump the offsets of all the bases rooted at BINFO to STREAM.
6409 INDENT should be zero when called from the top level; it is
6410 incremented recursively. IGO indicates the next expected BINFO in
9bcb9aae 6411 inheritance graph ordering. */
c35cce41 6412
dbbf88d1
NS
6413static tree
6414dump_class_hierarchy_r (FILE *stream,
94edc4ab 6415 int flags,
94edc4ab 6416 tree binfo,
dbbf88d1 6417 tree igo,
94edc4ab 6418 int indent)
ca36f057 6419{
b7442fb5 6420 int indented = 0;
fa743e8c
NS
6421 tree base_binfo;
6422 int i;
b7442fb5
NS
6423
6424 indented = maybe_indent_hierarchy (stream, indent, 0);
6425 fprintf (stream, "%s (0x%lx) ",
fc6633e0 6426 type_as_string (BINFO_TYPE (binfo), TFF_PLAIN_IDENTIFIER),
b7442fb5 6427 (unsigned long) binfo);
dbbf88d1
NS
6428 if (binfo != igo)
6429 {
6430 fprintf (stream, "alternative-path\n");
6431 return igo;
6432 }
6433 igo = TREE_CHAIN (binfo);
6434
9965d119 6435 fprintf (stream, HOST_WIDE_INT_PRINT_DEC,
ca36f057 6436 tree_low_cst (BINFO_OFFSET (binfo), 0));
9965d119
NS
6437 if (is_empty_class (BINFO_TYPE (binfo)))
6438 fprintf (stream, " empty");
6439 else if (CLASSTYPE_NEARLY_EMPTY_P (BINFO_TYPE (binfo)))
6440 fprintf (stream, " nearly-empty");
809e3e7f 6441 if (BINFO_VIRTUAL_P (binfo))
dbbf88d1 6442 fprintf (stream, " virtual");
9965d119 6443 fprintf (stream, "\n");
ca36f057 6444
b7442fb5 6445 indented = 0;
fc6633e0 6446 if (BINFO_PRIMARY_P (binfo))
b7442fb5
NS
6447 {
6448 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6449 fprintf (stream, " primary-for %s (0x%lx)",
fc6633e0 6450 type_as_string (BINFO_TYPE (BINFO_INHERITANCE_CHAIN (binfo)),
b7442fb5 6451 TFF_PLAIN_IDENTIFIER),
fc6633e0 6452 (unsigned long)BINFO_INHERITANCE_CHAIN (binfo));
b7442fb5
NS
6453 }
6454 if (BINFO_LOST_PRIMARY_P (binfo))
6455 {
6456 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6457 fprintf (stream, " lost-primary");
6458 }
6459 if (indented)
6460 fprintf (stream, "\n");
6461
6462 if (!(flags & TDF_SLIM))
6463 {
6464 int indented = 0;
6465
6466 if (BINFO_SUBVTT_INDEX (binfo))
6467 {
6468 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6469 fprintf (stream, " subvttidx=%s",
6470 expr_as_string (BINFO_SUBVTT_INDEX (binfo),
6471 TFF_PLAIN_IDENTIFIER));
6472 }
6473 if (BINFO_VPTR_INDEX (binfo))
6474 {
6475 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6476 fprintf (stream, " vptridx=%s",
6477 expr_as_string (BINFO_VPTR_INDEX (binfo),
6478 TFF_PLAIN_IDENTIFIER));
6479 }
6480 if (BINFO_VPTR_FIELD (binfo))
6481 {
6482 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6483 fprintf (stream, " vbaseoffset=%s",
6484 expr_as_string (BINFO_VPTR_FIELD (binfo),
6485 TFF_PLAIN_IDENTIFIER));
6486 }
6487 if (BINFO_VTABLE (binfo))
6488 {
6489 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
6490 fprintf (stream, " vptr=%s",
6491 expr_as_string (BINFO_VTABLE (binfo),
6492 TFF_PLAIN_IDENTIFIER));
6493 }
6494
6495 if (indented)
6496 fprintf (stream, "\n");
6497 }
dbbf88d1 6498
fa743e8c
NS
6499 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
6500 igo = dump_class_hierarchy_r (stream, flags, base_binfo, igo, indent + 2);
dbbf88d1
NS
6501
6502 return igo;
c35cce41
MM
6503}
6504
6505/* Dump the BINFO hierarchy for T. */
6506
b7442fb5 6507static void
bb885938 6508dump_class_hierarchy_1 (FILE *stream, int flags, tree t)
c35cce41 6509{
b7442fb5
NS
6510 fprintf (stream, "Class %s\n", type_as_string (t, TFF_PLAIN_IDENTIFIER));
6511 fprintf (stream, " size=%lu align=%lu\n",
6512 (unsigned long)(tree_low_cst (TYPE_SIZE (t), 0) / BITS_PER_UNIT),
6513 (unsigned long)(TYPE_ALIGN (t) / BITS_PER_UNIT));
dbbf88d1
NS
6514 fprintf (stream, " base size=%lu base align=%lu\n",
6515 (unsigned long)(tree_low_cst (TYPE_SIZE (CLASSTYPE_AS_BASE (t)), 0)
6516 / BITS_PER_UNIT),
6517 (unsigned long)(TYPE_ALIGN (CLASSTYPE_AS_BASE (t))
6518 / BITS_PER_UNIT));
6519 dump_class_hierarchy_r (stream, flags, TYPE_BINFO (t), TYPE_BINFO (t), 0);
b7442fb5 6520 fprintf (stream, "\n");
bb885938
NS
6521}
6522
da1d7781 6523/* Debug interface to hierarchy dumping. */
bb885938
NS
6524
6525extern void
6526debug_class (tree t)
6527{
6528 dump_class_hierarchy_1 (stderr, TDF_SLIM, t);
6529}
6530
6531static void
6532dump_class_hierarchy (tree t)
6533{
6534 int flags;
6535 FILE *stream = dump_begin (TDI_class, &flags);
6536
6537 if (stream)
6538 {
6539 dump_class_hierarchy_1 (stream, flags, t);
6540 dump_end (TDI_class, stream);
6541 }
b7442fb5
NS
6542}
6543
6544static void
94edc4ab 6545dump_array (FILE * stream, tree decl)
b7442fb5
NS
6546{
6547 tree inits;
6548 int ix;
6549 HOST_WIDE_INT elt;
6550 tree size = TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (decl)));
6551
6552 elt = (tree_low_cst (TYPE_SIZE (TREE_TYPE (TREE_TYPE (decl))), 0)
6553 / BITS_PER_UNIT);
6554 fprintf (stream, "%s:", decl_as_string (decl, TFF_PLAIN_IDENTIFIER));
6555 fprintf (stream, " %s entries",
6556 expr_as_string (size_binop (PLUS_EXPR, size, size_one_node),
6557 TFF_PLAIN_IDENTIFIER));
6558 fprintf (stream, "\n");
6559
522801e7 6560 for (ix = 0, inits = CONSTRUCTOR_ELTS (DECL_INITIAL (decl));
b7442fb5 6561 inits; ix++, inits = TREE_CHAIN (inits))
4fdc14ca 6562 fprintf (stream, "%-4ld %s\n", (long)(ix * elt),
b7442fb5
NS
6563 expr_as_string (TREE_VALUE (inits), TFF_PLAIN_IDENTIFIER));
6564}
6565
6566static void
94edc4ab 6567dump_vtable (tree t, tree binfo, tree vtable)
b7442fb5
NS
6568{
6569 int flags;
6570 FILE *stream = dump_begin (TDI_class, &flags);
6571
6572 if (!stream)
6573 return;
6574
6575 if (!(flags & TDF_SLIM))
9965d119 6576 {
b7442fb5 6577 int ctor_vtbl_p = TYPE_BINFO (t) != binfo;
9965d119 6578
b7442fb5
NS
6579 fprintf (stream, "%s for %s",
6580 ctor_vtbl_p ? "Construction vtable" : "Vtable",
fc6633e0 6581 type_as_string (BINFO_TYPE (binfo), TFF_PLAIN_IDENTIFIER));
b7442fb5
NS
6582 if (ctor_vtbl_p)
6583 {
809e3e7f 6584 if (!BINFO_VIRTUAL_P (binfo))
b7442fb5
NS
6585 fprintf (stream, " (0x%lx instance)", (unsigned long)binfo);
6586 fprintf (stream, " in %s", type_as_string (t, TFF_PLAIN_IDENTIFIER));
6587 }
6588 fprintf (stream, "\n");
6589 dump_array (stream, vtable);
6590 fprintf (stream, "\n");
9965d119 6591 }
b7442fb5
NS
6592
6593 dump_end (TDI_class, stream);
6594}
6595
6596static void
94edc4ab 6597dump_vtt (tree t, tree vtt)
b7442fb5
NS
6598{
6599 int flags;
6600 FILE *stream = dump_begin (TDI_class, &flags);
6601
6602 if (!stream)
6603 return;
6604
6605 if (!(flags & TDF_SLIM))
6606 {
6607 fprintf (stream, "VTT for %s\n",
6608 type_as_string (t, TFF_PLAIN_IDENTIFIER));
6609 dump_array (stream, vtt);
6610 fprintf (stream, "\n");
6611 }
6612
6613 dump_end (TDI_class, stream);
ca36f057
MM
6614}
6615
bb885938
NS
6616/* Dump a function or thunk and its thunkees. */
6617
6618static void
6619dump_thunk (FILE *stream, int indent, tree thunk)
6620{
6621 static const char spaces[] = " ";
6622 tree name = DECL_NAME (thunk);
6623 tree thunks;
6624
6625 fprintf (stream, "%.*s%p %s %s", indent, spaces,
6626 (void *)thunk,
6627 !DECL_THUNK_P (thunk) ? "function"
6628 : DECL_THIS_THUNK_P (thunk) ? "this-thunk" : "covariant-thunk",
6629 name ? IDENTIFIER_POINTER (name) : "<unset>");
e00853fd 6630 if (DECL_THUNK_P (thunk))
bb885938
NS
6631 {
6632 HOST_WIDE_INT fixed_adjust = THUNK_FIXED_OFFSET (thunk);
6633 tree virtual_adjust = THUNK_VIRTUAL_OFFSET (thunk);
6634
6635 fprintf (stream, " fixed=" HOST_WIDE_INT_PRINT_DEC, fixed_adjust);
6636 if (!virtual_adjust)
6637 /*NOP*/;
6638 else if (DECL_THIS_THUNK_P (thunk))
6639 fprintf (stream, " vcall=" HOST_WIDE_INT_PRINT_DEC,
6640 tree_low_cst (virtual_adjust, 0));
6641 else
6642 fprintf (stream, " vbase=" HOST_WIDE_INT_PRINT_DEC "(%s)",
6643 tree_low_cst (BINFO_VPTR_FIELD (virtual_adjust), 0),
6644 type_as_string (BINFO_TYPE (virtual_adjust), TFF_SCOPE));
e00853fd
NS
6645 if (THUNK_ALIAS (thunk))
6646 fprintf (stream, " alias to %p", (void *)THUNK_ALIAS (thunk));
bb885938
NS
6647 }
6648 fprintf (stream, "\n");
6649 for (thunks = DECL_THUNKS (thunk); thunks; thunks = TREE_CHAIN (thunks))
6650 dump_thunk (stream, indent + 2, thunks);
6651}
6652
6653/* Dump the thunks for FN. */
6654
6655extern void
6656debug_thunks (tree fn)
6657{
6658 dump_thunk (stderr, 0, fn);
6659}
6660
ca36f057
MM
6661/* Virtual function table initialization. */
6662
6663/* Create all the necessary vtables for T and its base classes. */
6664
6665static void
94edc4ab 6666finish_vtbls (tree t)
ca36f057 6667{
3461fba7
NS
6668 tree list;
6669 tree vbase;
ca36f057 6670
3461fba7
NS
6671 /* We lay out the primary and secondary vtables in one contiguous
6672 vtable. The primary vtable is first, followed by the non-virtual
6673 secondary vtables in inheritance graph order. */
604a3205 6674 list = build_tree_list (BINFO_VTABLE (TYPE_BINFO (t)), NULL_TREE);
3461fba7
NS
6675 accumulate_vtbl_inits (TYPE_BINFO (t), TYPE_BINFO (t),
6676 TYPE_BINFO (t), t, list);
6677
6678 /* Then come the virtual bases, also in inheritance graph order. */
6679 for (vbase = TYPE_BINFO (t); vbase; vbase = TREE_CHAIN (vbase))
6680 {
809e3e7f 6681 if (!BINFO_VIRTUAL_P (vbase))
3461fba7 6682 continue;
dbbf88d1 6683 accumulate_vtbl_inits (vbase, vbase, TYPE_BINFO (t), t, list);
ff668506
JM
6684 }
6685
604a3205 6686 if (BINFO_VTABLE (TYPE_BINFO (t)))
3461fba7 6687 initialize_vtable (TYPE_BINFO (t), TREE_VALUE (list));
ca36f057
MM
6688}
6689
6690/* Initialize the vtable for BINFO with the INITS. */
6691
6692static void
94edc4ab 6693initialize_vtable (tree binfo, tree inits)
ca36f057 6694{
ca36f057
MM
6695 tree decl;
6696
6697 layout_vtable_decl (binfo, list_length (inits));
c35cce41 6698 decl = get_vtbl_decl_for_binfo (binfo);
19c29b2f 6699 initialize_artificial_var (decl, inits);
b7442fb5 6700 dump_vtable (BINFO_TYPE (binfo), binfo, decl);
23656158
MM
6701}
6702
9965d119
NS
6703/* Build the VTT (virtual table table) for T.
6704 A class requires a VTT if it has virtual bases.
6705
6706 This holds
6707 1 - primary virtual pointer for complete object T
90ecce3e
JM
6708 2 - secondary VTTs for each direct non-virtual base of T which requires a
6709 VTT
9965d119
NS
6710 3 - secondary virtual pointers for each direct or indirect base of T which
6711 has virtual bases or is reachable via a virtual path from T.
6712 4 - secondary VTTs for each direct or indirect virtual base of T.
6713
6714 Secondary VTTs look like complete object VTTs without part 4. */
23656158
MM
6715
6716static void
94edc4ab 6717build_vtt (tree t)
23656158
MM
6718{
6719 tree inits;
6720 tree type;
6721 tree vtt;
3ec6bad3 6722 tree index;
23656158 6723
23656158
MM
6724 /* Build up the initializers for the VTT. */
6725 inits = NULL_TREE;
3ec6bad3 6726 index = size_zero_node;
9965d119 6727 build_vtt_inits (TYPE_BINFO (t), t, &inits, &index);
23656158
MM
6728
6729 /* If we didn't need a VTT, we're done. */
6730 if (!inits)
6731 return;
6732
6733 /* Figure out the type of the VTT. */
442e01b6 6734 type = build_index_type (size_int (list_length (inits) - 1));
23656158
MM
6735 type = build_cplus_array_type (const_ptr_type_node, type);
6736
6737 /* Now, build the VTT object itself. */
669ec2b4 6738 vtt = build_vtable (t, get_vtt_name (t), type);
19c29b2f 6739 initialize_artificial_var (vtt, inits);
548502d3
MM
6740 /* Add the VTT to the vtables list. */
6741 TREE_CHAIN (vtt) = TREE_CHAIN (CLASSTYPE_VTABLES (t));
6742 TREE_CHAIN (CLASSTYPE_VTABLES (t)) = vtt;
b7442fb5
NS
6743
6744 dump_vtt (t, vtt);
23656158
MM
6745}
6746
13de7ec4
JM
6747/* When building a secondary VTT, BINFO_VTABLE is set to a TREE_LIST with
6748 PURPOSE the RTTI_BINFO, VALUE the real vtable pointer for this binfo,
6749 and CHAIN the vtable pointer for this binfo after construction is
00a17e31 6750 complete. VALUE can also be another BINFO, in which case we recurse. */
13de7ec4
JM
6751
6752static tree
94edc4ab 6753binfo_ctor_vtable (tree binfo)
13de7ec4
JM
6754{
6755 tree vt;
6756
6757 while (1)
6758 {
6759 vt = BINFO_VTABLE (binfo);
6760 if (TREE_CODE (vt) == TREE_LIST)
6761 vt = TREE_VALUE (vt);
95b4aca6 6762 if (TREE_CODE (vt) == TREE_BINFO)
13de7ec4
JM
6763 binfo = vt;
6764 else
6765 break;
6766 }
6767
6768 return vt;
6769}
6770
23656158 6771/* Recursively build the VTT-initializer for BINFO (which is in the
9965d119
NS
6772 hierarchy dominated by T). INITS points to the end of the initializer
6773 list to date. INDEX is the VTT index where the next element will be
6774 replaced. Iff BINFO is the binfo for T, this is the top level VTT (i.e.
6775 not a subvtt for some base of T). When that is so, we emit the sub-VTTs
6776 for virtual bases of T. When it is not so, we build the constructor
6777 vtables for the BINFO-in-T variant. */
23656158
MM
6778
6779static tree *
94edc4ab 6780build_vtt_inits (tree binfo, tree t, tree* inits, tree* index)
23656158
MM
6781{
6782 int i;
6783 tree b;
6784 tree init;
6785 tree secondary_vptrs;
9965d119 6786 int top_level_p = same_type_p (TREE_TYPE (binfo), t);
23656158
MM
6787
6788 /* We only need VTTs for subobjects with virtual bases. */
6789 if (!TYPE_USES_VIRTUAL_BASECLASSES (BINFO_TYPE (binfo)))
6790 return inits;
6791
6792 /* We need to use a construction vtable if this is not the primary
6793 VTT. */
9965d119 6794 if (!top_level_p)
3ec6bad3
MM
6795 {
6796 build_ctor_vtbl_group (binfo, t);
6797
6798 /* Record the offset in the VTT where this sub-VTT can be found. */
6799 BINFO_SUBVTT_INDEX (binfo) = *index;
6800 }
23656158
MM
6801
6802 /* Add the address of the primary vtable for the complete object. */
13de7ec4 6803 init = binfo_ctor_vtable (binfo);
23656158
MM
6804 *inits = build_tree_list (NULL_TREE, init);
6805 inits = &TREE_CHAIN (*inits);
9965d119
NS
6806 if (top_level_p)
6807 {
50bc768d 6808 gcc_assert (!BINFO_VPTR_INDEX (binfo));
9965d119
NS
6809 BINFO_VPTR_INDEX (binfo) = *index;
6810 }
3ec6bad3
MM
6811 *index = size_binop (PLUS_EXPR, *index, TYPE_SIZE_UNIT (ptr_type_node));
6812
23656158 6813 /* Recursively add the secondary VTTs for non-virtual bases. */
fa743e8c
NS
6814 for (i = 0; BINFO_BASE_ITERATE (binfo, i, b); ++i)
6815 if (!BINFO_VIRTUAL_P (b))
6816 inits = build_vtt_inits (BINFO_BASE_BINFO (binfo, i), t, inits, index);
3ec6bad3 6817
23656158 6818 /* Add secondary virtual pointers for all subobjects of BINFO with
9965d119
NS
6819 either virtual bases or reachable along a virtual path, except
6820 subobjects that are non-virtual primary bases. */
9ccf6541 6821 secondary_vptrs = tree_cons (t, NULL_TREE, BINFO_TYPE (binfo));
3ec6bad3 6822 TREE_TYPE (secondary_vptrs) = *index;
9965d119
NS
6823 VTT_TOP_LEVEL_P (secondary_vptrs) = top_level_p;
6824 VTT_MARKED_BINFO_P (secondary_vptrs) = 0;
6825
23656158 6826 dfs_walk_real (binfo,
9ccf6541 6827 dfs_build_secondary_vptr_vtt_inits,
23656158 6828 NULL,
9965d119 6829 dfs_ctor_vtable_bases_queue_p,
23656158 6830 secondary_vptrs);
9965d119
NS
6831 VTT_MARKED_BINFO_P (secondary_vptrs) = 1;
6832 dfs_walk (binfo, dfs_unmark, dfs_ctor_vtable_bases_queue_p,
6833 secondary_vptrs);
6834
3ec6bad3 6835 *index = TREE_TYPE (secondary_vptrs);
23656158
MM
6836
6837 /* The secondary vptrs come back in reverse order. After we reverse
6838 them, and add the INITS, the last init will be the first element
6839 of the chain. */
6840 secondary_vptrs = TREE_VALUE (secondary_vptrs);
6841 if (secondary_vptrs)
6842 {
6843 *inits = nreverse (secondary_vptrs);
6844 inits = &TREE_CHAIN (secondary_vptrs);
50bc768d 6845 gcc_assert (*inits == NULL_TREE);
23656158
MM
6846 }
6847
6848 /* Add the secondary VTTs for virtual bases. */
9965d119 6849 if (top_level_p)
9ccf6541
MM
6850 for (b = TYPE_BINFO (BINFO_TYPE (binfo)); b; b = TREE_CHAIN (b))
6851 {
809e3e7f 6852 if (!BINFO_VIRTUAL_P (b))
9ccf6541
MM
6853 continue;
6854
dbbf88d1 6855 inits = build_vtt_inits (b, t, inits, index);
9ccf6541 6856 }
23656158 6857
9965d119
NS
6858 if (!top_level_p)
6859 {
6860 tree data = tree_cons (t, binfo, NULL_TREE);
6861 VTT_TOP_LEVEL_P (data) = 0;
6862 VTT_MARKED_BINFO_P (data) = 0;
6863
6864 dfs_walk (binfo, dfs_fixup_binfo_vtbls,
6865 dfs_ctor_vtable_bases_queue_p,
6866 data);
6867 }
23656158
MM
6868
6869 return inits;
6870}
6871
8df83eae
RK
6872/* Called from build_vtt_inits via dfs_walk. BINFO is the binfo for the base
6873 in most derived. DATA is a TREE_LIST who's TREE_CHAIN is the type of the
6874 base being constructed whilst this secondary vptr is live. The
9965d119 6875 TREE_TOP_LEVEL flag indicates that this is the primary VTT. */
23656158
MM
6876
6877static tree
8df83eae 6878dfs_build_secondary_vptr_vtt_inits (tree binfo, void *data)
23656158
MM
6879{
6880 tree l;
6881 tree t;
6882 tree init;
3ec6bad3 6883 tree index;
9965d119 6884 int top_level_p;
23656158
MM
6885
6886 l = (tree) data;
9ccf6541 6887 t = TREE_CHAIN (l);
9965d119
NS
6888 top_level_p = VTT_TOP_LEVEL_P (l);
6889
dbbf88d1 6890 BINFO_MARKED (binfo) = 1;
23656158
MM
6891
6892 /* We don't care about bases that don't have vtables. */
6893 if (!TYPE_VFIELD (BINFO_TYPE (binfo)))
6894 return NULL_TREE;
6895
6896 /* We're only interested in proper subobjects of T. */
6897 if (same_type_p (BINFO_TYPE (binfo), t))
6898 return NULL_TREE;
6899
6900 /* We're not interested in non-virtual primary bases. */
809e3e7f 6901 if (!BINFO_VIRTUAL_P (binfo) && BINFO_PRIMARY_P (binfo))
23656158
MM
6902 return NULL_TREE;
6903
9965d119
NS
6904 /* If BINFO has virtual bases or is reachable via a virtual path
6905 from T, it'll have a secondary vptr. */
db3d8cde 6906 if (!TYPE_USES_VIRTUAL_BASECLASSES (BINFO_TYPE (binfo))
9965d119 6907 && !binfo_via_virtual (binfo, t))
db3d8cde 6908 return NULL_TREE;
23656158 6909
3ec6bad3
MM
6910 /* Record the index where this secondary vptr can be found. */
6911 index = TREE_TYPE (l);
9965d119
NS
6912 if (top_level_p)
6913 {
50bc768d 6914 gcc_assert (!BINFO_VPTR_INDEX (binfo));
9965d119
NS
6915 BINFO_VPTR_INDEX (binfo) = index;
6916 }
3ec6bad3
MM
6917 TREE_TYPE (l) = size_binop (PLUS_EXPR, index,
6918 TYPE_SIZE_UNIT (ptr_type_node));
6919
6920 /* Add the initializer for the secondary vptr itself. */
809e3e7f 6921 if (top_level_p && BINFO_VIRTUAL_P (binfo))
9965d119
NS
6922 {
6923 /* It's a primary virtual base, and this is not the construction
6924 vtable. Find the base this is primary of in the inheritance graph,
00a17e31 6925 and use that base's vtable now. */
fc6633e0
NS
6926 while (BINFO_PRIMARY_P (binfo))
6927 binfo = BINFO_INHERITANCE_CHAIN (binfo);
9965d119 6928 }
13de7ec4 6929 init = binfo_ctor_vtable (binfo);
23656158 6930 TREE_VALUE (l) = tree_cons (NULL_TREE, init, TREE_VALUE (l));
3ec6bad3 6931
23656158
MM
6932 return NULL_TREE;
6933}
6934
9965d119 6935/* dfs_walk_real predicate for building vtables. DATA is a TREE_LIST,
b7ad2f8b
NS
6936 VTT_MARKED_BINFO_P indicates whether marked or unmarked bases
6937 should be walked. TREE_PURPOSE is the TREE_TYPE that dominates the
6938 hierarchy. */
9965d119
NS
6939
6940static tree
dbbf88d1
NS
6941dfs_ctor_vtable_bases_queue_p (tree derived, int ix,
6942 void* data)
9965d119 6943{
604a3205 6944 tree binfo = BINFO_BASE_BINFO (derived, ix);
dbbf88d1 6945
9965d119
NS
6946 if (!BINFO_MARKED (binfo) == VTT_MARKED_BINFO_P ((tree) data))
6947 return NULL_TREE;
6948 return binfo;
6949}
6950
6951/* Called from build_vtt_inits via dfs_walk. After building constructor
6952 vtables and generating the sub-vtt from them, we need to restore the
6953 BINFO_VTABLES that were scribbled on. DATA is a TREE_LIST whose
6954 TREE_VALUE is the TREE_TYPE of the base whose sub vtt was generated. */
23656158
MM
6955
6956static tree
94edc4ab 6957dfs_fixup_binfo_vtbls (tree binfo, void* data)
23656158 6958{
dbbf88d1 6959 BINFO_MARKED (binfo) = 0;
23656158
MM
6960
6961 /* We don't care about bases that don't have vtables. */
6962 if (!TYPE_VFIELD (BINFO_TYPE (binfo)))
6963 return NULL_TREE;
6964
6965 /* If we scribbled the construction vtable vptr into BINFO, clear it
6966 out now. */
85a9a0a2
NS
6967 if (BINFO_VTABLE (binfo)
6968 && TREE_CODE (BINFO_VTABLE (binfo)) == TREE_LIST
9ccf6541
MM
6969 && (TREE_PURPOSE (BINFO_VTABLE (binfo))
6970 == TREE_VALUE ((tree) data)))
6971 BINFO_VTABLE (binfo) = TREE_CHAIN (BINFO_VTABLE (binfo));
23656158
MM
6972
6973 return NULL_TREE;
6974}
6975
6976/* Build the construction vtable group for BINFO which is in the
6977 hierarchy dominated by T. */
6978
6979static void
94edc4ab 6980build_ctor_vtbl_group (tree binfo, tree t)
23656158
MM
6981{
6982 tree list;
6983 tree type;
6984 tree vtbl;
6985 tree inits;
6986 tree id;
9ccf6541 6987 tree vbase;
23656158 6988
7bdcf888 6989 /* See if we've already created this construction vtable group. */
1f84ec23 6990 id = mangle_ctor_vtbl_for_type (t, binfo);
23656158
MM
6991 if (IDENTIFIER_GLOBAL_VALUE (id))
6992 return;
6993
50bc768d 6994 gcc_assert (!same_type_p (BINFO_TYPE (binfo), t));
23656158
MM
6995 /* Build a version of VTBL (with the wrong type) for use in
6996 constructing the addresses of secondary vtables in the
6997 construction vtable group. */
459c43ad 6998 vtbl = build_vtable (t, id, ptr_type_node);
505970fc 6999 DECL_CONSTRUCTION_VTABLE_P (vtbl) = 1;
23656158
MM
7000 list = build_tree_list (vtbl, NULL_TREE);
7001 accumulate_vtbl_inits (binfo, TYPE_BINFO (TREE_TYPE (binfo)),
7002 binfo, t, list);
9965d119
NS
7003
7004 /* Add the vtables for each of our virtual bases using the vbase in T
7005 binfo. */
7006 for (vbase = TYPE_BINFO (BINFO_TYPE (binfo));
9ccf6541
MM
7007 vbase;
7008 vbase = TREE_CHAIN (vbase))
7009 {
7010 tree b;
7011
809e3e7f 7012 if (!BINFO_VIRTUAL_P (vbase))
9ccf6541 7013 continue;
dbbf88d1 7014 b = copied_binfo (vbase, binfo);
9965d119 7015
dbbf88d1 7016 accumulate_vtbl_inits (b, vbase, binfo, t, list);
9ccf6541 7017 }
99389463 7018 inits = TREE_VALUE (list);
23656158
MM
7019
7020 /* Figure out the type of the construction vtable. */
442e01b6 7021 type = build_index_type (size_int (list_length (inits) - 1));
23656158
MM
7022 type = build_cplus_array_type (vtable_entry_type, type);
7023 TREE_TYPE (vtbl) = type;
7024
7025 /* Initialize the construction vtable. */
548502d3 7026 CLASSTYPE_VTABLES (t) = chainon (CLASSTYPE_VTABLES (t), vtbl);
19c29b2f 7027 initialize_artificial_var (vtbl, inits);
b7442fb5 7028 dump_vtable (t, binfo, vtbl);
23656158
MM
7029}
7030
9965d119
NS
7031/* Add the vtbl initializers for BINFO (and its bases other than
7032 non-virtual primaries) to the list of INITS. BINFO is in the
7033 hierarchy dominated by T. RTTI_BINFO is the binfo within T of
7034 the constructor the vtbl inits should be accumulated for. (If this
7035 is the complete object vtbl then RTTI_BINFO will be TYPE_BINFO (T).)
7036 ORIG_BINFO is the binfo for this object within BINFO_TYPE (RTTI_BINFO).
7037 BINFO is the active base equivalent of ORIG_BINFO in the inheritance
7038 graph of T. Both BINFO and ORIG_BINFO will have the same BINFO_TYPE,
7039 but are not necessarily the same in terms of layout. */
ca36f057
MM
7040
7041static void
94edc4ab
NN
7042accumulate_vtbl_inits (tree binfo,
7043 tree orig_binfo,
7044 tree rtti_binfo,
7045 tree t,
7046 tree inits)
ca36f057 7047{
23656158 7048 int i;
fa743e8c 7049 tree base_binfo;
9965d119 7050 int ctor_vtbl_p = !same_type_p (BINFO_TYPE (rtti_binfo), t);
23656158 7051
50bc768d 7052 gcc_assert (same_type_p (BINFO_TYPE (binfo), BINFO_TYPE (orig_binfo)));
23656158 7053
00a17e31 7054 /* If it doesn't have a vptr, we don't do anything. */
623fe76a
NS
7055 if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
7056 return;
7057
23656158
MM
7058 /* If we're building a construction vtable, we're not interested in
7059 subobjects that don't require construction vtables. */
7060 if (ctor_vtbl_p
9ccf6541 7061 && !TYPE_USES_VIRTUAL_BASECLASSES (BINFO_TYPE (binfo))
9965d119 7062 && !binfo_via_virtual (orig_binfo, BINFO_TYPE (rtti_binfo)))
23656158
MM
7063 return;
7064
7065 /* Build the initializers for the BINFO-in-T vtable. */
7066 TREE_VALUE (inits)
7067 = chainon (TREE_VALUE (inits),
7068 dfs_accumulate_vtbl_inits (binfo, orig_binfo,
7069 rtti_binfo, t, inits));
7070
c35cce41
MM
7071 /* Walk the BINFO and its bases. We walk in preorder so that as we
7072 initialize each vtable we can figure out at what offset the
23656158
MM
7073 secondary vtable lies from the primary vtable. We can't use
7074 dfs_walk here because we need to iterate through bases of BINFO
7075 and RTTI_BINFO simultaneously. */
fa743e8c 7076 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
23656158 7077 {
23656158 7078 /* Skip virtual bases. */
809e3e7f 7079 if (BINFO_VIRTUAL_P (base_binfo))
23656158
MM
7080 continue;
7081 accumulate_vtbl_inits (base_binfo,
604a3205 7082 BINFO_BASE_BINFO (orig_binfo, i),
9965d119 7083 rtti_binfo, t,
23656158
MM
7084 inits);
7085 }
ca36f057
MM
7086}
7087
3461fba7
NS
7088/* Called from accumulate_vtbl_inits. Returns the initializers for
7089 the BINFO vtable. */
ca36f057
MM
7090
7091static tree
94edc4ab
NN
7092dfs_accumulate_vtbl_inits (tree binfo,
7093 tree orig_binfo,
7094 tree rtti_binfo,
7095 tree t,
7096 tree l)
ca36f057 7097{
23656158 7098 tree inits = NULL_TREE;
9965d119
NS
7099 tree vtbl = NULL_TREE;
7100 int ctor_vtbl_p = !same_type_p (BINFO_TYPE (rtti_binfo), t);
7101
13de7ec4 7102 if (ctor_vtbl_p
809e3e7f 7103 && BINFO_VIRTUAL_P (orig_binfo) && BINFO_PRIMARY_P (orig_binfo))
9965d119 7104 {
13de7ec4
JM
7105 /* In the hierarchy of BINFO_TYPE (RTTI_BINFO), this is a
7106 primary virtual base. If it is not the same primary in
7107 the hierarchy of T, we'll need to generate a ctor vtable
7108 for it, to place at its location in T. If it is the same
7109 primary, we still need a VTT entry for the vtable, but it
7110 should point to the ctor vtable for the base it is a
7111 primary for within the sub-hierarchy of RTTI_BINFO.
7bdcf888 7112
13de7ec4 7113 There are three possible cases:
7bdcf888 7114
13de7ec4
JM
7115 1) We are in the same place.
7116 2) We are a primary base within a lost primary virtual base of
7117 RTTI_BINFO.
049d2def 7118 3) We are primary to something not a base of RTTI_BINFO. */
7bdcf888 7119
fc6633e0 7120 tree b;
13de7ec4 7121 tree last = NULL_TREE;
85a9a0a2 7122
13de7ec4
JM
7123 /* First, look through the bases we are primary to for RTTI_BINFO
7124 or a virtual base. */
fc6633e0
NS
7125 b = binfo;
7126 while (BINFO_PRIMARY_P (b))
7bdcf888 7127 {
fc6633e0 7128 b = BINFO_INHERITANCE_CHAIN (b);
13de7ec4 7129 last = b;
809e3e7f 7130 if (BINFO_VIRTUAL_P (b) || b == rtti_binfo)
fc6633e0 7131 goto found;
7bdcf888 7132 }
13de7ec4
JM
7133 /* If we run out of primary links, keep looking down our
7134 inheritance chain; we might be an indirect primary. */
fc6633e0
NS
7135 for (b = last; b; b = BINFO_INHERITANCE_CHAIN (b))
7136 if (BINFO_VIRTUAL_P (b) || b == rtti_binfo)
7137 break;
7138 found:
7139
13de7ec4
JM
7140 /* If we found RTTI_BINFO, this is case 1. If we found a virtual
7141 base B and it is a base of RTTI_BINFO, this is case 2. In
7142 either case, we share our vtable with LAST, i.e. the
7143 derived-most base within B of which we are a primary. */
7144 if (b == rtti_binfo
58c42dc2 7145 || (b && binfo_for_vbase (BINFO_TYPE (b), BINFO_TYPE (rtti_binfo))))
049d2def
JM
7146 /* Just set our BINFO_VTABLE to point to LAST, as we may not have
7147 set LAST's BINFO_VTABLE yet. We'll extract the actual vptr in
7148 binfo_ctor_vtable after everything's been set up. */
7149 vtbl = last;
13de7ec4 7150
049d2def 7151 /* Otherwise, this is case 3 and we get our own. */
9965d119 7152 }
dbbf88d1 7153 else if (!BINFO_NEW_VTABLE_MARKED (orig_binfo))
9965d119 7154 return inits;
7bdcf888 7155
9965d119 7156 if (!vtbl)
ca36f057 7157 {
c35cce41
MM
7158 tree index;
7159 int non_fn_entries;
7160
7161 /* Compute the initializer for this vtable. */
23656158 7162 inits = build_vtbl_initializer (binfo, orig_binfo, t, rtti_binfo,
aabb4cd6 7163 &non_fn_entries);
c35cce41 7164
23656158 7165 /* Figure out the position to which the VPTR should point. */
c35cce41 7166 vtbl = TREE_PURPOSE (l);
6de9cd9a 7167 vtbl = build1 (ADDR_EXPR, vtbl_ptr_type_node, vtbl);
c35cce41
MM
7168 index = size_binop (PLUS_EXPR,
7169 size_int (non_fn_entries),
7170 size_int (list_length (TREE_VALUE (l))));
23656158
MM
7171 index = size_binop (MULT_EXPR,
7172 TYPE_SIZE_UNIT (vtable_entry_type),
7173 index);
f293ce4b 7174 vtbl = build2 (PLUS_EXPR, TREE_TYPE (vtbl), vtbl, index);
9965d119 7175 }
23656158 7176
7bdcf888 7177 if (ctor_vtbl_p)
9965d119
NS
7178 /* For a construction vtable, we can't overwrite BINFO_VTABLE.
7179 So, we make a TREE_LIST. Later, dfs_fixup_binfo_vtbls will
7180 straighten this out. */
7181 BINFO_VTABLE (binfo) = tree_cons (rtti_binfo, vtbl, BINFO_VTABLE (binfo));
809e3e7f 7182 else if (BINFO_PRIMARY_P (binfo) && BINFO_VIRTUAL_P (binfo))
7bdcf888
NS
7183 inits = NULL_TREE;
7184 else
7185 /* For an ordinary vtable, set BINFO_VTABLE. */
7186 BINFO_VTABLE (binfo) = vtbl;
ca36f057 7187
23656158 7188 return inits;
ca36f057
MM
7189}
7190
90ecce3e 7191/* Construct the initializer for BINFO's virtual function table. BINFO
aabb4cd6 7192 is part of the hierarchy dominated by T. If we're building a
23656158 7193 construction vtable, the ORIG_BINFO is the binfo we should use to
9965d119
NS
7194 find the actual function pointers to put in the vtable - but they
7195 can be overridden on the path to most-derived in the graph that
7196 ORIG_BINFO belongs. Otherwise,
911a71a7 7197 ORIG_BINFO should be the same as BINFO. The RTTI_BINFO is the
23656158
MM
7198 BINFO that should be indicated by the RTTI information in the
7199 vtable; it will be a base class of T, rather than T itself, if we
7200 are building a construction vtable.
aabb4cd6
MM
7201
7202 The value returned is a TREE_LIST suitable for wrapping in a
7203 CONSTRUCTOR to use as the DECL_INITIAL for a vtable. If
7204 NON_FN_ENTRIES_P is not NULL, *NON_FN_ENTRIES_P is set to the
911a71a7
MM
7205 number of non-function entries in the vtable.
7206
7207 It might seem that this function should never be called with a
9965d119 7208 BINFO for which BINFO_PRIMARY_P holds, the vtable for such a
911a71a7 7209 base is always subsumed by a derived class vtable. However, when
9965d119 7210 we are building construction vtables, we do build vtables for
911a71a7
MM
7211 primary bases; we need these while the primary base is being
7212 constructed. */
ca36f057
MM
7213
7214static tree
94edc4ab
NN
7215build_vtbl_initializer (tree binfo,
7216 tree orig_binfo,
7217 tree t,
7218 tree rtti_binfo,
7219 int* non_fn_entries_p)
ca36f057 7220{
d0cd8b44 7221 tree v, b;
911a71a7 7222 tree vfun_inits;
911a71a7 7223 vtbl_init_data vid;
58c42dc2
NS
7224 unsigned ix;
7225 tree vbinfo;
9ba5ff0f
NS
7226 VEC (tree) *vbases;
7227
911a71a7 7228 /* Initialize VID. */
961192e1 7229 memset (&vid, 0, sizeof (vid));
911a71a7
MM
7230 vid.binfo = binfo;
7231 vid.derived = t;
73ea87d7 7232 vid.rtti_binfo = rtti_binfo;
911a71a7
MM
7233 vid.last_init = &vid.inits;
7234 vid.primary_vtbl_p = (binfo == TYPE_BINFO (t));
7235 vid.ctor_vtbl_p = !same_type_p (BINFO_TYPE (rtti_binfo), t);
548502d3 7236 vid.generate_vcall_entries = true;
c35cce41 7237 /* The first vbase or vcall offset is at index -3 in the vtable. */
ce552f75 7238 vid.index = ssize_int(-3 * TARGET_VTABLE_DATA_ENTRY_DISTANCE);
c35cce41 7239
9bab6c90 7240 /* Add entries to the vtable for RTTI. */
73ea87d7 7241 build_rtti_vtbl_entries (binfo, &vid);
9bab6c90 7242
b485e15b
MM
7243 /* Create an array for keeping track of the functions we've
7244 processed. When we see multiple functions with the same
7245 signature, we share the vcall offsets. */
7246 VARRAY_TREE_INIT (vid.fns, 32, "fns");
c35cce41 7247 /* Add the vcall and vbase offset entries. */
911a71a7 7248 build_vcall_and_vbase_vtbl_entries (binfo, &vid);
58c42dc2 7249
79cda2d1 7250 /* Clear BINFO_VTABLE_PATH_MARKED; it's set by
c35cce41 7251 build_vbase_offset_vtbl_entries. */
9ba5ff0f
NS
7252 for (vbases = CLASSTYPE_VBASECLASSES (t), ix = 0;
7253 VEC_iterate (tree, vbases, ix, vbinfo); ix++)
58c42dc2 7254 BINFO_VTABLE_PATH_MARKED (vbinfo) = 0;
ca36f057 7255
a6f5e048
RH
7256 /* If the target requires padding between data entries, add that now. */
7257 if (TARGET_VTABLE_DATA_ENTRY_DISTANCE > 1)
7258 {
7259 tree cur, *prev;
7260
7261 for (prev = &vid.inits; (cur = *prev); prev = &TREE_CHAIN (cur))
7262 {
7263 tree add = cur;
7264 int i;
7265
7266 for (i = 1; i < TARGET_VTABLE_DATA_ENTRY_DISTANCE; ++i)
7befdb9f 7267 add = tree_cons (NULL_TREE,
2e88ae22
SE
7268 build1 (NOP_EXPR, vtable_entry_type,
7269 null_pointer_node),
7befdb9f 7270 add);
a6f5e048
RH
7271 *prev = add;
7272 }
7273 }
7274
c35cce41 7275 if (non_fn_entries_p)
911a71a7 7276 *non_fn_entries_p = list_length (vid.inits);
ca36f057
MM
7277
7278 /* Go through all the ordinary virtual functions, building up
7279 initializers. */
c35cce41 7280 vfun_inits = NULL_TREE;
23656158 7281 for (v = BINFO_VIRTUALS (orig_binfo); v; v = TREE_CHAIN (v))
ca36f057
MM
7282 {
7283 tree delta;
7284 tree vcall_index;
4977bab6 7285 tree fn, fn_original;
f11ee281 7286 tree init = NULL_TREE;
73ea87d7 7287
ca36f057 7288 fn = BV_FN (v);
07fa4878
NS
7289 fn_original = fn;
7290 if (DECL_THUNK_P (fn))
4977bab6 7291 {
07fa4878
NS
7292 if (!DECL_NAME (fn))
7293 finish_thunk (fn);
e00853fd 7294 if (THUNK_ALIAS (fn))
bb885938
NS
7295 {
7296 fn = THUNK_ALIAS (fn);
7297 BV_FN (v) = fn;
7298 }
07fa4878 7299 fn_original = THUNK_TARGET (fn);
4977bab6
ZW
7300 }
7301
d0cd8b44
JM
7302 /* If the only definition of this function signature along our
7303 primary base chain is from a lost primary, this vtable slot will
7304 never be used, so just zero it out. This is important to avoid
7305 requiring extra thunks which cannot be generated with the function.
7306
f11ee281
JM
7307 We first check this in update_vtable_entry_for_fn, so we handle
7308 restored primary bases properly; we also need to do it here so we
7309 zero out unused slots in ctor vtables, rather than filling themff
7310 with erroneous values (though harmless, apart from relocation
7311 costs). */
7312 for (b = binfo; ; b = get_primary_binfo (b))
7313 {
7314 /* We found a defn before a lost primary; go ahead as normal. */
4977bab6 7315 if (look_for_overrides_here (BINFO_TYPE (b), fn_original))
f11ee281
JM
7316 break;
7317
7318 /* The nearest definition is from a lost primary; clear the
7319 slot. */
7320 if (BINFO_LOST_PRIMARY_P (b))
7321 {
7322 init = size_zero_node;
d0cd8b44 7323 break;
f11ee281
JM
7324 }
7325 }
d0cd8b44 7326
f11ee281
JM
7327 if (! init)
7328 {
7329 /* Pull the offset for `this', and the function to call, out of
7330 the list. */
7331 delta = BV_DELTA (v);
548502d3 7332 vcall_index = BV_VCALL_INDEX (v);
f11ee281 7333
50bc768d
NS
7334 gcc_assert (TREE_CODE (delta) == INTEGER_CST);
7335 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
f11ee281
JM
7336
7337 /* You can't call an abstract virtual function; it's abstract.
7338 So, we replace these functions with __pure_virtual. */
4977bab6 7339 if (DECL_PURE_VIRTUAL_P (fn_original))
f11ee281 7340 fn = abort_fndecl;
bb5e8a7f 7341 else if (!integer_zerop (delta) || vcall_index)
4977bab6
ZW
7342 {
7343 fn = make_thunk (fn, /*this_adjusting=*/1, delta, vcall_index);
7344 if (!DECL_NAME (fn))
07fa4878 7345 finish_thunk (fn);
4977bab6 7346 }
f11ee281
JM
7347 /* Take the address of the function, considering it to be of an
7348 appropriate generic type. */
bb5e8a7f 7349 init = build1 (ADDR_EXPR, vfunc_ptr_type_node, fn);
f11ee281 7350 }
d0cd8b44 7351
ca36f057 7352 /* And add it to the chain of initializers. */
67231816
RH
7353 if (TARGET_VTABLE_USES_DESCRIPTORS)
7354 {
7355 int i;
7356 if (init == size_zero_node)
7357 for (i = 0; i < TARGET_VTABLE_USES_DESCRIPTORS; ++i)
7358 vfun_inits = tree_cons (NULL_TREE, init, vfun_inits);
7359 else
7360 for (i = 0; i < TARGET_VTABLE_USES_DESCRIPTORS; ++i)
7361 {
f293ce4b
RS
7362 tree fdesc = build2 (FDESC_EXPR, vfunc_ptr_type_node,
7363 TREE_OPERAND (init, 0),
7d60be94 7364 build_int_cst (NULL_TREE, i));
67231816 7365 TREE_CONSTANT (fdesc) = 1;
6de9cd9a 7366 TREE_INVARIANT (fdesc) = 1;
67231816
RH
7367
7368 vfun_inits = tree_cons (NULL_TREE, fdesc, vfun_inits);
7369 }
7370 }
7371 else
7372 vfun_inits = tree_cons (NULL_TREE, init, vfun_inits);
ca36f057
MM
7373 }
7374
c35cce41
MM
7375 /* The initializers for virtual functions were built up in reverse
7376 order; straighten them out now. */
7377 vfun_inits = nreverse (vfun_inits);
7378
9bab6c90 7379 /* The negative offset initializers are also in reverse order. */
911a71a7 7380 vid.inits = nreverse (vid.inits);
9bab6c90
MM
7381
7382 /* Chain the two together. */
911a71a7 7383 return chainon (vid.inits, vfun_inits);
ca36f057
MM
7384}
7385
d0cd8b44 7386/* Adds to vid->inits the initializers for the vbase and vcall
c35cce41 7387 offsets in BINFO, which is in the hierarchy dominated by T. */
ca36f057 7388
c35cce41 7389static void
94edc4ab 7390build_vcall_and_vbase_vtbl_entries (tree binfo, vtbl_init_data* vid)
ca36f057 7391{
c35cce41 7392 tree b;
8d08fdba 7393
c35cce41 7394 /* If this is a derived class, we must first create entries
9bab6c90 7395 corresponding to the primary base class. */
911a71a7 7396 b = get_primary_binfo (binfo);
c35cce41 7397 if (b)
911a71a7 7398 build_vcall_and_vbase_vtbl_entries (b, vid);
c35cce41
MM
7399
7400 /* Add the vbase entries for this base. */
911a71a7 7401 build_vbase_offset_vtbl_entries (binfo, vid);
c35cce41 7402 /* Add the vcall entries for this base. */
911a71a7 7403 build_vcall_offset_vtbl_entries (binfo, vid);
ca36f057 7404}
8d08fdba 7405
ca36f057
MM
7406/* Returns the initializers for the vbase offset entries in the vtable
7407 for BINFO (which is part of the class hierarchy dominated by T), in
c35cce41
MM
7408 reverse order. VBASE_OFFSET_INDEX gives the vtable index
7409 where the next vbase offset will go. */
8d08fdba 7410
c35cce41 7411static void
94edc4ab 7412build_vbase_offset_vtbl_entries (tree binfo, vtbl_init_data* vid)
ca36f057 7413{
c35cce41
MM
7414 tree vbase;
7415 tree t;
90b1ca2f 7416 tree non_primary_binfo;
8d08fdba 7417
ca36f057
MM
7418 /* If there are no virtual baseclasses, then there is nothing to
7419 do. */
7420 if (!TYPE_USES_VIRTUAL_BASECLASSES (BINFO_TYPE (binfo)))
c35cce41 7421 return;
ca36f057 7422
911a71a7 7423 t = vid->derived;
90b1ca2f
NS
7424
7425 /* We might be a primary base class. Go up the inheritance hierarchy
7426 until we find the most derived class of which we are a primary base:
7427 it is the offset of that which we need to use. */
7428 non_primary_binfo = binfo;
7429 while (BINFO_INHERITANCE_CHAIN (non_primary_binfo))
7430 {
7431 tree b;
7432
7433 /* If we have reached a virtual base, then it must be a primary
7434 base (possibly multi-level) of vid->binfo, or we wouldn't
7435 have called build_vcall_and_vbase_vtbl_entries for it. But it
7436 might be a lost primary, so just skip down to vid->binfo. */
809e3e7f 7437 if (BINFO_VIRTUAL_P (non_primary_binfo))
90b1ca2f
NS
7438 {
7439 non_primary_binfo = vid->binfo;
7440 break;
7441 }
7442
7443 b = BINFO_INHERITANCE_CHAIN (non_primary_binfo);
7444 if (get_primary_binfo (b) != non_primary_binfo)
7445 break;
7446 non_primary_binfo = b;
7447 }
ca36f057 7448
c35cce41
MM
7449 /* Go through the virtual bases, adding the offsets. */
7450 for (vbase = TYPE_BINFO (BINFO_TYPE (binfo));
7451 vbase;
7452 vbase = TREE_CHAIN (vbase))
7453 {
7454 tree b;
7455 tree delta;
7456
809e3e7f 7457 if (!BINFO_VIRTUAL_P (vbase))
c35cce41 7458 continue;
ca36f057 7459
c35cce41
MM
7460 /* Find the instance of this virtual base in the complete
7461 object. */
dbbf88d1 7462 b = copied_binfo (vbase, binfo);
c35cce41
MM
7463
7464 /* If we've already got an offset for this virtual base, we
7465 don't need another one. */
7466 if (BINFO_VTABLE_PATH_MARKED (b))
7467 continue;
dbbf88d1 7468 BINFO_VTABLE_PATH_MARKED (b) = 1;
c35cce41
MM
7469
7470 /* Figure out where we can find this vbase offset. */
7471 delta = size_binop (MULT_EXPR,
911a71a7 7472 vid->index,
c35cce41
MM
7473 convert (ssizetype,
7474 TYPE_SIZE_UNIT (vtable_entry_type)));
911a71a7 7475 if (vid->primary_vtbl_p)
c35cce41
MM
7476 BINFO_VPTR_FIELD (b) = delta;
7477
7478 if (binfo != TYPE_BINFO (t))
50bc768d
NS
7479 /* The vbase offset had better be the same. */
7480 gcc_assert (tree_int_cst_equal (delta, BINFO_VPTR_FIELD (vbase)));
c35cce41
MM
7481
7482 /* The next vbase will come at a more negative offset. */
a6f5e048
RH
7483 vid->index = size_binop (MINUS_EXPR, vid->index,
7484 ssize_int (TARGET_VTABLE_DATA_ENTRY_DISTANCE));
c35cce41
MM
7485
7486 /* The initializer is the delta from BINFO to this virtual base.
4e7512c9
MM
7487 The vbase offsets go in reverse inheritance-graph order, and
7488 we are walking in inheritance graph order so these end up in
7489 the right order. */
90b1ca2f
NS
7490 delta = size_diffop (BINFO_OFFSET (b), BINFO_OFFSET (non_primary_binfo));
7491
911a71a7 7492 *vid->last_init
9bab6c90
MM
7493 = build_tree_list (NULL_TREE,
7494 fold (build1 (NOP_EXPR,
7495 vtable_entry_type,
7496 delta)));
911a71a7 7497 vid->last_init = &TREE_CHAIN (*vid->last_init);
c35cce41 7498 }
8d08fdba 7499}
ca36f057 7500
b485e15b 7501/* Adds the initializers for the vcall offset entries in the vtable
d0cd8b44
JM
7502 for BINFO (which is part of the class hierarchy dominated by VID->DERIVED)
7503 to VID->INITS. */
b485e15b
MM
7504
7505static void
94edc4ab 7506build_vcall_offset_vtbl_entries (tree binfo, vtbl_init_data* vid)
b485e15b 7507{
548502d3
MM
7508 /* We only need these entries if this base is a virtual base. We
7509 compute the indices -- but do not add to the vtable -- when
7510 building the main vtable for a class. */
809e3e7f 7511 if (BINFO_VIRTUAL_P (binfo) || binfo == TYPE_BINFO (vid->derived))
548502d3
MM
7512 {
7513 /* We need a vcall offset for each of the virtual functions in this
7514 vtable. For example:
b485e15b 7515
548502d3
MM
7516 class A { virtual void f (); };
7517 class B1 : virtual public A { virtual void f (); };
7518 class B2 : virtual public A { virtual void f (); };
7519 class C: public B1, public B2 { virtual void f (); };
d0cd8b44 7520
548502d3
MM
7521 A C object has a primary base of B1, which has a primary base of A. A
7522 C also has a secondary base of B2, which no longer has a primary base
7523 of A. So the B2-in-C construction vtable needs a secondary vtable for
7524 A, which will adjust the A* to a B2* to call f. We have no way of
7525 knowing what (or even whether) this offset will be when we define B2,
7526 so we store this "vcall offset" in the A sub-vtable and look it up in
7527 a "virtual thunk" for B2::f.
b485e15b 7528
548502d3
MM
7529 We need entries for all the functions in our primary vtable and
7530 in our non-virtual bases' secondary vtables. */
7531 vid->vbase = binfo;
7532 /* If we are just computing the vcall indices -- but do not need
7533 the actual entries -- not that. */
809e3e7f 7534 if (!BINFO_VIRTUAL_P (binfo))
548502d3
MM
7535 vid->generate_vcall_entries = false;
7536 /* Now, walk through the non-virtual bases, adding vcall offsets. */
7537 add_vcall_offset_vtbl_entries_r (binfo, vid);
7538 }
b485e15b
MM
7539}
7540
7541/* Build vcall offsets, starting with those for BINFO. */
7542
7543static void
94edc4ab 7544add_vcall_offset_vtbl_entries_r (tree binfo, vtbl_init_data* vid)
b485e15b
MM
7545{
7546 int i;
7547 tree primary_binfo;
fa743e8c 7548 tree base_binfo;
b485e15b
MM
7549
7550 /* Don't walk into virtual bases -- except, of course, for the
d0cd8b44
JM
7551 virtual base for which we are building vcall offsets. Any
7552 primary virtual base will have already had its offsets generated
7553 through the recursion in build_vcall_and_vbase_vtbl_entries. */
809e3e7f 7554 if (BINFO_VIRTUAL_P (binfo) && vid->vbase != binfo)
b485e15b
MM
7555 return;
7556
7557 /* If BINFO has a primary base, process it first. */
7558 primary_binfo = get_primary_binfo (binfo);
7559 if (primary_binfo)
7560 add_vcall_offset_vtbl_entries_r (primary_binfo, vid);
7561
7562 /* Add BINFO itself to the list. */
7563 add_vcall_offset_vtbl_entries_1 (binfo, vid);
7564
7565 /* Scan the non-primary bases of BINFO. */
fa743e8c
NS
7566 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
7567 if (base_binfo != primary_binfo)
7568 add_vcall_offset_vtbl_entries_r (base_binfo, vid);
b485e15b
MM
7569}
7570
9965d119 7571/* Called from build_vcall_offset_vtbl_entries_r. */
e92cc029 7572
b485e15b 7573static void
94edc4ab 7574add_vcall_offset_vtbl_entries_1 (tree binfo, vtbl_init_data* vid)
8d08fdba 7575{
e6a66567
MM
7576 /* Make entries for the rest of the virtuals. */
7577 if (abi_version_at_least (2))
31f8e4f3 7578 {
e6a66567 7579 tree orig_fn;
911a71a7 7580
e6a66567
MM
7581 /* The ABI requires that the methods be processed in declaration
7582 order. G++ 3.2 used the order in the vtable. */
7583 for (orig_fn = TYPE_METHODS (BINFO_TYPE (binfo));
7584 orig_fn;
7585 orig_fn = TREE_CHAIN (orig_fn))
7586 if (DECL_VINDEX (orig_fn))
95675950 7587 add_vcall_offset (orig_fn, binfo, vid);
e6a66567
MM
7588 }
7589 else
7590 {
7591 tree derived_virtuals;
7592 tree base_virtuals;
7593 tree orig_virtuals;
7594 /* If BINFO is a primary base, the most derived class which has
7595 BINFO as a primary base; otherwise, just BINFO. */
7596 tree non_primary_binfo;
7597
7598 /* We might be a primary base class. Go up the inheritance hierarchy
7599 until we find the most derived class of which we are a primary base:
7600 it is the BINFO_VIRTUALS there that we need to consider. */
7601 non_primary_binfo = binfo;
7602 while (BINFO_INHERITANCE_CHAIN (non_primary_binfo))
911a71a7 7603 {
e6a66567
MM
7604 tree b;
7605
7606 /* If we have reached a virtual base, then it must be vid->vbase,
7607 because we ignore other virtual bases in
7608 add_vcall_offset_vtbl_entries_r. In turn, it must be a primary
7609 base (possibly multi-level) of vid->binfo, or we wouldn't
7610 have called build_vcall_and_vbase_vtbl_entries for it. But it
7611 might be a lost primary, so just skip down to vid->binfo. */
809e3e7f 7612 if (BINFO_VIRTUAL_P (non_primary_binfo))
e6a66567 7613 {
8dc2b103 7614 gcc_assert (non_primary_binfo == vid->vbase);
e6a66567
MM
7615 non_primary_binfo = vid->binfo;
7616 break;
7617 }
911a71a7 7618
e6a66567
MM
7619 b = BINFO_INHERITANCE_CHAIN (non_primary_binfo);
7620 if (get_primary_binfo (b) != non_primary_binfo)
7621 break;
7622 non_primary_binfo = b;
7623 }
4e7512c9 7624
e6a66567
MM
7625 if (vid->ctor_vtbl_p)
7626 /* For a ctor vtable we need the equivalent binfo within the hierarchy
7627 where rtti_binfo is the most derived type. */
dbbf88d1
NS
7628 non_primary_binfo
7629 = original_binfo (non_primary_binfo, vid->rtti_binfo);
e6a66567
MM
7630
7631 for (base_virtuals = BINFO_VIRTUALS (binfo),
7632 derived_virtuals = BINFO_VIRTUALS (non_primary_binfo),
7633 orig_virtuals = BINFO_VIRTUALS (TYPE_BINFO (BINFO_TYPE (binfo)));
7634 base_virtuals;
7635 base_virtuals = TREE_CHAIN (base_virtuals),
7636 derived_virtuals = TREE_CHAIN (derived_virtuals),
7637 orig_virtuals = TREE_CHAIN (orig_virtuals))
7638 {
7639 tree orig_fn;
73ea87d7 7640
e6a66567
MM
7641 /* Find the declaration that originally caused this function to
7642 be present in BINFO_TYPE (binfo). */
7643 orig_fn = BV_FN (orig_virtuals);
9bab6c90 7644
e6a66567
MM
7645 /* When processing BINFO, we only want to generate vcall slots for
7646 function slots introduced in BINFO. So don't try to generate
7647 one if the function isn't even defined in BINFO. */
7648 if (!same_type_p (DECL_CONTEXT (orig_fn), BINFO_TYPE (binfo)))
7649 continue;
b485e15b 7650
95675950 7651 add_vcall_offset (orig_fn, binfo, vid);
e6a66567
MM
7652 }
7653 }
7654}
b485e15b 7655
95675950 7656/* Add a vcall offset entry for ORIG_FN to the vtable. */
b485e15b 7657
e6a66567 7658static void
95675950 7659add_vcall_offset (tree orig_fn, tree binfo, vtbl_init_data *vid)
e6a66567
MM
7660{
7661 size_t i;
7662 tree vcall_offset;
9bab6c90 7663
e6a66567
MM
7664 /* If there is already an entry for a function with the same
7665 signature as FN, then we do not need a second vcall offset.
7666 Check the list of functions already present in the derived
7667 class vtable. */
7668 for (i = 0; i < VARRAY_ACTIVE_SIZE (vid->fns); ++i)
7669 {
7670 tree derived_entry;
aabb4cd6 7671
e6a66567
MM
7672 derived_entry = VARRAY_TREE (vid->fns, i);
7673 if (same_signature_p (derived_entry, orig_fn)
7674 /* We only use one vcall offset for virtual destructors,
7675 even though there are two virtual table entries. */
7676 || (DECL_DESTRUCTOR_P (derived_entry)
7677 && DECL_DESTRUCTOR_P (orig_fn)))
7678 return;
7679 }
4e7512c9 7680
e6a66567
MM
7681 /* If we are building these vcall offsets as part of building
7682 the vtable for the most derived class, remember the vcall
7683 offset. */
7684 if (vid->binfo == TYPE_BINFO (vid->derived))
0871761b
NS
7685 {
7686 tree_pair_p elt = VEC_safe_push (tree_pair_s,
7687 CLASSTYPE_VCALL_INDICES (vid->derived),
7688 NULL);
7689 elt->purpose = orig_fn;
7690 elt->value = vid->index;
7691 }
7692
e6a66567
MM
7693 /* The next vcall offset will be found at a more negative
7694 offset. */
7695 vid->index = size_binop (MINUS_EXPR, vid->index,
7696 ssize_int (TARGET_VTABLE_DATA_ENTRY_DISTANCE));
7697
7698 /* Keep track of this function. */
7699 VARRAY_PUSH_TREE (vid->fns, orig_fn);
7700
7701 if (vid->generate_vcall_entries)
7702 {
7703 tree base;
e6a66567 7704 tree fn;
548502d3 7705
e6a66567 7706 /* Find the overriding function. */
95675950 7707 fn = find_final_overrider (vid->rtti_binfo, binfo, orig_fn);
e6a66567
MM
7708 if (fn == error_mark_node)
7709 vcall_offset = build1 (NOP_EXPR, vtable_entry_type,
7710 integer_zero_node);
7711 else
7712 {
95675950
MM
7713 base = TREE_VALUE (fn);
7714
7715 /* The vbase we're working on is a primary base of
7716 vid->binfo. But it might be a lost primary, so its
7717 BINFO_OFFSET might be wrong, so we just use the
7718 BINFO_OFFSET from vid->binfo. */
7719 vcall_offset = size_diffop (BINFO_OFFSET (base),
7720 BINFO_OFFSET (vid->binfo));
548502d3
MM
7721 vcall_offset = fold (build1 (NOP_EXPR, vtable_entry_type,
7722 vcall_offset));
548502d3 7723 }
34cd5ae7 7724 /* Add the initializer to the vtable. */
e6a66567
MM
7725 *vid->last_init = build_tree_list (NULL_TREE, vcall_offset);
7726 vid->last_init = &TREE_CHAIN (*vid->last_init);
c35cce41 7727 }
570221c2 7728}
b54ccf71 7729
34cd5ae7 7730/* Return vtbl initializers for the RTTI entries corresponding to the
aabb4cd6 7731 BINFO's vtable. The RTTI entries should indicate the object given
73ea87d7 7732 by VID->rtti_binfo. */
b54ccf71 7733
9bab6c90 7734static void
94edc4ab 7735build_rtti_vtbl_entries (tree binfo, vtbl_init_data* vid)
b54ccf71 7736{
ca36f057 7737 tree b;
aabb4cd6 7738 tree t;
ca36f057 7739 tree basetype;
ca36f057
MM
7740 tree offset;
7741 tree decl;
7742 tree init;
b54ccf71 7743
ca36f057 7744 basetype = BINFO_TYPE (binfo);
73ea87d7 7745 t = BINFO_TYPE (vid->rtti_binfo);
b54ccf71 7746
ca36f057
MM
7747 /* To find the complete object, we will first convert to our most
7748 primary base, and then add the offset in the vtbl to that value. */
7749 b = binfo;
9965d119
NS
7750 while (CLASSTYPE_HAS_PRIMARY_BASE_P (BINFO_TYPE (b))
7751 && !BINFO_LOST_PRIMARY_P (b))
b54ccf71 7752 {
c35cce41
MM
7753 tree primary_base;
7754
911a71a7 7755 primary_base = get_primary_binfo (b);
fc6633e0
NS
7756 gcc_assert (BINFO_PRIMARY_P (primary_base)
7757 && BINFO_INHERITANCE_CHAIN (primary_base) == b);
c35cce41 7758 b = primary_base;
b54ccf71 7759 }
73ea87d7 7760 offset = size_diffop (BINFO_OFFSET (vid->rtti_binfo), BINFO_OFFSET (b));
8f032717 7761
8fa33dfa
MM
7762 /* The second entry is the address of the typeinfo object. */
7763 if (flag_rtti)
7993382e 7764 decl = build_address (get_tinfo_decl (t));
ca36f057 7765 else
8fa33dfa
MM
7766 decl = integer_zero_node;
7767
7768 /* Convert the declaration to a type that can be stored in the
7769 vtable. */
7993382e 7770 init = build_nop (vfunc_ptr_type_node, decl);
911a71a7
MM
7771 *vid->last_init = build_tree_list (NULL_TREE, init);
7772 vid->last_init = &TREE_CHAIN (*vid->last_init);
8f032717 7773
c35cce41 7774 /* Add the offset-to-top entry. It comes earlier in the vtable that
c4372ef4
NS
7775 the the typeinfo entry. Convert the offset to look like a
7776 function pointer, so that we can put it in the vtable. */
7993382e 7777 init = build_nop (vfunc_ptr_type_node, offset);
c4372ef4
NS
7778 *vid->last_init = build_tree_list (NULL_TREE, init);
7779 vid->last_init = &TREE_CHAIN (*vid->last_init);
8f032717 7780}
0f59171d
RH
7781
7782/* Fold a OBJ_TYPE_REF expression to the address of a function.
7783 KNOWN_TYPE carries the true type of OBJ_TYPE_REF_OBJECT(REF). */
7784
7785tree
7786cp_fold_obj_type_ref (tree ref, tree known_type)
7787{
7788 HOST_WIDE_INT index = tree_low_cst (OBJ_TYPE_REF_TOKEN (ref), 1);
7789 HOST_WIDE_INT i = 0;
604a3205 7790 tree v = BINFO_VIRTUALS (TYPE_BINFO (known_type));
0f59171d
RH
7791 tree fndecl;
7792
7793 while (i != index)
7794 {
7795 i += (TARGET_VTABLE_USES_DESCRIPTORS
7796 ? TARGET_VTABLE_USES_DESCRIPTORS : 1);
7797 v = TREE_CHAIN (v);
7798 }
7799
7800 fndecl = BV_FN (v);
7801
7802#ifdef ENABLE_CHECKING
8dc2b103
NS
7803 gcc_assert (tree_int_cst_equal (OBJ_TYPE_REF_TOKEN (ref),
7804 DECL_VINDEX (fndecl)));
0f59171d
RH
7805#endif
7806
7807 return build_address (fndecl);
7808}
d7afec4b 7809