OSDN Git Service

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