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