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