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