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