OSDN Git Service

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