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