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