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