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