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