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