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