OSDN Git Service

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