OSDN Git Service

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