]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/cp/class.c
re PR libmudflap/21724 (libmudflap/Makefile.am, refusing to install mf-runtime.h...
[thirdparty/gcc.git] / gcc / cp / class.c
CommitLineData
8d08fdba 1/* Functions related to building classes and their related objects.
06ceef4e 2 Copyright (C) 1987, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
0a57b6af 3 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
8d08fdba
MS
4 Contributed by Michael Tiemann (tiemann@cygnus.com)
5
f5adbb8d 6This file is part of GCC.
8d08fdba 7
f5adbb8d 8GCC is free software; you can redistribute it and/or modify
8d08fdba
MS
9it under the terms of the GNU General Public License as published by
10the Free Software Foundation; either version 2, or (at your option)
11any later version.
12
f5adbb8d 13GCC is distributed in the hope that it will be useful,
8d08fdba
MS
14but WITHOUT ANY WARRANTY; without even the implied warranty of
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16GNU General Public License for more details.
17
18You should have received a copy of the GNU General Public License
f5adbb8d 19along with GCC; see the file COPYING. If not, write to
e9fa0c7c
RK
20the Free Software Foundation, 59 Temple Place - Suite 330,
21Boston, MA 02111-1307, 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"
8d08fdba 39
61a127b3
MM
40/* The number of nested classes being processed. If we are not in the
41 scope of any class, this is zero. */
42
8d08fdba
MS
43int current_class_depth;
44
61a127b3
MM
45/* In order to deal with nested classes, we keep a stack of classes.
46 The topmost entry is the innermost class, and is the entry at index
47 CURRENT_CLASS_DEPTH */
48
49typedef struct class_stack_node {
50 /* The name of the class. */
51 tree name;
52
53 /* The _TYPE node for the class. */
54 tree type;
55
56 /* The access specifier pending for new declarations in the scope of
57 this class. */
58 tree access;
8f032717
MM
59
60 /* If were defining TYPE, the names used in this class. */
61 splay_tree names_used;
61a127b3
MM
62}* class_stack_node_t;
63
911a71a7 64typedef struct vtbl_init_data_s
c35cce41 65{
911a71a7
MM
66 /* The base for which we're building initializers. */
67 tree binfo;
73ea87d7 68 /* The type of the most-derived type. */
c35cce41 69 tree derived;
73ea87d7
NS
70 /* The binfo for the dynamic type. This will be TYPE_BINFO (derived),
71 unless ctor_vtbl_p is true. */
72 tree rtti_binfo;
9bab6c90
MM
73 /* The negative-index vtable initializers built up so far. These
74 are in order from least negative index to most negative index. */
75 tree inits;
d0cd8b44 76 /* The last (i.e., most negative) entry in INITS. */
9bab6c90 77 tree* last_init;
c35cce41 78 /* The binfo for the virtual base for which we're building
911a71a7 79 vcall offset initializers. */
c35cce41 80 tree vbase;
9bab6c90
MM
81 /* The functions in vbase for which we have already provided vcall
82 offsets. */
1e625046 83 VEC(tree,gc) *fns;
c35cce41
MM
84 /* The vtable index of the next vcall or vbase offset. */
85 tree index;
86 /* Nonzero if we are building the initializer for the primary
87 vtable. */
911a71a7
MM
88 int primary_vtbl_p;
89 /* Nonzero if we are building the initializer for a construction
90 vtable. */
91 int ctor_vtbl_p;
548502d3
MM
92 /* True when adding vcall offset entries to the vtable. False when
93 merely computing the indices. */
94 bool generate_vcall_entries;
911a71a7 95} vtbl_init_data;
c35cce41 96
c20118a8 97/* The type of a function passed to walk_subobject_offsets. */
94edc4ab 98typedef int (*subobject_offset_fn) (tree, tree, splay_tree);
c20118a8 99
4639c5c6 100/* The stack itself. This is a dynamically resized array. The
61a127b3
MM
101 number of elements allocated is CURRENT_CLASS_STACK_SIZE. */
102static int current_class_stack_size;
103static class_stack_node_t current_class_stack;
104
1f6e1acc
AS
105/* An array of all local classes present in this translation unit, in
106 declaration order. */
806aa901 107VEC(tree,gc) *local_classes;
1f6e1acc 108
94edc4ab
NN
109static tree get_vfield_name (tree);
110static void finish_struct_anon (tree);
111static tree get_vtable_name (tree);
112static tree get_basefndecls (tree, tree);
113static int build_primary_vtable (tree, tree);
dbbf88d1 114static int build_secondary_vtable (tree);
94edc4ab
NN
115static void finish_vtbls (tree);
116static void modify_vtable_entry (tree, tree, tree, tree, tree *);
94edc4ab
NN
117static void finish_struct_bits (tree);
118static int alter_access (tree, tree, tree);
119static void handle_using_decl (tree, tree);
94edc4ab
NN
120static tree dfs_modify_vtables (tree, void *);
121static tree modify_all_vtables (tree, tree);
fc6633e0 122static void determine_primary_bases (tree);
94edc4ab
NN
123static void finish_struct_methods (tree);
124static void maybe_warn_about_overly_private_class (tree);
94edc4ab
NN
125static int method_name_cmp (const void *, const void *);
126static int resort_method_name_cmp (const void *, const void *);
e5e459bf 127static void add_implicitly_declared_members (tree, int, int);
94edc4ab 128static tree fixed_type_or_null (tree, int *, int *);
92af500d
NS
129static tree resolve_address_of_overloaded_function (tree, tree, tsubst_flags_t,
130 bool, tree);
00bfffa4 131static tree build_simple_base_path (tree expr, tree binfo);
94edc4ab
NN
132static tree build_vtbl_ref_1 (tree, tree);
133static tree build_vtbl_initializer (tree, tree, tree, tree, int *);
134static int count_fields (tree);
d07605f5 135static int add_fields_to_record_type (tree, struct sorted_fields_type*, int);
94edc4ab 136static void check_bitfield_decl (tree);
e5e459bf
AO
137static void check_field_decl (tree, tree, int *, int *, int *);
138static void check_field_decls (tree, tree *, int *, int *);
58731fd1
MM
139static tree *build_base_field (record_layout_info, tree, splay_tree, tree *);
140static void build_base_fields (record_layout_info, splay_tree, tree *);
94edc4ab
NN
141static void check_methods (tree);
142static void remove_zero_width_bit_fields (tree);
e5e459bf 143static void check_bases (tree, int *, int *);
58731fd1
MM
144static void check_bases_and_members (tree);
145static tree create_vtable_ptr (tree, tree *);
17bbb839 146static void include_empty_classes (record_layout_info);
e93ee644 147static void layout_class_type (tree, tree *);
94edc4ab
NN
148static void fixup_pending_inline (tree);
149static void fixup_inline_methods (tree);
dbbf88d1 150static void propagate_binfo_offsets (tree, tree);
17bbb839 151static void layout_virtual_bases (record_layout_info, splay_tree);
94edc4ab
NN
152static void build_vbase_offset_vtbl_entries (tree, vtbl_init_data *);
153static void add_vcall_offset_vtbl_entries_r (tree, vtbl_init_data *);
154static void add_vcall_offset_vtbl_entries_1 (tree, vtbl_init_data *);
155static void build_vcall_offset_vtbl_entries (tree, vtbl_init_data *);
e6a66567 156static void add_vcall_offset (tree, tree, vtbl_init_data *);
94edc4ab 157static void layout_vtable_decl (tree, int);
5d5a519f 158static tree dfs_find_final_overrider_pre (tree, void *);
dbbf88d1 159static tree dfs_find_final_overrider_post (tree, void *);
94edc4ab
NN
160static tree find_final_overrider (tree, tree, tree);
161static int make_new_vtable (tree, tree);
162static int maybe_indent_hierarchy (FILE *, int, int);
dbbf88d1 163static tree dump_class_hierarchy_r (FILE *, int, tree, tree, int);
94edc4ab 164static void dump_class_hierarchy (tree);
bb885938 165static void dump_class_hierarchy_1 (FILE *, int, tree);
94edc4ab
NN
166static void dump_array (FILE *, tree);
167static void dump_vtable (tree, tree, tree);
168static void dump_vtt (tree, tree);
bb885938 169static void dump_thunk (FILE *, int, tree);
94edc4ab
NN
170static tree build_vtable (tree, tree, tree);
171static void initialize_vtable (tree, tree);
94edc4ab 172static void layout_nonempty_base_or_field (record_layout_info,
5d5a519f 173 tree, tree, splay_tree);
94edc4ab 174static tree end_of_class (tree, int);
dbbf88d1 175static bool layout_empty_base (tree, tree, splay_tree);
94edc4ab
NN
176static void accumulate_vtbl_inits (tree, tree, tree, tree, tree);
177static tree dfs_accumulate_vtbl_inits (tree, tree, tree, tree,
178 tree);
179static void build_rtti_vtbl_entries (tree, vtbl_init_data *);
5d5a519f 180static void build_vcall_and_vbase_vtbl_entries (tree, vtbl_init_data *);
94edc4ab
NN
181static void clone_constructors_and_destructors (tree);
182static tree build_clone (tree, tree);
a2ddc397 183static void update_vtable_entry_for_fn (tree, tree, tree, tree *, unsigned);
94edc4ab
NN
184static void build_ctor_vtbl_group (tree, tree);
185static void build_vtt (tree);
186static tree binfo_ctor_vtable (tree);
187static tree *build_vtt_inits (tree, tree, tree *, tree *);
188static tree dfs_build_secondary_vptr_vtt_inits (tree, void *);
94edc4ab 189static tree dfs_fixup_binfo_vtbls (tree, void *);
94edc4ab
NN
190static int record_subobject_offset (tree, tree, splay_tree);
191static int check_subobject_offset (tree, tree, splay_tree);
192static int walk_subobject_offsets (tree, subobject_offset_fn,
5d5a519f 193 tree, splay_tree, tree, int);
94edc4ab
NN
194static void record_subobject_offsets (tree, tree, splay_tree, int);
195static int layout_conflict_p (tree, tree, splay_tree, int);
196static int splay_tree_compare_integer_csts (splay_tree_key k1,
5d5a519f 197 splay_tree_key k2);
94edc4ab
NN
198static void warn_about_ambiguous_bases (tree);
199static bool type_requires_array_cookie (tree);
956d9305 200static bool contains_empty_class_p (tree);
9368208b 201static bool base_derived_from (tree, tree);
7ba539c6 202static int empty_base_at_nonzero_offset_p (tree, tree, splay_tree);
ba9a991f 203static tree end_of_base (tree);
548502d3 204static tree get_vcall_index (tree, tree);
9965d119 205
51c184be 206/* Variables shared between class.c and call.c. */
8d08fdba 207
5566b478 208#ifdef GATHER_STATISTICS
8d08fdba
MS
209int n_vtables = 0;
210int n_vtable_entries = 0;
211int n_vtable_searches = 0;
212int n_vtable_elems = 0;
213int n_convert_harshness = 0;
214int n_compute_conversion_costs = 0;
8d08fdba 215int n_inner_fields_searched = 0;
5566b478 216#endif
8d08fdba 217
338d90b8
NS
218/* Convert to or from a base subobject. EXPR is an expression of type
219 `A' or `A*', an expression of type `B' or `B*' is returned. To
220 convert A to a base B, CODE is PLUS_EXPR and BINFO is the binfo for
221 the B base instance within A. To convert base A to derived B, CODE
222 is MINUS_EXPR and BINFO is the binfo for the A instance within B.
223 In this latter case, A must not be a morally virtual base of B.
224 NONNULL is true if EXPR is known to be non-NULL (this is only
225 needed when EXPR is of pointer type). CV qualifiers are preserved
226 from EXPR. */
ca36f057
MM
227
228tree
94edc4ab
NN
229build_base_path (enum tree_code code,
230 tree expr,
231 tree binfo,
232 int nonnull)
1a588ad7 233{
338d90b8 234 tree v_binfo = NULL_TREE;
6bc34b14 235 tree d_binfo = NULL_TREE;
338d90b8
NS
236 tree probe;
237 tree offset;
238 tree target_type;
239 tree null_test = NULL;
240 tree ptr_target_type;
ca36f057 241 int fixed_type_p;
338d90b8 242 int want_pointer = TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE;
00bfffa4 243 bool has_empty = false;
d7981fd9 244 bool virtual_access;
1a588ad7 245
338d90b8
NS
246 if (expr == error_mark_node || binfo == error_mark_node || !binfo)
247 return error_mark_node;
6bc34b14
JM
248
249 for (probe = binfo; probe; probe = BINFO_INHERITANCE_CHAIN (probe))
250 {
251 d_binfo = probe;
00bfffa4
JM
252 if (is_empty_class (BINFO_TYPE (probe)))
253 has_empty = true;
809e3e7f 254 if (!v_binfo && BINFO_VIRTUAL_P (probe))
6bc34b14
JM
255 v_binfo = probe;
256 }
338d90b8
NS
257
258 probe = TYPE_MAIN_VARIANT (TREE_TYPE (expr));
259 if (want_pointer)
260 probe = TYPE_MAIN_VARIANT (TREE_TYPE (probe));
00bfffa4 261
539ed333
NS
262 gcc_assert ((code == MINUS_EXPR
263 && SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), probe))
264 || (code == PLUS_EXPR
265 && SAME_BINFO_TYPE_P (BINFO_TYPE (d_binfo), probe)));
338d90b8 266
00bfffa4
JM
267 if (binfo == d_binfo)
268 /* Nothing to do. */
269 return expr;
270
338d90b8
NS
271 if (code == MINUS_EXPR && v_binfo)
272 {
1f070f2b 273 error ("cannot convert from base %qT to derived type %qT via virtual base %qT",
6bc34b14 274 BINFO_TYPE (binfo), BINFO_TYPE (d_binfo), BINFO_TYPE (v_binfo));
338d90b8
NS
275 return error_mark_node;
276 }
1a588ad7 277
f576dfc4
JM
278 if (!want_pointer)
279 /* This must happen before the call to save_expr. */
280 expr = build_unary_op (ADDR_EXPR, expr, 0);
281
00bfffa4 282 offset = BINFO_OFFSET (binfo);
ca36f057 283 fixed_type_p = resolves_to_fixed_type_p (expr, &nonnull);
00bfffa4 284
d7981fd9
JM
285 /* Do we need to look in the vtable for the real offset? */
286 virtual_access = (v_binfo && fixed_type_p <= 0);
287
288 /* Do we need to check for a null pointer? */
289 if (want_pointer && !nonnull && (virtual_access || !integer_zerop (offset)))
00bfffa4
JM
290 null_test = error_mark_node;
291
d7981fd9
JM
292 /* Protect against multiple evaluation if necessary. */
293 if (TREE_SIDE_EFFECTS (expr) && (null_test || virtual_access))
ca36f057 294 expr = save_expr (expr);
f2606a97 295
d7981fd9 296 /* Now that we've saved expr, build the real null test. */
00bfffa4 297 if (null_test)
471a58a9
AP
298 {
299 tree zero = cp_convert (TREE_TYPE (expr), integer_zero_node);
7866705a
SB
300 null_test = fold_build2 (NE_EXPR, boolean_type_node,
301 expr, zero);
471a58a9 302 }
00bfffa4
JM
303
304 /* If this is a simple base reference, express it as a COMPONENT_REF. */
d7981fd9 305 if (code == PLUS_EXPR && !virtual_access
00bfffa4
JM
306 /* We don't build base fields for empty bases, and they aren't very
307 interesting to the optimizers anyway. */
308 && !has_empty)
309 {
310 expr = build_indirect_ref (expr, NULL);
311 expr = build_simple_base_path (expr, binfo);
312 if (want_pointer)
442c8e31 313 expr = build_address (expr);
00bfffa4
JM
314 target_type = TREE_TYPE (expr);
315 goto out;
316 }
317
d7981fd9 318 if (virtual_access)
1a588ad7 319 {
338d90b8 320 /* Going via virtual base V_BINFO. We need the static offset
6bc34b14
JM
321 from V_BINFO to BINFO, and the dynamic offset from D_BINFO to
322 V_BINFO. That offset is an entry in D_BINFO's vtable. */
1f5a253a
NS
323 tree v_offset;
324
325 if (fixed_type_p < 0 && in_base_initializer)
326 {
327 /* In a base member initializer, we cannot rely on
328 the vtable being set up. We have to use the vtt_parm. */
329 tree derived = BINFO_INHERITANCE_CHAIN (v_binfo);
6de9cd9a
DN
330 tree t;
331
332 t = TREE_TYPE (TYPE_VFIELD (BINFO_TYPE (derived)));
333 t = build_pointer_type (t);
334 v_offset = convert (t, current_vtt_parm);
f293ce4b
RS
335 v_offset = build2 (PLUS_EXPR, t, v_offset,
336 BINFO_VPTR_INDEX (derived));
6de9cd9a 337 v_offset = build_indirect_ref (v_offset, NULL);
1f5a253a
NS
338 }
339 else
340 v_offset = build_vfield_ref (build_indirect_ref (expr, NULL),
341 TREE_TYPE (TREE_TYPE (expr)));
338d90b8 342
f293ce4b
RS
343 v_offset = build2 (PLUS_EXPR, TREE_TYPE (v_offset),
344 v_offset, BINFO_VPTR_FIELD (v_binfo));
338d90b8
NS
345 v_offset = build1 (NOP_EXPR,
346 build_pointer_type (ptrdiff_type_node),
347 v_offset);
348 v_offset = build_indirect_ref (v_offset, NULL);
6de9cd9a
DN
349 TREE_CONSTANT (v_offset) = 1;
350 TREE_INVARIANT (v_offset) = 1;
f63ab951 351
7b6d72fc
MM
352 offset = convert_to_integer (ptrdiff_type_node,
353 size_diffop (offset,
354 BINFO_OFFSET (v_binfo)));
8d08fdba 355
338d90b8 356 if (!integer_zerop (offset))
f293ce4b 357 v_offset = build2 (code, ptrdiff_type_node, v_offset, offset);
f2606a97
JM
358
359 if (fixed_type_p < 0)
360 /* Negative fixed_type_p means this is a constructor or destructor;
361 virtual base layout is fixed in in-charge [cd]tors, but not in
362 base [cd]tors. */
f293ce4b
RS
363 offset = build3 (COND_EXPR, ptrdiff_type_node,
364 build2 (EQ_EXPR, boolean_type_node,
365 current_in_charge_parm, integer_zero_node),
366 v_offset,
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);
338d90b8
NS
373
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;
379
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
NS
385 null_test = NULL;
386
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
NS
412 tree temp;
413
8dc2b103 414 gcc_assert (TYPE_MAIN_VARIANT (TREE_TYPE (expr)) == type);
12a669d1
NS
415
416 /* Transform `(a, b).x' into `(*(a, &b)).x', `(a ? b : c).x'
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. */
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);
446
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;
454
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,
18e4be85 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)))
f293ce4b
RS
510 expr = build2 (PLUS_EXPR, pointer_type, expr,
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
NS
578 vtbl = build_vfield_ref (instance, basetype);
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:
4684cd27 697
78e0d62b
RH
698 #pragma interface
699 struct S { virtual void member (); };
4684cd27 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
7d52ae23 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);
1aa4ccd4 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
NS
755 decl = get_vtable_decl (type, /*complete=*/0);
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
MM
762 return 0;
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);
8d7a5379
MM
813
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
NN
849modify_vtable_entry (tree t,
850 tree binfo,
851 tree fndecl,
852 tree delta,
dbbf88d1 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;
f5c28a15
NS
925
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. */
aaaa46d2 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
NS
967 current_fns = insert_p ? NULL_TREE : VEC_index (tree, method_vec, slot);
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;
8a188e24
NS
1009
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;
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
04ec0065
MM
1021 if (same && compparms (parms1, parms2)
1022 && (!DECL_CONV_FN_P (fn)
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))
1032 cp_error_at ("repeated using declaration %qD", using_decl);
1033 else
1034 cp_error_at ("using declaration %qD conflicts with a previous using declaration",
1035 using_decl);
1036 }
f0ab6bf2 1037 else
03017874 1038 {
b2a9b208
NS
1039 cp_error_at ("%q#D cannot be overloaded", method);
1040 cp_error_at ("with %q#D", fn);
03017874 1041 }
b2a9b208
NS
1042
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
5dd236e2 1052 /* Add the new binding. */
9ba5ff0f
NS
1053 overload = build_overload (method, current_fns);
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)
1f070f2b
GDR
1095 cp_error_at ("conflicting access specifications for method"
1096 " %qD, 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);
79ad62b2 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 }
98ed9dae
NS
1144
1145 cp_emit_debug_info_for_using (decl, current_class_type);
1146
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 {
1f070f2b
GDR
1159 cp_error_at ("%qD invalid in %q#T", using_decl, t);
1160 cp_error_at (" because of local method %q#D with same name",
aa52c1ff
JM
1161 OVL_CURRENT (old_value));
1162 return;
79ad62b2
MM
1163 }
1164 }
186c0fbe 1165 else if (!DECL_ARTIFICIAL (old_value))
aa52c1ff 1166 {
1f070f2b
GDR
1167 cp_error_at ("%qD invalid in %q#T", using_decl, t);
1168 cp_error_at (" because of local member %q#D with same name", old_value);
aa52c1ff
JM
1169 return;
1170 }
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,
94edc4ab
NN
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));
37a247a0 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);
834c6dff
MM
1243 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
1244 |= TYPE_HAS_NONTRIVIAL_DESTRUCTOR (basetype);
607cf131
MM
1245 TYPE_HAS_COMPLEX_ASSIGN_REF (t)
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);
5ec1192e
MM
1249 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t)
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));
1280
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
NS
1298 tree delta;
1299
1300 BINFO_PRIMARY_P (this_primary) = 1;
1301 BINFO_INHERITANCE_CHAIN (this_primary) = base_binfo;
1302
1303 /* A virtual binfo might have been copied from within
1304 another hierarchy. As we're about to use it as a
1305 primary base, make sure the offsets match. */
1306 delta = size_diffop (convert (ssizetype,
1307 BINFO_OFFSET (base_binfo)),
1308 convert (ssizetype,
1309 BINFO_OFFSET (this_primary)));
dbbf88d1 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 }
1349
1350 found:
1351 /* If we've got a primary base, use it. */
1352 if (primary)
7cafdb8b 1353 {
fc6633e0
NS
1354 tree basetype = BINFO_TYPE (primary);
1355
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
1367 another hierarchy. As we're about to use it as a primary
1368 base, make sure the offsets match. */
1369 delta = size_diffop (ssize_int (0),
1370 convert (ssizetype, BINFO_OFFSET (primary)));
1371
1372 propagate_binfo_offsets (primary, delta);
7cafdb8b 1373 }
fc6633e0
NS
1374
1375 primary = TYPE_BINFO (basetype);
1376
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
NS
1389 tree variants;
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);
834c6dff
MM
1400 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (variants)
1401 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t);
8d08fdba 1402
4c6b7393 1403 TYPE_POLYMORPHIC_P (variants) = TYPE_POLYMORPHIC_P (t);
cad7e87b
NS
1404
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);
16ae29f1 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
MM
1442/* Issue warnings about T having private constructors, but no friends,
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
MM
1463 || CLASSTYPE_TEMPLATE_INSTANTIATION (t))
1464 /* There's no reason to even consider warning about this
1465 class. */
1466 return;
1467
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. */
1487 if (!DECL_ARTIFICIAL (fn))
1488 {
1489 if (!TREE_PRIVATE (fn))
b0e0b31f 1490 {
056a3b12
MM
1491 if (DECL_STATIC_FUNCTION_P (fn))
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;
b0e0b31f 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
MM
1502 has_member_fn = 1;
1503 }
aed7b2a6 1504
056a3b12
MM
1505 if (!has_nonprivate_method && has_member_fn)
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
NS
1514 tree binfo = TYPE_BINFO (t);
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 }
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;
b0e0b31f 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
056a3b12 1549 template <class T> class C { private: C(); };
b0e0b31f 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;
1556 else
aaaa46d2 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",
1f070f2b 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;
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
1633void
94edc4ab
NN
1634resort_type_method_vec (void* obj,
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. */
b0e0b31f
MM
1681 for (fn_fields = TYPE_METHODS (t); fn_fields;
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
1a588ad7 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. */
1762
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
MM
1796static bool
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;
1817
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 }
f7a8132a
MM
1831
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
5e19c053 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
5e19c053
MM
1887 `T::f' in the vtable for `R'.
1888
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);
5d5a519f 1904
78b45a24 1905 /* If there was no winner, issue an error message. */
9368208b 1906 if (!ffod.candidates || TREE_CHAIN (ffod.candidates))
d0cd8b44 1907 {
1f070f2b 1908 error ("no unique final overrider for %qD in %qT", fn,
95675950 1909 BINFO_TYPE (derived));
d0cd8b44
JM
1910 return error_mark_node;
1911 }
dd42e135 1912
9368208b 1913 return ffod.candidates;
a292b002
MS
1914}
1915
548502d3
MM
1916/* Return the index of the vcall offset for FN when TYPE is used as a
1917 virtual base. */
d0cd8b44 1918
d0cd8b44 1919static tree
548502d3 1920get_vcall_index (tree fn, tree type)
d0cd8b44 1921{
d4e6fecb 1922 VEC(tree_pair_s,gc) *indices = CLASSTYPE_VCALL_INDICES (type);
0871761b
NS
1923 tree_pair_p p;
1924 unsigned ix;
d0cd8b44 1925
0871761b
NS
1926 for (ix = 0; VEC_iterate (tree_pair_s, indices, ix, p); ix++)
1927 if ((DECL_DESTRUCTOR_P (fn) && DECL_DESTRUCTOR_P (p->purpose))
1928 || same_signature_p (fn, p->purpose))
1929 return p->value;
548502d3
MM
1930
1931 /* There should always be an appropriate index. */
8dc2b103 1932 gcc_unreachable ();
d0cd8b44 1933}
d0cd8b44
JM
1934
1935/* Update an entry in the vtable for BINFO, which is in the hierarchy
4639c5c6 1936 dominated by T. FN has been overridden in BINFO; VIRTUALS points to the
d0cd8b44 1937 corresponding position in the BINFO_VIRTUALS list. */
4e7512c9
MM
1938
1939static void
a2ddc397
NS
1940update_vtable_entry_for_fn (tree t, tree binfo, tree fn, tree* virtuals,
1941 unsigned ix)
4e7512c9
MM
1942{
1943 tree b;
1944 tree overrider;
4e7512c9 1945 tree delta;
31f8e4f3 1946 tree virtual_base;
d0cd8b44 1947 tree first_defn;
3cfabe60
NS
1948 tree overrider_fn, overrider_target;
1949 tree target_fn = DECL_THUNK_P (fn) ? THUNK_TARGET (fn) : fn;
1950 tree over_return, base_return;
f11ee281 1951 bool lost = false;
4e7512c9 1952
d0cd8b44
JM
1953 /* Find the nearest primary base (possibly binfo itself) which defines
1954 this function; this is the class the caller will convert to when
1955 calling FN through BINFO. */
1956 for (b = binfo; ; b = get_primary_binfo (b))
4e7512c9 1957 {
50bc768d 1958 gcc_assert (b);
3cfabe60 1959 if (look_for_overrides_here (BINFO_TYPE (b), target_fn))
31f8e4f3 1960 break;
f11ee281
JM
1961
1962 /* The nearest definition is from a lost primary. */
1963 if (BINFO_LOST_PRIMARY_P (b))
1964 lost = true;
4e7512c9 1965 }
d0cd8b44 1966 first_defn = b;
4e7512c9 1967
31f8e4f3 1968 /* Find the final overrider. */
3cfabe60 1969 overrider = find_final_overrider (TYPE_BINFO (t), b, target_fn);
4e7512c9
MM
1970 if (overrider == error_mark_node)
1971 return;
3cfabe60
NS
1972 overrider_target = overrider_fn = TREE_PURPOSE (overrider);
1973
9bcb9aae 1974 /* Check for adjusting covariant return types. */
3cfabe60
NS
1975 over_return = TREE_TYPE (TREE_TYPE (overrider_target));
1976 base_return = TREE_TYPE (TREE_TYPE (target_fn));
1977
1978 if (POINTER_TYPE_P (over_return)
1979 && TREE_CODE (over_return) == TREE_CODE (base_return)
1980 && CLASS_TYPE_P (TREE_TYPE (over_return))
1981 && CLASS_TYPE_P (TREE_TYPE (base_return)))
1982 {
1983 /* If FN is a covariant thunk, we must figure out the adjustment
1984 to the final base FN was converting to. As OVERRIDER_TARGET might
1985 also be converting to the return type of FN, we have to
1986 combine the two conversions here. */
1987 tree fixed_offset, virtual_offset;
12a669d1
NS
1988
1989 over_return = TREE_TYPE (over_return);
1990 base_return = TREE_TYPE (base_return);
3cfabe60
NS
1991
1992 if (DECL_THUNK_P (fn))
1993 {
50bc768d 1994 gcc_assert (DECL_RESULT_THUNK_P (fn));
3cfabe60
NS
1995 fixed_offset = ssize_int (THUNK_FIXED_OFFSET (fn));
1996 virtual_offset = THUNK_VIRTUAL_OFFSET (fn);
3cfabe60
NS
1997 }
1998 else
1999 fixed_offset = virtual_offset = NULL_TREE;
4977bab6 2000
e00853fd
NS
2001 if (virtual_offset)
2002 /* Find the equivalent binfo within the return type of the
2003 overriding function. We will want the vbase offset from
2004 there. */
58c42dc2 2005 virtual_offset = binfo_for_vbase (BINFO_TYPE (virtual_offset),
12a669d1
NS
2006 over_return);
2007 else if (!same_type_ignoring_top_level_qualifiers_p
2008 (over_return, base_return))
3cfabe60
NS
2009 {
2010 /* There was no existing virtual thunk (which takes
12a669d1
NS
2011 precedence). So find the binfo of the base function's
2012 return type within the overriding function's return type.
2013 We cannot call lookup base here, because we're inside a
2014 dfs_walk, and will therefore clobber the BINFO_MARKED
2015 flags. Fortunately we know the covariancy is valid (it
2016 has already been checked), so we can just iterate along
2017 the binfos, which have been chained in inheritance graph
2018 order. Of course it is lame that we have to repeat the
2019 search here anyway -- we should really be caching pieces
2020 of the vtable and avoiding this repeated work. */
2021 tree thunk_binfo, base_binfo;
2022
2023 /* Find the base binfo within the overriding function's
742f25b3
NS
2024 return type. We will always find a thunk_binfo, except
2025 when the covariancy is invalid (which we will have
2026 already diagnosed). */
12a669d1
NS
2027 for (base_binfo = TYPE_BINFO (base_return),
2028 thunk_binfo = TYPE_BINFO (over_return);
742f25b3 2029 thunk_binfo;
12a669d1 2030 thunk_binfo = TREE_CHAIN (thunk_binfo))
742f25b3
NS
2031 if (SAME_BINFO_TYPE_P (BINFO_TYPE (thunk_binfo),
2032 BINFO_TYPE (base_binfo)))
2033 break;
2034
12a669d1
NS
2035 /* See if virtual inheritance is involved. */
2036 for (virtual_offset = thunk_binfo;
2037 virtual_offset;
2038 virtual_offset = BINFO_INHERITANCE_CHAIN (virtual_offset))
2039 if (BINFO_VIRTUAL_P (virtual_offset))
2040 break;
2041
742f25b3
NS
2042 if (virtual_offset
2043 || (thunk_binfo && !BINFO_OFFSET_ZEROP (thunk_binfo)))
3cfabe60 2044 {
bb885938 2045 tree offset = convert (ssizetype, BINFO_OFFSET (thunk_binfo));
8d1f0f67 2046
12a669d1 2047 if (virtual_offset)
3cfabe60 2048 {
12a669d1
NS
2049 /* We convert via virtual base. Adjust the fixed
2050 offset to be from there. */
bb885938
NS
2051 offset = size_diffop
2052 (offset, convert
2053 (ssizetype, BINFO_OFFSET (virtual_offset)));
3cfabe60
NS
2054 }
2055 if (fixed_offset)
2056 /* There was an existing fixed offset, this must be
2057 from the base just converted to, and the base the
2058 FN was thunking to. */
2059 fixed_offset = size_binop (PLUS_EXPR, fixed_offset, offset);
2060 else
2061 fixed_offset = offset;
2062 }
2063 }
2064
2065 if (fixed_offset || virtual_offset)
2066 /* Replace the overriding function with a covariant thunk. We
2067 will emit the overriding function in its own slot as
9bcb9aae 2068 well. */
3cfabe60
NS
2069 overrider_fn = make_thunk (overrider_target, /*this_adjusting=*/0,
2070 fixed_offset, virtual_offset);
2071 }
2072 else
50bc768d 2073 gcc_assert (!DECL_THUNK_P (fn));
3cfabe60 2074
31f8e4f3
MM
2075 /* Assume that we will produce a thunk that convert all the way to
2076 the final overrider, and not to an intermediate virtual base. */
9ccf6541 2077 virtual_base = NULL_TREE;
31f8e4f3 2078
f11ee281 2079 /* See if we can convert to an intermediate virtual base first, and then
3461fba7 2080 use the vcall offset located there to finish the conversion. */
f11ee281 2081 for (; b; b = BINFO_INHERITANCE_CHAIN (b))
4e7512c9 2082 {
d0cd8b44
JM
2083 /* If we find the final overrider, then we can stop
2084 walking. */
539ed333
NS
2085 if (SAME_BINFO_TYPE_P (BINFO_TYPE (b),
2086 BINFO_TYPE (TREE_VALUE (overrider))))
1f84ec23 2087 break;
31f8e4f3 2088
d0cd8b44
JM
2089 /* If we find a virtual base, and we haven't yet found the
2090 overrider, then there is a virtual base between the
2091 declaring base (first_defn) and the final overrider. */
809e3e7f 2092 if (BINFO_VIRTUAL_P (b))
dbbf88d1
NS
2093 {
2094 virtual_base = b;
2095 break;
2096 }
4e7512c9 2097 }
4e7512c9 2098
a2ddc397
NS
2099 if (overrider_fn != overrider_target && !virtual_base)
2100 {
2101 /* The ABI specifies that a covariant thunk includes a mangling
2102 for a this pointer adjustment. This-adjusting thunks that
2103 override a function from a virtual base have a vcall
2104 adjustment. When the virtual base in question is a primary
2105 virtual base, we know the adjustments are zero, (and in the
2106 non-covariant case, we would not use the thunk).
2107 Unfortunately we didn't notice this could happen, when
2108 designing the ABI and so never mandated that such a covariant
2109 thunk should be emitted. Because we must use the ABI mandated
2110 name, we must continue searching from the binfo where we
2111 found the most recent definition of the function, towards the
2112 primary binfo which first introduced the function into the
2113 vtable. If that enters a virtual base, we must use a vcall
2114 this-adjusting thunk. Bleah! */
bb885938
NS
2115 tree probe = first_defn;
2116
2117 while ((probe = get_primary_binfo (probe))
2118 && (unsigned) list_length (BINFO_VIRTUALS (probe)) > ix)
809e3e7f 2119 if (BINFO_VIRTUAL_P (probe))
bb885938 2120 virtual_base = probe;
a2ddc397 2121
a2ddc397
NS
2122 if (virtual_base)
2123 /* Even if we find a virtual base, the correct delta is
2124 between the overrider and the binfo we're building a vtable
2125 for. */
2126 goto virtual_covariant;
2127 }
2128
d0cd8b44
JM
2129 /* Compute the constant adjustment to the `this' pointer. The
2130 `this' pointer, when this function is called, will point at BINFO
2131 (or one of its primary bases, which are at the same offset). */
31f8e4f3 2132 if (virtual_base)
20dde49d
NS
2133 /* The `this' pointer needs to be adjusted from the declaration to
2134 the nearest virtual base. */
bb885938
NS
2135 delta = size_diffop (convert (ssizetype, BINFO_OFFSET (virtual_base)),
2136 convert (ssizetype, BINFO_OFFSET (first_defn)));
f11ee281
JM
2137 else if (lost)
2138 /* If the nearest definition is in a lost primary, we don't need an
2139 entry in our vtable. Except possibly in a constructor vtable,
2140 if we happen to get our primary back. In that case, the offset
2141 will be zero, as it will be a primary base. */
2142 delta = size_zero_node;
4e7512c9 2143 else
548502d3
MM
2144 /* The `this' pointer needs to be adjusted from pointing to
2145 BINFO to pointing at the base where the final overrider
2146 appears. */
a2ddc397 2147 virtual_covariant:
bb885938
NS
2148 delta = size_diffop (convert (ssizetype,
2149 BINFO_OFFSET (TREE_VALUE (overrider))),
2150 convert (ssizetype, BINFO_OFFSET (binfo)));
4e7512c9 2151
3cfabe60 2152 modify_vtable_entry (t, binfo, overrider_fn, delta, virtuals);
31f8e4f3
MM
2153
2154 if (virtual_base)
548502d3 2155 BV_VCALL_INDEX (*virtuals)
3cfabe60 2156 = get_vcall_index (overrider_target, BINFO_TYPE (virtual_base));
d1f05f93
NS
2157 else
2158 BV_VCALL_INDEX (*virtuals) = NULL_TREE;
4e7512c9
MM
2159}
2160
8026246f 2161/* Called from modify_all_vtables via dfs_walk. */
e92cc029 2162
8026246f 2163static tree
94edc4ab 2164dfs_modify_vtables (tree binfo, void* data)
8026246f 2165{
bcb1079e 2166 tree t = (tree) data;
5b94d9dd
NS
2167 tree virtuals;
2168 tree old_virtuals;
2169 unsigned ix;
2170
2171 if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
2172 /* A base without a vtable needs no modification, and its bases
2173 are uninteresting. */
2174 return dfs_skip_bases;
bcb1079e 2175
5b94d9dd
NS
2176 if (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), t)
2177 && !CLASSTYPE_HAS_PRIMARY_BASE_P (t))
2178 /* Don't do the primary vtable, if it's new. */
2179 return NULL_TREE;
2180
2181 if (BINFO_PRIMARY_P (binfo) && !BINFO_VIRTUAL_P (binfo))
2182 /* There's no need to modify the vtable for a non-virtual primary
2183 base; we're not going to use that vtable anyhow. We do still
2184 need to do this for virtual primary bases, as they could become
2185 non-primary in a construction vtable. */
2186 return NULL_TREE;
2187
2188 make_new_vtable (t, binfo);
5e19c053 2189
5b94d9dd
NS
2190 /* Now, go through each of the virtual functions in the virtual
2191 function table for BINFO. Find the final overrider, and update
2192 the BINFO_VIRTUALS list appropriately. */
2193 for (ix = 0, virtuals = BINFO_VIRTUALS (binfo),
2194 old_virtuals = BINFO_VIRTUALS (TYPE_BINFO (BINFO_TYPE (binfo)));
2195 virtuals;
2196 ix++, virtuals = TREE_CHAIN (virtuals),
2197 old_virtuals = TREE_CHAIN (old_virtuals))
2198 update_vtable_entry_for_fn (t,
2199 binfo,
2200 BV_FN (old_virtuals),
2201 &virtuals, ix);
8026246f 2202
8026246f
MM
2203 return NULL_TREE;
2204}
2205
a68ad5bd
MM
2206/* Update all of the primary and secondary vtables for T. Create new
2207 vtables as required, and initialize their RTTI information. Each
e6858a84
NS
2208 of the functions in VIRTUALS is declared in T and may override a
2209 virtual function from a base class; find and modify the appropriate
2210 entries to point to the overriding functions. Returns a list, in
2211 declaration order, of the virtual functions that are declared in T,
2212 but do not appear in the primary base class vtable, and which
2213 should therefore be appended to the end of the vtable for T. */
a68ad5bd
MM
2214
2215static tree
94edc4ab 2216modify_all_vtables (tree t, tree virtuals)
8026246f 2217{
3461fba7
NS
2218 tree binfo = TYPE_BINFO (t);
2219 tree *fnsp;
a68ad5bd 2220
5e19c053 2221 /* Update all of the vtables. */
5b94d9dd 2222 dfs_walk_once (binfo, dfs_modify_vtables, NULL, t);
a68ad5bd 2223
e6858a84
NS
2224 /* Add virtual functions not already in our primary vtable. These
2225 will be both those introduced by this class, and those overridden
2226 from secondary bases. It does not include virtuals merely
2227 inherited from secondary bases. */
2228 for (fnsp = &virtuals; *fnsp; )
a68ad5bd 2229 {
3461fba7 2230 tree fn = TREE_VALUE (*fnsp);
a68ad5bd 2231
e6858a84
NS
2232 if (!value_member (fn, BINFO_VIRTUALS (binfo))
2233 || DECL_VINDEX (fn) == error_mark_node)
a68ad5bd 2234 {
3461fba7
NS
2235 /* We don't need to adjust the `this' pointer when
2236 calling this function. */
2237 BV_DELTA (*fnsp) = integer_zero_node;
2238 BV_VCALL_INDEX (*fnsp) = NULL_TREE;
2239
e6858a84 2240 /* This is a function not already in our vtable. Keep it. */
3461fba7 2241 fnsp = &TREE_CHAIN (*fnsp);
a68ad5bd 2242 }
3461fba7
NS
2243 else
2244 /* We've already got an entry for this function. Skip it. */
2245 *fnsp = TREE_CHAIN (*fnsp);
a68ad5bd 2246 }
e93ee644 2247
e6858a84 2248 return virtuals;
7177d104
MS
2249}
2250
7d5b8b11
MM
2251/* Get the base virtual function declarations in T that have the
2252 indicated NAME. */
e92cc029 2253
5ddc28a5 2254static tree
94edc4ab 2255get_basefndecls (tree name, tree t)
9e9ff709 2256{
7d5b8b11 2257 tree methods;
9e9ff709 2258 tree base_fndecls = NULL_TREE;
604a3205 2259 int n_baseclasses = BINFO_N_BASE_BINFOS (TYPE_BINFO (t));
7d5b8b11 2260 int i;
9e9ff709 2261
3d1df1fa
MM
2262 /* Find virtual functions in T with the indicated NAME. */
2263 i = lookup_fnfields_1 (t, name);
2264 if (i != -1)
aaaa46d2 2265 for (methods = VEC_index (tree, CLASSTYPE_METHOD_VEC (t), i);
3d1df1fa
MM
2266 methods;
2267 methods = OVL_NEXT (methods))
2268 {
2269 tree method = OVL_CURRENT (methods);
2270
2271 if (TREE_CODE (method) == FUNCTION_DECL
2272 && DECL_VINDEX (method))
2273 base_fndecls = tree_cons (NULL_TREE, method, base_fndecls);
2274 }
9e9ff709
MS
2275
2276 if (base_fndecls)
2277 return base_fndecls;
2278
2279 for (i = 0; i < n_baseclasses; i++)
2280 {
604a3205 2281 tree basetype = BINFO_TYPE (BINFO_BASE_BINFO (TYPE_BINFO (t), i));
7d5b8b11 2282 base_fndecls = chainon (get_basefndecls (name, basetype),
9e9ff709
MS
2283 base_fndecls);
2284 }
2285
2286 return base_fndecls;
2287}
2288
2ee887f2
MS
2289/* If this declaration supersedes the declaration of
2290 a method declared virtual in the base class, then
2291 mark this field as being virtual as well. */
2292
9f4faeae 2293void
94edc4ab 2294check_for_override (tree decl, tree ctype)
2ee887f2 2295{
cbb40945
NS
2296 if (TREE_CODE (decl) == TEMPLATE_DECL)
2297 /* In [temp.mem] we have:
2ee887f2 2298
cbb40945
NS
2299 A specialization of a member function template does not
2300 override a virtual function from a base class. */
2301 return;
2302 if ((DECL_DESTRUCTOR_P (decl)
a6c0d772
MM
2303 || IDENTIFIER_VIRTUAL_P (DECL_NAME (decl))
2304 || DECL_CONV_FN_P (decl))
cbb40945
NS
2305 && look_for_overrides (ctype, decl)
2306 && !DECL_STATIC_FUNCTION_P (decl))
e6858a84
NS
2307 /* Set DECL_VINDEX to a value that is neither an INTEGER_CST nor
2308 the error_mark_node so that we know it is an overriding
2309 function. */
2310 DECL_VINDEX (decl) = decl;
2311
cbb40945 2312 if (DECL_VIRTUAL_P (decl))
2ee887f2 2313 {
e6858a84 2314 if (!DECL_VINDEX (decl))
2ee887f2
MS
2315 DECL_VINDEX (decl) = error_mark_node;
2316 IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)) = 1;
2317 }
2318}
2319
fc378698
MS
2320/* Warn about hidden virtual functions that are not overridden in t.
2321 We know that constructors and destructors don't apply. */
e92cc029 2322
9e9ff709 2323void
94edc4ab 2324warn_hidden (tree t)
9e9ff709 2325{
d4e6fecb 2326 VEC(tree,gc) *method_vec = CLASSTYPE_METHOD_VEC (t);
aaaa46d2
MM
2327 tree fns;
2328 size_t i;
9e9ff709
MS
2329
2330 /* We go through each separately named virtual function. */
aaaa46d2 2331 for (i = CLASSTYPE_FIRST_CONVERSION_SLOT;
9ba5ff0f 2332 VEC_iterate (tree, method_vec, i, fns);
aaaa46d2 2333 ++i)
9e9ff709 2334 {
aaaa46d2 2335 tree fn;
7d5b8b11
MM
2336 tree name;
2337 tree fndecl;
2338 tree base_fndecls;
fa743e8c
NS
2339 tree base_binfo;
2340 tree binfo;
7d5b8b11
MM
2341 int j;
2342
2343 /* All functions in this slot in the CLASSTYPE_METHOD_VEC will
2344 have the same name. Figure out what name that is. */
aaaa46d2 2345 name = DECL_NAME (OVL_CURRENT (fns));
7d5b8b11
MM
2346 /* There are no possibly hidden functions yet. */
2347 base_fndecls = NULL_TREE;
2348 /* Iterate through all of the base classes looking for possibly
2349 hidden functions. */
fa743e8c
NS
2350 for (binfo = TYPE_BINFO (t), j = 0;
2351 BINFO_BASE_ITERATE (binfo, j, base_binfo); j++)
a4832853 2352 {
fa743e8c 2353 tree basetype = BINFO_TYPE (base_binfo);
7d5b8b11
MM
2354 base_fndecls = chainon (get_basefndecls (name, basetype),
2355 base_fndecls);
a4832853
JM
2356 }
2357
00a17e31 2358 /* If there are no functions to hide, continue. */
7d5b8b11 2359 if (!base_fndecls)
9e9ff709
MS
2360 continue;
2361
00a17e31 2362 /* Remove any overridden functions. */
aaaa46d2 2363 for (fn = fns; fn; fn = OVL_NEXT (fn))
9e9ff709 2364 {
aaaa46d2 2365 fndecl = OVL_CURRENT (fn);
7d5b8b11
MM
2366 if (DECL_VINDEX (fndecl))
2367 {
2368 tree *prev = &base_fndecls;
2369
2370 while (*prev)
2371 /* If the method from the base class has the same
2372 signature as the method from the derived class, it
2373 has been overridden. */
2374 if (same_signature_p (fndecl, TREE_VALUE (*prev)))
2375 *prev = TREE_CHAIN (*prev);
2376 else
2377 prev = &TREE_CHAIN (*prev);
2378 }
9e9ff709
MS
2379 }
2380
9e9ff709
MS
2381 /* Now give a warning for all base functions without overriders,
2382 as they are hidden. */
7d5b8b11
MM
2383 while (base_fndecls)
2384 {
2385 /* Here we know it is a hider, and no overrider exists. */
1f070f2b
GDR
2386 cp_warning_at ("%qD was hidden", TREE_VALUE (base_fndecls));
2387 cp_warning_at (" by %qD", fns);
7d5b8b11
MM
2388 base_fndecls = TREE_CHAIN (base_fndecls);
2389 }
9e9ff709
MS
2390 }
2391}
2392
2393/* Check for things that are invalid. There are probably plenty of other
2394 things we should check for also. */
e92cc029 2395
9e9ff709 2396static void
94edc4ab 2397finish_struct_anon (tree t)
9e9ff709
MS
2398{
2399 tree field;
f90cdf34 2400
9e9ff709
MS
2401 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
2402 {
2403 if (TREE_STATIC (field))
2404 continue;
2405 if (TREE_CODE (field) != FIELD_DECL)
2406 continue;
2407
2408 if (DECL_NAME (field) == NULL_TREE
6bdb8141 2409 && ANON_AGGR_TYPE_P (TREE_TYPE (field)))
9e9ff709 2410 {
f90cdf34
MT
2411 tree elt = TYPE_FIELDS (TREE_TYPE (field));
2412 for (; elt; elt = TREE_CHAIN (elt))
9e9ff709 2413 {
b7076960
MM
2414 /* We're generally only interested in entities the user
2415 declared, but we also find nested classes by noticing
2416 the TYPE_DECL that we create implicitly. You're
2417 allowed to put one anonymous union inside another,
6f32162a
JM
2418 though, so we explicitly tolerate that. We use
2419 TYPE_ANONYMOUS_P rather than ANON_AGGR_TYPE_P so that
2420 we also allow unnamed types used for defining fields. */
b7076960
MM
2421 if (DECL_ARTIFICIAL (elt)
2422 && (!DECL_IMPLICIT_TYPEDEF_P (elt)
6f32162a 2423 || TYPE_ANONYMOUS_P (TREE_TYPE (elt))))
9e9ff709
MS
2424 continue;
2425
f90cdf34 2426 if (TREE_CODE (elt) != FIELD_DECL)
8ebeee52 2427 {
1f070f2b
GDR
2428 cp_pedwarn_at ("%q#D invalid; an anonymous union can "
2429 "only have non-static data members",
f90cdf34 2430 elt);
8ebeee52
JM
2431 continue;
2432 }
2433
f90cdf34 2434 if (TREE_PRIVATE (elt))
1f070f2b 2435 cp_pedwarn_at ("private member %q#D in anonymous union",
f90cdf34
MT
2436 elt);
2437 else if (TREE_PROTECTED (elt))
1f070f2b 2438 cp_pedwarn_at ("protected member %q#D in anonymous union",
f90cdf34 2439 elt);
fc378698 2440
f90cdf34
MT
2441 TREE_PRIVATE (elt) = TREE_PRIVATE (field);
2442 TREE_PROTECTED (elt) = TREE_PROTECTED (field);
9e9ff709
MS
2443 }
2444 }
2445 }
2446}
2447
7088fca9
KL
2448/* Add T to CLASSTYPE_DECL_LIST of current_class_type which
2449 will be used later during class template instantiation.
2450 When FRIEND_P is zero, T can be a static member data (VAR_DECL),
2451 a non-static member data (FIELD_DECL), a member function
2452 (FUNCTION_DECL), a nested type (RECORD_TYPE, ENUM_TYPE),
2453 a typedef (TYPE_DECL) or a member class template (TEMPLATE_DECL)
2454 When FRIEND_P is nonzero, T is either a friend class
2455 (RECORD_TYPE, TEMPLATE_DECL) or a friend function
2456 (FUNCTION_DECL, TEMPLATE_DECL). */
2457
2458void
94edc4ab 2459maybe_add_class_template_decl_list (tree type, tree t, int friend_p)
7088fca9
KL
2460{
2461 /* Save some memory by not creating TREE_LIST if TYPE is not template. */
2462 if (CLASSTYPE_TEMPLATE_INFO (type))
2463 CLASSTYPE_DECL_LIST (type)
2464 = tree_cons (friend_p ? NULL_TREE : type,
2465 t, CLASSTYPE_DECL_LIST (type));
2466}
2467
61a127b3 2468/* Create default constructors, assignment operators, and so forth for
e5e459bf
AO
2469 the type indicated by T, if they are needed. CANT_HAVE_CONST_CTOR,
2470 and CANT_HAVE_CONST_ASSIGNMENT are nonzero if, for whatever reason,
2471 the class cannot have a default constructor, copy constructor
2472 taking a const reference argument, or an assignment operator taking
2473 a const reference, respectively. */
61a127b3 2474
f72ab53b 2475static void
94edc4ab 2476add_implicitly_declared_members (tree t,
94edc4ab
NN
2477 int cant_have_const_cctor,
2478 int cant_have_const_assignment)
61a127b3 2479{
61a127b3 2480 /* Destructor. */
9f4faeae 2481 if (!CLASSTYPE_DESTRUCTORS (t))
61a127b3 2482 {
9f4faeae
MM
2483 /* In general, we create destructors lazily. */
2484 CLASSTYPE_LAZY_DESTRUCTOR (t) = 1;
2485 /* However, if the implicit destructor is non-trivial
2486 destructor, we sometimes have to create it at this point. */
2487 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t))
2488 {
2489 bool lazy_p = true;
61a127b3 2490
9f4faeae
MM
2491 if (TYPE_FOR_JAVA (t))
2492 /* If this a Java class, any non-trivial destructor is
2493 invalid, even if compiler-generated. Therefore, if the
2494 destructor is non-trivial we create it now. */
2495 lazy_p = false;
2496 else
2497 {
2498 tree binfo;
2499 tree base_binfo;
2500 int ix;
2501
2502 /* If the implicit destructor will be virtual, then we must
2503 generate it now because (unfortunately) we do not
2504 generate virtual tables lazily. */
2505 binfo = TYPE_BINFO (t);
2506 for (ix = 0; BINFO_BASE_ITERATE (binfo, ix, base_binfo); ix++)
2507 {
2508 tree base_type;
2509 tree dtor;
2510
2511 base_type = BINFO_TYPE (base_binfo);
2512 dtor = CLASSTYPE_DESTRUCTORS (base_type);
2513 if (dtor && DECL_VIRTUAL_P (dtor))
2514 {
2515 lazy_p = false;
2516 break;
2517 }
2518 }
2519 }
2520
2521 /* If we can't get away with being lazy, generate the destructor
2522 now. */
2523 if (!lazy_p)
2524 lazily_declare_fn (sfk_destructor, t);
2525 }
61a127b3 2526 }
61a127b3
MM
2527
2528 /* Default constructor. */
e5e459bf 2529 if (! TYPE_HAS_CONSTRUCTOR (t))
61a127b3 2530 {
508a1c9c
MM
2531 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 1;
2532 CLASSTYPE_LAZY_DEFAULT_CTOR (t) = 1;
61a127b3
MM
2533 }
2534
2535 /* Copy constructor. */
6eabb241 2536 if (! TYPE_HAS_INIT_REF (t) && ! TYPE_FOR_JAVA (t))
61a127b3 2537 {
508a1c9c
MM
2538 TYPE_HAS_INIT_REF (t) = 1;
2539 TYPE_HAS_CONST_INIT_REF (t) = !cant_have_const_cctor;
2540 CLASSTYPE_LAZY_COPY_CTOR (t) = 1;
2541 TYPE_HAS_CONSTRUCTOR (t) = 1;
61a127b3
MM
2542 }
2543
aaaa46d2
MM
2544 /* If there is no assignment operator, one will be created if and
2545 when it is needed. For now, just record whether or not the type
2546 of the parameter to the assignment operator will be a const or
2547 non-const reference. */
2548 if (!TYPE_HAS_ASSIGN_REF (t) && !TYPE_FOR_JAVA (t))
fb232476
MM
2549 {
2550 TYPE_HAS_ASSIGN_REF (t) = 1;
2551 TYPE_HAS_CONST_ASSIGN_REF (t) = !cant_have_const_assignment;
2552 CLASSTYPE_LAZY_ASSIGNMENT_OP (t) = 1;
2553 }
61a127b3
MM
2554}
2555
f90cdf34
MT
2556/* Subroutine of finish_struct_1. Recursively count the number of fields
2557 in TYPE, including anonymous union members. */
2558
2559static int
94edc4ab 2560count_fields (tree fields)
f90cdf34
MT
2561{
2562 tree x;
2563 int n_fields = 0;
2564 for (x = fields; x; x = TREE_CHAIN (x))
2565 {
2566 if (TREE_CODE (x) == FIELD_DECL && ANON_AGGR_TYPE_P (TREE_TYPE (x)))
2567 n_fields += count_fields (TYPE_FIELDS (TREE_TYPE (x)));
2568 else
2569 n_fields += 1;
2570 }
2571 return n_fields;
2572}
2573
2574/* Subroutine of finish_struct_1. Recursively add all the fields in the
d07605f5 2575 TREE_LIST FIELDS to the SORTED_FIELDS_TYPE elts, starting at offset IDX. */
f90cdf34
MT
2576
2577static int
d07605f5 2578add_fields_to_record_type (tree fields, struct sorted_fields_type *field_vec, int idx)
f90cdf34
MT
2579{
2580 tree x;
2581 for (x = fields; x; x = TREE_CHAIN (x))
2582 {
2583 if (TREE_CODE (x) == FIELD_DECL && ANON_AGGR_TYPE_P (TREE_TYPE (x)))
d07605f5 2584 idx = add_fields_to_record_type (TYPE_FIELDS (TREE_TYPE (x)), field_vec, idx);
f90cdf34 2585 else
d07605f5 2586 field_vec->elts[idx++] = x;
f90cdf34
MT
2587 }
2588 return idx;
2589}
2590
1e30f9b4
MM
2591/* FIELD is a bit-field. We are finishing the processing for its
2592 enclosing type. Issue any appropriate messages and set appropriate
2593 flags. */
2594
2595static void
94edc4ab 2596check_bitfield_decl (tree field)
1e30f9b4
MM
2597{
2598 tree type = TREE_TYPE (field);
cd8ed629 2599 tree w = NULL_TREE;
1e30f9b4 2600
cd8ed629 2601 /* Detect invalid bit-field type. */
1e30f9b4
MM
2602 if (DECL_INITIAL (field)
2603 && ! INTEGRAL_TYPE_P (TREE_TYPE (field)))
2604 {
1f070f2b 2605 cp_error_at ("bit-field %q#D with non-integral type", field);
cd8ed629 2606 w = error_mark_node;
1e30f9b4
MM
2607 }
2608
2609 /* Detect and ignore out of range field width. */
2610 if (DECL_INITIAL (field))
2611 {
cd8ed629 2612 w = DECL_INITIAL (field);
1e30f9b4
MM
2613
2614 /* Avoid the non_lvalue wrapper added by fold for PLUS_EXPRs. */
2615 STRIP_NOPS (w);
2616
2617 /* detect invalid field size. */
8a784e4a 2618 w = integral_constant_value (w);
1e30f9b4
MM
2619
2620 if (TREE_CODE (w) != INTEGER_CST)
2621 {
1f070f2b 2622 cp_error_at ("bit-field %qD width not an integer constant",
1e30f9b4 2623 field);
cd8ed629 2624 w = error_mark_node;
1e30f9b4 2625 }
05bccae2 2626 else if (tree_int_cst_sgn (w) < 0)
1e30f9b4 2627 {
1f070f2b 2628 cp_error_at ("negative width in bit-field %qD", field);
cd8ed629 2629 w = error_mark_node;
1e30f9b4 2630 }
05bccae2 2631 else if (integer_zerop (w) && DECL_NAME (field) != 0)
1e30f9b4 2632 {
1f070f2b 2633 cp_error_at ("zero width for bit-field %qD", field);
cd8ed629 2634 w = error_mark_node;
1e30f9b4 2635 }
05bccae2 2636 else if (compare_tree_int (w, TYPE_PRECISION (type)) > 0
1e30f9b4
MM
2637 && TREE_CODE (type) != ENUMERAL_TYPE
2638 && TREE_CODE (type) != BOOLEAN_TYPE)
1f070f2b 2639 cp_warning_at ("width of %qD exceeds its type", field);
1e30f9b4 2640 else if (TREE_CODE (type) == ENUMERAL_TYPE
05bccae2
RK
2641 && (0 > compare_tree_int (w,
2642 min_precision (TYPE_MIN_VALUE (type),
8df83eae 2643 TYPE_UNSIGNED (type)))
05bccae2
RK
2644 || 0 > compare_tree_int (w,
2645 min_precision
2646 (TYPE_MAX_VALUE (type),
8df83eae 2647 TYPE_UNSIGNED (type)))))
1f070f2b 2648 cp_warning_at ("%qD is too small to hold all values of %q#T",
1e30f9b4 2649 field, type);
cd8ed629
MM
2650 }
2651
2652 /* Remove the bit-field width indicator so that the rest of the
2653 compiler does not treat that value as an initializer. */
2654 DECL_INITIAL (field) = NULL_TREE;
1e30f9b4 2655
cd8ed629
MM
2656 if (w != error_mark_node)
2657 {
2658 DECL_SIZE (field) = convert (bitsizetype, w);
2659 DECL_BIT_FIELD (field) = 1;
1e30f9b4
MM
2660 }
2661 else
cd8ed629
MM
2662 {
2663 /* Non-bit-fields are aligned for their type. */
2664 DECL_BIT_FIELD (field) = 0;
2665 CLEAR_DECL_C_BIT_FIELD (field);
cd8ed629 2666 }
1e30f9b4
MM
2667}
2668
2669/* FIELD is a non bit-field. We are finishing the processing for its
2670 enclosing type T. Issue any appropriate messages and set appropriate
2671 flags. */
2672
2673static void
94edc4ab
NN
2674check_field_decl (tree field,
2675 tree t,
2676 int* cant_have_const_ctor,
94edc4ab
NN
2677 int* no_const_asn_ref,
2678 int* any_default_members)
1e30f9b4
MM
2679{
2680 tree type = strip_array_types (TREE_TYPE (field));
2681
2682 /* An anonymous union cannot contain any fields which would change
2683 the settings of CANT_HAVE_CONST_CTOR and friends. */
2684 if (ANON_UNION_TYPE_P (type))
2685 ;
2686 /* And, we don't set TYPE_HAS_CONST_INIT_REF, etc., for anonymous
2687 structs. So, we recurse through their fields here. */
2688 else if (ANON_AGGR_TYPE_P (type))
2689 {
2690 tree fields;
2691
2692 for (fields = TYPE_FIELDS (type); fields; fields = TREE_CHAIN (fields))
17aec3eb 2693 if (TREE_CODE (fields) == FIELD_DECL && !DECL_C_BIT_FIELD (field))
1e30f9b4 2694 check_field_decl (fields, t, cant_have_const_ctor,
e5e459bf 2695 no_const_asn_ref, any_default_members);
1e30f9b4
MM
2696 }
2697 /* Check members with class type for constructors, destructors,
2698 etc. */
2699 else if (CLASS_TYPE_P (type))
2700 {
2701 /* Never let anything with uninheritable virtuals
2702 make it through without complaint. */
2703 abstract_virtuals_error (field, type);
2704
2705 if (TREE_CODE (t) == UNION_TYPE)
2706 {
2707 if (TYPE_NEEDS_CONSTRUCTING (type))
1f070f2b 2708 cp_error_at ("member %q#D with constructor not allowed in union",
1e30f9b4 2709 field);
834c6dff 2710 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
1f070f2b 2711 cp_error_at ("member %q#D with destructor not allowed in union",
1e30f9b4
MM
2712 field);
2713 if (TYPE_HAS_COMPLEX_ASSIGN_REF (type))
1f070f2b 2714 cp_error_at ("member %q#D with copy assignment operator not allowed in union",
1e30f9b4
MM
2715 field);
2716 }
2717 else
2718 {
2719 TYPE_NEEDS_CONSTRUCTING (t) |= TYPE_NEEDS_CONSTRUCTING (type);
834c6dff
MM
2720 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
2721 |= TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type);
1e30f9b4
MM
2722 TYPE_HAS_COMPLEX_ASSIGN_REF (t) |= TYPE_HAS_COMPLEX_ASSIGN_REF (type);
2723 TYPE_HAS_COMPLEX_INIT_REF (t) |= TYPE_HAS_COMPLEX_INIT_REF (type);
2724 }
2725
2726 if (!TYPE_HAS_CONST_INIT_REF (type))
2727 *cant_have_const_ctor = 1;
2728
2729 if (!TYPE_HAS_CONST_ASSIGN_REF (type))
2730 *no_const_asn_ref = 1;
1e30f9b4
MM
2731 }
2732 if (DECL_INITIAL (field) != NULL_TREE)
2733 {
2734 /* `build_class_init_list' does not recognize
2735 non-FIELD_DECLs. */
2736 if (TREE_CODE (t) == UNION_TYPE && any_default_members != 0)
1f070f2b 2737 error ("multiple fields in union %qT initialized", t);
1e30f9b4
MM
2738 *any_default_members = 1;
2739 }
6bb88f3b 2740}
1e30f9b4 2741
08b962b0
MM
2742/* Check the data members (both static and non-static), class-scoped
2743 typedefs, etc., appearing in the declaration of T. Issue
2744 appropriate diagnostics. Sets ACCESS_DECLS to a list (in
2745 declaration order) of access declarations; each TREE_VALUE in this
2746 list is a USING_DECL.
8d08fdba 2747
08b962b0 2748 In addition, set the following flags:
8d08fdba 2749
08b962b0
MM
2750 EMPTY_P
2751 The class is empty, i.e., contains no non-static data members.
8d08fdba 2752
08b962b0
MM
2753 CANT_HAVE_CONST_CTOR_P
2754 This class cannot have an implicitly generated copy constructor
2755 taking a const reference.
8d08fdba 2756
08b962b0
MM
2757 CANT_HAVE_CONST_ASN_REF
2758 This class cannot have an implicitly generated assignment
2759 operator taking a const reference.
8d08fdba 2760
08b962b0
MM
2761 All of these flags should be initialized before calling this
2762 function.
8d08fdba 2763
08b962b0
MM
2764 Returns a pointer to the end of the TYPE_FIELDs chain; additional
2765 fields can be added by adding to this chain. */
8d08fdba 2766
607cf131 2767static void
58731fd1 2768check_field_decls (tree t, tree *access_decls,
58731fd1
MM
2769 int *cant_have_const_ctor_p,
2770 int *no_const_asn_ref_p)
08b962b0
MM
2771{
2772 tree *field;
2773 tree *next;
dd29d26b 2774 bool has_pointers;
08b962b0
MM
2775 int any_default_members;
2776
2777 /* Assume there are no access declarations. */
2778 *access_decls = NULL_TREE;
2779 /* Assume this class has no pointer members. */
dd29d26b 2780 has_pointers = false;
08b962b0
MM
2781 /* Assume none of the members of this class have default
2782 initializations. */
2783 any_default_members = 0;
2784
2785 for (field = &TYPE_FIELDS (t); *field; field = next)
8d08fdba 2786 {
08b962b0
MM
2787 tree x = *field;
2788 tree type = TREE_TYPE (x);
8d08fdba 2789
08b962b0 2790 next = &TREE_CHAIN (x);
8d08fdba 2791
c91a56d2 2792 if (TREE_CODE (x) == FIELD_DECL)
691c003d 2793 {
e0d1297c
NS
2794 if (TYPE_PACKED (t))
2795 {
2796 if (!pod_type_p (TREE_TYPE (x)) && !TYPE_PACKED (TREE_TYPE (x)))
2797 cp_warning_at
1f070f2b 2798 ("ignoring packed attribute on unpacked non-POD field %q#D",
e0d1297c
NS
2799 x);
2800 else
2801 DECL_PACKED (x) = 1;
2802 }
e6267549
JM
2803
2804 if (DECL_C_BIT_FIELD (x) && integer_zerop (DECL_INITIAL (x)))
08b962b0
MM
2805 /* We don't treat zero-width bitfields as making a class
2806 non-empty. */
2807 ;
e6267549 2808 else
f9c528ea 2809 {
5ec1192e
MM
2810 tree element_type;
2811
f9c528ea 2812 /* The class is non-empty. */
58731fd1 2813 CLASSTYPE_EMPTY_P (t) = 0;
f9c528ea
MM
2814 /* The class is not even nearly empty. */
2815 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
5ec1192e
MM
2816 /* If one of the data members contains an empty class,
2817 so does T. */
2818 element_type = strip_array_types (type);
2819 if (CLASS_TYPE_P (element_type)
2820 && CLASSTYPE_CONTAINS_EMPTY_CLASS_P (element_type))
aa06d37b 2821 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) = 1;
f9c528ea 2822 }
691c003d 2823 }
c91a56d2 2824
cffa8729 2825 if (TREE_CODE (x) == USING_DECL)
f30432d7 2826 {
08b962b0
MM
2827 /* Prune the access declaration from the list of fields. */
2828 *field = TREE_CHAIN (x);
2829
2830 /* Save the access declarations for our caller. */
2831 *access_decls = tree_cons (NULL_TREE, x, *access_decls);
2832
2833 /* Since we've reset *FIELD there's no reason to skip to the
2834 next field. */
2835 next = field;
f30432d7
MS
2836 continue;
2837 }
8d08fdba 2838
050367a3
MM
2839 if (TREE_CODE (x) == TYPE_DECL
2840 || TREE_CODE (x) == TEMPLATE_DECL)
f30432d7 2841 continue;
8d08fdba 2842
f30432d7 2843 /* If we've gotten this far, it's a data member, possibly static,
e92cc029 2844 or an enumerator. */
17aec3eb 2845 DECL_CONTEXT (x) = t;
8d08fdba 2846
58ec3cc5
MM
2847 /* When this goes into scope, it will be a non-local reference. */
2848 DECL_NONLOCAL (x) = 1;
2849
2850 if (TREE_CODE (t) == UNION_TYPE)
2851 {
2852 /* [class.union]
2853
2854 If a union contains a static data member, or a member of
324f9dfb 2855 reference type, the program is ill-formed. */
58ec3cc5
MM
2856 if (TREE_CODE (x) == VAR_DECL)
2857 {
1f070f2b 2858 cp_error_at ("%qD may not be static because it is a member of a union", x);
58ec3cc5
MM
2859 continue;
2860 }
2861 if (TREE_CODE (type) == REFERENCE_TYPE)
2862 {
c4f73174
GDR
2863 cp_error_at ("%qD may not have reference type %qT because"
2864 " it is a member of a union",
58ec3cc5
MM
2865 x, type);
2866 continue;
2867 }
2868 }
2869
f30432d7
MS
2870 /* ``A local class cannot have static data members.'' ARM 9.4 */
2871 if (current_function_decl && TREE_STATIC (x))
1f070f2b 2872 cp_error_at ("field %qD in local class cannot be static", x);
8d08fdba 2873
f30432d7
MS
2874 /* Perform error checking that did not get done in
2875 grokdeclarator. */
52fb2769 2876 if (TREE_CODE (type) == FUNCTION_TYPE)
f30432d7 2877 {
1f070f2b 2878 cp_error_at ("field %qD invalidly declared function type", x);
52fb2769
NS
2879 type = build_pointer_type (type);
2880 TREE_TYPE (x) = type;
f30432d7 2881 }
52fb2769 2882 else if (TREE_CODE (type) == METHOD_TYPE)
f30432d7 2883 {
1f070f2b 2884 cp_error_at ("field %qD invalidly declared method type", x);
52fb2769
NS
2885 type = build_pointer_type (type);
2886 TREE_TYPE (x) = type;
f30432d7 2887 }
8d08fdba 2888
52fb2769 2889 if (type == error_mark_node)
f30432d7 2890 continue;
8d08fdba 2891
58ec3cc5 2892 if (TREE_CODE (x) == CONST_DECL || TREE_CODE (x) == VAR_DECL)
73a8adb6 2893 continue;
8d08fdba 2894
f30432d7 2895 /* Now it can only be a FIELD_DECL. */
8d08fdba 2896
f30432d7 2897 if (TREE_PRIVATE (x) || TREE_PROTECTED (x))
08b962b0 2898 CLASSTYPE_NON_AGGREGATE (t) = 1;
8d08fdba 2899
f30432d7
MS
2900 /* If this is of reference type, check if it needs an init.
2901 Also do a little ANSI jig if necessary. */
52fb2769 2902 if (TREE_CODE (type) == REFERENCE_TYPE)
f30432d7 2903 {
08b962b0 2904 CLASSTYPE_NON_POD_P (t) = 1;
f30432d7 2905 if (DECL_INITIAL (x) == NULL_TREE)
6eb35968 2906 SET_CLASSTYPE_REF_FIELDS_NEED_INIT (t, 1);
8d08fdba 2907
f30432d7
MS
2908 /* ARM $12.6.2: [A member initializer list] (or, for an
2909 aggregate, initialization by a brace-enclosed list) is the
2910 only way to initialize nonstatic const and reference
2911 members. */
e349ee73 2912 TYPE_HAS_COMPLEX_ASSIGN_REF (t) = 1;
f30432d7 2913
b930e428
MA
2914 if (! TYPE_HAS_CONSTRUCTOR (t) && CLASSTYPE_NON_AGGREGATE (t)
2915 && extra_warnings)
1f070f2b 2916 cp_warning_at ("non-static reference %q#D in class without a constructor", x);
f30432d7 2917 }
8d08fdba 2918
1e30f9b4 2919 type = strip_array_types (type);
dd29d26b
GB
2920
2921 /* This is used by -Weffc++ (see below). Warn only for pointers
2922 to members which might hold dynamic memory. So do not warn
2923 for pointers to functions or pointers to members. */
2924 if (TYPE_PTR_P (type)
2925 && !TYPE_PTRFN_P (type)
2926 && !TYPE_PTR_TO_MEMBER_P (type))
2927 has_pointers = true;
824b9a4c 2928
58ec3cc5
MM
2929 if (CLASS_TYPE_P (type))
2930 {
2931 if (CLASSTYPE_REF_FIELDS_NEED_INIT (type))
2932 SET_CLASSTYPE_REF_FIELDS_NEED_INIT (t, 1);
2933 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (type))
2934 SET_CLASSTYPE_READONLY_FIELDS_NEED_INIT (t, 1);
2935 }
2936
52fb2769 2937 if (DECL_MUTABLE_P (x) || TYPE_HAS_MUTABLE_P (type))
08b962b0 2938 CLASSTYPE_HAS_MUTABLE (t) = 1;
a7a7710d 2939
d282fcb2
NS
2940 if (! pod_type_p (type))
2941 /* DR 148 now allows pointers to members (which are POD themselves),
2942 to be allowed in POD structs. */
08b962b0 2943 CLASSTYPE_NON_POD_P (t) = 1;
52fb2769 2944
94e6e4c4
AO
2945 if (! zero_init_p (type))
2946 CLASSTYPE_NON_ZERO_INIT_P (t) = 1;
2947
f30432d7 2948 /* If any field is const, the structure type is pseudo-const. */
52fb2769 2949 if (CP_TYPE_CONST_P (type))
f30432d7
MS
2950 {
2951 C_TYPE_FIELDS_READONLY (t) = 1;
2952 if (DECL_INITIAL (x) == NULL_TREE)
6eb35968 2953 SET_CLASSTYPE_READONLY_FIELDS_NEED_INIT (t, 1);
f30432d7
MS
2954
2955 /* ARM $12.6.2: [A member initializer list] (or, for an
2956 aggregate, initialization by a brace-enclosed list) is the
2957 only way to initialize nonstatic const and reference
2958 members. */
e349ee73 2959 TYPE_HAS_COMPLEX_ASSIGN_REF (t) = 1;
f30432d7 2960
b930e428
MA
2961 if (! TYPE_HAS_CONSTRUCTOR (t) && CLASSTYPE_NON_AGGREGATE (t)
2962 && extra_warnings)
1f070f2b 2963 cp_warning_at ("non-static const member %q#D in class without a constructor", x);
f30432d7 2964 }
08b962b0 2965 /* A field that is pseudo-const makes the structure likewise. */
5552b43c 2966 else if (CLASS_TYPE_P (type))
f30432d7 2967 {
08b962b0 2968 C_TYPE_FIELDS_READONLY (t) |= C_TYPE_FIELDS_READONLY (type);
6eb35968
DE
2969 SET_CLASSTYPE_READONLY_FIELDS_NEED_INIT (t,
2970 CLASSTYPE_READONLY_FIELDS_NEED_INIT (t)
2971 | CLASSTYPE_READONLY_FIELDS_NEED_INIT (type));
f30432d7 2972 }
8d08fdba 2973
c10bffd0
JM
2974 /* Core issue 80: A nonstatic data member is required to have a
2975 different name from the class iff the class has a
2976 user-defined constructor. */
633221db 2977 if (constructor_name_p (DECL_NAME (x), t) && TYPE_HAS_CONSTRUCTOR (t))
1f070f2b 2978 cp_pedwarn_at ("field %q#D with same name as class", x);
c10bffd0 2979
162bc98d
JM
2980 /* We set DECL_C_BIT_FIELD in grokbitfield.
2981 If the type and width are valid, we'll also set DECL_BIT_FIELD. */
2982 if (DECL_C_BIT_FIELD (x))
1e30f9b4 2983 check_bitfield_decl (x);
f30432d7 2984 else
1e30f9b4 2985 check_field_decl (x, t,
08b962b0 2986 cant_have_const_ctor_p,
08b962b0 2987 no_const_asn_ref_p,
1e30f9b4 2988 &any_default_members);
8d08fdba
MS
2989 }
2990
dd29d26b
GB
2991 /* Effective C++ rule 11: if a class has dynamic memory held by pointers,
2992 it should also define a copy constructor and an assignment operator to
2993 implement the correct copy semantic (deep vs shallow, etc.). As it is
2994 not feasible to check whether the constructors do allocate dynamic memory
2995 and store it within members, we approximate the warning like this:
2996
2997 -- Warn only if there are members which are pointers
2998 -- Warn only if there is a non-trivial constructor (otherwise,
2999 there cannot be memory allocated).
3000 -- Warn only if there is a non-trivial destructor. We assume that the
3001 user at least implemented the cleanup correctly, and a destructor
3002 is needed to free dynamic memory.
3003
77880ae4 3004 This seems enough for practical purposes. */
dd29d26b
GB
3005 if (warn_ecpp
3006 && has_pointers
3007 && TYPE_HAS_CONSTRUCTOR (t)
9f4faeae 3008 && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
dd29d26b 3009 && !(TYPE_HAS_INIT_REF (t) && TYPE_HAS_ASSIGN_REF (t)))
824b9a4c 3010 {
d4ee4d25 3011 warning (0, "%q#T has pointer data members", t);
824b9a4c
MS
3012
3013 if (! TYPE_HAS_INIT_REF (t))
3014 {
d4ee4d25 3015 warning (0, " but does not override %<%T(const %T&)%>", t, t);
824b9a4c 3016 if (! TYPE_HAS_ASSIGN_REF (t))
d4ee4d25 3017 warning (0, " or %<operator=(const %T&)%>", t);
824b9a4c
MS
3018 }
3019 else if (! TYPE_HAS_ASSIGN_REF (t))
d4ee4d25 3020 warning (0, " but does not override %<operator=(const %T&)%>", t);
824b9a4c 3021 }
08b962b0 3022
607cf131
MM
3023
3024 /* Check anonymous struct/anonymous union fields. */
3025 finish_struct_anon (t);
3026
08b962b0
MM
3027 /* We've built up the list of access declarations in reverse order.
3028 Fix that now. */
3029 *access_decls = nreverse (*access_decls);
08b962b0
MM
3030}
3031
c20118a8
MM
3032/* If TYPE is an empty class type, records its OFFSET in the table of
3033 OFFSETS. */
607cf131 3034
c20118a8 3035static int
94edc4ab 3036record_subobject_offset (tree type, tree offset, splay_tree offsets)
5c24fba6 3037{
c20118a8 3038 splay_tree_node n;
5c24fba6 3039
c20118a8
MM
3040 if (!is_empty_class (type))
3041 return 0;
5c24fba6 3042
c20118a8
MM
3043 /* Record the location of this empty object in OFFSETS. */
3044 n = splay_tree_lookup (offsets, (splay_tree_key) offset);
3045 if (!n)
3046 n = splay_tree_insert (offsets,
3047 (splay_tree_key) offset,
3048 (splay_tree_value) NULL_TREE);
3049 n->value = ((splay_tree_value)
3050 tree_cons (NULL_TREE,
3051 type,
3052 (tree) n->value));
3053
3054 return 0;
607cf131
MM
3055}
3056
838dfd8a 3057/* Returns nonzero if TYPE is an empty class type and there is
c20118a8 3058 already an entry in OFFSETS for the same TYPE as the same OFFSET. */
9785e4b1 3059
c20118a8 3060static int
94edc4ab 3061check_subobject_offset (tree type, tree offset, splay_tree offsets)
9785e4b1 3062{
c20118a8
MM
3063 splay_tree_node n;
3064 tree t;
3065
3066 if (!is_empty_class (type))
3067 return 0;
3068
3069 /* Record the location of this empty object in OFFSETS. */
3070 n = splay_tree_lookup (offsets, (splay_tree_key) offset);
3071 if (!n)
3072 return 0;
3073
3074 for (t = (tree) n->value; t; t = TREE_CHAIN (t))
3075 if (same_type_p (TREE_VALUE (t), type))
3076 return 1;
3077
3078 return 0;
9785e4b1
MM
3079}
3080
c20118a8
MM
3081/* Walk through all the subobjects of TYPE (located at OFFSET). Call
3082 F for every subobject, passing it the type, offset, and table of
2003cd37
MM
3083 OFFSETS. If VBASES_P is one, then virtual non-primary bases should
3084 be traversed.
5cdba4ff
MM
3085
3086 If MAX_OFFSET is non-NULL, then subobjects with an offset greater
3087 than MAX_OFFSET will not be walked.
3088
838dfd8a 3089 If F returns a nonzero value, the traversal ceases, and that value
5cdba4ff 3090 is returned. Otherwise, returns zero. */
d77249e7 3091
c20118a8 3092static int
94edc4ab
NN
3093walk_subobject_offsets (tree type,
3094 subobject_offset_fn f,
3095 tree offset,
3096 splay_tree offsets,
3097 tree max_offset,
3098 int vbases_p)
5c24fba6 3099{
c20118a8 3100 int r = 0;
ff944b49 3101 tree type_binfo = NULL_TREE;
c20118a8 3102
5cdba4ff
MM
3103 /* If this OFFSET is bigger than the MAX_OFFSET, then we should
3104 stop. */
3105 if (max_offset && INT_CST_LT (max_offset, offset))
3106 return 0;
3107
ff944b49
MM
3108 if (!TYPE_P (type))
3109 {
3110 if (abi_version_at_least (2))
3111 type_binfo = type;
3112 type = BINFO_TYPE (type);
3113 }
3114
c20118a8 3115 if (CLASS_TYPE_P (type))
5c24fba6 3116 {
c20118a8 3117 tree field;
17bbb839 3118 tree binfo;
c20118a8
MM
3119 int i;
3120
5ec1192e
MM
3121 /* Avoid recursing into objects that are not interesting. */
3122 if (!CLASSTYPE_CONTAINS_EMPTY_CLASS_P (type))
3123 return 0;
3124
c20118a8
MM
3125 /* Record the location of TYPE. */
3126 r = (*f) (type, offset, offsets);
3127 if (r)
3128 return r;
3129
3130 /* Iterate through the direct base classes of TYPE. */
ff944b49
MM
3131 if (!type_binfo)
3132 type_binfo = TYPE_BINFO (type);
fa743e8c 3133 for (i = 0; BINFO_BASE_ITERATE (type_binfo, i, binfo); i++)
c20118a8 3134 {
ff944b49
MM
3135 tree binfo_offset;
3136
17bbb839 3137 if (abi_version_at_least (2)
809e3e7f 3138 && BINFO_VIRTUAL_P (binfo))
17bbb839 3139 continue;
5c24fba6 3140
c20118a8 3141 if (!vbases_p
809e3e7f 3142 && BINFO_VIRTUAL_P (binfo)
9965d119 3143 && !BINFO_PRIMARY_P (binfo))
c20118a8
MM
3144 continue;
3145
ff944b49
MM
3146 if (!abi_version_at_least (2))
3147 binfo_offset = size_binop (PLUS_EXPR,
3148 offset,
3149 BINFO_OFFSET (binfo));
3150 else
3151 {
3152 tree orig_binfo;
3153 /* We cannot rely on BINFO_OFFSET being set for the base
3154 class yet, but the offsets for direct non-virtual
3155 bases can be calculated by going back to the TYPE. */
604a3205 3156 orig_binfo = BINFO_BASE_BINFO (TYPE_BINFO (type), i);
ff944b49
MM
3157 binfo_offset = size_binop (PLUS_EXPR,
3158 offset,
3159 BINFO_OFFSET (orig_binfo));
3160 }
3161
3162 r = walk_subobject_offsets (binfo,
c20118a8 3163 f,
ff944b49 3164 binfo_offset,
c20118a8 3165 offsets,
5cdba4ff 3166 max_offset,
17bbb839
MM
3167 (abi_version_at_least (2)
3168 ? /*vbases_p=*/0 : vbases_p));
c20118a8
MM
3169 if (r)
3170 return r;
3171 }
3172
58c42dc2 3173 if (abi_version_at_least (2) && CLASSTYPE_VBASECLASSES (type))
17bbb839 3174 {
58c42dc2 3175 unsigned ix;
d4e6fecb 3176 VEC(tree,gc) *vbases;
17bbb839 3177
ff944b49
MM
3178 /* Iterate through the virtual base classes of TYPE. In G++
3179 3.2, we included virtual bases in the direct base class
3180 loop above, which results in incorrect results; the
3181 correct offsets for virtual bases are only known when
3182 working with the most derived type. */
3183 if (vbases_p)
9ba5ff0f
NS
3184 for (vbases = CLASSTYPE_VBASECLASSES (type), ix = 0;
3185 VEC_iterate (tree, vbases, ix, binfo); ix++)
ff944b49 3186 {
ff944b49
MM
3187 r = walk_subobject_offsets (binfo,
3188 f,
3189 size_binop (PLUS_EXPR,
3190 offset,
3191 BINFO_OFFSET (binfo)),
3192 offsets,
3193 max_offset,
3194 /*vbases_p=*/0);
3195 if (r)
3196 return r;
3197 }
3198 else
17bbb839 3199 {
ff944b49
MM
3200 /* We still have to walk the primary base, if it is
3201 virtual. (If it is non-virtual, then it was walked
3202 above.) */
58c42dc2
NS
3203 tree vbase = get_primary_binfo (type_binfo);
3204
809e3e7f 3205 if (vbase && BINFO_VIRTUAL_P (vbase)
fc6633e0
NS
3206 && BINFO_PRIMARY_P (vbase)
3207 && BINFO_INHERITANCE_CHAIN (vbase) == type_binfo)
ff944b49 3208 {
dbbf88d1
NS
3209 r = (walk_subobject_offsets
3210 (vbase, f, offset,
3211 offsets, max_offset, /*vbases_p=*/0));
3212 if (r)
3213 return r;
ff944b49 3214 }
17bbb839
MM
3215 }
3216 }
3217
c20118a8
MM
3218 /* Iterate through the fields of TYPE. */
3219 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
17bbb839 3220 if (TREE_CODE (field) == FIELD_DECL && !DECL_ARTIFICIAL (field))
c20118a8 3221 {
956d9305
MM
3222 tree field_offset;
3223
3224 if (abi_version_at_least (2))
3225 field_offset = byte_position (field);
3226 else
3227 /* In G++ 3.2, DECL_FIELD_OFFSET was used. */
3228 field_offset = DECL_FIELD_OFFSET (field);
3229
c20118a8
MM
3230 r = walk_subobject_offsets (TREE_TYPE (field),
3231 f,
3232 size_binop (PLUS_EXPR,
3233 offset,
956d9305 3234 field_offset),
c20118a8 3235 offsets,
5cdba4ff 3236 max_offset,
c20118a8
MM
3237 /*vbases_p=*/1);
3238 if (r)
3239 return r;
3240 }
5c24fba6 3241 }
c20118a8
MM
3242 else if (TREE_CODE (type) == ARRAY_TYPE)
3243 {
5ec1192e 3244 tree element_type = strip_array_types (type);
c20118a8
MM
3245 tree domain = TYPE_DOMAIN (type);
3246 tree index;
5c24fba6 3247
5ec1192e
MM
3248 /* Avoid recursing into objects that are not interesting. */
3249 if (!CLASS_TYPE_P (element_type)
3250 || !CLASSTYPE_CONTAINS_EMPTY_CLASS_P (element_type))
3251 return 0;
3252
c20118a8 3253 /* Step through each of the elements in the array. */
17bbb839
MM
3254 for (index = size_zero_node;
3255 /* G++ 3.2 had an off-by-one error here. */
3256 (abi_version_at_least (2)
3257 ? !INT_CST_LT (TYPE_MAX_VALUE (domain), index)
3258 : INT_CST_LT (index, TYPE_MAX_VALUE (domain)));
c20118a8
MM
3259 index = size_binop (PLUS_EXPR, index, size_one_node))
3260 {
3261 r = walk_subobject_offsets (TREE_TYPE (type),
3262 f,
3263 offset,
3264 offsets,
5cdba4ff 3265 max_offset,
c20118a8
MM
3266 /*vbases_p=*/1);
3267 if (r)
3268 return r;
3269 offset = size_binop (PLUS_EXPR, offset,
3270 TYPE_SIZE_UNIT (TREE_TYPE (type)));
5cdba4ff
MM
3271 /* If this new OFFSET is bigger than the MAX_OFFSET, then
3272 there's no point in iterating through the remaining
3273 elements of the array. */
3274 if (max_offset && INT_CST_LT (max_offset, offset))
3275 break;
c20118a8
MM
3276 }
3277 }
3278
3279 return 0;
3280}
3281
3282/* Record all of the empty subobjects of TYPE (located at OFFSET) in
838dfd8a 3283 OFFSETS. If VBASES_P is nonzero, virtual bases of TYPE are
c20118a8
MM
3284 examined. */
3285
3286static void
94edc4ab
NN
3287record_subobject_offsets (tree type,
3288 tree offset,
3289 splay_tree offsets,
3290 int vbases_p)
c20118a8
MM
3291{
3292 walk_subobject_offsets (type, record_subobject_offset, offset,
5cdba4ff 3293 offsets, /*max_offset=*/NULL_TREE, vbases_p);
5c24fba6
MM
3294}
3295
838dfd8a
KH
3296/* Returns nonzero if any of the empty subobjects of TYPE (located at
3297 OFFSET) conflict with entries in OFFSETS. If VBASES_P is nonzero,
c20118a8 3298 virtual bases of TYPE are examined. */
9785e4b1
MM
3299
3300static int
94edc4ab
NN
3301layout_conflict_p (tree type,
3302 tree offset,
3303 splay_tree offsets,
3304 int vbases_p)
9785e4b1 3305{
5cdba4ff
MM
3306 splay_tree_node max_node;
3307
3308 /* Get the node in OFFSETS that indicates the maximum offset where
3309 an empty subobject is located. */
3310 max_node = splay_tree_max (offsets);
3311 /* If there aren't any empty subobjects, then there's no point in
3312 performing this check. */
3313 if (!max_node)
3314 return 0;
3315
c20118a8 3316 return walk_subobject_offsets (type, check_subobject_offset, offset,
5cdba4ff
MM
3317 offsets, (tree) (max_node->key),
3318 vbases_p);
9785e4b1
MM
3319}
3320
5c24fba6
MM
3321/* DECL is a FIELD_DECL corresponding either to a base subobject of a
3322 non-static data member of the type indicated by RLI. BINFO is the
c20118a8 3323 binfo corresponding to the base subobject, OFFSETS maps offsets to
17bbb839
MM
3324 types already located at those offsets. This function determines
3325 the position of the DECL. */
5c24fba6
MM
3326
3327static void
17bbb839
MM
3328layout_nonempty_base_or_field (record_layout_info rli,
3329 tree decl,
3330 tree binfo,
3331 splay_tree offsets)
5c24fba6 3332{
c20118a8 3333 tree offset = NULL_TREE;
17bbb839
MM
3334 bool field_p;
3335 tree type;
3336
3337 if (binfo)
3338 {
3339 /* For the purposes of determining layout conflicts, we want to
3340 use the class type of BINFO; TREE_TYPE (DECL) will be the
3341 CLASSTYPE_AS_BASE version, which does not contain entries for
3342 zero-sized bases. */
3343 type = TREE_TYPE (binfo);
3344 field_p = false;
3345 }
3346 else
3347 {
3348 type = TREE_TYPE (decl);
3349 field_p = true;
3350 }
c20118a8 3351
5c24fba6
MM
3352 /* Try to place the field. It may take more than one try if we have
3353 a hard time placing the field without putting two objects of the
3354 same type at the same address. */
3355 while (1)
3356 {
defd0dea 3357 struct record_layout_info_s old_rli = *rli;
5c24fba6 3358
770ae6cc
RK
3359 /* Place this field. */
3360 place_field (rli, decl);
da3d4dfa 3361 offset = byte_position (decl);
1e2e9f54 3362
5c24fba6
MM
3363 /* We have to check to see whether or not there is already
3364 something of the same type at the offset we're about to use.
1e2e9f54 3365 For example, consider:
5c24fba6 3366
1e2e9f54
MM
3367 struct S {};
3368 struct T : public S { int i; };
3369 struct U : public S, public T {};
5c24fba6
MM
3370
3371 Here, we put S at offset zero in U. Then, we can't put T at
3372 offset zero -- its S component would be at the same address
3373 as the S we already allocated. So, we have to skip ahead.
3374 Since all data members, including those whose type is an
838dfd8a 3375 empty class, have nonzero size, any overlap can happen only
5c24fba6
MM
3376 with a direct or indirect base-class -- it can't happen with
3377 a data member. */
1e2e9f54
MM
3378 /* In a union, overlap is permitted; all members are placed at
3379 offset zero. */
3380 if (TREE_CODE (rli->t) == UNION_TYPE)
3381 break;
7ba539c6
MM
3382 /* G++ 3.2 did not check for overlaps when placing a non-empty
3383 virtual base. */
809e3e7f 3384 if (!abi_version_at_least (2) && binfo && BINFO_VIRTUAL_P (binfo))
7ba539c6 3385 break;
ff944b49
MM
3386 if (layout_conflict_p (field_p ? type : binfo, offset,
3387 offsets, field_p))
5c24fba6 3388 {
5c24fba6
MM
3389 /* Strip off the size allocated to this field. That puts us
3390 at the first place we could have put the field with
3391 proper alignment. */
770ae6cc
RK
3392 *rli = old_rli;
3393
c20118a8 3394 /* Bump up by the alignment required for the type. */
770ae6cc 3395 rli->bitpos
c20118a8
MM
3396 = size_binop (PLUS_EXPR, rli->bitpos,
3397 bitsize_int (binfo
3398 ? CLASSTYPE_ALIGN (type)
3399 : TYPE_ALIGN (type)));
770ae6cc 3400 normalize_rli (rli);
5c24fba6
MM
3401 }
3402 else
3403 /* There was no conflict. We're done laying out this field. */
3404 break;
3405 }
c20118a8 3406
623fe76a 3407 /* Now that we know where it will be placed, update its
c20118a8
MM
3408 BINFO_OFFSET. */
3409 if (binfo && CLASS_TYPE_P (BINFO_TYPE (binfo)))
90024bdc 3410 /* Indirect virtual bases may have a nonzero BINFO_OFFSET at
17bbb839
MM
3411 this point because their BINFO_OFFSET is copied from another
3412 hierarchy. Therefore, we may not need to add the entire
3413 OFFSET. */
c20118a8 3414 propagate_binfo_offsets (binfo,
17bbb839
MM
3415 size_diffop (convert (ssizetype, offset),
3416 convert (ssizetype,
dbbf88d1 3417 BINFO_OFFSET (binfo))));
5c24fba6
MM
3418}
3419
90024bdc 3420/* Returns true if TYPE is empty and OFFSET is nonzero. */
7ba539c6
MM
3421
3422static int
3423empty_base_at_nonzero_offset_p (tree type,
3424 tree offset,
3425 splay_tree offsets ATTRIBUTE_UNUSED)
3426{
3427 return is_empty_class (type) && !integer_zerop (offset);
3428}
3429
9785e4b1 3430/* Layout the empty base BINFO. EOC indicates the byte currently just
ec386958 3431 past the end of the class, and should be correctly aligned for a
c20118a8 3432 class of the type indicated by BINFO; OFFSETS gives the offsets of
623fe76a 3433 the empty bases allocated so far. T is the most derived
838dfd8a 3434 type. Return nonzero iff we added it at the end. */
9785e4b1 3435
06d9f09f 3436static bool
dbbf88d1 3437layout_empty_base (tree binfo, tree eoc, splay_tree offsets)
9785e4b1 3438{
ec386958 3439 tree alignment;
9785e4b1 3440 tree basetype = BINFO_TYPE (binfo);
06d9f09f 3441 bool atend = false;
956d9305 3442
9785e4b1 3443 /* This routine should only be used for empty classes. */
50bc768d 3444 gcc_assert (is_empty_class (basetype));
1b50716d 3445 alignment = ssize_int (CLASSTYPE_ALIGN_UNIT (basetype));
9785e4b1 3446
3075b327
NS
3447 if (!integer_zerop (BINFO_OFFSET (binfo)))
3448 {
3449 if (abi_version_at_least (2))
3450 propagate_binfo_offsets
3451 (binfo, size_diffop (size_zero_node, BINFO_OFFSET (binfo)));
3452 else if (warn_abi)
d4ee4d25 3453 warning (0, "offset of empty base %qT may not be ABI-compliant and may"
3075b327
NS
3454 "change in a future version of GCC",
3455 BINFO_TYPE (binfo));
3456 }
3457
9785e4b1
MM
3458 /* This is an empty base class. We first try to put it at offset
3459 zero. */
ff944b49 3460 if (layout_conflict_p (binfo,
c20118a8
MM
3461 BINFO_OFFSET (binfo),
3462 offsets,
3463 /*vbases_p=*/0))
9785e4b1
MM
3464 {
3465 /* That didn't work. Now, we move forward from the next
3466 available spot in the class. */
06d9f09f 3467 atend = true;
dbbf88d1 3468 propagate_binfo_offsets (binfo, convert (ssizetype, eoc));
9785e4b1
MM
3469 while (1)
3470 {
ff944b49 3471 if (!layout_conflict_p (binfo,
c20118a8
MM
3472 BINFO_OFFSET (binfo),
3473 offsets,
3474 /*vbases_p=*/0))
9785e4b1
MM
3475 /* We finally found a spot where there's no overlap. */
3476 break;
3477
3478 /* There's overlap here, too. Bump along to the next spot. */
dbbf88d1 3479 propagate_binfo_offsets (binfo, alignment);
9785e4b1
MM
3480 }
3481 }
06d9f09f 3482 return atend;
9785e4b1
MM
3483}
3484
78dcd41a 3485/* Layout the base given by BINFO in the class indicated by RLI.
58731fd1 3486 *BASE_ALIGN is a running maximum of the alignments of
17bbb839
MM
3487 any base class. OFFSETS gives the location of empty base
3488 subobjects. T is the most derived type. Return nonzero if the new
3489 object cannot be nearly-empty. A new FIELD_DECL is inserted at
3490 *NEXT_FIELD, unless BINFO is for an empty base class.
5c24fba6 3491
17bbb839
MM
3492 Returns the location at which the next field should be inserted. */
3493
3494static tree *
58731fd1 3495build_base_field (record_layout_info rli, tree binfo,
17bbb839 3496 splay_tree offsets, tree *next_field)
d77249e7 3497{
17bbb839 3498 tree t = rli->t;
d77249e7 3499 tree basetype = BINFO_TYPE (binfo);
d77249e7 3500
d0f062fb 3501 if (!COMPLETE_TYPE_P (basetype))
d77249e7
MM
3502 /* This error is now reported in xref_tag, thus giving better
3503 location information. */
17bbb839 3504 return next_field;
d77249e7 3505
17bbb839
MM
3506 /* Place the base class. */
3507 if (!is_empty_class (basetype))
5c24fba6 3508 {
17bbb839
MM
3509 tree decl;
3510
5c24fba6
MM
3511 /* The containing class is non-empty because it has a non-empty
3512 base class. */
58731fd1 3513 CLASSTYPE_EMPTY_P (t) = 0;
17bbb839
MM
3514
3515 /* Create the FIELD_DECL. */
3516 decl = build_decl (FIELD_DECL, NULL_TREE, CLASSTYPE_AS_BASE (basetype));
3517 DECL_ARTIFICIAL (decl) = 1;
78e0d62b 3518 DECL_IGNORED_P (decl) = 1;
17bbb839
MM
3519 DECL_FIELD_CONTEXT (decl) = t;
3520 DECL_SIZE (decl) = CLASSTYPE_SIZE (basetype);
3521 DECL_SIZE_UNIT (decl) = CLASSTYPE_SIZE_UNIT (basetype);
3522 DECL_ALIGN (decl) = CLASSTYPE_ALIGN (basetype);
3523 DECL_USER_ALIGN (decl) = CLASSTYPE_USER_ALIGN (basetype);
550f100c 3524 DECL_MODE (decl) = TYPE_MODE (basetype);
642124c6 3525 DECL_FIELD_IS_BASE (decl) = 1;
0f3a8219 3526
5c24fba6
MM
3527 /* Try to place the field. It may take more than one try if we
3528 have a hard time placing the field without putting two
3529 objects of the same type at the same address. */
17bbb839
MM
3530 layout_nonempty_base_or_field (rli, decl, binfo, offsets);
3531 /* Add the new FIELD_DECL to the list of fields for T. */
3532 TREE_CHAIN (decl) = *next_field;
3533 *next_field = decl;
3534 next_field = &TREE_CHAIN (decl);
5c24fba6
MM
3535 }
3536 else
ec386958 3537 {
17bbb839 3538 tree eoc;
7ba539c6 3539 bool atend;
ec386958
MM
3540
3541 /* On some platforms (ARM), even empty classes will not be
3542 byte-aligned. */
17bbb839
MM
3543 eoc = round_up (rli_size_unit_so_far (rli),
3544 CLASSTYPE_ALIGN_UNIT (basetype));
dbbf88d1 3545 atend = layout_empty_base (binfo, eoc, offsets);
7ba539c6
MM
3546 /* A nearly-empty class "has no proper base class that is empty,
3547 not morally virtual, and at an offset other than zero." */
809e3e7f 3548 if (!BINFO_VIRTUAL_P (binfo) && CLASSTYPE_NEARLY_EMPTY_P (t))
7ba539c6
MM
3549 {
3550 if (atend)
3551 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
3552 /* The check above (used in G++ 3.2) is insufficient because
3553 an empty class placed at offset zero might itself have an
90024bdc 3554 empty base at a nonzero offset. */
7ba539c6
MM
3555 else if (walk_subobject_offsets (basetype,
3556 empty_base_at_nonzero_offset_p,
3557 size_zero_node,
3558 /*offsets=*/NULL,
3559 /*max_offset=*/NULL_TREE,
3560 /*vbases_p=*/true))
3561 {
3562 if (abi_version_at_least (2))
3563 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
3564 else if (warn_abi)
d4ee4d25 3565 warning (0, "class %qT will be considered nearly empty in a "
7ba539c6
MM
3566 "future version of GCC", t);
3567 }
3568 }
3569
17bbb839
MM
3570 /* We do not create a FIELD_DECL for empty base classes because
3571 it might overlap some other field. We want to be able to
3572 create CONSTRUCTORs for the class by iterating over the
3573 FIELD_DECLs, and the back end does not handle overlapping
3574 FIELD_DECLs. */
58731fd1
MM
3575
3576 /* An empty virtual base causes a class to be non-empty
3577 -- but in that case we do not need to clear CLASSTYPE_EMPTY_P
3578 here because that was already done when the virtual table
3579 pointer was created. */
ec386958 3580 }
5c24fba6 3581
5c24fba6 3582 /* Record the offsets of BINFO and its base subobjects. */
ff944b49 3583 record_subobject_offsets (binfo,
c20118a8
MM
3584 BINFO_OFFSET (binfo),
3585 offsets,
3586 /*vbases_p=*/0);
17bbb839
MM
3587
3588 return next_field;
d77249e7
MM
3589}
3590
c20118a8 3591/* Layout all of the non-virtual base classes. Record empty
17bbb839
MM
3592 subobjects in OFFSETS. T is the most derived type. Return nonzero
3593 if the type cannot be nearly empty. The fields created
3594 corresponding to the base classes will be inserted at
3595 *NEXT_FIELD. */
607cf131 3596
17bbb839 3597static void
58731fd1 3598build_base_fields (record_layout_info rli,
17bbb839 3599 splay_tree offsets, tree *next_field)
607cf131
MM
3600{
3601 /* Chain to hold all the new FIELD_DECLs which stand in for base class
3602 subobjects. */
17bbb839 3603 tree t = rli->t;
604a3205 3604 int n_baseclasses = BINFO_N_BASE_BINFOS (TYPE_BINFO (t));
5c24fba6 3605 int i;
607cf131 3606
3461fba7 3607 /* The primary base class is always allocated first. */
17bbb839
MM
3608 if (CLASSTYPE_HAS_PRIMARY_BASE_P (t))
3609 next_field = build_base_field (rli, CLASSTYPE_PRIMARY_BINFO (t),
58731fd1 3610 offsets, next_field);
d77249e7
MM
3611
3612 /* Now allocate the rest of the bases. */
607cf131
MM
3613 for (i = 0; i < n_baseclasses; ++i)
3614 {
d77249e7 3615 tree base_binfo;
607cf131 3616
604a3205 3617 base_binfo = BINFO_BASE_BINFO (TYPE_BINFO (t), i);
911a71a7 3618
3461fba7
NS
3619 /* The primary base was already allocated above, so we don't
3620 need to allocate it again here. */
17bbb839 3621 if (base_binfo == CLASSTYPE_PRIMARY_BINFO (t))
607cf131
MM
3622 continue;
3623
dbbf88d1
NS
3624 /* Virtual bases are added at the end (a primary virtual base
3625 will have already been added). */
809e3e7f 3626 if (BINFO_VIRTUAL_P (base_binfo))
607cf131
MM
3627 continue;
3628
58731fd1 3629 next_field = build_base_field (rli, base_binfo,
17bbb839 3630 offsets, next_field);
607cf131 3631 }
607cf131
MM
3632}
3633
58010b57
MM
3634/* Go through the TYPE_METHODS of T issuing any appropriate
3635 diagnostics, figuring out which methods override which other
3ef397c1 3636 methods, and so forth. */
58010b57
MM
3637
3638static void
94edc4ab 3639check_methods (tree t)
58010b57
MM
3640{
3641 tree x;
58010b57
MM
3642
3643 for (x = TYPE_METHODS (t); x; x = TREE_CHAIN (x))
3644 {
58010b57 3645 check_for_override (x, t);
fee7654e 3646 if (DECL_PURE_VIRTUAL_P (x) && ! DECL_VINDEX (x))
1f070f2b 3647 cp_error_at ("initializer specified for non-virtual method %qD", x);
58010b57
MM
3648 /* The name of the field is the original field name
3649 Save this in auxiliary field for later overloading. */
3650 if (DECL_VINDEX (x))
3651 {
3ef397c1 3652 TYPE_POLYMORPHIC_P (t) = 1;
fee7654e 3653 if (DECL_PURE_VIRTUAL_P (x))
d4e6fecb 3654 VEC_safe_push (tree, gc, CLASSTYPE_PURE_VIRTUALS (t), x);
58010b57 3655 }
9f4faeae
MM
3656 /* All user-declared destructors are non-trivial. */
3657 if (DECL_DESTRUCTOR_P (x))
3658 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t) = 1;
58010b57 3659 }
58010b57
MM
3660}
3661
db9b2174
MM
3662/* FN is a constructor or destructor. Clone the declaration to create
3663 a specialized in-charge or not-in-charge version, as indicated by
3664 NAME. */
3665
3666static tree
94edc4ab 3667build_clone (tree fn, tree name)
db9b2174
MM
3668{
3669 tree parms;
3670 tree clone;
3671
3672 /* Copy the function. */
3673 clone = copy_decl (fn);
3674 /* Remember where this function came from. */
3675 DECL_CLONED_FUNCTION (clone) = fn;
5daf7c0a 3676 DECL_ABSTRACT_ORIGIN (clone) = fn;
db9b2174
MM
3677 /* Reset the function name. */
3678 DECL_NAME (clone) = name;
71cb9286 3679 SET_DECL_ASSEMBLER_NAME (clone, NULL_TREE);
db9b2174
MM
3680 /* There's no pending inline data for this function. */
3681 DECL_PENDING_INLINE_INFO (clone) = NULL;
3682 DECL_PENDING_INLINE_P (clone) = 0;
3683 /* And it hasn't yet been deferred. */
3684 DECL_DEFERRED_FN (clone) = 0;
3685
298d6f60
MM
3686 /* The base-class destructor is not virtual. */
3687 if (name == base_dtor_identifier)
3688 {
3689 DECL_VIRTUAL_P (clone) = 0;
3690 if (TREE_CODE (clone) != TEMPLATE_DECL)
3691 DECL_VINDEX (clone) = NULL_TREE;
3692 }
3693
4e7512c9 3694 /* If there was an in-charge parameter, drop it from the function
db9b2174
MM
3695 type. */
3696 if (DECL_HAS_IN_CHARGE_PARM_P (clone))
3697 {
3698 tree basetype;
3699 tree parmtypes;
3700 tree exceptions;
3701
3702 exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (clone));
3703 basetype = TYPE_METHOD_BASETYPE (TREE_TYPE (clone));
3704 parmtypes = TYPE_ARG_TYPES (TREE_TYPE (clone));
3705 /* Skip the `this' parameter. */
3706 parmtypes = TREE_CHAIN (parmtypes);
3707 /* Skip the in-charge parameter. */
3708 parmtypes = TREE_CHAIN (parmtypes);
e0fff4b3
JM
3709 /* And the VTT parm, in a complete [cd]tor. */
3710 if (DECL_HAS_VTT_PARM_P (fn)
3711 && ! DECL_NEEDS_VTT_PARM_P (clone))
3712 parmtypes = TREE_CHAIN (parmtypes);
3ec6bad3
MM
3713 /* If this is subobject constructor or destructor, add the vtt
3714 parameter. */
db9b2174 3715 TREE_TYPE (clone)
43dc123f
MM
3716 = build_method_type_directly (basetype,
3717 TREE_TYPE (TREE_TYPE (clone)),
3718 parmtypes);
db9b2174
MM
3719 if (exceptions)
3720 TREE_TYPE (clone) = build_exception_variant (TREE_TYPE (clone),
3721 exceptions);
221bfb03 3722 TREE_TYPE (clone)
e9525111
MM
3723 = cp_build_type_attribute_variant (TREE_TYPE (clone),
3724 TYPE_ATTRIBUTES (TREE_TYPE (fn)));
db9b2174
MM
3725 }
3726
e0fff4b3
JM
3727 /* Copy the function parameters. But, DECL_ARGUMENTS on a TEMPLATE_DECL
3728 aren't function parameters; those are the template parameters. */
db9b2174
MM
3729 if (TREE_CODE (clone) != TEMPLATE_DECL)
3730 {
3731 DECL_ARGUMENTS (clone) = copy_list (DECL_ARGUMENTS (clone));
3732 /* Remove the in-charge parameter. */
3733 if (DECL_HAS_IN_CHARGE_PARM_P (clone))
3734 {
3735 TREE_CHAIN (DECL_ARGUMENTS (clone))
3736 = TREE_CHAIN (TREE_CHAIN (DECL_ARGUMENTS (clone)));
3737 DECL_HAS_IN_CHARGE_PARM_P (clone) = 0;
3738 }
e0fff4b3
JM
3739 /* And the VTT parm, in a complete [cd]tor. */
3740 if (DECL_HAS_VTT_PARM_P (fn))
3ec6bad3 3741 {
e0fff4b3
JM
3742 if (DECL_NEEDS_VTT_PARM_P (clone))
3743 DECL_HAS_VTT_PARM_P (clone) = 1;
3744 else
3745 {
3746 TREE_CHAIN (DECL_ARGUMENTS (clone))
3747 = TREE_CHAIN (TREE_CHAIN (DECL_ARGUMENTS (clone)));
3748 DECL_HAS_VTT_PARM_P (clone) = 0;
3749 }
3ec6bad3
MM
3750 }
3751
db9b2174
MM
3752 for (parms = DECL_ARGUMENTS (clone); parms; parms = TREE_CHAIN (parms))
3753 {
3754 DECL_CONTEXT (parms) = clone;
63e1b1c4 3755 cxx_dup_lang_specific_decl (parms);
db9b2174
MM
3756 }
3757 }
3758
db9b2174 3759 /* Create the RTL for this function. */
19e7881c 3760 SET_DECL_RTL (clone, NULL_RTX);
0e6df31e 3761 rest_of_decl_compilation (clone, /*top_level=*/1, at_eof);
db9b2174
MM
3762
3763 /* Make it easy to find the CLONE given the FN. */
3764 TREE_CHAIN (clone) = TREE_CHAIN (fn);
3765 TREE_CHAIN (fn) = clone;
3766
3767 /* If this is a template, handle the DECL_TEMPLATE_RESULT as well. */
3768 if (TREE_CODE (clone) == TEMPLATE_DECL)
3769 {
3770 tree result;
3771
3772 DECL_TEMPLATE_RESULT (clone)
3773 = build_clone (DECL_TEMPLATE_RESULT (clone), name);
3774 result = DECL_TEMPLATE_RESULT (clone);
3775 DECL_TEMPLATE_INFO (result) = copy_node (DECL_TEMPLATE_INFO (result));
3776 DECL_TI_TEMPLATE (result) = clone;
3777 }
5e2f4cd2
MM
3778 else if (pch_file)
3779 note_decl_for_pch (clone);
db9b2174
MM
3780
3781 return clone;
3782}
3783
3784/* Produce declarations for all appropriate clones of FN. If
838dfd8a 3785 UPDATE_METHOD_VEC_P is nonzero, the clones are added to the
db9b2174
MM
3786 CLASTYPE_METHOD_VEC as well. */
3787
3788void
94edc4ab 3789clone_function_decl (tree fn, int update_method_vec_p)
db9b2174
MM
3790{
3791 tree clone;
3792
c00996a3 3793 /* Avoid inappropriate cloning. */
1f84ec23
MM
3794 if (TREE_CHAIN (fn)
3795 && DECL_CLONED_FUNCTION (TREE_CHAIN (fn)))
c00996a3
JM
3796 return;
3797
298d6f60 3798 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (fn))
db9b2174 3799 {
298d6f60
MM
3800 /* For each constructor, we need two variants: an in-charge version
3801 and a not-in-charge version. */
db9b2174
MM
3802 clone = build_clone (fn, complete_ctor_identifier);
3803 if (update_method_vec_p)
b2a9b208 3804 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
db9b2174
MM
3805 clone = build_clone (fn, base_ctor_identifier);
3806 if (update_method_vec_p)
b2a9b208 3807 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
db9b2174
MM
3808 }
3809 else
298d6f60 3810 {
50bc768d 3811 gcc_assert (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (fn));
298d6f60 3812
3ec6bad3 3813 /* For each destructor, we need three variants: an in-charge
298d6f60 3814 version, a not-in-charge version, and an in-charge deleting
4e7512c9
MM
3815 version. We clone the deleting version first because that
3816 means it will go second on the TYPE_METHODS list -- and that
3817 corresponds to the correct layout order in the virtual
52682a1b
MM
3818 function table.
3819
3820 For a non-virtual destructor, we do not build a deleting
3821 destructor. */
3822 if (DECL_VIRTUAL_P (fn))
3823 {
3824 clone = build_clone (fn, deleting_dtor_identifier);
3825 if (update_method_vec_p)
b2a9b208 3826 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
52682a1b 3827 }
4e7512c9 3828 clone = build_clone (fn, complete_dtor_identifier);
298d6f60 3829 if (update_method_vec_p)
b2a9b208 3830 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
298d6f60
MM
3831 clone = build_clone (fn, base_dtor_identifier);
3832 if (update_method_vec_p)
b2a9b208 3833 add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
298d6f60 3834 }
5daf7c0a
JM
3835
3836 /* Note that this is an abstract function that is never emitted. */
3837 DECL_ABSTRACT (fn) = 1;
db9b2174
MM
3838}
3839
5f6eeeb3
NS
3840/* DECL is an in charge constructor, which is being defined. This will
3841 have had an in class declaration, from whence clones were
3842 declared. An out-of-class definition can specify additional default
3843 arguments. As it is the clones that are involved in overload
3844 resolution, we must propagate the information from the DECL to its
00a17e31 3845 clones. */
5f6eeeb3
NS
3846
3847void
94edc4ab 3848adjust_clone_args (tree decl)
5f6eeeb3
NS
3849{
3850 tree clone;
3851
3852 for (clone = TREE_CHAIN (decl); clone && DECL_CLONED_FUNCTION (clone);
3853 clone = TREE_CHAIN (clone))
3854 {
3855 tree orig_clone_parms = TYPE_ARG_TYPES (TREE_TYPE (clone));
3856 tree orig_decl_parms = TYPE_ARG_TYPES (TREE_TYPE (decl));
3857 tree decl_parms, clone_parms;
3858
3859 clone_parms = orig_clone_parms;
3860
00a17e31 3861 /* Skip the 'this' parameter. */
5f6eeeb3
NS
3862 orig_clone_parms = TREE_CHAIN (orig_clone_parms);
3863 orig_decl_parms = TREE_CHAIN (orig_decl_parms);
3864
3865 if (DECL_HAS_IN_CHARGE_PARM_P (decl))
3866 orig_decl_parms = TREE_CHAIN (orig_decl_parms);
3867 if (DECL_HAS_VTT_PARM_P (decl))
3868 orig_decl_parms = TREE_CHAIN (orig_decl_parms);
3869
3870 clone_parms = orig_clone_parms;
3871 if (DECL_HAS_VTT_PARM_P (clone))
3872 clone_parms = TREE_CHAIN (clone_parms);
3873
3874 for (decl_parms = orig_decl_parms; decl_parms;
3875 decl_parms = TREE_CHAIN (decl_parms),
3876 clone_parms = TREE_CHAIN (clone_parms))
3877 {
50bc768d
NS
3878 gcc_assert (same_type_p (TREE_TYPE (decl_parms),
3879 TREE_TYPE (clone_parms)));
5f6eeeb3
NS
3880
3881 if (TREE_PURPOSE (decl_parms) && !TREE_PURPOSE (clone_parms))
3882 {
3883 /* A default parameter has been added. Adjust the
00a17e31 3884 clone's parameters. */
5f6eeeb3
NS
3885 tree exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (clone));
3886 tree basetype = TYPE_METHOD_BASETYPE (TREE_TYPE (clone));
3887 tree type;
3888
3889 clone_parms = orig_decl_parms;
3890
3891 if (DECL_HAS_VTT_PARM_P (clone))
3892 {
3893 clone_parms = tree_cons (TREE_PURPOSE (orig_clone_parms),
3894 TREE_VALUE (orig_clone_parms),
3895 clone_parms);
3896 TREE_TYPE (clone_parms) = TREE_TYPE (orig_clone_parms);
3897 }
43dc123f
MM
3898 type = build_method_type_directly (basetype,
3899 TREE_TYPE (TREE_TYPE (clone)),
3900 clone_parms);
5f6eeeb3
NS
3901 if (exceptions)
3902 type = build_exception_variant (type, exceptions);
3903 TREE_TYPE (clone) = type;
3904
3905 clone_parms = NULL_TREE;
3906 break;
3907 }
3908 }
50bc768d 3909 gcc_assert (!clone_parms);
5f6eeeb3
NS
3910 }
3911}
3912
db9b2174
MM
3913/* For each of the constructors and destructors in T, create an
3914 in-charge and not-in-charge variant. */
3915
3916static void
94edc4ab 3917clone_constructors_and_destructors (tree t)
db9b2174
MM
3918{
3919 tree fns;
3920
db9b2174
MM
3921 /* If for some reason we don't have a CLASSTYPE_METHOD_VEC, we bail
3922 out now. */
3923 if (!CLASSTYPE_METHOD_VEC (t))
3924 return;
3925
db9b2174
MM
3926 for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
3927 clone_function_decl (OVL_CURRENT (fns), /*update_method_vec_p=*/1);
298d6f60
MM
3928 for (fns = CLASSTYPE_DESTRUCTORS (t); fns; fns = OVL_NEXT (fns))
3929 clone_function_decl (OVL_CURRENT (fns), /*update_method_vec_p=*/1);
db9b2174
MM
3930}
3931
58010b57
MM
3932/* Remove all zero-width bit-fields from T. */
3933
3934static void
94edc4ab 3935remove_zero_width_bit_fields (tree t)
58010b57
MM
3936{
3937 tree *fieldsp;
3938
3939 fieldsp = &TYPE_FIELDS (t);
3940 while (*fieldsp)
3941 {
3942 if (TREE_CODE (*fieldsp) == FIELD_DECL
3943 && DECL_C_BIT_FIELD (*fieldsp)
3944 && DECL_INITIAL (*fieldsp))
3945 *fieldsp = TREE_CHAIN (*fieldsp);
3946 else
3947 fieldsp = &TREE_CHAIN (*fieldsp);
3948 }
3949}
3950
dbc957f1
MM
3951/* Returns TRUE iff we need a cookie when dynamically allocating an
3952 array whose elements have the indicated class TYPE. */
3953
3954static bool
94edc4ab 3955type_requires_array_cookie (tree type)
dbc957f1
MM
3956{
3957 tree fns;
18fee3ee 3958 bool has_two_argument_delete_p = false;
dbc957f1 3959
50bc768d 3960 gcc_assert (CLASS_TYPE_P (type));
dbc957f1
MM
3961
3962 /* If there's a non-trivial destructor, we need a cookie. In order
3963 to iterate through the array calling the destructor for each
3964 element, we'll have to know how many elements there are. */
3965 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3966 return true;
3967
3968 /* If the usual deallocation function is a two-argument whose second
3969 argument is of type `size_t', then we have to pass the size of
3970 the array to the deallocation function, so we will need to store
3971 a cookie. */
3972 fns = lookup_fnfields (TYPE_BINFO (type),
3973 ansi_opname (VEC_DELETE_EXPR),
3974 /*protect=*/0);
3975 /* If there are no `operator []' members, or the lookup is
3976 ambiguous, then we don't need a cookie. */
3977 if (!fns || fns == error_mark_node)
3978 return false;
3979 /* Loop through all of the functions. */
50ad9642 3980 for (fns = BASELINK_FUNCTIONS (fns); fns; fns = OVL_NEXT (fns))
dbc957f1
MM
3981 {
3982 tree fn;
3983 tree second_parm;
3984
3985 /* Select the current function. */
3986 fn = OVL_CURRENT (fns);
3987 /* See if this function is a one-argument delete function. If
3988 it is, then it will be the usual deallocation function. */
3989 second_parm = TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (fn)));
3990 if (second_parm == void_list_node)
3991 return false;
3992 /* Otherwise, if we have a two-argument function and the second
3993 argument is `size_t', it will be the usual deallocation
3994 function -- unless there is one-argument function, too. */
3995 if (TREE_CHAIN (second_parm) == void_list_node
3996 && same_type_p (TREE_VALUE (second_parm), sizetype))
3997 has_two_argument_delete_p = true;
3998 }
3999
4000 return has_two_argument_delete_p;
4001}
4002
607cf131
MM
4003/* Check the validity of the bases and members declared in T. Add any
4004 implicitly-generated functions (like copy-constructors and
4005 assignment operators). Compute various flag bits (like
4006 CLASSTYPE_NON_POD_T) for T. This routine works purely at the C++
4007 level: i.e., independently of the ABI in use. */
4008
4009static void
58731fd1 4010check_bases_and_members (tree t)
607cf131 4011{
607cf131
MM
4012 /* Nonzero if the implicitly generated copy constructor should take
4013 a non-const reference argument. */
4014 int cant_have_const_ctor;
78dcd41a 4015 /* Nonzero if the implicitly generated assignment operator
607cf131
MM
4016 should take a non-const reference argument. */
4017 int no_const_asn_ref;
4018 tree access_decls;
4019
4020 /* By default, we use const reference arguments and generate default
4021 constructors. */
607cf131
MM
4022 cant_have_const_ctor = 0;
4023 no_const_asn_ref = 0;
4024
00a17e31 4025 /* Check all the base-classes. */
e5e459bf 4026 check_bases (t, &cant_have_const_ctor,
607cf131
MM
4027 &no_const_asn_ref);
4028
9f4faeae
MM
4029 /* Check all the method declarations. */
4030 check_methods (t);
4031
4032 /* Check all the data member declarations. We cannot call
4033 check_field_decls until we have called check_bases check_methods,
4034 as check_field_decls depends on TYPE_HAS_NONTRIVIAL_DESTRUCTOR
4035 being set appropriately. */
58731fd1 4036 check_field_decls (t, &access_decls,
607cf131
MM
4037 &cant_have_const_ctor,
4038 &no_const_asn_ref);
4039
bbd15aac
MM
4040 /* A nearly-empty class has to be vptr-containing; a nearly empty
4041 class contains just a vptr. */
4042 if (!TYPE_CONTAINS_VPTR_P (t))
f9c528ea
MM
4043 CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
4044
607cf131
MM
4045 /* Do some bookkeeping that will guide the generation of implicitly
4046 declared member functions. */
4047 TYPE_HAS_COMPLEX_INIT_REF (t)
5775a06a 4048 |= (TYPE_HAS_INIT_REF (t) || TYPE_CONTAINS_VPTR_P (t));
607cf131 4049 TYPE_NEEDS_CONSTRUCTING (t)
5775a06a
NS
4050 |= (TYPE_HAS_CONSTRUCTOR (t) || TYPE_CONTAINS_VPTR_P (t));
4051 CLASSTYPE_NON_AGGREGATE (t)
4052 |= (TYPE_HAS_CONSTRUCTOR (t) || TYPE_POLYMORPHIC_P (t));
607cf131 4053 CLASSTYPE_NON_POD_P (t)
9f4faeae
MM
4054 |= (CLASSTYPE_NON_AGGREGATE (t)
4055 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
607cf131 4056 || TYPE_HAS_ASSIGN_REF (t));
607cf131 4057 TYPE_HAS_COMPLEX_ASSIGN_REF (t)
0830ae44 4058 |= TYPE_HAS_ASSIGN_REF (t) || TYPE_CONTAINS_VPTR_P (t);
607cf131 4059
03fd3f84 4060 /* Synthesize any needed methods. */
e5e459bf 4061 add_implicitly_declared_members (t,
607cf131
MM
4062 cant_have_const_ctor,
4063 no_const_asn_ref);
4064
db9b2174
MM
4065 /* Create the in-charge and not-in-charge variants of constructors
4066 and destructors. */
4067 clone_constructors_and_destructors (t);
4068
aa52c1ff
JM
4069 /* Process the using-declarations. */
4070 for (; access_decls; access_decls = TREE_CHAIN (access_decls))
4071 handle_using_decl (TREE_VALUE (access_decls), t);
4072
607cf131
MM
4073 /* Build and sort the CLASSTYPE_METHOD_VEC. */
4074 finish_struct_methods (t);
dbc957f1
MM
4075
4076 /* Figure out whether or not we will need a cookie when dynamically
4077 allocating an array of this type. */
e2500fed 4078 TYPE_LANG_SPECIFIC (t)->u.c.vec_new_uses_cookie
dbc957f1 4079 = type_requires_array_cookie (t);
607cf131
MM
4080}
4081
3ef397c1 4082/* If T needs a pointer to its virtual function table, set TYPE_VFIELD
5c24fba6
MM
4083 accordingly. If a new vfield was created (because T doesn't have a
4084 primary base class), then the newly created field is returned. It
c35cce41 4085 is not added to the TYPE_FIELDS list; it is the caller's
e6858a84
NS
4086 responsibility to do that. Accumulate declared virtual functions
4087 on VIRTUALS_P. */
3ef397c1 4088
5c24fba6 4089static tree
94edc4ab 4090create_vtable_ptr (tree t, tree* virtuals_p)
3ef397c1
MM
4091{
4092 tree fn;
4093
e6858a84 4094 /* Collect the virtual functions declared in T. */
3ef397c1 4095 for (fn = TYPE_METHODS (t); fn; fn = TREE_CHAIN (fn))
e6858a84
NS
4096 if (DECL_VINDEX (fn) && !DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (fn)
4097 && TREE_CODE (DECL_VINDEX (fn)) != INTEGER_CST)
4098 {
4099 tree new_virtual = make_node (TREE_LIST);
4100
4101 BV_FN (new_virtual) = fn;
4102 BV_DELTA (new_virtual) = integer_zero_node;
d1f05f93 4103 BV_VCALL_INDEX (new_virtual) = NULL_TREE;
3ef397c1 4104
e6858a84
NS
4105 TREE_CHAIN (new_virtual) = *virtuals_p;
4106 *virtuals_p = new_virtual;
4107 }
4108
da3d4dfa
MM
4109 /* If we couldn't find an appropriate base class, create a new field
4110 here. Even if there weren't any new virtual functions, we might need a
bbd15aac
MM
4111 new virtual function table if we're supposed to include vptrs in
4112 all classes that need them. */
e6858a84 4113 if (!TYPE_VFIELD (t) && (*virtuals_p || TYPE_CONTAINS_VPTR_P (t)))
3ef397c1
MM
4114 {
4115 /* We build this decl with vtbl_ptr_type_node, which is a
4116 `vtable_entry_type*'. It might seem more precise to use
a692ad2e 4117 `vtable_entry_type (*)[N]' where N is the number of virtual
3ef397c1
MM
4118 functions. However, that would require the vtable pointer in
4119 base classes to have a different type than the vtable pointer
4120 in derived classes. We could make that happen, but that
4121 still wouldn't solve all the problems. In particular, the
4122 type-based alias analysis code would decide that assignments
4123 to the base class vtable pointer can't alias assignments to
4124 the derived class vtable pointer, since they have different
4639c5c6 4125 types. Thus, in a derived class destructor, where the base
3ef397c1
MM
4126 class constructor was inlined, we could generate bad code for
4127 setting up the vtable pointer.
4128
4129 Therefore, we use one type for all vtable pointers. We still
4130 use a type-correct type; it's just doesn't indicate the array
4131 bounds. That's better than using `void*' or some such; it's
4132 cleaner, and it let's the alias analysis code know that these
4133 stores cannot alias stores to void*! */
0abe00c5
NS
4134 tree field;
4135
4136 field = build_decl (FIELD_DECL, get_vfield_name (t), vtbl_ptr_type_node);
4137 SET_DECL_ASSEMBLER_NAME (field, get_identifier (VFIELD_BASE));
4138 DECL_VIRTUAL_P (field) = 1;
4139 DECL_ARTIFICIAL (field) = 1;
4140 DECL_FIELD_CONTEXT (field) = t;
4141 DECL_FCONTEXT (field) = t;
0abe00c5
NS
4142
4143 TYPE_VFIELD (t) = field;
4144
4145 /* This class is non-empty. */
58731fd1 4146 CLASSTYPE_EMPTY_P (t) = 0;
3ef397c1 4147
0abe00c5 4148 return field;
3ef397c1 4149 }
5c24fba6
MM
4150
4151 return NULL_TREE;
3ef397c1
MM
4152}
4153
2ef16140
MM
4154/* Fixup the inline function given by INFO now that the class is
4155 complete. */
08b962b0 4156
2ef16140 4157static void
94edc4ab 4158fixup_pending_inline (tree fn)
2ef16140 4159{
0e5921e8 4160 if (DECL_PENDING_INLINE_INFO (fn))
2ef16140 4161 {
0e5921e8 4162 tree args = DECL_ARGUMENTS (fn);
2ef16140
MM
4163 while (args)
4164 {
4165 DECL_CONTEXT (args) = fn;
4166 args = TREE_CHAIN (args);
4167 }
4168 }
4169}
08b962b0 4170
2ef16140
MM
4171/* Fixup the inline methods and friends in TYPE now that TYPE is
4172 complete. */
08b962b0 4173
2ef16140 4174static void
94edc4ab 4175fixup_inline_methods (tree type)
08b962b0 4176{
2ef16140 4177 tree method = TYPE_METHODS (type);
d4e6fecb 4178 VEC(tree,gc) *friends;
585b44d3 4179 unsigned ix;
08b962b0 4180
2ef16140 4181 if (method && TREE_CODE (method) == TREE_VEC)
08b962b0 4182 {
2ef16140
MM
4183 if (TREE_VEC_ELT (method, 1))
4184 method = TREE_VEC_ELT (method, 1);
4185 else if (TREE_VEC_ELT (method, 0))
4186 method = TREE_VEC_ELT (method, 0);
08b962b0 4187 else
2ef16140 4188 method = TREE_VEC_ELT (method, 2);
08b962b0
MM
4189 }
4190
2ef16140
MM
4191 /* Do inline member functions. */
4192 for (; method; method = TREE_CHAIN (method))
0e5921e8 4193 fixup_pending_inline (method);
08b962b0 4194
2ef16140 4195 /* Do friends. */
585b44d3
NS
4196 for (friends = CLASSTYPE_INLINE_FRIENDS (type), ix = 0;
4197 VEC_iterate (tree, friends, ix, method); ix++)
4198 fixup_pending_inline (method);
4199 CLASSTYPE_INLINE_FRIENDS (type) = NULL;
2ef16140 4200}
08b962b0 4201
9d4c0187
MM
4202/* Add OFFSET to all base types of BINFO which is a base in the
4203 hierarchy dominated by T.
80fd5f48 4204
911a71a7 4205 OFFSET, which is a type offset, is number of bytes. */
80fd5f48
MM
4206
4207static void
dbbf88d1 4208propagate_binfo_offsets (tree binfo, tree offset)
80fd5f48 4209{
911a71a7
MM
4210 int i;
4211 tree primary_binfo;
fa743e8c 4212 tree base_binfo;
80fd5f48 4213
911a71a7
MM
4214 /* Update BINFO's offset. */
4215 BINFO_OFFSET (binfo)
4216 = convert (sizetype,
4217 size_binop (PLUS_EXPR,
4218 convert (ssizetype, BINFO_OFFSET (binfo)),
4219 offset));
80fd5f48 4220
911a71a7
MM
4221 /* Find the primary base class. */
4222 primary_binfo = get_primary_binfo (binfo);
4223
fc6633e0 4224 if (primary_binfo && BINFO_INHERITANCE_CHAIN (primary_binfo) == binfo)
090ad434
NS
4225 propagate_binfo_offsets (primary_binfo, offset);
4226
911a71a7
MM
4227 /* Scan all of the bases, pushing the BINFO_OFFSET adjust
4228 downwards. */
fa743e8c 4229 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
80fd5f48 4230 {
090ad434
NS
4231 /* Don't do the primary base twice. */
4232 if (base_binfo == primary_binfo)
4233 continue;
911a71a7 4234
090ad434 4235 if (BINFO_VIRTUAL_P (base_binfo))
911a71a7
MM
4236 continue;
4237
dbbf88d1 4238 propagate_binfo_offsets (base_binfo, offset);
911a71a7 4239 }
9d4c0187
MM
4240}
4241
17bbb839 4242/* Set BINFO_OFFSET for all of the virtual bases for RLI->T. Update
c20118a8
MM
4243 TYPE_ALIGN and TYPE_SIZE for T. OFFSETS gives the location of
4244 empty subobjects of T. */
80fd5f48 4245
d2c5305b 4246static void
17bbb839 4247layout_virtual_bases (record_layout_info rli, splay_tree offsets)
80fd5f48 4248{
dbbf88d1 4249 tree vbase;
17bbb839 4250 tree t = rli->t;
eca7f13c 4251 bool first_vbase = true;
17bbb839 4252 tree *next_field;
9785e4b1 4253
604a3205 4254 if (BINFO_N_BASE_BINFOS (TYPE_BINFO (t)) == 0)
9785e4b1
MM
4255 return;
4256
17bbb839
MM
4257 if (!abi_version_at_least(2))
4258 {
4259 /* In G++ 3.2, we incorrectly rounded the size before laying out
4260 the virtual bases. */
4261 finish_record_layout (rli, /*free_p=*/false);
9785e4b1 4262#ifdef STRUCTURE_SIZE_BOUNDARY
17bbb839
MM
4263 /* Packed structures don't need to have minimum size. */
4264 if (! TYPE_PACKED (t))
fc555370 4265 TYPE_ALIGN (t) = MAX (TYPE_ALIGN (t), (unsigned) STRUCTURE_SIZE_BOUNDARY);
9785e4b1 4266#endif
17bbb839
MM
4267 rli->offset = TYPE_SIZE_UNIT (t);
4268 rli->bitpos = bitsize_zero_node;
4269 rli->record_align = TYPE_ALIGN (t);
4270 }
80fd5f48 4271
17bbb839
MM
4272 /* Find the last field. The artificial fields created for virtual
4273 bases will go after the last extant field to date. */
4274 next_field = &TYPE_FIELDS (t);
4275 while (*next_field)
4276 next_field = &TREE_CHAIN (*next_field);
80fd5f48 4277
9d4c0187 4278 /* Go through the virtual bases, allocating space for each virtual
3461fba7
NS
4279 base that is not already a primary base class. These are
4280 allocated in inheritance graph order. */
dbbf88d1 4281 for (vbase = TYPE_BINFO (t); vbase; vbase = TREE_CHAIN (vbase))
c35cce41 4282 {
809e3e7f 4283 if (!BINFO_VIRTUAL_P (vbase))
1f84ec23 4284 continue;
eca7f13c 4285
9965d119 4286 if (!BINFO_PRIMARY_P (vbase))
c35cce41 4287 {
17bbb839
MM
4288 tree basetype = TREE_TYPE (vbase);
4289
c35cce41
MM
4290 /* This virtual base is not a primary base of any class in the
4291 hierarchy, so we have to add space for it. */
58731fd1 4292 next_field = build_base_field (rli, vbase,
17bbb839 4293 offsets, next_field);
9785e4b1 4294
eca7f13c
MM
4295 /* If the first virtual base might have been placed at a
4296 lower address, had we started from CLASSTYPE_SIZE, rather
4297 than TYPE_SIZE, issue a warning. There can be both false
4298 positives and false negatives from this warning in rare
4299 cases; to deal with all the possibilities would probably
4300 require performing both layout algorithms and comparing
4301 the results which is not particularly tractable. */
4302 if (warn_abi
4303 && first_vbase
17bbb839
MM
4304 && (tree_int_cst_lt
4305 (size_binop (CEIL_DIV_EXPR,
4306 round_up (CLASSTYPE_SIZE (t),
4307 CLASSTYPE_ALIGN (basetype)),
4308 bitsize_unit_node),
4309 BINFO_OFFSET (vbase))))
d4ee4d25 4310 warning (0, "offset of virtual base %qT is not ABI-compliant and "
1f070f2b 4311 "may change in a future version of GCC",
eca7f13c
MM
4312 basetype);
4313
eca7f13c 4314 first_vbase = false;
c35cce41
MM
4315 }
4316 }
80fd5f48
MM
4317}
4318
ba9a991f
MM
4319/* Returns the offset of the byte just past the end of the base class
4320 BINFO. */
4321
4322static tree
4323end_of_base (tree binfo)
4324{
4325 tree size;
4326
4327 if (is_empty_class (BINFO_TYPE (binfo)))
4328 /* An empty class has zero CLASSTYPE_SIZE_UNIT, but we need to
4329 allocate some space for it. It cannot have virtual bases, so
4330 TYPE_SIZE_UNIT is fine. */
4331 size = TYPE_SIZE_UNIT (BINFO_TYPE (binfo));
4332 else
4333 size = CLASSTYPE_SIZE_UNIT (BINFO_TYPE (binfo));
4334
4335 return size_binop (PLUS_EXPR, BINFO_OFFSET (binfo), size);
4336}
4337
9785e4b1
MM
4338/* Returns the offset of the byte just past the end of the base class
4339 with the highest offset in T. If INCLUDE_VIRTUALS_P is zero, then
4340 only non-virtual bases are included. */
80fd5f48 4341
17bbb839 4342static tree
94edc4ab 4343end_of_class (tree t, int include_virtuals_p)
80fd5f48 4344{
17bbb839 4345 tree result = size_zero_node;
d4e6fecb 4346 VEC(tree,gc) *vbases;
ba9a991f 4347 tree binfo;
9ba5ff0f 4348 tree base_binfo;
ba9a991f 4349 tree offset;
9785e4b1 4350 int i;
80fd5f48 4351
fa743e8c
NS
4352 for (binfo = TYPE_BINFO (t), i = 0;
4353 BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
9785e4b1 4354 {
9785e4b1 4355 if (!include_virtuals_p
fc6633e0
NS
4356 && BINFO_VIRTUAL_P (base_binfo)
4357 && (!BINFO_PRIMARY_P (base_binfo)
4358 || BINFO_INHERITANCE_CHAIN (base_binfo) != TYPE_BINFO (t)))
9785e4b1 4359 continue;
80fd5f48 4360
fa743e8c 4361 offset = end_of_base (base_binfo);
17bbb839
MM
4362 if (INT_CST_LT_UNSIGNED (result, offset))
4363 result = offset;
9785e4b1 4364 }
80fd5f48 4365
ba9a991f
MM
4366 /* G++ 3.2 did not check indirect virtual bases. */
4367 if (abi_version_at_least (2) && include_virtuals_p)
9ba5ff0f
NS
4368 for (vbases = CLASSTYPE_VBASECLASSES (t), i = 0;
4369 VEC_iterate (tree, vbases, i, base_binfo); i++)
ba9a991f 4370 {
9ba5ff0f 4371 offset = end_of_base (base_binfo);
ba9a991f
MM
4372 if (INT_CST_LT_UNSIGNED (result, offset))
4373 result = offset;
4374 }
4375
9785e4b1 4376 return result;
80fd5f48
MM
4377}
4378
17bbb839 4379/* Warn about bases of T that are inaccessible because they are
78b45a24
MM
4380 ambiguous. For example:
4381
4382 struct S {};
4383 struct T : public S {};
4384 struct U : public S, public T {};
4385
4386 Here, `(S*) new U' is not allowed because there are two `S'
4387 subobjects of U. */
4388
4389static void
94edc4ab 4390warn_about_ambiguous_bases (tree t)
78b45a24
MM
4391{
4392 int i;
d4e6fecb 4393 VEC(tree,gc) *vbases;
17bbb839 4394 tree basetype;
58c42dc2 4395 tree binfo;
fa743e8c 4396 tree base_binfo;
78b45a24 4397
18e4be85
NS
4398 /* If there are no repeated bases, nothing can be ambiguous. */
4399 if (!CLASSTYPE_REPEATED_BASE_P (t))
4400 return;
4401
17bbb839 4402 /* Check direct bases. */
fa743e8c
NS
4403 for (binfo = TYPE_BINFO (t), i = 0;
4404 BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
78b45a24 4405 {
fa743e8c 4406 basetype = BINFO_TYPE (base_binfo);
78b45a24 4407
18e4be85 4408 if (!lookup_base (t, basetype, ba_unique | ba_quiet, NULL))
d4ee4d25 4409 warning (0, "direct base %qT inaccessible in %qT due to ambiguity",
17bbb839 4410 basetype, t);
78b45a24 4411 }
17bbb839
MM
4412
4413 /* Check for ambiguous virtual bases. */
4414 if (extra_warnings)
9ba5ff0f
NS
4415 for (vbases = CLASSTYPE_VBASECLASSES (t), i = 0;
4416 VEC_iterate (tree, vbases, i, binfo); i++)
17bbb839 4417 {
58c42dc2 4418 basetype = BINFO_TYPE (binfo);
17bbb839 4419
18e4be85 4420 if (!lookup_base (t, basetype, ba_unique | ba_quiet, NULL))
d4ee4d25 4421 warning (0, "virtual base %qT inaccessible in %qT due to ambiguity",
17bbb839
MM
4422 basetype, t);
4423 }
78b45a24
MM
4424}
4425
c20118a8
MM
4426/* Compare two INTEGER_CSTs K1 and K2. */
4427
4428static int
94edc4ab 4429splay_tree_compare_integer_csts (splay_tree_key k1, splay_tree_key k2)
c20118a8
MM
4430{
4431 return tree_int_cst_compare ((tree) k1, (tree) k2);
4432}
4433
17bbb839
MM
4434/* Increase the size indicated in RLI to account for empty classes
4435 that are "off the end" of the class. */
4436
4437static void
4438include_empty_classes (record_layout_info rli)
4439{
4440 tree eoc;
e3ccdd50 4441 tree rli_size;
17bbb839
MM
4442
4443 /* It might be the case that we grew the class to allocate a
4444 zero-sized base class. That won't be reflected in RLI, yet,
4445 because we are willing to overlay multiple bases at the same
4446 offset. However, now we need to make sure that RLI is big enough
4447 to reflect the entire class. */
4448 eoc = end_of_class (rli->t,
4449 CLASSTYPE_AS_BASE (rli->t) != NULL_TREE);
e3ccdd50
MM
4450 rli_size = rli_size_unit_so_far (rli);
4451 if (TREE_CODE (rli_size) == INTEGER_CST
4452 && INT_CST_LT_UNSIGNED (rli_size, eoc))
17bbb839 4453 {
43fe31f6
MM
4454 if (!abi_version_at_least (2))
4455 /* In version 1 of the ABI, the size of a class that ends with
4456 a bitfield was not rounded up to a whole multiple of a
4457 byte. Because rli_size_unit_so_far returns only the number
4458 of fully allocated bytes, any extra bits were not included
4459 in the size. */
4460 rli->bitpos = round_down (rli->bitpos, BITS_PER_UNIT);
4461 else
4462 /* The size should have been rounded to a whole byte. */
50bc768d
NS
4463 gcc_assert (tree_int_cst_equal
4464 (rli->bitpos, round_down (rli->bitpos, BITS_PER_UNIT)));
e3ccdd50
MM
4465 rli->bitpos
4466 = size_binop (PLUS_EXPR,
4467 rli->bitpos,
4468 size_binop (MULT_EXPR,
4469 convert (bitsizetype,
4470 size_binop (MINUS_EXPR,
4471 eoc, rli_size)),
4472 bitsize_int (BITS_PER_UNIT)));
4473 normalize_rli (rli);
17bbb839
MM
4474 }
4475}
4476
2ef16140
MM
4477/* Calculate the TYPE_SIZE, TYPE_ALIGN, etc for T. Calculate
4478 BINFO_OFFSETs for all of the base-classes. Position the vtable
00a17e31 4479 pointer. Accumulate declared virtual functions on VIRTUALS_P. */
607cf131 4480
2ef16140 4481static void
e93ee644 4482layout_class_type (tree t, tree *virtuals_p)
2ef16140 4483{
5c24fba6
MM
4484 tree non_static_data_members;
4485 tree field;
4486 tree vptr;
4487 record_layout_info rli;
c20118a8
MM
4488 /* Maps offsets (represented as INTEGER_CSTs) to a TREE_LIST of
4489 types that appear at that offset. */
4490 splay_tree empty_base_offsets;
eca7f13c
MM
4491 /* True if the last field layed out was a bit-field. */
4492 bool last_field_was_bitfield = false;
17bbb839
MM
4493 /* The location at which the next field should be inserted. */
4494 tree *next_field;
4495 /* T, as a base class. */
4496 tree base_t;
5c24fba6
MM
4497
4498 /* Keep track of the first non-static data member. */
4499 non_static_data_members = TYPE_FIELDS (t);
4500
770ae6cc
RK
4501 /* Start laying out the record. */
4502 rli = start_record_layout (t);
534170eb 4503
fc6633e0
NS
4504 /* Mark all the primary bases in the hierarchy. */
4505 determine_primary_bases (t);
8026246f 4506
5c24fba6 4507 /* Create a pointer to our virtual function table. */
58731fd1 4508 vptr = create_vtable_ptr (t, virtuals_p);
5c24fba6 4509
3461fba7 4510 /* The vptr is always the first thing in the class. */
1f84ec23 4511 if (vptr)
5c24fba6 4512 {
17bbb839
MM
4513 TREE_CHAIN (vptr) = TYPE_FIELDS (t);
4514 TYPE_FIELDS (t) = vptr;
4515 next_field = &TREE_CHAIN (vptr);
770ae6cc 4516 place_field (rli, vptr);
5c24fba6 4517 }
17bbb839
MM
4518 else
4519 next_field = &TYPE_FIELDS (t);
5c24fba6 4520
72a50ab0 4521 /* Build FIELD_DECLs for all of the non-virtual base-types. */
c20118a8
MM
4522 empty_base_offsets = splay_tree_new (splay_tree_compare_integer_csts,
4523 NULL, NULL);
58731fd1 4524 build_base_fields (rli, empty_base_offsets, next_field);
06d9f09f 4525
5c24fba6 4526 /* Layout the non-static data members. */
770ae6cc 4527 for (field = non_static_data_members; field; field = TREE_CHAIN (field))
5c24fba6 4528 {
01955e96
MM
4529 tree type;
4530 tree padding;
5c24fba6
MM
4531
4532 /* We still pass things that aren't non-static data members to
4533 the back-end, in case it wants to do something with them. */
4534 if (TREE_CODE (field) != FIELD_DECL)
4535 {
770ae6cc 4536 place_field (rli, field);
0154eaa8
MM
4537 /* If the static data member has incomplete type, keep track
4538 of it so that it can be completed later. (The handling
4539 of pending statics in finish_record_layout is
4540 insufficient; consider:
4541
4542 struct S1;
4543 struct S2 { static S1 s1; };
4544
4545 At this point, finish_record_layout will be called, but
4546 S1 is still incomplete.) */
4547 if (TREE_CODE (field) == VAR_DECL)
532b37d9
MM
4548 {
4549 maybe_register_incomplete_var (field);
4550 /* The visibility of static data members is determined
4551 at their point of declaration, not their point of
4552 definition. */
4553 determine_visibility (field);
4554 }
5c24fba6
MM
4555 continue;
4556 }
4557
01955e96 4558 type = TREE_TYPE (field);
1e099144
MM
4559
4560 padding = NULL_TREE;
01955e96
MM
4561
4562 /* If this field is a bit-field whose width is greater than its
3461fba7
NS
4563 type, then there are some special rules for allocating
4564 it. */
01955e96 4565 if (DECL_C_BIT_FIELD (field)
1f84ec23 4566 && INT_CST_LT (TYPE_SIZE (type), DECL_SIZE (field)))
01955e96
MM
4567 {
4568 integer_type_kind itk;
4569 tree integer_type;
555456b1 4570 bool was_unnamed_p = false;
01955e96
MM
4571 /* We must allocate the bits as if suitably aligned for the
4572 longest integer type that fits in this many bits. type
4573 of the field. Then, we are supposed to use the left over
4574 bits as additional padding. */
4575 for (itk = itk_char; itk != itk_none; ++itk)
4576 if (INT_CST_LT (DECL_SIZE (field),
4577 TYPE_SIZE (integer_types[itk])))
4578 break;
4579
4580 /* ITK now indicates a type that is too large for the
4581 field. We have to back up by one to find the largest
4582 type that fits. */
4583 integer_type = integer_types[itk - 1];
2d3e278d 4584
1e099144
MM
4585 /* Figure out how much additional padding is required. GCC
4586 3.2 always created a padding field, even if it had zero
4587 width. */
4588 if (!abi_version_at_least (2)
4589 || INT_CST_LT (TYPE_SIZE (integer_type), DECL_SIZE (field)))
2d3e278d 4590 {
1e099144
MM
4591 if (abi_version_at_least (2) && TREE_CODE (t) == UNION_TYPE)
4592 /* In a union, the padding field must have the full width
4593 of the bit-field; all fields start at offset zero. */
4594 padding = DECL_SIZE (field);
4595 else
4596 {
4597 if (warn_abi && TREE_CODE (t) == UNION_TYPE)
d4ee4d25 4598 warning (0, "size assigned to %qT may not be "
1e099144
MM
4599 "ABI-compliant and may change in a future "
4600 "version of GCC",
4601 t);
4602 padding = size_binop (MINUS_EXPR, DECL_SIZE (field),
4603 TYPE_SIZE (integer_type));
4604 }
2d3e278d 4605 }
c9372112 4606#ifdef PCC_BITFIELD_TYPE_MATTERS
63e5f567
MM
4607 /* An unnamed bitfield does not normally affect the
4608 alignment of the containing class on a target where
4609 PCC_BITFIELD_TYPE_MATTERS. But, the C++ ABI does not
4610 make any exceptions for unnamed bitfields when the
4611 bitfields are longer than their types. Therefore, we
4612 temporarily give the field a name. */
4613 if (PCC_BITFIELD_TYPE_MATTERS && !DECL_NAME (field))
4614 {
4615 was_unnamed_p = true;
4616 DECL_NAME (field) = make_anon_name ();
4617 }
c9372112 4618#endif
01955e96
MM
4619 DECL_SIZE (field) = TYPE_SIZE (integer_type);
4620 DECL_ALIGN (field) = TYPE_ALIGN (integer_type);
11cf4d18 4621 DECL_USER_ALIGN (field) = TYPE_USER_ALIGN (integer_type);
555456b1
MM
4622 layout_nonempty_base_or_field (rli, field, NULL_TREE,
4623 empty_base_offsets);
4624 if (was_unnamed_p)
4625 DECL_NAME (field) = NULL_TREE;
4626 /* Now that layout has been performed, set the size of the
4627 field to the size of its declared type; the rest of the
4628 field is effectively invisible. */
4629 DECL_SIZE (field) = TYPE_SIZE (type);
29edb15c
MM
4630 /* We must also reset the DECL_MODE of the field. */
4631 if (abi_version_at_least (2))
4632 DECL_MODE (field) = TYPE_MODE (type);
4633 else if (warn_abi
4634 && DECL_MODE (field) != TYPE_MODE (type))
4635 /* Versions of G++ before G++ 3.4 did not reset the
4636 DECL_MODE. */
d4ee4d25 4637 warning (0, "the offset of %qD may not be ABI-compliant and may "
29edb15c 4638 "change in a future version of GCC", field);
01955e96 4639 }
555456b1
MM
4640 else
4641 layout_nonempty_base_or_field (rli, field, NULL_TREE,
4642 empty_base_offsets);
01955e96 4643
2003cd37
MM
4644 /* Remember the location of any empty classes in FIELD. */
4645 if (abi_version_at_least (2))
4646 record_subobject_offsets (TREE_TYPE (field),
4647 byte_position(field),
4648 empty_base_offsets,
4649 /*vbases_p=*/1);
4650
eca7f13c
MM
4651 /* If a bit-field does not immediately follow another bit-field,
4652 and yet it starts in the middle of a byte, we have failed to
4653 comply with the ABI. */
4654 if (warn_abi
4655 && DECL_C_BIT_FIELD (field)
660845bf
ZL
4656 /* The TREE_NO_WARNING flag gets set by Objective-C when
4657 laying out an Objective-C class. The ObjC ABI differs
4658 from the C++ ABI, and so we do not want a warning
4659 here. */
4660 && !TREE_NO_WARNING (field)
eca7f13c
MM
4661 && !last_field_was_bitfield
4662 && !integer_zerop (size_binop (TRUNC_MOD_EXPR,
4663 DECL_FIELD_BIT_OFFSET (field),
4664 bitsize_unit_node)))
1f070f2b
GDR
4665 cp_warning_at ("offset of %qD is not ABI-compliant and may "
4666 "change in a future version of GCC",
eca7f13c
MM
4667 field);
4668
956d9305
MM
4669 /* G++ used to use DECL_FIELD_OFFSET as if it were the byte
4670 offset of the field. */
4671 if (warn_abi
4672 && !tree_int_cst_equal (DECL_FIELD_OFFSET (field),
4673 byte_position (field))
4674 && contains_empty_class_p (TREE_TYPE (field)))
1f070f2b 4675 cp_warning_at ("%qD contains empty classes which may cause base "
956d9305
MM
4676 "classes to be placed at different locations in a "
4677 "future version of GCC",
4678 field);
4679
01955e96
MM
4680 /* If we needed additional padding after this field, add it
4681 now. */
4682 if (padding)
4683 {
4684 tree padding_field;
4685
4686 padding_field = build_decl (FIELD_DECL,
4687 NULL_TREE,
4688 char_type_node);
4689 DECL_BIT_FIELD (padding_field) = 1;
4690 DECL_SIZE (padding_field) = padding;
1e099144 4691 DECL_CONTEXT (padding_field) = t;
ea258926 4692 DECL_ARTIFICIAL (padding_field) = 1;
78e0d62b 4693 DECL_IGNORED_P (padding_field) = 1;
c20118a8
MM
4694 layout_nonempty_base_or_field (rli, padding_field,
4695 NULL_TREE,
17bbb839 4696 empty_base_offsets);
01955e96 4697 }
eca7f13c
MM
4698
4699 last_field_was_bitfield = DECL_C_BIT_FIELD (field);
5c24fba6
MM
4700 }
4701
17bbb839 4702 if (abi_version_at_least (2) && !integer_zerop (rli->bitpos))
e3ccdd50
MM
4703 {
4704 /* Make sure that we are on a byte boundary so that the size of
4705 the class without virtual bases will always be a round number
4706 of bytes. */
4707 rli->bitpos = round_up (rli->bitpos, BITS_PER_UNIT);
4708 normalize_rli (rli);
4709 }
17bbb839 4710
8a874cb4
MM
4711 /* G++ 3.2 does not allow virtual bases to be overlaid with tail
4712 padding. */
4713 if (!abi_version_at_least (2))
4714 include_empty_classes(rli);
58010b57 4715
3ef397c1
MM
4716 /* Delete all zero-width bit-fields from the list of fields. Now
4717 that the type is laid out they are no longer important. */
4718 remove_zero_width_bit_fields (t);
4719
17bbb839
MM
4720 /* Create the version of T used for virtual bases. We do not use
4721 make_aggr_type for this version; this is an artificial type. For
4722 a POD type, we just reuse T. */
58731fd1 4723 if (CLASSTYPE_NON_POD_P (t) || CLASSTYPE_EMPTY_P (t))
06ceef4e 4724 {
17bbb839
MM
4725 base_t = make_node (TREE_CODE (t));
4726
58731fd1
MM
4727 /* Set the size and alignment for the new type. In G++ 3.2, all
4728 empty classes were considered to have size zero when used as
4729 base classes. */
4730 if (!abi_version_at_least (2) && CLASSTYPE_EMPTY_P (t))
4731 {
4732 TYPE_SIZE (base_t) = bitsize_zero_node;
4733 TYPE_SIZE_UNIT (base_t) = size_zero_node;
4734 if (warn_abi && !integer_zerop (rli_size_unit_so_far (rli)))
d4ee4d25 4735 warning (0, "layout of classes derived from empty class %qT "
58731fd1
MM
4736 "may change in a future version of GCC",
4737 t);
4738 }
4739 else
4740 {
6b99d1c0
MM
4741 tree eoc;
4742
4743 /* If the ABI version is not at least two, and the last
4744 field was a bit-field, RLI may not be on a byte
4745 boundary. In particular, rli_size_unit_so_far might
4746 indicate the last complete byte, while rli_size_so_far
4747 indicates the total number of bits used. Therefore,
4748 rli_size_so_far, rather than rli_size_unit_so_far, is
4749 used to compute TYPE_SIZE_UNIT. */
4750 eoc = end_of_class (t, /*include_virtuals_p=*/0);
8a874cb4
MM
4751 TYPE_SIZE_UNIT (base_t)
4752 = size_binop (MAX_EXPR,
6b99d1c0
MM
4753 convert (sizetype,
4754 size_binop (CEIL_DIV_EXPR,
4755 rli_size_so_far (rli),
4756 bitsize_int (BITS_PER_UNIT))),
4757 eoc);
8a874cb4
MM
4758 TYPE_SIZE (base_t)
4759 = size_binop (MAX_EXPR,
4760 rli_size_so_far (rli),
4761 size_binop (MULT_EXPR,
6b99d1c0 4762 convert (bitsizetype, eoc),
8a874cb4 4763 bitsize_int (BITS_PER_UNIT)));
58731fd1 4764 }
17bbb839
MM
4765 TYPE_ALIGN (base_t) = rli->record_align;
4766 TYPE_USER_ALIGN (base_t) = TYPE_USER_ALIGN (t);
4767
4768 /* Copy the fields from T. */
4769 next_field = &TYPE_FIELDS (base_t);
4770 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
4771 if (TREE_CODE (field) == FIELD_DECL)
4772 {
4773 *next_field = build_decl (FIELD_DECL,
4774 DECL_NAME (field),
4775 TREE_TYPE (field));
4776 DECL_CONTEXT (*next_field) = base_t;
4777 DECL_FIELD_OFFSET (*next_field) = DECL_FIELD_OFFSET (field);
4778 DECL_FIELD_BIT_OFFSET (*next_field)
4779 = DECL_FIELD_BIT_OFFSET (field);
4f0a2b81
MM
4780 DECL_SIZE (*next_field) = DECL_SIZE (field);
4781 DECL_MODE (*next_field) = DECL_MODE (field);
17bbb839
MM
4782 next_field = &TREE_CHAIN (*next_field);
4783 }
4784
4785 /* Record the base version of the type. */
4786 CLASSTYPE_AS_BASE (t) = base_t;
5a5cccaa 4787 TYPE_CONTEXT (base_t) = t;
83b14b88 4788 }
1f84ec23 4789 else
17bbb839 4790 CLASSTYPE_AS_BASE (t) = t;
0b41abe6 4791
5ec1192e
MM
4792 /* Every empty class contains an empty class. */
4793 if (CLASSTYPE_EMPTY_P (t))
4794 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) = 1;
4795
8d08fdba
MS
4796 /* Set the TYPE_DECL for this type to contain the right
4797 value for DECL_OFFSET, so that we can use it as part
4798 of a COMPONENT_REF for multiple inheritance. */
d2e5ee5c 4799 layout_decl (TYPE_MAIN_DECL (t), 0);
8d08fdba 4800
7177d104
MS
4801 /* Now fix up any virtual base class types that we left lying
4802 around. We must get these done before we try to lay out the
5c24fba6
MM
4803 virtual function table. As a side-effect, this will remove the
4804 base subobject fields. */
17bbb839
MM
4805 layout_virtual_bases (rli, empty_base_offsets);
4806
4807 /* Make sure that empty classes are reflected in RLI at this
4808 point. */
4809 include_empty_classes(rli);
4810
4811 /* Make sure not to create any structures with zero size. */
58731fd1 4812 if (integer_zerop (rli_size_unit_so_far (rli)) && CLASSTYPE_EMPTY_P (t))
17bbb839
MM
4813 place_field (rli,
4814 build_decl (FIELD_DECL, NULL_TREE, char_type_node));
4815
4816 /* Let the back-end lay out the type. */
4817 finish_record_layout (rli, /*free_p=*/true);
9785e4b1 4818
17bbb839
MM
4819 /* Warn about bases that can't be talked about due to ambiguity. */
4820 warn_about_ambiguous_bases (t);
78b45a24 4821
00bfffa4
JM
4822 /* Now that we're done with layout, give the base fields the real types. */
4823 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
4824 if (DECL_ARTIFICIAL (field) && IS_FAKE_BASE_TYPE (TREE_TYPE (field)))
4825 TREE_TYPE (field) = TYPE_CONTEXT (TREE_TYPE (field));
4826
9785e4b1 4827 /* Clean up. */
c20118a8 4828 splay_tree_delete (empty_base_offsets);
2ef16140 4829}
c35cce41 4830
af287697
MM
4831/* Determine the "key method" for the class type indicated by TYPE,
4832 and set CLASSTYPE_KEY_METHOD accordingly. */
9aad8f83 4833
af287697
MM
4834void
4835determine_key_method (tree type)
9aad8f83
MA
4836{
4837 tree method;
4838
4839 if (TYPE_FOR_JAVA (type)
4840 || processing_template_decl
4841 || CLASSTYPE_TEMPLATE_INSTANTIATION (type)
4842 || CLASSTYPE_INTERFACE_KNOWN (type))
af287697 4843 return;
9aad8f83 4844
af287697
MM
4845 /* The key method is the first non-pure virtual function that is not
4846 inline at the point of class definition. On some targets the
4847 key function may not be inline; those targets should not call
4848 this function until the end of the translation unit. */
9aad8f83
MA
4849 for (method = TYPE_METHODS (type); method != NULL_TREE;
4850 method = TREE_CHAIN (method))
4851 if (DECL_VINDEX (method) != NULL_TREE
4852 && ! DECL_DECLARED_INLINE_P (method)
4853 && ! DECL_PURE_VIRTUAL_P (method))
af287697
MM
4854 {
4855 CLASSTYPE_KEY_METHOD (type) = method;
4856 break;
4857 }
9aad8f83 4858
af287697 4859 return;
9aad8f83
MA
4860}
4861
548502d3
MM
4862/* Perform processing required when the definition of T (a class type)
4863 is complete. */
2ef16140
MM
4864
4865void
94edc4ab 4866finish_struct_1 (tree t)
2ef16140
MM
4867{
4868 tree x;
00a17e31 4869 /* A TREE_LIST. The TREE_VALUE of each node is a FUNCTION_DECL. */
e6858a84 4870 tree virtuals = NULL_TREE;
2ef16140 4871 int n_fields = 0;
2ef16140 4872
d0f062fb 4873 if (COMPLETE_TYPE_P (t))
2ef16140 4874 {
8dc2b103 4875 gcc_assert (IS_AGGR_TYPE (t));
1f070f2b 4876 error ("redefinition of %q#T", t);
2ef16140
MM
4877 popclass ();
4878 return;
4879 }
4880
2ef16140
MM
4881 /* If this type was previously laid out as a forward reference,
4882 make sure we lay it out again. */
2ef16140 4883 TYPE_SIZE (t) = NULL_TREE;
911a71a7 4884 CLASSTYPE_PRIMARY_BINFO (t) = NULL_TREE;
2ef16140 4885
6d0a3f67
NS
4886 fixup_inline_methods (t);
4887
5ec1192e
MM
4888 /* Make assumptions about the class; we'll reset the flags if
4889 necessary. */
58731fd1
MM
4890 CLASSTYPE_EMPTY_P (t) = 1;
4891 CLASSTYPE_NEARLY_EMPTY_P (t) = 1;
5ec1192e 4892 CLASSTYPE_CONTAINS_EMPTY_CLASS_P (t) = 0;
58731fd1 4893
2ef16140 4894 /* Do end-of-class semantic processing: checking the validity of the
03702748 4895 bases and members and add implicitly generated methods. */
58731fd1 4896 check_bases_and_members (t);
2ef16140 4897
f4f206f4 4898 /* Find the key method. */
a63996f1 4899 if (TYPE_CONTAINS_VPTR_P (t))
9aad8f83 4900 {
af287697
MM
4901 /* The Itanium C++ ABI permits the key method to be chosen when
4902 the class is defined -- even though the key method so
4903 selected may later turn out to be an inline function. On
4904 some systems (such as ARM Symbian OS) the key method cannot
4905 be determined until the end of the translation unit. On such
4906 systems, we leave CLASSTYPE_KEY_METHOD set to NULL, which
4907 will cause the class to be added to KEYED_CLASSES. Then, in
4908 finish_file we will determine the key method. */
4909 if (targetm.cxx.key_method_may_be_inline ())
4910 determine_key_method (t);
9aad8f83
MA
4911
4912 /* If a polymorphic class has no key method, we may emit the vtable
9bcb9aae 4913 in every translation unit where the class definition appears. */
9aad8f83
MA
4914 if (CLASSTYPE_KEY_METHOD (t) == NULL_TREE)
4915 keyed_classes = tree_cons (NULL_TREE, t, keyed_classes);
4916 }
4917
2ef16140 4918 /* Layout the class itself. */
e93ee644 4919 layout_class_type (t, &virtuals);
a0c68737
NS
4920 if (CLASSTYPE_AS_BASE (t) != t)
4921 /* We use the base type for trivial assignments, and hence it
4922 needs a mode. */
4923 compute_record_mode (CLASSTYPE_AS_BASE (t));
8ebeee52 4924
e93ee644 4925 virtuals = modify_all_vtables (t, nreverse (virtuals));
db5ae43f 4926
5e19c053 4927 /* If necessary, create the primary vtable for this class. */
e6858a84 4928 if (virtuals || TYPE_CONTAINS_VPTR_P (t))
8d08fdba 4929 {
8d08fdba 4930 /* We must enter these virtuals into the table. */
3ef397c1 4931 if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t))
da3d4dfa 4932 build_primary_vtable (NULL_TREE, t);
dbbf88d1 4933 else if (! BINFO_NEW_VTABLE_MARKED (TYPE_BINFO (t)))
0533d788
MM
4934 /* Here we know enough to change the type of our virtual
4935 function table, but we will wait until later this function. */
28531dd0 4936 build_primary_vtable (CLASSTYPE_PRIMARY_BINFO (t), t);
8d08fdba
MS
4937 }
4938
bbd15aac 4939 if (TYPE_CONTAINS_VPTR_P (t))
8d08fdba 4940 {
e93ee644
MM
4941 int vindex;
4942 tree fn;
4943
604a3205 4944 if (BINFO_VTABLE (TYPE_BINFO (t)))
50bc768d 4945 gcc_assert (DECL_VIRTUAL_P (BINFO_VTABLE (TYPE_BINFO (t))));
1eb4bea9 4946 if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t))
50bc768d 4947 gcc_assert (BINFO_VIRTUALS (TYPE_BINFO (t)) == NULL_TREE);
1eb4bea9 4948
e6858a84 4949 /* Add entries for virtual functions introduced by this class. */
604a3205
NS
4950 BINFO_VIRTUALS (TYPE_BINFO (t))
4951 = chainon (BINFO_VIRTUALS (TYPE_BINFO (t)), virtuals);
e93ee644
MM
4952
4953 /* Set DECL_VINDEX for all functions declared in this class. */
4954 for (vindex = 0, fn = BINFO_VIRTUALS (TYPE_BINFO (t));
4955 fn;
4956 fn = TREE_CHAIN (fn),
4957 vindex += (TARGET_VTABLE_USES_DESCRIPTORS
4958 ? TARGET_VTABLE_USES_DESCRIPTORS : 1))
4977bab6
ZW
4959 {
4960 tree fndecl = BV_FN (fn);
4961
4962 if (DECL_THUNK_P (fndecl))
4963 /* A thunk. We should never be calling this entry directly
4964 from this vtable -- we'd use the entry for the non
4965 thunk base function. */
4966 DECL_VINDEX (fndecl) = NULL_TREE;
4967 else if (TREE_CODE (DECL_VINDEX (fndecl)) != INTEGER_CST)
7d60be94 4968 DECL_VINDEX (fndecl) = build_int_cst (NULL_TREE, vindex);
4977bab6 4969 }
8d08fdba
MS
4970 }
4971
d2c5305b 4972 finish_struct_bits (t);
8d08fdba 4973
f30432d7
MS
4974 /* Complete the rtl for any static member objects of the type we're
4975 working on. */
58010b57 4976 for (x = TYPE_FIELDS (t); x; x = TREE_CHAIN (x))
19e7881c 4977 if (TREE_CODE (x) == VAR_DECL && TREE_STATIC (x)
c7f4981a 4978 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (x)), t))
19e7881c 4979 DECL_MODE (x) = TYPE_MODE (t);
8d08fdba 4980
f90cdf34 4981 /* Done with FIELDS...now decide whether to sort these for
58010b57 4982 faster lookups later.
f90cdf34 4983
6c73ad72 4984 We use a small number because most searches fail (succeeding
f90cdf34
MT
4985 ultimately as the search bores through the inheritance
4986 hierarchy), and we want this failure to occur quickly. */
4987
58010b57
MM
4988 n_fields = count_fields (TYPE_FIELDS (t));
4989 if (n_fields > 7)
f90cdf34 4990 {
99dd239f
GDR
4991 struct sorted_fields_type *field_vec = GGC_NEWVAR
4992 (struct sorted_fields_type,
4993 sizeof (struct sorted_fields_type) + n_fields * sizeof (tree));
d07605f5
AP
4994 field_vec->len = n_fields;
4995 add_fields_to_record_type (TYPE_FIELDS (t), field_vec, 0);
4996 qsort (field_vec->elts, n_fields, sizeof (tree),
17211ab5 4997 field_decl_cmp);
f90cdf34
MT
4998 if (! DECL_LANG_SPECIFIC (TYPE_MAIN_DECL (t)))
4999 retrofit_lang_decl (TYPE_MAIN_DECL (t));
5000 DECL_SORTED_FIELDS (TYPE_MAIN_DECL (t)) = field_vec;
5001 }
5002
8d7a5379
MM
5003 /* Make the rtl for any new vtables we have created, and unmark
5004 the base types we marked. */
5005 finish_vtbls (t);
9965d119 5006
23656158
MM
5007 /* Build the VTT for T. */
5008 build_vtt (t);
8d7a5379 5009
f03e8526
MM
5010 /* This warning does not make sense for Java classes, since they
5011 cannot have destructors. */
5012 if (!TYPE_FOR_JAVA (t) && warn_nonvdtor && TYPE_POLYMORPHIC_P (t))
9fd8f60d 5013 {
9f4faeae
MM
5014 tree dtor;
5015
5016 dtor = CLASSTYPE_DESTRUCTORS (t);
5017 /* Warn only if the dtor is non-private or the class has
5018 friends. */
5019 if (/* An implicitly declared destructor is always public. And,
5020 if it were virtual, we would have created it by now. */
5021 !dtor
5022 || (!DECL_VINDEX (dtor)
5023 && (!TREE_PRIVATE (dtor)
5024 || CLASSTYPE_FRIEND_CLASSES (t)
5025 || DECL_FRIENDLIST (TYPE_MAIN_DECL (t)))))
d4ee4d25 5026 warning (0, "%q#T has virtual functions but non-virtual destructor",
9f4faeae 5027 t);
9fd8f60d 5028 }
8d08fdba 5029
0154eaa8 5030 complete_vars (t);
8d08fdba 5031
9e9ff709
MS
5032 if (warn_overloaded_virtual)
5033 warn_hidden (t);
8d08fdba 5034
ae673f14 5035 maybe_suppress_debug_info (t);
8d08fdba 5036
b7442fb5
NS
5037 dump_class_hierarchy (t);
5038
d2e5ee5c 5039 /* Finish debugging output for this type. */
881c6935 5040 rest_of_type_compilation (t, ! LOCAL_CLASS_P (t));
8d08fdba 5041}
f30432d7 5042
61a127b3
MM
5043/* When T was built up, the member declarations were added in reverse
5044 order. Rearrange them to declaration order. */
5045
5046void
94edc4ab 5047unreverse_member_declarations (tree t)
61a127b3
MM
5048{
5049 tree next;
5050 tree prev;
5051 tree x;
5052
7088fca9
KL
5053 /* The following lists are all in reverse order. Put them in
5054 declaration order now. */
61a127b3 5055 TYPE_METHODS (t) = nreverse (TYPE_METHODS (t));
7088fca9 5056 CLASSTYPE_DECL_LIST (t) = nreverse (CLASSTYPE_DECL_LIST (t));
61a127b3
MM
5057
5058 /* Actually, for the TYPE_FIELDS, only the non TYPE_DECLs are in
5059 reverse order, so we can't just use nreverse. */
5060 prev = NULL_TREE;
5061 for (x = TYPE_FIELDS (t);
5062 x && TREE_CODE (x) != TYPE_DECL;
5063 x = next)
5064 {
5065 next = TREE_CHAIN (x);
5066 TREE_CHAIN (x) = prev;
5067 prev = x;
5068 }
5069 if (prev)
5070 {
5071 TREE_CHAIN (TYPE_FIELDS (t)) = x;
5072 if (prev)
5073 TYPE_FIELDS (t) = prev;
5074 }
5075}
5076
f30432d7 5077tree
94edc4ab 5078finish_struct (tree t, tree attributes)
f30432d7 5079{
82a98427 5080 location_t saved_loc = input_location;
1f0d71c5 5081
61a127b3
MM
5082 /* Now that we've got all the field declarations, reverse everything
5083 as necessary. */
5084 unreverse_member_declarations (t);
f30432d7 5085
91d231cb 5086 cplus_decl_attributes (&t, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
6467930b 5087
1f0d71c5
NS
5088 /* Nadger the current location so that diagnostics point to the start of
5089 the struct, not the end. */
f31686a3 5090 input_location = DECL_SOURCE_LOCATION (TYPE_NAME (t));
1f0d71c5 5091
5566b478 5092 if (processing_template_decl)
f30432d7 5093 {
7fb213d8
GB
5094 tree x;
5095
b0e0b31f 5096 finish_struct_methods (t);
867580ce 5097 TYPE_SIZE (t) = bitsize_zero_node;
ae54ec16 5098 TYPE_SIZE_UNIT (t) = size_zero_node;
7fb213d8
GB
5099
5100 /* We need to emit an error message if this type was used as a parameter
5101 and it is an abstract type, even if it is a template. We construct
5102 a simple CLASSTYPE_PURE_VIRTUALS list without taking bases into
5103 account and we call complete_vars with this type, which will check
5104 the PARM_DECLS. Note that while the type is being defined,
5105 CLASSTYPE_PURE_VIRTUALS contains the list of the inline friends
5106 (see CLASSTYPE_INLINE_FRIENDS) so we need to clear it. */
585b44d3 5107 CLASSTYPE_PURE_VIRTUALS (t) = NULL;
7fb213d8
GB
5108 for (x = TYPE_METHODS (t); x; x = TREE_CHAIN (x))
5109 if (DECL_PURE_VIRTUAL_P (x))
d4e6fecb 5110 VEC_safe_push (tree, gc, CLASSTYPE_PURE_VIRTUALS (t), x);
7fb213d8 5111 complete_vars (t);
6f1b4c42 5112 }
f30432d7 5113 else
9f33663b 5114 finish_struct_1 (t);
5566b478 5115
82a98427 5116 input_location = saved_loc;
1f0d71c5 5117
5566b478 5118 TYPE_BEING_DEFINED (t) = 0;
8f032717 5119
5566b478 5120 if (current_class_type)
b74a0560 5121 popclass ();
5566b478 5122 else
357351e5 5123 error ("trying to finish struct, but kicked out due to previous parse errors");
5566b478 5124
5f261ba9
MM
5125 if (processing_template_decl && at_function_scope_p ())
5126 add_stmt (build_min (TAG_DEFN, t));
ae673f14 5127
5566b478 5128 return t;
f30432d7 5129}
8d08fdba 5130\f
51ddb82e 5131/* Return the dynamic type of INSTANCE, if known.
8d08fdba
MS
5132 Used to determine whether the virtual function table is needed
5133 or not.
5134
5135 *NONNULL is set iff INSTANCE can be known to be nonnull, regardless
97d953bb
MM
5136 of our knowledge of its type. *NONNULL should be initialized
5137 before this function is called. */
e92cc029 5138
d8e178a0 5139static tree
94edc4ab 5140fixed_type_or_null (tree instance, int* nonnull, int* cdtorp)
8d08fdba
MS
5141{
5142 switch (TREE_CODE (instance))
5143 {
5144 case INDIRECT_REF:
608afcc5 5145 if (POINTER_TYPE_P (TREE_TYPE (instance)))
a0de9d20
JM
5146 return NULL_TREE;
5147 else
5148 return fixed_type_or_null (TREE_OPERAND (instance, 0),
5149 nonnull, cdtorp);
5150
8d08fdba
MS
5151 case CALL_EXPR:
5152 /* This is a call to a constructor, hence it's never zero. */
5153 if (TREE_HAS_CONSTRUCTOR (instance))
5154 {
5155 if (nonnull)
5156 *nonnull = 1;
51ddb82e 5157 return TREE_TYPE (instance);
8d08fdba 5158 }
51ddb82e 5159 return NULL_TREE;
8d08fdba
MS
5160
5161 case SAVE_EXPR:
5162 /* This is a call to a constructor, hence it's never zero. */
5163 if (TREE_HAS_CONSTRUCTOR (instance))
5164 {
5165 if (nonnull)
5166 *nonnull = 1;
51ddb82e 5167 return TREE_TYPE (instance);
8d08fdba 5168 }
394fd776 5169 return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull, cdtorp);
8d08fdba 5170
8d08fdba
MS
5171 case PLUS_EXPR:
5172 case MINUS_EXPR:
394fd776
NS
5173 if (TREE_CODE (TREE_OPERAND (instance, 0)) == ADDR_EXPR)
5174 return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull, cdtorp);
8d08fdba
MS
5175 if (TREE_CODE (TREE_OPERAND (instance, 1)) == INTEGER_CST)
5176 /* Propagate nonnull. */
f63ab951 5177 return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull, cdtorp);
51ddb82e 5178 return NULL_TREE;
8d08fdba
MS
5179
5180 case NOP_EXPR:
5181 case CONVERT_EXPR:
394fd776 5182 return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull, cdtorp);
8d08fdba
MS
5183
5184 case ADDR_EXPR:
88f19756 5185 instance = TREE_OPERAND (instance, 0);
8d08fdba 5186 if (nonnull)
88f19756
RH
5187 {
5188 /* Just because we see an ADDR_EXPR doesn't mean we're dealing
5189 with a real object -- given &p->f, p can still be null. */
5190 tree t = get_base_address (instance);
5191 /* ??? Probably should check DECL_WEAK here. */
5192 if (t && DECL_P (t))
5193 *nonnull = 1;
5194 }
5195 return fixed_type_or_null (instance, nonnull, cdtorp);
8d08fdba
MS
5196
5197 case COMPONENT_REF:
642124c6
RH
5198 /* If this component is really a base class reference, then the field
5199 itself isn't definitive. */
5200 if (DECL_FIELD_IS_BASE (TREE_OPERAND (instance, 1)))
5201 return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull, cdtorp);
394fd776 5202 return fixed_type_or_null (TREE_OPERAND (instance, 1), nonnull, cdtorp);
8d08fdba 5203
8d08fdba
MS
5204 case VAR_DECL:
5205 case FIELD_DECL:
5206 if (TREE_CODE (TREE_TYPE (instance)) == ARRAY_TYPE
5207 && IS_AGGR_TYPE (TREE_TYPE (TREE_TYPE (instance))))
5208 {
5209 if (nonnull)
5210 *nonnull = 1;
51ddb82e 5211 return TREE_TYPE (TREE_TYPE (instance));
8d08fdba 5212 }
e92cc029 5213 /* fall through... */
8d08fdba
MS
5214 case TARGET_EXPR:
5215 case PARM_DECL:
f63ab951 5216 case RESULT_DECL:
8d08fdba
MS
5217 if (IS_AGGR_TYPE (TREE_TYPE (instance)))
5218 {
5219 if (nonnull)
5220 *nonnull = 1;
51ddb82e 5221 return TREE_TYPE (instance);
8d08fdba 5222 }
394fd776
NS
5223 else if (instance == current_class_ptr)
5224 {
5225 if (nonnull)
5226 *nonnull = 1;
5227
00a17e31 5228 /* if we're in a ctor or dtor, we know our type. */
394fd776
NS
5229 if (DECL_LANG_SPECIFIC (current_function_decl)
5230 && (DECL_CONSTRUCTOR_P (current_function_decl)
5231 || DECL_DESTRUCTOR_P (current_function_decl)))
5232 {
5233 if (cdtorp)
5234 *cdtorp = 1;
5235 return TREE_TYPE (TREE_TYPE (instance));
5236 }
5237 }
5238 else if (TREE_CODE (TREE_TYPE (instance)) == REFERENCE_TYPE)
5239 {
5240 /* Reference variables should be references to objects. */
5241 if (nonnull)
8d08fdba 5242 *nonnull = 1;
772f8889
MM
5243
5244 /* DECL_VAR_MARKED_P is used to prevent recursion; a
5245 variable's initializer may refer to the variable
5246 itself. */
5247 if (TREE_CODE (instance) == VAR_DECL
5248 && DECL_INITIAL (instance)
5249 && !DECL_VAR_MARKED_P (instance))
5250 {
5251 tree type;
5252 DECL_VAR_MARKED_P (instance) = 1;
5253 type = fixed_type_or_null (DECL_INITIAL (instance),
5254 nonnull, cdtorp);
5255 DECL_VAR_MARKED_P (instance) = 0;
5256 return type;
5257 }
8d08fdba 5258 }
51ddb82e 5259 return NULL_TREE;
8d08fdba
MS
5260
5261 default:
51ddb82e 5262 return NULL_TREE;
8d08fdba
MS
5263 }
5264}
51ddb82e 5265
838dfd8a 5266/* Return nonzero if the dynamic type of INSTANCE is known, and
338d90b8
NS
5267 equivalent to the static type. We also handle the case where
5268 INSTANCE is really a pointer. Return negative if this is a
5269 ctor/dtor. There the dynamic type is known, but this might not be
5270 the most derived base of the original object, and hence virtual
5271 bases may not be layed out according to this type.
51ddb82e
JM
5272
5273 Used to determine whether the virtual function table is needed
5274 or not.
5275
5276 *NONNULL is set iff INSTANCE can be known to be nonnull, regardless
97d953bb
MM
5277 of our knowledge of its type. *NONNULL should be initialized
5278 before this function is called. */
51ddb82e
JM
5279
5280int
94edc4ab 5281resolves_to_fixed_type_p (tree instance, int* nonnull)
51ddb82e
JM
5282{
5283 tree t = TREE_TYPE (instance);
394fd776
NS
5284 int cdtorp = 0;
5285
5286 tree fixed = fixed_type_or_null (instance, nonnull, &cdtorp);
51ddb82e
JM
5287 if (fixed == NULL_TREE)
5288 return 0;
5289 if (POINTER_TYPE_P (t))
5290 t = TREE_TYPE (t);
394fd776
NS
5291 if (!same_type_ignoring_top_level_qualifiers_p (t, fixed))
5292 return 0;
5293 return cdtorp ? -1 : 1;
51ddb82e
JM
5294}
5295
8d08fdba
MS
5296\f
5297void
94edc4ab 5298init_class_processing (void)
8d08fdba
MS
5299{
5300 current_class_depth = 0;
61a127b3
MM
5301 current_class_stack_size = 10;
5302 current_class_stack
c68b0a84 5303 = xmalloc (current_class_stack_size * sizeof (struct class_stack_node));
806aa901 5304 local_classes = VEC_alloc (tree, gc, 8);
8d08fdba 5305
0e5921e8
ZW
5306 ridpointers[(int) RID_PUBLIC] = access_public_node;
5307 ridpointers[(int) RID_PRIVATE] = access_private_node;
5308 ridpointers[(int) RID_PROTECTED] = access_protected_node;
8d08fdba
MS
5309}
5310
39fb05d0
MM
5311/* Restore the cached PREVIOUS_CLASS_LEVEL. */
5312
5313static void
5314restore_class_cache (void)
5315{
39fb05d0 5316 tree type;
39fb05d0
MM
5317
5318 /* We are re-entering the same class we just left, so we don't
5319 have to search the whole inheritance matrix to find all the
5320 decls to bind again. Instead, we install the cached
5321 class_shadowed list and walk through it binding names. */
5322 push_binding_level (previous_class_level);
5323 class_binding_level = previous_class_level;
39fb05d0
MM
5324 /* Restore IDENTIFIER_TYPE_VALUE. */
5325 for (type = class_binding_level->type_shadowed;
5326 type;
5327 type = TREE_CHAIN (type))
5328 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (type), TREE_TYPE (type));
5329}
5330
a723baf1
MM
5331/* Set global variables CURRENT_CLASS_NAME and CURRENT_CLASS_TYPE as
5332 appropriate for TYPE.
8d08fdba 5333
8d08fdba
MS
5334 So that we may avoid calls to lookup_name, we cache the _TYPE
5335 nodes of local TYPE_DECLs in the TREE_TYPE field of the name.
5336
5337 For multiple inheritance, we perform a two-pass depth-first search
39fb05d0 5338 of the type lattice. */
8d08fdba
MS
5339
5340void
29370796 5341pushclass (tree type)
8d08fdba 5342{
7fb4a8f7 5343 type = TYPE_MAIN_VARIANT (type);
8d08fdba 5344
61a127b3
MM
5345 /* Make sure there is enough room for the new entry on the stack. */
5346 if (current_class_depth + 1 >= current_class_stack_size)
8d08fdba 5347 {
61a127b3
MM
5348 current_class_stack_size *= 2;
5349 current_class_stack
c68b0a84
KG
5350 = xrealloc (current_class_stack,
5351 current_class_stack_size
5352 * sizeof (struct class_stack_node));
8d08fdba
MS
5353 }
5354
61a127b3
MM
5355 /* Insert a new entry on the class stack. */
5356 current_class_stack[current_class_depth].name = current_class_name;
5357 current_class_stack[current_class_depth].type = current_class_type;
5358 current_class_stack[current_class_depth].access = current_access_specifier;
8f032717 5359 current_class_stack[current_class_depth].names_used = 0;
61a127b3
MM
5360 current_class_depth++;
5361
5362 /* Now set up the new type. */
8d08fdba
MS
5363 current_class_name = TYPE_NAME (type);
5364 if (TREE_CODE (current_class_name) == TYPE_DECL)
5365 current_class_name = DECL_NAME (current_class_name);
5366 current_class_type = type;
5367
61a127b3
MM
5368 /* By default, things in classes are private, while things in
5369 structures or unions are public. */
5370 current_access_specifier = (CLASSTYPE_DECLARED_CLASS (type)
5371 ? access_private_node
5372 : access_public_node);
5373
89b578be
MM
5374 if (previous_class_level
5375 && type != previous_class_level->this_entity
8d08fdba
MS
5376 && current_class_depth == 1)
5377 {
5378 /* Forcibly remove any old class remnants. */
8f032717 5379 invalidate_class_lookup_cache ();
8d08fdba
MS
5380 }
5381
89b578be
MM
5382 if (!previous_class_level
5383 || type != previous_class_level->this_entity
5384 || current_class_depth > 1)
90ea9897 5385 pushlevel_class ();
29370796 5386 else
39fb05d0 5387 restore_class_cache ();
8f032717
MM
5388}
5389
39fb05d0
MM
5390/* When we exit a toplevel class scope, we save its binding level so
5391 that we can restore it quickly. Here, we've entered some other
5392 class, so we must invalidate our cache. */
8d08fdba 5393
8f032717 5394void
94edc4ab 5395invalidate_class_lookup_cache (void)
8f032717 5396{
89b578be 5397 previous_class_level = NULL;
8d08fdba
MS
5398}
5399
5400/* Get out of the current class scope. If we were in a class scope
b74a0560 5401 previously, that is the one popped to. */
e92cc029 5402
8d08fdba 5403void
94edc4ab 5404popclass (void)
8d08fdba 5405{
273a708f 5406 poplevel_class ();
8d08fdba
MS
5407
5408 current_class_depth--;
61a127b3
MM
5409 current_class_name = current_class_stack[current_class_depth].name;
5410 current_class_type = current_class_stack[current_class_depth].type;
5411 current_access_specifier = current_class_stack[current_class_depth].access;
8f032717
MM
5412 if (current_class_stack[current_class_depth].names_used)
5413 splay_tree_delete (current_class_stack[current_class_depth].names_used);
8d08fdba
MS
5414}
5415
70adf8a9
JM
5416/* Returns 1 if current_class_type is either T or a nested type of T.
5417 We start looking from 1 because entry 0 is from global scope, and has
5418 no type. */
b9082e8a
JM
5419
5420int
94edc4ab 5421currently_open_class (tree t)
b9082e8a
JM
5422{
5423 int i;
14d22dd6 5424 if (current_class_type && same_type_p (t, current_class_type))
b9082e8a 5425 return 1;
70adf8a9 5426 for (i = 1; i < current_class_depth; ++i)
14d22dd6
MM
5427 if (current_class_stack[i].type
5428 && same_type_p (current_class_stack [i].type, t))
b9082e8a
JM
5429 return 1;
5430 return 0;
5431}
5432
70adf8a9
JM
5433/* If either current_class_type or one of its enclosing classes are derived
5434 from T, return the appropriate type. Used to determine how we found
5435 something via unqualified lookup. */
5436
5437tree
94edc4ab 5438currently_open_derived_class (tree t)
70adf8a9
JM
5439{
5440 int i;
5441
9bcb9aae 5442 /* The bases of a dependent type are unknown. */
1fb3244a
MM
5443 if (dependent_type_p (t))
5444 return NULL_TREE;
5445
c44e68a5
KL
5446 if (!current_class_type)
5447 return NULL_TREE;
5448
70adf8a9
JM
5449 if (DERIVED_FROM_P (t, current_class_type))
5450 return current_class_type;
5451
5452 for (i = current_class_depth - 1; i > 0; --i)
5453 if (DERIVED_FROM_P (t, current_class_stack[i].type))
5454 return current_class_stack[i].type;
5455
5456 return NULL_TREE;
5457}
5458
8d08fdba 5459/* When entering a class scope, all enclosing class scopes' names with
14d22dd6
MM
5460 static meaning (static variables, static functions, types and
5461 enumerators) have to be visible. This recursive function calls
5462 pushclass for all enclosing class contexts until global or a local
5463 scope is reached. TYPE is the enclosed class. */
8d08fdba
MS
5464
5465void
14d22dd6 5466push_nested_class (tree type)
8d08fdba 5467{
a28e3c7f
MS
5468 tree context;
5469
b262d64c 5470 /* A namespace might be passed in error cases, like A::B:C. */
07c88314
MM
5471 if (type == NULL_TREE
5472 || type == error_mark_node
b262d64c 5473 || TREE_CODE (type) == NAMESPACE_DECL
07c88314 5474 || ! IS_AGGR_TYPE (type)
73b0fce8 5475 || TREE_CODE (type) == TEMPLATE_TYPE_PARM
a1281f45 5476 || TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
a28e3c7f
MS
5477 return;
5478
d2e5ee5c 5479 context = DECL_CONTEXT (TYPE_MAIN_DECL (type));
8d08fdba 5480
6b400b21 5481 if (context && CLASS_TYPE_P (context))
14d22dd6 5482 push_nested_class (context);
29370796 5483 pushclass (type);
8d08fdba
MS
5484}
5485
a723baf1 5486/* Undoes a push_nested_class call. */
8d08fdba
MS
5487
5488void
94edc4ab 5489pop_nested_class (void)
8d08fdba 5490{
d2e5ee5c 5491 tree context = DECL_CONTEXT (TYPE_MAIN_DECL (current_class_type));
8d08fdba 5492
b74a0560 5493 popclass ();
6b400b21 5494 if (context && CLASS_TYPE_P (context))
b74a0560 5495 pop_nested_class ();
8d08fdba
MS
5496}
5497
46ccf50a
JM
5498/* Returns the number of extern "LANG" blocks we are nested within. */
5499
5500int
94edc4ab 5501current_lang_depth (void)
46ccf50a 5502{
aff44741 5503 return VEC_length (tree, current_lang_base);
46ccf50a
JM
5504}
5505
8d08fdba
MS
5506/* Set global variables CURRENT_LANG_NAME to appropriate value
5507 so that behavior of name-mangling machinery is correct. */
5508
5509void
94edc4ab 5510push_lang_context (tree name)
8d08fdba 5511{
aff44741 5512 VEC_safe_push (tree, gc, current_lang_base, current_lang_name);
8d08fdba 5513
e229f2cd 5514 if (name == lang_name_cplusplus)
8d08fdba 5515 {
8d08fdba
MS
5516 current_lang_name = name;
5517 }
e229f2cd
PB
5518 else if (name == lang_name_java)
5519 {
e229f2cd
PB
5520 current_lang_name = name;
5521 /* DECL_IGNORED_P is initially set for these types, to avoid clutter.
5522 (See record_builtin_java_type in decl.c.) However, that causes
5523 incorrect debug entries if these types are actually used.
00a17e31 5524 So we re-enable debug output after extern "Java". */
e3cd9945
APB
5525 DECL_IGNORED_P (TYPE_NAME (java_byte_type_node)) = 0;
5526 DECL_IGNORED_P (TYPE_NAME (java_short_type_node)) = 0;
5527 DECL_IGNORED_P (TYPE_NAME (java_int_type_node)) = 0;
5528 DECL_IGNORED_P (TYPE_NAME (java_long_type_node)) = 0;
5529 DECL_IGNORED_P (TYPE_NAME (java_float_type_node)) = 0;
5530 DECL_IGNORED_P (TYPE_NAME (java_double_type_node)) = 0;
5531 DECL_IGNORED_P (TYPE_NAME (java_char_type_node)) = 0;
5532 DECL_IGNORED_P (TYPE_NAME (java_boolean_type_node)) = 0;
e229f2cd 5533 }
8d08fdba
MS
5534 else if (name == lang_name_c)
5535 {
8d08fdba
MS
5536 current_lang_name = name;
5537 }
5538 else
9e637a26 5539 error ("language string %<\"%E\"%> not recognized", name);
8d08fdba
MS
5540}
5541
5542/* Get out of the current language scope. */
e92cc029 5543
8d08fdba 5544void
94edc4ab 5545pop_lang_context (void)
8d08fdba 5546{
aff44741 5547 current_lang_name = VEC_pop (tree, current_lang_base);
8d08fdba 5548}
8d08fdba
MS
5549\f
5550/* Type instantiation routines. */
5551
104bf76a
MM
5552/* Given an OVERLOAD and a TARGET_TYPE, return the function that
5553 matches the TARGET_TYPE. If there is no satisfactory match, return
92af500d
NS
5554 error_mark_node, and issue a error & warning messages under control
5555 of FLAGS. Permit pointers to member function if FLAGS permits. If
5556 TEMPLATE_ONLY, the name of the overloaded function was a
5557 template-id, and EXPLICIT_TARGS are the explicitly provided
104bf76a
MM
5558 template arguments. */
5559
2c73f9f5 5560static tree
94edc4ab
NN
5561resolve_address_of_overloaded_function (tree target_type,
5562 tree overload,
92af500d
NS
5563 tsubst_flags_t flags,
5564 bool template_only,
94edc4ab 5565 tree explicit_targs)
2c73f9f5 5566{
104bf76a
MM
5567 /* Here's what the standard says:
5568
5569 [over.over]
5570
5571 If the name is a function template, template argument deduction
5572 is done, and if the argument deduction succeeds, the deduced
5573 arguments are used to generate a single template function, which
5574 is added to the set of overloaded functions considered.
5575
5576 Non-member functions and static member functions match targets of
5577 type "pointer-to-function" or "reference-to-function." Nonstatic
5578 member functions match targets of type "pointer-to-member
5579 function;" the function type of the pointer to member is used to
5580 select the member function from the set of overloaded member
5581 functions. If a nonstatic member function is selected, the
5582 reference to the overloaded function name is required to have the
5583 form of a pointer to member as described in 5.3.1.
5584
5585 If more than one function is selected, any template functions in
5586 the set are eliminated if the set also contains a non-template
5587 function, and any given template function is eliminated if the
5588 set contains a second template function that is more specialized
5589 than the first according to the partial ordering rules 14.5.5.2.
5590 After such eliminations, if any, there shall remain exactly one
5591 selected function. */
5592
5593 int is_ptrmem = 0;
5594 int is_reference = 0;
5595 /* We store the matches in a TREE_LIST rooted here. The functions
5596 are the TREE_PURPOSE, not the TREE_VALUE, in this list, for easy
5597 interoperability with most_specialized_instantiation. */
5598 tree matches = NULL_TREE;
50714e79 5599 tree fn;
104bf76a 5600
d8f8dca1
MM
5601 /* By the time we get here, we should be seeing only real
5602 pointer-to-member types, not the internal POINTER_TYPE to
5603 METHOD_TYPE representation. */
50bc768d
NS
5604 gcc_assert (TREE_CODE (target_type) != POINTER_TYPE
5605 || TREE_CODE (TREE_TYPE (target_type)) != METHOD_TYPE);
104bf76a 5606
50bc768d 5607 gcc_assert (is_overloaded_fn (overload));
92af500d 5608
104bf76a
MM
5609 /* Check that the TARGET_TYPE is reasonable. */
5610 if (TYPE_PTRFN_P (target_type))
381ddaa6 5611 /* This is OK. */;
104bf76a
MM
5612 else if (TYPE_PTRMEMFUNC_P (target_type))
5613 /* This is OK, too. */
5614 is_ptrmem = 1;
5615 else if (TREE_CODE (target_type) == FUNCTION_TYPE)
5616 {
5617 /* This is OK, too. This comes from a conversion to reference
5618 type. */
5619 target_type = build_reference_type (target_type);
5620 is_reference = 1;
5621 }
5622 else
5623 {
92af500d 5624 if (flags & tf_error)
c4f73174
GDR
5625 error ("cannot resolve overloaded function %qD based on"
5626 " conversion to type %qT",
5627 DECL_NAME (OVL_FUNCTION (overload)), target_type);
104bf76a
MM
5628 return error_mark_node;
5629 }
5630
5631 /* If we can find a non-template function that matches, we can just
5632 use it. There's no point in generating template instantiations
5633 if we're just going to throw them out anyhow. But, of course, we
5634 can only do this when we don't *need* a template function. */
5635 if (!template_only)
5636 {
5637 tree fns;
5638
a723baf1 5639 for (fns = overload; fns; fns = OVL_NEXT (fns))
104bf76a 5640 {
a723baf1 5641 tree fn = OVL_CURRENT (fns);
104bf76a 5642 tree fntype;
2c73f9f5 5643
104bf76a
MM
5644 if (TREE_CODE (fn) == TEMPLATE_DECL)
5645 /* We're not looking for templates just yet. */
5646 continue;
5647
5648 if ((TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
5649 != is_ptrmem)
5650 /* We're looking for a non-static member, and this isn't
5651 one, or vice versa. */
5652 continue;
34ff2673
RS
5653
5654 /* Ignore anticipated decls of undeclared builtins. */
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
5665 if (can_convert_arg (target_type, fntype, fn))
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. */
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);
4393e105 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,
a34d3336 5713 DEDUCE_EXACT))
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)
5726 instantiation_type =
5727 build_ptrmemfunc_type (build_pointer_type (instantiation_type));
5728 else if (!is_reference)
5729 instantiation_type = build_pointer_type (instantiation_type);
5730 if (can_convert_arg (target_type, instantiation_type, instantiation))
e1b3e07d 5731 matches = tree_cons (instantiation, fn, matches);
104bf76a
MM
5732 }
5733
5734 /* Now, remove all but the most specialized of the matches. */
5735 if (matches)
5736 {
e5214479 5737 tree match = most_specialized_instantiation (matches);
104bf76a
MM
5738
5739 if (match != error_mark_node)
e1b3e07d 5740 matches = tree_cons (match, NULL_TREE, NULL_TREE);
104bf76a
MM
5741 }
5742 }
5743
5744 /* Now we should have exactly one function in MATCHES. */
5745 if (matches == NULL_TREE)
5746 {
5747 /* There were *no* matches. */
92af500d 5748 if (flags & tf_error)
104bf76a 5749 {
1f070f2b
GDR
5750 error ("no matches converting function %qD to type %q#T",
5751 DECL_NAME (OVL_FUNCTION (overload)),
5752 target_type);
6b9b6b15
JM
5753
5754 /* print_candidates expects a chain with the functions in
5755 TREE_VALUE slots, so we cons one up here (we're losing anyway,
5756 so why be clever?). */
5757 for (; overload; overload = OVL_NEXT (overload))
e1b3e07d
MM
5758 matches = tree_cons (NULL_TREE, OVL_CURRENT (overload),
5759 matches);
6b9b6b15
JM
5760
5761 print_candidates (matches);
104bf76a
MM
5762 }
5763 return error_mark_node;
2c73f9f5 5764 }
104bf76a
MM
5765 else if (TREE_CHAIN (matches))
5766 {
5767 /* There were too many matches. */
5768
92af500d 5769 if (flags & tf_error)
104bf76a
MM
5770 {
5771 tree match;
5772
1f070f2b 5773 error ("converting overloaded function %qD to type %q#T is ambiguous",
104bf76a
MM
5774 DECL_NAME (OVL_FUNCTION (overload)),
5775 target_type);
5776
5777 /* Since print_candidates expects the functions in the
5778 TREE_VALUE slot, we flip them here. */
5779 for (match = matches; match; match = TREE_CHAIN (match))
5780 TREE_VALUE (match) = TREE_PURPOSE (match);
5781
5782 print_candidates (matches);
5783 }
5784
5785 return error_mark_node;
5786 }
5787
50714e79
MM
5788 /* Good, exactly one match. Now, convert it to the correct type. */
5789 fn = TREE_PURPOSE (matches);
5790
b1ce3eb2 5791 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
92af500d 5792 && !(flags & tf_ptrmem_ok) && !flag_ms_extensions)
19420d00 5793 {
b1ce3eb2
NS
5794 static int explained;
5795
92af500d 5796 if (!(flags & tf_error))
19420d00
NS
5797 return error_mark_node;
5798
1f070f2b 5799 pedwarn ("assuming pointer to member %qD", fn);
b1ce3eb2
NS
5800 if (!explained)
5801 {
1f070f2b 5802 pedwarn ("(a pointer to member can only be formed with %<&%E%>)", fn);
b1ce3eb2
NS
5803 explained = 1;
5804 }
19420d00 5805 }
84583208
MM
5806
5807 /* If we're doing overload resolution purely for the purpose of
5808 determining conversion sequences, we should not consider the
5809 function used. If this conversion sequence is selected, the
5810 function will be marked as used at this point. */
5811 if (!(flags & tf_conv))
5812 mark_used (fn);
a6ecf8b6 5813
50714e79
MM
5814 if (TYPE_PTRFN_P (target_type) || TYPE_PTRMEMFUNC_P (target_type))
5815 return build_unary_op (ADDR_EXPR, fn, 0);
5816 else
5817 {
5818 /* The target must be a REFERENCE_TYPE. Above, build_unary_op
5819 will mark the function as addressed, but here we must do it
5820 explicitly. */
dffd7eb6 5821 cxx_mark_addressable (fn);
50714e79
MM
5822
5823 return fn;
5824 }
2c73f9f5
ML
5825}
5826
ec255269
MS
5827/* This function will instantiate the type of the expression given in
5828 RHS to match the type of LHSTYPE. If errors exist, then return
92af500d 5829 error_mark_node. FLAGS is a bit mask. If TF_ERROR is set, then
5e76004e
NS
5830 we complain on errors. If we are not complaining, never modify rhs,
5831 as overload resolution wants to try many possible instantiations, in
5832 the hope that at least one will work.
5833
e6e174e5
JM
5834 For non-recursive calls, LHSTYPE should be a function, pointer to
5835 function, or a pointer to member function. */
e92cc029 5836
8d08fdba 5837tree
94edc4ab 5838instantiate_type (tree lhstype, tree rhs, tsubst_flags_t flags)
8d08fdba 5839{
92af500d 5840 tsubst_flags_t flags_in = flags;
19420d00 5841
c2ea3a40 5842 flags &= ~tf_ptrmem_ok;
105d8e1f 5843
8d08fdba
MS
5844 if (TREE_CODE (lhstype) == UNKNOWN_TYPE)
5845 {
92af500d 5846 if (flags & tf_error)
8251199e 5847 error ("not enough type information");
8d08fdba
MS
5848 return error_mark_node;
5849 }
5850
5851 if (TREE_TYPE (rhs) != NULL_TREE && ! (type_unknown_p (rhs)))
abff8e06 5852 {
8f4b394d 5853 if (same_type_p (lhstype, TREE_TYPE (rhs)))
abff8e06 5854 return rhs;
a723baf1
MM
5855 if (flag_ms_extensions
5856 && TYPE_PTRMEMFUNC_P (lhstype)
5857 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (rhs)))
5858 /* Microsoft allows `A::f' to be resolved to a
5859 pointer-to-member. */
5860 ;
5861 else
5862 {
92af500d 5863 if (flags & tf_error)
1f070f2b 5864 error ("argument of type %qT does not match %qT",
a723baf1
MM
5865 TREE_TYPE (rhs), lhstype);
5866 return error_mark_node;
5867 }
abff8e06 5868 }
8d08fdba 5869
50ad9642
MM
5870 if (TREE_CODE (rhs) == BASELINK)
5871 rhs = BASELINK_FUNCTIONS (rhs);
5872
5ae9ba3e
MM
5873 /* If we are in a template, and have a NON_DEPENDENT_EXPR, we cannot
5874 deduce any type information. */
5875 if (TREE_CODE (rhs) == NON_DEPENDENT_EXPR)
5876 {
5877 if (flags & tf_error)
5878 error ("not enough type information");
5879 return error_mark_node;
5880 }
5881
2c73f9f5
ML
5882 /* We don't overwrite rhs if it is an overloaded function.
5883 Copying it would destroy the tree link. */
5884 if (TREE_CODE (rhs) != OVERLOAD)
5885 rhs = copy_node (rhs);
c73964b2 5886
8d08fdba
MS
5887 /* This should really only be used when attempting to distinguish
5888 what sort of a pointer to function we have. For now, any
5889 arithmetic operation which is not supported on pointers
5890 is rejected as an error. */
5891
5892 switch (TREE_CODE (rhs))
5893 {
5894 case TYPE_EXPR:
5895 case CONVERT_EXPR:
5896 case SAVE_EXPR:
5897 case CONSTRUCTOR:
8dc2b103 5898 gcc_unreachable ();
8d08fdba
MS
5899
5900 case INDIRECT_REF:
5901 case ARRAY_REF:
ec255269
MS
5902 {
5903 tree new_rhs;
8d08fdba 5904
ec255269 5905 new_rhs = instantiate_type (build_pointer_type (lhstype),
940ff223 5906 TREE_OPERAND (rhs, 0), flags);
ec255269
MS
5907 if (new_rhs == error_mark_node)
5908 return error_mark_node;
5909
5910 TREE_TYPE (rhs) = lhstype;
5911 TREE_OPERAND (rhs, 0) = new_rhs;
5912 return rhs;
5913 }
8d08fdba
MS
5914
5915 case NOP_EXPR:
5916 rhs = copy_node (TREE_OPERAND (rhs, 0));
5917 TREE_TYPE (rhs) = unknown_type_node;
940ff223 5918 return instantiate_type (lhstype, rhs, flags);
8d08fdba
MS
5919
5920 case COMPONENT_REF:
92af500d 5921 {
5ae9ba3e 5922 tree member = TREE_OPERAND (rhs, 1);
92af500d 5923
5ae9ba3e
MM
5924 member = instantiate_type (lhstype, member, flags);
5925 if (member != error_mark_node
92af500d 5926 && TREE_SIDE_EFFECTS (TREE_OPERAND (rhs, 0)))
04c06002 5927 /* Do not lose object's side effects. */
5ae9ba3e
MM
5928 return build2 (COMPOUND_EXPR, TREE_TYPE (member),
5929 TREE_OPERAND (rhs, 0), member);
5930 return member;
92af500d 5931 }
8d08fdba 5932
2a238a97 5933 case OFFSET_REF:
05e0b2f4
JM
5934 rhs = TREE_OPERAND (rhs, 1);
5935 if (BASELINK_P (rhs))
92af500d 5936 return instantiate_type (lhstype, BASELINK_FUNCTIONS (rhs), flags_in);
05e0b2f4 5937
2a238a97
MM
5938 /* This can happen if we are forming a pointer-to-member for a
5939 member template. */
50bc768d 5940 gcc_assert (TREE_CODE (rhs) == TEMPLATE_ID_EXPR);
05e0b2f4 5941
2a238a97 5942 /* Fall through. */
874503bc 5943
386b8a85 5944 case TEMPLATE_ID_EXPR:
2bdb0643
JM
5945 {
5946 tree fns = TREE_OPERAND (rhs, 0);
5947 tree args = TREE_OPERAND (rhs, 1);
5948
19420d00 5949 return
92af500d
NS
5950 resolve_address_of_overloaded_function (lhstype, fns, flags_in,
5951 /*template_only=*/true,
2bdb0643 5952 args);
2bdb0643 5953 }
386b8a85 5954
2c73f9f5 5955 case OVERLOAD:
a723baf1 5956 case FUNCTION_DECL:
104bf76a 5957 return
92af500d
NS
5958 resolve_address_of_overloaded_function (lhstype, rhs, flags_in,
5959 /*template_only=*/false,
104bf76a 5960 /*explicit_targs=*/NULL_TREE);
2c73f9f5 5961
8d08fdba
MS
5962 case CALL_EXPR:
5963 /* This is too hard for now. */
8dc2b103 5964 gcc_unreachable ();
8d08fdba
MS
5965
5966 case PLUS_EXPR:
5967 case MINUS_EXPR:
5968 case COMPOUND_EXPR:
a0a33927 5969 TREE_OPERAND (rhs, 0)
940ff223 5970 = instantiate_type (lhstype, TREE_OPERAND (rhs, 0), flags);
8d08fdba
MS
5971 if (TREE_OPERAND (rhs, 0) == error_mark_node)
5972 return error_mark_node;
a0a33927 5973 TREE_OPERAND (rhs, 1)
940ff223 5974 = instantiate_type (lhstype, TREE_OPERAND (rhs, 1), flags);
8d08fdba
MS
5975 if (TREE_OPERAND (rhs, 1) == error_mark_node)
5976 return error_mark_node;
5977
5978 TREE_TYPE (rhs) = lhstype;
5979 return rhs;
5980
5981 case MULT_EXPR:
5982 case TRUNC_DIV_EXPR:
5983 case FLOOR_DIV_EXPR:
5984 case CEIL_DIV_EXPR:
5985 case ROUND_DIV_EXPR:
5986 case RDIV_EXPR:
5987 case TRUNC_MOD_EXPR:
5988 case FLOOR_MOD_EXPR:
5989 case CEIL_MOD_EXPR:
5990 case ROUND_MOD_EXPR:
5991 case FIX_ROUND_EXPR:
5992 case FIX_FLOOR_EXPR:
5993 case FIX_CEIL_EXPR:
5994 case FIX_TRUNC_EXPR:
5995 case FLOAT_EXPR:
5996 case NEGATE_EXPR:
5997 case ABS_EXPR:
5998 case MAX_EXPR:
5999 case MIN_EXPR:
8d08fdba
MS
6000
6001 case BIT_AND_EXPR:
6002 case BIT_IOR_EXPR:
6003 case BIT_XOR_EXPR:
6004 case LSHIFT_EXPR:
6005 case RSHIFT_EXPR:
6006 case LROTATE_EXPR:
6007 case RROTATE_EXPR:
6008
6009 case PREINCREMENT_EXPR:
6010 case PREDECREMENT_EXPR:
6011 case POSTINCREMENT_EXPR:
6012 case POSTDECREMENT_EXPR:
92af500d 6013 if (flags & tf_error)
8251199e 6014 error ("invalid operation on uninstantiated type");
8d08fdba
MS
6015 return error_mark_node;
6016
6017 case TRUTH_AND_EXPR:
6018 case TRUTH_OR_EXPR:
6019 case TRUTH_XOR_EXPR:
6020 case LT_EXPR:
6021 case LE_EXPR:
6022 case GT_EXPR:
6023 case GE_EXPR:
6024 case EQ_EXPR:
6025 case NE_EXPR:
6026 case TRUTH_ANDIF_EXPR:
6027 case TRUTH_ORIF_EXPR:
6028 case TRUTH_NOT_EXPR:
92af500d 6029 if (flags & tf_error)
8251199e 6030 error ("not enough type information");
8d08fdba
MS
6031 return error_mark_node;
6032
ca36f057
MM
6033 case COND_EXPR:
6034 if (type_unknown_p (TREE_OPERAND (rhs, 0)))
6035 {
92af500d 6036 if (flags & tf_error)
ca36f057
MM
6037 error ("not enough type information");
6038 return error_mark_node;
6039 }
6040 TREE_OPERAND (rhs, 1)
6041 = instantiate_type (lhstype, TREE_OPERAND (rhs, 1), flags);
6042 if (TREE_OPERAND (rhs, 1) == error_mark_node)
6043 return error_mark_node;
6044 TREE_OPERAND (rhs, 2)
6045 = instantiate_type (lhstype, TREE_OPERAND (rhs, 2), flags);
6046 if (TREE_OPERAND (rhs, 2) == error_mark_node)
6047 return error_mark_node;
6048
6049 TREE_TYPE (rhs) = lhstype;
6050 return rhs;
6051
6052 case MODIFY_EXPR:
6053 TREE_OPERAND (rhs, 1)
6054 = instantiate_type (lhstype, TREE_OPERAND (rhs, 1), flags);
6055 if (TREE_OPERAND (rhs, 1) == error_mark_node)
6056 return error_mark_node;
6057
6058 TREE_TYPE (rhs) = lhstype;
6059 return rhs;
6060
6061 case ADDR_EXPR:
19420d00
NS
6062 {
6063 if (PTRMEM_OK_P (rhs))
c2ea3a40 6064 flags |= tf_ptrmem_ok;
19420d00 6065
ca36f057 6066 return instantiate_type (lhstype, TREE_OPERAND (rhs, 0), flags);
19420d00 6067 }
ca36f057
MM
6068
6069 case ERROR_MARK:
6070 return error_mark_node;
6071
6072 default:
8dc2b103 6073 gcc_unreachable ();
ca36f057 6074 }
8dc2b103 6075 return error_mark_node;
ca36f057
MM
6076}
6077\f
6078/* Return the name of the virtual function pointer field
6079 (as an IDENTIFIER_NODE) for the given TYPE. Note that
6080 this may have to look back through base types to find the
6081 ultimate field name. (For single inheritance, these could
6082 all be the same name. Who knows for multiple inheritance). */
6083
6084static tree
94edc4ab 6085get_vfield_name (tree type)
ca36f057 6086{
37a247a0 6087 tree binfo, base_binfo;
ca36f057
MM
6088 char *buf;
6089
37a247a0 6090 for (binfo = TYPE_BINFO (type);
fa743e8c 6091 BINFO_N_BASE_BINFOS (binfo);
37a247a0
NS
6092 binfo = base_binfo)
6093 {
6094 base_binfo = BINFO_BASE_BINFO (binfo, 0);
ca36f057 6095
37a247a0
NS
6096 if (BINFO_VIRTUAL_P (base_binfo)
6097 || !TYPE_CONTAINS_VPTR_P (BINFO_TYPE (base_binfo)))
6098 break;
6099 }
6100
ca36f057 6101 type = BINFO_TYPE (binfo);
c68b0a84 6102 buf = alloca (sizeof (VFIELD_NAME_FORMAT) + TYPE_NAME_LENGTH (type) + 2);
ea122333
JM
6103 sprintf (buf, VFIELD_NAME_FORMAT,
6104 IDENTIFIER_POINTER (constructor_name (type)));
ca36f057
MM
6105 return get_identifier (buf);
6106}
6107
6108void
94edc4ab 6109print_class_statistics (void)
ca36f057
MM
6110{
6111#ifdef GATHER_STATISTICS
6112 fprintf (stderr, "convert_harshness = %d\n", n_convert_harshness);
6113 fprintf (stderr, "compute_conversion_costs = %d\n", n_compute_conversion_costs);
ca36f057
MM
6114 if (n_vtables)
6115 {
6116 fprintf (stderr, "vtables = %d; vtable searches = %d\n",
6117 n_vtables, n_vtable_searches);
6118 fprintf (stderr, "vtable entries = %d; vtable elems = %d\n",
6119 n_vtable_entries, n_vtable_elems);
6120 }
6121#endif
6122}
6123
6124/* Build a dummy reference to ourselves so Derived::Base (and A::A) works,
6125 according to [class]:
6126 The class-name is also inserted
6127 into the scope of the class itself. For purposes of access checking,
6128 the inserted class name is treated as if it were a public member name. */
6129
6130void
94edc4ab 6131build_self_reference (void)
ca36f057
MM
6132{
6133 tree name = constructor_name (current_class_type);
6134 tree value = build_lang_decl (TYPE_DECL, name, current_class_type);
6135 tree saved_cas;
6136
6137 DECL_NONLOCAL (value) = 1;
6138 DECL_CONTEXT (value) = current_class_type;
6139 DECL_ARTIFICIAL (value) = 1;
a3d87771 6140 SET_DECL_SELF_REFERENCE_P (value);
ca36f057
MM
6141
6142 if (processing_template_decl)
6143 value = push_template_decl (value);
6144
6145 saved_cas = current_access_specifier;
6146 current_access_specifier = access_public_node;
6147 finish_member_declaration (value);
6148 current_access_specifier = saved_cas;
6149}
6150
6151/* Returns 1 if TYPE contains only padding bytes. */
6152
6153int
94edc4ab 6154is_empty_class (tree type)
ca36f057 6155{
ca36f057
MM
6156 if (type == error_mark_node)
6157 return 0;
6158
6159 if (! IS_AGGR_TYPE (type))
6160 return 0;
6161
58731fd1
MM
6162 /* In G++ 3.2, whether or not a class was empty was determined by
6163 looking at its size. */
6164 if (abi_version_at_least (2))
6165 return CLASSTYPE_EMPTY_P (type);
6166 else
6167 return integer_zerop (CLASSTYPE_SIZE (type));
ca36f057
MM
6168}
6169
956d9305
MM
6170/* Returns true if TYPE contains an empty class. */
6171
6172static bool
6173contains_empty_class_p (tree type)
6174{
6175 if (is_empty_class (type))
6176 return true;
6177 if (CLASS_TYPE_P (type))
6178 {
6179 tree field;
fa743e8c
NS
6180 tree binfo;
6181 tree base_binfo;
956d9305
MM
6182 int i;
6183
fa743e8c
NS
6184 for (binfo = TYPE_BINFO (type), i = 0;
6185 BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
6186 if (contains_empty_class_p (BINFO_TYPE (base_binfo)))
956d9305
MM
6187 return true;
6188 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
17bbb839
MM
6189 if (TREE_CODE (field) == FIELD_DECL
6190 && !DECL_ARTIFICIAL (field)
6191 && is_empty_class (TREE_TYPE (field)))
956d9305
MM
6192 return true;
6193 }
6194 else if (TREE_CODE (type) == ARRAY_TYPE)
6195 return contains_empty_class_p (TREE_TYPE (type));
6196 return false;
6197}
6198
ca36f057
MM
6199/* Note that NAME was looked up while the current class was being
6200 defined and that the result of that lookup was DECL. */
6201
6202void
94edc4ab 6203maybe_note_name_used_in_class (tree name, tree decl)
ca36f057
MM
6204{
6205 splay_tree names_used;
6206
6207 /* If we're not defining a class, there's nothing to do. */
39fb05d0
MM
6208 if (!(innermost_scope_kind() == sk_class
6209 && TYPE_BEING_DEFINED (current_class_type)))
ca36f057
MM
6210 return;
6211
6212 /* If there's already a binding for this NAME, then we don't have
6213 anything to worry about. */
39fb05d0
MM
6214 if (lookup_member (current_class_type, name,
6215 /*protect=*/0, /*want_type=*/false))
ca36f057
MM
6216 return;
6217
6218 if (!current_class_stack[current_class_depth - 1].names_used)
6219 current_class_stack[current_class_depth - 1].names_used
6220 = splay_tree_new (splay_tree_compare_pointers, 0, 0);
6221 names_used = current_class_stack[current_class_depth - 1].names_used;
6222
6223 splay_tree_insert (names_used,
6224 (splay_tree_key) name,
6225 (splay_tree_value) decl);
6226}
6227
6228/* Note that NAME was declared (as DECL) in the current class. Check
0e339752 6229 to see that the declaration is valid. */
ca36f057
MM
6230
6231void
94edc4ab 6232note_name_declared_in_class (tree name, tree decl)
ca36f057
MM
6233{
6234 splay_tree names_used;
6235 splay_tree_node n;
6236
6237 /* Look to see if we ever used this name. */
6238 names_used
6239 = current_class_stack[current_class_depth - 1].names_used;
6240 if (!names_used)
6241 return;
6242
6243 n = splay_tree_lookup (names_used, (splay_tree_key) name);
6244 if (n)
6245 {
6246 /* [basic.scope.class]
6247
6248 A name N used in a class S shall refer to the same declaration
6249 in its context and when re-evaluated in the completed scope of
6250 S. */
1f070f2b
GDR
6251 error ("declaration of %q#D", decl);
6252 cp_error_at ("changes meaning of %qD from %q+#D",
38da6039 6253 DECL_NAME (OVL_CURRENT (decl)),
ca36f057
MM
6254 (tree) n->value);
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;
623fe76a 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,
94edc4ab 6316 int flags,
94edc4ab 6317 tree binfo,
dbbf88d1 6318 tree igo,
94edc4ab 6319 int indent)
ca36f057 6320{
b7442fb5 6321 int indented = 0;
fa743e8c
NS
6322 tree base_binfo;
6323 int i;
b7442fb5
NS
6324
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);
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;
6366
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 }
6395
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);
dbbf88d1
NS
6402
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
NS
6447{
6448 tree inits;
6449 int ix;
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
522801e7 6461 for (ix = 0, inits = CONSTRUCTOR_ELTS (DECL_INITIAL (decl));
b7442fb5 6462 inits; ix++, inits = TREE_CHAIN (inits))
4fdc14ca 6463 fprintf (stream, "%-4ld %s\n", (long)(ix * elt),
b7442fb5
NS
6464 expr_as_string (TREE_VALUE (inits), TFF_PLAIN_IDENTIFIER));
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;
9965d119 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 }
b7442fb5
NS
6493
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 }
6513
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;
6525
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);
6578
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.
6606
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.
6614
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
MM
6636 type = build_cplus_array_type (const_ptr_type_node, type);
6637
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
MM
6729 *index = size_binop (PLUS_EXPR, *index, TYPE_SIZE_UNIT (ptr_type_node));
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);
3ec6bad3 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);
9965d119 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
MM
6765 continue;
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;
6798
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;
5d5a519f 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 {
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. */
6815 while (BINFO_PRIMARY_P (binfo))
6816 binfo = BINFO_INHERITANCE_CHAIN (binfo);
6817 }
9965d119 6818 }
a3a0fc7f
NS
6819
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;
6843
6844 if (!vtable)
6845 /* This might be a primary base, so have no vtable in this
6846 hierarchy. */
6847 return NULL_TREE;
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. */
6888 for (vbase = TYPE_BINFO (BINFO_TYPE (binfo));
9ccf6541
MM
6889 vbase;
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);
9965d119 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
NN
6924accumulate_vtbl_inits (tree binfo,
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;
6939
23656158
MM
6940 /* If we're building a construction vtable, we're not interested in
6941 subobjects that don't require construction vtables. */
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. */
6948 TREE_VALUE (inits)
6949 = chainon (TREE_VALUE (inits),
6950 dfs_accumulate_vtbl_inits (binfo, orig_binfo,
6951 rtti_binfo, t, inits));
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
NN
6974dfs_accumulate_vtbl_inits (tree binfo,
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.
7bdcf888 6994
13de7ec4 6995 There are three possible cases:
7bdcf888 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. */
7bdcf888 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:
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
911a71a7
MM
7089 number of non-function entries in the vtable.
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
NN
7099build_vtbl_initializer (tree binfo,
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;
9ba5ff0f 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);
58c42dc2 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;
73ea87d7 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
ZW
7184 }
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
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);
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;
90b1ca2f
NS
7316
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;
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. */
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
NS
7382 delta = size_diffop (BINFO_OFFSET (b), BINFO_OFFSET (non_primary_binfo));
7383
911a71a7 7384 *vid->last_init
9bab6c90 7385 = build_tree_list (NULL_TREE,
7866705a
SB
7386 fold_build1 (NOP_EXPR,
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
MM
7447 return;
7448
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);
e6a66567
MM
7522
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. */
1e625046 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 }
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
NS
7640 while (CLASSTYPE_HAS_PRIMARY_BASE_P (BINFO_TYPE (b))
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
MM
7656 decl = integer_zero_node;
7657
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"