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