]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/cp/name-lookup.c
pointer.cc: Fix which tests are run.
[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,
808 true))
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
3701/* This should return an error not all definitions define functions.
3702 It is not an error if we find two functions with exactly the
3703 same signature, only if these are selected in overload resolution.
be93747e 3704 old is the current set of bindings, new_binding the freshly-found binding.
5a167978
GDR
3705 XXX Do we want to give *all* candidates in case of ambiguity?
3706 XXX In what way should I treat extern declarations?
3707 XXX I don't want to repeat the entire duplicate_decls here */
3708
15f8ac7f 3709static void
be93747e 3710ambiguous_decl (struct scope_binding *old, cxx_binding *new_binding, int flags)
5a167978
GDR
3711{
3712 tree val, type;
50bc768d 3713 gcc_assert (old != NULL);
af92ab36
OW
3714
3715 /* Copy the type. */
be93747e 3716 type = new_binding->type;
af92ab36
OW
3717 if (LOOKUP_NAMESPACES_ONLY (flags)
3718 || (type && hidden_name_p (type) && !(flags & LOOKUP_HIDDEN)))
3719 type = NULL_TREE;
3720
5a167978 3721 /* Copy the value. */
be93747e 3722 val = new_binding->value;
5a167978 3723 if (val)
af92ab36
OW
3724 {
3725 if (hidden_name_p (val) && !(flags & LOOKUP_HIDDEN))
3726 val = NULL_TREE;
3727 else
3728 switch (TREE_CODE (val))
3729 {
3730 case TEMPLATE_DECL:
3731 /* If we expect types or namespaces, and not templates,
3732 or this is not a template class. */
3733 if ((LOOKUP_QUALIFIERS_ONLY (flags)
3734 && !DECL_CLASS_TEMPLATE_P (val)))
3735 val = NULL_TREE;
3736 break;
3737 case TYPE_DECL:
3738 if (LOOKUP_NAMESPACES_ONLY (flags)
3739 || (type && (flags & LOOKUP_PREFER_TYPES)))
3740 val = NULL_TREE;
3741 break;
3742 case NAMESPACE_DECL:
3743 if (LOOKUP_TYPES_ONLY (flags))
3744 val = NULL_TREE;
3745 break;
3746 case FUNCTION_DECL:
3747 /* Ignore built-in functions that are still anticipated. */
3748 if (LOOKUP_QUALIFIERS_ONLY (flags))
3749 val = NULL_TREE;
3750 break;
3751 default:
3752 if (LOOKUP_QUALIFIERS_ONLY (flags))
3753 val = NULL_TREE;
3754 }
3755 }
3756
3757 /* If val is hidden, shift down any class or enumeration name. */
3758 if (!val)
3759 {
3760 val = type;
3761 type = NULL_TREE;
3762 }
c8094d83 3763
5a167978
GDR
3764 if (!old->value)
3765 old->value = val;
3766 else if (val && val != old->value)
3767 {
3768 if (is_overloaded_fn (old->value) && is_overloaded_fn (val))
0cbd7506 3769 old->value = merge_functions (old->value, val);
5a167978
GDR
3770 else
3771 {
91b1ca65 3772 old->value = tree_cons (NULL_TREE, old->value,
af92ab36 3773 build_tree_list (NULL_TREE, val));
91b1ca65 3774 TREE_TYPE (old->value) = error_mark_node;
5a167978
GDR
3775 }
3776 }
af92ab36 3777
5a167978
GDR
3778 if (!old->type)
3779 old->type = type;
3780 else if (type && old->type != type)
3781 {
19831e2b
OW
3782 old->type = tree_cons (NULL_TREE, old->type,
3783 build_tree_list (NULL_TREE, type));
3784 TREE_TYPE (old->type) = error_mark_node;
5a167978 3785 }
5a167978
GDR
3786}
3787
00e8de68
GDR
3788/* Return the declarations that are members of the namespace NS. */
3789
3790tree
3791cp_namespace_decls (tree ns)
3792{
3793 return NAMESPACE_LEVEL (ns)->names;
3794}
3795
3796/* Combine prefer_type and namespaces_only into flags. */
3797
3798static int
3799lookup_flags (int prefer_type, int namespaces_only)
3800{
3801 if (namespaces_only)
3802 return LOOKUP_PREFER_NAMESPACES;
3803 if (prefer_type > 1)
3804 return LOOKUP_PREFER_TYPES;
3805 if (prefer_type > 0)
3806 return LOOKUP_PREFER_BOTH;
3807 return 0;
3808}
3809
3810/* Given a lookup that returned VAL, use FLAGS to decide if we want to
bd3d082e
KL
3811 ignore it or not. Subroutine of lookup_name_real and
3812 lookup_type_scope. */
00e8de68 3813
bd3d082e 3814static bool
00e8de68
GDR
3815qualify_lookup (tree val, int flags)
3816{
3817 if (val == NULL_TREE)
bd3d082e 3818 return false;
00e8de68 3819 if ((flags & LOOKUP_PREFER_NAMESPACES) && TREE_CODE (val) == NAMESPACE_DECL)
bd3d082e 3820 return true;
00e8de68
GDR
3821 if ((flags & LOOKUP_PREFER_TYPES)
3822 && (TREE_CODE (val) == TYPE_DECL || TREE_CODE (val) == TEMPLATE_DECL))
bd3d082e 3823 return true;
00e8de68 3824 if (flags & (LOOKUP_PREFER_NAMESPACES | LOOKUP_PREFER_TYPES))
bd3d082e 3825 return false;
37a7519a 3826 /* In unevaluated context, look past normal capture fields. */
d5f4eddd 3827 if (cp_unevaluated_operand && TREE_CODE (val) == FIELD_DECL
37a7519a 3828 && DECL_NORMAL_CAPTURE_P (val))
d5f4eddd 3829 return false;
a6846853
JM
3830 /* None of the lookups that use qualify_lookup want the op() from the
3831 lambda; they want the one from the enclosing class. */
3832 if (TREE_CODE (val) == FUNCTION_DECL && LAMBDA_FUNCTION_P (val))
3833 return false;
bd3d082e
KL
3834 return true;
3835}
3836
c8094d83 3837/* Given a lookup that returned VAL, decide if we want to ignore it or
d63d5d0c 3838 not based on DECL_ANTICIPATED. */
bd3d082e
KL
3839
3840bool
3841hidden_name_p (tree val)
3842{
3843 if (DECL_P (val)
3844 && DECL_LANG_SPECIFIC (val)
3845 && DECL_ANTICIPATED (val))
3846 return true;
3847 return false;
00e8de68
GDR
3848}
3849
d63d5d0c
ILT
3850/* Remove any hidden friend functions from a possibly overloaded set
3851 of functions. */
3852
3853tree
3854remove_hidden_names (tree fns)
3855{
3856 if (!fns)
3857 return fns;
3858
3859 if (TREE_CODE (fns) == FUNCTION_DECL && hidden_name_p (fns))
3860 fns = NULL_TREE;
3861 else if (TREE_CODE (fns) == OVERLOAD)
3862 {
3863 tree o;
3864
3865 for (o = fns; o; o = OVL_NEXT (o))
3866 if (hidden_name_p (OVL_CURRENT (o)))
3867 break;
3868 if (o)
3869 {
3870 tree n = NULL_TREE;
3871
3872 for (o = fns; o; o = OVL_NEXT (o))
3873 if (!hidden_name_p (OVL_CURRENT (o)))
3874 n = build_overload (OVL_CURRENT (o), n);
3875 fns = n;
3876 }
3877 }
3878
3879 return fns;
3880}
3881
00e8de68 3882/* Unscoped lookup of a global: iterate over current namespaces,
543ebd4a 3883 considering using-directives. */
00e8de68 3884
a5e6b29b 3885static tree
543ebd4a 3886unqualified_namespace_lookup (tree name, int flags)
00e8de68
GDR
3887{
3888 tree initial = current_decl_namespace ();
3889 tree scope = initial;
3890 tree siter;
3891 struct cp_binding_level *level;
3892 tree val = NULL_TREE;
00e8de68
GDR
3893
3894 timevar_push (TV_NAME_LOOKUP);
00e8de68
GDR
3895
3896 for (; !val; scope = CP_DECL_CONTEXT (scope))
3897 {
af92ab36 3898 struct scope_binding binding = EMPTY_SCOPE_BINDING;
00e8de68 3899 cxx_binding *b =
0cbd7506 3900 cxx_scope_find_binding_for_name (NAMESPACE_LEVEL (scope), name);
00e8de68 3901
ba18e4db 3902 if (b)
19831e2b 3903 ambiguous_decl (&binding, b, flags);
00e8de68
GDR
3904
3905 /* Add all _DECLs seen through local using-directives. */
3906 for (level = current_binding_level;
3907 level->kind != sk_namespace;
3908 level = level->level_chain)
3909 if (!lookup_using_namespace (name, &binding, level->using_directives,
0cbd7506 3910 scope, flags))
00e8de68
GDR
3911 /* Give up because of error. */
3912 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
3913
3914 /* Add all _DECLs seen through global using-directives. */
3915 /* XXX local and global using lists should work equally. */
3916 siter = initial;
3917 while (1)
3918 {
3919 if (!lookup_using_namespace (name, &binding,
0cbd7506 3920 DECL_NAMESPACE_USING (siter),
543ebd4a 3921 scope, flags))
00e8de68
GDR
3922 /* Give up because of error. */
3923 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
3924 if (siter == scope) break;
3925 siter = CP_DECL_CONTEXT (siter);
3926 }
3927
af92ab36 3928 val = binding.value;
00e8de68
GDR
3929 if (scope == global_namespace)
3930 break;
3931 }
3932 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, val);
3933}
3934
3935/* Look up NAME (an IDENTIFIER_NODE) in SCOPE (either a NAMESPACE_DECL
3936 or a class TYPE). If IS_TYPE_P is TRUE, then ignore non-type
c8094d83 3937 bindings.
00e8de68
GDR
3938
3939 Returns a DECL (or OVERLOAD, or BASELINK) representing the
3940 declaration found. If no suitable declaration can be found,
8f78f01f 3941 ERROR_MARK_NODE is returned. If COMPLAIN is true and SCOPE is
00e8de68
GDR
3942 neither a class-type nor a namespace a diagnostic is issued. */
3943
3944tree
3945lookup_qualified_name (tree scope, tree name, bool is_type_p, bool complain)
3946{
3947 int flags = 0;
ff8fe3e0 3948 tree t = NULL_TREE;
00e8de68
GDR
3949
3950 if (TREE_CODE (scope) == NAMESPACE_DECL)
3951 {
15f8ac7f 3952 struct scope_binding binding = EMPTY_SCOPE_BINDING;
00e8de68 3953
00e8de68
GDR
3954 flags |= LOOKUP_COMPLAIN;
3955 if (is_type_p)
3956 flags |= LOOKUP_PREFER_TYPES;
543ebd4a 3957 if (qualified_lookup_using_namespace (name, scope, &binding, flags))
af92ab36 3958 t = binding.value;
00e8de68 3959 }
adf2edec
DG
3960 else if (cxx_dialect != cxx98 && TREE_CODE (scope) == ENUMERAL_TYPE)
3961 t = lookup_enumerator (scope, name);
9e1e64ec 3962 else if (is_class_type (scope, complain))
ff8fe3e0 3963 t = lookup_member (scope, name, 2, is_type_p);
00e8de68 3964
ff8fe3e0
VR
3965 if (!t)
3966 return error_mark_node;
3967 return t;
00e8de68
GDR
3968}
3969
cd0be382 3970/* Subroutine of unqualified_namespace_lookup:
5a167978
GDR
3971 Add the bindings of NAME in used namespaces to VAL.
3972 We are currently looking for names in namespace SCOPE, so we
3973 look through USINGS for using-directives of namespaces
3974 which have SCOPE as a common ancestor with the current scope.
3975 Returns false on errors. */
3976
a5e6b29b 3977static bool
15f8ac7f
GK
3978lookup_using_namespace (tree name, struct scope_binding *val,
3979 tree usings, tree scope, int flags)
5a167978
GDR
3980{
3981 tree iter;
3982 timevar_push (TV_NAME_LOOKUP);
3983 /* Iterate over all used namespaces in current, searching for using
3984 directives of scope. */
3985 for (iter = usings; iter; iter = TREE_CHAIN (iter))
3986 if (TREE_VALUE (iter) == scope)
3987 {
0cbd7506
MS
3988 tree used = ORIGINAL_NAMESPACE (TREE_PURPOSE (iter));
3989 cxx_binding *val1 =
3990 cxx_scope_find_binding_for_name (NAMESPACE_LEVEL (used), name);
3991 /* Resolve ambiguities. */
3992 if (val1)
19831e2b 3993 ambiguous_decl (val, val1, flags);
5a167978
GDR
3994 }
3995 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, val->value != error_mark_node);
3996}
3997
160594b0
JM
3998/* Returns true iff VEC contains TARGET. */
3999
4000static bool
4001tree_vec_contains (VEC(tree,gc)* vec, tree target)
4002{
4003 unsigned int i;
4004 tree elt;
4005 for (i = 0; VEC_iterate(tree,vec,i,elt); ++i)
4006 if (elt == target)
4007 return true;
4008 return false;
4009}
4010
5a167978
GDR
4011/* [namespace.qual]
4012 Accepts the NAME to lookup and its qualifying SCOPE.
4013 Returns the name/type pair found into the cxx_binding *RESULT,
4014 or false on error. */
4015
a5e6b29b 4016static bool
15f8ac7f
GK
4017qualified_lookup_using_namespace (tree name, tree scope,
4018 struct scope_binding *result, int flags)
5a167978
GDR
4019{
4020 /* Maintain a list of namespaces visited... */
160594b0
JM
4021 VEC(tree,gc) *seen = NULL;
4022 VEC(tree,gc) *seen_inline = NULL;
5a167978 4023 /* ... and a list of namespace yet to see. */
160594b0
JM
4024 VEC(tree,gc) *todo = NULL;
4025 VEC(tree,gc) *todo_maybe = NULL;
4026 VEC(tree,gc) *todo_inline = NULL;
5a167978
GDR
4027 tree usings;
4028 timevar_push (TV_NAME_LOOKUP);
4029 /* Look through namespace aliases. */
4030 scope = ORIGINAL_NAMESPACE (scope);
160594b0
JM
4031
4032 /* Algorithm: Starting with SCOPE, walk through the the set of used
4033 namespaces. For each used namespace, look through its inline
4034 namespace set for any bindings and usings. If no bindings are found,
4035 add any usings seen to the set of used namespaces. */
4036 VEC_safe_push (tree, gc, todo, scope);
4037
4038 while (VEC_length (tree, todo))
5a167978 4039 {
160594b0
JM
4040 bool found_here;
4041 scope = VEC_pop (tree, todo);
4042 if (tree_vec_contains (seen, scope))
4043 continue;
4044 VEC_safe_push (tree, gc, seen, scope);
4045 VEC_safe_push (tree, gc, todo_inline, scope);
4046
4047 found_here = false;
4048 while (VEC_length (tree, todo_inline))
dc55c941 4049 {
160594b0
JM
4050 cxx_binding *binding;
4051
4052 scope = VEC_pop (tree, todo_inline);
4053 if (tree_vec_contains (seen_inline, scope))
4054 continue;
4055 VEC_safe_push (tree, gc, seen_inline, scope);
4056
4057 binding =
4058 cxx_scope_find_binding_for_name (NAMESPACE_LEVEL (scope), name);
4059 if (binding)
4060 {
4061 found_here = true;
4062 ambiguous_decl (result, binding, flags);
4063 }
4064
4065 for (usings = DECL_NAMESPACE_USING (scope); usings;
4066 usings = TREE_CHAIN (usings))
4067 if (!TREE_INDIRECT_USING (usings))
4068 {
4069 if (is_associated_namespace (scope, TREE_PURPOSE (usings)))
4070 VEC_safe_push (tree, gc, todo_inline, TREE_PURPOSE (usings));
4071 else
4072 VEC_safe_push (tree, gc, todo_maybe, TREE_PURPOSE (usings));
4073 }
dc55c941 4074 }
160594b0
JM
4075
4076 if (found_here)
4077 VEC_truncate (tree, todo_maybe, 0);
5a167978 4078 else
160594b0
JM
4079 while (VEC_length (tree, todo_maybe))
4080 VEC_safe_push (tree, gc, todo, VEC_pop (tree, todo_maybe));
4081 }
4082 VEC_free (tree,gc,todo);
4083 VEC_free (tree,gc,todo_maybe);
4084 VEC_free (tree,gc,todo_inline);
4085 VEC_free (tree,gc,seen);
4086 VEC_free (tree,gc,seen_inline);
5a167978
GDR
4087 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, result->value != error_mark_node);
4088}
4089
172a4594
DS
4090/* Subroutine of outer_binding.
4091 Returns TRUE if BINDING is a binding to a template parameter of SCOPE,
4092 FALSE otherwise. */
4093
4094static bool
4095binding_to_template_parms_of_scope_p (cxx_binding *binding,
4096 cxx_scope *scope)
4097{
4098 tree binding_value;
4099
4100 if (!binding || !scope)
4101 return false;
4102
4103 binding_value = binding->value ? binding->value : binding->type;
4104
4105 return (scope
4106 && scope->this_entity
4107 && get_template_info (scope->this_entity)
4108 && parameter_of_template_p (binding_value,
4109 TI_TEMPLATE (get_template_info \
4110 (scope->this_entity))));
4111}
4112
90ea9897 4113/* Return the innermost non-namespace binding for NAME from a scope
172a4594
DS
4114 containing BINDING, or, if BINDING is NULL, the current scope.
4115 Please note that for a given template, the template parameters are
4116 considered to be in the scope containing the current scope.
4117 If CLASS_P is false, then class bindings are ignored. */
90ea9897
MM
4118
4119cxx_binding *
c8094d83 4120outer_binding (tree name,
90ea9897
MM
4121 cxx_binding *binding,
4122 bool class_p)
4123{
4124 cxx_binding *outer;
4125 cxx_scope *scope;
4126 cxx_scope *outer_scope;
4127
4128 if (binding)
4129 {
4130 scope = binding->scope->level_chain;
4131 outer = binding->previous;
4132 }
4133 else
4134 {
4135 scope = current_binding_level;
4136 outer = IDENTIFIER_BINDING (name);
4137 }
4138 outer_scope = outer ? outer->scope : NULL;
4139
4140 /* Because we create class bindings lazily, we might be missing a
4141 class binding for NAME. If there are any class binding levels
4142 between the LAST_BINDING_LEVEL and the scope in which OUTER was
4143 declared, we must lookup NAME in those class scopes. */
4144 if (class_p)
4145 while (scope && scope != outer_scope && scope->kind != sk_namespace)
4146 {
c8094d83 4147 if (scope->kind == sk_class)
90ea9897
MM
4148 {
4149 cxx_binding *class_binding;
c8094d83 4150
90ea9897
MM
4151 class_binding = get_class_binding (name, scope);
4152 if (class_binding)
4153 {
4154 /* Thread this new class-scope binding onto the
4155 IDENTIFIER_BINDING list so that future lookups
4156 find it quickly. */
4157 class_binding->previous = outer;
4158 if (binding)
4159 binding->previous = class_binding;
4160 else
4161 IDENTIFIER_BINDING (name) = class_binding;
4162 return class_binding;
4163 }
4164 }
8e39b368
JM
4165 /* If we are in a member template, the template parms of the member
4166 template are considered to be inside the scope of the containing
4167 class, but within G++ the class bindings are all pushed between the
4168 template parms and the function body. So if the outer binding is
4169 a template parm for the current scope, return it now rather than
4170 look for a class binding. */
172a4594
DS
4171 if (outer_scope && outer_scope->kind == sk_template_parms
4172 && binding_to_template_parms_of_scope_p (outer, scope))
4173 return outer;
4174
90ea9897
MM
4175 scope = scope->level_chain;
4176 }
4177
4178 return outer;
4179}
4180
4181/* Return the innermost block-scope or class-scope value binding for
4182 NAME, or NULL_TREE if there is no such binding. */
4183
4184tree
4185innermost_non_namespace_value (tree name)
4186{
4187 cxx_binding *binding;
4188 binding = outer_binding (name, /*binding=*/NULL, /*class_p=*/true);
4189 return binding ? binding->value : NULL_TREE;
4190}
4191
00e8de68
GDR
4192/* Look up NAME in the current binding level and its superiors in the
4193 namespace of variables, functions and typedefs. Return a ..._DECL
4194 node of some kind representing its definition if there is only one
4195 such declaration, or return a TREE_LIST with all the overloaded
4196 definitions if there are many, or return 0 if it is undefined.
bd3d082e
KL
4197 Hidden name, either friend declaration or built-in function, are
4198 not ignored.
00e8de68
GDR
4199
4200 If PREFER_TYPE is > 0, we prefer TYPE_DECLs or namespaces.
4201 If PREFER_TYPE is > 1, we reject non-type decls (e.g. namespaces).
4202 Otherwise we prefer non-TYPE_DECLs.
4203
39fb05d0
MM
4204 If NONCLASS is nonzero, bindings in class scopes are ignored. If
4205 BLOCK_P is false, bindings in block scopes are ignored. */
00e8de68
GDR
4206
4207tree
12cf89fa 4208lookup_name_real (tree name, int prefer_type, int nonclass, bool block_p,
00e8de68
GDR
4209 int namespaces_only, int flags)
4210{
4211 cxx_binding *iter;
4212 tree val = NULL_TREE;
4213
4214 timevar_push (TV_NAME_LOOKUP);
4215 /* Conversion operators are handled specially because ordinary
4216 unqualified name lookup will not find template conversion
4217 operators. */
c8094d83 4218 if (IDENTIFIER_TYPENAME_P (name))
00e8de68
GDR
4219 {
4220 struct cp_binding_level *level;
4221
c8094d83 4222 for (level = current_binding_level;
00e8de68
GDR
4223 level && level->kind != sk_namespace;
4224 level = level->level_chain)
4225 {
4226 tree class_type;
4227 tree operators;
c8094d83
MS
4228
4229 /* A conversion operator can only be declared in a class
00e8de68
GDR
4230 scope. */
4231 if (level->kind != sk_class)
4232 continue;
c8094d83 4233
00e8de68
GDR
4234 /* Lookup the conversion operator in the class. */
4235 class_type = level->this_entity;
4236 operators = lookup_fnfields (class_type, name, /*protect=*/0);
4237 if (operators)
4238 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, operators);
4239 }
4240
4241 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
4242 }
4243
4244 flags |= lookup_flags (prefer_type, namespaces_only);
4245
4246 /* First, look in non-namespace scopes. */
4247
4248 if (current_class_type == NULL_TREE)
4249 nonclass = 1;
4250
12cf89fa 4251 if (block_p || !nonclass)
90ea9897
MM
4252 for (iter = outer_binding (name, NULL, !nonclass);
4253 iter;
4254 iter = outer_binding (name, iter, !nonclass))
12cf89fa
MM
4255 {
4256 tree binding;
c8094d83 4257
12cf89fa
MM
4258 /* Skip entities we don't want. */
4259 if (LOCAL_BINDING_P (iter) ? !block_p : nonclass)
4260 continue;
c8094d83 4261
12cf89fa 4262 /* If this is the kind of thing we're looking for, we're done. */
105d72c5 4263 if (qualify_lookup (iter->value, flags))
12cf89fa
MM
4264 binding = iter->value;
4265 else if ((flags & LOOKUP_PREFER_TYPES)
105d72c5 4266 && qualify_lookup (iter->type, flags))
12cf89fa
MM
4267 binding = iter->type;
4268 else
4269 binding = NULL_TREE;
c8094d83 4270
12cf89fa
MM
4271 if (binding)
4272 {
d4d8c232
SM
4273 if (hidden_name_p (binding))
4274 {
b9f673eb
JM
4275 /* A non namespace-scope binding can only be hidden in the
4276 presence of a local class, due to friend declarations.
4277
d4d8c232
SM
4278 In particular, consider:
4279
b9f673eb 4280 struct C;
d4d8c232
SM
4281 void f() {
4282 struct A {
4283 friend struct B;
b9f673eb
JM
4284 friend struct C;
4285 void g() {
4286 B* b; // error: B is hidden
4287 C* c; // OK, finds ::C
4288 }
4289 };
4290 B *b; // error: B is hidden
4291 C *c; // OK, finds ::C
d4d8c232 4292 struct B {};
b9f673eb 4293 B *bb; // OK
d4d8c232
SM
4294 }
4295
4296 The standard says that "B" is a local class in "f"
4297 (but not nested within "A") -- but that name lookup
4298 for "B" does not find this declaration until it is
4299 declared directly with "f".
4300
4301 In particular:
4302
4303 [class.friend]
4304
4305 If a friend declaration appears in a local class and
4306 the name specified is an unqualified name, a prior
4307 declaration is looked up without considering scopes
4308 that are outside the innermost enclosing non-class
b9f673eb
JM
4309 scope. For a friend function declaration, if there is
4310 no prior declaration, the program is ill-formed. For a
4311 friend class declaration, if there is no prior
4312 declaration, the class that is specified belongs to the
4313 innermost enclosing non-class scope, but if it is
4314 subsequently referenced, its name is not found by name
4315 lookup until a matching declaration is provided in the
4316 innermost enclosing nonclass scope.
4317
4318 So just keep looking for a non-hidden binding.
d4d8c232 4319 */
b9f673eb
JM
4320 gcc_assert (TREE_CODE (binding) == TYPE_DECL);
4321 continue;
d4d8c232 4322 }
12cf89fa
MM
4323 val = binding;
4324 break;
4325 }
4326 }
00e8de68
GDR
4327
4328 /* Now lookup in namespace scopes. */
4329 if (!val)
29ef83de 4330 val = unqualified_namespace_lookup (name, flags);
00e8de68 4331
0c8ce11b
VR
4332 /* If we have a single function from a using decl, pull it out. */
4333 if (val && TREE_CODE (val) == OVERLOAD && !really_overloaded_fn (val))
4334 val = OVL_FUNCTION (val);
00e8de68
GDR
4335
4336 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, val);
4337}
4338
4339tree
4340lookup_name_nonclass (tree name)
4341{
12cf89fa 4342 return lookup_name_real (name, 0, 1, /*block_p=*/true, 0, LOOKUP_COMPLAIN);
00e8de68
GDR
4343}
4344
4345tree
c166b898 4346lookup_function_nonclass (tree name, VEC(tree,gc) *args, bool block_p)
00e8de68 4347{
c8094d83
MS
4348 return
4349 lookup_arg_dependent (name,
4350 lookup_name_real (name, 0, 1, block_p, 0,
12cf89fa
MM
4351 LOOKUP_COMPLAIN),
4352 args);
00e8de68
GDR
4353}
4354
4355tree
10e6657a 4356lookup_name (tree name)
00e8de68 4357{
10e6657a 4358 return lookup_name_real (name, 0, 0, /*block_p=*/true, 0, LOOKUP_COMPLAIN);
00e8de68
GDR
4359}
4360
98803730 4361tree
10e6657a 4362lookup_name_prefer_type (tree name, int prefer_type)
98803730 4363{
10e6657a
RH
4364 return lookup_name_real (name, prefer_type, 0, /*block_p=*/true,
4365 0, LOOKUP_COMPLAIN);
98803730
MS
4366}
4367
461c6fce 4368/* Look up NAME for type used in elaborated name specifier in
29ef83de 4369 the scopes given by SCOPE. SCOPE can be either TS_CURRENT or
87c465f5
KL
4370 TS_WITHIN_ENCLOSING_NON_CLASS. Although not implied by the
4371 name, more scopes are checked if cleanup or template parameter
4372 scope is encountered.
29ef83de
KL
4373
4374 Unlike lookup_name_real, we make sure that NAME is actually
87c465f5
KL
4375 declared in the desired scope, not from inheritance, nor using
4376 directive. For using declaration, there is DR138 still waiting
13a44ee0 4377 to be resolved. Hidden name coming from an earlier friend
bd3d082e 4378 declaration is also returned.
87c465f5
KL
4379
4380 A TYPE_DECL best matching the NAME is returned. Catching error
4381 and issuing diagnostics are caller's responsibility. */
461c6fce
KL
4382
4383tree
29ef83de 4384lookup_type_scope (tree name, tag_scope scope)
461c6fce
KL
4385{
4386 cxx_binding *iter = NULL;
4387 tree val = NULL_TREE;
4388
4389 timevar_push (TV_NAME_LOOKUP);
4390
4391 /* Look in non-namespace scope first. */
4392 if (current_binding_level->kind != sk_namespace)
4393 iter = outer_binding (name, NULL, /*class_p=*/ true);
4394 for (; iter; iter = outer_binding (name, iter, /*class_p=*/ true))
4395 {
4396 /* Check if this is the kind of thing we're looking for.
c8094d83 4397 If SCOPE is TS_CURRENT, also make sure it doesn't come from
29ef83de 4398 base class. For ITER->VALUE, we can simply use
c8094d83 4399 INHERITED_VALUE_BINDING_P. For ITER->TYPE, we have to use
29ef83de 4400 our own check.
461c6fce
KL
4401
4402 We check ITER->TYPE before ITER->VALUE in order to handle
4403 typedef struct C {} C;
4404 correctly. */
4405
4406 if (qualify_lookup (iter->type, LOOKUP_PREFER_TYPES)
29ef83de
KL
4407 && (scope != ts_current
4408 || LOCAL_BINDING_P (iter)
461c6fce
KL
4409 || DECL_CONTEXT (iter->type) == iter->scope->this_entity))
4410 val = iter->type;
29ef83de
KL
4411 else if ((scope != ts_current
4412 || !INHERITED_VALUE_BINDING_P (iter))
461c6fce
KL
4413 && qualify_lookup (iter->value, LOOKUP_PREFER_TYPES))
4414 val = iter->value;
4415
4416 if (val)
4417 break;
4418 }
4419
4420 /* Look in namespace scope. */
4421 if (!val)
4422 {
4423 iter = cxx_scope_find_binding_for_name
4424 (NAMESPACE_LEVEL (current_decl_namespace ()), name);
4425
4426 if (iter)
4427 {
bd3d082e 4428 /* If this is the kind of thing we're looking for, we're done. */
87c465f5 4429 if (qualify_lookup (iter->type, LOOKUP_PREFER_TYPES))
461c6fce 4430 val = iter->type;
87c465f5 4431 else if (qualify_lookup (iter->value, LOOKUP_PREFER_TYPES))
461c6fce
KL
4432 val = iter->value;
4433 }
c8094d83 4434
461c6fce
KL
4435 }
4436
29ef83de 4437 /* Type found, check if it is in the allowed scopes, ignoring cleanup
461c6fce
KL
4438 and template parameter scopes. */
4439 if (val)
4440 {
4441 struct cp_binding_level *b = current_binding_level;
4442 while (b)
4443 {
4444 if (iter->scope == b)
4445 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, val);
4446
118dde55
JM
4447 if (b->kind == sk_cleanup || b->kind == sk_template_parms
4448 || b->kind == sk_function_parms)
461c6fce 4449 b = b->level_chain;
29ef83de
KL
4450 else if (b->kind == sk_class
4451 && scope == ts_within_enclosing_non_class)
4452 b = b->level_chain;
461c6fce
KL
4453 else
4454 break;
4455 }
4456 }
4457
4458 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
4459}
4460
00e8de68
GDR
4461/* Similar to `lookup_name' but look only in the innermost non-class
4462 binding level. */
4463
7655e009 4464tree
461c6fce 4465lookup_name_innermost_nonclass_level (tree name)
00e8de68
GDR
4466{
4467 struct cp_binding_level *b;
4468 tree t = NULL_TREE;
4469
4470 timevar_push (TV_NAME_LOOKUP);
4471 b = innermost_nonclass_level ();
4472
4473 if (b->kind == sk_namespace)
4474 {
4475 t = IDENTIFIER_NAMESPACE_VALUE (name);
4476
4477 /* extern "C" function() */
4478 if (t != NULL_TREE && TREE_CODE (t) == TREE_LIST)
4479 t = TREE_VALUE (t);
4480 }
4481 else if (IDENTIFIER_BINDING (name)
4482 && LOCAL_BINDING_P (IDENTIFIER_BINDING (name)))
4483 {
90ea9897
MM
4484 cxx_binding *binding;
4485 binding = IDENTIFIER_BINDING (name);
00e8de68
GDR
4486 while (1)
4487 {
90ea9897
MM
4488 if (binding->scope == b
4489 && !(TREE_CODE (binding->value) == VAR_DECL
4490 && DECL_DEAD_FOR_LOCAL (binding->value)))
4491 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, binding->value);
00e8de68
GDR
4492
4493 if (b->kind == sk_cleanup)
4494 b = b->level_chain;
4495 else
4496 break;
4497 }
4498 }
4499
4500 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
4501}
4502
e8f43da6
JM
4503/* Returns true iff DECL is a block-scope extern declaration of a function
4504 or variable. */
4505
4506bool
4507is_local_extern (tree decl)
4508{
4509 cxx_binding *binding;
4510
4511 /* For functions, this is easy. */
4512 if (TREE_CODE (decl) == FUNCTION_DECL)
4513 return DECL_LOCAL_FUNCTION_P (decl);
4514
4515 if (TREE_CODE (decl) != VAR_DECL)
4516 return false;
4517 if (!current_function_decl)
4518 return false;
4519
4520 /* For variables, this is not easy. We need to look at the binding stack
4521 for the identifier to see whether the decl we have is a local. */
4522 for (binding = IDENTIFIER_BINDING (DECL_NAME (decl));
4523 binding && binding->scope->kind != sk_namespace;
4524 binding = binding->previous)
4525 if (binding->value == decl)
4526 return LOCAL_BINDING_P (binding);
4527
4528 return false;
4529}
4530
461c6fce 4531/* Like lookup_name_innermost_nonclass_level, but for types. */
00e8de68 4532
a5e6b29b 4533static tree
00e8de68
GDR
4534lookup_type_current_level (tree name)
4535{
926ce8bd 4536 tree t = NULL_TREE;
00e8de68
GDR
4537
4538 timevar_push (TV_NAME_LOOKUP);
50bc768d 4539 gcc_assert (current_binding_level->kind != sk_namespace);
00e8de68
GDR
4540
4541 if (REAL_IDENTIFIER_TYPE_VALUE (name) != NULL_TREE
4542 && REAL_IDENTIFIER_TYPE_VALUE (name) != global_type_node)
4543 {
4544 struct cp_binding_level *b = current_binding_level;
4545 while (1)
4546 {
4547 if (purpose_member (name, b->type_shadowed))
4548 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP,
0cbd7506 4549 REAL_IDENTIFIER_TYPE_VALUE (name));
00e8de68
GDR
4550 if (b->kind == sk_cleanup)
4551 b = b->level_chain;
4552 else
4553 break;
4554 }
4555 }
4556
4557 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
4558}
4559
5a167978
GDR
4560/* [basic.lookup.koenig] */
4561/* A nonzero return value in the functions below indicates an error. */
4562
4563struct arg_lookup
4564{
4565 tree name;
c166b898 4566 VEC(tree,gc) *args;
5a167978
GDR
4567 tree namespaces;
4568 tree classes;
4569 tree functions;
4570};
4571
4572static bool arg_assoc (struct arg_lookup*, tree);
4573static bool arg_assoc_args (struct arg_lookup*, tree);
c166b898 4574static bool arg_assoc_args_vec (struct arg_lookup*, VEC(tree,gc) *);
5a167978
GDR
4575static bool arg_assoc_type (struct arg_lookup*, tree);
4576static bool add_function (struct arg_lookup *, tree);
4577static bool arg_assoc_namespace (struct arg_lookup *, tree);
db10df3d
JM
4578static bool arg_assoc_class_only (struct arg_lookup *, tree);
4579static bool arg_assoc_bases (struct arg_lookup *, tree);
5a167978
GDR
4580static bool arg_assoc_class (struct arg_lookup *, tree);
4581static bool arg_assoc_template_arg (struct arg_lookup*, tree);
4582
4583/* Add a function to the lookup structure.
4584 Returns true on error. */
4585
4586static bool
4587add_function (struct arg_lookup *k, tree fn)
4588{
4589 /* We used to check here to see if the function was already in the list,
4590 but that's O(n^2), which is just too expensive for function lookup.
4591 Now we deal with the occasional duplicate in joust. In doing this, we
4592 assume that the number of duplicates will be small compared to the
4593 total number of functions being compared, which should usually be the
4594 case. */
4595
ac3554c5
JM
4596 if (!is_overloaded_fn (fn))
4597 /* All names except those of (possibly overloaded) functions and
4598 function templates are ignored. */;
4599 else if (!k->functions)
5a167978
GDR
4600 k->functions = fn;
4601 else if (fn == k->functions)
4602 ;
5a167978 4603 else
ac3554c5 4604 k->functions = build_overload (fn, k->functions);
5a167978
GDR
4605
4606 return false;
4607}
4608
86098eb8
JM
4609/* Returns true iff CURRENT has declared itself to be an associated
4610 namespace of SCOPE via a strong using-directive (or transitive chain
4611 thereof). Both are namespaces. */
4612
4613bool
4614is_associated_namespace (tree current, tree scope)
4615{
4616 tree seen = NULL_TREE;
4617 tree todo = NULL_TREE;
4618 tree t;
4619 while (1)
4620 {
4621 if (scope == current)
4622 return true;
4623 seen = tree_cons (scope, NULL_TREE, seen);
4624 for (t = DECL_NAMESPACE_ASSOCIATIONS (scope); t; t = TREE_CHAIN (t))
4625 if (!purpose_member (TREE_PURPOSE (t), seen))
4626 todo = tree_cons (TREE_PURPOSE (t), NULL_TREE, todo);
4627 if (todo)
4628 {
4629 scope = TREE_PURPOSE (todo);
4630 todo = TREE_CHAIN (todo);
4631 }
4632 else
4633 return false;
4634 }
4635}
4636
5a167978
GDR
4637/* Add functions of a namespace to the lookup structure.
4638 Returns true on error. */
4639
4640static bool
4641arg_assoc_namespace (struct arg_lookup *k, tree scope)
4642{
4643 tree value;
4644
4645 if (purpose_member (scope, k->namespaces))
4646 return 0;
4647 k->namespaces = tree_cons (scope, NULL_TREE, k->namespaces);
86098eb8
JM
4648
4649 /* Check out our super-users. */
4650 for (value = DECL_NAMESPACE_ASSOCIATIONS (scope); value;
4651 value = TREE_CHAIN (value))
4652 if (arg_assoc_namespace (k, TREE_PURPOSE (value)))
4653 return true;
c8094d83 4654
4cfaec1c
JM
4655 /* Also look down into inline namespaces. */
4656 for (value = DECL_NAMESPACE_USING (scope); value;
4657 value = TREE_CHAIN (value))
4658 if (is_associated_namespace (scope, TREE_PURPOSE (value)))
4659 if (arg_assoc_namespace (k, TREE_PURPOSE (value)))
4660 return true;
4661
5a167978
GDR
4662 value = namespace_binding (k->name, scope);
4663 if (!value)
4664 return false;
4665
4666 for (; value; value = OVL_NEXT (value))
d63d5d0c
ILT
4667 {
4668 /* We don't want to find arbitrary hidden functions via argument
4669 dependent lookup. We only want to find friends of associated
db10df3d 4670 classes, which we'll do via arg_assoc_class. */
d63d5d0c 4671 if (hidden_name_p (OVL_CURRENT (value)))
db10df3d 4672 continue;
d63d5d0c
ILT
4673
4674 if (add_function (k, OVL_CURRENT (value)))
4675 return true;
4676 }
c8094d83 4677
5a167978
GDR
4678 return false;
4679}
4680
4681/* Adds everything associated with a template argument to the lookup
4682 structure. Returns true on error. */
4683
4684static bool
4685arg_assoc_template_arg (struct arg_lookup *k, tree arg)
4686{
4687 /* [basic.lookup.koenig]
4688
4689 If T is a template-id, its associated namespaces and classes are
4690 ... the namespaces and classes associated with the types of the
4691 template arguments provided for template type parameters
4692 (excluding template template parameters); the namespaces in which
4693 any template template arguments are defined; and the classes in
4694 which any member templates used as template template arguments
4695 are defined. [Note: non-type template arguments do not
4696 contribute to the set of associated namespaces. ] */
4697
4698 /* Consider first template template arguments. */
4699 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
4700 || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE)
4701 return false;
4702 else if (TREE_CODE (arg) == TEMPLATE_DECL)
4703 {
4704 tree ctx = CP_DECL_CONTEXT (arg);
4705
4706 /* It's not a member template. */
4707 if (TREE_CODE (ctx) == NAMESPACE_DECL)
0cbd7506 4708 return arg_assoc_namespace (k, ctx);
5a167978 4709 /* Otherwise, it must be member template. */
c8094d83 4710 else
db10df3d 4711 return arg_assoc_class_only (k, ctx);
5a167978 4712 }
ba796308
DG
4713 /* It's an argument pack; handle it recursively. */
4714 else if (ARGUMENT_PACK_P (arg))
4715 {
4716 tree args = ARGUMENT_PACK_ARGS (arg);
4717 int i, len = TREE_VEC_LENGTH (args);
4718 for (i = 0; i < len; ++i)
4719 if (arg_assoc_template_arg (k, TREE_VEC_ELT (args, i)))
4720 return true;
4721
4722 return false;
4723 }
5a167978
GDR
4724 /* It's not a template template argument, but it is a type template
4725 argument. */
4726 else if (TYPE_P (arg))
4727 return arg_assoc_type (k, arg);
4728 /* It's a non-type template argument. */
4729 else
4730 return false;
4731}
4732
db10df3d 4733/* Adds the class and its friends to the lookup structure.
5a167978
GDR
4734 Returns true on error. */
4735
4736static bool
db10df3d 4737arg_assoc_class_only (struct arg_lookup *k, tree type)
5a167978
GDR
4738{
4739 tree list, friends, context;
c8094d83 4740
db10df3d 4741 /* Backend-built structures, such as __builtin_va_list, aren't
5a167978
GDR
4742 affected by all this. */
4743 if (!CLASS_TYPE_P (type))
4744 return false;
4745
b1cc95ce 4746 context = decl_namespace_context (type);
5a167978
GDR
4747 if (arg_assoc_namespace (k, context))
4748 return true;
ccb14335 4749
2395cd2e
JM
4750 complete_type (type);
4751
5a167978 4752 /* Process friends. */
c8094d83 4753 for (list = DECL_FRIENDLIST (TYPE_MAIN_DECL (type)); list;
5a167978
GDR
4754 list = TREE_CHAIN (list))
4755 if (k->name == FRIEND_NAME (list))
c8094d83 4756 for (friends = FRIEND_DECLS (list); friends;
5a167978 4757 friends = TREE_CHAIN (friends))
c8b2e872
MM
4758 {
4759 tree fn = TREE_VALUE (friends);
4760
4761 /* Only interested in global functions with potentially hidden
4762 (i.e. unqualified) declarations. */
4763 if (CP_DECL_CONTEXT (fn) != context)
4764 continue;
4765 /* Template specializations are never found by name lookup.
4766 (Templates themselves can be found, but not template
4767 specializations.) */
4768 if (TREE_CODE (fn) == FUNCTION_DECL && DECL_USE_TEMPLATE (fn))
4769 continue;
4770 if (add_function (k, fn))
5a167978 4771 return true;
c8b2e872 4772 }
5a167978 4773
db10df3d
JM
4774 return false;
4775}
4776
4777/* Adds the class and its bases to the lookup structure.
4778 Returns true on error. */
4779
4780static bool
4781arg_assoc_bases (struct arg_lookup *k, tree type)
4782{
4783 if (arg_assoc_class_only (k, type))
4784 return true;
4785
4786 if (TYPE_BINFO (type))
4787 {
4788 /* Process baseclasses. */
4789 tree binfo, base_binfo;
4790 int i;
4791
4792 for (binfo = TYPE_BINFO (type), i = 0;
4793 BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
4794 if (arg_assoc_bases (k, BINFO_TYPE (base_binfo)))
4795 return true;
4796 }
4797
4798 return false;
4799}
4800
4801/* Adds everything associated with a class argument type to the lookup
4802 structure. Returns true on error.
4803
4804 If T is a class type (including unions), its associated classes are: the
4805 class itself; the class of which it is a member, if any; and its direct
4806 and indirect base classes. Its associated namespaces are the namespaces
4807 of which its associated classes are members. Furthermore, if T is a
4808 class template specialization, its associated namespaces and classes
4809 also include: the namespaces and classes associated with the types of
4810 the template arguments provided for template type parameters (excluding
4811 template template parameters); the namespaces of which any template
4812 template arguments are members; and the classes of which any member
4813 templates used as template template arguments are members. [ Note:
4814 non-type template arguments do not contribute to the set of associated
4815 namespaces. --end note] */
4816
4817static bool
4818arg_assoc_class (struct arg_lookup *k, tree type)
4819{
4820 tree list;
4821 int i;
4822
4823 /* Backend build structures, such as __builtin_va_list, aren't
4824 affected by all this. */
4825 if (!CLASS_TYPE_P (type))
4826 return false;
4827
4828 if (purpose_member (type, k->classes))
4829 return false;
4830 k->classes = tree_cons (type, NULL_TREE, k->classes);
4831
4832 if (TYPE_CLASS_SCOPE_P (type)
4833 && arg_assoc_class_only (k, TYPE_CONTEXT (type)))
4834 return true;
4835
4836 if (arg_assoc_bases (k, type))
4837 return true;
4838
5a167978 4839 /* Process template arguments. */
c8094d83 4840 if (CLASSTYPE_TEMPLATE_INFO (type)
146d3c99 4841 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (type)))
5a167978
GDR
4842 {
4843 list = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
c8094d83 4844 for (i = 0; i < TREE_VEC_LENGTH (list); ++i)
db10df3d
JM
4845 if (arg_assoc_template_arg (k, TREE_VEC_ELT (list, i)))
4846 return true;
5a167978
GDR
4847 }
4848
4849 return false;
4850}
4851
4852/* Adds everything associated with a given type.
4853 Returns 1 on error. */
4854
4855static bool
4856arg_assoc_type (struct arg_lookup *k, tree type)
4857{
4858 /* As we do not get the type of non-type dependent expressions
4859 right, we can end up with such things without a type. */
4860 if (!type)
4861 return false;
4862
4863 if (TYPE_PTRMEM_P (type))
4864 {
4865 /* Pointer to member: associate class type and value type. */
4866 if (arg_assoc_type (k, TYPE_PTRMEM_CLASS_TYPE (type)))
4867 return true;
4868 return arg_assoc_type (k, TYPE_PTRMEM_POINTED_TO_TYPE (type));
4869 }
4870 else switch (TREE_CODE (type))
4871 {
4872 case ERROR_MARK:
4873 return false;
4874 case VOID_TYPE:
4875 case INTEGER_TYPE:
4876 case REAL_TYPE:
4877 case COMPLEX_TYPE:
4878 case VECTOR_TYPE:
5a167978 4879 case BOOLEAN_TYPE:
50a70b6b 4880 case FIXED_POINT_TYPE:
3feb128f 4881 case DECLTYPE_TYPE:
5a167978
GDR
4882 return false;
4883 case RECORD_TYPE:
4884 if (TYPE_PTRMEMFUNC_P (type))
4885 return arg_assoc_type (k, TYPE_PTRMEMFUNC_FN_TYPE (type));
db10df3d 4886 case UNION_TYPE:
5a167978
GDR
4887 return arg_assoc_class (k, type);
4888 case POINTER_TYPE:
4889 case REFERENCE_TYPE:
4890 case ARRAY_TYPE:
4891 return arg_assoc_type (k, TREE_TYPE (type));
5a167978 4892 case ENUMERAL_TYPE:
db10df3d
JM
4893 if (TYPE_CLASS_SCOPE_P (type)
4894 && arg_assoc_class_only (k, TYPE_CONTEXT (type)))
4895 return true;
b1cc95ce 4896 return arg_assoc_namespace (k, decl_namespace_context (type));
5a167978
GDR
4897 case METHOD_TYPE:
4898 /* The basetype is referenced in the first arg type, so just
4899 fall through. */
4900 case FUNCTION_TYPE:
4901 /* Associate the parameter types. */
4902 if (arg_assoc_args (k, TYPE_ARG_TYPES (type)))
4903 return true;
4904 /* Associate the return type. */
4905 return arg_assoc_type (k, TREE_TYPE (type));
4906 case TEMPLATE_TYPE_PARM:
4907 case BOUND_TEMPLATE_TEMPLATE_PARM:
4908 return false;
4909 case TYPENAME_TYPE:
4910 return false;
4911 case LANG_TYPE:
09357846 4912 gcc_assert (type == unknown_type_node
5116acc6 4913 || NULLPTR_TYPE_P (type)
09357846 4914 || type == init_list_type_node);
315fb5db 4915 return false;
5d80a306
DG
4916 case TYPE_PACK_EXPANSION:
4917 return arg_assoc_type (k, PACK_EXPANSION_PATTERN (type));
5d80a306 4918
5a167978 4919 default:
315fb5db 4920 gcc_unreachable ();
5a167978
GDR
4921 }
4922 return false;
4923}
4924
4925/* Adds everything associated with arguments. Returns true on error. */
4926
4927static bool
4928arg_assoc_args (struct arg_lookup *k, tree args)
4929{
4930 for (; args; args = TREE_CHAIN (args))
4931 if (arg_assoc (k, TREE_VALUE (args)))
4932 return true;
4933 return false;
4934}
4935
c166b898
ILT
4936/* Adds everything associated with an argument vector. Returns true
4937 on error. */
4938
4939static bool
4940arg_assoc_args_vec (struct arg_lookup *k, VEC(tree,gc) *args)
4941{
4942 unsigned int ix;
4943 tree arg;
4944
4945 for (ix = 0; VEC_iterate (tree, args, ix, arg); ++ix)
4946 if (arg_assoc (k, arg))
4947 return true;
4948 return false;
4949}
4950
5a167978
GDR
4951/* Adds everything associated with a given tree_node. Returns 1 on error. */
4952
4953static bool
4954arg_assoc (struct arg_lookup *k, tree n)
4955{
4956 if (n == error_mark_node)
4957 return false;
4958
4959 if (TYPE_P (n))
4960 return arg_assoc_type (k, n);
4961
4962 if (! type_unknown_p (n))
4963 return arg_assoc_type (k, TREE_TYPE (n));
4964
4965 if (TREE_CODE (n) == ADDR_EXPR)
4966 n = TREE_OPERAND (n, 0);
4967 if (TREE_CODE (n) == COMPONENT_REF)
4968 n = TREE_OPERAND (n, 1);
4969 if (TREE_CODE (n) == OFFSET_REF)
4970 n = TREE_OPERAND (n, 1);
4971 while (TREE_CODE (n) == TREE_LIST)
4972 n = TREE_VALUE (n);
4973 if (TREE_CODE (n) == BASELINK)
4974 n = BASELINK_FUNCTIONS (n);
4975
4976 if (TREE_CODE (n) == FUNCTION_DECL)
4977 return arg_assoc_type (k, TREE_TYPE (n));
4978 if (TREE_CODE (n) == TEMPLATE_ID_EXPR)
4979 {
db10df3d
JM
4980 /* The working paper doesn't currently say how to handle template-id
4981 arguments. The sensible thing would seem to be to handle the list
4982 of template candidates like a normal overload set, and handle the
4983 template arguments like we do for class template
4984 specializations. */
be93747e 4985 tree templ = TREE_OPERAND (n, 0);
5a167978 4986 tree args = TREE_OPERAND (n, 1);
5a167978
GDR
4987 int ix;
4988
db10df3d
JM
4989 /* First the templates. */
4990 if (arg_assoc (k, templ))
5a167978
GDR
4991 return true;
4992
4993 /* Now the arguments. */
c19aaba5
NS
4994 if (args)
4995 for (ix = TREE_VEC_LENGTH (args); ix--;)
4996 if (arg_assoc_template_arg (k, TREE_VEC_ELT (args, ix)) == 1)
4997 return true;
5a167978 4998 }
c1cca8d4 4999 else if (TREE_CODE (n) == OVERLOAD)
5a167978 5000 {
5a167978
GDR
5001 for (; n; n = OVL_CHAIN (n))
5002 if (arg_assoc_type (k, TREE_TYPE (OVL_FUNCTION (n))))
5003 return true;
5004 }
5005
5006 return false;
5007}
5008
5009/* Performs Koenig lookup depending on arguments, where fns
5010 are the functions found in normal lookup. */
5011
5012tree
c166b898 5013lookup_arg_dependent (tree name, tree fns, VEC(tree,gc) *args)
5a167978
GDR
5014{
5015 struct arg_lookup k;
5a167978
GDR
5016
5017 timevar_push (TV_NAME_LOOKUP);
d63d5d0c
ILT
5018
5019 /* Remove any hidden friend functions from the list of functions
5020 found so far. They will be added back by arg_assoc_class as
5021 appropriate. */
5022 fns = remove_hidden_names (fns);
5023
5a167978 5024 k.name = name;
d63d5d0c 5025 k.args = args;
5a167978
GDR
5026 k.functions = fns;
5027 k.classes = NULL_TREE;
5028
20ac1e03
DG
5029 /* We previously performed an optimization here by setting
5030 NAMESPACES to the current namespace when it was safe. However, DR
5031 164 says that namespaces that were already searched in the first
5032 stage of template processing are searched again (potentially
5033 picking up later definitions) in the second stage. */
5034 k.namespaces = NULL_TREE;
5a167978 5035
c166b898 5036 arg_assoc_args_vec (&k, args);
4860b874
NS
5037
5038 fns = k.functions;
5039
5040 if (fns
5041 && TREE_CODE (fns) != VAR_DECL
5042 && !is_overloaded_fn (fns))
5043 {
5044 error ("argument dependent lookup finds %q+D", fns);
5045 error (" in call to %qD", name);
5046 fns = error_mark_node;
5047 }
5048
5049 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, fns);
5a167978
GDR
5050}
5051
00e8de68
GDR
5052/* Add namespace to using_directives. Return NULL_TREE if nothing was
5053 changed (i.e. there was already a directive), or the fresh
5054 TREE_LIST otherwise. */
5055
a5e6b29b 5056static tree
00e8de68
GDR
5057push_using_directive (tree used)
5058{
5059 tree ud = current_binding_level->using_directives;
5060 tree iter, ancestor;
5061
5062 timevar_push (TV_NAME_LOOKUP);
5063 /* Check if we already have this. */
5064 if (purpose_member (used, ud) != NULL_TREE)
5065 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
5066
5067 ancestor = namespace_ancestor (current_decl_namespace (), used);
5068 ud = current_binding_level->using_directives;
5069 ud = tree_cons (used, ancestor, ud);
5070 current_binding_level->using_directives = ud;
5071
5072 /* Recursively add all namespaces used. */
5073 for (iter = DECL_NAMESPACE_USING (used); iter; iter = TREE_CHAIN (iter))
5074 push_using_directive (TREE_PURPOSE (iter));
5075
5076 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, ud);
5077}
5078
5079/* The type TYPE is being declared. If it is a class template, or a
5080 specialization of a class template, do any processing required and
5081 perform error-checking. If IS_FRIEND is nonzero, this TYPE is
5082 being declared a friend. B is the binding level at which this TYPE
5083 should be bound.
5084
5085 Returns the TYPE_DECL for TYPE, which may have been altered by this
5086 processing. */
5087
5088static tree
bd3d082e 5089maybe_process_template_type_declaration (tree type, int is_friend,
0cbd7506 5090 cxx_scope *b)
00e8de68
GDR
5091{
5092 tree decl = TYPE_NAME (type);
5093
5094 if (processing_template_parmlist)
5095 /* You can't declare a new template type in a template parameter
5096 list. But, you can declare a non-template type:
5097
0cbd7506 5098 template <class A*> struct S;
00e8de68
GDR
5099
5100 is a forward-declaration of `A'. */
5101 ;
c43e95f8
MM
5102 else if (b->kind == sk_namespace
5103 && current_binding_level->kind != sk_namespace)
5104 /* If this new type is being injected into a containing scope,
5105 then it's not a template type. */
5106 ;
00e8de68
GDR
5107 else
5108 {
9e1e64ec
PC
5109 gcc_assert (MAYBE_CLASS_TYPE_P (type)
5110 || TREE_CODE (type) == ENUMERAL_TYPE);
00e8de68
GDR
5111
5112 if (processing_template_decl)
5113 {
5114 /* This may change after the call to
5115 push_template_decl_real, but we want the original value. */
5116 tree name = DECL_NAME (decl);
5117
bd3d082e 5118 decl = push_template_decl_real (decl, is_friend);
79faac54
PC
5119 if (decl == error_mark_node)
5120 return error_mark_node;
5121
00e8de68
GDR
5122 /* If the current binding level is the binding level for the
5123 template parameters (see the comment in
5124 begin_template_parm_list) and the enclosing level is a class
5125 scope, and we're not looking at a friend, push the
5126 declaration of the member class into the class scope. In the
5127 friend case, push_template_decl will already have put the
5128 friend into global scope, if appropriate. */
5129 if (TREE_CODE (type) != ENUMERAL_TYPE
bd3d082e 5130 && !is_friend && b->kind == sk_template_parms
00e8de68
GDR
5131 && b->level_chain->kind == sk_class)
5132 {
5133 finish_member_declaration (CLASSTYPE_TI_TEMPLATE (type));
e57df6fe 5134
00e8de68
GDR
5135 if (!COMPLETE_TYPE_P (current_class_type))
5136 {
5137 maybe_add_class_template_decl_list (current_class_type,
5138 type, /*friend_p=*/0);
c72a1a86 5139 /* Put this UTD in the table of UTDs for the class. */
e57df6fe
KL
5140 if (CLASSTYPE_NESTED_UTDS (current_class_type) == NULL)
5141 CLASSTYPE_NESTED_UTDS (current_class_type) =
5142 binding_table_new (SCOPE_DEFAULT_HT_SIZE);
5143
5144 binding_table_insert
5145 (CLASSTYPE_NESTED_UTDS (current_class_type), name, type);
00e8de68
GDR
5146 }
5147 }
5148 }
5149 }
5150
5151 return decl;
5152}
5153
5a24482e
KL
5154/* Push a tag name NAME for struct/class/union/enum type TYPE. In case
5155 that the NAME is a class template, the tag is processed but not pushed.
5156
5157 The pushed scope depend on the SCOPE parameter:
5158 - When SCOPE is TS_CURRENT, put it into the inner-most non-sk_cleanup
5159 scope.
5160 - When SCOPE is TS_GLOBAL, put it in the inner-most non-class and
5161 non-template-parameter scope. This case is needed for forward
5162 declarations.
5163 - When SCOPE is TS_WITHIN_ENCLOSING_NON_CLASS, this is similar to
5164 TS_GLOBAL case except that names within template-parameter scopes
5165 are not pushed at all.
5166
c6f9f83b 5167 Returns TYPE upon success and ERROR_MARK_NODE otherwise. */
00e8de68 5168
c6f9f83b 5169tree
bd3d082e 5170pushtag (tree name, tree type, tag_scope scope)
00e8de68 5171{
926ce8bd 5172 struct cp_binding_level *b;
6a000704 5173 tree decl;
00e8de68
GDR
5174
5175 timevar_push (TV_NAME_LOOKUP);
5176 b = current_binding_level;
7c82a41e
MM
5177 while (/* Cleanup scopes are not scopes from the point of view of
5178 the language. */
5179 b->kind == sk_cleanup
b344d949
JM
5180 /* Neither are function parameter scopes. */
5181 || b->kind == sk_function_parms
7c82a41e
MM
5182 /* Neither are the scopes used to hold template parameters
5183 for an explicit specialization. For an ordinary template
5184 declaration, these scopes are not scopes from the point of
5a24482e
KL
5185 view of the language. */
5186 || (b->kind == sk_template_parms
5187 && (b->explicit_spec_p || scope == ts_global))
00e8de68 5188 || (b->kind == sk_class
bd3d082e 5189 && (scope != ts_current
00e8de68
GDR
5190 /* We may be defining a new type in the initializer
5191 of a static member variable. We allow this when
5192 not pedantic, and it is particularly useful for
5193 type punning via an anonymous union. */
5194 || COMPLETE_TYPE_P (b->this_entity))))
5195 b = b->level_chain;
5196
6a000704 5197 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
3db45ab5 5198
6a000704
NS
5199 /* Do C++ gratuitous typedefing. */
5200 if (IDENTIFIER_TYPE_VALUE (name) != type)
00e8de68 5201 {
6a000704
NS
5202 tree tdef;
5203 int in_class = 0;
5204 tree context = TYPE_CONTEXT (type);
00e8de68 5205
6a000704
NS
5206 if (! context)
5207 {
5208 tree cs = current_scope ();
3db45ab5 5209
d5f4eddd
JM
5210 if (scope == ts_current
5211 || (cs && TREE_CODE (cs) == FUNCTION_DECL))
6a000704
NS
5212 context = cs;
5213 else if (cs != NULL_TREE && TYPE_P (cs))
5214 /* When declaring a friend class of a local class, we want
5215 to inject the newly named class into the scope
5216 containing the local class, not the namespace
5217 scope. */
5218 context = decl_function_context (get_type_decl (cs));
5219 }
5220 if (!context)
5221 context = current_namespace;
bd3d082e 5222
6a000704
NS
5223 if (b->kind == sk_class
5224 || (b->kind == sk_template_parms
5225 && b->level_chain->kind == sk_class))
5226 in_class = 1;
00e8de68 5227
6a000704
NS
5228 if (current_lang_name == lang_name_java)
5229 TYPE_FOR_JAVA (type) = 1;
00e8de68 5230
6a000704
NS
5231 tdef = create_implicit_typedef (name, type);
5232 DECL_CONTEXT (tdef) = FROB_CONTEXT (context);
5233 if (scope == ts_within_enclosing_non_class)
00e8de68 5234 {
6a000704
NS
5235 /* This is a friend. Make this TYPE_DECL node hidden from
5236 ordinary name lookup. Its corresponding TEMPLATE_DECL
5237 will be marked in push_template_decl_real. */
5238 retrofit_lang_decl (tdef);
5239 DECL_ANTICIPATED (tdef) = 1;
5240 DECL_FRIEND_P (tdef) = 1;
5241 }
e57df6fe 5242
6a000704
NS
5243 decl = maybe_process_template_type_declaration
5244 (type, scope == ts_within_enclosing_non_class, b);
5245 if (decl == error_mark_node)
5246 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
3db45ab5 5247
6a000704
NS
5248 if (b->kind == sk_class)
5249 {
0efc4442
DS
5250 if (!TYPE_BEING_DEFINED (current_class_type))
5251 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5252
6a000704
NS
5253 if (!PROCESSING_REAL_TEMPLATE_DECL_P ())
5254 /* Put this TYPE_DECL on the TYPE_FIELDS list for the
5255 class. But if it's a member template class, we want
5256 the TEMPLATE_DECL, not the TYPE_DECL, so this is done
5257 later. */
5258 finish_member_declaration (decl);
5259 else
5260 pushdecl_class_level (decl);
00e8de68 5261 }
6a000704 5262 else if (b->kind != sk_template_parms)
c5f8391c
SE
5263 {
5264 decl = pushdecl_with_scope (decl, b, /*is_friend=*/false);
5265 if (decl == error_mark_node)
5266 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
5267 }
6a000704 5268
dc3ca06f
SM
5269 if (! in_class)
5270 set_identifier_type_value_with_scope (name, tdef, b);
5271
6a000704
NS
5272 TYPE_CONTEXT (type) = DECL_CONTEXT (decl);
5273
5274 /* If this is a local class, keep track of it. We need this
5275 information for name-mangling, and so that it is possible to
5276 find all function definitions in a translation unit in a
5277 convenient way. (It's otherwise tricky to find a member
5278 function definition it's only pointed to from within a local
5279 class.) */
5280 if (TYPE_CONTEXT (type)
5281 && TREE_CODE (TYPE_CONTEXT (type)) == FUNCTION_DECL)
5282 VEC_safe_push (tree, gc, local_classes, type);
00e8de68 5283 }
6a000704
NS
5284 if (b->kind == sk_class
5285 && !COMPLETE_TYPE_P (current_class_type))
00e8de68 5286 {
6a000704
NS
5287 maybe_add_class_template_decl_list (current_class_type,
5288 type, /*friend_p=*/0);
3db45ab5 5289
6a000704
NS
5290 if (CLASSTYPE_NESTED_UTDS (current_class_type) == NULL)
5291 CLASSTYPE_NESTED_UTDS (current_class_type)
5292 = binding_table_new (SCOPE_DEFAULT_HT_SIZE);
3db45ab5 5293
6a000704
NS
5294 binding_table_insert
5295 (CLASSTYPE_NESTED_UTDS (current_class_type), name, type);
00e8de68 5296 }
6a000704
NS
5297
5298 decl = TYPE_NAME (type);
5299 gcc_assert (TREE_CODE (decl) == TYPE_DECL);
6a000704 5300
b9e75696
JM
5301 /* Set type visibility now if this is a forward declaration. */
5302 TREE_PUBLIC (decl) = 1;
5303 determine_visibility (decl);
5304
c6f9f83b 5305 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, type);
00e8de68
GDR
5306}
5307\f
00e8de68
GDR
5308/* Subroutines for reverting temporarily to top-level for instantiation
5309 of templates and such. We actually need to clear out the class- and
5310 local-value slots of all identifiers, so that only the global values
5311 are at all visible. Simply setting current_binding_level to the global
5312 scope isn't enough, because more binding levels may be pushed. */
5313struct saved_scope *scope_chain;
5314
f44b0c8e
MM
5315/* If ID has not already been marked, add an appropriate binding to
5316 *OLD_BINDINGS. */
89b578be 5317
f44b0c8e 5318static void
d4e6fecb 5319store_binding (tree id, VEC(cxx_saved_binding,gc) **old_bindings)
89b578be
MM
5320{
5321 cxx_saved_binding *saved;
89b578be 5322
39fb05d0 5323 if (!id || !IDENTIFIER_BINDING (id))
f44b0c8e 5324 return;
89b578be 5325
f44b0c8e
MM
5326 if (IDENTIFIER_MARKED (id))
5327 return;
c8094d83 5328
f44b0c8e 5329 IDENTIFIER_MARKED (id) = 1;
89b578be 5330
d4e6fecb 5331 saved = VEC_safe_push (cxx_saved_binding, gc, *old_bindings, NULL);
89b578be
MM
5332 saved->identifier = id;
5333 saved->binding = IDENTIFIER_BINDING (id);
89b578be
MM
5334 saved->real_type_value = REAL_IDENTIFIER_TYPE_VALUE (id);
5335 IDENTIFIER_BINDING (id) = NULL;
89b578be
MM
5336}
5337
f44b0c8e 5338static void
d4e6fecb 5339store_bindings (tree names, VEC(cxx_saved_binding,gc) **old_bindings)
00e8de68
GDR
5340{
5341 tree t;
00e8de68
GDR
5342
5343 timevar_push (TV_NAME_LOOKUP);
5344 for (t = names; t; t = TREE_CHAIN (t))
5345 {
5346 tree id;
00e8de68
GDR
5347
5348 if (TREE_CODE (t) == TREE_LIST)
5349 id = TREE_PURPOSE (t);
5350 else
5351 id = DECL_NAME (t);
5352
f44b0c8e 5353 store_binding (id, old_bindings);
00e8de68 5354 }
f44b0c8e 5355 timevar_pop (TV_NAME_LOOKUP);
00e8de68
GDR
5356}
5357
89b578be
MM
5358/* Like store_bindings, but NAMES is a vector of cp_class_binding
5359 objects, rather than a TREE_LIST. */
5360
f44b0c8e 5361static void
c8094d83 5362store_class_bindings (VEC(cp_class_binding,gc) *names,
d4e6fecb 5363 VEC(cxx_saved_binding,gc) **old_bindings)
89b578be
MM
5364{
5365 size_t i;
5366 cp_class_binding *cb;
89b578be
MM
5367
5368 timevar_push (TV_NAME_LOOKUP);
9ba5ff0f 5369 for (i = 0; VEC_iterate(cp_class_binding, names, i, cb); ++i)
f44b0c8e
MM
5370 store_binding (cb->identifier, old_bindings);
5371 timevar_pop (TV_NAME_LOOKUP);
89b578be
MM
5372}
5373
00e8de68 5374void
c353b8e3 5375push_to_top_level (void)
00e8de68
GDR
5376{
5377 struct saved_scope *s;
5378 struct cp_binding_level *b;
f44b0c8e
MM
5379 cxx_saved_binding *sb;
5380 size_t i;
30bcc028 5381 bool need_pop;
00e8de68
GDR
5382
5383 timevar_push (TV_NAME_LOOKUP);
99dd239f 5384 s = GGC_CNEW (struct saved_scope);
00e8de68
GDR
5385
5386 b = scope_chain ? current_binding_level : 0;
5387
5388 /* If we're in the middle of some function, save our state. */
5389 if (cfun)
5390 {
30bcc028 5391 need_pop = true;
d2784db4 5392 push_function_context ();
00e8de68
GDR
5393 }
5394 else
30bcc028 5395 need_pop = false;
00e8de68 5396
89b578be 5397 if (scope_chain && previous_class_level)
f44b0c8e
MM
5398 store_class_bindings (previous_class_level->class_shadowed,
5399 &s->old_bindings);
00e8de68
GDR
5400
5401 /* Have to include the global scope, because class-scope decls
5402 aren't listed anywhere useful. */
5403 for (; b; b = b->level_chain)
5404 {
5405 tree t;
5406
5407 /* Template IDs are inserted into the global level. If they were
5408 inserted into namespace level, finish_file wouldn't find them
5409 when doing pending instantiations. Therefore, don't stop at
5410 namespace level, but continue until :: . */
c353b8e3 5411 if (global_scope_p (b))
00e8de68
GDR
5412 break;
5413
f44b0c8e 5414 store_bindings (b->names, &s->old_bindings);
00e8de68
GDR
5415 /* We also need to check class_shadowed to save class-level type
5416 bindings, since pushclass doesn't fill in b->names. */
5417 if (b->kind == sk_class)
f44b0c8e 5418 store_class_bindings (b->class_shadowed, &s->old_bindings);
00e8de68
GDR
5419
5420 /* Unwind type-value slots back to top level. */
5421 for (t = b->type_shadowed; t; t = TREE_CHAIN (t))
5422 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (t), TREE_VALUE (t));
5423 }
f44b0c8e 5424
9ba5ff0f 5425 for (i = 0; VEC_iterate (cxx_saved_binding, s->old_bindings, i, sb); ++i)
f44b0c8e
MM
5426 IDENTIFIER_MARKED (sb->identifier) = 0;
5427
00e8de68 5428 s->prev = scope_chain;
00e8de68
GDR
5429 s->bindings = b;
5430 s->need_pop_function_context = need_pop;
5431 s->function_decl = current_function_decl;
7d882b83
ILT
5432 s->unevaluated_operand = cp_unevaluated_operand;
5433 s->inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
00e8de68
GDR
5434
5435 scope_chain = s;
5436 current_function_decl = NULL_TREE;
aff44741 5437 current_lang_base = VEC_alloc (tree, gc, 10);
00e8de68
GDR
5438 current_lang_name = lang_name_cplusplus;
5439 current_namespace = global_namespace;
c888c93b 5440 push_class_stack ();
7d882b83
ILT
5441 cp_unevaluated_operand = 0;
5442 c_inhibit_evaluation_warnings = 0;
00e8de68
GDR
5443 timevar_pop (TV_NAME_LOOKUP);
5444}
5445
00e8de68
GDR
5446void
5447pop_from_top_level (void)
5448{
5449 struct saved_scope *s = scope_chain;
5450 cxx_saved_binding *saved;
f44b0c8e 5451 size_t i;
00e8de68 5452
c8094d83 5453 timevar_push (TV_NAME_LOOKUP);
00e8de68 5454 /* Clear out class-level bindings cache. */
89b578be 5455 if (previous_class_level)
00e8de68 5456 invalidate_class_lookup_cache ();
c888c93b 5457 pop_class_stack ();
00e8de68
GDR
5458
5459 current_lang_base = 0;
5460
5461 scope_chain = s->prev;
9ba5ff0f 5462 for (i = 0; VEC_iterate (cxx_saved_binding, s->old_bindings, i, saved); ++i)
00e8de68
GDR
5463 {
5464 tree id = saved->identifier;
5465
5466 IDENTIFIER_BINDING (id) = saved->binding;
00e8de68
GDR
5467 SET_IDENTIFIER_TYPE_VALUE (id, saved->real_type_value);
5468 }
5469
5470 /* If we were in the middle of compiling a function, restore our
5471 state. */
5472 if (s->need_pop_function_context)
d2784db4 5473 pop_function_context ();
00e8de68 5474 current_function_decl = s->function_decl;
7d882b83
ILT
5475 cp_unevaluated_operand = s->unevaluated_operand;
5476 c_inhibit_evaluation_warnings = s->inhibit_evaluation_warnings;
00e8de68
GDR
5477 timevar_pop (TV_NAME_LOOKUP);
5478}
5479
5480/* Pop off extraneous binding levels left over due to syntax errors.
5481
5482 We don't pop past namespaces, as they might be valid. */
5483
5484void
5485pop_everything (void)
5486{
5487 if (ENABLE_SCOPE_CHECKING)
5488 verbatim ("XXX entering pop_everything ()\n");
5489 while (!toplevel_bindings_p ())
5490 {
5491 if (current_binding_level->kind == sk_class)
5492 pop_nested_class ();
5493 else
5494 poplevel (0, 0, 0);
5495 }
5496 if (ENABLE_SCOPE_CHECKING)
5497 verbatim ("XXX leaving pop_everything ()\n");
5498}
5499
6097b0c3 5500/* Emit debugging information for using declarations and directives.
c8094d83 5501 If input tree is overloaded fn then emit debug info for all
6097b0c3
DP
5502 candidates. */
5503
98ed9dae 5504void
6097b0c3
DP
5505cp_emit_debug_info_for_using (tree t, tree context)
5506{
099f36ab 5507 /* Don't try to emit any debug information if we have errors. */
1da2ed5f 5508 if (seen_error ())
099f36ab
JM
5509 return;
5510
c8094d83 5511 /* Ignore this FUNCTION_DECL if it refers to a builtin declaration
6097b0c3 5512 of a builtin function. */
c8094d83 5513 if (TREE_CODE (t) == FUNCTION_DECL
6097b0c3
DP
5514 && DECL_EXTERNAL (t)
5515 && DECL_BUILT_IN (t))
5516 return;
5517
5518 /* Do not supply context to imported_module_or_decl, if
5519 it is a global namespace. */
5520 if (context == global_namespace)
5521 context = NULL_TREE;
c8094d83 5522
6097b0c3
DP
5523 if (BASELINK_P (t))
5524 t = BASELINK_FUNCTIONS (t);
c8094d83 5525
6097b0c3
DP
5526 /* FIXME: Handle TEMPLATE_DECLs. */
5527 for (t = OVL_CURRENT (t); t; t = OVL_NEXT (t))
5528 if (TREE_CODE (t) != TEMPLATE_DECL)
98381eb4
JJ
5529 {
5530 if (building_stmt_tree ())
c2255bc4 5531 add_stmt (build_stmt (input_location, USING_STMT, t));
98381eb4
JJ
5532 else
5533 (*debug_hooks->imported_module_or_decl) (t, NULL_TREE, context, false);
5534 }
98ed9dae 5535}
6097b0c3 5536
28ea4c88 5537#include "gt-cp-name-lookup.h"