OSDN Git Service

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