OSDN Git Service

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