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