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