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