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