OSDN Git Service

cp:
[pf3gnuchains/gcc-fork.git] / gcc / cp / name-lookup.c
1 /* Definitions for C++ name lookup routines.
2    Copyright (C) 2003, 2004, 2005  Free Software Foundation, Inc.
3    Contributed by Gabriel Dos Reis <gdr@integrable-solutions.net>
4
5 This file is part of GCC.
6
7 GCC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
10 any later version.
11
12 GCC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING.  If not, write to
19 the Free Software Foundation, 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA.  */
21
22 #include "config.h"
23 #include "system.h"
24 #include "coretypes.h"
25 #include "tm.h"
26 #include "flags.h"
27 #include "tree.h"
28 #include "cp-tree.h"
29 #include "name-lookup.h"
30 #include "timevar.h"
31 #include "toplev.h"
32 #include "diagnostic.h"
33 #include "debug.h"
34
35 /* The bindings for a particular name in a particular scope.  */
36
37 struct scope_binding {
38   tree value;
39   tree type;
40 };
41 #define EMPTY_SCOPE_BINDING { NULL_TREE, NULL_TREE }
42
43 static cxx_scope *innermost_nonclass_level (void);
44 static tree select_decl (const struct scope_binding *, int);
45 static cxx_binding *binding_for_name (cxx_scope *, tree);
46 static tree lookup_name_innermost_nonclass_level (tree);
47 static tree push_overloaded_decl (tree, int);
48 static bool lookup_using_namespace (tree, struct scope_binding *, tree,
49                                     tree, int);
50 static bool qualified_lookup_using_namespace (tree, tree,
51                                               struct scope_binding *, int);
52 static tree lookup_type_current_level (tree);
53 static tree push_using_directive (tree);
54 static void cp_emit_debug_info_for_using (tree, tree);
55
56 /* The :: namespace.  */
57
58 tree global_namespace;
59
60 /* The name of the anonymous namespace, throughout this translation
61    unit.  */
62 static GTY(()) tree anonymous_namespace_name;
63
64
65 /* Compute the chain index of a binding_entry given the HASH value of its
66    name and the total COUNT of chains.  COUNT is assumed to be a power
67    of 2.  */
68
69 #define ENTRY_INDEX(HASH, COUNT) (((HASH) >> 3) & ((COUNT) - 1))
70
71 /* A free list of "binding_entry"s awaiting for re-use.  */
72
73 static GTY((deletable)) binding_entry free_binding_entry = NULL;
74
75 /* Create a binding_entry object for (NAME, TYPE).  */
76
77 static inline binding_entry
78 binding_entry_make (tree name, tree type)
79 {
80   binding_entry entry;
81
82   if (free_binding_entry)
83     {
84       entry = free_binding_entry;
85       free_binding_entry = entry->chain;
86     }
87   else
88     entry = GGC_NEW (struct binding_entry_s);
89
90   entry->name = name;
91   entry->type = type;
92   entry->chain = NULL;
93
94   return entry;
95 }
96
97 /* Put ENTRY back on the free list.  */
98 #if 0
99 static inline void
100 binding_entry_free (binding_entry entry)
101 {
102   entry->name = NULL;
103   entry->type = NULL;
104   entry->chain = free_binding_entry;
105   free_binding_entry = entry;
106 }
107 #endif
108
109 /* The datatype used to implement the mapping from names to types at
110    a given scope.  */
111 struct binding_table_s GTY(())
112 {
113   /* Array of chains of "binding_entry"s  */
114   binding_entry * GTY((length ("%h.chain_count"))) chain;
115
116   /* The number of chains in this table.  This is the length of the
117      the member "chain" considered as an array.  */
118   size_t chain_count;
119
120   /* Number of "binding_entry"s in this table.  */
121   size_t entry_count;
122 };
123
124 /* Construct TABLE with an initial CHAIN_COUNT.  */
125
126 static inline void
127 binding_table_construct (binding_table table, size_t chain_count)
128 {
129   table->chain_count = chain_count;
130   table->entry_count = 0;
131   table->chain = GGC_CNEWVEC (binding_entry, table->chain_count);
132 }
133
134 /* Make TABLE's entries ready for reuse.  */
135 #if 0
136 static void
137 binding_table_free (binding_table table)
138 {
139   size_t i;
140   size_t count;
141
142   if (table == NULL)
143     return;
144
145   for (i = 0, count = table->chain_count; i < count; ++i)
146     {
147       binding_entry temp = table->chain[i];
148       while (temp != NULL)
149         {
150           binding_entry entry = temp;
151           temp = entry->chain;
152           binding_entry_free (entry);
153         }
154       table->chain[i] = NULL;
155     }
156   table->entry_count = 0;
157 }
158 #endif
159
160 /* Allocate a table with CHAIN_COUNT, assumed to be a power of two.  */
161
162 static inline binding_table
163 binding_table_new (size_t chain_count)
164 {
165   binding_table table = GGC_NEW (struct binding_table_s);
166   table->chain = NULL;
167   binding_table_construct (table, chain_count);
168   return table;
169 }
170
171 /* Expand TABLE to twice its current chain_count.  */
172
173 static void
174 binding_table_expand (binding_table table)
175 {
176   const size_t old_chain_count = table->chain_count;
177   const size_t old_entry_count = table->entry_count;
178   const size_t new_chain_count = 2 * old_chain_count;
179   binding_entry *old_chains = table->chain;
180   size_t i;
181
182   binding_table_construct (table, new_chain_count);
183   for (i = 0; i < old_chain_count; ++i)
184     {
185       binding_entry entry = old_chains[i];
186       for (; entry != NULL; entry = old_chains[i])
187         {
188           const unsigned int hash = IDENTIFIER_HASH_VALUE (entry->name);
189           const size_t j = ENTRY_INDEX (hash, new_chain_count);
190
191           old_chains[i] = entry->chain;
192           entry->chain = table->chain[j];
193           table->chain[j] = entry;
194         }
195     }
196   table->entry_count = old_entry_count;
197 }
198
199 /* Insert a binding for NAME to TYPE into TABLE.  */
200
201 static void
202 binding_table_insert (binding_table table, tree name, tree type)
203 {
204   const unsigned int hash = IDENTIFIER_HASH_VALUE (name);
205   const size_t i = ENTRY_INDEX (hash, table->chain_count);
206   binding_entry entry = binding_entry_make (name, type);
207
208   entry->chain = table->chain[i];
209   table->chain[i] = entry;
210   ++table->entry_count;
211
212   if (3 * table->chain_count < 5 * table->entry_count)
213     binding_table_expand (table);
214 }
215
216 /* Return the binding_entry, if any, that maps NAME.  */
217
218 binding_entry
219 binding_table_find (binding_table table, tree name)
220 {
221   const unsigned int hash = IDENTIFIER_HASH_VALUE (name);
222   binding_entry entry = table->chain[ENTRY_INDEX (hash, table->chain_count)];
223
224   while (entry != NULL && entry->name != name)
225     entry = entry->chain;
226
227   return entry;
228 }
229
230 /* Apply PROC -- with DATA -- to all entries in TABLE.  */
231
232 void
233 binding_table_foreach (binding_table table, bt_foreach_proc proc, void *data)
234 {
235   const size_t chain_count = table->chain_count;
236   size_t i;
237
238   for (i = 0; i < chain_count; ++i)
239     {
240       binding_entry entry = table->chain[i];
241       for (; entry != NULL; entry = entry->chain)
242         proc (entry, data);
243     }
244 }
245 \f
246 #ifndef ENABLE_SCOPE_CHECKING
247 #  define ENABLE_SCOPE_CHECKING 0
248 #else
249 #  define ENABLE_SCOPE_CHECKING 1
250 #endif
251
252 /* A free list of "cxx_binding"s, connected by their PREVIOUS.  */
253
254 static GTY((deletable)) cxx_binding *free_bindings;
255
256 /* Initialize VALUE and TYPE field for BINDING, and set the PREVIOUS
257    field to NULL.  */
258
259 static inline void
260 cxx_binding_init (cxx_binding *binding, tree value, tree type)
261 {
262   binding->value = value;
263   binding->type = type;
264   binding->previous = NULL;
265 }
266
267 /* (GC)-allocate a binding object with VALUE and TYPE member initialized.  */
268
269 static cxx_binding *
270 cxx_binding_make (tree value, tree type)
271 {
272   cxx_binding *binding;
273   if (free_bindings)
274     {
275       binding = free_bindings;
276       free_bindings = binding->previous;
277     }
278   else
279     binding = GGC_NEW (cxx_binding);
280
281   cxx_binding_init (binding, value, type);
282
283   return binding;
284 }
285
286 /* Put BINDING back on the free list.  */
287
288 static inline void
289 cxx_binding_free (cxx_binding *binding)
290 {
291   binding->scope = NULL;
292   binding->previous = free_bindings;
293   free_bindings = binding;
294 }
295
296 /* Create a new binding for NAME (with the indicated VALUE and TYPE
297    bindings) in the class scope indicated by SCOPE.  */
298
299 static cxx_binding *
300 new_class_binding (tree name, tree value, tree type, cxx_scope *scope)
301 {
302   cp_class_binding *cb;
303   cxx_binding *binding;
304   
305   if (VEC_length (cp_class_binding, scope->class_shadowed))
306     {
307       cp_class_binding *old_base;
308       old_base = VEC_index (cp_class_binding, scope->class_shadowed, 0);
309       if (VEC_reserve (cp_class_binding, scope->class_shadowed, -1))
310         {
311           /* Fixup the current bindings, as they might have moved.  */
312           size_t i;
313           
314           for (i = 0;
315                VEC_iterate (cp_class_binding, scope->class_shadowed, i, cb);
316                i++)
317             {
318               cxx_binding **b;
319               b = &IDENTIFIER_BINDING (cb->identifier);
320               while (*b != &old_base[i].base)
321                 b = &((*b)->previous);
322               *b = &cb->base;
323             }
324         }
325       cb = VEC_quick_push (cp_class_binding, scope->class_shadowed, NULL);
326     }
327   else
328     cb = VEC_safe_push (cp_class_binding, scope->class_shadowed, NULL);
329   
330   cb->identifier = name;
331   binding = &cb->base;
332   binding->scope = scope;
333   cxx_binding_init (binding, value, type);
334   return binding;
335 }
336
337 /* Make DECL the innermost binding for ID.  The LEVEL is the binding
338    level at which this declaration is being bound.  */
339
340 static void
341 push_binding (tree id, tree decl, cxx_scope* level)
342 {
343   cxx_binding *binding;
344
345   if (level != class_binding_level)
346     {
347       binding = cxx_binding_make (decl, NULL_TREE);
348       binding->scope = level;
349     }
350   else
351     binding = new_class_binding (id, decl, /*type=*/NULL_TREE, level);
352                               
353   /* Now, fill in the binding information.  */
354   binding->previous = IDENTIFIER_BINDING (id);
355   INHERITED_VALUE_BINDING_P (binding) = 0;
356   LOCAL_BINDING_P (binding) = (level != class_binding_level);
357
358   /* And put it on the front of the list of bindings for ID.  */
359   IDENTIFIER_BINDING (id) = binding;
360 }
361
362 /* Remove the binding for DECL which should be the innermost binding
363    for ID.  */
364
365 void
366 pop_binding (tree id, tree decl)
367 {
368   cxx_binding *binding;
369
370   if (id == NULL_TREE)
371     /* It's easiest to write the loops that call this function without
372        checking whether or not the entities involved have names.  We
373        get here for such an entity.  */
374     return;
375
376   /* Get the innermost binding for ID.  */
377   binding = IDENTIFIER_BINDING (id);
378
379   /* The name should be bound.  */
380   gcc_assert (binding != NULL);
381
382   /* The DECL will be either the ordinary binding or the type
383      binding for this identifier.  Remove that binding.  */
384   if (binding->value == decl)
385     binding->value = NULL_TREE;
386   else
387     {
388       gcc_assert (binding->type == decl);
389       binding->type = NULL_TREE;
390     }
391
392   if (!binding->value && !binding->type)
393     {
394       /* We're completely done with the innermost binding for this
395          identifier.  Unhook it from the list of bindings.  */
396       IDENTIFIER_BINDING (id) = binding->previous;
397
398       /* Add it to the free list.  */
399       cxx_binding_free (binding);
400     }
401 }
402
403 /* BINDING records an existing declaration for a namein the current scope.
404    But, DECL is another declaration for that same identifier in the
405    same scope.  This is the `struct stat' hack whereby a non-typedef
406    class name or enum-name can be bound at the same level as some other
407    kind of entity.
408    3.3.7/1
409
410      A class name (9.1) or enumeration name (7.2) can be hidden by the
411      name of an object, function, or enumerator declared in the same scope.
412      If a class or enumeration name and an object, function, or enumerator
413      are declared in the same scope (in any order) with the same name, the
414      class or enumeration name is hidden wherever the object, function, or
415      enumerator name is visible.
416
417    It's the responsibility of the caller to check that
418    inserting this name is valid here.  Returns nonzero if the new binding
419    was successful.  */
420
421 static bool
422 supplement_binding (cxx_binding *binding, tree decl)
423 {
424   tree bval = binding->value;
425   bool ok = true;
426
427   timevar_push (TV_NAME_LOOKUP);
428   if (TREE_CODE (decl) == TYPE_DECL && DECL_ARTIFICIAL (decl))
429     /* The new name is the type name.  */
430     binding->type = decl;
431   else if (/* BVAL is null when push_class_level_binding moves an
432               inherited type-binding out of the way to make room for a
433               new value binding.  */
434            !bval 
435            /* BVAL is error_mark_node when DECL's name has been used
436               in a non-class scope prior declaration.  In that case,
437               we should have already issued a diagnostic; for graceful
438               error recovery purpose, pretend this was the intended
439               declaration for that name.  */
440            || bval == error_mark_node
441            /* If BVAL is a built-in that has not yet been declared,
442               pretend it is not there at all.  */
443            || (TREE_CODE (bval) == FUNCTION_DECL
444                && DECL_ANTICIPATED (bval)))
445     binding->value = decl;
446   else if (TREE_CODE (bval) == TYPE_DECL && DECL_ARTIFICIAL (bval))
447     {
448       /* The old binding was a type name.  It was placed in
449          VALUE field because it was thought, at the point it was
450          declared, to be the only entity with such a name.  Move the
451          type name into the type slot; it is now hidden by the new
452          binding.  */
453       binding->type = bval;
454       binding->value = decl;
455       binding->value_is_inherited = false;
456     }
457   else if (TREE_CODE (bval) == TYPE_DECL
458            && TREE_CODE (decl) == TYPE_DECL
459            && DECL_NAME (decl) == DECL_NAME (bval)
460            && binding->scope->kind != sk_class
461            && (same_type_p (TREE_TYPE (decl), TREE_TYPE (bval))
462                /* If either type involves template parameters, we must
463                   wait until instantiation.  */
464                || uses_template_parms (TREE_TYPE (decl))
465                || uses_template_parms (TREE_TYPE (bval))))
466     /* We have two typedef-names, both naming the same type to have
467        the same name.  In general, this is OK because of:
468
469          [dcl.typedef]
470
471          In a given scope, a typedef specifier can be used to redefine
472          the name of any type declared in that scope to refer to the
473          type to which it already refers.  
474
475        However, in class scopes, this rule does not apply due to the
476        stricter language in [class.mem] prohibiting redeclarations of
477        members.  */
478     ok = false;
479   /* There can be two block-scope declarations of the same variable,
480      so long as they are `extern' declarations.  However, there cannot
481      be two declarations of the same static data member:
482
483        [class.mem]
484
485        A member shall not be declared twice in the
486        member-specification.  */
487   else if (TREE_CODE (decl) == VAR_DECL && TREE_CODE (bval) == VAR_DECL
488            && DECL_EXTERNAL (decl) && DECL_EXTERNAL (bval)
489            && !DECL_CLASS_SCOPE_P (decl))
490     {
491       duplicate_decls (decl, binding->value);
492       ok = false;
493     }
494   else if (TREE_CODE (decl) == NAMESPACE_DECL
495            && TREE_CODE (bval) == NAMESPACE_DECL
496            && DECL_NAMESPACE_ALIAS (decl)
497            && DECL_NAMESPACE_ALIAS (bval)
498            && ORIGINAL_NAMESPACE (bval) == ORIGINAL_NAMESPACE (decl))
499     /* [namespace.alias]
500        
501       In a declarative region, a namespace-alias-definition can be
502       used to redefine a namespace-alias declared in that declarative
503       region to refer only to the namespace to which it already
504       refers.  */
505     ok = false;
506   else
507     {
508       error ("declaration of %q#D", decl);
509       cp_error_at ("conflicts with previous declaration %q#D", bval);
510       ok = false;
511     }
512
513   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, ok);
514 }
515
516 /* Add DECL to the list of things declared in B.  */
517
518 static void
519 add_decl_to_level (tree decl, cxx_scope *b)
520 {
521   if (TREE_CODE (decl) == NAMESPACE_DECL 
522       && !DECL_NAMESPACE_ALIAS (decl))
523     {
524       TREE_CHAIN (decl) = b->namespaces;
525       b->namespaces = decl;
526     }
527   else if (TREE_CODE (decl) == VAR_DECL && DECL_VIRTUAL_P (decl))
528     {
529       TREE_CHAIN (decl) = b->vtables;
530       b->vtables = decl;
531     }
532   else       
533     {
534       /* We build up the list in reverse order, and reverse it later if
535          necessary.  */
536       TREE_CHAIN (decl) = b->names;
537       b->names = decl;
538       b->names_size++;
539
540       /* If appropriate, add decl to separate list of statics.  We
541          include extern variables because they might turn out to be 
542          static later.  It's OK for this list to contain a few false
543          positives.  */
544       if (b->kind == sk_namespace)
545         if ((TREE_CODE (decl) == VAR_DECL
546              && (TREE_STATIC (decl) || DECL_EXTERNAL (decl)))
547             || (TREE_CODE (decl) == FUNCTION_DECL
548                 && (!TREE_PUBLIC (decl) || DECL_DECLARED_INLINE_P (decl))))
549           VARRAY_PUSH_TREE (b->static_decls, decl);
550     }
551 }
552
553 /* Record a decl-node X as belonging to the current lexical scope.
554    Check for errors (such as an incompatible declaration for the same
555    name already seen in the same scope).
556
557    Returns either X or an old decl for the same name.
558    If an old decl is returned, it may have been smashed
559    to agree with what X says.  */
560
561 tree
562 pushdecl (tree x)
563 {
564   tree t;
565   tree name;
566   int need_new_binding;
567
568   timevar_push (TV_NAME_LOOKUP);
569
570   need_new_binding = 1;
571
572   if (DECL_TEMPLATE_PARM_P (x))
573     /* Template parameters have no context; they are not X::T even
574        when declared within a class or namespace.  */
575     ;
576   else
577     {
578       if (current_function_decl && x != current_function_decl
579           /* A local declaration for a function doesn't constitute
580              nesting.  */
581           && TREE_CODE (x) != FUNCTION_DECL
582           /* A local declaration for an `extern' variable is in the
583              scope of the current namespace, not the current
584              function.  */
585           && !(TREE_CODE (x) == VAR_DECL && DECL_EXTERNAL (x))
586           && !DECL_CONTEXT (x))
587         DECL_CONTEXT (x) = current_function_decl;
588
589       /* If this is the declaration for a namespace-scope function,
590          but the declaration itself is in a local scope, mark the
591          declaration.  */
592       if (TREE_CODE (x) == FUNCTION_DECL
593           && DECL_NAMESPACE_SCOPE_P (x)
594           && current_function_decl
595           && x != current_function_decl)
596         DECL_LOCAL_FUNCTION_P (x) = 1;
597     }
598
599   name = DECL_NAME (x);
600   if (name)
601     {
602       int different_binding_level = 0;
603
604       if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
605         name = TREE_OPERAND (name, 0);
606
607       /* In case this decl was explicitly namespace-qualified, look it
608          up in its namespace context.  */
609       if (DECL_NAMESPACE_SCOPE_P (x) && namespace_bindings_p ())
610         t = namespace_binding (name, DECL_CONTEXT (x));
611       else
612         t = lookup_name_innermost_nonclass_level (name);
613
614       /* [basic.link] If there is a visible declaration of an entity
615          with linkage having the same name and type, ignoring entities
616          declared outside the innermost enclosing namespace scope, the
617          block scope declaration declares that same entity and
618          receives the linkage of the previous declaration.  */
619       if (! t && current_function_decl && x != current_function_decl
620           && (TREE_CODE (x) == FUNCTION_DECL || TREE_CODE (x) == VAR_DECL)
621           && DECL_EXTERNAL (x))
622         {
623           /* Look in block scope.  */
624           t = innermost_non_namespace_value (name);
625           /* Or in the innermost namespace.  */
626           if (! t)
627             t = namespace_binding (name, DECL_CONTEXT (x));
628           /* Does it have linkage?  Note that if this isn't a DECL, it's an
629              OVERLOAD, which is OK.  */
630           if (t && DECL_P (t) && ! (TREE_STATIC (t) || DECL_EXTERNAL (t)))
631             t = NULL_TREE;
632           if (t)
633             different_binding_level = 1;
634         }
635
636       /* If we are declaring a function, and the result of name-lookup
637          was an OVERLOAD, look for an overloaded instance that is
638          actually the same as the function we are declaring.  (If
639          there is one, we have to merge our declaration with the
640          previous declaration.)  */
641       if (t && TREE_CODE (t) == OVERLOAD)
642         {
643           tree match;
644
645           if (TREE_CODE (x) == FUNCTION_DECL)
646             for (match = t; match; match = OVL_NEXT (match))
647               {
648                 if (decls_match (OVL_CURRENT (match), x))
649                   break;
650               }
651           else
652             /* Just choose one.  */
653             match = t;
654
655           if (match)
656             t = OVL_CURRENT (match);
657           else
658             t = NULL_TREE;
659         }
660
661       if (t && t != error_mark_node)
662         {
663           if (different_binding_level)
664             {
665               if (decls_match (x, t))
666                 /* The standard only says that the local extern
667                    inherits linkage from the previous decl; in
668                    particular, default args are not shared.  We must
669                    also tell cgraph to treat these decls as the same,
670                    or we may neglect to emit an "unused" static - we
671                    do this by making the DECL_UIDs equal, which should
672                    be viewed as a kludge.  FIXME.  */
673                 {
674                   TREE_PUBLIC (x) = TREE_PUBLIC (t);
675                   DECL_UID (x) = DECL_UID (t);
676                 }
677             }
678           else if (TREE_CODE (t) == PARM_DECL)
679             {
680               gcc_assert (DECL_CONTEXT (t));
681
682               /* Check for duplicate params.  */
683               if (duplicate_decls (x, t))
684                 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
685             }
686           else if ((DECL_EXTERN_C_FUNCTION_P (x)
687                     || DECL_FUNCTION_TEMPLATE_P (x))
688                    && is_overloaded_fn (t))
689             /* Don't do anything just yet.  */;
690           else if (t == wchar_decl_node)
691             {
692               if (pedantic && ! DECL_IN_SYSTEM_HEADER (x))
693                 pedwarn ("redeclaration of %<wchar_t%> as %qT",
694                          TREE_TYPE (x));
695
696               /* Throw away the redeclaration.  */
697               POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
698             }
699           else
700             {
701               tree olddecl = duplicate_decls (x, t);
702               
703               /* If the redeclaration failed, we can stop at this
704                  point.  */
705               if (olddecl == error_mark_node)
706                 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
707
708               if (olddecl)
709                 {
710                   if (TREE_CODE (t) == TYPE_DECL)
711                     SET_IDENTIFIER_TYPE_VALUE (name, TREE_TYPE (t));
712                   else if (TREE_CODE (t) == FUNCTION_DECL)
713                     check_default_args (t);
714
715                   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
716                 }
717               else if (DECL_MAIN_P (x) && TREE_CODE (t) == FUNCTION_DECL)
718                 {
719                   /* A redeclaration of main, but not a duplicate of the
720                      previous one.
721                      
722                      [basic.start.main]
723                      
724                      This function shall not be overloaded.  */
725                   cp_error_at ("invalid redeclaration of %qD", t);
726                   error ("as %qD", x);
727                   /* We don't try to push this declaration since that
728                      causes a crash.  */
729                   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, x);
730                 }
731             }
732         }
733
734       check_template_shadow (x);
735
736       /* If this is a function conjured up by the backend, massage it
737          so it looks friendly.  */
738       if (DECL_NON_THUNK_FUNCTION_P (x) && ! DECL_LANG_SPECIFIC (x))
739         {
740           retrofit_lang_decl (x);
741           SET_DECL_LANGUAGE (x, lang_c);
742         }
743
744       if (DECL_NON_THUNK_FUNCTION_P (x) && ! DECL_FUNCTION_MEMBER_P (x))
745         {
746           t = push_overloaded_decl (x, PUSH_LOCAL);
747           if (t != x)
748             POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
749           if (!namespace_bindings_p ())
750             /* We do not need to create a binding for this name;
751                push_overloaded_decl will have already done so if
752                necessary.  */
753             need_new_binding = 0;
754         }
755       else if (DECL_FUNCTION_TEMPLATE_P (x) && DECL_NAMESPACE_SCOPE_P (x))
756         {
757           t = push_overloaded_decl (x, PUSH_GLOBAL);
758           if (t == x)
759             add_decl_to_level (x, NAMESPACE_LEVEL (CP_DECL_CONTEXT (t)));
760           POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
761         }
762
763       /* If declaring a type as a typedef, copy the type (unless we're
764          at line 0), and install this TYPE_DECL as the new type's typedef
765          name.  See the extensive comment in ../c-decl.c (pushdecl).  */
766       if (TREE_CODE (x) == TYPE_DECL)
767         {
768           tree type = TREE_TYPE (x);
769           if (DECL_IS_BUILTIN (x))
770             {
771               if (TYPE_NAME (type) == 0)
772                 TYPE_NAME (type) = x;
773             }
774           else if (type != error_mark_node && TYPE_NAME (type) != x
775                    /* We don't want to copy the type when all we're
776                       doing is making a TYPE_DECL for the purposes of
777                       inlining.  */
778                    && (!TYPE_NAME (type)
779                        || TYPE_NAME (type) != DECL_ABSTRACT_ORIGIN (x)))
780             {
781               DECL_ORIGINAL_TYPE (x) = type;
782               type = build_variant_type_copy (type);
783               TYPE_STUB_DECL (type) = TYPE_STUB_DECL (DECL_ORIGINAL_TYPE (x));
784               TYPE_NAME (type) = x;
785               TREE_TYPE (x) = type;
786             }
787
788           if (type != error_mark_node
789               && TYPE_NAME (type)
790               && TYPE_IDENTIFIER (type))
791             set_identifier_type_value (DECL_NAME (x), x);
792         }
793
794       /* Multiple external decls of the same identifier ought to match.
795
796          We get warnings about inline functions where they are defined.
797          We get warnings about other functions from push_overloaded_decl.
798
799          Avoid duplicate warnings where they are used.  */
800       if (TREE_PUBLIC (x) && TREE_CODE (x) != FUNCTION_DECL)
801         {
802           tree decl;
803
804           decl = IDENTIFIER_NAMESPACE_VALUE (name);
805           if (decl && TREE_CODE (decl) == OVERLOAD)
806             decl = OVL_FUNCTION (decl);
807
808           if (decl && decl != error_mark_node
809               && (DECL_EXTERNAL (decl) || TREE_PUBLIC (decl))
810               /* If different sort of thing, we already gave an error.  */
811               && TREE_CODE (decl) == TREE_CODE (x)
812               && !same_type_p (TREE_TYPE (x), TREE_TYPE (decl)))
813             {
814               pedwarn ("type mismatch with previous external decl of %q#D", x);
815               cp_pedwarn_at ("previous external decl of %q#D", decl);
816             }
817         }
818
819       /* This name is new in its binding level.
820          Install the new declaration and return it.  */
821       if (namespace_bindings_p ())
822         {
823           /* Install a global value.  */
824
825           /* If the first global decl has external linkage,
826              warn if we later see static one.  */
827           if (IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE && TREE_PUBLIC (x))
828             TREE_PUBLIC (name) = 1;
829
830           /* Bind the name for the entity.  */
831           if (!(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)
832                 && t != NULL_TREE)
833               && (TREE_CODE (x) == TYPE_DECL
834                   || TREE_CODE (x) == VAR_DECL
835                   || TREE_CODE (x) == ALIAS_DECL
836                   || TREE_CODE (x) == NAMESPACE_DECL
837                   || TREE_CODE (x) == CONST_DECL
838                   || TREE_CODE (x) == TEMPLATE_DECL))
839             SET_IDENTIFIER_NAMESPACE_VALUE (name, x);
840
841           /* If new decl is `static' and an `extern' was seen previously,
842              warn about it.  */
843           if (x != NULL_TREE && t != NULL_TREE && decls_match (x, t))
844             warn_extern_redeclared_static (x, t);
845         }
846       else
847         {
848           /* Here to install a non-global value.  */
849           tree oldlocal = innermost_non_namespace_value (name);
850           tree oldglobal = IDENTIFIER_NAMESPACE_VALUE (name);
851
852           if (need_new_binding)
853             {
854               push_local_binding (name, x, 0);
855               /* Because push_local_binding will hook X on to the
856                  current_binding_level's name list, we don't want to
857                  do that again below.  */
858               need_new_binding = 0;
859             }
860
861           /* If this is a TYPE_DECL, push it into the type value slot.  */
862           if (TREE_CODE (x) == TYPE_DECL)
863             set_identifier_type_value (name, x);
864
865           /* Clear out any TYPE_DECL shadowed by a namespace so that
866              we won't think this is a type.  The C struct hack doesn't
867              go through namespaces.  */
868           if (TREE_CODE (x) == NAMESPACE_DECL)
869             set_identifier_type_value (name, NULL_TREE);
870
871           if (oldlocal)
872             {
873               tree d = oldlocal;
874
875               while (oldlocal
876                      && TREE_CODE (oldlocal) == VAR_DECL
877                      && DECL_DEAD_FOR_LOCAL (oldlocal))
878                 oldlocal = DECL_SHADOWED_FOR_VAR (oldlocal);
879
880               if (oldlocal == NULL_TREE)
881                 oldlocal = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (d));
882             }
883
884           /* If this is an extern function declaration, see if we
885              have a global definition or declaration for the function.  */
886           if (oldlocal == NULL_TREE
887               && DECL_EXTERNAL (x)
888               && oldglobal != NULL_TREE
889               && TREE_CODE (x) == FUNCTION_DECL
890               && TREE_CODE (oldglobal) == FUNCTION_DECL)
891             {
892               /* We have one.  Their types must agree.  */
893               if (decls_match (x, oldglobal))
894                 /* OK */;
895               else
896                 {
897                   warning ("extern declaration of %q#D doesn't match", x);
898                   cp_warning_at ("global declaration %q#D", oldglobal);
899                 }
900             }
901           /* If we have a local external declaration,
902              and no file-scope declaration has yet been seen,
903              then if we later have a file-scope decl it must not be static.  */
904           if (oldlocal == NULL_TREE
905               && oldglobal == NULL_TREE
906               && DECL_EXTERNAL (x)
907               && TREE_PUBLIC (x))
908             TREE_PUBLIC (name) = 1;
909
910           /* Warn if shadowing an argument at the top level of the body.  */
911           if (oldlocal != NULL_TREE && !DECL_EXTERNAL (x)
912               /* Inline decls shadow nothing.  */
913               && !DECL_FROM_INLINE (x)
914               && TREE_CODE (oldlocal) == PARM_DECL
915               /* Don't check the `this' parameter.  */
916               && !DECL_ARTIFICIAL (oldlocal))
917             {
918               bool err = false;
919
920               /* Don't complain if it's from an enclosing function.  */
921               if (DECL_CONTEXT (oldlocal) == current_function_decl
922                   && TREE_CODE (x) != PARM_DECL)
923                 {
924                   /* Go to where the parms should be and see if we find
925                      them there.  */
926                   struct cp_binding_level *b = current_binding_level->level_chain;
927
928                   /* Skip the ctor/dtor cleanup level.  */
929                   b = b->level_chain;
930
931                   /* ARM $8.3 */
932                   if (b->kind == sk_function_parms)
933                     {
934                       error ("declaration of %q#D shadows a parameter", x);
935                       err = true;
936                     }
937                 }
938
939               if (warn_shadow && !err)
940                 {
941                   warning ("declaration of %q#D shadows a parameter", x);
942                   warning ("%Jshadowed declaration is here", oldlocal);
943                 }
944             }
945
946           /* Maybe warn if shadowing something else.  */
947           else if (warn_shadow && !DECL_EXTERNAL (x)
948               /* No shadow warnings for internally generated vars.  */
949               && ! DECL_ARTIFICIAL (x)
950               /* No shadow warnings for vars made for inlining.  */
951               && ! DECL_FROM_INLINE (x))
952             {
953               tree member;
954
955               if (current_class_ptr)
956                 member = lookup_member (current_class_type,
957                                         name,
958                                         /*protect=*/0,
959                                         /*want_type=*/false);
960               else
961                 member = NULL_TREE;
962                   
963               if (member && !TREE_STATIC (member))
964                 {
965                   /* Location of previous decl is not useful in this case.  */
966                   warning ("declaration of %qD shadows a member of 'this'",
967                            x);
968                 }
969               else if (oldlocal != NULL_TREE
970                        && TREE_CODE (oldlocal) == VAR_DECL)
971                 {
972                   warning ("declaration of %qD shadows a previous local", x);
973                   warning ("%Jshadowed declaration is here", oldlocal);
974                 }
975               else if (oldglobal != NULL_TREE
976                        && TREE_CODE (oldglobal) == VAR_DECL)
977                 /* XXX shadow warnings in outer-more namespaces */
978                 {
979                   warning ("declaration of %qD shadows a global declaration",
980                            x);
981                   warning ("%Jshadowed declaration is here", oldglobal);
982                 }
983             }
984         }
985
986       if (TREE_CODE (x) == FUNCTION_DECL)
987         check_default_args (x);
988
989       if (TREE_CODE (x) == VAR_DECL)
990         maybe_register_incomplete_var (x);
991     }
992
993   if (need_new_binding)
994     add_decl_to_level (x,
995                        DECL_NAMESPACE_SCOPE_P (x)
996                        ? NAMESPACE_LEVEL (CP_DECL_CONTEXT (x))
997                        : current_binding_level);
998
999   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, x);
1000 }
1001
1002 /* Enter DECL into the symbol table, if that's appropriate.  Returns
1003    DECL, or a modified version thereof.  */
1004
1005 tree
1006 maybe_push_decl (tree decl)
1007 {
1008   tree type = TREE_TYPE (decl);
1009
1010   /* Add this decl to the current binding level, but not if it comes
1011      from another scope, e.g. a static member variable.  TEM may equal
1012      DECL or it may be a previous decl of the same name.  */
1013   if (decl == error_mark_node
1014       || (TREE_CODE (decl) != PARM_DECL
1015           && DECL_CONTEXT (decl) != NULL_TREE
1016           /* Definitions of namespace members outside their namespace are
1017              possible.  */
1018           && TREE_CODE (DECL_CONTEXT (decl)) != NAMESPACE_DECL)
1019       || (TREE_CODE (decl) == TEMPLATE_DECL && !namespace_bindings_p ())
1020       || TREE_CODE (type) == UNKNOWN_TYPE
1021       /* The declaration of a template specialization does not affect
1022          the functions available for overload resolution, so we do not
1023          call pushdecl.  */
1024       || (TREE_CODE (decl) == FUNCTION_DECL
1025           && DECL_TEMPLATE_SPECIALIZATION (decl)))
1026     return decl;
1027   else
1028     return pushdecl (decl);
1029 }
1030
1031 /* Bind DECL to ID in the current_binding_level, assumed to be a local
1032    binding level.  If PUSH_USING is set in FLAGS, we know that DECL
1033    doesn't really belong to this binding level, that it got here
1034    through a using-declaration.  */
1035
1036 void
1037 push_local_binding (tree id, tree decl, int flags)
1038 {
1039   struct cp_binding_level *b;
1040
1041   /* Skip over any local classes.  This makes sense if we call
1042      push_local_binding with a friend decl of a local class.  */
1043   b = innermost_nonclass_level ();
1044
1045   if (lookup_name_innermost_nonclass_level (id))
1046     {
1047       /* Supplement the existing binding.  */
1048       if (!supplement_binding (IDENTIFIER_BINDING (id), decl))
1049         /* It didn't work.  Something else must be bound at this
1050            level.  Do not add DECL to the list of things to pop
1051            later.  */
1052         return;
1053     }
1054   else
1055     /* Create a new binding.  */
1056     push_binding (id, decl, b);
1057
1058   if (TREE_CODE (decl) == OVERLOAD || (flags & PUSH_USING))
1059     /* We must put the OVERLOAD into a TREE_LIST since the
1060        TREE_CHAIN of an OVERLOAD is already used.  Similarly for
1061        decls that got here through a using-declaration.  */
1062     decl = build_tree_list (NULL_TREE, decl);
1063
1064   /* And put DECL on the list of things declared by the current
1065      binding level.  */
1066   add_decl_to_level (decl, b);
1067 }
1068
1069 /* Check to see whether or not DECL is a variable that would have been
1070    in scope under the ARM, but is not in scope under the ANSI/ISO
1071    standard.  If so, issue an error message.  If name lookup would
1072    work in both cases, but return a different result, this function
1073    returns the result of ANSI/ISO lookup.  Otherwise, it returns
1074    DECL.  */
1075
1076 tree
1077 check_for_out_of_scope_variable (tree decl)
1078 {
1079   tree shadowed;
1080
1081   /* We only care about out of scope variables.  */
1082   if (!(TREE_CODE (decl) == VAR_DECL && DECL_DEAD_FOR_LOCAL (decl)))
1083     return decl;
1084
1085   shadowed = DECL_SHADOWED_FOR_VAR (decl);
1086   while (shadowed != NULL_TREE && TREE_CODE (shadowed) == VAR_DECL
1087          && DECL_DEAD_FOR_LOCAL (shadowed))
1088     shadowed = DECL_SHADOWED_FOR_VAR (shadowed);
1089   if (!shadowed)
1090     shadowed = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (decl));
1091   if (shadowed)
1092     {
1093       if (!DECL_ERROR_REPORTED (decl))
1094         {
1095           warning ("name lookup of %qD changed", DECL_NAME (decl));
1096           cp_warning_at ("  matches this %qD under ISO standard rules",
1097                          shadowed);
1098           cp_warning_at ("  matches this %qD under old rules", decl);
1099           DECL_ERROR_REPORTED (decl) = 1;
1100         }
1101       return shadowed;
1102     }
1103
1104   /* If we have already complained about this declaration, there's no
1105      need to do it again.  */
1106   if (DECL_ERROR_REPORTED (decl))
1107     return decl;
1108
1109   DECL_ERROR_REPORTED (decl) = 1;
1110
1111   if (TREE_TYPE (decl) == error_mark_node)
1112     return decl;
1113
1114   if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
1115     {
1116       error ("name lookup of %qD changed for new ISO %<for%> scoping",
1117              DECL_NAME (decl));
1118       cp_error_at ("  cannot use obsolete binding at %qD because "
1119                    "it has a destructor", decl);
1120       return error_mark_node;
1121     }
1122   else
1123     {
1124       pedwarn ("name lookup of %qD changed for new ISO %<for%> scoping",
1125                DECL_NAME (decl));
1126       cp_pedwarn_at ("  using obsolete binding at %qD", decl);
1127     }
1128
1129   return decl;
1130 }
1131 \f
1132 /* true means unconditionally make a BLOCK for the next level pushed.  */
1133
1134 static bool keep_next_level_flag;
1135
1136 static int binding_depth = 0;
1137 static int is_class_level = 0;
1138
1139 static void
1140 indent (int depth)
1141 {
1142   int i;
1143
1144   for (i = 0; i < depth * 2; i++)
1145     putc (' ', stderr);
1146 }
1147
1148 /* Return a string describing the kind of SCOPE we have.  */
1149 static const char *
1150 cxx_scope_descriptor (cxx_scope *scope)
1151 {
1152   /* The order of this table must match the "scope_kind"
1153      enumerators.  */
1154   static const char* scope_kind_names[] = {
1155     "block-scope",
1156     "cleanup-scope",
1157     "try-scope",
1158     "catch-scope",
1159     "for-scope",
1160     "function-parameter-scope",
1161     "class-scope",
1162     "namespace-scope",
1163     "template-parameter-scope",
1164     "template-explicit-spec-scope"
1165   };
1166   const scope_kind kind = scope->explicit_spec_p
1167     ? sk_template_spec : scope->kind;
1168
1169   return scope_kind_names[kind];
1170 }
1171
1172 /* Output a debugging information about SCOPE when performing
1173    ACTION at LINE.  */
1174 static void
1175 cxx_scope_debug (cxx_scope *scope, int line, const char *action)
1176 {
1177   const char *desc = cxx_scope_descriptor (scope);
1178   if (scope->this_entity)
1179     verbatim ("%s %s(%E) %p %d\n", action, desc,
1180               scope->this_entity, (void *) scope, line);
1181   else
1182     verbatim ("%s %s %p %d\n", action, desc, (void *) scope, line);
1183 }
1184
1185 /* Return the estimated initial size of the hashtable of a NAMESPACE
1186    scope.  */
1187
1188 static inline size_t
1189 namespace_scope_ht_size (tree ns)
1190 {
1191   tree name = DECL_NAME (ns);
1192
1193   return name == std_identifier
1194     ? NAMESPACE_STD_HT_SIZE
1195     : (name == global_scope_name
1196        ? GLOBAL_SCOPE_HT_SIZE
1197        : NAMESPACE_ORDINARY_HT_SIZE);
1198 }
1199
1200 /* A chain of binding_level structures awaiting reuse.  */
1201
1202 static GTY((deletable)) struct cp_binding_level *free_binding_level;
1203
1204 /* Insert SCOPE as the innermost binding level.  */
1205
1206 void
1207 push_binding_level (struct cp_binding_level *scope)
1208 {
1209   /* Add it to the front of currently active scopes stack.  */
1210   scope->level_chain = current_binding_level;
1211   current_binding_level = scope;
1212   keep_next_level_flag = false;
1213
1214   if (ENABLE_SCOPE_CHECKING)
1215     {
1216       scope->binding_depth = binding_depth;
1217       indent (binding_depth);
1218       cxx_scope_debug (scope, input_line, "push");
1219       is_class_level = 0;
1220       binding_depth++;
1221     }
1222 }
1223
1224 /* Create a new KIND scope and make it the top of the active scopes stack.
1225    ENTITY is the scope of the associated C++ entity (namespace, class,
1226    function); it is NULL otherwise.  */
1227
1228 cxx_scope *
1229 begin_scope (scope_kind kind, tree entity)
1230 {
1231   cxx_scope *scope;
1232   
1233   /* Reuse or create a struct for this binding level.  */
1234   if (!ENABLE_SCOPE_CHECKING && free_binding_level)
1235     {
1236       scope = free_binding_level;
1237       free_binding_level = scope->level_chain;
1238     }
1239   else
1240     scope = GGC_NEW (cxx_scope);
1241   memset (scope, 0, sizeof (cxx_scope));
1242
1243   scope->this_entity = entity;
1244   scope->more_cleanups_ok = true;
1245   switch (kind)
1246     {
1247     case sk_cleanup:
1248       scope->keep = true;
1249       break;
1250       
1251     case sk_template_spec:
1252       scope->explicit_spec_p = true;
1253       kind = sk_template_parms;
1254       /* Fall through.  */
1255     case sk_template_parms:
1256     case sk_block:
1257     case sk_try:
1258     case sk_catch:
1259     case sk_for:
1260     case sk_class:
1261     case sk_function_parms:
1262       scope->keep = keep_next_level_flag;
1263       break;
1264
1265     case sk_namespace:
1266       NAMESPACE_LEVEL (entity) = scope;
1267       VARRAY_TREE_INIT (scope->static_decls,
1268                         DECL_NAME (entity) == std_identifier
1269                         || DECL_NAME (entity) == global_scope_name
1270                         ? 200 : 10,
1271                         "Static declarations");
1272       break;
1273
1274     default:
1275       /* Should not happen.  */
1276       gcc_unreachable ();
1277       break;
1278     }
1279   scope->kind = kind;
1280
1281   push_binding_level (scope);
1282
1283   return scope;
1284 }
1285
1286 /* We're about to leave current scope.  Pop the top of the stack of
1287    currently active scopes.  Return the enclosing scope, now active.  */
1288
1289 cxx_scope *
1290 leave_scope (void)
1291 {
1292   cxx_scope *scope = current_binding_level;
1293
1294   if (scope->kind == sk_namespace && class_binding_level)
1295     current_binding_level = class_binding_level;
1296
1297   /* We cannot leave a scope, if there are none left.  */
1298   if (NAMESPACE_LEVEL (global_namespace))
1299     gcc_assert (!global_scope_p (scope));
1300   
1301   if (ENABLE_SCOPE_CHECKING)
1302     {
1303       indent (--binding_depth);
1304       cxx_scope_debug (scope, input_line, "leave");
1305       if (is_class_level != (scope == class_binding_level))
1306         {
1307           indent (binding_depth);
1308           verbatim ("XXX is_class_level != (current_scope == class_scope)\n");
1309         }
1310       is_class_level = 0;
1311     }
1312
1313   /* Move one nesting level up.  */
1314   current_binding_level = scope->level_chain;
1315
1316   /* Namespace-scopes are left most probably temporarily, not
1317      completely; they can be reopen later, e.g. in namespace-extension
1318      or any name binding activity that requires us to resume a
1319      namespace.  For classes, we cache some binding levels.  For other
1320      scopes, we just make the structure available for reuse.  */
1321   if (scope->kind != sk_namespace
1322       && scope->kind != sk_class)
1323     {
1324       scope->level_chain = free_binding_level;
1325       gcc_assert (!ENABLE_SCOPE_CHECKING
1326                   || scope->binding_depth == binding_depth);
1327       free_binding_level = scope;
1328     }
1329
1330   /* Find the innermost enclosing class scope, and reset
1331      CLASS_BINDING_LEVEL appropriately.  */
1332   if (scope->kind == sk_class)
1333     {
1334       class_binding_level = NULL;
1335       for (scope = current_binding_level; scope; scope = scope->level_chain)
1336         if (scope->kind == sk_class)
1337           {
1338             class_binding_level = scope;
1339             break;
1340           }
1341     }
1342
1343   return current_binding_level;
1344 }
1345
1346 static void
1347 resume_scope (struct cp_binding_level* b)
1348 {
1349   /* Resuming binding levels is meant only for namespaces,
1350      and those cannot nest into classes.  */
1351   gcc_assert (!class_binding_level);
1352   /* Also, resuming a non-directly nested namespace is a no-no.  */
1353   gcc_assert (b->level_chain == current_binding_level);
1354   current_binding_level = b;
1355   if (ENABLE_SCOPE_CHECKING)
1356     {
1357       b->binding_depth = binding_depth;
1358       indent (binding_depth);
1359       cxx_scope_debug (b, input_line, "resume");
1360       is_class_level = 0;
1361       binding_depth++;
1362     }
1363 }
1364
1365 /* Return the innermost binding level that is not for a class scope.  */
1366
1367 static cxx_scope *
1368 innermost_nonclass_level (void)
1369 {
1370   cxx_scope *b;
1371
1372   b = current_binding_level;
1373   while (b->kind == sk_class)
1374     b = b->level_chain;
1375
1376   return b;
1377 }
1378
1379 /* We're defining an object of type TYPE.  If it needs a cleanup, but
1380    we're not allowed to add any more objects with cleanups to the current
1381    scope, create a new binding level.  */
1382
1383 void
1384 maybe_push_cleanup_level (tree type)
1385 {
1386   if (type != error_mark_node
1387       && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
1388       && current_binding_level->more_cleanups_ok == 0)
1389     {
1390       begin_scope (sk_cleanup, NULL);
1391       current_binding_level->statement_list = push_stmt_list ();
1392     }
1393 }
1394
1395 /* Nonzero if we are currently in the global binding level.  */
1396
1397 int
1398 global_bindings_p (void)
1399 {
1400   return global_scope_p (current_binding_level);
1401 }
1402
1403 /* True if we are currently in a toplevel binding level.  This
1404    means either the global binding level or a namespace in a toplevel
1405    binding level.  Since there are no non-toplevel namespace levels,
1406    this really means any namespace or template parameter level.  We
1407    also include a class whose context is toplevel.  */
1408
1409 bool
1410 toplevel_bindings_p (void)
1411 {
1412   struct cp_binding_level *b = innermost_nonclass_level ();
1413
1414   return b->kind == sk_namespace || b->kind == sk_template_parms;
1415 }
1416
1417 /* True if this is a namespace scope, or if we are defining a class
1418    which is itself at namespace scope, or whose enclosing class is
1419    such a class, etc.  */
1420
1421 bool
1422 namespace_bindings_p (void)
1423 {
1424   struct cp_binding_level *b = innermost_nonclass_level ();
1425
1426   return b->kind == sk_namespace;
1427 }
1428
1429 /* True if the current level needs to have a BLOCK made.  */
1430
1431 bool
1432 kept_level_p (void)
1433 {
1434   return (current_binding_level->blocks != NULL_TREE
1435           || current_binding_level->keep
1436           || current_binding_level->kind == sk_cleanup
1437           || current_binding_level->names != NULL_TREE);
1438 }
1439
1440 /* Returns the kind of the innermost scope.  */
1441
1442 scope_kind
1443 innermost_scope_kind (void)
1444 {
1445   return current_binding_level->kind;
1446 }
1447
1448 /* Returns true if this scope was created to store template parameters.  */
1449
1450 bool
1451 template_parm_scope_p (void)
1452 {
1453   return innermost_scope_kind () == sk_template_parms;
1454 }
1455
1456 /* If KEEP is true, make a BLOCK node for the next binding level,
1457    unconditionally.  Otherwise, use the normal logic to decide whether
1458    or not to create a BLOCK.  */
1459
1460 void
1461 keep_next_level (bool keep)
1462 {
1463   keep_next_level_flag = keep;
1464 }
1465
1466 /* Return the list of declarations of the current level.
1467    Note that this list is in reverse order unless/until
1468    you nreverse it; and when you do nreverse it, you must
1469    store the result back using `storedecls' or you will lose.  */
1470
1471 tree
1472 getdecls (void)
1473 {
1474   return current_binding_level->names;
1475 }
1476
1477 /* For debugging.  */
1478 static int no_print_functions = 0;
1479 static int no_print_builtins = 0;
1480
1481 void
1482 print_binding_level (struct cp_binding_level* lvl)
1483 {
1484   tree t;
1485   int i = 0, len;
1486   fprintf (stderr, " blocks=" HOST_PTR_PRINTF, (void *) lvl->blocks);
1487   if (lvl->more_cleanups_ok)
1488     fprintf (stderr, " more-cleanups-ok");
1489   if (lvl->have_cleanups)
1490     fprintf (stderr, " have-cleanups");
1491   fprintf (stderr, "\n");
1492   if (lvl->names)
1493     {
1494       fprintf (stderr, " names:\t");
1495       /* We can probably fit 3 names to a line?  */
1496       for (t = lvl->names; t; t = TREE_CHAIN (t))
1497         {
1498           if (no_print_functions && (TREE_CODE (t) == FUNCTION_DECL))
1499             continue;
1500           if (no_print_builtins
1501               && (TREE_CODE (t) == TYPE_DECL)
1502               && DECL_IS_BUILTIN (t))
1503             continue;
1504
1505           /* Function decls tend to have longer names.  */
1506           if (TREE_CODE (t) == FUNCTION_DECL)
1507             len = 3;
1508           else
1509             len = 2;
1510           i += len;
1511           if (i > 6)
1512             {
1513               fprintf (stderr, "\n\t");
1514               i = len;
1515             }
1516           print_node_brief (stderr, "", t, 0);
1517           if (t == error_mark_node)
1518             break;
1519         }
1520       if (i)
1521         fprintf (stderr, "\n");
1522     }
1523   if (VEC_length (cp_class_binding, lvl->class_shadowed))
1524     {
1525       size_t i;
1526       cp_class_binding *b;
1527       fprintf (stderr, " class-shadowed:");
1528       for (i = 0; 
1529            VEC_iterate(cp_class_binding, lvl->class_shadowed, i, b);
1530            ++i) 
1531         fprintf (stderr, " %s ", IDENTIFIER_POINTER (b->identifier));
1532       fprintf (stderr, "\n");
1533     }
1534   if (lvl->type_shadowed)
1535     {
1536       fprintf (stderr, " type-shadowed:");
1537       for (t = lvl->type_shadowed; t; t = TREE_CHAIN (t))
1538         {
1539           fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
1540         }
1541       fprintf (stderr, "\n");
1542     }
1543 }
1544
1545 void
1546 print_other_binding_stack (struct cp_binding_level *stack)
1547 {
1548   struct cp_binding_level *level;
1549   for (level = stack; !global_scope_p (level); level = level->level_chain)
1550     {
1551       fprintf (stderr, "binding level " HOST_PTR_PRINTF "\n", (void *) level);
1552       print_binding_level (level);
1553     }
1554 }
1555
1556 void
1557 print_binding_stack (void)
1558 {
1559   struct cp_binding_level *b;
1560   fprintf (stderr, "current_binding_level=" HOST_PTR_PRINTF
1561            "\nclass_binding_level=" HOST_PTR_PRINTF
1562            "\nNAMESPACE_LEVEL (global_namespace)=" HOST_PTR_PRINTF "\n",
1563            (void *) current_binding_level, (void *) class_binding_level,
1564            (void *) NAMESPACE_LEVEL (global_namespace));
1565   if (class_binding_level)
1566     {
1567       for (b = class_binding_level; b; b = b->level_chain)
1568         if (b == current_binding_level)
1569           break;
1570       if (b)
1571         b = class_binding_level;
1572       else
1573         b = current_binding_level;
1574     }
1575   else
1576     b = current_binding_level;
1577   print_other_binding_stack (b);
1578   fprintf (stderr, "global:\n");
1579   print_binding_level (NAMESPACE_LEVEL (global_namespace));
1580 }
1581 \f
1582 /* Return the type associated with id.  */
1583
1584 tree
1585 identifier_type_value (tree id)
1586 {
1587   timevar_push (TV_NAME_LOOKUP);
1588   /* There is no type with that name, anywhere.  */
1589   if (REAL_IDENTIFIER_TYPE_VALUE (id) == NULL_TREE)
1590     POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
1591   /* This is not the type marker, but the real thing.  */
1592   if (REAL_IDENTIFIER_TYPE_VALUE (id) != global_type_node)
1593     POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, REAL_IDENTIFIER_TYPE_VALUE (id));
1594   /* Have to search for it. It must be on the global level, now.
1595      Ask lookup_name not to return non-types.  */
1596   id = lookup_name_real (id, 2, 1, /*block_p=*/true, 0, LOOKUP_COMPLAIN);
1597   if (id)
1598     POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, TREE_TYPE (id));
1599   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
1600 }
1601
1602 /* Return the IDENTIFIER_GLOBAL_VALUE of T, for use in common code, since
1603    the definition of IDENTIFIER_GLOBAL_VALUE is different for C and C++.  */
1604
1605 tree
1606 identifier_global_value (tree t)
1607 {
1608   return IDENTIFIER_GLOBAL_VALUE (t);
1609 }
1610
1611 /* Push a definition of struct, union or enum tag named ID.  into
1612    binding_level B.  DECL is a TYPE_DECL for the type.  We assume that
1613    the tag ID is not already defined.  */
1614
1615 static void
1616 set_identifier_type_value_with_scope (tree id, tree decl, cxx_scope *b)
1617 {
1618   tree type;
1619
1620   if (b->kind != sk_namespace)
1621     {
1622       /* Shadow the marker, not the real thing, so that the marker
1623          gets restored later.  */
1624       tree old_type_value = REAL_IDENTIFIER_TYPE_VALUE (id);
1625       b->type_shadowed
1626         = tree_cons (id, old_type_value, b->type_shadowed);
1627       type = decl ? TREE_TYPE (decl) : NULL_TREE;
1628       TREE_TYPE (b->type_shadowed) = type;
1629     }
1630   else
1631     {
1632       cxx_binding *binding =
1633         binding_for_name (NAMESPACE_LEVEL (current_namespace), id);
1634       gcc_assert (decl);
1635       if (binding->value)
1636         supplement_binding (binding, decl);
1637       else
1638         binding->value = decl;
1639       
1640       /* Store marker instead of real type.  */
1641       type = global_type_node;
1642     }
1643   SET_IDENTIFIER_TYPE_VALUE (id, type);
1644 }
1645
1646 /* As set_identifier_type_value_with_scope, but using
1647    current_binding_level.  */
1648
1649 void
1650 set_identifier_type_value (tree id, tree decl)
1651 {
1652   set_identifier_type_value_with_scope (id, decl, current_binding_level);
1653 }
1654
1655 /* Return the name for the constructor (or destructor) for the
1656    specified class TYPE.  When given a template, this routine doesn't
1657    lose the specialization.  */
1658
1659 tree
1660 constructor_name_full (tree type)
1661 {
1662   return TYPE_IDENTIFIER (TYPE_MAIN_VARIANT (type));
1663 }
1664
1665 /* Return the name for the constructor (or destructor) for the
1666    specified class.  When given a template, return the plain
1667    unspecialized name.  */
1668
1669 tree
1670 constructor_name (tree type)
1671 {
1672   tree name;
1673   name = constructor_name_full (type);
1674   if (IDENTIFIER_TEMPLATE (name))
1675     name = IDENTIFIER_TEMPLATE (name);
1676   return name;
1677 }
1678
1679 /* Returns TRUE if NAME is the name for the constructor for TYPE.  */
1680
1681 bool
1682 constructor_name_p (tree name, tree type)
1683 {
1684   tree ctor_name;
1685
1686   if (!name)
1687     return false;
1688   
1689   if (TREE_CODE (name) != IDENTIFIER_NODE)
1690     return false;
1691   
1692   ctor_name = constructor_name_full (type);
1693   if (name == ctor_name)
1694     return true;
1695   if (IDENTIFIER_TEMPLATE (ctor_name)
1696       && name == IDENTIFIER_TEMPLATE (ctor_name))
1697     return true;
1698   return false;
1699 }
1700
1701 /* Counter used to create anonymous type names.  */
1702
1703 static GTY(()) int anon_cnt;
1704
1705 /* Return an IDENTIFIER which can be used as a name for
1706    anonymous structs and unions.  */
1707
1708 tree
1709 make_anon_name (void)
1710 {
1711   char buf[32];
1712
1713   sprintf (buf, ANON_AGGRNAME_FORMAT, anon_cnt++);
1714   return get_identifier (buf);
1715 }
1716
1717 /* Return (from the stack of) the BINDING, if any, established at SCOPE.  */ 
1718
1719 static inline cxx_binding *
1720 find_binding (cxx_scope *scope, cxx_binding *binding)
1721 {
1722   timevar_push (TV_NAME_LOOKUP);
1723
1724   for (; binding != NULL; binding = binding->previous)
1725     if (binding->scope == scope)
1726       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, binding);
1727
1728   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, (cxx_binding *)0);
1729 }
1730
1731 /* Return the binding for NAME in SCOPE, if any.  Otherwise, return NULL.  */
1732
1733 static inline cxx_binding *
1734 cxx_scope_find_binding_for_name (cxx_scope *scope, tree name)
1735 {
1736   cxx_binding *b = IDENTIFIER_NAMESPACE_BINDINGS (name);
1737   if (b)
1738     {
1739       /* Fold-in case where NAME is used only once.  */
1740       if (scope == b->scope && b->previous == NULL)
1741         return b;
1742       return find_binding (scope, b);
1743     }
1744   return NULL;
1745 }
1746
1747 /* Always returns a binding for name in scope.  If no binding is
1748    found, make a new one.  */
1749
1750 static cxx_binding *
1751 binding_for_name (cxx_scope *scope, tree name)
1752 {
1753   cxx_binding *result;
1754
1755   result = cxx_scope_find_binding_for_name (scope, name);
1756   if (result)
1757     return result;
1758   /* Not found, make a new one.  */
1759   result = cxx_binding_make (NULL, NULL);
1760   result->previous = IDENTIFIER_NAMESPACE_BINDINGS (name);
1761   result->scope = scope;
1762   result->is_local = false;
1763   result->value_is_inherited = false;
1764   IDENTIFIER_NAMESPACE_BINDINGS (name) = result;
1765   return result;
1766 }
1767
1768 /* Insert another USING_DECL into the current binding level, returning
1769    this declaration. If this is a redeclaration, do nothing, and
1770    return NULL_TREE if this not in namespace scope (in namespace
1771    scope, a using decl might extend any previous bindings).  */
1772
1773 tree
1774 push_using_decl (tree scope, tree name)
1775 {
1776   tree decl;
1777
1778   timevar_push (TV_NAME_LOOKUP);
1779   gcc_assert (TREE_CODE (scope) == NAMESPACE_DECL);
1780   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
1781   for (decl = current_binding_level->usings; decl; decl = TREE_CHAIN (decl))
1782     if (DECL_INITIAL (decl) == scope && DECL_NAME (decl) == name)
1783       break;
1784   if (decl)
1785     POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP,
1786                             namespace_bindings_p () ? decl : NULL_TREE);
1787   decl = build_lang_decl (USING_DECL, name, void_type_node);
1788   DECL_INITIAL (decl) = scope;
1789   TREE_CHAIN (decl) = current_binding_level->usings;
1790   current_binding_level->usings = decl;
1791   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
1792 }
1793
1794 /* Same as pushdecl, but define X in binding-level LEVEL.  We rely on the
1795    caller to set DECL_CONTEXT properly.  */
1796
1797 tree
1798 pushdecl_with_scope (tree x, cxx_scope *level)
1799 {
1800   struct cp_binding_level *b;
1801   tree function_decl = current_function_decl;
1802
1803   timevar_push (TV_NAME_LOOKUP);
1804   current_function_decl = NULL_TREE;
1805   if (level->kind == sk_class)
1806     {
1807       b = class_binding_level;
1808       class_binding_level = level;
1809       pushdecl_class_level (x);
1810       class_binding_level = b;
1811     }
1812   else
1813     {
1814       b = current_binding_level;
1815       current_binding_level = level;
1816       x = pushdecl (x);
1817       current_binding_level = b;
1818     }
1819   current_function_decl = function_decl;
1820   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, x);
1821 }
1822
1823 /* DECL is a FUNCTION_DECL for a non-member function, which may have
1824    other definitions already in place.  We get around this by making
1825    the value of the identifier point to a list of all the things that
1826    want to be referenced by that name.  It is then up to the users of
1827    that name to decide what to do with that list.
1828
1829    DECL may also be a TEMPLATE_DECL, with a FUNCTION_DECL in its
1830    DECL_TEMPLATE_RESULT.  It is dealt with the same way.
1831
1832    FLAGS is a bitwise-or of the following values:
1833      PUSH_LOCAL: Bind DECL in the current scope, rather than at
1834                  namespace scope.
1835      PUSH_USING: DECL is being pushed as the result of a using
1836                  declaration.
1837
1838    The value returned may be a previous declaration if we guessed wrong
1839    about what language DECL should belong to (C or C++).  Otherwise,
1840    it's always DECL (and never something that's not a _DECL).  */
1841
1842 static tree
1843 push_overloaded_decl (tree decl, int flags)
1844 {
1845   tree name = DECL_NAME (decl);
1846   tree old;
1847   tree new_binding;
1848   int doing_global = (namespace_bindings_p () || !(flags & PUSH_LOCAL));
1849
1850   timevar_push (TV_NAME_LOOKUP);
1851   if (doing_global)
1852     old = namespace_binding (name, DECL_CONTEXT (decl));
1853   else
1854     old = lookup_name_innermost_nonclass_level (name);
1855
1856   if (old)
1857     {
1858       if (TREE_CODE (old) == TYPE_DECL && DECL_ARTIFICIAL (old))
1859         {
1860           tree t = TREE_TYPE (old);
1861           if (IS_AGGR_TYPE (t) && warn_shadow
1862               && (! DECL_IN_SYSTEM_HEADER (decl)
1863                   || ! DECL_IN_SYSTEM_HEADER (old)))
1864             warning ("%q#D hides constructor for %q#T", decl, t);
1865           old = NULL_TREE;
1866         }
1867       else if (is_overloaded_fn (old))
1868         {
1869           tree tmp;
1870
1871           for (tmp = old; tmp; tmp = OVL_NEXT (tmp))
1872             {
1873               tree fn = OVL_CURRENT (tmp);
1874
1875               if (TREE_CODE (tmp) == OVERLOAD && OVL_USED (tmp)
1876                   && !(flags & PUSH_USING)
1877                   && compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
1878                                 TYPE_ARG_TYPES (TREE_TYPE (decl))))
1879                 error ("%q#D conflicts with previous using declaration %q#D",
1880                        decl, fn);
1881
1882               if (duplicate_decls (decl, fn) == fn)
1883                 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, fn);
1884             }
1885         }
1886       else if (old == error_mark_node)
1887         /* Ignore the undefined symbol marker.  */
1888         old = NULL_TREE;
1889       else
1890         {
1891           cp_error_at ("previous non-function declaration %q#D", old);
1892           error ("conflicts with function declaration %q#D", decl);
1893           POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
1894         }
1895     }
1896
1897   if (old || TREE_CODE (decl) == TEMPLATE_DECL
1898       /* If it's a using declaration, we always need to build an OVERLOAD,
1899          because it's the only way to remember that the declaration comes
1900          from 'using', and have the lookup behave correctly.  */
1901       || (flags & PUSH_USING))
1902     {
1903       if (old && TREE_CODE (old) != OVERLOAD)
1904         new_binding = ovl_cons (decl, ovl_cons (old, NULL_TREE));
1905       else
1906         new_binding = ovl_cons (decl, old);
1907       if (flags & PUSH_USING)
1908         OVL_USED (new_binding) = 1;
1909     }
1910   else
1911     /* NAME is not ambiguous.  */
1912     new_binding = decl;
1913
1914   if (doing_global)
1915     set_namespace_binding (name, current_namespace, new_binding);
1916   else
1917     {
1918       /* We only create an OVERLOAD if there was a previous binding at
1919          this level, or if decl is a template. In the former case, we
1920          need to remove the old binding and replace it with the new
1921          binding.  We must also run through the NAMES on the binding
1922          level where the name was bound to update the chain.  */
1923
1924       if (TREE_CODE (new_binding) == OVERLOAD && old)
1925         {
1926           tree *d;
1927
1928           for (d = &IDENTIFIER_BINDING (name)->scope->names;
1929                *d;
1930                d = &TREE_CHAIN (*d))
1931             if (*d == old
1932                 || (TREE_CODE (*d) == TREE_LIST
1933                     && TREE_VALUE (*d) == old))
1934               {
1935                 if (TREE_CODE (*d) == TREE_LIST)
1936                   /* Just replace the old binding with the new.  */
1937                   TREE_VALUE (*d) = new_binding;
1938                 else
1939                   /* Build a TREE_LIST to wrap the OVERLOAD.  */
1940                   *d = tree_cons (NULL_TREE, new_binding,
1941                                   TREE_CHAIN (*d));
1942
1943                 /* And update the cxx_binding node.  */
1944                 IDENTIFIER_BINDING (name)->value = new_binding;
1945                 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
1946               }
1947
1948           /* We should always find a previous binding in this case.  */
1949           gcc_unreachable ();
1950         }
1951
1952       /* Install the new binding.  */
1953       push_local_binding (name, new_binding, flags);
1954     }
1955
1956   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
1957 }
1958
1959 /* Check a non-member using-declaration. Return the name and scope
1960    being used, and the USING_DECL, or NULL_TREE on failure.  */
1961
1962 static tree
1963 validate_nonmember_using_decl (tree decl, tree scope, tree name)
1964 {
1965   /* [namespace.udecl]
1966        A using-declaration for a class member shall be a
1967        member-declaration.  */
1968   if (TYPE_P (scope))
1969     {
1970       error ("%qT is not a namespace", scope);
1971       return NULL_TREE;
1972     }
1973   else if (scope == error_mark_node)
1974     return NULL_TREE;
1975
1976   if (TREE_CODE (decl) == TEMPLATE_ID_EXPR)
1977     {
1978       /* 7.3.3/5
1979            A using-declaration shall not name a template-id.  */
1980       error ("a using-declaration cannot specify a template-id.  "
1981              "Try %<using %D%>", name);
1982       return NULL_TREE;
1983     }
1984
1985   if (TREE_CODE (decl) == NAMESPACE_DECL)
1986     {
1987       error ("namespace %qD not allowed in using-declaration", decl);
1988       return NULL_TREE;
1989     }
1990
1991   if (TREE_CODE (decl) == SCOPE_REF)
1992     {
1993       /* It's a nested name with template parameter dependent scope.
1994          This can only be using-declaration for class member.  */
1995       error ("%qT is not a namespace", TREE_OPERAND (decl, 0));
1996       return NULL_TREE;
1997     }
1998
1999   if (is_overloaded_fn (decl))
2000     decl = get_first_fn (decl);
2001
2002   gcc_assert (DECL_P (decl));
2003
2004   /* Make a USING_DECL.  */
2005   return push_using_decl (scope, name);
2006 }
2007
2008 /* Process local and global using-declarations.  */
2009
2010 static void
2011 do_nonmember_using_decl (tree scope, tree name, tree oldval, tree oldtype,
2012                          tree *newval, tree *newtype)
2013 {
2014   struct scope_binding decls = EMPTY_SCOPE_BINDING;
2015
2016   *newval = *newtype = NULL_TREE;
2017   if (!qualified_lookup_using_namespace (name, scope, &decls, 0))
2018     /* Lookup error */
2019     return;
2020
2021   if (!decls.value && !decls.type)
2022     {
2023       error ("%qD not declared", name);
2024       return;
2025     }
2026
2027   /* Check for using functions.  */
2028   if (decls.value && is_overloaded_fn (decls.value))
2029     {
2030       tree tmp, tmp1;
2031
2032       if (oldval && !is_overloaded_fn (oldval))
2033         {
2034           if (!DECL_IMPLICIT_TYPEDEF_P (oldval))
2035             error ("%qD is already declared in this scope", name);
2036           oldval = NULL_TREE;
2037         }
2038
2039       *newval = oldval;
2040       for (tmp = decls.value; tmp; tmp = OVL_NEXT (tmp))
2041         {
2042           tree new_fn = OVL_CURRENT (tmp);
2043
2044           /* [namespace.udecl]
2045
2046              If a function declaration in namespace scope or block
2047              scope has the same name and the same parameter types as a
2048              function introduced by a using declaration the program is
2049              ill-formed.  */
2050           for (tmp1 = oldval; tmp1; tmp1 = OVL_NEXT (tmp1))
2051             {
2052               tree old_fn = OVL_CURRENT (tmp1);
2053
2054               if (new_fn == old_fn)
2055                 /* The function already exists in the current namespace.  */
2056                 break;
2057               else if (OVL_USED (tmp1))
2058                 continue; /* this is a using decl */
2059               else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (new_fn)),
2060                                   TYPE_ARG_TYPES (TREE_TYPE (old_fn))))
2061                 {
2062                   /* There was already a non-using declaration in
2063                      this scope with the same parameter types. If both
2064                      are the same extern "C" functions, that's ok.  */
2065                   if (decls_match (new_fn, old_fn))
2066                     {
2067                       /* If the OLD_FN was a builtin, we've seen a real 
2068                          declaration in another namespace.  Use it instead.
2069                          Set tmp1 to NULL so we can use the existing
2070                          OVERLOAD logic at the end of this inner loop.
2071                       */
2072                       if (DECL_ANTICIPATED (old_fn))
2073                         {
2074                           gcc_assert (! DECL_ANTICIPATED (new_fn));
2075                           tmp1 = NULL;
2076                         }
2077                       break;
2078                     }
2079                   else if (!DECL_ANTICIPATED (old_fn))
2080                     {
2081                       /* If the OLD_FN was really declared, the
2082                          declarations don't match.  */
2083                       error ("%qD is already declared in this scope", name);
2084                       break;
2085                     }
2086
2087                   /* If the OLD_FN was not really there, just ignore
2088                      it and keep going.  */
2089                 }
2090             }
2091
2092           /* If we broke out of the loop, there's no reason to add
2093              this function to the using declarations for this
2094              scope.  */
2095           if (tmp1)
2096             continue;
2097             
2098           /* If we are adding to an existing OVERLOAD, then we no
2099              longer know the type of the set of functions.  */
2100           if (*newval && TREE_CODE (*newval) == OVERLOAD)
2101             TREE_TYPE (*newval) = unknown_type_node;
2102           /* Add this new function to the set.  */
2103           *newval = build_overload (OVL_CURRENT (tmp), *newval);
2104           /* If there is only one function, then we use its type.  (A
2105              using-declaration naming a single function can be used in
2106              contexts where overload resolution cannot be
2107              performed.)  */
2108           if (TREE_CODE (*newval) != OVERLOAD)
2109             {
2110               *newval = ovl_cons (*newval, NULL_TREE);
2111               TREE_TYPE (*newval) = TREE_TYPE (OVL_CURRENT (tmp));
2112             }
2113           OVL_USED (*newval) = 1;
2114         }
2115     }
2116   else 
2117     {
2118       *newval = decls.value;
2119       if (oldval && !decls_match (*newval, oldval))
2120         error ("%qD is already declared in this scope", name);
2121     }
2122
2123   *newtype = decls.type;
2124   if (oldtype && *newtype && !same_type_p (oldtype, *newtype))
2125     {
2126       error ("using declaration %qD introduced ambiguous type %qT",
2127              name, oldtype);
2128       return;
2129     }
2130 }
2131
2132 /* Process a using-declaration at function scope.  */
2133
2134 void
2135 do_local_using_decl (tree decl, tree scope, tree name)
2136 {
2137   tree oldval, oldtype, newval, newtype;
2138   tree orig_decl = decl;
2139
2140   decl = validate_nonmember_using_decl (decl, scope, name);
2141   if (decl == NULL_TREE)
2142     return;
2143
2144   if (building_stmt_tree ()
2145       && at_function_scope_p ())
2146     add_decl_expr (decl);
2147
2148   oldval = lookup_name_innermost_nonclass_level (name);
2149   oldtype = lookup_type_current_level (name);
2150
2151   do_nonmember_using_decl (scope, name, oldval, oldtype, &newval, &newtype);
2152
2153   if (newval)
2154     {
2155       if (is_overloaded_fn (newval))
2156         {
2157           tree fn, term;
2158
2159           /* We only need to push declarations for those functions
2160              that were not already bound in the current level.
2161              The old value might be NULL_TREE, it might be a single
2162              function, or an OVERLOAD.  */
2163           if (oldval && TREE_CODE (oldval) == OVERLOAD)
2164             term = OVL_FUNCTION (oldval);
2165           else
2166             term = oldval;
2167           for (fn = newval; fn && OVL_CURRENT (fn) != term; 
2168                fn = OVL_NEXT (fn))
2169             push_overloaded_decl (OVL_CURRENT (fn), 
2170                                   PUSH_LOCAL | PUSH_USING);
2171         }
2172       else
2173         push_local_binding (name, newval, PUSH_USING);
2174     }
2175   if (newtype)
2176     {
2177       push_local_binding (name, newtype, PUSH_USING);
2178       set_identifier_type_value (name, newtype);
2179     }
2180
2181   /* Emit debug info.  */
2182   if (!processing_template_decl)
2183     cp_emit_debug_info_for_using (orig_decl, current_scope());
2184 }
2185
2186 /* Returns true if ROOT (a namespace, class, or function) encloses
2187    CHILD.  CHILD may be either a class type or a namespace.  */
2188
2189 bool
2190 is_ancestor (tree root, tree child)
2191 {
2192   gcc_assert ((TREE_CODE (root) == NAMESPACE_DECL
2193                || TREE_CODE (root) == FUNCTION_DECL
2194                || CLASS_TYPE_P (root)));
2195   gcc_assert ((TREE_CODE (child) == NAMESPACE_DECL
2196                || CLASS_TYPE_P (child)));
2197   
2198   /* The global namespace encloses everything.  */
2199   if (root == global_namespace)
2200     return true;
2201
2202   while (true)
2203     {
2204       /* If we've run out of scopes, stop.  */
2205       if (!child)
2206         return false;
2207       /* If we've reached the ROOT, it encloses CHILD.  */
2208       if (root == child)
2209         return true;
2210       /* Go out one level.  */
2211       if (TYPE_P (child))
2212         child = TYPE_NAME (child);
2213       child = DECL_CONTEXT (child);
2214     }
2215 }
2216
2217 /* Enter the class or namespace scope indicated by T suitable for name
2218    lookup.  T can be arbitrary scope, not necessary nested inside the
2219    current scope.  Returns a non-null scope to pop iff pop_scope
2220    should be called later to exit this scope.  */
2221
2222 tree
2223 push_scope (tree t)
2224 {
2225   if (TREE_CODE (t) == NAMESPACE_DECL)
2226     push_decl_namespace (t);
2227   else if (CLASS_TYPE_P (t))
2228     {
2229       if (!at_class_scope_p ()
2230           || !same_type_p (current_class_type, t))
2231         push_nested_class (t);
2232       else
2233         /* T is the same as the current scope.  There is therefore no
2234            need to re-enter the scope.  Since we are not actually
2235            pushing a new scope, our caller should not call
2236            pop_scope.  */
2237         t = NULL_TREE;
2238     }
2239
2240   return t;
2241 }
2242
2243 /* Leave scope pushed by push_scope.  */
2244
2245 void
2246 pop_scope (tree t)
2247 {
2248   if (TREE_CODE (t) == NAMESPACE_DECL)
2249     pop_decl_namespace ();
2250   else if CLASS_TYPE_P (t)
2251     pop_nested_class ();
2252 }
2253
2254 /* Subroutine of push_inner_scope.  */
2255
2256 static void
2257 push_inner_scope_r (tree outer, tree inner)
2258 {
2259   tree prev;
2260
2261   if (outer == inner
2262       || (TREE_CODE (inner) != NAMESPACE_DECL && !CLASS_TYPE_P (inner)))
2263     return;
2264
2265   prev = CP_DECL_CONTEXT (TREE_CODE (inner) == NAMESPACE_DECL ? inner : TYPE_NAME (inner));
2266   if (outer != prev)
2267     push_inner_scope_r (outer, prev);
2268   if (TREE_CODE (inner) == NAMESPACE_DECL)
2269     {
2270       struct cp_binding_level *save_template_parm = 0;
2271       /* Temporary take out template parameter scopes.  They are saved
2272          in reversed order in save_template_parm.  */
2273       while (current_binding_level->kind == sk_template_parms)
2274         {
2275           struct cp_binding_level *b = current_binding_level;
2276           current_binding_level = b->level_chain;
2277           b->level_chain = save_template_parm;
2278           save_template_parm = b;
2279         }
2280
2281       resume_scope (NAMESPACE_LEVEL (inner));
2282       current_namespace = inner;
2283
2284       /* Restore template parameter scopes.  */
2285       while (save_template_parm)
2286         {
2287           struct cp_binding_level *b = save_template_parm;
2288           save_template_parm = b->level_chain;
2289           b->level_chain = current_binding_level;
2290           current_binding_level = b;
2291         }
2292     }
2293   else
2294     pushclass (inner);
2295 }
2296
2297 /* Enter the scope INNER from current scope.  INNER must be a scope
2298    nested inside current scope.  This works with both name lookup and
2299    pushing name into scope.  In case a template parameter scope is present,
2300    namespace is pushed under the template parameter scope according to
2301    name lookup rule in 14.6.1/6.
2302    
2303    Return the former current scope suitable for pop_inner_scope.  */
2304
2305 tree
2306 push_inner_scope (tree inner)
2307 {
2308   tree outer = current_scope ();
2309   if (!outer)
2310     outer = current_namespace;
2311
2312   push_inner_scope_r (outer, inner);
2313   return outer;
2314 }
2315
2316 /* Exit the current scope INNER back to scope OUTER.  */
2317
2318 void
2319 pop_inner_scope (tree outer, tree inner)
2320 {
2321   if (outer == inner
2322       || (TREE_CODE (inner) != NAMESPACE_DECL && !CLASS_TYPE_P (inner)))
2323     return;
2324
2325   while (outer != inner)
2326     {
2327       if (TREE_CODE (inner) == NAMESPACE_DECL)
2328         {
2329           struct cp_binding_level *save_template_parm = 0;
2330           /* Temporary take out template parameter scopes.  They are saved
2331              in reversed order in save_template_parm.  */
2332           while (current_binding_level->kind == sk_template_parms)
2333             {
2334               struct cp_binding_level *b = current_binding_level;
2335               current_binding_level = b->level_chain;
2336               b->level_chain = save_template_parm;
2337               save_template_parm = b;
2338             }
2339
2340           pop_namespace ();
2341
2342           /* Restore template parameter scopes.  */
2343           while (save_template_parm)
2344             {
2345               struct cp_binding_level *b = save_template_parm;
2346               save_template_parm = b->level_chain;
2347               b->level_chain = current_binding_level;
2348               current_binding_level = b;
2349             }
2350         }
2351       else
2352         popclass ();
2353
2354       inner = CP_DECL_CONTEXT (TREE_CODE (inner) == NAMESPACE_DECL ? inner : TYPE_NAME (inner));
2355     }
2356 }
2357 \f
2358 /* Do a pushlevel for class declarations.  */
2359
2360 void
2361 pushlevel_class (void)
2362 {
2363   if (ENABLE_SCOPE_CHECKING)
2364     is_class_level = 1;
2365
2366   class_binding_level = begin_scope (sk_class, current_class_type);
2367 }
2368
2369 /* ...and a poplevel for class declarations.  */
2370
2371 void
2372 poplevel_class (void)
2373 {
2374   struct cp_binding_level *level = class_binding_level;
2375   cp_class_binding *cb;
2376   size_t i;
2377   tree shadowed;
2378
2379   timevar_push (TV_NAME_LOOKUP);
2380   gcc_assert (level != 0);
2381
2382   /* If we're leaving a toplevel class, cache its binding level.  */
2383   if (current_class_depth == 1)
2384     previous_class_level = level;
2385   for (shadowed = level->type_shadowed;
2386        shadowed;
2387        shadowed = TREE_CHAIN (shadowed))
2388     SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (shadowed), TREE_VALUE (shadowed));
2389
2390   /* Remove the bindings for all of the class-level declarations.  */
2391   if (level->class_shadowed)
2392     {
2393       for (i = 0;
2394            VEC_iterate (cp_class_binding, level->class_shadowed, i, cb);
2395            ++i)
2396         IDENTIFIER_BINDING (cb->identifier) = cb->base.previous;
2397       ggc_free (level->class_shadowed);
2398       level->class_shadowed = NULL;
2399     }
2400
2401   /* Now, pop out of the binding level which we created up in the
2402      `pushlevel_class' routine.  */
2403   if (ENABLE_SCOPE_CHECKING)
2404     is_class_level = 1;
2405
2406   leave_scope ();
2407   timevar_pop (TV_NAME_LOOKUP);
2408 }
2409
2410 /* Set INHERITED_VALUE_BINDING_P on BINDING to true or false, as
2411    appropriate.  DECL is the value to which a name has just been
2412    bound.  CLASS_TYPE is the class in which the lookup occurred.  */
2413
2414 static void
2415 set_inherited_value_binding_p (cxx_binding *binding, tree decl,
2416                                tree class_type)
2417 {
2418   if (binding->value == decl && TREE_CODE (decl) != TREE_LIST)
2419     {
2420       tree context;
2421
2422       if (TREE_CODE (decl) == OVERLOAD)
2423         context = CP_DECL_CONTEXT (OVL_CURRENT (decl));
2424       else
2425         {
2426           gcc_assert (DECL_P (decl));
2427           context = context_for_name_lookup (decl);
2428         }
2429
2430       if (is_properly_derived_from (class_type, context))
2431         INHERITED_VALUE_BINDING_P (binding) = 1;
2432       else
2433         INHERITED_VALUE_BINDING_P (binding) = 0;
2434     }
2435   else if (binding->value == decl)
2436     /* We only encounter a TREE_LIST when there is an ambiguity in the
2437        base classes.  Such an ambiguity can be overridden by a
2438        definition in this class.  */
2439     INHERITED_VALUE_BINDING_P (binding) = 1;
2440   else
2441     INHERITED_VALUE_BINDING_P (binding) = 0;
2442 }
2443
2444 /* Make the declaration of X appear in CLASS scope.  */
2445
2446 bool
2447 pushdecl_class_level (tree x)
2448 {
2449   tree name;
2450   bool is_valid = true;
2451
2452   timevar_push (TV_NAME_LOOKUP);
2453   /* Get the name of X.  */
2454   if (TREE_CODE (x) == OVERLOAD)
2455     name = DECL_NAME (get_first_fn (x));
2456   else
2457     name = DECL_NAME (x);
2458
2459   if (name)
2460     {
2461       is_valid = push_class_level_binding (name, x);
2462       if (TREE_CODE (x) == TYPE_DECL)
2463         set_identifier_type_value (name, x);
2464     }
2465   else if (ANON_AGGR_TYPE_P (TREE_TYPE (x)))
2466     {
2467       /* If X is an anonymous aggregate, all of its members are
2468          treated as if they were members of the class containing the
2469          aggregate, for naming purposes.  */
2470       tree f;
2471
2472       for (f = TYPE_FIELDS (TREE_TYPE (x)); f; f = TREE_CHAIN (f))
2473         {
2474           location_t save_location = input_location;
2475           input_location = DECL_SOURCE_LOCATION (f);
2476           if (!pushdecl_class_level (f))
2477             is_valid = false;
2478           input_location = save_location;
2479         }
2480     }
2481   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, is_valid);
2482 }
2483
2484 /* Return the BINDING (if any) for NAME in SCOPE, which is a class
2485    scope.  If the value returned is non-NULL, and the PREVIOUS field
2486    is not set, callers must set the PREVIOUS field explicitly.  */
2487
2488 static cxx_binding *
2489 get_class_binding (tree name, cxx_scope *scope)
2490 {
2491   tree class_type;
2492   tree type_binding;
2493   tree value_binding;
2494   cxx_binding *binding;
2495
2496   class_type = scope->this_entity;
2497
2498   /* Get the type binding.  */
2499   type_binding = lookup_member (class_type, name,
2500                                 /*protect=*/2, /*want_type=*/true);
2501   /* Get the value binding.  */
2502   value_binding = lookup_member (class_type, name,
2503                                  /*protect=*/2, /*want_type=*/false);
2504
2505   if (value_binding
2506       && (TREE_CODE (value_binding) == TYPE_DECL
2507           || DECL_CLASS_TEMPLATE_P (value_binding)
2508           || (TREE_CODE (value_binding) == TREE_LIST
2509               && TREE_TYPE (value_binding) == error_mark_node
2510               && (TREE_CODE (TREE_VALUE (value_binding))
2511                   == TYPE_DECL))))
2512     /* We found a type binding, even when looking for a non-type
2513        binding.  This means that we already processed this binding
2514        above.  */
2515     ;
2516   else if (value_binding)
2517     {
2518       if (TREE_CODE (value_binding) == TREE_LIST 
2519           && TREE_TYPE (value_binding) == error_mark_node)
2520         /* NAME is ambiguous.  */
2521         ;
2522       else if (BASELINK_P (value_binding))
2523         /* NAME is some overloaded functions.  */
2524         value_binding = BASELINK_FUNCTIONS (value_binding);
2525     }
2526
2527   /* If we found either a type binding or a value binding, create a
2528      new binding object.  */
2529   if (type_binding || value_binding)
2530     {
2531       binding = new_class_binding (name, 
2532                                    value_binding, 
2533                                    type_binding,
2534                                    scope);
2535       /* This is a class-scope binding, not a block-scope binding.  */
2536       LOCAL_BINDING_P (binding) = 0;
2537       set_inherited_value_binding_p (binding, value_binding, class_type);
2538     }
2539   else
2540     binding = NULL;
2541
2542   return binding;
2543 }
2544                    
2545 /* Make the declaration(s) of X appear in CLASS scope under the name
2546    NAME.  Returns true if the binding is valid.  */
2547
2548 bool
2549 push_class_level_binding (tree name, tree x)
2550 {
2551   cxx_binding *binding;
2552   tree decl = x;
2553   bool ok;
2554
2555   timevar_push (TV_NAME_LOOKUP);
2556   /* The class_binding_level will be NULL if x is a template
2557      parameter name in a member template.  */
2558   if (!class_binding_level)
2559     POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, true);
2560
2561   /* Check for invalid member names.  */
2562   gcc_assert (TYPE_BEING_DEFINED (current_class_type));
2563   /* We could have been passed a tree list if this is an ambiguous
2564      declaration. If so, pull the declaration out because
2565      check_template_shadow will not handle a TREE_LIST.  */
2566   if (TREE_CODE (decl) == TREE_LIST 
2567       && TREE_TYPE (decl) == error_mark_node)
2568     decl = TREE_VALUE (decl);
2569
2570   check_template_shadow (decl);
2571
2572   /* [class.mem]
2573
2574      If T is the name of a class, then each of the following shall
2575      have a name different from T:
2576
2577      -- every static data member of class T;
2578
2579      -- every member of class T that is itself a type;
2580
2581      -- every enumerator of every member of class T that is an
2582         enumerated type;
2583
2584      -- every member of every anonymous union that is a member of
2585         class T.
2586
2587      (Non-static data members were also forbidden to have the same
2588      name as T until TC1.)  */
2589   if ((TREE_CODE (x) == VAR_DECL
2590        || TREE_CODE (x) == CONST_DECL
2591        || (TREE_CODE (x) == TYPE_DECL
2592            && !DECL_SELF_REFERENCE_P (x))
2593        /* A data member of an anonymous union.  */
2594        || (TREE_CODE (x) == FIELD_DECL
2595            && DECL_CONTEXT (x) != current_class_type))
2596       && DECL_NAME (x) == constructor_name (current_class_type))
2597     {
2598       tree scope = context_for_name_lookup (x);
2599       if (TYPE_P (scope) && same_type_p (scope, current_class_type))
2600         {
2601           error ("%qD has the same name as the class in which it is "
2602                  "declared",
2603                  x);
2604           POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, false);
2605         }
2606     }
2607
2608   /* Get the current binding for NAME in this class, if any.  */
2609   binding = IDENTIFIER_BINDING (name);
2610   if (!binding || binding->scope != class_binding_level)
2611     {
2612       binding = get_class_binding (name, class_binding_level);
2613       /* If a new binding was created, put it at the front of the
2614          IDENTIFIER_BINDING list.  */
2615       if (binding)
2616         {
2617           binding->previous = IDENTIFIER_BINDING (name);
2618           IDENTIFIER_BINDING (name) = binding;
2619         }
2620     }
2621
2622   /* If there is already a binding, then we may need to update the
2623      current value.  */
2624   if (binding && binding->value)
2625     {
2626       tree bval = binding->value;
2627       tree old_decl = NULL_TREE;
2628
2629       if (INHERITED_VALUE_BINDING_P (binding))
2630         {
2631           /* If the old binding was from a base class, and was for a
2632              tag name, slide it over to make room for the new binding.
2633              The old binding is still visible if explicitly qualified
2634              with a class-key.  */
2635           if (TREE_CODE (bval) == TYPE_DECL && DECL_ARTIFICIAL (bval)
2636               && !(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)))
2637             {
2638               old_decl = binding->type;
2639               binding->type = bval;
2640               binding->value = NULL_TREE;
2641               INHERITED_VALUE_BINDING_P (binding) = 0;
2642             }
2643           else
2644             old_decl = bval;
2645         }
2646       else if (TREE_CODE (x) == OVERLOAD && is_overloaded_fn (bval))
2647         old_decl = bval;
2648       else if (TREE_CODE (x) == USING_DECL && TREE_CODE (bval) == USING_DECL)
2649         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, true);
2650       else if (TREE_CODE (x) == USING_DECL && is_overloaded_fn (bval))
2651         old_decl = bval;
2652       else if (TREE_CODE (bval) == USING_DECL && is_overloaded_fn (x))
2653         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, true);
2654
2655       if (old_decl && binding->scope == class_binding_level)
2656         {
2657           binding->value = x;
2658           /* It is always safe to clear INHERITED_VALUE_BINDING_P
2659              here.  This function is only used to register bindings
2660              from with the class definition itself.  */
2661           INHERITED_VALUE_BINDING_P (binding) = 0;
2662           POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, true);
2663         }
2664     }
2665
2666   /* Note that we declared this value so that we can issue an error if
2667      this is an invalid redeclaration of a name already used for some
2668      other purpose.  */
2669   note_name_declared_in_class (name, decl);
2670
2671   /* If we didn't replace an existing binding, put the binding on the
2672      stack of bindings for the identifier, and update the shadowed
2673      list.  */
2674   if (binding && binding->scope == class_binding_level)
2675     /* Supplement the existing binding.  */
2676     ok = supplement_binding (binding, decl);
2677   else
2678     {
2679       /* Create a new binding.  */
2680       push_binding (name, decl, class_binding_level);
2681       ok = true;
2682     }
2683
2684   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, ok);
2685 }
2686
2687 /* Process "using SCOPE::NAME" in a class scope.  Return the
2688    USING_DECL created.  */
2689
2690 tree
2691 do_class_using_decl (tree scope, tree name)
2692 {
2693   tree value, type;
2694   
2695   if (!scope || !TYPE_P (scope))
2696     {
2697       error ("using-declaration for non-member at class scope");
2698       return NULL_TREE;
2699     }
2700   if (TREE_CODE (name) == BIT_NOT_EXPR)
2701     {
2702       error ("using-declaration cannot name destructor");
2703       return NULL_TREE;
2704     }
2705
2706   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
2707
2708   /* Dependent using decls have a NULL type, non-dependent ones have a
2709      void type.  */
2710   type = dependent_type_p (scope) ? NULL_TREE : void_type_node;
2711   value = build_lang_decl (USING_DECL, name, type);
2712   DECL_INITIAL (value) = scope;
2713
2714   if (scope && !processing_template_decl)
2715     {
2716       tree r;
2717
2718       r = lookup_qualified_name (scope, name, false, false);
2719       if (r && (DECL_P (r) || TREE_CODE (r) == OVERLOAD))
2720         cp_emit_debug_info_for_using (r, scope);
2721     }
2722   return value;
2723 }
2724
2725 \f
2726 /* Return the binding value for name in scope.  */
2727
2728 tree
2729 namespace_binding (tree name, tree scope)
2730 {
2731   cxx_binding *binding;
2732
2733   if (scope == NULL)
2734     scope = global_namespace;
2735   else
2736     /* Unnecessary for the global namespace because it can't be an alias. */
2737     scope = ORIGINAL_NAMESPACE (scope);
2738
2739   binding = cxx_scope_find_binding_for_name (NAMESPACE_LEVEL (scope), name);
2740
2741   return binding ? binding->value : NULL_TREE;
2742 }
2743
2744 /* Set the binding value for name in scope.  */
2745
2746 void
2747 set_namespace_binding (tree name, tree scope, tree val)
2748 {
2749   cxx_binding *b;
2750
2751   timevar_push (TV_NAME_LOOKUP);
2752   if (scope == NULL_TREE)
2753     scope = global_namespace;
2754   b = binding_for_name (NAMESPACE_LEVEL (scope), name);
2755   if (!b->value || TREE_CODE (val) == OVERLOAD || val == error_mark_node)
2756     b->value = val;
2757   else
2758     supplement_binding (b, val);
2759   timevar_pop (TV_NAME_LOOKUP);
2760 }
2761
2762 /* Set the context of a declaration to scope. Complain if we are not
2763    outside scope.  */
2764
2765 void
2766 set_decl_namespace (tree decl, tree scope, bool friendp)
2767 {
2768   tree old;
2769   
2770   /* Get rid of namespace aliases.  */
2771   scope = ORIGINAL_NAMESPACE (scope);
2772   
2773   /* It is ok for friends to be qualified in parallel space.  */
2774   if (!friendp && !is_ancestor (current_namespace, scope))
2775     error ("declaration of %qD not in a namespace surrounding %qD",
2776            decl, scope);
2777   DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
2778
2779   /* Writing "int N::i" to declare a variable within "N" is invalid.  */ 
2780   if (scope == current_namespace) 
2781     {
2782       if (at_namespace_scope_p ())
2783         error ("explicit qualification in declaration of `%D'",
2784                decl);
2785       return;
2786     }
2787
2788   /* See whether this has been declared in the namespace.  */
2789   old = namespace_binding (DECL_NAME (decl), scope);
2790   if (!old)
2791     /* No old declaration at all.  */
2792     goto complain;
2793   /* A template can be explicitly specialized in any namespace.  */
2794   if (processing_explicit_instantiation)
2795     return;
2796   if (!is_overloaded_fn (decl))
2797     /* Don't compare non-function decls with decls_match here, since
2798        it can't check for the correct constness at this
2799        point. pushdecl will find those errors later.  */
2800     return;
2801   /* Since decl is a function, old should contain a function decl.  */
2802   if (!is_overloaded_fn (old))
2803     goto complain;
2804   if (processing_template_decl || processing_specialization)
2805     /* We have not yet called push_template_decl to turn a
2806        FUNCTION_DECL into a TEMPLATE_DECL, so the declarations won't
2807        match.  But, we'll check later, when we construct the
2808        template.  */
2809     return;
2810   if (is_overloaded_fn (old))
2811     {
2812       for (; old; old = OVL_NEXT (old))
2813         if (decls_match (decl, OVL_CURRENT (old)))
2814           return;
2815     }
2816   else if (decls_match (decl, old))
2817       return;
2818  complain:
2819   error ("%qD should have been declared inside %qD", decl, scope);
2820
2821
2822 /* Return the namespace where the current declaration is declared.  */
2823
2824 tree
2825 current_decl_namespace (void)
2826 {
2827   tree result;
2828   /* If we have been pushed into a different namespace, use it.  */
2829   if (decl_namespace_list)
2830     return TREE_PURPOSE (decl_namespace_list);
2831
2832   if (current_class_type)
2833     result = decl_namespace_context (current_class_type);
2834   else if (current_function_decl)
2835     result = decl_namespace_context (current_function_decl);
2836   else 
2837     result = current_namespace;
2838   return result;
2839 }
2840
2841 /* Push into the scope of the NAME namespace.  If NAME is NULL_TREE, then we
2842    select a name that is unique to this compilation unit.  */
2843
2844 void
2845 push_namespace (tree name)
2846 {
2847   tree d = NULL_TREE;
2848   int need_new = 1;
2849   int implicit_use = 0;
2850   bool anon = !name;
2851
2852   timevar_push (TV_NAME_LOOKUP);
2853   
2854   /* We should not get here if the global_namespace is not yet constructed
2855      nor if NAME designates the global namespace:  The global scope is
2856      constructed elsewhere.  */
2857   gcc_assert (global_namespace != NULL && name != global_scope_name);
2858
2859   if (anon)
2860     {
2861       /* The name of anonymous namespace is unique for the translation
2862          unit.  */
2863       if (!anonymous_namespace_name)
2864         anonymous_namespace_name = get_file_function_name ('N');
2865       name = anonymous_namespace_name;
2866       d = IDENTIFIER_NAMESPACE_VALUE (name);
2867       if (d)
2868         /* Reopening anonymous namespace.  */
2869         need_new = 0;
2870       implicit_use = 1;
2871     }
2872   else
2873     {
2874       /* Check whether this is an extended namespace definition.  */
2875       d = IDENTIFIER_NAMESPACE_VALUE (name);
2876       if (d != NULL_TREE && TREE_CODE (d) == NAMESPACE_DECL)
2877         {
2878           need_new = 0;
2879           if (DECL_NAMESPACE_ALIAS (d))
2880             {
2881               error ("namespace alias %qD not allowed here, assuming %qD",
2882                      d, DECL_NAMESPACE_ALIAS (d));
2883               d = DECL_NAMESPACE_ALIAS (d);
2884             }
2885         }
2886     }
2887
2888   if (need_new)
2889     {
2890       /* Make a new namespace, binding the name to it.  */
2891       d = build_lang_decl (NAMESPACE_DECL, name, void_type_node);
2892       DECL_CONTEXT (d) = FROB_CONTEXT (current_namespace);
2893       pushdecl (d);
2894       if (anon)
2895         {
2896           /* Clear DECL_NAME for the benefit of debugging back ends.  */
2897           SET_DECL_ASSEMBLER_NAME (d, name);
2898           DECL_NAME (d) = NULL_TREE;
2899         }
2900       begin_scope (sk_namespace, d);
2901     }
2902   else
2903     resume_scope (NAMESPACE_LEVEL (d));
2904
2905   if (implicit_use)
2906     do_using_directive (d);
2907   /* Enter the name space.  */
2908   current_namespace = d;
2909
2910   timevar_pop (TV_NAME_LOOKUP);
2911 }
2912
2913 /* Pop from the scope of the current namespace.  */
2914
2915 void
2916 pop_namespace (void)
2917 {
2918   gcc_assert (current_namespace != global_namespace);
2919   current_namespace = CP_DECL_CONTEXT (current_namespace);
2920   /* The binding level is not popped, as it might be re-opened later.  */
2921   leave_scope ();
2922 }
2923
2924 /* Push into the scope of the namespace NS, even if it is deeply
2925    nested within another namespace.  */
2926
2927 void
2928 push_nested_namespace (tree ns)
2929 {
2930   if (ns == global_namespace)
2931     push_to_top_level ();
2932   else
2933     {
2934       push_nested_namespace (CP_DECL_CONTEXT (ns));
2935       push_namespace (DECL_NAME (ns));
2936     }
2937 }
2938
2939 /* Pop back from the scope of the namespace NS, which was previously
2940    entered with push_nested_namespace.  */
2941
2942 void
2943 pop_nested_namespace (tree ns)
2944 {
2945   timevar_push (TV_NAME_LOOKUP);
2946   while (ns != global_namespace)
2947     {
2948       pop_namespace ();
2949       ns = CP_DECL_CONTEXT (ns);
2950     }
2951
2952   pop_from_top_level ();
2953   timevar_pop (TV_NAME_LOOKUP);
2954 }
2955
2956 /* Temporarily set the namespace for the current declaration.  */
2957
2958 void
2959 push_decl_namespace (tree decl)
2960 {
2961   if (TREE_CODE (decl) != NAMESPACE_DECL)
2962     decl = decl_namespace_context (decl);
2963   decl_namespace_list = tree_cons (ORIGINAL_NAMESPACE (decl),
2964                                    NULL_TREE, decl_namespace_list);
2965 }
2966
2967 /* [namespace.memdef]/2 */
2968
2969 void
2970 pop_decl_namespace (void)
2971 {
2972   decl_namespace_list = TREE_CHAIN (decl_namespace_list);
2973 }
2974
2975 /* Return the namespace that is the common ancestor 
2976    of two given namespaces.  */
2977
2978 static tree
2979 namespace_ancestor (tree ns1, tree ns2)
2980 {
2981   timevar_push (TV_NAME_LOOKUP);
2982   if (is_ancestor (ns1, ns2))
2983     POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, ns1);
2984   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP,
2985                           namespace_ancestor (CP_DECL_CONTEXT (ns1), ns2));
2986 }
2987
2988 /* Process a namespace-alias declaration.  */
2989
2990 void
2991 do_namespace_alias (tree alias, tree namespace)
2992 {
2993   if (TREE_CODE (namespace) != NAMESPACE_DECL)
2994     {
2995       /* The parser did not find it, so it's not there.  */
2996       error ("unknown namespace %qD", namespace);
2997       return;
2998     }
2999
3000   namespace = ORIGINAL_NAMESPACE (namespace);
3001
3002   /* Build the alias.  */
3003   alias = build_lang_decl (NAMESPACE_DECL, alias, void_type_node);     
3004   DECL_NAMESPACE_ALIAS (alias) = namespace;
3005   DECL_EXTERNAL (alias) = 1;
3006   DECL_CONTEXT (alias) = FROB_CONTEXT (current_scope ());
3007   pushdecl (alias);
3008
3009   /* Emit debug info for namespace alias.  */
3010   (*debug_hooks->global_decl) (alias);
3011 }
3012
3013 /* Like pushdecl, only it places X in the current namespace,
3014    if appropriate.  */
3015
3016 tree
3017 pushdecl_namespace_level (tree x)
3018 {
3019   struct cp_binding_level *b = current_binding_level;
3020   tree t;
3021
3022   timevar_push (TV_NAME_LOOKUP);
3023   t = pushdecl_with_scope (x, NAMESPACE_LEVEL (current_namespace));
3024
3025   /* Now, the type_shadowed stack may screw us.  Munge it so it does
3026      what we want.  */
3027   if (TREE_CODE (x) == TYPE_DECL)
3028     {
3029       tree name = DECL_NAME (x);
3030       tree newval;
3031       tree *ptr = (tree *)0;
3032       for (; !global_scope_p (b); b = b->level_chain)
3033         {
3034           tree shadowed = b->type_shadowed;
3035           for (; shadowed; shadowed = TREE_CHAIN (shadowed))
3036             if (TREE_PURPOSE (shadowed) == name)
3037               {
3038                 ptr = &TREE_VALUE (shadowed);
3039                 /* Can't break out of the loop here because sometimes
3040                    a binding level will have duplicate bindings for
3041                    PT names.  It's gross, but I haven't time to fix it.  */
3042               }
3043         }
3044       newval = TREE_TYPE (x);
3045       if (ptr == (tree *)0)
3046         {
3047           /* @@ This shouldn't be needed.  My test case "zstring.cc" trips
3048              up here if this is changed to an assertion.  --KR  */
3049           SET_IDENTIFIER_TYPE_VALUE (name, x);
3050         }
3051       else
3052         {
3053           *ptr = newval;
3054         }
3055     }
3056   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
3057 }
3058
3059 /* Insert USED into the using list of USER. Set INDIRECT_flag if this
3060    directive is not directly from the source. Also find the common
3061    ancestor and let our users know about the new namespace */
3062 static void 
3063 add_using_namespace (tree user, tree used, bool indirect)
3064 {
3065   tree t;
3066   timevar_push (TV_NAME_LOOKUP);
3067   /* Using oneself is a no-op.  */
3068   if (user == used)
3069     {
3070       timevar_pop (TV_NAME_LOOKUP);
3071       return;
3072     }
3073   gcc_assert (TREE_CODE (user) == NAMESPACE_DECL);
3074   gcc_assert (TREE_CODE (used) == NAMESPACE_DECL);
3075   /* Check if we already have this.  */
3076   t = purpose_member (used, DECL_NAMESPACE_USING (user));
3077   if (t != NULL_TREE)
3078     {
3079       if (!indirect)
3080         /* Promote to direct usage.  */
3081         TREE_INDIRECT_USING (t) = 0;
3082       timevar_pop (TV_NAME_LOOKUP);
3083       return;
3084     }
3085
3086   /* Add used to the user's using list.  */
3087   DECL_NAMESPACE_USING (user) 
3088     = tree_cons (used, namespace_ancestor (user, used), 
3089                  DECL_NAMESPACE_USING (user));
3090
3091   TREE_INDIRECT_USING (DECL_NAMESPACE_USING (user)) = indirect;
3092
3093   /* Add user to the used's users list.  */
3094   DECL_NAMESPACE_USERS (used)
3095     = tree_cons (user, 0, DECL_NAMESPACE_USERS (used));
3096
3097   /* Recursively add all namespaces used.  */
3098   for (t = DECL_NAMESPACE_USING (used); t; t = TREE_CHAIN (t))
3099     /* indirect usage */
3100     add_using_namespace (user, TREE_PURPOSE (t), 1);
3101
3102   /* Tell everyone using us about the new used namespaces.  */
3103   for (t = DECL_NAMESPACE_USERS (user); t; t = TREE_CHAIN (t))
3104     add_using_namespace (TREE_PURPOSE (t), used, 1);
3105   timevar_pop (TV_NAME_LOOKUP);
3106 }
3107
3108 /* Process a using-declaration not appearing in class or local scope.  */
3109
3110 void
3111 do_toplevel_using_decl (tree decl, tree scope, tree name)
3112 {
3113   tree oldval, oldtype, newval, newtype;
3114   tree orig_decl = decl;
3115   cxx_binding *binding;
3116
3117   decl = validate_nonmember_using_decl (decl, scope, name);
3118   if (decl == NULL_TREE)
3119     return;
3120   
3121   binding = binding_for_name (NAMESPACE_LEVEL (current_namespace), name);
3122
3123   oldval = binding->value;
3124   oldtype = binding->type;
3125
3126   do_nonmember_using_decl (scope, name, oldval, oldtype, &newval, &newtype);
3127
3128   /* Emit debug info.  */
3129   if (!processing_template_decl)
3130     cp_emit_debug_info_for_using (orig_decl, current_namespace);
3131
3132   /* Copy declarations found.  */
3133   if (newval)
3134     binding->value = newval;
3135   if (newtype)
3136     binding->type = newtype;
3137   return;
3138 }
3139
3140 /* Process a using-directive.  */
3141
3142 void
3143 do_using_directive (tree namespace)
3144 {
3145   tree context = NULL_TREE;
3146
3147   if (building_stmt_tree ())
3148     add_stmt (build_stmt (USING_STMT, namespace));
3149   
3150   /* using namespace A::B::C; */
3151   if (TREE_CODE (namespace) == SCOPE_REF)
3152       namespace = TREE_OPERAND (namespace, 1);
3153   if (TREE_CODE (namespace) == IDENTIFIER_NODE)
3154     {
3155       /* Lookup in lexer did not find a namespace.  */
3156       if (!processing_template_decl)
3157         error ("namespace %qT undeclared", namespace);
3158       return;
3159     }
3160   if (TREE_CODE (namespace) != NAMESPACE_DECL)
3161     {
3162       if (!processing_template_decl)
3163         error ("%qT is not a namespace", namespace);
3164       return;
3165     }
3166   namespace = ORIGINAL_NAMESPACE (namespace);
3167   if (!toplevel_bindings_p ())
3168     {
3169       push_using_directive (namespace);
3170       context = current_scope ();
3171     }
3172   else
3173     {
3174       /* direct usage */
3175       add_using_namespace (current_namespace, namespace, 0);
3176       if (current_namespace != global_namespace)
3177         context = current_namespace;
3178     }
3179       
3180   /* Emit debugging info.  */
3181   if (!processing_template_decl)
3182     (*debug_hooks->imported_module_or_decl) (namespace, context);
3183 }
3184
3185 /* Deal with a using-directive seen by the parser.  Currently we only
3186    handle attributes here, since they cannot appear inside a template.  */
3187
3188 void
3189 parse_using_directive (tree namespace, tree attribs)
3190 {
3191   tree a;
3192
3193   do_using_directive (namespace);
3194
3195   for (a = attribs; a; a = TREE_CHAIN (a))
3196     {
3197       tree name = TREE_PURPOSE (a);
3198       if (is_attribute_p ("strong", name))
3199         {
3200           if (!toplevel_bindings_p ())
3201             error ("strong using only meaningful at namespace scope");
3202           else if (namespace != error_mark_node)
3203             DECL_NAMESPACE_ASSOCIATIONS (namespace)
3204               = tree_cons (current_namespace, 0,
3205                            DECL_NAMESPACE_ASSOCIATIONS (namespace));
3206         }
3207       else
3208         warning ("%qD attribute directive ignored", name);
3209     }
3210 }
3211
3212 /* Like pushdecl, only it places X in the global scope if appropriate.
3213    Calls cp_finish_decl to register the variable, initializing it with
3214    *INIT, if INIT is non-NULL.  */
3215
3216 static tree
3217 pushdecl_top_level_1 (tree x, tree *init)
3218 {
3219   timevar_push (TV_NAME_LOOKUP);
3220   push_to_top_level ();
3221   x = pushdecl_namespace_level (x);
3222   if (init)
3223     cp_finish_decl (x, *init, NULL_TREE, 0);
3224   pop_from_top_level ();
3225   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, x);
3226 }
3227
3228 /* Like pushdecl, only it places X in the global scope if appropriate.  */
3229
3230 tree
3231 pushdecl_top_level (tree x)
3232 {
3233   return pushdecl_top_level_1 (x, NULL);
3234 }
3235
3236 /* Like pushdecl, only it places X in the global scope if
3237    appropriate.  Calls cp_finish_decl to register the variable,
3238    initializing it with INIT.  */
3239
3240 tree
3241 pushdecl_top_level_and_finish (tree x, tree init)
3242 {
3243   return pushdecl_top_level_1 (x, &init);
3244 }
3245
3246 /* Combines two sets of overloaded functions into an OVERLOAD chain, removing
3247    duplicates.  The first list becomes the tail of the result.
3248
3249    The algorithm is O(n^2).  We could get this down to O(n log n) by
3250    doing a sort on the addresses of the functions, if that becomes
3251    necessary.  */
3252
3253 static tree
3254 merge_functions (tree s1, tree s2)
3255 {
3256   for (; s2; s2 = OVL_NEXT (s2))
3257     {
3258       tree fn2 = OVL_CURRENT (s2);
3259       tree fns1;
3260
3261       for (fns1 = s1; fns1; fns1 = OVL_NEXT (fns1))
3262         {
3263           tree fn1 = OVL_CURRENT (fns1);
3264
3265           /* If the function from S2 is already in S1, there is no
3266              need to add it again.  For `extern "C"' functions, we
3267              might have two FUNCTION_DECLs for the same function, in
3268              different namespaces; again, we only need one of them.  */
3269           if (fn1 == fn2 
3270               || (DECL_EXTERN_C_P (fn1) && DECL_EXTERN_C_P (fn2)
3271                   && DECL_NAME (fn1) == DECL_NAME (fn2)))
3272             break;
3273         }
3274       
3275       /* If we exhausted all of the functions in S1, FN2 is new.  */
3276       if (!fns1)
3277         s1 = build_overload (fn2, s1);
3278     }
3279   return s1;
3280 }
3281
3282 /* This should return an error not all definitions define functions.
3283    It is not an error if we find two functions with exactly the
3284    same signature, only if these are selected in overload resolution.
3285    old is the current set of bindings, new the freshly-found binding.
3286    XXX Do we want to give *all* candidates in case of ambiguity?
3287    XXX In what way should I treat extern declarations?
3288    XXX I don't want to repeat the entire duplicate_decls here */
3289
3290 static void
3291 ambiguous_decl (tree name, struct scope_binding *old, cxx_binding *new,
3292                 int flags)
3293 {
3294   tree val, type;
3295   gcc_assert (old != NULL);
3296   /* Copy the value.  */
3297   val = new->value;
3298   if (val)
3299     switch (TREE_CODE (val))
3300       {
3301       case TEMPLATE_DECL:
3302         /* If we expect types or namespaces, and not templates,
3303            or this is not a template class.  */
3304         if (LOOKUP_QUALIFIERS_ONLY (flags)
3305             && !DECL_CLASS_TEMPLATE_P (val))
3306           val = NULL_TREE;
3307         break;
3308       case TYPE_DECL:
3309         if (LOOKUP_NAMESPACES_ONLY (flags))
3310           val = NULL_TREE;
3311         break;
3312       case NAMESPACE_DECL:
3313         if (LOOKUP_TYPES_ONLY (flags))
3314           val = NULL_TREE;
3315         break;
3316       case FUNCTION_DECL:
3317         /* Ignore built-in functions that are still anticipated.  */
3318         if (LOOKUP_QUALIFIERS_ONLY (flags) || DECL_ANTICIPATED (val))
3319           val = NULL_TREE;
3320         break;
3321       default:
3322         if (LOOKUP_QUALIFIERS_ONLY (flags))
3323           val = NULL_TREE;
3324       }
3325         
3326   if (!old->value)
3327     old->value = val;
3328   else if (val && val != old->value)
3329     {
3330       if (is_overloaded_fn (old->value) && is_overloaded_fn (val))
3331         old->value = merge_functions (old->value, val);
3332       else
3333         {
3334           /* Some declarations are functions, some are not.  */
3335           if (flags & LOOKUP_COMPLAIN)
3336             {
3337               /* If we've already given this error for this lookup,
3338                  old->value is error_mark_node, so let's not
3339                  repeat ourselves.  */
3340               if (old->value != error_mark_node)
3341                 {
3342                   error ("use of %qD is ambiguous", name);
3343                   cp_error_at ("  first declared as %q#D here", old->value);
3344                 }
3345               cp_error_at ("  also declared as %q#D here", val);
3346             }
3347           old->value = error_mark_node;
3348         }
3349     }
3350   /* ... and copy the type.  */
3351   type = new->type;
3352   if (LOOKUP_NAMESPACES_ONLY (flags))
3353     type = NULL_TREE;
3354   if (!old->type)
3355     old->type = type;
3356   else if (type && old->type != type)
3357     {
3358       if (flags & LOOKUP_COMPLAIN)
3359         {
3360           error ("%qD denotes an ambiguous type",name);
3361           error ("%J  first type here", TYPE_MAIN_DECL (old->type));
3362           error ("%J  other type here", TYPE_MAIN_DECL (type));
3363         }
3364     }
3365 }
3366
3367 /* Return the declarations that are members of the namespace NS.  */
3368
3369 tree
3370 cp_namespace_decls (tree ns)
3371 {
3372   return NAMESPACE_LEVEL (ns)->names;
3373 }
3374
3375 /* Combine prefer_type and namespaces_only into flags.  */
3376
3377 static int
3378 lookup_flags (int prefer_type, int namespaces_only)
3379 {
3380   if (namespaces_only)
3381     return LOOKUP_PREFER_NAMESPACES;
3382   if (prefer_type > 1)
3383     return LOOKUP_PREFER_TYPES;
3384   if (prefer_type > 0)
3385     return LOOKUP_PREFER_BOTH;
3386   return 0;
3387 }
3388
3389 /* Given a lookup that returned VAL, use FLAGS to decide if we want to
3390    ignore it or not.  Subroutine of lookup_name_real.  */
3391
3392 static tree
3393 qualify_lookup (tree val, int flags)
3394 {
3395   if (val == NULL_TREE)
3396     return val;
3397   if ((flags & LOOKUP_PREFER_NAMESPACES) && TREE_CODE (val) == NAMESPACE_DECL)
3398     return val;
3399   if ((flags & LOOKUP_PREFER_TYPES)
3400       && (TREE_CODE (val) == TYPE_DECL || TREE_CODE (val) == TEMPLATE_DECL))
3401     return val;
3402   if (flags & (LOOKUP_PREFER_NAMESPACES | LOOKUP_PREFER_TYPES))
3403     return NULL_TREE;
3404   return val;
3405 }
3406
3407 /* Look up NAME in the NAMESPACE.  */
3408
3409 tree
3410 lookup_namespace_name (tree namespace, tree name)
3411 {
3412   tree val;
3413   tree template_id = NULL_TREE;
3414   struct scope_binding binding = EMPTY_SCOPE_BINDING;
3415
3416   timevar_push (TV_NAME_LOOKUP);
3417   gcc_assert (TREE_CODE (namespace) == NAMESPACE_DECL);
3418
3419   if (TREE_CODE (name) == NAMESPACE_DECL)
3420     /* This happens for A::B<int> when B is a namespace.  */
3421     POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, name);
3422   else if (TREE_CODE (name) == TEMPLATE_DECL)
3423     {
3424       /* This happens for A::B where B is a template, and there are no
3425          template arguments.  */
3426       error ("invalid use of %qD", name);
3427       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
3428     }
3429
3430   namespace = ORIGINAL_NAMESPACE (namespace);
3431
3432   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3433     {
3434       template_id = name;
3435       name = TREE_OPERAND (name, 0);
3436       if (TREE_CODE (name) == OVERLOAD)
3437         name = DECL_NAME (OVL_CURRENT (name));
3438       else if (DECL_P (name))
3439         name = DECL_NAME (name);
3440     }
3441
3442   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
3443
3444   if (!qualified_lookup_using_namespace (name, namespace, &binding, 0))
3445     POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
3446
3447   if (binding.value)
3448     {
3449       val = binding.value;
3450
3451       if (template_id)
3452         {
3453           if (DECL_CLASS_TEMPLATE_P (val))
3454             val = lookup_template_class (val,
3455                                          TREE_OPERAND (template_id, 1),
3456                                          /*in_decl=*/NULL_TREE,
3457                                          /*context=*/NULL_TREE,
3458                                          /*entering_scope=*/0,
3459                                          tf_error | tf_warning);
3460           else if (DECL_FUNCTION_TEMPLATE_P (val)
3461                    || TREE_CODE (val) == OVERLOAD)
3462             val = lookup_template_function (val,
3463                                             TREE_OPERAND (template_id, 1));
3464           else
3465             {
3466               error ("%<%D::%D%> is not a template", namespace, name);
3467               POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
3468             }
3469         }
3470
3471       /* If we have a single function from a using decl, pull it out.  */
3472       if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
3473         val = OVL_FUNCTION (val);
3474
3475       /* Ignore built-in functions that haven't been prototyped yet.  */
3476       if (!val || !DECL_P(val)
3477           || !DECL_LANG_SPECIFIC(val)
3478           || !DECL_ANTICIPATED (val))
3479         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, val);
3480     }
3481
3482   error ("%qD undeclared in namespace %qD", name, namespace);
3483   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
3484 }
3485
3486 /* Select the right _DECL from multiple choices.  */
3487
3488 static tree
3489 select_decl (const struct scope_binding *binding, int flags)
3490 {
3491   tree val;
3492   val = binding->value;
3493
3494   timevar_push (TV_NAME_LOOKUP);
3495   if (LOOKUP_NAMESPACES_ONLY (flags))
3496     {
3497       /* We are not interested in types.  */
3498       if (val && TREE_CODE (val) == NAMESPACE_DECL)
3499         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, val);
3500       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
3501     }
3502
3503   /* If looking for a type, or if there is no non-type binding, select
3504      the value binding.  */
3505   if (binding->type && (!val || (flags & LOOKUP_PREFER_TYPES)))
3506     val = binding->type;
3507   /* Don't return non-types if we really prefer types.  */
3508   else if (val && LOOKUP_TYPES_ONLY (flags) 
3509            && ! DECL_DECLARES_TYPE_P (val))
3510     val = NULL_TREE;
3511
3512   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, val);
3513 }
3514
3515 /* Unscoped lookup of a global: iterate over current namespaces,
3516    considering using-directives.  */
3517
3518 static tree
3519 unqualified_namespace_lookup (tree name, int flags)
3520 {
3521   tree initial = current_decl_namespace ();
3522   tree scope = initial;
3523   tree siter;
3524   struct cp_binding_level *level;
3525   tree val = NULL_TREE;
3526   struct scope_binding binding = EMPTY_SCOPE_BINDING;
3527
3528   timevar_push (TV_NAME_LOOKUP);
3529
3530   for (; !val; scope = CP_DECL_CONTEXT (scope))
3531     {
3532       cxx_binding *b =
3533          cxx_scope_find_binding_for_name (NAMESPACE_LEVEL (scope), name);
3534
3535       if (b)
3536         {
3537           if (b->value && DECL_P (b->value)
3538               && DECL_LANG_SPECIFIC (b->value) 
3539               && DECL_ANTICIPATED (b->value))
3540             /* Ignore anticipated built-in functions.  */
3541             ;
3542           else
3543             binding.value = b->value;
3544           binding.type = b->type;
3545         }
3546
3547       /* Add all _DECLs seen through local using-directives.  */
3548       for (level = current_binding_level;
3549            level->kind != sk_namespace;
3550            level = level->level_chain)
3551         if (!lookup_using_namespace (name, &binding, level->using_directives,
3552                                      scope, flags))
3553           /* Give up because of error.  */
3554           POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
3555
3556       /* Add all _DECLs seen through global using-directives.  */
3557       /* XXX local and global using lists should work equally.  */
3558       siter = initial;
3559       while (1)
3560         {
3561           if (!lookup_using_namespace (name, &binding,
3562                                        DECL_NAMESPACE_USING (siter),
3563                                        scope, flags))
3564             /* Give up because of error.  */
3565             POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
3566           if (siter == scope) break;
3567           siter = CP_DECL_CONTEXT (siter);
3568         }
3569
3570       val = select_decl (&binding, flags);
3571       if (scope == global_namespace)
3572         break;
3573     }
3574   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, val);
3575 }
3576
3577 /* Look up NAME (an IDENTIFIER_NODE) in SCOPE (either a NAMESPACE_DECL
3578    or a class TYPE).  If IS_TYPE_P is TRUE, then ignore non-type
3579    bindings.  
3580
3581    Returns a DECL (or OVERLOAD, or BASELINK) representing the
3582    declaration found.  If no suitable declaration can be found,
3583    ERROR_MARK_NODE is returned.  If COMPLAIN is true and SCOPE is
3584    neither a class-type nor a namespace a diagnostic is issued.  */
3585
3586 tree
3587 lookup_qualified_name (tree scope, tree name, bool is_type_p, bool complain)
3588 {
3589   int flags = 0;
3590
3591   if (TREE_CODE (scope) == NAMESPACE_DECL)
3592     {
3593       struct scope_binding binding = EMPTY_SCOPE_BINDING;
3594
3595       flags |= LOOKUP_COMPLAIN;
3596       if (is_type_p)
3597         flags |= LOOKUP_PREFER_TYPES;
3598       if (qualified_lookup_using_namespace (name, scope, &binding, flags))
3599         return select_decl (&binding, flags);
3600     }
3601   else if (is_aggr_type (scope, complain))
3602     {
3603       tree t;
3604       t = lookup_member (scope, name, 2, is_type_p);
3605       if (t)
3606         return t;
3607     }
3608
3609   return error_mark_node;
3610 }
3611
3612 /* Subroutine of unqualified_namespace_lookup:
3613    Add the bindings of NAME in used namespaces to VAL.
3614    We are currently looking for names in namespace SCOPE, so we
3615    look through USINGS for using-directives of namespaces
3616    which have SCOPE as a common ancestor with the current scope.
3617    Returns false on errors.  */
3618
3619 static bool
3620 lookup_using_namespace (tree name, struct scope_binding *val,
3621                         tree usings, tree scope, int flags)
3622 {
3623   tree iter;
3624   timevar_push (TV_NAME_LOOKUP);
3625   /* Iterate over all used namespaces in current, searching for using
3626      directives of scope.  */
3627   for (iter = usings; iter; iter = TREE_CHAIN (iter))
3628     if (TREE_VALUE (iter) == scope)
3629       {
3630         tree used = ORIGINAL_NAMESPACE (TREE_PURPOSE (iter));
3631         cxx_binding *val1 =
3632           cxx_scope_find_binding_for_name (NAMESPACE_LEVEL (used), name);
3633         /* Resolve ambiguities.  */
3634         if (val1)
3635           ambiguous_decl (name, val, val1, flags);
3636       }
3637   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, val->value != error_mark_node);
3638 }
3639
3640 /* [namespace.qual]
3641    Accepts the NAME to lookup and its qualifying SCOPE.
3642    Returns the name/type pair found into the cxx_binding *RESULT,
3643    or false on error.  */
3644
3645 static bool
3646 qualified_lookup_using_namespace (tree name, tree scope,
3647                                   struct scope_binding *result, int flags)
3648 {
3649   /* Maintain a list of namespaces visited...  */
3650   tree seen = NULL_TREE;
3651   /* ... and a list of namespace yet to see.  */
3652   tree todo = NULL_TREE;
3653   tree todo_maybe = NULL_TREE;
3654   tree usings;
3655   timevar_push (TV_NAME_LOOKUP);
3656   /* Look through namespace aliases.  */
3657   scope = ORIGINAL_NAMESPACE (scope);
3658   while (scope && result->value != error_mark_node)
3659     {
3660       cxx_binding *binding =
3661         cxx_scope_find_binding_for_name (NAMESPACE_LEVEL (scope), name);
3662       seen = tree_cons (scope, NULL_TREE, seen);
3663       if (binding)
3664         ambiguous_decl (name, result, binding, flags);
3665
3666       /* Consider strong using directives always, and non-strong ones
3667          if we haven't found a binding yet.  ??? Shouldn't we consider
3668          non-strong ones if the initial RESULT is non-NULL, but the
3669          binding in the given namespace is?  */
3670       for (usings = DECL_NAMESPACE_USING (scope); usings;
3671            usings = TREE_CHAIN (usings))
3672         /* If this was a real directive, and we have not seen it.  */
3673         if (!TREE_INDIRECT_USING (usings))
3674           {
3675             /* Try to avoid queuing the same namespace more than once,
3676                the exception being when a namespace was already
3677                enqueued for todo_maybe and then a strong using is
3678                found for it.  We could try to remove it from
3679                todo_maybe, but it's probably not worth the effort.  */
3680             if (is_associated_namespace (scope, TREE_PURPOSE (usings))
3681                 && !purpose_member (TREE_PURPOSE (usings), seen)
3682                 && !purpose_member (TREE_PURPOSE (usings), todo))
3683               todo = tree_cons (TREE_PURPOSE (usings), NULL_TREE, todo);
3684             else if ((!result->value && !result->type)
3685                      && !purpose_member (TREE_PURPOSE (usings), seen)
3686                      && !purpose_member (TREE_PURPOSE (usings), todo)
3687                      && !purpose_member (TREE_PURPOSE (usings), todo_maybe))
3688               todo_maybe = tree_cons (TREE_PURPOSE (usings), NULL_TREE,
3689                                       todo_maybe);
3690           }
3691       if (todo)
3692         {
3693           scope = TREE_PURPOSE (todo);
3694           todo = TREE_CHAIN (todo);
3695         }
3696       else if (todo_maybe
3697                && (!result->value && !result->type))
3698         {
3699           scope = TREE_PURPOSE (todo_maybe);
3700           todo = TREE_CHAIN (todo_maybe);
3701           todo_maybe = NULL_TREE;
3702         }
3703       else
3704         scope = NULL_TREE; /* If there never was a todo list.  */
3705     }
3706   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, result->value != error_mark_node);
3707 }
3708
3709 /* Return the innermost non-namespace binding for NAME from a scope
3710    containing BINDING, or, if BINDING is NULL, the current scope.  If
3711    CLASS_P is false, then class bindings are ignored.  */
3712
3713 cxx_binding *
3714 outer_binding (tree name, 
3715                cxx_binding *binding,
3716                bool class_p)
3717 {
3718   cxx_binding *outer;
3719   cxx_scope *scope;
3720   cxx_scope *outer_scope;
3721
3722   if (binding)
3723     {
3724       scope = binding->scope->level_chain;
3725       outer = binding->previous;
3726     }
3727   else
3728     {
3729       scope = current_binding_level;
3730       outer = IDENTIFIER_BINDING (name);
3731     }
3732   outer_scope = outer ? outer->scope : NULL;
3733
3734   /* Because we create class bindings lazily, we might be missing a
3735      class binding for NAME.  If there are any class binding levels
3736      between the LAST_BINDING_LEVEL and the scope in which OUTER was
3737      declared, we must lookup NAME in those class scopes.  */
3738   if (class_p)
3739     while (scope && scope != outer_scope && scope->kind != sk_namespace)
3740       {
3741         if (scope->kind == sk_class) 
3742           {
3743             cxx_binding *class_binding;
3744             
3745             class_binding = get_class_binding (name, scope);
3746             if (class_binding)
3747               {
3748                 /* Thread this new class-scope binding onto the
3749                    IDENTIFIER_BINDING list so that future lookups
3750                    find it quickly.  */
3751                 class_binding->previous = outer;
3752                 if (binding)
3753                   binding->previous = class_binding;
3754                 else
3755                   IDENTIFIER_BINDING (name) = class_binding;
3756                 return class_binding;
3757               }
3758           }
3759         scope = scope->level_chain;
3760       }
3761
3762   return outer;
3763 }
3764
3765 /* Return the innermost block-scope or class-scope value binding for
3766    NAME, or NULL_TREE if there is no such binding.  */
3767
3768 tree
3769 innermost_non_namespace_value (tree name)
3770 {
3771   cxx_binding *binding;
3772   binding = outer_binding (name, /*binding=*/NULL, /*class_p=*/true);
3773   return binding ? binding->value : NULL_TREE;
3774 }
3775
3776 /* Look up NAME in the current binding level and its superiors in the
3777    namespace of variables, functions and typedefs.  Return a ..._DECL
3778    node of some kind representing its definition if there is only one
3779    such declaration, or return a TREE_LIST with all the overloaded
3780    definitions if there are many, or return 0 if it is undefined.
3781
3782    If PREFER_TYPE is > 0, we prefer TYPE_DECLs or namespaces.
3783    If PREFER_TYPE is > 1, we reject non-type decls (e.g. namespaces).
3784    Otherwise we prefer non-TYPE_DECLs.
3785
3786    If NONCLASS is nonzero, bindings in class scopes are ignored.  If
3787    BLOCK_P is false, bindings in block scopes are ignored.  */
3788
3789 tree
3790 lookup_name_real (tree name, int prefer_type, int nonclass, bool block_p,
3791                   int namespaces_only, int flags)
3792 {
3793   cxx_binding *iter;
3794   tree val = NULL_TREE;
3795
3796   timevar_push (TV_NAME_LOOKUP);
3797   /* Conversion operators are handled specially because ordinary
3798      unqualified name lookup will not find template conversion
3799      operators.  */
3800   if (IDENTIFIER_TYPENAME_P (name)) 
3801     {
3802       struct cp_binding_level *level;
3803
3804       for (level = current_binding_level; 
3805            level && level->kind != sk_namespace;
3806            level = level->level_chain)
3807         {
3808           tree class_type;
3809           tree operators;
3810           
3811           /* A conversion operator can only be declared in a class 
3812              scope.  */
3813           if (level->kind != sk_class)
3814             continue;
3815           
3816           /* Lookup the conversion operator in the class.  */
3817           class_type = level->this_entity;
3818           operators = lookup_fnfields (class_type, name, /*protect=*/0);
3819           if (operators)
3820             POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, operators);
3821         }
3822
3823       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
3824     }
3825
3826   flags |= lookup_flags (prefer_type, namespaces_only);
3827
3828   /* First, look in non-namespace scopes.  */
3829
3830   if (current_class_type == NULL_TREE)
3831     nonclass = 1;
3832
3833   if (block_p || !nonclass)
3834     for (iter = outer_binding (name, NULL, !nonclass);
3835          iter;
3836          iter = outer_binding (name, iter, !nonclass))
3837       {
3838         tree binding;
3839         
3840         /* Skip entities we don't want.  */
3841         if (LOCAL_BINDING_P (iter) ? !block_p : nonclass)
3842           continue;
3843         
3844         /* If this is the kind of thing we're looking for, we're done.  */
3845         if (qualify_lookup (iter->value, flags))
3846           binding = iter->value;
3847         else if ((flags & LOOKUP_PREFER_TYPES)
3848                  && qualify_lookup (iter->type, flags))
3849           binding = iter->type;
3850         else
3851           binding = NULL_TREE;
3852         
3853         if (binding)
3854           {
3855             val = binding;
3856             break;
3857           }
3858       }
3859
3860   /* Now lookup in namespace scopes.  */
3861   if (!val)
3862     val = unqualified_namespace_lookup (name, flags);
3863
3864   if (val)
3865     {
3866       /* If we have a single function from a using decl, pull it out.  */
3867       if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
3868         val = OVL_FUNCTION (val);
3869     }
3870
3871   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, val);
3872 }
3873
3874 tree
3875 lookup_name_nonclass (tree name)
3876 {
3877   return lookup_name_real (name, 0, 1, /*block_p=*/true, 0, LOOKUP_COMPLAIN);
3878 }
3879
3880 tree
3881 lookup_function_nonclass (tree name, tree args, bool block_p)
3882 {
3883   return 
3884     lookup_arg_dependent (name, 
3885                           lookup_name_real (name, 0, 1, block_p, 0, 
3886                                             LOOKUP_COMPLAIN),
3887                           args);
3888 }
3889
3890 tree
3891 lookup_name (tree name, int prefer_type)
3892 {
3893   return lookup_name_real (name, prefer_type, 0, /*block_p=*/true, 
3894                            0, LOOKUP_COMPLAIN);
3895 }
3896
3897 /* Look up NAME for type used in elaborated name specifier in
3898    the scopes given by SCOPE.  SCOPE can be either TS_CURRENT or
3899    TS_WITHIN_ENCLOSING_NON_CLASS.  Although not implied by the
3900    name, more scopes are checked if cleanup or template parameter
3901    scope is encountered.
3902
3903    Unlike lookup_name_real, we make sure that NAME is actually
3904    declared in the desired scope, not from inheritance, nor using
3905    directive.  For using declaration, there is DR138 still waiting
3906    to be resolved.
3907
3908    A TYPE_DECL best matching the NAME is returned.  Catching error
3909    and issuing diagnostics are caller's responsibility.  */
3910
3911 tree
3912 lookup_type_scope (tree name, tag_scope scope)
3913 {
3914   cxx_binding *iter = NULL;
3915   tree val = NULL_TREE;
3916
3917   timevar_push (TV_NAME_LOOKUP);
3918
3919   /* Look in non-namespace scope first.  */
3920   if (current_binding_level->kind != sk_namespace)
3921     iter = outer_binding (name, NULL, /*class_p=*/ true);
3922   for (; iter; iter = outer_binding (name, iter, /*class_p=*/ true))
3923     {
3924       /* Check if this is the kind of thing we're looking for.
3925          If SCOPE is TS_CURRENT, also make sure it doesn't come from 
3926          base class.  For ITER->VALUE, we can simply use
3927          INHERITED_VALUE_BINDING_P.  For ITER->TYPE, we have to use 
3928          our own check.
3929
3930          We check ITER->TYPE before ITER->VALUE in order to handle
3931            typedef struct C {} C;
3932          correctly.  */
3933
3934       if (qualify_lookup (iter->type, LOOKUP_PREFER_TYPES)
3935           && (scope != ts_current
3936               || LOCAL_BINDING_P (iter)
3937               || DECL_CONTEXT (iter->type) == iter->scope->this_entity))
3938         val = iter->type;
3939       else if ((scope != ts_current
3940                 || !INHERITED_VALUE_BINDING_P (iter))
3941                && qualify_lookup (iter->value, LOOKUP_PREFER_TYPES))
3942         val = iter->value;
3943
3944       if (val)
3945         break;
3946     }
3947
3948   /* Look in namespace scope.  */
3949   if (!val)
3950     {
3951       iter = cxx_scope_find_binding_for_name
3952                (NAMESPACE_LEVEL (current_decl_namespace ()), name);
3953
3954       if (iter)
3955         {
3956           /* If this is the kind of thing we're looking for, we're done.
3957              Ignore names found via using declaration.  See DR138 for
3958              current status.  */
3959           if (qualify_lookup (iter->type, LOOKUP_PREFER_TYPES))
3960             val = iter->type;
3961           else if (qualify_lookup (iter->value, LOOKUP_PREFER_TYPES))
3962             val = iter->value;
3963         }
3964         
3965     }
3966
3967   /* Type found, check if it is in the allowed scopes, ignoring cleanup
3968      and template parameter scopes.  */
3969   if (val)
3970     {
3971       struct cp_binding_level *b = current_binding_level;
3972       while (b)
3973         {
3974           if (iter->scope == b)
3975             POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, val);
3976
3977           if (b->kind == sk_cleanup || b->kind == sk_template_parms)
3978             b = b->level_chain;
3979           else if (b->kind == sk_class
3980                    && scope == ts_within_enclosing_non_class)
3981             b = b->level_chain;
3982           else
3983             break;
3984         }
3985     }
3986
3987   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
3988 }
3989
3990 /* Similar to `lookup_name' but look only in the innermost non-class
3991    binding level.  */
3992
3993 static tree
3994 lookup_name_innermost_nonclass_level (tree name)
3995 {
3996   struct cp_binding_level *b;
3997   tree t = NULL_TREE;
3998
3999   timevar_push (TV_NAME_LOOKUP);
4000   b = innermost_nonclass_level ();
4001
4002   if (b->kind == sk_namespace)
4003     {
4004       t = IDENTIFIER_NAMESPACE_VALUE (name);
4005
4006       /* extern "C" function() */
4007       if (t != NULL_TREE && TREE_CODE (t) == TREE_LIST)
4008         t = TREE_VALUE (t);
4009     }
4010   else if (IDENTIFIER_BINDING (name)
4011            && LOCAL_BINDING_P (IDENTIFIER_BINDING (name)))
4012     {
4013       cxx_binding *binding;
4014       binding = IDENTIFIER_BINDING (name);
4015       while (1)
4016         {
4017           if (binding->scope == b
4018               && !(TREE_CODE (binding->value) == VAR_DECL
4019                    && DECL_DEAD_FOR_LOCAL (binding->value)))
4020             POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, binding->value);
4021
4022           if (b->kind == sk_cleanup)
4023             b = b->level_chain;
4024           else
4025             break;
4026         }
4027     }
4028
4029   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
4030 }
4031
4032 /* Like lookup_name_innermost_nonclass_level, but for types.  */
4033
4034 static tree
4035 lookup_type_current_level (tree name)
4036 {
4037   tree t = NULL_TREE;
4038
4039   timevar_push (TV_NAME_LOOKUP);
4040   gcc_assert (current_binding_level->kind != sk_namespace);
4041
4042   if (REAL_IDENTIFIER_TYPE_VALUE (name) != NULL_TREE
4043       && REAL_IDENTIFIER_TYPE_VALUE (name) != global_type_node)
4044     {
4045       struct cp_binding_level *b = current_binding_level;
4046       while (1)
4047         {
4048           if (purpose_member (name, b->type_shadowed))
4049             POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP,
4050                                     REAL_IDENTIFIER_TYPE_VALUE (name));
4051           if (b->kind == sk_cleanup)
4052             b = b->level_chain;
4053           else
4054             break;
4055         }
4056     }
4057
4058   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
4059 }
4060
4061 /* [basic.lookup.koenig] */
4062 /* A nonzero return value in the functions below indicates an error.  */
4063
4064 struct arg_lookup
4065 {
4066   tree name;
4067   tree namespaces;
4068   tree classes;
4069   tree functions;
4070 };
4071
4072 static bool arg_assoc (struct arg_lookup*, tree);
4073 static bool arg_assoc_args (struct arg_lookup*, tree);
4074 static bool arg_assoc_type (struct arg_lookup*, tree);
4075 static bool add_function (struct arg_lookup *, tree);
4076 static bool arg_assoc_namespace (struct arg_lookup *, tree);
4077 static bool arg_assoc_class (struct arg_lookup *, tree);
4078 static bool arg_assoc_template_arg (struct arg_lookup*, tree);
4079
4080 /* Add a function to the lookup structure.
4081    Returns true on error.  */
4082
4083 static bool
4084 add_function (struct arg_lookup *k, tree fn)
4085 {
4086   /* We used to check here to see if the function was already in the list,
4087      but that's O(n^2), which is just too expensive for function lookup.
4088      Now we deal with the occasional duplicate in joust.  In doing this, we
4089      assume that the number of duplicates will be small compared to the
4090      total number of functions being compared, which should usually be the
4091      case.  */
4092
4093   /* We must find only functions, or exactly one non-function.  */
4094   if (!k->functions) 
4095     k->functions = fn;
4096   else if (fn == k->functions)
4097     ;
4098   else if (is_overloaded_fn (k->functions) && is_overloaded_fn (fn))
4099     k->functions = build_overload (fn, k->functions);
4100   else
4101     {
4102       tree f1 = OVL_CURRENT (k->functions);
4103       tree f2 = fn;
4104       if (is_overloaded_fn (f1))
4105         {
4106           fn = f1; f1 = f2; f2 = fn;
4107         }
4108       cp_error_at ("%qD is not a function,", f1);
4109       cp_error_at ("  conflict with %qD", f2);
4110       error ("  in call to %qD", k->name);
4111       return true;
4112     }
4113
4114   return false;
4115 }
4116
4117 /* Returns true iff CURRENT has declared itself to be an associated
4118    namespace of SCOPE via a strong using-directive (or transitive chain
4119    thereof).  Both are namespaces.  */
4120
4121 bool
4122 is_associated_namespace (tree current, tree scope)
4123 {
4124   tree seen = NULL_TREE;
4125   tree todo = NULL_TREE;
4126   tree t;
4127   while (1)
4128     {
4129       if (scope == current)
4130         return true;
4131       seen = tree_cons (scope, NULL_TREE, seen);
4132       for (t = DECL_NAMESPACE_ASSOCIATIONS (scope); t; t = TREE_CHAIN (t))
4133         if (!purpose_member (TREE_PURPOSE (t), seen))
4134           todo = tree_cons (TREE_PURPOSE (t), NULL_TREE, todo);
4135       if (todo)
4136         {
4137           scope = TREE_PURPOSE (todo);
4138           todo = TREE_CHAIN (todo);
4139         }
4140       else
4141         return false;
4142     }
4143 }
4144
4145 /* Add functions of a namespace to the lookup structure.
4146    Returns true on error.  */
4147
4148 static bool
4149 arg_assoc_namespace (struct arg_lookup *k, tree scope)
4150 {
4151   tree value;
4152
4153   if (purpose_member (scope, k->namespaces))
4154     return 0;
4155   k->namespaces = tree_cons (scope, NULL_TREE, k->namespaces);
4156
4157   /* Check out our super-users.  */
4158   for (value = DECL_NAMESPACE_ASSOCIATIONS (scope); value;
4159        value = TREE_CHAIN (value))
4160     if (arg_assoc_namespace (k, TREE_PURPOSE (value)))
4161       return true;
4162   
4163   value = namespace_binding (k->name, scope);
4164   if (!value)
4165     return false;
4166
4167   for (; value; value = OVL_NEXT (value))
4168     if (add_function (k, OVL_CURRENT (value)))
4169       return true;
4170   
4171   return false;
4172 }
4173
4174 /* Adds everything associated with a template argument to the lookup
4175    structure.  Returns true on error.  */
4176
4177 static bool
4178 arg_assoc_template_arg (struct arg_lookup *k, tree arg)
4179 {
4180   /* [basic.lookup.koenig]
4181
4182      If T is a template-id, its associated namespaces and classes are
4183      ... the namespaces and classes associated with the types of the
4184      template arguments provided for template type parameters
4185      (excluding template template parameters); the namespaces in which
4186      any template template arguments are defined; and the classes in
4187      which any member templates used as template template arguments
4188      are defined.  [Note: non-type template arguments do not
4189      contribute to the set of associated namespaces.  ]  */
4190
4191   /* Consider first template template arguments.  */
4192   if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
4193       || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE)
4194     return false;
4195   else if (TREE_CODE (arg) == TEMPLATE_DECL)
4196     {
4197       tree ctx = CP_DECL_CONTEXT (arg);
4198
4199       /* It's not a member template.  */
4200       if (TREE_CODE (ctx) == NAMESPACE_DECL)
4201         return arg_assoc_namespace (k, ctx);
4202       /* Otherwise, it must be member template.  */
4203       else 
4204         return arg_assoc_class (k, ctx);
4205     }
4206   /* It's not a template template argument, but it is a type template
4207      argument.  */
4208   else if (TYPE_P (arg))
4209     return arg_assoc_type (k, arg);
4210   /* It's a non-type template argument.  */
4211   else
4212     return false;
4213 }
4214
4215 /* Adds everything associated with class to the lookup structure.
4216    Returns true on error.  */
4217
4218 static bool
4219 arg_assoc_class (struct arg_lookup *k, tree type)
4220 {
4221   tree list, friends, context;
4222   int i;
4223   
4224   /* Backend build structures, such as __builtin_va_list, aren't
4225      affected by all this.  */
4226   if (!CLASS_TYPE_P (type))
4227     return false;
4228
4229   if (purpose_member (type, k->classes))
4230     return false;
4231   k->classes = tree_cons (type, NULL_TREE, k->classes);
4232   
4233   context = decl_namespace_context (type);
4234   if (arg_assoc_namespace (k, context))
4235     return true;
4236
4237   if (TYPE_BINFO (type))
4238     {
4239       /* Process baseclasses.  */
4240       tree binfo, base_binfo;
4241       
4242       for (binfo = TYPE_BINFO (type), i = 0;
4243            BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
4244         if (arg_assoc_class (k, BINFO_TYPE (base_binfo)))
4245           return true;
4246     }
4247   
4248   /* Process friends.  */
4249   for (list = DECL_FRIENDLIST (TYPE_MAIN_DECL (type)); list; 
4250        list = TREE_CHAIN (list))
4251     if (k->name == FRIEND_NAME (list))
4252       for (friends = FRIEND_DECLS (list); friends; 
4253            friends = TREE_CHAIN (friends))
4254         {
4255           tree fn = TREE_VALUE (friends);
4256
4257           /* Only interested in global functions with potentially hidden
4258              (i.e. unqualified) declarations.  */
4259           if (CP_DECL_CONTEXT (fn) != context)
4260             continue;
4261           /* Template specializations are never found by name lookup.
4262              (Templates themselves can be found, but not template
4263              specializations.)  */
4264           if (TREE_CODE (fn) == FUNCTION_DECL && DECL_USE_TEMPLATE (fn))
4265             continue;
4266           if (add_function (k, fn))
4267             return true;
4268         }
4269
4270   /* Process template arguments.  */
4271   if (CLASSTYPE_TEMPLATE_INFO (type) 
4272       && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (type)))
4273     {
4274       list = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
4275       for (i = 0; i < TREE_VEC_LENGTH (list); ++i) 
4276         arg_assoc_template_arg (k, TREE_VEC_ELT (list, i));
4277     }
4278
4279   return false;
4280 }
4281
4282 /* Adds everything associated with a given type.
4283    Returns 1 on error.  */
4284
4285 static bool
4286 arg_assoc_type (struct arg_lookup *k, tree type)
4287 {
4288   /* As we do not get the type of non-type dependent expressions
4289      right, we can end up with such things without a type.  */
4290   if (!type)
4291     return false;
4292
4293   if (TYPE_PTRMEM_P (type))
4294     {
4295       /* Pointer to member: associate class type and value type.  */
4296       if (arg_assoc_type (k, TYPE_PTRMEM_CLASS_TYPE (type)))
4297         return true;
4298       return arg_assoc_type (k, TYPE_PTRMEM_POINTED_TO_TYPE (type));
4299     }
4300   else switch (TREE_CODE (type))
4301     {
4302     case ERROR_MARK:
4303       return false;
4304     case VOID_TYPE:
4305     case INTEGER_TYPE:
4306     case REAL_TYPE:
4307     case COMPLEX_TYPE:
4308     case VECTOR_TYPE:
4309     case CHAR_TYPE:
4310     case BOOLEAN_TYPE:
4311       return false;
4312     case RECORD_TYPE:
4313       if (TYPE_PTRMEMFUNC_P (type))
4314         return arg_assoc_type (k, TYPE_PTRMEMFUNC_FN_TYPE (type));
4315       return arg_assoc_class (k, type);
4316     case POINTER_TYPE:
4317     case REFERENCE_TYPE:
4318     case ARRAY_TYPE:
4319       return arg_assoc_type (k, TREE_TYPE (type));
4320     case UNION_TYPE:
4321     case ENUMERAL_TYPE:
4322       return arg_assoc_namespace (k, decl_namespace_context (type));
4323     case METHOD_TYPE:
4324       /* The basetype is referenced in the first arg type, so just
4325          fall through.  */
4326     case FUNCTION_TYPE:
4327       /* Associate the parameter types.  */
4328       if (arg_assoc_args (k, TYPE_ARG_TYPES (type)))
4329         return true;
4330       /* Associate the return type.  */
4331       return arg_assoc_type (k, TREE_TYPE (type));
4332     case TEMPLATE_TYPE_PARM:
4333     case BOUND_TEMPLATE_TEMPLATE_PARM:
4334       return false;
4335     case TYPENAME_TYPE:
4336       return false;
4337     case LANG_TYPE:
4338       gcc_assert (type == unknown_type_node);
4339       return false;
4340     default:
4341       gcc_unreachable ();
4342     }
4343   return false;
4344 }
4345
4346 /* Adds everything associated with arguments.  Returns true on error.  */
4347
4348 static bool
4349 arg_assoc_args (struct arg_lookup *k, tree args)
4350 {
4351   for (; args; args = TREE_CHAIN (args))
4352     if (arg_assoc (k, TREE_VALUE (args)))
4353       return true;
4354   return false;
4355 }
4356
4357 /* Adds everything associated with a given tree_node.  Returns 1 on error.  */
4358
4359 static bool
4360 arg_assoc (struct arg_lookup *k, tree n)
4361 {
4362   if (n == error_mark_node)
4363     return false;
4364
4365   if (TYPE_P (n))
4366     return arg_assoc_type (k, n);
4367
4368   if (! type_unknown_p (n))
4369     return arg_assoc_type (k, TREE_TYPE (n));
4370
4371   if (TREE_CODE (n) == ADDR_EXPR)
4372     n = TREE_OPERAND (n, 0);
4373   if (TREE_CODE (n) == COMPONENT_REF)
4374     n = TREE_OPERAND (n, 1);
4375   if (TREE_CODE (n) == OFFSET_REF)
4376     n = TREE_OPERAND (n, 1);
4377   while (TREE_CODE (n) == TREE_LIST)
4378     n = TREE_VALUE (n);
4379   if (TREE_CODE (n) == BASELINK)
4380     n = BASELINK_FUNCTIONS (n);
4381
4382   if (TREE_CODE (n) == FUNCTION_DECL)
4383     return arg_assoc_type (k, TREE_TYPE (n));
4384   if (TREE_CODE (n) == TEMPLATE_ID_EXPR)
4385     {
4386       /* [basic.lookup.koenig]
4387
4388          If T is a template-id, its associated namespaces and classes
4389          are the namespace in which the template is defined; for
4390          member templates, the member template's class...  */
4391       tree template = TREE_OPERAND (n, 0);
4392       tree args = TREE_OPERAND (n, 1);
4393       tree ctx;
4394       int ix;
4395
4396       if (TREE_CODE (template) == COMPONENT_REF)
4397         template = TREE_OPERAND (template, 1);
4398       
4399       /* First, the template.  There may actually be more than one if
4400          this is an overloaded function template.  But, in that case,
4401          we only need the first; all the functions will be in the same
4402          namespace.  */
4403       template = OVL_CURRENT (template);
4404
4405       ctx = CP_DECL_CONTEXT (template);
4406        
4407       if (TREE_CODE (ctx) == NAMESPACE_DECL)
4408         {
4409           if (arg_assoc_namespace (k, ctx) == 1)
4410             return true;
4411         }
4412       /* It must be a member template.  */
4413       else if (arg_assoc_class (k, ctx) == 1)
4414         return true;
4415
4416       /* Now the arguments.  */
4417       for (ix = TREE_VEC_LENGTH (args); ix--;)
4418         if (arg_assoc_template_arg (k, TREE_VEC_ELT (args, ix)) == 1)
4419           return true;
4420     }
4421   else if (TREE_CODE (n) == OVERLOAD)
4422     {
4423       for (; n; n = OVL_CHAIN (n))
4424         if (arg_assoc_type (k, TREE_TYPE (OVL_FUNCTION (n))))
4425           return true;
4426     }
4427
4428   return false;
4429 }
4430
4431 /* Performs Koenig lookup depending on arguments, where fns
4432    are the functions found in normal lookup.  */
4433
4434 tree
4435 lookup_arg_dependent (tree name, tree fns, tree args)
4436 {
4437   struct arg_lookup k;
4438   tree fn = NULL_TREE;
4439
4440   timevar_push (TV_NAME_LOOKUP);
4441   k.name = name;
4442   k.functions = fns;
4443   k.classes = NULL_TREE;
4444
4445   /* We've already looked at some namespaces during normal unqualified
4446      lookup -- but we don't know exactly which ones.  If the functions
4447      we found were brought into the current namespace via a using
4448      declaration, we have not really checked the namespace from which
4449      they came.  Therefore, we check all namespaces here -- unless the
4450      function we have is from the current namespace.  Even then, we
4451      must check all namespaces if the function is a local
4452      declaration; any other declarations present at namespace scope
4453      should be visible during argument-dependent lookup.  */
4454   if (fns)
4455     fn = OVL_CURRENT (fns);
4456   if (fn && TREE_CODE (fn) == FUNCTION_DECL 
4457       && (CP_DECL_CONTEXT (fn) != current_decl_namespace ()
4458           || DECL_LOCAL_FUNCTION_P (fn)))
4459     k.namespaces = NULL_TREE;
4460   else
4461     /* Setting NAMESPACES is purely an optimization; it prevents
4462        adding functions which are already in FNS.  Adding them would
4463        be safe -- "joust" will eliminate the duplicates -- but
4464        wasteful.  */
4465     k.namespaces = build_tree_list (current_decl_namespace (), NULL_TREE);
4466
4467   arg_assoc_args (&k, args);
4468   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, k.functions);
4469 }
4470
4471 /* Add namespace to using_directives. Return NULL_TREE if nothing was
4472    changed (i.e. there was already a directive), or the fresh
4473    TREE_LIST otherwise.  */
4474
4475 static tree
4476 push_using_directive (tree used)
4477 {
4478   tree ud = current_binding_level->using_directives;
4479   tree iter, ancestor;
4480
4481   timevar_push (TV_NAME_LOOKUP);
4482   /* Check if we already have this.  */
4483   if (purpose_member (used, ud) != NULL_TREE)
4484     POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
4485
4486   ancestor = namespace_ancestor (current_decl_namespace (), used);
4487   ud = current_binding_level->using_directives;
4488   ud = tree_cons (used, ancestor, ud);
4489   current_binding_level->using_directives = ud;
4490
4491   /* Recursively add all namespaces used.  */
4492   for (iter = DECL_NAMESPACE_USING (used); iter; iter = TREE_CHAIN (iter))
4493     push_using_directive (TREE_PURPOSE (iter));
4494
4495   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, ud);
4496 }
4497
4498 /* The type TYPE is being declared.  If it is a class template, or a
4499    specialization of a class template, do any processing required and
4500    perform error-checking.  If IS_FRIEND is nonzero, this TYPE is
4501    being declared a friend.  B is the binding level at which this TYPE
4502    should be bound.
4503
4504    Returns the TYPE_DECL for TYPE, which may have been altered by this
4505    processing.  */
4506
4507 static tree
4508 maybe_process_template_type_declaration (tree type, int globalize,
4509                                          cxx_scope *b)
4510 {
4511   tree decl = TYPE_NAME (type);
4512
4513   if (processing_template_parmlist)
4514     /* You can't declare a new template type in a template parameter
4515        list.  But, you can declare a non-template type:
4516
4517          template <class A*> struct S;
4518
4519        is a forward-declaration of `A'.  */
4520     ;
4521   else
4522     {
4523       maybe_check_template_type (type);
4524
4525       gcc_assert (IS_AGGR_TYPE (type) || TREE_CODE (type) == ENUMERAL_TYPE);
4526
4527       if (processing_template_decl)
4528         {
4529           /* This may change after the call to
4530              push_template_decl_real, but we want the original value.  */
4531           tree name = DECL_NAME (decl);
4532
4533           decl = push_template_decl_real (decl, globalize);
4534           /* If the current binding level is the binding level for the
4535              template parameters (see the comment in
4536              begin_template_parm_list) and the enclosing level is a class
4537              scope, and we're not looking at a friend, push the
4538              declaration of the member class into the class scope.  In the
4539              friend case, push_template_decl will already have put the
4540              friend into global scope, if appropriate.  */
4541           if (TREE_CODE (type) != ENUMERAL_TYPE
4542               && !globalize && b->kind == sk_template_parms
4543               && b->level_chain->kind == sk_class)
4544             {
4545               finish_member_declaration (CLASSTYPE_TI_TEMPLATE (type));
4546
4547               if (!COMPLETE_TYPE_P (current_class_type))
4548                 {
4549                   maybe_add_class_template_decl_list (current_class_type,
4550                                                       type, /*friend_p=*/0);
4551                   /* Put this UDT in the table of UDTs for the class.  */
4552                   if (CLASSTYPE_NESTED_UTDS (current_class_type) == NULL)
4553                     CLASSTYPE_NESTED_UTDS (current_class_type) =
4554                       binding_table_new (SCOPE_DEFAULT_HT_SIZE);
4555
4556                   binding_table_insert
4557                     (CLASSTYPE_NESTED_UTDS (current_class_type), name, type);
4558                 }
4559             }
4560         }
4561     }
4562
4563   return decl;
4564 }
4565
4566 /* Push a tag name NAME for struct/class/union/enum type TYPE.
4567    Normally put it into the inner-most non-sk_cleanup scope,
4568    but if GLOBALIZE is true, put it in the inner-most non-class scope.
4569    The latter is needed for implicit declarations.
4570    Returns TYPE upon success and ERROR_MARK_NODE otherwise.  */
4571
4572 tree
4573 pushtag (tree name, tree type, int globalize)
4574 {
4575   struct cp_binding_level *b;
4576
4577   timevar_push (TV_NAME_LOOKUP);
4578   b = current_binding_level;
4579   while (/* Cleanup scopes are not scopes from the point of view of
4580             the language.  */
4581          b->kind == sk_cleanup
4582          /* Neither are the scopes used to hold template parameters
4583             for an explicit specialization.  For an ordinary template
4584             declaration, these scopes are not scopes from the point of
4585             view of the language -- but we need a place to stash
4586             things that will go in the containing namespace when the
4587             template is instantiated.  */
4588          || (b->kind == sk_template_parms && b->explicit_spec_p)
4589          || (b->kind == sk_class
4590              && (globalize
4591                  /* We may be defining a new type in the initializer
4592                     of a static member variable. We allow this when
4593                     not pedantic, and it is particularly useful for
4594                     type punning via an anonymous union.  */
4595                  || COMPLETE_TYPE_P (b->this_entity))))
4596     b = b->level_chain;
4597
4598   if (name)
4599     {
4600       /* Do C++ gratuitous typedefing.  */
4601       if (IDENTIFIER_TYPE_VALUE (name) != type)
4602         {
4603           tree d = NULL_TREE;
4604           int in_class = 0;
4605           tree context = TYPE_CONTEXT (type);
4606
4607           if (! context)
4608             {
4609               tree cs = current_scope ();
4610
4611               if (! globalize)
4612                 context = cs;
4613               else if (cs != NULL_TREE && TYPE_P (cs))
4614                 /* When declaring a friend class of a local class, we want
4615                    to inject the newly named class into the scope
4616                    containing the local class, not the namespace scope.  */
4617                 context = decl_function_context (get_type_decl (cs));
4618             }
4619           if (!context)
4620             context = current_namespace;
4621
4622           if (b->kind == sk_class
4623               || (b->kind == sk_template_parms 
4624                   && b->level_chain->kind == sk_class))
4625             in_class = 1;
4626
4627           if (current_lang_name == lang_name_java)
4628             TYPE_FOR_JAVA (type) = 1;
4629
4630           d = create_implicit_typedef (name, type);
4631           DECL_CONTEXT (d) = FROB_CONTEXT (context);
4632           if (! in_class)
4633             set_identifier_type_value_with_scope (name, d, b);
4634
4635           d = maybe_process_template_type_declaration (type,
4636                                                        globalize, b);
4637           if (d == error_mark_node)
4638             POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4639
4640           if (b->kind == sk_class)
4641             {
4642               if (!PROCESSING_REAL_TEMPLATE_DECL_P ())
4643                 /* Put this TYPE_DECL on the TYPE_FIELDS list for the
4644                    class.  But if it's a member template class, we
4645                    want the TEMPLATE_DECL, not the TYPE_DECL, so this
4646                    is done later.  */
4647                 finish_member_declaration (d);
4648               else
4649                 pushdecl_class_level (d);
4650             }
4651           else
4652             d = pushdecl_with_scope (d, b);
4653
4654           /* FIXME what if it gets a name from typedef?  */
4655           if (ANON_AGGRNAME_P (name))
4656             DECL_IGNORED_P (d) = 1;
4657
4658           TYPE_CONTEXT (type) = DECL_CONTEXT (d);
4659
4660           /* If this is a local class, keep track of it.  We need this
4661              information for name-mangling, and so that it is possible to find
4662              all function definitions in a translation unit in a convenient
4663              way.  (It's otherwise tricky to find a member function definition
4664              it's only pointed to from within a local class.)  */
4665           if (TYPE_CONTEXT (type)
4666               && TREE_CODE (TYPE_CONTEXT (type)) == FUNCTION_DECL
4667               && !processing_template_decl)
4668             VARRAY_PUSH_TREE (local_classes, type);
4669         }
4670       if (b->kind == sk_class
4671           && !COMPLETE_TYPE_P (current_class_type))
4672         {
4673           maybe_add_class_template_decl_list (current_class_type,
4674                                               type, /*friend_p=*/0);
4675
4676           if (CLASSTYPE_NESTED_UTDS (current_class_type) == NULL)
4677             CLASSTYPE_NESTED_UTDS (current_class_type)
4678               = binding_table_new (SCOPE_DEFAULT_HT_SIZE);
4679
4680           binding_table_insert
4681             (CLASSTYPE_NESTED_UTDS (current_class_type), name, type);
4682         }
4683     }
4684
4685   if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL)
4686     /* Use the canonical TYPE_DECL for this node.  */
4687     TYPE_STUB_DECL (type) = TYPE_NAME (type);
4688   else
4689     {
4690       /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE
4691          will be the tagged type we just added to the current
4692          binding level.  This fake NULL-named TYPE_DECL node helps
4693          dwarfout.c to know when it needs to output a
4694          representation of a tagged type, and it also gives us a
4695          convenient place to record the "scope start" address for
4696          the tagged type.  */
4697
4698       tree d = build_decl (TYPE_DECL, NULL_TREE, type);
4699       TYPE_STUB_DECL (type) = pushdecl_with_scope (d, b);
4700     }
4701   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, type);
4702 }
4703 \f
4704 /* Subroutines for reverting temporarily to top-level for instantiation
4705    of templates and such.  We actually need to clear out the class- and
4706    local-value slots of all identifiers, so that only the global values
4707    are at all visible.  Simply setting current_binding_level to the global
4708    scope isn't enough, because more binding levels may be pushed.  */
4709 struct saved_scope *scope_chain;
4710
4711 /* If ID has not already been marked, add an appropriate binding to
4712    *OLD_BINDINGS.  */
4713
4714 static void
4715 store_binding (tree id, VEC(cxx_saved_binding) **old_bindings)
4716 {
4717   cxx_saved_binding *saved;
4718
4719   if (!id || !IDENTIFIER_BINDING (id))
4720     return;
4721
4722   if (IDENTIFIER_MARKED (id))
4723     return;
4724   
4725   IDENTIFIER_MARKED (id) = 1;
4726
4727   saved = VEC_safe_push (cxx_saved_binding, *old_bindings, NULL);
4728   saved->identifier = id;
4729   saved->binding = IDENTIFIER_BINDING (id);
4730   saved->real_type_value = REAL_IDENTIFIER_TYPE_VALUE (id);
4731   IDENTIFIER_BINDING (id) = NULL;
4732 }
4733
4734 static void
4735 store_bindings (tree names, VEC(cxx_saved_binding) **old_bindings)
4736 {
4737   tree t;
4738
4739   timevar_push (TV_NAME_LOOKUP);
4740   for (t = names; t; t = TREE_CHAIN (t))
4741     {
4742       tree id;
4743
4744       if (TREE_CODE (t) == TREE_LIST)
4745         id = TREE_PURPOSE (t);
4746       else
4747         id = DECL_NAME (t);
4748
4749       store_binding (id, old_bindings);
4750     }
4751   timevar_pop (TV_NAME_LOOKUP);
4752 }
4753
4754 /* Like store_bindings, but NAMES is a vector of cp_class_binding
4755    objects, rather than a TREE_LIST.  */
4756
4757 static void
4758 store_class_bindings (VEC(cp_class_binding) *names, 
4759                       VEC(cxx_saved_binding) **old_bindings)
4760 {
4761   size_t i;
4762   cp_class_binding *cb;
4763
4764   timevar_push (TV_NAME_LOOKUP);
4765   for (i = 0; VEC_iterate(cp_class_binding, names, i, cb); ++i)
4766     store_binding (cb->identifier, old_bindings);
4767   timevar_pop (TV_NAME_LOOKUP);
4768 }
4769
4770 void
4771 push_to_top_level (void)
4772 {
4773   struct saved_scope *s;
4774   struct cp_binding_level *b;
4775   cxx_saved_binding *sb;
4776   size_t i;
4777   int need_pop;
4778
4779   timevar_push (TV_NAME_LOOKUP);
4780   s = GGC_CNEW (struct saved_scope);
4781
4782   b = scope_chain ? current_binding_level : 0;
4783
4784   /* If we're in the middle of some function, save our state.  */
4785   if (cfun)
4786     {
4787       need_pop = 1;
4788       push_function_context_to (NULL_TREE);
4789     }
4790   else
4791     need_pop = 0;
4792
4793   if (scope_chain && previous_class_level)
4794     store_class_bindings (previous_class_level->class_shadowed,
4795                           &s->old_bindings);
4796
4797   /* Have to include the global scope, because class-scope decls
4798      aren't listed anywhere useful.  */
4799   for (; b; b = b->level_chain)
4800     {
4801       tree t;
4802
4803       /* Template IDs are inserted into the global level. If they were
4804          inserted into namespace level, finish_file wouldn't find them
4805          when doing pending instantiations. Therefore, don't stop at
4806          namespace level, but continue until :: .  */
4807       if (global_scope_p (b))
4808         break;
4809
4810       store_bindings (b->names, &s->old_bindings);
4811       /* We also need to check class_shadowed to save class-level type
4812          bindings, since pushclass doesn't fill in b->names.  */
4813       if (b->kind == sk_class)
4814         store_class_bindings (b->class_shadowed, &s->old_bindings);
4815
4816       /* Unwind type-value slots back to top level.  */
4817       for (t = b->type_shadowed; t; t = TREE_CHAIN (t))
4818         SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (t), TREE_VALUE (t));
4819     }
4820
4821   for (i = 0; VEC_iterate (cxx_saved_binding, s->old_bindings, i, sb); ++i)
4822     IDENTIFIER_MARKED (sb->identifier) = 0;
4823
4824   s->prev = scope_chain;
4825   s->bindings = b;
4826   s->need_pop_function_context = need_pop;
4827   s->function_decl = current_function_decl;
4828
4829   scope_chain = s;
4830   current_function_decl = NULL_TREE;
4831   VARRAY_TREE_INIT (current_lang_base, 10, "current_lang_base");
4832   current_lang_name = lang_name_cplusplus;
4833   current_namespace = global_namespace;
4834   timevar_pop (TV_NAME_LOOKUP);
4835 }
4836
4837 void
4838 pop_from_top_level (void)
4839 {
4840   struct saved_scope *s = scope_chain;
4841   cxx_saved_binding *saved;
4842   size_t i;
4843
4844   timevar_push (TV_NAME_LOOKUP); 
4845   /* Clear out class-level bindings cache.  */
4846   if (previous_class_level)
4847     invalidate_class_lookup_cache ();
4848
4849   current_lang_base = 0;
4850
4851   scope_chain = s->prev;
4852   for (i = 0; VEC_iterate (cxx_saved_binding, s->old_bindings, i, saved); ++i)
4853     {
4854       tree id = saved->identifier;
4855
4856       IDENTIFIER_BINDING (id) = saved->binding;
4857       SET_IDENTIFIER_TYPE_VALUE (id, saved->real_type_value);
4858     }
4859
4860   /* If we were in the middle of compiling a function, restore our
4861      state.  */
4862   if (s->need_pop_function_context)
4863     pop_function_context_from (NULL_TREE);
4864   current_function_decl = s->function_decl;
4865   timevar_pop (TV_NAME_LOOKUP);
4866 }
4867
4868 /* Pop off extraneous binding levels left over due to syntax errors.
4869
4870    We don't pop past namespaces, as they might be valid.  */
4871
4872 void
4873 pop_everything (void)
4874 {
4875   if (ENABLE_SCOPE_CHECKING)
4876     verbatim ("XXX entering pop_everything ()\n");
4877   while (!toplevel_bindings_p ())
4878     {
4879       if (current_binding_level->kind == sk_class)
4880         pop_nested_class ();
4881       else
4882         poplevel (0, 0, 0);
4883     }
4884   if (ENABLE_SCOPE_CHECKING)
4885     verbatim ("XXX leaving pop_everything ()\n");
4886 }
4887
4888 /* Emit debugging information for using declarations and directives.
4889    If input tree is overloaded fn then emit debug info for all 
4890    candidates.  */
4891
4892 static void
4893 cp_emit_debug_info_for_using (tree t, tree context)
4894 {
4895   /* Ignore this FUNCTION_DECL if it refers to a builtin declaration 
4896      of a builtin function.  */
4897   if (TREE_CODE (t) == FUNCTION_DECL 
4898       && DECL_EXTERNAL (t)
4899       && DECL_BUILT_IN (t))
4900     return;
4901
4902   /* Do not supply context to imported_module_or_decl, if
4903      it is a global namespace.  */
4904   if (context == global_namespace)
4905     context = NULL_TREE;
4906   
4907   if (BASELINK_P (t))
4908     t = BASELINK_FUNCTIONS (t);
4909   
4910   /* FIXME: Handle TEMPLATE_DECLs.  */
4911   for (t = OVL_CURRENT (t); t; t = OVL_NEXT (t))
4912     if (TREE_CODE (t) != TEMPLATE_DECL)
4913       (*debug_hooks->imported_module_or_decl) (t, context);
4914   }
4915
4916 #include "gt-cp-name-lookup.h"