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