]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/cp/name-lookup.c
re PR rtl-optimization/23392 (foward-1.m fails with -funroll-loops -O3 -fgnu-runtime)
[thirdparty/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
2672 old_decl = bval;
2673 }
2674 else if (TREE_CODE (x) == OVERLOAD && is_overloaded_fn (bval))
2675 old_decl = bval;
2676 else if (TREE_CODE (x) == USING_DECL && TREE_CODE (bval) == USING_DECL)
2677 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, true);
2678 else if (TREE_CODE (x) == USING_DECL && is_overloaded_fn (bval))
2679 old_decl = bval;
2680 else if (TREE_CODE (bval) == USING_DECL && is_overloaded_fn (x))
2681 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, true);
89b578be 2682
90ea9897 2683 if (old_decl && binding->scope == class_binding_level)
00e8de68 2684 {
f31045fd
MM
2685 binding->value = x;
2686 /* It is always safe to clear INHERITED_VALUE_BINDING_P
df05a794
MM
2687 here. This function is only used to register bindings
2688 from with the class definition itself. */
f31045fd 2689 INHERITED_VALUE_BINDING_P (binding) = 0;
f31045fd 2690 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, true);
00e8de68
GDR
2691 }
2692 }
2693
90ea9897
MM
2694 /* Note that we declared this value so that we can issue an error if
2695 this is an invalid redeclaration of a name already used for some
2696 other purpose. */
2697 note_name_declared_in_class (name, decl);
2698
00e8de68 2699 /* If we didn't replace an existing binding, put the binding on the
90ea9897
MM
2700 stack of bindings for the identifier, and update the shadowed
2701 list. */
2702 if (binding && binding->scope == class_binding_level)
2703 /* Supplement the existing binding. */
2704 ok = supplement_binding (binding, decl);
2705 else
2706 {
2707 /* Create a new binding. */
2708 push_binding (name, decl, class_binding_level);
2709 ok = true;
2710 }
00e8de68 2711
90ea9897 2712 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, ok);
00e8de68
GDR
2713}
2714
1d786913
MM
2715/* Process "using SCOPE::NAME" in a class scope. Return the
2716 USING_DECL created. */
2717
5a167978 2718tree
1d786913 2719do_class_using_decl (tree scope, tree name)
5a167978 2720{
98ed9dae
NS
2721 tree value, decl, binfo;
2722 base_kind b_kind;
2723 bool dependent_p;
c8094d83 2724
1d786913 2725 if (!scope || !TYPE_P (scope))
5a167978
GDR
2726 {
2727 error ("using-declaration for non-member at class scope");
2728 return NULL_TREE;
2729 }
98ed9dae
NS
2730
2731 /* Make sure the scope is a base. */
2732 dependent_p = dependent_type_p (scope);
2733 if (!dependent_p)
2734 binfo = lookup_base (current_class_type, scope, ba_any, &b_kind);
2735 else
2736 {
2737 binfo = NULL;
2738 if (same_type_p (current_class_type, scope))
2739 b_kind = bk_same_type;
2740 else
2741 b_kind = bk_proper_base;
2742 }
c8094d83 2743
98ed9dae
NS
2744 if (b_kind < bk_proper_base)
2745 {
2746 error_not_base_type (scope, current_class_type);
2747 return NULL_TREE;
2748 }
c8094d83 2749
98ed9dae 2750 /* Make sure the name is not invalid */
5a167978
GDR
2751 if (TREE_CODE (name) == BIT_NOT_EXPR)
2752 {
98ed9dae
NS
2753 error ("%<%T::%D%> names destructor", scope, name);
2754 return NULL_TREE;
2755 }
2756 if (constructor_name_p (name, scope))
2757 {
2758 error ("%<%T::%D%> names constructor", scope, name);
2759 return NULL_TREE;
2760 }
2761 if (constructor_name_p (name, current_class_type))
2762 {
2763 error ("%<%T::%D%> names constructor in %qT",
2764 scope, name, current_class_type);
5a167978
GDR
2765 return NULL_TREE;
2766 }
5a167978 2767
98ed9dae
NS
2768 if (!dependent_p
2769 && IDENTIFIER_OPNAME_P (name) && dependent_type_p (TREE_TYPE (name)))
2770 dependent_p = 1;
6097b0c3 2771
98ed9dae
NS
2772 /* See if there are any members of the base. */
2773 if (!dependent_p)
6097b0c3 2774 {
98ed9dae 2775 decl = lookup_member (binfo, name, 0, false);
c8094d83 2776
98ed9dae
NS
2777 if (!decl)
2778 {
2779 error ("no members matching %<%T::%D%> in %q#T", scope, name, scope);
2780 return NULL_TREE;
2781 }
2782
2783 if (BASELINK_P (decl))
2784 /* Ignore base type this came from. */
2785 decl = BASELINK_FUNCTIONS (decl);
2786 }
2787 else
2788 decl = NULL_TREE;
2789
2790 value = build_lang_decl (USING_DECL, name, NULL_TREE);
2791 USING_DECL_DECLS (value) = decl;
2792 USING_DECL_SCOPE (value) = scope;
2793 DECL_DEPENDENT_P (value) = dependent_p;
6097b0c3 2794
5a167978
GDR
2795 return value;
2796}
2797
00e8de68
GDR
2798\f
2799/* Return the binding value for name in scope. */
2800
2801tree
2802namespace_binding (tree name, tree scope)
2803{
2804 cxx_binding *binding;
2805
2806 if (scope == NULL)
2807 scope = global_namespace;
8245c194
MA
2808 else
2809 /* Unnecessary for the global namespace because it can't be an alias. */
2810 scope = ORIGINAL_NAMESPACE (scope);
2811
00e8de68
GDR
2812 binding = cxx_scope_find_binding_for_name (NAMESPACE_LEVEL (scope), name);
2813
2814 return binding ? binding->value : NULL_TREE;
2815}
2816
2817/* Set the binding value for name in scope. */
ed3cf953
GDR
2818
2819void
2820set_namespace_binding (tree name, tree scope, tree val)
2821{
2822 cxx_binding *b;
2823
2824 timevar_push (TV_NAME_LOOKUP);
2825 if (scope == NULL_TREE)
2826 scope = global_namespace;
2827 b = binding_for_name (NAMESPACE_LEVEL (scope), name);
3c28fc74 2828 if (!b->value || TREE_CODE (val) == OVERLOAD || val == error_mark_node)
147135cc 2829 b->value = val;
4b0d3cbe 2830 else
c87ceb13 2831 supplement_binding (b, val);
ed3cf953
GDR
2832 timevar_pop (TV_NAME_LOOKUP);
2833}
2834
5a167978
GDR
2835/* Set the context of a declaration to scope. Complain if we are not
2836 outside scope. */
2837
2838void
2839set_decl_namespace (tree decl, tree scope, bool friendp)
2840{
2841 tree old;
c8094d83 2842
5a167978
GDR
2843 /* Get rid of namespace aliases. */
2844 scope = ORIGINAL_NAMESPACE (scope);
c8094d83 2845
5a167978
GDR
2846 /* It is ok for friends to be qualified in parallel space. */
2847 if (!friendp && !is_ancestor (current_namespace, scope))
c4f73174 2848 error ("declaration of %qD not in a namespace surrounding %qD",
0cbd7506 2849 decl, scope);
5a167978 2850 DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
5ae9ba3e 2851
c8094d83
MS
2852 /* Writing "int N::i" to declare a variable within "N" is invalid. */
2853 if (scope == current_namespace)
5ae9ba3e
MM
2854 {
2855 if (at_namespace_scope_p ())
c85ce869 2856 error ("explicit qualification in declaration of %qD",
5ae9ba3e
MM
2857 decl);
2858 return;
5a167978 2859 }
5ae9ba3e
MM
2860
2861 /* See whether this has been declared in the namespace. */
2862 old = namespace_binding (DECL_NAME (decl), scope);
2863 if (!old)
2864 /* No old declaration at all. */
2865 goto complain;
2866 /* A template can be explicitly specialized in any namespace. */
2867 if (processing_explicit_instantiation)
2868 return;
2869 if (!is_overloaded_fn (decl))
2870 /* Don't compare non-function decls with decls_match here, since
2871 it can't check for the correct constness at this
2872 point. pushdecl will find those errors later. */
2873 return;
2874 /* Since decl is a function, old should contain a function decl. */
2875 if (!is_overloaded_fn (old))
2876 goto complain;
2877 if (processing_template_decl || processing_specialization)
2878 /* We have not yet called push_template_decl to turn a
2879 FUNCTION_DECL into a TEMPLATE_DECL, so the declarations won't
2880 match. But, we'll check later, when we construct the
2881 template. */
5a167978 2882 return;
5ae9ba3e
MM
2883 if (is_overloaded_fn (old))
2884 {
2885 for (; old; old = OVL_NEXT (old))
2886 if (decls_match (decl, OVL_CURRENT (old)))
2887 return;
2888 }
2889 else if (decls_match (decl, old))
2890 return;
5a167978 2891 complain:
2a13a625 2892 error ("%qD should have been declared inside %qD", decl, scope);
c8094d83 2893}
5a167978
GDR
2894
2895/* Return the namespace where the current declaration is declared. */
2896
b8c1703b 2897static tree
5a167978
GDR
2898current_decl_namespace (void)
2899{
2900 tree result;
2901 /* If we have been pushed into a different namespace, use it. */
2902 if (decl_namespace_list)
2903 return TREE_PURPOSE (decl_namespace_list);
2904
2905 if (current_class_type)
b1cc95ce 2906 result = decl_namespace_context (current_class_type);
5a167978 2907 else if (current_function_decl)
b1cc95ce 2908 result = decl_namespace_context (current_function_decl);
c8094d83 2909 else
5a167978
GDR
2910 result = current_namespace;
2911 return result;
2912}
2913
00e8de68
GDR
2914/* Push into the scope of the NAME namespace. If NAME is NULL_TREE, then we
2915 select a name that is unique to this compilation unit. */
2916
2917void
2918push_namespace (tree name)
2919{
2920 tree d = NULL_TREE;
2921 int need_new = 1;
2922 int implicit_use = 0;
ed36980c 2923 bool anon = !name;
00e8de68
GDR
2924
2925 timevar_push (TV_NAME_LOOKUP);
c8094d83 2926
00e8de68
GDR
2927 /* We should not get here if the global_namespace is not yet constructed
2928 nor if NAME designates the global namespace: The global scope is
2929 constructed elsewhere. */
50bc768d 2930 gcc_assert (global_namespace != NULL && name != global_scope_name);
00e8de68 2931
ed36980c 2932 if (anon)
00e8de68
GDR
2933 {
2934 /* The name of anonymous namespace is unique for the translation
0cbd7506 2935 unit. */
00e8de68 2936 if (!anonymous_namespace_name)
0cbd7506 2937 anonymous_namespace_name = get_file_function_name ('N');
00e8de68
GDR
2938 name = anonymous_namespace_name;
2939 d = IDENTIFIER_NAMESPACE_VALUE (name);
2940 if (d)
0cbd7506
MS
2941 /* Reopening anonymous namespace. */
2942 need_new = 0;
00e8de68
GDR
2943 implicit_use = 1;
2944 }
2945 else
2946 {
2947 /* Check whether this is an extended namespace definition. */
2948 d = IDENTIFIER_NAMESPACE_VALUE (name);
2949 if (d != NULL_TREE && TREE_CODE (d) == NAMESPACE_DECL)
0cbd7506
MS
2950 {
2951 need_new = 0;
2952 if (DECL_NAMESPACE_ALIAS (d))
2953 {
2954 error ("namespace alias %qD not allowed here, assuming %qD",
2955 d, DECL_NAMESPACE_ALIAS (d));
2956 d = DECL_NAMESPACE_ALIAS (d);
2957 }
2958 }
00e8de68
GDR
2959 }
2960
2961 if (need_new)
2962 {
2963 /* Make a new namespace, binding the name to it. */
2964 d = build_lang_decl (NAMESPACE_DECL, name, void_type_node);
2965 DECL_CONTEXT (d) = FROB_CONTEXT (current_namespace);
c0694c4b 2966 pushdecl (d);
ed36980c
JM
2967 if (anon)
2968 {
2969 /* Clear DECL_NAME for the benefit of debugging back ends. */
2970 SET_DECL_ASSEMBLER_NAME (d, name);
2971 DECL_NAME (d) = NULL_TREE;
2972 }
00e8de68
GDR
2973 begin_scope (sk_namespace, d);
2974 }
2975 else
2976 resume_scope (NAMESPACE_LEVEL (d));
2977
2978 if (implicit_use)
2979 do_using_directive (d);
2980 /* Enter the name space. */
2981 current_namespace = d;
2982
2983 timevar_pop (TV_NAME_LOOKUP);
2984}
2985
2986/* Pop from the scope of the current namespace. */
2987
2988void
2989pop_namespace (void)
2990{
50bc768d 2991 gcc_assert (current_namespace != global_namespace);
00e8de68
GDR
2992 current_namespace = CP_DECL_CONTEXT (current_namespace);
2993 /* The binding level is not popped, as it might be re-opened later. */
2994 leave_scope ();
2995}
2996
2997/* Push into the scope of the namespace NS, even if it is deeply
2998 nested within another namespace. */
2999
3000void
3001push_nested_namespace (tree ns)
3002{
3003 if (ns == global_namespace)
3004 push_to_top_level ();
3005 else
3006 {
3007 push_nested_namespace (CP_DECL_CONTEXT (ns));
3008 push_namespace (DECL_NAME (ns));
3009 }
3010}
3011
3012/* Pop back from the scope of the namespace NS, which was previously
3013 entered with push_nested_namespace. */
3014
3015void
3016pop_nested_namespace (tree ns)
3017{
3018 timevar_push (TV_NAME_LOOKUP);
3019 while (ns != global_namespace)
3020 {
3021 pop_namespace ();
3022 ns = CP_DECL_CONTEXT (ns);
3023 }
3024
3025 pop_from_top_level ();
3026 timevar_pop (TV_NAME_LOOKUP);
3027}
3028
5a167978
GDR
3029/* Temporarily set the namespace for the current declaration. */
3030
3031void
3032push_decl_namespace (tree decl)
3033{
3034 if (TREE_CODE (decl) != NAMESPACE_DECL)
b1cc95ce 3035 decl = decl_namespace_context (decl);
5a167978 3036 decl_namespace_list = tree_cons (ORIGINAL_NAMESPACE (decl),
0cbd7506 3037 NULL_TREE, decl_namespace_list);
5a167978
GDR
3038}
3039
3040/* [namespace.memdef]/2 */
3041
3042void
3043pop_decl_namespace (void)
3044{
3045 decl_namespace_list = TREE_CHAIN (decl_namespace_list);
3046}
3047
c8094d83 3048/* Return the namespace that is the common ancestor
5a167978
GDR
3049 of two given namespaces. */
3050
a5e6b29b 3051static tree
5a167978
GDR
3052namespace_ancestor (tree ns1, tree ns2)
3053{
3054 timevar_push (TV_NAME_LOOKUP);
3055 if (is_ancestor (ns1, ns2))
3056 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, ns1);
3057 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP,
0cbd7506 3058 namespace_ancestor (CP_DECL_CONTEXT (ns1), ns2));
5a167978
GDR
3059}
3060
3061/* Process a namespace-alias declaration. */
3062
3063void
3064do_namespace_alias (tree alias, tree namespace)
3065{
166206ce
VR
3066 if (namespace == error_mark_node)
3067 return;
3068
3069 gcc_assert (TREE_CODE (namespace) == NAMESPACE_DECL);
5a167978
GDR
3070
3071 namespace = ORIGINAL_NAMESPACE (namespace);
3072
3073 /* Build the alias. */
c8094d83 3074 alias = build_lang_decl (NAMESPACE_DECL, alias, void_type_node);
5a167978
GDR
3075 DECL_NAMESPACE_ALIAS (alias) = namespace;
3076 DECL_EXTERNAL (alias) = 1;
6ac1920d 3077 DECL_CONTEXT (alias) = FROB_CONTEXT (current_scope ());
5a167978 3078 pushdecl (alias);
6097b0c3
DP
3079
3080 /* Emit debug info for namespace alias. */
3081 (*debug_hooks->global_decl) (alias);
5a167978
GDR
3082}
3083
00e8de68
GDR
3084/* Like pushdecl, only it places X in the current namespace,
3085 if appropriate. */
3086
3087tree
d63d5d0c 3088pushdecl_namespace_level (tree x, bool is_friend)
00e8de68 3089{
926ce8bd
KH
3090 struct cp_binding_level *b = current_binding_level;
3091 tree t;
00e8de68
GDR
3092
3093 timevar_push (TV_NAME_LOOKUP);
d63d5d0c 3094 t = pushdecl_with_scope (x, NAMESPACE_LEVEL (current_namespace), is_friend);
00e8de68
GDR
3095
3096 /* Now, the type_shadowed stack may screw us. Munge it so it does
3097 what we want. */
6fc98adf 3098 if (TREE_CODE (t) == TYPE_DECL)
00e8de68 3099 {
6fc98adf 3100 tree name = DECL_NAME (t);
00e8de68
GDR
3101 tree newval;
3102 tree *ptr = (tree *)0;
3103 for (; !global_scope_p (b); b = b->level_chain)
0cbd7506
MS
3104 {
3105 tree shadowed = b->type_shadowed;
3106 for (; shadowed; shadowed = TREE_CHAIN (shadowed))
3107 if (TREE_PURPOSE (shadowed) == name)
3108 {
00e8de68
GDR
3109 ptr = &TREE_VALUE (shadowed);
3110 /* Can't break out of the loop here because sometimes
3111 a binding level will have duplicate bindings for
3112 PT names. It's gross, but I haven't time to fix it. */
0cbd7506
MS
3113 }
3114 }
6fc98adf 3115 newval = TREE_TYPE (t);
00e8de68 3116 if (ptr == (tree *)0)
0cbd7506
MS
3117 {
3118 /* @@ This shouldn't be needed. My test case "zstring.cc" trips
3119 up here if this is changed to an assertion. --KR */
6fc98adf 3120 SET_IDENTIFIER_TYPE_VALUE (name, t);
00e8de68
GDR
3121 }
3122 else
0cbd7506 3123 {
00e8de68 3124 *ptr = newval;
0cbd7506 3125 }
00e8de68
GDR
3126 }
3127 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
3128}
3129
5a167978
GDR
3130/* Insert USED into the using list of USER. Set INDIRECT_flag if this
3131 directive is not directly from the source. Also find the common
3132 ancestor and let our users know about the new namespace */
c8094d83 3133static void
5a167978
GDR
3134add_using_namespace (tree user, tree used, bool indirect)
3135{
3136 tree t;
3137 timevar_push (TV_NAME_LOOKUP);
3138 /* Using oneself is a no-op. */
3139 if (user == used)
3140 {
3141 timevar_pop (TV_NAME_LOOKUP);
3142 return;
3143 }
50bc768d
NS
3144 gcc_assert (TREE_CODE (user) == NAMESPACE_DECL);
3145 gcc_assert (TREE_CODE (used) == NAMESPACE_DECL);
5a167978
GDR
3146 /* Check if we already have this. */
3147 t = purpose_member (used, DECL_NAMESPACE_USING (user));
3148 if (t != NULL_TREE)
3149 {
3150 if (!indirect)
3151 /* Promote to direct usage. */
3152 TREE_INDIRECT_USING (t) = 0;
3153 timevar_pop (TV_NAME_LOOKUP);
3154 return;
3155 }
3156
3157 /* Add used to the user's using list. */
c8094d83
MS
3158 DECL_NAMESPACE_USING (user)
3159 = tree_cons (used, namespace_ancestor (user, used),
5a167978
GDR
3160 DECL_NAMESPACE_USING (user));
3161
3162 TREE_INDIRECT_USING (DECL_NAMESPACE_USING (user)) = indirect;
3163
3164 /* Add user to the used's users list. */
3165 DECL_NAMESPACE_USERS (used)
3166 = tree_cons (user, 0, DECL_NAMESPACE_USERS (used));
3167
3168 /* Recursively add all namespaces used. */
3169 for (t = DECL_NAMESPACE_USING (used); t; t = TREE_CHAIN (t))
3170 /* indirect usage */
3171 add_using_namespace (user, TREE_PURPOSE (t), 1);
3172
3173 /* Tell everyone using us about the new used namespaces. */
3174 for (t = DECL_NAMESPACE_USERS (user); t; t = TREE_CHAIN (t))
3175 add_using_namespace (TREE_PURPOSE (t), used, 1);
3176 timevar_pop (TV_NAME_LOOKUP);
3177}
3178
3179/* Process a using-declaration not appearing in class or local scope. */
3180
3181void
ed5f054f 3182do_toplevel_using_decl (tree decl, tree scope, tree name)
5a167978 3183{
5a167978 3184 tree oldval, oldtype, newval, newtype;
6097b0c3 3185 tree orig_decl = decl;
5a167978
GDR
3186 cxx_binding *binding;
3187
ed5f054f 3188 decl = validate_nonmember_using_decl (decl, scope, name);
5a167978
GDR
3189 if (decl == NULL_TREE)
3190 return;
c8094d83 3191
5a167978
GDR
3192 binding = binding_for_name (NAMESPACE_LEVEL (current_namespace), name);
3193
3194 oldval = binding->value;
3195 oldtype = binding->type;
3196
3197 do_nonmember_using_decl (scope, name, oldval, oldtype, &newval, &newtype);
3198
6097b0c3
DP
3199 /* Emit debug info. */
3200 if (!processing_template_decl)
3201 cp_emit_debug_info_for_using (orig_decl, current_namespace);
3202
5a167978
GDR
3203 /* Copy declarations found. */
3204 if (newval)
3205 binding->value = newval;
3206 if (newtype)
3207 binding->type = newtype;
3208 return;
3209}
3210
3211/* Process a using-directive. */
3212
3213void
3214do_using_directive (tree namespace)
3215{
6097b0c3
DP
3216 tree context = NULL_TREE;
3217
166206ce
VR
3218 if (namespace == error_mark_node)
3219 return;
3220
3221 gcc_assert (TREE_CODE (namespace) == NAMESPACE_DECL);
3222
5a167978
GDR
3223 if (building_stmt_tree ())
3224 add_stmt (build_stmt (USING_STMT, namespace));
5a167978 3225 namespace = ORIGINAL_NAMESPACE (namespace);
166206ce 3226
5a167978 3227 if (!toplevel_bindings_p ())
6097b0c3
DP
3228 {
3229 push_using_directive (namespace);
3230 context = current_scope ();
3231 }
5a167978 3232 else
6097b0c3
DP
3233 {
3234 /* direct usage */
3235 add_using_namespace (current_namespace, namespace, 0);
3236 if (current_namespace != global_namespace)
3237 context = current_namespace;
3238 }
c8094d83 3239
6097b0c3
DP
3240 /* Emit debugging info. */
3241 if (!processing_template_decl)
3242 (*debug_hooks->imported_module_or_decl) (namespace, context);
5a167978
GDR
3243}
3244
86098eb8
JM
3245/* Deal with a using-directive seen by the parser. Currently we only
3246 handle attributes here, since they cannot appear inside a template. */
3247
3248void
3249parse_using_directive (tree namespace, tree attribs)
3250{
3251 tree a;
3252
3253 do_using_directive (namespace);
3254
3255 for (a = attribs; a; a = TREE_CHAIN (a))
3256 {
3257 tree name = TREE_PURPOSE (a);
3258 if (is_attribute_p ("strong", name))
3259 {
3260 if (!toplevel_bindings_p ())
3261 error ("strong using only meaningful at namespace scope");
db3a9519 3262 else if (namespace != error_mark_node)
86098eb8
JM
3263 DECL_NAMESPACE_ASSOCIATIONS (namespace)
3264 = tree_cons (current_namespace, 0,
3265 DECL_NAMESPACE_ASSOCIATIONS (namespace));
3266 }
3267 else
5c498b10 3268 warning (OPT_Wattributes, "%qD attribute directive ignored", name);
86098eb8
JM
3269 }
3270}
3271
a5e6b29b
GDR
3272/* Like pushdecl, only it places X in the global scope if appropriate.
3273 Calls cp_finish_decl to register the variable, initializing it with
3274 *INIT, if INIT is non-NULL. */
3275
3276static tree
d63d5d0c 3277pushdecl_top_level_1 (tree x, tree *init, bool is_friend)
a5e6b29b
GDR
3278{
3279 timevar_push (TV_NAME_LOOKUP);
3280 push_to_top_level ();
d63d5d0c 3281 x = pushdecl_namespace_level (x, is_friend);
a5e6b29b
GDR
3282 if (init)
3283 cp_finish_decl (x, *init, NULL_TREE, 0);
3284 pop_from_top_level ();
3285 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, x);
3286}
3287
3288/* Like pushdecl, only it places X in the global scope if appropriate. */
3289
3290tree
3291pushdecl_top_level (tree x)
3292{
d63d5d0c
ILT
3293 return pushdecl_top_level_1 (x, NULL, false);
3294}
3295
3296/* Like pushdecl_top_level, but adding the IS_FRIEND parameter. */
3297
3298tree
3299pushdecl_top_level_maybe_friend (tree x, bool is_friend)
3300{
3301 return pushdecl_top_level_1 (x, NULL, is_friend);
a5e6b29b
GDR
3302}
3303
3304/* Like pushdecl, only it places X in the global scope if
3305 appropriate. Calls cp_finish_decl to register the variable,
3306 initializing it with INIT. */
3307
3308tree
3309pushdecl_top_level_and_finish (tree x, tree init)
3310{
d63d5d0c 3311 return pushdecl_top_level_1 (x, &init, false);
a5e6b29b
GDR
3312}
3313
5a167978
GDR
3314/* Combines two sets of overloaded functions into an OVERLOAD chain, removing
3315 duplicates. The first list becomes the tail of the result.
3316
3317 The algorithm is O(n^2). We could get this down to O(n log n) by
3318 doing a sort on the addresses of the functions, if that becomes
3319 necessary. */
3320
3321static tree
3322merge_functions (tree s1, tree s2)
3323{
3324 for (; s2; s2 = OVL_NEXT (s2))
3325 {
3326 tree fn2 = OVL_CURRENT (s2);
3327 tree fns1;
3328
3329 for (fns1 = s1; fns1; fns1 = OVL_NEXT (fns1))
3330 {
3331 tree fn1 = OVL_CURRENT (fns1);
3332
3333 /* If the function from S2 is already in S1, there is no
3334 need to add it again. For `extern "C"' functions, we
3335 might have two FUNCTION_DECLs for the same function, in
3336 different namespaces; again, we only need one of them. */
c8094d83 3337 if (fn1 == fn2
5a167978
GDR
3338 || (DECL_EXTERN_C_P (fn1) && DECL_EXTERN_C_P (fn2)
3339 && DECL_NAME (fn1) == DECL_NAME (fn2)))
3340 break;
3341 }
c8094d83 3342
5a167978
GDR
3343 /* If we exhausted all of the functions in S1, FN2 is new. */
3344 if (!fns1)
3345 s1 = build_overload (fn2, s1);
3346 }
3347 return s1;
3348}
3349
3350/* This should return an error not all definitions define functions.
3351 It is not an error if we find two functions with exactly the
3352 same signature, only if these are selected in overload resolution.
3353 old is the current set of bindings, new the freshly-found binding.
3354 XXX Do we want to give *all* candidates in case of ambiguity?
3355 XXX In what way should I treat extern declarations?
3356 XXX I don't want to repeat the entire duplicate_decls here */
3357
15f8ac7f
GK
3358static void
3359ambiguous_decl (tree name, struct scope_binding *old, cxx_binding *new,
3360 int flags)
5a167978
GDR
3361{
3362 tree val, type;
50bc768d 3363 gcc_assert (old != NULL);
5a167978
GDR
3364 /* Copy the value. */
3365 val = new->value;
3366 if (val)
3367 switch (TREE_CODE (val))
3368 {
3369 case TEMPLATE_DECL:
0cbd7506
MS
3370 /* If we expect types or namespaces, and not templates,
3371 or this is not a template class. */
3372 if ((LOOKUP_QUALIFIERS_ONLY (flags)
bd3d082e
KL
3373 && !DECL_CLASS_TEMPLATE_P (val))
3374 || hidden_name_p (val))
0cbd7506
MS
3375 val = NULL_TREE;
3376 break;
5a167978 3377 case TYPE_DECL:
0cbd7506
MS
3378 if (LOOKUP_NAMESPACES_ONLY (flags) || hidden_name_p (val))
3379 val = NULL_TREE;
3380 break;
5a167978 3381 case NAMESPACE_DECL:
0cbd7506
MS
3382 if (LOOKUP_TYPES_ONLY (flags))
3383 val = NULL_TREE;
3384 break;
5a167978 3385 case FUNCTION_DECL:
0cbd7506
MS
3386 /* Ignore built-in functions that are still anticipated. */
3387 if (LOOKUP_QUALIFIERS_ONLY (flags) || hidden_name_p (val))
3388 val = NULL_TREE;
3389 break;
5a167978 3390 default:
0cbd7506
MS
3391 if (LOOKUP_QUALIFIERS_ONLY (flags))
3392 val = NULL_TREE;
5a167978 3393 }
c8094d83 3394
5a167978
GDR
3395 if (!old->value)
3396 old->value = val;
3397 else if (val && val != old->value)
3398 {
3399 if (is_overloaded_fn (old->value) && is_overloaded_fn (val))
0cbd7506 3400 old->value = merge_functions (old->value, val);
5a167978
GDR
3401 else
3402 {
91b1ca65
MM
3403 old->value = tree_cons (NULL_TREE, old->value,
3404 build_tree_list (NULL_TREE, new->value));
3405 TREE_TYPE (old->value) = error_mark_node;
5a167978
GDR
3406 }
3407 }
3408 /* ... and copy the type. */
3409 type = new->type;
3410 if (LOOKUP_NAMESPACES_ONLY (flags))
3411 type = NULL_TREE;
3412 if (!old->type)
3413 old->type = type;
3414 else if (type && old->type != type)
3415 {
3416 if (flags & LOOKUP_COMPLAIN)
0cbd7506
MS
3417 {
3418 error ("%qD denotes an ambiguous type",name);
3419 error ("%J first type here", TYPE_MAIN_DECL (old->type));
3420 error ("%J other type here", TYPE_MAIN_DECL (type));
3421 }
5a167978 3422 }
5a167978
GDR
3423}
3424
00e8de68
GDR
3425/* Return the declarations that are members of the namespace NS. */
3426
3427tree
3428cp_namespace_decls (tree ns)
3429{
3430 return NAMESPACE_LEVEL (ns)->names;
3431}
3432
3433/* Combine prefer_type and namespaces_only into flags. */
3434
3435static int
3436lookup_flags (int prefer_type, int namespaces_only)
3437{
3438 if (namespaces_only)
3439 return LOOKUP_PREFER_NAMESPACES;
3440 if (prefer_type > 1)
3441 return LOOKUP_PREFER_TYPES;
3442 if (prefer_type > 0)
3443 return LOOKUP_PREFER_BOTH;
3444 return 0;
3445}
3446
3447/* Given a lookup that returned VAL, use FLAGS to decide if we want to
bd3d082e
KL
3448 ignore it or not. Subroutine of lookup_name_real and
3449 lookup_type_scope. */
00e8de68 3450
bd3d082e 3451static bool
00e8de68
GDR
3452qualify_lookup (tree val, int flags)
3453{
3454 if (val == NULL_TREE)
bd3d082e 3455 return false;
00e8de68 3456 if ((flags & LOOKUP_PREFER_NAMESPACES) && TREE_CODE (val) == NAMESPACE_DECL)
bd3d082e 3457 return true;
00e8de68
GDR
3458 if ((flags & LOOKUP_PREFER_TYPES)
3459 && (TREE_CODE (val) == TYPE_DECL || TREE_CODE (val) == TEMPLATE_DECL))
bd3d082e 3460 return true;
00e8de68 3461 if (flags & (LOOKUP_PREFER_NAMESPACES | LOOKUP_PREFER_TYPES))
bd3d082e
KL
3462 return false;
3463 return true;
3464}
3465
c8094d83 3466/* Given a lookup that returned VAL, decide if we want to ignore it or
d63d5d0c 3467 not based on DECL_ANTICIPATED. */
bd3d082e
KL
3468
3469bool
3470hidden_name_p (tree val)
3471{
3472 if (DECL_P (val)
3473 && DECL_LANG_SPECIFIC (val)
3474 && DECL_ANTICIPATED (val))
3475 return true;
3476 return false;
00e8de68
GDR
3477}
3478
d63d5d0c
ILT
3479/* Remove any hidden friend functions from a possibly overloaded set
3480 of functions. */
3481
3482tree
3483remove_hidden_names (tree fns)
3484{
3485 if (!fns)
3486 return fns;
3487
3488 if (TREE_CODE (fns) == FUNCTION_DECL && hidden_name_p (fns))
3489 fns = NULL_TREE;
3490 else if (TREE_CODE (fns) == OVERLOAD)
3491 {
3492 tree o;
3493
3494 for (o = fns; o; o = OVL_NEXT (o))
3495 if (hidden_name_p (OVL_CURRENT (o)))
3496 break;
3497 if (o)
3498 {
3499 tree n = NULL_TREE;
3500
3501 for (o = fns; o; o = OVL_NEXT (o))
3502 if (!hidden_name_p (OVL_CURRENT (o)))
3503 n = build_overload (OVL_CURRENT (o), n);
3504 fns = n;
3505 }
3506 }
3507
3508 return fns;
3509}
3510
00e8de68
GDR
3511/* Look up NAME in the NAMESPACE. */
3512
3513tree
3514lookup_namespace_name (tree namespace, tree name)
3515{
3516 tree val;
3517 tree template_id = NULL_TREE;
15f8ac7f 3518 struct scope_binding binding = EMPTY_SCOPE_BINDING;
00e8de68
GDR
3519
3520 timevar_push (TV_NAME_LOOKUP);
50bc768d 3521 gcc_assert (TREE_CODE (namespace) == NAMESPACE_DECL);
00e8de68
GDR
3522
3523 if (TREE_CODE (name) == NAMESPACE_DECL)
3524 /* This happens for A::B<int> when B is a namespace. */
3525 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, name);
3526 else if (TREE_CODE (name) == TEMPLATE_DECL)
3527 {
3528 /* This happens for A::B where B is a template, and there are no
3529 template arguments. */
2a13a625 3530 error ("invalid use of %qD", name);
00e8de68
GDR
3531 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
3532 }
3533
3534 namespace = ORIGINAL_NAMESPACE (namespace);
3535
3536 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3537 {
3538 template_id = name;
3539 name = TREE_OPERAND (name, 0);
3540 if (TREE_CODE (name) == OVERLOAD)
3541 name = DECL_NAME (OVL_CURRENT (name));
3542 else if (DECL_P (name))
3543 name = DECL_NAME (name);
3544 }
3545
50bc768d 3546 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
00e8de68 3547
00e8de68
GDR
3548 if (!qualified_lookup_using_namespace (name, namespace, &binding, 0))
3549 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
3550
3551 if (binding.value)
3552 {
3553 val = binding.value;
3554
3555 if (template_id)
3556 {
3557 if (DECL_CLASS_TEMPLATE_P (val))
3558 val = lookup_template_class (val,
3559 TREE_OPERAND (template_id, 1),
3560 /*in_decl=*/NULL_TREE,
3561 /*context=*/NULL_TREE,
3562 /*entering_scope=*/0,
0cbd7506 3563 tf_error | tf_warning);
00e8de68
GDR
3564 else if (DECL_FUNCTION_TEMPLATE_P (val)
3565 || TREE_CODE (val) == OVERLOAD)
3566 val = lookup_template_function (val,
3567 TREE_OPERAND (template_id, 1));
3568 else
3569 {
2a13a625 3570 error ("%<%D::%D%> is not a template", namespace, name);
00e8de68
GDR
3571 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
3572 }
3573 }
3574
3575 /* If we have a single function from a using decl, pull it out. */
3576 if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
3577 val = OVL_FUNCTION (val);
3578
bd3d082e
KL
3579 /* Ignore built-in functions and friends that haven't been declared
3580 yet. */
3581 if (!val || !hidden_name_p (val))
0cbd7506 3582 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, val);
00e8de68
GDR
3583 }
3584
2a13a625 3585 error ("%qD undeclared in namespace %qD", name, namespace);
00e8de68
GDR
3586 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
3587}
3588
3589/* Select the right _DECL from multiple choices. */
3590
3591static tree
15f8ac7f 3592select_decl (const struct scope_binding *binding, int flags)
00e8de68
GDR
3593{
3594 tree val;
3595 val = binding->value;
3596
3597 timevar_push (TV_NAME_LOOKUP);
3598 if (LOOKUP_NAMESPACES_ONLY (flags))
3599 {
3600 /* We are not interested in types. */
91b1ca65
MM
3601 if (val && (TREE_CODE (val) == NAMESPACE_DECL
3602 || TREE_CODE (val) == TREE_LIST))
0cbd7506 3603 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, val);
00e8de68
GDR
3604 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
3605 }
3606
3607 /* If looking for a type, or if there is no non-type binding, select
3608 the value binding. */
3609 if (binding->type && (!val || (flags & LOOKUP_PREFER_TYPES)))
3610 val = binding->type;
3611 /* Don't return non-types if we really prefer types. */
c8094d83 3612 else if (val && LOOKUP_TYPES_ONLY (flags)
15f8ac7f 3613 && ! DECL_DECLARES_TYPE_P (val))
00e8de68
GDR
3614 val = NULL_TREE;
3615
3616 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, val);
3617}
3618
3619/* Unscoped lookup of a global: iterate over current namespaces,
543ebd4a 3620 considering using-directives. */
00e8de68 3621
a5e6b29b 3622static tree
543ebd4a 3623unqualified_namespace_lookup (tree name, int flags)
00e8de68
GDR
3624{
3625 tree initial = current_decl_namespace ();
3626 tree scope = initial;
3627 tree siter;
3628 struct cp_binding_level *level;
3629 tree val = NULL_TREE;
15f8ac7f 3630 struct scope_binding binding = EMPTY_SCOPE_BINDING;
00e8de68
GDR
3631
3632 timevar_push (TV_NAME_LOOKUP);
00e8de68
GDR
3633
3634 for (; !val; scope = CP_DECL_CONTEXT (scope))
3635 {
3636 cxx_binding *b =
0cbd7506 3637 cxx_scope_find_binding_for_name (NAMESPACE_LEVEL (scope), name);
00e8de68 3638
ba18e4db
MM
3639 if (b)
3640 {
bd3d082e
KL
3641 if (b->value && hidden_name_p (b->value))
3642 /* Ignore anticipated built-in functions and friends. */
ba18e4db
MM
3643 ;
3644 else
3645 binding.value = b->value;
3646 binding.type = b->type;
3647 }
00e8de68
GDR
3648
3649 /* Add all _DECLs seen through local using-directives. */
3650 for (level = current_binding_level;
3651 level->kind != sk_namespace;
3652 level = level->level_chain)
3653 if (!lookup_using_namespace (name, &binding, level->using_directives,
0cbd7506 3654 scope, flags))
00e8de68
GDR
3655 /* Give up because of error. */
3656 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
3657
3658 /* Add all _DECLs seen through global using-directives. */
3659 /* XXX local and global using lists should work equally. */
3660 siter = initial;
3661 while (1)
3662 {
3663 if (!lookup_using_namespace (name, &binding,
0cbd7506 3664 DECL_NAMESPACE_USING (siter),
543ebd4a 3665 scope, flags))
00e8de68
GDR
3666 /* Give up because of error. */
3667 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
3668 if (siter == scope) break;
3669 siter = CP_DECL_CONTEXT (siter);
3670 }
3671
3672 val = select_decl (&binding, flags);
3673 if (scope == global_namespace)
3674 break;
3675 }
3676 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, val);
3677}
3678
3679/* Look up NAME (an IDENTIFIER_NODE) in SCOPE (either a NAMESPACE_DECL
3680 or a class TYPE). If IS_TYPE_P is TRUE, then ignore non-type
c8094d83 3681 bindings.
00e8de68
GDR
3682
3683 Returns a DECL (or OVERLOAD, or BASELINK) representing the
3684 declaration found. If no suitable declaration can be found,
8f78f01f 3685 ERROR_MARK_NODE is returned. If COMPLAIN is true and SCOPE is
00e8de68
GDR
3686 neither a class-type nor a namespace a diagnostic is issued. */
3687
3688tree
3689lookup_qualified_name (tree scope, tree name, bool is_type_p, bool complain)
3690{
3691 int flags = 0;
3692
3693 if (TREE_CODE (scope) == NAMESPACE_DECL)
3694 {
15f8ac7f 3695 struct scope_binding binding = EMPTY_SCOPE_BINDING;
00e8de68 3696
00e8de68
GDR
3697 flags |= LOOKUP_COMPLAIN;
3698 if (is_type_p)
3699 flags |= LOOKUP_PREFER_TYPES;
543ebd4a 3700 if (qualified_lookup_using_namespace (name, scope, &binding, flags))
00e8de68
GDR
3701 return select_decl (&binding, flags);
3702 }
3703 else if (is_aggr_type (scope, complain))
3704 {
3705 tree t;
8f78f01f 3706 t = lookup_member (scope, name, 2, is_type_p);
00e8de68
GDR
3707 if (t)
3708 return t;
3709 }
3710
3711 return error_mark_node;
3712}
3713
cd0be382 3714/* Subroutine of unqualified_namespace_lookup:
5a167978
GDR
3715 Add the bindings of NAME in used namespaces to VAL.
3716 We are currently looking for names in namespace SCOPE, so we
3717 look through USINGS for using-directives of namespaces
3718 which have SCOPE as a common ancestor with the current scope.
3719 Returns false on errors. */
3720
a5e6b29b 3721static bool
15f8ac7f
GK
3722lookup_using_namespace (tree name, struct scope_binding *val,
3723 tree usings, tree scope, int flags)
5a167978
GDR
3724{
3725 tree iter;
3726 timevar_push (TV_NAME_LOOKUP);
3727 /* Iterate over all used namespaces in current, searching for using
3728 directives of scope. */
3729 for (iter = usings; iter; iter = TREE_CHAIN (iter))
3730 if (TREE_VALUE (iter) == scope)
3731 {
0cbd7506
MS
3732 tree used = ORIGINAL_NAMESPACE (TREE_PURPOSE (iter));
3733 cxx_binding *val1 =
3734 cxx_scope_find_binding_for_name (NAMESPACE_LEVEL (used), name);
3735 /* Resolve ambiguities. */
3736 if (val1)
3737 ambiguous_decl (name, val, val1, flags);
5a167978
GDR
3738 }
3739 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, val->value != error_mark_node);
3740}
3741
3742/* [namespace.qual]
3743 Accepts the NAME to lookup and its qualifying SCOPE.
3744 Returns the name/type pair found into the cxx_binding *RESULT,
3745 or false on error. */
3746
a5e6b29b 3747static bool
15f8ac7f
GK
3748qualified_lookup_using_namespace (tree name, tree scope,
3749 struct scope_binding *result, int flags)
5a167978
GDR
3750{
3751 /* Maintain a list of namespaces visited... */
3752 tree seen = NULL_TREE;
3753 /* ... and a list of namespace yet to see. */
3754 tree todo = NULL_TREE;
dc55c941 3755 tree todo_maybe = NULL_TREE;
5a167978
GDR
3756 tree usings;
3757 timevar_push (TV_NAME_LOOKUP);
3758 /* Look through namespace aliases. */
3759 scope = ORIGINAL_NAMESPACE (scope);
3760 while (scope && result->value != error_mark_node)
3761 {
3762 cxx_binding *binding =
dc55c941 3763 cxx_scope_find_binding_for_name (NAMESPACE_LEVEL (scope), name);
5a167978
GDR
3764 seen = tree_cons (scope, NULL_TREE, seen);
3765 if (binding)
0cbd7506 3766 ambiguous_decl (name, result, binding, flags);
c404ab02
AO
3767
3768 /* Consider strong using directives always, and non-strong ones
3769 if we haven't found a binding yet. ??? Shouldn't we consider
3770 non-strong ones if the initial RESULT is non-NULL, but the
3771 binding in the given namespace is? */
3772 for (usings = DECL_NAMESPACE_USING (scope); usings;
3773 usings = TREE_CHAIN (usings))
3774 /* If this was a real directive, and we have not seen it. */
dc55c941
AO
3775 if (!TREE_INDIRECT_USING (usings))
3776 {
3777 /* Try to avoid queuing the same namespace more than once,
3778 the exception being when a namespace was already
3779 enqueued for todo_maybe and then a strong using is
3780 found for it. We could try to remove it from
3781 todo_maybe, but it's probably not worth the effort. */
3782 if (is_associated_namespace (scope, TREE_PURPOSE (usings))
3783 && !purpose_member (TREE_PURPOSE (usings), seen)
3784 && !purpose_member (TREE_PURPOSE (usings), todo))
3785 todo = tree_cons (TREE_PURPOSE (usings), NULL_TREE, todo);
3786 else if ((!result->value && !result->type)
3787 && !purpose_member (TREE_PURPOSE (usings), seen)
3788 && !purpose_member (TREE_PURPOSE (usings), todo)
3789 && !purpose_member (TREE_PURPOSE (usings), todo_maybe))
3790 todo_maybe = tree_cons (TREE_PURPOSE (usings), NULL_TREE,
3791 todo_maybe);
3792 }
5a167978
GDR
3793 if (todo)
3794 {
3795 scope = TREE_PURPOSE (todo);
3796 todo = TREE_CHAIN (todo);
3797 }
dc55c941
AO
3798 else if (todo_maybe
3799 && (!result->value && !result->type))
3800 {
3801 scope = TREE_PURPOSE (todo_maybe);
3802 todo = TREE_CHAIN (todo_maybe);
3803 todo_maybe = NULL_TREE;
3804 }
5a167978
GDR
3805 else
3806 scope = NULL_TREE; /* If there never was a todo list. */
3807 }
3808 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, result->value != error_mark_node);
3809}
3810
90ea9897
MM
3811/* Return the innermost non-namespace binding for NAME from a scope
3812 containing BINDING, or, if BINDING is NULL, the current scope. If
3813 CLASS_P is false, then class bindings are ignored. */
3814
3815cxx_binding *
c8094d83 3816outer_binding (tree name,
90ea9897
MM
3817 cxx_binding *binding,
3818 bool class_p)
3819{
3820 cxx_binding *outer;
3821 cxx_scope *scope;
3822 cxx_scope *outer_scope;
3823
3824 if (binding)
3825 {
3826 scope = binding->scope->level_chain;
3827 outer = binding->previous;
3828 }
3829 else
3830 {
3831 scope = current_binding_level;
3832 outer = IDENTIFIER_BINDING (name);
3833 }
3834 outer_scope = outer ? outer->scope : NULL;
3835
3836 /* Because we create class bindings lazily, we might be missing a
3837 class binding for NAME. If there are any class binding levels
3838 between the LAST_BINDING_LEVEL and the scope in which OUTER was
3839 declared, we must lookup NAME in those class scopes. */
3840 if (class_p)
3841 while (scope && scope != outer_scope && scope->kind != sk_namespace)
3842 {
c8094d83 3843 if (scope->kind == sk_class)
90ea9897
MM
3844 {
3845 cxx_binding *class_binding;
c8094d83 3846
90ea9897
MM
3847 class_binding = get_class_binding (name, scope);
3848 if (class_binding)
3849 {
3850 /* Thread this new class-scope binding onto the
3851 IDENTIFIER_BINDING list so that future lookups
3852 find it quickly. */
3853 class_binding->previous = outer;
3854 if (binding)
3855 binding->previous = class_binding;
3856 else
3857 IDENTIFIER_BINDING (name) = class_binding;
3858 return class_binding;
3859 }
3860 }
3861 scope = scope->level_chain;
3862 }
3863
3864 return outer;
3865}
3866
3867/* Return the innermost block-scope or class-scope value binding for
3868 NAME, or NULL_TREE if there is no such binding. */
3869
3870tree
3871innermost_non_namespace_value (tree name)
3872{
3873 cxx_binding *binding;
3874 binding = outer_binding (name, /*binding=*/NULL, /*class_p=*/true);
3875 return binding ? binding->value : NULL_TREE;
3876}
3877
00e8de68
GDR
3878/* Look up NAME in the current binding level and its superiors in the
3879 namespace of variables, functions and typedefs. Return a ..._DECL
3880 node of some kind representing its definition if there is only one
3881 such declaration, or return a TREE_LIST with all the overloaded
3882 definitions if there are many, or return 0 if it is undefined.
bd3d082e
KL
3883 Hidden name, either friend declaration or built-in function, are
3884 not ignored.
00e8de68
GDR
3885
3886 If PREFER_TYPE is > 0, we prefer TYPE_DECLs or namespaces.
3887 If PREFER_TYPE is > 1, we reject non-type decls (e.g. namespaces).
3888 Otherwise we prefer non-TYPE_DECLs.
3889
39fb05d0
MM
3890 If NONCLASS is nonzero, bindings in class scopes are ignored. If
3891 BLOCK_P is false, bindings in block scopes are ignored. */
00e8de68
GDR
3892
3893tree
12cf89fa 3894lookup_name_real (tree name, int prefer_type, int nonclass, bool block_p,
00e8de68
GDR
3895 int namespaces_only, int flags)
3896{
3897 cxx_binding *iter;
3898 tree val = NULL_TREE;
3899
3900 timevar_push (TV_NAME_LOOKUP);
3901 /* Conversion operators are handled specially because ordinary
3902 unqualified name lookup will not find template conversion
3903 operators. */
c8094d83 3904 if (IDENTIFIER_TYPENAME_P (name))
00e8de68
GDR
3905 {
3906 struct cp_binding_level *level;
3907
c8094d83 3908 for (level = current_binding_level;
00e8de68
GDR
3909 level && level->kind != sk_namespace;
3910 level = level->level_chain)
3911 {
3912 tree class_type;
3913 tree operators;
c8094d83
MS
3914
3915 /* A conversion operator can only be declared in a class
00e8de68
GDR
3916 scope. */
3917 if (level->kind != sk_class)
3918 continue;
c8094d83 3919
00e8de68
GDR
3920 /* Lookup the conversion operator in the class. */
3921 class_type = level->this_entity;
3922 operators = lookup_fnfields (class_type, name, /*protect=*/0);
3923 if (operators)
3924 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, operators);
3925 }
3926
3927 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
3928 }
3929
3930 flags |= lookup_flags (prefer_type, namespaces_only);
3931
3932 /* First, look in non-namespace scopes. */
3933
3934 if (current_class_type == NULL_TREE)
3935 nonclass = 1;
3936
12cf89fa 3937 if (block_p || !nonclass)
90ea9897
MM
3938 for (iter = outer_binding (name, NULL, !nonclass);
3939 iter;
3940 iter = outer_binding (name, iter, !nonclass))
12cf89fa
MM
3941 {
3942 tree binding;
c8094d83 3943
12cf89fa
MM
3944 /* Skip entities we don't want. */
3945 if (LOCAL_BINDING_P (iter) ? !block_p : nonclass)
3946 continue;
c8094d83 3947
12cf89fa 3948 /* If this is the kind of thing we're looking for, we're done. */
bd3d082e
KL
3949 if (qualify_lookup (iter->value, flags)
3950 && !hidden_name_p (iter->value))
12cf89fa
MM
3951 binding = iter->value;
3952 else if ((flags & LOOKUP_PREFER_TYPES)
bd3d082e
KL
3953 && qualify_lookup (iter->type, flags)
3954 && !hidden_name_p (iter->type))
12cf89fa
MM
3955 binding = iter->type;
3956 else
3957 binding = NULL_TREE;
c8094d83 3958
12cf89fa
MM
3959 if (binding)
3960 {
3961 val = binding;
3962 break;
3963 }
3964 }
00e8de68
GDR
3965
3966 /* Now lookup in namespace scopes. */
3967 if (!val)
29ef83de 3968 val = unqualified_namespace_lookup (name, flags);
00e8de68
GDR
3969
3970 if (val)
3971 {
3972 /* If we have a single function from a using decl, pull it out. */
3973 if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
3974 val = OVL_FUNCTION (val);
3975 }
3976
3977 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, val);
3978}
3979
3980tree
3981lookup_name_nonclass (tree name)
3982{
12cf89fa 3983 return lookup_name_real (name, 0, 1, /*block_p=*/true, 0, LOOKUP_COMPLAIN);
00e8de68
GDR
3984}
3985
3986tree
12cf89fa 3987lookup_function_nonclass (tree name, tree args, bool block_p)
00e8de68 3988{
c8094d83
MS
3989 return
3990 lookup_arg_dependent (name,
3991 lookup_name_real (name, 0, 1, block_p, 0,
12cf89fa
MM
3992 LOOKUP_COMPLAIN),
3993 args);
00e8de68
GDR
3994}
3995
3996tree
3997lookup_name (tree name, int prefer_type)
3998{
c8094d83 3999 return lookup_name_real (name, prefer_type, 0, /*block_p=*/true,
12cf89fa 4000 0, LOOKUP_COMPLAIN);
00e8de68
GDR
4001}
4002
461c6fce 4003/* Look up NAME for type used in elaborated name specifier in
29ef83de 4004 the scopes given by SCOPE. SCOPE can be either TS_CURRENT or
87c465f5
KL
4005 TS_WITHIN_ENCLOSING_NON_CLASS. Although not implied by the
4006 name, more scopes are checked if cleanup or template parameter
4007 scope is encountered.
29ef83de
KL
4008
4009 Unlike lookup_name_real, we make sure that NAME is actually
87c465f5
KL
4010 declared in the desired scope, not from inheritance, nor using
4011 directive. For using declaration, there is DR138 still waiting
13a44ee0 4012 to be resolved. Hidden name coming from an earlier friend
bd3d082e 4013 declaration is also returned.
87c465f5
KL
4014
4015 A TYPE_DECL best matching the NAME is returned. Catching error
4016 and issuing diagnostics are caller's responsibility. */
461c6fce
KL
4017
4018tree
29ef83de 4019lookup_type_scope (tree name, tag_scope scope)
461c6fce
KL
4020{
4021 cxx_binding *iter = NULL;
4022 tree val = NULL_TREE;
4023
4024 timevar_push (TV_NAME_LOOKUP);
4025
4026 /* Look in non-namespace scope first. */
4027 if (current_binding_level->kind != sk_namespace)
4028 iter = outer_binding (name, NULL, /*class_p=*/ true);
4029 for (; iter; iter = outer_binding (name, iter, /*class_p=*/ true))
4030 {
4031 /* Check if this is the kind of thing we're looking for.
c8094d83 4032 If SCOPE is TS_CURRENT, also make sure it doesn't come from
29ef83de 4033 base class. For ITER->VALUE, we can simply use
c8094d83 4034 INHERITED_VALUE_BINDING_P. For ITER->TYPE, we have to use
29ef83de 4035 our own check.
461c6fce
KL
4036
4037 We check ITER->TYPE before ITER->VALUE in order to handle
4038 typedef struct C {} C;
4039 correctly. */
4040
4041 if (qualify_lookup (iter->type, LOOKUP_PREFER_TYPES)
29ef83de
KL
4042 && (scope != ts_current
4043 || LOCAL_BINDING_P (iter)
461c6fce
KL
4044 || DECL_CONTEXT (iter->type) == iter->scope->this_entity))
4045 val = iter->type;
29ef83de
KL
4046 else if ((scope != ts_current
4047 || !INHERITED_VALUE_BINDING_P (iter))
461c6fce
KL
4048 && qualify_lookup (iter->value, LOOKUP_PREFER_TYPES))
4049 val = iter->value;
4050
4051 if (val)
4052 break;
4053 }
4054
4055 /* Look in namespace scope. */
4056 if (!val)
4057 {
4058 iter = cxx_scope_find_binding_for_name
4059 (NAMESPACE_LEVEL (current_decl_namespace ()), name);
4060
4061 if (iter)
4062 {
bd3d082e 4063 /* If this is the kind of thing we're looking for, we're done. */
87c465f5 4064 if (qualify_lookup (iter->type, LOOKUP_PREFER_TYPES))
461c6fce 4065 val = iter->type;
87c465f5 4066 else if (qualify_lookup (iter->value, LOOKUP_PREFER_TYPES))
461c6fce
KL
4067 val = iter->value;
4068 }
c8094d83 4069
461c6fce
KL
4070 }
4071
29ef83de 4072 /* Type found, check if it is in the allowed scopes, ignoring cleanup
461c6fce
KL
4073 and template parameter scopes. */
4074 if (val)
4075 {
4076 struct cp_binding_level *b = current_binding_level;
4077 while (b)
4078 {
4079 if (iter->scope == b)
4080 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, val);
4081
4082 if (b->kind == sk_cleanup || b->kind == sk_template_parms)
4083 b = b->level_chain;
29ef83de
KL
4084 else if (b->kind == sk_class
4085 && scope == ts_within_enclosing_non_class)
4086 b = b->level_chain;
461c6fce
KL
4087 else
4088 break;
4089 }
4090 }
4091
4092 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
4093}
4094
00e8de68
GDR
4095/* Similar to `lookup_name' but look only in the innermost non-class
4096 binding level. */
4097
a5e6b29b 4098static tree
461c6fce 4099lookup_name_innermost_nonclass_level (tree name)
00e8de68
GDR
4100{
4101 struct cp_binding_level *b;
4102 tree t = NULL_TREE;
4103
4104 timevar_push (TV_NAME_LOOKUP);
4105 b = innermost_nonclass_level ();
4106
4107 if (b->kind == sk_namespace)
4108 {
4109 t = IDENTIFIER_NAMESPACE_VALUE (name);
4110
4111 /* extern "C" function() */
4112 if (t != NULL_TREE && TREE_CODE (t) == TREE_LIST)
4113 t = TREE_VALUE (t);
4114 }
4115 else if (IDENTIFIER_BINDING (name)
4116 && LOCAL_BINDING_P (IDENTIFIER_BINDING (name)))
4117 {
90ea9897
MM
4118 cxx_binding *binding;
4119 binding = IDENTIFIER_BINDING (name);
00e8de68
GDR
4120 while (1)
4121 {
90ea9897
MM
4122 if (binding->scope == b
4123 && !(TREE_CODE (binding->value) == VAR_DECL
4124 && DECL_DEAD_FOR_LOCAL (binding->value)))
4125 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, binding->value);
00e8de68
GDR
4126
4127 if (b->kind == sk_cleanup)
4128 b = b->level_chain;
4129 else
4130 break;
4131 }
4132 }
4133
4134 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
4135}
4136
461c6fce 4137/* Like lookup_name_innermost_nonclass_level, but for types. */
00e8de68 4138
a5e6b29b 4139static tree
00e8de68
GDR
4140lookup_type_current_level (tree name)
4141{
926ce8bd 4142 tree t = NULL_TREE;
00e8de68
GDR
4143
4144 timevar_push (TV_NAME_LOOKUP);
50bc768d 4145 gcc_assert (current_binding_level->kind != sk_namespace);
00e8de68
GDR
4146
4147 if (REAL_IDENTIFIER_TYPE_VALUE (name) != NULL_TREE
4148 && REAL_IDENTIFIER_TYPE_VALUE (name) != global_type_node)
4149 {
4150 struct cp_binding_level *b = current_binding_level;
4151 while (1)
4152 {
4153 if (purpose_member (name, b->type_shadowed))
4154 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP,
0cbd7506 4155 REAL_IDENTIFIER_TYPE_VALUE (name));
00e8de68
GDR
4156 if (b->kind == sk_cleanup)
4157 b = b->level_chain;
4158 else
4159 break;
4160 }
4161 }
4162
4163 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
4164}
4165
5a167978
GDR
4166/* [basic.lookup.koenig] */
4167/* A nonzero return value in the functions below indicates an error. */
4168
4169struct arg_lookup
4170{
4171 tree name;
d63d5d0c 4172 tree args;
5a167978
GDR
4173 tree namespaces;
4174 tree classes;
4175 tree functions;
4176};
4177
4178static bool arg_assoc (struct arg_lookup*, tree);
4179static bool arg_assoc_args (struct arg_lookup*, tree);
4180static bool arg_assoc_type (struct arg_lookup*, tree);
4181static bool add_function (struct arg_lookup *, tree);
4182static bool arg_assoc_namespace (struct arg_lookup *, tree);
4183static bool arg_assoc_class (struct arg_lookup *, tree);
4184static bool arg_assoc_template_arg (struct arg_lookup*, tree);
4185
4186/* Add a function to the lookup structure.
4187 Returns true on error. */
4188
4189static bool
4190add_function (struct arg_lookup *k, tree fn)
4191{
4192 /* We used to check here to see if the function was already in the list,
4193 but that's O(n^2), which is just too expensive for function lookup.
4194 Now we deal with the occasional duplicate in joust. In doing this, we
4195 assume that the number of duplicates will be small compared to the
4196 total number of functions being compared, which should usually be the
4197 case. */
4198
4199 /* We must find only functions, or exactly one non-function. */
c8094d83 4200 if (!k->functions)
5a167978
GDR
4201 k->functions = fn;
4202 else if (fn == k->functions)
4203 ;
4204 else if (is_overloaded_fn (k->functions) && is_overloaded_fn (fn))
4205 k->functions = build_overload (fn, k->functions);
4206 else
4207 {
4208 tree f1 = OVL_CURRENT (k->functions);
4209 tree f2 = fn;
4210 if (is_overloaded_fn (f1))
4211 {
4212 fn = f1; f1 = f2; f2 = fn;
4213 }
dee15844
JM
4214 error ("%q+D is not a function,", f1);
4215 error (" conflict with %q+D", f2);
2a13a625 4216 error (" in call to %qD", k->name);
5a167978
GDR
4217 return true;
4218 }
4219
4220 return false;
4221}
4222
86098eb8
JM
4223/* Returns true iff CURRENT has declared itself to be an associated
4224 namespace of SCOPE via a strong using-directive (or transitive chain
4225 thereof). Both are namespaces. */
4226
4227bool
4228is_associated_namespace (tree current, tree scope)
4229{
4230 tree seen = NULL_TREE;
4231 tree todo = NULL_TREE;
4232 tree t;
4233 while (1)
4234 {
4235 if (scope == current)
4236 return true;
4237 seen = tree_cons (scope, NULL_TREE, seen);
4238 for (t = DECL_NAMESPACE_ASSOCIATIONS (scope); t; t = TREE_CHAIN (t))
4239 if (!purpose_member (TREE_PURPOSE (t), seen))
4240 todo = tree_cons (TREE_PURPOSE (t), NULL_TREE, todo);
4241 if (todo)
4242 {
4243 scope = TREE_PURPOSE (todo);
4244 todo = TREE_CHAIN (todo);
4245 }
4246 else
4247 return false;
4248 }
4249}
4250
d63d5d0c
ILT
4251/* Return whether FN is a friend of an associated class of ARG. */
4252
4253static bool
4254friend_of_associated_class_p (tree arg, tree fn)
4255{
4256 tree type;
4257
4258 if (TYPE_P (arg))
4259 type = arg;
4260 else if (type_unknown_p (arg))
4261 return false;
4262 else
4263 type = TREE_TYPE (arg);
4264
4265 /* If TYPE is a class, the class itself and all base classes are
4266 associated classes. */
4267 if (CLASS_TYPE_P (type))
4268 {
4269 if (is_friend (type, fn))
4270 return true;
4271
4272 if (TYPE_BINFO (type))
4273 {
4274 tree binfo, base_binfo;
4275 int i;
4276
4277 for (binfo = TYPE_BINFO (type), i = 0;
4278 BINFO_BASE_ITERATE (binfo, i, base_binfo);
4279 i++)
4280 if (is_friend (BINFO_TYPE (base_binfo), fn))
4281 return true;
4282 }
4283 }
4284
4285 /* If TYPE is a class member, the class of which it is a member is
4286 an associated class. */
4287 if ((CLASS_TYPE_P (type)
4288 || TREE_CODE (type) == UNION_TYPE
4289 || TREE_CODE (type) == ENUMERAL_TYPE)
4290 && TYPE_CONTEXT (type)
4291 && CLASS_TYPE_P (TYPE_CONTEXT (type))
4292 && is_friend (TYPE_CONTEXT (type), fn))
4293 return true;
4294
4295 return false;
4296}
4297
5a167978
GDR
4298/* Add functions of a namespace to the lookup structure.
4299 Returns true on error. */
4300
4301static bool
4302arg_assoc_namespace (struct arg_lookup *k, tree scope)
4303{
4304 tree value;
4305
4306 if (purpose_member (scope, k->namespaces))
4307 return 0;
4308 k->namespaces = tree_cons (scope, NULL_TREE, k->namespaces);
86098eb8
JM
4309
4310 /* Check out our super-users. */
4311 for (value = DECL_NAMESPACE_ASSOCIATIONS (scope); value;
4312 value = TREE_CHAIN (value))
4313 if (arg_assoc_namespace (k, TREE_PURPOSE (value)))
4314 return true;
c8094d83 4315
5a167978
GDR
4316 value = namespace_binding (k->name, scope);
4317 if (!value)
4318 return false;
4319
4320 for (; value; value = OVL_NEXT (value))
d63d5d0c
ILT
4321 {
4322 /* We don't want to find arbitrary hidden functions via argument
4323 dependent lookup. We only want to find friends of associated
4324 classes. */
4325 if (hidden_name_p (OVL_CURRENT (value)))
4326 {
4327 tree args;
4328
4329 for (args = k->args; args; args = TREE_CHAIN (args))
4330 if (friend_of_associated_class_p (TREE_VALUE (args),
4331 OVL_CURRENT (value)))
4332 break;
4333 if (!args)
4334 continue;
4335 }
4336
4337 if (add_function (k, OVL_CURRENT (value)))
4338 return true;
4339 }
c8094d83 4340
5a167978
GDR
4341 return false;
4342}
4343
4344/* Adds everything associated with a template argument to the lookup
4345 structure. Returns true on error. */
4346
4347static bool
4348arg_assoc_template_arg (struct arg_lookup *k, tree arg)
4349{
4350 /* [basic.lookup.koenig]
4351
4352 If T is a template-id, its associated namespaces and classes are
4353 ... the namespaces and classes associated with the types of the
4354 template arguments provided for template type parameters
4355 (excluding template template parameters); the namespaces in which
4356 any template template arguments are defined; and the classes in
4357 which any member templates used as template template arguments
4358 are defined. [Note: non-type template arguments do not
4359 contribute to the set of associated namespaces. ] */
4360
4361 /* Consider first template template arguments. */
4362 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
4363 || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE)
4364 return false;
4365 else if (TREE_CODE (arg) == TEMPLATE_DECL)
4366 {
4367 tree ctx = CP_DECL_CONTEXT (arg);
4368
4369 /* It's not a member template. */
4370 if (TREE_CODE (ctx) == NAMESPACE_DECL)
0cbd7506 4371 return arg_assoc_namespace (k, ctx);
5a167978 4372 /* Otherwise, it must be member template. */
c8094d83 4373 else
0cbd7506 4374 return arg_assoc_class (k, ctx);
5a167978
GDR
4375 }
4376 /* It's not a template template argument, but it is a type template
4377 argument. */
4378 else if (TYPE_P (arg))
4379 return arg_assoc_type (k, arg);
4380 /* It's a non-type template argument. */
4381 else
4382 return false;
4383}
4384
4385/* Adds everything associated with class to the lookup structure.
4386 Returns true on error. */
4387
4388static bool
4389arg_assoc_class (struct arg_lookup *k, tree type)
4390{
4391 tree list, friends, context;
4392 int i;
c8094d83 4393
5a167978
GDR
4394 /* Backend build structures, such as __builtin_va_list, aren't
4395 affected by all this. */
4396 if (!CLASS_TYPE_P (type))
4397 return false;
4398
4399 if (purpose_member (type, k->classes))
4400 return false;
4401 k->classes = tree_cons (type, NULL_TREE, k->classes);
c8094d83 4402
b1cc95ce 4403 context = decl_namespace_context (type);
5a167978
GDR
4404 if (arg_assoc_namespace (k, context))
4405 return true;
ccb14335
NS
4406
4407 if (TYPE_BINFO (type))
fa743e8c
NS
4408 {
4409 /* Process baseclasses. */
4410 tree binfo, base_binfo;
c8094d83 4411
fa743e8c
NS
4412 for (binfo = TYPE_BINFO (type), i = 0;
4413 BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
4414 if (arg_assoc_class (k, BINFO_TYPE (base_binfo)))
4415 return true;
4416 }
c8094d83 4417
5a167978 4418 /* Process friends. */
c8094d83 4419 for (list = DECL_FRIENDLIST (TYPE_MAIN_DECL (type)); list;
5a167978
GDR
4420 list = TREE_CHAIN (list))
4421 if (k->name == FRIEND_NAME (list))
c8094d83 4422 for (friends = FRIEND_DECLS (list); friends;
5a167978 4423 friends = TREE_CHAIN (friends))
c8b2e872
MM
4424 {
4425 tree fn = TREE_VALUE (friends);
4426
4427 /* Only interested in global functions with potentially hidden
4428 (i.e. unqualified) declarations. */
4429 if (CP_DECL_CONTEXT (fn) != context)
4430 continue;
4431 /* Template specializations are never found by name lookup.
4432 (Templates themselves can be found, but not template
4433 specializations.) */
4434 if (TREE_CODE (fn) == FUNCTION_DECL && DECL_USE_TEMPLATE (fn))
4435 continue;
4436 if (add_function (k, fn))
5a167978 4437 return true;
c8b2e872 4438 }
5a167978
GDR
4439
4440 /* Process template arguments. */
c8094d83 4441 if (CLASSTYPE_TEMPLATE_INFO (type)
146d3c99 4442 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (type)))
5a167978
GDR
4443 {
4444 list = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
c8094d83 4445 for (i = 0; i < TREE_VEC_LENGTH (list); ++i)
0cbd7506 4446 arg_assoc_template_arg (k, TREE_VEC_ELT (list, i));
5a167978
GDR
4447 }
4448
4449 return false;
4450}
4451
4452/* Adds everything associated with a given type.
4453 Returns 1 on error. */
4454
4455static bool
4456arg_assoc_type (struct arg_lookup *k, tree type)
4457{
4458 /* As we do not get the type of non-type dependent expressions
4459 right, we can end up with such things without a type. */
4460 if (!type)
4461 return false;
4462
4463 if (TYPE_PTRMEM_P (type))
4464 {
4465 /* Pointer to member: associate class type and value type. */
4466 if (arg_assoc_type (k, TYPE_PTRMEM_CLASS_TYPE (type)))
4467 return true;
4468 return arg_assoc_type (k, TYPE_PTRMEM_POINTED_TO_TYPE (type));
4469 }
4470 else switch (TREE_CODE (type))
4471 {
4472 case ERROR_MARK:
4473 return false;
4474 case VOID_TYPE:
4475 case INTEGER_TYPE:
4476 case REAL_TYPE:
4477 case COMPLEX_TYPE:
4478 case VECTOR_TYPE:
4479 case CHAR_TYPE:
4480 case BOOLEAN_TYPE:
4481 return false;
4482 case RECORD_TYPE:
4483 if (TYPE_PTRMEMFUNC_P (type))
4484 return arg_assoc_type (k, TYPE_PTRMEMFUNC_FN_TYPE (type));
4485 return arg_assoc_class (k, type);
4486 case POINTER_TYPE:
4487 case REFERENCE_TYPE:
4488 case ARRAY_TYPE:
4489 return arg_assoc_type (k, TREE_TYPE (type));
4490 case UNION_TYPE:
4491 case ENUMERAL_TYPE:
b1cc95ce 4492 return arg_assoc_namespace (k, decl_namespace_context (type));
5a167978
GDR
4493 case METHOD_TYPE:
4494 /* The basetype is referenced in the first arg type, so just
4495 fall through. */
4496 case FUNCTION_TYPE:
4497 /* Associate the parameter types. */
4498 if (arg_assoc_args (k, TYPE_ARG_TYPES (type)))
4499 return true;
4500 /* Associate the return type. */
4501 return arg_assoc_type (k, TREE_TYPE (type));
4502 case TEMPLATE_TYPE_PARM:
4503 case BOUND_TEMPLATE_TEMPLATE_PARM:
4504 return false;
4505 case TYPENAME_TYPE:
4506 return false;
4507 case LANG_TYPE:
315fb5db
NS
4508 gcc_assert (type == unknown_type_node);
4509 return false;
5a167978 4510 default:
315fb5db 4511 gcc_unreachable ();
5a167978
GDR
4512 }
4513 return false;
4514}
4515
4516/* Adds everything associated with arguments. Returns true on error. */
4517
4518static bool
4519arg_assoc_args (struct arg_lookup *k, tree args)
4520{
4521 for (; args; args = TREE_CHAIN (args))
4522 if (arg_assoc (k, TREE_VALUE (args)))
4523 return true;
4524 return false;
4525}
4526
4527/* Adds everything associated with a given tree_node. Returns 1 on error. */
4528
4529static bool
4530arg_assoc (struct arg_lookup *k, tree n)
4531{
4532 if (n == error_mark_node)
4533 return false;
4534
4535 if (TYPE_P (n))
4536 return arg_assoc_type (k, n);
4537
4538 if (! type_unknown_p (n))
4539 return arg_assoc_type (k, TREE_TYPE (n));
4540
4541 if (TREE_CODE (n) == ADDR_EXPR)
4542 n = TREE_OPERAND (n, 0);
4543 if (TREE_CODE (n) == COMPONENT_REF)
4544 n = TREE_OPERAND (n, 1);
4545 if (TREE_CODE (n) == OFFSET_REF)
4546 n = TREE_OPERAND (n, 1);
4547 while (TREE_CODE (n) == TREE_LIST)
4548 n = TREE_VALUE (n);
4549 if (TREE_CODE (n) == BASELINK)
4550 n = BASELINK_FUNCTIONS (n);
4551
4552 if (TREE_CODE (n) == FUNCTION_DECL)
4553 return arg_assoc_type (k, TREE_TYPE (n));
4554 if (TREE_CODE (n) == TEMPLATE_ID_EXPR)
4555 {
4556 /* [basic.lookup.koenig]
4557
4558 If T is a template-id, its associated namespaces and classes
4559 are the namespace in which the template is defined; for
4560 member templates, the member template's class... */
4561 tree template = TREE_OPERAND (n, 0);
4562 tree args = TREE_OPERAND (n, 1);
4563 tree ctx;
4564 int ix;
4565
4566 if (TREE_CODE (template) == COMPONENT_REF)
0cbd7506 4567 template = TREE_OPERAND (template, 1);
c8094d83 4568
5a167978
GDR
4569 /* First, the template. There may actually be more than one if
4570 this is an overloaded function template. But, in that case,
4571 we only need the first; all the functions will be in the same
4572 namespace. */
4573 template = OVL_CURRENT (template);
4574
4575 ctx = CP_DECL_CONTEXT (template);
c8094d83 4576
5a167978
GDR
4577 if (TREE_CODE (ctx) == NAMESPACE_DECL)
4578 {
4579 if (arg_assoc_namespace (k, ctx) == 1)
4580 return true;
4581 }
4582 /* It must be a member template. */
4583 else if (arg_assoc_class (k, ctx) == 1)
4584 return true;
4585
4586 /* Now the arguments. */
c19aaba5
NS
4587 if (args)
4588 for (ix = TREE_VEC_LENGTH (args); ix--;)
4589 if (arg_assoc_template_arg (k, TREE_VEC_ELT (args, ix)) == 1)
4590 return true;
5a167978 4591 }
c1cca8d4 4592 else if (TREE_CODE (n) == OVERLOAD)
5a167978 4593 {
5a167978
GDR
4594 for (; n; n = OVL_CHAIN (n))
4595 if (arg_assoc_type (k, TREE_TYPE (OVL_FUNCTION (n))))
4596 return true;
4597 }
4598
4599 return false;
4600}
4601
4602/* Performs Koenig lookup depending on arguments, where fns
4603 are the functions found in normal lookup. */
4604
4605tree
4606lookup_arg_dependent (tree name, tree fns, tree args)
4607{
4608 struct arg_lookup k;
5a167978
GDR
4609
4610 timevar_push (TV_NAME_LOOKUP);
d63d5d0c
ILT
4611
4612 /* Remove any hidden friend functions from the list of functions
4613 found so far. They will be added back by arg_assoc_class as
4614 appropriate. */
4615 fns = remove_hidden_names (fns);
4616
5a167978 4617 k.name = name;
d63d5d0c 4618 k.args = args;
5a167978
GDR
4619 k.functions = fns;
4620 k.classes = NULL_TREE;
4621
20ac1e03
DG
4622 /* We previously performed an optimization here by setting
4623 NAMESPACES to the current namespace when it was safe. However, DR
4624 164 says that namespaces that were already searched in the first
4625 stage of template processing are searched again (potentially
4626 picking up later definitions) in the second stage. */
4627 k.namespaces = NULL_TREE;
5a167978
GDR
4628
4629 arg_assoc_args (&k, args);
4630 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, k.functions);
4631}
4632
00e8de68
GDR
4633/* Add namespace to using_directives. Return NULL_TREE if nothing was
4634 changed (i.e. there was already a directive), or the fresh
4635 TREE_LIST otherwise. */
4636
a5e6b29b 4637static tree
00e8de68
GDR
4638push_using_directive (tree used)
4639{
4640 tree ud = current_binding_level->using_directives;
4641 tree iter, ancestor;
4642
4643 timevar_push (TV_NAME_LOOKUP);
4644 /* Check if we already have this. */
4645 if (purpose_member (used, ud) != NULL_TREE)
4646 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
4647
4648 ancestor = namespace_ancestor (current_decl_namespace (), used);
4649 ud = current_binding_level->using_directives;
4650 ud = tree_cons (used, ancestor, ud);
4651 current_binding_level->using_directives = ud;
4652
4653 /* Recursively add all namespaces used. */
4654 for (iter = DECL_NAMESPACE_USING (used); iter; iter = TREE_CHAIN (iter))
4655 push_using_directive (TREE_PURPOSE (iter));
4656
4657 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, ud);
4658}
4659
4660/* The type TYPE is being declared. If it is a class template, or a
4661 specialization of a class template, do any processing required and
4662 perform error-checking. If IS_FRIEND is nonzero, this TYPE is
4663 being declared a friend. B is the binding level at which this TYPE
4664 should be bound.
4665
4666 Returns the TYPE_DECL for TYPE, which may have been altered by this
4667 processing. */
4668
4669static tree
bd3d082e 4670maybe_process_template_type_declaration (tree type, int is_friend,
0cbd7506 4671 cxx_scope *b)
00e8de68
GDR
4672{
4673 tree decl = TYPE_NAME (type);
4674
4675 if (processing_template_parmlist)
4676 /* You can't declare a new template type in a template parameter
4677 list. But, you can declare a non-template type:
4678
0cbd7506 4679 template <class A*> struct S;
00e8de68
GDR
4680
4681 is a forward-declaration of `A'. */
4682 ;
c43e95f8
MM
4683 else if (b->kind == sk_namespace
4684 && current_binding_level->kind != sk_namespace)
4685 /* If this new type is being injected into a containing scope,
4686 then it's not a template type. */
4687 ;
00e8de68
GDR
4688 else
4689 {
50bc768d 4690 gcc_assert (IS_AGGR_TYPE (type) || TREE_CODE (type) == ENUMERAL_TYPE);
00e8de68
GDR
4691
4692 if (processing_template_decl)
4693 {
4694 /* This may change after the call to
4695 push_template_decl_real, but we want the original value. */
4696 tree name = DECL_NAME (decl);
4697
bd3d082e 4698 decl = push_template_decl_real (decl, is_friend);
00e8de68
GDR
4699 /* If the current binding level is the binding level for the
4700 template parameters (see the comment in
4701 begin_template_parm_list) and the enclosing level is a class
4702 scope, and we're not looking at a friend, push the
4703 declaration of the member class into the class scope. In the
4704 friend case, push_template_decl will already have put the
4705 friend into global scope, if appropriate. */
4706 if (TREE_CODE (type) != ENUMERAL_TYPE
bd3d082e 4707 && !is_friend && b->kind == sk_template_parms
00e8de68
GDR
4708 && b->level_chain->kind == sk_class)
4709 {
4710 finish_member_declaration (CLASSTYPE_TI_TEMPLATE (type));
e57df6fe 4711
00e8de68
GDR
4712 if (!COMPLETE_TYPE_P (current_class_type))
4713 {
4714 maybe_add_class_template_decl_list (current_class_type,
4715 type, /*friend_p=*/0);
c72a1a86 4716 /* Put this UTD in the table of UTDs for the class. */
e57df6fe
KL
4717 if (CLASSTYPE_NESTED_UTDS (current_class_type) == NULL)
4718 CLASSTYPE_NESTED_UTDS (current_class_type) =
4719 binding_table_new (SCOPE_DEFAULT_HT_SIZE);
4720
4721 binding_table_insert
4722 (CLASSTYPE_NESTED_UTDS (current_class_type), name, type);
00e8de68
GDR
4723 }
4724 }
4725 }
4726 }
4727
4728 return decl;
4729}
4730
5a24482e
KL
4731/* Push a tag name NAME for struct/class/union/enum type TYPE. In case
4732 that the NAME is a class template, the tag is processed but not pushed.
4733
4734 The pushed scope depend on the SCOPE parameter:
4735 - When SCOPE is TS_CURRENT, put it into the inner-most non-sk_cleanup
4736 scope.
4737 - When SCOPE is TS_GLOBAL, put it in the inner-most non-class and
4738 non-template-parameter scope. This case is needed for forward
4739 declarations.
4740 - When SCOPE is TS_WITHIN_ENCLOSING_NON_CLASS, this is similar to
4741 TS_GLOBAL case except that names within template-parameter scopes
4742 are not pushed at all.
4743
c6f9f83b 4744 Returns TYPE upon success and ERROR_MARK_NODE otherwise. */
00e8de68 4745
c6f9f83b 4746tree
bd3d082e 4747pushtag (tree name, tree type, tag_scope scope)
00e8de68 4748{
926ce8bd 4749 struct cp_binding_level *b;
6a000704 4750 tree decl;
00e8de68
GDR
4751
4752 timevar_push (TV_NAME_LOOKUP);
4753 b = current_binding_level;
7c82a41e
MM
4754 while (/* Cleanup scopes are not scopes from the point of view of
4755 the language. */
4756 b->kind == sk_cleanup
4757 /* Neither are the scopes used to hold template parameters
4758 for an explicit specialization. For an ordinary template
4759 declaration, these scopes are not scopes from the point of
5a24482e
KL
4760 view of the language. */
4761 || (b->kind == sk_template_parms
4762 && (b->explicit_spec_p || scope == ts_global))
00e8de68 4763 || (b->kind == sk_class
bd3d082e 4764 && (scope != ts_current
00e8de68
GDR
4765 /* We may be defining a new type in the initializer
4766 of a static member variable. We allow this when
4767 not pedantic, and it is particularly useful for
4768 type punning via an anonymous union. */
4769 || COMPLETE_TYPE_P (b->this_entity))))
4770 b = b->level_chain;
4771
6a000704
NS
4772 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
4773
4774 /* Do C++ gratuitous typedefing. */
4775 if (IDENTIFIER_TYPE_VALUE (name) != type)
00e8de68 4776 {
6a000704
NS
4777 tree tdef;
4778 int in_class = 0;
4779 tree context = TYPE_CONTEXT (type);
00e8de68 4780
6a000704
NS
4781 if (! context)
4782 {
4783 tree cs = current_scope ();
4784
4785 if (scope == ts_current)
4786 context = cs;
4787 else if (cs != NULL_TREE && TYPE_P (cs))
4788 /* When declaring a friend class of a local class, we want
4789 to inject the newly named class into the scope
4790 containing the local class, not the namespace
4791 scope. */
4792 context = decl_function_context (get_type_decl (cs));
4793 }
4794 if (!context)
4795 context = current_namespace;
bd3d082e 4796
6a000704
NS
4797 if (b->kind == sk_class
4798 || (b->kind == sk_template_parms
4799 && b->level_chain->kind == sk_class))
4800 in_class = 1;
00e8de68 4801
6a000704
NS
4802 if (current_lang_name == lang_name_java)
4803 TYPE_FOR_JAVA (type) = 1;
00e8de68 4804
6a000704
NS
4805 tdef = create_implicit_typedef (name, type);
4806 DECL_CONTEXT (tdef) = FROB_CONTEXT (context);
4807 if (scope == ts_within_enclosing_non_class)
00e8de68 4808 {
6a000704
NS
4809 /* This is a friend. Make this TYPE_DECL node hidden from
4810 ordinary name lookup. Its corresponding TEMPLATE_DECL
4811 will be marked in push_template_decl_real. */
4812 retrofit_lang_decl (tdef);
4813 DECL_ANTICIPATED (tdef) = 1;
4814 DECL_FRIEND_P (tdef) = 1;
4815 }
e57df6fe 4816
6a000704
NS
4817 decl = maybe_process_template_type_declaration
4818 (type, scope == ts_within_enclosing_non_class, b);
4819 if (decl == error_mark_node)
4820 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
4821
4822 if (! in_class)
4823 set_identifier_type_value_with_scope (name, tdef, b);
e57df6fe 4824
6a000704
NS
4825 if (b->kind == sk_class)
4826 {
4827 if (!PROCESSING_REAL_TEMPLATE_DECL_P ())
4828 /* Put this TYPE_DECL on the TYPE_FIELDS list for the
4829 class. But if it's a member template class, we want
4830 the TEMPLATE_DECL, not the TYPE_DECL, so this is done
4831 later. */
4832 finish_member_declaration (decl);
4833 else
4834 pushdecl_class_level (decl);
00e8de68 4835 }
6a000704 4836 else if (b->kind != sk_template_parms)
d63d5d0c 4837 decl = pushdecl_with_scope (decl, b, /*is_friend=*/false);
6a000704
NS
4838
4839 TYPE_CONTEXT (type) = DECL_CONTEXT (decl);
4840
4841 /* If this is a local class, keep track of it. We need this
4842 information for name-mangling, and so that it is possible to
4843 find all function definitions in a translation unit in a
4844 convenient way. (It's otherwise tricky to find a member
4845 function definition it's only pointed to from within a local
4846 class.) */
4847 if (TYPE_CONTEXT (type)
4848 && TREE_CODE (TYPE_CONTEXT (type)) == FUNCTION_DECL)
4849 VEC_safe_push (tree, gc, local_classes, type);
00e8de68 4850 }
6a000704
NS
4851 if (b->kind == sk_class
4852 && !COMPLETE_TYPE_P (current_class_type))
00e8de68 4853 {
6a000704
NS
4854 maybe_add_class_template_decl_list (current_class_type,
4855 type, /*friend_p=*/0);
4856
4857 if (CLASSTYPE_NESTED_UTDS (current_class_type) == NULL)
4858 CLASSTYPE_NESTED_UTDS (current_class_type)
4859 = binding_table_new (SCOPE_DEFAULT_HT_SIZE);
4860
4861 binding_table_insert
4862 (CLASSTYPE_NESTED_UTDS (current_class_type), name, type);
00e8de68 4863 }
6a000704
NS
4864
4865 decl = TYPE_NAME (type);
4866 gcc_assert (TREE_CODE (decl) == TYPE_DECL);
4867 TYPE_STUB_DECL (type) = decl;
4868
c6f9f83b 4869 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, type);
00e8de68
GDR
4870}
4871\f
00e8de68
GDR
4872/* Subroutines for reverting temporarily to top-level for instantiation
4873 of templates and such. We actually need to clear out the class- and
4874 local-value slots of all identifiers, so that only the global values
4875 are at all visible. Simply setting current_binding_level to the global
4876 scope isn't enough, because more binding levels may be pushed. */
4877struct saved_scope *scope_chain;
4878
f44b0c8e
MM
4879/* If ID has not already been marked, add an appropriate binding to
4880 *OLD_BINDINGS. */
89b578be 4881
f44b0c8e 4882static void
d4e6fecb 4883store_binding (tree id, VEC(cxx_saved_binding,gc) **old_bindings)
89b578be
MM
4884{
4885 cxx_saved_binding *saved;
89b578be 4886
39fb05d0 4887 if (!id || !IDENTIFIER_BINDING (id))
f44b0c8e 4888 return;
89b578be 4889
f44b0c8e
MM
4890 if (IDENTIFIER_MARKED (id))
4891 return;
c8094d83 4892
f44b0c8e 4893 IDENTIFIER_MARKED (id) = 1;
89b578be 4894
d4e6fecb 4895 saved = VEC_safe_push (cxx_saved_binding, gc, *old_bindings, NULL);
89b578be
MM
4896 saved->identifier = id;
4897 saved->binding = IDENTIFIER_BINDING (id);
89b578be
MM
4898 saved->real_type_value = REAL_IDENTIFIER_TYPE_VALUE (id);
4899 IDENTIFIER_BINDING (id) = NULL;
89b578be
MM
4900}
4901
f44b0c8e 4902static void
d4e6fecb 4903store_bindings (tree names, VEC(cxx_saved_binding,gc) **old_bindings)
00e8de68
GDR
4904{
4905 tree t;
00e8de68
GDR
4906
4907 timevar_push (TV_NAME_LOOKUP);
4908 for (t = names; t; t = TREE_CHAIN (t))
4909 {
4910 tree id;
00e8de68
GDR
4911
4912 if (TREE_CODE (t) == TREE_LIST)
4913 id = TREE_PURPOSE (t);
4914 else
4915 id = DECL_NAME (t);
4916
f44b0c8e 4917 store_binding (id, old_bindings);
00e8de68 4918 }
f44b0c8e 4919 timevar_pop (TV_NAME_LOOKUP);
00e8de68
GDR
4920}
4921
89b578be
MM
4922/* Like store_bindings, but NAMES is a vector of cp_class_binding
4923 objects, rather than a TREE_LIST. */
4924
f44b0c8e 4925static void
c8094d83 4926store_class_bindings (VEC(cp_class_binding,gc) *names,
d4e6fecb 4927 VEC(cxx_saved_binding,gc) **old_bindings)
89b578be
MM
4928{
4929 size_t i;
4930 cp_class_binding *cb;
89b578be
MM
4931
4932 timevar_push (TV_NAME_LOOKUP);
9ba5ff0f 4933 for (i = 0; VEC_iterate(cp_class_binding, names, i, cb); ++i)
f44b0c8e
MM
4934 store_binding (cb->identifier, old_bindings);
4935 timevar_pop (TV_NAME_LOOKUP);
89b578be
MM
4936}
4937
00e8de68 4938void
c353b8e3 4939push_to_top_level (void)
00e8de68
GDR
4940{
4941 struct saved_scope *s;
4942 struct cp_binding_level *b;
f44b0c8e
MM
4943 cxx_saved_binding *sb;
4944 size_t i;
00e8de68
GDR
4945 int need_pop;
4946
4947 timevar_push (TV_NAME_LOOKUP);
99dd239f 4948 s = GGC_CNEW (struct saved_scope);
00e8de68
GDR
4949
4950 b = scope_chain ? current_binding_level : 0;
4951
4952 /* If we're in the middle of some function, save our state. */
4953 if (cfun)
4954 {
4955 need_pop = 1;
4956 push_function_context_to (NULL_TREE);
4957 }
4958 else
4959 need_pop = 0;
4960
89b578be 4961 if (scope_chain && previous_class_level)
f44b0c8e
MM
4962 store_class_bindings (previous_class_level->class_shadowed,
4963 &s->old_bindings);
00e8de68
GDR
4964
4965 /* Have to include the global scope, because class-scope decls
4966 aren't listed anywhere useful. */
4967 for (; b; b = b->level_chain)
4968 {
4969 tree t;
4970
4971 /* Template IDs are inserted into the global level. If they were
4972 inserted into namespace level, finish_file wouldn't find them
4973 when doing pending instantiations. Therefore, don't stop at
4974 namespace level, but continue until :: . */
c353b8e3 4975 if (global_scope_p (b))
00e8de68
GDR
4976 break;
4977
f44b0c8e 4978 store_bindings (b->names, &s->old_bindings);
00e8de68
GDR
4979 /* We also need to check class_shadowed to save class-level type
4980 bindings, since pushclass doesn't fill in b->names. */
4981 if (b->kind == sk_class)
f44b0c8e 4982 store_class_bindings (b->class_shadowed, &s->old_bindings);
00e8de68
GDR
4983
4984 /* Unwind type-value slots back to top level. */
4985 for (t = b->type_shadowed; t; t = TREE_CHAIN (t))
4986 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (t), TREE_VALUE (t));
4987 }
f44b0c8e 4988
9ba5ff0f 4989 for (i = 0; VEC_iterate (cxx_saved_binding, s->old_bindings, i, sb); ++i)
f44b0c8e
MM
4990 IDENTIFIER_MARKED (sb->identifier) = 0;
4991
00e8de68 4992 s->prev = scope_chain;
00e8de68
GDR
4993 s->bindings = b;
4994 s->need_pop_function_context = need_pop;
4995 s->function_decl = current_function_decl;
b794e321 4996 s->skip_evaluation = skip_evaluation;
00e8de68
GDR
4997
4998 scope_chain = s;
4999 current_function_decl = NULL_TREE;
aff44741 5000 current_lang_base = VEC_alloc (tree, gc, 10);
00e8de68
GDR
5001 current_lang_name = lang_name_cplusplus;
5002 current_namespace = global_namespace;
b794e321 5003 skip_evaluation = 0;
00e8de68
GDR
5004 timevar_pop (TV_NAME_LOOKUP);
5005}
5006
00e8de68
GDR
5007void
5008pop_from_top_level (void)
5009{
5010 struct saved_scope *s = scope_chain;
5011 cxx_saved_binding *saved;
f44b0c8e 5012 size_t i;
00e8de68 5013
c8094d83 5014 timevar_push (TV_NAME_LOOKUP);
00e8de68 5015 /* Clear out class-level bindings cache. */
89b578be 5016 if (previous_class_level)
00e8de68
GDR
5017 invalidate_class_lookup_cache ();
5018
5019 current_lang_base = 0;
5020
5021 scope_chain = s->prev;
9ba5ff0f 5022 for (i = 0; VEC_iterate (cxx_saved_binding, s->old_bindings, i, saved); ++i)
00e8de68
GDR
5023 {
5024 tree id = saved->identifier;
5025
5026 IDENTIFIER_BINDING (id) = saved->binding;
00e8de68
GDR
5027 SET_IDENTIFIER_TYPE_VALUE (id, saved->real_type_value);
5028 }
5029
5030 /* If we were in the middle of compiling a function, restore our
5031 state. */
5032 if (s->need_pop_function_context)
5033 pop_function_context_from (NULL_TREE);
5034 current_function_decl = s->function_decl;
b794e321 5035 skip_evaluation = s->skip_evaluation;
00e8de68
GDR
5036 timevar_pop (TV_NAME_LOOKUP);
5037}
5038
5039/* Pop off extraneous binding levels left over due to syntax errors.
5040
5041 We don't pop past namespaces, as they might be valid. */
5042
5043void
5044pop_everything (void)
5045{
5046 if (ENABLE_SCOPE_CHECKING)
5047 verbatim ("XXX entering pop_everything ()\n");
5048 while (!toplevel_bindings_p ())
5049 {
5050 if (current_binding_level->kind == sk_class)
5051 pop_nested_class ();
5052 else
5053 poplevel (0, 0, 0);
5054 }
5055 if (ENABLE_SCOPE_CHECKING)
5056 verbatim ("XXX leaving pop_everything ()\n");
5057}
5058
6097b0c3 5059/* Emit debugging information for using declarations and directives.
c8094d83 5060 If input tree is overloaded fn then emit debug info for all
6097b0c3
DP
5061 candidates. */
5062
98ed9dae 5063void
6097b0c3
DP
5064cp_emit_debug_info_for_using (tree t, tree context)
5065{
099f36ab
JM
5066 /* Don't try to emit any debug information if we have errors. */
5067 if (sorrycount || errorcount)
5068 return;
5069
c8094d83 5070 /* Ignore this FUNCTION_DECL if it refers to a builtin declaration
6097b0c3 5071 of a builtin function. */
c8094d83 5072 if (TREE_CODE (t) == FUNCTION_DECL
6097b0c3
DP
5073 && DECL_EXTERNAL (t)
5074 && DECL_BUILT_IN (t))
5075 return;
5076
5077 /* Do not supply context to imported_module_or_decl, if
5078 it is a global namespace. */
5079 if (context == global_namespace)
5080 context = NULL_TREE;
c8094d83 5081
6097b0c3
DP
5082 if (BASELINK_P (t))
5083 t = BASELINK_FUNCTIONS (t);
c8094d83 5084
6097b0c3
DP
5085 /* FIXME: Handle TEMPLATE_DECLs. */
5086 for (t = OVL_CURRENT (t); t; t = OVL_NEXT (t))
5087 if (TREE_CODE (t) != TEMPLATE_DECL)
5088 (*debug_hooks->imported_module_or_decl) (t, context);
98ed9dae 5089}
6097b0c3 5090
28ea4c88 5091#include "gt-cp-name-lookup.h"