OSDN Git Service

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