]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/cp/name-lookup.c
Makefile.in (tree-inline.o): Add $(TARGET_H) and $(INTEGRATE_H) dependencies.
[thirdparty/gcc.git] / gcc / cp / name-lookup.c
CommitLineData
aed81407 1/* Definitions for C++ name lookup routines.
e77f031d
NC
2 Copyright (C) 2003, 2004, 2005, 2006, 2007
3 Free Software Foundation, Inc.
aed81407
GDR
4 Contributed by Gabriel Dos Reis <gdr@integrable-solutions.net>
5
ed3cf953 6This file is part of GCC.
aed81407 7
ed3cf953 8GCC is free software; you can redistribute it and/or modify
aed81407 9it under the terms of the GNU General Public License as published by
e77f031d 10the Free Software Foundation; either version 3, or (at your option)
aed81407
GDR
11any later version.
12
ed3cf953 13GCC is distributed in the hope that it will be useful,
aed81407
GDR
14but WITHOUT ANY WARRANTY; without even the implied warranty of
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16GNU General Public License for more details.
17
18You should have received a copy of the GNU General Public License
e77f031d
NC
19along with GCC; see the file COPYING3. If not see
20<http://www.gnu.org/licenses/>. */
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
44fd0e80
OW
2102 /* Shift the old and new bindings around so we're comparing class and
2103 enumeration names to each other. */
2104 if (oldval && DECL_IMPLICIT_TYPEDEF_P (oldval))
2105 {
2106 oldtype = oldval;
2107 oldval = NULL_TREE;
2108 }
2109
2110 if (decls.value && DECL_IMPLICIT_TYPEDEF_P (decls.value))
2111 {
2112 decls.type = decls.value;
2113 decls.value = NULL_TREE;
2114 }
2115
d035c296
MM
2116 /* It is impossible to overload a built-in function; any explicit
2117 declaration eliminates the built-in declaration. So, if OLDVAL
2118 is a built-in, then we can just pretend it isn't there. */
c8094d83 2119 if (oldval
d035c296 2120 && TREE_CODE (oldval) == FUNCTION_DECL
d63d5d0c
ILT
2121 && DECL_ANTICIPATED (oldval)
2122 && !DECL_HIDDEN_FRIEND_P (oldval))
d035c296
MM
2123 oldval = NULL_TREE;
2124
44fd0e80 2125 if (decls.value)
5a167978 2126 {
44fd0e80
OW
2127 /* Check for using functions. */
2128 if (is_overloaded_fn (decls.value))
5a167978 2129 {
44fd0e80 2130 tree tmp, tmp1;
5a167978 2131
44fd0e80
OW
2132 if (oldval && !is_overloaded_fn (oldval))
2133 {
2134 error ("%qD is already declared in this scope", name);
2135 oldval = NULL_TREE;
2136 }
5a167978 2137
44fd0e80
OW
2138 *newval = oldval;
2139 for (tmp = decls.value; tmp; tmp = OVL_NEXT (tmp))
5a167978 2140 {
44fd0e80
OW
2141 tree new_fn = OVL_CURRENT (tmp);
2142
2143 /* [namespace.udecl]
2144
2145 If a function declaration in namespace scope or block
2146 scope has the same name and the same parameter types as a
2147 function introduced by a using declaration the program is
2148 ill-formed. */
2149 for (tmp1 = oldval; tmp1; tmp1 = OVL_NEXT (tmp1))
5a167978 2150 {
44fd0e80 2151 tree old_fn = OVL_CURRENT (tmp1);
e3016344 2152
44fd0e80
OW
2153 if (new_fn == old_fn)
2154 /* The function already exists in the current namespace. */
e3016344 2155 break;
44fd0e80
OW
2156 else if (OVL_USED (tmp1))
2157 continue; /* this is a using decl */
2158 else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (new_fn)),
2159 TYPE_ARG_TYPES (TREE_TYPE (old_fn))))
0cbd7506 2160 {
44fd0e80
OW
2161 gcc_assert (!DECL_ANTICIPATED (old_fn)
2162 || DECL_HIDDEN_FRIEND_P (old_fn));
2163
2164 /* There was already a non-using declaration in
2165 this scope with the same parameter types. If both
2166 are the same extern "C" functions, that's ok. */
2167 if (decls_match (new_fn, old_fn))
2168 break;
2169 else
2170 {
2171 error ("%qD is already declared in this scope", name);
2172 break;
2173 }
5a167978 2174 }
5a167978 2175 }
5a167978 2176
44fd0e80
OW
2177 /* If we broke out of the loop, there's no reason to add
2178 this function to the using declarations for this
2179 scope. */
2180 if (tmp1)
2181 continue;
2182
2183 /* If we are adding to an existing OVERLOAD, then we no
2184 longer know the type of the set of functions. */
2185 if (*newval && TREE_CODE (*newval) == OVERLOAD)
2186 TREE_TYPE (*newval) = unknown_type_node;
2187 /* Add this new function to the set. */
2188 *newval = build_overload (OVL_CURRENT (tmp), *newval);
2189 /* If there is only one function, then we use its type. (A
2190 using-declaration naming a single function can be used in
2191 contexts where overload resolution cannot be
2192 performed.) */
2193 if (TREE_CODE (*newval) != OVERLOAD)
2194 {
2195 *newval = ovl_cons (*newval, NULL_TREE);
2196 TREE_TYPE (*newval) = TREE_TYPE (OVL_CURRENT (tmp));
2197 }
2198 OVL_USED (*newval) = 1;
26bcf8fc 2199 }
44fd0e80
OW
2200 }
2201 else
2202 {
2203 *newval = decls.value;
2204 if (oldval && !decls_match (*newval, oldval))
2205 error ("%qD is already declared in this scope", name);
5a167978
GDR
2206 }
2207 }
c8094d83 2208 else
44fd0e80 2209 *newval = oldval;
5a167978 2210
19831e2b 2211 if (decls.type && TREE_CODE (decls.type) == TREE_LIST)
5a167978 2212 {
19831e2b
OW
2213 error ("reference to %qD is ambiguous", name);
2214 print_candidates (decls.type);
2215 }
2216 else
2217 {
2218 *newtype = decls.type;
44fd0e80
OW
2219 if (oldtype && *newtype && !decls_match (oldtype, *newtype))
2220 error ("%qD is already declared in this scope", name);
5a167978 2221 }
44fd0e80
OW
2222
2223 /* If *newval is empty, shift any class or enumeration name down. */
2224 if (!*newval)
2225 {
2226 *newval = *newtype;
2227 *newtype = NULL_TREE;
2228 }
5a167978
GDR
2229}
2230
2231/* Process a using-declaration at function scope. */
2232
2233void
ed5f054f 2234do_local_using_decl (tree decl, tree scope, tree name)
5a167978 2235{
5a167978 2236 tree oldval, oldtype, newval, newtype;
6097b0c3 2237 tree orig_decl = decl;
5a167978 2238
ed5f054f 2239 decl = validate_nonmember_using_decl (decl, scope, name);
5a167978
GDR
2240 if (decl == NULL_TREE)
2241 return;
2242
2243 if (building_stmt_tree ()
2244 && at_function_scope_p ())
350fae66 2245 add_decl_expr (decl);
5a167978 2246
461c6fce 2247 oldval = lookup_name_innermost_nonclass_level (name);
5a167978
GDR
2248 oldtype = lookup_type_current_level (name);
2249
2250 do_nonmember_using_decl (scope, name, oldval, oldtype, &newval, &newtype);
2251
2252 if (newval)
2253 {
2254 if (is_overloaded_fn (newval))
2255 {
2256 tree fn, term;
2257
2258 /* We only need to push declarations for those functions
2259 that were not already bound in the current level.
2260 The old value might be NULL_TREE, it might be a single
2261 function, or an OVERLOAD. */
2262 if (oldval && TREE_CODE (oldval) == OVERLOAD)
2263 term = OVL_FUNCTION (oldval);
2264 else
2265 term = oldval;
c8094d83 2266 for (fn = newval; fn && OVL_CURRENT (fn) != term;
5a167978 2267 fn = OVL_NEXT (fn))
c8094d83 2268 push_overloaded_decl (OVL_CURRENT (fn),
d63d5d0c
ILT
2269 PUSH_LOCAL | PUSH_USING,
2270 false);
5a167978
GDR
2271 }
2272 else
2273 push_local_binding (name, newval, PUSH_USING);
2274 }
2275 if (newtype)
4546865e
MM
2276 {
2277 push_local_binding (name, newtype, PUSH_USING);
2278 set_identifier_type_value (name, newtype);
2279 }
6097b0c3
DP
2280
2281 /* Emit debug info. */
2282 if (!processing_template_decl)
2283 cp_emit_debug_info_for_using (orig_decl, current_scope());
5a167978
GDR
2284}
2285
5a167978
GDR
2286/* Returns true if ROOT (a namespace, class, or function) encloses
2287 CHILD. CHILD may be either a class type or a namespace. */
2288
2289bool
2290is_ancestor (tree root, tree child)
2291{
50bc768d
NS
2292 gcc_assert ((TREE_CODE (root) == NAMESPACE_DECL
2293 || TREE_CODE (root) == FUNCTION_DECL
2294 || CLASS_TYPE_P (root)));
2295 gcc_assert ((TREE_CODE (child) == NAMESPACE_DECL
2296 || CLASS_TYPE_P (child)));
c8094d83 2297
5a167978
GDR
2298 /* The global namespace encloses everything. */
2299 if (root == global_namespace)
2300 return true;
2301
2302 while (true)
2303 {
2304 /* If we've run out of scopes, stop. */
2305 if (!child)
2306 return false;
2307 /* If we've reached the ROOT, it encloses CHILD. */
2308 if (root == child)
2309 return true;
2310 /* Go out one level. */
2311 if (TYPE_P (child))
2312 child = TYPE_NAME (child);
2313 child = DECL_CONTEXT (child);
2314 }
2315}
2316
4514aa8c
NS
2317/* Enter the class or namespace scope indicated by T suitable for name
2318 lookup. T can be arbitrary scope, not necessary nested inside the
2319 current scope. Returns a non-null scope to pop iff pop_scope
2320 should be called later to exit this scope. */
5a167978 2321
4514aa8c 2322tree
5a167978
GDR
2323push_scope (tree t)
2324{
2325 if (TREE_CODE (t) == NAMESPACE_DECL)
2326 push_decl_namespace (t);
91b004e5
MM
2327 else if (CLASS_TYPE_P (t))
2328 {
2329 if (!at_class_scope_p ()
2330 || !same_type_p (current_class_type, t))
2331 push_nested_class (t);
2332 else
2333 /* T is the same as the current scope. There is therefore no
2334 need to re-enter the scope. Since we are not actually
2335 pushing a new scope, our caller should not call
2336 pop_scope. */
4514aa8c 2337 t = NULL_TREE;
91b004e5
MM
2338 }
2339
4514aa8c 2340 return t;
5a167978
GDR
2341}
2342
2343/* Leave scope pushed by push_scope. */
2344
2345void
2346pop_scope (tree t)
2347{
2348 if (TREE_CODE (t) == NAMESPACE_DECL)
2349 pop_decl_namespace ();
2350 else if CLASS_TYPE_P (t)
2351 pop_nested_class ();
2352}
87c465f5
KL
2353
2354/* Subroutine of push_inner_scope. */
2355
2356static void
2357push_inner_scope_r (tree outer, tree inner)
2358{
2359 tree prev;
2360
2361 if (outer == inner
2362 || (TREE_CODE (inner) != NAMESPACE_DECL && !CLASS_TYPE_P (inner)))
2363 return;
2364
2365 prev = CP_DECL_CONTEXT (TREE_CODE (inner) == NAMESPACE_DECL ? inner : TYPE_NAME (inner));
2366 if (outer != prev)
2367 push_inner_scope_r (outer, prev);
2368 if (TREE_CODE (inner) == NAMESPACE_DECL)
2369 {
2370 struct cp_binding_level *save_template_parm = 0;
2371 /* Temporary take out template parameter scopes. They are saved
2372 in reversed order in save_template_parm. */
2373 while (current_binding_level->kind == sk_template_parms)
2374 {
2375 struct cp_binding_level *b = current_binding_level;
2376 current_binding_level = b->level_chain;
2377 b->level_chain = save_template_parm;
2378 save_template_parm = b;
2379 }
2380
2381 resume_scope (NAMESPACE_LEVEL (inner));
2382 current_namespace = inner;
2383
2384 /* Restore template parameter scopes. */
2385 while (save_template_parm)
2386 {
2387 struct cp_binding_level *b = save_template_parm;
2388 save_template_parm = b->level_chain;
2389 b->level_chain = current_binding_level;
2390 current_binding_level = b;
2391 }
2392 }
2393 else
2394 pushclass (inner);
2395}
2396
2397/* Enter the scope INNER from current scope. INNER must be a scope
2398 nested inside current scope. This works with both name lookup and
2399 pushing name into scope. In case a template parameter scope is present,
2400 namespace is pushed under the template parameter scope according to
2401 name lookup rule in 14.6.1/6.
c8094d83 2402
87c465f5
KL
2403 Return the former current scope suitable for pop_inner_scope. */
2404
2405tree
2406push_inner_scope (tree inner)
2407{
2408 tree outer = current_scope ();
2409 if (!outer)
2410 outer = current_namespace;
2411
2412 push_inner_scope_r (outer, inner);
2413 return outer;
2414}
2415
2416/* Exit the current scope INNER back to scope OUTER. */
2417
2418void
2419pop_inner_scope (tree outer, tree inner)
2420{
2421 if (outer == inner
2422 || (TREE_CODE (inner) != NAMESPACE_DECL && !CLASS_TYPE_P (inner)))
2423 return;
2424
2425 while (outer != inner)
2426 {
2427 if (TREE_CODE (inner) == NAMESPACE_DECL)
2428 {
2429 struct cp_binding_level *save_template_parm = 0;
2430 /* Temporary take out template parameter scopes. They are saved
2431 in reversed order in save_template_parm. */
2432 while (current_binding_level->kind == sk_template_parms)
2433 {
2434 struct cp_binding_level *b = current_binding_level;
2435 current_binding_level = b->level_chain;
2436 b->level_chain = save_template_parm;
2437 save_template_parm = b;
2438 }
2439
2440 pop_namespace ();
2441
2442 /* Restore template parameter scopes. */
2443 while (save_template_parm)
2444 {
2445 struct cp_binding_level *b = save_template_parm;
2446 save_template_parm = b->level_chain;
2447 b->level_chain = current_binding_level;
2448 current_binding_level = b;
2449 }
2450 }
2451 else
2452 popclass ();
2453
2454 inner = CP_DECL_CONTEXT (TREE_CODE (inner) == NAMESPACE_DECL ? inner : TYPE_NAME (inner));
2455 }
2456}
00e8de68
GDR
2457\f
2458/* Do a pushlevel for class declarations. */
2459
2460void
2461pushlevel_class (void)
2462{
2463 if (ENABLE_SCOPE_CHECKING)
2464 is_class_level = 1;
2465
2466 class_binding_level = begin_scope (sk_class, current_class_type);
2467}
2468
2469/* ...and a poplevel for class declarations. */
2470
2471void
2472poplevel_class (void)
2473{
926ce8bd 2474 struct cp_binding_level *level = class_binding_level;
89b578be
MM
2475 cp_class_binding *cb;
2476 size_t i;
00e8de68
GDR
2477 tree shadowed;
2478
2479 timevar_push (TV_NAME_LOOKUP);
50bc768d 2480 gcc_assert (level != 0);
00e8de68 2481
39fb05d0
MM
2482 /* If we're leaving a toplevel class, cache its binding level. */
2483 if (current_class_depth == 1)
89b578be 2484 previous_class_level = level;
00e8de68
GDR
2485 for (shadowed = level->type_shadowed;
2486 shadowed;
2487 shadowed = TREE_CHAIN (shadowed))
2488 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (shadowed), TREE_VALUE (shadowed));
2489
2490 /* Remove the bindings for all of the class-level declarations. */
90ea9897
MM
2491 if (level->class_shadowed)
2492 {
2493 for (i = 0;
9ba5ff0f 2494 VEC_iterate (cp_class_binding, level->class_shadowed, i, cb);
90ea9897
MM
2495 ++i)
2496 IDENTIFIER_BINDING (cb->identifier) = cb->base.previous;
2497 ggc_free (level->class_shadowed);
2498 level->class_shadowed = NULL;
2499 }
00e8de68
GDR
2500
2501 /* Now, pop out of the binding level which we created up in the
2502 `pushlevel_class' routine. */
2503 if (ENABLE_SCOPE_CHECKING)
2504 is_class_level = 1;
2505
2506 leave_scope ();
2507 timevar_pop (TV_NAME_LOOKUP);
2508}
2509
90ea9897
MM
2510/* Set INHERITED_VALUE_BINDING_P on BINDING to true or false, as
2511 appropriate. DECL is the value to which a name has just been
df05a794 2512 bound. CLASS_TYPE is the class in which the lookup occurred. */
00e8de68 2513
90ea9897 2514static void
df05a794
MM
2515set_inherited_value_binding_p (cxx_binding *binding, tree decl,
2516 tree class_type)
00e8de68 2517{
00e8de68
GDR
2518 if (binding->value == decl && TREE_CODE (decl) != TREE_LIST)
2519 {
90ea9897
MM
2520 tree context;
2521
00e8de68
GDR
2522 if (TREE_CODE (decl) == OVERLOAD)
2523 context = CP_DECL_CONTEXT (OVL_CURRENT (decl));
2524 else
2525 {
50bc768d 2526 gcc_assert (DECL_P (decl));
00e8de68
GDR
2527 context = context_for_name_lookup (decl);
2528 }
2529
df05a794 2530 if (is_properly_derived_from (class_type, context))
00e8de68
GDR
2531 INHERITED_VALUE_BINDING_P (binding) = 1;
2532 else
2533 INHERITED_VALUE_BINDING_P (binding) = 0;
2534 }
2535 else if (binding->value == decl)
90ea9897
MM
2536 /* We only encounter a TREE_LIST when there is an ambiguity in the
2537 base classes. Such an ambiguity can be overridden by a
2538 definition in this class. */
00e8de68 2539 INHERITED_VALUE_BINDING_P (binding) = 1;
90ea9897
MM
2540 else
2541 INHERITED_VALUE_BINDING_P (binding) = 0;
00e8de68
GDR
2542}
2543
00e8de68
GDR
2544/* Make the declaration of X appear in CLASS scope. */
2545
2546bool
2547pushdecl_class_level (tree x)
2548{
2549 tree name;
2550 bool is_valid = true;
2551
2552 timevar_push (TV_NAME_LOOKUP);
2553 /* Get the name of X. */
2554 if (TREE_CODE (x) == OVERLOAD)
2555 name = DECL_NAME (get_first_fn (x));
2556 else
2557 name = DECL_NAME (x);
2558
2559 if (name)
2560 {
2561 is_valid = push_class_level_binding (name, x);
2562 if (TREE_CODE (x) == TYPE_DECL)
2563 set_identifier_type_value (name, x);
2564 }
2565 else if (ANON_AGGR_TYPE_P (TREE_TYPE (x)))
2566 {
2567 /* If X is an anonymous aggregate, all of its members are
2568 treated as if they were members of the class containing the
2569 aggregate, for naming purposes. */
2570 tree f;
2571
2572 for (f = TYPE_FIELDS (TREE_TYPE (x)); f; f = TREE_CHAIN (f))
2573 {
2574 location_t save_location = input_location;
2575 input_location = DECL_SOURCE_LOCATION (f);
2576 if (!pushdecl_class_level (f))
2577 is_valid = false;
2578 input_location = save_location;
2579 }
2580 }
be99edf8 2581 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, is_valid);
00e8de68
GDR
2582}
2583
90ea9897
MM
2584/* Return the BINDING (if any) for NAME in SCOPE, which is a class
2585 scope. If the value returned is non-NULL, and the PREVIOUS field
2586 is not set, callers must set the PREVIOUS field explicitly. */
2587
2588static cxx_binding *
2589get_class_binding (tree name, cxx_scope *scope)
2590{
2591 tree class_type;
2592 tree type_binding;
2593 tree value_binding;
2594 cxx_binding *binding;
2595
2596 class_type = scope->this_entity;
2597
2598 /* Get the type binding. */
2599 type_binding = lookup_member (class_type, name,
2600 /*protect=*/2, /*want_type=*/true);
2601 /* Get the value binding. */
2602 value_binding = lookup_member (class_type, name,
2603 /*protect=*/2, /*want_type=*/false);
2604
2605 if (value_binding
2606 && (TREE_CODE (value_binding) == TYPE_DECL
2607 || DECL_CLASS_TEMPLATE_P (value_binding)
2608 || (TREE_CODE (value_binding) == TREE_LIST
2609 && TREE_TYPE (value_binding) == error_mark_node
2610 && (TREE_CODE (TREE_VALUE (value_binding))
2611 == TYPE_DECL))))
2612 /* We found a type binding, even when looking for a non-type
2613 binding. This means that we already processed this binding
2614 above. */
2615 ;
2616 else if (value_binding)
2617 {
c8094d83 2618 if (TREE_CODE (value_binding) == TREE_LIST
90ea9897
MM
2619 && TREE_TYPE (value_binding) == error_mark_node)
2620 /* NAME is ambiguous. */
2621 ;
2622 else if (BASELINK_P (value_binding))
2623 /* NAME is some overloaded functions. */
2624 value_binding = BASELINK_FUNCTIONS (value_binding);
2625 }
2626
2627 /* If we found either a type binding or a value binding, create a
2628 new binding object. */
2629 if (type_binding || value_binding)
2630 {
c8094d83
MS
2631 binding = new_class_binding (name,
2632 value_binding,
90ea9897
MM
2633 type_binding,
2634 scope);
2635 /* This is a class-scope binding, not a block-scope binding. */
2636 LOCAL_BINDING_P (binding) = 0;
df05a794 2637 set_inherited_value_binding_p (binding, value_binding, class_type);
90ea9897
MM
2638 }
2639 else
2640 binding = NULL;
2641
2642 return binding;
2643}
c8094d83 2644
00e8de68
GDR
2645/* Make the declaration(s) of X appear in CLASS scope under the name
2646 NAME. Returns true if the binding is valid. */
2647
2648bool
2649push_class_level_binding (tree name, tree x)
2650{
2651 cxx_binding *binding;
90ea9897
MM
2652 tree decl = x;
2653 bool ok;
00e8de68
GDR
2654
2655 timevar_push (TV_NAME_LOOKUP);
2656 /* The class_binding_level will be NULL if x is a template
2657 parameter name in a member template. */
2658 if (!class_binding_level)
2659 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, true);
2660
0fdc23b9
LM
2661 if (name == error_mark_node)
2662 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, false);
2663
90ea9897 2664 /* Check for invalid member names. */
50bc768d 2665 gcc_assert (TYPE_BEING_DEFINED (current_class_type));
90ea9897
MM
2666 /* We could have been passed a tree list if this is an ambiguous
2667 declaration. If so, pull the declaration out because
03fd3f84 2668 check_template_shadow will not handle a TREE_LIST. */
c8094d83 2669 if (TREE_CODE (decl) == TREE_LIST
90ea9897
MM
2670 && TREE_TYPE (decl) == error_mark_node)
2671 decl = TREE_VALUE (decl);
ece95d90 2672
90ea9897 2673 check_template_shadow (decl);
00e8de68 2674
90ea9897 2675 /* [class.mem]
d2f2c87b 2676
90ea9897
MM
2677 If T is the name of a class, then each of the following shall
2678 have a name different from T:
d2f2c87b 2679
90ea9897 2680 -- every static data member of class T;
d2f2c87b 2681
90ea9897 2682 -- every member of class T that is itself a type;
d2f2c87b 2683
90ea9897
MM
2684 -- every enumerator of every member of class T that is an
2685 enumerated type;
d2f2c87b 2686
90ea9897
MM
2687 -- every member of every anonymous union that is a member of
2688 class T.
d2f2c87b 2689
90ea9897
MM
2690 (Non-static data members were also forbidden to have the same
2691 name as T until TC1.) */
2692 if ((TREE_CODE (x) == VAR_DECL
2693 || TREE_CODE (x) == CONST_DECL
2694 || (TREE_CODE (x) == TYPE_DECL
2695 && !DECL_SELF_REFERENCE_P (x))
2696 /* A data member of an anonymous union. */
2697 || (TREE_CODE (x) == FIELD_DECL
2698 && DECL_CONTEXT (x) != current_class_type))
2699 && DECL_NAME (x) == constructor_name (current_class_type))
2700 {
2701 tree scope = context_for_name_lookup (x);
2702 if (TYPE_P (scope) && same_type_p (scope, current_class_type))
a6567a0f 2703 {
2a13a625 2704 error ("%qD has the same name as the class in which it is "
90ea9897
MM
2705 "declared",
2706 x);
2707 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, false);
a6567a0f 2708 }
d2f2c87b
MM
2709 }
2710
90ea9897 2711 /* Get the current binding for NAME in this class, if any. */
00e8de68 2712 binding = IDENTIFIER_BINDING (name);
90ea9897
MM
2713 if (!binding || binding->scope != class_binding_level)
2714 {
2715 binding = get_class_binding (name, class_binding_level);
2716 /* If a new binding was created, put it at the front of the
2717 IDENTIFIER_BINDING list. */
2718 if (binding)
2719 {
2720 binding->previous = IDENTIFIER_BINDING (name);
2721 IDENTIFIER_BINDING (name) = binding;
2722 }
2723 }
2724
2725 /* If there is already a binding, then we may need to update the
2726 current value. */
00e8de68
GDR
2727 if (binding && binding->value)
2728 {
2729 tree bval = binding->value;
2730 tree old_decl = NULL_TREE;
2731
2732 if (INHERITED_VALUE_BINDING_P (binding))
2733 {
2734 /* If the old binding was from a base class, and was for a
0cbd7506
MS
2735 tag name, slide it over to make room for the new binding.
2736 The old binding is still visible if explicitly qualified
2737 with a class-key. */
00e8de68
GDR
2738 if (TREE_CODE (bval) == TYPE_DECL && DECL_ARTIFICIAL (bval)
2739 && !(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)))
2740 {
2741 old_decl = binding->type;
2742 binding->type = bval;
2743 binding->value = NULL_TREE;
2744 INHERITED_VALUE_BINDING_P (binding) = 0;
2745 }
2746 else
862e1e62
MM
2747 {
2748 old_decl = bval;
2749 /* Any inherited type declaration is hidden by the type
2750 declaration in the derived class. */
2751 if (TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x))
2752 binding->type = NULL_TREE;
2753 }
00e8de68
GDR
2754 }
2755 else if (TREE_CODE (x) == OVERLOAD && is_overloaded_fn (bval))
2756 old_decl = bval;
2757 else if (TREE_CODE (x) == USING_DECL && TREE_CODE (bval) == USING_DECL)
2758 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, true);
2759 else if (TREE_CODE (x) == USING_DECL && is_overloaded_fn (bval))
2760 old_decl = bval;
2761 else if (TREE_CODE (bval) == USING_DECL && is_overloaded_fn (x))
2762 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, true);
89b578be 2763
90ea9897 2764 if (old_decl && binding->scope == class_binding_level)
00e8de68 2765 {
f31045fd
MM
2766 binding->value = x;
2767 /* It is always safe to clear INHERITED_VALUE_BINDING_P
df05a794
MM
2768 here. This function is only used to register bindings
2769 from with the class definition itself. */
f31045fd 2770 INHERITED_VALUE_BINDING_P (binding) = 0;
f31045fd 2771 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, true);
00e8de68
GDR
2772 }
2773 }
2774
90ea9897
MM
2775 /* Note that we declared this value so that we can issue an error if
2776 this is an invalid redeclaration of a name already used for some
2777 other purpose. */
2778 note_name_declared_in_class (name, decl);
2779
00e8de68 2780 /* If we didn't replace an existing binding, put the binding on the
90ea9897
MM
2781 stack of bindings for the identifier, and update the shadowed
2782 list. */
2783 if (binding && binding->scope == class_binding_level)
2784 /* Supplement the existing binding. */
2785 ok = supplement_binding (binding, decl);
2786 else
2787 {
2788 /* Create a new binding. */
2789 push_binding (name, decl, class_binding_level);
2790 ok = true;
2791 }
00e8de68 2792
90ea9897 2793 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, ok);
00e8de68
GDR
2794}
2795
1d786913
MM
2796/* Process "using SCOPE::NAME" in a class scope. Return the
2797 USING_DECL created. */
2798
5a167978 2799tree
1d786913 2800do_class_using_decl (tree scope, tree name)
5a167978 2801{
577b02d8
MM
2802 /* The USING_DECL returned by this function. */
2803 tree value;
2804 /* The declaration (or declarations) name by this using
2805 declaration. NULL if we are in a template and cannot figure out
2806 what has been named. */
2807 tree decl;
2808 /* True if SCOPE is a dependent type. */
2809 bool scope_dependent_p;
2810 /* True if SCOPE::NAME is dependent. */
2811 bool name_dependent_p;
2812 /* True if any of the bases of CURRENT_CLASS_TYPE are dependent. */
2813 bool bases_dependent_p;
2814 tree binfo;
2815 tree base_binfo;
2816 int i;
c8094d83 2817
0fdc23b9
LM
2818 if (name == error_mark_node)
2819 return NULL_TREE;
2820
1d786913 2821 if (!scope || !TYPE_P (scope))
5a167978
GDR
2822 {
2823 error ("using-declaration for non-member at class scope");
2824 return NULL_TREE;
2825 }
98ed9dae 2826
98ed9dae 2827 /* Make sure the name is not invalid */
5a167978
GDR
2828 if (TREE_CODE (name) == BIT_NOT_EXPR)
2829 {
98ed9dae
NS
2830 error ("%<%T::%D%> names destructor", scope, name);
2831 return NULL_TREE;
2832 }
2833 if (constructor_name_p (name, scope))
2834 {
2835 error ("%<%T::%D%> names constructor", scope, name);
2836 return NULL_TREE;
2837 }
2838 if (constructor_name_p (name, current_class_type))
2839 {
2840 error ("%<%T::%D%> names constructor in %qT",
2841 scope, name, current_class_type);
5a167978
GDR
2842 return NULL_TREE;
2843 }
5a167978 2844
577b02d8 2845 scope_dependent_p = dependent_type_p (scope);
3db45ab5 2846 name_dependent_p = (scope_dependent_p
82d6b018 2847 || (IDENTIFIER_TYPENAME_P (name)
577b02d8 2848 && dependent_type_p (TREE_TYPE (name))));
6097b0c3 2849
577b02d8
MM
2850 bases_dependent_p = false;
2851 if (processing_template_decl)
2852 for (binfo = TYPE_BINFO (current_class_type), i = 0;
3db45ab5 2853 BINFO_BASE_ITERATE (binfo, i, base_binfo);
577b02d8
MM
2854 i++)
2855 if (dependent_type_p (TREE_TYPE (base_binfo)))
2856 {
2857 bases_dependent_p = true;
2858 break;
2859 }
2860
2861 decl = NULL_TREE;
2862
2863 /* From [namespace.udecl]:
c8094d83 2864
577b02d8 2865 A using-declaration used as a member-declaration shall refer to a
3db45ab5
MS
2866 member of a base class of the class being defined.
2867
577b02d8
MM
2868 In general, we cannot check this constraint in a template because
2869 we do not know the entire set of base classes of the current
2870 class type. However, if all of the base classes are
2871 non-dependent, then we can avoid delaying the check until
2872 instantiation. */
b01e6d2b 2873 if (!scope_dependent_p)
577b02d8
MM
2874 {
2875 base_kind b_kind;
577b02d8
MM
2876 binfo = lookup_base (current_class_type, scope, ba_any, &b_kind);
2877 if (b_kind < bk_proper_base)
98ed9dae 2878 {
b01e6d2b
JM
2879 if (!bases_dependent_p)
2880 {
2881 error_not_base_type (scope, current_class_type);
2882 return NULL_TREE;
2883 }
98ed9dae 2884 }
b01e6d2b 2885 else if (!name_dependent_p)
577b02d8
MM
2886 {
2887 decl = lookup_member (binfo, name, 0, false);
2888 if (!decl)
2889 {
3db45ab5 2890 error ("no members matching %<%T::%D%> in %q#T", scope, name,
577b02d8
MM
2891 scope);
2892 return NULL_TREE;
2893 }
2894 /* The binfo from which the functions came does not matter. */
2895 if (BASELINK_P (decl))
2896 decl = BASELINK_FUNCTIONS (decl);
2897 }
98ed9dae 2898 }
98ed9dae
NS
2899
2900 value = build_lang_decl (USING_DECL, name, NULL_TREE);
2901 USING_DECL_DECLS (value) = decl;
2902 USING_DECL_SCOPE (value) = scope;
577b02d8 2903 DECL_DEPENDENT_P (value) = !decl;
6097b0c3 2904
5a167978
GDR
2905 return value;
2906}
2907
00e8de68
GDR
2908\f
2909/* Return the binding value for name in scope. */
2910
2911tree
2912namespace_binding (tree name, tree scope)
2913{
2914 cxx_binding *binding;
2915
2916 if (scope == NULL)
2917 scope = global_namespace;
8245c194
MA
2918 else
2919 /* Unnecessary for the global namespace because it can't be an alias. */
2920 scope = ORIGINAL_NAMESPACE (scope);
2921
00e8de68
GDR
2922 binding = cxx_scope_find_binding_for_name (NAMESPACE_LEVEL (scope), name);
2923
2924 return binding ? binding->value : NULL_TREE;
2925}
2926
2927/* Set the binding value for name in scope. */
ed3cf953
GDR
2928
2929void
2930set_namespace_binding (tree name, tree scope, tree val)
2931{
2932 cxx_binding *b;
2933
2934 timevar_push (TV_NAME_LOOKUP);
2935 if (scope == NULL_TREE)
2936 scope = global_namespace;
2937 b = binding_for_name (NAMESPACE_LEVEL (scope), name);
3c28fc74 2938 if (!b->value || TREE_CODE (val) == OVERLOAD || val == error_mark_node)
147135cc 2939 b->value = val;
4b0d3cbe 2940 else
c87ceb13 2941 supplement_binding (b, val);
ed3cf953
GDR
2942 timevar_pop (TV_NAME_LOOKUP);
2943}
2944
5a167978
GDR
2945/* Set the context of a declaration to scope. Complain if we are not
2946 outside scope. */
2947
2948void
2949set_decl_namespace (tree decl, tree scope, bool friendp)
2950{
664a90c0 2951 tree old, fn;
c8094d83 2952
5a167978
GDR
2953 /* Get rid of namespace aliases. */
2954 scope = ORIGINAL_NAMESPACE (scope);
c8094d83 2955
5a167978
GDR
2956 /* It is ok for friends to be qualified in parallel space. */
2957 if (!friendp && !is_ancestor (current_namespace, scope))
c4f73174 2958 error ("declaration of %qD not in a namespace surrounding %qD",
0cbd7506 2959 decl, scope);
5a167978 2960 DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
5ae9ba3e 2961
c8094d83
MS
2962 /* Writing "int N::i" to declare a variable within "N" is invalid. */
2963 if (scope == current_namespace)
5ae9ba3e
MM
2964 {
2965 if (at_namespace_scope_p ())
c85ce869 2966 error ("explicit qualification in declaration of %qD",
5ae9ba3e
MM
2967 decl);
2968 return;
5a167978 2969 }
5ae9ba3e
MM
2970
2971 /* See whether this has been declared in the namespace. */
664a90c0 2972 old = lookup_qualified_name (scope, DECL_NAME (decl), false, true);
97dc8e5b 2973 if (old == error_mark_node)
5ae9ba3e
MM
2974 /* No old declaration at all. */
2975 goto complain;
5ae9ba3e
MM
2976 if (!is_overloaded_fn (decl))
2977 /* Don't compare non-function decls with decls_match here, since
2978 it can't check for the correct constness at this
2979 point. pushdecl will find those errors later. */
2980 return;
2981 /* Since decl is a function, old should contain a function decl. */
2982 if (!is_overloaded_fn (old))
2983 goto complain;
664a90c0 2984 fn = OVL_CURRENT (old);
08d295c5 2985 if (!is_associated_namespace (scope, CP_DECL_CONTEXT (fn)))
664a90c0
JM
2986 goto complain;
2987 /* A template can be explicitly specialized in any namespace. */
2988 if (processing_explicit_instantiation)
2989 return;
5ae9ba3e
MM
2990 if (processing_template_decl || processing_specialization)
2991 /* We have not yet called push_template_decl to turn a
2992 FUNCTION_DECL into a TEMPLATE_DECL, so the declarations won't
2993 match. But, we'll check later, when we construct the
2994 template. */
5a167978 2995 return;
abc088aa
MM
2996 /* Instantiations or specializations of templates may be declared as
2997 friends in any namespace. */
2998 if (friendp && DECL_USE_TEMPLATE (decl))
2999 return;
5ae9ba3e
MM
3000 if (is_overloaded_fn (old))
3001 {
3002 for (; old; old = OVL_NEXT (old))
3003 if (decls_match (decl, OVL_CURRENT (old)))
3004 return;
3005 }
3006 else if (decls_match (decl, old))
3007 return;
5a167978 3008 complain:
2a13a625 3009 error ("%qD should have been declared inside %qD", decl, scope);
c8094d83 3010}
5a167978
GDR
3011
3012/* Return the namespace where the current declaration is declared. */
3013
b8c1703b 3014static tree
5a167978
GDR
3015current_decl_namespace (void)
3016{
3017 tree result;
3018 /* If we have been pushed into a different namespace, use it. */
3019 if (decl_namespace_list)
3020 return TREE_PURPOSE (decl_namespace_list);
3021
3022 if (current_class_type)
b1cc95ce 3023 result = decl_namespace_context (current_class_type);
5a167978 3024 else if (current_function_decl)
b1cc95ce 3025 result = decl_namespace_context (current_function_decl);
c8094d83 3026 else
5a167978
GDR
3027 result = current_namespace;
3028 return result;
3029}
3030
00e8de68
GDR
3031/* Push into the scope of the NAME namespace. If NAME is NULL_TREE, then we
3032 select a name that is unique to this compilation unit. */
3033
3034void
3035push_namespace (tree name)
0ed5edac
JM
3036{
3037 push_namespace_with_attribs (name, NULL_TREE);
3038}
3039
3040/* Same, but specify attributes to apply to the namespace. The attributes
3041 only apply to the current namespace-body, not to any later extensions. */
3042
3043void
3044push_namespace_with_attribs (tree name, tree attributes)
00e8de68
GDR
3045{
3046 tree d = NULL_TREE;
3047 int need_new = 1;
3048 int implicit_use = 0;
ed36980c 3049 bool anon = !name;
00e8de68
GDR
3050
3051 timevar_push (TV_NAME_LOOKUP);
c8094d83 3052
00e8de68
GDR
3053 /* We should not get here if the global_namespace is not yet constructed
3054 nor if NAME designates the global namespace: The global scope is
3055 constructed elsewhere. */
50bc768d 3056 gcc_assert (global_namespace != NULL && name != global_scope_name);
00e8de68 3057
ed36980c 3058 if (anon)
00e8de68 3059 {
5880f14f 3060 name = get_anonymous_namespace_name();
00e8de68
GDR
3061 d = IDENTIFIER_NAMESPACE_VALUE (name);
3062 if (d)
0cbd7506
MS
3063 /* Reopening anonymous namespace. */
3064 need_new = 0;
00e8de68
GDR
3065 implicit_use = 1;
3066 }
3067 else
3068 {
3069 /* Check whether this is an extended namespace definition. */
3070 d = IDENTIFIER_NAMESPACE_VALUE (name);
3071 if (d != NULL_TREE && TREE_CODE (d) == NAMESPACE_DECL)
0cbd7506
MS
3072 {
3073 need_new = 0;
3074 if (DECL_NAMESPACE_ALIAS (d))
3075 {
3076 error ("namespace alias %qD not allowed here, assuming %qD",
3077 d, DECL_NAMESPACE_ALIAS (d));
3078 d = DECL_NAMESPACE_ALIAS (d);
3079 }
3080 }
00e8de68
GDR
3081 }
3082
3083 if (need_new)
3084 {
3085 /* Make a new namespace, binding the name to it. */
3086 d = build_lang_decl (NAMESPACE_DECL, name, void_type_node);
3087 DECL_CONTEXT (d) = FROB_CONTEXT (current_namespace);
b9e75696
JM
3088 /* The name of this namespace is not visible to other translation
3089 units if it is an anonymous namespace or member thereof. */
3090 if (anon || decl_anon_ns_mem_p (current_namespace))
3091 TREE_PUBLIC (d) = 0;
3092 else
3093 TREE_PUBLIC (d) = 1;
c0694c4b 3094 pushdecl (d);
ed36980c
JM
3095 if (anon)
3096 {
3097 /* Clear DECL_NAME for the benefit of debugging back ends. */
3098 SET_DECL_ASSEMBLER_NAME (d, name);
3099 DECL_NAME (d) = NULL_TREE;
3100 }
00e8de68
GDR
3101 begin_scope (sk_namespace, d);
3102 }
3103 else
3104 resume_scope (NAMESPACE_LEVEL (d));
3105
3106 if (implicit_use)
3107 do_using_directive (d);
3108 /* Enter the name space. */
3109 current_namespace = d;
3110
0ed5edac
JM
3111#ifdef HANDLE_PRAGMA_VISIBILITY
3112 /* Clear has_visibility in case a previous namespace-definition had a
3113 visibility attribute and this one doesn't. */
3114 current_binding_level->has_visibility = 0;
3115 for (d = attributes; d; d = TREE_CHAIN (d))
3116 {
3117 tree name = TREE_PURPOSE (d);
3118 tree args = TREE_VALUE (d);
3119 tree x;
aa09f986 3120
0ed5edac
JM
3121 if (! is_attribute_p ("visibility", name))
3122 {
3123 warning (OPT_Wattributes, "%qs attribute directive ignored",
3124 IDENTIFIER_POINTER (name));
3125 continue;
3126 }
3127
3128 x = args ? TREE_VALUE (args) : NULL_TREE;
aa09f986 3129 if (x == NULL_TREE || TREE_CODE (x) != STRING_CST || TREE_CHAIN (args))
0ed5edac 3130 {
aa09f986 3131 warning (OPT_Wattributes, "%qs attribute requires a single NTBS argument",
0ed5edac
JM
3132 IDENTIFIER_POINTER (name));
3133 continue;
3134 }
3135
3136 current_binding_level->has_visibility = 1;
3137 push_visibility (TREE_STRING_POINTER (x));
aa09f986
JM
3138 goto found;
3139 }
aa09f986 3140 found:
0ed5edac
JM
3141#endif
3142
00e8de68
GDR
3143 timevar_pop (TV_NAME_LOOKUP);
3144}
3145
3146/* Pop from the scope of the current namespace. */
3147
3148void
3149pop_namespace (void)
3150{
50bc768d 3151 gcc_assert (current_namespace != global_namespace);
00e8de68
GDR
3152 current_namespace = CP_DECL_CONTEXT (current_namespace);
3153 /* The binding level is not popped, as it might be re-opened later. */
3154 leave_scope ();
3155}
3156
3157/* Push into the scope of the namespace NS, even if it is deeply
3158 nested within another namespace. */
3159
3160void
3161push_nested_namespace (tree ns)
3162{
3163 if (ns == global_namespace)
3164 push_to_top_level ();
3165 else
3166 {
3167 push_nested_namespace (CP_DECL_CONTEXT (ns));
3168 push_namespace (DECL_NAME (ns));
3169 }
3170}
3171
3172/* Pop back from the scope of the namespace NS, which was previously
3173 entered with push_nested_namespace. */
3174
3175void
3176pop_nested_namespace (tree ns)
3177{
3178 timevar_push (TV_NAME_LOOKUP);
3179 while (ns != global_namespace)
3180 {
3181 pop_namespace ();
3182 ns = CP_DECL_CONTEXT (ns);
3183 }
3184
3185 pop_from_top_level ();
3186 timevar_pop (TV_NAME_LOOKUP);
3187}
3188
5a167978
GDR
3189/* Temporarily set the namespace for the current declaration. */
3190
3191void
3192push_decl_namespace (tree decl)
3193{
3194 if (TREE_CODE (decl) != NAMESPACE_DECL)
b1cc95ce 3195 decl = decl_namespace_context (decl);
5a167978 3196 decl_namespace_list = tree_cons (ORIGINAL_NAMESPACE (decl),
0cbd7506 3197 NULL_TREE, decl_namespace_list);
5a167978
GDR
3198}
3199
3200/* [namespace.memdef]/2 */
3201
3202void
3203pop_decl_namespace (void)
3204{
3205 decl_namespace_list = TREE_CHAIN (decl_namespace_list);
3206}
3207
c8094d83 3208/* Return the namespace that is the common ancestor
5a167978
GDR
3209 of two given namespaces. */
3210
a5e6b29b 3211static tree
5a167978
GDR
3212namespace_ancestor (tree ns1, tree ns2)
3213{
3214 timevar_push (TV_NAME_LOOKUP);
3215 if (is_ancestor (ns1, ns2))
3216 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, ns1);
3217 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP,
0cbd7506 3218 namespace_ancestor (CP_DECL_CONTEXT (ns1), ns2));
5a167978
GDR
3219}
3220
3221/* Process a namespace-alias declaration. */
3222
3223void
3224do_namespace_alias (tree alias, tree namespace)
3225{
166206ce
VR
3226 if (namespace == error_mark_node)
3227 return;
3228
3229 gcc_assert (TREE_CODE (namespace) == NAMESPACE_DECL);
5a167978
GDR
3230
3231 namespace = ORIGINAL_NAMESPACE (namespace);
3232
3233 /* Build the alias. */
c8094d83 3234 alias = build_lang_decl (NAMESPACE_DECL, alias, void_type_node);
5a167978
GDR
3235 DECL_NAMESPACE_ALIAS (alias) = namespace;
3236 DECL_EXTERNAL (alias) = 1;
6ac1920d 3237 DECL_CONTEXT (alias) = FROB_CONTEXT (current_scope ());
5a167978 3238 pushdecl (alias);
6097b0c3
DP
3239
3240 /* Emit debug info for namespace alias. */
3241 (*debug_hooks->global_decl) (alias);
5a167978
GDR
3242}
3243
00e8de68
GDR
3244/* Like pushdecl, only it places X in the current namespace,
3245 if appropriate. */
3246
3247tree
d63d5d0c 3248pushdecl_namespace_level (tree x, bool is_friend)
00e8de68 3249{
926ce8bd
KH
3250 struct cp_binding_level *b = current_binding_level;
3251 tree t;
00e8de68
GDR
3252
3253 timevar_push (TV_NAME_LOOKUP);
d63d5d0c 3254 t = pushdecl_with_scope (x, NAMESPACE_LEVEL (current_namespace), is_friend);
00e8de68
GDR
3255
3256 /* Now, the type_shadowed stack may screw us. Munge it so it does
3257 what we want. */
6fc98adf 3258 if (TREE_CODE (t) == TYPE_DECL)
00e8de68 3259 {
6fc98adf 3260 tree name = DECL_NAME (t);
00e8de68
GDR
3261 tree newval;
3262 tree *ptr = (tree *)0;
3263 for (; !global_scope_p (b); b = b->level_chain)
0cbd7506
MS
3264 {
3265 tree shadowed = b->type_shadowed;
3266 for (; shadowed; shadowed = TREE_CHAIN (shadowed))
3267 if (TREE_PURPOSE (shadowed) == name)
3268 {
00e8de68
GDR
3269 ptr = &TREE_VALUE (shadowed);
3270 /* Can't break out of the loop here because sometimes
3271 a binding level will have duplicate bindings for
3272 PT names. It's gross, but I haven't time to fix it. */
0cbd7506
MS
3273 }
3274 }
6fc98adf 3275 newval = TREE_TYPE (t);
00e8de68 3276 if (ptr == (tree *)0)
0cbd7506
MS
3277 {
3278 /* @@ This shouldn't be needed. My test case "zstring.cc" trips
3279 up here if this is changed to an assertion. --KR */
6fc98adf 3280 SET_IDENTIFIER_TYPE_VALUE (name, t);
00e8de68
GDR
3281 }
3282 else
0cbd7506 3283 {
00e8de68 3284 *ptr = newval;
0cbd7506 3285 }
00e8de68
GDR
3286 }
3287 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
3288}
3289
5a167978
GDR
3290/* Insert USED into the using list of USER. Set INDIRECT_flag if this
3291 directive is not directly from the source. Also find the common
3292 ancestor and let our users know about the new namespace */
c8094d83 3293static void
5a167978
GDR
3294add_using_namespace (tree user, tree used, bool indirect)
3295{
3296 tree t;
3297 timevar_push (TV_NAME_LOOKUP);
3298 /* Using oneself is a no-op. */
3299 if (user == used)
3300 {
3301 timevar_pop (TV_NAME_LOOKUP);
3302 return;
3303 }
50bc768d
NS
3304 gcc_assert (TREE_CODE (user) == NAMESPACE_DECL);
3305 gcc_assert (TREE_CODE (used) == NAMESPACE_DECL);
5a167978
GDR
3306 /* Check if we already have this. */
3307 t = purpose_member (used, DECL_NAMESPACE_USING (user));
3308 if (t != NULL_TREE)
3309 {
3310 if (!indirect)
3311 /* Promote to direct usage. */
3312 TREE_INDIRECT_USING (t) = 0;
3313 timevar_pop (TV_NAME_LOOKUP);
3314 return;
3315 }
3316
3317 /* Add used to the user's using list. */
c8094d83
MS
3318 DECL_NAMESPACE_USING (user)
3319 = tree_cons (used, namespace_ancestor (user, used),
5a167978
GDR
3320 DECL_NAMESPACE_USING (user));
3321
3322 TREE_INDIRECT_USING (DECL_NAMESPACE_USING (user)) = indirect;
3323
3324 /* Add user to the used's users list. */
3325 DECL_NAMESPACE_USERS (used)
3326 = tree_cons (user, 0, DECL_NAMESPACE_USERS (used));
3327
3328 /* Recursively add all namespaces used. */
3329 for (t = DECL_NAMESPACE_USING (used); t; t = TREE_CHAIN (t))
3330 /* indirect usage */
3331 add_using_namespace (user, TREE_PURPOSE (t), 1);
3332
3333 /* Tell everyone using us about the new used namespaces. */
3334 for (t = DECL_NAMESPACE_USERS (user); t; t = TREE_CHAIN (t))
3335 add_using_namespace (TREE_PURPOSE (t), used, 1);
3336 timevar_pop (TV_NAME_LOOKUP);
3337}
3338
3339/* Process a using-declaration not appearing in class or local scope. */
3340
3341void
ed5f054f 3342do_toplevel_using_decl (tree decl, tree scope, tree name)
5a167978 3343{
5a167978 3344 tree oldval, oldtype, newval, newtype;
6097b0c3 3345 tree orig_decl = decl;
5a167978
GDR
3346 cxx_binding *binding;
3347
ed5f054f 3348 decl = validate_nonmember_using_decl (decl, scope, name);
5a167978
GDR
3349 if (decl == NULL_TREE)
3350 return;
c8094d83 3351
5a167978
GDR
3352 binding = binding_for_name (NAMESPACE_LEVEL (current_namespace), name);
3353
3354 oldval = binding->value;
3355 oldtype = binding->type;
3356
3357 do_nonmember_using_decl (scope, name, oldval, oldtype, &newval, &newtype);
3358
6097b0c3
DP
3359 /* Emit debug info. */
3360 if (!processing_template_decl)
3361 cp_emit_debug_info_for_using (orig_decl, current_namespace);
3362
5a167978
GDR
3363 /* Copy declarations found. */
3364 if (newval)
3365 binding->value = newval;
3366 if (newtype)
3367 binding->type = newtype;
5a167978
GDR
3368}
3369
3370/* Process a using-directive. */
3371
3372void
3373do_using_directive (tree namespace)
3374{
6097b0c3
DP
3375 tree context = NULL_TREE;
3376
166206ce
VR
3377 if (namespace == error_mark_node)
3378 return;
3379
3380 gcc_assert (TREE_CODE (namespace) == NAMESPACE_DECL);
3381
5a167978
GDR
3382 if (building_stmt_tree ())
3383 add_stmt (build_stmt (USING_STMT, namespace));
5a167978 3384 namespace = ORIGINAL_NAMESPACE (namespace);
166206ce 3385
5a167978 3386 if (!toplevel_bindings_p ())
6097b0c3
DP
3387 {
3388 push_using_directive (namespace);
3389 context = current_scope ();
3390 }
5a167978 3391 else
6097b0c3
DP
3392 {
3393 /* direct usage */
3394 add_using_namespace (current_namespace, namespace, 0);
3395 if (current_namespace != global_namespace)
3396 context = current_namespace;
3397 }
c8094d83 3398
6097b0c3
DP
3399 /* Emit debugging info. */
3400 if (!processing_template_decl)
3401 (*debug_hooks->imported_module_or_decl) (namespace, context);
5a167978
GDR
3402}
3403
86098eb8
JM
3404/* Deal with a using-directive seen by the parser. Currently we only
3405 handle attributes here, since they cannot appear inside a template. */
3406
3407void
3408parse_using_directive (tree namespace, tree attribs)
3409{
3410 tree a;
3411
3412 do_using_directive (namespace);
3413
3414 for (a = attribs; a; a = TREE_CHAIN (a))
3415 {
3416 tree name = TREE_PURPOSE (a);
3417 if (is_attribute_p ("strong", name))
3418 {
3419 if (!toplevel_bindings_p ())
3420 error ("strong using only meaningful at namespace scope");
db3a9519 3421 else if (namespace != error_mark_node)
9deb204a
JM
3422 {
3423 if (!is_ancestor (current_namespace, namespace))
3424 error ("current namespace %qD does not enclose strongly used namespace %qD",
3425 current_namespace, namespace);
3426 DECL_NAMESPACE_ASSOCIATIONS (namespace)
3427 = tree_cons (current_namespace, 0,
3428 DECL_NAMESPACE_ASSOCIATIONS (namespace));
3429 }
86098eb8
JM
3430 }
3431 else
5c498b10 3432 warning (OPT_Wattributes, "%qD attribute directive ignored", name);
86098eb8
JM
3433 }
3434}
3435
a5e6b29b
GDR
3436/* Like pushdecl, only it places X in the global scope if appropriate.
3437 Calls cp_finish_decl to register the variable, initializing it with
3438 *INIT, if INIT is non-NULL. */
3439
3440static tree
d63d5d0c 3441pushdecl_top_level_1 (tree x, tree *init, bool is_friend)
a5e6b29b
GDR
3442{
3443 timevar_push (TV_NAME_LOOKUP);
3444 push_to_top_level ();
d63d5d0c 3445 x = pushdecl_namespace_level (x, is_friend);
a5e6b29b 3446 if (init)
d174af6c 3447 finish_decl (x, *init, NULL_TREE);
a5e6b29b
GDR
3448 pop_from_top_level ();
3449 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, x);
3450}
3451
3452/* Like pushdecl, only it places X in the global scope if appropriate. */
3453
3454tree
3455pushdecl_top_level (tree x)
3456{
d63d5d0c
ILT
3457 return pushdecl_top_level_1 (x, NULL, false);
3458}
3459
3460/* Like pushdecl_top_level, but adding the IS_FRIEND parameter. */
3461
3462tree
3463pushdecl_top_level_maybe_friend (tree x, bool is_friend)
3464{
3465 return pushdecl_top_level_1 (x, NULL, is_friend);
a5e6b29b
GDR
3466}
3467
3468/* Like pushdecl, only it places X in the global scope if
3469 appropriate. Calls cp_finish_decl to register the variable,
3470 initializing it with INIT. */
3471
3472tree
3473pushdecl_top_level_and_finish (tree x, tree init)
3474{
d63d5d0c 3475 return pushdecl_top_level_1 (x, &init, false);
a5e6b29b
GDR
3476}
3477
5a167978
GDR
3478/* Combines two sets of overloaded functions into an OVERLOAD chain, removing
3479 duplicates. The first list becomes the tail of the result.
3480
3481 The algorithm is O(n^2). We could get this down to O(n log n) by
3482 doing a sort on the addresses of the functions, if that becomes
3483 necessary. */
3484
3485static tree
3486merge_functions (tree s1, tree s2)
3487{
3488 for (; s2; s2 = OVL_NEXT (s2))
3489 {
3490 tree fn2 = OVL_CURRENT (s2);
3491 tree fns1;
3492
3493 for (fns1 = s1; fns1; fns1 = OVL_NEXT (fns1))
3494 {
3495 tree fn1 = OVL_CURRENT (fns1);
3496
3497 /* If the function from S2 is already in S1, there is no
3498 need to add it again. For `extern "C"' functions, we
3499 might have two FUNCTION_DECLs for the same function, in
3500 different namespaces; again, we only need one of them. */
c8094d83 3501 if (fn1 == fn2
5a167978
GDR
3502 || (DECL_EXTERN_C_P (fn1) && DECL_EXTERN_C_P (fn2)
3503 && DECL_NAME (fn1) == DECL_NAME (fn2)))
3504 break;
3505 }
c8094d83 3506
5a167978
GDR
3507 /* If we exhausted all of the functions in S1, FN2 is new. */
3508 if (!fns1)
3509 s1 = build_overload (fn2, s1);
3510 }
3511 return s1;
3512}
3513
3514/* This should return an error not all definitions define functions.
3515 It is not an error if we find two functions with exactly the
3516 same signature, only if these are selected in overload resolution.
3517 old is the current set of bindings, new the freshly-found binding.
3518 XXX Do we want to give *all* candidates in case of ambiguity?
3519 XXX In what way should I treat extern declarations?
3520 XXX I don't want to repeat the entire duplicate_decls here */
3521
15f8ac7f 3522static void
19831e2b 3523ambiguous_decl (struct scope_binding *old, cxx_binding *new, int flags)
5a167978
GDR
3524{
3525 tree val, type;
50bc768d 3526 gcc_assert (old != NULL);
af92ab36
OW
3527
3528 /* Copy the type. */
3529 type = new->type;
3530 if (LOOKUP_NAMESPACES_ONLY (flags)
3531 || (type && hidden_name_p (type) && !(flags & LOOKUP_HIDDEN)))
3532 type = NULL_TREE;
3533
5a167978
GDR
3534 /* Copy the value. */
3535 val = new->value;
3536 if (val)
af92ab36
OW
3537 {
3538 if (hidden_name_p (val) && !(flags & LOOKUP_HIDDEN))
3539 val = NULL_TREE;
3540 else
3541 switch (TREE_CODE (val))
3542 {
3543 case TEMPLATE_DECL:
3544 /* If we expect types or namespaces, and not templates,
3545 or this is not a template class. */
3546 if ((LOOKUP_QUALIFIERS_ONLY (flags)
3547 && !DECL_CLASS_TEMPLATE_P (val)))
3548 val = NULL_TREE;
3549 break;
3550 case TYPE_DECL:
3551 if (LOOKUP_NAMESPACES_ONLY (flags)
3552 || (type && (flags & LOOKUP_PREFER_TYPES)))
3553 val = NULL_TREE;
3554 break;
3555 case NAMESPACE_DECL:
3556 if (LOOKUP_TYPES_ONLY (flags))
3557 val = NULL_TREE;
3558 break;
3559 case FUNCTION_DECL:
3560 /* Ignore built-in functions that are still anticipated. */
3561 if (LOOKUP_QUALIFIERS_ONLY (flags))
3562 val = NULL_TREE;
3563 break;
3564 default:
3565 if (LOOKUP_QUALIFIERS_ONLY (flags))
3566 val = NULL_TREE;
3567 }
3568 }
3569
3570 /* If val is hidden, shift down any class or enumeration name. */
3571 if (!val)
3572 {
3573 val = type;
3574 type = NULL_TREE;
3575 }
c8094d83 3576
5a167978
GDR
3577 if (!old->value)
3578 old->value = val;
3579 else if (val && val != old->value)
3580 {
3581 if (is_overloaded_fn (old->value) && is_overloaded_fn (val))
0cbd7506 3582 old->value = merge_functions (old->value, val);
5a167978
GDR
3583 else
3584 {
91b1ca65 3585 old->value = tree_cons (NULL_TREE, old->value,
af92ab36 3586 build_tree_list (NULL_TREE, val));
91b1ca65 3587 TREE_TYPE (old->value) = error_mark_node;
5a167978
GDR
3588 }
3589 }
af92ab36 3590
5a167978
GDR
3591 if (!old->type)
3592 old->type = type;
3593 else if (type && old->type != type)
3594 {
19831e2b
OW
3595 old->type = tree_cons (NULL_TREE, old->type,
3596 build_tree_list (NULL_TREE, type));
3597 TREE_TYPE (old->type) = error_mark_node;
5a167978 3598 }
5a167978
GDR
3599}
3600
00e8de68
GDR
3601/* Return the declarations that are members of the namespace NS. */
3602
3603tree
3604cp_namespace_decls (tree ns)
3605{
3606 return NAMESPACE_LEVEL (ns)->names;
3607}
3608
3609/* Combine prefer_type and namespaces_only into flags. */
3610
3611static int
3612lookup_flags (int prefer_type, int namespaces_only)
3613{
3614 if (namespaces_only)
3615 return LOOKUP_PREFER_NAMESPACES;
3616 if (prefer_type > 1)
3617 return LOOKUP_PREFER_TYPES;
3618 if (prefer_type > 0)
3619 return LOOKUP_PREFER_BOTH;
3620 return 0;
3621}
3622
3623/* Given a lookup that returned VAL, use FLAGS to decide if we want to
bd3d082e
KL
3624 ignore it or not. Subroutine of lookup_name_real and
3625 lookup_type_scope. */
00e8de68 3626
bd3d082e 3627static bool
00e8de68
GDR
3628qualify_lookup (tree val, int flags)
3629{
3630 if (val == NULL_TREE)
bd3d082e 3631 return false;
00e8de68 3632 if ((flags & LOOKUP_PREFER_NAMESPACES) && TREE_CODE (val) == NAMESPACE_DECL)
bd3d082e 3633 return true;
00e8de68
GDR
3634 if ((flags & LOOKUP_PREFER_TYPES)
3635 && (TREE_CODE (val) == TYPE_DECL || TREE_CODE (val) == TEMPLATE_DECL))
bd3d082e 3636 return true;
00e8de68 3637 if (flags & (LOOKUP_PREFER_NAMESPACES | LOOKUP_PREFER_TYPES))
bd3d082e
KL
3638 return false;
3639 return true;
3640}
3641
c8094d83 3642/* Given a lookup that returned VAL, decide if we want to ignore it or
d63d5d0c 3643 not based on DECL_ANTICIPATED. */
bd3d082e
KL
3644
3645bool
3646hidden_name_p (tree val)
3647{
3648 if (DECL_P (val)
3649 && DECL_LANG_SPECIFIC (val)
3650 && DECL_ANTICIPATED (val))
3651 return true;
3652 return false;
00e8de68
GDR
3653}
3654
d63d5d0c
ILT
3655/* Remove any hidden friend functions from a possibly overloaded set
3656 of functions. */
3657
3658tree
3659remove_hidden_names (tree fns)
3660{
3661 if (!fns)
3662 return fns;
3663
3664 if (TREE_CODE (fns) == FUNCTION_DECL && hidden_name_p (fns))
3665 fns = NULL_TREE;
3666 else if (TREE_CODE (fns) == OVERLOAD)
3667 {
3668 tree o;
3669
3670 for (o = fns; o; o = OVL_NEXT (o))
3671 if (hidden_name_p (OVL_CURRENT (o)))
3672 break;
3673 if (o)
3674 {
3675 tree n = NULL_TREE;
3676
3677 for (o = fns; o; o = OVL_NEXT (o))
3678 if (!hidden_name_p (OVL_CURRENT (o)))
3679 n = build_overload (OVL_CURRENT (o), n);
3680 fns = n;
3681 }
3682 }
3683
3684 return fns;
3685}
3686
00e8de68 3687/* Unscoped lookup of a global: iterate over current namespaces,
543ebd4a 3688 considering using-directives. */
00e8de68 3689
a5e6b29b 3690static tree
543ebd4a 3691unqualified_namespace_lookup (tree name, int flags)
00e8de68
GDR
3692{
3693 tree initial = current_decl_namespace ();
3694 tree scope = initial;
3695 tree siter;
3696 struct cp_binding_level *level;
3697 tree val = NULL_TREE;
00e8de68
GDR
3698
3699 timevar_push (TV_NAME_LOOKUP);
00e8de68
GDR
3700
3701 for (; !val; scope = CP_DECL_CONTEXT (scope))
3702 {
af92ab36 3703 struct scope_binding binding = EMPTY_SCOPE_BINDING;
00e8de68 3704 cxx_binding *b =
0cbd7506 3705 cxx_scope_find_binding_for_name (NAMESPACE_LEVEL (scope), name);
00e8de68 3706
ba18e4db 3707 if (b)
19831e2b 3708 ambiguous_decl (&binding, b, flags);
00e8de68
GDR
3709
3710 /* Add all _DECLs seen through local using-directives. */
3711 for (level = current_binding_level;
3712 level->kind != sk_namespace;
3713 level = level->level_chain)
3714 if (!lookup_using_namespace (name, &binding, level->using_directives,
0cbd7506 3715 scope, flags))
00e8de68
GDR
3716 /* Give up because of error. */
3717 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
3718
3719 /* Add all _DECLs seen through global using-directives. */
3720 /* XXX local and global using lists should work equally. */
3721 siter = initial;
3722 while (1)
3723 {
3724 if (!lookup_using_namespace (name, &binding,
0cbd7506 3725 DECL_NAMESPACE_USING (siter),
543ebd4a 3726 scope, flags))
00e8de68
GDR
3727 /* Give up because of error. */
3728 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
3729 if (siter == scope) break;
3730 siter = CP_DECL_CONTEXT (siter);
3731 }
3732
af92ab36 3733 val = binding.value;
00e8de68
GDR
3734 if (scope == global_namespace)
3735 break;
3736 }
3737 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, val);
3738}
3739
3740/* Look up NAME (an IDENTIFIER_NODE) in SCOPE (either a NAMESPACE_DECL
3741 or a class TYPE). If IS_TYPE_P is TRUE, then ignore non-type
c8094d83 3742 bindings.
00e8de68
GDR
3743
3744 Returns a DECL (or OVERLOAD, or BASELINK) representing the
3745 declaration found. If no suitable declaration can be found,
8f78f01f 3746 ERROR_MARK_NODE is returned. If COMPLAIN is true and SCOPE is
00e8de68
GDR
3747 neither a class-type nor a namespace a diagnostic is issued. */
3748
3749tree
3750lookup_qualified_name (tree scope, tree name, bool is_type_p, bool complain)
3751{
3752 int flags = 0;
ff8fe3e0 3753 tree t = NULL_TREE;
00e8de68
GDR
3754
3755 if (TREE_CODE (scope) == NAMESPACE_DECL)
3756 {
15f8ac7f 3757 struct scope_binding binding = EMPTY_SCOPE_BINDING;
00e8de68 3758
00e8de68
GDR
3759 flags |= LOOKUP_COMPLAIN;
3760 if (is_type_p)
3761 flags |= LOOKUP_PREFER_TYPES;
543ebd4a 3762 if (qualified_lookup_using_namespace (name, scope, &binding, flags))
af92ab36 3763 t = binding.value;
00e8de68
GDR
3764 }
3765 else if (is_aggr_type (scope, complain))
ff8fe3e0 3766 t = lookup_member (scope, name, 2, is_type_p);
00e8de68 3767
ff8fe3e0
VR
3768 if (!t)
3769 return error_mark_node;
3770 return t;
00e8de68
GDR
3771}
3772
cd0be382 3773/* Subroutine of unqualified_namespace_lookup:
5a167978
GDR
3774 Add the bindings of NAME in used namespaces to VAL.
3775 We are currently looking for names in namespace SCOPE, so we
3776 look through USINGS for using-directives of namespaces
3777 which have SCOPE as a common ancestor with the current scope.
3778 Returns false on errors. */
3779
a5e6b29b 3780static bool
15f8ac7f
GK
3781lookup_using_namespace (tree name, struct scope_binding *val,
3782 tree usings, tree scope, int flags)
5a167978
GDR
3783{
3784 tree iter;
3785 timevar_push (TV_NAME_LOOKUP);
3786 /* Iterate over all used namespaces in current, searching for using
3787 directives of scope. */
3788 for (iter = usings; iter; iter = TREE_CHAIN (iter))
3789 if (TREE_VALUE (iter) == scope)
3790 {
0cbd7506
MS
3791 tree used = ORIGINAL_NAMESPACE (TREE_PURPOSE (iter));
3792 cxx_binding *val1 =
3793 cxx_scope_find_binding_for_name (NAMESPACE_LEVEL (used), name);
3794 /* Resolve ambiguities. */
3795 if (val1)
19831e2b 3796 ambiguous_decl (val, val1, flags);
5a167978
GDR
3797 }
3798 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, val->value != error_mark_node);
3799}
3800
3801/* [namespace.qual]
3802 Accepts the NAME to lookup and its qualifying SCOPE.
3803 Returns the name/type pair found into the cxx_binding *RESULT,
3804 or false on error. */
3805
a5e6b29b 3806static bool
15f8ac7f
GK
3807qualified_lookup_using_namespace (tree name, tree scope,
3808 struct scope_binding *result, int flags)
5a167978
GDR
3809{
3810 /* Maintain a list of namespaces visited... */
3811 tree seen = NULL_TREE;
3812 /* ... and a list of namespace yet to see. */
3813 tree todo = NULL_TREE;
dc55c941 3814 tree todo_maybe = NULL_TREE;
5a167978
GDR
3815 tree usings;
3816 timevar_push (TV_NAME_LOOKUP);
3817 /* Look through namespace aliases. */
3818 scope = ORIGINAL_NAMESPACE (scope);
3819 while (scope && result->value != error_mark_node)
3820 {
3821 cxx_binding *binding =
dc55c941 3822 cxx_scope_find_binding_for_name (NAMESPACE_LEVEL (scope), name);
5a167978
GDR
3823 seen = tree_cons (scope, NULL_TREE, seen);
3824 if (binding)
19831e2b 3825 ambiguous_decl (result, binding, flags);
c404ab02
AO
3826
3827 /* Consider strong using directives always, and non-strong ones
3828 if we haven't found a binding yet. ??? Shouldn't we consider
3829 non-strong ones if the initial RESULT is non-NULL, but the
3830 binding in the given namespace is? */
3831 for (usings = DECL_NAMESPACE_USING (scope); usings;
3832 usings = TREE_CHAIN (usings))
3833 /* If this was a real directive, and we have not seen it. */
dc55c941
AO
3834 if (!TREE_INDIRECT_USING (usings))
3835 {
3836 /* Try to avoid queuing the same namespace more than once,
3837 the exception being when a namespace was already
3838 enqueued for todo_maybe and then a strong using is
3839 found for it. We could try to remove it from
3840 todo_maybe, but it's probably not worth the effort. */
3841 if (is_associated_namespace (scope, TREE_PURPOSE (usings))
3842 && !purpose_member (TREE_PURPOSE (usings), seen)
3843 && !purpose_member (TREE_PURPOSE (usings), todo))
3844 todo = tree_cons (TREE_PURPOSE (usings), NULL_TREE, todo);
3845 else if ((!result->value && !result->type)
3846 && !purpose_member (TREE_PURPOSE (usings), seen)
3847 && !purpose_member (TREE_PURPOSE (usings), todo)
3848 && !purpose_member (TREE_PURPOSE (usings), todo_maybe))
3849 todo_maybe = tree_cons (TREE_PURPOSE (usings), NULL_TREE,
3850 todo_maybe);
3851 }
5a167978
GDR
3852 if (todo)
3853 {
3854 scope = TREE_PURPOSE (todo);
3855 todo = TREE_CHAIN (todo);
3856 }
dc55c941
AO
3857 else if (todo_maybe
3858 && (!result->value && !result->type))
3859 {
3860 scope = TREE_PURPOSE (todo_maybe);
3861 todo = TREE_CHAIN (todo_maybe);
3862 todo_maybe = NULL_TREE;
3863 }
5a167978
GDR
3864 else
3865 scope = NULL_TREE; /* If there never was a todo list. */
3866 }
3867 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, result->value != error_mark_node);
3868}
3869
90ea9897
MM
3870/* Return the innermost non-namespace binding for NAME from a scope
3871 containing BINDING, or, if BINDING is NULL, the current scope. If
3872 CLASS_P is false, then class bindings are ignored. */
3873
3874cxx_binding *
c8094d83 3875outer_binding (tree name,
90ea9897
MM
3876 cxx_binding *binding,
3877 bool class_p)
3878{
3879 cxx_binding *outer;
3880 cxx_scope *scope;
3881 cxx_scope *outer_scope;
3882
3883 if (binding)
3884 {
3885 scope = binding->scope->level_chain;
3886 outer = binding->previous;
3887 }
3888 else
3889 {
3890 scope = current_binding_level;
3891 outer = IDENTIFIER_BINDING (name);
3892 }
3893 outer_scope = outer ? outer->scope : NULL;
3894
3895 /* Because we create class bindings lazily, we might be missing a
3896 class binding for NAME. If there are any class binding levels
3897 between the LAST_BINDING_LEVEL and the scope in which OUTER was
3898 declared, we must lookup NAME in those class scopes. */
3899 if (class_p)
3900 while (scope && scope != outer_scope && scope->kind != sk_namespace)
3901 {
c8094d83 3902 if (scope->kind == sk_class)
90ea9897
MM
3903 {
3904 cxx_binding *class_binding;
c8094d83 3905
90ea9897
MM
3906 class_binding = get_class_binding (name, scope);
3907 if (class_binding)
3908 {
3909 /* Thread this new class-scope binding onto the
3910 IDENTIFIER_BINDING list so that future lookups
3911 find it quickly. */
3912 class_binding->previous = outer;
3913 if (binding)
3914 binding->previous = class_binding;
3915 else
3916 IDENTIFIER_BINDING (name) = class_binding;
3917 return class_binding;
3918 }
3919 }
3920 scope = scope->level_chain;
3921 }
3922
3923 return outer;
3924}
3925
3926/* Return the innermost block-scope or class-scope value binding for
3927 NAME, or NULL_TREE if there is no such binding. */
3928
3929tree
3930innermost_non_namespace_value (tree name)
3931{
3932 cxx_binding *binding;
3933 binding = outer_binding (name, /*binding=*/NULL, /*class_p=*/true);
3934 return binding ? binding->value : NULL_TREE;
3935}
3936
00e8de68
GDR
3937/* Look up NAME in the current binding level and its superiors in the
3938 namespace of variables, functions and typedefs. Return a ..._DECL
3939 node of some kind representing its definition if there is only one
3940 such declaration, or return a TREE_LIST with all the overloaded
3941 definitions if there are many, or return 0 if it is undefined.
bd3d082e
KL
3942 Hidden name, either friend declaration or built-in function, are
3943 not ignored.
00e8de68
GDR
3944
3945 If PREFER_TYPE is > 0, we prefer TYPE_DECLs or namespaces.
3946 If PREFER_TYPE is > 1, we reject non-type decls (e.g. namespaces).
3947 Otherwise we prefer non-TYPE_DECLs.
3948
39fb05d0
MM
3949 If NONCLASS is nonzero, bindings in class scopes are ignored. If
3950 BLOCK_P is false, bindings in block scopes are ignored. */
00e8de68
GDR
3951
3952tree
12cf89fa 3953lookup_name_real (tree name, int prefer_type, int nonclass, bool block_p,
00e8de68
GDR
3954 int namespaces_only, int flags)
3955{
3956 cxx_binding *iter;
3957 tree val = NULL_TREE;
3958
3959 timevar_push (TV_NAME_LOOKUP);
3960 /* Conversion operators are handled specially because ordinary
3961 unqualified name lookup will not find template conversion
3962 operators. */
c8094d83 3963 if (IDENTIFIER_TYPENAME_P (name))
00e8de68
GDR
3964 {
3965 struct cp_binding_level *level;
3966
c8094d83 3967 for (level = current_binding_level;
00e8de68
GDR
3968 level && level->kind != sk_namespace;
3969 level = level->level_chain)
3970 {
3971 tree class_type;
3972 tree operators;
c8094d83
MS
3973
3974 /* A conversion operator can only be declared in a class
00e8de68
GDR
3975 scope. */
3976 if (level->kind != sk_class)
3977 continue;
c8094d83 3978
00e8de68
GDR
3979 /* Lookup the conversion operator in the class. */
3980 class_type = level->this_entity;
3981 operators = lookup_fnfields (class_type, name, /*protect=*/0);
3982 if (operators)
3983 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, operators);
3984 }
3985
3986 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
3987 }
3988
3989 flags |= lookup_flags (prefer_type, namespaces_only);
3990
3991 /* First, look in non-namespace scopes. */
3992
3993 if (current_class_type == NULL_TREE)
3994 nonclass = 1;
3995
12cf89fa 3996 if (block_p || !nonclass)
90ea9897
MM
3997 for (iter = outer_binding (name, NULL, !nonclass);
3998 iter;
3999 iter = outer_binding (name, iter, !nonclass))
12cf89fa
MM
4000 {
4001 tree binding;
c8094d83 4002
12cf89fa
MM
4003 /* Skip entities we don't want. */
4004 if (LOCAL_BINDING_P (iter) ? !block_p : nonclass)
4005 continue;
c8094d83 4006
12cf89fa 4007 /* If this is the kind of thing we're looking for, we're done. */
105d72c5 4008 if (qualify_lookup (iter->value, flags))
12cf89fa
MM
4009 binding = iter->value;
4010 else if ((flags & LOOKUP_PREFER_TYPES)
105d72c5 4011 && qualify_lookup (iter->type, flags))
12cf89fa
MM
4012 binding = iter->type;
4013 else
4014 binding = NULL_TREE;
c8094d83 4015
12cf89fa
MM
4016 if (binding)
4017 {
d4d8c232
SM
4018 if (hidden_name_p (binding))
4019 {
4020 /* A non namespace-scope binding can only be hidden if
4021 we are in a local class, due to friend declarations.
4022 In particular, consider:
4023
4024 void f() {
4025 struct A {
4026 friend struct B;
4027 void g() { B* b; } // error: B is hidden
4028 }
4029 struct B {};
4030 }
4031
4032 The standard says that "B" is a local class in "f"
4033 (but not nested within "A") -- but that name lookup
4034 for "B" does not find this declaration until it is
4035 declared directly with "f".
4036
4037 In particular:
4038
4039 [class.friend]
4040
4041 If a friend declaration appears in a local class and
4042 the name specified is an unqualified name, a prior
4043 declaration is looked up without considering scopes
4044 that are outside the innermost enclosing non-class
4045 scope. For a friend class declaration, if there is no
4046 prior declaration, the class that is specified
4047 belongs to the innermost enclosing non-class scope,
4048 but if it is subsequently referenced, its name is not
4049 found by name lookup until a matching declaration is
4050 provided in the innermost enclosing nonclass scope.
4051 */
4052 gcc_assert (current_class_type &&
4053 LOCAL_CLASS_P (current_class_type));
4054
4055 /* This binding comes from a friend declaration in the local
4056 class. The standard (11.4.8) states that the lookup can
4057 only succeed if there is a non-hidden declaration in the
4058 current scope, which is not the case here. */
4059 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
4060 }
12cf89fa
MM
4061 val = binding;
4062 break;
4063 }
4064 }
00e8de68
GDR
4065
4066 /* Now lookup in namespace scopes. */
4067 if (!val)
29ef83de 4068 val = unqualified_namespace_lookup (name, flags);
00e8de68 4069
0c8ce11b
VR
4070 /* If we have a single function from a using decl, pull it out. */
4071 if (val && TREE_CODE (val) == OVERLOAD && !really_overloaded_fn (val))
4072 val = OVL_FUNCTION (val);
00e8de68
GDR
4073
4074 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, val);
4075}
4076
4077tree
4078lookup_name_nonclass (tree name)
4079{
12cf89fa 4080 return lookup_name_real (name, 0, 1, /*block_p=*/true, 0, LOOKUP_COMPLAIN);
00e8de68
GDR
4081}
4082
4083tree
12cf89fa 4084lookup_function_nonclass (tree name, tree args, bool block_p)
00e8de68 4085{
c8094d83
MS
4086 return
4087 lookup_arg_dependent (name,
4088 lookup_name_real (name, 0, 1, block_p, 0,
12cf89fa
MM
4089 LOOKUP_COMPLAIN),
4090 args);
00e8de68
GDR
4091}
4092
4093tree
10e6657a 4094lookup_name (tree name)
00e8de68 4095{
10e6657a 4096 return lookup_name_real (name, 0, 0, /*block_p=*/true, 0, LOOKUP_COMPLAIN);
00e8de68
GDR
4097}
4098
98803730 4099tree
10e6657a 4100lookup_name_prefer_type (tree name, int prefer_type)
98803730 4101{
10e6657a
RH
4102 return lookup_name_real (name, prefer_type, 0, /*block_p=*/true,
4103 0, LOOKUP_COMPLAIN);
98803730
MS
4104}
4105
461c6fce 4106/* Look up NAME for type used in elaborated name specifier in
29ef83de 4107 the scopes given by SCOPE. SCOPE can be either TS_CURRENT or
87c465f5
KL
4108 TS_WITHIN_ENCLOSING_NON_CLASS. Although not implied by the
4109 name, more scopes are checked if cleanup or template parameter
4110 scope is encountered.
29ef83de
KL
4111
4112 Unlike lookup_name_real, we make sure that NAME is actually
87c465f5
KL
4113 declared in the desired scope, not from inheritance, nor using
4114 directive. For using declaration, there is DR138 still waiting
13a44ee0 4115 to be resolved. Hidden name coming from an earlier friend
bd3d082e 4116 declaration is also returned.
87c465f5
KL
4117
4118 A TYPE_DECL best matching the NAME is returned. Catching error
4119 and issuing diagnostics are caller's responsibility. */
461c6fce
KL
4120
4121tree
29ef83de 4122lookup_type_scope (tree name, tag_scope scope)
461c6fce
KL
4123{
4124 cxx_binding *iter = NULL;
4125 tree val = NULL_TREE;
4126
4127 timevar_push (TV_NAME_LOOKUP);
4128
4129 /* Look in non-namespace scope first. */
4130 if (current_binding_level->kind != sk_namespace)
4131 iter = outer_binding (name, NULL, /*class_p=*/ true);
4132 for (; iter; iter = outer_binding (name, iter, /*class_p=*/ true))
4133 {
4134 /* Check if this is the kind of thing we're looking for.
c8094d83 4135 If SCOPE is TS_CURRENT, also make sure it doesn't come from
29ef83de 4136 base class. For ITER->VALUE, we can simply use
c8094d83 4137 INHERITED_VALUE_BINDING_P. For ITER->TYPE, we have to use
29ef83de 4138 our own check.
461c6fce
KL
4139
4140 We check ITER->TYPE before ITER->VALUE in order to handle
4141 typedef struct C {} C;
4142 correctly. */
4143
4144 if (qualify_lookup (iter->type, LOOKUP_PREFER_TYPES)
29ef83de
KL
4145 && (scope != ts_current
4146 || LOCAL_BINDING_P (iter)
461c6fce
KL
4147 || DECL_CONTEXT (iter->type) == iter->scope->this_entity))
4148 val = iter->type;
29ef83de
KL
4149 else if ((scope != ts_current
4150 || !INHERITED_VALUE_BINDING_P (iter))
461c6fce
KL
4151 && qualify_lookup (iter->value, LOOKUP_PREFER_TYPES))
4152 val = iter->value;
4153
4154 if (val)
4155 break;
4156 }
4157
4158 /* Look in namespace scope. */
4159 if (!val)
4160 {
4161 iter = cxx_scope_find_binding_for_name
4162 (NAMESPACE_LEVEL (current_decl_namespace ()), name);
4163
4164 if (iter)
4165 {
bd3d082e 4166 /* If this is the kind of thing we're looking for, we're done. */
87c465f5 4167 if (qualify_lookup (iter->type, LOOKUP_PREFER_TYPES))
461c6fce 4168 val = iter->type;
87c465f5 4169 else if (qualify_lookup (iter->value, LOOKUP_PREFER_TYPES))
461c6fce
KL
4170 val = iter->value;
4171 }
c8094d83 4172
461c6fce
KL
4173 }
4174
29ef83de 4175 /* Type found, check if it is in the allowed scopes, ignoring cleanup
461c6fce
KL
4176 and template parameter scopes. */
4177 if (val)
4178 {
4179 struct cp_binding_level *b = current_binding_level;
4180 while (b)
4181 {
4182 if (iter->scope == b)
4183 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, val);
4184
4185 if (b->kind == sk_cleanup || b->kind == sk_template_parms)
4186 b = b->level_chain;
29ef83de
KL
4187 else if (b->kind == sk_class
4188 && scope == ts_within_enclosing_non_class)
4189 b = b->level_chain;
461c6fce
KL
4190 else
4191 break;
4192 }
4193 }
4194
4195 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
4196}
4197
00e8de68
GDR
4198/* Similar to `lookup_name' but look only in the innermost non-class
4199 binding level. */
4200
a5e6b29b 4201static tree
461c6fce 4202lookup_name_innermost_nonclass_level (tree name)
00e8de68
GDR
4203{
4204 struct cp_binding_level *b;
4205 tree t = NULL_TREE;
4206
4207 timevar_push (TV_NAME_LOOKUP);
4208 b = innermost_nonclass_level ();
4209
4210 if (b->kind == sk_namespace)
4211 {
4212 t = IDENTIFIER_NAMESPACE_VALUE (name);
4213
4214 /* extern "C" function() */
4215 if (t != NULL_TREE && TREE_CODE (t) == TREE_LIST)
4216 t = TREE_VALUE (t);
4217 }
4218 else if (IDENTIFIER_BINDING (name)
4219 && LOCAL_BINDING_P (IDENTIFIER_BINDING (name)))
4220 {
90ea9897
MM
4221 cxx_binding *binding;
4222 binding = IDENTIFIER_BINDING (name);
00e8de68
GDR
4223 while (1)
4224 {
90ea9897
MM
4225 if (binding->scope == b
4226 && !(TREE_CODE (binding->value) == VAR_DECL
4227 && DECL_DEAD_FOR_LOCAL (binding->value)))
4228 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, binding->value);
00e8de68
GDR
4229
4230 if (b->kind == sk_cleanup)
4231 b = b->level_chain;
4232 else
4233 break;
4234 }
4235 }
4236
4237 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
4238}
4239
461c6fce 4240/* Like lookup_name_innermost_nonclass_level, but for types. */
00e8de68 4241
a5e6b29b 4242static tree
00e8de68
GDR
4243lookup_type_current_level (tree name)
4244{
926ce8bd 4245 tree t = NULL_TREE;
00e8de68
GDR
4246
4247 timevar_push (TV_NAME_LOOKUP);
50bc768d 4248 gcc_assert (current_binding_level->kind != sk_namespace);
00e8de68
GDR
4249
4250 if (REAL_IDENTIFIER_TYPE_VALUE (name) != NULL_TREE
4251 && REAL_IDENTIFIER_TYPE_VALUE (name) != global_type_node)
4252 {
4253 struct cp_binding_level *b = current_binding_level;
4254 while (1)
4255 {
4256 if (purpose_member (name, b->type_shadowed))
4257 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP,
0cbd7506 4258 REAL_IDENTIFIER_TYPE_VALUE (name));
00e8de68
GDR
4259 if (b->kind == sk_cleanup)
4260 b = b->level_chain;
4261 else
4262 break;
4263 }
4264 }
4265
4266 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
4267}
4268
5a167978
GDR
4269/* [basic.lookup.koenig] */
4270/* A nonzero return value in the functions below indicates an error. */
4271
4272struct arg_lookup
4273{
4274 tree name;
d63d5d0c 4275 tree args;
5a167978
GDR
4276 tree namespaces;
4277 tree classes;
4278 tree functions;
4279};
4280
4281static bool arg_assoc (struct arg_lookup*, tree);
4282static bool arg_assoc_args (struct arg_lookup*, tree);
4283static bool arg_assoc_type (struct arg_lookup*, tree);
4284static bool add_function (struct arg_lookup *, tree);
4285static bool arg_assoc_namespace (struct arg_lookup *, tree);
4286static bool arg_assoc_class (struct arg_lookup *, tree);
4287static bool arg_assoc_template_arg (struct arg_lookup*, tree);
4288
4289/* Add a function to the lookup structure.
4290 Returns true on error. */
4291
4292static bool
4293add_function (struct arg_lookup *k, tree fn)
4294{
4295 /* We used to check here to see if the function was already in the list,
4296 but that's O(n^2), which is just too expensive for function lookup.
4297 Now we deal with the occasional duplicate in joust. In doing this, we
4298 assume that the number of duplicates will be small compared to the
4299 total number of functions being compared, which should usually be the
4300 case. */
4301
4302 /* We must find only functions, or exactly one non-function. */
c8094d83 4303 if (!k->functions)
5a167978
GDR
4304 k->functions = fn;
4305 else if (fn == k->functions)
4306 ;
4307 else if (is_overloaded_fn (k->functions) && is_overloaded_fn (fn))
4308 k->functions = build_overload (fn, k->functions);
4309 else
4310 {
4311 tree f1 = OVL_CURRENT (k->functions);
4312 tree f2 = fn;
4313 if (is_overloaded_fn (f1))
4314 {
4315 fn = f1; f1 = f2; f2 = fn;
4316 }
dee15844
JM
4317 error ("%q+D is not a function,", f1);
4318 error (" conflict with %q+D", f2);
2a13a625 4319 error (" in call to %qD", k->name);
5a167978
GDR
4320 return true;
4321 }
4322
4323 return false;
4324}
4325
86098eb8
JM
4326/* Returns true iff CURRENT has declared itself to be an associated
4327 namespace of SCOPE via a strong using-directive (or transitive chain
4328 thereof). Both are namespaces. */
4329
4330bool
4331is_associated_namespace (tree current, tree scope)
4332{
4333 tree seen = NULL_TREE;
4334 tree todo = NULL_TREE;
4335 tree t;
4336 while (1)
4337 {
4338 if (scope == current)
4339 return true;
4340 seen = tree_cons (scope, NULL_TREE, seen);
4341 for (t = DECL_NAMESPACE_ASSOCIATIONS (scope); t; t = TREE_CHAIN (t))
4342 if (!purpose_member (TREE_PURPOSE (t), seen))
4343 todo = tree_cons (TREE_PURPOSE (t), NULL_TREE, todo);
4344 if (todo)
4345 {
4346 scope = TREE_PURPOSE (todo);
4347 todo = TREE_CHAIN (todo);
4348 }
4349 else
4350 return false;
4351 }
4352}
4353
d63d5d0c
ILT
4354/* Return whether FN is a friend of an associated class of ARG. */
4355
4356static bool
4357friend_of_associated_class_p (tree arg, tree fn)
4358{
4359 tree type;
4360
4361 if (TYPE_P (arg))
4362 type = arg;
4363 else if (type_unknown_p (arg))
4364 return false;
4365 else
4366 type = TREE_TYPE (arg);
4367
4368 /* If TYPE is a class, the class itself and all base classes are
4369 associated classes. */
4370 if (CLASS_TYPE_P (type))
4371 {
4372 if (is_friend (type, fn))
4373 return true;
4374
4375 if (TYPE_BINFO (type))
4376 {
4377 tree binfo, base_binfo;
4378 int i;
4379
4380 for (binfo = TYPE_BINFO (type), i = 0;
4381 BINFO_BASE_ITERATE (binfo, i, base_binfo);
4382 i++)
4383 if (is_friend (BINFO_TYPE (base_binfo), fn))
4384 return true;
4385 }
4386 }
4387
4388 /* If TYPE is a class member, the class of which it is a member is
4389 an associated class. */
4390 if ((CLASS_TYPE_P (type)
4391 || TREE_CODE (type) == UNION_TYPE
4392 || TREE_CODE (type) == ENUMERAL_TYPE)
4393 && TYPE_CONTEXT (type)
4394 && CLASS_TYPE_P (TYPE_CONTEXT (type))
4395 && is_friend (TYPE_CONTEXT (type), fn))
4396 return true;
4397
4398 return false;
4399}
4400
5a167978
GDR
4401/* Add functions of a namespace to the lookup structure.
4402 Returns true on error. */
4403
4404static bool
4405arg_assoc_namespace (struct arg_lookup *k, tree scope)
4406{
4407 tree value;
4408
4409 if (purpose_member (scope, k->namespaces))
4410 return 0;
4411 k->namespaces = tree_cons (scope, NULL_TREE, k->namespaces);
86098eb8
JM
4412
4413 /* Check out our super-users. */
4414 for (value = DECL_NAMESPACE_ASSOCIATIONS (scope); value;
4415 value = TREE_CHAIN (value))
4416 if (arg_assoc_namespace (k, TREE_PURPOSE (value)))
4417 return true;
c8094d83 4418
5a167978
GDR
4419 value = namespace_binding (k->name, scope);
4420 if (!value)
4421 return false;
4422
4423 for (; value; value = OVL_NEXT (value))
d63d5d0c
ILT
4424 {
4425 /* We don't want to find arbitrary hidden functions via argument
4426 dependent lookup. We only want to find friends of associated
4427 classes. */
4428 if (hidden_name_p (OVL_CURRENT (value)))
4429 {
4430 tree args;
4431
4432 for (args = k->args; args; args = TREE_CHAIN (args))
4433 if (friend_of_associated_class_p (TREE_VALUE (args),
4434 OVL_CURRENT (value)))
4435 break;
4436 if (!args)
4437 continue;
4438 }
4439
4440 if (add_function (k, OVL_CURRENT (value)))
4441 return true;
4442 }
c8094d83 4443
5a167978
GDR
4444 return false;
4445}
4446
4447/* Adds everything associated with a template argument to the lookup
4448 structure. Returns true on error. */
4449
4450static bool
4451arg_assoc_template_arg (struct arg_lookup *k, tree arg)
4452{
4453 /* [basic.lookup.koenig]
4454
4455 If T is a template-id, its associated namespaces and classes are
4456 ... the namespaces and classes associated with the types of the
4457 template arguments provided for template type parameters
4458 (excluding template template parameters); the namespaces in which
4459 any template template arguments are defined; and the classes in
4460 which any member templates used as template template arguments
4461 are defined. [Note: non-type template arguments do not
4462 contribute to the set of associated namespaces. ] */
4463
4464 /* Consider first template template arguments. */
4465 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
4466 || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE)
4467 return false;
4468 else if (TREE_CODE (arg) == TEMPLATE_DECL)
4469 {
4470 tree ctx = CP_DECL_CONTEXT (arg);
4471
4472 /* It's not a member template. */
4473 if (TREE_CODE (ctx) == NAMESPACE_DECL)
0cbd7506 4474 return arg_assoc_namespace (k, ctx);
5a167978 4475 /* Otherwise, it must be member template. */
c8094d83 4476 else
0cbd7506 4477 return arg_assoc_class (k, ctx);
5a167978
GDR
4478 }
4479 /* It's not a template template argument, but it is a type template
4480 argument. */
4481 else if (TYPE_P (arg))
4482 return arg_assoc_type (k, arg);
4483 /* It's a non-type template argument. */
4484 else
4485 return false;
4486}
4487
4488/* Adds everything associated with class to the lookup structure.
4489 Returns true on error. */
4490
4491static bool
4492arg_assoc_class (struct arg_lookup *k, tree type)
4493{
4494 tree list, friends, context;
4495 int i;
c8094d83 4496
5a167978
GDR
4497 /* Backend build structures, such as __builtin_va_list, aren't
4498 affected by all this. */
4499 if (!CLASS_TYPE_P (type))
4500 return false;
4501
4502 if (purpose_member (type, k->classes))
4503 return false;
4504 k->classes = tree_cons (type, NULL_TREE, k->classes);
c8094d83 4505
b1cc95ce 4506 context = decl_namespace_context (type);
5a167978
GDR
4507 if (arg_assoc_namespace (k, context))
4508 return true;
ccb14335
NS
4509
4510 if (TYPE_BINFO (type))
fa743e8c
NS
4511 {
4512 /* Process baseclasses. */
4513 tree binfo, base_binfo;
c8094d83 4514
fa743e8c
NS
4515 for (binfo = TYPE_BINFO (type), i = 0;
4516 BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
4517 if (arg_assoc_class (k, BINFO_TYPE (base_binfo)))
4518 return true;
4519 }
c8094d83 4520
5a167978 4521 /* Process friends. */
c8094d83 4522 for (list = DECL_FRIENDLIST (TYPE_MAIN_DECL (type)); list;
5a167978
GDR
4523 list = TREE_CHAIN (list))
4524 if (k->name == FRIEND_NAME (list))
c8094d83 4525 for (friends = FRIEND_DECLS (list); friends;
5a167978 4526 friends = TREE_CHAIN (friends))
c8b2e872
MM
4527 {
4528 tree fn = TREE_VALUE (friends);
4529
4530 /* Only interested in global functions with potentially hidden
4531 (i.e. unqualified) declarations. */
4532 if (CP_DECL_CONTEXT (fn) != context)
4533 continue;
4534 /* Template specializations are never found by name lookup.
4535 (Templates themselves can be found, but not template
4536 specializations.) */
4537 if (TREE_CODE (fn) == FUNCTION_DECL && DECL_USE_TEMPLATE (fn))
4538 continue;
4539 if (add_function (k, fn))
5a167978 4540 return true;
c8b2e872 4541 }
5a167978
GDR
4542
4543 /* Process template arguments. */
c8094d83 4544 if (CLASSTYPE_TEMPLATE_INFO (type)
146d3c99 4545 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (type)))
5a167978
GDR
4546 {
4547 list = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
c8094d83 4548 for (i = 0; i < TREE_VEC_LENGTH (list); ++i)
0cbd7506 4549 arg_assoc_template_arg (k, TREE_VEC_ELT (list, i));
5a167978
GDR
4550 }
4551
4552 return false;
4553}
4554
4555/* Adds everything associated with a given type.
4556 Returns 1 on error. */
4557
4558static bool
4559arg_assoc_type (struct arg_lookup *k, tree type)
4560{
4561 /* As we do not get the type of non-type dependent expressions
4562 right, we can end up with such things without a type. */
4563 if (!type)
4564 return false;
4565
4566 if (TYPE_PTRMEM_P (type))
4567 {
4568 /* Pointer to member: associate class type and value type. */
4569 if (arg_assoc_type (k, TYPE_PTRMEM_CLASS_TYPE (type)))
4570 return true;
4571 return arg_assoc_type (k, TYPE_PTRMEM_POINTED_TO_TYPE (type));
4572 }
4573 else switch (TREE_CODE (type))
4574 {
4575 case ERROR_MARK:
4576 return false;
4577 case VOID_TYPE:
4578 case INTEGER_TYPE:
4579 case REAL_TYPE:
4580 case COMPLEX_TYPE:
4581 case VECTOR_TYPE:
5a167978
GDR
4582 case BOOLEAN_TYPE:
4583 return false;
4584 case RECORD_TYPE:
4585 if (TYPE_PTRMEMFUNC_P (type))
4586 return arg_assoc_type (k, TYPE_PTRMEMFUNC_FN_TYPE (type));
4587 return arg_assoc_class (k, type);
4588 case POINTER_TYPE:
4589 case REFERENCE_TYPE:
4590 case ARRAY_TYPE:
4591 return arg_assoc_type (k, TREE_TYPE (type));
4592 case UNION_TYPE:
4593 case ENUMERAL_TYPE:
b1cc95ce 4594 return arg_assoc_namespace (k, decl_namespace_context (type));
5a167978
GDR
4595 case METHOD_TYPE:
4596 /* The basetype is referenced in the first arg type, so just
4597 fall through. */
4598 case FUNCTION_TYPE:
4599 /* Associate the parameter types. */
4600 if (arg_assoc_args (k, TYPE_ARG_TYPES (type)))
4601 return true;
4602 /* Associate the return type. */
4603 return arg_assoc_type (k, TREE_TYPE (type));
4604 case TEMPLATE_TYPE_PARM:
4605 case BOUND_TEMPLATE_TEMPLATE_PARM:
4606 return false;
4607 case TYPENAME_TYPE:
4608 return false;
4609 case LANG_TYPE:
315fb5db
NS
4610 gcc_assert (type == unknown_type_node);
4611 return false;
5d80a306
DG
4612 case TYPE_PACK_EXPANSION:
4613 return arg_assoc_type (k, PACK_EXPANSION_PATTERN (type));
4614 case TYPE_ARGUMENT_PACK:
4615 {
4616 tree args = ARGUMENT_PACK_ARGS (type);
4617 int i, len = TREE_VEC_LENGTH (args);
4618 for (i = 0; i < len; i++)
4619 if (arg_assoc_type (k, TREE_VEC_ELT (args, i)))
4620 return true;
4621 }
4622 break;
4623
5a167978 4624 default:
315fb5db 4625 gcc_unreachable ();
5a167978
GDR
4626 }
4627 return false;
4628}
4629
4630/* Adds everything associated with arguments. Returns true on error. */
4631
4632static bool
4633arg_assoc_args (struct arg_lookup *k, tree args)
4634{
4635 for (; args; args = TREE_CHAIN (args))
4636 if (arg_assoc (k, TREE_VALUE (args)))
4637 return true;
4638 return false;
4639}
4640
4641/* Adds everything associated with a given tree_node. Returns 1 on error. */
4642
4643static bool
4644arg_assoc (struct arg_lookup *k, tree n)
4645{
4646 if (n == error_mark_node)
4647 return false;
4648
4649 if (TYPE_P (n))
4650 return arg_assoc_type (k, n);
4651
4652 if (! type_unknown_p (n))
4653 return arg_assoc_type (k, TREE_TYPE (n));
4654
4655 if (TREE_CODE (n) == ADDR_EXPR)
4656 n = TREE_OPERAND (n, 0);
4657 if (TREE_CODE (n) == COMPONENT_REF)
4658 n = TREE_OPERAND (n, 1);
4659 if (TREE_CODE (n) == OFFSET_REF)
4660 n = TREE_OPERAND (n, 1);
4661 while (TREE_CODE (n) == TREE_LIST)
4662 n = TREE_VALUE (n);
4663 if (TREE_CODE (n) == BASELINK)
4664 n = BASELINK_FUNCTIONS (n);
4665
4666 if (TREE_CODE (n) == FUNCTION_DECL)
4667 return arg_assoc_type (k, TREE_TYPE (n));
4668 if (TREE_CODE (n) == TEMPLATE_ID_EXPR)
4669 {
4670 /* [basic.lookup.koenig]
4671
4672 If T is a template-id, its associated namespaces and classes
4673 are the namespace in which the template is defined; for
4674 member templates, the member template's class... */
4675 tree template = TREE_OPERAND (n, 0);
4676 tree args = TREE_OPERAND (n, 1);
4677 tree ctx;
4678 int ix;
4679
4680 if (TREE_CODE (template) == COMPONENT_REF)
0cbd7506 4681 template = TREE_OPERAND (template, 1);
c8094d83 4682
5a167978
GDR
4683 /* First, the template. There may actually be more than one if
4684 this is an overloaded function template. But, in that case,
4685 we only need the first; all the functions will be in the same
4686 namespace. */
4687 template = OVL_CURRENT (template);
4688
4689 ctx = CP_DECL_CONTEXT (template);
c8094d83 4690
5a167978
GDR
4691 if (TREE_CODE (ctx) == NAMESPACE_DECL)
4692 {
4693 if (arg_assoc_namespace (k, ctx) == 1)
4694 return true;
4695 }
4696 /* It must be a member template. */
4697 else if (arg_assoc_class (k, ctx) == 1)
4698 return true;
4699
4700 /* Now the arguments. */
c19aaba5
NS
4701 if (args)
4702 for (ix = TREE_VEC_LENGTH (args); ix--;)
4703 if (arg_assoc_template_arg (k, TREE_VEC_ELT (args, ix)) == 1)
4704 return true;
5a167978 4705 }
c1cca8d4 4706 else if (TREE_CODE (n) == OVERLOAD)
5a167978 4707 {
5a167978
GDR
4708 for (; n; n = OVL_CHAIN (n))
4709 if (arg_assoc_type (k, TREE_TYPE (OVL_FUNCTION (n))))
4710 return true;
4711 }
4712
4713 return false;
4714}
4715
4716/* Performs Koenig lookup depending on arguments, where fns
4717 are the functions found in normal lookup. */
4718
4719tree
4720lookup_arg_dependent (tree name, tree fns, tree args)
4721{
4722 struct arg_lookup k;
5a167978
GDR
4723
4724 timevar_push (TV_NAME_LOOKUP);
d63d5d0c
ILT
4725
4726 /* Remove any hidden friend functions from the list of functions
4727 found so far. They will be added back by arg_assoc_class as
4728 appropriate. */
4729 fns = remove_hidden_names (fns);
4730
5a167978 4731 k.name = name;
d63d5d0c 4732 k.args = args;
5a167978
GDR
4733 k.functions = fns;
4734 k.classes = NULL_TREE;
4735
20ac1e03
DG
4736 /* We previously performed an optimization here by setting
4737 NAMESPACES to the current namespace when it was safe. However, DR
4738 164 says that namespaces that were already searched in the first
4739 stage of template processing are searched again (potentially
4740 picking up later definitions) in the second stage. */
4741 k.namespaces = NULL_TREE;
5a167978
GDR
4742
4743 arg_assoc_args (&k, args);
4860b874
NS
4744
4745 fns = k.functions;
4746
4747 if (fns
4748 && TREE_CODE (fns) != VAR_DECL
4749 && !is_overloaded_fn (fns))
4750 {
4751 error ("argument dependent lookup finds %q+D", fns);
4752 error (" in call to %qD", name);
4753 fns = error_mark_node;
4754 }
4755
4756 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, fns);
5a167978
GDR
4757}
4758
00e8de68
GDR
4759/* Add namespace to using_directives. Return NULL_TREE if nothing was
4760 changed (i.e. there was already a directive), or the fresh
4761 TREE_LIST otherwise. */
4762
a5e6b29b 4763static tree
00e8de68
GDR
4764push_using_directive (tree used)
4765{
4766 tree ud = current_binding_level->using_directives;
4767 tree iter, ancestor;
4768
4769 timevar_push (TV_NAME_LOOKUP);
4770 /* Check if we already have this. */
4771 if (purpose_member (used, ud) != NULL_TREE)
4772 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
4773
4774 ancestor = namespace_ancestor (current_decl_namespace (), used);
4775 ud = current_binding_level->using_directives;
4776 ud = tree_cons (used, ancestor, ud);
4777 current_binding_level->using_directives = ud;
4778
4779 /* Recursively add all namespaces used. */
4780 for (iter = DECL_NAMESPACE_USING (used); iter; iter = TREE_CHAIN (iter))
4781 push_using_directive (TREE_PURPOSE (iter));
4782
4783 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, ud);
4784}
4785
4786/* The type TYPE is being declared. If it is a class template, or a
4787 specialization of a class template, do any processing required and
4788 perform error-checking. If IS_FRIEND is nonzero, this TYPE is
4789 being declared a friend. B is the binding level at which this TYPE
4790 should be bound.
4791
4792 Returns the TYPE_DECL for TYPE, which may have been altered by this
4793 processing. */
4794
4795static tree
bd3d082e 4796maybe_process_template_type_declaration (tree type, int is_friend,
0cbd7506 4797 cxx_scope *b)
00e8de68
GDR
4798{
4799 tree decl = TYPE_NAME (type);
4800
4801 if (processing_template_parmlist)
4802 /* You can't declare a new template type in a template parameter
4803 list. But, you can declare a non-template type:
4804
0cbd7506 4805 template <class A*> struct S;
00e8de68
GDR
4806
4807 is a forward-declaration of `A'. */
4808 ;
c43e95f8
MM
4809 else if (b->kind == sk_namespace
4810 && current_binding_level->kind != sk_namespace)
4811 /* If this new type is being injected into a containing scope,
4812 then it's not a template type. */
4813 ;
00e8de68
GDR
4814 else
4815 {
50bc768d 4816 gcc_assert (IS_AGGR_TYPE (type) || TREE_CODE (type) == ENUMERAL_TYPE);
00e8de68
GDR
4817
4818 if (processing_template_decl)
4819 {
4820 /* This may change after the call to
4821 push_template_decl_real, but we want the original value. */
4822 tree name = DECL_NAME (decl);
4823
bd3d082e 4824 decl = push_template_decl_real (decl, is_friend);
00e8de68
GDR
4825 /* If the current binding level is the binding level for the
4826 template parameters (see the comment in
4827 begin_template_parm_list) and the enclosing level is a class
4828 scope, and we're not looking at a friend, push the
4829 declaration of the member class into the class scope. In the
4830 friend case, push_template_decl will already have put the
4831 friend into global scope, if appropriate. */
4832 if (TREE_CODE (type) != ENUMERAL_TYPE
bd3d082e 4833 && !is_friend && b->kind == sk_template_parms
00e8de68
GDR
4834 && b->level_chain->kind == sk_class)
4835 {
4836 finish_member_declaration (CLASSTYPE_TI_TEMPLATE (type));
e57df6fe 4837
00e8de68
GDR
4838 if (!COMPLETE_TYPE_P (current_class_type))
4839 {
4840 maybe_add_class_template_decl_list (current_class_type,
4841 type, /*friend_p=*/0);
c72a1a86 4842 /* Put this UTD in the table of UTDs for the class. */
e57df6fe
KL
4843 if (CLASSTYPE_NESTED_UTDS (current_class_type) == NULL)
4844 CLASSTYPE_NESTED_UTDS (current_class_type) =
4845 binding_table_new (SCOPE_DEFAULT_HT_SIZE);
4846
4847 binding_table_insert
4848 (CLASSTYPE_NESTED_UTDS (current_class_type), name, type);
00e8de68
GDR
4849 }
4850 }
4851 }
4852 }
4853
4854 return decl;
4855}
4856
5a24482e
KL
4857/* Push a tag name NAME for struct/class/union/enum type TYPE. In case
4858 that the NAME is a class template, the tag is processed but not pushed.
4859
4860 The pushed scope depend on the SCOPE parameter:
4861 - When SCOPE is TS_CURRENT, put it into the inner-most non-sk_cleanup
4862 scope.
4863 - When SCOPE is TS_GLOBAL, put it in the inner-most non-class and
4864 non-template-parameter scope. This case is needed for forward
4865 declarations.
4866 - When SCOPE is TS_WITHIN_ENCLOSING_NON_CLASS, this is similar to
4867 TS_GLOBAL case except that names within template-parameter scopes
4868 are not pushed at all.
4869
c6f9f83b 4870 Returns TYPE upon success and ERROR_MARK_NODE otherwise. */
00e8de68 4871
c6f9f83b 4872tree
bd3d082e 4873pushtag (tree name, tree type, tag_scope scope)
00e8de68 4874{
926ce8bd 4875 struct cp_binding_level *b;
6a000704 4876 tree decl;
00e8de68
GDR
4877
4878 timevar_push (TV_NAME_LOOKUP);
4879 b = current_binding_level;
7c82a41e
MM
4880 while (/* Cleanup scopes are not scopes from the point of view of
4881 the language. */
4882 b->kind == sk_cleanup
4883 /* Neither are the scopes used to hold template parameters
4884 for an explicit specialization. For an ordinary template
4885 declaration, these scopes are not scopes from the point of
5a24482e
KL
4886 view of the language. */
4887 || (b->kind == sk_template_parms
4888 && (b->explicit_spec_p || scope == ts_global))
00e8de68 4889 || (b->kind == sk_class
bd3d082e 4890 && (scope != ts_current
00e8de68
GDR
4891 /* We may be defining a new type in the initializer
4892 of a static member variable. We allow this when
4893 not pedantic, and it is particularly useful for
4894 type punning via an anonymous union. */
4895 || COMPLETE_TYPE_P (b->this_entity))))
4896 b = b->level_chain;
4897
6a000704 4898 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
3db45ab5 4899
6a000704
NS
4900 /* Do C++ gratuitous typedefing. */
4901 if (IDENTIFIER_TYPE_VALUE (name) != type)
00e8de68 4902 {
6a000704
NS
4903 tree tdef;
4904 int in_class = 0;
4905 tree context = TYPE_CONTEXT (type);
00e8de68 4906
6a000704
NS
4907 if (! context)
4908 {
4909 tree cs = current_scope ();
3db45ab5 4910
6a000704
NS
4911 if (scope == ts_current)
4912 context = cs;
4913 else if (cs != NULL_TREE && TYPE_P (cs))
4914 /* When declaring a friend class of a local class, we want
4915 to inject the newly named class into the scope
4916 containing the local class, not the namespace
4917 scope. */
4918 context = decl_function_context (get_type_decl (cs));
4919 }
4920 if (!context)
4921 context = current_namespace;
bd3d082e 4922
6a000704
NS
4923 if (b->kind == sk_class
4924 || (b->kind == sk_template_parms
4925 && b->level_chain->kind == sk_class))
4926 in_class = 1;
00e8de68 4927
6a000704
NS
4928 if (current_lang_name == lang_name_java)
4929 TYPE_FOR_JAVA (type) = 1;
00e8de68 4930
6a000704
NS
4931 tdef = create_implicit_typedef (name, type);
4932 DECL_CONTEXT (tdef) = FROB_CONTEXT (context);
4933 if (scope == ts_within_enclosing_non_class)
00e8de68 4934 {
6a000704
NS
4935 /* This is a friend. Make this TYPE_DECL node hidden from
4936 ordinary name lookup. Its corresponding TEMPLATE_DECL
4937 will be marked in push_template_decl_real. */
4938 retrofit_lang_decl (tdef);
4939 DECL_ANTICIPATED (tdef) = 1;
4940 DECL_FRIEND_P (tdef) = 1;
4941 }
e57df6fe 4942
6a000704
NS
4943 decl = maybe_process_template_type_declaration
4944 (type, scope == ts_within_enclosing_non_class, b);
4945 if (decl == error_mark_node)
4946 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
3db45ab5 4947
6a000704
NS
4948 if (! in_class)
4949 set_identifier_type_value_with_scope (name, tdef, b);
e57df6fe 4950
6a000704
NS
4951 if (b->kind == sk_class)
4952 {
4953 if (!PROCESSING_REAL_TEMPLATE_DECL_P ())
4954 /* Put this TYPE_DECL on the TYPE_FIELDS list for the
4955 class. But if it's a member template class, we want
4956 the TEMPLATE_DECL, not the TYPE_DECL, so this is done
4957 later. */
4958 finish_member_declaration (decl);
4959 else
4960 pushdecl_class_level (decl);
00e8de68 4961 }
6a000704 4962 else if (b->kind != sk_template_parms)
c5f8391c
SE
4963 {
4964 decl = pushdecl_with_scope (decl, b, /*is_friend=*/false);
4965 if (decl == error_mark_node)
4966 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
4967 }
6a000704
NS
4968
4969 TYPE_CONTEXT (type) = DECL_CONTEXT (decl);
4970
4971 /* If this is a local class, keep track of it. We need this
4972 information for name-mangling, and so that it is possible to
4973 find all function definitions in a translation unit in a
4974 convenient way. (It's otherwise tricky to find a member
4975 function definition it's only pointed to from within a local
4976 class.) */
4977 if (TYPE_CONTEXT (type)
4978 && TREE_CODE (TYPE_CONTEXT (type)) == FUNCTION_DECL)
4979 VEC_safe_push (tree, gc, local_classes, type);
00e8de68 4980 }
6a000704
NS
4981 if (b->kind == sk_class
4982 && !COMPLETE_TYPE_P (current_class_type))
00e8de68 4983 {
6a000704
NS
4984 maybe_add_class_template_decl_list (current_class_type,
4985 type, /*friend_p=*/0);
3db45ab5 4986
6a000704
NS
4987 if (CLASSTYPE_NESTED_UTDS (current_class_type) == NULL)
4988 CLASSTYPE_NESTED_UTDS (current_class_type)
4989 = binding_table_new (SCOPE_DEFAULT_HT_SIZE);
3db45ab5 4990
6a000704
NS
4991 binding_table_insert
4992 (CLASSTYPE_NESTED_UTDS (current_class_type), name, type);
00e8de68 4993 }
6a000704
NS
4994
4995 decl = TYPE_NAME (type);
4996 gcc_assert (TREE_CODE (decl) == TYPE_DECL);
4997 TYPE_STUB_DECL (type) = decl;
4998
b9e75696
JM
4999 /* Set type visibility now if this is a forward declaration. */
5000 TREE_PUBLIC (decl) = 1;
5001 determine_visibility (decl);
5002
c6f9f83b 5003 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, type);
00e8de68
GDR
5004}
5005\f
00e8de68
GDR
5006/* Subroutines for reverting temporarily to top-level for instantiation
5007 of templates and such. We actually need to clear out the class- and
5008 local-value slots of all identifiers, so that only the global values
5009 are at all visible. Simply setting current_binding_level to the global
5010 scope isn't enough, because more binding levels may be pushed. */
5011struct saved_scope *scope_chain;
5012
f44b0c8e
MM
5013/* If ID has not already been marked, add an appropriate binding to
5014 *OLD_BINDINGS. */
89b578be 5015
f44b0c8e 5016static void
d4e6fecb 5017store_binding (tree id, VEC(cxx_saved_binding,gc) **old_bindings)
89b578be
MM
5018{
5019 cxx_saved_binding *saved;
89b578be 5020
39fb05d0 5021 if (!id || !IDENTIFIER_BINDING (id))
f44b0c8e 5022 return;
89b578be 5023
f44b0c8e
MM
5024 if (IDENTIFIER_MARKED (id))
5025 return;
c8094d83 5026
f44b0c8e 5027 IDENTIFIER_MARKED (id) = 1;
89b578be 5028
d4e6fecb 5029 saved = VEC_safe_push (cxx_saved_binding, gc, *old_bindings, NULL);
89b578be
MM
5030 saved->identifier = id;
5031 saved->binding = IDENTIFIER_BINDING (id);
89b578be
MM
5032 saved->real_type_value = REAL_IDENTIFIER_TYPE_VALUE (id);
5033 IDENTIFIER_BINDING (id) = NULL;
89b578be
MM
5034}
5035
f44b0c8e 5036static void
d4e6fecb 5037store_bindings (tree names, VEC(cxx_saved_binding,gc) **old_bindings)
00e8de68
GDR
5038{
5039 tree t;
00e8de68
GDR
5040
5041 timevar_push (TV_NAME_LOOKUP);
5042 for (t = names; t; t = TREE_CHAIN (t))
5043 {
5044 tree id;
00e8de68
GDR
5045
5046 if (TREE_CODE (t) == TREE_LIST)
5047 id = TREE_PURPOSE (t);
5048 else
5049 id = DECL_NAME (t);
5050
f44b0c8e 5051 store_binding (id, old_bindings);
00e8de68 5052 }
f44b0c8e 5053 timevar_pop (TV_NAME_LOOKUP);
00e8de68
GDR
5054}
5055
89b578be
MM
5056/* Like store_bindings, but NAMES is a vector of cp_class_binding
5057 objects, rather than a TREE_LIST. */
5058
f44b0c8e 5059static void
c8094d83 5060store_class_bindings (VEC(cp_class_binding,gc) *names,
d4e6fecb 5061 VEC(cxx_saved_binding,gc) **old_bindings)
89b578be
MM
5062{
5063 size_t i;
5064 cp_class_binding *cb;
89b578be
MM
5065
5066 timevar_push (TV_NAME_LOOKUP);
9ba5ff0f 5067 for (i = 0; VEC_iterate(cp_class_binding, names, i, cb); ++i)
f44b0c8e
MM
5068 store_binding (cb->identifier, old_bindings);
5069 timevar_pop (TV_NAME_LOOKUP);
89b578be
MM
5070}
5071
00e8de68 5072void
c353b8e3 5073push_to_top_level (void)
00e8de68
GDR
5074{
5075 struct saved_scope *s;
5076 struct cp_binding_level *b;
f44b0c8e
MM
5077 cxx_saved_binding *sb;
5078 size_t i;
30bcc028 5079 bool need_pop;
00e8de68
GDR
5080
5081 timevar_push (TV_NAME_LOOKUP);
99dd239f 5082 s = GGC_CNEW (struct saved_scope);
00e8de68
GDR
5083
5084 b = scope_chain ? current_binding_level : 0;
5085
5086 /* If we're in the middle of some function, save our state. */
5087 if (cfun)
5088 {
30bcc028 5089 need_pop = true;
00e8de68
GDR
5090 push_function_context_to (NULL_TREE);
5091 }
5092 else
30bcc028 5093 need_pop = false;
00e8de68 5094
89b578be 5095 if (scope_chain && previous_class_level)
f44b0c8e
MM
5096 store_class_bindings (previous_class_level->class_shadowed,
5097 &s->old_bindings);
00e8de68
GDR
5098
5099 /* Have to include the global scope, because class-scope decls
5100 aren't listed anywhere useful. */
5101 for (; b; b = b->level_chain)
5102 {
5103 tree t;
5104
5105 /* Template IDs are inserted into the global level. If they were
5106 inserted into namespace level, finish_file wouldn't find them
5107 when doing pending instantiations. Therefore, don't stop at
5108 namespace level, but continue until :: . */
c353b8e3 5109 if (global_scope_p (b))
00e8de68
GDR
5110 break;
5111
f44b0c8e 5112 store_bindings (b->names, &s->old_bindings);
00e8de68
GDR
5113 /* We also need to check class_shadowed to save class-level type
5114 bindings, since pushclass doesn't fill in b->names. */
5115 if (b->kind == sk_class)
f44b0c8e 5116 store_class_bindings (b->class_shadowed, &s->old_bindings);
00e8de68
GDR
5117
5118 /* Unwind type-value slots back to top level. */
5119 for (t = b->type_shadowed; t; t = TREE_CHAIN (t))
5120 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (t), TREE_VALUE (t));
5121 }
f44b0c8e 5122
9ba5ff0f 5123 for (i = 0; VEC_iterate (cxx_saved_binding, s->old_bindings, i, sb); ++i)
f44b0c8e
MM
5124 IDENTIFIER_MARKED (sb->identifier) = 0;
5125
00e8de68 5126 s->prev = scope_chain;
00e8de68
GDR
5127 s->bindings = b;
5128 s->need_pop_function_context = need_pop;
5129 s->function_decl = current_function_decl;
b794e321 5130 s->skip_evaluation = skip_evaluation;
00e8de68
GDR
5131
5132 scope_chain = s;
5133 current_function_decl = NULL_TREE;
aff44741 5134 current_lang_base = VEC_alloc (tree, gc, 10);
00e8de68
GDR
5135 current_lang_name = lang_name_cplusplus;
5136 current_namespace = global_namespace;
c888c93b 5137 push_class_stack ();
b794e321 5138 skip_evaluation = 0;
00e8de68
GDR
5139 timevar_pop (TV_NAME_LOOKUP);
5140}
5141
00e8de68
GDR
5142void
5143pop_from_top_level (void)
5144{
5145 struct saved_scope *s = scope_chain;
5146 cxx_saved_binding *saved;
f44b0c8e 5147 size_t i;
00e8de68 5148
c8094d83 5149 timevar_push (TV_NAME_LOOKUP);
00e8de68 5150 /* Clear out class-level bindings cache. */
89b578be 5151 if (previous_class_level)
00e8de68 5152 invalidate_class_lookup_cache ();
c888c93b 5153 pop_class_stack ();
00e8de68
GDR
5154
5155 current_lang_base = 0;
5156
5157 scope_chain = s->prev;
9ba5ff0f 5158 for (i = 0; VEC_iterate (cxx_saved_binding, s->old_bindings, i, saved); ++i)
00e8de68
GDR
5159 {
5160 tree id = saved->identifier;
5161
5162 IDENTIFIER_BINDING (id) = saved->binding;
00e8de68
GDR
5163 SET_IDENTIFIER_TYPE_VALUE (id, saved->real_type_value);
5164 }
5165
5166 /* If we were in the middle of compiling a function, restore our
5167 state. */
5168 if (s->need_pop_function_context)
5169 pop_function_context_from (NULL_TREE);
5170 current_function_decl = s->function_decl;
b794e321 5171 skip_evaluation = s->skip_evaluation;
00e8de68
GDR
5172 timevar_pop (TV_NAME_LOOKUP);
5173}
5174
5175/* Pop off extraneous binding levels left over due to syntax errors.
5176
5177 We don't pop past namespaces, as they might be valid. */
5178
5179void
5180pop_everything (void)
5181{
5182 if (ENABLE_SCOPE_CHECKING)
5183 verbatim ("XXX entering pop_everything ()\n");
5184 while (!toplevel_bindings_p ())
5185 {
5186 if (current_binding_level->kind == sk_class)
5187 pop_nested_class ();
5188 else
5189 poplevel (0, 0, 0);
5190 }
5191 if (ENABLE_SCOPE_CHECKING)
5192 verbatim ("XXX leaving pop_everything ()\n");
5193}
5194
6097b0c3 5195/* Emit debugging information for using declarations and directives.
c8094d83 5196 If input tree is overloaded fn then emit debug info for all
6097b0c3
DP
5197 candidates. */
5198
98ed9dae 5199void
6097b0c3
DP
5200cp_emit_debug_info_for_using (tree t, tree context)
5201{
099f36ab
JM
5202 /* Don't try to emit any debug information if we have errors. */
5203 if (sorrycount || errorcount)
5204 return;
5205
c8094d83 5206 /* Ignore this FUNCTION_DECL if it refers to a builtin declaration
6097b0c3 5207 of a builtin function. */
c8094d83 5208 if (TREE_CODE (t) == FUNCTION_DECL
6097b0c3
DP
5209 && DECL_EXTERNAL (t)
5210 && DECL_BUILT_IN (t))
5211 return;
5212
5213 /* Do not supply context to imported_module_or_decl, if
5214 it is a global namespace. */
5215 if (context == global_namespace)
5216 context = NULL_TREE;
c8094d83 5217
6097b0c3
DP
5218 if (BASELINK_P (t))
5219 t = BASELINK_FUNCTIONS (t);
c8094d83 5220
6097b0c3
DP
5221 /* FIXME: Handle TEMPLATE_DECLs. */
5222 for (t = OVL_CURRENT (t); t; t = OVL_NEXT (t))
5223 if (TREE_CODE (t) != TEMPLATE_DECL)
5224 (*debug_hooks->imported_module_or_decl) (t, context);
98ed9dae 5225}
6097b0c3 5226
28ea4c88 5227#include "gt-cp-name-lookup.h"