OSDN Git Service

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