OSDN Git Service

* c-typeck.c (parser_build_binary_op): Condition warnings for
[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 = VEC_index (tree, 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   tree fn;
1316   VEC(tree) *methods;
1317
1318   methods = CLASSTYPE_METHOD_VEC (class_type);
1319
1320   for (pass = 0; pass < 2; ++pass)
1321     for (i = CLASSTYPE_FIRST_CONVERSION_SLOT; 
1322          (fn = VEC_iterate (tree, methods, i));
1323          ++i)
1324       {
1325         /* All the conversion operators come near the beginning of the
1326            class.  Therefore, if FN is not a conversion operator, there
1327            is no matching conversion operator in CLASS_TYPE.  */
1328         fn = OVL_CURRENT (fn);
1329         if (!DECL_CONV_FN_P (fn))
1330           break;
1331         
1332         if (pass == 0)
1333           {
1334             /* On the first pass we only consider exact matches.  If
1335                the types match, this slot is the one where the right
1336                conversion operators can be found.  */
1337             if (TREE_CODE (fn) != TEMPLATE_DECL
1338                 && same_type_p (DECL_CONV_FN_TYPE (fn), type))
1339               return i;
1340           }
1341         else
1342           {
1343             /* On the second pass we look for template conversion
1344                operators.  It may be possible to instantiate the
1345                template to get the type desired.  All of the template
1346                conversion operators share a slot.  By looking for
1347                templates second we ensure that specializations are
1348                preferred over templates.  */
1349             if (TREE_CODE (fn) == TEMPLATE_DECL)
1350               return i;
1351           }
1352       }
1353
1354   return -1;
1355 }
1356
1357 /* TYPE is a class type. Return the index of the fields within
1358    the method vector with name NAME, or -1 is no such field exists.  */
1359
1360 int
1361 lookup_fnfields_1 (tree type, tree name)
1362 {
1363   VEC(tree) *method_vec;
1364   tree fn;
1365   tree tmp;
1366   size_t i;
1367   
1368   if (!CLASS_TYPE_P (type))
1369     return -1;
1370
1371   if (COMPLETE_TYPE_P (type))
1372     {
1373       if ((name == ctor_identifier
1374            || name == base_ctor_identifier
1375            || name == complete_ctor_identifier))
1376         {
1377           if (CLASSTYPE_LAZY_DEFAULT_CTOR (type))
1378             lazily_declare_fn (sfk_constructor, type);
1379           if (CLASSTYPE_LAZY_COPY_CTOR (type))
1380             lazily_declare_fn (sfk_copy_constructor, type);
1381         }
1382       else if (name == ansi_assopname(NOP_EXPR)
1383                && !TYPE_HAS_ASSIGN_REF (type)
1384                && !TYPE_FOR_JAVA (type))
1385         lazily_declare_fn (sfk_assignment_operator, type);
1386     }
1387
1388   method_vec = CLASSTYPE_METHOD_VEC (type);
1389   if (!method_vec)
1390     return -1;
1391
1392 #ifdef GATHER_STATISTICS
1393   n_calls_lookup_fnfields_1++;
1394 #endif /* GATHER_STATISTICS */
1395
1396   /* Constructors are first...  */
1397   if (name == ctor_identifier)
1398     {
1399       fn = CLASSTYPE_CONSTRUCTORS (type);
1400       return fn ? CLASSTYPE_CONSTRUCTOR_SLOT : -1;
1401     }
1402   /* and destructors are second.  */
1403   if (name == dtor_identifier)
1404     {
1405       fn = CLASSTYPE_DESTRUCTORS (type);
1406       return fn ? CLASSTYPE_DESTRUCTOR_SLOT : -1;
1407     }
1408   if (IDENTIFIER_TYPENAME_P (name))
1409     return lookup_conversion_operator (type, TREE_TYPE (name));
1410
1411   /* Skip the conversion operators.  */
1412   for (i = CLASSTYPE_FIRST_CONVERSION_SLOT;
1413        (fn = VEC_iterate (tree, method_vec, i));
1414        ++i)
1415     if (!DECL_CONV_FN_P (OVL_CURRENT (fn)))
1416       break;
1417
1418   /* If the type is complete, use binary search.  */
1419   if (COMPLETE_TYPE_P (type))
1420     {
1421       int lo;
1422       int hi;
1423
1424       lo = i;
1425       hi = VEC_length (tree, method_vec);
1426       while (lo < hi)
1427         {
1428           i = (lo + hi) / 2;
1429
1430 #ifdef GATHER_STATISTICS
1431           n_outer_fields_searched++;
1432 #endif /* GATHER_STATISTICS */
1433
1434           tmp = VEC_index (tree, method_vec, i);
1435           tmp = DECL_NAME (OVL_CURRENT (tmp));
1436           if (tmp > name)
1437             hi = i;
1438           else if (tmp < name)
1439             lo = i + 1;
1440           else
1441             return i;
1442         }
1443     }
1444   else
1445     for (; 
1446          (fn = VEC_iterate (tree, method_vec, i));
1447          ++i)
1448       {
1449 #ifdef GATHER_STATISTICS
1450         n_outer_fields_searched++;
1451 #endif /* GATHER_STATISTICS */
1452         if (DECL_NAME (OVL_CURRENT (fn)) == name)
1453           return i;
1454       }
1455
1456   return -1;
1457 }
1458
1459 /* DECL is the result of a qualified name lookup.  QUALIFYING_SCOPE is
1460    the class or namespace used to qualify the name.  CONTEXT_CLASS is
1461    the class corresponding to the object in which DECL will be used.
1462    Return a possibly modified version of DECL that takes into account
1463    the CONTEXT_CLASS.
1464
1465    In particular, consider an expression like `B::m' in the context of
1466    a derived class `D'.  If `B::m' has been resolved to a BASELINK,
1467    then the most derived class indicated by the BASELINK_BINFO will be
1468    `B', not `D'.  This function makes that adjustment.  */
1469
1470 tree
1471 adjust_result_of_qualified_name_lookup (tree decl, 
1472                                         tree qualifying_scope,
1473                                         tree context_class)
1474 {
1475   if (context_class && CLASS_TYPE_P (qualifying_scope) 
1476       && DERIVED_FROM_P (qualifying_scope, context_class)
1477       && BASELINK_P (decl))
1478     {
1479       tree base;
1480
1481       my_friendly_assert (CLASS_TYPE_P (context_class), 20020808);
1482
1483       /* Look for the QUALIFYING_SCOPE as a base of the CONTEXT_CLASS.
1484          Because we do not yet know which function will be chosen by
1485          overload resolution, we cannot yet check either accessibility
1486          or ambiguity -- in either case, the choice of a static member
1487          function might make the usage valid.  */
1488       base = lookup_base (context_class, qualifying_scope,
1489                           ba_ignore | ba_quiet, NULL);
1490       if (base)
1491         {
1492           BASELINK_ACCESS_BINFO (decl) = base;
1493           BASELINK_BINFO (decl) 
1494             = lookup_base (base, BINFO_TYPE (BASELINK_BINFO (decl)),
1495                            ba_ignore | ba_quiet,
1496                            NULL);
1497         }
1498     }
1499
1500   return decl;
1501 }
1502
1503 \f
1504 /* Walk the class hierarchy dominated by TYPE.  FN is called for each
1505    type in the hierarchy, in a breadth-first preorder traversal.
1506    If it ever returns a non-NULL value, that value is immediately
1507    returned and the walk is terminated.  At each node, FN is passed a
1508    BINFO indicating the path from the currently visited base-class to
1509    TYPE.  Before each base-class is walked QFN is called.  If the
1510    value returned is nonzero, the base-class is walked; otherwise it
1511    is not.  If QFN is NULL, it is treated as a function which always
1512    returns 1.  Both FN and QFN are passed the DATA whenever they are
1513    called.
1514
1515    Implementation notes: Uses a circular queue, which starts off on
1516    the stack but gets moved to the malloc arena if it needs to be
1517    enlarged.  The underflow and overflow conditions are
1518    indistinguishable except by context: if head == tail and we just
1519    moved the head pointer, the queue is empty, but if we just moved
1520    the tail pointer, the queue is full.  
1521    Start with enough room for ten concurrent base classes.  That
1522    will be enough for most hierarchies.  */
1523 #define BFS_WALK_INITIAL_QUEUE_SIZE 10
1524
1525 static tree
1526 bfs_walk (tree binfo,
1527           tree (*fn) (tree, void *),
1528           tree (*qfn) (tree, int, void *),
1529           void *data)
1530 {
1531   tree rval = NULL_TREE;
1532
1533   tree bases_initial[BFS_WALK_INITIAL_QUEUE_SIZE];
1534   /* A circular queue of the base classes of BINFO.  These will be
1535      built up in breadth-first order, except where QFN prunes the
1536      search.  */
1537   size_t head, tail;
1538   size_t base_buffer_size = BFS_WALK_INITIAL_QUEUE_SIZE;
1539   tree *base_buffer = bases_initial;
1540
1541   head = tail = 0;
1542   base_buffer[tail++] = binfo;
1543
1544   while (head != tail)
1545     {
1546       int n_bases, ix;
1547       tree binfo = base_buffer[head++];
1548       if (head == base_buffer_size)
1549         head = 0;
1550
1551       /* Is this the one we're looking for?  If so, we're done.  */
1552       rval = fn (binfo, data);
1553       if (rval)
1554         goto done;
1555
1556       n_bases = BINFO_N_BASE_BINFOS (binfo);
1557       for (ix = 0; ix != n_bases; ix++)
1558         {
1559           tree base_binfo;
1560           
1561           if (qfn)
1562             base_binfo = (*qfn) (binfo, ix, data);
1563           else
1564             base_binfo = BINFO_BASE_BINFO (binfo, ix);
1565           
1566           if (base_binfo)
1567             {
1568               base_buffer[tail++] = base_binfo;
1569               if (tail == base_buffer_size)
1570                 tail = 0;
1571               if (tail == head)
1572                 {
1573                   tree *new_buffer = xmalloc (2 * base_buffer_size
1574                                               * sizeof (tree));
1575                   memcpy (&new_buffer[0], &base_buffer[0],
1576                           tail * sizeof (tree));
1577                   memcpy (&new_buffer[head + base_buffer_size],
1578                           &base_buffer[head],
1579                           (base_buffer_size - head) * sizeof (tree));
1580                   if (base_buffer_size != BFS_WALK_INITIAL_QUEUE_SIZE)
1581                     free (base_buffer);
1582                   base_buffer = new_buffer;
1583                   head += base_buffer_size;
1584                   base_buffer_size *= 2;
1585                 }
1586             }
1587         }
1588     }
1589
1590  done:
1591   if (base_buffer_size != BFS_WALK_INITIAL_QUEUE_SIZE)
1592     free (base_buffer);
1593   return rval;
1594 }
1595
1596 /* Exactly like bfs_walk, except that a depth-first traversal is
1597    performed, and PREFN is called in preorder, while POSTFN is called
1598    in postorder.  */
1599
1600 tree
1601 dfs_walk_real (tree binfo,
1602                tree (*prefn) (tree, void *),
1603                tree (*postfn) (tree, void *),
1604                tree (*qfn) (tree, int, void *),
1605                void *data)
1606 {
1607   tree rval = NULL_TREE;
1608
1609   /* Call the pre-order walking function.  */
1610   if (prefn)
1611     {
1612       rval = (*prefn) (binfo, data);
1613       if (rval)
1614         return rval;
1615     }
1616
1617   /* Process the basetypes.  */
1618   if (BINFO_BASE_BINFOS (binfo))
1619     {
1620       int i, n = TREE_VEC_LENGTH (BINFO_BASE_BINFOS (binfo));
1621       for (i = 0; i != n; i++)
1622         {
1623           tree base_binfo;
1624       
1625           if (qfn)
1626             base_binfo = (*qfn) (binfo, i, data);
1627           else
1628             base_binfo = BINFO_BASE_BINFO (binfo, i);
1629           
1630           if (base_binfo)
1631             {
1632               rval = dfs_walk_real (base_binfo, prefn, postfn, qfn, data);
1633               if (rval)
1634                 return rval;
1635             }
1636         }
1637     }
1638
1639   /* Call the post-order walking function.  */
1640   if (postfn)
1641     rval = (*postfn) (binfo, data);
1642   
1643   return rval;
1644 }
1645
1646 /* Exactly like bfs_walk, except that a depth-first post-order traversal is
1647    performed.  */
1648
1649 tree
1650 dfs_walk (tree binfo,
1651           tree (*fn) (tree, void *),
1652           tree (*qfn) (tree, int, void *),
1653           void *data)
1654 {
1655   return dfs_walk_real (binfo, 0, fn, qfn, data);
1656 }
1657
1658 /* Check that virtual overrider OVERRIDER is acceptable for base function
1659    BASEFN. Issue diagnostic, and return zero, if unacceptable.  */
1660
1661 int
1662 check_final_overrider (tree overrider, tree basefn)
1663 {
1664   tree over_type = TREE_TYPE (overrider);
1665   tree base_type = TREE_TYPE (basefn);
1666   tree over_return = TREE_TYPE (over_type);
1667   tree base_return = TREE_TYPE (base_type);
1668   tree over_throw = TYPE_RAISES_EXCEPTIONS (over_type);
1669   tree base_throw = TYPE_RAISES_EXCEPTIONS (base_type);
1670   int fail = 0;
1671
1672   if (DECL_INVALID_OVERRIDER_P (overrider))
1673     return 0;
1674
1675   if (same_type_p (base_return, over_return))
1676     /* OK */;
1677   else if ((CLASS_TYPE_P (over_return) && CLASS_TYPE_P (base_return))
1678            || (TREE_CODE (base_return) == TREE_CODE (over_return)
1679                && POINTER_TYPE_P (base_return)))
1680     {
1681       /* Potentially covariant.  */
1682       unsigned base_quals, over_quals;
1683       
1684       fail = !POINTER_TYPE_P (base_return);
1685       if (!fail)
1686         {
1687           fail = cp_type_quals (base_return) != cp_type_quals (over_return);
1688           
1689           base_return = TREE_TYPE (base_return);
1690           over_return = TREE_TYPE (over_return);
1691         }
1692       base_quals = cp_type_quals (base_return);
1693       over_quals = cp_type_quals (over_return);
1694
1695       if ((base_quals & over_quals) != over_quals)
1696         fail = 1;
1697       
1698       if (CLASS_TYPE_P (base_return) && CLASS_TYPE_P (over_return))
1699         {
1700           tree binfo = lookup_base (over_return, base_return,
1701                                     ba_check | ba_quiet, NULL);
1702
1703           if (!binfo)
1704             fail = 1;
1705         }
1706       else if (!pedantic
1707                && can_convert (TREE_TYPE (base_type), TREE_TYPE (over_type)))
1708         /* GNU extension, allow trivial pointer conversions such as
1709            converting to void *, or qualification conversion.  */
1710         {
1711           /* can_convert will permit user defined conversion from a
1712              (reference to) class type. We must reject them.  */
1713           over_return = non_reference (TREE_TYPE (over_type));
1714           if (CLASS_TYPE_P (over_return))
1715             fail = 2;
1716         }
1717       else
1718         fail = 2;
1719     }
1720   else
1721     fail = 2;
1722   if (!fail)
1723     /* OK */;
1724   else
1725     {
1726       if (fail == 1)
1727         {
1728           cp_error_at ("invalid covariant return type for `%#D'", overrider);
1729           cp_error_at ("  overriding `%#D'", basefn);
1730         }
1731       else
1732         {
1733           cp_error_at ("conflicting return type specified for `%#D'",
1734                        overrider);
1735           cp_error_at ("  overriding `%#D'", basefn);
1736         }
1737       DECL_INVALID_OVERRIDER_P (overrider) = 1;
1738       return 0;
1739     }
1740   
1741   /* Check throw specifier is at least as strict.  */
1742   if (!comp_except_specs (base_throw, over_throw, 0))
1743     {
1744       cp_error_at ("looser throw specifier for `%#F'", overrider);
1745       cp_error_at ("  overriding `%#F'", basefn);
1746       DECL_INVALID_OVERRIDER_P (overrider) = 1;
1747       return 0;
1748     }
1749   
1750   return 1;
1751 }
1752
1753 /* Given a class TYPE, and a function decl FNDECL, look for
1754    virtual functions in TYPE's hierarchy which FNDECL overrides.
1755    We do not look in TYPE itself, only its bases.
1756    
1757    Returns nonzero, if we find any. Set FNDECL's DECL_VIRTUAL_P, if we
1758    find that it overrides anything.
1759    
1760    We check that every function which is overridden, is correctly
1761    overridden.  */
1762
1763 int
1764 look_for_overrides (tree type, tree fndecl)
1765 {
1766   tree binfo = TYPE_BINFO (type);
1767   tree basebinfos = BINFO_BASE_BINFOS (binfo);
1768   int nbasebinfos = basebinfos ? TREE_VEC_LENGTH (basebinfos) : 0;
1769   int ix;
1770   int found = 0;
1771
1772   for (ix = 0; ix != nbasebinfos; ix++)
1773     {
1774       tree basetype = BINFO_TYPE (TREE_VEC_ELT (basebinfos, ix));
1775       
1776       if (TYPE_POLYMORPHIC_P (basetype))
1777         found += look_for_overrides_r (basetype, fndecl);
1778     }
1779   return found;
1780 }
1781
1782 /* Look in TYPE for virtual functions with the same signature as
1783    FNDECL.  */
1784
1785 tree
1786 look_for_overrides_here (tree type, tree fndecl)
1787 {
1788   int ix;
1789
1790   /* If there are no methods in TYPE (meaning that only implicitly
1791      declared methods will ever be provided for TYPE), then there are
1792      no virtual functions.  */
1793   if (!CLASSTYPE_METHOD_VEC (type))
1794     return NULL_TREE;
1795
1796   if (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (fndecl))
1797     ix = CLASSTYPE_DESTRUCTOR_SLOT;
1798   else
1799     ix = lookup_fnfields_1 (type, DECL_NAME (fndecl));
1800   if (ix >= 0)
1801     {
1802       tree fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (type), ix);
1803   
1804       for (; fns; fns = OVL_NEXT (fns))
1805         {
1806           tree fn = OVL_CURRENT (fns);
1807
1808           if (!DECL_VIRTUAL_P (fn))
1809             /* Not a virtual.  */;
1810           else if (DECL_CONTEXT (fn) != type)
1811             /* Introduced with a using declaration.  */;
1812           else if (DECL_STATIC_FUNCTION_P (fndecl))
1813             {
1814               tree btypes = TYPE_ARG_TYPES (TREE_TYPE (fn));
1815               tree dtypes = TYPE_ARG_TYPES (TREE_TYPE (fndecl));
1816               if (compparms (TREE_CHAIN (btypes), dtypes))
1817                 return fn;
1818             }
1819           else if (same_signature_p (fndecl, fn))
1820             return fn;
1821         }
1822     }
1823   return NULL_TREE;
1824 }
1825
1826 /* Look in TYPE for virtual functions overridden by FNDECL. Check both
1827    TYPE itself and its bases.  */
1828
1829 static int
1830 look_for_overrides_r (tree type, tree fndecl)
1831 {
1832   tree fn = look_for_overrides_here (type, fndecl);
1833   if (fn)
1834     {
1835       if (DECL_STATIC_FUNCTION_P (fndecl))
1836         {
1837           /* A static member function cannot match an inherited
1838              virtual member function.  */
1839           cp_error_at ("`%#D' cannot be declared", fndecl);
1840           cp_error_at ("  since `%#D' declared in base class", fn);
1841         }
1842       else
1843         {
1844           /* It's definitely virtual, even if not explicitly set.  */
1845           DECL_VIRTUAL_P (fndecl) = 1;
1846           check_final_overrider (fndecl, fn);
1847         }
1848       return 1;
1849     }
1850
1851   /* We failed to find one declared in this class. Look in its bases.  */
1852   return look_for_overrides (type, fndecl);
1853 }
1854
1855 /* Called via dfs_walk from dfs_get_pure_virtuals.  */
1856
1857 static tree
1858 dfs_get_pure_virtuals (tree binfo, void *data)
1859 {
1860   tree type = (tree) data;
1861
1862   /* We're not interested in primary base classes; the derived class
1863      of which they are a primary base will contain the information we
1864      need.  */
1865   if (!BINFO_PRIMARY_P (binfo))
1866     {
1867       tree virtuals;
1868       
1869       for (virtuals = BINFO_VIRTUALS (binfo);
1870            virtuals;
1871            virtuals = TREE_CHAIN (virtuals))
1872         if (DECL_PURE_VIRTUAL_P (BV_FN (virtuals)))
1873           CLASSTYPE_PURE_VIRTUALS (type) 
1874             = tree_cons (NULL_TREE, BV_FN (virtuals),
1875                          CLASSTYPE_PURE_VIRTUALS (type));
1876     }
1877   
1878   BINFO_MARKED (binfo) = 1;
1879
1880   return NULL_TREE;
1881 }
1882
1883 /* Set CLASSTYPE_PURE_VIRTUALS for TYPE.  */
1884
1885 void
1886 get_pure_virtuals (tree type)
1887 {
1888   unsigned ix;
1889   tree binfo;
1890
1891   /* Clear the CLASSTYPE_PURE_VIRTUALS list; whatever is already there
1892      is going to be overridden.  */
1893   CLASSTYPE_PURE_VIRTUALS (type) = NULL_TREE;
1894   /* Now, run through all the bases which are not primary bases, and
1895      collect the pure virtual functions.  We look at the vtable in
1896      each class to determine what pure virtual functions are present.
1897      (A primary base is not interesting because the derived class of
1898      which it is a primary base will contain vtable entries for the
1899      pure virtuals in the base class.  */
1900   dfs_walk (TYPE_BINFO (type), dfs_get_pure_virtuals, unmarkedp, type);
1901   dfs_walk (TYPE_BINFO (type), dfs_unmark, markedp, type);
1902
1903   /* Put the pure virtuals in dfs order.  */
1904   CLASSTYPE_PURE_VIRTUALS (type) = nreverse (CLASSTYPE_PURE_VIRTUALS (type));
1905
1906   for (ix = 0; (binfo = VEC_iterate
1907                 (tree, CLASSTYPE_VBASECLASSES (type), ix)); ix++)
1908     {
1909       tree virtuals;
1910       
1911       for (virtuals = BINFO_VIRTUALS (binfo); virtuals;
1912            virtuals = TREE_CHAIN (virtuals))
1913         {
1914           tree base_fndecl = BV_FN (virtuals);
1915           if (DECL_NEEDS_FINAL_OVERRIDER_P (base_fndecl))
1916             error ("`%#D' needs a final overrider", base_fndecl);
1917         }
1918     }
1919 }
1920 \f
1921 /* DEPTH-FIRST SEARCH ROUTINES.  */
1922
1923 tree 
1924 markedp (tree derived, int ix, void *data ATTRIBUTE_UNUSED) 
1925 {
1926   tree binfo = BINFO_BASE_BINFO (derived, ix);
1927   
1928   return BINFO_MARKED (binfo) ? binfo : NULL_TREE; 
1929 }
1930
1931 tree
1932 unmarkedp (tree derived, int ix, void *data ATTRIBUTE_UNUSED) 
1933 {
1934   tree binfo = BINFO_BASE_BINFO (derived, ix);
1935   
1936   return !BINFO_MARKED (binfo) ? binfo : NULL_TREE; 
1937 }
1938
1939 /* The worker functions for `dfs_walk'.  These do not need to
1940    test anything (vis a vis marking) if they are paired with
1941    a predicate function (above).  */
1942
1943 tree
1944 dfs_unmark (tree binfo, void *data ATTRIBUTE_UNUSED)
1945 {
1946   BINFO_MARKED (binfo) = 0;
1947   return NULL_TREE;
1948 }
1949
1950 \f
1951 /* Debug info for C++ classes can get very large; try to avoid
1952    emitting it everywhere.
1953
1954    Note that this optimization wins even when the target supports
1955    BINCL (if only slightly), and reduces the amount of work for the
1956    linker.  */
1957
1958 void
1959 maybe_suppress_debug_info (tree t)
1960 {
1961   /* We can't do the usual TYPE_DECL_SUPPRESS_DEBUG thing with DWARF, which
1962      does not support name references between translation units.  It supports
1963      symbolic references between translation units, but only within a single
1964      executable or shared library.
1965
1966      For DWARF 2, we handle TYPE_DECL_SUPPRESS_DEBUG by pretending
1967      that the type was never defined, so we only get the members we
1968      actually define.  */
1969   if (write_symbols == DWARF_DEBUG || write_symbols == NO_DEBUG)
1970     return;
1971
1972   /* We might have set this earlier in cp_finish_decl.  */
1973   TYPE_DECL_SUPPRESS_DEBUG (TYPE_MAIN_DECL (t)) = 0;
1974
1975   /* If we already know how we're handling this class, handle debug info
1976      the same way.  */
1977   if (CLASSTYPE_INTERFACE_KNOWN (t))
1978     {
1979       if (CLASSTYPE_INTERFACE_ONLY (t))
1980         TYPE_DECL_SUPPRESS_DEBUG (TYPE_MAIN_DECL (t)) = 1;
1981       /* else don't set it.  */
1982     }
1983   /* If the class has a vtable, write out the debug info along with
1984      the vtable.  */
1985   else if (TYPE_CONTAINS_VPTR_P (t))
1986     TYPE_DECL_SUPPRESS_DEBUG (TYPE_MAIN_DECL (t)) = 1;
1987
1988   /* Otherwise, just emit the debug info normally.  */
1989 }
1990
1991 /* Note that we want debugging information for a base class of a class
1992    whose vtable is being emitted.  Normally, this would happen because
1993    calling the constructor for a derived class implies calling the
1994    constructors for all bases, which involve initializing the
1995    appropriate vptr with the vtable for the base class; but in the
1996    presence of optimization, this initialization may be optimized
1997    away, so we tell finish_vtable_vardecl that we want the debugging
1998    information anyway.  */
1999
2000 static tree
2001 dfs_debug_mark (tree binfo, void *data ATTRIBUTE_UNUSED)
2002 {
2003   tree t = BINFO_TYPE (binfo);
2004
2005   CLASSTYPE_DEBUG_REQUESTED (t) = 1;
2006
2007   return NULL_TREE;
2008 }
2009
2010 /* Returns BINFO if we haven't already noted that we want debugging
2011    info for this base class.  */
2012
2013 static tree 
2014 dfs_debug_unmarkedp (tree derived, int ix, void *data ATTRIBUTE_UNUSED)
2015 {
2016   tree binfo = BINFO_BASE_BINFO (derived, ix);
2017   
2018   return (!CLASSTYPE_DEBUG_REQUESTED (BINFO_TYPE (binfo)) 
2019           ? binfo : NULL_TREE);
2020 }
2021
2022 /* Write out the debugging information for TYPE, whose vtable is being
2023    emitted.  Also walk through our bases and note that we want to
2024    write out information for them.  This avoids the problem of not
2025    writing any debug info for intermediate basetypes whose
2026    constructors, and thus the references to their vtables, and thus
2027    the vtables themselves, were optimized away.  */
2028
2029 void
2030 note_debug_info_needed (tree type)
2031 {
2032   if (TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (type)))
2033     {
2034       TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (type)) = 0;
2035       rest_of_type_compilation (type, toplevel_bindings_p ());
2036     }
2037
2038   dfs_walk (TYPE_BINFO (type), dfs_debug_mark, dfs_debug_unmarkedp, 0);
2039 }
2040 \f
2041 void
2042 print_search_statistics (void)
2043 {
2044 #ifdef GATHER_STATISTICS
2045   fprintf (stderr, "%d fields searched in %d[%d] calls to lookup_field[_1]\n",
2046            n_fields_searched, n_calls_lookup_field, n_calls_lookup_field_1);
2047   fprintf (stderr, "%d fnfields searched in %d calls to lookup_fnfields\n",
2048            n_outer_fields_searched, n_calls_lookup_fnfields);
2049   fprintf (stderr, "%d calls to get_base_type\n", n_calls_get_base_type);
2050 #else /* GATHER_STATISTICS */
2051   fprintf (stderr, "no search statistics\n");
2052 #endif /* GATHER_STATISTICS */
2053 }
2054
2055 void
2056 reinit_search_statistics (void)
2057 {
2058 #ifdef GATHER_STATISTICS
2059   n_fields_searched = 0;
2060   n_calls_lookup_field = 0, n_calls_lookup_field_1 = 0;
2061   n_calls_lookup_fnfields = 0, n_calls_lookup_fnfields_1 = 0;
2062   n_calls_get_base_type = 0;
2063   n_outer_fields_searched = 0;
2064   n_contexts_saved = 0;
2065 #endif /* GATHER_STATISTICS */
2066 }
2067
2068 static tree
2069 add_conversions (tree binfo, void *data)
2070 {
2071   size_t i;
2072   VEC(tree) *method_vec = CLASSTYPE_METHOD_VEC (BINFO_TYPE (binfo));
2073   tree *conversions = (tree *) data;
2074   tree tmp;
2075
2076   /* Some builtin types have no method vector, not even an empty one.  */
2077   if (!method_vec)
2078     return NULL_TREE;
2079
2080   for (i = CLASSTYPE_FIRST_CONVERSION_SLOT; 
2081        (tmp = VEC_iterate (tree, method_vec, i));
2082        ++i)
2083     {
2084       tree name;
2085
2086       if (!tmp || ! DECL_CONV_FN_P (OVL_CURRENT (tmp)))
2087         break;
2088
2089       name = DECL_NAME (OVL_CURRENT (tmp));
2090
2091       /* Make sure we don't already have this conversion.  */
2092       if (! IDENTIFIER_MARKED (name))
2093         {
2094           tree t;
2095
2096           /* Make sure that we do not already have a conversion
2097              operator for this type.  Merely checking the NAME is not
2098              enough because two conversion operators to the same type
2099              may not have the same NAME.  */
2100           for (t = *conversions; t; t = TREE_CHAIN (t))
2101             {
2102               tree fn;
2103               for (fn = TREE_VALUE (t); fn; fn = OVL_NEXT (fn))
2104                 if (same_type_p (TREE_TYPE (name),
2105                                  DECL_CONV_FN_TYPE (OVL_CURRENT (fn))))
2106                   break;
2107               if (fn)
2108                 break;
2109             }
2110           if (!t)
2111             {
2112               *conversions = tree_cons (binfo, tmp, *conversions);
2113               IDENTIFIER_MARKED (name) = 1;
2114             }
2115         }
2116     }
2117   return NULL_TREE;
2118 }
2119
2120 /* Return a TREE_LIST containing all the non-hidden user-defined
2121    conversion functions for TYPE (and its base-classes).  The
2122    TREE_VALUE of each node is a FUNCTION_DECL or an OVERLOAD
2123    containing the conversion functions.  The TREE_PURPOSE is the BINFO
2124    from which the conversion functions in this node were selected.  */
2125
2126 tree
2127 lookup_conversions (tree type)
2128 {
2129   tree t;
2130   tree conversions = NULL_TREE;
2131
2132   complete_type (type);
2133   if (TYPE_BINFO (type))
2134     bfs_walk (TYPE_BINFO (type), add_conversions, 0, &conversions);
2135
2136   for (t = conversions; t; t = TREE_CHAIN (t))
2137     IDENTIFIER_MARKED (DECL_NAME (OVL_CURRENT (TREE_VALUE (t)))) = 0;
2138
2139   return conversions;
2140 }
2141
2142 struct overlap_info 
2143 {
2144   tree compare_type;
2145   int found_overlap;
2146 };
2147
2148 /* Check whether the empty class indicated by EMPTY_BINFO is also present
2149    at offset 0 in COMPARE_TYPE, and set found_overlap if so.  */
2150
2151 static tree
2152 dfs_check_overlap (tree empty_binfo, void *data)
2153 {
2154   struct overlap_info *oi = (struct overlap_info *) data;
2155   tree binfo;
2156   for (binfo = TYPE_BINFO (oi->compare_type); 
2157        ; 
2158        binfo = BINFO_BASE_BINFO (binfo, 0))
2159     {
2160       if (BINFO_TYPE (binfo) == BINFO_TYPE (empty_binfo))
2161         {
2162           oi->found_overlap = 1;
2163           break;
2164         }
2165       else if (BINFO_BASE_BINFOS (binfo) == NULL_TREE)
2166         break;
2167     }
2168
2169   return NULL_TREE;
2170 }
2171
2172 /* Trivial function to stop base traversal when we find something.  */
2173
2174 static tree
2175 dfs_no_overlap_yet (tree derived, int ix, void *data)
2176 {
2177   tree binfo = BINFO_BASE_BINFO (derived, ix);
2178   struct overlap_info *oi = (struct overlap_info *) data;
2179   
2180   return !oi->found_overlap ? binfo : NULL_TREE;
2181 }
2182
2183 /* Returns nonzero if EMPTY_TYPE or any of its bases can also be found at
2184    offset 0 in NEXT_TYPE.  Used in laying out empty base class subobjects.  */
2185
2186 int
2187 types_overlap_p (tree empty_type, tree next_type)
2188 {
2189   struct overlap_info oi;
2190
2191   if (! IS_AGGR_TYPE (next_type))
2192     return 0;
2193   oi.compare_type = next_type;
2194   oi.found_overlap = 0;
2195   dfs_walk (TYPE_BINFO (empty_type), dfs_check_overlap,
2196             dfs_no_overlap_yet, &oi);
2197   return oi.found_overlap;
2198 }
2199
2200 /* Given a vtable VAR, determine which of the inherited classes the vtable
2201    inherits (in a loose sense) functions from.
2202
2203    FIXME: This does not work with the new ABI.  */
2204
2205 tree
2206 binfo_for_vtable (tree var)
2207 {
2208   tree main_binfo = TYPE_BINFO (DECL_CONTEXT (var));
2209   tree binfos = BINFO_BASE_BINFOS (TYPE_BINFO (BINFO_TYPE (main_binfo)));
2210   int n_baseclasses = BINFO_N_BASE_BINFOS (TYPE_BINFO (BINFO_TYPE (main_binfo)));
2211   int i;
2212
2213   for (i = 0; i < n_baseclasses; i++)
2214     {
2215       tree base_binfo = TREE_VEC_ELT (binfos, i);
2216       if (base_binfo != NULL_TREE && BINFO_VTABLE (base_binfo) == var)
2217         return base_binfo;
2218     }
2219
2220   /* If no secondary base classes matched, return the primary base, if
2221      there is one.  */
2222   if (CLASSTYPE_HAS_PRIMARY_BASE_P (BINFO_TYPE (main_binfo)))
2223     return get_primary_binfo (main_binfo);
2224
2225   return main_binfo;
2226 }
2227
2228 /* Returns the binfo of the first direct or indirect virtual base derived
2229    from BINFO, or NULL if binfo is not via virtual.  */
2230
2231 tree
2232 binfo_from_vbase (tree binfo)
2233 {
2234   for (; binfo; binfo = BINFO_INHERITANCE_CHAIN (binfo))
2235     {
2236       if (BINFO_VIRTUAL_P (binfo))
2237         return binfo;
2238     }
2239   return NULL_TREE;
2240 }
2241
2242 /* Returns the binfo of the first direct or indirect virtual base derived
2243    from BINFO up to the TREE_TYPE, LIMIT, or NULL if binfo is not
2244    via virtual.  */
2245
2246 tree
2247 binfo_via_virtual (tree binfo, tree limit)
2248 {
2249   for (; binfo && (!limit || !same_type_p (BINFO_TYPE (binfo), limit));
2250        binfo = BINFO_INHERITANCE_CHAIN (binfo))
2251     {
2252       if (BINFO_VIRTUAL_P (binfo))
2253         return binfo;
2254     }
2255   return NULL_TREE;
2256 }
2257
2258 /* BINFO is a base binfo in the complete type BINFO_TYPE (HERE).
2259    Find the equivalent binfo within whatever graph HERE is located.
2260    This is the inverse of original_binfo.  */
2261
2262 tree
2263 copied_binfo (tree binfo, tree here)
2264 {
2265   tree result = NULL_TREE;
2266   
2267   if (BINFO_VIRTUAL_P (binfo))
2268     {
2269       tree t;
2270
2271       for (t = here; BINFO_INHERITANCE_CHAIN (t);
2272            t = BINFO_INHERITANCE_CHAIN (t))
2273         continue;
2274
2275       result = binfo_for_vbase (BINFO_TYPE (binfo), BINFO_TYPE (t));
2276     }
2277   else if (BINFO_INHERITANCE_CHAIN (binfo))
2278     {
2279       tree base_binfos;
2280       int ix, n;
2281       
2282       base_binfos = copied_binfo (BINFO_INHERITANCE_CHAIN (binfo), here);
2283       base_binfos = BINFO_BASE_BINFOS (base_binfos);
2284       n = TREE_VEC_LENGTH (base_binfos);
2285       for (ix = 0; ix != n; ix++)
2286         {
2287           tree base = TREE_VEC_ELT (base_binfos, ix);
2288           
2289           if (BINFO_TYPE (base) == BINFO_TYPE (binfo))
2290             {
2291               result = base;
2292               break;
2293             }
2294         }
2295     }
2296   else
2297     {
2298       my_friendly_assert (BINFO_TYPE (here) == BINFO_TYPE (binfo), 20030202);
2299       result = here;
2300     }
2301
2302   my_friendly_assert (result, 20030202);
2303   return result;
2304 }
2305
2306 tree
2307 binfo_for_vbase (tree base, tree t)
2308 {
2309   unsigned ix;
2310   tree binfo;
2311   
2312   for (ix = 0; (binfo = VEC_iterate
2313                 (tree, CLASSTYPE_VBASECLASSES (t), ix)); ix++)
2314     if (BINFO_TYPE (binfo) == base)
2315       return binfo;
2316   return NULL;
2317 }
2318
2319 /* BINFO is some base binfo of HERE, within some other
2320    hierarchy. Return the equivalent binfo, but in the hierarchy
2321    dominated by HERE.  This is the inverse of copied_binfo.  If BINFO
2322    is not a base binfo of HERE, returns NULL_TREE.  */
2323
2324 tree
2325 original_binfo (tree binfo, tree here)
2326 {
2327   tree result = NULL;
2328   
2329   if (BINFO_TYPE (binfo) == BINFO_TYPE (here))
2330     result = here;
2331   else if (BINFO_VIRTUAL_P (binfo))
2332     result = (CLASSTYPE_VBASECLASSES (BINFO_TYPE (here))
2333               ? binfo_for_vbase (BINFO_TYPE (binfo), BINFO_TYPE (here))
2334               : NULL_TREE);
2335   else if (BINFO_INHERITANCE_CHAIN (binfo))
2336     {
2337       tree base_binfos;
2338       
2339       base_binfos = original_binfo (BINFO_INHERITANCE_CHAIN (binfo), here);
2340       if (base_binfos)
2341         {
2342           int ix, n;
2343           
2344           base_binfos = BINFO_BASE_BINFOS (base_binfos);
2345           n = TREE_VEC_LENGTH (base_binfos);
2346           for (ix = 0; ix != n; ix++)
2347             {
2348               tree base = TREE_VEC_ELT (base_binfos, ix);
2349               
2350               if (BINFO_TYPE (base) == BINFO_TYPE (binfo))
2351                 {
2352                   result = base;
2353                   break;
2354                 }
2355             }
2356         }
2357     }
2358   
2359   return result;
2360 }
2361