OSDN Git Service

2010-03-18 Paolo Carlini <paolo.carlini@oracle.com>
[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       for (; t; t = OVL_NEXT (t))
977         {
978           tree fn = OVL_CURRENT (t);
979           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
980             return 0;
981         }
982       return 1;
983     }
984   return 0;
985 }
986
987 /* Routine to see if the sub-object denoted by the binfo PARENT can be
988    found as a base class and sub-object of the object denoted by
989    BINFO.  */
990
991 static int
992 is_subobject_of_p (tree parent, tree binfo)
993 {
994   tree probe;
995
996   for (probe = parent; probe; probe = BINFO_INHERITANCE_CHAIN (probe))
997     {
998       if (probe == binfo)
999         return 1;
1000       if (BINFO_VIRTUAL_P (probe))
1001         return (binfo_for_vbase (BINFO_TYPE (probe), BINFO_TYPE (binfo))
1002                 != NULL_TREE);
1003     }
1004   return 0;
1005 }
1006
1007 /* DATA is really a struct lookup_field_info.  Look for a field with
1008    the name indicated there in BINFO.  If this function returns a
1009    non-NULL value it is the result of the lookup.  Called from
1010    lookup_field via breadth_first_search.  */
1011
1012 static tree
1013 lookup_field_r (tree binfo, void *data)
1014 {
1015   struct lookup_field_info *lfi = (struct lookup_field_info *) data;
1016   tree type = BINFO_TYPE (binfo);
1017   tree nval = NULL_TREE;
1018
1019   /* If this is a dependent base, don't look in it.  */
1020   if (BINFO_DEPENDENT_BASE_P (binfo))
1021     return NULL_TREE;
1022
1023   /* If this base class is hidden by the best-known value so far, we
1024      don't need to look.  */
1025   if (lfi->rval_binfo && BINFO_INHERITANCE_CHAIN (binfo) == lfi->rval_binfo
1026       && !BINFO_VIRTUAL_P (binfo))
1027     return dfs_skip_bases;
1028
1029   /* First, look for a function.  There can't be a function and a data
1030      member with the same name, and if there's a function and a type
1031      with the same name, the type is hidden by the function.  */
1032   if (!lfi->want_type)
1033     {
1034       int idx = lookup_fnfields_1 (type, lfi->name);
1035       if (idx >= 0)
1036         nval = VEC_index (tree, CLASSTYPE_METHOD_VEC (type), idx);
1037     }
1038
1039   if (!nval)
1040     /* Look for a data member or type.  */
1041     nval = lookup_field_1 (type, lfi->name, lfi->want_type);
1042
1043   /* If there is no declaration with the indicated name in this type,
1044      then there's nothing to do.  */
1045   if (!nval)
1046     goto done;
1047
1048   /* If we're looking up a type (as with an elaborated type specifier)
1049      we ignore all non-types we find.  */
1050   if (lfi->want_type && TREE_CODE (nval) != TYPE_DECL
1051       && !DECL_CLASS_TEMPLATE_P (nval))
1052     {
1053       if (lfi->name == TYPE_IDENTIFIER (type))
1054         {
1055           /* If the aggregate has no user defined constructors, we allow
1056              it to have fields with the same name as the enclosing type.
1057              If we are looking for that name, find the corresponding
1058              TYPE_DECL.  */
1059           for (nval = TREE_CHAIN (nval); nval; nval = TREE_CHAIN (nval))
1060             if (DECL_NAME (nval) == lfi->name
1061                 && TREE_CODE (nval) == TYPE_DECL)
1062               break;
1063         }
1064       else
1065         nval = NULL_TREE;
1066       if (!nval && CLASSTYPE_NESTED_UTDS (type) != NULL)
1067         {
1068           binding_entry e = binding_table_find (CLASSTYPE_NESTED_UTDS (type),
1069                                                 lfi->name);
1070           if (e != NULL)
1071             nval = TYPE_MAIN_DECL (e->type);
1072           else
1073             goto done;
1074         }
1075     }
1076
1077   /* If the lookup already found a match, and the new value doesn't
1078      hide the old one, we might have an ambiguity.  */
1079   if (lfi->rval_binfo
1080       && !is_subobject_of_p (lfi->rval_binfo, binfo))
1081
1082     {
1083       if (nval == lfi->rval && shared_member_p (nval))
1084         /* The two things are really the same.  */
1085         ;
1086       else if (is_subobject_of_p (binfo, lfi->rval_binfo))
1087         /* The previous value hides the new one.  */
1088         ;
1089       else
1090         {
1091           /* We have a real ambiguity.  We keep a chain of all the
1092              candidates.  */
1093           if (!lfi->ambiguous && lfi->rval)
1094             {
1095               /* This is the first time we noticed an ambiguity.  Add
1096                  what we previously thought was a reasonable candidate
1097                  to the list.  */
1098               lfi->ambiguous = tree_cons (NULL_TREE, lfi->rval, NULL_TREE);
1099               TREE_TYPE (lfi->ambiguous) = error_mark_node;
1100             }
1101
1102           /* Add the new value.  */
1103           lfi->ambiguous = tree_cons (NULL_TREE, nval, lfi->ambiguous);
1104           TREE_TYPE (lfi->ambiguous) = error_mark_node;
1105           lfi->errstr = G_("request for member %qD is ambiguous");
1106         }
1107     }
1108   else
1109     {
1110       lfi->rval = nval;
1111       lfi->rval_binfo = binfo;
1112     }
1113
1114  done:
1115   /* Don't look for constructors or destructors in base classes.  */
1116   if (IDENTIFIER_CTOR_OR_DTOR_P (lfi->name))
1117     return dfs_skip_bases;
1118   return NULL_TREE;
1119 }
1120
1121 /* Return a "baselink" with BASELINK_BINFO, BASELINK_ACCESS_BINFO,
1122    BASELINK_FUNCTIONS, and BASELINK_OPTYPE set to BINFO, ACCESS_BINFO,
1123    FUNCTIONS, and OPTYPE respectively.  */
1124
1125 tree
1126 build_baselink (tree binfo, tree access_binfo, tree functions, tree optype)
1127 {
1128   tree baselink;
1129
1130   gcc_assert (TREE_CODE (functions) == FUNCTION_DECL
1131               || TREE_CODE (functions) == TEMPLATE_DECL
1132               || TREE_CODE (functions) == TEMPLATE_ID_EXPR
1133               || TREE_CODE (functions) == OVERLOAD);
1134   gcc_assert (!optype || TYPE_P (optype));
1135   gcc_assert (TREE_TYPE (functions));
1136
1137   baselink = make_node (BASELINK);
1138   TREE_TYPE (baselink) = TREE_TYPE (functions);
1139   BASELINK_BINFO (baselink) = binfo;
1140   BASELINK_ACCESS_BINFO (baselink) = access_binfo;
1141   BASELINK_FUNCTIONS (baselink) = functions;
1142   BASELINK_OPTYPE (baselink) = optype;
1143
1144   return baselink;
1145 }
1146
1147 /* Look for a member named NAME in an inheritance lattice dominated by
1148    XBASETYPE.  If PROTECT is 0 or two, we do not check access.  If it
1149    is 1, we enforce accessibility.  If PROTECT is zero, then, for an
1150    ambiguous lookup, we return NULL.  If PROTECT is 1, we issue error
1151    messages about inaccessible or ambiguous lookup.  If PROTECT is 2,
1152    we return a TREE_LIST whose TREE_TYPE is error_mark_node and whose
1153    TREE_VALUEs are the list of ambiguous candidates.
1154
1155    WANT_TYPE is 1 when we should only return TYPE_DECLs.
1156
1157    If nothing can be found return NULL_TREE and do not issue an error.  */
1158
1159 tree
1160 lookup_member (tree xbasetype, tree name, int protect, bool want_type)
1161 {
1162   tree rval, rval_binfo = NULL_TREE;
1163   tree type = NULL_TREE, basetype_path = NULL_TREE;
1164   struct lookup_field_info lfi;
1165
1166   /* rval_binfo is the binfo associated with the found member, note,
1167      this can be set with useful information, even when rval is not
1168      set, because it must deal with ALL members, not just non-function
1169      members.  It is used for ambiguity checking and the hidden
1170      checks.  Whereas rval is only set if a proper (not hidden)
1171      non-function member is found.  */
1172
1173   const char *errstr = 0;
1174
1175   if (name == error_mark_node)
1176     return NULL_TREE;
1177
1178   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
1179
1180   if (TREE_CODE (xbasetype) == TREE_BINFO)
1181     {
1182       type = BINFO_TYPE (xbasetype);
1183       basetype_path = xbasetype;
1184     }
1185   else
1186     {
1187       if (!RECORD_OR_UNION_CODE_P (TREE_CODE (xbasetype)))
1188         return NULL_TREE;
1189       type = xbasetype;
1190       xbasetype = NULL_TREE;
1191     }
1192
1193   type = complete_type (type);
1194   if (!basetype_path)
1195     basetype_path = TYPE_BINFO (type);
1196
1197   if (!basetype_path)
1198     return NULL_TREE;
1199
1200 #ifdef GATHER_STATISTICS
1201   n_calls_lookup_field++;
1202 #endif /* GATHER_STATISTICS */
1203
1204   memset (&lfi, 0, sizeof (lfi));
1205   lfi.type = type;
1206   lfi.name = name;
1207   lfi.want_type = want_type;
1208   dfs_walk_all (basetype_path, &lookup_field_r, NULL, &lfi);
1209   rval = lfi.rval;
1210   rval_binfo = lfi.rval_binfo;
1211   if (rval_binfo)
1212     type = BINFO_TYPE (rval_binfo);
1213   errstr = lfi.errstr;
1214
1215   /* If we are not interested in ambiguities, don't report them;
1216      just return NULL_TREE.  */
1217   if (!protect && lfi.ambiguous)
1218     return NULL_TREE;
1219
1220   if (protect == 2)
1221     {
1222       if (lfi.ambiguous)
1223         return lfi.ambiguous;
1224       else
1225         protect = 0;
1226     }
1227
1228   /* [class.access]
1229
1230      In the case of overloaded function names, access control is
1231      applied to the function selected by overloaded resolution.  
1232
1233      We cannot check here, even if RVAL is only a single non-static
1234      member function, since we do not know what the "this" pointer
1235      will be.  For:
1236
1237         class A { protected: void f(); };
1238         class B : public A { 
1239           void g(A *p) {
1240             f(); // OK
1241             p->f(); // Not OK.
1242           }
1243         };
1244
1245     only the first call to "f" is valid.  However, if the function is
1246     static, we can check.  */
1247   if (rval && protect 
1248       && !really_overloaded_fn (rval)
1249       && !(TREE_CODE (rval) == FUNCTION_DECL
1250            && DECL_NONSTATIC_MEMBER_FUNCTION_P (rval)))
1251     perform_or_defer_access_check (basetype_path, rval, rval);
1252
1253   if (errstr && protect)
1254     {
1255       error (errstr, name, type);
1256       if (lfi.ambiguous)
1257         print_candidates (lfi.ambiguous);
1258       rval = error_mark_node;
1259     }
1260
1261   if (rval && is_overloaded_fn (rval))
1262     rval = build_baselink (rval_binfo, basetype_path, rval,
1263                            (IDENTIFIER_TYPENAME_P (name)
1264                            ? TREE_TYPE (name): NULL_TREE));
1265   return rval;
1266 }
1267
1268 /* Like lookup_member, except that if we find a function member we
1269    return NULL_TREE.  */
1270
1271 tree
1272 lookup_field (tree xbasetype, tree name, int protect, bool want_type)
1273 {
1274   tree rval = lookup_member (xbasetype, name, protect, want_type);
1275
1276   /* Ignore functions, but propagate the ambiguity list.  */
1277   if (!error_operand_p (rval)
1278       && (rval && BASELINK_P (rval)))
1279     return NULL_TREE;
1280
1281   return rval;
1282 }
1283
1284 /* Like lookup_member, except that if we find a non-function member we
1285    return NULL_TREE.  */
1286
1287 tree
1288 lookup_fnfields (tree xbasetype, tree name, int protect)
1289 {
1290   tree rval = lookup_member (xbasetype, name, protect, /*want_type=*/false);
1291
1292   /* Ignore non-functions, but propagate the ambiguity list.  */
1293   if (!error_operand_p (rval)
1294       && (rval && !BASELINK_P (rval)))
1295     return NULL_TREE;
1296
1297   return rval;
1298 }
1299
1300 /* Return the index in the CLASSTYPE_METHOD_VEC for CLASS_TYPE
1301    corresponding to "operator TYPE ()", or -1 if there is no such
1302    operator.  Only CLASS_TYPE itself is searched; this routine does
1303    not scan the base classes of CLASS_TYPE.  */
1304
1305 static int
1306 lookup_conversion_operator (tree class_type, tree type)
1307 {
1308   int tpl_slot = -1;
1309
1310   if (TYPE_HAS_CONVERSION (class_type))
1311     {
1312       int i;
1313       tree fn;
1314       VEC(tree,gc) *methods = CLASSTYPE_METHOD_VEC (class_type);
1315
1316       for (i = CLASSTYPE_FIRST_CONVERSION_SLOT;
1317            VEC_iterate (tree, methods, i, fn); ++i)
1318         {
1319           /* All the conversion operators come near the beginning of
1320              the class.  Therefore, if FN is not a conversion
1321              operator, there is no matching conversion operator in
1322              CLASS_TYPE.  */
1323           fn = OVL_CURRENT (fn);
1324           if (!DECL_CONV_FN_P (fn))
1325             break;
1326
1327           if (TREE_CODE (fn) == TEMPLATE_DECL)
1328             /* All the templated conversion functions are on the same
1329                slot, so remember it.  */
1330             tpl_slot = i;
1331           else if (same_type_p (DECL_CONV_FN_TYPE (fn), type))
1332             return i;
1333         }
1334     }
1335
1336   return tpl_slot;
1337 }
1338
1339 /* TYPE is a class type. Return the index of the fields within
1340    the method vector with name NAME, or -1 is no such field exists.  */
1341
1342 int
1343 lookup_fnfields_1 (tree type, tree name)
1344 {
1345   VEC(tree,gc) *method_vec;
1346   tree fn;
1347   tree tmp;
1348   size_t i;
1349
1350   if (!CLASS_TYPE_P (type))
1351     return -1;
1352
1353   if (COMPLETE_TYPE_P (type))
1354     {
1355       if ((name == ctor_identifier
1356            || name == base_ctor_identifier
1357            || name == complete_ctor_identifier))
1358         {
1359           if (CLASSTYPE_LAZY_DEFAULT_CTOR (type))
1360             lazily_declare_fn (sfk_constructor, type);
1361           if (CLASSTYPE_LAZY_COPY_CTOR (type))
1362             lazily_declare_fn (sfk_copy_constructor, type);
1363           if (CLASSTYPE_LAZY_MOVE_CTOR (type))
1364             lazily_declare_fn (sfk_move_constructor, type);
1365         }
1366       else if (name == ansi_assopname(NOP_EXPR)
1367                && CLASSTYPE_LAZY_ASSIGNMENT_OP (type))
1368         lazily_declare_fn (sfk_assignment_operator, type);
1369       else if ((name == dtor_identifier
1370                 || name == base_dtor_identifier
1371                 || name == complete_dtor_identifier
1372                 || name == deleting_dtor_identifier)
1373                && CLASSTYPE_LAZY_DESTRUCTOR (type))
1374         lazily_declare_fn (sfk_destructor, type);
1375     }
1376
1377   method_vec = CLASSTYPE_METHOD_VEC (type);
1378   if (!method_vec)
1379     return -1;
1380
1381 #ifdef GATHER_STATISTICS
1382   n_calls_lookup_fnfields_1++;
1383 #endif /* GATHER_STATISTICS */
1384
1385   /* Constructors are first...  */
1386   if (name == ctor_identifier)
1387     {
1388       fn = CLASSTYPE_CONSTRUCTORS (type);
1389       return fn ? CLASSTYPE_CONSTRUCTOR_SLOT : -1;
1390     }
1391   /* and destructors are second.  */
1392   if (name == dtor_identifier)
1393     {
1394       fn = CLASSTYPE_DESTRUCTORS (type);
1395       return fn ? CLASSTYPE_DESTRUCTOR_SLOT : -1;
1396     }
1397   if (IDENTIFIER_TYPENAME_P (name))
1398     return lookup_conversion_operator (type, TREE_TYPE (name));
1399
1400   /* Skip the conversion operators.  */
1401   for (i = CLASSTYPE_FIRST_CONVERSION_SLOT;
1402        VEC_iterate (tree, method_vec, i, fn);
1403        ++i)
1404     if (!DECL_CONV_FN_P (OVL_CURRENT (fn)))
1405       break;
1406
1407   /* If the type is complete, use binary search.  */
1408   if (COMPLETE_TYPE_P (type))
1409     {
1410       int lo;
1411       int hi;
1412
1413       lo = i;
1414       hi = VEC_length (tree, method_vec);
1415       while (lo < hi)
1416         {
1417           i = (lo + hi) / 2;
1418
1419 #ifdef GATHER_STATISTICS
1420           n_outer_fields_searched++;
1421 #endif /* GATHER_STATISTICS */
1422
1423           tmp = VEC_index (tree, method_vec, i);
1424           tmp = DECL_NAME (OVL_CURRENT (tmp));
1425           if (tmp > name)
1426             hi = i;
1427           else if (tmp < name)
1428             lo = i + 1;
1429           else
1430             return i;
1431         }
1432     }
1433   else
1434     for (; VEC_iterate (tree, method_vec, i, fn); ++i)
1435       {
1436 #ifdef GATHER_STATISTICS
1437         n_outer_fields_searched++;
1438 #endif /* GATHER_STATISTICS */
1439         if (DECL_NAME (OVL_CURRENT (fn)) == name)
1440           return i;
1441       }
1442
1443   return -1;
1444 }
1445
1446 /* Like lookup_fnfields_1, except that the name is extracted from
1447    FUNCTION, which is a FUNCTION_DECL or a TEMPLATE_DECL.  */
1448
1449 int
1450 class_method_index_for_fn (tree class_type, tree function)
1451 {
1452   gcc_assert (TREE_CODE (function) == FUNCTION_DECL
1453               || DECL_FUNCTION_TEMPLATE_P (function));
1454
1455   return lookup_fnfields_1 (class_type,
1456                             DECL_CONSTRUCTOR_P (function) ? ctor_identifier :
1457                             DECL_DESTRUCTOR_P (function) ? dtor_identifier :
1458                             DECL_NAME (function));
1459 }
1460
1461
1462 /* DECL is the result of a qualified name lookup.  QUALIFYING_SCOPE is
1463    the class or namespace used to qualify the name.  CONTEXT_CLASS is
1464    the class corresponding to the object in which DECL will be used.
1465    Return a possibly modified version of DECL that takes into account
1466    the CONTEXT_CLASS.
1467
1468    In particular, consider an expression like `B::m' in the context of
1469    a derived class `D'.  If `B::m' has been resolved to a BASELINK,
1470    then the most derived class indicated by the BASELINK_BINFO will be
1471    `B', not `D'.  This function makes that adjustment.  */
1472
1473 tree
1474 adjust_result_of_qualified_name_lookup (tree decl,
1475                                         tree qualifying_scope,
1476                                         tree context_class)
1477 {
1478   if (context_class && context_class != error_mark_node
1479       && CLASS_TYPE_P (context_class)
1480       && CLASS_TYPE_P (qualifying_scope)
1481       && DERIVED_FROM_P (qualifying_scope, context_class)
1482       && BASELINK_P (decl))
1483     {
1484       tree base;
1485
1486       /* Look for the QUALIFYING_SCOPE as a base of the CONTEXT_CLASS.
1487          Because we do not yet know which function will be chosen by
1488          overload resolution, we cannot yet check either accessibility
1489          or ambiguity -- in either case, the choice of a static member
1490          function might make the usage valid.  */
1491       base = lookup_base (context_class, qualifying_scope,
1492                           ba_unique | ba_quiet, NULL);
1493       if (base)
1494         {
1495           BASELINK_ACCESS_BINFO (decl) = base;
1496           BASELINK_BINFO (decl)
1497             = lookup_base (base, BINFO_TYPE (BASELINK_BINFO (decl)),
1498                            ba_unique | ba_quiet,
1499                            NULL);
1500         }
1501     }
1502
1503   return decl;
1504 }
1505
1506 \f
1507 /* Walk the class hierarchy within BINFO, in a depth-first traversal.
1508    PRE_FN is called in preorder, while POST_FN is called in postorder.
1509    If PRE_FN returns DFS_SKIP_BASES, child binfos will not be
1510    walked.  If PRE_FN or POST_FN returns a different non-NULL value,
1511    that value is immediately returned and the walk is terminated.  One
1512    of PRE_FN and POST_FN can be NULL.  At each node, PRE_FN and
1513    POST_FN are passed the binfo to examine and the caller's DATA
1514    value.  All paths are walked, thus virtual and morally virtual
1515    binfos can be multiply walked.  */
1516
1517 tree
1518 dfs_walk_all (tree binfo, tree (*pre_fn) (tree, void *),
1519               tree (*post_fn) (tree, void *), void *data)
1520 {
1521   tree rval;
1522   unsigned ix;
1523   tree base_binfo;
1524
1525   /* Call the pre-order walking function.  */
1526   if (pre_fn)
1527     {
1528       rval = pre_fn (binfo, data);
1529       if (rval)
1530         {
1531           if (rval == dfs_skip_bases)
1532             goto skip_bases;
1533           return rval;
1534         }
1535     }
1536
1537   /* Find the next child binfo to walk.  */
1538   for (ix = 0; BINFO_BASE_ITERATE (binfo, ix, base_binfo); ix++)
1539     {
1540       rval = dfs_walk_all (base_binfo, pre_fn, post_fn, data);
1541       if (rval)
1542         return rval;
1543     }
1544
1545  skip_bases:
1546   /* Call the post-order walking function.  */
1547   if (post_fn)
1548     {
1549       rval = post_fn (binfo, data);
1550       gcc_assert (rval != dfs_skip_bases);
1551       return rval;
1552     }
1553
1554   return NULL_TREE;
1555 }
1556
1557 /* Worker for dfs_walk_once.  This behaves as dfs_walk_all, except
1558    that binfos are walked at most once.  */
1559
1560 static tree
1561 dfs_walk_once_r (tree binfo, tree (*pre_fn) (tree, void *),
1562                  tree (*post_fn) (tree, void *), void *data)
1563 {
1564   tree rval;
1565   unsigned ix;
1566   tree base_binfo;
1567
1568   /* Call the pre-order walking function.  */
1569   if (pre_fn)
1570     {
1571       rval = pre_fn (binfo, data);
1572       if (rval)
1573         {
1574           if (rval == dfs_skip_bases)
1575             goto skip_bases;
1576
1577           return rval;
1578         }
1579     }
1580
1581   /* Find the next child binfo to walk.  */
1582   for (ix = 0; BINFO_BASE_ITERATE (binfo, ix, base_binfo); ix++)
1583     {
1584       if (BINFO_VIRTUAL_P (base_binfo))
1585         {
1586           if (BINFO_MARKED (base_binfo))
1587             continue;
1588           BINFO_MARKED (base_binfo) = 1;
1589         }
1590
1591       rval = dfs_walk_once_r (base_binfo, pre_fn, post_fn, data);
1592       if (rval)
1593         return rval;
1594     }
1595
1596  skip_bases:
1597   /* Call the post-order walking function.  */
1598   if (post_fn)
1599     {
1600       rval = post_fn (binfo, data);
1601       gcc_assert (rval != dfs_skip_bases);
1602       return rval;
1603     }
1604
1605   return NULL_TREE;
1606 }
1607
1608 /* Worker for dfs_walk_once. Recursively unmark the virtual base binfos of
1609    BINFO.  */
1610
1611 static void
1612 dfs_unmark_r (tree binfo)
1613 {
1614   unsigned ix;
1615   tree base_binfo;
1616
1617   /* Process the basetypes.  */
1618   for (ix = 0; BINFO_BASE_ITERATE (binfo, ix, base_binfo); ix++)
1619     {
1620       if (BINFO_VIRTUAL_P (base_binfo))
1621         {
1622           if (!BINFO_MARKED (base_binfo))
1623             continue;
1624           BINFO_MARKED (base_binfo) = 0;
1625         }
1626       /* Only walk, if it can contain more virtual bases.  */
1627       if (CLASSTYPE_VBASECLASSES (BINFO_TYPE (base_binfo)))
1628         dfs_unmark_r (base_binfo);
1629     }
1630 }
1631
1632 /* Like dfs_walk_all, except that binfos are not multiply walked.  For
1633    non-diamond shaped hierarchies this is the same as dfs_walk_all.
1634    For diamond shaped hierarchies we must mark the virtual bases, to
1635    avoid multiple walks.  */
1636
1637 tree
1638 dfs_walk_once (tree binfo, tree (*pre_fn) (tree, void *),
1639                tree (*post_fn) (tree, void *), void *data)
1640 {
1641   static int active = 0;  /* We must not be called recursively. */
1642   tree rval;
1643
1644   gcc_assert (pre_fn || post_fn);
1645   gcc_assert (!active);
1646   active++;
1647
1648   if (!CLASSTYPE_DIAMOND_SHAPED_P (BINFO_TYPE (binfo)))
1649     /* We are not diamond shaped, and therefore cannot encounter the
1650        same binfo twice.  */
1651     rval = dfs_walk_all (binfo, pre_fn, post_fn, data);
1652   else
1653     {
1654       rval = dfs_walk_once_r (binfo, pre_fn, post_fn, data);
1655       if (!BINFO_INHERITANCE_CHAIN (binfo))
1656         {
1657           /* We are at the top of the hierarchy, and can use the
1658              CLASSTYPE_VBASECLASSES list for unmarking the virtual
1659              bases.  */
1660           VEC(tree,gc) *vbases;
1661           unsigned ix;
1662           tree base_binfo;
1663
1664           for (vbases = CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo)), ix = 0;
1665                VEC_iterate (tree, vbases, ix, base_binfo); ix++)
1666             BINFO_MARKED (base_binfo) = 0;
1667         }
1668       else
1669         dfs_unmark_r (binfo);
1670     }
1671
1672   active--;
1673
1674   return rval;
1675 }
1676
1677 /* Worker function for dfs_walk_once_accessible.  Behaves like
1678    dfs_walk_once_r, except (a) FRIENDS_P is true if special
1679    access given by the current context should be considered, (b) ONCE
1680    indicates whether bases should be marked during traversal.  */
1681
1682 static tree
1683 dfs_walk_once_accessible_r (tree binfo, bool friends_p, bool once,
1684                             tree (*pre_fn) (tree, void *),
1685                             tree (*post_fn) (tree, void *), void *data)
1686 {
1687   tree rval = NULL_TREE;
1688   unsigned ix;
1689   tree base_binfo;
1690
1691   /* Call the pre-order walking function.  */
1692   if (pre_fn)
1693     {
1694       rval = pre_fn (binfo, data);
1695       if (rval)
1696         {
1697           if (rval == dfs_skip_bases)
1698             goto skip_bases;
1699
1700           return rval;
1701         }
1702     }
1703
1704   /* Find the next child binfo to walk.  */
1705   for (ix = 0; BINFO_BASE_ITERATE (binfo, ix, base_binfo); ix++)
1706     {
1707       bool mark = once && BINFO_VIRTUAL_P (base_binfo);
1708
1709       if (mark && BINFO_MARKED (base_binfo))
1710         continue;
1711
1712       /* If the base is inherited via private or protected
1713          inheritance, then we can't see it, unless we are a friend of
1714          the current binfo.  */
1715       if (BINFO_BASE_ACCESS (binfo, ix) != access_public_node)
1716         {
1717           tree scope;
1718           if (!friends_p)
1719             continue;
1720           scope = current_scope ();
1721           if (!scope
1722               || TREE_CODE (scope) == NAMESPACE_DECL
1723               || !is_friend (BINFO_TYPE (binfo), scope))
1724             continue;
1725         }
1726
1727       if (mark)
1728         BINFO_MARKED (base_binfo) = 1;
1729
1730       rval = dfs_walk_once_accessible_r (base_binfo, friends_p, once,
1731                                          pre_fn, post_fn, data);
1732       if (rval)
1733         return rval;
1734     }
1735
1736  skip_bases:
1737   /* Call the post-order walking function.  */
1738   if (post_fn)
1739     {
1740       rval = post_fn (binfo, data);
1741       gcc_assert (rval != dfs_skip_bases);
1742       return rval;
1743     }
1744
1745   return NULL_TREE;
1746 }
1747
1748 /* Like dfs_walk_once except that only accessible bases are walked.
1749    FRIENDS_P indicates whether friendship of the local context
1750    should be considered when determining accessibility.  */
1751
1752 static tree
1753 dfs_walk_once_accessible (tree binfo, bool friends_p,
1754                             tree (*pre_fn) (tree, void *),
1755                             tree (*post_fn) (tree, void *), void *data)
1756 {
1757   bool diamond_shaped = CLASSTYPE_DIAMOND_SHAPED_P (BINFO_TYPE (binfo));
1758   tree rval = dfs_walk_once_accessible_r (binfo, friends_p, diamond_shaped,
1759                                           pre_fn, post_fn, data);
1760
1761   if (diamond_shaped)
1762     {
1763       if (!BINFO_INHERITANCE_CHAIN (binfo))
1764         {
1765           /* We are at the top of the hierarchy, and can use the
1766              CLASSTYPE_VBASECLASSES list for unmarking the virtual
1767              bases.  */
1768           VEC(tree,gc) *vbases;
1769           unsigned ix;
1770           tree base_binfo;
1771
1772           for (vbases = CLASSTYPE_VBASECLASSES (BINFO_TYPE (binfo)), ix = 0;
1773                VEC_iterate (tree, vbases, ix, base_binfo); ix++)
1774             BINFO_MARKED (base_binfo) = 0;
1775         }
1776       else
1777         dfs_unmark_r (binfo);
1778     }
1779   return rval;
1780 }
1781
1782 /* Check that virtual overrider OVERRIDER is acceptable for base function
1783    BASEFN. Issue diagnostic, and return zero, if unacceptable.  */
1784
1785 static int
1786 check_final_overrider (tree overrider, tree basefn)
1787 {
1788   tree over_type = TREE_TYPE (overrider);
1789   tree base_type = TREE_TYPE (basefn);
1790   tree over_return = TREE_TYPE (over_type);
1791   tree base_return = TREE_TYPE (base_type);
1792   tree over_throw = TYPE_RAISES_EXCEPTIONS (over_type);
1793   tree base_throw = TYPE_RAISES_EXCEPTIONS (base_type);
1794   int fail = 0;
1795
1796   if (DECL_INVALID_OVERRIDER_P (overrider))
1797     return 0;
1798
1799   if (same_type_p (base_return, over_return))
1800     /* OK */;
1801   else if ((CLASS_TYPE_P (over_return) && CLASS_TYPE_P (base_return))
1802            || (TREE_CODE (base_return) == TREE_CODE (over_return)
1803                && POINTER_TYPE_P (base_return)))
1804     {
1805       /* Potentially covariant.  */
1806       unsigned base_quals, over_quals;
1807
1808       fail = !POINTER_TYPE_P (base_return);
1809       if (!fail)
1810         {
1811           fail = cp_type_quals (base_return) != cp_type_quals (over_return);
1812
1813           base_return = TREE_TYPE (base_return);
1814           over_return = TREE_TYPE (over_return);
1815         }
1816       base_quals = cp_type_quals (base_return);
1817       over_quals = cp_type_quals (over_return);
1818
1819       if ((base_quals & over_quals) != over_quals)
1820         fail = 1;
1821
1822       if (CLASS_TYPE_P (base_return) && CLASS_TYPE_P (over_return))
1823         {
1824           tree binfo = lookup_base (over_return, base_return,
1825                                     ba_check | ba_quiet, NULL);
1826
1827           if (!binfo)
1828             fail = 1;
1829         }
1830       else if (!pedantic
1831                && can_convert (TREE_TYPE (base_type), TREE_TYPE (over_type)))
1832         /* GNU extension, allow trivial pointer conversions such as
1833            converting to void *, or qualification conversion.  */
1834         {
1835           /* can_convert will permit user defined conversion from a
1836              (reference to) class type. We must reject them.  */
1837           over_return = non_reference (TREE_TYPE (over_type));
1838           if (CLASS_TYPE_P (over_return))
1839             fail = 2;
1840           else
1841             {
1842               warning (0, "deprecated covariant return type for %q+#D",
1843                              overrider);
1844               warning (0, "  overriding %q+#D", basefn);
1845             }
1846         }
1847       else
1848         fail = 2;
1849     }
1850   else
1851     fail = 2;
1852   if (!fail)
1853     /* OK */;
1854   else
1855     {
1856       if (fail == 1)
1857         {
1858           error ("invalid covariant return type for %q+#D", overrider);
1859           error ("  overriding %q+#D", basefn);
1860         }
1861       else
1862         {
1863           error ("conflicting return type specified for %q+#D", overrider);
1864           error ("  overriding %q+#D", basefn);
1865         }
1866       DECL_INVALID_OVERRIDER_P (overrider) = 1;
1867       return 0;
1868     }
1869
1870   /* Check throw specifier is at least as strict.  */
1871   if (!comp_except_specs (base_throw, over_throw, 0))
1872     {
1873       error ("looser throw specifier for %q+#F", overrider);
1874       error ("  overriding %q+#F", basefn);
1875       DECL_INVALID_OVERRIDER_P (overrider) = 1;
1876       return 0;
1877     }
1878
1879   /* Check for conflicting type attributes.  */
1880   if (!targetm.comp_type_attributes (over_type, base_type))
1881     {
1882       error ("conflicting type attributes specified for %q+#D", overrider);
1883       error ("  overriding %q+#D", basefn);
1884       DECL_INVALID_OVERRIDER_P (overrider) = 1;
1885       return 0;
1886     }
1887
1888   if (DECL_DELETED_FN (basefn) != DECL_DELETED_FN (overrider))
1889     {
1890       if (DECL_DELETED_FN (overrider))
1891         {
1892           error ("deleted function %q+D", overrider);
1893           error ("overriding non-deleted function %q+D", basefn);
1894         }
1895       else
1896         {
1897           error ("non-deleted function %q+D", overrider);
1898           error ("overriding deleted function %q+D", basefn);
1899         }
1900       return 0;
1901     }
1902   return 1;
1903 }
1904
1905 /* Given a class TYPE, and a function decl FNDECL, look for
1906    virtual functions in TYPE's hierarchy which FNDECL overrides.
1907    We do not look in TYPE itself, only its bases.
1908
1909    Returns nonzero, if we find any. Set FNDECL's DECL_VIRTUAL_P, if we
1910    find that it overrides anything.
1911
1912    We check that every function which is overridden, is correctly
1913    overridden.  */
1914
1915 int
1916 look_for_overrides (tree type, tree fndecl)
1917 {
1918   tree binfo = TYPE_BINFO (type);
1919   tree base_binfo;
1920   int ix;
1921   int found = 0;
1922
1923   for (ix = 0; BINFO_BASE_ITERATE (binfo, ix, base_binfo); ix++)
1924     {
1925       tree basetype = BINFO_TYPE (base_binfo);
1926
1927       if (TYPE_POLYMORPHIC_P (basetype))
1928         found += look_for_overrides_r (basetype, fndecl);
1929     }
1930   return found;
1931 }
1932
1933 /* Look in TYPE for virtual functions with the same signature as
1934    FNDECL.  */
1935
1936 tree
1937 look_for_overrides_here (tree type, tree fndecl)
1938 {
1939   int ix;
1940
1941   /* If there are no methods in TYPE (meaning that only implicitly
1942      declared methods will ever be provided for TYPE), then there are
1943      no virtual functions.  */
1944   if (!CLASSTYPE_METHOD_VEC (type))
1945     return NULL_TREE;
1946
1947   if (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (fndecl))
1948     ix = CLASSTYPE_DESTRUCTOR_SLOT;
1949   else
1950     ix = lookup_fnfields_1 (type, DECL_NAME (fndecl));
1951   if (ix >= 0)
1952     {
1953       tree fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (type), ix);
1954
1955       for (; fns; fns = OVL_NEXT (fns))
1956         {
1957           tree fn = OVL_CURRENT (fns);
1958
1959           if (!DECL_VIRTUAL_P (fn))
1960             /* Not a virtual.  */;
1961           else if (DECL_CONTEXT (fn) != type)
1962             /* Introduced with a using declaration.  */;
1963           else if (DECL_STATIC_FUNCTION_P (fndecl))
1964             {
1965               tree btypes = TYPE_ARG_TYPES (TREE_TYPE (fn));
1966               tree dtypes = TYPE_ARG_TYPES (TREE_TYPE (fndecl));
1967               if (compparms (TREE_CHAIN (btypes), dtypes))
1968                 return fn;
1969             }
1970           else if (same_signature_p (fndecl, fn))
1971             return fn;
1972         }
1973     }
1974   return NULL_TREE;
1975 }
1976
1977 /* Look in TYPE for virtual functions overridden by FNDECL. Check both
1978    TYPE itself and its bases.  */
1979
1980 static int
1981 look_for_overrides_r (tree type, tree fndecl)
1982 {
1983   tree fn = look_for_overrides_here (type, fndecl);
1984   if (fn)
1985     {
1986       if (DECL_STATIC_FUNCTION_P (fndecl))
1987         {
1988           /* A static member function cannot match an inherited
1989              virtual member function.  */
1990           error ("%q+#D cannot be declared", fndecl);
1991           error ("  since %q+#D declared in base class", fn);
1992         }
1993       else
1994         {
1995           /* It's definitely virtual, even if not explicitly set.  */
1996           DECL_VIRTUAL_P (fndecl) = 1;
1997           check_final_overrider (fndecl, fn);
1998         }
1999       return 1;
2000     }
2001
2002   /* We failed to find one declared in this class. Look in its bases.  */
2003   return look_for_overrides (type, fndecl);
2004 }
2005
2006 /* Called via dfs_walk from dfs_get_pure_virtuals.  */
2007
2008 static tree
2009 dfs_get_pure_virtuals (tree binfo, void *data)
2010 {
2011   tree type = (tree) data;
2012
2013   /* We're not interested in primary base classes; the derived class
2014      of which they are a primary base will contain the information we
2015      need.  */
2016   if (!BINFO_PRIMARY_P (binfo))
2017     {
2018       tree virtuals;
2019
2020       for (virtuals = BINFO_VIRTUALS (binfo);
2021            virtuals;
2022            virtuals = TREE_CHAIN (virtuals))
2023         if (DECL_PURE_VIRTUAL_P (BV_FN (virtuals)))
2024           VEC_safe_push (tree, gc, CLASSTYPE_PURE_VIRTUALS (type),
2025                          BV_FN (virtuals));
2026     }
2027
2028   return NULL_TREE;
2029 }
2030
2031 /* Set CLASSTYPE_PURE_VIRTUALS for TYPE.  */
2032
2033 void
2034 get_pure_virtuals (tree type)
2035 {
2036   /* Clear the CLASSTYPE_PURE_VIRTUALS list; whatever is already there
2037      is going to be overridden.  */
2038   CLASSTYPE_PURE_VIRTUALS (type) = NULL;
2039   /* Now, run through all the bases which are not primary bases, and
2040      collect the pure virtual functions.  We look at the vtable in
2041      each class to determine what pure virtual functions are present.
2042      (A primary base is not interesting because the derived class of
2043      which it is a primary base will contain vtable entries for the
2044      pure virtuals in the base class.  */
2045   dfs_walk_once (TYPE_BINFO (type), NULL, dfs_get_pure_virtuals, type);
2046 }
2047 \f
2048 /* Debug info for C++ classes can get very large; try to avoid
2049    emitting it everywhere.
2050
2051    Note that this optimization wins even when the target supports
2052    BINCL (if only slightly), and reduces the amount of work for the
2053    linker.  */
2054
2055 void
2056 maybe_suppress_debug_info (tree t)
2057 {
2058   if (write_symbols == NO_DEBUG)
2059     return;
2060
2061   /* We might have set this earlier in cp_finish_decl.  */
2062   TYPE_DECL_SUPPRESS_DEBUG (TYPE_MAIN_DECL (t)) = 0;
2063
2064   /* Always emit the information for each class every time. */
2065   if (flag_emit_class_debug_always)
2066     return;
2067
2068   /* If we already know how we're handling this class, handle debug info
2069      the same way.  */
2070   if (CLASSTYPE_INTERFACE_KNOWN (t))
2071     {
2072       if (CLASSTYPE_INTERFACE_ONLY (t))
2073         TYPE_DECL_SUPPRESS_DEBUG (TYPE_MAIN_DECL (t)) = 1;
2074       /* else don't set it.  */
2075     }
2076   /* If the class has a vtable, write out the debug info along with
2077      the vtable.  */
2078   else if (TYPE_CONTAINS_VPTR_P (t))
2079     TYPE_DECL_SUPPRESS_DEBUG (TYPE_MAIN_DECL (t)) = 1;
2080
2081   /* Otherwise, just emit the debug info normally.  */
2082 }
2083
2084 /* Note that we want debugging information for a base class of a class
2085    whose vtable is being emitted.  Normally, this would happen because
2086    calling the constructor for a derived class implies calling the
2087    constructors for all bases, which involve initializing the
2088    appropriate vptr with the vtable for the base class; but in the
2089    presence of optimization, this initialization may be optimized
2090    away, so we tell finish_vtable_vardecl that we want the debugging
2091    information anyway.  */
2092
2093 static tree
2094 dfs_debug_mark (tree binfo, void *data ATTRIBUTE_UNUSED)
2095 {
2096   tree t = BINFO_TYPE (binfo);
2097
2098   if (CLASSTYPE_DEBUG_REQUESTED (t))
2099     return dfs_skip_bases;
2100
2101   CLASSTYPE_DEBUG_REQUESTED (t) = 1;
2102
2103   return NULL_TREE;
2104 }
2105
2106 /* Write out the debugging information for TYPE, whose vtable is being
2107    emitted.  Also walk through our bases and note that we want to
2108    write out information for them.  This avoids the problem of not
2109    writing any debug info for intermediate basetypes whose
2110    constructors, and thus the references to their vtables, and thus
2111    the vtables themselves, were optimized away.  */
2112
2113 void
2114 note_debug_info_needed (tree type)
2115 {
2116   if (TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (type)))
2117     {
2118       TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (type)) = 0;
2119       rest_of_type_compilation (type, toplevel_bindings_p ());
2120     }
2121
2122   dfs_walk_all (TYPE_BINFO (type), dfs_debug_mark, NULL, 0);
2123 }
2124 \f
2125 void
2126 print_search_statistics (void)
2127 {
2128 #ifdef GATHER_STATISTICS
2129   fprintf (stderr, "%d fields searched in %d[%d] calls to lookup_field[_1]\n",
2130            n_fields_searched, n_calls_lookup_field, n_calls_lookup_field_1);
2131   fprintf (stderr, "%d fnfields searched in %d calls to lookup_fnfields\n",
2132            n_outer_fields_searched, n_calls_lookup_fnfields);
2133   fprintf (stderr, "%d calls to get_base_type\n", n_calls_get_base_type);
2134 #else /* GATHER_STATISTICS */
2135   fprintf (stderr, "no search statistics\n");
2136 #endif /* GATHER_STATISTICS */
2137 }
2138
2139 void
2140 reinit_search_statistics (void)
2141 {
2142 #ifdef GATHER_STATISTICS
2143   n_fields_searched = 0;
2144   n_calls_lookup_field = 0, n_calls_lookup_field_1 = 0;
2145   n_calls_lookup_fnfields = 0, n_calls_lookup_fnfields_1 = 0;
2146   n_calls_get_base_type = 0;
2147   n_outer_fields_searched = 0;
2148   n_contexts_saved = 0;
2149 #endif /* GATHER_STATISTICS */
2150 }
2151
2152 /* Helper for lookup_conversions_r.  TO_TYPE is the type converted to
2153    by a conversion op in base BINFO.  VIRTUAL_DEPTH is nonzero if
2154    BINFO is morally virtual, and VIRTUALNESS is nonzero if virtual
2155    bases have been encountered already in the tree walk.  PARENT_CONVS
2156    is the list of lists of conversion functions that could hide CONV
2157    and OTHER_CONVS is the list of lists of conversion functions that
2158    could hide or be hidden by CONV, should virtualness be involved in
2159    the hierarchy.  Merely checking the conversion op's name is not
2160    enough because two conversion operators to the same type can have
2161    different names.  Return nonzero if we are visible.  */
2162
2163 static int
2164 check_hidden_convs (tree binfo, int virtual_depth, int virtualness,
2165                     tree to_type, tree parent_convs, tree other_convs)
2166 {
2167   tree level, probe;
2168
2169   /* See if we are hidden by a parent conversion.  */
2170   for (level = parent_convs; level; level = TREE_CHAIN (level))
2171     for (probe = TREE_VALUE (level); probe; probe = TREE_CHAIN (probe))
2172       if (same_type_p (to_type, TREE_TYPE (probe)))
2173         return 0;
2174
2175   if (virtual_depth || virtualness)
2176     {
2177      /* In a virtual hierarchy, we could be hidden, or could hide a
2178         conversion function on the other_convs list.  */
2179       for (level = other_convs; level; level = TREE_CHAIN (level))
2180         {
2181           int we_hide_them;
2182           int they_hide_us;
2183           tree *prev, other;
2184
2185           if (!(virtual_depth || TREE_STATIC (level)))
2186             /* Neither is morally virtual, so cannot hide each other.  */
2187             continue;
2188
2189           if (!TREE_VALUE (level))
2190             /* They evaporated away already.  */
2191             continue;
2192
2193           they_hide_us = (virtual_depth
2194                           && original_binfo (binfo, TREE_PURPOSE (level)));
2195           we_hide_them = (!they_hide_us && TREE_STATIC (level)
2196                           && original_binfo (TREE_PURPOSE (level), binfo));
2197
2198           if (!(we_hide_them || they_hide_us))
2199             /* Neither is within the other, so no hiding can occur.  */
2200             continue;
2201
2202           for (prev = &TREE_VALUE (level), other = *prev; other;)
2203             {
2204               if (same_type_p (to_type, TREE_TYPE (other)))
2205                 {
2206                   if (they_hide_us)
2207                     /* We are hidden.  */
2208                     return 0;
2209
2210                   if (we_hide_them)
2211                     {
2212                       /* We hide the other one.  */
2213                       other = TREE_CHAIN (other);
2214                       *prev = other;
2215                       continue;
2216                     }
2217                 }
2218               prev = &TREE_CHAIN (other);
2219               other = *prev;
2220             }
2221         }
2222     }
2223   return 1;
2224 }
2225
2226 /* Helper for lookup_conversions_r.  PARENT_CONVS is a list of lists
2227    of conversion functions, the first slot will be for the current
2228    binfo, if MY_CONVS is non-NULL.  CHILD_CONVS is the list of lists
2229    of conversion functions from children of the current binfo,
2230    concatenated with conversions from elsewhere in the hierarchy --
2231    that list begins with OTHER_CONVS.  Return a single list of lists
2232    containing only conversions from the current binfo and its
2233    children.  */
2234
2235 static tree
2236 split_conversions (tree my_convs, tree parent_convs,
2237                    tree child_convs, tree other_convs)
2238 {
2239   tree t;
2240   tree prev;
2241
2242   /* Remove the original other_convs portion from child_convs.  */
2243   for (prev = NULL, t = child_convs;
2244        t != other_convs; prev = t, t = TREE_CHAIN (t))
2245     continue;
2246
2247   if (prev)
2248     TREE_CHAIN (prev) = NULL_TREE;
2249   else
2250     child_convs = NULL_TREE;
2251
2252   /* Attach the child convs to any we had at this level.  */
2253   if (my_convs)
2254     {
2255       my_convs = parent_convs;
2256       TREE_CHAIN (my_convs) = child_convs;
2257     }
2258   else
2259     my_convs = child_convs;
2260
2261   return my_convs;
2262 }
2263
2264 /* Worker for lookup_conversions.  Lookup conversion functions in
2265    BINFO and its children.  VIRTUAL_DEPTH is nonzero, if BINFO is in
2266    a morally virtual base, and VIRTUALNESS is nonzero, if we've
2267    encountered virtual bases already in the tree walk.  PARENT_CONVS &
2268    PARENT_TPL_CONVS are lists of list of conversions within parent
2269    binfos.  OTHER_CONVS and OTHER_TPL_CONVS are conversions found
2270    elsewhere in the tree.  Return the conversions found within this
2271    portion of the graph in CONVS and TPL_CONVS.  Return nonzero is we
2272    encountered virtualness.  We keep template and non-template
2273    conversions separate, to avoid unnecessary type comparisons.
2274
2275    The located conversion functions are held in lists of lists.  The
2276    TREE_VALUE of the outer list is the list of conversion functions
2277    found in a particular binfo.  The TREE_PURPOSE of both the outer
2278    and inner lists is the binfo at which those conversions were
2279    found.  TREE_STATIC is set for those lists within of morally
2280    virtual binfos.  The TREE_VALUE of the inner list is the conversion
2281    function or overload itself.  The TREE_TYPE of each inner list node
2282    is the converted-to type.  */
2283
2284 static int
2285 lookup_conversions_r (tree binfo,
2286                       int virtual_depth, int virtualness,
2287                       tree parent_convs, tree parent_tpl_convs,
2288                       tree other_convs, tree other_tpl_convs,
2289                       tree *convs, tree *tpl_convs)
2290 {
2291   int my_virtualness = 0;
2292   tree my_convs = NULL_TREE;
2293   tree my_tpl_convs = NULL_TREE;
2294   tree child_convs = NULL_TREE;
2295   tree child_tpl_convs = NULL_TREE;
2296   unsigned i;
2297   tree base_binfo;
2298   VEC(tree,gc) *method_vec = CLASSTYPE_METHOD_VEC (BINFO_TYPE (binfo));
2299   tree conv;
2300
2301   /* If we have no conversion operators, then don't look.  */
2302   if (!TYPE_HAS_CONVERSION (BINFO_TYPE (binfo)))
2303     {
2304       *convs = *tpl_convs = NULL_TREE;
2305
2306       return 0;
2307     }
2308
2309   if (BINFO_VIRTUAL_P (binfo))
2310     virtual_depth++;
2311
2312   /* First, locate the unhidden ones at this level.  */
2313   for (i = CLASSTYPE_FIRST_CONVERSION_SLOT;
2314        VEC_iterate (tree, method_vec, i, conv);
2315        ++i)
2316     {
2317       tree cur = OVL_CURRENT (conv);
2318
2319       if (!DECL_CONV_FN_P (cur))
2320         break;
2321
2322       if (TREE_CODE (cur) == TEMPLATE_DECL)
2323         {
2324           /* Only template conversions can be overloaded, and we must
2325              flatten them out and check each one individually.  */
2326           tree tpls;
2327
2328           for (tpls = conv; tpls; tpls = OVL_NEXT (tpls))
2329             {
2330               tree tpl = OVL_CURRENT (tpls);
2331               tree type = DECL_CONV_FN_TYPE (tpl);
2332
2333               if (check_hidden_convs (binfo, virtual_depth, virtualness,
2334                                       type, parent_tpl_convs, other_tpl_convs))
2335                 {
2336                   my_tpl_convs = tree_cons (binfo, tpl, my_tpl_convs);
2337                   TREE_TYPE (my_tpl_convs) = type;
2338                   if (virtual_depth)
2339                     {
2340                       TREE_STATIC (my_tpl_convs) = 1;
2341                       my_virtualness = 1;
2342                     }
2343                 }
2344             }
2345         }
2346       else
2347         {
2348           tree name = DECL_NAME (cur);
2349
2350           if (!IDENTIFIER_MARKED (name))
2351             {
2352               tree type = DECL_CONV_FN_TYPE (cur);
2353
2354               if (check_hidden_convs (binfo, virtual_depth, virtualness,
2355                                       type, parent_convs, other_convs))
2356                 {
2357                   my_convs = tree_cons (binfo, conv, my_convs);
2358                   TREE_TYPE (my_convs) = type;
2359                   if (virtual_depth)
2360                     {
2361                       TREE_STATIC (my_convs) = 1;
2362                       my_virtualness = 1;
2363                     }
2364                   IDENTIFIER_MARKED (name) = 1;
2365                 }
2366             }
2367         }
2368     }
2369
2370   if (my_convs)
2371     {
2372       parent_convs = tree_cons (binfo, my_convs, parent_convs);
2373       if (virtual_depth)
2374         TREE_STATIC (parent_convs) = 1;
2375     }
2376
2377   if (my_tpl_convs)
2378     {
2379       parent_tpl_convs = tree_cons (binfo, my_tpl_convs, parent_tpl_convs);
2380       if (virtual_depth)
2381         TREE_STATIC (parent_tpl_convs) = 1;
2382     }
2383
2384   child_convs = other_convs;
2385   child_tpl_convs = other_tpl_convs;
2386
2387   /* Now iterate over each base, looking for more conversions.  */
2388   for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
2389     {
2390       tree base_convs, base_tpl_convs;
2391       unsigned base_virtualness;
2392
2393       base_virtualness = lookup_conversions_r (base_binfo,
2394                                                virtual_depth, virtualness,
2395                                                parent_convs, parent_tpl_convs,
2396                                                child_convs, child_tpl_convs,
2397                                                &base_convs, &base_tpl_convs);
2398       if (base_virtualness)
2399         my_virtualness = virtualness = 1;
2400       child_convs = chainon (base_convs, child_convs);
2401       child_tpl_convs = chainon (base_tpl_convs, child_tpl_convs);
2402     }
2403
2404   /* Unmark the conversions found at this level  */
2405   for (conv = my_convs; conv; conv = TREE_CHAIN (conv))
2406     IDENTIFIER_MARKED (DECL_NAME (OVL_CURRENT (TREE_VALUE (conv)))) = 0;
2407
2408   *convs = split_conversions (my_convs, parent_convs,
2409                               child_convs, other_convs);
2410   *tpl_convs = split_conversions (my_tpl_convs, parent_tpl_convs,
2411                                   child_tpl_convs, other_tpl_convs);
2412
2413   return my_virtualness;
2414 }
2415
2416 /* Return a TREE_LIST containing all the non-hidden user-defined
2417    conversion functions for TYPE (and its base-classes).  The
2418    TREE_VALUE of each node is the FUNCTION_DECL of the conversion
2419    function.  The TREE_PURPOSE is the BINFO from which the conversion
2420    functions in this node were selected.  This function is effectively
2421    performing a set of member lookups as lookup_fnfield does, but
2422    using the type being converted to as the unique key, rather than the
2423    field name.
2424    If LOOKUP_TEMPLATE_CONVS_P is TRUE, the returned TREE_LIST contains
2425    the non-hidden user-defined template conversion functions too.  */
2426
2427 tree
2428 lookup_conversions (tree type,
2429                     bool lookup_template_convs_p)
2430 {
2431   tree convs, tpl_convs;
2432   tree list = NULL_TREE;
2433
2434   complete_type (type);
2435   if (!TYPE_BINFO (type))
2436     return NULL_TREE;
2437
2438   lookup_conversions_r (TYPE_BINFO (type), 0, 0,
2439                         NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE,
2440                         &convs, &tpl_convs);
2441
2442   /* Flatten the list-of-lists */
2443   for (; convs; convs = TREE_CHAIN (convs))
2444     {
2445       tree probe, next;
2446
2447       for (probe = TREE_VALUE (convs); probe; probe = next)
2448         {
2449           next = TREE_CHAIN (probe);
2450
2451           TREE_CHAIN (probe) = list;
2452           list = probe;
2453         }
2454     }
2455
2456   if (lookup_template_convs_p == false)
2457     tpl_convs = NULL_TREE;
2458
2459   for (; tpl_convs; tpl_convs = TREE_CHAIN (tpl_convs))
2460     {
2461       tree probe, next;
2462
2463       for (probe = TREE_VALUE (tpl_convs); probe; probe = next)
2464         {
2465           next = TREE_CHAIN (probe);
2466
2467           TREE_CHAIN (probe) = list;
2468           list = probe;
2469         }
2470     }
2471
2472   return list;
2473 }
2474
2475 /* Returns the binfo of the first direct or indirect virtual base derived
2476    from BINFO, or NULL if binfo is not via virtual.  */
2477
2478 tree
2479 binfo_from_vbase (tree binfo)
2480 {
2481   for (; binfo; binfo = BINFO_INHERITANCE_CHAIN (binfo))
2482     {
2483       if (BINFO_VIRTUAL_P (binfo))
2484         return binfo;
2485     }
2486   return NULL_TREE;
2487 }
2488
2489 /* Returns the binfo of the first direct or indirect virtual base derived
2490    from BINFO up to the TREE_TYPE, LIMIT, or NULL if binfo is not
2491    via virtual.  */
2492
2493 tree
2494 binfo_via_virtual (tree binfo, tree limit)
2495 {
2496   if (limit && !CLASSTYPE_VBASECLASSES (limit))
2497     /* LIMIT has no virtual bases, so BINFO cannot be via one.  */
2498     return NULL_TREE;
2499
2500   for (; binfo && !SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), limit);
2501        binfo = BINFO_INHERITANCE_CHAIN (binfo))
2502     {
2503       if (BINFO_VIRTUAL_P (binfo))
2504         return binfo;
2505     }
2506   return NULL_TREE;
2507 }
2508
2509 /* BINFO is a base binfo in the complete type BINFO_TYPE (HERE).
2510    Find the equivalent binfo within whatever graph HERE is located.
2511    This is the inverse of original_binfo.  */
2512
2513 tree
2514 copied_binfo (tree binfo, tree here)
2515 {
2516   tree result = NULL_TREE;
2517
2518   if (BINFO_VIRTUAL_P (binfo))
2519     {
2520       tree t;
2521
2522       for (t = here; BINFO_INHERITANCE_CHAIN (t);
2523            t = BINFO_INHERITANCE_CHAIN (t))
2524         continue;
2525
2526       result = binfo_for_vbase (BINFO_TYPE (binfo), BINFO_TYPE (t));
2527     }
2528   else if (BINFO_INHERITANCE_CHAIN (binfo))
2529     {
2530       tree cbinfo;
2531       tree base_binfo;
2532       int ix;
2533
2534       cbinfo = copied_binfo (BINFO_INHERITANCE_CHAIN (binfo), here);
2535       for (ix = 0; BINFO_BASE_ITERATE (cbinfo, ix, base_binfo); ix++)
2536         if (SAME_BINFO_TYPE_P (BINFO_TYPE (base_binfo), BINFO_TYPE (binfo)))
2537           {
2538             result = base_binfo;
2539             break;
2540           }
2541     }
2542   else
2543     {
2544       gcc_assert (SAME_BINFO_TYPE_P (BINFO_TYPE (here), BINFO_TYPE (binfo)));
2545       result = here;
2546     }
2547
2548   gcc_assert (result);
2549   return result;
2550 }
2551
2552 tree
2553 binfo_for_vbase (tree base, tree t)
2554 {
2555   unsigned ix;
2556   tree binfo;
2557   VEC(tree,gc) *vbases;
2558
2559   for (vbases = CLASSTYPE_VBASECLASSES (t), ix = 0;
2560        VEC_iterate (tree, vbases, ix, binfo); ix++)
2561     if (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), base))
2562       return binfo;
2563   return NULL;
2564 }
2565
2566 /* BINFO is some base binfo of HERE, within some other
2567    hierarchy. Return the equivalent binfo, but in the hierarchy
2568    dominated by HERE.  This is the inverse of copied_binfo.  If BINFO
2569    is not a base binfo of HERE, returns NULL_TREE.  */
2570
2571 tree
2572 original_binfo (tree binfo, tree here)
2573 {
2574   tree result = NULL;
2575
2576   if (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), BINFO_TYPE (here)))
2577     result = here;
2578   else if (BINFO_VIRTUAL_P (binfo))
2579     result = (CLASSTYPE_VBASECLASSES (BINFO_TYPE (here))
2580               ? binfo_for_vbase (BINFO_TYPE (binfo), BINFO_TYPE (here))
2581               : NULL_TREE);
2582   else if (BINFO_INHERITANCE_CHAIN (binfo))
2583     {
2584       tree base_binfos;
2585
2586       base_binfos = original_binfo (BINFO_INHERITANCE_CHAIN (binfo), here);
2587       if (base_binfos)
2588         {
2589           int ix;
2590           tree base_binfo;
2591
2592           for (ix = 0; (base_binfo = BINFO_BASE_BINFO (base_binfos, ix)); ix++)
2593             if (SAME_BINFO_TYPE_P (BINFO_TYPE (base_binfo),
2594                                    BINFO_TYPE (binfo)))
2595               {
2596                 result = base_binfo;
2597                 break;
2598               }
2599         }
2600     }
2601
2602   return result;
2603 }
2604