]> gcc.gnu.org Git - gcc.git/blame - gcc/cp/search.c
gfortran.map: Move erfc_scaled symbols to new symbol node GFORTRAN_1.1...
[gcc.git] / gcc / cp / search.c
CommitLineData
8d08fdba
MS
1/* Breadth-first and depth-first routines for
2 searching multiple-inheritance lattice for GNU C++.
fed3cef0 3 Copyright (C) 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
e77f031d 4 1999, 2000, 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
8d08fdba
MS
5 Contributed by Michael Tiemann (tiemann@cygnus.com)
6
f5adbb8d 7This file is part of GCC.
8d08fdba 8
f5adbb8d 9GCC is free software; you can redistribute it and/or modify
8d08fdba 10it under the terms of the GNU General Public License as published by
e77f031d 11the Free Software Foundation; either version 3, or (at your option)
8d08fdba
MS
12any later version.
13
f5adbb8d 14GCC is distributed in the hope that it will be useful,
8d08fdba
MS
15but WITHOUT ANY WARRANTY; without even the implied warranty of
16MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17GNU General Public License for more details.
18
19You should have received a copy of the GNU General Public License
e77f031d
NC
20along with GCC; see the file COPYING3. If not see
21<http://www.gnu.org/licenses/>. */
8d08fdba 22
e92cc029 23/* High-level class interface. */
8d08fdba
MS
24
25#include "config.h"
8d052bc7 26#include "system.h"
4977bab6
ZW
27#include "coretypes.h"
28#include "tm.h"
e7a587ef 29#include "tree.h"
8d08fdba
MS
30#include "cp-tree.h"
31#include "obstack.h"
32#include "flags.h"
43f2999d 33#include "rtl.h"
e8abc66f 34#include "output.h"
54f92bfb 35#include "toplev.h"
18ff3013 36#include "target.h"
8d08fdba 37
f8ad2d21 38static int is_subobject_of_p (tree, tree);
2c2e8978 39static tree dfs_lookup_base (tree, void *);
6936e493
NS
40static tree dfs_dcast_hint_pre (tree, void *);
41static tree dfs_dcast_hint_post (tree, void *);
86ac0575 42static tree dfs_debug_mark (tree, void *);
5d5a519f
NS
43static tree dfs_walk_once_r (tree, tree (*pre_fn) (tree, void *),
44 tree (*post_fn) (tree, void *), void *data);
45static void dfs_unmark_r (tree);
8f2a734f
NS
46static int check_hidden_convs (tree, int, int, tree, tree, tree);
47static tree split_conversions (tree, tree, tree, tree);
48static int lookup_conversions_r (tree, int, int,
49 tree, tree, tree, tree, tree *, tree *);
86ac0575 50static int look_for_overrides_r (tree, tree);
86ac0575 51static tree lookup_field_r (tree, void *);
6936e493
NS
52static tree dfs_accessible_post (tree, void *);
53static tree dfs_walk_once_accessible_r (tree, bool, bool,
54 tree (*pre_fn) (tree, void *),
55 tree (*post_fn) (tree, void *),
56 void *data);
57static tree dfs_walk_once_accessible (tree, bool,
58 tree (*pre_fn) (tree, void *),
59 tree (*post_fn) (tree, void *),
60 void *data);
86ac0575
NS
61static tree dfs_access_in_type (tree, void *);
62static access_kind access_in_type (tree, tree);
86ac0575
NS
63static int protected_accessible_p (tree, tree, tree);
64static int friend_accessible_p (tree, tree, tree);
86ac0575 65static int template_self_reference_p (tree, tree);
86ac0575 66static tree dfs_get_pure_virtuals (tree, void *);
8d08fdba 67
8d08fdba 68\f
8d08fdba 69/* Variables for gathering statistics. */
5566b478 70#ifdef GATHER_STATISTICS
8d08fdba
MS
71static int n_fields_searched;
72static int n_calls_lookup_field, n_calls_lookup_field_1;
73static int n_calls_lookup_fnfields, n_calls_lookup_fnfields_1;
74static int n_calls_get_base_type;
75static int n_outer_fields_searched;
76static int n_contexts_saved;
fc378698 77#endif /* GATHER_STATISTICS */
8d08fdba 78
8d08fdba 79\f
2c2e8978
NS
80/* Data for lookup_base and its workers. */
81
82struct lookup_base_data_s
338d90b8 83{
03fd3f84 84 tree t; /* type being searched. */
0cbd7506
MS
85 tree base; /* The base type we're looking for. */
86 tree binfo; /* Found binfo. */
87 bool via_virtual; /* Found via a virtual path. */
2c2e8978 88 bool ambiguous; /* Found multiply ambiguous */
0cbd7506 89 bool repeated_base; /* Whether there are repeated bases in the
2c2e8978 90 hierarchy. */
0cbd7506 91 bool want_any; /* Whether we want any matching binfo. */
2c2e8978
NS
92};
93
94/* Worker function for lookup_base. See if we've found the desired
f0ec2b9a 95 base and update DATA_ (a pointer to LOOKUP_BASE_DATA_S). */
338d90b8 96
2c2e8978
NS
97static tree
98dfs_lookup_base (tree binfo, void *data_)
99{
67f5655f 100 struct lookup_base_data_s *data = (struct lookup_base_data_s *) data_;
338d90b8 101
2c2e8978
NS
102 if (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), data->base))
103 {
104 if (!data->binfo)
338d90b8 105 {
2c2e8978
NS
106 data->binfo = binfo;
107 data->via_virtual
108 = binfo_via_virtual (data->binfo, data->t) != NULL_TREE;
c8094d83 109
2c2e8978
NS
110 if (!data->repeated_base)
111 /* If there are no repeated bases, we can stop now. */
112 return binfo;
c8094d83 113
2c2e8978
NS
114 if (data->want_any && !data->via_virtual)
115 /* If this is a non-virtual base, then we can't do
116 better. */
117 return binfo;
c8094d83 118
2c2e8978
NS
119 return dfs_skip_bases;
120 }
121 else
122 {
123 gcc_assert (binfo != data->binfo);
c8094d83 124
2c2e8978
NS
125 /* We've found more than one matching binfo. */
126 if (!data->want_any)
127 {
128 /* This is immediately ambiguous. */
129 data->binfo = NULL_TREE;
130 data->ambiguous = true;
131 return error_mark_node;
132 }
133
134 /* Prefer one via a non-virtual path. */
135 if (!binfo_via_virtual (binfo, data->t))
136 {
137 data->binfo = binfo;
138 data->via_virtual = false;
139 return binfo;
140 }
127b8136 141
2c2e8978
NS
142 /* There must be repeated bases, otherwise we'd have stopped
143 on the first base we found. */
144 return dfs_skip_bases;
338d90b8
NS
145 }
146 }
c8094d83 147
2c2e8978 148 return NULL_TREE;
338d90b8
NS
149}
150
bd16cb25 151/* Returns true if type BASE is accessible in T. (BASE is known to be
18e4be85
NS
152 a (possibly non-proper) base class of T.) If CONSIDER_LOCAL_P is
153 true, consider any special access of the current scope, or access
154 bestowed by friendship. */
bd16cb25
MM
155
156bool
18e4be85 157accessible_base_p (tree t, tree base, bool consider_local_p)
bd16cb25
MM
158{
159 tree decl;
160
161 /* [class.access.base]
162
163 A base class is said to be accessible if an invented public
c8094d83 164 member of the base class is accessible.
26bcf8fc
MM
165
166 If BASE is a non-proper base, this condition is trivially
167 true. */
168 if (same_type_p (t, base))
169 return true;
bd16cb25
MM
170 /* Rather than inventing a public member, we use the implicit
171 public typedef created in the scope of every class. */
172 decl = TYPE_FIELDS (base);
173 while (!DECL_SELF_REFERENCE_P (decl))
174 decl = TREE_CHAIN (decl);
175 while (ANON_AGGR_TYPE_P (t))
176 t = TYPE_CONTEXT (t);
18e4be85 177 return accessible_p (t, decl, consider_local_p);
bd16cb25
MM
178}
179
338d90b8 180/* Lookup BASE in the hierarchy dominated by T. Do access checking as
dbbf88d1
NS
181 ACCESS specifies. Return the binfo we discover. If KIND_PTR is
182 non-NULL, fill with information about what kind of base we
183 discovered.
338d90b8 184
50ad9642
MM
185 If the base is inaccessible, or ambiguous, and the ba_quiet bit is
186 not set in ACCESS, then an error is issued and error_mark_node is
187 returned. If the ba_quiet bit is set, then no error is issued and
188 NULL_TREE is returned. */
338d90b8
NS
189
190tree
86ac0575 191lookup_base (tree t, tree base, base_access access, base_kind *kind_ptr)
338d90b8 192{
2c2e8978
NS
193 tree binfo;
194 tree t_binfo;
338d90b8 195 base_kind bk;
c8094d83 196
338d90b8
NS
197 if (t == error_mark_node || base == error_mark_node)
198 {
199 if (kind_ptr)
200 *kind_ptr = bk_not_base;
201 return error_mark_node;
202 }
50bc768d 203 gcc_assert (TYPE_P (base));
c8094d83 204
4ba126e4
MM
205 if (!TYPE_P (t))
206 {
207 t_binfo = t;
208 t = BINFO_TYPE (t);
209 }
2c2e8978 210 else
cad7e87b
NS
211 {
212 t = complete_type (TYPE_MAIN_VARIANT (t));
213 t_binfo = TYPE_BINFO (t);
214 }
c8094d83 215
cad7e87b
NS
216 base = complete_type (TYPE_MAIN_VARIANT (base));
217
218 if (t_binfo)
2c2e8978
NS
219 {
220 struct lookup_base_data_s data;
221
222 data.t = t;
223 data.base = base;
224 data.binfo = NULL_TREE;
225 data.ambiguous = data.via_virtual = false;
226 data.repeated_base = CLASSTYPE_REPEATED_BASE_P (t);
227 data.want_any = access == ba_any;
228
229 dfs_walk_once (t_binfo, dfs_lookup_base, NULL, &data);
230 binfo = data.binfo;
c8094d83 231
2c2e8978
NS
232 if (!binfo)
233 bk = data.ambiguous ? bk_ambig : bk_not_base;
234 else if (binfo == t_binfo)
235 bk = bk_same_type;
236 else if (data.via_virtual)
237 bk = bk_via_virtual;
238 else
239 bk = bk_proper_base;
240 }
cad7e87b 241 else
2c2e8978
NS
242 {
243 binfo = NULL_TREE;
244 bk = bk_not_base;
245 }
338d90b8 246
e80706c4
MM
247 /* Check that the base is unambiguous and accessible. */
248 if (access != ba_any)
249 switch (bk)
250 {
251 case bk_not_base:
252 break;
253
254 case bk_ambig:
e80706c4
MM
255 if (!(access & ba_quiet))
256 {
a82e1a7d 257 error ("%qT is an ambiguous base of %qT", base, t);
e80706c4
MM
258 binfo = error_mark_node;
259 }
260 break;
261
262 default:
18e4be85 263 if ((access & ba_check_bit)
e80706c4
MM
264 /* If BASE is incomplete, then BASE and TYPE are probably
265 the same, in which case BASE is accessible. If they
266 are not the same, then TYPE is invalid. In that case,
267 there's no need to issue another error here, and
268 there's no implicit typedef to use in the code that
269 follows, so we skip the check. */
bd16cb25 270 && COMPLETE_TYPE_P (base)
18e4be85 271 && !accessible_base_p (t, base, !(access & ba_ignore_scope)))
e80706c4 272 {
bd16cb25 273 if (!(access & ba_quiet))
e80706c4 274 {
a82e1a7d 275 error ("%qT is an inaccessible base of %qT", base, t);
bd16cb25 276 binfo = error_mark_node;
e80706c4 277 }
bd16cb25
MM
278 else
279 binfo = NULL_TREE;
280 bk = bk_inaccessible;
e80706c4
MM
281 }
282 break;
283 }
284
338d90b8
NS
285 if (kind_ptr)
286 *kind_ptr = bk;
c8094d83 287
338d90b8
NS
288 return binfo;
289}
290
6936e493 291/* Data for dcast_base_hint walker. */
4a9e5c67 292
6936e493 293struct dcast_data_s
4a9e5c67 294{
6936e493
NS
295 tree subtype; /* The base type we're looking for. */
296 int virt_depth; /* Number of virtual bases encountered from most
297 derived. */
298 tree offset; /* Best hint offset discovered so far. */
299 bool repeated_base; /* Whether there are repeated bases in the
d740dbe7 300 hierarchy. */
6936e493
NS
301};
302
303/* Worker for dcast_base_hint. Search for the base type being cast
304 from. */
305
306static tree
307dfs_dcast_hint_pre (tree binfo, void *data_)
308{
67f5655f 309 struct dcast_data_s *data = (struct dcast_data_s *) data_;
6936e493
NS
310
311 if (BINFO_VIRTUAL_P (binfo))
312 data->virt_depth++;
c8094d83 313
6936e493 314 if (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), data->subtype))
4a9e5c67 315 {
6936e493
NS
316 if (data->virt_depth)
317 {
318 data->offset = ssize_int (-1);
319 return data->offset;
320 }
321 if (data->offset)
322 data->offset = ssize_int (-3);
4a9e5c67 323 else
6936e493
NS
324 data->offset = BINFO_OFFSET (binfo);
325
326 return data->repeated_base ? dfs_skip_bases : data->offset;
4a9e5c67 327 }
6936e493
NS
328
329 return NULL_TREE;
330}
331
332/* Worker for dcast_base_hint. Track the virtual depth. */
333
334static tree
335dfs_dcast_hint_post (tree binfo, void *data_)
336{
67f5655f 337 struct dcast_data_s *data = (struct dcast_data_s *) data_;
6936e493
NS
338
339 if (BINFO_VIRTUAL_P (binfo))
340 data->virt_depth--;
341
342 return NULL_TREE;
4a9e5c67
NS
343}
344
f08dda39
NS
345/* The dynamic cast runtime needs a hint about how the static SUBTYPE type
346 started from is related to the required TARGET type, in order to optimize
306ef644 347 the inheritance graph search. This information is independent of the
4a9e5c67
NS
348 current context, and ignores private paths, hence get_base_distance is
349 inappropriate. Return a TREE specifying the base offset, BOFF.
350 BOFF >= 0, there is only one public non-virtual SUBTYPE base at offset BOFF,
351 and there are no public virtual SUBTYPE bases.
f08dda39
NS
352 BOFF == -1, SUBTYPE occurs as multiple public virtual or non-virtual bases.
353 BOFF == -2, SUBTYPE is not a public base.
354 BOFF == -3, SUBTYPE occurs as multiple public non-virtual bases. */
4a9e5c67
NS
355
356tree
6936e493 357dcast_base_hint (tree subtype, tree target)
4a9e5c67 358{
6936e493
NS
359 struct dcast_data_s data;
360
361 data.subtype = subtype;
362 data.virt_depth = 0;
363 data.offset = NULL_TREE;
364 data.repeated_base = CLASSTYPE_REPEATED_BASE_P (target);
c8094d83 365
6936e493
NS
366 dfs_walk_once_accessible (TYPE_BINFO (target), /*friends=*/false,
367 dfs_dcast_hint_pre, dfs_dcast_hint_post, &data);
368 return data.offset ? data.offset : ssize_int (-2);
4a9e5c67
NS
369}
370
c717c5af
MM
371/* Search for a member with name NAME in a multiple inheritance
372 lattice specified by TYPE. If it does not exist, return NULL_TREE.
8d08fdba 373 If the member is ambiguously referenced, return `error_mark_node'.
c717c5af
MM
374 Otherwise, return a DECL with the indicated name. If WANT_TYPE is
375 true, type declarations are preferred. */
8d08fdba
MS
376
377/* Do a 1-level search for NAME as a member of TYPE. The caller must
378 figure out whether it can access this field. (Since it is only one
379 level, this is reasonable.) */
e92cc029 380
75135253 381tree
c717c5af 382lookup_field_1 (tree type, tree name, bool want_type)
8d08fdba 383{
926ce8bd 384 tree field;
f84b4be9
JM
385
386 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
11e74ea6
KL
387 || TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM
388 || TREE_CODE (type) == TYPENAME_TYPE)
c8094d83 389 /* The TYPE_FIELDS of a TEMPLATE_TYPE_PARM and
11e74ea6 390 BOUND_TEMPLATE_TEMPLATE_PARM are not fields at all;
f84b4be9
JM
391 instead TYPE_FIELDS is the TEMPLATE_PARM_INDEX. (Miraculously,
392 the code often worked even when we treated the index as a list
11e74ea6
KL
393 of fields!)
394 The TYPE_FIELDS of TYPENAME_TYPE is its TYPENAME_TYPE_FULLNAME. */
f84b4be9
JM
395 return NULL_TREE;
396
f90cdf34
MT
397 if (TYPE_NAME (type)
398 && DECL_LANG_SPECIFIC (TYPE_NAME (type))
399 && DECL_SORTED_FIELDS (TYPE_NAME (type)))
400 {
d07605f5
AP
401 tree *fields = &DECL_SORTED_FIELDS (TYPE_NAME (type))->elts[0];
402 int lo = 0, hi = DECL_SORTED_FIELDS (TYPE_NAME (type))->len;
f90cdf34
MT
403 int i;
404
405 while (lo < hi)
406 {
407 i = (lo + hi) / 2;
408
409#ifdef GATHER_STATISTICS
410 n_fields_searched++;
411#endif /* GATHER_STATISTICS */
412
413 if (DECL_NAME (fields[i]) > name)
414 hi = i;
415 else if (DECL_NAME (fields[i]) < name)
416 lo = i + 1;
417 else
bff3ce71 418 {
c717c5af
MM
419 field = NULL_TREE;
420
bff3ce71
JM
421 /* We might have a nested class and a field with the
422 same name; we sorted them appropriately via
de0c0e69
NS
423 field_decl_cmp, so just look for the first or last
424 field with this name. */
425 if (want_type)
c717c5af 426 {
de0c0e69
NS
427 do
428 field = fields[i--];
429 while (i >= lo && DECL_NAME (fields[i]) == name);
430 if (TREE_CODE (field) != TYPE_DECL
431 && !DECL_CLASS_TEMPLATE_P (field))
432 field = NULL_TREE;
433 }
434 else
435 {
436 do
437 field = fields[i++];
438 while (i < hi && DECL_NAME (fields[i]) == name);
c717c5af 439 }
c717c5af 440 return field;
bff3ce71 441 }
f90cdf34
MT
442 }
443 return NULL_TREE;
444 }
445
f84b4be9 446 field = TYPE_FIELDS (type);
8d08fdba
MS
447
448#ifdef GATHER_STATISTICS
449 n_calls_lookup_field_1++;
fc378698 450#endif /* GATHER_STATISTICS */
c717c5af 451 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
8d08fdba
MS
452 {
453#ifdef GATHER_STATISTICS
454 n_fields_searched++;
fc378698 455#endif /* GATHER_STATISTICS */
50bc768d 456 gcc_assert (DECL_P (field));
8d08fdba 457 if (DECL_NAME (field) == NULL_TREE
6bdb8141 458 && ANON_AGGR_TYPE_P (TREE_TYPE (field)))
8d08fdba 459 {
c717c5af 460 tree temp = lookup_field_1 (TREE_TYPE (field), name, want_type);
8d08fdba
MS
461 if (temp)
462 return temp;
463 }
2036a15c 464 if (TREE_CODE (field) == USING_DECL)
90ea9897
MM
465 {
466 /* We generally treat class-scope using-declarations as
467 ARM-style access specifications, because support for the
468 ISO semantics has not been implemented. So, in general,
469 there's no reason to return a USING_DECL, and the rest of
470 the compiler cannot handle that. Once the class is
471 defined, USING_DECLs are purged from TYPE_FIELDS; see
472 handle_using_decl. However, we make special efforts to
023458fa 473 make using-declarations in class templates and class
98ed9dae
NS
474 template partial specializations work correctly. */
475 if (!DECL_DEPENDENT_P (field))
90ea9897
MM
476 continue;
477 }
c717c5af
MM
478
479 if (DECL_NAME (field) == name
c8094d83 480 && (!want_type
c717c5af
MM
481 || TREE_CODE (field) == TYPE_DECL
482 || DECL_CLASS_TEMPLATE_P (field)))
65f36ac8 483 return field;
8d08fdba
MS
484 }
485 /* Not found. */
9cd64686 486 if (name == vptr_identifier)
8d08fdba
MS
487 {
488 /* Give the user what s/he thinks s/he wants. */
4c6b7393 489 if (TYPE_POLYMORPHIC_P (type))
d3a3fb6a 490 return TYPE_VFIELD (type);
8d08fdba
MS
491 }
492 return NULL_TREE;
493}
494
a5201a91 495/* Return the FUNCTION_DECL, RECORD_TYPE, UNION_TYPE, or
c8094d83 496 NAMESPACE_DECL corresponding to the innermost non-block scope. */
a5201a91
MM
497
498tree
6ac1920d 499current_scope (void)
a5201a91
MM
500{
501 /* There are a number of cases we need to be aware of here:
7177d104 502 current_class_type current_function_decl
e92cc029
MS
503 global NULL NULL
504 fn-local NULL SET
505 class-local SET NULL
506 class->fn SET SET
507 fn->class SET SET
7177d104 508
a5201a91
MM
509 Those last two make life interesting. If we're in a function which is
510 itself inside a class, we need decls to go into the fn's decls (our
511 second case below). But if we're in a class and the class itself is
512 inside a function, we need decls to go into the decls for the class. To
513 achieve this last goal, we must see if, when both current_class_ptr and
514 current_function_decl are set, the class was declared inside that
515 function. If so, we know to put the decls into the class's scope. */
516 if (current_function_decl && current_class_type
517 && ((DECL_FUNCTION_MEMBER_P (current_function_decl)
518 && same_type_p (DECL_CONTEXT (current_function_decl),
519 current_class_type))
520 || (DECL_FRIEND_CONTEXT (current_function_decl)
521 && same_type_p (DECL_FRIEND_CONTEXT (current_function_decl),
522 current_class_type))))
8d08fdba 523 return current_function_decl;
a5201a91
MM
524 if (current_class_type)
525 return current_class_type;
526 if (current_function_decl)
8d08fdba 527 return current_function_decl;
a5201a91 528 return current_namespace;
8d08fdba
MS
529}
530
838dfd8a 531/* Returns nonzero if we are currently in a function scope. Note
9188c363
MM
532 that this function returns zero if we are within a local class, but
533 not within a member function body of the local class. */
534
535int
edaf3e03 536at_function_scope_p (void)
9188c363
MM
537{
538 tree cs = current_scope ();
539 return cs && TREE_CODE (cs) == FUNCTION_DECL;
540}
541
5f261ba9
MM
542/* Returns true if the innermost active scope is a class scope. */
543
544bool
edaf3e03 545at_class_scope_p (void)
5f261ba9
MM
546{
547 tree cs = current_scope ();
548 return cs && TYPE_P (cs);
549}
550
afb0918a
MM
551/* Returns true if the innermost active scope is a namespace scope. */
552
553bool
554at_namespace_scope_p (void)
555{
a5201a91
MM
556 tree cs = current_scope ();
557 return cs && TREE_CODE (cs) == NAMESPACE_DECL;
afb0918a
MM
558}
559
d6479fe7 560/* Return the scope of DECL, as appropriate when doing name-lookup. */
8d08fdba 561
55de1b66 562tree
86ac0575 563context_for_name_lookup (tree decl)
d6479fe7
MM
564{
565 /* [class.union]
c8094d83 566
d6479fe7
MM
567 For the purposes of name lookup, after the anonymous union
568 definition, the members of the anonymous union are considered to
834c6dff 569 have been defined in the scope in which the anonymous union is
c8094d83 570 declared. */
55de1b66 571 tree context = DECL_CONTEXT (decl);
d6479fe7 572
55de1b66 573 while (context && TYPE_P (context) && ANON_AGGR_TYPE_P (context))
d6479fe7
MM
574 context = TYPE_CONTEXT (context);
575 if (!context)
576 context = global_namespace;
8d08fdba 577
d6479fe7
MM
578 return context;
579}
8d08fdba 580
c35cce41 581/* The accessibility routines use BINFO_ACCESS for scratch space
cd0be382 582 during the computation of the accessibility of some declaration. */
c35cce41
MM
583
584#define BINFO_ACCESS(NODE) \
dbbf88d1 585 ((access_kind) ((TREE_PUBLIC (NODE) << 1) | TREE_PRIVATE (NODE)))
c35cce41
MM
586
587/* Set the access associated with NODE to ACCESS. */
588
589#define SET_BINFO_ACCESS(NODE, ACCESS) \
dbbf88d1
NS
590 ((TREE_PUBLIC (NODE) = ((ACCESS) & 2) != 0), \
591 (TREE_PRIVATE (NODE) = ((ACCESS) & 1) != 0))
c35cce41 592
d6479fe7
MM
593/* Called from access_in_type via dfs_walk. Calculate the access to
594 DATA (which is really a DECL) in BINFO. */
eae89e04 595
d6479fe7 596static tree
86ac0575 597dfs_access_in_type (tree binfo, void *data)
d6479fe7
MM
598{
599 tree decl = (tree) data;
600 tree type = BINFO_TYPE (binfo);
c35cce41 601 access_kind access = ak_none;
8d08fdba 602
d6479fe7 603 if (context_for_name_lookup (decl) == type)
8d08fdba 604 {
a653d067 605 /* If we have descended to the scope of DECL, just note the
d6479fe7
MM
606 appropriate access. */
607 if (TREE_PRIVATE (decl))
c35cce41 608 access = ak_private;
d6479fe7 609 else if (TREE_PROTECTED (decl))
c35cce41 610 access = ak_protected;
d6479fe7 611 else
c35cce41 612 access = ak_public;
8d08fdba 613 }
c8094d83 614 else
d6479fe7
MM
615 {
616 /* First, check for an access-declaration that gives us more
617 access to the DECL. The CONST_DECL for an enumeration
618 constant will not have DECL_LANG_SPECIFIC, and thus no
619 DECL_ACCESS. */
8e4ce833 620 if (DECL_LANG_SPECIFIC (decl) && !DECL_DISCRIMINATOR_P (decl))
d6479fe7 621 {
c35cce41 622 tree decl_access = purpose_member (type, DECL_ACCESS (decl));
c8094d83 623
c35cce41 624 if (decl_access)
dbbf88d1
NS
625 {
626 decl_access = TREE_VALUE (decl_access);
c8094d83 627
dbbf88d1
NS
628 if (decl_access == access_public_node)
629 access = ak_public;
630 else if (decl_access == access_protected_node)
631 access = ak_protected;
632 else if (decl_access == access_private_node)
633 access = ak_private;
634 else
50bc768d 635 gcc_unreachable ();
dbbf88d1 636 }
d6479fe7
MM
637 }
638
639 if (!access)
640 {
641 int i;
63d1c7b3 642 tree base_binfo;
d4e6fecb 643 VEC(tree,gc) *accesses;
c8094d83 644
d6479fe7
MM
645 /* Otherwise, scan our baseclasses, and pick the most favorable
646 access. */
604a3205 647 accesses = BINFO_BASE_ACCESSES (binfo);
fa743e8c 648 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
d6479fe7 649 {
63d1c7b3 650 tree base_access = VEC_index (tree, accesses, i);
dbbf88d1 651 access_kind base_access_now = BINFO_ACCESS (base_binfo);
d6479fe7 652
dbbf88d1 653 if (base_access_now == ak_none || base_access_now == ak_private)
d6479fe7
MM
654 /* If it was not accessible in the base, or only
655 accessible as a private member, we can't access it
656 all. */
dbbf88d1
NS
657 base_access_now = ak_none;
658 else if (base_access == access_protected_node)
659 /* Public and protected members in the base become
d6479fe7 660 protected here. */
dbbf88d1
NS
661 base_access_now = ak_protected;
662 else if (base_access == access_private_node)
663 /* Public and protected members in the base become
d6479fe7 664 private here. */
dbbf88d1 665 base_access_now = ak_private;
d6479fe7
MM
666
667 /* See if the new access, via this base, gives more
668 access than our previous best access. */
dbbf88d1
NS
669 if (base_access_now != ak_none
670 && (access == ak_none || base_access_now < access))
d6479fe7 671 {
dbbf88d1 672 access = base_access_now;
8d08fdba 673
d6479fe7 674 /* If the new access is public, we can't do better. */
c35cce41 675 if (access == ak_public)
d6479fe7
MM
676 break;
677 }
678 }
679 }
680 }
faae18ab 681
d6479fe7 682 /* Note the access to DECL in TYPE. */
c35cce41 683 SET_BINFO_ACCESS (binfo, access);
02020185 684
d6479fe7
MM
685 return NULL_TREE;
686}
8d08fdba 687
d6479fe7 688/* Return the access to DECL in TYPE. */
8d08fdba 689
c35cce41 690static access_kind
86ac0575 691access_in_type (tree type, tree decl)
d6479fe7
MM
692{
693 tree binfo = TYPE_BINFO (type);
8d08fdba 694
d6479fe7 695 /* We must take into account
8d08fdba 696
d6479fe7 697 [class.paths]
8d08fdba 698
d6479fe7
MM
699 If a name can be reached by several paths through a multiple
700 inheritance graph, the access is that of the path that gives
c8094d83 701 most access.
8d08fdba 702
d6479fe7
MM
703 The algorithm we use is to make a post-order depth-first traversal
704 of the base-class hierarchy. As we come up the tree, we annotate
705 each node with the most lenient access. */
5d5a519f 706 dfs_walk_once (binfo, NULL, dfs_access_in_type, decl);
8d08fdba 707
c35cce41 708 return BINFO_ACCESS (binfo);
d6479fe7
MM
709}
710
838dfd8a 711/* Returns nonzero if it is OK to access DECL through an object
e80706c4 712 indicated by BINFO in the context of DERIVED. */
6a629cac
MM
713
714static int
86ac0575 715protected_accessible_p (tree decl, tree derived, tree binfo)
6a629cac 716{
c35cce41 717 access_kind access;
6a629cac
MM
718
719 /* We're checking this clause from [class.access.base]
720
721 m as a member of N is protected, and the reference occurs in a
722 member or friend of class N, or in a member or friend of a
723 class P derived from N, where m as a member of P is private or
c8094d83 724 protected.
6a629cac 725
d7cca31e
JM
726 Here DERIVED is a possible P and DECL is m. accessible_p will
727 iterate over various values of N, but the access to m in DERIVED
728 does not change.
729
730 Note that I believe that the passage above is wrong, and should read
731 "...is private or protected or public"; otherwise you get bizarre results
732 whereby a public using-decl can prevent you from accessing a protected
733 member of a base. (jason 2000/02/28) */
734
735 /* If DERIVED isn't derived from m's class, then it can't be a P. */
e185aa16 736 if (!DERIVED_FROM_P (context_for_name_lookup (decl), derived))
6a629cac
MM
737 return 0;
738
739 access = access_in_type (derived, decl);
d7cca31e
JM
740
741 /* If m is inaccessible in DERIVED, then it's not a P. */
c35cce41 742 if (access == ak_none)
6a629cac 743 return 0;
c8094d83 744
6a629cac
MM
745 /* [class.protected]
746
747 When a friend or a member function of a derived class references
748 a protected nonstatic member of a base class, an access check
749 applies in addition to those described earlier in clause
d7cca31e 750 _class.access_) Except when forming a pointer to member
6a629cac
MM
751 (_expr.unary.op_), the access must be through a pointer to,
752 reference to, or object of the derived class itself (or any class
753 derived from that class) (_expr.ref_). If the access is to form
754 a pointer to member, the nested-name-specifier shall name the
755 derived class (or any class derived from that class). */
756 if (DECL_NONSTATIC_MEMBER_P (decl))
757 {
758 /* We can tell through what the reference is occurring by
759 chasing BINFO up to the root. */
760 tree t = binfo;
761 while (BINFO_INHERITANCE_CHAIN (t))
762 t = BINFO_INHERITANCE_CHAIN (t);
c8094d83 763
6a629cac
MM
764 if (!DERIVED_FROM_P (derived, BINFO_TYPE (t)))
765 return 0;
766 }
767
768 return 1;
769}
770
838dfd8a 771/* Returns nonzero if SCOPE is a friend of a type which would be able
d7cca31e 772 to access DECL through the object indicated by BINFO. */
6a629cac
MM
773
774static int
86ac0575 775friend_accessible_p (tree scope, tree decl, tree binfo)
6a629cac
MM
776{
777 tree befriending_classes;
778 tree t;
779
780 if (!scope)
781 return 0;
782
783 if (TREE_CODE (scope) == FUNCTION_DECL
784 || DECL_FUNCTION_TEMPLATE_P (scope))
785 befriending_classes = DECL_BEFRIENDING_CLASSES (scope);
786 else if (TYPE_P (scope))
787 befriending_classes = CLASSTYPE_BEFRIENDING_CLASSES (scope);
788 else
789 return 0;
790
791 for (t = befriending_classes; t; t = TREE_CHAIN (t))
d7cca31e 792 if (protected_accessible_p (decl, TREE_VALUE (t), binfo))
6a629cac
MM
793 return 1;
794
03b1c206
JM
795 /* Nested classes have the same access as their enclosing types, as
796 per DR 45 (this is a change from the standard). */
445ab443
JM
797 if (TYPE_P (scope))
798 for (t = TYPE_CONTEXT (scope); t && TYPE_P (t); t = TYPE_CONTEXT (t))
bdc3400f 799 if (protected_accessible_p (decl, t, binfo))
445ab443
JM
800 return 1;
801
6a629cac
MM
802 if (TREE_CODE (scope) == FUNCTION_DECL
803 || DECL_FUNCTION_TEMPLATE_P (scope))
804 {
c8094d83
MS
805 /* Perhaps this SCOPE is a member of a class which is a
806 friend. */
18e4be85 807 if (DECL_CLASS_SCOPE_P (scope)
d7cca31e 808 && friend_accessible_p (DECL_CONTEXT (scope), decl, binfo))
6a629cac
MM
809 return 1;
810
811 /* Or an instantiation of something which is a friend. */
812 if (DECL_TEMPLATE_INFO (scope))
e59f7322
KL
813 {
814 int ret;
815 /* Increment processing_template_decl to make sure that
816 dependent_type_p works correctly. */
817 ++processing_template_decl;
818 ret = friend_accessible_p (DECL_TI_TEMPLATE (scope), decl, binfo);
819 --processing_template_decl;
820 return ret;
821 }
6a629cac 822 }
6a629cac
MM
823
824 return 0;
70adf8a9
JM
825}
826
6936e493
NS
827/* Called via dfs_walk_once_accessible from accessible_p */
828
5d5a519f 829static tree
6936e493 830dfs_accessible_post (tree binfo, void *data ATTRIBUTE_UNUSED)
5d5a519f 831{
a5201a91
MM
832 if (BINFO_ACCESS (binfo) != ak_none)
833 {
834 tree scope = current_scope ();
835 if (scope && TREE_CODE (scope) != NAMESPACE_DECL
836 && is_friend (BINFO_TYPE (binfo), scope))
837 return binfo;
838 }
c8094d83 839
6936e493 840 return NULL_TREE;
5d5a519f
NS
841}
842
d6479fe7 843/* DECL is a declaration from a base class of TYPE, which was the
838dfd8a 844 class used to name DECL. Return nonzero if, in the current
d6479fe7 845 context, DECL is accessible. If TYPE is actually a BINFO node,
8084bf81 846 then we can tell in what context the access is occurring by looking
18e4be85
NS
847 at the most derived class along the path indicated by BINFO. If
848 CONSIDER_LOCAL is true, do consider special access the current
03fd3f84 849 scope or friendship thereof we might have. */
d6479fe7 850
c8094d83 851int
18e4be85 852accessible_p (tree type, tree decl, bool consider_local_p)
d6479fe7 853{
d6479fe7 854 tree binfo;
0e8c9b28 855 tree scope;
a653d067 856 access_kind access;
d6479fe7 857
838dfd8a 858 /* Nonzero if it's OK to access DECL if it has protected
d6479fe7
MM
859 accessibility in TYPE. */
860 int protected_ok = 0;
861
d6479fe7
MM
862 /* If this declaration is in a block or namespace scope, there's no
863 access control. */
864 if (!TYPE_P (context_for_name_lookup (decl)))
865 return 1;
866
0e8c9b28
MM
867 /* There is no need to perform access checks inside a thunk. */
868 scope = current_scope ();
869 if (scope && DECL_THUNK_P (scope))
870 return 1;
871
279b8466
MM
872 /* In a template declaration, we cannot be sure whether the
873 particular specialization that is instantiated will be a friend
874 or not. Therefore, all access checks are deferred until
94c813b4
MM
875 instantiation. However, PROCESSING_TEMPLATE_DECL is set in the
876 parameter list for a template (because we may see dependent types
877 in default arguments for template parameters), and access
3db45ab5
MS
878 checking should be performed in the outermost parameter list. */
879 if (processing_template_decl
94c813b4 880 && (!processing_template_parmlist || processing_template_decl > 1))
279b8466
MM
881 return 1;
882
d6479fe7
MM
883 if (!TYPE_P (type))
884 {
885 binfo = type;
886 type = BINFO_TYPE (type);
8d08fdba 887 }
d6479fe7
MM
888 else
889 binfo = TYPE_BINFO (type);
890
891 /* [class.access.base]
892
893 A member m is accessible when named in class N if
894
895 --m as a member of N is public, or
8d08fdba 896
d6479fe7
MM
897 --m as a member of N is private, and the reference occurs in a
898 member or friend of class N, or
8d08fdba 899
d6479fe7
MM
900 --m as a member of N is protected, and the reference occurs in a
901 member or friend of class N, or in a member or friend of a
902 class P derived from N, where m as a member of P is private or
903 protected, or
904
905 --there exists a base class B of N that is accessible at the point
c8094d83 906 of reference, and m is accessible when named in class B.
d6479fe7
MM
907
908 We walk the base class hierarchy, checking these conditions. */
909
18e4be85
NS
910 if (consider_local_p)
911 {
912 /* Figure out where the reference is occurring. Check to see if
913 DECL is private or protected in this scope, since that will
914 determine whether protected access is allowed. */
915 if (current_class_type)
916 protected_ok = protected_accessible_p (decl,
917 current_class_type, binfo);
918
919 /* Now, loop through the classes of which we are a friend. */
920 if (!protected_ok)
921 protected_ok = friend_accessible_p (scope, decl, binfo);
922 }
8d08fdba 923
70adf8a9
JM
924 /* Standardize the binfo that access_in_type will use. We don't
925 need to know what path was chosen from this point onwards. */
d6479fe7
MM
926 binfo = TYPE_BINFO (type);
927
928 /* Compute the accessibility of DECL in the class hierarchy
929 dominated by type. */
a653d067
KL
930 access = access_in_type (type, decl);
931 if (access == ak_public
932 || (access == ak_protected && protected_ok))
933 return 1;
c8094d83 934
18e4be85
NS
935 if (!consider_local_p)
936 return 0;
c8094d83 937
18e4be85
NS
938 /* Walk the hierarchy again, looking for a base class that allows
939 access. */
940 return dfs_walk_once_accessible (binfo, /*friends=*/true,
941 NULL, dfs_accessible_post, NULL)
942 != NULL_TREE;
8d08fdba
MS
943}
944
7d4bdeed 945struct lookup_field_info {
d6479fe7
MM
946 /* The type in which we're looking. */
947 tree type;
7d4bdeed
MM
948 /* The name of the field for which we're looking. */
949 tree name;
950 /* If non-NULL, the current result of the lookup. */
951 tree rval;
952 /* The path to RVAL. */
953 tree rval_binfo;
d6479fe7
MM
954 /* If non-NULL, the lookup was ambiguous, and this is a list of the
955 candidates. */
7d4bdeed 956 tree ambiguous;
838dfd8a 957 /* If nonzero, we are looking for types, not data members. */
7d4bdeed
MM
958 int want_type;
959 /* If something went wrong, a message indicating what. */
d8e178a0 960 const char *errstr;
7d4bdeed
MM
961};
962
9188c363
MM
963/* Within the scope of a template class, you can refer to the to the
964 current specialization with the name of the template itself. For
965 example:
c8094d83 966
8f032717
MM
967 template <typename T> struct S { S* sp; }
968
838dfd8a 969 Returns nonzero if DECL is such a declaration in a class TYPE. */
8f032717
MM
970
971static int
86ac0575 972template_self_reference_p (tree type, tree decl)
8f032717
MM
973{
974 return (CLASSTYPE_USE_TEMPLATE (type)
3fc5037b 975 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (type))
8f032717
MM
976 && TREE_CODE (decl) == TYPE_DECL
977 && DECL_ARTIFICIAL (decl)
978 && DECL_NAME (decl) == constructor_name (type));
979}
980
bd0d5d4a
JM
981/* Nonzero for a class member means that it is shared between all objects
982 of that class.
983
984 [class.member.lookup]:If the resulting set of declarations are not all
985 from sub-objects of the same type, or the set has a nonstatic member
986 and includes members from distinct sub-objects, there is an ambiguity
987 and the program is ill-formed.
988
989 This function checks that T contains no nonstatic members. */
990
821eaf2a 991int
86ac0575 992shared_member_p (tree t)
bd0d5d4a
JM
993{
994 if (TREE_CODE (t) == VAR_DECL || TREE_CODE (t) == TYPE_DECL \
995 || TREE_CODE (t) == CONST_DECL)
996 return 1;
997 if (is_overloaded_fn (t))
998 {
999 for (; t; t = OVL_NEXT (t))
1000 {
1001 tree fn = OVL_CURRENT (t);
1002 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
1003 return 0;
1004 }
1005 return 1;
1006 }
1007 return 0;
1008}
1009
f8ad2d21
NS
1010/* Routine to see if the sub-object denoted by the binfo PARENT can be
1011 found as a base class and sub-object of the object denoted by
1012 BINFO. */
1013
1014static int
1015is_subobject_of_p (tree parent, tree binfo)
1016{
1017 tree probe;
c8094d83 1018
f8ad2d21
NS
1019 for (probe = parent; probe; probe = BINFO_INHERITANCE_CHAIN (probe))
1020 {
1021 if (probe == binfo)
1022 return 1;
1023 if (BINFO_VIRTUAL_P (probe))
1024 return (binfo_for_vbase (BINFO_TYPE (probe), BINFO_TYPE (binfo))
1025 != NULL_TREE);
1026 }
1027 return 0;
1028}
1029
7d4bdeed
MM
1030/* DATA is really a struct lookup_field_info. Look for a field with
1031 the name indicated there in BINFO. If this function returns a
1032 non-NULL value it is the result of the lookup. Called from
1033 lookup_field via breadth_first_search. */
1034
1035static tree
86ac0575 1036lookup_field_r (tree binfo, void *data)
7d4bdeed
MM
1037{
1038 struct lookup_field_info *lfi = (struct lookup_field_info *) data;
1039 tree type = BINFO_TYPE (binfo);
4bb0968f 1040 tree nval = NULL_TREE;
7d4bdeed 1041
5d5a519f
NS
1042 /* If this is a dependent base, don't look in it. */
1043 if (BINFO_DEPENDENT_BASE_P (binfo))
1044 return NULL_TREE;
c8094d83 1045
5d5a519f
NS
1046 /* If this base class is hidden by the best-known value so far, we
1047 don't need to look. */
1048 if (lfi->rval_binfo && BINFO_INHERITANCE_CHAIN (binfo) == lfi->rval_binfo
1049 && !BINFO_VIRTUAL_P (binfo))
1050 return dfs_skip_bases;
1051
d6479fe7
MM
1052 /* First, look for a function. There can't be a function and a data
1053 member with the same name, and if there's a function and a type
1054 with the same name, the type is hidden by the function. */
4bb0968f
MM
1055 if (!lfi->want_type)
1056 {
477f6664 1057 int idx = lookup_fnfields_1 (type, lfi->name);
4bb0968f 1058 if (idx >= 0)
aaaa46d2 1059 nval = VEC_index (tree, CLASSTYPE_METHOD_VEC (type), idx);
4bb0968f
MM
1060 }
1061
1062 if (!nval)
d6479fe7 1063 /* Look for a data member or type. */
c717c5af 1064 nval = lookup_field_1 (type, lfi->name, lfi->want_type);
d6479fe7
MM
1065
1066 /* If there is no declaration with the indicated name in this type,
1067 then there's nothing to do. */
7d4bdeed 1068 if (!nval)
5d5a519f 1069 goto done;
7d4bdeed 1070
4bb0968f
MM
1071 /* If we're looking up a type (as with an elaborated type specifier)
1072 we ignore all non-types we find. */
8a2b77e7
JM
1073 if (lfi->want_type && TREE_CODE (nval) != TYPE_DECL
1074 && !DECL_CLASS_TEMPLATE_P (nval))
4bb0968f 1075 {
881cae05
JJ
1076 if (lfi->name == TYPE_IDENTIFIER (type))
1077 {
1078 /* If the aggregate has no user defined constructors, we allow
1079 it to have fields with the same name as the enclosing type.
1080 If we are looking for that name, find the corresponding
1081 TYPE_DECL. */
1082 for (nval = TREE_CHAIN (nval); nval; nval = TREE_CHAIN (nval))
1083 if (DECL_NAME (nval) == lfi->name
1084 && TREE_CODE (nval) == TYPE_DECL)
1085 break;
1086 }
1087 else
1088 nval = NULL_TREE;
5e0c54e5 1089 if (!nval && CLASSTYPE_NESTED_UTDS (type) != NULL)
881cae05 1090 {
0cbd7506
MS
1091 binding_entry e = binding_table_find (CLASSTYPE_NESTED_UTDS (type),
1092 lfi->name);
5e0c54e5
GDR
1093 if (e != NULL)
1094 nval = TYPE_MAIN_DECL (e->type);
c8094d83 1095 else
5d5a519f 1096 goto done;
881cae05 1097 }
4bb0968f
MM
1098 }
1099
8f032717 1100 /* You must name a template base class with a template-id. */
c8094d83 1101 if (!same_type_p (type, lfi->type)
8f032717 1102 && template_self_reference_p (type, nval))
5d5a519f 1103 goto done;
8f032717 1104
7d4bdeed
MM
1105 /* If the lookup already found a match, and the new value doesn't
1106 hide the old one, we might have an ambiguity. */
f8ad2d21
NS
1107 if (lfi->rval_binfo
1108 && !is_subobject_of_p (lfi->rval_binfo, binfo))
c8094d83 1109
7d4bdeed 1110 {
bd0d5d4a 1111 if (nval == lfi->rval && shared_member_p (nval))
7d4bdeed
MM
1112 /* The two things are really the same. */
1113 ;
f8ad2d21 1114 else if (is_subobject_of_p (binfo, lfi->rval_binfo))
7d4bdeed
MM
1115 /* The previous value hides the new one. */
1116 ;
1117 else
1118 {
1119 /* We have a real ambiguity. We keep a chain of all the
1120 candidates. */
1121 if (!lfi->ambiguous && lfi->rval)
aa65d1a2
MM
1122 {
1123 /* This is the first time we noticed an ambiguity. Add
1124 what we previously thought was a reasonable candidate
1125 to the list. */
e1b3e07d 1126 lfi->ambiguous = tree_cons (NULL_TREE, lfi->rval, NULL_TREE);
aa65d1a2
MM
1127 TREE_TYPE (lfi->ambiguous) = error_mark_node;
1128 }
1129
7d4bdeed 1130 /* Add the new value. */
e1b3e07d 1131 lfi->ambiguous = tree_cons (NULL_TREE, nval, lfi->ambiguous);
aa65d1a2 1132 TREE_TYPE (lfi->ambiguous) = error_mark_node;
9e637a26 1133 lfi->errstr = "request for member %qD is ambiguous";
7d4bdeed
MM
1134 }
1135 }
1136 else
1137 {
d6479fe7 1138 lfi->rval = nval;
7d4bdeed
MM
1139 lfi->rval_binfo = binfo;
1140 }
1141
5d5a519f
NS
1142 done:
1143 /* Don't look for constructors or destructors in base classes. */
1144 if (IDENTIFIER_CTOR_OR_DTOR_P (lfi->name))
1145 return dfs_skip_bases;
d6479fe7 1146 return NULL_TREE;
7d4bdeed
MM
1147}
1148
c2a124b2 1149/* Return a "baselink" with BASELINK_BINFO, BASELINK_ACCESS_BINFO,
4ba126e4
MM
1150 BASELINK_FUNCTIONS, and BASELINK_OPTYPE set to BINFO, ACCESS_BINFO,
1151 FUNCTIONS, and OPTYPE respectively. */
1152
1153tree
1154build_baselink (tree binfo, tree access_binfo, tree functions, tree optype)
1155{
1156 tree baselink;
1157
50bc768d
NS
1158 gcc_assert (TREE_CODE (functions) == FUNCTION_DECL
1159 || TREE_CODE (functions) == TEMPLATE_DECL
1160 || TREE_CODE (functions) == TEMPLATE_ID_EXPR
1161 || TREE_CODE (functions) == OVERLOAD);
1162 gcc_assert (!optype || TYPE_P (optype));
1163 gcc_assert (TREE_TYPE (functions));
4ba126e4 1164
5dae1114
MM
1165 baselink = make_node (BASELINK);
1166 TREE_TYPE (baselink) = TREE_TYPE (functions);
4ba126e4
MM
1167 BASELINK_BINFO (baselink) = binfo;
1168 BASELINK_ACCESS_BINFO (baselink) = access_binfo;
1169 BASELINK_FUNCTIONS (baselink) = functions;
1170 BASELINK_OPTYPE (baselink) = optype;
1171
1172 return baselink;
1173}
1174
1a03d967 1175/* Look for a member named NAME in an inheritance lattice dominated by
171d2f50
NS
1176 XBASETYPE. If PROTECT is 0 or two, we do not check access. If it
1177 is 1, we enforce accessibility. If PROTECT is zero, then, for an
1178 ambiguous lookup, we return NULL. If PROTECT is 1, we issue error
1179 messages about inaccessible or ambiguous lookup. If PROTECT is 2,
1180 we return a TREE_LIST whose TREE_TYPE is error_mark_node and whose
1181 TREE_VALUEs are the list of ambiguous candidates.
1182
1183 WANT_TYPE is 1 when we should only return TYPE_DECLs.
1184
1185 If nothing can be found return NULL_TREE and do not issue an error. */
e92cc029 1186
8d08fdba 1187tree
86ac0575 1188lookup_member (tree xbasetype, tree name, int protect, bool want_type)
8d08fdba 1189{
7d4bdeed
MM
1190 tree rval, rval_binfo = NULL_TREE;
1191 tree type = NULL_TREE, basetype_path = NULL_TREE;
1192 struct lookup_field_info lfi;
8d08fdba
MS
1193
1194 /* rval_binfo is the binfo associated with the found member, note,
1195 this can be set with useful information, even when rval is not
1196 set, because it must deal with ALL members, not just non-function
1197 members. It is used for ambiguity checking and the hidden
1198 checks. Whereas rval is only set if a proper (not hidden)
1199 non-function member is found. */
1200
d8e178a0 1201 const char *errstr = 0;
8d08fdba 1202
5973c743
PC
1203 if (name == error_mark_node)
1204 return NULL_TREE;
1205
50bc768d 1206 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
de22184b 1207
95b4aca6 1208 if (TREE_CODE (xbasetype) == TREE_BINFO)
8d08fdba 1209 {
8d08fdba 1210 type = BINFO_TYPE (xbasetype);
39211cd5 1211 basetype_path = xbasetype;
8d08fdba 1212 }
6df5158a 1213 else
39211cd5 1214 {
a82f93ac
SE
1215 if (!IS_AGGR_TYPE_CODE (TREE_CODE (xbasetype)))
1216 return NULL_TREE;
238109cd 1217 type = xbasetype;
cad7e87b 1218 xbasetype = NULL_TREE;
6df5158a
NS
1219 }
1220
cad7e87b
NS
1221 type = complete_type (type);
1222 if (!basetype_path)
1223 basetype_path = TYPE_BINFO (type);
1224
1225 if (!basetype_path)
1226 return NULL_TREE;
8d08fdba 1227
8d08fdba
MS
1228#ifdef GATHER_STATISTICS
1229 n_calls_lookup_field++;
fc378698 1230#endif /* GATHER_STATISTICS */
8d08fdba 1231
fad205ff 1232 memset (&lfi, 0, sizeof (lfi));
d6479fe7 1233 lfi.type = type;
7d4bdeed 1234 lfi.name = name;
7d4bdeed 1235 lfi.want_type = want_type;
5d5a519f 1236 dfs_walk_all (basetype_path, &lookup_field_r, NULL, &lfi);
7d4bdeed
MM
1237 rval = lfi.rval;
1238 rval_binfo = lfi.rval_binfo;
1239 if (rval_binfo)
1240 type = BINFO_TYPE (rval_binfo);
1241 errstr = lfi.errstr;
1242
1243 /* If we are not interested in ambiguities, don't report them;
1244 just return NULL_TREE. */
1245 if (!protect && lfi.ambiguous)
1246 return NULL_TREE;
c8094d83
MS
1247
1248 if (protect == 2)
8f032717
MM
1249 {
1250 if (lfi.ambiguous)
aa65d1a2 1251 return lfi.ambiguous;
8f032717
MM
1252 else
1253 protect = 0;
1254 }
1255
d6479fe7
MM
1256 /* [class.access]
1257
1258 In the case of overloaded function names, access control is
eff3a276
MM
1259 applied to the function selected by overloaded resolution.
1260
1261 We cannot check here, even if RVAL is only a single non-static
1262 member function, since we do not know what the "this" pointer
1263 will be. For:
1264
1265 class A { protected: void f(); };
1266 class B : public A {
1267 void g(A *p) {
1268 f(); // OK
1269 p->f(); // Not OK.
1270 }
1271 };
1272
1273 only the first call to "f" is valid. However, if the function is
1274 static, we can check. */
1275 if (rval && protect
1276 && !really_overloaded_fn (rval)
1277 && !(TREE_CODE (rval) == FUNCTION_DECL
1278 && DECL_NONSTATIC_MEMBER_FUNCTION_P (rval)))
02022f3a 1279 perform_or_defer_access_check (basetype_path, rval, rval);
9e9ff709 1280
8251199e 1281 if (errstr && protect)
8d08fdba 1282 {
33bd39a2 1283 error (errstr, name, type);
7d4bdeed 1284 if (lfi.ambiguous)
0cbd7506 1285 print_candidates (lfi.ambiguous);
8d08fdba
MS
1286 rval = error_mark_node;
1287 }
b3709d9b 1288
c8094d83 1289 if (rval && is_overloaded_fn (rval))
4ba126e4
MM
1290 rval = build_baselink (rval_binfo, basetype_path, rval,
1291 (IDENTIFIER_TYPENAME_P (name)
1292 ? TREE_TYPE (name): NULL_TREE));
d6479fe7
MM
1293 return rval;
1294}
1295
1296/* Like lookup_member, except that if we find a function member we
1297 return NULL_TREE. */
1298
1299tree
86ac0575 1300lookup_field (tree xbasetype, tree name, int protect, bool want_type)
d6479fe7
MM
1301{
1302 tree rval = lookup_member (xbasetype, name, protect, want_type);
c8094d83 1303
c566721f
GB
1304 /* Ignore functions, but propagate the ambiguity list. */
1305 if (!error_operand_p (rval)
1306 && (rval && BASELINK_P (rval)))
d6479fe7
MM
1307 return NULL_TREE;
1308
1309 return rval;
1310}
1311
1312/* Like lookup_member, except that if we find a non-function member we
1313 return NULL_TREE. */
1314
1315tree
86ac0575 1316lookup_fnfields (tree xbasetype, tree name, int protect)
d6479fe7 1317{
86ac0575 1318 tree rval = lookup_member (xbasetype, name, protect, /*want_type=*/false);
d6479fe7 1319
c566721f
GB
1320 /* Ignore non-functions, but propagate the ambiguity list. */
1321 if (!error_operand_p (rval)
1322 && (rval && !BASELINK_P (rval)))
d6479fe7
MM
1323 return NULL_TREE;
1324
8d08fdba
MS
1325 return rval;
1326}
1327
ca90f3e1
MM
1328/* Return the index in the CLASSTYPE_METHOD_VEC for CLASS_TYPE
1329 corresponding to "operator TYPE ()", or -1 if there is no such
1330 operator. Only CLASS_TYPE itself is searched; this routine does
1331 not scan the base classes of CLASS_TYPE. */
1332
1333static int
1334lookup_conversion_operator (tree class_type, tree type)
1335{
8f2a734f 1336 int tpl_slot = -1;
ca90f3e1 1337
8f2a734f
NS
1338 if (TYPE_HAS_CONVERSION (class_type))
1339 {
1340 int i;
1341 tree fn;
d4e6fecb 1342 VEC(tree,gc) *methods = CLASSTYPE_METHOD_VEC (class_type);
c8094d83 1343
8f2a734f
NS
1344 for (i = CLASSTYPE_FIRST_CONVERSION_SLOT;
1345 VEC_iterate (tree, methods, i, fn); ++i)
1346 {
1347 /* All the conversion operators come near the beginning of
1348 the class. Therefore, if FN is not a conversion
1349 operator, there is no matching conversion operator in
1350 CLASS_TYPE. */
1351 fn = OVL_CURRENT (fn);
1352 if (!DECL_CONV_FN_P (fn))
1353 break;
c8094d83 1354
8f2a734f
NS
1355 if (TREE_CODE (fn) == TEMPLATE_DECL)
1356 /* All the templated conversion functions are on the same
1357 slot, so remember it. */
1358 tpl_slot = i;
1359 else if (same_type_p (DECL_CONV_FN_TYPE (fn), type))
1360 return i;
1361 }
1362 }
ca90f3e1 1363
8f2a734f 1364 return tpl_slot;
ca90f3e1
MM
1365}
1366
8d08fdba
MS
1367/* TYPE is a class type. Return the index of the fields within
1368 the method vector with name NAME, or -1 is no such field exists. */
e92cc029 1369
03017874 1370int
86ac0575 1371lookup_fnfields_1 (tree type, tree name)
8d08fdba 1372{
d4e6fecb 1373 VEC(tree,gc) *method_vec;
aaaa46d2 1374 tree fn;
ca90f3e1 1375 tree tmp;
aaaa46d2 1376 size_t i;
c8094d83 1377
ca90f3e1
MM
1378 if (!CLASS_TYPE_P (type))
1379 return -1;
8d08fdba 1380
508a1c9c
MM
1381 if (COMPLETE_TYPE_P (type))
1382 {
1383 if ((name == ctor_identifier
1384 || name == base_ctor_identifier
1385 || name == complete_ctor_identifier))
1386 {
1387 if (CLASSTYPE_LAZY_DEFAULT_CTOR (type))
1388 lazily_declare_fn (sfk_constructor, type);
1389 if (CLASSTYPE_LAZY_COPY_CTOR (type))
1390 lazily_declare_fn (sfk_copy_constructor, type);
1391 }
1392 else if (name == ansi_assopname(NOP_EXPR)
fb232476 1393 && CLASSTYPE_LAZY_ASSIGNMENT_OP (type))
508a1c9c 1394 lazily_declare_fn (sfk_assignment_operator, type);
9f4faeae
MM
1395 else if ((name == dtor_identifier
1396 || name == base_dtor_identifier
1397 || name == complete_dtor_identifier
1398 || name == deleting_dtor_identifier)
1399 && CLASSTYPE_LAZY_DESTRUCTOR (type))
1400 lazily_declare_fn (sfk_destructor, type);
508a1c9c 1401 }
ca90f3e1 1402
508a1c9c 1403 method_vec = CLASSTYPE_METHOD_VEC (type);
ca90f3e1
MM
1404 if (!method_vec)
1405 return -1;
1406
8d08fdba 1407#ifdef GATHER_STATISTICS
ca90f3e1 1408 n_calls_lookup_fnfields_1++;
fc378698 1409#endif /* GATHER_STATISTICS */
f90cdf34 1410
ca90f3e1
MM
1411 /* Constructors are first... */
1412 if (name == ctor_identifier)
aaaa46d2
MM
1413 {
1414 fn = CLASSTYPE_CONSTRUCTORS (type);
1415 return fn ? CLASSTYPE_CONSTRUCTOR_SLOT : -1;
1416 }
ca90f3e1
MM
1417 /* and destructors are second. */
1418 if (name == dtor_identifier)
aaaa46d2
MM
1419 {
1420 fn = CLASSTYPE_DESTRUCTORS (type);
1421 return fn ? CLASSTYPE_DESTRUCTOR_SLOT : -1;
1422 }
ca90f3e1
MM
1423 if (IDENTIFIER_TYPENAME_P (name))
1424 return lookup_conversion_operator (type, TREE_TYPE (name));
1425
1426 /* Skip the conversion operators. */
aaaa46d2 1427 for (i = CLASSTYPE_FIRST_CONVERSION_SLOT;
9ba5ff0f 1428 VEC_iterate (tree, method_vec, i, fn);
aaaa46d2
MM
1429 ++i)
1430 if (!DECL_CONV_FN_P (OVL_CURRENT (fn)))
1431 break;
ca90f3e1
MM
1432
1433 /* If the type is complete, use binary search. */
1434 if (COMPLETE_TYPE_P (type))
1435 {
aaaa46d2
MM
1436 int lo;
1437 int hi;
1438
aaaa46d2
MM
1439 lo = i;
1440 hi = VEC_length (tree, method_vec);
ca90f3e1
MM
1441 while (lo < hi)
1442 {
1443 i = (lo + hi) / 2;
f90cdf34
MT
1444
1445#ifdef GATHER_STATISTICS
ca90f3e1 1446 n_outer_fields_searched++;
f90cdf34
MT
1447#endif /* GATHER_STATISTICS */
1448
aaaa46d2
MM
1449 tmp = VEC_index (tree, method_vec, i);
1450 tmp = DECL_NAME (OVL_CURRENT (tmp));
1451 if (tmp > name)
ca90f3e1
MM
1452 hi = i;
1453 else if (tmp < name)
1454 lo = i + 1;
1455 else
1456 return i;
8d08fdba 1457 }
8d08fdba 1458 }
ca90f3e1 1459 else
9ba5ff0f 1460 for (; VEC_iterate (tree, method_vec, i, fn); ++i)
ca90f3e1
MM
1461 {
1462#ifdef GATHER_STATISTICS
1463 n_outer_fields_searched++;
1464#endif /* GATHER_STATISTICS */
aaaa46d2 1465 if (DECL_NAME (OVL_CURRENT (fn)) == name)
ca90f3e1
MM
1466 return i;
1467 }
8d08fdba 1468
d6479fe7 1469 return -1;
d23a1bb1 1470}
9e259dd1 1471
c7222c02
MM
1472/* Like lookup_fnfields_1, except that the name is extracted from
1473 FUNCTION, which is a FUNCTION_DECL or a TEMPLATE_DECL. */
1474
1475int
1476class_method_index_for_fn (tree class_type, tree function)
1477{
1478 gcc_assert (TREE_CODE (function) == FUNCTION_DECL
1479 || DECL_FUNCTION_TEMPLATE_P (function));
1480
1481 return lookup_fnfields_1 (class_type,
1482 DECL_CONSTRUCTOR_P (function) ? ctor_identifier :
1483 DECL_DESTRUCTOR_P (function) ? dtor_identifier :
1484 DECL_NAME (function));
1485}
1486
1487
a723baf1
MM
1488/* DECL is the result of a qualified name lookup. QUALIFYING_SCOPE is
1489 the class or namespace used to qualify the name. CONTEXT_CLASS is
1490 the class corresponding to the object in which DECL will be used.
1491 Return a possibly modified version of DECL that takes into account
1492 the CONTEXT_CLASS.
9e259dd1
MM
1493
1494 In particular, consider an expression like `B::m' in the context of
1495 a derived class `D'. If `B::m' has been resolved to a BASELINK,
1496 then the most derived class indicated by the BASELINK_BINFO will be
1497 `B', not `D'. This function makes that adjustment. */
1498
1499tree
c8094d83 1500adjust_result_of_qualified_name_lookup (tree decl,
a723baf1 1501 tree qualifying_scope,
9e259dd1
MM
1502 tree context_class)
1503{
0616700c 1504 if (context_class && context_class != error_mark_node
9c23e505 1505 && CLASS_TYPE_P (context_class)
0616700c 1506 && CLASS_TYPE_P (qualifying_scope)
a723baf1
MM
1507 && DERIVED_FROM_P (qualifying_scope, context_class)
1508 && BASELINK_P (decl))
9e259dd1
MM
1509 {
1510 tree base;
1511
127b8136
MM
1512 /* Look for the QUALIFYING_SCOPE as a base of the CONTEXT_CLASS.
1513 Because we do not yet know which function will be chosen by
1514 overload resolution, we cannot yet check either accessibility
1515 or ambiguity -- in either case, the choice of a static member
1516 function might make the usage valid. */
a723baf1 1517 base = lookup_base (context_class, qualifying_scope,
18e4be85 1518 ba_unique | ba_quiet, NULL);
9e259dd1
MM
1519 if (base)
1520 {
1521 BASELINK_ACCESS_BINFO (decl) = base;
c8094d83 1522 BASELINK_BINFO (decl)
9e259dd1 1523 = lookup_base (base, BINFO_TYPE (BASELINK_BINFO (decl)),
18e4be85 1524 ba_unique | ba_quiet,
9e259dd1
MM
1525 NULL);
1526 }
1527 }
1528
1529 return decl;
1530}
1531
8d08fdba 1532\f
5cf447db 1533/* Walk the class hierarchy within BINFO, in a depth-first traversal.
5d5a519f
NS
1534 PRE_FN is called in preorder, while POST_FN is called in postorder.
1535 If PRE_FN returns DFS_SKIP_BASES, child binfos will not be
1536 walked. If PRE_FN or POST_FN returns a different non-NULL value,
1537 that value is immediately returned and the walk is terminated. One
1538 of PRE_FN and POST_FN can be NULL. At each node, PRE_FN and
1539 POST_FN are passed the binfo to examine and the caller's DATA
1540 value. All paths are walked, thus virtual and morally virtual
1541 binfos can be multiply walked. */
d6479fe7 1542
bbd15aac 1543tree
5d5a519f
NS
1544dfs_walk_all (tree binfo, tree (*pre_fn) (tree, void *),
1545 tree (*post_fn) (tree, void *), void *data)
d6479fe7 1546{
5d5a519f
NS
1547 tree rval;
1548 unsigned ix;
fa743e8c 1549 tree base_binfo;
c8094d83 1550
d6479fe7 1551 /* Call the pre-order walking function. */
5d5a519f 1552 if (pre_fn)
7d4bdeed 1553 {
5d5a519f
NS
1554 rval = pre_fn (binfo, data);
1555 if (rval)
1556 {
1557 if (rval == dfs_skip_bases)
1558 goto skip_bases;
1559 return rval;
1560 }
1561 }
1562
1563 /* Find the next child binfo to walk. */
1564 for (ix = 0; BINFO_BASE_ITERATE (binfo, ix, base_binfo); ix++)
1565 {
1566 rval = dfs_walk_all (base_binfo, pre_fn, post_fn, data);
d6479fe7
MM
1567 if (rval)
1568 return rval;
8d08fdba 1569 }
8d08fdba 1570
5d5a519f
NS
1571 skip_bases:
1572 /* Call the post-order walking function. */
1573 if (post_fn)
5b94d9dd
NS
1574 {
1575 rval = post_fn (binfo, data);
1576 gcc_assert (rval != dfs_skip_bases);
1577 return rval;
1578 }
c8094d83 1579
5d5a519f
NS
1580 return NULL_TREE;
1581}
1582
1583/* Worker for dfs_walk_once. This behaves as dfs_walk_all, except
1584 that binfos are walked at most once. */
1585
1586static tree
1587dfs_walk_once_r (tree binfo, tree (*pre_fn) (tree, void *),
1588 tree (*post_fn) (tree, void *), void *data)
1589{
1590 tree rval;
1591 unsigned ix;
1592 tree base_binfo;
c8094d83 1593
5d5a519f
NS
1594 /* Call the pre-order walking function. */
1595 if (pre_fn)
d6479fe7 1596 {
5d5a519f
NS
1597 rval = pre_fn (binfo, data);
1598 if (rval)
d6479fe7 1599 {
5d5a519f
NS
1600 if (rval == dfs_skip_bases)
1601 goto skip_bases;
c8094d83 1602
5d5a519f
NS
1603 return rval;
1604 }
1605 }
1606
1607 /* Find the next child binfo to walk. */
1608 for (ix = 0; BINFO_BASE_ITERATE (binfo, ix, base_binfo); ix++)
1609 {
1610 if (BINFO_VIRTUAL_P (base_binfo))
1611 {
1612 if (BINFO_MARKED (base_binfo))
fa743e8c 1613 continue;
5d5a519f 1614 BINFO_MARKED (base_binfo) = 1;
d6479fe7 1615 }
c8094d83 1616
5d5a519f 1617 rval = dfs_walk_once_r (base_binfo, pre_fn, post_fn, data);
fa743e8c
NS
1618 if (rval)
1619 return rval;
d6479fe7 1620 }
c8094d83 1621
5d5a519f 1622 skip_bases:
d6479fe7 1623 /* Call the post-order walking function. */
5d5a519f 1624 if (post_fn)
5b94d9dd
NS
1625 {
1626 rval = post_fn (binfo, data);
1627 gcc_assert (rval != dfs_skip_bases);
1628 return rval;
1629 }
c8094d83 1630
5d5a519f
NS
1631 return NULL_TREE;
1632}
1633
1634/* Worker for dfs_walk_once. Recursively unmark the virtual base binfos of
1635 BINFO. */
c8094d83 1636
5d5a519f
NS
1637static void
1638dfs_unmark_r (tree binfo)
1639{
1640 unsigned ix;
1641 tree base_binfo;
c8094d83 1642
5d5a519f
NS
1643 /* Process the basetypes. */
1644 for (ix = 0; BINFO_BASE_ITERATE (binfo, ix, base_binfo); ix++)
1645 {
1646 if (BINFO_VIRTUAL_P (base_binfo))
1647 {
1648 if (!BINFO_MARKED (base_binfo))
1649 continue;
1650 BINFO_MARKED (base_binfo) = 0;
1651 }
1652 /* Only walk, if it can contain more virtual bases. */
1653 if (CLASSTYPE_VBASECLASSES (BINFO_TYPE (base_binfo)))
1654 dfs_unmark_r (base_binfo);
1655 }
8d08fdba
MS
1656}
1657
5d5a519f
NS
1658/* Like dfs_walk_all, except that binfos are not multiply walked. For
1659 non-diamond shaped hierarchies this is the same as dfs_walk_all.
1660 For diamond shaped hierarchies we must mark the virtual bases, to
1661 avoid multiple walks. */
d6479fe7
MM
1662
1663tree
5d5a519f
NS
1664dfs_walk_once (tree binfo, tree (*pre_fn) (tree, void *),
1665 tree (*post_fn) (tree, void *), void *data)
d6479fe7 1666{
12a669d1 1667 static int active = 0; /* We must not be called recursively. */
5d5a519f
NS
1668 tree rval;
1669
1670 gcc_assert (pre_fn || post_fn);
12a669d1
NS
1671 gcc_assert (!active);
1672 active++;
c8094d83 1673
5d5a519f
NS
1674 if (!CLASSTYPE_DIAMOND_SHAPED_P (BINFO_TYPE (binfo)))
1675 /* We are not diamond shaped, and therefore cannot encounter the
1676 same binfo twice. */
1677 rval = dfs_walk_all (binfo, pre_fn, post_fn, data);
1678 else
1679 {
1680 rval = dfs_walk_once_r (binfo, pre_fn, post_fn, data);
1681 if (!BINFO_INHERITANCE_CHAIN (binfo))
1682 {
ee81147e 1683 /* We are at the top of the hierarchy, and can use the
0cbd7506
MS
1684 CLASSTYPE_VBASECLASSES list for unmarking the virtual
1685 bases. */
d4e6fecb 1686 VEC(tree,gc) *vbases;
5d5a519f
NS
1687 unsigned ix;
1688 tree base_binfo;
c8094d83 1689
5d5a519f
NS
1690 for (vbases = CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo)), ix = 0;
1691 VEC_iterate (tree, vbases, ix, base_binfo); ix++)
1692 BINFO_MARKED (base_binfo) = 0;
1693 }
1694 else
1695 dfs_unmark_r (binfo);
1696 }
12a669d1
NS
1697
1698 active--;
c8094d83 1699
5d5a519f 1700 return rval;
d6479fe7
MM
1701}
1702
6936e493
NS
1703/* Worker function for dfs_walk_once_accessible. Behaves like
1704 dfs_walk_once_r, except (a) FRIENDS_P is true if special
1705 access given by the current context should be considered, (b) ONCE
1706 indicates whether bases should be marked during traversal. */
1707
1708static tree
1709dfs_walk_once_accessible_r (tree binfo, bool friends_p, bool once,
1710 tree (*pre_fn) (tree, void *),
1711 tree (*post_fn) (tree, void *), void *data)
1712{
1713 tree rval = NULL_TREE;
1714 unsigned ix;
1715 tree base_binfo;
1716
1717 /* Call the pre-order walking function. */
1718 if (pre_fn)
1719 {
1720 rval = pre_fn (binfo, data);
1721 if (rval)
1722 {
1723 if (rval == dfs_skip_bases)
1724 goto skip_bases;
c8094d83 1725
6936e493
NS
1726 return rval;
1727 }
1728 }
1729
1730 /* Find the next child binfo to walk. */
1731 for (ix = 0; BINFO_BASE_ITERATE (binfo, ix, base_binfo); ix++)
1732 {
1733 bool mark = once && BINFO_VIRTUAL_P (base_binfo);
1734
1735 if (mark && BINFO_MARKED (base_binfo))
1736 continue;
c8094d83 1737
6936e493 1738 /* If the base is inherited via private or protected
0cbd7506
MS
1739 inheritance, then we can't see it, unless we are a friend of
1740 the current binfo. */
a5201a91
MM
1741 if (BINFO_BASE_ACCESS (binfo, ix) != access_public_node)
1742 {
1743 tree scope;
1744 if (!friends_p)
1745 continue;
1746 scope = current_scope ();
c8094d83 1747 if (!scope
a5201a91
MM
1748 || TREE_CODE (scope) == NAMESPACE_DECL
1749 || !is_friend (BINFO_TYPE (binfo), scope))
1750 continue;
1751 }
6936e493
NS
1752
1753 if (mark)
1754 BINFO_MARKED (base_binfo) = 1;
1755
1756 rval = dfs_walk_once_accessible_r (base_binfo, friends_p, once,
1757 pre_fn, post_fn, data);
1758 if (rval)
1759 return rval;
1760 }
c8094d83 1761
6936e493
NS
1762 skip_bases:
1763 /* Call the post-order walking function. */
1764 if (post_fn)
5b94d9dd
NS
1765 {
1766 rval = post_fn (binfo, data);
1767 gcc_assert (rval != dfs_skip_bases);
1768 return rval;
1769 }
c8094d83 1770
6936e493
NS
1771 return NULL_TREE;
1772}
1773
1774/* Like dfs_walk_once except that only accessible bases are walked.
1775 FRIENDS_P indicates whether friendship of the local context
1776 should be considered when determining accessibility. */
1777
1778static tree
1779dfs_walk_once_accessible (tree binfo, bool friends_p,
1780 tree (*pre_fn) (tree, void *),
1781 tree (*post_fn) (tree, void *), void *data)
1782{
1783 bool diamond_shaped = CLASSTYPE_DIAMOND_SHAPED_P (BINFO_TYPE (binfo));
1784 tree rval = dfs_walk_once_accessible_r (binfo, friends_p, diamond_shaped,
1785 pre_fn, post_fn, data);
c8094d83 1786
6936e493
NS
1787 if (diamond_shaped)
1788 {
1789 if (!BINFO_INHERITANCE_CHAIN (binfo))
1790 {
d740dbe7 1791 /* We are at the top of the hierarchy, and can use the
0cbd7506
MS
1792 CLASSTYPE_VBASECLASSES list for unmarking the virtual
1793 bases. */
d4e6fecb 1794 VEC(tree,gc) *vbases;
6936e493
NS
1795 unsigned ix;
1796 tree base_binfo;
c8094d83 1797
6936e493
NS
1798 for (vbases = CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo)), ix = 0;
1799 VEC_iterate (tree, vbases, ix, base_binfo); ix++)
1800 BINFO_MARKED (base_binfo) = 0;
1801 }
1802 else
1803 dfs_unmark_r (binfo);
1804 }
1805 return rval;
1806}
1807
4cc1d462
NS
1808/* Check that virtual overrider OVERRIDER is acceptable for base function
1809 BASEFN. Issue diagnostic, and return zero, if unacceptable. */
1810
af746697 1811static int
86ac0575 1812check_final_overrider (tree overrider, tree basefn)
4cc1d462
NS
1813{
1814 tree over_type = TREE_TYPE (overrider);
1815 tree base_type = TREE_TYPE (basefn);
1816 tree over_return = TREE_TYPE (over_type);
1817 tree base_return = TREE_TYPE (base_type);
1818 tree over_throw = TYPE_RAISES_EXCEPTIONS (over_type);
1819 tree base_throw = TYPE_RAISES_EXCEPTIONS (base_type);
4977bab6 1820 int fail = 0;
58ec3cc5
MM
1821
1822 if (DECL_INVALID_OVERRIDER_P (overrider))
1823 return 0;
1824
4cc1d462
NS
1825 if (same_type_p (base_return, over_return))
1826 /* OK */;
4977bab6
ZW
1827 else if ((CLASS_TYPE_P (over_return) && CLASS_TYPE_P (base_return))
1828 || (TREE_CODE (base_return) == TREE_CODE (over_return)
1829 && POINTER_TYPE_P (base_return)))
4cc1d462 1830 {
9bcb9aae 1831 /* Potentially covariant. */
4977bab6 1832 unsigned base_quals, over_quals;
c8094d83 1833
4977bab6
ZW
1834 fail = !POINTER_TYPE_P (base_return);
1835 if (!fail)
1836 {
1837 fail = cp_type_quals (base_return) != cp_type_quals (over_return);
c8094d83 1838
4977bab6
ZW
1839 base_return = TREE_TYPE (base_return);
1840 over_return = TREE_TYPE (over_return);
1841 }
1842 base_quals = cp_type_quals (base_return);
1843 over_quals = cp_type_quals (over_return);
1844
1845 if ((base_quals & over_quals) != over_quals)
1846 fail = 1;
c8094d83 1847
4977bab6
ZW
1848 if (CLASS_TYPE_P (base_return) && CLASS_TYPE_P (over_return))
1849 {
1850 tree binfo = lookup_base (over_return, base_return,
1851 ba_check | ba_quiet, NULL);
4cc1d462 1852
4977bab6
ZW
1853 if (!binfo)
1854 fail = 1;
1855 }
1856 else if (!pedantic
1857 && can_convert (TREE_TYPE (base_type), TREE_TYPE (over_type)))
1858 /* GNU extension, allow trivial pointer conversions such as
1859 converting to void *, or qualification conversion. */
4cc1d462 1860 {
4977bab6 1861 /* can_convert will permit user defined conversion from a
9bcb9aae 1862 (reference to) class type. We must reject them. */
ee76b931 1863 over_return = non_reference (TREE_TYPE (over_type));
4977bab6
ZW
1864 if (CLASS_TYPE_P (over_return))
1865 fail = 2;
ae209f28
NS
1866 else
1867 {
dee15844 1868 warning (0, "deprecated covariant return type for %q+#D",
ae209f28 1869 overrider);
dee15844 1870 warning (0, " overriding %q+#D", basefn);
ae209f28 1871 }
4cc1d462 1872 }
4977bab6
ZW
1873 else
1874 fail = 2;
4cc1d462 1875 }
4977bab6
ZW
1876 else
1877 fail = 2;
1878 if (!fail)
1879 /* OK */;
4977bab6 1880 else
4cc1d462 1881 {
4977bab6
ZW
1882 if (fail == 1)
1883 {
dee15844
JM
1884 error ("invalid covariant return type for %q+#D", overrider);
1885 error (" overriding %q+#D", basefn);
4977bab6
ZW
1886 }
1887 else
1888 {
dee15844
JM
1889 error ("conflicting return type specified for %q+#D", overrider);
1890 error (" overriding %q+#D", basefn);
4977bab6 1891 }
58ec3cc5 1892 DECL_INVALID_OVERRIDER_P (overrider) = 1;
4cc1d462
NS
1893 return 0;
1894 }
c8094d83 1895
8152c320 1896 /* Check throw specifier is at least as strict. */
03378143 1897 if (!comp_except_specs (base_throw, over_throw, 0))
4cc1d462 1898 {
dee15844
JM
1899 error ("looser throw specifier for %q+#F", overrider);
1900 error (" overriding %q+#F", basefn);
58ec3cc5 1901 DECL_INVALID_OVERRIDER_P (overrider) = 1;
4cc1d462
NS
1902 return 0;
1903 }
c8094d83 1904
18ff3013
DS
1905 /* Check for conflicting type attributes. */
1906 if (!targetm.comp_type_attributes (over_type, base_type))
1907 {
1908 error ("conflicting type attributes specified for %q+#D", overrider);
1909 error (" overriding %q+#D", basefn);
1910 DECL_INVALID_OVERRIDER_P (overrider) = 1;
1911 return 0;
1912 }
1913
4cc1d462
NS
1914 return 1;
1915}
1916
cbb40945
NS
1917/* Given a class TYPE, and a function decl FNDECL, look for
1918 virtual functions in TYPE's hierarchy which FNDECL overrides.
1919 We do not look in TYPE itself, only its bases.
c8094d83 1920
838dfd8a 1921 Returns nonzero, if we find any. Set FNDECL's DECL_VIRTUAL_P, if we
cbb40945 1922 find that it overrides anything.
c8094d83 1923
cbb40945
NS
1924 We check that every function which is overridden, is correctly
1925 overridden. */
e92cc029 1926
cbb40945 1927int
86ac0575 1928look_for_overrides (tree type, tree fndecl)
8d08fdba 1929{
cbb40945 1930 tree binfo = TYPE_BINFO (type);
fa743e8c 1931 tree base_binfo;
cbb40945
NS
1932 int ix;
1933 int found = 0;
8d08fdba 1934
fa743e8c 1935 for (ix = 0; BINFO_BASE_ITERATE (binfo, ix, base_binfo); ix++)
cbb40945 1936 {
fa743e8c 1937 tree basetype = BINFO_TYPE (base_binfo);
c8094d83 1938
cbb40945 1939 if (TYPE_POLYMORPHIC_P (basetype))
0cbd7506 1940 found += look_for_overrides_r (basetype, fndecl);
cbb40945
NS
1941 }
1942 return found;
1943}
5e795528 1944
548502d3
MM
1945/* Look in TYPE for virtual functions with the same signature as
1946 FNDECL. */
5e795528 1947
d0cd8b44 1948tree
86ac0575 1949look_for_overrides_here (tree type, tree fndecl)
cbb40945
NS
1950{
1951 int ix;
d0cd8b44 1952
508a1c9c
MM
1953 /* If there are no methods in TYPE (meaning that only implicitly
1954 declared methods will ever be provided for TYPE), then there are
1955 no virtual functions. */
1956 if (!CLASSTYPE_METHOD_VEC (type))
1957 return NULL_TREE;
1958
d0cd8b44 1959 if (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (fndecl))
cbb40945 1960 ix = CLASSTYPE_DESTRUCTOR_SLOT;
8d08fdba 1961 else
3c505507 1962 ix = lookup_fnfields_1 (type, DECL_NAME (fndecl));
cbb40945 1963 if (ix >= 0)
8d08fdba 1964 {
aaaa46d2 1965 tree fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (type), ix);
c8094d83 1966
cbb40945 1967 for (; fns; fns = OVL_NEXT (fns))
0cbd7506
MS
1968 {
1969 tree fn = OVL_CURRENT (fns);
d0cd8b44 1970
0cbd7506
MS
1971 if (!DECL_VIRTUAL_P (fn))
1972 /* Not a virtual. */;
1973 else if (DECL_CONTEXT (fn) != type)
1974 /* Introduced with a using declaration. */;
d0cd8b44 1975 else if (DECL_STATIC_FUNCTION_P (fndecl))
8d08fdba 1976 {
d0cd8b44
JM
1977 tree btypes = TYPE_ARG_TYPES (TREE_TYPE (fn));
1978 tree dtypes = TYPE_ARG_TYPES (TREE_TYPE (fndecl));
0cbd7506 1979 if (compparms (TREE_CHAIN (btypes), dtypes))
d0cd8b44 1980 return fn;
0cbd7506
MS
1981 }
1982 else if (same_signature_p (fndecl, fn))
d0cd8b44
JM
1983 return fn;
1984 }
1985 }
1986 return NULL_TREE;
1987}
e0fff4b3 1988
d0cd8b44 1989/* Look in TYPE for virtual functions overridden by FNDECL. Check both
c6002625 1990 TYPE itself and its bases. */
d0cd8b44
JM
1991
1992static int
86ac0575 1993look_for_overrides_r (tree type, tree fndecl)
d0cd8b44
JM
1994{
1995 tree fn = look_for_overrides_here (type, fndecl);
1996 if (fn)
1997 {
1998 if (DECL_STATIC_FUNCTION_P (fndecl))
1999 {
2000 /* A static member function cannot match an inherited
2001 virtual member function. */
dee15844
JM
2002 error ("%q+#D cannot be declared", fndecl);
2003 error (" since %q+#D declared in base class", fn);
d0cd8b44
JM
2004 }
2005 else
2006 {
2007 /* It's definitely virtual, even if not explicitly set. */
2008 DECL_VIRTUAL_P (fndecl) = 1;
2009 check_final_overrider (fndecl, fn);
8d08fdba 2010 }
d0cd8b44 2011 return 1;
8d08fdba 2012 }
d0cd8b44 2013
cbb40945
NS
2014 /* We failed to find one declared in this class. Look in its bases. */
2015 return look_for_overrides (type, fndecl);
8d08fdba
MS
2016}
2017
99a6c6f4
MM
2018/* Called via dfs_walk from dfs_get_pure_virtuals. */
2019
2020static tree
86ac0575 2021dfs_get_pure_virtuals (tree binfo, void *data)
99a6c6f4 2022{
174eceea
MM
2023 tree type = (tree) data;
2024
99a6c6f4
MM
2025 /* We're not interested in primary base classes; the derived class
2026 of which they are a primary base will contain the information we
2027 need. */
9965d119 2028 if (!BINFO_PRIMARY_P (binfo))
8926095f 2029 {
07b7a812 2030 tree virtuals;
c8094d83 2031
da3d4dfa 2032 for (virtuals = BINFO_VIRTUALS (binfo);
99a6c6f4
MM
2033 virtuals;
2034 virtuals = TREE_CHAIN (virtuals))
31f8e4f3 2035 if (DECL_PURE_VIRTUAL_P (BV_FN (virtuals)))
d4e6fecb 2036 VEC_safe_push (tree, gc, CLASSTYPE_PURE_VIRTUALS (type),
585b44d3 2037 BV_FN (virtuals));
99a6c6f4 2038 }
8d08fdba 2039
99a6c6f4 2040 return NULL_TREE;
8926095f
MS
2041}
2042
fee7654e 2043/* Set CLASSTYPE_PURE_VIRTUALS for TYPE. */
e92cc029 2044
fee7654e 2045void
86ac0575 2046get_pure_virtuals (tree type)
8926095f 2047{
99a6c6f4
MM
2048 /* Clear the CLASSTYPE_PURE_VIRTUALS list; whatever is already there
2049 is going to be overridden. */
585b44d3 2050 CLASSTYPE_PURE_VIRTUALS (type) = NULL;
99a6c6f4
MM
2051 /* Now, run through all the bases which are not primary bases, and
2052 collect the pure virtual functions. We look at the vtable in
2053 each class to determine what pure virtual functions are present.
2054 (A primary base is not interesting because the derived class of
2055 which it is a primary base will contain vtable entries for the
2056 pure virtuals in the base class. */
5d5a519f 2057 dfs_walk_once (TYPE_BINFO (type), NULL, dfs_get_pure_virtuals, type);
8d08fdba 2058}
8d08fdba 2059\f
ae673f14
JM
2060/* Debug info for C++ classes can get very large; try to avoid
2061 emitting it everywhere.
2062
50e159f6
JM
2063 Note that this optimization wins even when the target supports
2064 BINCL (if only slightly), and reduces the amount of work for the
2065 linker. */
ae673f14
JM
2066
2067void
86ac0575 2068maybe_suppress_debug_info (tree t)
ae673f14 2069{
f8ca7e49 2070 if (write_symbols == NO_DEBUG)
ae673f14
JM
2071 return;
2072
50e159f6
JM
2073 /* We might have set this earlier in cp_finish_decl. */
2074 TYPE_DECL_SUPPRESS_DEBUG (TYPE_MAIN_DECL (t)) = 0;
2075
e713adf6
CD
2076 /* Always emit the information for each class every time. */
2077 if (flag_emit_class_debug_always)
2078 return;
2079
ae673f14
JM
2080 /* If we already know how we're handling this class, handle debug info
2081 the same way. */
3ae18eaf
JM
2082 if (CLASSTYPE_INTERFACE_KNOWN (t))
2083 {
2084 if (CLASSTYPE_INTERFACE_ONLY (t))
2085 TYPE_DECL_SUPPRESS_DEBUG (TYPE_MAIN_DECL (t)) = 1;
2086 /* else don't set it. */
2087 }
bbd15aac
MM
2088 /* If the class has a vtable, write out the debug info along with
2089 the vtable. */
2090 else if (TYPE_CONTAINS_VPTR_P (t))
ae673f14
JM
2091 TYPE_DECL_SUPPRESS_DEBUG (TYPE_MAIN_DECL (t)) = 1;
2092
2093 /* Otherwise, just emit the debug info normally. */
2094}
2095
6db20143
JM
2096/* Note that we want debugging information for a base class of a class
2097 whose vtable is being emitted. Normally, this would happen because
2098 calling the constructor for a derived class implies calling the
2099 constructors for all bases, which involve initializing the
2100 appropriate vptr with the vtable for the base class; but in the
2101 presence of optimization, this initialization may be optimized
2102 away, so we tell finish_vtable_vardecl that we want the debugging
2103 information anyway. */
2104
2105static tree
86ac0575 2106dfs_debug_mark (tree binfo, void *data ATTRIBUTE_UNUSED)
6db20143
JM
2107{
2108 tree t = BINFO_TYPE (binfo);
2109
5d5a519f
NS
2110 if (CLASSTYPE_DEBUG_REQUESTED (t))
2111 return dfs_skip_bases;
2112
6db20143
JM
2113 CLASSTYPE_DEBUG_REQUESTED (t) = 1;
2114
2115 return NULL_TREE;
2116}
2117
6db20143
JM
2118/* Write out the debugging information for TYPE, whose vtable is being
2119 emitted. Also walk through our bases and note that we want to
2120 write out information for them. This avoids the problem of not
2121 writing any debug info for intermediate basetypes whose
2122 constructors, and thus the references to their vtables, and thus
2123 the vtables themselves, were optimized away. */
8d08fdba
MS
2124
2125void
86ac0575 2126note_debug_info_needed (tree type)
8d08fdba 2127{
15f1a795
JM
2128 if (TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (type)))
2129 {
2130 TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (type)) = 0;
2131 rest_of_type_compilation (type, toplevel_bindings_p ());
2132 }
d2e5ee5c 2133
5d5a519f 2134 dfs_walk_all (TYPE_BINFO (type), dfs_debug_mark, NULL, 0);
8d08fdba
MS
2135}
2136\f
8d08fdba 2137void
edaf3e03 2138print_search_statistics (void)
8d08fdba
MS
2139{
2140#ifdef GATHER_STATISTICS
8d08fdba
MS
2141 fprintf (stderr, "%d fields searched in %d[%d] calls to lookup_field[_1]\n",
2142 n_fields_searched, n_calls_lookup_field, n_calls_lookup_field_1);
2143 fprintf (stderr, "%d fnfields searched in %d calls to lookup_fnfields\n",
2144 n_outer_fields_searched, n_calls_lookup_fnfields);
2145 fprintf (stderr, "%d calls to get_base_type\n", n_calls_get_base_type);
fc378698 2146#else /* GATHER_STATISTICS */
8d08fdba 2147 fprintf (stderr, "no search statistics\n");
fc378698 2148#endif /* GATHER_STATISTICS */
8d08fdba
MS
2149}
2150
8d08fdba 2151void
edaf3e03 2152reinit_search_statistics (void)
8d08fdba 2153{
5566b478 2154#ifdef GATHER_STATISTICS
8d08fdba
MS
2155 n_fields_searched = 0;
2156 n_calls_lookup_field = 0, n_calls_lookup_field_1 = 0;
2157 n_calls_lookup_fnfields = 0, n_calls_lookup_fnfields_1 = 0;
2158 n_calls_get_base_type = 0;
2159 n_outer_fields_searched = 0;
2160 n_contexts_saved = 0;
fc378698 2161#endif /* GATHER_STATISTICS */
8d08fdba 2162}
e1cd6e56 2163
8f2a734f 2164/* Helper for lookup_conversions_r. TO_TYPE is the type converted to
9c763d19
KH
2165 by a conversion op in base BINFO. VIRTUAL_DEPTH is nonzero if
2166 BINFO is morally virtual, and VIRTUALNESS is nonzero if virtual
8f2a734f
NS
2167 bases have been encountered already in the tree walk. PARENT_CONVS
2168 is the list of lists of conversion functions that could hide CONV
2169 and OTHER_CONVS is the list of lists of conversion functions that
2170 could hide or be hidden by CONV, should virtualness be involved in
2171 the hierarchy. Merely checking the conversion op's name is not
2172 enough because two conversion operators to the same type can have
9c763d19 2173 different names. Return nonzero if we are visible. */
8f2a734f
NS
2174
2175static int
2176check_hidden_convs (tree binfo, int virtual_depth, int virtualness,
2177 tree to_type, tree parent_convs, tree other_convs)
2178{
2179 tree level, probe;
2180
2181 /* See if we are hidden by a parent conversion. */
2182 for (level = parent_convs; level; level = TREE_CHAIN (level))
2183 for (probe = TREE_VALUE (level); probe; probe = TREE_CHAIN (probe))
2184 if (same_type_p (to_type, TREE_TYPE (probe)))
2185 return 0;
2186
2187 if (virtual_depth || virtualness)
2188 {
2189 /* In a virtual hierarchy, we could be hidden, or could hide a
0cbd7506 2190 conversion function on the other_convs list. */
8f2a734f
NS
2191 for (level = other_convs; level; level = TREE_CHAIN (level))
2192 {
2193 int we_hide_them;
2194 int they_hide_us;
2195 tree *prev, other;
c8094d83 2196
8f2a734f 2197 if (!(virtual_depth || TREE_STATIC (level)))
03fd3f84 2198 /* Neither is morally virtual, so cannot hide each other. */
8f2a734f 2199 continue;
c8094d83 2200
8f2a734f
NS
2201 if (!TREE_VALUE (level))
2202 /* They evaporated away already. */
2203 continue;
2204
2205 they_hide_us = (virtual_depth
2206 && original_binfo (binfo, TREE_PURPOSE (level)));
2207 we_hide_them = (!they_hide_us && TREE_STATIC (level)
2208 && original_binfo (TREE_PURPOSE (level), binfo));
2209
2210 if (!(we_hide_them || they_hide_us))
2211 /* Neither is within the other, so no hiding can occur. */
2212 continue;
c8094d83 2213
8f2a734f
NS
2214 for (prev = &TREE_VALUE (level), other = *prev; other;)
2215 {
2216 if (same_type_p (to_type, TREE_TYPE (other)))
2217 {
2218 if (they_hide_us)
03fd3f84 2219 /* We are hidden. */
8f2a734f
NS
2220 return 0;
2221
2222 if (we_hide_them)
2223 {
2224 /* We hide the other one. */
2225 other = TREE_CHAIN (other);
2226 *prev = other;
2227 continue;
2228 }
2229 }
2230 prev = &TREE_CHAIN (other);
2231 other = *prev;
2232 }
2233 }
2234 }
2235 return 1;
2236}
2237
2238/* Helper for lookup_conversions_r. PARENT_CONVS is a list of lists
2239 of conversion functions, the first slot will be for the current
2240 binfo, if MY_CONVS is non-NULL. CHILD_CONVS is the list of lists
77880ae4
KH
2241 of conversion functions from children of the current binfo,
2242 concatenated with conversions from elsewhere in the hierarchy --
8f2a734f
NS
2243 that list begins with OTHER_CONVS. Return a single list of lists
2244 containing only conversions from the current binfo and its
2245 children. */
2246
72c4a2a6 2247static tree
8f2a734f
NS
2248split_conversions (tree my_convs, tree parent_convs,
2249 tree child_convs, tree other_convs)
e1cd6e56 2250{
8f2a734f
NS
2251 tree t;
2252 tree prev;
c8094d83 2253
8f2a734f
NS
2254 /* Remove the original other_convs portion from child_convs. */
2255 for (prev = NULL, t = child_convs;
2256 t != other_convs; prev = t, t = TREE_CHAIN (t))
2257 continue;
c8094d83 2258
8f2a734f
NS
2259 if (prev)
2260 TREE_CHAIN (prev) = NULL_TREE;
2261 else
2262 child_convs = NULL_TREE;
72b7eeff 2263
8f2a734f
NS
2264 /* Attach the child convs to any we had at this level. */
2265 if (my_convs)
2266 {
2267 my_convs = parent_convs;
2268 TREE_CHAIN (my_convs) = child_convs;
2269 }
2270 else
2271 my_convs = child_convs;
c8094d83 2272
8f2a734f
NS
2273 return my_convs;
2274}
2275
2276/* Worker for lookup_conversions. Lookup conversion functions in
9c763d19
KH
2277 BINFO and its children. VIRTUAL_DEPTH is nonzero, if BINFO is in
2278 a morally virtual base, and VIRTUALNESS is nonzero, if we've
8f2a734f
NS
2279 encountered virtual bases already in the tree walk. PARENT_CONVS &
2280 PARENT_TPL_CONVS are lists of list of conversions within parent
2281 binfos. OTHER_CONVS and OTHER_TPL_CONVS are conversions found
2282 elsewhere in the tree. Return the conversions found within this
9c763d19 2283 portion of the graph in CONVS and TPL_CONVS. Return nonzero is we
8f2a734f
NS
2284 encountered virtualness. We keep template and non-template
2285 conversions separate, to avoid unnecessary type comparisons.
2286
2287 The located conversion functions are held in lists of lists. The
2288 TREE_VALUE of the outer list is the list of conversion functions
2289 found in a particular binfo. The TREE_PURPOSE of both the outer
2290 and inner lists is the binfo at which those conversions were
2291 found. TREE_STATIC is set for those lists within of morally
2292 virtual binfos. The TREE_VALUE of the inner list is the conversion
2293 function or overload itself. The TREE_TYPE of each inner list node
2294 is the converted-to type. */
2295
2296static int
2297lookup_conversions_r (tree binfo,
2298 int virtual_depth, int virtualness,
2299 tree parent_convs, tree parent_tpl_convs,
2300 tree other_convs, tree other_tpl_convs,
2301 tree *convs, tree *tpl_convs)
2302{
2303 int my_virtualness = 0;
2304 tree my_convs = NULL_TREE;
2305 tree my_tpl_convs = NULL_TREE;
2306 tree child_convs = NULL_TREE;
2307 tree child_tpl_convs = NULL_TREE;
2308 unsigned i;
2309 tree base_binfo;
d4e6fecb 2310 VEC(tree,gc) *method_vec = CLASSTYPE_METHOD_VEC (BINFO_TYPE (binfo));
8f2a734f 2311 tree conv;
a7a64a77 2312
8f2a734f
NS
2313 /* If we have no conversion operators, then don't look. */
2314 if (!TYPE_HAS_CONVERSION (BINFO_TYPE (binfo)))
2315 {
2316 *convs = *tpl_convs = NULL_TREE;
c8094d83 2317
8f2a734f
NS
2318 return 0;
2319 }
c8094d83 2320
8f2a734f
NS
2321 if (BINFO_VIRTUAL_P (binfo))
2322 virtual_depth++;
c8094d83 2323
8f2a734f 2324 /* First, locate the unhidden ones at this level. */
c8094d83 2325 for (i = CLASSTYPE_FIRST_CONVERSION_SLOT;
8f2a734f 2326 VEC_iterate (tree, method_vec, i, conv);
aaaa46d2 2327 ++i)
72b7eeff 2328 {
8f2a734f 2329 tree cur = OVL_CURRENT (conv);
61a127b3 2330
8f2a734f 2331 if (!DECL_CONV_FN_P (cur))
72b7eeff 2332 break;
72c4a2a6 2333
8f2a734f 2334 if (TREE_CODE (cur) == TEMPLATE_DECL)
72c4a2a6 2335 {
8f2a734f
NS
2336 /* Only template conversions can be overloaded, and we must
2337 flatten them out and check each one individually. */
2338 tree tpls;
20d65560 2339
8f2a734f 2340 for (tpls = conv; tpls; tpls = OVL_NEXT (tpls))
20d65560 2341 {
8f2a734f
NS
2342 tree tpl = OVL_CURRENT (tpls);
2343 tree type = DECL_CONV_FN_TYPE (tpl);
c8094d83 2344
8f2a734f
NS
2345 if (check_hidden_convs (binfo, virtual_depth, virtualness,
2346 type, parent_tpl_convs, other_tpl_convs))
2347 {
2348 my_tpl_convs = tree_cons (binfo, tpl, my_tpl_convs);
2349 TREE_TYPE (my_tpl_convs) = type;
2350 if (virtual_depth)
2351 {
2352 TREE_STATIC (my_tpl_convs) = 1;
2353 my_virtualness = 1;
2354 }
2355 }
20d65560 2356 }
8f2a734f
NS
2357 }
2358 else
2359 {
2360 tree name = DECL_NAME (cur);
2361
2362 if (!IDENTIFIER_MARKED (name))
20d65560 2363 {
8f2a734f 2364 tree type = DECL_CONV_FN_TYPE (cur);
c8094d83 2365
8f2a734f
NS
2366 if (check_hidden_convs (binfo, virtual_depth, virtualness,
2367 type, parent_convs, other_convs))
2368 {
2369 my_convs = tree_cons (binfo, conv, my_convs);
2370 TREE_TYPE (my_convs) = type;
2371 if (virtual_depth)
2372 {
2373 TREE_STATIC (my_convs) = 1;
2374 my_virtualness = 1;
2375 }
2376 IDENTIFIER_MARKED (name) = 1;
2377 }
20d65560 2378 }
72c4a2a6 2379 }
72b7eeff 2380 }
8f2a734f
NS
2381
2382 if (my_convs)
2383 {
2384 parent_convs = tree_cons (binfo, my_convs, parent_convs);
2385 if (virtual_depth)
2386 TREE_STATIC (parent_convs) = 1;
2387 }
c8094d83 2388
8f2a734f
NS
2389 if (my_tpl_convs)
2390 {
2391 parent_tpl_convs = tree_cons (binfo, my_tpl_convs, parent_tpl_convs);
2392 if (virtual_depth)
db2acc36 2393 TREE_STATIC (parent_tpl_convs) = 1;
8f2a734f
NS
2394 }
2395
2396 child_convs = other_convs;
2397 child_tpl_convs = other_tpl_convs;
c8094d83 2398
8f2a734f
NS
2399 /* Now iterate over each base, looking for more conversions. */
2400 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
2401 {
2402 tree base_convs, base_tpl_convs;
2403 unsigned base_virtualness;
2404
2405 base_virtualness = lookup_conversions_r (base_binfo,
2406 virtual_depth, virtualness,
2407 parent_convs, parent_tpl_convs,
2408 child_convs, child_tpl_convs,
2409 &base_convs, &base_tpl_convs);
2410 if (base_virtualness)
2411 my_virtualness = virtualness = 1;
2412 child_convs = chainon (base_convs, child_convs);
2413 child_tpl_convs = chainon (base_tpl_convs, child_tpl_convs);
2414 }
2415
2416 /* Unmark the conversions found at this level */
2417 for (conv = my_convs; conv; conv = TREE_CHAIN (conv))
2418 IDENTIFIER_MARKED (DECL_NAME (OVL_CURRENT (TREE_VALUE (conv)))) = 0;
2419
2420 *convs = split_conversions (my_convs, parent_convs,
2421 child_convs, other_convs);
2422 *tpl_convs = split_conversions (my_tpl_convs, parent_tpl_convs,
2423 child_tpl_convs, other_tpl_convs);
c8094d83 2424
8f2a734f 2425 return my_virtualness;
e1cd6e56
MS
2426}
2427
27b8d0cd
MM
2428/* Return a TREE_LIST containing all the non-hidden user-defined
2429 conversion functions for TYPE (and its base-classes). The
8f2a734f
NS
2430 TREE_VALUE of each node is the FUNCTION_DECL of the conversion
2431 function. The TREE_PURPOSE is the BINFO from which the conversion
2432 functions in this node were selected. This function is effectively
2433 performing a set of member lookups as lookup_fnfield does, but
2434 using the type being converted to as the unique key, rather than the
2435 field name. */
27b8d0cd 2436
e1cd6e56 2437tree
86ac0575 2438lookup_conversions (tree type)
e1cd6e56 2439{
8f2a734f
NS
2440 tree convs, tpl_convs;
2441 tree list = NULL_TREE;
c8094d83 2442
0171b21c 2443 complete_type (type);
8f2a734f
NS
2444 if (!TYPE_BINFO (type))
2445 return NULL_TREE;
c8094d83 2446
8f2a734f
NS
2447 lookup_conversions_r (TYPE_BINFO (type), 0, 0,
2448 NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE,
2449 &convs, &tpl_convs);
c8094d83 2450
8f2a734f
NS
2451 /* Flatten the list-of-lists */
2452 for (; convs; convs = TREE_CHAIN (convs))
2453 {
2454 tree probe, next;
2455
2456 for (probe = TREE_VALUE (convs); probe; probe = next)
2457 {
2458 next = TREE_CHAIN (probe);
2459
2460 TREE_CHAIN (probe) = list;
2461 list = probe;
2462 }
2463 }
c8094d83 2464
8f2a734f
NS
2465 for (; tpl_convs; tpl_convs = TREE_CHAIN (tpl_convs))
2466 {
2467 tree probe, next;
72c4a2a6 2468
8f2a734f
NS
2469 for (probe = TREE_VALUE (tpl_convs); probe; probe = next)
2470 {
2471 next = TREE_CHAIN (probe);
72c4a2a6 2472
8f2a734f
NS
2473 TREE_CHAIN (probe) = list;
2474 list = probe;
2475 }
2476 }
c8094d83 2477
8f2a734f 2478 return list;
e1cd6e56 2479}
6467930b 2480
9965d119
NS
2481/* Returns the binfo of the first direct or indirect virtual base derived
2482 from BINFO, or NULL if binfo is not via virtual. */
6ad07332 2483
f9825168 2484tree
86ac0575 2485binfo_from_vbase (tree binfo)
6ad07332
JM
2486{
2487 for (; binfo; binfo = BINFO_INHERITANCE_CHAIN (binfo))
2488 {
809e3e7f 2489 if (BINFO_VIRTUAL_P (binfo))
f9825168 2490 return binfo;
6ad07332 2491 }
f9825168 2492 return NULL_TREE;
6ad07332 2493}
a55583e9 2494
9965d119
NS
2495/* Returns the binfo of the first direct or indirect virtual base derived
2496 from BINFO up to the TREE_TYPE, LIMIT, or NULL if binfo is not
2497 via virtual. */
2498
2499tree
86ac0575 2500binfo_via_virtual (tree binfo, tree limit)
9965d119 2501{
2c2e8978
NS
2502 if (limit && !CLASSTYPE_VBASECLASSES (limit))
2503 /* LIMIT has no virtual bases, so BINFO cannot be via one. */
2504 return NULL_TREE;
c8094d83 2505
539ed333 2506 for (; binfo && !SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), limit);
9965d119
NS
2507 binfo = BINFO_INHERITANCE_CHAIN (binfo))
2508 {
809e3e7f 2509 if (BINFO_VIRTUAL_P (binfo))
9965d119
NS
2510 return binfo;
2511 }
2512 return NULL_TREE;
2513}
2514
dbbf88d1
NS
2515/* BINFO is a base binfo in the complete type BINFO_TYPE (HERE).
2516 Find the equivalent binfo within whatever graph HERE is located.
9bcb9aae 2517 This is the inverse of original_binfo. */
a55583e9
MM
2518
2519tree
dbbf88d1 2520copied_binfo (tree binfo, tree here)
a55583e9 2521{
dbbf88d1 2522 tree result = NULL_TREE;
c8094d83 2523
809e3e7f 2524 if (BINFO_VIRTUAL_P (binfo))
dbbf88d1
NS
2525 {
2526 tree t;
a55583e9 2527
dbbf88d1
NS
2528 for (t = here; BINFO_INHERITANCE_CHAIN (t);
2529 t = BINFO_INHERITANCE_CHAIN (t))
2530 continue;
58c42dc2
NS
2531
2532 result = binfo_for_vbase (BINFO_TYPE (binfo), BINFO_TYPE (t));
dbbf88d1
NS
2533 }
2534 else if (BINFO_INHERITANCE_CHAIN (binfo))
2535 {
fa743e8c
NS
2536 tree cbinfo;
2537 tree base_binfo;
2538 int ix;
c8094d83 2539
fa743e8c
NS
2540 cbinfo = copied_binfo (BINFO_INHERITANCE_CHAIN (binfo), here);
2541 for (ix = 0; BINFO_BASE_ITERATE (cbinfo, ix, base_binfo); ix++)
539ed333 2542 if (SAME_BINFO_TYPE_P (BINFO_TYPE (base_binfo), BINFO_TYPE (binfo)))
fa743e8c
NS
2543 {
2544 result = base_binfo;
2545 break;
2546 }
dbbf88d1
NS
2547 }
2548 else
2549 {
539ed333 2550 gcc_assert (SAME_BINFO_TYPE_P (BINFO_TYPE (here), BINFO_TYPE (binfo)));
dbbf88d1
NS
2551 result = here;
2552 }
2553
50bc768d 2554 gcc_assert (result);
dbbf88d1 2555 return result;
a55583e9 2556}
dbbf88d1 2557
58c42dc2
NS
2558tree
2559binfo_for_vbase (tree base, tree t)
2560{
2561 unsigned ix;
2562 tree binfo;
d4e6fecb 2563 VEC(tree,gc) *vbases;
c8094d83 2564
9ba5ff0f
NS
2565 for (vbases = CLASSTYPE_VBASECLASSES (t), ix = 0;
2566 VEC_iterate (tree, vbases, ix, binfo); ix++)
539ed333 2567 if (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), base))
58c42dc2
NS
2568 return binfo;
2569 return NULL;
2570}
2571
dbbf88d1 2572/* BINFO is some base binfo of HERE, within some other
34cd5ae7 2573 hierarchy. Return the equivalent binfo, but in the hierarchy
dbbf88d1 2574 dominated by HERE. This is the inverse of copied_binfo. If BINFO
9bcb9aae 2575 is not a base binfo of HERE, returns NULL_TREE. */
dbbf88d1
NS
2576
2577tree
2578original_binfo (tree binfo, tree here)
2579{
2580 tree result = NULL;
c8094d83 2581
539ed333 2582 if (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), BINFO_TYPE (here)))
dbbf88d1 2583 result = here;
809e3e7f 2584 else if (BINFO_VIRTUAL_P (binfo))
58c42dc2
NS
2585 result = (CLASSTYPE_VBASECLASSES (BINFO_TYPE (here))
2586 ? binfo_for_vbase (BINFO_TYPE (binfo), BINFO_TYPE (here))
2587 : NULL_TREE);
dbbf88d1
NS
2588 else if (BINFO_INHERITANCE_CHAIN (binfo))
2589 {
2590 tree base_binfos;
c8094d83 2591
dbbf88d1
NS
2592 base_binfos = original_binfo (BINFO_INHERITANCE_CHAIN (binfo), here);
2593 if (base_binfos)
2594 {
fa743e8c
NS
2595 int ix;
2596 tree base_binfo;
c8094d83 2597
fa743e8c 2598 for (ix = 0; (base_binfo = BINFO_BASE_BINFO (base_binfos, ix)); ix++)
539ed333
NS
2599 if (SAME_BINFO_TYPE_P (BINFO_TYPE (base_binfo),
2600 BINFO_TYPE (binfo)))
fa743e8c
NS
2601 {
2602 result = base_binfo;
2603 break;
2604 }
dbbf88d1
NS
2605 }
2606 }
c8094d83 2607
dbbf88d1
NS
2608 return result;
2609}
2610
This page took 4.119241 seconds and 5 git commands to generate.