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