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