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