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