OSDN Git Service

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