OSDN Git Service

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