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