OSDN Git Service

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