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