OSDN Git Service

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