]> gcc.gnu.org Git - gcc.git/blame - gcc/cp/class.c
add PR number
[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));
2253 if (BINFO_LOST_PRIMARY_P (b))
2254 lost = true;
2255 if (!DECL_THUNK_P (TREE_VALUE (bv)))
2256 break;
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{
cbb40945
NS
2456 if (TREE_CODE (decl) == TEMPLATE_DECL)
2457 /* In [temp.mem] we have:
2ee887f2 2458
0cbd7506
MS
2459 A specialization of a member function template does not
2460 override a virtual function from a base class. */
cbb40945
NS
2461 return;
2462 if ((DECL_DESTRUCTOR_P (decl)
a6c0d772
MM
2463 || IDENTIFIER_VIRTUAL_P (DECL_NAME (decl))
2464 || DECL_CONV_FN_P (decl))
cbb40945
NS
2465 && look_for_overrides (ctype, decl)
2466 && !DECL_STATIC_FUNCTION_P (decl))
e6858a84
NS
2467 /* Set DECL_VINDEX to a value that is neither an INTEGER_CST nor
2468 the error_mark_node so that we know it is an overriding
2469 function. */
2470 DECL_VINDEX (decl) = decl;
2471
cbb40945 2472 if (DECL_VIRTUAL_P (decl))
2ee887f2 2473 {
e6858a84 2474 if (!DECL_VINDEX (decl))
2ee887f2
MS
2475 DECL_VINDEX (decl) = error_mark_node;
2476 IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)) = 1;
2477 }
2478}
2479
fc378698
MS
2480/* Warn about hidden virtual functions that are not overridden in t.
2481 We know that constructors and destructors don't apply. */
e92cc029 2482
b23e103b 2483static void
94edc4ab 2484warn_hidden (tree t)
9e9ff709 2485{
d4e6fecb 2486 VEC(tree,gc) *method_vec = CLASSTYPE_METHOD_VEC (t);
aaaa46d2
MM
2487 tree fns;
2488 size_t i;
9e9ff709
MS
2489
2490 /* We go through each separately named virtual function. */
c8094d83 2491 for (i = CLASSTYPE_FIRST_CONVERSION_SLOT;
9ba5ff0f 2492 VEC_iterate (tree, method_vec, i, fns);
aaaa46d2 2493 ++i)
9e9ff709 2494 {
aaaa46d2 2495 tree fn;
7d5b8b11
MM
2496 tree name;
2497 tree fndecl;
2498 tree base_fndecls;
fa743e8c
NS
2499 tree base_binfo;
2500 tree binfo;
7d5b8b11
MM
2501 int j;
2502
2503 /* All functions in this slot in the CLASSTYPE_METHOD_VEC will
2504 have the same name. Figure out what name that is. */
aaaa46d2 2505 name = DECL_NAME (OVL_CURRENT (fns));
7d5b8b11
MM
2506 /* There are no possibly hidden functions yet. */
2507 base_fndecls = NULL_TREE;
2508 /* Iterate through all of the base classes looking for possibly
2509 hidden functions. */
fa743e8c
NS
2510 for (binfo = TYPE_BINFO (t), j = 0;
2511 BINFO_BASE_ITERATE (binfo, j, base_binfo); j++)
a4832853 2512 {
fa743e8c 2513 tree basetype = BINFO_TYPE (base_binfo);
7d5b8b11
MM
2514 base_fndecls = chainon (get_basefndecls (name, basetype),
2515 base_fndecls);
a4832853
JM
2516 }
2517
00a17e31 2518 /* If there are no functions to hide, continue. */
7d5b8b11 2519 if (!base_fndecls)
9e9ff709
MS
2520 continue;
2521
00a17e31 2522 /* Remove any overridden functions. */
aaaa46d2 2523 for (fn = fns; fn; fn = OVL_NEXT (fn))
9e9ff709 2524 {
aaaa46d2 2525 fndecl = OVL_CURRENT (fn);
7d5b8b11
MM
2526 if (DECL_VINDEX (fndecl))
2527 {
2528 tree *prev = &base_fndecls;
c8094d83
MS
2529
2530 while (*prev)
7d5b8b11
MM
2531 /* If the method from the base class has the same
2532 signature as the method from the derived class, it
2533 has been overridden. */
2534 if (same_signature_p (fndecl, TREE_VALUE (*prev)))
2535 *prev = TREE_CHAIN (*prev);
2536 else
2537 prev = &TREE_CHAIN (*prev);
2538 }
9e9ff709
MS
2539 }
2540
9e9ff709
MS
2541 /* Now give a warning for all base functions without overriders,
2542 as they are hidden. */
c8094d83 2543 while (base_fndecls)
7d5b8b11
MM
2544 {
2545 /* Here we know it is a hider, and no overrider exists. */
286d12f9
MLI
2546 warning (OPT_Woverloaded_virtual, "%q+D was hidden", TREE_VALUE (base_fndecls));
2547 warning (OPT_Woverloaded_virtual, " by %q+D", fns);
7d5b8b11
MM
2548 base_fndecls = TREE_CHAIN (base_fndecls);
2549 }
9e9ff709
MS
2550 }
2551}
2552
2553/* Check for things that are invalid. There are probably plenty of other
2554 things we should check for also. */
e92cc029 2555
9e9ff709 2556static void
94edc4ab 2557finish_struct_anon (tree t)
9e9ff709
MS
2558{
2559 tree field;
f90cdf34 2560
910ad8de 2561 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
9e9ff709
MS
2562 {
2563 if (TREE_STATIC (field))
2564 continue;
2565 if (TREE_CODE (field) != FIELD_DECL)
2566 continue;
2567
2568 if (DECL_NAME (field) == NULL_TREE
6bdb8141 2569 && ANON_AGGR_TYPE_P (TREE_TYPE (field)))
9e9ff709 2570 {
61fdc9d7 2571 bool is_union = TREE_CODE (TREE_TYPE (field)) == UNION_TYPE;
f90cdf34 2572 tree elt = TYPE_FIELDS (TREE_TYPE (field));
910ad8de 2573 for (; elt; elt = DECL_CHAIN (elt))
9e9ff709 2574 {
b7076960
MM
2575 /* We're generally only interested in entities the user
2576 declared, but we also find nested classes by noticing
2577 the TYPE_DECL that we create implicitly. You're
2578 allowed to put one anonymous union inside another,
6f32162a
JM
2579 though, so we explicitly tolerate that. We use
2580 TYPE_ANONYMOUS_P rather than ANON_AGGR_TYPE_P so that
2581 we also allow unnamed types used for defining fields. */
c8094d83 2582 if (DECL_ARTIFICIAL (elt)
b7076960 2583 && (!DECL_IMPLICIT_TYPEDEF_P (elt)
6f32162a 2584 || TYPE_ANONYMOUS_P (TREE_TYPE (elt))))
9e9ff709
MS
2585 continue;
2586
f90cdf34 2587 if (TREE_CODE (elt) != FIELD_DECL)
8ebeee52 2588 {
61fdc9d7 2589 if (is_union)
cbe5f3b3 2590 permerror (input_location, "%q+#D invalid; an anonymous union can "
393eda6a 2591 "only have non-static data members", elt);
61fdc9d7 2592 else
cbe5f3b3 2593 permerror (input_location, "%q+#D invalid; an anonymous struct can "
393eda6a 2594 "only have non-static data members", elt);
8ebeee52
JM
2595 continue;
2596 }
2597
f90cdf34 2598 if (TREE_PRIVATE (elt))
61fdc9d7
PC
2599 {
2600 if (is_union)
cbe5f3b3 2601 permerror (input_location, "private member %q+#D in anonymous union", elt);
61fdc9d7 2602 else
cbe5f3b3 2603 permerror (input_location, "private member %q+#D in anonymous struct", elt);
61fdc9d7 2604 }
f90cdf34 2605 else if (TREE_PROTECTED (elt))
61fdc9d7
PC
2606 {
2607 if (is_union)
cbe5f3b3 2608 permerror (input_location, "protected member %q+#D in anonymous union", elt);
61fdc9d7 2609 else
cbe5f3b3 2610 permerror (input_location, "protected member %q+#D in anonymous struct", elt);
61fdc9d7 2611 }
fc378698 2612
f90cdf34
MT
2613 TREE_PRIVATE (elt) = TREE_PRIVATE (field);
2614 TREE_PROTECTED (elt) = TREE_PROTECTED (field);
9e9ff709
MS
2615 }
2616 }
2617 }
2618}
2619
7088fca9
KL
2620/* Add T to CLASSTYPE_DECL_LIST of current_class_type which
2621 will be used later during class template instantiation.
2622 When FRIEND_P is zero, T can be a static member data (VAR_DECL),
2623 a non-static member data (FIELD_DECL), a member function
c8094d83 2624 (FUNCTION_DECL), a nested type (RECORD_TYPE, ENUM_TYPE),
7088fca9
KL
2625 a typedef (TYPE_DECL) or a member class template (TEMPLATE_DECL)
2626 When FRIEND_P is nonzero, T is either a friend class
2627 (RECORD_TYPE, TEMPLATE_DECL) or a friend function
2628 (FUNCTION_DECL, TEMPLATE_DECL). */
2629
2630void
94edc4ab 2631maybe_add_class_template_decl_list (tree type, tree t, int friend_p)
7088fca9
KL
2632{
2633 /* Save some memory by not creating TREE_LIST if TYPE is not template. */
2634 if (CLASSTYPE_TEMPLATE_INFO (type))
2635 CLASSTYPE_DECL_LIST (type)
2636 = tree_cons (friend_p ? NULL_TREE : type,
2637 t, CLASSTYPE_DECL_LIST (type));
2638}
2639
61a127b3 2640/* Create default constructors, assignment operators, and so forth for
e5e459bf
AO
2641 the type indicated by T, if they are needed. CANT_HAVE_CONST_CTOR,
2642 and CANT_HAVE_CONST_ASSIGNMENT are nonzero if, for whatever reason,
2643 the class cannot have a default constructor, copy constructor
2644 taking a const reference argument, or an assignment operator taking
2645 a const reference, respectively. */
61a127b3 2646
f72ab53b 2647static void
c8094d83 2648add_implicitly_declared_members (tree t,
94edc4ab 2649 int cant_have_const_cctor,
10746f37 2650 int cant_have_const_assignment)
61a127b3 2651{
61a127b3 2652 /* Destructor. */
9f4faeae 2653 if (!CLASSTYPE_DESTRUCTORS (t))
61a127b3 2654 {
9f4faeae
MM
2655 /* In general, we create destructors lazily. */
2656 CLASSTYPE_LAZY_DESTRUCTOR (t) = 1;
9f4faeae 2657
d1a115f8
JM
2658 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
2659 && TYPE_FOR_JAVA (t))
2660 /* But if this is a Java class, any non-trivial destructor is
2661 invalid, even if compiler-generated. Therefore, if the
2662 destructor is non-trivial we create it now. */
2663 lazily_declare_fn (sfk_destructor, t);
61a127b3 2664 }
61a127b3 2665
0fcedd9c
JM
2666 /* [class.ctor]
2667
2668 If there is no user-declared constructor for a class, a default
2669 constructor is implicitly declared. */
2670 if (! TYPE_HAS_USER_CONSTRUCTOR (t))
61a127b3 2671 {
508a1c9c 2672 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 1;
0930cc0e
JM
2673 CLASSTYPE_LAZY_DEFAULT_CTOR (t) = 1;
2674 if (cxx_dialect >= cxx0x)
2675 TYPE_HAS_CONSTEXPR_CTOR (t)
2676 = synthesized_default_constructor_is_constexpr (t);
61a127b3
MM
2677 }
2678
0fcedd9c
JM
2679 /* [class.ctor]
2680
2681 If a class definition does not explicitly declare a copy
2682 constructor, one is declared implicitly. */
d758e847
JM
2683 if (! TYPE_HAS_COPY_CTOR (t) && ! TYPE_FOR_JAVA (t)
2684 && !type_has_move_constructor (t))
61a127b3 2685 {
066ec0a4
JM
2686 TYPE_HAS_COPY_CTOR (t) = 1;
2687 TYPE_HAS_CONST_COPY_CTOR (t) = !cant_have_const_cctor;
508a1c9c 2688 CLASSTYPE_LAZY_COPY_CTOR (t) = 1;
d758e847
JM
2689 if (cxx_dialect >= cxx0x)
2690 CLASSTYPE_LAZY_MOVE_CTOR (t) = 1;
61a127b3
MM
2691 }
2692
aaaa46d2
MM
2693 /* If there is no assignment operator, one will be created if and
2694 when it is needed. For now, just record whether or not the type
2695 of the parameter to the assignment operator will be a const or
2696 non-const reference. */
d758e847
JM
2697 if (!TYPE_HAS_COPY_ASSIGN (t) && !TYPE_FOR_JAVA (t)
2698 && !type_has_move_assign (t))
fb232476 2699 {
066ec0a4
JM
2700 TYPE_HAS_COPY_ASSIGN (t) = 1;
2701 TYPE_HAS_CONST_COPY_ASSIGN (t) = !cant_have_const_assignment;
2702 CLASSTYPE_LAZY_COPY_ASSIGN (t) = 1;
d758e847
JM
2703 if (cxx_dialect >= cxx0x)
2704 CLASSTYPE_LAZY_MOVE_ASSIGN (t) = 1;
fb232476 2705 }
d1a115f8
JM
2706
2707 /* We can't be lazy about declaring functions that might override
2708 a virtual function from a base class. */
2709 if (TYPE_POLYMORPHIC_P (t)
066ec0a4 2710 && (CLASSTYPE_LAZY_COPY_ASSIGN (t)
ac177431 2711 || CLASSTYPE_LAZY_MOVE_ASSIGN (t)
d1a115f8
JM
2712 || CLASSTYPE_LAZY_DESTRUCTOR (t)))
2713 {
2714 tree binfo = TYPE_BINFO (t);
2715 tree base_binfo;
2716 int ix;
2717 tree opname = ansi_assopname (NOP_EXPR);
2718 for (ix = 0; BINFO_BASE_ITERATE (binfo, ix, base_binfo); ++ix)
2719 {
2720 tree bv;
2721 for (bv = BINFO_VIRTUALS (base_binfo); bv; bv = TREE_CHAIN (bv))
2722 {
2723 tree fn = BV_FN (bv);
2724 if (DECL_NAME (fn) == opname)
2725 {
066ec0a4
JM
2726 if (CLASSTYPE_LAZY_COPY_ASSIGN (t))
2727 lazily_declare_fn (sfk_copy_assignment, t);
ac177431
JM
2728 if (CLASSTYPE_LAZY_MOVE_ASSIGN (t))
2729 lazily_declare_fn (sfk_move_assignment, t);
d1a115f8
JM
2730 }
2731 else if (DECL_DESTRUCTOR_P (fn)
2732 && CLASSTYPE_LAZY_DESTRUCTOR (t))
2733 lazily_declare_fn (sfk_destructor, t);
2734 }
2735 }
2736 }
61a127b3
MM
2737}
2738
f90cdf34
MT
2739/* Subroutine of finish_struct_1. Recursively count the number of fields
2740 in TYPE, including anonymous union members. */
2741
2742static int
94edc4ab 2743count_fields (tree fields)
f90cdf34
MT
2744{
2745 tree x;
2746 int n_fields = 0;
910ad8de 2747 for (x = fields; x; x = DECL_CHAIN (x))
f90cdf34
MT
2748 {
2749 if (TREE_CODE (x) == FIELD_DECL && ANON_AGGR_TYPE_P (TREE_TYPE (x)))
2750 n_fields += count_fields (TYPE_FIELDS (TREE_TYPE (x)));
2751 else
2752 n_fields += 1;
2753 }
2754 return n_fields;
2755}
2756
2757/* Subroutine of finish_struct_1. Recursively add all the fields in the
d07605f5 2758 TREE_LIST FIELDS to the SORTED_FIELDS_TYPE elts, starting at offset IDX. */
f90cdf34
MT
2759
2760static int
d07605f5 2761add_fields_to_record_type (tree fields, struct sorted_fields_type *field_vec, int idx)
f90cdf34
MT
2762{
2763 tree x;
910ad8de 2764 for (x = fields; x; x = DECL_CHAIN (x))
f90cdf34
MT
2765 {
2766 if (TREE_CODE (x) == FIELD_DECL && ANON_AGGR_TYPE_P (TREE_TYPE (x)))
d07605f5 2767 idx = add_fields_to_record_type (TYPE_FIELDS (TREE_TYPE (x)), field_vec, idx);
f90cdf34 2768 else
d07605f5 2769 field_vec->elts[idx++] = x;
f90cdf34
MT
2770 }
2771 return idx;
2772}
2773
1e30f9b4
MM
2774/* FIELD is a bit-field. We are finishing the processing for its
2775 enclosing type. Issue any appropriate messages and set appropriate
e7df0180 2776 flags. Returns false if an error has been diagnosed. */
1e30f9b4 2777
e7df0180 2778static bool
94edc4ab 2779check_bitfield_decl (tree field)
1e30f9b4
MM
2780{
2781 tree type = TREE_TYPE (field);
606791f6
MM
2782 tree w;
2783
2784 /* Extract the declared width of the bitfield, which has been
2785 temporarily stashed in DECL_INITIAL. */
2786 w = DECL_INITIAL (field);
3db45ab5 2787 gcc_assert (w != NULL_TREE);
606791f6
MM
2788 /* Remove the bit-field width indicator so that the rest of the
2789 compiler does not treat that value as an initializer. */
2790 DECL_INITIAL (field) = NULL_TREE;
1e30f9b4 2791
cd8ed629 2792 /* Detect invalid bit-field type. */
550a799d 2793 if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
1e30f9b4 2794 {
dee15844 2795 error ("bit-field %q+#D with non-integral type", field);
cd8ed629 2796 w = error_mark_node;
1e30f9b4 2797 }
606791f6 2798 else
1e30f9b4 2799 {
1e30f9b4
MM
2800 /* Avoid the non_lvalue wrapper added by fold for PLUS_EXPRs. */
2801 STRIP_NOPS (w);
2802
2803 /* detect invalid field size. */
fa2200cb 2804 w = cxx_constant_value (w);
1e30f9b4
MM
2805
2806 if (TREE_CODE (w) != INTEGER_CST)
2807 {
dee15844 2808 error ("bit-field %q+D width not an integer constant", field);
cd8ed629 2809 w = error_mark_node;
1e30f9b4 2810 }
05bccae2 2811 else if (tree_int_cst_sgn (w) < 0)
1e30f9b4 2812 {
dee15844 2813 error ("negative width in bit-field %q+D", field);
cd8ed629 2814 w = error_mark_node;
1e30f9b4 2815 }
05bccae2 2816 else if (integer_zerop (w) && DECL_NAME (field) != 0)
1e30f9b4 2817 {
dee15844 2818 error ("zero width for bit-field %q+D", field);
cd8ed629 2819 w = error_mark_node;
1e30f9b4 2820 }
05bccae2 2821 else if (compare_tree_int (w, TYPE_PRECISION (type)) > 0
1e30f9b4
MM
2822 && TREE_CODE (type) != ENUMERAL_TYPE
2823 && TREE_CODE (type) != BOOLEAN_TYPE)
dee15844 2824 warning (0, "width of %q+D exceeds its type", field);
1e30f9b4 2825 else if (TREE_CODE (type) == ENUMERAL_TYPE
cbb4feb3
JM
2826 && (0 > (compare_tree_int
2827 (w, TYPE_PRECISION (ENUM_UNDERLYING_TYPE (type))))))
dee15844 2828 warning (0, "%q+D is too small to hold all values of %q#T", field, type);
cd8ed629 2829 }
c8094d83 2830
cd8ed629
MM
2831 if (w != error_mark_node)
2832 {
2833 DECL_SIZE (field) = convert (bitsizetype, w);
2834 DECL_BIT_FIELD (field) = 1;
e7df0180 2835 return true;
1e30f9b4
MM
2836 }
2837 else
cd8ed629
MM
2838 {
2839 /* Non-bit-fields are aligned for their type. */
2840 DECL_BIT_FIELD (field) = 0;
2841 CLEAR_DECL_C_BIT_FIELD (field);
e7df0180 2842 return false;
cd8ed629 2843 }
1e30f9b4
MM
2844}
2845
2846/* FIELD is a non bit-field. We are finishing the processing for its
2847 enclosing type T. Issue any appropriate messages and set appropriate
2848 flags. */
2849
2850static void
94edc4ab 2851check_field_decl (tree field,
0cbd7506
MS
2852 tree t,
2853 int* cant_have_const_ctor,
2854 int* no_const_asn_ref,
10746f37 2855 int* any_default_members)
1e30f9b4
MM
2856{
2857 tree type = strip_array_types (TREE_TYPE (field));
2858
57ece258 2859 /* In C++98 an anonymous union cannot contain any fields which would change
1e30f9b4 2860 the settings of CANT_HAVE_CONST_CTOR and friends. */
57ece258 2861 if (ANON_UNION_TYPE_P (type) && cxx_dialect < cxx0x)
1e30f9b4 2862 ;
066ec0a4 2863 /* And, we don't set TYPE_HAS_CONST_COPY_CTOR, etc., for anonymous
1e30f9b4
MM
2864 structs. So, we recurse through their fields here. */
2865 else if (ANON_AGGR_TYPE_P (type))
2866 {
2867 tree fields;
2868
910ad8de 2869 for (fields = TYPE_FIELDS (type); fields; fields = DECL_CHAIN (fields))
17aec3eb 2870 if (TREE_CODE (fields) == FIELD_DECL && !DECL_C_BIT_FIELD (field))
1e30f9b4 2871 check_field_decl (fields, t, cant_have_const_ctor,
10746f37 2872 no_const_asn_ref, any_default_members);
1e30f9b4
MM
2873 }
2874 /* Check members with class type for constructors, destructors,
2875 etc. */
2876 else if (CLASS_TYPE_P (type))
2877 {
2878 /* Never let anything with uninheritable virtuals
2879 make it through without complaint. */
2880 abstract_virtuals_error (field, type);
c8094d83 2881
57ece258 2882 if (TREE_CODE (t) == UNION_TYPE && cxx_dialect < cxx0x)
1e30f9b4 2883 {
57ece258
JM
2884 static bool warned;
2885 int oldcount = errorcount;
1e30f9b4 2886 if (TYPE_NEEDS_CONSTRUCTING (type))
dee15844
JM
2887 error ("member %q+#D with constructor not allowed in union",
2888 field);
834c6dff 2889 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
dee15844 2890 error ("member %q+#D with destructor not allowed in union", field);
066ec0a4 2891 if (TYPE_HAS_COMPLEX_COPY_ASSIGN (type))
dee15844
JM
2892 error ("member %q+#D with copy assignment operator not allowed in union",
2893 field);
57ece258
JM
2894 if (!warned && errorcount > oldcount)
2895 {
2896 inform (DECL_SOURCE_LOCATION (field), "unrestricted unions "
2897 "only available with -std=c++0x or -std=gnu++0x");
2898 warned = true;
2899 }
1e30f9b4
MM
2900 }
2901 else
2902 {
2903 TYPE_NEEDS_CONSTRUCTING (t) |= TYPE_NEEDS_CONSTRUCTING (type);
c8094d83 2904 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
834c6dff 2905 |= TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type);
d758e847
JM
2906 TYPE_HAS_COMPLEX_COPY_ASSIGN (t)
2907 |= (TYPE_HAS_COMPLEX_COPY_ASSIGN (type)
2908 || !TYPE_HAS_COPY_ASSIGN (type));
2909 TYPE_HAS_COMPLEX_COPY_CTOR (t) |= (TYPE_HAS_COMPLEX_COPY_CTOR (type)
2910 || !TYPE_HAS_COPY_CTOR (type));
ac177431
JM
2911 TYPE_HAS_COMPLEX_MOVE_ASSIGN (t) |= TYPE_HAS_COMPLEX_MOVE_ASSIGN (type);
2912 TYPE_HAS_COMPLEX_MOVE_CTOR (t) |= TYPE_HAS_COMPLEX_MOVE_CTOR (type);
2913 TYPE_HAS_COMPLEX_DFLT (t) |= (!TYPE_HAS_DEFAULT_CONSTRUCTOR (type)
2914 || TYPE_HAS_COMPLEX_DFLT (type));
1e30f9b4
MM
2915 }
2916
d758e847
JM
2917 if (TYPE_HAS_COPY_CTOR (type)
2918 && !TYPE_HAS_CONST_COPY_CTOR (type))
1e30f9b4
MM
2919 *cant_have_const_ctor = 1;
2920
d758e847
JM
2921 if (TYPE_HAS_COPY_ASSIGN (type)
2922 && !TYPE_HAS_CONST_COPY_ASSIGN (type))
1e30f9b4 2923 *no_const_asn_ref = 1;
1e30f9b4
MM
2924 }
2925 if (DECL_INITIAL (field) != NULL_TREE)
2926 {
2927 /* `build_class_init_list' does not recognize
2928 non-FIELD_DECLs. */
2929 if (TREE_CODE (t) == UNION_TYPE && any_default_members != 0)
1f070f2b 2930 error ("multiple fields in union %qT initialized", t);
1e30f9b4
MM
2931 *any_default_members = 1;
2932 }
6bb88f3b 2933}
1e30f9b4 2934
08b962b0
MM
2935/* Check the data members (both static and non-static), class-scoped
2936 typedefs, etc., appearing in the declaration of T. Issue
2937 appropriate diagnostics. Sets ACCESS_DECLS to a list (in
2938 declaration order) of access declarations; each TREE_VALUE in this
2939 list is a USING_DECL.
8d08fdba 2940
08b962b0 2941 In addition, set the following flags:
8d08fdba 2942
08b962b0
MM
2943 EMPTY_P
2944 The class is empty, i.e., contains no non-static data members.
8d08fdba 2945
08b962b0
MM
2946 CANT_HAVE_CONST_CTOR_P
2947 This class cannot have an implicitly generated copy constructor
2948 taking a const reference.
8d08fdba 2949
08b962b0
MM
2950 CANT_HAVE_CONST_ASN_REF
2951 This class cannot have an implicitly generated assignment
2952 operator taking a const reference.
8d08fdba 2953
08b962b0
MM
2954 All of these flags should be initialized before calling this
2955 function.
8d08fdba 2956
08b962b0
MM
2957 Returns a pointer to the end of the TYPE_FIELDs chain; additional
2958 fields can be added by adding to this chain. */
8d08fdba 2959
607cf131 2960static void
58731fd1 2961check_field_decls (tree t, tree *access_decls,
58731fd1 2962 int *cant_have_const_ctor_p,
10746f37 2963 int *no_const_asn_ref_p)
08b962b0
MM
2964{
2965 tree *field;
2966 tree *next;
dd29d26b 2967 bool has_pointers;
08b962b0 2968 int any_default_members;
22002050 2969 int cant_pack = 0;
c32097d8 2970 int field_access = -1;
08b962b0
MM
2971
2972 /* Assume there are no access declarations. */
2973 *access_decls = NULL_TREE;
2974 /* Assume this class has no pointer members. */
dd29d26b 2975 has_pointers = false;
08b962b0
MM
2976 /* Assume none of the members of this class have default
2977 initializations. */
2978 any_default_members = 0;
2979
2980 for (field = &TYPE_FIELDS (t); *field; field = next)
8d08fdba 2981 {
08b962b0
MM
2982 tree x = *field;
2983 tree type = TREE_TYPE (x);
c32097d8 2984 int this_field_access;
8d08fdba 2985
910ad8de 2986 next = &DECL_CHAIN (x);
8d08fdba 2987
cffa8729 2988 if (TREE_CODE (x) == USING_DECL)
f30432d7 2989 {
08b962b0 2990 /* Prune the access declaration from the list of fields. */
910ad8de 2991 *field = DECL_CHAIN (x);
08b962b0
MM
2992
2993 /* Save the access declarations for our caller. */
2994 *access_decls = tree_cons (NULL_TREE, x, *access_decls);
2995
2996 /* Since we've reset *FIELD there's no reason to skip to the
2997 next field. */
2998 next = field;
f30432d7
MS
2999 continue;
3000 }
8d08fdba 3001
050367a3
MM
3002 if (TREE_CODE (x) == TYPE_DECL
3003 || TREE_CODE (x) == TEMPLATE_DECL)
f30432d7 3004 continue;
8d08fdba 3005
f30432d7 3006 /* If we've gotten this far, it's a data member, possibly static,
e92cc029 3007 or an enumerator. */
17aec3eb 3008 DECL_CONTEXT (x) = t;
8d08fdba 3009
58ec3cc5
MM
3010 /* When this goes into scope, it will be a non-local reference. */
3011 DECL_NONLOCAL (x) = 1;
3012
3013 if (TREE_CODE (t) == UNION_TYPE)
3014 {
3015 /* [class.union]
3016
3017 If a union contains a static data member, or a member of
324f9dfb 3018 reference type, the program is ill-formed. */
58ec3cc5
MM
3019 if (TREE_CODE (x) == VAR_DECL)
3020 {
dee15844 3021 error ("%q+D may not be static because it is a member of a union", x);
58ec3cc5
MM
3022 continue;
3023 }
3024 if (TREE_CODE (type) == REFERENCE_TYPE)
3025 {
dee15844
JM
3026 error ("%q+D may not have reference type %qT because"
3027 " it is a member of a union",
3028 x, type);
58ec3cc5
MM
3029 continue;
3030 }
3031 }
3032
f30432d7
MS
3033 /* Perform error checking that did not get done in
3034 grokdeclarator. */
52fb2769 3035 if (TREE_CODE (type) == FUNCTION_TYPE)
f30432d7 3036 {
dee15844 3037 error ("field %q+D invalidly declared function type", x);
52fb2769
NS
3038 type = build_pointer_type (type);
3039 TREE_TYPE (x) = type;
f30432d7 3040 }
52fb2769 3041 else if (TREE_CODE (type) == METHOD_TYPE)
f30432d7 3042 {
dee15844 3043 error ("field %q+D invalidly declared method type", x);
52fb2769
NS
3044 type = build_pointer_type (type);
3045 TREE_TYPE (x) = type;
f30432d7 3046 }
8d08fdba 3047
52fb2769 3048 if (type == error_mark_node)
f30432d7 3049 continue;
c8094d83 3050
58ec3cc5 3051 if (TREE_CODE (x) == CONST_DECL || TREE_CODE (x) == VAR_DECL)
73a8adb6 3052 continue;
8d08fdba 3053
f30432d7 3054 /* Now it can only be a FIELD_DECL. */
8d08fdba 3055
f30432d7 3056 if (TREE_PRIVATE (x) || TREE_PROTECTED (x))
08b962b0 3057 CLASSTYPE_NON_AGGREGATE (t) = 1;
8d08fdba 3058
3b49d762
GDR
3059 /* If at least one non-static data member is non-literal, the whole
3060 class becomes non-literal. */
3061 if (!literal_type_p (type))
3062 CLASSTYPE_LITERAL_P (t) = false;
3063
c32097d8
JM
3064 /* A standard-layout class is a class that:
3065 ...
3066 has the same access control (Clause 11) for all non-static data members,
3067 ... */
3068 this_field_access = TREE_PROTECTED (x) ? 1 : TREE_PRIVATE (x) ? 2 : 0;
3069 if (field_access == -1)
3070 field_access = this_field_access;
3071 else if (this_field_access != field_access)
3072 CLASSTYPE_NON_STD_LAYOUT (t) = 1;
3073
0fcedd9c 3074 /* If this is of reference type, check if it needs an init. */
52fb2769 3075 if (TREE_CODE (type) == REFERENCE_TYPE)
0cbd7506 3076 {
c32097d8
JM
3077 CLASSTYPE_NON_LAYOUT_POD_P (t) = 1;
3078 CLASSTYPE_NON_STD_LAYOUT (t) = 1;
f30432d7 3079 if (DECL_INITIAL (x) == NULL_TREE)
6eb35968 3080 SET_CLASSTYPE_REF_FIELDS_NEED_INIT (t, 1);
8d08fdba 3081
f30432d7
MS
3082 /* ARM $12.6.2: [A member initializer list] (or, for an
3083 aggregate, initialization by a brace-enclosed list) is the
3084 only way to initialize nonstatic const and reference
3085 members. */
066ec0a4 3086 TYPE_HAS_COMPLEX_COPY_ASSIGN (t) = 1;
ac177431 3087 TYPE_HAS_COMPLEX_MOVE_ASSIGN (t) = 1;
f30432d7 3088 }
8d08fdba 3089
1e30f9b4 3090 type = strip_array_types (type);
dd29d26b 3091
1937f939
JM
3092 if (TYPE_PACKED (t))
3093 {
c32097d8 3094 if (!layout_pod_type_p (type) && !TYPE_PACKED (type))
4666cd04
JM
3095 {
3096 warning
3097 (0,
3098 "ignoring packed attribute because of unpacked non-POD field %q+#D",
3099 x);
22002050 3100 cant_pack = 1;
4666cd04 3101 }
2cd36c22
AN
3102 else if (DECL_C_BIT_FIELD (x)
3103 || TYPE_ALIGN (TREE_TYPE (x)) > BITS_PER_UNIT)
1937f939
JM
3104 DECL_PACKED (x) = 1;
3105 }
3106
3107 if (DECL_C_BIT_FIELD (x) && integer_zerop (DECL_INITIAL (x)))
3108 /* We don't treat zero-width bitfields as making a class
3109 non-empty. */
3110 ;
3111 else
3112 {
3113 /* The class is non-empty. */
3114 CLASSTYPE_EMPTY_P (t) = 0;
3115 /* The class is not even nearly empty. */
3116 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
3117 /* If one of the data members contains an empty class,
3118 so does T. */
3119 if (CLASS_TYPE_P (type)
3120 && CLASSTYPE_CONTAINS_EMPTY_CLASS_P (type))
3121 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) = 1;
3122 }
3123
dd29d26b
GB
3124 /* This is used by -Weffc++ (see below). Warn only for pointers
3125 to members which might hold dynamic memory. So do not warn
3126 for pointers to functions or pointers to members. */
3127 if (TYPE_PTR_P (type)
3128 && !TYPE_PTRFN_P (type)
3129 && !TYPE_PTR_TO_MEMBER_P (type))
3130 has_pointers = true;
824b9a4c 3131
58ec3cc5
MM
3132 if (CLASS_TYPE_P (type))
3133 {
3134 if (CLASSTYPE_REF_FIELDS_NEED_INIT (type))
3135 SET_CLASSTYPE_REF_FIELDS_NEED_INIT (t, 1);
3136 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (type))
3137 SET_CLASSTYPE_READONLY_FIELDS_NEED_INIT (t, 1);
3138 }
3139
52fb2769 3140 if (DECL_MUTABLE_P (x) || TYPE_HAS_MUTABLE_P (type))
08b962b0 3141 CLASSTYPE_HAS_MUTABLE (t) = 1;
a7a7710d 3142
c32097d8 3143 if (! layout_pod_type_p (type))
0cbd7506
MS
3144 /* DR 148 now allows pointers to members (which are POD themselves),
3145 to be allowed in POD structs. */
c32097d8
JM
3146 CLASSTYPE_NON_LAYOUT_POD_P (t) = 1;
3147
3148 if (!std_layout_type_p (type))
3149 CLASSTYPE_NON_STD_LAYOUT (t) = 1;
52fb2769 3150
94e6e4c4
AO
3151 if (! zero_init_p (type))
3152 CLASSTYPE_NON_ZERO_INIT_P (t) = 1;
3153
640c2adf
FC
3154 /* We set DECL_C_BIT_FIELD in grokbitfield.
3155 If the type and width are valid, we'll also set DECL_BIT_FIELD. */
3156 if (! DECL_C_BIT_FIELD (x) || ! check_bitfield_decl (x))
3157 check_field_decl (x, t,
3158 cant_have_const_ctor_p,
3159 no_const_asn_ref_p,
10746f37 3160 &any_default_members);
640c2adf 3161
f30432d7 3162 /* If any field is const, the structure type is pseudo-const. */
52fb2769 3163 if (CP_TYPE_CONST_P (type))
f30432d7
MS
3164 {
3165 C_TYPE_FIELDS_READONLY (t) = 1;
3166 if (DECL_INITIAL (x) == NULL_TREE)
6eb35968 3167 SET_CLASSTYPE_READONLY_FIELDS_NEED_INIT (t, 1);
f30432d7
MS
3168
3169 /* ARM $12.6.2: [A member initializer list] (or, for an
3170 aggregate, initialization by a brace-enclosed list) is the
3171 only way to initialize nonstatic const and reference
3172 members. */
066ec0a4 3173 TYPE_HAS_COMPLEX_COPY_ASSIGN (t) = 1;
ac177431 3174 TYPE_HAS_COMPLEX_MOVE_ASSIGN (t) = 1;
f30432d7 3175 }
08b962b0 3176 /* A field that is pseudo-const makes the structure likewise. */
5552b43c 3177 else if (CLASS_TYPE_P (type))
f30432d7 3178 {
08b962b0 3179 C_TYPE_FIELDS_READONLY (t) |= C_TYPE_FIELDS_READONLY (type);
6eb35968
DE
3180 SET_CLASSTYPE_READONLY_FIELDS_NEED_INIT (t,
3181 CLASSTYPE_READONLY_FIELDS_NEED_INIT (t)
3182 | CLASSTYPE_READONLY_FIELDS_NEED_INIT (type));
f30432d7 3183 }
8d08fdba 3184
c10bffd0
JM
3185 /* Core issue 80: A nonstatic data member is required to have a
3186 different name from the class iff the class has a
b87d79e6 3187 user-declared constructor. */
0fcedd9c
JM
3188 if (constructor_name_p (DECL_NAME (x), t)
3189 && TYPE_HAS_USER_CONSTRUCTOR (t))
cbe5f3b3 3190 permerror (input_location, "field %q+#D with same name as class", x);
8d08fdba
MS
3191 }
3192
dd29d26b
GB
3193 /* Effective C++ rule 11: if a class has dynamic memory held by pointers,
3194 it should also define a copy constructor and an assignment operator to
3195 implement the correct copy semantic (deep vs shallow, etc.). As it is
3196 not feasible to check whether the constructors do allocate dynamic memory
3197 and store it within members, we approximate the warning like this:
3198
3199 -- Warn only if there are members which are pointers
3200 -- Warn only if there is a non-trivial constructor (otherwise,
3201 there cannot be memory allocated).
3202 -- Warn only if there is a non-trivial destructor. We assume that the
3203 user at least implemented the cleanup correctly, and a destructor
3204 is needed to free dynamic memory.
c8094d83 3205
77880ae4 3206 This seems enough for practical purposes. */
22002050
JM
3207 if (warn_ecpp
3208 && has_pointers
0fcedd9c 3209 && TYPE_HAS_USER_CONSTRUCTOR (t)
22002050 3210 && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
066ec0a4 3211 && !(TYPE_HAS_COPY_CTOR (t) && TYPE_HAS_COPY_ASSIGN (t)))
824b9a4c 3212 {
b323323f 3213 warning (OPT_Weffc__, "%q#T has pointer data members", t);
c8094d83 3214
066ec0a4 3215 if (! TYPE_HAS_COPY_CTOR (t))
824b9a4c 3216 {
74fa0285 3217 warning (OPT_Weffc__,
3db45ab5 3218 " but does not override %<%T(const %T&)%>", t, t);
066ec0a4 3219 if (!TYPE_HAS_COPY_ASSIGN (t))
74fa0285 3220 warning (OPT_Weffc__, " or %<operator=(const %T&)%>", t);
824b9a4c 3221 }
066ec0a4 3222 else if (! TYPE_HAS_COPY_ASSIGN (t))
74fa0285 3223 warning (OPT_Weffc__,
3db45ab5 3224 " but does not override %<operator=(const %T&)%>", t);
824b9a4c 3225 }
08b962b0 3226
22002050
JM
3227 /* If any of the fields couldn't be packed, unset TYPE_PACKED. */
3228 if (cant_pack)
3229 TYPE_PACKED (t) = 0;
607cf131
MM
3230
3231 /* Check anonymous struct/anonymous union fields. */
3232 finish_struct_anon (t);
3233
08b962b0
MM
3234 /* We've built up the list of access declarations in reverse order.
3235 Fix that now. */
3236 *access_decls = nreverse (*access_decls);
08b962b0
MM
3237}
3238
c20118a8
MM
3239/* If TYPE is an empty class type, records its OFFSET in the table of
3240 OFFSETS. */
607cf131 3241
c20118a8 3242static int
94edc4ab 3243record_subobject_offset (tree type, tree offset, splay_tree offsets)
5c24fba6 3244{
c20118a8 3245 splay_tree_node n;
5c24fba6 3246
c20118a8
MM
3247 if (!is_empty_class (type))
3248 return 0;
5c24fba6 3249
c20118a8
MM
3250 /* Record the location of this empty object in OFFSETS. */
3251 n = splay_tree_lookup (offsets, (splay_tree_key) offset);
3252 if (!n)
c8094d83 3253 n = splay_tree_insert (offsets,
c20118a8
MM
3254 (splay_tree_key) offset,
3255 (splay_tree_value) NULL_TREE);
c8094d83 3256 n->value = ((splay_tree_value)
c20118a8
MM
3257 tree_cons (NULL_TREE,
3258 type,
3259 (tree) n->value));
3260
3261 return 0;
607cf131
MM
3262}
3263
838dfd8a 3264/* Returns nonzero if TYPE is an empty class type and there is
c20118a8 3265 already an entry in OFFSETS for the same TYPE as the same OFFSET. */
9785e4b1 3266
c20118a8 3267static int
94edc4ab 3268check_subobject_offset (tree type, tree offset, splay_tree offsets)
9785e4b1 3269{
c20118a8
MM
3270 splay_tree_node n;
3271 tree t;
3272
3273 if (!is_empty_class (type))
3274 return 0;
3275
3276 /* Record the location of this empty object in OFFSETS. */
3277 n = splay_tree_lookup (offsets, (splay_tree_key) offset);
3278 if (!n)
3279 return 0;
3280
3281 for (t = (tree) n->value; t; t = TREE_CHAIN (t))
3282 if (same_type_p (TREE_VALUE (t), type))
3283 return 1;
3284
3285 return 0;
9785e4b1
MM
3286}
3287
c20118a8
MM
3288/* Walk through all the subobjects of TYPE (located at OFFSET). Call
3289 F for every subobject, passing it the type, offset, and table of
2003cd37
MM
3290 OFFSETS. If VBASES_P is one, then virtual non-primary bases should
3291 be traversed.
5cdba4ff
MM
3292
3293 If MAX_OFFSET is non-NULL, then subobjects with an offset greater
3294 than MAX_OFFSET will not be walked.
3295
838dfd8a 3296 If F returns a nonzero value, the traversal ceases, and that value
5cdba4ff 3297 is returned. Otherwise, returns zero. */
d77249e7 3298
c20118a8 3299static int
c8094d83 3300walk_subobject_offsets (tree type,
0cbd7506
MS
3301 subobject_offset_fn f,
3302 tree offset,
3303 splay_tree offsets,
3304 tree max_offset,
3305 int vbases_p)
5c24fba6 3306{
c20118a8 3307 int r = 0;
ff944b49 3308 tree type_binfo = NULL_TREE;
c20118a8 3309
5cdba4ff
MM
3310 /* If this OFFSET is bigger than the MAX_OFFSET, then we should
3311 stop. */
3312 if (max_offset && INT_CST_LT (max_offset, offset))
3313 return 0;
3314
dbe91deb
NS
3315 if (type == error_mark_node)
3316 return 0;
3db45ab5 3317
c8094d83 3318 if (!TYPE_P (type))
ff944b49
MM
3319 {
3320 if (abi_version_at_least (2))
3321 type_binfo = type;
3322 type = BINFO_TYPE (type);
3323 }
3324
c20118a8 3325 if (CLASS_TYPE_P (type))
5c24fba6 3326 {
c20118a8 3327 tree field;
17bbb839 3328 tree binfo;
c20118a8
MM
3329 int i;
3330
5ec1192e
MM
3331 /* Avoid recursing into objects that are not interesting. */
3332 if (!CLASSTYPE_CONTAINS_EMPTY_CLASS_P (type))
3333 return 0;
3334
c20118a8
MM
3335 /* Record the location of TYPE. */
3336 r = (*f) (type, offset, offsets);
3337 if (r)
3338 return r;
3339
3340 /* Iterate through the direct base classes of TYPE. */
ff944b49
MM
3341 if (!type_binfo)
3342 type_binfo = TYPE_BINFO (type);
fa743e8c 3343 for (i = 0; BINFO_BASE_ITERATE (type_binfo, i, binfo); i++)
c20118a8 3344 {
ff944b49
MM
3345 tree binfo_offset;
3346
c8094d83 3347 if (abi_version_at_least (2)
809e3e7f 3348 && BINFO_VIRTUAL_P (binfo))
17bbb839 3349 continue;
5c24fba6 3350
c8094d83
MS
3351 if (!vbases_p
3352 && BINFO_VIRTUAL_P (binfo)
9965d119 3353 && !BINFO_PRIMARY_P (binfo))
c20118a8
MM
3354 continue;
3355
ff944b49
MM
3356 if (!abi_version_at_least (2))
3357 binfo_offset = size_binop (PLUS_EXPR,
3358 offset,
3359 BINFO_OFFSET (binfo));
3360 else
3361 {
3362 tree orig_binfo;
3363 /* We cannot rely on BINFO_OFFSET being set for the base
3364 class yet, but the offsets for direct non-virtual
3365 bases can be calculated by going back to the TYPE. */
604a3205 3366 orig_binfo = BINFO_BASE_BINFO (TYPE_BINFO (type), i);
c8094d83 3367 binfo_offset = size_binop (PLUS_EXPR,
ff944b49
MM
3368 offset,
3369 BINFO_OFFSET (orig_binfo));
3370 }
3371
3372 r = walk_subobject_offsets (binfo,
c20118a8 3373 f,
ff944b49 3374 binfo_offset,
c20118a8 3375 offsets,
5cdba4ff 3376 max_offset,
c8094d83 3377 (abi_version_at_least (2)
17bbb839 3378 ? /*vbases_p=*/0 : vbases_p));
c20118a8
MM
3379 if (r)
3380 return r;
3381 }
3382
58c42dc2 3383 if (abi_version_at_least (2) && CLASSTYPE_VBASECLASSES (type))
17bbb839 3384 {
58c42dc2 3385 unsigned ix;
d4e6fecb 3386 VEC(tree,gc) *vbases;
17bbb839 3387
ff944b49
MM
3388 /* Iterate through the virtual base classes of TYPE. In G++
3389 3.2, we included virtual bases in the direct base class
3390 loop above, which results in incorrect results; the
3391 correct offsets for virtual bases are only known when
3392 working with the most derived type. */
3393 if (vbases_p)
9ba5ff0f
NS
3394 for (vbases = CLASSTYPE_VBASECLASSES (type), ix = 0;
3395 VEC_iterate (tree, vbases, ix, binfo); ix++)
ff944b49 3396 {
ff944b49
MM
3397 r = walk_subobject_offsets (binfo,
3398 f,
3399 size_binop (PLUS_EXPR,
3400 offset,
3401 BINFO_OFFSET (binfo)),
3402 offsets,
3403 max_offset,
3404 /*vbases_p=*/0);
3405 if (r)
3406 return r;
3407 }
3408 else
17bbb839 3409 {
ff944b49
MM
3410 /* We still have to walk the primary base, if it is
3411 virtual. (If it is non-virtual, then it was walked
3412 above.) */
58c42dc2 3413 tree vbase = get_primary_binfo (type_binfo);
c8094d83 3414
809e3e7f 3415 if (vbase && BINFO_VIRTUAL_P (vbase)
fc6633e0
NS
3416 && BINFO_PRIMARY_P (vbase)
3417 && BINFO_INHERITANCE_CHAIN (vbase) == type_binfo)
ff944b49 3418 {
c8094d83 3419 r = (walk_subobject_offsets
dbbf88d1
NS
3420 (vbase, f, offset,
3421 offsets, max_offset, /*vbases_p=*/0));
3422 if (r)
3423 return r;
ff944b49 3424 }
17bbb839
MM
3425 }
3426 }
3427
c20118a8 3428 /* Iterate through the fields of TYPE. */
910ad8de 3429 for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
17bbb839 3430 if (TREE_CODE (field) == FIELD_DECL && !DECL_ARTIFICIAL (field))
c20118a8 3431 {
956d9305
MM
3432 tree field_offset;
3433
3434 if (abi_version_at_least (2))
3435 field_offset = byte_position (field);
3436 else
3437 /* In G++ 3.2, DECL_FIELD_OFFSET was used. */
3438 field_offset = DECL_FIELD_OFFSET (field);
3439
c20118a8
MM
3440 r = walk_subobject_offsets (TREE_TYPE (field),
3441 f,
3442 size_binop (PLUS_EXPR,
3443 offset,
956d9305 3444 field_offset),
c20118a8 3445 offsets,
5cdba4ff 3446 max_offset,
c20118a8
MM
3447 /*vbases_p=*/1);
3448 if (r)
3449 return r;
3450 }
5c24fba6 3451 }
c20118a8
MM
3452 else if (TREE_CODE (type) == ARRAY_TYPE)
3453 {
5ec1192e 3454 tree element_type = strip_array_types (type);
c20118a8
MM
3455 tree domain = TYPE_DOMAIN (type);
3456 tree index;
5c24fba6 3457
5ec1192e
MM
3458 /* Avoid recursing into objects that are not interesting. */
3459 if (!CLASS_TYPE_P (element_type)
3460 || !CLASSTYPE_CONTAINS_EMPTY_CLASS_P (element_type))
3461 return 0;
3462
c20118a8 3463 /* Step through each of the elements in the array. */
17bbb839
MM
3464 for (index = size_zero_node;
3465 /* G++ 3.2 had an off-by-one error here. */
c8094d83 3466 (abi_version_at_least (2)
17bbb839
MM
3467 ? !INT_CST_LT (TYPE_MAX_VALUE (domain), index)
3468 : INT_CST_LT (index, TYPE_MAX_VALUE (domain)));
c20118a8
MM
3469 index = size_binop (PLUS_EXPR, index, size_one_node))
3470 {
3471 r = walk_subobject_offsets (TREE_TYPE (type),
3472 f,
3473 offset,
3474 offsets,
5cdba4ff 3475 max_offset,
c20118a8
MM
3476 /*vbases_p=*/1);
3477 if (r)
3478 return r;
c8094d83 3479 offset = size_binop (PLUS_EXPR, offset,
c20118a8 3480 TYPE_SIZE_UNIT (TREE_TYPE (type)));
5cdba4ff
MM
3481 /* If this new OFFSET is bigger than the MAX_OFFSET, then
3482 there's no point in iterating through the remaining
3483 elements of the array. */
3484 if (max_offset && INT_CST_LT (max_offset, offset))
3485 break;
c20118a8
MM
3486 }
3487 }
3488
3489 return 0;
3490}
3491
c0572427
MM
3492/* Record all of the empty subobjects of TYPE (either a type or a
3493 binfo). If IS_DATA_MEMBER is true, then a non-static data member
c5a35c3c
MM
3494 is being placed at OFFSET; otherwise, it is a base class that is
3495 being placed at OFFSET. */
c20118a8
MM
3496
3497static void
c8094d83 3498record_subobject_offsets (tree type,
0cbd7506
MS
3499 tree offset,
3500 splay_tree offsets,
c5a35c3c 3501 bool is_data_member)
c20118a8 3502{
c5a35c3c 3503 tree max_offset;
c0572427
MM
3504 /* If recording subobjects for a non-static data member or a
3505 non-empty base class , we do not need to record offsets beyond
3506 the size of the biggest empty class. Additional data members
3507 will go at the end of the class. Additional base classes will go
3508 either at offset zero (if empty, in which case they cannot
3509 overlap with offsets past the size of the biggest empty class) or
3510 at the end of the class.
3511
3512 However, if we are placing an empty base class, then we must record
c5a35c3c
MM
3513 all offsets, as either the empty class is at offset zero (where
3514 other empty classes might later be placed) or at the end of the
3515 class (where other objects might then be placed, so other empty
3516 subobjects might later overlap). */
3db45ab5 3517 if (is_data_member
c0572427 3518 || !is_empty_class (BINFO_TYPE (type)))
c5a35c3c
MM
3519 max_offset = sizeof_biggest_empty_class;
3520 else
3521 max_offset = NULL_TREE;
c20118a8 3522 walk_subobject_offsets (type, record_subobject_offset, offset,
c5a35c3c 3523 offsets, max_offset, is_data_member);
5c24fba6
MM
3524}
3525
838dfd8a
KH
3526/* Returns nonzero if any of the empty subobjects of TYPE (located at
3527 OFFSET) conflict with entries in OFFSETS. If VBASES_P is nonzero,
c20118a8 3528 virtual bases of TYPE are examined. */
9785e4b1
MM
3529
3530static int
94edc4ab 3531layout_conflict_p (tree type,
0cbd7506
MS
3532 tree offset,
3533 splay_tree offsets,
3534 int vbases_p)
9785e4b1 3535{
5cdba4ff
MM
3536 splay_tree_node max_node;
3537
3538 /* Get the node in OFFSETS that indicates the maximum offset where
3539 an empty subobject is located. */
3540 max_node = splay_tree_max (offsets);
3541 /* If there aren't any empty subobjects, then there's no point in
3542 performing this check. */
3543 if (!max_node)
3544 return 0;
3545
c20118a8 3546 return walk_subobject_offsets (type, check_subobject_offset, offset,
5cdba4ff
MM
3547 offsets, (tree) (max_node->key),
3548 vbases_p);
9785e4b1
MM
3549}
3550
5c24fba6
MM
3551/* DECL is a FIELD_DECL corresponding either to a base subobject of a
3552 non-static data member of the type indicated by RLI. BINFO is the
c20118a8 3553 binfo corresponding to the base subobject, OFFSETS maps offsets to
17bbb839
MM
3554 types already located at those offsets. This function determines
3555 the position of the DECL. */
5c24fba6
MM
3556
3557static void
c8094d83
MS
3558layout_nonempty_base_or_field (record_layout_info rli,
3559 tree decl,
3560 tree binfo,
17bbb839 3561 splay_tree offsets)
5c24fba6 3562{
c20118a8 3563 tree offset = NULL_TREE;
17bbb839
MM
3564 bool field_p;
3565 tree type;
c8094d83 3566
17bbb839
MM
3567 if (binfo)
3568 {
3569 /* For the purposes of determining layout conflicts, we want to
3570 use the class type of BINFO; TREE_TYPE (DECL) will be the
3571 CLASSTYPE_AS_BASE version, which does not contain entries for
3572 zero-sized bases. */
3573 type = TREE_TYPE (binfo);
3574 field_p = false;
3575 }
3576 else
3577 {
3578 type = TREE_TYPE (decl);
3579 field_p = true;
3580 }
c20118a8 3581
5c24fba6
MM
3582 /* Try to place the field. It may take more than one try if we have
3583 a hard time placing the field without putting two objects of the
3584 same type at the same address. */
3585 while (1)
3586 {
defd0dea 3587 struct record_layout_info_s old_rli = *rli;
5c24fba6 3588
770ae6cc
RK
3589 /* Place this field. */
3590 place_field (rli, decl);
da3d4dfa 3591 offset = byte_position (decl);
1e2e9f54 3592
5c24fba6
MM
3593 /* We have to check to see whether or not there is already
3594 something of the same type at the offset we're about to use.
1e2e9f54 3595 For example, consider:
c8094d83 3596
1e2e9f54
MM
3597 struct S {};
3598 struct T : public S { int i; };
3599 struct U : public S, public T {};
c8094d83 3600
5c24fba6
MM
3601 Here, we put S at offset zero in U. Then, we can't put T at
3602 offset zero -- its S component would be at the same address
3603 as the S we already allocated. So, we have to skip ahead.
3604 Since all data members, including those whose type is an
838dfd8a 3605 empty class, have nonzero size, any overlap can happen only
5c24fba6
MM
3606 with a direct or indirect base-class -- it can't happen with
3607 a data member. */
1e2e9f54
MM
3608 /* In a union, overlap is permitted; all members are placed at
3609 offset zero. */
3610 if (TREE_CODE (rli->t) == UNION_TYPE)
3611 break;
7ba539c6
MM
3612 /* G++ 3.2 did not check for overlaps when placing a non-empty
3613 virtual base. */
809e3e7f 3614 if (!abi_version_at_least (2) && binfo && BINFO_VIRTUAL_P (binfo))
7ba539c6 3615 break;
c8094d83 3616 if (layout_conflict_p (field_p ? type : binfo, offset,
ff944b49 3617 offsets, field_p))
5c24fba6 3618 {
5c24fba6
MM
3619 /* Strip off the size allocated to this field. That puts us
3620 at the first place we could have put the field with
3621 proper alignment. */
770ae6cc
RK
3622 *rli = old_rli;
3623
c20118a8 3624 /* Bump up by the alignment required for the type. */
770ae6cc 3625 rli->bitpos
c8094d83
MS
3626 = size_binop (PLUS_EXPR, rli->bitpos,
3627 bitsize_int (binfo
c20118a8
MM
3628 ? CLASSTYPE_ALIGN (type)
3629 : TYPE_ALIGN (type)));
770ae6cc 3630 normalize_rli (rli);
5c24fba6
MM
3631 }
3632 else
3633 /* There was no conflict. We're done laying out this field. */
3634 break;
3635 }
c20118a8 3636
623fe76a 3637 /* Now that we know where it will be placed, update its
c20118a8
MM
3638 BINFO_OFFSET. */
3639 if (binfo && CLASS_TYPE_P (BINFO_TYPE (binfo)))
90024bdc 3640 /* Indirect virtual bases may have a nonzero BINFO_OFFSET at
17bbb839
MM
3641 this point because their BINFO_OFFSET is copied from another
3642 hierarchy. Therefore, we may not need to add the entire
3643 OFFSET. */
c8094d83 3644 propagate_binfo_offsets (binfo,
db3927fb
AH
3645 size_diffop_loc (input_location,
3646 convert (ssizetype, offset),
c8094d83 3647 convert (ssizetype,
dbbf88d1 3648 BINFO_OFFSET (binfo))));
5c24fba6
MM
3649}
3650
90024bdc 3651/* Returns true if TYPE is empty and OFFSET is nonzero. */
7ba539c6
MM
3652
3653static int
3654empty_base_at_nonzero_offset_p (tree type,
3655 tree offset,
3656 splay_tree offsets ATTRIBUTE_UNUSED)
3657{
3658 return is_empty_class (type) && !integer_zerop (offset);
3659}
3660
9785e4b1 3661/* Layout the empty base BINFO. EOC indicates the byte currently just
ec386958 3662 past the end of the class, and should be correctly aligned for a
c20118a8 3663 class of the type indicated by BINFO; OFFSETS gives the offsets of
623fe76a 3664 the empty bases allocated so far. T is the most derived
838dfd8a 3665 type. Return nonzero iff we added it at the end. */
9785e4b1 3666
06d9f09f 3667static bool
d9d9dbc0
JM
3668layout_empty_base (record_layout_info rli, tree binfo,
3669 tree eoc, splay_tree offsets)
9785e4b1 3670{
ec386958 3671 tree alignment;
9785e4b1 3672 tree basetype = BINFO_TYPE (binfo);
06d9f09f 3673 bool atend = false;
956d9305 3674
9785e4b1 3675 /* This routine should only be used for empty classes. */
50bc768d 3676 gcc_assert (is_empty_class (basetype));
1b50716d 3677 alignment = ssize_int (CLASSTYPE_ALIGN_UNIT (basetype));
9785e4b1 3678
3075b327
NS
3679 if (!integer_zerop (BINFO_OFFSET (binfo)))
3680 {
3681 if (abi_version_at_least (2))
3682 propagate_binfo_offsets
db3927fb
AH
3683 (binfo, size_diffop_loc (input_location,
3684 size_zero_node, BINFO_OFFSET (binfo)));
74fa0285
GDR
3685 else
3686 warning (OPT_Wabi,
3db45ab5 3687 "offset of empty base %qT may not be ABI-compliant and may"
3075b327
NS
3688 "change in a future version of GCC",
3689 BINFO_TYPE (binfo));
3690 }
c8094d83 3691
9785e4b1
MM
3692 /* This is an empty base class. We first try to put it at offset
3693 zero. */
ff944b49 3694 if (layout_conflict_p (binfo,
c20118a8 3695 BINFO_OFFSET (binfo),
c8094d83 3696 offsets,
c20118a8 3697 /*vbases_p=*/0))
9785e4b1
MM
3698 {
3699 /* That didn't work. Now, we move forward from the next
3700 available spot in the class. */
06d9f09f 3701 atend = true;
dbbf88d1 3702 propagate_binfo_offsets (binfo, convert (ssizetype, eoc));
c8094d83 3703 while (1)
9785e4b1 3704 {
ff944b49 3705 if (!layout_conflict_p (binfo,
c8094d83 3706 BINFO_OFFSET (binfo),
c20118a8
MM
3707 offsets,
3708 /*vbases_p=*/0))
9785e4b1
MM
3709 /* We finally found a spot where there's no overlap. */
3710 break;
3711
3712 /* There's overlap here, too. Bump along to the next spot. */
dbbf88d1 3713 propagate_binfo_offsets (binfo, alignment);
9785e4b1
MM
3714 }
3715 }
d9d9dbc0
JM
3716
3717 if (CLASSTYPE_USER_ALIGN (basetype))
3718 {
3719 rli->record_align = MAX (rli->record_align, CLASSTYPE_ALIGN (basetype));
3720 if (warn_packed)
3721 rli->unpacked_align = MAX (rli->unpacked_align, CLASSTYPE_ALIGN (basetype));
3722 TYPE_USER_ALIGN (rli->t) = 1;
3723 }
3724
06d9f09f 3725 return atend;
9785e4b1
MM
3726}
3727
78dcd41a 3728/* Layout the base given by BINFO in the class indicated by RLI.
58731fd1 3729 *BASE_ALIGN is a running maximum of the alignments of
17bbb839
MM
3730 any base class. OFFSETS gives the location of empty base
3731 subobjects. T is the most derived type. Return nonzero if the new
3732 object cannot be nearly-empty. A new FIELD_DECL is inserted at
c8094d83 3733 *NEXT_FIELD, unless BINFO is for an empty base class.
5c24fba6 3734
17bbb839
MM
3735 Returns the location at which the next field should be inserted. */
3736
3737static tree *
58731fd1 3738build_base_field (record_layout_info rli, tree binfo,
17bbb839 3739 splay_tree offsets, tree *next_field)
d77249e7 3740{
17bbb839 3741 tree t = rli->t;
d77249e7 3742 tree basetype = BINFO_TYPE (binfo);
d77249e7 3743
d0f062fb 3744 if (!COMPLETE_TYPE_P (basetype))
d77249e7
MM
3745 /* This error is now reported in xref_tag, thus giving better
3746 location information. */
17bbb839 3747 return next_field;
c8094d83 3748
17bbb839
MM
3749 /* Place the base class. */
3750 if (!is_empty_class (basetype))
5c24fba6 3751 {
17bbb839
MM
3752 tree decl;
3753
5c24fba6
MM
3754 /* The containing class is non-empty because it has a non-empty
3755 base class. */
58731fd1 3756 CLASSTYPE_EMPTY_P (t) = 0;
c8094d83 3757
17bbb839 3758 /* Create the FIELD_DECL. */
c2255bc4
AH
3759 decl = build_decl (input_location,
3760 FIELD_DECL, NULL_TREE, CLASSTYPE_AS_BASE (basetype));
17bbb839 3761 DECL_ARTIFICIAL (decl) = 1;
78e0d62b 3762 DECL_IGNORED_P (decl) = 1;
17bbb839 3763 DECL_FIELD_CONTEXT (decl) = t;
1ad8aeeb
DG
3764 if (CLASSTYPE_AS_BASE (basetype))
3765 {
3766 DECL_SIZE (decl) = CLASSTYPE_SIZE (basetype);
3767 DECL_SIZE_UNIT (decl) = CLASSTYPE_SIZE_UNIT (basetype);
3768 DECL_ALIGN (decl) = CLASSTYPE_ALIGN (basetype);
3769 DECL_USER_ALIGN (decl) = CLASSTYPE_USER_ALIGN (basetype);
3770 DECL_MODE (decl) = TYPE_MODE (basetype);
3771 DECL_FIELD_IS_BASE (decl) = 1;
3772
3773 /* Try to place the field. It may take more than one try if we
3774 have a hard time placing the field without putting two
3775 objects of the same type at the same address. */
3776 layout_nonempty_base_or_field (rli, decl, binfo, offsets);
3777 /* Add the new FIELD_DECL to the list of fields for T. */
910ad8de 3778 DECL_CHAIN (decl) = *next_field;
1ad8aeeb 3779 *next_field = decl;
910ad8de 3780 next_field = &DECL_CHAIN (decl);
1ad8aeeb 3781 }
5c24fba6
MM
3782 }
3783 else
ec386958 3784 {
17bbb839 3785 tree eoc;
7ba539c6 3786 bool atend;
ec386958
MM
3787
3788 /* On some platforms (ARM), even empty classes will not be
3789 byte-aligned. */
db3927fb
AH
3790 eoc = round_up_loc (input_location,
3791 rli_size_unit_so_far (rli),
17bbb839 3792 CLASSTYPE_ALIGN_UNIT (basetype));
d9d9dbc0 3793 atend = layout_empty_base (rli, binfo, eoc, offsets);
7ba539c6
MM
3794 /* A nearly-empty class "has no proper base class that is empty,
3795 not morally virtual, and at an offset other than zero." */
809e3e7f 3796 if (!BINFO_VIRTUAL_P (binfo) && CLASSTYPE_NEARLY_EMPTY_P (t))
7ba539c6
MM
3797 {
3798 if (atend)
3799 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
c5a35c3c 3800 /* The check above (used in G++ 3.2) is insufficient because
7ba539c6 3801 an empty class placed at offset zero might itself have an
90024bdc 3802 empty base at a nonzero offset. */
c8094d83 3803 else if (walk_subobject_offsets (basetype,
7ba539c6
MM
3804 empty_base_at_nonzero_offset_p,
3805 size_zero_node,
3806 /*offsets=*/NULL,
3807 /*max_offset=*/NULL_TREE,
3808 /*vbases_p=*/true))
3809 {
3810 if (abi_version_at_least (2))
3811 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
74fa0285
GDR
3812 else
3813 warning (OPT_Wabi,
3db45ab5 3814 "class %qT will be considered nearly empty in a "
7ba539c6
MM
3815 "future version of GCC", t);
3816 }
3817 }
c8094d83 3818
17bbb839
MM
3819 /* We do not create a FIELD_DECL for empty base classes because
3820 it might overlap some other field. We want to be able to
3821 create CONSTRUCTORs for the class by iterating over the
3822 FIELD_DECLs, and the back end does not handle overlapping
3823 FIELD_DECLs. */
58731fd1
MM
3824
3825 /* An empty virtual base causes a class to be non-empty
3826 -- but in that case we do not need to clear CLASSTYPE_EMPTY_P
3827 here because that was already done when the virtual table
3828 pointer was created. */
ec386958 3829 }
5c24fba6 3830
5c24fba6 3831 /* Record the offsets of BINFO and its base subobjects. */
ff944b49 3832 record_subobject_offsets (binfo,
c20118a8 3833 BINFO_OFFSET (binfo),
c8094d83 3834 offsets,
c5a35c3c 3835 /*is_data_member=*/false);
17bbb839
MM
3836
3837 return next_field;
d77249e7
MM
3838}
3839
c20118a8 3840/* Layout all of the non-virtual base classes. Record empty
17bbb839
MM
3841 subobjects in OFFSETS. T is the most derived type. Return nonzero
3842 if the type cannot be nearly empty. The fields created
3843 corresponding to the base classes will be inserted at
3844 *NEXT_FIELD. */
607cf131 3845
17bbb839 3846static void
58731fd1 3847build_base_fields (record_layout_info rli,
17bbb839 3848 splay_tree offsets, tree *next_field)
607cf131
MM
3849{
3850 /* Chain to hold all the new FIELD_DECLs which stand in for base class
3851 subobjects. */
17bbb839 3852 tree t = rli->t;
604a3205 3853 int n_baseclasses = BINFO_N_BASE_BINFOS (TYPE_BINFO (t));
5c24fba6 3854 int i;
607cf131 3855
3461fba7 3856 /* The primary base class is always allocated first. */
17bbb839
MM
3857 if (CLASSTYPE_HAS_PRIMARY_BASE_P (t))
3858 next_field = build_base_field (rli, CLASSTYPE_PRIMARY_BINFO (t),
58731fd1 3859 offsets, next_field);
d77249e7
MM
3860
3861 /* Now allocate the rest of the bases. */
607cf131
MM
3862 for (i = 0; i < n_baseclasses; ++i)
3863 {
d77249e7 3864 tree base_binfo;
607cf131 3865
604a3205 3866 base_binfo = BINFO_BASE_BINFO (TYPE_BINFO (t), i);
911a71a7 3867
3461fba7
NS
3868 /* The primary base was already allocated above, so we don't
3869 need to allocate it again here. */
17bbb839 3870 if (base_binfo == CLASSTYPE_PRIMARY_BINFO (t))
607cf131
MM
3871 continue;
3872
dbbf88d1
NS
3873 /* Virtual bases are added at the end (a primary virtual base
3874 will have already been added). */
809e3e7f 3875 if (BINFO_VIRTUAL_P (base_binfo))
607cf131
MM
3876 continue;
3877
58731fd1 3878 next_field = build_base_field (rli, base_binfo,
17bbb839 3879 offsets, next_field);
607cf131 3880 }
607cf131
MM
3881}
3882
58010b57
MM
3883/* Go through the TYPE_METHODS of T issuing any appropriate
3884 diagnostics, figuring out which methods override which other
3ef397c1 3885 methods, and so forth. */
58010b57
MM
3886
3887static void
94edc4ab 3888check_methods (tree t)
58010b57
MM
3889{
3890 tree x;
58010b57 3891
910ad8de 3892 for (x = TYPE_METHODS (t); x; x = DECL_CHAIN (x))
58010b57 3893 {
58010b57 3894 check_for_override (x, t);
fee7654e 3895 if (DECL_PURE_VIRTUAL_P (x) && ! DECL_VINDEX (x))
dee15844 3896 error ("initializer specified for non-virtual method %q+D", x);
58010b57
MM
3897 /* The name of the field is the original field name
3898 Save this in auxiliary field for later overloading. */
3899 if (DECL_VINDEX (x))
3900 {
3ef397c1 3901 TYPE_POLYMORPHIC_P (t) = 1;
fee7654e 3902 if (DECL_PURE_VIRTUAL_P (x))
d4e6fecb 3903 VEC_safe_push (tree, gc, CLASSTYPE_PURE_VIRTUALS (t), x);
58010b57 3904 }
46408846
JM
3905 /* All user-provided destructors are non-trivial.
3906 Constructors and assignment ops are handled in
3907 grok_special_member_properties. */
20f2653e 3908 if (DECL_DESTRUCTOR_P (x) && user_provided_p (x))
9f4faeae 3909 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t) = 1;
58010b57 3910 }
58010b57
MM
3911}
3912
db9b2174
MM
3913/* FN is a constructor or destructor. Clone the declaration to create
3914 a specialized in-charge or not-in-charge version, as indicated by
3915 NAME. */
3916
3917static tree
94edc4ab 3918build_clone (tree fn, tree name)
db9b2174
MM
3919{
3920 tree parms;
3921 tree clone;
3922
3923 /* Copy the function. */
3924 clone = copy_decl (fn);
db9b2174
MM
3925 /* Reset the function name. */
3926 DECL_NAME (clone) = name;
71cb9286 3927 SET_DECL_ASSEMBLER_NAME (clone, NULL_TREE);
b97e8a14
JM
3928 /* Remember where this function came from. */
3929 DECL_ABSTRACT_ORIGIN (clone) = fn;
3930 /* Make it easy to find the CLONE given the FN. */
910ad8de
NF
3931 DECL_CHAIN (clone) = DECL_CHAIN (fn);
3932 DECL_CHAIN (fn) = clone;
b97e8a14
JM
3933
3934 /* If this is a template, do the rest on the DECL_TEMPLATE_RESULT. */
3935 if (TREE_CODE (clone) == TEMPLATE_DECL)
3936 {
3937 tree result = build_clone (DECL_TEMPLATE_RESULT (clone), name);
3938 DECL_TEMPLATE_RESULT (clone) = result;
3939 DECL_TEMPLATE_INFO (result) = copy_node (DECL_TEMPLATE_INFO (result));
3940 DECL_TI_TEMPLATE (result) = clone;
3941 TREE_TYPE (clone) = TREE_TYPE (result);
3942 return clone;
3943 }
3944
3945 DECL_CLONED_FUNCTION (clone) = fn;
db9b2174
MM
3946 /* There's no pending inline data for this function. */
3947 DECL_PENDING_INLINE_INFO (clone) = NULL;
3948 DECL_PENDING_INLINE_P (clone) = 0;
db9b2174 3949
298d6f60
MM
3950 /* The base-class destructor is not virtual. */
3951 if (name == base_dtor_identifier)
3952 {
3953 DECL_VIRTUAL_P (clone) = 0;
3954 if (TREE_CODE (clone) != TEMPLATE_DECL)
3955 DECL_VINDEX (clone) = NULL_TREE;
3956 }
3957
4e7512c9 3958 /* If there was an in-charge parameter, drop it from the function
db9b2174
MM
3959 type. */
3960 if (DECL_HAS_IN_CHARGE_PARM_P (clone))
3961 {
3962 tree basetype;
3963 tree parmtypes;
3964 tree exceptions;
3965
3966 exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (clone));
3967 basetype = TYPE_METHOD_BASETYPE (TREE_TYPE (clone));
3968 parmtypes = TYPE_ARG_TYPES (TREE_TYPE (clone));
3969 /* Skip the `this' parameter. */
3970 parmtypes = TREE_CHAIN (parmtypes);
3971 /* Skip the in-charge parameter. */
3972 parmtypes = TREE_CHAIN (parmtypes);
e0fff4b3
JM
3973 /* And the VTT parm, in a complete [cd]tor. */
3974 if (DECL_HAS_VTT_PARM_P (fn)
3975 && ! DECL_NEEDS_VTT_PARM_P (clone))
3976 parmtypes = TREE_CHAIN (parmtypes);
3ec6bad3
MM
3977 /* If this is subobject constructor or destructor, add the vtt
3978 parameter. */
c8094d83 3979 TREE_TYPE (clone)
43dc123f
MM
3980 = build_method_type_directly (basetype,
3981 TREE_TYPE (TREE_TYPE (clone)),
3982 parmtypes);
db9b2174
MM
3983 if (exceptions)
3984 TREE_TYPE (clone) = build_exception_variant (TREE_TYPE (clone),
3985 exceptions);
c8094d83 3986 TREE_TYPE (clone)
e9525111
MM
3987 = cp_build_type_attribute_variant (TREE_TYPE (clone),
3988 TYPE_ATTRIBUTES (TREE_TYPE (fn)));
db9b2174
MM
3989 }
3990
b97e8a14
JM
3991 /* Copy the function parameters. */
3992 DECL_ARGUMENTS (clone) = copy_list (DECL_ARGUMENTS (clone));
3993 /* Remove the in-charge parameter. */
3994 if (DECL_HAS_IN_CHARGE_PARM_P (clone))
3995 {
910ad8de
NF
3996 DECL_CHAIN (DECL_ARGUMENTS (clone))
3997 = DECL_CHAIN (DECL_CHAIN (DECL_ARGUMENTS (clone)));
b97e8a14
JM
3998 DECL_HAS_IN_CHARGE_PARM_P (clone) = 0;
3999 }
4000 /* And the VTT parm, in a complete [cd]tor. */
4001 if (DECL_HAS_VTT_PARM_P (fn))
db9b2174 4002 {
b97e8a14
JM
4003 if (DECL_NEEDS_VTT_PARM_P (clone))
4004 DECL_HAS_VTT_PARM_P (clone) = 1;
4005 else
db9b2174 4006 {
910ad8de
NF
4007 DECL_CHAIN (DECL_ARGUMENTS (clone))
4008 = DECL_CHAIN (DECL_CHAIN (DECL_ARGUMENTS (clone)));
b97e8a14 4009 DECL_HAS_VTT_PARM_P (clone) = 0;
3ec6bad3 4010 }
b97e8a14 4011 }
3ec6bad3 4012
910ad8de 4013 for (parms = DECL_ARGUMENTS (clone); parms; parms = DECL_CHAIN (parms))
b97e8a14
JM
4014 {
4015 DECL_CONTEXT (parms) = clone;
4016 cxx_dup_lang_specific_decl (parms);
db9b2174
MM
4017 }
4018
db9b2174 4019 /* Create the RTL for this function. */
245763e3 4020 SET_DECL_RTL (clone, NULL);
0e6df31e 4021 rest_of_decl_compilation (clone, /*top_level=*/1, at_eof);
c8094d83 4022
b97e8a14
JM
4023 if (pch_file)
4024 note_decl_for_pch (clone);
db9b2174 4025
b97e8a14
JM
4026 return clone;
4027}
db9b2174 4028
b97e8a14
JM
4029/* Implementation of DECL_CLONED_FUNCTION and DECL_CLONED_FUNCTION_P, do
4030 not invoke this function directly.
4031
4032 For a non-thunk function, returns the address of the slot for storing
4033 the function it is a clone of. Otherwise returns NULL_TREE.
4034
4035 If JUST_TESTING, looks through TEMPLATE_DECL and returns NULL if
4036 cloned_function is unset. This is to support the separate
4037 DECL_CLONED_FUNCTION and DECL_CLONED_FUNCTION_P modes; using the latter
4038 on a template makes sense, but not the former. */
4039
4040tree *
4041decl_cloned_function_p (const_tree decl, bool just_testing)
4042{
4043 tree *ptr;
4044 if (just_testing)
4045 decl = STRIP_TEMPLATE (decl);
4046
4047 if (TREE_CODE (decl) != FUNCTION_DECL
4048 || !DECL_LANG_SPECIFIC (decl)
4049 || DECL_LANG_SPECIFIC (decl)->u.fn.thunk_p)
4050 {
4051#if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
4052 if (!just_testing)
4053 lang_check_failed (__FILE__, __LINE__, __FUNCTION__);
4054 else
4055#endif
4056 return NULL;
db9b2174
MM
4057 }
4058
b97e8a14
JM
4059 ptr = &DECL_LANG_SPECIFIC (decl)->u.fn.u5.cloned_function;
4060 if (just_testing && *ptr == NULL_TREE)
4061 return NULL;
4062 else
4063 return ptr;
db9b2174
MM
4064}
4065
4066/* Produce declarations for all appropriate clones of FN. If
838dfd8a 4067 UPDATE_METHOD_VEC_P is nonzero, the clones are added to the
db9b2174
MM
4068 CLASTYPE_METHOD_VEC as well. */
4069
4070void
94edc4ab 4071clone_function_decl (tree fn, int update_method_vec_p)
db9b2174
MM
4072{
4073 tree clone;
4074
c00996a3 4075 /* Avoid inappropriate cloning. */
910ad8de
NF
4076 if (DECL_CHAIN (fn)
4077 && DECL_CLONED_FUNCTION_P (DECL_CHAIN (fn)))
c00996a3
JM
4078 return;
4079
298d6f60 4080 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (fn))
db9b2174 4081 {
298d6f60
MM
4082 /* For each constructor, we need two variants: an in-charge version
4083 and a not-in-charge version. */
db9b2174
MM
4084 clone = build_clone (fn, complete_ctor_identifier);
4085 if (update_method_vec_p)
b2a9b208 4086 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
db9b2174
MM
4087 clone = build_clone (fn, base_ctor_identifier);
4088 if (update_method_vec_p)
b2a9b208 4089 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
db9b2174
MM
4090 }
4091 else
298d6f60 4092 {
50bc768d 4093 gcc_assert (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (fn));
298d6f60 4094
3ec6bad3 4095 /* For each destructor, we need three variants: an in-charge
298d6f60 4096 version, a not-in-charge version, and an in-charge deleting
4e7512c9
MM
4097 version. We clone the deleting version first because that
4098 means it will go second on the TYPE_METHODS list -- and that
4099 corresponds to the correct layout order in the virtual
c8094d83 4100 function table.
52682a1b 4101
0cbd7506 4102 For a non-virtual destructor, we do not build a deleting
52682a1b
MM
4103 destructor. */
4104 if (DECL_VIRTUAL_P (fn))
4105 {
4106 clone = build_clone (fn, deleting_dtor_identifier);
4107 if (update_method_vec_p)
b2a9b208 4108 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
52682a1b 4109 }
4e7512c9 4110 clone = build_clone (fn, complete_dtor_identifier);
298d6f60 4111 if (update_method_vec_p)
b2a9b208 4112 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
298d6f60
MM
4113 clone = build_clone (fn, base_dtor_identifier);
4114 if (update_method_vec_p)
b2a9b208 4115 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
298d6f60 4116 }
5daf7c0a
JM
4117
4118 /* Note that this is an abstract function that is never emitted. */
4119 DECL_ABSTRACT (fn) = 1;
db9b2174
MM
4120}
4121
5f6eeeb3
NS
4122/* DECL is an in charge constructor, which is being defined. This will
4123 have had an in class declaration, from whence clones were
4124 declared. An out-of-class definition can specify additional default
4125 arguments. As it is the clones that are involved in overload
4126 resolution, we must propagate the information from the DECL to its
00a17e31 4127 clones. */
5f6eeeb3
NS
4128
4129void
94edc4ab 4130adjust_clone_args (tree decl)
5f6eeeb3
NS
4131{
4132 tree clone;
c8094d83 4133
910ad8de
NF
4134 for (clone = DECL_CHAIN (decl); clone && DECL_CLONED_FUNCTION_P (clone);
4135 clone = DECL_CHAIN (clone))
5f6eeeb3
NS
4136 {
4137 tree orig_clone_parms = TYPE_ARG_TYPES (TREE_TYPE (clone));
4138 tree orig_decl_parms = TYPE_ARG_TYPES (TREE_TYPE (decl));
4139 tree decl_parms, clone_parms;
4140
4141 clone_parms = orig_clone_parms;
c8094d83 4142
00a17e31 4143 /* Skip the 'this' parameter. */
5f6eeeb3
NS
4144 orig_clone_parms = TREE_CHAIN (orig_clone_parms);
4145 orig_decl_parms = TREE_CHAIN (orig_decl_parms);
4146
4147 if (DECL_HAS_IN_CHARGE_PARM_P (decl))
4148 orig_decl_parms = TREE_CHAIN (orig_decl_parms);
4149 if (DECL_HAS_VTT_PARM_P (decl))
4150 orig_decl_parms = TREE_CHAIN (orig_decl_parms);
c8094d83 4151
5f6eeeb3
NS
4152 clone_parms = orig_clone_parms;
4153 if (DECL_HAS_VTT_PARM_P (clone))
4154 clone_parms = TREE_CHAIN (clone_parms);
c8094d83 4155
5f6eeeb3
NS
4156 for (decl_parms = orig_decl_parms; decl_parms;
4157 decl_parms = TREE_CHAIN (decl_parms),
4158 clone_parms = TREE_CHAIN (clone_parms))
4159 {
50bc768d
NS
4160 gcc_assert (same_type_p (TREE_TYPE (decl_parms),
4161 TREE_TYPE (clone_parms)));
c8094d83 4162
5f6eeeb3
NS
4163 if (TREE_PURPOSE (decl_parms) && !TREE_PURPOSE (clone_parms))
4164 {
4165 /* A default parameter has been added. Adjust the
00a17e31 4166 clone's parameters. */
5f6eeeb3 4167 tree exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (clone));
3c3905fc 4168 tree attrs = TYPE_ATTRIBUTES (TREE_TYPE (clone));
5f6eeeb3
NS
4169 tree basetype = TYPE_METHOD_BASETYPE (TREE_TYPE (clone));
4170 tree type;
4171
4172 clone_parms = orig_decl_parms;
4173
4174 if (DECL_HAS_VTT_PARM_P (clone))
4175 {
4176 clone_parms = tree_cons (TREE_PURPOSE (orig_clone_parms),
4177 TREE_VALUE (orig_clone_parms),
4178 clone_parms);
4179 TREE_TYPE (clone_parms) = TREE_TYPE (orig_clone_parms);
4180 }
43dc123f
MM
4181 type = build_method_type_directly (basetype,
4182 TREE_TYPE (TREE_TYPE (clone)),
4183 clone_parms);
5f6eeeb3
NS
4184 if (exceptions)
4185 type = build_exception_variant (type, exceptions);
3c3905fc
JM
4186 if (attrs)
4187 type = cp_build_type_attribute_variant (type, attrs);
5f6eeeb3 4188 TREE_TYPE (clone) = type;
c8094d83 4189
5f6eeeb3
NS
4190 clone_parms = NULL_TREE;
4191 break;
4192 }
4193 }
50bc768d 4194 gcc_assert (!clone_parms);
5f6eeeb3
NS
4195 }
4196}
4197
db9b2174
MM
4198/* For each of the constructors and destructors in T, create an
4199 in-charge and not-in-charge variant. */
4200
4201static void
94edc4ab 4202clone_constructors_and_destructors (tree t)
db9b2174
MM
4203{
4204 tree fns;
4205
db9b2174
MM
4206 /* If for some reason we don't have a CLASSTYPE_METHOD_VEC, we bail
4207 out now. */
4208 if (!CLASSTYPE_METHOD_VEC (t))
4209 return;
4210
db9b2174
MM
4211 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
4212 clone_function_decl (OVL_CURRENT (fns), /*update_method_vec_p=*/1);
298d6f60
MM
4213 for (fns = CLASSTYPE_DESTRUCTORS (t); fns; fns = OVL_NEXT (fns))
4214 clone_function_decl (OVL_CURRENT (fns), /*update_method_vec_p=*/1);
db9b2174
MM
4215}
4216
8c95264b
MLI
4217/* Returns true iff class T has a user-defined constructor other than
4218 the default constructor. */
4219
4220bool
4221type_has_user_nondefault_constructor (tree t)
4222{
4223 tree fns;
4224
4225 if (!TYPE_HAS_USER_CONSTRUCTOR (t))
4226 return false;
4227
4228 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
4229 {
4230 tree fn = OVL_CURRENT (fns);
4231 if (!DECL_ARTIFICIAL (fn)
c2b58ba2
JM
4232 && (TREE_CODE (fn) == TEMPLATE_DECL
4233 || (skip_artificial_parms_for (fn, DECL_ARGUMENTS (fn))
4234 != NULL_TREE)))
8c95264b
MLI
4235 return true;
4236 }
4237
4238 return false;
4239}
4240
6ad86a5b
FC
4241/* Returns the defaulted constructor if T has one. Otherwise, returns
4242 NULL_TREE. */
4243
4244tree
4245in_class_defaulted_default_constructor (tree t)
4246{
4247 tree fns, args;
4248
4249 if (!TYPE_HAS_USER_CONSTRUCTOR (t))
4250 return NULL_TREE;
4251
4252 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
4253 {
4254 tree fn = OVL_CURRENT (fns);
4255
4256 if (DECL_DEFAULTED_IN_CLASS_P (fn))
4257 {
4258 args = FUNCTION_FIRST_USER_PARMTYPE (fn);
4259 while (args && TREE_PURPOSE (args))
4260 args = TREE_CHAIN (args);
4261 if (!args || args == void_list_node)
4262 return fn;
4263 }
4264 }
4265
4266 return NULL_TREE;
4267}
4268
b87d79e6 4269/* Returns true iff FN is a user-provided function, i.e. user-declared
20f2653e
JM
4270 and not defaulted at its first declaration; or explicit, private,
4271 protected, or non-const. */
b87d79e6 4272
20f2653e 4273bool
b87d79e6
JM
4274user_provided_p (tree fn)
4275{
4276 if (TREE_CODE (fn) == TEMPLATE_DECL)
4277 return true;
4278 else
4279 return (!DECL_ARTIFICIAL (fn)
20f2653e 4280 && !DECL_DEFAULTED_IN_CLASS_P (fn));
b87d79e6
JM
4281}
4282
4283/* Returns true iff class T has a user-provided constructor. */
4284
4285bool
4286type_has_user_provided_constructor (tree t)
4287{
4288 tree fns;
4289
fd97a96a
JM
4290 if (!CLASS_TYPE_P (t))
4291 return false;
4292
b87d79e6
JM
4293 if (!TYPE_HAS_USER_CONSTRUCTOR (t))
4294 return false;
4295
4296 /* This can happen in error cases; avoid crashing. */
4297 if (!CLASSTYPE_METHOD_VEC (t))
4298 return false;
4299
4300 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
4301 if (user_provided_p (OVL_CURRENT (fns)))
4302 return true;
4303
4304 return false;
4305}
4306
4307/* Returns true iff class T has a user-provided default constructor. */
4308
4309bool
4310type_has_user_provided_default_constructor (tree t)
4311{
71b8cb01 4312 tree fns;
b87d79e6
JM
4313
4314 if (!TYPE_HAS_USER_CONSTRUCTOR (t))
4315 return false;
4316
4317 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
4318 {
4319 tree fn = OVL_CURRENT (fns);
7ad8d488 4320 if (TREE_CODE (fn) == FUNCTION_DECL
71b8cb01
JM
4321 && user_provided_p (fn)
4322 && sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (fn)))
4323 return true;
b87d79e6
JM
4324 }
4325
4326 return false;
4327}
4328
0930cc0e
JM
4329/* Returns true iff for class T, a synthesized default constructor
4330 would be constexpr. */
4331
4332bool
4333synthesized_default_constructor_is_constexpr (tree t)
4334{
4335 /* A defaulted default constructor is constexpr
4336 if there is nothing to initialize. */
4337 /* FIXME adjust for non-static data member initializers. */
4338 return is_really_empty_class (t);
4339}
4340
91ea6df3
GDR
4341/* Returns true iff class T has a constexpr default constructor. */
4342
4343bool
4344type_has_constexpr_default_constructor (tree t)
4345{
4346 tree fns;
4347
4348 if (!CLASS_TYPE_P (t))
4349 return false;
0930cc0e
JM
4350 if (CLASSTYPE_LAZY_DEFAULT_CTOR (t))
4351 return synthesized_default_constructor_is_constexpr (t);
f7d042e2 4352 fns = locate_ctor (t);
91ea6df3
GDR
4353 return (fns && DECL_DECLARED_CONSTEXPR_P (fns));
4354}
4355
46408846
JM
4356/* Returns true iff class TYPE has a virtual destructor. */
4357
4358bool
4359type_has_virtual_destructor (tree type)
4360{
4361 tree dtor;
4362
4363 if (!CLASS_TYPE_P (type))
4364 return false;
4365
4366 gcc_assert (COMPLETE_TYPE_P (type));
4367 dtor = CLASSTYPE_DESTRUCTORS (type);
4368 return (dtor && DECL_VIRTUAL_P (dtor));
4369}
4370
ac177431
JM
4371/* Returns true iff class T has a move constructor. */
4372
4373bool
4374type_has_move_constructor (tree t)
4375{
4376 tree fns;
4377
4378 if (CLASSTYPE_LAZY_MOVE_CTOR (t))
4379 {
4380 gcc_assert (COMPLETE_TYPE_P (t));
4381 lazily_declare_fn (sfk_move_constructor, t);
4382 }
4383
4384 if (!CLASSTYPE_METHOD_VEC (t))
4385 return false;
4386
4387 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
4388 if (move_fn_p (OVL_CURRENT (fns)))
4389 return true;
4390
4391 return false;
4392}
4393
4394/* Returns true iff class T has a move assignment operator. */
4395
4396bool
4397type_has_move_assign (tree t)
4398{
4399 tree fns;
4400
4401 if (CLASSTYPE_LAZY_MOVE_ASSIGN (t))
4402 {
4403 gcc_assert (COMPLETE_TYPE_P (t));
4404 lazily_declare_fn (sfk_move_assignment, t);
4405 }
4406
4407 for (fns = lookup_fnfields_slot (t, ansi_assopname (NOP_EXPR));
4408 fns; fns = OVL_NEXT (fns))
4409 if (move_fn_p (OVL_CURRENT (fns)))
4410 return true;
4411
4412 return false;
4413}
4414
58010b57
MM
4415/* Remove all zero-width bit-fields from T. */
4416
4417static void
94edc4ab 4418remove_zero_width_bit_fields (tree t)
58010b57
MM
4419{
4420 tree *fieldsp;
4421
c8094d83 4422 fieldsp = &TYPE_FIELDS (t);
58010b57
MM
4423 while (*fieldsp)
4424 {
4425 if (TREE_CODE (*fieldsp) == FIELD_DECL
c8094d83 4426 && DECL_C_BIT_FIELD (*fieldsp)
84894f85
DS
4427 /* We should not be confused by the fact that grokbitfield
4428 temporarily sets the width of the bit field into
4429 DECL_INITIAL (*fieldsp).
4430 check_bitfield_decl eventually sets DECL_SIZE (*fieldsp)
4431 to that width. */
4432 && integer_zerop (DECL_SIZE (*fieldsp)))
910ad8de 4433 *fieldsp = DECL_CHAIN (*fieldsp);
58010b57 4434 else
910ad8de 4435 fieldsp = &DECL_CHAIN (*fieldsp);
58010b57
MM
4436 }
4437}
4438
dbc957f1
MM
4439/* Returns TRUE iff we need a cookie when dynamically allocating an
4440 array whose elements have the indicated class TYPE. */
4441
4442static bool
94edc4ab 4443type_requires_array_cookie (tree type)
dbc957f1
MM
4444{
4445 tree fns;
18fee3ee 4446 bool has_two_argument_delete_p = false;
dbc957f1 4447
50bc768d 4448 gcc_assert (CLASS_TYPE_P (type));
dbc957f1
MM
4449
4450 /* If there's a non-trivial destructor, we need a cookie. In order
4451 to iterate through the array calling the destructor for each
4452 element, we'll have to know how many elements there are. */
4453 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
4454 return true;
4455
4456 /* If the usual deallocation function is a two-argument whose second
4457 argument is of type `size_t', then we have to pass the size of
4458 the array to the deallocation function, so we will need to store
4459 a cookie. */
c8094d83 4460 fns = lookup_fnfields (TYPE_BINFO (type),
dbc957f1
MM
4461 ansi_opname (VEC_DELETE_EXPR),
4462 /*protect=*/0);
4463 /* If there are no `operator []' members, or the lookup is
4464 ambiguous, then we don't need a cookie. */
4465 if (!fns || fns == error_mark_node)
4466 return false;
4467 /* Loop through all of the functions. */
50ad9642 4468 for (fns = BASELINK_FUNCTIONS (fns); fns; fns = OVL_NEXT (fns))
dbc957f1
MM
4469 {
4470 tree fn;
4471 tree second_parm;
4472
4473 /* Select the current function. */
4474 fn = OVL_CURRENT (fns);
4475 /* See if this function is a one-argument delete function. If
4476 it is, then it will be the usual deallocation function. */
4477 second_parm = TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (fn)));
4478 if (second_parm == void_list_node)
4479 return false;
4b8cb94c
SM
4480 /* Do not consider this function if its second argument is an
4481 ellipsis. */
4482 if (!second_parm)
4483 continue;
dbc957f1
MM
4484 /* Otherwise, if we have a two-argument function and the second
4485 argument is `size_t', it will be the usual deallocation
4486 function -- unless there is one-argument function, too. */
4487 if (TREE_CHAIN (second_parm) == void_list_node
c79154c4 4488 && same_type_p (TREE_VALUE (second_parm), size_type_node))
dbc957f1
MM
4489 has_two_argument_delete_p = true;
4490 }
4491
4492 return has_two_argument_delete_p;
4493}
4494
3b49d762
GDR
4495/* Finish computing the `literal type' property of class type T.
4496
4497 At this point, we have already processed base classes and
4498 non-static data members. We need to check whether the copy
4499 constructor is trivial, the destructor is trivial, and there
4500 is a trivial default constructor or at least one constexpr
4501 constructor other than the copy constructor. */
4502
4503static void
4504finalize_literal_type_property (tree t)
4505{
4506 if (cxx_dialect < cxx0x
4507 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
4508 /* FIXME These constraints seem unnecessary; remove from standard.
4509 || !TYPE_HAS_TRIVIAL_COPY_CTOR (t)
4510 || TYPE_HAS_COMPLEX_MOVE_CTOR (t)*/ )
4511 CLASSTYPE_LITERAL_P (t) = false;
4512 else if (CLASSTYPE_LITERAL_P (t) && !TYPE_HAS_TRIVIAL_DFLT (t)
4513 && !TYPE_HAS_CONSTEXPR_CTOR (t))
4514 CLASSTYPE_LITERAL_P (t) = false;
4515
4516 if (!CLASSTYPE_LITERAL_P (t) && !CLASSTYPE_TEMPLATE_INSTANTIATION (t))
4517 {
4518 tree fn;
4519 for (fn = TYPE_METHODS (t); fn; fn = DECL_CHAIN (fn))
4520 if (DECL_DECLARED_CONSTEXPR_P (fn)
4521 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
4522 && !DECL_CONSTRUCTOR_P (fn))
4523 {
4524 error ("enclosing class of %q+D is not a literal type", fn);
4525 DECL_DECLARED_CONSTEXPR_P (fn) = false;
4526 }
4527 }
4528}
4529
607cf131
MM
4530/* Check the validity of the bases and members declared in T. Add any
4531 implicitly-generated functions (like copy-constructors and
4532 assignment operators). Compute various flag bits (like
c32097d8 4533 CLASSTYPE_NON_LAYOUT_POD_T) for T. This routine works purely at the C++
607cf131
MM
4534 level: i.e., independently of the ABI in use. */
4535
4536static void
58731fd1 4537check_bases_and_members (tree t)
607cf131 4538{
607cf131
MM
4539 /* Nonzero if the implicitly generated copy constructor should take
4540 a non-const reference argument. */
4541 int cant_have_const_ctor;
78dcd41a 4542 /* Nonzero if the implicitly generated assignment operator
607cf131
MM
4543 should take a non-const reference argument. */
4544 int no_const_asn_ref;
4545 tree access_decls;
b87d79e6
JM
4546 bool saved_complex_asn_ref;
4547 bool saved_nontrivial_dtor;
20f2653e 4548 tree fn;
607cf131
MM
4549
4550 /* By default, we use const reference arguments and generate default
4551 constructors. */
607cf131
MM
4552 cant_have_const_ctor = 0;
4553 no_const_asn_ref = 0;
4554
00a17e31 4555 /* Check all the base-classes. */
e5e459bf 4556 check_bases (t, &cant_have_const_ctor,
10746f37 4557 &no_const_asn_ref);
607cf131 4558
9f4faeae
MM
4559 /* Check all the method declarations. */
4560 check_methods (t);
4561
b87d79e6
JM
4562 /* Save the initial values of these flags which only indicate whether
4563 or not the class has user-provided functions. As we analyze the
4564 bases and members we can set these flags for other reasons. */
066ec0a4 4565 saved_complex_asn_ref = TYPE_HAS_COMPLEX_COPY_ASSIGN (t);
b87d79e6
JM
4566 saved_nontrivial_dtor = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t);
4567
9f4faeae
MM
4568 /* Check all the data member declarations. We cannot call
4569 check_field_decls until we have called check_bases check_methods,
4570 as check_field_decls depends on TYPE_HAS_NONTRIVIAL_DESTRUCTOR
4571 being set appropriately. */
58731fd1 4572 check_field_decls (t, &access_decls,
607cf131 4573 &cant_have_const_ctor,
10746f37 4574 &no_const_asn_ref);
607cf131 4575
bbd15aac
MM
4576 /* A nearly-empty class has to be vptr-containing; a nearly empty
4577 class contains just a vptr. */
4578 if (!TYPE_CONTAINS_VPTR_P (t))
f9c528ea
MM
4579 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
4580
607cf131
MM
4581 /* Do some bookkeeping that will guide the generation of implicitly
4582 declared member functions. */
066ec0a4 4583 TYPE_HAS_COMPLEX_COPY_CTOR (t) |= TYPE_CONTAINS_VPTR_P (t);
ac177431 4584 TYPE_HAS_COMPLEX_MOVE_CTOR (t) |= TYPE_CONTAINS_VPTR_P (t);
0fcedd9c 4585 /* We need to call a constructor for this class if it has a
b87d79e6 4586 user-provided constructor, or if the default constructor is going
0fcedd9c
JM
4587 to initialize the vptr. (This is not an if-and-only-if;
4588 TYPE_NEEDS_CONSTRUCTING is set elsewhere if bases or members
4589 themselves need constructing.) */
607cf131 4590 TYPE_NEEDS_CONSTRUCTING (t)
b87d79e6 4591 |= (type_has_user_provided_constructor (t) || TYPE_CONTAINS_VPTR_P (t));
0fcedd9c
JM
4592 /* [dcl.init.aggr]
4593
b87d79e6 4594 An aggregate is an array or a class with no user-provided
0fcedd9c
JM
4595 constructors ... and no virtual functions.
4596
4597 Again, other conditions for being an aggregate are checked
4598 elsewhere. */
5775a06a 4599 CLASSTYPE_NON_AGGREGATE (t)
b87d79e6 4600 |= (type_has_user_provided_constructor (t) || TYPE_POLYMORPHIC_P (t));
c32097d8
JM
4601 /* This is the C++98/03 definition of POD; it changed in C++0x, but we
4602 retain the old definition internally for ABI reasons. */
4603 CLASSTYPE_NON_LAYOUT_POD_P (t)
c8094d83 4604 |= (CLASSTYPE_NON_AGGREGATE (t)
b87d79e6 4605 || saved_nontrivial_dtor || saved_complex_asn_ref);
c32097d8 4606 CLASSTYPE_NON_STD_LAYOUT (t) |= TYPE_CONTAINS_VPTR_P (t);
066ec0a4 4607 TYPE_HAS_COMPLEX_COPY_ASSIGN (t) |= TYPE_CONTAINS_VPTR_P (t);
ac177431 4608 TYPE_HAS_COMPLEX_MOVE_ASSIGN (t) |= TYPE_CONTAINS_VPTR_P (t);
f782c65c 4609 TYPE_HAS_COMPLEX_DFLT (t) |= TYPE_CONTAINS_VPTR_P (t);
607cf131 4610
0fcedd9c
JM
4611 /* If the class has no user-declared constructor, but does have
4612 non-static const or reference data members that can never be
4613 initialized, issue a warning. */
c73d5dd9 4614 if (warn_uninitialized
0fcedd9c
JM
4615 /* Classes with user-declared constructors are presumed to
4616 initialize these members. */
4617 && !TYPE_HAS_USER_CONSTRUCTOR (t)
4618 /* Aggregates can be initialized with brace-enclosed
4619 initializers. */
4620 && CLASSTYPE_NON_AGGREGATE (t))
4621 {
4622 tree field;
4623
910ad8de 4624 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
0fcedd9c
JM
4625 {
4626 tree type;
4627
4628 if (TREE_CODE (field) != FIELD_DECL)
4629 continue;
4630
4631 type = TREE_TYPE (field);
4632 if (TREE_CODE (type) == REFERENCE_TYPE)
c73d5dd9
MLI
4633 warning (OPT_Wuninitialized, "non-static reference %q+#D "
4634 "in class without a constructor", field);
0fcedd9c
JM
4635 else if (CP_TYPE_CONST_P (type)
4636 && (!CLASS_TYPE_P (type)
4637 || !TYPE_HAS_DEFAULT_CONSTRUCTOR (type)))
c73d5dd9
MLI
4638 warning (OPT_Wuninitialized, "non-static const member %q+#D "
4639 "in class without a constructor", field);
0fcedd9c
JM
4640 }
4641 }
4642
03fd3f84 4643 /* Synthesize any needed methods. */
e5e459bf 4644 add_implicitly_declared_members (t,
607cf131 4645 cant_have_const_ctor,
10746f37 4646 no_const_asn_ref);
607cf131 4647
20f2653e
JM
4648 /* Check defaulted declarations here so we have cant_have_const_ctor
4649 and don't need to worry about clones. */
910ad8de 4650 for (fn = TYPE_METHODS (t); fn; fn = DECL_CHAIN (fn))
20f2653e
JM
4651 if (DECL_DEFAULTED_IN_CLASS_P (fn))
4652 {
4653 int copy = copy_fn_p (fn);
4654 if (copy > 0)
4655 {
4656 bool imp_const_p
4657 = (DECL_CONSTRUCTOR_P (fn) ? !cant_have_const_ctor
4658 : !no_const_asn_ref);
4659 bool fn_const_p = (copy == 2);
4660
4661 if (fn_const_p && !imp_const_p)
4662 /* If the function is defaulted outside the class, we just
4663 give the synthesis error. */
4664 error ("%q+D declared to take const reference, but implicit "
4665 "declaration would take non-const", fn);
4666 else if (imp_const_p && !fn_const_p)
4667 error ("%q+D declared to take non-const reference cannot be "
4668 "defaulted in the class body", fn);
4669 }
4670 defaulted_late_check (fn);
4671 }
4672
d5f4eddd
JM
4673 if (LAMBDA_TYPE_P (t))
4674 {
4675 /* "The closure type associated with a lambda-expression has a deleted
4676 default constructor and a deleted copy assignment operator." */
4677 TYPE_NEEDS_CONSTRUCTING (t) = 1;
54ca9930
JM
4678 TYPE_HAS_COMPLEX_DFLT (t) = 1;
4679 TYPE_HAS_COMPLEX_COPY_ASSIGN (t) = 1;
4680 CLASSTYPE_LAZY_MOVE_ASSIGN (t) = 0;
d5f4eddd
JM
4681
4682 /* "This class type is not an aggregate." */
4683 CLASSTYPE_NON_AGGREGATE (t) = 1;
4684 }
4685
3b49d762
GDR
4686 /* Compute the 'literal type' property before we
4687 do anything with non-static member functions. */
4688 finalize_literal_type_property (t);
4689
db9b2174
MM
4690 /* Create the in-charge and not-in-charge variants of constructors
4691 and destructors. */
4692 clone_constructors_and_destructors (t);
4693
aa52c1ff
JM
4694 /* Process the using-declarations. */
4695 for (; access_decls; access_decls = TREE_CHAIN (access_decls))
4696 handle_using_decl (TREE_VALUE (access_decls), t);
4697
607cf131
MM
4698 /* Build and sort the CLASSTYPE_METHOD_VEC. */
4699 finish_struct_methods (t);
dbc957f1
MM
4700
4701 /* Figure out whether or not we will need a cookie when dynamically
4702 allocating an array of this type. */
e2500fed 4703 TYPE_LANG_SPECIFIC (t)->u.c.vec_new_uses_cookie
dbc957f1 4704 = type_requires_array_cookie (t);
607cf131
MM
4705}
4706
3ef397c1 4707/* If T needs a pointer to its virtual function table, set TYPE_VFIELD
5c24fba6
MM
4708 accordingly. If a new vfield was created (because T doesn't have a
4709 primary base class), then the newly created field is returned. It
c35cce41 4710 is not added to the TYPE_FIELDS list; it is the caller's
e6858a84
NS
4711 responsibility to do that. Accumulate declared virtual functions
4712 on VIRTUALS_P. */
3ef397c1 4713
5c24fba6 4714static tree
94edc4ab 4715create_vtable_ptr (tree t, tree* virtuals_p)
3ef397c1
MM
4716{
4717 tree fn;
4718
e6858a84 4719 /* Collect the virtual functions declared in T. */
910ad8de 4720 for (fn = TYPE_METHODS (t); fn; fn = DECL_CHAIN (fn))
e6858a84
NS
4721 if (DECL_VINDEX (fn) && !DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (fn)
4722 && TREE_CODE (DECL_VINDEX (fn)) != INTEGER_CST)
4723 {
4724 tree new_virtual = make_node (TREE_LIST);
c8094d83 4725
e6858a84
NS
4726 BV_FN (new_virtual) = fn;
4727 BV_DELTA (new_virtual) = integer_zero_node;
d1f05f93 4728 BV_VCALL_INDEX (new_virtual) = NULL_TREE;
3ef397c1 4729
e6858a84
NS
4730 TREE_CHAIN (new_virtual) = *virtuals_p;
4731 *virtuals_p = new_virtual;
4732 }
c8094d83 4733
da3d4dfa
MM
4734 /* If we couldn't find an appropriate base class, create a new field
4735 here. Even if there weren't any new virtual functions, we might need a
bbd15aac
MM
4736 new virtual function table if we're supposed to include vptrs in
4737 all classes that need them. */
e6858a84 4738 if (!TYPE_VFIELD (t) && (*virtuals_p || TYPE_CONTAINS_VPTR_P (t)))
3ef397c1
MM
4739 {
4740 /* We build this decl with vtbl_ptr_type_node, which is a
4741 `vtable_entry_type*'. It might seem more precise to use
a692ad2e 4742 `vtable_entry_type (*)[N]' where N is the number of virtual
3ef397c1
MM
4743 functions. However, that would require the vtable pointer in
4744 base classes to have a different type than the vtable pointer
4745 in derived classes. We could make that happen, but that
4746 still wouldn't solve all the problems. In particular, the
4747 type-based alias analysis code would decide that assignments
4748 to the base class vtable pointer can't alias assignments to
4749 the derived class vtable pointer, since they have different
4639c5c6 4750 types. Thus, in a derived class destructor, where the base
3ef397c1 4751 class constructor was inlined, we could generate bad code for
c8094d83 4752 setting up the vtable pointer.
3ef397c1 4753
0cbd7506 4754 Therefore, we use one type for all vtable pointers. We still
3ef397c1
MM
4755 use a type-correct type; it's just doesn't indicate the array
4756 bounds. That's better than using `void*' or some such; it's
4757 cleaner, and it let's the alias analysis code know that these
4758 stores cannot alias stores to void*! */
0abe00c5
NS
4759 tree field;
4760
c2255bc4
AH
4761 field = build_decl (input_location,
4762 FIELD_DECL, get_vfield_name (t), vtbl_ptr_type_node);
0abe00c5
NS
4763 DECL_VIRTUAL_P (field) = 1;
4764 DECL_ARTIFICIAL (field) = 1;
4765 DECL_FIELD_CONTEXT (field) = t;
4766 DECL_FCONTEXT (field) = t;
7c08df6c
JM
4767 if (TYPE_PACKED (t))
4768 DECL_PACKED (field) = 1;
c8094d83 4769
0abe00c5 4770 TYPE_VFIELD (t) = field;
c8094d83 4771
0abe00c5 4772 /* This class is non-empty. */
58731fd1 4773 CLASSTYPE_EMPTY_P (t) = 0;
3ef397c1 4774
0abe00c5 4775 return field;
3ef397c1 4776 }
5c24fba6
MM
4777
4778 return NULL_TREE;
3ef397c1
MM
4779}
4780
9d4c0187
MM
4781/* Add OFFSET to all base types of BINFO which is a base in the
4782 hierarchy dominated by T.
80fd5f48 4783
911a71a7 4784 OFFSET, which is a type offset, is number of bytes. */
80fd5f48
MM
4785
4786static void
dbbf88d1 4787propagate_binfo_offsets (tree binfo, tree offset)
80fd5f48 4788{
911a71a7
MM
4789 int i;
4790 tree primary_binfo;
fa743e8c 4791 tree base_binfo;
80fd5f48 4792
911a71a7
MM
4793 /* Update BINFO's offset. */
4794 BINFO_OFFSET (binfo)
c8094d83 4795 = convert (sizetype,
911a71a7
MM
4796 size_binop (PLUS_EXPR,
4797 convert (ssizetype, BINFO_OFFSET (binfo)),
4798 offset));
80fd5f48 4799
911a71a7
MM
4800 /* Find the primary base class. */
4801 primary_binfo = get_primary_binfo (binfo);
4802
fc6633e0 4803 if (primary_binfo && BINFO_INHERITANCE_CHAIN (primary_binfo) == binfo)
090ad434 4804 propagate_binfo_offsets (primary_binfo, offset);
c8094d83 4805
911a71a7
MM
4806 /* Scan all of the bases, pushing the BINFO_OFFSET adjust
4807 downwards. */
fa743e8c 4808 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
80fd5f48 4809 {
090ad434
NS
4810 /* Don't do the primary base twice. */
4811 if (base_binfo == primary_binfo)
4812 continue;
911a71a7 4813
090ad434 4814 if (BINFO_VIRTUAL_P (base_binfo))
911a71a7
MM
4815 continue;
4816
dbbf88d1 4817 propagate_binfo_offsets (base_binfo, offset);
911a71a7 4818 }
9d4c0187
MM
4819}
4820
17bbb839 4821/* Set BINFO_OFFSET for all of the virtual bases for RLI->T. Update
c20118a8
MM
4822 TYPE_ALIGN and TYPE_SIZE for T. OFFSETS gives the location of
4823 empty subobjects of T. */
80fd5f48 4824
d2c5305b 4825static void
17bbb839 4826layout_virtual_bases (record_layout_info rli, splay_tree offsets)
80fd5f48 4827{
dbbf88d1 4828 tree vbase;
17bbb839 4829 tree t = rli->t;
eca7f13c 4830 bool first_vbase = true;
17bbb839 4831 tree *next_field;
9785e4b1 4832
604a3205 4833 if (BINFO_N_BASE_BINFOS (TYPE_BINFO (t)) == 0)
9785e4b1
MM
4834 return;
4835
17bbb839
MM
4836 if (!abi_version_at_least(2))
4837 {
4838 /* In G++ 3.2, we incorrectly rounded the size before laying out
4839 the virtual bases. */
4840 finish_record_layout (rli, /*free_p=*/false);
9785e4b1 4841#ifdef STRUCTURE_SIZE_BOUNDARY
17bbb839
MM
4842 /* Packed structures don't need to have minimum size. */
4843 if (! TYPE_PACKED (t))
fc555370 4844 TYPE_ALIGN (t) = MAX (TYPE_ALIGN (t), (unsigned) STRUCTURE_SIZE_BOUNDARY);
9785e4b1 4845#endif
17bbb839
MM
4846 rli->offset = TYPE_SIZE_UNIT (t);
4847 rli->bitpos = bitsize_zero_node;
4848 rli->record_align = TYPE_ALIGN (t);
4849 }
80fd5f48 4850
17bbb839
MM
4851 /* Find the last field. The artificial fields created for virtual
4852 bases will go after the last extant field to date. */
4853 next_field = &TYPE_FIELDS (t);
4854 while (*next_field)
910ad8de 4855 next_field = &DECL_CHAIN (*next_field);
80fd5f48 4856
9d4c0187 4857 /* Go through the virtual bases, allocating space for each virtual
3461fba7
NS
4858 base that is not already a primary base class. These are
4859 allocated in inheritance graph order. */
dbbf88d1 4860 for (vbase = TYPE_BINFO (t); vbase; vbase = TREE_CHAIN (vbase))
c35cce41 4861 {
809e3e7f 4862 if (!BINFO_VIRTUAL_P (vbase))
1f84ec23 4863 continue;
eca7f13c 4864
9965d119 4865 if (!BINFO_PRIMARY_P (vbase))
c35cce41 4866 {
17bbb839
MM
4867 tree basetype = TREE_TYPE (vbase);
4868
c35cce41
MM
4869 /* This virtual base is not a primary base of any class in the
4870 hierarchy, so we have to add space for it. */
58731fd1 4871 next_field = build_base_field (rli, vbase,
17bbb839 4872 offsets, next_field);
9785e4b1 4873
eca7f13c
MM
4874 /* If the first virtual base might have been placed at a
4875 lower address, had we started from CLASSTYPE_SIZE, rather
4876 than TYPE_SIZE, issue a warning. There can be both false
4877 positives and false negatives from this warning in rare
4878 cases; to deal with all the possibilities would probably
4879 require performing both layout algorithms and comparing
4880 the results which is not particularly tractable. */
4881 if (warn_abi
4882 && first_vbase
c8094d83 4883 && (tree_int_cst_lt
17bbb839 4884 (size_binop (CEIL_DIV_EXPR,
db3927fb
AH
4885 round_up_loc (input_location,
4886 CLASSTYPE_SIZE (t),
17bbb839
MM
4887 CLASSTYPE_ALIGN (basetype)),
4888 bitsize_unit_node),
4889 BINFO_OFFSET (vbase))))
74fa0285 4890 warning (OPT_Wabi,
3db45ab5 4891 "offset of virtual base %qT is not ABI-compliant and "
0cbd7506 4892 "may change in a future version of GCC",
eca7f13c
MM
4893 basetype);
4894
eca7f13c 4895 first_vbase = false;
c35cce41
MM
4896 }
4897 }
80fd5f48
MM
4898}
4899
ba9a991f
MM
4900/* Returns the offset of the byte just past the end of the base class
4901 BINFO. */
4902
4903static tree
4904end_of_base (tree binfo)
4905{
4906 tree size;
4907
1ad8aeeb
DG
4908 if (!CLASSTYPE_AS_BASE (BINFO_TYPE (binfo)))
4909 size = TYPE_SIZE_UNIT (char_type_node);
4910 else if (is_empty_class (BINFO_TYPE (binfo)))
ba9a991f
MM
4911 /* An empty class has zero CLASSTYPE_SIZE_UNIT, but we need to
4912 allocate some space for it. It cannot have virtual bases, so
4913 TYPE_SIZE_UNIT is fine. */
4914 size = TYPE_SIZE_UNIT (BINFO_TYPE (binfo));
4915 else
4916 size = CLASSTYPE_SIZE_UNIT (BINFO_TYPE (binfo));
4917
4918 return size_binop (PLUS_EXPR, BINFO_OFFSET (binfo), size);
4919}
4920
9785e4b1
MM
4921/* Returns the offset of the byte just past the end of the base class
4922 with the highest offset in T. If INCLUDE_VIRTUALS_P is zero, then
4923 only non-virtual bases are included. */
80fd5f48 4924
17bbb839 4925static tree
94edc4ab 4926end_of_class (tree t, int include_virtuals_p)
80fd5f48 4927{
17bbb839 4928 tree result = size_zero_node;
d4e6fecb 4929 VEC(tree,gc) *vbases;
ba9a991f 4930 tree binfo;
9ba5ff0f 4931 tree base_binfo;
ba9a991f 4932 tree offset;
9785e4b1 4933 int i;
80fd5f48 4934
fa743e8c
NS
4935 for (binfo = TYPE_BINFO (t), i = 0;
4936 BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
9785e4b1 4937 {
9785e4b1 4938 if (!include_virtuals_p
fc6633e0
NS
4939 && BINFO_VIRTUAL_P (base_binfo)
4940 && (!BINFO_PRIMARY_P (base_binfo)
4941 || BINFO_INHERITANCE_CHAIN (base_binfo) != TYPE_BINFO (t)))
9785e4b1 4942 continue;
80fd5f48 4943
fa743e8c 4944 offset = end_of_base (base_binfo);
17bbb839
MM
4945 if (INT_CST_LT_UNSIGNED (result, offset))
4946 result = offset;
9785e4b1 4947 }
80fd5f48 4948
ba9a991f
MM
4949 /* G++ 3.2 did not check indirect virtual bases. */
4950 if (abi_version_at_least (2) && include_virtuals_p)
9ba5ff0f
NS
4951 for (vbases = CLASSTYPE_VBASECLASSES (t), i = 0;
4952 VEC_iterate (tree, vbases, i, base_binfo); i++)
ba9a991f 4953 {
9ba5ff0f 4954 offset = end_of_base (base_binfo);
ba9a991f
MM
4955 if (INT_CST_LT_UNSIGNED (result, offset))
4956 result = offset;
4957 }
4958
9785e4b1 4959 return result;
80fd5f48
MM
4960}
4961
17bbb839 4962/* Warn about bases of T that are inaccessible because they are
78b45a24
MM
4963 ambiguous. For example:
4964
4965 struct S {};
4966 struct T : public S {};
4967 struct U : public S, public T {};
4968
4969 Here, `(S*) new U' is not allowed because there are two `S'
4970 subobjects of U. */
4971
4972static void
94edc4ab 4973warn_about_ambiguous_bases (tree t)
78b45a24
MM
4974{
4975 int i;
d4e6fecb 4976 VEC(tree,gc) *vbases;
17bbb839 4977 tree basetype;
58c42dc2 4978 tree binfo;
fa743e8c 4979 tree base_binfo;
78b45a24 4980
18e4be85
NS
4981 /* If there are no repeated bases, nothing can be ambiguous. */
4982 if (!CLASSTYPE_REPEATED_BASE_P (t))
4983 return;
c8094d83 4984
17bbb839 4985 /* Check direct bases. */
fa743e8c
NS
4986 for (binfo = TYPE_BINFO (t), i = 0;
4987 BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
78b45a24 4988 {
fa743e8c 4989 basetype = BINFO_TYPE (base_binfo);
78b45a24 4990
18e4be85 4991 if (!lookup_base (t, basetype, ba_unique | ba_quiet, NULL))
d4ee4d25 4992 warning (0, "direct base %qT inaccessible in %qT due to ambiguity",
17bbb839 4993 basetype, t);
78b45a24 4994 }
17bbb839
MM
4995
4996 /* Check for ambiguous virtual bases. */
4997 if (extra_warnings)
9ba5ff0f
NS
4998 for (vbases = CLASSTYPE_VBASECLASSES (t), i = 0;
4999 VEC_iterate (tree, vbases, i, binfo); i++)
17bbb839 5000 {
58c42dc2 5001 basetype = BINFO_TYPE (binfo);
c8094d83 5002
18e4be85 5003 if (!lookup_base (t, basetype, ba_unique | ba_quiet, NULL))
b323323f 5004 warning (OPT_Wextra, "virtual base %qT inaccessible in %qT due to ambiguity",
17bbb839
MM
5005 basetype, t);
5006 }
78b45a24
MM
5007}
5008
c20118a8
MM
5009/* Compare two INTEGER_CSTs K1 and K2. */
5010
5011static int
94edc4ab 5012splay_tree_compare_integer_csts (splay_tree_key k1, splay_tree_key k2)
c20118a8
MM
5013{
5014 return tree_int_cst_compare ((tree) k1, (tree) k2);
5015}
5016
17bbb839
MM
5017/* Increase the size indicated in RLI to account for empty classes
5018 that are "off the end" of the class. */
5019
5020static void
5021include_empty_classes (record_layout_info rli)
5022{
5023 tree eoc;
e3ccdd50 5024 tree rli_size;
17bbb839
MM
5025
5026 /* It might be the case that we grew the class to allocate a
5027 zero-sized base class. That won't be reflected in RLI, yet,
5028 because we are willing to overlay multiple bases at the same
5029 offset. However, now we need to make sure that RLI is big enough
5030 to reflect the entire class. */
c8094d83 5031 eoc = end_of_class (rli->t,
17bbb839 5032 CLASSTYPE_AS_BASE (rli->t) != NULL_TREE);
e3ccdd50
MM
5033 rli_size = rli_size_unit_so_far (rli);
5034 if (TREE_CODE (rli_size) == INTEGER_CST
5035 && INT_CST_LT_UNSIGNED (rli_size, eoc))
17bbb839 5036 {
43fe31f6
MM
5037 if (!abi_version_at_least (2))
5038 /* In version 1 of the ABI, the size of a class that ends with
5039 a bitfield was not rounded up to a whole multiple of a
5040 byte. Because rli_size_unit_so_far returns only the number
5041 of fully allocated bytes, any extra bits were not included
5042 in the size. */
5043 rli->bitpos = round_down (rli->bitpos, BITS_PER_UNIT);
5044 else
5045 /* The size should have been rounded to a whole byte. */
50bc768d
NS
5046 gcc_assert (tree_int_cst_equal
5047 (rli->bitpos, round_down (rli->bitpos, BITS_PER_UNIT)));
c8094d83
MS
5048 rli->bitpos
5049 = size_binop (PLUS_EXPR,
e3ccdd50
MM
5050 rli->bitpos,
5051 size_binop (MULT_EXPR,
5052 convert (bitsizetype,
5053 size_binop (MINUS_EXPR,
5054 eoc, rli_size)),
5055 bitsize_int (BITS_PER_UNIT)));
5056 normalize_rli (rli);
17bbb839
MM
5057 }
5058}
5059
2ef16140
MM
5060/* Calculate the TYPE_SIZE, TYPE_ALIGN, etc for T. Calculate
5061 BINFO_OFFSETs for all of the base-classes. Position the vtable
00a17e31 5062 pointer. Accumulate declared virtual functions on VIRTUALS_P. */
607cf131 5063
2ef16140 5064static void
e93ee644 5065layout_class_type (tree t, tree *virtuals_p)
2ef16140 5066{
5c24fba6
MM
5067 tree non_static_data_members;
5068 tree field;
5069 tree vptr;
5070 record_layout_info rli;
c20118a8
MM
5071 /* Maps offsets (represented as INTEGER_CSTs) to a TREE_LIST of
5072 types that appear at that offset. */
5073 splay_tree empty_base_offsets;
eca7f13c
MM
5074 /* True if the last field layed out was a bit-field. */
5075 bool last_field_was_bitfield = false;
17bbb839
MM
5076 /* The location at which the next field should be inserted. */
5077 tree *next_field;
5078 /* T, as a base class. */
5079 tree base_t;
5c24fba6
MM
5080
5081 /* Keep track of the first non-static data member. */
5082 non_static_data_members = TYPE_FIELDS (t);
5083
770ae6cc
RK
5084 /* Start laying out the record. */
5085 rli = start_record_layout (t);
534170eb 5086
fc6633e0
NS
5087 /* Mark all the primary bases in the hierarchy. */
5088 determine_primary_bases (t);
8026246f 5089
5c24fba6 5090 /* Create a pointer to our virtual function table. */
58731fd1 5091 vptr = create_vtable_ptr (t, virtuals_p);
5c24fba6 5092
3461fba7 5093 /* The vptr is always the first thing in the class. */
1f84ec23 5094 if (vptr)
5c24fba6 5095 {
910ad8de 5096 DECL_CHAIN (vptr) = TYPE_FIELDS (t);
17bbb839 5097 TYPE_FIELDS (t) = vptr;
910ad8de 5098 next_field = &DECL_CHAIN (vptr);
770ae6cc 5099 place_field (rli, vptr);
5c24fba6 5100 }
17bbb839
MM
5101 else
5102 next_field = &TYPE_FIELDS (t);
5c24fba6 5103
72a50ab0 5104 /* Build FIELD_DECLs for all of the non-virtual base-types. */
c8094d83 5105 empty_base_offsets = splay_tree_new (splay_tree_compare_integer_csts,
c20118a8 5106 NULL, NULL);
58731fd1 5107 build_base_fields (rli, empty_base_offsets, next_field);
c8094d83 5108
5c24fba6 5109 /* Layout the non-static data members. */
910ad8de 5110 for (field = non_static_data_members; field; field = DECL_CHAIN (field))
5c24fba6 5111 {
01955e96
MM
5112 tree type;
5113 tree padding;
5c24fba6
MM
5114
5115 /* We still pass things that aren't non-static data members to
3b426391 5116 the back end, in case it wants to do something with them. */
5c24fba6
MM
5117 if (TREE_CODE (field) != FIELD_DECL)
5118 {
770ae6cc 5119 place_field (rli, field);
0154eaa8 5120 /* If the static data member has incomplete type, keep track
c8094d83 5121 of it so that it can be completed later. (The handling
0154eaa8
MM
5122 of pending statics in finish_record_layout is
5123 insufficient; consider:
5124
5125 struct S1;
5126 struct S2 { static S1 s1; };
c8094d83 5127
0cbd7506 5128 At this point, finish_record_layout will be called, but
0154eaa8
MM
5129 S1 is still incomplete.) */
5130 if (TREE_CODE (field) == VAR_DECL)
532b37d9
MM
5131 {
5132 maybe_register_incomplete_var (field);
5133 /* The visibility of static data members is determined
5134 at their point of declaration, not their point of
5135 definition. */
5136 determine_visibility (field);
5137 }
5c24fba6
MM
5138 continue;
5139 }
5140
01955e96 5141 type = TREE_TYPE (field);
4e3bd7d5
VR
5142 if (type == error_mark_node)
5143 continue;
c8094d83 5144
1e099144 5145 padding = NULL_TREE;
01955e96
MM
5146
5147 /* If this field is a bit-field whose width is greater than its
3461fba7
NS
5148 type, then there are some special rules for allocating
5149 it. */
01955e96 5150 if (DECL_C_BIT_FIELD (field)
1f84ec23 5151 && INT_CST_LT (TYPE_SIZE (type), DECL_SIZE (field)))
01955e96 5152 {
09639a83 5153 unsigned int itk;
01955e96 5154 tree integer_type;
555456b1 5155 bool was_unnamed_p = false;
01955e96
MM
5156 /* We must allocate the bits as if suitably aligned for the
5157 longest integer type that fits in this many bits. type
5158 of the field. Then, we are supposed to use the left over
5159 bits as additional padding. */
5160 for (itk = itk_char; itk != itk_none; ++itk)
64c31785 5161 if (integer_types[itk] != NULL_TREE
1c314335
L
5162 && (INT_CST_LT (size_int (MAX_FIXED_MODE_SIZE),
5163 TYPE_SIZE (integer_types[itk]))
5164 || INT_CST_LT (DECL_SIZE (field),
5165 TYPE_SIZE (integer_types[itk]))))
01955e96
MM
5166 break;
5167
5168 /* ITK now indicates a type that is too large for the
5169 field. We have to back up by one to find the largest
5170 type that fits. */
64c31785
KT
5171 do
5172 {
5173 --itk;
5174 integer_type = integer_types[itk];
5175 } while (itk > 0 && integer_type == NULL_TREE);
2d3e278d 5176
1e099144
MM
5177 /* Figure out how much additional padding is required. GCC
5178 3.2 always created a padding field, even if it had zero
5179 width. */
5180 if (!abi_version_at_least (2)
5181 || INT_CST_LT (TYPE_SIZE (integer_type), DECL_SIZE (field)))
2d3e278d 5182 {
1e099144
MM
5183 if (abi_version_at_least (2) && TREE_CODE (t) == UNION_TYPE)
5184 /* In a union, the padding field must have the full width
5185 of the bit-field; all fields start at offset zero. */
5186 padding = DECL_SIZE (field);
5187 else
5188 {
74fa0285
GDR
5189 if (TREE_CODE (t) == UNION_TYPE)
5190 warning (OPT_Wabi, "size assigned to %qT may not be "
1e099144 5191 "ABI-compliant and may change in a future "
c8094d83 5192 "version of GCC",
1e099144
MM
5193 t);
5194 padding = size_binop (MINUS_EXPR, DECL_SIZE (field),
5195 TYPE_SIZE (integer_type));
5196 }
2d3e278d 5197 }
c9372112 5198#ifdef PCC_BITFIELD_TYPE_MATTERS
63e5f567
MM
5199 /* An unnamed bitfield does not normally affect the
5200 alignment of the containing class on a target where
5201 PCC_BITFIELD_TYPE_MATTERS. But, the C++ ABI does not
5202 make any exceptions for unnamed bitfields when the
5203 bitfields are longer than their types. Therefore, we
5204 temporarily give the field a name. */
5205 if (PCC_BITFIELD_TYPE_MATTERS && !DECL_NAME (field))
5206 {
5207 was_unnamed_p = true;
5208 DECL_NAME (field) = make_anon_name ();
5209 }
c9372112 5210#endif
01955e96
MM
5211 DECL_SIZE (field) = TYPE_SIZE (integer_type);
5212 DECL_ALIGN (field) = TYPE_ALIGN (integer_type);
11cf4d18 5213 DECL_USER_ALIGN (field) = TYPE_USER_ALIGN (integer_type);
555456b1
MM
5214 layout_nonempty_base_or_field (rli, field, NULL_TREE,
5215 empty_base_offsets);
5216 if (was_unnamed_p)
5217 DECL_NAME (field) = NULL_TREE;
5218 /* Now that layout has been performed, set the size of the
5219 field to the size of its declared type; the rest of the
5220 field is effectively invisible. */
5221 DECL_SIZE (field) = TYPE_SIZE (type);
29edb15c
MM
5222 /* We must also reset the DECL_MODE of the field. */
5223 if (abi_version_at_least (2))
5224 DECL_MODE (field) = TYPE_MODE (type);
5225 else if (warn_abi
5226 && DECL_MODE (field) != TYPE_MODE (type))
5227 /* Versions of G++ before G++ 3.4 did not reset the
5228 DECL_MODE. */
74fa0285 5229 warning (OPT_Wabi,
3db45ab5 5230 "the offset of %qD may not be ABI-compliant and may "
29edb15c 5231 "change in a future version of GCC", field);
01955e96 5232 }
555456b1
MM
5233 else
5234 layout_nonempty_base_or_field (rli, field, NULL_TREE,
5235 empty_base_offsets);
01955e96 5236
2003cd37
MM
5237 /* Remember the location of any empty classes in FIELD. */
5238 if (abi_version_at_least (2))
c8094d83 5239 record_subobject_offsets (TREE_TYPE (field),
2003cd37
MM
5240 byte_position(field),
5241 empty_base_offsets,
c5a35c3c 5242 /*is_data_member=*/true);
2003cd37 5243
eca7f13c
MM
5244 /* If a bit-field does not immediately follow another bit-field,
5245 and yet it starts in the middle of a byte, we have failed to
5246 comply with the ABI. */
5247 if (warn_abi
c8094d83 5248 && DECL_C_BIT_FIELD (field)
660845bf
ZL
5249 /* The TREE_NO_WARNING flag gets set by Objective-C when
5250 laying out an Objective-C class. The ObjC ABI differs
5251 from the C++ ABI, and so we do not want a warning
5252 here. */
5253 && !TREE_NO_WARNING (field)
eca7f13c
MM
5254 && !last_field_was_bitfield
5255 && !integer_zerop (size_binop (TRUNC_MOD_EXPR,
5256 DECL_FIELD_BIT_OFFSET (field),
5257 bitsize_unit_node)))
74fa0285 5258 warning (OPT_Wabi, "offset of %q+D is not ABI-compliant and may "
dee15844 5259 "change in a future version of GCC", field);
eca7f13c 5260
956d9305
MM
5261 /* G++ used to use DECL_FIELD_OFFSET as if it were the byte
5262 offset of the field. */
c8094d83 5263 if (warn_abi
254d1a5a 5264 && !abi_version_at_least (2)
956d9305
MM
5265 && !tree_int_cst_equal (DECL_FIELD_OFFSET (field),
5266 byte_position (field))
5267 && contains_empty_class_p (TREE_TYPE (field)))
74fa0285 5268 warning (OPT_Wabi, "%q+D contains empty classes which may cause base "
dee15844
JM
5269 "classes to be placed at different locations in a "
5270 "future version of GCC", field);
956d9305 5271
38a4afee
MM
5272 /* The middle end uses the type of expressions to determine the
5273 possible range of expression values. In order to optimize
5274 "x.i > 7" to "false" for a 2-bit bitfield "i", the middle end
3db45ab5 5275 must be made aware of the width of "i", via its type.
38a4afee 5276
3db45ab5 5277 Because C++ does not have integer types of arbitrary width,
38a4afee
MM
5278 we must (for the purposes of the front end) convert from the
5279 type assigned here to the declared type of the bitfield
5280 whenever a bitfield expression is used as an rvalue.
5281 Similarly, when assigning a value to a bitfield, the value
5282 must be converted to the type given the bitfield here. */
5283 if (DECL_C_BIT_FIELD (field))
5284 {
38a4afee 5285 unsigned HOST_WIDE_INT width;
24030e4c 5286 tree ftype = TREE_TYPE (field);
38a4afee
MM
5287 width = tree_low_cst (DECL_SIZE (field), /*unsignedp=*/1);
5288 if (width != TYPE_PRECISION (ftype))
24030e4c
JJ
5289 {
5290 TREE_TYPE (field)
5291 = c_build_bitfield_integer_type (width,
5292 TYPE_UNSIGNED (ftype));
5293 TREE_TYPE (field)
5294 = cp_build_qualified_type (TREE_TYPE (field),
a3360e77 5295 cp_type_quals (ftype));
24030e4c 5296 }
38a4afee
MM
5297 }
5298
01955e96
MM
5299 /* If we needed additional padding after this field, add it
5300 now. */
5301 if (padding)
5302 {
5303 tree padding_field;
5304
c2255bc4
AH
5305 padding_field = build_decl (input_location,
5306 FIELD_DECL,
01955e96 5307 NULL_TREE,
c8094d83 5308 char_type_node);
01955e96
MM
5309 DECL_BIT_FIELD (padding_field) = 1;
5310 DECL_SIZE (padding_field) = padding;
1e099144 5311 DECL_CONTEXT (padding_field) = t;
ea258926 5312 DECL_ARTIFICIAL (padding_field) = 1;
78e0d62b 5313 DECL_IGNORED_P (padding_field) = 1;
c20118a8 5314 layout_nonempty_base_or_field (rli, padding_field,
c8094d83 5315 NULL_TREE,
17bbb839 5316 empty_base_offsets);
01955e96 5317 }
eca7f13c
MM
5318
5319 last_field_was_bitfield = DECL_C_BIT_FIELD (field);
5c24fba6
MM
5320 }
5321
17bbb839 5322 if (abi_version_at_least (2) && !integer_zerop (rli->bitpos))
e3ccdd50
MM
5323 {
5324 /* Make sure that we are on a byte boundary so that the size of
5325 the class without virtual bases will always be a round number
5326 of bytes. */
db3927fb 5327 rli->bitpos = round_up_loc (input_location, rli->bitpos, BITS_PER_UNIT);
e3ccdd50
MM
5328 normalize_rli (rli);
5329 }
17bbb839 5330
8a874cb4
MM
5331 /* G++ 3.2 does not allow virtual bases to be overlaid with tail
5332 padding. */
5333 if (!abi_version_at_least (2))
5334 include_empty_classes(rli);
58010b57 5335
3ef397c1
MM
5336 /* Delete all zero-width bit-fields from the list of fields. Now
5337 that the type is laid out they are no longer important. */
5338 remove_zero_width_bit_fields (t);
5339
17bbb839 5340 /* Create the version of T used for virtual bases. We do not use
9e1e64ec 5341 make_class_type for this version; this is an artificial type. For
17bbb839 5342 a POD type, we just reuse T. */
c32097d8 5343 if (CLASSTYPE_NON_LAYOUT_POD_P (t) || CLASSTYPE_EMPTY_P (t))
06ceef4e 5344 {
17bbb839 5345 base_t = make_node (TREE_CODE (t));
c8094d83 5346
58731fd1
MM
5347 /* Set the size and alignment for the new type. In G++ 3.2, all
5348 empty classes were considered to have size zero when used as
5349 base classes. */
5350 if (!abi_version_at_least (2) && CLASSTYPE_EMPTY_P (t))
5351 {
5352 TYPE_SIZE (base_t) = bitsize_zero_node;
5353 TYPE_SIZE_UNIT (base_t) = size_zero_node;
5354 if (warn_abi && !integer_zerop (rli_size_unit_so_far (rli)))
74fa0285 5355 warning (OPT_Wabi,
3db45ab5 5356 "layout of classes derived from empty class %qT "
58731fd1
MM
5357 "may change in a future version of GCC",
5358 t);
5359 }
5360 else
5361 {
6b99d1c0
MM
5362 tree eoc;
5363
5364 /* If the ABI version is not at least two, and the last
5365 field was a bit-field, RLI may not be on a byte
5366 boundary. In particular, rli_size_unit_so_far might
5367 indicate the last complete byte, while rli_size_so_far
5368 indicates the total number of bits used. Therefore,
5369 rli_size_so_far, rather than rli_size_unit_so_far, is
5370 used to compute TYPE_SIZE_UNIT. */
5371 eoc = end_of_class (t, /*include_virtuals_p=*/0);
c8094d83 5372 TYPE_SIZE_UNIT (base_t)
8a874cb4 5373 = size_binop (MAX_EXPR,
6b99d1c0
MM
5374 convert (sizetype,
5375 size_binop (CEIL_DIV_EXPR,
5376 rli_size_so_far (rli),
5377 bitsize_int (BITS_PER_UNIT))),
5378 eoc);
c8094d83 5379 TYPE_SIZE (base_t)
8a874cb4
MM
5380 = size_binop (MAX_EXPR,
5381 rli_size_so_far (rli),
5382 size_binop (MULT_EXPR,
6b99d1c0 5383 convert (bitsizetype, eoc),
8a874cb4 5384 bitsize_int (BITS_PER_UNIT)));
58731fd1 5385 }
17bbb839
MM
5386 TYPE_ALIGN (base_t) = rli->record_align;
5387 TYPE_USER_ALIGN (base_t) = TYPE_USER_ALIGN (t);
5388
5389 /* Copy the fields from T. */
5390 next_field = &TYPE_FIELDS (base_t);
910ad8de 5391 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
17bbb839
MM
5392 if (TREE_CODE (field) == FIELD_DECL)
5393 {
c2255bc4
AH
5394 *next_field = build_decl (input_location,
5395 FIELD_DECL,
c8094d83 5396 DECL_NAME (field),
17bbb839
MM
5397 TREE_TYPE (field));
5398 DECL_CONTEXT (*next_field) = base_t;
5399 DECL_FIELD_OFFSET (*next_field) = DECL_FIELD_OFFSET (field);
5400 DECL_FIELD_BIT_OFFSET (*next_field)
5401 = DECL_FIELD_BIT_OFFSET (field);
4f0a2b81
MM
5402 DECL_SIZE (*next_field) = DECL_SIZE (field);
5403 DECL_MODE (*next_field) = DECL_MODE (field);
910ad8de 5404 next_field = &DECL_CHAIN (*next_field);
17bbb839
MM
5405 }
5406
5407 /* Record the base version of the type. */
5408 CLASSTYPE_AS_BASE (t) = base_t;
5a5cccaa 5409 TYPE_CONTEXT (base_t) = t;
83b14b88 5410 }
1f84ec23 5411 else
17bbb839 5412 CLASSTYPE_AS_BASE (t) = t;
0b41abe6 5413
5ec1192e
MM
5414 /* Every empty class contains an empty class. */
5415 if (CLASSTYPE_EMPTY_P (t))
5416 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) = 1;
5417
8d08fdba
MS
5418 /* Set the TYPE_DECL for this type to contain the right
5419 value for DECL_OFFSET, so that we can use it as part
5420 of a COMPONENT_REF for multiple inheritance. */
d2e5ee5c 5421 layout_decl (TYPE_MAIN_DECL (t), 0);
8d08fdba 5422
7177d104
MS
5423 /* Now fix up any virtual base class types that we left lying
5424 around. We must get these done before we try to lay out the
5c24fba6
MM
5425 virtual function table. As a side-effect, this will remove the
5426 base subobject fields. */
17bbb839
MM
5427 layout_virtual_bases (rli, empty_base_offsets);
5428
c8094d83 5429 /* Make sure that empty classes are reflected in RLI at this
17bbb839
MM
5430 point. */
5431 include_empty_classes(rli);
5432
5433 /* Make sure not to create any structures with zero size. */
58731fd1 5434 if (integer_zerop (rli_size_unit_so_far (rli)) && CLASSTYPE_EMPTY_P (t))
c8094d83 5435 place_field (rli,
c2255bc4
AH
5436 build_decl (input_location,
5437 FIELD_DECL, NULL_TREE, char_type_node));
17bbb839 5438
a402c1b1
JM
5439 /* If this is a non-POD, declaring it packed makes a difference to how it
5440 can be used as a field; don't let finalize_record_size undo it. */
5441 if (TYPE_PACKED (t) && !layout_pod_type_p (t))
5442 rli->packed_maybe_necessary = true;
5443
3b426391 5444 /* Let the back end lay out the type. */
17bbb839 5445 finish_record_layout (rli, /*free_p=*/true);
9785e4b1 5446
17bbb839
MM
5447 /* Warn about bases that can't be talked about due to ambiguity. */
5448 warn_about_ambiguous_bases (t);
78b45a24 5449
00bfffa4 5450 /* Now that we're done with layout, give the base fields the real types. */
910ad8de 5451 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
00bfffa4
JM
5452 if (DECL_ARTIFICIAL (field) && IS_FAKE_BASE_TYPE (TREE_TYPE (field)))
5453 TREE_TYPE (field) = TYPE_CONTEXT (TREE_TYPE (field));
5454
9785e4b1 5455 /* Clean up. */
c20118a8 5456 splay_tree_delete (empty_base_offsets);
c5a35c3c
MM
5457
5458 if (CLASSTYPE_EMPTY_P (t)
3db45ab5 5459 && tree_int_cst_lt (sizeof_biggest_empty_class,
c0572427
MM
5460 TYPE_SIZE_UNIT (t)))
5461 sizeof_biggest_empty_class = TYPE_SIZE_UNIT (t);
2ef16140 5462}
c35cce41 5463
af287697
MM
5464/* Determine the "key method" for the class type indicated by TYPE,
5465 and set CLASSTYPE_KEY_METHOD accordingly. */
9aad8f83 5466
af287697
MM
5467void
5468determine_key_method (tree type)
9aad8f83
MA
5469{
5470 tree method;
5471
5472 if (TYPE_FOR_JAVA (type)
5473 || processing_template_decl
5474 || CLASSTYPE_TEMPLATE_INSTANTIATION (type)
5475 || CLASSTYPE_INTERFACE_KNOWN (type))
af287697 5476 return;
9aad8f83 5477
af287697
MM
5478 /* The key method is the first non-pure virtual function that is not
5479 inline at the point of class definition. On some targets the
5480 key function may not be inline; those targets should not call
5481 this function until the end of the translation unit. */
9aad8f83 5482 for (method = TYPE_METHODS (type); method != NULL_TREE;
910ad8de 5483 method = DECL_CHAIN (method))
9aad8f83
MA
5484 if (DECL_VINDEX (method) != NULL_TREE
5485 && ! DECL_DECLARED_INLINE_P (method)
5486 && ! DECL_PURE_VIRTUAL_P (method))
af287697
MM
5487 {
5488 CLASSTYPE_KEY_METHOD (type) = method;
5489 break;
5490 }
9aad8f83 5491
af287697 5492 return;
9aad8f83
MA
5493}
5494
548502d3
MM
5495/* Perform processing required when the definition of T (a class type)
5496 is complete. */
2ef16140
MM
5497
5498void
94edc4ab 5499finish_struct_1 (tree t)
2ef16140
MM
5500{
5501 tree x;
00a17e31 5502 /* A TREE_LIST. The TREE_VALUE of each node is a FUNCTION_DECL. */
e6858a84 5503 tree virtuals = NULL_TREE;
2ef16140 5504 int n_fields = 0;
2ef16140 5505
d0f062fb 5506 if (COMPLETE_TYPE_P (t))
2ef16140 5507 {
9e1e64ec 5508 gcc_assert (MAYBE_CLASS_TYPE_P (t));
1f070f2b 5509 error ("redefinition of %q#T", t);
2ef16140
MM
5510 popclass ();
5511 return;
5512 }
5513
2ef16140
MM
5514 /* If this type was previously laid out as a forward reference,
5515 make sure we lay it out again. */
2ef16140 5516 TYPE_SIZE (t) = NULL_TREE;
911a71a7 5517 CLASSTYPE_PRIMARY_BINFO (t) = NULL_TREE;
2ef16140 5518
5ec1192e
MM
5519 /* Make assumptions about the class; we'll reset the flags if
5520 necessary. */
58731fd1
MM
5521 CLASSTYPE_EMPTY_P (t) = 1;
5522 CLASSTYPE_NEARLY_EMPTY_P (t) = 1;
5ec1192e 5523 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) = 0;
3b49d762 5524 CLASSTYPE_LITERAL_P (t) = true;
58731fd1 5525
2ef16140 5526 /* Do end-of-class semantic processing: checking the validity of the
03702748 5527 bases and members and add implicitly generated methods. */
58731fd1 5528 check_bases_and_members (t);
2ef16140 5529
f4f206f4 5530 /* Find the key method. */
a63996f1 5531 if (TYPE_CONTAINS_VPTR_P (t))
9aad8f83 5532 {
af287697
MM
5533 /* The Itanium C++ ABI permits the key method to be chosen when
5534 the class is defined -- even though the key method so
5535 selected may later turn out to be an inline function. On
5536 some systems (such as ARM Symbian OS) the key method cannot
5537 be determined until the end of the translation unit. On such
5538 systems, we leave CLASSTYPE_KEY_METHOD set to NULL, which
5539 will cause the class to be added to KEYED_CLASSES. Then, in
5540 finish_file we will determine the key method. */
5541 if (targetm.cxx.key_method_may_be_inline ())
5542 determine_key_method (t);
9aad8f83
MA
5543
5544 /* If a polymorphic class has no key method, we may emit the vtable
9bcb9aae 5545 in every translation unit where the class definition appears. */
9aad8f83
MA
5546 if (CLASSTYPE_KEY_METHOD (t) == NULL_TREE)
5547 keyed_classes = tree_cons (NULL_TREE, t, keyed_classes);
5548 }
5549
2ef16140 5550 /* Layout the class itself. */
e93ee644 5551 layout_class_type (t, &virtuals);
a0c68737
NS
5552 if (CLASSTYPE_AS_BASE (t) != t)
5553 /* We use the base type for trivial assignments, and hence it
5554 needs a mode. */
5555 compute_record_mode (CLASSTYPE_AS_BASE (t));
8ebeee52 5556
e93ee644 5557 virtuals = modify_all_vtables (t, nreverse (virtuals));
db5ae43f 5558
5e19c053 5559 /* If necessary, create the primary vtable for this class. */
e6858a84 5560 if (virtuals || TYPE_CONTAINS_VPTR_P (t))
8d08fdba 5561 {
8d08fdba 5562 /* We must enter these virtuals into the table. */
3ef397c1 5563 if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t))
da3d4dfa 5564 build_primary_vtable (NULL_TREE, t);
dbbf88d1 5565 else if (! BINFO_NEW_VTABLE_MARKED (TYPE_BINFO (t)))
0533d788
MM
5566 /* Here we know enough to change the type of our virtual
5567 function table, but we will wait until later this function. */
28531dd0 5568 build_primary_vtable (CLASSTYPE_PRIMARY_BINFO (t), t);
8d08fdba
MS
5569 }
5570
bbd15aac 5571 if (TYPE_CONTAINS_VPTR_P (t))
8d08fdba 5572 {
e93ee644
MM
5573 int vindex;
5574 tree fn;
5575
604a3205 5576 if (BINFO_VTABLE (TYPE_BINFO (t)))
50bc768d 5577 gcc_assert (DECL_VIRTUAL_P (BINFO_VTABLE (TYPE_BINFO (t))));
1eb4bea9 5578 if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t))
50bc768d 5579 gcc_assert (BINFO_VIRTUALS (TYPE_BINFO (t)) == NULL_TREE);
1eb4bea9 5580
e6858a84 5581 /* Add entries for virtual functions introduced by this class. */
604a3205
NS
5582 BINFO_VIRTUALS (TYPE_BINFO (t))
5583 = chainon (BINFO_VIRTUALS (TYPE_BINFO (t)), virtuals);
e93ee644
MM
5584
5585 /* Set DECL_VINDEX for all functions declared in this class. */
c8094d83
MS
5586 for (vindex = 0, fn = BINFO_VIRTUALS (TYPE_BINFO (t));
5587 fn;
5588 fn = TREE_CHAIN (fn),
e93ee644
MM
5589 vindex += (TARGET_VTABLE_USES_DESCRIPTORS
5590 ? TARGET_VTABLE_USES_DESCRIPTORS : 1))
4977bab6
ZW
5591 {
5592 tree fndecl = BV_FN (fn);
5593
5594 if (DECL_THUNK_P (fndecl))
5595 /* A thunk. We should never be calling this entry directly
5596 from this vtable -- we'd use the entry for the non
5597 thunk base function. */
5598 DECL_VINDEX (fndecl) = NULL_TREE;
5599 else if (TREE_CODE (DECL_VINDEX (fndecl)) != INTEGER_CST)
7d60be94 5600 DECL_VINDEX (fndecl) = build_int_cst (NULL_TREE, vindex);
4977bab6 5601 }
8d08fdba
MS
5602 }
5603
d2c5305b 5604 finish_struct_bits (t);
8d08fdba 5605
f30432d7
MS
5606 /* Complete the rtl for any static member objects of the type we're
5607 working on. */
910ad8de 5608 for (x = TYPE_FIELDS (t); x; x = DECL_CHAIN (x))
19e7881c 5609 if (TREE_CODE (x) == VAR_DECL && TREE_STATIC (x)
650fcd07 5610 && TREE_TYPE (x) != error_mark_node
c7f4981a 5611 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (x)), t))
19e7881c 5612 DECL_MODE (x) = TYPE_MODE (t);
8d08fdba 5613
f90cdf34 5614 /* Done with FIELDS...now decide whether to sort these for
58010b57 5615 faster lookups later.
f90cdf34 5616
6c73ad72 5617 We use a small number because most searches fail (succeeding
f90cdf34
MT
5618 ultimately as the search bores through the inheritance
5619 hierarchy), and we want this failure to occur quickly. */
5620
58010b57
MM
5621 n_fields = count_fields (TYPE_FIELDS (t));
5622 if (n_fields > 7)
f90cdf34 5623 {
a9429e29
LB
5624 struct sorted_fields_type *field_vec = ggc_alloc_sorted_fields_type
5625 (sizeof (struct sorted_fields_type) + n_fields * sizeof (tree));
d07605f5
AP
5626 field_vec->len = n_fields;
5627 add_fields_to_record_type (TYPE_FIELDS (t), field_vec, 0);
5628 qsort (field_vec->elts, n_fields, sizeof (tree),
17211ab5 5629 field_decl_cmp);
b97e8a14 5630 CLASSTYPE_SORTED_FIELDS (t) = field_vec;
f90cdf34
MT
5631 }
5632
b9e75696
JM
5633 /* Complain if one of the field types requires lower visibility. */
5634 constrain_class_visibility (t);
5635
8d7a5379
MM
5636 /* Make the rtl for any new vtables we have created, and unmark
5637 the base types we marked. */
5638 finish_vtbls (t);
c8094d83 5639
23656158
MM
5640 /* Build the VTT for T. */
5641 build_vtt (t);
8d7a5379 5642
f03e8526
MM
5643 /* This warning does not make sense for Java classes, since they
5644 cannot have destructors. */
5645 if (!TYPE_FOR_JAVA (t) && warn_nonvdtor && TYPE_POLYMORPHIC_P (t))
9fd8f60d 5646 {
9f4faeae
MM
5647 tree dtor;
5648
5649 dtor = CLASSTYPE_DESTRUCTORS (t);
9f4faeae
MM
5650 if (/* An implicitly declared destructor is always public. And,
5651 if it were virtual, we would have created it by now. */
5652 !dtor
5653 || (!DECL_VINDEX (dtor)
43f14744
PS
5654 && (/* public non-virtual */
5655 (!TREE_PRIVATE (dtor) && !TREE_PROTECTED (dtor))
5656 || (/* non-public non-virtual with friends */
5657 (TREE_PRIVATE (dtor) || TREE_PROTECTED (dtor))
5658 && (CLASSTYPE_FRIEND_CLASSES (t)
5659 || DECL_FRIENDLIST (TYPE_MAIN_DECL (t)))))))
5660 warning (OPT_Wnon_virtual_dtor,
5661 "%q#T has virtual functions and accessible"
5662 " non-virtual destructor", t);
9fd8f60d 5663 }
8d08fdba 5664
0154eaa8 5665 complete_vars (t);
8d08fdba 5666
9e9ff709
MS
5667 if (warn_overloaded_virtual)
5668 warn_hidden (t);
8d08fdba 5669
43d9ad1d
DS
5670 /* Class layout, assignment of virtual table slots, etc., is now
5671 complete. Give the back end a chance to tweak the visibility of
5672 the class or perform any other required target modifications. */
5673 targetm.cxx.adjust_class_at_definition (t);
5674
ae673f14 5675 maybe_suppress_debug_info (t);
8d08fdba 5676
b7442fb5 5677 dump_class_hierarchy (t);
c8094d83 5678
d2e5ee5c 5679 /* Finish debugging output for this type. */
881c6935 5680 rest_of_type_compilation (t, ! LOCAL_CLASS_P (t));
8d08fdba 5681}
f30432d7 5682
61a127b3
MM
5683/* When T was built up, the member declarations were added in reverse
5684 order. Rearrange them to declaration order. */
5685
5686void
94edc4ab 5687unreverse_member_declarations (tree t)
61a127b3
MM
5688{
5689 tree next;
5690 tree prev;
5691 tree x;
5692
7088fca9
KL
5693 /* The following lists are all in reverse order. Put them in
5694 declaration order now. */
61a127b3 5695 TYPE_METHODS (t) = nreverse (TYPE_METHODS (t));
7088fca9 5696 CLASSTYPE_DECL_LIST (t) = nreverse (CLASSTYPE_DECL_LIST (t));
61a127b3
MM
5697
5698 /* Actually, for the TYPE_FIELDS, only the non TYPE_DECLs are in
5699 reverse order, so we can't just use nreverse. */
5700 prev = NULL_TREE;
c8094d83
MS
5701 for (x = TYPE_FIELDS (t);
5702 x && TREE_CODE (x) != TYPE_DECL;
61a127b3
MM
5703 x = next)
5704 {
910ad8de
NF
5705 next = DECL_CHAIN (x);
5706 DECL_CHAIN (x) = prev;
61a127b3
MM
5707 prev = x;
5708 }
5709 if (prev)
5710 {
910ad8de 5711 DECL_CHAIN (TYPE_FIELDS (t)) = x;
61a127b3
MM
5712 if (prev)
5713 TYPE_FIELDS (t) = prev;
5714 }
5715}
5716
f30432d7 5717tree
94edc4ab 5718finish_struct (tree t, tree attributes)
f30432d7 5719{
82a98427 5720 location_t saved_loc = input_location;
1f0d71c5 5721
61a127b3
MM
5722 /* Now that we've got all the field declarations, reverse everything
5723 as necessary. */
5724 unreverse_member_declarations (t);
f30432d7 5725
91d231cb 5726 cplus_decl_attributes (&t, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
6467930b 5727
1f0d71c5
NS
5728 /* Nadger the current location so that diagnostics point to the start of
5729 the struct, not the end. */
f31686a3 5730 input_location = DECL_SOURCE_LOCATION (TYPE_NAME (t));
1f0d71c5 5731
5566b478 5732 if (processing_template_decl)
f30432d7 5733 {
7fb213d8
GB
5734 tree x;
5735
b0e0b31f 5736 finish_struct_methods (t);
867580ce 5737 TYPE_SIZE (t) = bitsize_zero_node;
ae54ec16 5738 TYPE_SIZE_UNIT (t) = size_zero_node;
7fb213d8
GB
5739
5740 /* We need to emit an error message if this type was used as a parameter
5741 and it is an abstract type, even if it is a template. We construct
5742 a simple CLASSTYPE_PURE_VIRTUALS list without taking bases into
5743 account and we call complete_vars with this type, which will check
5744 the PARM_DECLS. Note that while the type is being defined,
5745 CLASSTYPE_PURE_VIRTUALS contains the list of the inline friends
5746 (see CLASSTYPE_INLINE_FRIENDS) so we need to clear it. */
585b44d3 5747 CLASSTYPE_PURE_VIRTUALS (t) = NULL;
910ad8de 5748 for (x = TYPE_METHODS (t); x; x = DECL_CHAIN (x))
7fb213d8 5749 if (DECL_PURE_VIRTUAL_P (x))
d4e6fecb 5750 VEC_safe_push (tree, gc, CLASSTYPE_PURE_VIRTUALS (t), x);
7fb213d8 5751 complete_vars (t);
040ca4b3
JM
5752
5753 /* Remember current #pragma pack value. */
5754 TYPE_PRECISION (t) = maximum_field_alignment;
6f1b4c42 5755 }
f30432d7 5756 else
9f33663b 5757 finish_struct_1 (t);
5566b478 5758
82a98427 5759 input_location = saved_loc;
1f0d71c5 5760
5566b478 5761 TYPE_BEING_DEFINED (t) = 0;
8f032717 5762
5566b478 5763 if (current_class_type)
b74a0560 5764 popclass ();
5566b478 5765 else
357351e5 5766 error ("trying to finish struct, but kicked out due to previous parse errors");
5566b478 5767
5f261ba9
MM
5768 if (processing_template_decl && at_function_scope_p ())
5769 add_stmt (build_min (TAG_DEFN, t));
ae673f14 5770
5566b478 5771 return t;
f30432d7 5772}
8d08fdba 5773\f
51ddb82e 5774/* Return the dynamic type of INSTANCE, if known.
8d08fdba
MS
5775 Used to determine whether the virtual function table is needed
5776 or not.
5777
5778 *NONNULL is set iff INSTANCE can be known to be nonnull, regardless
97d953bb
MM
5779 of our knowledge of its type. *NONNULL should be initialized
5780 before this function is called. */
e92cc029 5781
d8e178a0 5782static tree
555551c2 5783fixed_type_or_null (tree instance, int *nonnull, int *cdtorp)
8d08fdba 5784{
555551c2
MM
5785#define RECUR(T) fixed_type_or_null((T), nonnull, cdtorp)
5786
8d08fdba
MS
5787 switch (TREE_CODE (instance))
5788 {
5789 case INDIRECT_REF:
608afcc5 5790 if (POINTER_TYPE_P (TREE_TYPE (instance)))
a0de9d20
JM
5791 return NULL_TREE;
5792 else
555551c2 5793 return RECUR (TREE_OPERAND (instance, 0));
a0de9d20 5794
8d08fdba
MS
5795 case CALL_EXPR:
5796 /* This is a call to a constructor, hence it's never zero. */
5797 if (TREE_HAS_CONSTRUCTOR (instance))
5798 {
5799 if (nonnull)
5800 *nonnull = 1;
51ddb82e 5801 return TREE_TYPE (instance);
8d08fdba 5802 }
51ddb82e 5803 return NULL_TREE;
8d08fdba
MS
5804
5805 case SAVE_EXPR:
5806 /* This is a call to a constructor, hence it's never zero. */
5807 if (TREE_HAS_CONSTRUCTOR (instance))
5808 {
5809 if (nonnull)
5810 *nonnull = 1;
51ddb82e 5811 return TREE_TYPE (instance);
8d08fdba 5812 }
555551c2 5813 return RECUR (TREE_OPERAND (instance, 0));
8d08fdba 5814
5be014d5 5815 case POINTER_PLUS_EXPR:
8d08fdba
MS
5816 case PLUS_EXPR:
5817 case MINUS_EXPR:
394fd776 5818 if (TREE_CODE (TREE_OPERAND (instance, 0)) == ADDR_EXPR)
555551c2 5819 return RECUR (TREE_OPERAND (instance, 0));
8d08fdba
MS
5820 if (TREE_CODE (TREE_OPERAND (instance, 1)) == INTEGER_CST)
5821 /* Propagate nonnull. */
555551c2
MM
5822 return RECUR (TREE_OPERAND (instance, 0));
5823
51ddb82e 5824 return NULL_TREE;
8d08fdba 5825
63a906f0 5826 CASE_CONVERT:
555551c2 5827 return RECUR (TREE_OPERAND (instance, 0));
8d08fdba
MS
5828
5829 case ADDR_EXPR:
88f19756 5830 instance = TREE_OPERAND (instance, 0);
8d08fdba 5831 if (nonnull)
88f19756
RH
5832 {
5833 /* Just because we see an ADDR_EXPR doesn't mean we're dealing
5834 with a real object -- given &p->f, p can still be null. */
5835 tree t = get_base_address (instance);
5836 /* ??? Probably should check DECL_WEAK here. */
5837 if (t && DECL_P (t))
5838 *nonnull = 1;
5839 }
555551c2 5840 return RECUR (instance);
8d08fdba
MS
5841
5842 case COMPONENT_REF:
642124c6
RH
5843 /* If this component is really a base class reference, then the field
5844 itself isn't definitive. */
5845 if (DECL_FIELD_IS_BASE (TREE_OPERAND (instance, 1)))
555551c2
MM
5846 return RECUR (TREE_OPERAND (instance, 0));
5847 return RECUR (TREE_OPERAND (instance, 1));
8d08fdba 5848
8d08fdba
MS
5849 case VAR_DECL:
5850 case FIELD_DECL:
5851 if (TREE_CODE (TREE_TYPE (instance)) == ARRAY_TYPE
9e1e64ec 5852 && MAYBE_CLASS_TYPE_P (TREE_TYPE (TREE_TYPE (instance))))
8d08fdba
MS
5853 {
5854 if (nonnull)
5855 *nonnull = 1;
51ddb82e 5856 return TREE_TYPE (TREE_TYPE (instance));
8d08fdba 5857 }
e92cc029 5858 /* fall through... */
8d08fdba
MS
5859 case TARGET_EXPR:
5860 case PARM_DECL:
f63ab951 5861 case RESULT_DECL:
9e1e64ec 5862 if (MAYBE_CLASS_TYPE_P (TREE_TYPE (instance)))
8d08fdba
MS
5863 {
5864 if (nonnull)
5865 *nonnull = 1;
51ddb82e 5866 return TREE_TYPE (instance);
8d08fdba 5867 }
394fd776 5868 else if (instance == current_class_ptr)
0cbd7506
MS
5869 {
5870 if (nonnull)
5871 *nonnull = 1;
5872
5873 /* if we're in a ctor or dtor, we know our type. */
5874 if (DECL_LANG_SPECIFIC (current_function_decl)
5875 && (DECL_CONSTRUCTOR_P (current_function_decl)
5876 || DECL_DESTRUCTOR_P (current_function_decl)))
5877 {
5878 if (cdtorp)
5879 *cdtorp = 1;
5880 return TREE_TYPE (TREE_TYPE (instance));
5881 }
5882 }
394fd776 5883 else if (TREE_CODE (TREE_TYPE (instance)) == REFERENCE_TYPE)
0cbd7506 5884 {
555551c2
MM
5885 /* We only need one hash table because it is always left empty. */
5886 static htab_t ht;
5887 if (!ht)
5888 ht = htab_create (37,
5889 htab_hash_pointer,
5890 htab_eq_pointer,
5891 /*htab_del=*/NULL);
5892
0cbd7506
MS
5893 /* Reference variables should be references to objects. */
5894 if (nonnull)
8d08fdba 5895 *nonnull = 1;
c8094d83 5896
555551c2 5897 /* Enter the INSTANCE in a table to prevent recursion; a
772f8889
MM
5898 variable's initializer may refer to the variable
5899 itself. */
c8094d83 5900 if (TREE_CODE (instance) == VAR_DECL
772f8889 5901 && DECL_INITIAL (instance)
555551c2 5902 && !htab_find (ht, instance))
772f8889
MM
5903 {
5904 tree type;
555551c2
MM
5905 void **slot;
5906
5907 slot = htab_find_slot (ht, instance, INSERT);
5908 *slot = instance;
5909 type = RECUR (DECL_INITIAL (instance));
e656a465 5910 htab_remove_elt (ht, instance);
555551c2 5911
772f8889
MM
5912 return type;
5913 }
8d08fdba 5914 }
51ddb82e 5915 return NULL_TREE;
8d08fdba
MS
5916
5917 default:
51ddb82e 5918 return NULL_TREE;
8d08fdba 5919 }
555551c2 5920#undef RECUR
8d08fdba 5921}
51ddb82e 5922
838dfd8a 5923/* Return nonzero if the dynamic type of INSTANCE is known, and
338d90b8
NS
5924 equivalent to the static type. We also handle the case where
5925 INSTANCE is really a pointer. Return negative if this is a
5926 ctor/dtor. There the dynamic type is known, but this might not be
5927 the most derived base of the original object, and hence virtual
5928 bases may not be layed out according to this type.
51ddb82e
JM
5929
5930 Used to determine whether the virtual function table is needed
5931 or not.
5932
5933 *NONNULL is set iff INSTANCE can be known to be nonnull, regardless
97d953bb
MM
5934 of our knowledge of its type. *NONNULL should be initialized
5935 before this function is called. */
51ddb82e
JM
5936
5937int
94edc4ab 5938resolves_to_fixed_type_p (tree instance, int* nonnull)
51ddb82e
JM
5939{
5940 tree t = TREE_TYPE (instance);
394fd776 5941 int cdtorp = 0;
394fd776 5942 tree fixed = fixed_type_or_null (instance, nonnull, &cdtorp);
51ddb82e
JM
5943 if (fixed == NULL_TREE)
5944 return 0;
5945 if (POINTER_TYPE_P (t))
5946 t = TREE_TYPE (t);
394fd776
NS
5947 if (!same_type_ignoring_top_level_qualifiers_p (t, fixed))
5948 return 0;
5949 return cdtorp ? -1 : 1;
51ddb82e
JM
5950}
5951
8d08fdba
MS
5952\f
5953void
94edc4ab 5954init_class_processing (void)
8d08fdba
MS
5955{
5956 current_class_depth = 0;
61a127b3 5957 current_class_stack_size = 10;
c8094d83 5958 current_class_stack
0ac1b889 5959 = XNEWVEC (struct class_stack_node, current_class_stack_size);
806aa901 5960 local_classes = VEC_alloc (tree, gc, 8);
c5a35c3c 5961 sizeof_biggest_empty_class = size_zero_node;
8d08fdba 5962
0e5921e8
ZW
5963 ridpointers[(int) RID_PUBLIC] = access_public_node;
5964 ridpointers[(int) RID_PRIVATE] = access_private_node;
5965 ridpointers[(int) RID_PROTECTED] = access_protected_node;
8d08fdba
MS
5966}
5967
39fb05d0
MM
5968/* Restore the cached PREVIOUS_CLASS_LEVEL. */
5969
5970static void
5971restore_class_cache (void)
5972{
39fb05d0 5973 tree type;
39fb05d0
MM
5974
5975 /* We are re-entering the same class we just left, so we don't
5976 have to search the whole inheritance matrix to find all the
5977 decls to bind again. Instead, we install the cached
5978 class_shadowed list and walk through it binding names. */
5979 push_binding_level (previous_class_level);
5980 class_binding_level = previous_class_level;
39fb05d0 5981 /* Restore IDENTIFIER_TYPE_VALUE. */
c8094d83
MS
5982 for (type = class_binding_level->type_shadowed;
5983 type;
39fb05d0
MM
5984 type = TREE_CHAIN (type))
5985 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (type), TREE_TYPE (type));
5986}
5987
a723baf1
MM
5988/* Set global variables CURRENT_CLASS_NAME and CURRENT_CLASS_TYPE as
5989 appropriate for TYPE.
8d08fdba 5990
8d08fdba
MS
5991 So that we may avoid calls to lookup_name, we cache the _TYPE
5992 nodes of local TYPE_DECLs in the TREE_TYPE field of the name.
5993
5994 For multiple inheritance, we perform a two-pass depth-first search
39fb05d0 5995 of the type lattice. */
8d08fdba
MS
5996
5997void
29370796 5998pushclass (tree type)
8d08fdba 5999{
c888c93b
MM
6000 class_stack_node_t csn;
6001
7fb4a8f7 6002 type = TYPE_MAIN_VARIANT (type);
8d08fdba 6003
61a127b3 6004 /* Make sure there is enough room for the new entry on the stack. */
c8094d83 6005 if (current_class_depth + 1 >= current_class_stack_size)
8d08fdba 6006 {
61a127b3
MM
6007 current_class_stack_size *= 2;
6008 current_class_stack
7767580e 6009 = XRESIZEVEC (struct class_stack_node, current_class_stack,
3db45ab5 6010 current_class_stack_size);
8d08fdba
MS
6011 }
6012
61a127b3 6013 /* Insert a new entry on the class stack. */
c888c93b
MM
6014 csn = current_class_stack + current_class_depth;
6015 csn->name = current_class_name;
6016 csn->type = current_class_type;
6017 csn->access = current_access_specifier;
6018 csn->names_used = 0;
6019 csn->hidden = 0;
61a127b3
MM
6020 current_class_depth++;
6021
6022 /* Now set up the new type. */
8d08fdba
MS
6023 current_class_name = TYPE_NAME (type);
6024 if (TREE_CODE (current_class_name) == TYPE_DECL)
6025 current_class_name = DECL_NAME (current_class_name);
6026 current_class_type = type;
6027
61a127b3
MM
6028 /* By default, things in classes are private, while things in
6029 structures or unions are public. */
c8094d83
MS
6030 current_access_specifier = (CLASSTYPE_DECLARED_CLASS (type)
6031 ? access_private_node
61a127b3
MM
6032 : access_public_node);
6033
89b578be
MM
6034 if (previous_class_level
6035 && type != previous_class_level->this_entity
8d08fdba
MS
6036 && current_class_depth == 1)
6037 {
6038 /* Forcibly remove any old class remnants. */
8f032717 6039 invalidate_class_lookup_cache ();
8d08fdba
MS
6040 }
6041
c8094d83 6042 if (!previous_class_level
89b578be
MM
6043 || type != previous_class_level->this_entity
6044 || current_class_depth > 1)
90ea9897 6045 pushlevel_class ();
29370796 6046 else
39fb05d0 6047 restore_class_cache ();
8f032717
MM
6048}
6049
39fb05d0
MM
6050/* When we exit a toplevel class scope, we save its binding level so
6051 that we can restore it quickly. Here, we've entered some other
6052 class, so we must invalidate our cache. */
8d08fdba 6053
8f032717 6054void
94edc4ab 6055invalidate_class_lookup_cache (void)
8f032717 6056{
89b578be 6057 previous_class_level = NULL;
8d08fdba 6058}
c8094d83 6059
8d08fdba 6060/* Get out of the current class scope. If we were in a class scope
b74a0560 6061 previously, that is the one popped to. */
e92cc029 6062
8d08fdba 6063void
94edc4ab 6064popclass (void)
8d08fdba 6065{
273a708f 6066 poplevel_class ();
8d08fdba
MS
6067
6068 current_class_depth--;
61a127b3
MM
6069 current_class_name = current_class_stack[current_class_depth].name;
6070 current_class_type = current_class_stack[current_class_depth].type;
6071 current_access_specifier = current_class_stack[current_class_depth].access;
8f032717
MM
6072 if (current_class_stack[current_class_depth].names_used)
6073 splay_tree_delete (current_class_stack[current_class_depth].names_used);
8d08fdba
MS
6074}
6075
c888c93b
MM
6076/* Mark the top of the class stack as hidden. */
6077
6078void
6079push_class_stack (void)
6080{
6081 if (current_class_depth)
6082 ++current_class_stack[current_class_depth - 1].hidden;
6083}
6084
6085/* Mark the top of the class stack as un-hidden. */
6086
6087void
6088pop_class_stack (void)
6089{
6090 if (current_class_depth)
6091 --current_class_stack[current_class_depth - 1].hidden;
6092}
6093
fa6098f8
MM
6094/* Returns 1 if the class type currently being defined is either T or
6095 a nested type of T. */
b9082e8a 6096
fa6098f8 6097bool
94edc4ab 6098currently_open_class (tree t)
b9082e8a
JM
6099{
6100 int i;
fa6098f8 6101
1cb801bc
JM
6102 if (!CLASS_TYPE_P (t))
6103 return false;
6104
3e5e84be
JM
6105 t = TYPE_MAIN_VARIANT (t);
6106
fa6098f8
MM
6107 /* We start looking from 1 because entry 0 is from global scope,
6108 and has no type. */
6109 for (i = current_class_depth; i > 0; --i)
c888c93b 6110 {
fa6098f8
MM
6111 tree c;
6112 if (i == current_class_depth)
6113 c = current_class_type;
6114 else
6115 {
6116 if (current_class_stack[i].hidden)
6117 break;
6118 c = current_class_stack[i].type;
6119 }
6120 if (!c)
6121 continue;
6122 if (same_type_p (c, t))
6123 return true;
c888c93b 6124 }
fa6098f8 6125 return false;
b9082e8a
JM
6126}
6127
70adf8a9
JM
6128/* If either current_class_type or one of its enclosing classes are derived
6129 from T, return the appropriate type. Used to determine how we found
6130 something via unqualified lookup. */
6131
6132tree
94edc4ab 6133currently_open_derived_class (tree t)
70adf8a9
JM
6134{
6135 int i;
6136
9bcb9aae 6137 /* The bases of a dependent type are unknown. */
1fb3244a
MM
6138 if (dependent_type_p (t))
6139 return NULL_TREE;
6140
c44e68a5
KL
6141 if (!current_class_type)
6142 return NULL_TREE;
6143
70adf8a9
JM
6144 if (DERIVED_FROM_P (t, current_class_type))
6145 return current_class_type;
6146
6147 for (i = current_class_depth - 1; i > 0; --i)
c888c93b
MM
6148 {
6149 if (current_class_stack[i].hidden)
6150 break;
6151 if (DERIVED_FROM_P (t, current_class_stack[i].type))
6152 return current_class_stack[i].type;
6153 }
70adf8a9
JM
6154
6155 return NULL_TREE;
6156}
6157
a6846853
JM
6158/* Returns the innermost class type which is not a lambda closure type. */
6159
6160tree
6161current_nonlambda_class_type (void)
6162{
6163 int i;
6164
6165 /* We start looking from 1 because entry 0 is from global scope,
6166 and has no type. */
6167 for (i = current_class_depth; i > 0; --i)
6168 {
6169 tree c;
6170 if (i == current_class_depth)
6171 c = current_class_type;
6172 else
6173 {
6174 if (current_class_stack[i].hidden)
6175 break;
6176 c = current_class_stack[i].type;
6177 }
6178 if (!c)
6179 continue;
6180 if (!LAMBDA_TYPE_P (c))
6181 return c;
6182 }
6183 return NULL_TREE;
6184}
6185
8d08fdba 6186/* When entering a class scope, all enclosing class scopes' names with
14d22dd6
MM
6187 static meaning (static variables, static functions, types and
6188 enumerators) have to be visible. This recursive function calls
6189 pushclass for all enclosing class contexts until global or a local
6190 scope is reached. TYPE is the enclosed class. */
8d08fdba
MS
6191
6192void
14d22dd6 6193push_nested_class (tree type)
8d08fdba 6194{
b262d64c 6195 /* A namespace might be passed in error cases, like A::B:C. */
c8094d83 6196 if (type == NULL_TREE
56d0c6e3 6197 || !CLASS_TYPE_P (type))
a28e3c7f 6198 return;
c8094d83 6199
56d0c6e3 6200 push_nested_class (DECL_CONTEXT (TYPE_MAIN_DECL (type)));
8d08fdba 6201
29370796 6202 pushclass (type);
8d08fdba
MS
6203}
6204
a723baf1 6205/* Undoes a push_nested_class call. */
8d08fdba
MS
6206
6207void
94edc4ab 6208pop_nested_class (void)
8d08fdba 6209{
d2e5ee5c 6210 tree context = DECL_CONTEXT (TYPE_MAIN_DECL (current_class_type));
8d08fdba 6211
b74a0560 6212 popclass ();
6b400b21 6213 if (context && CLASS_TYPE_P (context))
b74a0560 6214 pop_nested_class ();
8d08fdba
MS
6215}
6216
46ccf50a
JM
6217/* Returns the number of extern "LANG" blocks we are nested within. */
6218
6219int
94edc4ab 6220current_lang_depth (void)
46ccf50a 6221{
aff44741 6222 return VEC_length (tree, current_lang_base);
46ccf50a
JM
6223}
6224
8d08fdba
MS
6225/* Set global variables CURRENT_LANG_NAME to appropriate value
6226 so that behavior of name-mangling machinery is correct. */
6227
6228void
94edc4ab 6229push_lang_context (tree name)
8d08fdba 6230{
aff44741 6231 VEC_safe_push (tree, gc, current_lang_base, current_lang_name);
8d08fdba 6232
e229f2cd 6233 if (name == lang_name_cplusplus)
8d08fdba 6234 {
8d08fdba
MS
6235 current_lang_name = name;
6236 }
e229f2cd
PB
6237 else if (name == lang_name_java)
6238 {
e229f2cd
PB
6239 current_lang_name = name;
6240 /* DECL_IGNORED_P is initially set for these types, to avoid clutter.
6241 (See record_builtin_java_type in decl.c.) However, that causes
6242 incorrect debug entries if these types are actually used.
00a17e31 6243 So we re-enable debug output after extern "Java". */
e3cd9945
APB
6244 DECL_IGNORED_P (TYPE_NAME (java_byte_type_node)) = 0;
6245 DECL_IGNORED_P (TYPE_NAME (java_short_type_node)) = 0;
6246 DECL_IGNORED_P (TYPE_NAME (java_int_type_node)) = 0;
6247 DECL_IGNORED_P (TYPE_NAME (java_long_type_node)) = 0;
6248 DECL_IGNORED_P (TYPE_NAME (java_float_type_node)) = 0;
6249 DECL_IGNORED_P (TYPE_NAME (java_double_type_node)) = 0;
6250 DECL_IGNORED_P (TYPE_NAME (java_char_type_node)) = 0;
6251 DECL_IGNORED_P (TYPE_NAME (java_boolean_type_node)) = 0;
e229f2cd 6252 }
8d08fdba
MS
6253 else if (name == lang_name_c)
6254 {
8d08fdba
MS
6255 current_lang_name = name;
6256 }
6257 else
9e637a26 6258 error ("language string %<\"%E\"%> not recognized", name);
8d08fdba 6259}
c8094d83 6260
8d08fdba 6261/* Get out of the current language scope. */
e92cc029 6262
8d08fdba 6263void
94edc4ab 6264pop_lang_context (void)
8d08fdba 6265{
aff44741 6266 current_lang_name = VEC_pop (tree, current_lang_base);
8d08fdba 6267}
8d08fdba
MS
6268\f
6269/* Type instantiation routines. */
6270
104bf76a
MM
6271/* Given an OVERLOAD and a TARGET_TYPE, return the function that
6272 matches the TARGET_TYPE. If there is no satisfactory match, return
eff3a276
MM
6273 error_mark_node, and issue an error & warning messages under
6274 control of FLAGS. Permit pointers to member function if FLAGS
6275 permits. If TEMPLATE_ONLY, the name of the overloaded function was
6276 a template-id, and EXPLICIT_TARGS are the explicitly provided
248e1b22
MM
6277 template arguments.
6278
6279 If OVERLOAD is for one or more member functions, then ACCESS_PATH
6280 is the base path used to reference those member functions. If
6281 TF_NO_ACCESS_CONTROL is not set in FLAGS, and the address is
6282 resolved to a member function, access checks will be performed and
6283 errors issued if appropriate. */
104bf76a 6284
2c73f9f5 6285static tree
c8094d83 6286resolve_address_of_overloaded_function (tree target_type,
94edc4ab 6287 tree overload,
92af500d
NS
6288 tsubst_flags_t flags,
6289 bool template_only,
eff3a276
MM
6290 tree explicit_targs,
6291 tree access_path)
2c73f9f5 6292{
104bf76a 6293 /* Here's what the standard says:
c8094d83 6294
104bf76a
MM
6295 [over.over]
6296
6297 If the name is a function template, template argument deduction
6298 is done, and if the argument deduction succeeds, the deduced
6299 arguments are used to generate a single template function, which
6300 is added to the set of overloaded functions considered.
6301
6302 Non-member functions and static member functions match targets of
6303 type "pointer-to-function" or "reference-to-function." Nonstatic
6304 member functions match targets of type "pointer-to-member
6305 function;" the function type of the pointer to member is used to
6306 select the member function from the set of overloaded member
6307 functions. If a nonstatic member function is selected, the
6308 reference to the overloaded function name is required to have the
6309 form of a pointer to member as described in 5.3.1.
6310
6311 If more than one function is selected, any template functions in
6312 the set are eliminated if the set also contains a non-template
6313 function, and any given template function is eliminated if the
6314 set contains a second template function that is more specialized
6315 than the first according to the partial ordering rules 14.5.5.2.
6316 After such eliminations, if any, there shall remain exactly one
6317 selected function. */
6318
6319 int is_ptrmem = 0;
104bf76a
MM
6320 /* We store the matches in a TREE_LIST rooted here. The functions
6321 are the TREE_PURPOSE, not the TREE_VALUE, in this list, for easy
6322 interoperability with most_specialized_instantiation. */
6323 tree matches = NULL_TREE;
50714e79 6324 tree fn;
7bead48f 6325 tree target_fn_type;
104bf76a 6326
d8f8dca1
MM
6327 /* By the time we get here, we should be seeing only real
6328 pointer-to-member types, not the internal POINTER_TYPE to
6329 METHOD_TYPE representation. */
50bc768d
NS
6330 gcc_assert (TREE_CODE (target_type) != POINTER_TYPE
6331 || TREE_CODE (TREE_TYPE (target_type)) != METHOD_TYPE);
104bf76a 6332
50bc768d 6333 gcc_assert (is_overloaded_fn (overload));
c8094d83 6334
104bf76a
MM
6335 /* Check that the TARGET_TYPE is reasonable. */
6336 if (TYPE_PTRFN_P (target_type))
381ddaa6 6337 /* This is OK. */;
104bf76a
MM
6338 else if (TYPE_PTRMEMFUNC_P (target_type))
6339 /* This is OK, too. */
6340 is_ptrmem = 1;
6341 else if (TREE_CODE (target_type) == FUNCTION_TYPE)
db80e34e
JJ
6342 /* This is OK, too. This comes from a conversion to reference
6343 type. */
6344 target_type = build_reference_type (target_type);
c8094d83 6345 else
104bf76a 6346 {
92af500d 6347 if (flags & tf_error)
c4f73174 6348 error ("cannot resolve overloaded function %qD based on"
0cbd7506
MS
6349 " conversion to type %qT",
6350 DECL_NAME (OVL_FUNCTION (overload)), target_type);
104bf76a
MM
6351 return error_mark_node;
6352 }
c8094d83 6353
7bead48f
JM
6354 /* Non-member functions and static member functions match targets of type
6355 "pointer-to-function" or "reference-to-function." Nonstatic member
6356 functions match targets of type "pointer-to-member-function;" the
6357 function type of the pointer to member is used to select the member
6358 function from the set of overloaded member functions.
6359
6360 So figure out the FUNCTION_TYPE that we want to match against. */
6361 target_fn_type = static_fn_type (target_type);
6362
104bf76a
MM
6363 /* If we can find a non-template function that matches, we can just
6364 use it. There's no point in generating template instantiations
6365 if we're just going to throw them out anyhow. But, of course, we
6366 can only do this when we don't *need* a template function. */
6367 if (!template_only)
6368 {
6369 tree fns;
6370
a723baf1 6371 for (fns = overload; fns; fns = OVL_NEXT (fns))
104bf76a 6372 {
a723baf1 6373 tree fn = OVL_CURRENT (fns);
2c73f9f5 6374
104bf76a
MM
6375 if (TREE_CODE (fn) == TEMPLATE_DECL)
6376 /* We're not looking for templates just yet. */
6377 continue;
6378
6379 if ((TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
6380 != is_ptrmem)
6381 /* We're looking for a non-static member, and this isn't
6382 one, or vice versa. */
6383 continue;
34ff2673 6384
d63d5d0c
ILT
6385 /* Ignore functions which haven't been explicitly
6386 declared. */
34ff2673
RS
6387 if (DECL_ANTICIPATED (fn))
6388 continue;
6389
104bf76a 6390 /* See if there's a match. */
7bead48f 6391 if (same_type_p (target_fn_type, static_fn_type (fn)))
e1b3e07d 6392 matches = tree_cons (fn, NULL_TREE, matches);
104bf76a
MM
6393 }
6394 }
6395
6396 /* Now, if we've already got a match (or matches), there's no need
6397 to proceed to the template functions. But, if we don't have a
6398 match we need to look at them, too. */
c8094d83 6399 if (!matches)
2c73f9f5 6400 {
104bf76a 6401 tree target_arg_types;
8d3631f8 6402 tree target_ret_type;
104bf76a 6403 tree fns;
c166b898
ILT
6404 tree *args;
6405 unsigned int nargs, ia;
6406 tree arg;
104bf76a 6407
4393e105 6408 target_arg_types = TYPE_ARG_TYPES (target_fn_type);
8d3631f8 6409 target_ret_type = TREE_TYPE (target_fn_type);
e5214479 6410
c166b898
ILT
6411 nargs = list_length (target_arg_types);
6412 args = XALLOCAVEC (tree, nargs);
6413 for (arg = target_arg_types, ia = 0;
6414 arg != NULL_TREE && arg != void_list_node;
6415 arg = TREE_CHAIN (arg), ++ia)
6416 args[ia] = TREE_VALUE (arg);
6417 nargs = ia;
6418
a723baf1 6419 for (fns = overload; fns; fns = OVL_NEXT (fns))
104bf76a 6420 {
a723baf1 6421 tree fn = OVL_CURRENT (fns);
104bf76a 6422 tree instantiation;
104bf76a
MM
6423 tree targs;
6424
6425 if (TREE_CODE (fn) != TEMPLATE_DECL)
6426 /* We're only looking for templates. */
6427 continue;
6428
6429 if ((TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
6430 != is_ptrmem)
4393e105 6431 /* We're not looking for a non-static member, and this is
104bf76a
MM
6432 one, or vice versa. */
6433 continue;
6434
104bf76a 6435 /* Try to do argument deduction. */
f31c0a32 6436 targs = make_tree_vec (DECL_NTPARMS (fn));
c166b898
ILT
6437 if (fn_type_unification (fn, explicit_targs, targs, args, nargs,
6438 target_ret_type, DEDUCE_EXACT,
6439 LOOKUP_NORMAL))
104bf76a
MM
6440 /* Argument deduction failed. */
6441 continue;
6442
6443 /* Instantiate the template. */
92af500d 6444 instantiation = instantiate_template (fn, targs, flags);
104bf76a
MM
6445 if (instantiation == error_mark_node)
6446 /* Instantiation failed. */
6447 continue;
6448
6449 /* See if there's a match. */
7bead48f 6450 if (same_type_p (target_fn_type, static_fn_type (instantiation)))
e1b3e07d 6451 matches = tree_cons (instantiation, fn, matches);
104bf76a
MM
6452 }
6453
6454 /* Now, remove all but the most specialized of the matches. */
6455 if (matches)
6456 {
e5214479 6457 tree match = most_specialized_instantiation (matches);
104bf76a
MM
6458
6459 if (match != error_mark_node)
3db45ab5
MS
6460 matches = tree_cons (TREE_PURPOSE (match),
6461 NULL_TREE,
7ca383e6 6462 NULL_TREE);
104bf76a
MM
6463 }
6464 }
6465
6466 /* Now we should have exactly one function in MATCHES. */
6467 if (matches == NULL_TREE)
6468 {
6469 /* There were *no* matches. */
92af500d 6470 if (flags & tf_error)
104bf76a 6471 {
0cbd7506 6472 error ("no matches converting function %qD to type %q#T",
95e20768 6473 DECL_NAME (OVL_CURRENT (overload)),
0cbd7506 6474 target_type);
6b9b6b15
JM
6475
6476 /* print_candidates expects a chain with the functions in
0cbd7506
MS
6477 TREE_VALUE slots, so we cons one up here (we're losing anyway,
6478 so why be clever?). */
6479 for (; overload; overload = OVL_NEXT (overload))
6480 matches = tree_cons (NULL_TREE, OVL_CURRENT (overload),
e1b3e07d 6481 matches);
c8094d83 6482
6b9b6b15 6483 print_candidates (matches);
104bf76a
MM
6484 }
6485 return error_mark_node;
2c73f9f5 6486 }
104bf76a
MM
6487 else if (TREE_CHAIN (matches))
6488 {
e04c614e
JM
6489 /* There were too many matches. First check if they're all
6490 the same function. */
6491 tree match;
104bf76a 6492
e04c614e
JM
6493 fn = TREE_PURPOSE (matches);
6494 for (match = TREE_CHAIN (matches); match; match = TREE_CHAIN (match))
c4bcc71f 6495 if (!decls_match (fn, TREE_PURPOSE (match)))
e04c614e
JM
6496 break;
6497
6498 if (match)
104bf76a 6499 {
e04c614e
JM
6500 if (flags & tf_error)
6501 {
6502 error ("converting overloaded function %qD to type %q#T is ambiguous",
6503 DECL_NAME (OVL_FUNCTION (overload)),
6504 target_type);
104bf76a 6505
e04c614e
JM
6506 /* Since print_candidates expects the functions in the
6507 TREE_VALUE slot, we flip them here. */
6508 for (match = matches; match; match = TREE_CHAIN (match))
6509 TREE_VALUE (match) = TREE_PURPOSE (match);
104bf76a 6510
e04c614e
JM
6511 print_candidates (matches);
6512 }
104bf76a 6513
e04c614e 6514 return error_mark_node;
104bf76a 6515 }
104bf76a
MM
6516 }
6517
50714e79
MM
6518 /* Good, exactly one match. Now, convert it to the correct type. */
6519 fn = TREE_PURPOSE (matches);
6520
b1ce3eb2 6521 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
92af500d 6522 && !(flags & tf_ptrmem_ok) && !flag_ms_extensions)
19420d00 6523 {
b1ce3eb2 6524 static int explained;
c8094d83 6525
92af500d 6526 if (!(flags & tf_error))
0cbd7506 6527 return error_mark_node;
19420d00 6528
cbe5f3b3 6529 permerror (input_location, "assuming pointer to member %qD", fn);
b1ce3eb2 6530 if (!explained)
0cbd7506 6531 {
1f5b3869 6532 inform (input_location, "(a pointer to member can only be formed with %<&%E%>)", fn);
0cbd7506
MS
6533 explained = 1;
6534 }
19420d00 6535 }
84583208
MM
6536
6537 /* If we're doing overload resolution purely for the purpose of
6538 determining conversion sequences, we should not consider the
6539 function used. If this conversion sequence is selected, the
6540 function will be marked as used at this point. */
6541 if (!(flags & tf_conv))
eff3a276 6542 {
4ad610c9
JM
6543 /* Make =delete work with SFINAE. */
6544 if (DECL_DELETED_FN (fn) && !(flags & tf_error))
6545 return error_mark_node;
6546
eff3a276 6547 mark_used (fn);
248e1b22
MM
6548 }
6549
6550 /* We could not check access to member functions when this
6551 expression was originally created since we did not know at that
6552 time to which function the expression referred. */
6553 if (!(flags & tf_no_access_control)
6554 && DECL_FUNCTION_MEMBER_P (fn))
6555 {
6556 gcc_assert (access_path);
6557 perform_or_defer_access_check (access_path, fn, fn);
eff3a276 6558 }
a6ecf8b6 6559
50714e79 6560 if (TYPE_PTRFN_P (target_type) || TYPE_PTRMEMFUNC_P (target_type))
93c0e0bb 6561 return cp_build_addr_expr (fn, flags);
50714e79
MM
6562 else
6563 {
5ade1ed2 6564 /* The target must be a REFERENCE_TYPE. Above, cp_build_unary_op
50714e79
MM
6565 will mark the function as addressed, but here we must do it
6566 explicitly. */
dffd7eb6 6567 cxx_mark_addressable (fn);
50714e79
MM
6568
6569 return fn;
6570 }
2c73f9f5
ML
6571}
6572
ec255269
MS
6573/* This function will instantiate the type of the expression given in
6574 RHS to match the type of LHSTYPE. If errors exist, then return
92af500d 6575 error_mark_node. FLAGS is a bit mask. If TF_ERROR is set, then
5e76004e
NS
6576 we complain on errors. If we are not complaining, never modify rhs,
6577 as overload resolution wants to try many possible instantiations, in
6578 the hope that at least one will work.
c8094d83 6579
e6e174e5
JM
6580 For non-recursive calls, LHSTYPE should be a function, pointer to
6581 function, or a pointer to member function. */
e92cc029 6582
8d08fdba 6583tree
94edc4ab 6584instantiate_type (tree lhstype, tree rhs, tsubst_flags_t flags)
8d08fdba 6585{
92af500d 6586 tsubst_flags_t flags_in = flags;
eff3a276 6587 tree access_path = NULL_TREE;
c8094d83 6588
c2ea3a40 6589 flags &= ~tf_ptrmem_ok;
c8094d83 6590
fbfc8363 6591 if (lhstype == unknown_type_node)
8d08fdba 6592 {
92af500d 6593 if (flags & tf_error)
8251199e 6594 error ("not enough type information");
8d08fdba
MS
6595 return error_mark_node;
6596 }
6597
6598 if (TREE_TYPE (rhs) != NULL_TREE && ! (type_unknown_p (rhs)))
abff8e06 6599 {
8f4b394d 6600 if (same_type_p (lhstype, TREE_TYPE (rhs)))
abff8e06 6601 return rhs;
c8094d83 6602 if (flag_ms_extensions
a723baf1
MM
6603 && TYPE_PTRMEMFUNC_P (lhstype)
6604 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (rhs)))
6605 /* Microsoft allows `A::f' to be resolved to a
6606 pointer-to-member. */
6607 ;
6608 else
6609 {
92af500d 6610 if (flags & tf_error)
1f070f2b 6611 error ("argument of type %qT does not match %qT",
a723baf1
MM
6612 TREE_TYPE (rhs), lhstype);
6613 return error_mark_node;
6614 }
abff8e06 6615 }
8d08fdba 6616
50ad9642 6617 if (TREE_CODE (rhs) == BASELINK)
eff3a276
MM
6618 {
6619 access_path = BASELINK_ACCESS_BINFO (rhs);
6620 rhs = BASELINK_FUNCTIONS (rhs);
6621 }
50ad9642 6622
5ae9ba3e
MM
6623 /* If we are in a template, and have a NON_DEPENDENT_EXPR, we cannot
6624 deduce any type information. */
6625 if (TREE_CODE (rhs) == NON_DEPENDENT_EXPR)
6626 {
6627 if (flags & tf_error)
6628 error ("not enough type information");
6629 return error_mark_node;
6630 }
6631
eff3a276
MM
6632 /* There only a few kinds of expressions that may have a type
6633 dependent on overload resolution. */
6634 gcc_assert (TREE_CODE (rhs) == ADDR_EXPR
6635 || TREE_CODE (rhs) == COMPONENT_REF
95e20768
NS
6636 || really_overloaded_fn (rhs)
6637 || (flag_ms_extensions && TREE_CODE (rhs) == FUNCTION_DECL));
c73964b2 6638
8d08fdba
MS
6639 /* This should really only be used when attempting to distinguish
6640 what sort of a pointer to function we have. For now, any
6641 arithmetic operation which is not supported on pointers
6642 is rejected as an error. */
6643
6644 switch (TREE_CODE (rhs))
6645 {
8d08fdba 6646 case COMPONENT_REF:
92af500d 6647 {
5ae9ba3e 6648 tree member = TREE_OPERAND (rhs, 1);
92af500d 6649
5ae9ba3e
MM
6650 member = instantiate_type (lhstype, member, flags);
6651 if (member != error_mark_node
92af500d 6652 && TREE_SIDE_EFFECTS (TREE_OPERAND (rhs, 0)))
04c06002 6653 /* Do not lose object's side effects. */
5ae9ba3e
MM
6654 return build2 (COMPOUND_EXPR, TREE_TYPE (member),
6655 TREE_OPERAND (rhs, 0), member);
6656 return member;
92af500d 6657 }
8d08fdba 6658
2a238a97 6659 case OFFSET_REF:
05e0b2f4
JM
6660 rhs = TREE_OPERAND (rhs, 1);
6661 if (BASELINK_P (rhs))
eff3a276 6662 return instantiate_type (lhstype, rhs, flags_in);
05e0b2f4 6663
2a238a97
MM
6664 /* This can happen if we are forming a pointer-to-member for a
6665 member template. */
50bc768d 6666 gcc_assert (TREE_CODE (rhs) == TEMPLATE_ID_EXPR);
05e0b2f4 6667
2a238a97 6668 /* Fall through. */
874503bc 6669
386b8a85 6670 case TEMPLATE_ID_EXPR:
2bdb0643
JM
6671 {
6672 tree fns = TREE_OPERAND (rhs, 0);
6673 tree args = TREE_OPERAND (rhs, 1);
6674
19420d00 6675 return
92af500d
NS
6676 resolve_address_of_overloaded_function (lhstype, fns, flags_in,
6677 /*template_only=*/true,
eff3a276 6678 args, access_path);
2bdb0643 6679 }
386b8a85 6680
2c73f9f5 6681 case OVERLOAD:
a723baf1 6682 case FUNCTION_DECL:
c8094d83 6683 return
92af500d
NS
6684 resolve_address_of_overloaded_function (lhstype, rhs, flags_in,
6685 /*template_only=*/false,
eff3a276
MM
6686 /*explicit_targs=*/NULL_TREE,
6687 access_path);
2c73f9f5 6688
ca36f057 6689 case ADDR_EXPR:
19420d00
NS
6690 {
6691 if (PTRMEM_OK_P (rhs))
0cbd7506 6692 flags |= tf_ptrmem_ok;
c8094d83 6693
ca36f057 6694 return instantiate_type (lhstype, TREE_OPERAND (rhs, 0), flags);
19420d00 6695 }
ca36f057
MM
6696
6697 case ERROR_MARK:
6698 return error_mark_node;
6699
6700 default:
8dc2b103 6701 gcc_unreachable ();
ca36f057 6702 }
8dc2b103 6703 return error_mark_node;
ca36f057
MM
6704}
6705\f
6706/* Return the name of the virtual function pointer field
6707 (as an IDENTIFIER_NODE) for the given TYPE. Note that
6708 this may have to look back through base types to find the
6709 ultimate field name. (For single inheritance, these could
6710 all be the same name. Who knows for multiple inheritance). */
6711
6712static tree
94edc4ab 6713get_vfield_name (tree type)
ca36f057 6714{
37a247a0 6715 tree binfo, base_binfo;
ca36f057
MM
6716 char *buf;
6717
37a247a0 6718 for (binfo = TYPE_BINFO (type);
fa743e8c 6719 BINFO_N_BASE_BINFOS (binfo);
37a247a0
NS
6720 binfo = base_binfo)
6721 {
6722 base_binfo = BINFO_BASE_BINFO (binfo, 0);
ca36f057 6723
37a247a0
NS
6724 if (BINFO_VIRTUAL_P (base_binfo)
6725 || !TYPE_CONTAINS_VPTR_P (BINFO_TYPE (base_binfo)))
6726 break;
6727 }
c8094d83 6728
ca36f057 6729 type = BINFO_TYPE (binfo);
67f5655f 6730 buf = (char *) alloca (sizeof (VFIELD_NAME_FORMAT)
3db45ab5 6731 + TYPE_NAME_LENGTH (type) + 2);
ea122333
JM
6732 sprintf (buf, VFIELD_NAME_FORMAT,
6733 IDENTIFIER_POINTER (constructor_name (type)));
ca36f057
MM
6734 return get_identifier (buf);
6735}
6736
6737void
94edc4ab 6738print_class_statistics (void)
ca36f057
MM
6739{
6740#ifdef GATHER_STATISTICS
6741 fprintf (stderr, "convert_harshness = %d\n", n_convert_harshness);
6742 fprintf (stderr, "compute_conversion_costs = %d\n", n_compute_conversion_costs);
ca36f057
MM
6743 if (n_vtables)
6744 {
6745 fprintf (stderr, "vtables = %d; vtable searches = %d\n",
6746 n_vtables, n_vtable_searches);
6747 fprintf (stderr, "vtable entries = %d; vtable elems = %d\n",
6748 n_vtable_entries, n_vtable_elems);
6749 }
6750#endif
6751}
6752
6753/* Build a dummy reference to ourselves so Derived::Base (and A::A) works,
6754 according to [class]:
0cbd7506 6755 The class-name is also inserted
ca36f057
MM
6756 into the scope of the class itself. For purposes of access checking,
6757 the inserted class name is treated as if it were a public member name. */
6758
6759void
94edc4ab 6760build_self_reference (void)
ca36f057
MM
6761{
6762 tree name = constructor_name (current_class_type);
6763 tree value = build_lang_decl (TYPE_DECL, name, current_class_type);
6764 tree saved_cas;
6765
6766 DECL_NONLOCAL (value) = 1;
6767 DECL_CONTEXT (value) = current_class_type;
6768 DECL_ARTIFICIAL (value) = 1;
a3d87771 6769 SET_DECL_SELF_REFERENCE_P (value);
6f1abb06 6770 set_underlying_type (value);
ca36f057
MM
6771
6772 if (processing_template_decl)
6773 value = push_template_decl (value);
6774
6775 saved_cas = current_access_specifier;
6776 current_access_specifier = access_public_node;
6777 finish_member_declaration (value);
6778 current_access_specifier = saved_cas;
6779}
6780
6781/* Returns 1 if TYPE contains only padding bytes. */
6782
6783int
94edc4ab 6784is_empty_class (tree type)
ca36f057 6785{
ca36f057
MM
6786 if (type == error_mark_node)
6787 return 0;
6788
2588c9e9 6789 if (! CLASS_TYPE_P (type))
ca36f057
MM
6790 return 0;
6791
58731fd1
MM
6792 /* In G++ 3.2, whether or not a class was empty was determined by
6793 looking at its size. */
6794 if (abi_version_at_least (2))
6795 return CLASSTYPE_EMPTY_P (type);
6796 else
6797 return integer_zerop (CLASSTYPE_SIZE (type));
ca36f057
MM
6798}
6799
956d9305
MM
6800/* Returns true if TYPE contains an empty class. */
6801
6802static bool
6803contains_empty_class_p (tree type)
6804{
6805 if (is_empty_class (type))
6806 return true;
6807 if (CLASS_TYPE_P (type))
6808 {
6809 tree field;
fa743e8c
NS
6810 tree binfo;
6811 tree base_binfo;
956d9305
MM
6812 int i;
6813
fa743e8c
NS
6814 for (binfo = TYPE_BINFO (type), i = 0;
6815 BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
6816 if (contains_empty_class_p (BINFO_TYPE (base_binfo)))
956d9305
MM
6817 return true;
6818 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
17bbb839
MM
6819 if (TREE_CODE (field) == FIELD_DECL
6820 && !DECL_ARTIFICIAL (field)
6821 && is_empty_class (TREE_TYPE (field)))
956d9305
MM
6822 return true;
6823 }
6824 else if (TREE_CODE (type) == ARRAY_TYPE)
6825 return contains_empty_class_p (TREE_TYPE (type));
6826 return false;
6827}
6828
2588c9e9 6829/* Returns true if TYPE contains no actual data, just various
0930cc0e 6830 possible combinations of empty classes and possibly a vptr. */
2588c9e9
JM
6831
6832bool
6833is_really_empty_class (tree type)
6834{
2588c9e9
JM
6835 if (CLASS_TYPE_P (type))
6836 {
6837 tree field;
6838 tree binfo;
6839 tree base_binfo;
6840 int i;
6841
0930cc0e
JM
6842 /* CLASSTYPE_EMPTY_P isn't set properly until the class is actually laid
6843 out, but we'd like to be able to check this before then. */
6844 if (COMPLETE_TYPE_P (type) && is_empty_class (type))
6845 return true;
6846
2588c9e9
JM
6847 for (binfo = TYPE_BINFO (type), i = 0;
6848 BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
6849 if (!is_really_empty_class (BINFO_TYPE (base_binfo)))
6850 return false;
910ad8de 6851 for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
2588c9e9
JM
6852 if (TREE_CODE (field) == FIELD_DECL
6853 && !DECL_ARTIFICIAL (field)
6854 && !is_really_empty_class (TREE_TYPE (field)))
6855 return false;
6856 return true;
6857 }
6858 else if (TREE_CODE (type) == ARRAY_TYPE)
6859 return is_really_empty_class (TREE_TYPE (type));
6860 return false;
6861}
6862
ca36f057
MM
6863/* Note that NAME was looked up while the current class was being
6864 defined and that the result of that lookup was DECL. */
6865
6866void
94edc4ab 6867maybe_note_name_used_in_class (tree name, tree decl)
ca36f057
MM
6868{
6869 splay_tree names_used;
6870
6871 /* If we're not defining a class, there's nothing to do. */
39fb05d0 6872 if (!(innermost_scope_kind() == sk_class
d5f4eddd
JM
6873 && TYPE_BEING_DEFINED (current_class_type)
6874 && !LAMBDA_TYPE_P (current_class_type)))
ca36f057 6875 return;
c8094d83 6876
ca36f057
MM
6877 /* If there's already a binding for this NAME, then we don't have
6878 anything to worry about. */
c8094d83 6879 if (lookup_member (current_class_type, name,
39fb05d0 6880 /*protect=*/0, /*want_type=*/false))
ca36f057
MM
6881 return;
6882
6883 if (!current_class_stack[current_class_depth - 1].names_used)
6884 current_class_stack[current_class_depth - 1].names_used
6885 = splay_tree_new (splay_tree_compare_pointers, 0, 0);
6886 names_used = current_class_stack[current_class_depth - 1].names_used;
6887
6888 splay_tree_insert (names_used,
c8094d83 6889 (splay_tree_key) name,
ca36f057
MM
6890 (splay_tree_value) decl);
6891}
6892
6893/* Note that NAME was declared (as DECL) in the current class. Check
0e339752 6894 to see that the declaration is valid. */
ca36f057
MM
6895
6896void
94edc4ab 6897note_name_declared_in_class (tree name, tree decl)
ca36f057
MM
6898{
6899 splay_tree names_used;
6900 splay_tree_node n;
6901
6902 /* Look to see if we ever used this name. */
c8094d83 6903 names_used
ca36f057
MM
6904 = current_class_stack[current_class_depth - 1].names_used;
6905 if (!names_used)
6906 return;
8ce1235b
KT
6907 /* The C language allows members to be declared with a type of the same
6908 name, and the C++ standard says this diagnostic is not required. So
6909 allow it in extern "C" blocks unless predantic is specified.
6910 Allow it in all cases if -ms-extensions is specified. */
6911 if ((!pedantic && current_lang_name == lang_name_c)
6912 || flag_ms_extensions)
6913 return;
ca36f057
MM
6914 n = splay_tree_lookup (names_used, (splay_tree_key) name);
6915 if (n)
6916 {
6917 /* [basic.scope.class]
c8094d83 6918
ca36f057
MM
6919 A name N used in a class S shall refer to the same declaration
6920 in its context and when re-evaluated in the completed scope of
6921 S. */
cbe5f3b3
MLI
6922 permerror (input_location, "declaration of %q#D", decl);
6923 permerror (input_location, "changes meaning of %qD from %q+#D",
2ae2031e 6924 DECL_NAME (OVL_CURRENT (decl)), (tree) n->value);
ca36f057
MM
6925 }
6926}
6927
3461fba7
NS
6928/* Returns the VAR_DECL for the complete vtable associated with BINFO.
6929 Secondary vtables are merged with primary vtables; this function
6930 will return the VAR_DECL for the primary vtable. */
ca36f057 6931
c35cce41 6932tree
94edc4ab 6933get_vtbl_decl_for_binfo (tree binfo)
c35cce41
MM
6934{
6935 tree decl;
6936
6937 decl = BINFO_VTABLE (binfo);
5be014d5 6938 if (decl && TREE_CODE (decl) == POINTER_PLUS_EXPR)
c35cce41 6939 {
50bc768d 6940 gcc_assert (TREE_CODE (TREE_OPERAND (decl, 0)) == ADDR_EXPR);
c35cce41
MM
6941 decl = TREE_OPERAND (TREE_OPERAND (decl, 0), 0);
6942 }
6943 if (decl)
50bc768d 6944 gcc_assert (TREE_CODE (decl) == VAR_DECL);
c35cce41
MM
6945 return decl;
6946}
6947
911a71a7 6948
dbbf88d1
NS
6949/* Returns the binfo for the primary base of BINFO. If the resulting
6950 BINFO is a virtual base, and it is inherited elsewhere in the
6951 hierarchy, then the returned binfo might not be the primary base of
6952 BINFO in the complete object. Check BINFO_PRIMARY_P or
6953 BINFO_LOST_PRIMARY_P to be sure. */
911a71a7 6954
b5791fdc 6955static tree
94edc4ab 6956get_primary_binfo (tree binfo)
911a71a7
MM
6957{
6958 tree primary_base;
c8094d83 6959
911a71a7
MM
6960 primary_base = CLASSTYPE_PRIMARY_BINFO (BINFO_TYPE (binfo));
6961 if (!primary_base)
6962 return NULL_TREE;
6963
b5791fdc 6964 return copied_binfo (primary_base, binfo);
911a71a7
MM
6965}
6966
838dfd8a 6967/* If INDENTED_P is zero, indent to INDENT. Return nonzero. */
b7442fb5
NS
6968
6969static int
94edc4ab 6970maybe_indent_hierarchy (FILE * stream, int indent, int indented_p)
b7442fb5
NS
6971{
6972 if (!indented_p)
6973 fprintf (stream, "%*s", indent, "");
6974 return 1;
6975}
6976
dbbf88d1
NS
6977/* Dump the offsets of all the bases rooted at BINFO to STREAM.
6978 INDENT should be zero when called from the top level; it is
6979 incremented recursively. IGO indicates the next expected BINFO in
9bcb9aae 6980 inheritance graph ordering. */
c35cce41 6981
dbbf88d1
NS
6982static tree
6983dump_class_hierarchy_r (FILE *stream,
0cbd7506
MS
6984 int flags,
6985 tree binfo,
6986 tree igo,
6987 int indent)
ca36f057 6988{
b7442fb5 6989 int indented = 0;
fa743e8c
NS
6990 tree base_binfo;
6991 int i;
c8094d83 6992
b7442fb5
NS
6993 indented = maybe_indent_hierarchy (stream, indent, 0);
6994 fprintf (stream, "%s (0x%lx) ",
fc6633e0 6995 type_as_string (BINFO_TYPE (binfo), TFF_PLAIN_IDENTIFIER),
b7442fb5 6996 (unsigned long) binfo);
dbbf88d1
NS
6997 if (binfo != igo)
6998 {
6999 fprintf (stream, "alternative-path\n");
7000 return igo;
7001 }
7002 igo = TREE_CHAIN (binfo);
c8094d83 7003
9965d119 7004 fprintf (stream, HOST_WIDE_INT_PRINT_DEC,
ca36f057 7005 tree_low_cst (BINFO_OFFSET (binfo), 0));
9965d119
NS
7006 if (is_empty_class (BINFO_TYPE (binfo)))
7007 fprintf (stream, " empty");
7008 else if (CLASSTYPE_NEARLY_EMPTY_P (BINFO_TYPE (binfo)))
7009 fprintf (stream, " nearly-empty");
809e3e7f 7010 if (BINFO_VIRTUAL_P (binfo))
dbbf88d1 7011 fprintf (stream, " virtual");
9965d119 7012 fprintf (stream, "\n");
ca36f057 7013
b7442fb5 7014 indented = 0;
fc6633e0 7015 if (BINFO_PRIMARY_P (binfo))
b7442fb5
NS
7016 {
7017 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
7018 fprintf (stream, " primary-for %s (0x%lx)",
fc6633e0 7019 type_as_string (BINFO_TYPE (BINFO_INHERITANCE_CHAIN (binfo)),
b7442fb5 7020 TFF_PLAIN_IDENTIFIER),
fc6633e0 7021 (unsigned long)BINFO_INHERITANCE_CHAIN (binfo));
b7442fb5
NS
7022 }
7023 if (BINFO_LOST_PRIMARY_P (binfo))
7024 {
7025 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
7026 fprintf (stream, " lost-primary");
7027 }
7028 if (indented)
7029 fprintf (stream, "\n");
7030
7031 if (!(flags & TDF_SLIM))
7032 {
7033 int indented = 0;
c8094d83 7034
b7442fb5
NS
7035 if (BINFO_SUBVTT_INDEX (binfo))
7036 {
7037 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
7038 fprintf (stream, " subvttidx=%s",
7039 expr_as_string (BINFO_SUBVTT_INDEX (binfo),
7040 TFF_PLAIN_IDENTIFIER));
7041 }
7042 if (BINFO_VPTR_INDEX (binfo))
7043 {
7044 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
7045 fprintf (stream, " vptridx=%s",
7046 expr_as_string (BINFO_VPTR_INDEX (binfo),
7047 TFF_PLAIN_IDENTIFIER));
7048 }
7049 if (BINFO_VPTR_FIELD (binfo))
7050 {
7051 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
7052 fprintf (stream, " vbaseoffset=%s",
7053 expr_as_string (BINFO_VPTR_FIELD (binfo),
7054 TFF_PLAIN_IDENTIFIER));
7055 }
7056 if (BINFO_VTABLE (binfo))
7057 {
7058 indented = maybe_indent_hierarchy (stream, indent + 3, indented);
7059 fprintf (stream, " vptr=%s",
7060 expr_as_string (BINFO_VTABLE (binfo),
7061 TFF_PLAIN_IDENTIFIER));
7062 }
c8094d83 7063
b7442fb5
NS
7064 if (indented)
7065 fprintf (stream, "\n");
7066 }
dbbf88d1 7067
fa743e8c
NS
7068 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
7069 igo = dump_class_hierarchy_r (stream, flags, base_binfo, igo, indent + 2);
c8094d83 7070
dbbf88d1 7071 return igo;
c35cce41
MM
7072}
7073
7074/* Dump the BINFO hierarchy for T. */
7075
b7442fb5 7076static void
bb885938 7077dump_class_hierarchy_1 (FILE *stream, int flags, tree t)
c35cce41 7078{
b7442fb5
NS
7079 fprintf (stream, "Class %s\n", type_as_string (t, TFF_PLAIN_IDENTIFIER));
7080 fprintf (stream, " size=%lu align=%lu\n",
7081 (unsigned long)(tree_low_cst (TYPE_SIZE (t), 0) / BITS_PER_UNIT),
7082 (unsigned long)(TYPE_ALIGN (t) / BITS_PER_UNIT));
dbbf88d1
NS
7083 fprintf (stream, " base size=%lu base align=%lu\n",
7084 (unsigned long)(tree_low_cst (TYPE_SIZE (CLASSTYPE_AS_BASE (t)), 0)
7085 / BITS_PER_UNIT),
7086 (unsigned long)(TYPE_ALIGN (CLASSTYPE_AS_BASE (t))
7087 / BITS_PER_UNIT));
7088 dump_class_hierarchy_r (stream, flags, TYPE_BINFO (t), TYPE_BINFO (t), 0);
b7442fb5 7089 fprintf (stream, "\n");
bb885938
NS
7090}
7091
da1d7781 7092/* Debug interface to hierarchy dumping. */
bb885938 7093
ac1f3b7e 7094void
bb885938
NS
7095debug_class (tree t)
7096{
7097 dump_class_hierarchy_1 (stderr, TDF_SLIM, t);
7098}
7099
7100static void
7101dump_class_hierarchy (tree t)
7102{
7103 int flags;
7104 FILE *stream = dump_begin (TDI_class, &flags);
7105
7106 if (stream)
7107 {
7108 dump_class_hierarchy_1 (stream, flags, t);
7109 dump_end (TDI_class, stream);
7110 }
b7442fb5
NS
7111}
7112
7113static void
94edc4ab 7114dump_array (FILE * stream, tree decl)
b7442fb5 7115{
4038c495
GB
7116 tree value;
7117 unsigned HOST_WIDE_INT ix;
b7442fb5
NS
7118 HOST_WIDE_INT elt;
7119 tree size = TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (decl)));
7120
7121 elt = (tree_low_cst (TYPE_SIZE (TREE_TYPE (TREE_TYPE (decl))), 0)
7122 / BITS_PER_UNIT);
7123 fprintf (stream, "%s:", decl_as_string (decl, TFF_PLAIN_IDENTIFIER));
7124 fprintf (stream, " %s entries",
7125 expr_as_string (size_binop (PLUS_EXPR, size, size_one_node),
7126 TFF_PLAIN_IDENTIFIER));
7127 fprintf (stream, "\n");
7128
4038c495
GB
7129 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (DECL_INITIAL (decl)),
7130 ix, value)
4fdc14ca 7131 fprintf (stream, "%-4ld %s\n", (long)(ix * elt),
4038c495 7132 expr_as_string (value, TFF_PLAIN_IDENTIFIER));
b7442fb5
NS
7133}
7134
7135static void
94edc4ab 7136dump_vtable (tree t, tree binfo, tree vtable)
b7442fb5
NS
7137{
7138 int flags;
7139 FILE *stream = dump_begin (TDI_class, &flags);
7140
7141 if (!stream)
7142 return;
7143
7144 if (!(flags & TDF_SLIM))
9965d119 7145 {
b7442fb5 7146 int ctor_vtbl_p = TYPE_BINFO (t) != binfo;
c8094d83 7147
b7442fb5
NS
7148 fprintf (stream, "%s for %s",
7149 ctor_vtbl_p ? "Construction vtable" : "Vtable",
fc6633e0 7150 type_as_string (BINFO_TYPE (binfo), TFF_PLAIN_IDENTIFIER));
b7442fb5
NS
7151 if (ctor_vtbl_p)
7152 {
809e3e7f 7153 if (!BINFO_VIRTUAL_P (binfo))
b7442fb5
NS
7154 fprintf (stream, " (0x%lx instance)", (unsigned long)binfo);
7155 fprintf (stream, " in %s", type_as_string (t, TFF_PLAIN_IDENTIFIER));
7156 }
7157 fprintf (stream, "\n");
7158 dump_array (stream, vtable);
7159 fprintf (stream, "\n");
9965d119 7160 }
c8094d83 7161
b7442fb5
NS
7162 dump_end (TDI_class, stream);
7163}
7164
7165static void
94edc4ab 7166dump_vtt (tree t, tree vtt)
b7442fb5
NS
7167{
7168 int flags;
7169 FILE *stream = dump_begin (TDI_class, &flags);
7170
7171 if (!stream)
7172 return;
7173
7174 if (!(flags & TDF_SLIM))
7175 {
7176 fprintf (stream, "VTT for %s\n",
7177 type_as_string (t, TFF_PLAIN_IDENTIFIER));
7178 dump_array (stream, vtt);
7179 fprintf (stream, "\n");
7180 }
c8094d83 7181
b7442fb5 7182 dump_end (TDI_class, stream);
ca36f057
MM
7183}
7184
bb885938
NS
7185/* Dump a function or thunk and its thunkees. */
7186
7187static void
7188dump_thunk (FILE *stream, int indent, tree thunk)
7189{
7190 static const char spaces[] = " ";
7191 tree name = DECL_NAME (thunk);
7192 tree thunks;
c8094d83 7193
bb885938
NS
7194 fprintf (stream, "%.*s%p %s %s", indent, spaces,
7195 (void *)thunk,
7196 !DECL_THUNK_P (thunk) ? "function"
7197 : DECL_THIS_THUNK_P (thunk) ? "this-thunk" : "covariant-thunk",
7198 name ? IDENTIFIER_POINTER (name) : "<unset>");
e00853fd 7199 if (DECL_THUNK_P (thunk))
bb885938
NS
7200 {
7201 HOST_WIDE_INT fixed_adjust = THUNK_FIXED_OFFSET (thunk);
7202 tree virtual_adjust = THUNK_VIRTUAL_OFFSET (thunk);
7203
7204 fprintf (stream, " fixed=" HOST_WIDE_INT_PRINT_DEC, fixed_adjust);
7205 if (!virtual_adjust)
7206 /*NOP*/;
7207 else if (DECL_THIS_THUNK_P (thunk))
7208 fprintf (stream, " vcall=" HOST_WIDE_INT_PRINT_DEC,
7209 tree_low_cst (virtual_adjust, 0));
7210 else
7211 fprintf (stream, " vbase=" HOST_WIDE_INT_PRINT_DEC "(%s)",
7212 tree_low_cst (BINFO_VPTR_FIELD (virtual_adjust), 0),
7213 type_as_string (BINFO_TYPE (virtual_adjust), TFF_SCOPE));
e00853fd
NS
7214 if (THUNK_ALIAS (thunk))
7215 fprintf (stream, " alias to %p", (void *)THUNK_ALIAS (thunk));
bb885938
NS
7216 }
7217 fprintf (stream, "\n");
7218 for (thunks = DECL_THUNKS (thunk); thunks; thunks = TREE_CHAIN (thunks))
7219 dump_thunk (stream, indent + 2, thunks);
7220}
7221
7222/* Dump the thunks for FN. */
7223
ac1f3b7e 7224void
bb885938
NS
7225debug_thunks (tree fn)
7226{
7227 dump_thunk (stderr, 0, fn);
7228}
7229
ca36f057
MM
7230/* Virtual function table initialization. */
7231
7232/* Create all the necessary vtables for T and its base classes. */
7233
7234static void
94edc4ab 7235finish_vtbls (tree t)
ca36f057 7236{
3461fba7 7237 tree vbase;
9d6a019c
NF
7238 VEC(constructor_elt,gc) *v = NULL;
7239 tree vtable = BINFO_VTABLE (TYPE_BINFO (t));
ca36f057 7240
3461fba7
NS
7241 /* We lay out the primary and secondary vtables in one contiguous
7242 vtable. The primary vtable is first, followed by the non-virtual
7243 secondary vtables in inheritance graph order. */
9d6a019c
NF
7244 accumulate_vtbl_inits (TYPE_BINFO (t), TYPE_BINFO (t), TYPE_BINFO (t),
7245 vtable, t, &v);
c8094d83 7246
3461fba7
NS
7247 /* Then come the virtual bases, also in inheritance graph order. */
7248 for (vbase = TYPE_BINFO (t); vbase; vbase = TREE_CHAIN (vbase))
7249 {
809e3e7f 7250 if (!BINFO_VIRTUAL_P (vbase))
3461fba7 7251 continue;
9d6a019c 7252 accumulate_vtbl_inits (vbase, vbase, TYPE_BINFO (t), vtable, t, &v);
ff668506
JM
7253 }
7254
604a3205 7255 if (BINFO_VTABLE (TYPE_BINFO (t)))
9d6a019c 7256 initialize_vtable (TYPE_BINFO (t), v);
ca36f057
MM
7257}
7258
7259/* Initialize the vtable for BINFO with the INITS. */
7260
7261static void
9d6a019c 7262initialize_vtable (tree binfo, VEC(constructor_elt,gc) *inits)
ca36f057 7263{
ca36f057
MM
7264 tree decl;
7265
9d6a019c 7266 layout_vtable_decl (binfo, VEC_length (constructor_elt, inits));
c35cce41 7267 decl = get_vtbl_decl_for_binfo (binfo);
19c29b2f 7268 initialize_artificial_var (decl, inits);
b7442fb5 7269 dump_vtable (BINFO_TYPE (binfo), binfo, decl);
23656158
MM
7270}
7271
9965d119
NS
7272/* Build the VTT (virtual table table) for T.
7273 A class requires a VTT if it has virtual bases.
c8094d83 7274
9965d119
NS
7275 This holds
7276 1 - primary virtual pointer for complete object T
90ecce3e
JM
7277 2 - secondary VTTs for each direct non-virtual base of T which requires a
7278 VTT
9965d119
NS
7279 3 - secondary virtual pointers for each direct or indirect base of T which
7280 has virtual bases or is reachable via a virtual path from T.
7281 4 - secondary VTTs for each direct or indirect virtual base of T.
c8094d83 7282
9965d119 7283 Secondary VTTs look like complete object VTTs without part 4. */
23656158
MM
7284
7285static void
94edc4ab 7286build_vtt (tree t)
23656158 7287{
23656158
MM
7288 tree type;
7289 tree vtt;
3ec6bad3 7290 tree index;
9d6a019c 7291 VEC(constructor_elt,gc) *inits;
23656158 7292
23656158 7293 /* Build up the initializers for the VTT. */
9d6a019c 7294 inits = NULL;
3ec6bad3 7295 index = size_zero_node;
9965d119 7296 build_vtt_inits (TYPE_BINFO (t), t, &inits, &index);
23656158
MM
7297
7298 /* If we didn't need a VTT, we're done. */
7299 if (!inits)
7300 return;
7301
7302 /* Figure out the type of the VTT. */
dcedcddb
NF
7303 type = build_array_of_n_type (const_ptr_type_node,
7304 VEC_length (constructor_elt, inits));
c8094d83 7305
23656158 7306 /* Now, build the VTT object itself. */
3e355d92 7307 vtt = build_vtable (t, mangle_vtt_for_type (t), type);
19c29b2f 7308 initialize_artificial_var (vtt, inits);
548502d3 7309 /* Add the VTT to the vtables list. */
910ad8de
NF
7310 DECL_CHAIN (vtt) = DECL_CHAIN (CLASSTYPE_VTABLES (t));
7311 DECL_CHAIN (CLASSTYPE_VTABLES (t)) = vtt;
b7442fb5
NS
7312
7313 dump_vtt (t, vtt);
23656158
MM
7314}
7315
13de7ec4
JM
7316/* When building a secondary VTT, BINFO_VTABLE is set to a TREE_LIST with
7317 PURPOSE the RTTI_BINFO, VALUE the real vtable pointer for this binfo,
7318 and CHAIN the vtable pointer for this binfo after construction is
00a17e31 7319 complete. VALUE can also be another BINFO, in which case we recurse. */
13de7ec4
JM
7320
7321static tree
94edc4ab 7322binfo_ctor_vtable (tree binfo)
13de7ec4
JM
7323{
7324 tree vt;
7325
7326 while (1)
7327 {
7328 vt = BINFO_VTABLE (binfo);
7329 if (TREE_CODE (vt) == TREE_LIST)
7330 vt = TREE_VALUE (vt);
95b4aca6 7331 if (TREE_CODE (vt) == TREE_BINFO)
13de7ec4
JM
7332 binfo = vt;
7333 else
7334 break;
7335 }
7336
7337 return vt;
7338}
7339
a3a0fc7f
NS
7340/* Data for secondary VTT initialization. */
7341typedef struct secondary_vptr_vtt_init_data_s
7342{
7343 /* Is this the primary VTT? */
7344 bool top_level_p;
7345
7346 /* Current index into the VTT. */
7347 tree index;
7348
9d6a019c
NF
7349 /* Vector of initializers built up. */
7350 VEC(constructor_elt,gc) *inits;
a3a0fc7f
NS
7351
7352 /* The type being constructed by this secondary VTT. */
7353 tree type_being_constructed;
7354} secondary_vptr_vtt_init_data;
7355
23656158 7356/* Recursively build the VTT-initializer for BINFO (which is in the
9965d119
NS
7357 hierarchy dominated by T). INITS points to the end of the initializer
7358 list to date. INDEX is the VTT index where the next element will be
7359 replaced. Iff BINFO is the binfo for T, this is the top level VTT (i.e.
7360 not a subvtt for some base of T). When that is so, we emit the sub-VTTs
7361 for virtual bases of T. When it is not so, we build the constructor
7362 vtables for the BINFO-in-T variant. */
23656158 7363
9d6a019c
NF
7364static void
7365build_vtt_inits (tree binfo, tree t, VEC(constructor_elt,gc) **inits, tree *index)
23656158
MM
7366{
7367 int i;
7368 tree b;
7369 tree init;
a3a0fc7f 7370 secondary_vptr_vtt_init_data data;
539ed333 7371 int top_level_p = SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), t);
23656158
MM
7372
7373 /* We only need VTTs for subobjects with virtual bases. */
5775a06a 7374 if (!CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo)))
9d6a019c 7375 return;
23656158
MM
7376
7377 /* We need to use a construction vtable if this is not the primary
7378 VTT. */
9965d119 7379 if (!top_level_p)
3ec6bad3
MM
7380 {
7381 build_ctor_vtbl_group (binfo, t);
7382
7383 /* Record the offset in the VTT where this sub-VTT can be found. */
7384 BINFO_SUBVTT_INDEX (binfo) = *index;
7385 }
23656158
MM
7386
7387 /* Add the address of the primary vtable for the complete object. */
13de7ec4 7388 init = binfo_ctor_vtable (binfo);
9d6a019c 7389 CONSTRUCTOR_APPEND_ELT (*inits, NULL_TREE, init);
9965d119
NS
7390 if (top_level_p)
7391 {
50bc768d 7392 gcc_assert (!BINFO_VPTR_INDEX (binfo));
9965d119
NS
7393 BINFO_VPTR_INDEX (binfo) = *index;
7394 }
3ec6bad3 7395 *index = size_binop (PLUS_EXPR, *index, TYPE_SIZE_UNIT (ptr_type_node));
c8094d83 7396
23656158 7397 /* Recursively add the secondary VTTs for non-virtual bases. */
fa743e8c
NS
7398 for (i = 0; BINFO_BASE_ITERATE (binfo, i, b); ++i)
7399 if (!BINFO_VIRTUAL_P (b))
9d6a019c 7400 build_vtt_inits (b, t, inits, index);
c8094d83 7401
23656158 7402 /* Add secondary virtual pointers for all subobjects of BINFO with
9965d119
NS
7403 either virtual bases or reachable along a virtual path, except
7404 subobjects that are non-virtual primary bases. */
a3a0fc7f
NS
7405 data.top_level_p = top_level_p;
7406 data.index = *index;
9d6a019c 7407 data.inits = *inits;
a3a0fc7f 7408 data.type_being_constructed = BINFO_TYPE (binfo);
c8094d83 7409
5d5a519f 7410 dfs_walk_once (binfo, dfs_build_secondary_vptr_vtt_inits, NULL, &data);
9965d119 7411
a3a0fc7f 7412 *index = data.index;
23656158 7413
9d6a019c
NF
7414 /* data.inits might have grown as we added secondary virtual pointers.
7415 Make sure our caller knows about the new vector. */
7416 *inits = data.inits;
23656158 7417
9965d119 7418 if (top_level_p)
a3a0fc7f
NS
7419 /* Add the secondary VTTs for virtual bases in inheritance graph
7420 order. */
9ccf6541
MM
7421 for (b = TYPE_BINFO (BINFO_TYPE (binfo)); b; b = TREE_CHAIN (b))
7422 {
809e3e7f 7423 if (!BINFO_VIRTUAL_P (b))
9ccf6541 7424 continue;
c8094d83 7425
9d6a019c 7426 build_vtt_inits (b, t, inits, index);
9ccf6541 7427 }
a3a0fc7f
NS
7428 else
7429 /* Remove the ctor vtables we created. */
5d5a519f 7430 dfs_walk_all (binfo, dfs_fixup_binfo_vtbls, NULL, binfo);
23656158
MM
7431}
7432
8df83eae 7433/* Called from build_vtt_inits via dfs_walk. BINFO is the binfo for the base
a3a0fc7f 7434 in most derived. DATA is a SECONDARY_VPTR_VTT_INIT_DATA structure. */
23656158
MM
7435
7436static tree
a3a0fc7f 7437dfs_build_secondary_vptr_vtt_inits (tree binfo, void *data_)
23656158 7438{
a3a0fc7f 7439 secondary_vptr_vtt_init_data *data = (secondary_vptr_vtt_init_data *)data_;
23656158 7440
23656158
MM
7441 /* We don't care about bases that don't have vtables. */
7442 if (!TYPE_VFIELD (BINFO_TYPE (binfo)))
5d5a519f 7443 return dfs_skip_bases;
23656158 7444
a3a0fc7f
NS
7445 /* We're only interested in proper subobjects of the type being
7446 constructed. */
539ed333 7447 if (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), data->type_being_constructed))
23656158
MM
7448 return NULL_TREE;
7449
a3a0fc7f
NS
7450 /* We're only interested in bases with virtual bases or reachable
7451 via a virtual path from the type being constructed. */
5d5a519f
NS
7452 if (!(CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo))
7453 || binfo_via_virtual (binfo, data->type_being_constructed)))
7454 return dfs_skip_bases;
c8094d83 7455
5d5a519f
NS
7456 /* We're not interested in non-virtual primary bases. */
7457 if (!BINFO_VIRTUAL_P (binfo) && BINFO_PRIMARY_P (binfo))
db3d8cde 7458 return NULL_TREE;
c8094d83 7459
3ec6bad3 7460 /* Record the index where this secondary vptr can be found. */
a3a0fc7f 7461 if (data->top_level_p)
9965d119 7462 {
50bc768d 7463 gcc_assert (!BINFO_VPTR_INDEX (binfo));
a3a0fc7f 7464 BINFO_VPTR_INDEX (binfo) = data->index;
3ec6bad3 7465
a3a0fc7f
NS
7466 if (BINFO_VIRTUAL_P (binfo))
7467 {
0cbd7506
MS
7468 /* It's a primary virtual base, and this is not a
7469 construction vtable. Find the base this is primary of in
7470 the inheritance graph, and use that base's vtable
7471 now. */
a3a0fc7f
NS
7472 while (BINFO_PRIMARY_P (binfo))
7473 binfo = BINFO_INHERITANCE_CHAIN (binfo);
7474 }
9965d119 7475 }
c8094d83 7476
a3a0fc7f 7477 /* Add the initializer for the secondary vptr itself. */
9d6a019c 7478 CONSTRUCTOR_APPEND_ELT (data->inits, NULL_TREE, binfo_ctor_vtable (binfo));
23656158 7479
a3a0fc7f
NS
7480 /* Advance the vtt index. */
7481 data->index = size_binop (PLUS_EXPR, data->index,
7482 TYPE_SIZE_UNIT (ptr_type_node));
9965d119 7483
a3a0fc7f 7484 return NULL_TREE;
9965d119
NS
7485}
7486
a3a0fc7f
NS
7487/* Called from build_vtt_inits via dfs_walk. After building
7488 constructor vtables and generating the sub-vtt from them, we need
7489 to restore the BINFO_VTABLES that were scribbled on. DATA is the
7490 binfo of the base whose sub vtt was generated. */
23656158
MM
7491
7492static tree
94edc4ab 7493dfs_fixup_binfo_vtbls (tree binfo, void* data)
23656158 7494{
a3a0fc7f 7495 tree vtable = BINFO_VTABLE (binfo);
23656158 7496
5d5a519f
NS
7497 if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
7498 /* If this class has no vtable, none of its bases do. */
7499 return dfs_skip_bases;
c8094d83 7500
5d5a519f
NS
7501 if (!vtable)
7502 /* This might be a primary base, so have no vtable in this
7503 hierarchy. */
7504 return NULL_TREE;
c8094d83 7505
23656158
MM
7506 /* If we scribbled the construction vtable vptr into BINFO, clear it
7507 out now. */
5d5a519f 7508 if (TREE_CODE (vtable) == TREE_LIST
a3a0fc7f
NS
7509 && (TREE_PURPOSE (vtable) == (tree) data))
7510 BINFO_VTABLE (binfo) = TREE_CHAIN (vtable);
23656158
MM
7511
7512 return NULL_TREE;
7513}
7514
7515/* Build the construction vtable group for BINFO which is in the
7516 hierarchy dominated by T. */
7517
7518static void
94edc4ab 7519build_ctor_vtbl_group (tree binfo, tree t)
23656158 7520{
23656158
MM
7521 tree type;
7522 tree vtbl;
23656158 7523 tree id;
9ccf6541 7524 tree vbase;
9d6a019c 7525 VEC(constructor_elt,gc) *v;
23656158 7526
7bdcf888 7527 /* See if we've already created this construction vtable group. */
1f84ec23 7528 id = mangle_ctor_vtbl_for_type (t, binfo);
23656158
MM
7529 if (IDENTIFIER_GLOBAL_VALUE (id))
7530 return;
7531
539ed333 7532 gcc_assert (!SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), t));
23656158
MM
7533 /* Build a version of VTBL (with the wrong type) for use in
7534 constructing the addresses of secondary vtables in the
7535 construction vtable group. */
459c43ad 7536 vtbl = build_vtable (t, id, ptr_type_node);
505970fc 7537 DECL_CONSTRUCTION_VTABLE_P (vtbl) = 1;
9d6a019c
NF
7538
7539 v = NULL;
23656158 7540 accumulate_vtbl_inits (binfo, TYPE_BINFO (TREE_TYPE (binfo)),
9d6a019c 7541 binfo, vtbl, t, &v);
9965d119
NS
7542
7543 /* Add the vtables for each of our virtual bases using the vbase in T
7544 binfo. */
c8094d83
MS
7545 for (vbase = TYPE_BINFO (BINFO_TYPE (binfo));
7546 vbase;
9ccf6541
MM
7547 vbase = TREE_CHAIN (vbase))
7548 {
7549 tree b;
7550
809e3e7f 7551 if (!BINFO_VIRTUAL_P (vbase))
9ccf6541 7552 continue;
dbbf88d1 7553 b = copied_binfo (vbase, binfo);
c8094d83 7554
9d6a019c 7555 accumulate_vtbl_inits (b, vbase, binfo, vtbl, t, &v);
9ccf6541 7556 }
23656158
MM
7557
7558 /* Figure out the type of the construction vtable. */
dcedcddb
NF
7559 type = build_array_of_n_type (vtable_entry_type,
7560 VEC_length (constructor_elt, v));
8208d7dc 7561 layout_type (type);
23656158 7562 TREE_TYPE (vtbl) = type;
8208d7dc
DJ
7563 DECL_SIZE (vtbl) = DECL_SIZE_UNIT (vtbl) = NULL_TREE;
7564 layout_decl (vtbl, 0);
23656158
MM
7565
7566 /* Initialize the construction vtable. */
548502d3 7567 CLASSTYPE_VTABLES (t) = chainon (CLASSTYPE_VTABLES (t), vtbl);
9d6a019c 7568 initialize_artificial_var (vtbl, v);
b7442fb5 7569 dump_vtable (t, binfo, vtbl);
23656158
MM
7570}
7571
9965d119
NS
7572/* Add the vtbl initializers for BINFO (and its bases other than
7573 non-virtual primaries) to the list of INITS. BINFO is in the
7574 hierarchy dominated by T. RTTI_BINFO is the binfo within T of
7575 the constructor the vtbl inits should be accumulated for. (If this
7576 is the complete object vtbl then RTTI_BINFO will be TYPE_BINFO (T).)
7577 ORIG_BINFO is the binfo for this object within BINFO_TYPE (RTTI_BINFO).
7578 BINFO is the active base equivalent of ORIG_BINFO in the inheritance
7579 graph of T. Both BINFO and ORIG_BINFO will have the same BINFO_TYPE,
7580 but are not necessarily the same in terms of layout. */
ca36f057
MM
7581
7582static void
94edc4ab 7583accumulate_vtbl_inits (tree binfo,
0cbd7506
MS
7584 tree orig_binfo,
7585 tree rtti_binfo,
9d6a019c 7586 tree vtbl,
0cbd7506 7587 tree t,
9d6a019c 7588 VEC(constructor_elt,gc) **inits)
ca36f057 7589{
23656158 7590 int i;
fa743e8c 7591 tree base_binfo;
539ed333 7592 int ctor_vtbl_p = !SAME_BINFO_TYPE_P (BINFO_TYPE (rtti_binfo), t);
23656158 7593
539ed333 7594 gcc_assert (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), BINFO_TYPE (orig_binfo)));
23656158 7595
00a17e31 7596 /* If it doesn't have a vptr, we don't do anything. */
623fe76a
NS
7597 if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
7598 return;
c8094d83 7599
23656158
MM
7600 /* If we're building a construction vtable, we're not interested in
7601 subobjects that don't require construction vtables. */
c8094d83 7602 if (ctor_vtbl_p
5775a06a 7603 && !CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo))
9965d119 7604 && !binfo_via_virtual (orig_binfo, BINFO_TYPE (rtti_binfo)))
23656158
MM
7605 return;
7606
7607 /* Build the initializers for the BINFO-in-T vtable. */
9d6a019c 7608 dfs_accumulate_vtbl_inits (binfo, orig_binfo, rtti_binfo, vtbl, t, inits);
c8094d83 7609
c35cce41
MM
7610 /* Walk the BINFO and its bases. We walk in preorder so that as we
7611 initialize each vtable we can figure out at what offset the
23656158
MM
7612 secondary vtable lies from the primary vtable. We can't use
7613 dfs_walk here because we need to iterate through bases of BINFO
7614 and RTTI_BINFO simultaneously. */
fa743e8c 7615 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
23656158 7616 {
23656158 7617 /* Skip virtual bases. */
809e3e7f 7618 if (BINFO_VIRTUAL_P (base_binfo))
23656158
MM
7619 continue;
7620 accumulate_vtbl_inits (base_binfo,
604a3205 7621 BINFO_BASE_BINFO (orig_binfo, i),
9d6a019c 7622 rtti_binfo, vtbl, t,
23656158
MM
7623 inits);
7624 }
ca36f057
MM
7625}
7626
9d6a019c
NF
7627/* Called from accumulate_vtbl_inits. Adds the initializers for the
7628 BINFO vtable to L. */
ca36f057 7629
9d6a019c 7630static void
94edc4ab 7631dfs_accumulate_vtbl_inits (tree binfo,
0cbd7506
MS
7632 tree orig_binfo,
7633 tree rtti_binfo,
9d6a019c 7634 tree orig_vtbl,
0cbd7506 7635 tree t,
9d6a019c 7636 VEC(constructor_elt,gc) **l)
ca36f057 7637{
9965d119 7638 tree vtbl = NULL_TREE;
539ed333 7639 int ctor_vtbl_p = !SAME_BINFO_TYPE_P (BINFO_TYPE (rtti_binfo), t);
9d6a019c 7640 int n_inits;
9965d119 7641
13de7ec4 7642 if (ctor_vtbl_p
809e3e7f 7643 && BINFO_VIRTUAL_P (orig_binfo) && BINFO_PRIMARY_P (orig_binfo))
9965d119 7644 {
13de7ec4
JM
7645 /* In the hierarchy of BINFO_TYPE (RTTI_BINFO), this is a
7646 primary virtual base. If it is not the same primary in
7647 the hierarchy of T, we'll need to generate a ctor vtable
7648 for it, to place at its location in T. If it is the same
7649 primary, we still need a VTT entry for the vtable, but it
7650 should point to the ctor vtable for the base it is a
7651 primary for within the sub-hierarchy of RTTI_BINFO.
c8094d83 7652
13de7ec4 7653 There are three possible cases:
c8094d83 7654
13de7ec4
JM
7655 1) We are in the same place.
7656 2) We are a primary base within a lost primary virtual base of
7657 RTTI_BINFO.
049d2def 7658 3) We are primary to something not a base of RTTI_BINFO. */
c8094d83 7659
fc6633e0 7660 tree b;
13de7ec4 7661 tree last = NULL_TREE;
85a9a0a2 7662
13de7ec4
JM
7663 /* First, look through the bases we are primary to for RTTI_BINFO
7664 or a virtual base. */
fc6633e0
NS
7665 b = binfo;
7666 while (BINFO_PRIMARY_P (b))
7bdcf888 7667 {
fc6633e0 7668 b = BINFO_INHERITANCE_CHAIN (b);
13de7ec4 7669 last = b;
809e3e7f 7670 if (BINFO_VIRTUAL_P (b) || b == rtti_binfo)
fc6633e0 7671 goto found;
7bdcf888 7672 }
13de7ec4
JM
7673 /* If we run out of primary links, keep looking down our
7674 inheritance chain; we might be an indirect primary. */
fc6633e0
NS
7675 for (b = last; b; b = BINFO_INHERITANCE_CHAIN (b))
7676 if (BINFO_VIRTUAL_P (b) || b == rtti_binfo)
7677 break;
7678 found:
c8094d83 7679
13de7ec4
JM
7680 /* If we found RTTI_BINFO, this is case 1. If we found a virtual
7681 base B and it is a base of RTTI_BINFO, this is case 2. In
7682 either case, we share our vtable with LAST, i.e. the
7683 derived-most base within B of which we are a primary. */
7684 if (b == rtti_binfo
58c42dc2 7685 || (b && binfo_for_vbase (BINFO_TYPE (b), BINFO_TYPE (rtti_binfo))))
049d2def
JM
7686 /* Just set our BINFO_VTABLE to point to LAST, as we may not have
7687 set LAST's BINFO_VTABLE yet. We'll extract the actual vptr in
7688 binfo_ctor_vtable after everything's been set up. */
7689 vtbl = last;
13de7ec4 7690
049d2def 7691 /* Otherwise, this is case 3 and we get our own. */
9965d119 7692 }
dbbf88d1 7693 else if (!BINFO_NEW_VTABLE_MARKED (orig_binfo))
9d6a019c
NF
7694 return;
7695
7696 n_inits = VEC_length (constructor_elt, *l);
7bdcf888 7697
9965d119 7698 if (!vtbl)
ca36f057 7699 {
c35cce41
MM
7700 tree index;
7701 int non_fn_entries;
7702
9d6a019c
NF
7703 /* Add the initializer for this vtable. */
7704 build_vtbl_initializer (binfo, orig_binfo, t, rtti_binfo,
7705 &non_fn_entries, l);
c35cce41 7706
23656158 7707 /* Figure out the position to which the VPTR should point. */
9d6a019c 7708 vtbl = build1 (ADDR_EXPR, vtbl_ptr_type_node, orig_vtbl);
c35cce41
MM
7709 index = size_binop (PLUS_EXPR,
7710 size_int (non_fn_entries),
9d6a019c 7711 size_int (n_inits));
23656158
MM
7712 index = size_binop (MULT_EXPR,
7713 TYPE_SIZE_UNIT (vtable_entry_type),
7714 index);
5be014d5 7715 vtbl = build2 (POINTER_PLUS_EXPR, TREE_TYPE (vtbl), vtbl, index);
9965d119 7716 }
23656158 7717
7bdcf888 7718 if (ctor_vtbl_p)
9965d119
NS
7719 /* For a construction vtable, we can't overwrite BINFO_VTABLE.
7720 So, we make a TREE_LIST. Later, dfs_fixup_binfo_vtbls will
7721 straighten this out. */
7722 BINFO_VTABLE (binfo) = tree_cons (rtti_binfo, vtbl, BINFO_VTABLE (binfo));
809e3e7f 7723 else if (BINFO_PRIMARY_P (binfo) && BINFO_VIRTUAL_P (binfo))
9d6a019c
NF
7724 /* Throw away any unneeded intializers. */
7725 VEC_truncate (constructor_elt, *l, n_inits);
7bdcf888
NS
7726 else
7727 /* For an ordinary vtable, set BINFO_VTABLE. */
7728 BINFO_VTABLE (binfo) = vtbl;
ca36f057
MM
7729}
7730
1b746b0f
AP
7731static GTY(()) tree abort_fndecl_addr;
7732
90ecce3e 7733/* Construct the initializer for BINFO's virtual function table. BINFO
aabb4cd6 7734 is part of the hierarchy dominated by T. If we're building a
23656158 7735 construction vtable, the ORIG_BINFO is the binfo we should use to
9965d119
NS
7736 find the actual function pointers to put in the vtable - but they
7737 can be overridden on the path to most-derived in the graph that
7738 ORIG_BINFO belongs. Otherwise,
911a71a7 7739 ORIG_BINFO should be the same as BINFO. The RTTI_BINFO is the
23656158
MM
7740 BINFO that should be indicated by the RTTI information in the
7741 vtable; it will be a base class of T, rather than T itself, if we
7742 are building a construction vtable.
aabb4cd6
MM
7743
7744 The value returned is a TREE_LIST suitable for wrapping in a
7745 CONSTRUCTOR to use as the DECL_INITIAL for a vtable. If
7746 NON_FN_ENTRIES_P is not NULL, *NON_FN_ENTRIES_P is set to the
c8094d83 7747 number of non-function entries in the vtable.
911a71a7
MM
7748
7749 It might seem that this function should never be called with a
9965d119 7750 BINFO for which BINFO_PRIMARY_P holds, the vtable for such a
911a71a7 7751 base is always subsumed by a derived class vtable. However, when
9965d119 7752 we are building construction vtables, we do build vtables for
911a71a7
MM
7753 primary bases; we need these while the primary base is being
7754 constructed. */
ca36f057 7755
9d6a019c 7756static void
94edc4ab 7757build_vtbl_initializer (tree binfo,
0cbd7506
MS
7758 tree orig_binfo,
7759 tree t,
7760 tree rtti_binfo,
9d6a019c
NF
7761 int* non_fn_entries_p,
7762 VEC(constructor_elt,gc) **inits)
ca36f057 7763{
02dea3ff 7764 tree v;
911a71a7 7765 vtbl_init_data vid;
9d6a019c 7766 unsigned ix, jx;
58c42dc2 7767 tree vbinfo;
d4e6fecb 7768 VEC(tree,gc) *vbases;
9d6a019c 7769 constructor_elt *e;
c8094d83 7770
911a71a7 7771 /* Initialize VID. */
961192e1 7772 memset (&vid, 0, sizeof (vid));
911a71a7
MM
7773 vid.binfo = binfo;
7774 vid.derived = t;
73ea87d7 7775 vid.rtti_binfo = rtti_binfo;
539ed333
NS
7776 vid.primary_vtbl_p = SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), t);
7777 vid.ctor_vtbl_p = !SAME_BINFO_TYPE_P (BINFO_TYPE (rtti_binfo), t);
548502d3 7778 vid.generate_vcall_entries = true;
c35cce41 7779 /* The first vbase or vcall offset is at index -3 in the vtable. */
ce552f75 7780 vid.index = ssize_int(-3 * TARGET_VTABLE_DATA_ENTRY_DISTANCE);
c35cce41 7781
9bab6c90 7782 /* Add entries to the vtable for RTTI. */
73ea87d7 7783 build_rtti_vtbl_entries (binfo, &vid);
9bab6c90 7784
b485e15b
MM
7785 /* Create an array for keeping track of the functions we've
7786 processed. When we see multiple functions with the same
7787 signature, we share the vcall offsets. */
1e625046 7788 vid.fns = VEC_alloc (tree, gc, 32);
c35cce41 7789 /* Add the vcall and vbase offset entries. */
911a71a7 7790 build_vcall_and_vbase_vtbl_entries (binfo, &vid);
c8094d83 7791
79cda2d1 7792 /* Clear BINFO_VTABLE_PATH_MARKED; it's set by
c35cce41 7793 build_vbase_offset_vtbl_entries. */
9ba5ff0f
NS
7794 for (vbases = CLASSTYPE_VBASECLASSES (t), ix = 0;
7795 VEC_iterate (tree, vbases, ix, vbinfo); ix++)
58c42dc2 7796 BINFO_VTABLE_PATH_MARKED (vbinfo) = 0;
ca36f057 7797
a6f5e048
RH
7798 /* If the target requires padding between data entries, add that now. */
7799 if (TARGET_VTABLE_DATA_ENTRY_DISTANCE > 1)
7800 {
9d6a019c
NF
7801 int n_entries = VEC_length (constructor_elt, vid.inits);
7802
7803 VEC_safe_grow (constructor_elt, gc, vid.inits,
7804 TARGET_VTABLE_DATA_ENTRY_DISTANCE * n_entries);
a6f5e048 7805
9d6a019c
NF
7806 /* Move data entries into their new positions and add padding
7807 after the new positions. Iterate backwards so we don't
7808 overwrite entries that we would need to process later. */
7809 for (ix = n_entries - 1;
7810 VEC_iterate (constructor_elt, vid.inits, ix, e);
7811 ix--)
a6f5e048 7812 {
9d6a019c 7813 int j;
25d8a217
NF
7814 int new_position = (TARGET_VTABLE_DATA_ENTRY_DISTANCE * ix
7815 + (TARGET_VTABLE_DATA_ENTRY_DISTANCE - 1));
9d6a019c
NF
7816
7817 VEC_replace (constructor_elt, vid.inits, new_position, e);
a6f5e048 7818
9d6a019c
NF
7819 for (j = 1; j < TARGET_VTABLE_DATA_ENTRY_DISTANCE; ++j)
7820 {
25d8a217
NF
7821 constructor_elt *f = VEC_index (constructor_elt, vid.inits,
7822 new_position - j);
9d6a019c
NF
7823 f->index = NULL_TREE;
7824 f->value = build1 (NOP_EXPR, vtable_entry_type,
7825 null_pointer_node);
7826 }
a6f5e048
RH
7827 }
7828 }
7829
c35cce41 7830 if (non_fn_entries_p)
9d6a019c
NF
7831 *non_fn_entries_p = VEC_length (constructor_elt, vid.inits);
7832
7833 /* The initializers for virtual functions were built up in reverse
7834 order. Straighten them out and add them to the running list in one
7835 step. */
7836 jx = VEC_length (constructor_elt, *inits);
7837 VEC_safe_grow (constructor_elt, gc, *inits,
7838 (jx + VEC_length (constructor_elt, vid.inits)));
7839
7840 for (ix = VEC_length (constructor_elt, vid.inits) - 1;
7841 VEC_iterate (constructor_elt, vid.inits, ix, e);
7842 ix--, jx++)
7843 VEC_replace (constructor_elt, *inits, jx, e);
ca36f057
MM
7844
7845 /* Go through all the ordinary virtual functions, building up
7846 initializers. */
23656158 7847 for (v = BINFO_VIRTUALS (orig_binfo); v; v = TREE_CHAIN (v))
ca36f057
MM
7848 {
7849 tree delta;
7850 tree vcall_index;
4977bab6 7851 tree fn, fn_original;
f11ee281 7852 tree init = NULL_TREE;
c8094d83 7853
ca36f057 7854 fn = BV_FN (v);
07fa4878
NS
7855 fn_original = fn;
7856 if (DECL_THUNK_P (fn))
4977bab6 7857 {
07fa4878
NS
7858 if (!DECL_NAME (fn))
7859 finish_thunk (fn);
e00853fd 7860 if (THUNK_ALIAS (fn))
bb885938
NS
7861 {
7862 fn = THUNK_ALIAS (fn);
7863 BV_FN (v) = fn;
7864 }
07fa4878 7865 fn_original = THUNK_TARGET (fn);
4977bab6 7866 }
c8094d83 7867
d0cd8b44
JM
7868 /* If the only definition of this function signature along our
7869 primary base chain is from a lost primary, this vtable slot will
7870 never be used, so just zero it out. This is important to avoid
7871 requiring extra thunks which cannot be generated with the function.
7872
f11ee281
JM
7873 We first check this in update_vtable_entry_for_fn, so we handle
7874 restored primary bases properly; we also need to do it here so we
39a13be5 7875 zero out unused slots in ctor vtables, rather than filling them
f11ee281
JM
7876 with erroneous values (though harmless, apart from relocation
7877 costs). */
02dea3ff
JM
7878 if (BV_LOST_PRIMARY (v))
7879 init = size_zero_node;
d0cd8b44 7880
f11ee281
JM
7881 if (! init)
7882 {
7883 /* Pull the offset for `this', and the function to call, out of
7884 the list. */
7885 delta = BV_DELTA (v);
548502d3 7886 vcall_index = BV_VCALL_INDEX (v);
f11ee281 7887
50bc768d
NS
7888 gcc_assert (TREE_CODE (delta) == INTEGER_CST);
7889 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
f11ee281
JM
7890
7891 /* You can't call an abstract virtual function; it's abstract.
7892 So, we replace these functions with __pure_virtual. */
4977bab6 7893 if (DECL_PURE_VIRTUAL_P (fn_original))
4977bab6 7894 {
1b746b0f 7895 fn = abort_fndecl;
21b6aca3
JJ
7896 if (!TARGET_VTABLE_USES_DESCRIPTORS)
7897 {
7898 if (abort_fndecl_addr == NULL)
7899 abort_fndecl_addr
7900 = fold_convert (vfunc_ptr_type_node,
7901 build_fold_addr_expr (fn));
7902 init = abort_fndecl_addr;
7903 }
1b746b0f
AP
7904 }
7905 else
7906 {
7907 if (!integer_zerop (delta) || vcall_index)
7908 {
7909 fn = make_thunk (fn, /*this_adjusting=*/1, delta, vcall_index);
7910 if (!DECL_NAME (fn))
7911 finish_thunk (fn);
7912 }
7913 /* Take the address of the function, considering it to be of an
7914 appropriate generic type. */
21b6aca3
JJ
7915 if (!TARGET_VTABLE_USES_DESCRIPTORS)
7916 init = fold_convert (vfunc_ptr_type_node,
7917 build_fold_addr_expr (fn));
4977bab6 7918 }
f11ee281 7919 }
d0cd8b44 7920
ca36f057 7921 /* And add it to the chain of initializers. */
67231816
RH
7922 if (TARGET_VTABLE_USES_DESCRIPTORS)
7923 {
7924 int i;
7925 if (init == size_zero_node)
7926 for (i = 0; i < TARGET_VTABLE_USES_DESCRIPTORS; ++i)
9d6a019c 7927 CONSTRUCTOR_APPEND_ELT (*inits, NULL_TREE, init);
67231816
RH
7928 else
7929 for (i = 0; i < TARGET_VTABLE_USES_DESCRIPTORS; ++i)
7930 {
f293ce4b 7931 tree fdesc = build2 (FDESC_EXPR, vfunc_ptr_type_node,
21b6aca3 7932 fn, build_int_cst (NULL_TREE, i));
67231816
RH
7933 TREE_CONSTANT (fdesc) = 1;
7934
9d6a019c 7935 CONSTRUCTOR_APPEND_ELT (*inits, NULL_TREE, fdesc);
67231816
RH
7936 }
7937 }
7938 else
9d6a019c 7939 CONSTRUCTOR_APPEND_ELT (*inits, NULL_TREE, init);
ca36f057 7940 }
ca36f057
MM
7941}
7942
d0cd8b44 7943/* Adds to vid->inits the initializers for the vbase and vcall
c35cce41 7944 offsets in BINFO, which is in the hierarchy dominated by T. */
ca36f057 7945
c35cce41 7946static void
94edc4ab 7947build_vcall_and_vbase_vtbl_entries (tree binfo, vtbl_init_data* vid)
ca36f057 7948{
c35cce41 7949 tree b;
8d08fdba 7950
c35cce41 7951 /* If this is a derived class, we must first create entries
9bab6c90 7952 corresponding to the primary base class. */
911a71a7 7953 b = get_primary_binfo (binfo);
c35cce41 7954 if (b)
911a71a7 7955 build_vcall_and_vbase_vtbl_entries (b, vid);
c35cce41
MM
7956
7957 /* Add the vbase entries for this base. */
911a71a7 7958 build_vbase_offset_vtbl_entries (binfo, vid);
c35cce41 7959 /* Add the vcall entries for this base. */
911a71a7 7960 build_vcall_offset_vtbl_entries (binfo, vid);
ca36f057 7961}
8d08fdba 7962
ca36f057
MM
7963/* Returns the initializers for the vbase offset entries in the vtable
7964 for BINFO (which is part of the class hierarchy dominated by T), in
c35cce41
MM
7965 reverse order. VBASE_OFFSET_INDEX gives the vtable index
7966 where the next vbase offset will go. */
8d08fdba 7967
c35cce41 7968static void
94edc4ab 7969build_vbase_offset_vtbl_entries (tree binfo, vtbl_init_data* vid)
ca36f057 7970{
c35cce41
MM
7971 tree vbase;
7972 tree t;
90b1ca2f 7973 tree non_primary_binfo;
8d08fdba 7974
ca36f057
MM
7975 /* If there are no virtual baseclasses, then there is nothing to
7976 do. */
5775a06a 7977 if (!CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo)))
c35cce41 7978 return;
ca36f057 7979
911a71a7 7980 t = vid->derived;
c8094d83 7981
90b1ca2f
NS
7982 /* We might be a primary base class. Go up the inheritance hierarchy
7983 until we find the most derived class of which we are a primary base:
7984 it is the offset of that which we need to use. */
7985 non_primary_binfo = binfo;
7986 while (BINFO_INHERITANCE_CHAIN (non_primary_binfo))
7987 {
7988 tree b;
7989
7990 /* If we have reached a virtual base, then it must be a primary
7991 base (possibly multi-level) of vid->binfo, or we wouldn't
7992 have called build_vcall_and_vbase_vtbl_entries for it. But it
7993 might be a lost primary, so just skip down to vid->binfo. */
809e3e7f 7994 if (BINFO_VIRTUAL_P (non_primary_binfo))
90b1ca2f
NS
7995 {
7996 non_primary_binfo = vid->binfo;
7997 break;
7998 }
7999
8000 b = BINFO_INHERITANCE_CHAIN (non_primary_binfo);
8001 if (get_primary_binfo (b) != non_primary_binfo)
8002 break;
8003 non_primary_binfo = b;
8004 }
ca36f057 8005
c35cce41
MM
8006 /* Go through the virtual bases, adding the offsets. */
8007 for (vbase = TYPE_BINFO (BINFO_TYPE (binfo));
8008 vbase;
8009 vbase = TREE_CHAIN (vbase))
8010 {
8011 tree b;
8012 tree delta;
c8094d83 8013
809e3e7f 8014 if (!BINFO_VIRTUAL_P (vbase))
c35cce41 8015 continue;
ca36f057 8016
c35cce41
MM
8017 /* Find the instance of this virtual base in the complete
8018 object. */
dbbf88d1 8019 b = copied_binfo (vbase, binfo);
c35cce41
MM
8020
8021 /* If we've already got an offset for this virtual base, we
8022 don't need another one. */
8023 if (BINFO_VTABLE_PATH_MARKED (b))
8024 continue;
dbbf88d1 8025 BINFO_VTABLE_PATH_MARKED (b) = 1;
c35cce41
MM
8026
8027 /* Figure out where we can find this vbase offset. */
c8094d83 8028 delta = size_binop (MULT_EXPR,
911a71a7 8029 vid->index,
c35cce41
MM
8030 convert (ssizetype,
8031 TYPE_SIZE_UNIT (vtable_entry_type)));
911a71a7 8032 if (vid->primary_vtbl_p)
c35cce41
MM
8033 BINFO_VPTR_FIELD (b) = delta;
8034
8035 if (binfo != TYPE_BINFO (t))
50bc768d
NS
8036 /* The vbase offset had better be the same. */
8037 gcc_assert (tree_int_cst_equal (delta, BINFO_VPTR_FIELD (vbase)));
c35cce41
MM
8038
8039 /* The next vbase will come at a more negative offset. */
a6f5e048
RH
8040 vid->index = size_binop (MINUS_EXPR, vid->index,
8041 ssize_int (TARGET_VTABLE_DATA_ENTRY_DISTANCE));
c35cce41
MM
8042
8043 /* The initializer is the delta from BINFO to this virtual base.
4e7512c9
MM
8044 The vbase offsets go in reverse inheritance-graph order, and
8045 we are walking in inheritance graph order so these end up in
8046 the right order. */
db3927fb
AH
8047 delta = size_diffop_loc (input_location,
8048 BINFO_OFFSET (b), BINFO_OFFSET (non_primary_binfo));
c8094d83 8049
9d6a019c
NF
8050 CONSTRUCTOR_APPEND_ELT (vid->inits, NULL_TREE,
8051 fold_build1_loc (input_location, NOP_EXPR,
8052 vtable_entry_type, delta));
c35cce41 8053 }
8d08fdba 8054}
ca36f057 8055
b485e15b 8056/* Adds the initializers for the vcall offset entries in the vtable
d0cd8b44
JM
8057 for BINFO (which is part of the class hierarchy dominated by VID->DERIVED)
8058 to VID->INITS. */
b485e15b
MM
8059
8060static void
94edc4ab 8061build_vcall_offset_vtbl_entries (tree binfo, vtbl_init_data* vid)
b485e15b 8062{
548502d3
MM
8063 /* We only need these entries if this base is a virtual base. We
8064 compute the indices -- but do not add to the vtable -- when
8065 building the main vtable for a class. */
b9302915
MM
8066 if (binfo == TYPE_BINFO (vid->derived)
8067 || (BINFO_VIRTUAL_P (binfo)
8068 /* If BINFO is RTTI_BINFO, then (since BINFO does not
8069 correspond to VID->DERIVED), we are building a primary
8070 construction virtual table. Since this is a primary
8071 virtual table, we do not need the vcall offsets for
8072 BINFO. */
8073 && binfo != vid->rtti_binfo))
548502d3
MM
8074 {
8075 /* We need a vcall offset for each of the virtual functions in this
8076 vtable. For example:
b485e15b 8077
548502d3
MM
8078 class A { virtual void f (); };
8079 class B1 : virtual public A { virtual void f (); };
8080 class B2 : virtual public A { virtual void f (); };
8081 class C: public B1, public B2 { virtual void f (); };
d0cd8b44 8082
548502d3
MM
8083 A C object has a primary base of B1, which has a primary base of A. A
8084 C also has a secondary base of B2, which no longer has a primary base
8085 of A. So the B2-in-C construction vtable needs a secondary vtable for
8086 A, which will adjust the A* to a B2* to call f. We have no way of
8087 knowing what (or even whether) this offset will be when we define B2,
8088 so we store this "vcall offset" in the A sub-vtable and look it up in
8089 a "virtual thunk" for B2::f.
b485e15b 8090
548502d3
MM
8091 We need entries for all the functions in our primary vtable and
8092 in our non-virtual bases' secondary vtables. */
8093 vid->vbase = binfo;
8094 /* If we are just computing the vcall indices -- but do not need
8095 the actual entries -- not that. */
809e3e7f 8096 if (!BINFO_VIRTUAL_P (binfo))
548502d3
MM
8097 vid->generate_vcall_entries = false;
8098 /* Now, walk through the non-virtual bases, adding vcall offsets. */
8099 add_vcall_offset_vtbl_entries_r (binfo, vid);
8100 }
b485e15b
MM
8101}
8102
8103/* Build vcall offsets, starting with those for BINFO. */
8104
8105static void
94edc4ab 8106add_vcall_offset_vtbl_entries_r (tree binfo, vtbl_init_data* vid)
b485e15b
MM
8107{
8108 int i;
8109 tree primary_binfo;
fa743e8c 8110 tree base_binfo;
b485e15b
MM
8111
8112 /* Don't walk into virtual bases -- except, of course, for the
d0cd8b44
JM
8113 virtual base for which we are building vcall offsets. Any
8114 primary virtual base will have already had its offsets generated
8115 through the recursion in build_vcall_and_vbase_vtbl_entries. */
809e3e7f 8116 if (BINFO_VIRTUAL_P (binfo) && vid->vbase != binfo)
b485e15b 8117 return;
c8094d83 8118
b485e15b
MM
8119 /* If BINFO has a primary base, process it first. */
8120 primary_binfo = get_primary_binfo (binfo);
8121 if (primary_binfo)
8122 add_vcall_offset_vtbl_entries_r (primary_binfo, vid);
8123
8124 /* Add BINFO itself to the list. */
8125 add_vcall_offset_vtbl_entries_1 (binfo, vid);
8126
8127 /* Scan the non-primary bases of BINFO. */
fa743e8c
NS
8128 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
8129 if (base_binfo != primary_binfo)
8130 add_vcall_offset_vtbl_entries_r (base_binfo, vid);
b485e15b
MM
8131}
8132
9965d119 8133/* Called from build_vcall_offset_vtbl_entries_r. */
e92cc029 8134
b485e15b 8135static void
94edc4ab 8136add_vcall_offset_vtbl_entries_1 (tree binfo, vtbl_init_data* vid)
8d08fdba 8137{
e6a66567
MM
8138 /* Make entries for the rest of the virtuals. */
8139 if (abi_version_at_least (2))
31f8e4f3 8140 {
e6a66567 8141 tree orig_fn;
911a71a7 8142
e6a66567
MM
8143 /* The ABI requires that the methods be processed in declaration
8144 order. G++ 3.2 used the order in the vtable. */
8145 for (orig_fn = TYPE_METHODS (BINFO_TYPE (binfo));
8146 orig_fn;
910ad8de 8147 orig_fn = DECL_CHAIN (orig_fn))
e6a66567 8148 if (DECL_VINDEX (orig_fn))
95675950 8149 add_vcall_offset (orig_fn, binfo, vid);
e6a66567
MM
8150 }
8151 else
8152 {
8153 tree derived_virtuals;
8154 tree base_virtuals;
8155 tree orig_virtuals;
8156 /* If BINFO is a primary base, the most derived class which has
8157 BINFO as a primary base; otherwise, just BINFO. */
8158 tree non_primary_binfo;
8159
8160 /* We might be a primary base class. Go up the inheritance hierarchy
8161 until we find the most derived class of which we are a primary base:
8162 it is the BINFO_VIRTUALS there that we need to consider. */
8163 non_primary_binfo = binfo;
8164 while (BINFO_INHERITANCE_CHAIN (non_primary_binfo))
911a71a7 8165 {
e6a66567
MM
8166 tree b;
8167
8168 /* If we have reached a virtual base, then it must be vid->vbase,
8169 because we ignore other virtual bases in
8170 add_vcall_offset_vtbl_entries_r. In turn, it must be a primary
8171 base (possibly multi-level) of vid->binfo, or we wouldn't
8172 have called build_vcall_and_vbase_vtbl_entries for it. But it
8173 might be a lost primary, so just skip down to vid->binfo. */
809e3e7f 8174 if (BINFO_VIRTUAL_P (non_primary_binfo))
e6a66567 8175 {
8dc2b103 8176 gcc_assert (non_primary_binfo == vid->vbase);
e6a66567
MM
8177 non_primary_binfo = vid->binfo;
8178 break;
8179 }
911a71a7 8180
e6a66567
MM
8181 b = BINFO_INHERITANCE_CHAIN (non_primary_binfo);
8182 if (get_primary_binfo (b) != non_primary_binfo)
8183 break;
8184 non_primary_binfo = b;
8185 }
4e7512c9 8186
e6a66567
MM
8187 if (vid->ctor_vtbl_p)
8188 /* For a ctor vtable we need the equivalent binfo within the hierarchy
8189 where rtti_binfo is the most derived type. */
dbbf88d1
NS
8190 non_primary_binfo
8191 = original_binfo (non_primary_binfo, vid->rtti_binfo);
c8094d83 8192
e6a66567
MM
8193 for (base_virtuals = BINFO_VIRTUALS (binfo),
8194 derived_virtuals = BINFO_VIRTUALS (non_primary_binfo),
8195 orig_virtuals = BINFO_VIRTUALS (TYPE_BINFO (BINFO_TYPE (binfo)));
8196 base_virtuals;
8197 base_virtuals = TREE_CHAIN (base_virtuals),
8198 derived_virtuals = TREE_CHAIN (derived_virtuals),
8199 orig_virtuals = TREE_CHAIN (orig_virtuals))
8200 {
8201 tree orig_fn;
73ea87d7 8202
e6a66567
MM
8203 /* Find the declaration that originally caused this function to
8204 be present in BINFO_TYPE (binfo). */
8205 orig_fn = BV_FN (orig_virtuals);
9bab6c90 8206
e6a66567
MM
8207 /* When processing BINFO, we only want to generate vcall slots for
8208 function slots introduced in BINFO. So don't try to generate
8209 one if the function isn't even defined in BINFO. */
539ed333 8210 if (!SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), DECL_CONTEXT (orig_fn)))
e6a66567 8211 continue;
b485e15b 8212
95675950 8213 add_vcall_offset (orig_fn, binfo, vid);
e6a66567
MM
8214 }
8215 }
8216}
b485e15b 8217
95675950 8218/* Add a vcall offset entry for ORIG_FN to the vtable. */
b485e15b 8219
e6a66567 8220static void
95675950 8221add_vcall_offset (tree orig_fn, tree binfo, vtbl_init_data *vid)
e6a66567
MM
8222{
8223 size_t i;
8224 tree vcall_offset;
1e625046 8225 tree derived_entry;
9bab6c90 8226
e6a66567
MM
8227 /* If there is already an entry for a function with the same
8228 signature as FN, then we do not need a second vcall offset.
8229 Check the list of functions already present in the derived
8230 class vtable. */
ac47786e 8231 FOR_EACH_VEC_ELT (tree, vid->fns, i, derived_entry)
e6a66567 8232 {
e6a66567
MM
8233 if (same_signature_p (derived_entry, orig_fn)
8234 /* We only use one vcall offset for virtual destructors,
8235 even though there are two virtual table entries. */
8236 || (DECL_DESTRUCTOR_P (derived_entry)
8237 && DECL_DESTRUCTOR_P (orig_fn)))
8238 return;
8239 }
4e7512c9 8240
e6a66567
MM
8241 /* If we are building these vcall offsets as part of building
8242 the vtable for the most derived class, remember the vcall
8243 offset. */
8244 if (vid->binfo == TYPE_BINFO (vid->derived))
0871761b 8245 {
d4e6fecb 8246 tree_pair_p elt = VEC_safe_push (tree_pair_s, gc,
0871761b
NS
8247 CLASSTYPE_VCALL_INDICES (vid->derived),
8248 NULL);
8249 elt->purpose = orig_fn;
8250 elt->value = vid->index;
8251 }
c8094d83 8252
e6a66567
MM
8253 /* The next vcall offset will be found at a more negative
8254 offset. */
8255 vid->index = size_binop (MINUS_EXPR, vid->index,
8256 ssize_int (TARGET_VTABLE_DATA_ENTRY_DISTANCE));
8257
8258 /* Keep track of this function. */
1e625046 8259 VEC_safe_push (tree, gc, vid->fns, orig_fn);
e6a66567
MM
8260
8261 if (vid->generate_vcall_entries)
8262 {
8263 tree base;
e6a66567 8264 tree fn;
548502d3 8265
e6a66567 8266 /* Find the overriding function. */
95675950 8267 fn = find_final_overrider (vid->rtti_binfo, binfo, orig_fn);
e6a66567 8268 if (fn == error_mark_node)
e8160c9a 8269 vcall_offset = build_zero_cst (vtable_entry_type);
e6a66567
MM
8270 else
8271 {
95675950
MM
8272 base = TREE_VALUE (fn);
8273
8274 /* The vbase we're working on is a primary base of
8275 vid->binfo. But it might be a lost primary, so its
8276 BINFO_OFFSET might be wrong, so we just use the
8277 BINFO_OFFSET from vid->binfo. */
db3927fb
AH
8278 vcall_offset = size_diffop_loc (input_location,
8279 BINFO_OFFSET (base),
95675950 8280 BINFO_OFFSET (vid->binfo));
db3927fb
AH
8281 vcall_offset = fold_build1_loc (input_location,
8282 NOP_EXPR, vtable_entry_type,
7866705a 8283 vcall_offset);
548502d3 8284 }
34cd5ae7 8285 /* Add the initializer to the vtable. */
9d6a019c 8286 CONSTRUCTOR_APPEND_ELT (vid->inits, NULL_TREE, vcall_offset);
c35cce41 8287 }
570221c2 8288}
b54ccf71 8289
34cd5ae7 8290/* Return vtbl initializers for the RTTI entries corresponding to the
aabb4cd6 8291 BINFO's vtable. The RTTI entries should indicate the object given
73ea87d7 8292 by VID->rtti_binfo. */
b54ccf71 8293
9bab6c90 8294static void
94edc4ab 8295build_rtti_vtbl_entries (tree binfo, vtbl_init_data* vid)
b54ccf71 8296{
ca36f057 8297 tree b;
aabb4cd6 8298 tree t;
ca36f057
MM
8299 tree offset;
8300 tree decl;
8301 tree init;
b54ccf71 8302
73ea87d7 8303 t = BINFO_TYPE (vid->rtti_binfo);
b54ccf71 8304
ca36f057
MM
8305 /* To find the complete object, we will first convert to our most
8306 primary base, and then add the offset in the vtbl to that value. */
8307 b = binfo;
9965d119 8308 while (CLASSTYPE_HAS_PRIMARY_BASE_P (BINFO_TYPE (b))
0cbd7506 8309 && !BINFO_LOST_PRIMARY_P (b))
b54ccf71 8310 {
c35cce41
MM
8311 tree primary_base;
8312
911a71a7 8313 primary_base = get_primary_binfo (b);
fc6633e0
NS
8314 gcc_assert (BINFO_PRIMARY_P (primary_base)
8315 && BINFO_INHERITANCE_CHAIN (primary_base) == b);
c35cce41 8316 b = primary_base;
b54ccf71 8317 }
db3927fb
AH
8318 offset = size_diffop_loc (input_location,
8319 BINFO_OFFSET (vid->rtti_binfo), BINFO_OFFSET (b));
8f032717 8320
8fa33dfa
MM
8321 /* The second entry is the address of the typeinfo object. */
8322 if (flag_rtti)
7993382e 8323 decl = build_address (get_tinfo_decl (t));
ca36f057 8324 else
8fa33dfa 8325 decl = integer_zero_node;
c8094d83 8326
8fa33dfa
MM
8327 /* Convert the declaration to a type that can be stored in the
8328 vtable. */
7993382e 8329 init = build_nop (vfunc_ptr_type_node, decl);
9d6a019c 8330 CONSTRUCTOR_APPEND_ELT (vid->inits, NULL_TREE, init);
8f032717 8331
78dcd41a
VR
8332 /* Add the offset-to-top entry. It comes earlier in the vtable than
8333 the typeinfo entry. Convert the offset to look like a
c4372ef4 8334 function pointer, so that we can put it in the vtable. */
7993382e 8335 init = build_nop (vfunc_ptr_type_node, offset);
9d6a019c 8336 CONSTRUCTOR_APPEND_ELT (vid->inits, NULL_TREE, init);
8f032717 8337}
0f59171d
RH
8338
8339/* Fold a OBJ_TYPE_REF expression to the address of a function.
8340 KNOWN_TYPE carries the true type of OBJ_TYPE_REF_OBJECT(REF). */
8341
8342tree
8343cp_fold_obj_type_ref (tree ref, tree known_type)
8344{
8345 HOST_WIDE_INT index = tree_low_cst (OBJ_TYPE_REF_TOKEN (ref), 1);
8346 HOST_WIDE_INT i = 0;
604a3205 8347 tree v = BINFO_VIRTUALS (TYPE_BINFO (known_type));
0f59171d
RH
8348 tree fndecl;
8349
8350 while (i != index)
8351 {
8352 i += (TARGET_VTABLE_USES_DESCRIPTORS
8353 ? TARGET_VTABLE_USES_DESCRIPTORS : 1);
8354 v = TREE_CHAIN (v);
8355 }
8356
8357 fndecl = BV_FN (v);
8358
8359#ifdef ENABLE_CHECKING
8dc2b103
NS
8360 gcc_assert (tree_int_cst_equal (OBJ_TYPE_REF_TOKEN (ref),
8361 DECL_VINDEX (fndecl)));
0f59171d
RH
8362#endif
8363
8634c649
JJ
8364 cgraph_node (fndecl)->local.vtable_method = true;
8365
0f59171d
RH
8366 return build_address (fndecl);
8367}
d7afec4b 8368
1b746b0f 8369#include "gt-cp-class.h"
This page took 5.863438 seconds and 5 git commands to generate.