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