]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/cp/name-lookup.c
c++: Handle multiple aggregate overloads [PR95319].
[thirdparty/gcc.git] / gcc / cp / name-lookup.c
1 /* Definitions for C++ name lookup routines.
2 Copyright (C) 2003-2020 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 3, 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 COPYING3. If not see
19 <http://www.gnu.org/licenses/>. */
20
21 #include "config.h"
22 #define INCLUDE_UNIQUE_PTR
23 #include "system.h"
24 #include "coretypes.h"
25 #include "cp-tree.h"
26 #include "timevar.h"
27 #include "stringpool.h"
28 #include "print-tree.h"
29 #include "attribs.h"
30 #include "debug.h"
31 #include "c-family/c-pragma.h"
32 #include "gcc-rich-location.h"
33 #include "spellcheck-tree.h"
34 #include "parser.h"
35 #include "c-family/name-hint.h"
36 #include "c-family/known-headers.h"
37 #include "c-family/c-spellcheck.h"
38
39 static cxx_binding *cxx_binding_make (tree value, tree type);
40 static cp_binding_level *innermost_nonclass_level (void);
41 static void set_identifier_type_value_with_scope (tree id, tree decl,
42 cp_binding_level *b);
43 static name_hint maybe_suggest_missing_std_header (location_t location,
44 tree name);
45 static name_hint suggest_alternatives_for_1 (location_t location, tree name,
46 bool suggest_misspellings);
47
48 /* Create an overload suitable for recording an artificial TYPE_DECL
49 and another decl. We use this machanism to implement the struct
50 stat hack within a namespace. It'd be nice to use it everywhere. */
51
52 #define STAT_HACK_P(N) ((N) && TREE_CODE (N) == OVERLOAD && OVL_LOOKUP_P (N))
53 #define STAT_TYPE(N) TREE_TYPE (N)
54 #define STAT_DECL(N) OVL_FUNCTION (N)
55 #define MAYBE_STAT_DECL(N) (STAT_HACK_P (N) ? STAT_DECL (N) : N)
56 #define MAYBE_STAT_TYPE(N) (STAT_HACK_P (N) ? STAT_TYPE (N) : NULL_TREE)
57
58 /* Create a STAT_HACK node with DECL as the value binding and TYPE as
59 the type binding. */
60
61 static tree
62 stat_hack (tree decl = NULL_TREE, tree type = NULL_TREE)
63 {
64 tree result = make_node (OVERLOAD);
65
66 /* Mark this as a lookup, so we can tell this is a stat hack. */
67 OVL_LOOKUP_P (result) = true;
68 STAT_DECL (result) = decl;
69 STAT_TYPE (result) = type;
70 return result;
71 }
72
73 /* Create a local binding level for NAME. */
74
75 static cxx_binding *
76 create_local_binding (cp_binding_level *level, tree name)
77 {
78 cxx_binding *binding = cxx_binding_make (NULL, NULL);
79
80 INHERITED_VALUE_BINDING_P (binding) = false;
81 LOCAL_BINDING_P (binding) = true;
82 binding->scope = level;
83 binding->previous = IDENTIFIER_BINDING (name);
84
85 IDENTIFIER_BINDING (name) = binding;
86
87 return binding;
88 }
89
90 /* Find the binding for NAME in namespace NS. If CREATE_P is true,
91 make an empty binding if there wasn't one. */
92
93 static tree *
94 find_namespace_slot (tree ns, tree name, bool create_p = false)
95 {
96 tree *slot = DECL_NAMESPACE_BINDINGS (ns)
97 ->find_slot_with_hash (name, name ? IDENTIFIER_HASH_VALUE (name) : 0,
98 create_p ? INSERT : NO_INSERT);
99 return slot;
100 }
101
102 static tree
103 find_namespace_value (tree ns, tree name)
104 {
105 tree *b = find_namespace_slot (ns, name);
106
107 return b ? MAYBE_STAT_DECL (*b) : NULL_TREE;
108 }
109
110 /* Add DECL to the list of things declared in B. */
111
112 static void
113 add_decl_to_level (cp_binding_level *b, tree decl)
114 {
115 gcc_assert (b->kind != sk_class);
116
117 /* Make sure we don't create a circular list. xref_tag can end
118 up pushing the same artificial decl more than once. We
119 should have already detected that in update_binding. */
120 gcc_assert (b->names != decl);
121
122 /* We build up the list in reverse order, and reverse it later if
123 necessary. */
124 TREE_CHAIN (decl) = b->names;
125 b->names = decl;
126
127 /* If appropriate, add decl to separate list of statics. We
128 include extern variables because they might turn out to be
129 static later. It's OK for this list to contain a few false
130 positives. */
131 if (b->kind == sk_namespace
132 && ((VAR_P (decl)
133 && (TREE_STATIC (decl) || DECL_EXTERNAL (decl)))
134 || (TREE_CODE (decl) == FUNCTION_DECL
135 && (!TREE_PUBLIC (decl)
136 || decl_anon_ns_mem_p (decl)
137 || DECL_DECLARED_INLINE_P (decl)))))
138 vec_safe_push (static_decls, decl);
139 }
140
141 /* Find the binding for NAME in the local binding level B. */
142
143 static cxx_binding *
144 find_local_binding (cp_binding_level *b, tree name)
145 {
146 if (cxx_binding *binding = IDENTIFIER_BINDING (name))
147 for (;; b = b->level_chain)
148 {
149 if (binding->scope == b)
150 return binding;
151
152 /* Cleanup contours are transparent to the language. */
153 if (b->kind != sk_cleanup)
154 break;
155 }
156 return NULL;
157 }
158
159 class name_lookup
160 {
161 public:
162 typedef std::pair<tree, tree> using_pair;
163 typedef vec<using_pair, va_heap, vl_embed> using_queue;
164
165 public:
166 tree name; /* The identifier being looked for. */
167 tree value; /* A (possibly ambiguous) set of things found. */
168 tree type; /* A type that has been found. */
169 int flags; /* Lookup flags. */
170 bool deduping; /* Full deduping is needed because using declarations
171 are in play. */
172 vec<tree, va_heap, vl_embed> *scopes;
173 name_lookup *previous; /* Previously active lookup. */
174
175 protected:
176 /* Marked scope stack for outermost name lookup. */
177 static vec<tree, va_heap, vl_embed> *shared_scopes;
178 /* Currently active lookup. */
179 static name_lookup *active;
180
181 public:
182 name_lookup (tree n, int f = 0)
183 : name (n), value (NULL_TREE), type (NULL_TREE), flags (f),
184 deduping (false), scopes (NULL), previous (NULL)
185 {
186 preserve_state ();
187 }
188 ~name_lookup ()
189 {
190 restore_state ();
191 }
192
193 private: /* Uncopyable, unmovable, unassignable. I am a rock. */
194 name_lookup (const name_lookup &);
195 name_lookup &operator= (const name_lookup &);
196
197 protected:
198 static bool seen_p (tree scope)
199 {
200 return LOOKUP_SEEN_P (scope);
201 }
202 static bool found_p (tree scope)
203 {
204 return LOOKUP_FOUND_P (scope);
205 }
206
207 void mark_seen (tree scope); /* Mark and add to scope vector. */
208 static void mark_found (tree scope)
209 {
210 gcc_checking_assert (seen_p (scope));
211 LOOKUP_FOUND_P (scope) = true;
212 }
213 bool see_and_mark (tree scope)
214 {
215 bool ret = seen_p (scope);
216 if (!ret)
217 mark_seen (scope);
218 return ret;
219 }
220 bool find_and_mark (tree scope);
221
222 private:
223 void preserve_state ();
224 void restore_state ();
225
226 private:
227 static tree ambiguous (tree thing, tree current);
228 void add_overload (tree fns);
229 void add_value (tree new_val);
230 void add_type (tree new_type);
231 bool process_binding (tree val_bind, tree type_bind);
232
233 /* Look in only namespace. */
234 bool search_namespace_only (tree scope);
235 /* Look in namespace and its (recursive) inlines. Ignore using
236 directives. Return true if something found (inc dups). */
237 bool search_namespace (tree scope);
238 /* Look in the using directives of namespace + inlines using
239 qualified lookup rules. */
240 bool search_usings (tree scope);
241
242 private:
243 using_queue *queue_namespace (using_queue *queue, int depth, tree scope);
244 using_queue *do_queue_usings (using_queue *queue, int depth,
245 vec<tree, va_gc> *usings);
246 using_queue *queue_usings (using_queue *queue, int depth,
247 vec<tree, va_gc> *usings)
248 {
249 if (usings)
250 queue = do_queue_usings (queue, depth, usings);
251 return queue;
252 }
253
254 private:
255 void add_fns (tree);
256
257 void adl_expr (tree);
258 void adl_type (tree);
259 void adl_template_arg (tree);
260 void adl_class (tree);
261 void adl_bases (tree);
262 void adl_class_only (tree);
263 void adl_namespace (tree);
264 void adl_namespace_only (tree);
265
266 public:
267 /* Search namespace + inlines + maybe usings as qualified lookup. */
268 bool search_qualified (tree scope, bool usings = true);
269
270 /* Search namespace + inlines + usings as unqualified lookup. */
271 bool search_unqualified (tree scope, cp_binding_level *);
272
273 /* ADL lookup of ARGS. */
274 tree search_adl (tree fns, vec<tree, va_gc> *args);
275 };
276
277 /* Scope stack shared by all outermost lookups. This avoids us
278 allocating and freeing on every single lookup. */
279 vec<tree, va_heap, vl_embed> *name_lookup::shared_scopes;
280
281 /* Currently active lookup. */
282 name_lookup *name_lookup::active;
283
284 /* Name lookup is recursive, becase ADL can cause template
285 instatiation. This is of course a rare event, so we optimize for
286 it not happening. When we discover an active name-lookup, which
287 must be an ADL lookup, we need to unmark the marked scopes and also
288 unmark the lookup we might have been accumulating. */
289
290 void
291 name_lookup::preserve_state ()
292 {
293 previous = active;
294 if (previous)
295 {
296 unsigned length = vec_safe_length (previous->scopes);
297 vec_safe_reserve (previous->scopes, length * 2);
298 for (unsigned ix = length; ix--;)
299 {
300 tree decl = (*previous->scopes)[ix];
301
302 gcc_checking_assert (LOOKUP_SEEN_P (decl));
303 LOOKUP_SEEN_P (decl) = false;
304
305 /* Preserve the FOUND_P state on the interrupted lookup's
306 stack. */
307 if (LOOKUP_FOUND_P (decl))
308 {
309 LOOKUP_FOUND_P (decl) = false;
310 previous->scopes->quick_push (decl);
311 }
312 }
313
314 /* Unmark the outer partial lookup. */
315 if (previous->deduping)
316 lookup_mark (previous->value, false);
317 }
318 else
319 scopes = shared_scopes;
320 active = this;
321 }
322
323 /* Restore the marking state of a lookup we interrupted. */
324
325 void
326 name_lookup::restore_state ()
327 {
328 if (deduping)
329 lookup_mark (value, false);
330
331 /* Unmark and empty this lookup's scope stack. */
332 for (unsigned ix = vec_safe_length (scopes); ix--;)
333 {
334 tree decl = scopes->pop ();
335 gcc_checking_assert (LOOKUP_SEEN_P (decl));
336 LOOKUP_SEEN_P (decl) = false;
337 LOOKUP_FOUND_P (decl) = false;
338 }
339
340 active = previous;
341 if (previous)
342 {
343 free (scopes);
344
345 unsigned length = vec_safe_length (previous->scopes);
346 for (unsigned ix = 0; ix != length; ix++)
347 {
348 tree decl = (*previous->scopes)[ix];
349 if (LOOKUP_SEEN_P (decl))
350 {
351 /* The remainder of the scope stack must be recording
352 FOUND_P decls, which we want to pop off. */
353 do
354 {
355 tree decl = previous->scopes->pop ();
356 gcc_checking_assert (LOOKUP_SEEN_P (decl)
357 && !LOOKUP_FOUND_P (decl));
358 LOOKUP_FOUND_P (decl) = true;
359 }
360 while (++ix != length);
361 break;
362 }
363
364 gcc_checking_assert (!LOOKUP_FOUND_P (decl));
365 LOOKUP_SEEN_P (decl) = true;
366 }
367
368 /* Remark the outer partial lookup. */
369 if (previous->deduping)
370 lookup_mark (previous->value, true);
371 }
372 else
373 shared_scopes = scopes;
374 }
375
376 void
377 name_lookup::mark_seen (tree scope)
378 {
379 gcc_checking_assert (!seen_p (scope));
380 LOOKUP_SEEN_P (scope) = true;
381 vec_safe_push (scopes, scope);
382 }
383
384 bool
385 name_lookup::find_and_mark (tree scope)
386 {
387 bool result = LOOKUP_FOUND_P (scope);
388 if (!result)
389 {
390 LOOKUP_FOUND_P (scope) = true;
391 if (!LOOKUP_SEEN_P (scope))
392 vec_safe_push (scopes, scope);
393 }
394
395 return result;
396 }
397
398 /* THING and CURRENT are ambiguous, concatenate them. */
399
400 tree
401 name_lookup::ambiguous (tree thing, tree current)
402 {
403 if (TREE_CODE (current) != TREE_LIST)
404 {
405 current = build_tree_list (NULL_TREE, current);
406 TREE_TYPE (current) = error_mark_node;
407 }
408 current = tree_cons (NULL_TREE, thing, current);
409 TREE_TYPE (current) = error_mark_node;
410
411 return current;
412 }
413
414 /* FNS is a new overload set to add to the exising set. */
415
416 void
417 name_lookup::add_overload (tree fns)
418 {
419 if (!deduping && TREE_CODE (fns) == OVERLOAD)
420 {
421 tree probe = fns;
422 if (flags & LOOKUP_HIDDEN)
423 probe = ovl_skip_hidden (probe);
424 if (probe && TREE_CODE (probe) == OVERLOAD
425 && OVL_DEDUP_P (probe))
426 {
427 /* We're about to add something found by a using
428 declaration, so need to engage deduping mode. */
429 lookup_mark (value, true);
430 deduping = true;
431 }
432 }
433
434 value = lookup_maybe_add (fns, value, deduping);
435 }
436
437 /* Add a NEW_VAL, a found value binding into the current value binding. */
438
439 void
440 name_lookup::add_value (tree new_val)
441 {
442 if (OVL_P (new_val) && (!value || OVL_P (value)))
443 add_overload (new_val);
444 else if (!value)
445 value = new_val;
446 else if (value == new_val)
447 ;
448 else if ((TREE_CODE (value) == TYPE_DECL
449 && TREE_CODE (new_val) == TYPE_DECL
450 && same_type_p (TREE_TYPE (value), TREE_TYPE (new_val))))
451 /* Typedefs to the same type. */;
452 else if (TREE_CODE (value) == NAMESPACE_DECL
453 && TREE_CODE (new_val) == NAMESPACE_DECL
454 && ORIGINAL_NAMESPACE (value) == ORIGINAL_NAMESPACE (new_val))
455 /* Namespace (possibly aliased) to the same namespace. Locate
456 the namespace*/
457 value = ORIGINAL_NAMESPACE (value);
458 else
459 {
460 if (deduping)
461 {
462 /* Disengage deduping mode. */
463 lookup_mark (value, false);
464 deduping = false;
465 }
466 value = ambiguous (new_val, value);
467 }
468 }
469
470 /* Add a NEW_TYPE, a found type binding into the current type binding. */
471
472 void
473 name_lookup::add_type (tree new_type)
474 {
475 if (!type)
476 type = new_type;
477 else if (TREE_CODE (type) == TREE_LIST
478 || !same_type_p (TREE_TYPE (type), TREE_TYPE (new_type)))
479 type = ambiguous (new_type, type);
480 }
481
482 /* Process a found binding containing NEW_VAL and NEW_TYPE. Returns
483 true if we actually found something noteworthy. */
484
485 bool
486 name_lookup::process_binding (tree new_val, tree new_type)
487 {
488 /* Did we really see a type? */
489 if (new_type
490 && (LOOKUP_NAMESPACES_ONLY (flags)
491 || (!(flags & LOOKUP_HIDDEN)
492 && DECL_LANG_SPECIFIC (new_type)
493 && DECL_ANTICIPATED (new_type))))
494 new_type = NULL_TREE;
495
496 if (new_val && !(flags & LOOKUP_HIDDEN))
497 new_val = ovl_skip_hidden (new_val);
498
499 /* Do we really see a value? */
500 if (new_val)
501 switch (TREE_CODE (new_val))
502 {
503 case TEMPLATE_DECL:
504 /* If we expect types or namespaces, and not templates,
505 or this is not a template class. */
506 if ((LOOKUP_QUALIFIERS_ONLY (flags)
507 && !DECL_TYPE_TEMPLATE_P (new_val)))
508 new_val = NULL_TREE;
509 break;
510 case TYPE_DECL:
511 if (LOOKUP_NAMESPACES_ONLY (flags)
512 || (new_type && (flags & LOOKUP_PREFER_TYPES)))
513 new_val = NULL_TREE;
514 break;
515 case NAMESPACE_DECL:
516 if (LOOKUP_TYPES_ONLY (flags))
517 new_val = NULL_TREE;
518 break;
519 default:
520 if (LOOKUP_QUALIFIERS_ONLY (flags))
521 new_val = NULL_TREE;
522 }
523
524 if (!new_val)
525 {
526 new_val = new_type;
527 new_type = NULL_TREE;
528 }
529
530 /* Merge into the lookup */
531 if (new_val)
532 add_value (new_val);
533 if (new_type)
534 add_type (new_type);
535
536 return new_val != NULL_TREE;
537 }
538
539 /* Look in exactly namespace SCOPE. */
540
541 bool
542 name_lookup::search_namespace_only (tree scope)
543 {
544 bool found = false;
545
546 if (tree *binding = find_namespace_slot (scope, name))
547 found |= process_binding (MAYBE_STAT_DECL (*binding),
548 MAYBE_STAT_TYPE (*binding));
549
550 return found;
551 }
552
553 /* Conditionally look in namespace SCOPE and inline children. */
554
555 bool
556 name_lookup::search_namespace (tree scope)
557 {
558 if (see_and_mark (scope))
559 /* We've visited this scope before. Return what we found then. */
560 return found_p (scope);
561
562 /* Look in exactly namespace. */
563 bool found = search_namespace_only (scope);
564
565 /* Don't look into inline children, if we're looking for an
566 anonymous name -- it must be in the current scope, if anywhere. */
567 if (name)
568 /* Recursively look in its inline children. */
569 if (vec<tree, va_gc> *inlinees = DECL_NAMESPACE_INLINEES (scope))
570 for (unsigned ix = inlinees->length (); ix--;)
571 found |= search_namespace ((*inlinees)[ix]);
572
573 if (found)
574 mark_found (scope);
575
576 return found;
577 }
578
579 /* Recursively follow using directives of SCOPE & its inline children.
580 Such following is essentially a flood-fill algorithm. */
581
582 bool
583 name_lookup::search_usings (tree scope)
584 {
585 /* We do not check seen_p here, as that was already set during the
586 namespace_only walk. */
587 if (found_p (scope))
588 return true;
589
590 bool found = false;
591 if (vec<tree, va_gc> *usings = NAMESPACE_LEVEL (scope)->using_directives)
592 for (unsigned ix = usings->length (); ix--;)
593 found |= search_qualified ((*usings)[ix], true);
594
595 /* Look in its inline children. */
596 if (vec<tree, va_gc> *inlinees = DECL_NAMESPACE_INLINEES (scope))
597 for (unsigned ix = inlinees->length (); ix--;)
598 found |= search_usings ((*inlinees)[ix]);
599
600 if (found)
601 mark_found (scope);
602
603 return found;
604 }
605
606 /* Qualified namespace lookup in SCOPE.
607 1) Look in SCOPE (+inlines). If found, we're done.
608 2) Otherwise, if USINGS is true,
609 recurse for every using directive of SCOPE (+inlines).
610
611 Trickiness is (a) loops and (b) multiple paths to same namespace.
612 In both cases we want to not repeat any lookups, and know whether
613 to stop the caller's step #2. Do this via the FOUND_P marker. */
614
615 bool
616 name_lookup::search_qualified (tree scope, bool usings)
617 {
618 bool found = false;
619
620 if (seen_p (scope))
621 found = found_p (scope);
622 else
623 {
624 found = search_namespace (scope);
625 if (!found && usings)
626 found = search_usings (scope);
627 }
628
629 return found;
630 }
631
632 /* Add SCOPE to the unqualified search queue, recursively add its
633 inlines and those via using directives. */
634
635 name_lookup::using_queue *
636 name_lookup::queue_namespace (using_queue *queue, int depth, tree scope)
637 {
638 if (see_and_mark (scope))
639 return queue;
640
641 /* Record it. */
642 tree common = scope;
643 while (SCOPE_DEPTH (common) > depth)
644 common = CP_DECL_CONTEXT (common);
645 vec_safe_push (queue, using_pair (common, scope));
646
647 /* Queue its inline children. */
648 if (vec<tree, va_gc> *inlinees = DECL_NAMESPACE_INLINEES (scope))
649 for (unsigned ix = inlinees->length (); ix--;)
650 queue = queue_namespace (queue, depth, (*inlinees)[ix]);
651
652 /* Queue its using targets. */
653 queue = queue_usings (queue, depth, NAMESPACE_LEVEL (scope)->using_directives);
654
655 return queue;
656 }
657
658 /* Add the namespaces in USINGS to the unqualified search queue. */
659
660 name_lookup::using_queue *
661 name_lookup::do_queue_usings (using_queue *queue, int depth,
662 vec<tree, va_gc> *usings)
663 {
664 for (unsigned ix = usings->length (); ix--;)
665 queue = queue_namespace (queue, depth, (*usings)[ix]);
666
667 return queue;
668 }
669
670 /* Unqualified namespace lookup in SCOPE.
671 1) add scope+inlins to worklist.
672 2) recursively add target of every using directive
673 3) for each worklist item where SCOPE is common ancestor, search it
674 4) if nothing find, scope=parent, goto 1. */
675
676 bool
677 name_lookup::search_unqualified (tree scope, cp_binding_level *level)
678 {
679 /* Make static to avoid continual reallocation. We're not
680 recursive. */
681 static using_queue *queue = NULL;
682 bool found = false;
683 int length = vec_safe_length (queue);
684
685 /* Queue local using-directives. */
686 for (; level->kind != sk_namespace; level = level->level_chain)
687 queue = queue_usings (queue, SCOPE_DEPTH (scope), level->using_directives);
688
689 for (; !found; scope = CP_DECL_CONTEXT (scope))
690 {
691 gcc_assert (!DECL_NAMESPACE_ALIAS (scope));
692 int depth = SCOPE_DEPTH (scope);
693
694 /* Queue namespaces reachable from SCOPE. */
695 queue = queue_namespace (queue, depth, scope);
696
697 /* Search every queued namespace where SCOPE is the common
698 ancestor. Adjust the others. */
699 unsigned ix = length;
700 do
701 {
702 using_pair &pair = (*queue)[ix];
703 while (pair.first == scope)
704 {
705 found |= search_namespace_only (pair.second);
706 pair = queue->pop ();
707 if (ix == queue->length ())
708 goto done;
709 }
710 /* The depth is the same as SCOPE, find the parent scope. */
711 if (SCOPE_DEPTH (pair.first) == depth)
712 pair.first = CP_DECL_CONTEXT (pair.first);
713 ix++;
714 }
715 while (ix < queue->length ());
716 done:;
717 if (scope == global_namespace)
718 break;
719
720 /* If looking for hidden names, we only look in the innermost
721 namespace scope. [namespace.memdef]/3 If a friend
722 declaration in a non-local class first declares a class,
723 function, class template or function template the friend is a
724 member of the innermost enclosing namespace. See also
725 [basic.lookup.unqual]/7 */
726 if (flags & LOOKUP_HIDDEN)
727 break;
728 }
729
730 vec_safe_truncate (queue, length);
731
732 return found;
733 }
734
735 /* FNS is a value binding. If it is a (set of overloaded) functions,
736 add them into the current value. */
737
738 void
739 name_lookup::add_fns (tree fns)
740 {
741 if (!fns)
742 return;
743 else if (TREE_CODE (fns) == OVERLOAD)
744 {
745 if (TREE_TYPE (fns) != unknown_type_node)
746 fns = OVL_FUNCTION (fns);
747 }
748 else if (!DECL_DECLARES_FUNCTION_P (fns))
749 return;
750
751 add_overload (fns);
752 }
753
754 /* Add functions of a namespace to the lookup structure. */
755
756 void
757 name_lookup::adl_namespace_only (tree scope)
758 {
759 mark_seen (scope);
760
761 /* Look down into inline namespaces. */
762 if (vec<tree, va_gc> *inlinees = DECL_NAMESPACE_INLINEES (scope))
763 for (unsigned ix = inlinees->length (); ix--;)
764 adl_namespace_only ((*inlinees)[ix]);
765
766 if (tree fns = find_namespace_value (scope, name))
767 add_fns (ovl_skip_hidden (fns));
768 }
769
770 /* Find the containing non-inlined namespace, add it and all its
771 inlinees. */
772
773 void
774 name_lookup::adl_namespace (tree scope)
775 {
776 if (seen_p (scope))
777 return;
778
779 /* Find the containing non-inline namespace. */
780 while (DECL_NAMESPACE_INLINE_P (scope))
781 scope = CP_DECL_CONTEXT (scope);
782
783 adl_namespace_only (scope);
784 }
785
786 /* Adds the class and its friends to the lookup structure. */
787
788 void
789 name_lookup::adl_class_only (tree type)
790 {
791 /* Backend-built structures, such as __builtin_va_list, aren't
792 affected by all this. */
793 if (!CLASS_TYPE_P (type))
794 return;
795
796 type = TYPE_MAIN_VARIANT (type);
797
798 if (see_and_mark (type))
799 return;
800
801 tree context = decl_namespace_context (type);
802 adl_namespace (context);
803
804 complete_type (type);
805
806 /* Add friends. */
807 for (tree list = DECL_FRIENDLIST (TYPE_MAIN_DECL (type)); list;
808 list = TREE_CHAIN (list))
809 if (name == FRIEND_NAME (list))
810 for (tree friends = FRIEND_DECLS (list); friends;
811 friends = TREE_CHAIN (friends))
812 {
813 tree fn = TREE_VALUE (friends);
814
815 /* Only interested in global functions with potentially hidden
816 (i.e. unqualified) declarations. */
817 if (CP_DECL_CONTEXT (fn) != context)
818 continue;
819
820 /* Only interested in anticipated friends. (Non-anticipated
821 ones will have been inserted during the namespace
822 adl.) */
823 if (!DECL_ANTICIPATED (fn))
824 continue;
825
826 /* Template specializations are never found by name lookup.
827 (Templates themselves can be found, but not template
828 specializations.) */
829 if (TREE_CODE (fn) == FUNCTION_DECL && DECL_USE_TEMPLATE (fn))
830 continue;
831
832 add_fns (fn);
833 }
834 }
835
836 /* Adds the class and its bases to the lookup structure.
837 Returns true on error. */
838
839 void
840 name_lookup::adl_bases (tree type)
841 {
842 adl_class_only (type);
843
844 /* Process baseclasses. */
845 if (tree binfo = TYPE_BINFO (type))
846 {
847 tree base_binfo;
848 int i;
849
850 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
851 adl_bases (BINFO_TYPE (base_binfo));
852 }
853 }
854
855 /* Adds everything associated with a class argument type to the lookup
856 structure. Returns true on error.
857
858 If T is a class type (including unions), its associated classes are: the
859 class itself; the class of which it is a member, if any; and its direct
860 and indirect base classes. Its associated namespaces are the namespaces
861 of which its associated classes are members. Furthermore, if T is a
862 class template specialization, its associated namespaces and classes
863 also include: the namespaces and classes associated with the types of
864 the template arguments provided for template type parameters (excluding
865 template template parameters); the namespaces of which any template
866 template arguments are members; and the classes of which any member
867 templates used as template template arguments are members. [ Note:
868 non-type template arguments do not contribute to the set of associated
869 namespaces. --end note] */
870
871 void
872 name_lookup::adl_class (tree type)
873 {
874 /* Backend build structures, such as __builtin_va_list, aren't
875 affected by all this. */
876 if (!CLASS_TYPE_P (type))
877 return;
878
879 type = TYPE_MAIN_VARIANT (type);
880 /* We don't set found here because we have to have set seen first,
881 which is done in the adl_bases walk. */
882 if (found_p (type))
883 return;
884
885 adl_bases (type);
886 mark_found (type);
887
888 if (TYPE_CLASS_SCOPE_P (type))
889 adl_class_only (TYPE_CONTEXT (type));
890
891 /* Process template arguments. */
892 if (CLASSTYPE_TEMPLATE_INFO (type)
893 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (type)))
894 {
895 tree list = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
896 for (int i = 0; i < TREE_VEC_LENGTH (list); ++i)
897 adl_template_arg (TREE_VEC_ELT (list, i));
898 }
899 }
900
901 void
902 name_lookup::adl_expr (tree expr)
903 {
904 if (!expr)
905 return;
906
907 gcc_assert (!TYPE_P (expr));
908
909 if (TREE_TYPE (expr) != unknown_type_node)
910 {
911 adl_type (unlowered_expr_type (expr));
912 return;
913 }
914
915 if (TREE_CODE (expr) == ADDR_EXPR)
916 expr = TREE_OPERAND (expr, 0);
917 if (TREE_CODE (expr) == COMPONENT_REF
918 || TREE_CODE (expr) == OFFSET_REF)
919 expr = TREE_OPERAND (expr, 1);
920 expr = MAYBE_BASELINK_FUNCTIONS (expr);
921
922 if (OVL_P (expr))
923 for (lkp_iterator iter (expr); iter; ++iter)
924 adl_type (TREE_TYPE (*iter));
925 else if (TREE_CODE (expr) == TEMPLATE_ID_EXPR)
926 {
927 /* The working paper doesn't currently say how to handle
928 template-id arguments. The sensible thing would seem to be
929 to handle the list of template candidates like a normal
930 overload set, and handle the template arguments like we do
931 for class template specializations. */
932
933 /* First the templates. */
934 adl_expr (TREE_OPERAND (expr, 0));
935
936 /* Now the arguments. */
937 if (tree args = TREE_OPERAND (expr, 1))
938 for (int ix = TREE_VEC_LENGTH (args); ix--;)
939 adl_template_arg (TREE_VEC_ELT (args, ix));
940 }
941 }
942
943 void
944 name_lookup::adl_type (tree type)
945 {
946 if (!type)
947 return;
948
949 if (TYPE_PTRDATAMEM_P (type))
950 {
951 /* Pointer to member: associate class type and value type. */
952 adl_type (TYPE_PTRMEM_CLASS_TYPE (type));
953 adl_type (TYPE_PTRMEM_POINTED_TO_TYPE (type));
954 return;
955 }
956
957 switch (TREE_CODE (type))
958 {
959 case RECORD_TYPE:
960 if (TYPE_PTRMEMFUNC_P (type))
961 {
962 adl_type (TYPE_PTRMEMFUNC_FN_TYPE (type));
963 return;
964 }
965 /* FALLTHRU */
966 case UNION_TYPE:
967 adl_class (type);
968 return;
969
970 case METHOD_TYPE:
971 /* The basetype is referenced in the first arg type, so just
972 fall through. */
973 case FUNCTION_TYPE:
974 /* Associate the parameter types. */
975 for (tree args = TYPE_ARG_TYPES (type); args; args = TREE_CHAIN (args))
976 adl_type (TREE_VALUE (args));
977 /* FALLTHROUGH */
978
979 case POINTER_TYPE:
980 case REFERENCE_TYPE:
981 case ARRAY_TYPE:
982 adl_type (TREE_TYPE (type));
983 return;
984
985 case ENUMERAL_TYPE:
986 if (TYPE_CLASS_SCOPE_P (type))
987 adl_class_only (TYPE_CONTEXT (type));
988 adl_namespace (decl_namespace_context (type));
989 return;
990
991 case LANG_TYPE:
992 gcc_assert (type == unknown_type_node
993 || type == init_list_type_node);
994 return;
995
996 case TYPE_PACK_EXPANSION:
997 adl_type (PACK_EXPANSION_PATTERN (type));
998 return;
999
1000 default:
1001 break;
1002 }
1003 }
1004
1005 /* Adds everything associated with a template argument to the lookup
1006 structure. */
1007
1008 void
1009 name_lookup::adl_template_arg (tree arg)
1010 {
1011 /* [basic.lookup.koenig]
1012
1013 If T is a template-id, its associated namespaces and classes are
1014 ... the namespaces and classes associated with the types of the
1015 template arguments provided for template type parameters
1016 (excluding template template parameters); the namespaces in which
1017 any template template arguments are defined; and the classes in
1018 which any member templates used as template template arguments
1019 are defined. [Note: non-type template arguments do not
1020 contribute to the set of associated namespaces. ] */
1021
1022 /* Consider first template template arguments. */
1023 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
1024 || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE)
1025 ;
1026 else if (TREE_CODE (arg) == TEMPLATE_DECL)
1027 {
1028 tree ctx = CP_DECL_CONTEXT (arg);
1029
1030 /* It's not a member template. */
1031 if (TREE_CODE (ctx) == NAMESPACE_DECL)
1032 adl_namespace (ctx);
1033 /* Otherwise, it must be member template. */
1034 else
1035 adl_class_only (ctx);
1036 }
1037 /* It's an argument pack; handle it recursively. */
1038 else if (ARGUMENT_PACK_P (arg))
1039 {
1040 tree args = ARGUMENT_PACK_ARGS (arg);
1041 int i, len = TREE_VEC_LENGTH (args);
1042 for (i = 0; i < len; ++i)
1043 adl_template_arg (TREE_VEC_ELT (args, i));
1044 }
1045 /* It's not a template template argument, but it is a type template
1046 argument. */
1047 else if (TYPE_P (arg))
1048 adl_type (arg);
1049 }
1050
1051 /* Perform ADL lookup. FNS is the existing lookup result and ARGS are
1052 the call arguments. */
1053
1054 tree
1055 name_lookup::search_adl (tree fns, vec<tree, va_gc> *args)
1056 {
1057 if (fns)
1058 {
1059 deduping = true;
1060 lookup_mark (fns, true);
1061 }
1062 value = fns;
1063
1064 unsigned ix;
1065 tree arg;
1066
1067 FOR_EACH_VEC_ELT_REVERSE (*args, ix, arg)
1068 /* OMP reduction operators put an ADL-significant type as the
1069 first arg. */
1070 if (TYPE_P (arg))
1071 adl_type (arg);
1072 else
1073 adl_expr (arg);
1074
1075 fns = value;
1076
1077 return fns;
1078 }
1079
1080 static bool qualified_namespace_lookup (tree, name_lookup *);
1081 static void consider_binding_level (tree name,
1082 best_match <tree, const char *> &bm,
1083 cp_binding_level *lvl,
1084 bool look_within_fields,
1085 enum lookup_name_fuzzy_kind kind);
1086 static void diagnose_name_conflict (tree, tree);
1087
1088 /* ADL lookup of NAME. FNS is the result of regular lookup, and we
1089 don't add duplicates to it. ARGS is the vector of call
1090 arguments (which will not be empty). */
1091
1092 tree
1093 lookup_arg_dependent (tree name, tree fns, vec<tree, va_gc> *args)
1094 {
1095 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
1096 name_lookup lookup (name);
1097 fns = lookup.search_adl (fns, args);
1098 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
1099 return fns;
1100 }
1101
1102 /* FNS is an overload set of conversion functions. Return the
1103 overloads converting to TYPE. */
1104
1105 static tree
1106 extract_conversion_operator (tree fns, tree type)
1107 {
1108 tree convs = NULL_TREE;
1109 tree tpls = NULL_TREE;
1110
1111 for (ovl_iterator iter (fns); iter; ++iter)
1112 {
1113 if (same_type_p (DECL_CONV_FN_TYPE (*iter), type))
1114 convs = lookup_add (*iter, convs);
1115
1116 if (TREE_CODE (*iter) == TEMPLATE_DECL)
1117 tpls = lookup_add (*iter, tpls);
1118 }
1119
1120 if (!convs)
1121 convs = tpls;
1122
1123 return convs;
1124 }
1125
1126 /* Binary search of (ordered) MEMBER_VEC for NAME. */
1127
1128 static tree
1129 member_vec_binary_search (vec<tree, va_gc> *member_vec, tree name)
1130 {
1131 for (unsigned lo = 0, hi = member_vec->length (); lo < hi;)
1132 {
1133 unsigned mid = (lo + hi) / 2;
1134 tree binding = (*member_vec)[mid];
1135 tree binding_name = OVL_NAME (binding);
1136
1137 if (binding_name > name)
1138 hi = mid;
1139 else if (binding_name < name)
1140 lo = mid + 1;
1141 else
1142 return binding;
1143 }
1144
1145 return NULL_TREE;
1146 }
1147
1148 /* Linear search of (unordered) MEMBER_VEC for NAME. */
1149
1150 static tree
1151 member_vec_linear_search (vec<tree, va_gc> *member_vec, tree name)
1152 {
1153 for (int ix = member_vec->length (); ix--;)
1154 if (tree binding = (*member_vec)[ix])
1155 if (OVL_NAME (binding) == name)
1156 return binding;
1157
1158 return NULL_TREE;
1159 }
1160
1161 /* Linear search of (partially ordered) fields of KLASS for NAME. */
1162
1163 static tree
1164 fields_linear_search (tree klass, tree name, bool want_type)
1165 {
1166 for (tree fields = TYPE_FIELDS (klass); fields; fields = DECL_CHAIN (fields))
1167 {
1168 tree decl = fields;
1169
1170 if (TREE_CODE (decl) == FIELD_DECL
1171 && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
1172 {
1173 if (tree temp = search_anon_aggr (TREE_TYPE (decl), name, want_type))
1174 return temp;
1175 }
1176
1177 if (DECL_NAME (decl) != name)
1178 continue;
1179
1180 if (TREE_CODE (decl) == USING_DECL)
1181 {
1182 decl = strip_using_decl (decl);
1183 if (is_overloaded_fn (decl))
1184 continue;
1185 }
1186
1187 if (DECL_DECLARES_FUNCTION_P (decl))
1188 /* Functions are found separately. */
1189 continue;
1190
1191 if (!want_type || DECL_DECLARES_TYPE_P (decl))
1192 return decl;
1193 }
1194
1195 return NULL_TREE;
1196 }
1197
1198 /* Look for NAME member inside of anonymous aggregate ANON. Although
1199 such things should only contain FIELD_DECLs, we check that too
1200 late, and would give very confusing errors if we weren't
1201 permissive here. */
1202
1203 tree
1204 search_anon_aggr (tree anon, tree name, bool want_type)
1205 {
1206 gcc_assert (COMPLETE_TYPE_P (anon));
1207 tree ret = get_class_binding_direct (anon, name, want_type);
1208 return ret;
1209 }
1210
1211 /* Look for NAME as an immediate member of KLASS (including
1212 anon-members or unscoped enum member). TYPE_OR_FNS is zero for
1213 regular search. >0 to get a type binding (if there is one) and <0
1214 if you want (just) the member function binding.
1215
1216 Use this if you do not want lazy member creation. */
1217
1218 tree
1219 get_class_binding_direct (tree klass, tree name, bool want_type)
1220 {
1221 gcc_checking_assert (RECORD_OR_UNION_TYPE_P (klass));
1222
1223 /* Conversion operators can only be found by the marker conversion
1224 operator name. */
1225 bool conv_op = IDENTIFIER_CONV_OP_P (name);
1226 tree lookup = conv_op ? conv_op_identifier : name;
1227 tree val = NULL_TREE;
1228 vec<tree, va_gc> *member_vec = CLASSTYPE_MEMBER_VEC (klass);
1229
1230 if (COMPLETE_TYPE_P (klass) && member_vec)
1231 {
1232 val = member_vec_binary_search (member_vec, lookup);
1233 if (!val)
1234 ;
1235 else if (STAT_HACK_P (val))
1236 val = want_type ? STAT_TYPE (val) : STAT_DECL (val);
1237 else if (want_type && !DECL_DECLARES_TYPE_P (val))
1238 val = NULL_TREE;
1239 }
1240 else
1241 {
1242 if (member_vec && !want_type)
1243 val = member_vec_linear_search (member_vec, lookup);
1244
1245 if (!val || (TREE_CODE (val) == OVERLOAD && OVL_DEDUP_P (val)))
1246 /* Dependent using declarations are a 'field', make sure we
1247 return that even if we saw an overload already. */
1248 if (tree field_val = fields_linear_search (klass, lookup, want_type))
1249 {
1250 if (!val)
1251 val = field_val;
1252 else if (TREE_CODE (field_val) == USING_DECL)
1253 val = ovl_make (field_val, val);
1254 }
1255 }
1256
1257 /* Extract the conversion operators asked for, unless the general
1258 conversion operator was requested. */
1259 if (val && conv_op)
1260 {
1261 gcc_checking_assert (OVL_FUNCTION (val) == conv_op_marker);
1262 val = OVL_CHAIN (val);
1263 if (tree type = TREE_TYPE (name))
1264 val = extract_conversion_operator (val, type);
1265 }
1266
1267 return val;
1268 }
1269
1270 /* Look for NAME's binding in exactly KLASS. See
1271 get_class_binding_direct for argument description. Does lazy
1272 special function creation as necessary. */
1273
1274 tree
1275 get_class_binding (tree klass, tree name, bool want_type /*=false*/)
1276 {
1277 klass = complete_type (klass);
1278
1279 if (COMPLETE_TYPE_P (klass))
1280 {
1281 /* Lazily declare functions, if we're going to search these. */
1282 if (IDENTIFIER_CTOR_P (name))
1283 {
1284 if (CLASSTYPE_LAZY_DEFAULT_CTOR (klass))
1285 lazily_declare_fn (sfk_constructor, klass);
1286 if (CLASSTYPE_LAZY_COPY_CTOR (klass))
1287 lazily_declare_fn (sfk_copy_constructor, klass);
1288 if (CLASSTYPE_LAZY_MOVE_CTOR (klass))
1289 lazily_declare_fn (sfk_move_constructor, klass);
1290 }
1291 else if (IDENTIFIER_DTOR_P (name))
1292 {
1293 if (CLASSTYPE_LAZY_DESTRUCTOR (klass))
1294 lazily_declare_fn (sfk_destructor, klass);
1295 }
1296 else if (name == assign_op_identifier)
1297 {
1298 if (CLASSTYPE_LAZY_COPY_ASSIGN (klass))
1299 lazily_declare_fn (sfk_copy_assignment, klass);
1300 if (CLASSTYPE_LAZY_MOVE_ASSIGN (klass))
1301 lazily_declare_fn (sfk_move_assignment, klass);
1302 }
1303 }
1304
1305 return get_class_binding_direct (klass, name, want_type);
1306 }
1307
1308 /* Find the slot containing overloads called 'NAME'. If there is no
1309 such slot and the class is complete, create an empty one, at the
1310 correct point in the sorted member vector. Otherwise return NULL.
1311 Deals with conv_op marker handling. */
1312
1313 tree *
1314 find_member_slot (tree klass, tree name)
1315 {
1316 bool complete_p = COMPLETE_TYPE_P (klass);
1317
1318 vec<tree, va_gc> *member_vec = CLASSTYPE_MEMBER_VEC (klass);
1319 if (!member_vec)
1320 {
1321 vec_alloc (member_vec, 8);
1322 CLASSTYPE_MEMBER_VEC (klass) = member_vec;
1323 if (complete_p)
1324 {
1325 /* If the class is complete but had no member_vec, we need
1326 to add the TYPE_FIELDS into it. We're also most likely
1327 to be adding ctors & dtors, so ask for 6 spare slots (the
1328 abstract cdtors and their clones). */
1329 set_class_bindings (klass, 6);
1330 member_vec = CLASSTYPE_MEMBER_VEC (klass);
1331 }
1332 }
1333
1334 if (IDENTIFIER_CONV_OP_P (name))
1335 name = conv_op_identifier;
1336
1337 unsigned ix, length = member_vec->length ();
1338 for (ix = 0; ix < length; ix++)
1339 {
1340 tree *slot = &(*member_vec)[ix];
1341 tree fn_name = OVL_NAME (*slot);
1342
1343 if (fn_name == name)
1344 {
1345 /* If we found an existing slot, it must be a function set.
1346 Even with insertion after completion, because those only
1347 happen with artificial fns that have unspellable names.
1348 This means we do not have to deal with the stat hack
1349 either. */
1350 gcc_checking_assert (OVL_P (*slot));
1351 if (name == conv_op_identifier)
1352 {
1353 gcc_checking_assert (OVL_FUNCTION (*slot) == conv_op_marker);
1354 /* Skip the conv-op marker. */
1355 slot = &OVL_CHAIN (*slot);
1356 }
1357 return slot;
1358 }
1359
1360 if (complete_p && fn_name > name)
1361 break;
1362 }
1363
1364 /* No slot found, add one if the class is complete. */
1365 if (complete_p)
1366 {
1367 /* Do exact allocation, as we don't expect to add many. */
1368 gcc_assert (name != conv_op_identifier);
1369 vec_safe_reserve_exact (member_vec, 1);
1370 CLASSTYPE_MEMBER_VEC (klass) = member_vec;
1371 member_vec->quick_insert (ix, NULL_TREE);
1372 return &(*member_vec)[ix];
1373 }
1374
1375 return NULL;
1376 }
1377
1378 /* KLASS is an incomplete class to which we're adding a method NAME.
1379 Add a slot and deal with conv_op marker handling. */
1380
1381 tree *
1382 add_member_slot (tree klass, tree name)
1383 {
1384 gcc_assert (!COMPLETE_TYPE_P (klass));
1385
1386 vec<tree, va_gc> *member_vec = CLASSTYPE_MEMBER_VEC (klass);
1387 vec_safe_push (member_vec, NULL_TREE);
1388 CLASSTYPE_MEMBER_VEC (klass) = member_vec;
1389
1390 tree *slot = &member_vec->last ();
1391 if (IDENTIFIER_CONV_OP_P (name))
1392 {
1393 /* Install the marker prefix. */
1394 *slot = ovl_make (conv_op_marker, NULL_TREE);
1395 slot = &OVL_CHAIN (*slot);
1396 }
1397
1398 return slot;
1399 }
1400
1401 /* Comparison function to compare two MEMBER_VEC entries by name.
1402 Because we can have duplicates during insertion of TYPE_FIELDS, we
1403 do extra checking so deduping doesn't have to deal with so many
1404 cases. */
1405
1406 static int
1407 member_name_cmp (const void *a_p, const void *b_p)
1408 {
1409 tree a = *(const tree *)a_p;
1410 tree b = *(const tree *)b_p;
1411 tree name_a = DECL_NAME (TREE_CODE (a) == OVERLOAD ? OVL_FUNCTION (a) : a);
1412 tree name_b = DECL_NAME (TREE_CODE (b) == OVERLOAD ? OVL_FUNCTION (b) : b);
1413
1414 gcc_checking_assert (name_a && name_b);
1415 if (name_a != name_b)
1416 return name_a < name_b ? -1 : +1;
1417
1418 if (name_a == conv_op_identifier)
1419 {
1420 /* Strip the conv-op markers. */
1421 gcc_checking_assert (OVL_FUNCTION (a) == conv_op_marker
1422 && OVL_FUNCTION (b) == conv_op_marker);
1423 a = OVL_CHAIN (a);
1424 b = OVL_CHAIN (b);
1425 }
1426
1427 if (TREE_CODE (a) == OVERLOAD)
1428 a = OVL_FUNCTION (a);
1429 if (TREE_CODE (b) == OVERLOAD)
1430 b = OVL_FUNCTION (b);
1431
1432 /* We're in STAT_HACK or USING_DECL territory (or possibly error-land). */
1433 if (TREE_CODE (a) != TREE_CODE (b))
1434 {
1435 /* If one of them is a TYPE_DECL, it loses. */
1436 if (TREE_CODE (a) == TYPE_DECL)
1437 return +1;
1438 else if (TREE_CODE (b) == TYPE_DECL)
1439 return -1;
1440
1441 /* If one of them is a USING_DECL, it loses. */
1442 if (TREE_CODE (a) == USING_DECL)
1443 return +1;
1444 else if (TREE_CODE (b) == USING_DECL)
1445 return -1;
1446
1447 /* There are no other cases with different kinds of decls, as
1448 duplicate detection should have kicked in earlier. However,
1449 some erroneous cases get though. */
1450 gcc_assert (errorcount);
1451 }
1452
1453 /* Using source location would be the best thing here, but we can
1454 get identically-located decls in the following circumstances:
1455
1456 1) duplicate artificial type-decls for the same type.
1457
1458 2) pack expansions of using-decls.
1459
1460 We should not be doing #1, but in either case it doesn't matter
1461 how we order these. Use UID as a proxy for source ordering, so
1462 that identically-located decls still have a well-defined stable
1463 ordering. */
1464 if (DECL_UID (a) != DECL_UID (b))
1465 return DECL_UID (a) < DECL_UID (b) ? -1 : +1;
1466 gcc_assert (a == b);
1467 return 0;
1468 }
1469
1470 static struct {
1471 gt_pointer_operator new_value;
1472 void *cookie;
1473 } resort_data;
1474
1475 /* This routine compares two fields like member_name_cmp but using the
1476 pointer operator in resort_field_decl_data. We don't have to deal
1477 with duplicates here. */
1478
1479 static int
1480 resort_member_name_cmp (const void *a_p, const void *b_p)
1481 {
1482 tree a = *(const tree *)a_p;
1483 tree b = *(const tree *)b_p;
1484 tree name_a = OVL_NAME (a);
1485 tree name_b = OVL_NAME (b);
1486
1487 resort_data.new_value (&name_a, resort_data.cookie);
1488 resort_data.new_value (&name_b, resort_data.cookie);
1489
1490 gcc_checking_assert (name_a != name_b);
1491
1492 return name_a < name_b ? -1 : +1;
1493 }
1494
1495 /* Resort CLASSTYPE_MEMBER_VEC because pointers have been reordered. */
1496
1497 void
1498 resort_type_member_vec (void *obj, void */*orig_obj*/,
1499 gt_pointer_operator new_value, void* cookie)
1500 {
1501 if (vec<tree, va_gc> *member_vec = (vec<tree, va_gc> *) obj)
1502 {
1503 resort_data.new_value = new_value;
1504 resort_data.cookie = cookie;
1505 member_vec->qsort (resort_member_name_cmp);
1506 }
1507 }
1508
1509 /* Recursively count the number of fields in KLASS, including anonymous
1510 union members. */
1511
1512 static unsigned
1513 count_class_fields (tree klass)
1514 {
1515 unsigned n_fields = 0;
1516
1517 for (tree fields = TYPE_FIELDS (klass); fields; fields = DECL_CHAIN (fields))
1518 if (DECL_DECLARES_FUNCTION_P (fields))
1519 /* Functions are dealt with separately. */;
1520 else if (TREE_CODE (fields) == FIELD_DECL
1521 && ANON_AGGR_TYPE_P (TREE_TYPE (fields)))
1522 n_fields += count_class_fields (TREE_TYPE (fields));
1523 else if (DECL_NAME (fields))
1524 n_fields += 1;
1525
1526 return n_fields;
1527 }
1528
1529 /* Append all the nonfunction members fields of KLASS to MEMBER_VEC.
1530 Recurse for anonymous members. MEMBER_VEC must have space. */
1531
1532 static void
1533 member_vec_append_class_fields (vec<tree, va_gc> *member_vec, tree klass)
1534 {
1535 for (tree fields = TYPE_FIELDS (klass); fields; fields = DECL_CHAIN (fields))
1536 if (DECL_DECLARES_FUNCTION_P (fields))
1537 /* Functions are handled separately. */;
1538 else if (TREE_CODE (fields) == FIELD_DECL
1539 && ANON_AGGR_TYPE_P (TREE_TYPE (fields)))
1540 member_vec_append_class_fields (member_vec, TREE_TYPE (fields));
1541 else if (DECL_NAME (fields))
1542 {
1543 tree field = fields;
1544 /* Mark a conv-op USING_DECL with the conv-op-marker. */
1545 if (TREE_CODE (field) == USING_DECL
1546 && IDENTIFIER_CONV_OP_P (DECL_NAME (field)))
1547 field = ovl_make (conv_op_marker, field);
1548 member_vec->quick_push (field);
1549 }
1550 }
1551
1552 /* Append all of the enum values of ENUMTYPE to MEMBER_VEC.
1553 MEMBER_VEC must have space. */
1554
1555 static void
1556 member_vec_append_enum_values (vec<tree, va_gc> *member_vec, tree enumtype)
1557 {
1558 for (tree values = TYPE_VALUES (enumtype);
1559 values; values = TREE_CHAIN (values))
1560 member_vec->quick_push (TREE_VALUE (values));
1561 }
1562
1563 /* MEMBER_VEC has just had new DECLs added to it, but is sorted.
1564 DeDup adjacent DECLS of the same name. We already dealt with
1565 conflict resolution when adding the fields or methods themselves.
1566 There are three cases (which could all be combined):
1567 1) a TYPE_DECL and non TYPE_DECL. Deploy STAT_HACK as appropriate.
1568 2) a USING_DECL and an overload. If the USING_DECL is dependent,
1569 it wins. Otherwise the OVERLOAD does.
1570 3) two USING_DECLS. ...
1571
1572 member_name_cmp will have ordered duplicates as
1573 <fns><using><type> */
1574
1575 static void
1576 member_vec_dedup (vec<tree, va_gc> *member_vec)
1577 {
1578 unsigned len = member_vec->length ();
1579 unsigned store = 0;
1580
1581 if (!len)
1582 return;
1583
1584 tree name = OVL_NAME ((*member_vec)[0]);
1585 for (unsigned jx, ix = 0; ix < len; ix = jx)
1586 {
1587 tree current = NULL_TREE;
1588 tree to_type = NULL_TREE;
1589 tree to_using = NULL_TREE;
1590 tree marker = NULL_TREE;
1591
1592 for (jx = ix; jx < len; jx++)
1593 {
1594 tree next = (*member_vec)[jx];
1595 if (jx != ix)
1596 {
1597 tree next_name = OVL_NAME (next);
1598 if (next_name != name)
1599 {
1600 name = next_name;
1601 break;
1602 }
1603 }
1604
1605 if (IDENTIFIER_CONV_OP_P (name))
1606 {
1607 marker = next;
1608 next = OVL_CHAIN (next);
1609 }
1610
1611 if (TREE_CODE (next) == USING_DECL)
1612 {
1613 if (IDENTIFIER_CTOR_P (name))
1614 /* Dependent inherited ctor. */
1615 continue;
1616
1617 next = strip_using_decl (next);
1618 if (TREE_CODE (next) == USING_DECL)
1619 {
1620 to_using = next;
1621 continue;
1622 }
1623
1624 if (is_overloaded_fn (next))
1625 continue;
1626 }
1627
1628 if (DECL_DECLARES_TYPE_P (next))
1629 {
1630 to_type = next;
1631 continue;
1632 }
1633
1634 if (!current)
1635 current = next;
1636 }
1637
1638 if (to_using)
1639 {
1640 if (!current)
1641 current = to_using;
1642 else
1643 current = ovl_make (to_using, current);
1644 }
1645
1646 if (to_type)
1647 {
1648 if (!current)
1649 current = to_type;
1650 else
1651 current = stat_hack (current, to_type);
1652 }
1653
1654 if (current)
1655 {
1656 if (marker)
1657 {
1658 OVL_CHAIN (marker) = current;
1659 current = marker;
1660 }
1661 (*member_vec)[store++] = current;
1662 }
1663 }
1664
1665 while (store++ < len)
1666 member_vec->pop ();
1667 }
1668
1669 /* Add the non-function members to CLASSTYPE_MEMBER_VEC. If there is
1670 no existing MEMBER_VEC and fewer than 8 fields, do nothing. We
1671 know there must be at least 1 field -- the self-reference
1672 TYPE_DECL, except for anon aggregates, which will have at least
1673 one field. */
1674
1675 void
1676 set_class_bindings (tree klass, unsigned extra)
1677 {
1678 unsigned n_fields = count_class_fields (klass);
1679 vec<tree, va_gc> *member_vec = CLASSTYPE_MEMBER_VEC (klass);
1680
1681 if (member_vec || n_fields >= 8)
1682 {
1683 /* Append the new fields. */
1684 vec_safe_reserve_exact (member_vec, extra + n_fields);
1685 member_vec_append_class_fields (member_vec, klass);
1686 }
1687
1688 if (member_vec)
1689 {
1690 CLASSTYPE_MEMBER_VEC (klass) = member_vec;
1691 member_vec->qsort (member_name_cmp);
1692 member_vec_dedup (member_vec);
1693 }
1694 }
1695
1696 /* Insert lately defined enum ENUMTYPE into KLASS for the sorted case. */
1697
1698 void
1699 insert_late_enum_def_bindings (tree klass, tree enumtype)
1700 {
1701 int n_fields;
1702 vec<tree, va_gc> *member_vec = CLASSTYPE_MEMBER_VEC (klass);
1703
1704 /* The enum bindings will already be on the TYPE_FIELDS, so don't
1705 count them twice. */
1706 if (!member_vec)
1707 n_fields = count_class_fields (klass);
1708 else
1709 n_fields = list_length (TYPE_VALUES (enumtype));
1710
1711 if (member_vec || n_fields >= 8)
1712 {
1713 vec_safe_reserve_exact (member_vec, n_fields);
1714 if (CLASSTYPE_MEMBER_VEC (klass))
1715 member_vec_append_enum_values (member_vec, enumtype);
1716 else
1717 member_vec_append_class_fields (member_vec, klass);
1718 CLASSTYPE_MEMBER_VEC (klass) = member_vec;
1719 member_vec->qsort (member_name_cmp);
1720 member_vec_dedup (member_vec);
1721 }
1722 }
1723
1724 /* Compute the chain index of a binding_entry given the HASH value of its
1725 name and the total COUNT of chains. COUNT is assumed to be a power
1726 of 2. */
1727
1728 #define ENTRY_INDEX(HASH, COUNT) (((HASH) >> 3) & ((COUNT) - 1))
1729
1730 /* A free list of "binding_entry"s awaiting for re-use. */
1731
1732 static GTY((deletable)) binding_entry free_binding_entry = NULL;
1733
1734 /* The binding oracle; see cp-tree.h. */
1735
1736 cp_binding_oracle_function *cp_binding_oracle;
1737
1738 /* If we have a binding oracle, ask it for all namespace-scoped
1739 definitions of NAME. */
1740
1741 static inline void
1742 query_oracle (tree name)
1743 {
1744 if (!cp_binding_oracle)
1745 return;
1746
1747 /* LOOKED_UP holds the set of identifiers that we have already
1748 looked up with the oracle. */
1749 static hash_set<tree> looked_up;
1750 if (looked_up.add (name))
1751 return;
1752
1753 cp_binding_oracle (CP_ORACLE_IDENTIFIER, name);
1754 }
1755
1756 /* Create a binding_entry object for (NAME, TYPE). */
1757
1758 static inline binding_entry
1759 binding_entry_make (tree name, tree type)
1760 {
1761 binding_entry entry;
1762
1763 if (free_binding_entry)
1764 {
1765 entry = free_binding_entry;
1766 free_binding_entry = entry->chain;
1767 }
1768 else
1769 entry = ggc_alloc<binding_entry_s> ();
1770
1771 entry->name = name;
1772 entry->type = type;
1773 entry->chain = NULL;
1774
1775 return entry;
1776 }
1777
1778 /* Put ENTRY back on the free list. */
1779 #if 0
1780 static inline void
1781 binding_entry_free (binding_entry entry)
1782 {
1783 entry->name = NULL;
1784 entry->type = NULL;
1785 entry->chain = free_binding_entry;
1786 free_binding_entry = entry;
1787 }
1788 #endif
1789
1790 /* The datatype used to implement the mapping from names to types at
1791 a given scope. */
1792 struct GTY(()) binding_table_s {
1793 /* Array of chains of "binding_entry"s */
1794 binding_entry * GTY((length ("%h.chain_count"))) chain;
1795
1796 /* The number of chains in this table. This is the length of the
1797 member "chain" considered as an array. */
1798 size_t chain_count;
1799
1800 /* Number of "binding_entry"s in this table. */
1801 size_t entry_count;
1802 };
1803
1804 /* Construct TABLE with an initial CHAIN_COUNT. */
1805
1806 static inline void
1807 binding_table_construct (binding_table table, size_t chain_count)
1808 {
1809 table->chain_count = chain_count;
1810 table->entry_count = 0;
1811 table->chain = ggc_cleared_vec_alloc<binding_entry> (table->chain_count);
1812 }
1813
1814 /* Make TABLE's entries ready for reuse. */
1815 #if 0
1816 static void
1817 binding_table_free (binding_table table)
1818 {
1819 size_t i;
1820 size_t count;
1821
1822 if (table == NULL)
1823 return;
1824
1825 for (i = 0, count = table->chain_count; i < count; ++i)
1826 {
1827 binding_entry temp = table->chain[i];
1828 while (temp != NULL)
1829 {
1830 binding_entry entry = temp;
1831 temp = entry->chain;
1832 binding_entry_free (entry);
1833 }
1834 table->chain[i] = NULL;
1835 }
1836 table->entry_count = 0;
1837 }
1838 #endif
1839
1840 /* Allocate a table with CHAIN_COUNT, assumed to be a power of two. */
1841
1842 static inline binding_table
1843 binding_table_new (size_t chain_count)
1844 {
1845 binding_table table = ggc_alloc<binding_table_s> ();
1846 table->chain = NULL;
1847 binding_table_construct (table, chain_count);
1848 return table;
1849 }
1850
1851 /* Expand TABLE to twice its current chain_count. */
1852
1853 static void
1854 binding_table_expand (binding_table table)
1855 {
1856 const size_t old_chain_count = table->chain_count;
1857 const size_t old_entry_count = table->entry_count;
1858 const size_t new_chain_count = 2 * old_chain_count;
1859 binding_entry *old_chains = table->chain;
1860 size_t i;
1861
1862 binding_table_construct (table, new_chain_count);
1863 for (i = 0; i < old_chain_count; ++i)
1864 {
1865 binding_entry entry = old_chains[i];
1866 for (; entry != NULL; entry = old_chains[i])
1867 {
1868 const unsigned int hash = IDENTIFIER_HASH_VALUE (entry->name);
1869 const size_t j = ENTRY_INDEX (hash, new_chain_count);
1870
1871 old_chains[i] = entry->chain;
1872 entry->chain = table->chain[j];
1873 table->chain[j] = entry;
1874 }
1875 }
1876 table->entry_count = old_entry_count;
1877 }
1878
1879 /* Insert a binding for NAME to TYPE into TABLE. */
1880
1881 static void
1882 binding_table_insert (binding_table table, tree name, tree type)
1883 {
1884 const unsigned int hash = IDENTIFIER_HASH_VALUE (name);
1885 const size_t i = ENTRY_INDEX (hash, table->chain_count);
1886 binding_entry entry = binding_entry_make (name, type);
1887
1888 entry->chain = table->chain[i];
1889 table->chain[i] = entry;
1890 ++table->entry_count;
1891
1892 if (3 * table->chain_count < 5 * table->entry_count)
1893 binding_table_expand (table);
1894 }
1895
1896 /* Return the binding_entry, if any, that maps NAME. */
1897
1898 binding_entry
1899 binding_table_find (binding_table table, tree name)
1900 {
1901 const unsigned int hash = IDENTIFIER_HASH_VALUE (name);
1902 binding_entry entry = table->chain[ENTRY_INDEX (hash, table->chain_count)];
1903
1904 while (entry != NULL && entry->name != name)
1905 entry = entry->chain;
1906
1907 return entry;
1908 }
1909
1910 /* Apply PROC -- with DATA -- to all entries in TABLE. */
1911
1912 void
1913 binding_table_foreach (binding_table table, bt_foreach_proc proc, void *data)
1914 {
1915 size_t chain_count;
1916 size_t i;
1917
1918 if (!table)
1919 return;
1920
1921 chain_count = table->chain_count;
1922 for (i = 0; i < chain_count; ++i)
1923 {
1924 binding_entry entry = table->chain[i];
1925 for (; entry != NULL; entry = entry->chain)
1926 proc (entry, data);
1927 }
1928 }
1929 \f
1930 #ifndef ENABLE_SCOPE_CHECKING
1931 # define ENABLE_SCOPE_CHECKING 0
1932 #else
1933 # define ENABLE_SCOPE_CHECKING 1
1934 #endif
1935
1936 /* A free list of "cxx_binding"s, connected by their PREVIOUS. */
1937
1938 static GTY((deletable)) cxx_binding *free_bindings;
1939
1940 /* Initialize VALUE and TYPE field for BINDING, and set the PREVIOUS
1941 field to NULL. */
1942
1943 static inline void
1944 cxx_binding_init (cxx_binding *binding, tree value, tree type)
1945 {
1946 binding->value = value;
1947 binding->type = type;
1948 binding->previous = NULL;
1949 }
1950
1951 /* (GC)-allocate a binding object with VALUE and TYPE member initialized. */
1952
1953 static cxx_binding *
1954 cxx_binding_make (tree value, tree type)
1955 {
1956 cxx_binding *binding;
1957 if (free_bindings)
1958 {
1959 binding = free_bindings;
1960 free_bindings = binding->previous;
1961 }
1962 else
1963 binding = ggc_alloc<cxx_binding> ();
1964
1965 cxx_binding_init (binding, value, type);
1966
1967 return binding;
1968 }
1969
1970 /* Put BINDING back on the free list. */
1971
1972 static inline void
1973 cxx_binding_free (cxx_binding *binding)
1974 {
1975 binding->scope = NULL;
1976 binding->previous = free_bindings;
1977 free_bindings = binding;
1978 }
1979
1980 /* Create a new binding for NAME (with the indicated VALUE and TYPE
1981 bindings) in the class scope indicated by SCOPE. */
1982
1983 static cxx_binding *
1984 new_class_binding (tree name, tree value, tree type, cp_binding_level *scope)
1985 {
1986 cp_class_binding cb = {cxx_binding_make (value, type), name};
1987 cxx_binding *binding = cb.base;
1988 vec_safe_push (scope->class_shadowed, cb);
1989 binding->scope = scope;
1990 return binding;
1991 }
1992
1993 /* Make DECL the innermost binding for ID. The LEVEL is the binding
1994 level at which this declaration is being bound. */
1995
1996 void
1997 push_binding (tree id, tree decl, cp_binding_level* level)
1998 {
1999 cxx_binding *binding;
2000
2001 if (level != class_binding_level)
2002 {
2003 binding = cxx_binding_make (decl, NULL_TREE);
2004 binding->scope = level;
2005 }
2006 else
2007 binding = new_class_binding (id, decl, /*type=*/NULL_TREE, level);
2008
2009 /* Now, fill in the binding information. */
2010 binding->previous = IDENTIFIER_BINDING (id);
2011 INHERITED_VALUE_BINDING_P (binding) = 0;
2012 LOCAL_BINDING_P (binding) = (level != class_binding_level);
2013
2014 /* And put it on the front of the list of bindings for ID. */
2015 IDENTIFIER_BINDING (id) = binding;
2016 }
2017
2018 /* Remove the binding for DECL which should be the innermost binding
2019 for ID. */
2020
2021 void
2022 pop_local_binding (tree id, tree decl)
2023 {
2024 cxx_binding *binding;
2025
2026 if (id == NULL_TREE)
2027 /* It's easiest to write the loops that call this function without
2028 checking whether or not the entities involved have names. We
2029 get here for such an entity. */
2030 return;
2031
2032 /* Get the innermost binding for ID. */
2033 binding = IDENTIFIER_BINDING (id);
2034
2035 /* The name should be bound. */
2036 gcc_assert (binding != NULL);
2037
2038 /* The DECL will be either the ordinary binding or the type
2039 binding for this identifier. Remove that binding. */
2040 if (binding->value == decl)
2041 binding->value = NULL_TREE;
2042 else
2043 {
2044 gcc_assert (binding->type == decl);
2045 binding->type = NULL_TREE;
2046 }
2047
2048 if (!binding->value && !binding->type)
2049 {
2050 /* We're completely done with the innermost binding for this
2051 identifier. Unhook it from the list of bindings. */
2052 IDENTIFIER_BINDING (id) = binding->previous;
2053
2054 /* Add it to the free list. */
2055 cxx_binding_free (binding);
2056 }
2057 }
2058
2059 /* Remove the bindings for the decls of the current level and leave
2060 the current scope. */
2061
2062 void
2063 pop_bindings_and_leave_scope (void)
2064 {
2065 for (tree t = get_local_decls (); t; t = DECL_CHAIN (t))
2066 {
2067 tree decl = TREE_CODE (t) == TREE_LIST ? TREE_VALUE (t) : t;
2068 tree name = OVL_NAME (decl);
2069
2070 pop_local_binding (name, decl);
2071 }
2072
2073 leave_scope ();
2074 }
2075
2076 /* Strip non dependent using declarations. If DECL is dependent,
2077 surreptitiously create a typename_type and return it. */
2078
2079 tree
2080 strip_using_decl (tree decl)
2081 {
2082 if (decl == NULL_TREE)
2083 return NULL_TREE;
2084
2085 while (TREE_CODE (decl) == USING_DECL && !DECL_DEPENDENT_P (decl))
2086 decl = USING_DECL_DECLS (decl);
2087
2088 if (TREE_CODE (decl) == USING_DECL && DECL_DEPENDENT_P (decl)
2089 && USING_DECL_TYPENAME_P (decl))
2090 {
2091 /* We have found a type introduced by a using
2092 declaration at class scope that refers to a dependent
2093 type.
2094
2095 using typename :: [opt] nested-name-specifier unqualified-id ;
2096 */
2097 decl = make_typename_type (USING_DECL_SCOPE (decl),
2098 DECL_NAME (decl),
2099 typename_type, tf_error);
2100 if (decl != error_mark_node)
2101 decl = TYPE_NAME (decl);
2102 }
2103
2104 return decl;
2105 }
2106
2107 /* Return true if OVL is an overload for an anticipated builtin. */
2108
2109 static bool
2110 anticipated_builtin_p (tree ovl)
2111 {
2112 if (TREE_CODE (ovl) != OVERLOAD)
2113 return false;
2114
2115 if (!OVL_HIDDEN_P (ovl))
2116 return false;
2117
2118 tree fn = OVL_FUNCTION (ovl);
2119 gcc_checking_assert (DECL_ANTICIPATED (fn));
2120
2121 if (DECL_HIDDEN_FRIEND_P (fn))
2122 return false;
2123
2124 return true;
2125 }
2126
2127 /* BINDING records an existing declaration for a name in the current scope.
2128 But, DECL is another declaration for that same identifier in the
2129 same scope. This is the `struct stat' hack whereby a non-typedef
2130 class name or enum-name can be bound at the same level as some other
2131 kind of entity.
2132 3.3.7/1
2133
2134 A class name (9.1) or enumeration name (7.2) can be hidden by the
2135 name of an object, function, or enumerator declared in the same scope.
2136 If a class or enumeration name and an object, function, or enumerator
2137 are declared in the same scope (in any order) with the same name, the
2138 class or enumeration name is hidden wherever the object, function, or
2139 enumerator name is visible.
2140
2141 It's the responsibility of the caller to check that
2142 inserting this name is valid here. Returns nonzero if the new binding
2143 was successful. */
2144
2145 static bool
2146 supplement_binding_1 (cxx_binding *binding, tree decl)
2147 {
2148 tree bval = binding->value;
2149 bool ok = true;
2150 tree target_bval = strip_using_decl (bval);
2151 tree target_decl = strip_using_decl (decl);
2152
2153 if (TREE_CODE (target_decl) == TYPE_DECL && DECL_ARTIFICIAL (target_decl)
2154 && target_decl != target_bval
2155 && (TREE_CODE (target_bval) != TYPE_DECL
2156 /* We allow pushing an enum multiple times in a class
2157 template in order to handle late matching of underlying
2158 type on an opaque-enum-declaration followed by an
2159 enum-specifier. */
2160 || (processing_template_decl
2161 && TREE_CODE (TREE_TYPE (target_decl)) == ENUMERAL_TYPE
2162 && TREE_CODE (TREE_TYPE (target_bval)) == ENUMERAL_TYPE
2163 && (dependent_type_p (ENUM_UNDERLYING_TYPE
2164 (TREE_TYPE (target_decl)))
2165 || dependent_type_p (ENUM_UNDERLYING_TYPE
2166 (TREE_TYPE (target_bval)))))))
2167 /* The new name is the type name. */
2168 binding->type = decl;
2169 else if (/* TARGET_BVAL is null when push_class_level_binding moves
2170 an inherited type-binding out of the way to make room
2171 for a new value binding. */
2172 !target_bval
2173 /* TARGET_BVAL is error_mark_node when TARGET_DECL's name
2174 has been used in a non-class scope prior declaration.
2175 In that case, we should have already issued a
2176 diagnostic; for graceful error recovery purpose, pretend
2177 this was the intended declaration for that name. */
2178 || target_bval == error_mark_node
2179 /* If TARGET_BVAL is anticipated but has not yet been
2180 declared, pretend it is not there at all. */
2181 || anticipated_builtin_p (target_bval))
2182 binding->value = decl;
2183 else if (TREE_CODE (target_bval) == TYPE_DECL
2184 && DECL_ARTIFICIAL (target_bval)
2185 && target_decl != target_bval
2186 && (TREE_CODE (target_decl) != TYPE_DECL
2187 || same_type_p (TREE_TYPE (target_decl),
2188 TREE_TYPE (target_bval))))
2189 {
2190 /* The old binding was a type name. It was placed in
2191 VALUE field because it was thought, at the point it was
2192 declared, to be the only entity with such a name. Move the
2193 type name into the type slot; it is now hidden by the new
2194 binding. */
2195 binding->type = bval;
2196 binding->value = decl;
2197 binding->value_is_inherited = false;
2198 }
2199 else if (TREE_CODE (target_bval) == TYPE_DECL
2200 && TREE_CODE (target_decl) == TYPE_DECL
2201 && DECL_NAME (target_decl) == DECL_NAME (target_bval)
2202 && binding->scope->kind != sk_class
2203 && (same_type_p (TREE_TYPE (target_decl), TREE_TYPE (target_bval))
2204 /* If either type involves template parameters, we must
2205 wait until instantiation. */
2206 || uses_template_parms (TREE_TYPE (target_decl))
2207 || uses_template_parms (TREE_TYPE (target_bval))))
2208 /* We have two typedef-names, both naming the same type to have
2209 the same name. In general, this is OK because of:
2210
2211 [dcl.typedef]
2212
2213 In a given scope, a typedef specifier can be used to redefine
2214 the name of any type declared in that scope to refer to the
2215 type to which it already refers.
2216
2217 However, in class scopes, this rule does not apply due to the
2218 stricter language in [class.mem] prohibiting redeclarations of
2219 members. */
2220 ok = false;
2221 /* There can be two block-scope declarations of the same variable,
2222 so long as they are `extern' declarations. However, there cannot
2223 be two declarations of the same static data member:
2224
2225 [class.mem]
2226
2227 A member shall not be declared twice in the
2228 member-specification. */
2229 else if (VAR_P (target_decl)
2230 && VAR_P (target_bval)
2231 && DECL_EXTERNAL (target_decl) && DECL_EXTERNAL (target_bval)
2232 && !DECL_CLASS_SCOPE_P (target_decl))
2233 {
2234 duplicate_decls (decl, binding->value, /*newdecl_is_friend=*/false);
2235 ok = false;
2236 }
2237 else if (TREE_CODE (decl) == NAMESPACE_DECL
2238 && TREE_CODE (bval) == NAMESPACE_DECL
2239 && DECL_NAMESPACE_ALIAS (decl)
2240 && DECL_NAMESPACE_ALIAS (bval)
2241 && ORIGINAL_NAMESPACE (bval) == ORIGINAL_NAMESPACE (decl))
2242 /* [namespace.alias]
2243
2244 In a declarative region, a namespace-alias-definition can be
2245 used to redefine a namespace-alias declared in that declarative
2246 region to refer only to the namespace to which it already
2247 refers. */
2248 ok = false;
2249 else
2250 {
2251 if (!error_operand_p (bval))
2252 diagnose_name_conflict (decl, bval);
2253 ok = false;
2254 }
2255
2256 return ok;
2257 }
2258
2259 /* Diagnose a name conflict between DECL and BVAL. */
2260
2261 static void
2262 diagnose_name_conflict (tree decl, tree bval)
2263 {
2264 if (TREE_CODE (decl) == TREE_CODE (bval)
2265 && TREE_CODE (decl) != NAMESPACE_DECL
2266 && !DECL_DECLARES_FUNCTION_P (decl)
2267 && (TREE_CODE (decl) != TYPE_DECL
2268 || DECL_ARTIFICIAL (decl) == DECL_ARTIFICIAL (bval))
2269 && CP_DECL_CONTEXT (decl) == CP_DECL_CONTEXT (bval))
2270 {
2271 if (concept_definition_p (decl))
2272 error ("redeclaration of %q#D with different template parameters",
2273 decl);
2274 else
2275 error ("redeclaration of %q#D", decl);
2276 }
2277 else
2278 error ("%q#D conflicts with a previous declaration", decl);
2279
2280 inform (location_of (bval), "previous declaration %q#D", bval);
2281 }
2282
2283 /* Wrapper for supplement_binding_1. */
2284
2285 static bool
2286 supplement_binding (cxx_binding *binding, tree decl)
2287 {
2288 bool ret;
2289 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
2290 ret = supplement_binding_1 (binding, decl);
2291 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
2292 return ret;
2293 }
2294
2295 /* Replace BINDING's current value on its scope's name list with
2296 NEWVAL. */
2297
2298 static void
2299 update_local_overload (cxx_binding *binding, tree newval)
2300 {
2301 tree *d;
2302
2303 for (d = &binding->scope->names; ; d = &TREE_CHAIN (*d))
2304 if (*d == binding->value)
2305 {
2306 /* Stitch new list node in. */
2307 *d = tree_cons (NULL_TREE, NULL_TREE, TREE_CHAIN (*d));
2308 break;
2309 }
2310 else if (TREE_CODE (*d) == TREE_LIST && TREE_VALUE (*d) == binding->value)
2311 break;
2312
2313 TREE_VALUE (*d) = newval;
2314 }
2315
2316 /* Compares the parameter-type-lists of ONE and TWO and
2317 returns false if they are different. If the DECLs are template
2318 functions, the return types and the template parameter lists are
2319 compared too (DR 565). */
2320
2321 static bool
2322 matching_fn_p (tree one, tree two)
2323 {
2324 if (TREE_CODE (one) != TREE_CODE (two))
2325 return false;
2326
2327 if (!compparms (TYPE_ARG_TYPES (TREE_TYPE (one)),
2328 TYPE_ARG_TYPES (TREE_TYPE (two))))
2329 return false;
2330
2331 if (TREE_CODE (one) == TEMPLATE_DECL)
2332 {
2333 /* Compare template parms. */
2334 if (!comp_template_parms (DECL_TEMPLATE_PARMS (one),
2335 DECL_TEMPLATE_PARMS (two)))
2336 return false;
2337
2338 /* And return type. */
2339 if (!same_type_p (TREE_TYPE (TREE_TYPE (one)),
2340 TREE_TYPE (TREE_TYPE (two))))
2341 return false;
2342 }
2343
2344 if (!equivalently_constrained (one, two))
2345 return false;
2346
2347 return true;
2348 }
2349
2350 /* Push DECL into nonclass LEVEL BINDING or SLOT. OLD is the current
2351 binding value (possibly with anticipated builtins stripped).
2352 Diagnose conflicts and return updated decl. */
2353
2354 static tree
2355 update_binding (cp_binding_level *level, cxx_binding *binding, tree *slot,
2356 tree old, tree decl, bool is_friend)
2357 {
2358 tree to_val = decl;
2359 tree old_type = slot ? MAYBE_STAT_TYPE (*slot) : binding->type;
2360 tree to_type = old_type;
2361
2362 gcc_assert (level->kind == sk_namespace ? !binding
2363 : level->kind != sk_class && !slot);
2364 if (old == error_mark_node)
2365 old = NULL_TREE;
2366
2367 if (TREE_CODE (decl) == TYPE_DECL && DECL_ARTIFICIAL (decl))
2368 {
2369 tree other = to_type;
2370
2371 if (old && TREE_CODE (old) == TYPE_DECL && DECL_ARTIFICIAL (old))
2372 other = old;
2373
2374 /* Pushing an artificial typedef. See if this matches either
2375 the type slot or the old value slot. */
2376 if (!other)
2377 ;
2378 else if (same_type_p (TREE_TYPE (other), TREE_TYPE (decl)))
2379 /* Two artificial decls to same type. Do nothing. */
2380 return other;
2381 else
2382 goto conflict;
2383
2384 if (old)
2385 {
2386 /* Slide decl into the type slot, keep old unaltered */
2387 to_type = decl;
2388 to_val = old;
2389 goto done;
2390 }
2391 }
2392
2393 if (old && TREE_CODE (old) == TYPE_DECL && DECL_ARTIFICIAL (old))
2394 {
2395 /* Slide old into the type slot. */
2396 to_type = old;
2397 old = NULL_TREE;
2398 }
2399
2400 if (DECL_DECLARES_FUNCTION_P (decl))
2401 {
2402 if (!old)
2403 ;
2404 else if (OVL_P (old))
2405 {
2406 for (ovl_iterator iter (old); iter; ++iter)
2407 {
2408 tree fn = *iter;
2409
2410 if (iter.using_p () && matching_fn_p (fn, decl))
2411 {
2412 /* If a function declaration in namespace scope or
2413 block scope has the same name and the same
2414 parameter-type- list (8.3.5) as a function
2415 introduced by a using-declaration, and the
2416 declarations do not declare the same function,
2417 the program is ill-formed. [namespace.udecl]/14 */
2418 if (tree match = duplicate_decls (decl, fn, is_friend))
2419 return match;
2420 else
2421 /* FIXME: To preserve existing error behavior, we
2422 still push the decl. This might change. */
2423 diagnose_name_conflict (decl, fn);
2424 }
2425 }
2426 }
2427 else
2428 goto conflict;
2429
2430 if (to_type != old_type
2431 && warn_shadow
2432 && MAYBE_CLASS_TYPE_P (TREE_TYPE (to_type))
2433 && !(DECL_IN_SYSTEM_HEADER (decl)
2434 && DECL_IN_SYSTEM_HEADER (to_type)))
2435 warning (OPT_Wshadow, "%q#D hides constructor for %q#D",
2436 decl, to_type);
2437
2438 to_val = ovl_insert (decl, old);
2439 }
2440 else if (!old)
2441 ;
2442 else if (TREE_CODE (old) != TREE_CODE (decl))
2443 /* Different kinds of decls conflict. */
2444 goto conflict;
2445 else if (TREE_CODE (old) == TYPE_DECL)
2446 {
2447 if (same_type_p (TREE_TYPE (old), TREE_TYPE (decl)))
2448 /* Two type decls to the same type. Do nothing. */
2449 return old;
2450 else
2451 goto conflict;
2452 }
2453 else if (TREE_CODE (old) == NAMESPACE_DECL)
2454 {
2455 /* Two maybe-aliased namespaces. If they're to the same target
2456 namespace, that's ok. */
2457 if (ORIGINAL_NAMESPACE (old) != ORIGINAL_NAMESPACE (decl))
2458 goto conflict;
2459
2460 /* The new one must be an alias at this point. */
2461 gcc_assert (DECL_NAMESPACE_ALIAS (decl));
2462 return old;
2463 }
2464 else if (TREE_CODE (old) == VAR_DECL)
2465 {
2466 /* There can be two block-scope declarations of the same
2467 variable, so long as they are `extern' declarations. */
2468 if (!DECL_EXTERNAL (old) || !DECL_EXTERNAL (decl))
2469 goto conflict;
2470 else if (tree match = duplicate_decls (decl, old, false))
2471 return match;
2472 else
2473 goto conflict;
2474 }
2475 else
2476 {
2477 conflict:
2478 diagnose_name_conflict (decl, old);
2479 to_val = NULL_TREE;
2480 }
2481
2482 done:
2483 if (to_val)
2484 {
2485 if (level->kind == sk_namespace || to_type == decl || to_val == decl)
2486 add_decl_to_level (level, decl);
2487 else
2488 {
2489 gcc_checking_assert (binding->value && OVL_P (binding->value));
2490 update_local_overload (binding, to_val);
2491 }
2492
2493 if (slot)
2494 {
2495 if (STAT_HACK_P (*slot))
2496 {
2497 STAT_TYPE (*slot) = to_type;
2498 STAT_DECL (*slot) = to_val;
2499 }
2500 else if (to_type)
2501 *slot = stat_hack (to_val, to_type);
2502 else
2503 *slot = to_val;
2504 }
2505 else
2506 {
2507 binding->type = to_type;
2508 binding->value = to_val;
2509 }
2510 }
2511
2512 return decl;
2513 }
2514
2515 /* Table of identifiers to extern C declarations (or LISTS thereof). */
2516
2517 static GTY(()) hash_table<named_decl_hash> *extern_c_decls;
2518
2519 /* DECL has C linkage. If we have an existing instance, make sure the
2520 new one is compatible. Make sure it has the same exception
2521 specification [7.5, 7.6]. Add DECL to the map. */
2522
2523 static void
2524 check_extern_c_conflict (tree decl)
2525 {
2526 /* Ignore artificial or system header decls. */
2527 if (DECL_ARTIFICIAL (decl) || DECL_IN_SYSTEM_HEADER (decl))
2528 return;
2529
2530 /* This only applies to decls at namespace scope. */
2531 if (!DECL_NAMESPACE_SCOPE_P (decl))
2532 return;
2533
2534 if (!extern_c_decls)
2535 extern_c_decls = hash_table<named_decl_hash>::create_ggc (127);
2536
2537 tree *slot = extern_c_decls
2538 ->find_slot_with_hash (DECL_NAME (decl),
2539 IDENTIFIER_HASH_VALUE (DECL_NAME (decl)), INSERT);
2540 if (tree old = *slot)
2541 {
2542 if (TREE_CODE (old) == OVERLOAD)
2543 old = OVL_FUNCTION (old);
2544
2545 int mismatch = 0;
2546 if (DECL_CONTEXT (old) == DECL_CONTEXT (decl))
2547 ; /* If they're in the same context, we'll have already complained
2548 about a (possible) mismatch, when inserting the decl. */
2549 else if (!decls_match (decl, old))
2550 mismatch = 1;
2551 else if (TREE_CODE (decl) == FUNCTION_DECL
2552 && !comp_except_specs (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (old)),
2553 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)),
2554 ce_normal))
2555 mismatch = -1;
2556 else if (DECL_ASSEMBLER_NAME_SET_P (old))
2557 SET_DECL_ASSEMBLER_NAME (decl, DECL_ASSEMBLER_NAME (old));
2558
2559 if (mismatch)
2560 {
2561 auto_diagnostic_group d;
2562 pedwarn (DECL_SOURCE_LOCATION (decl), 0,
2563 "conflicting C language linkage declaration %q#D", decl);
2564 inform (DECL_SOURCE_LOCATION (old),
2565 "previous declaration %q#D", old);
2566 if (mismatch < 0)
2567 inform (DECL_SOURCE_LOCATION (decl),
2568 "due to different exception specifications");
2569 }
2570 else
2571 {
2572 if (old == *slot)
2573 /* The hash table expects OVERLOADS, so construct one with
2574 OLD as both the function and the chain. This allocate
2575 an excess OVERLOAD node, but it's rare to have multiple
2576 extern "C" decls of the same name. And we save
2577 complicating the hash table logic (which is used
2578 elsewhere). */
2579 *slot = ovl_make (old, old);
2580
2581 slot = &OVL_CHAIN (*slot);
2582
2583 /* Chain it on for c_linkage_binding's use. */
2584 *slot = tree_cons (NULL_TREE, decl, *slot);
2585 }
2586 }
2587 else
2588 *slot = decl;
2589 }
2590
2591 /* Returns a list of C-linkage decls with the name NAME. Used in
2592 c-family/c-pragma.c to implement redefine_extname pragma. */
2593
2594 tree
2595 c_linkage_bindings (tree name)
2596 {
2597 if (extern_c_decls)
2598 if (tree *slot = extern_c_decls
2599 ->find_slot_with_hash (name, IDENTIFIER_HASH_VALUE (name), NO_INSERT))
2600 {
2601 tree result = *slot;
2602 if (TREE_CODE (result) == OVERLOAD)
2603 result = OVL_CHAIN (result);
2604 return result;
2605 }
2606
2607 return NULL_TREE;
2608 }
2609
2610 /* Subroutine of check_local_shadow. */
2611
2612 static void
2613 inform_shadowed (tree shadowed)
2614 {
2615 inform (DECL_SOURCE_LOCATION (shadowed),
2616 "shadowed declaration is here");
2617 }
2618
2619 /* DECL is being declared at a local scope. Emit suitable shadow
2620 warnings. */
2621
2622 static void
2623 check_local_shadow (tree decl)
2624 {
2625 /* Don't complain about the parms we push and then pop
2626 while tentatively parsing a function declarator. */
2627 if (TREE_CODE (decl) == PARM_DECL && !DECL_CONTEXT (decl))
2628 return;
2629
2630 /* External decls are something else. */
2631 if (DECL_EXTERNAL (decl))
2632 return;
2633
2634 tree old = NULL_TREE;
2635 cp_binding_level *old_scope = NULL;
2636 if (cxx_binding *binding = outer_binding (DECL_NAME (decl), NULL, true))
2637 {
2638 old = binding->value;
2639 old_scope = binding->scope;
2640 }
2641
2642 if (old
2643 && (TREE_CODE (old) == PARM_DECL
2644 || VAR_P (old)
2645 || (TREE_CODE (old) == TYPE_DECL
2646 && (!DECL_ARTIFICIAL (old)
2647 || TREE_CODE (decl) == TYPE_DECL)))
2648 && DECL_FUNCTION_SCOPE_P (old)
2649 && (!DECL_ARTIFICIAL (decl)
2650 || is_capture_proxy (decl)
2651 || DECL_IMPLICIT_TYPEDEF_P (decl)
2652 || (VAR_P (decl) && DECL_ANON_UNION_VAR_P (decl))))
2653 {
2654 /* DECL shadows a local thing possibly of interest. */
2655
2656 /* DR 2211: check that captures and parameters
2657 do not have the same name. */
2658 if (is_capture_proxy (decl))
2659 {
2660 if (current_lambda_expr ()
2661 && DECL_CONTEXT (old) == lambda_function (current_lambda_expr ())
2662 && TREE_CODE (old) == PARM_DECL
2663 && DECL_NAME (decl) != this_identifier)
2664 {
2665 error_at (DECL_SOURCE_LOCATION (old),
2666 "lambda parameter %qD "
2667 "previously declared as a capture", old);
2668 }
2669 return;
2670 }
2671 /* Don't complain if it's from an enclosing function. */
2672 else if (DECL_CONTEXT (old) == current_function_decl
2673 && TREE_CODE (decl) != PARM_DECL
2674 && TREE_CODE (old) == PARM_DECL)
2675 {
2676 /* Go to where the parms should be and see if we find
2677 them there. */
2678 cp_binding_level *b = current_binding_level->level_chain;
2679
2680 if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
2681 /* Skip the ctor/dtor cleanup level. */
2682 b = b->level_chain;
2683
2684 /* [basic.scope.param] A parameter name shall not be redeclared
2685 in the outermost block of the function definition. */
2686 if (b->kind == sk_function_parms)
2687 {
2688 error_at (DECL_SOURCE_LOCATION (decl),
2689 "declaration of %q#D shadows a parameter", decl);
2690 inform (DECL_SOURCE_LOCATION (old),
2691 "%q#D previously declared here", old);
2692 return;
2693 }
2694 }
2695
2696 /* The local structure or class can't use parameters of
2697 the containing function anyway. */
2698 if (DECL_CONTEXT (old) != current_function_decl)
2699 {
2700 for (cp_binding_level *scope = current_binding_level;
2701 scope != old_scope; scope = scope->level_chain)
2702 if (scope->kind == sk_class
2703 && !LAMBDA_TYPE_P (scope->this_entity))
2704 return;
2705 }
2706 /* Error if redeclaring a local declared in a
2707 init-statement or in the condition of an if or
2708 switch statement when the new declaration is in the
2709 outermost block of the controlled statement.
2710 Redeclaring a variable from a for or while condition is
2711 detected elsewhere. */
2712 else if (VAR_P (old)
2713 && old_scope == current_binding_level->level_chain
2714 && (old_scope->kind == sk_cond || old_scope->kind == sk_for))
2715 {
2716 auto_diagnostic_group d;
2717 error_at (DECL_SOURCE_LOCATION (decl),
2718 "redeclaration of %q#D", decl);
2719 inform (DECL_SOURCE_LOCATION (old),
2720 "%q#D previously declared here", old);
2721 return;
2722 }
2723 /* C++11:
2724 3.3.3/3: The name declared in an exception-declaration (...)
2725 shall not be redeclared in the outermost block of the handler.
2726 3.3.3/2: A parameter name shall not be redeclared (...) in
2727 the outermost block of any handler associated with a
2728 function-try-block.
2729 3.4.1/15: The function parameter names shall not be redeclared
2730 in the exception-declaration nor in the outermost block of a
2731 handler for the function-try-block. */
2732 else if ((TREE_CODE (old) == VAR_DECL
2733 && old_scope == current_binding_level->level_chain
2734 && old_scope->kind == sk_catch)
2735 || (TREE_CODE (old) == PARM_DECL
2736 && (current_binding_level->kind == sk_catch
2737 || current_binding_level->level_chain->kind == sk_catch)
2738 && in_function_try_handler))
2739 {
2740 auto_diagnostic_group d;
2741 if (permerror (DECL_SOURCE_LOCATION (decl),
2742 "redeclaration of %q#D", decl))
2743 inform (DECL_SOURCE_LOCATION (old),
2744 "%q#D previously declared here", old);
2745 return;
2746 }
2747
2748 /* If '-Wshadow=compatible-local' is specified without other
2749 -Wshadow= flags, we will warn only when the type of the
2750 shadowing variable (DECL) can be converted to that of the
2751 shadowed parameter (OLD_LOCAL). The reason why we only check
2752 if DECL's type can be converted to OLD_LOCAL's type (but not the
2753 other way around) is because when users accidentally shadow a
2754 parameter, more than often they would use the variable
2755 thinking (mistakenly) it's still the parameter. It would be
2756 rare that users would use the variable in the place that
2757 expects the parameter but thinking it's a new decl.
2758 If either object is a TYPE_DECL, '-Wshadow=compatible-local'
2759 warns regardless of whether one of the types involved
2760 is a subclass of the other, since that is never okay. */
2761
2762 enum opt_code warning_code;
2763 if (warn_shadow)
2764 warning_code = OPT_Wshadow;
2765 else if (same_type_p (TREE_TYPE (old), TREE_TYPE (decl))
2766 || TREE_CODE (decl) == TYPE_DECL
2767 || TREE_CODE (old) == TYPE_DECL
2768 || (!dependent_type_p (TREE_TYPE (decl))
2769 && !dependent_type_p (TREE_TYPE (old))
2770 /* If the new decl uses auto, we don't yet know
2771 its type (the old type cannot be using auto
2772 at this point, without also being
2773 dependent). This is an indication we're
2774 (now) doing the shadow checking too
2775 early. */
2776 && !type_uses_auto (TREE_TYPE (decl))
2777 && can_convert_arg (TREE_TYPE (old), TREE_TYPE (decl),
2778 decl, LOOKUP_IMPLICIT, tf_none)))
2779 warning_code = OPT_Wshadow_compatible_local;
2780 else
2781 warning_code = OPT_Wshadow_local;
2782
2783 const char *msg;
2784 if (TREE_CODE (old) == PARM_DECL)
2785 msg = "declaration of %q#D shadows a parameter";
2786 else if (is_capture_proxy (old))
2787 msg = "declaration of %qD shadows a lambda capture";
2788 else
2789 msg = "declaration of %qD shadows a previous local";
2790
2791 auto_diagnostic_group d;
2792 if (warning_at (DECL_SOURCE_LOCATION (decl), warning_code, msg, decl))
2793 inform_shadowed (old);
2794 return;
2795 }
2796
2797 if (!warn_shadow)
2798 return;
2799
2800 /* Don't warn for artificial things that are not implicit typedefs. */
2801 if (DECL_ARTIFICIAL (decl) && !DECL_IMPLICIT_TYPEDEF_P (decl))
2802 return;
2803
2804 if (nonlambda_method_basetype ())
2805 if (tree member = lookup_member (current_nonlambda_class_type (),
2806 DECL_NAME (decl), /*protect=*/0,
2807 /*want_type=*/false, tf_warning_or_error))
2808 {
2809 member = MAYBE_BASELINK_FUNCTIONS (member);
2810
2811 /* Warn if a variable shadows a non-function, or the variable
2812 is a function or a pointer-to-function. */
2813 if (!OVL_P (member)
2814 || TREE_CODE (decl) == FUNCTION_DECL
2815 || TYPE_PTRFN_P (TREE_TYPE (decl))
2816 || TYPE_PTRMEMFUNC_P (TREE_TYPE (decl)))
2817 {
2818 auto_diagnostic_group d;
2819 if (warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wshadow,
2820 "declaration of %qD shadows a member of %qT",
2821 decl, current_nonlambda_class_type ())
2822 && DECL_P (member))
2823 inform_shadowed (member);
2824 }
2825 return;
2826 }
2827
2828 /* Now look for a namespace shadow. */
2829 old = find_namespace_value (current_namespace, DECL_NAME (decl));
2830 if (old
2831 && (VAR_P (old)
2832 || (TREE_CODE (old) == TYPE_DECL
2833 && (!DECL_ARTIFICIAL (old)
2834 || TREE_CODE (decl) == TYPE_DECL)))
2835 && !instantiating_current_function_p ())
2836 /* XXX shadow warnings in outer-more namespaces */
2837 {
2838 auto_diagnostic_group d;
2839 if (warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wshadow,
2840 "declaration of %qD shadows a global declaration",
2841 decl))
2842 inform_shadowed (old);
2843 return;
2844 }
2845
2846 return;
2847 }
2848
2849 /* DECL is being pushed inside function CTX. Set its context, if
2850 needed. */
2851
2852 static void
2853 set_decl_context_in_fn (tree ctx, tree decl)
2854 {
2855 if (!DECL_CONTEXT (decl)
2856 /* A local declaration for a function doesn't constitute
2857 nesting. */
2858 && TREE_CODE (decl) != FUNCTION_DECL
2859 /* A local declaration for an `extern' variable is in the
2860 scope of the current namespace, not the current
2861 function. */
2862 && !(VAR_P (decl) && DECL_EXTERNAL (decl))
2863 /* When parsing the parameter list of a function declarator,
2864 don't set DECL_CONTEXT to an enclosing function. When we
2865 push the PARM_DECLs in order to process the function body,
2866 current_binding_level->this_entity will be set. */
2867 && !(TREE_CODE (decl) == PARM_DECL
2868 && current_binding_level->kind == sk_function_parms
2869 && current_binding_level->this_entity == NULL))
2870 DECL_CONTEXT (decl) = ctx;
2871
2872 /* If this is the declaration for a namespace-scope function,
2873 but the declaration itself is in a local scope, mark the
2874 declaration. */
2875 if (TREE_CODE (decl) == FUNCTION_DECL && DECL_NAMESPACE_SCOPE_P (decl))
2876 DECL_LOCAL_FUNCTION_P (decl) = 1;
2877 }
2878
2879 /* DECL is a local-scope decl with linkage. SHADOWED is true if the
2880 name is already bound at the current level.
2881
2882 [basic.link] If there is a visible declaration of an entity with
2883 linkage having the same name and type, ignoring entities declared
2884 outside the innermost enclosing namespace scope, the block scope
2885 declaration declares that same entity and receives the linkage of
2886 the previous declaration.
2887
2888 Also, make sure that this decl matches any existing external decl
2889 in the enclosing namespace. */
2890
2891 static void
2892 set_local_extern_decl_linkage (tree decl, bool shadowed)
2893 {
2894 tree ns_value = decl; /* Unique marker. */
2895
2896 if (!shadowed)
2897 {
2898 tree loc_value = innermost_non_namespace_value (DECL_NAME (decl));
2899 if (!loc_value)
2900 {
2901 ns_value
2902 = find_namespace_value (current_namespace, DECL_NAME (decl));
2903 loc_value = ns_value;
2904 }
2905 if (loc_value == error_mark_node
2906 /* An ambiguous lookup. */
2907 || (loc_value && TREE_CODE (loc_value) == TREE_LIST))
2908 loc_value = NULL_TREE;
2909
2910 for (ovl_iterator iter (loc_value); iter; ++iter)
2911 if (!iter.hidden_p ()
2912 && (TREE_STATIC (*iter) || DECL_EXTERNAL (*iter))
2913 && decls_match (*iter, decl))
2914 {
2915 /* The standard only says that the local extern inherits
2916 linkage from the previous decl; in particular, default
2917 args are not shared. Add the decl into a hash table to
2918 make sure only the previous decl in this case is seen
2919 by the middle end. */
2920 struct cxx_int_tree_map *h;
2921
2922 /* We inherit the outer decl's linkage. But we're a
2923 different decl. */
2924 TREE_PUBLIC (decl) = TREE_PUBLIC (*iter);
2925
2926 if (cp_function_chain->extern_decl_map == NULL)
2927 cp_function_chain->extern_decl_map
2928 = hash_table<cxx_int_tree_map_hasher>::create_ggc (20);
2929
2930 h = ggc_alloc<cxx_int_tree_map> ();
2931 h->uid = DECL_UID (decl);
2932 h->to = *iter;
2933 cxx_int_tree_map **loc = cp_function_chain->extern_decl_map
2934 ->find_slot (h, INSERT);
2935 *loc = h;
2936 break;
2937 }
2938 }
2939
2940 if (TREE_PUBLIC (decl))
2941 {
2942 /* DECL is externally visible. Make sure it matches a matching
2943 decl in the namespace scope. We only really need to check
2944 this when inserting the decl, not when we find an existing
2945 match in the current scope. However, in practice we're
2946 going to be inserting a new decl in the majority of cases --
2947 who writes multiple extern decls for the same thing in the
2948 same local scope? Doing it here often avoids a duplicate
2949 namespace lookup. */
2950
2951 /* Avoid repeating a lookup. */
2952 if (ns_value == decl)
2953 ns_value = find_namespace_value (current_namespace, DECL_NAME (decl));
2954
2955 if (ns_value == error_mark_node
2956 || (ns_value && TREE_CODE (ns_value) == TREE_LIST))
2957 ns_value = NULL_TREE;
2958
2959 for (ovl_iterator iter (ns_value); iter; ++iter)
2960 {
2961 tree other = *iter;
2962
2963 if (!(TREE_PUBLIC (other) || DECL_EXTERNAL (other)))
2964 ; /* Not externally visible. */
2965 else if (DECL_EXTERN_C_P (decl) && DECL_EXTERN_C_P (other))
2966 ; /* Both are extern "C", we'll check via that mechanism. */
2967 else if (TREE_CODE (other) != TREE_CODE (decl)
2968 || ((VAR_P (decl) || matching_fn_p (other, decl))
2969 && !comptypes (TREE_TYPE (decl), TREE_TYPE (other),
2970 COMPARE_REDECLARATION)))
2971 {
2972 auto_diagnostic_group d;
2973 if (permerror (DECL_SOURCE_LOCATION (decl),
2974 "local external declaration %q#D", decl))
2975 inform (DECL_SOURCE_LOCATION (other),
2976 "does not match previous declaration %q#D", other);
2977 break;
2978 }
2979 }
2980 }
2981 }
2982
2983 /* Record DECL as belonging to the current lexical scope. Check for
2984 errors (such as an incompatible declaration for the same name
2985 already seen in the same scope). IS_FRIEND is true if DECL is
2986 declared as a friend.
2987
2988 Returns either DECL or an old decl for the same name. If an old
2989 decl is returned, it may have been smashed to agree with what DECL
2990 says. */
2991
2992 static tree
2993 do_pushdecl (tree decl, bool is_friend)
2994 {
2995 if (decl == error_mark_node)
2996 return error_mark_node;
2997
2998 if (!DECL_TEMPLATE_PARM_P (decl) && current_function_decl)
2999 set_decl_context_in_fn (current_function_decl, decl);
3000
3001 /* The binding level we will be pushing into. During local class
3002 pushing, we want to push to the containing scope. */
3003 cp_binding_level *level = current_binding_level;
3004 while (level->kind == sk_class
3005 || level->kind == sk_cleanup)
3006 level = level->level_chain;
3007
3008 /* An anonymous namespace has a NULL DECL_NAME, but we still want to
3009 insert it. Other NULL-named decls, not so much. */
3010 tree name = DECL_NAME (decl);
3011 if (name || TREE_CODE (decl) == NAMESPACE_DECL)
3012 {
3013 cxx_binding *binding = NULL; /* Local scope binding. */
3014 tree ns = NULL_TREE; /* Searched namespace. */
3015 tree *slot = NULL; /* Binding slot in namespace. */
3016 tree old = NULL_TREE;
3017
3018 if (level->kind == sk_namespace)
3019 {
3020 /* We look in the decl's namespace for an existing
3021 declaration, even though we push into the current
3022 namespace. */
3023 ns = (DECL_NAMESPACE_SCOPE_P (decl)
3024 ? CP_DECL_CONTEXT (decl) : current_namespace);
3025 /* Create the binding, if this is current namespace, because
3026 that's where we'll be pushing anyway. */
3027 slot = find_namespace_slot (ns, name, ns == current_namespace);
3028 if (slot)
3029 old = MAYBE_STAT_DECL (*slot);
3030 }
3031 else
3032 {
3033 binding = find_local_binding (level, name);
3034 if (binding)
3035 old = binding->value;
3036 }
3037
3038 if (current_function_decl && VAR_OR_FUNCTION_DECL_P (decl)
3039 && DECL_EXTERNAL (decl))
3040 set_local_extern_decl_linkage (decl, old != NULL_TREE);
3041
3042 if (old == error_mark_node)
3043 old = NULL_TREE;
3044
3045 for (ovl_iterator iter (old); iter; ++iter)
3046 if (iter.using_p ())
3047 ; /* Ignore using decls here. */
3048 else if (tree match = duplicate_decls (decl, *iter, is_friend))
3049 {
3050 if (match == error_mark_node)
3051 ;
3052 else if (TREE_CODE (match) == TYPE_DECL)
3053 /* The IDENTIFIER will have the type referring to the
3054 now-smashed TYPE_DECL, because ...? Reset it. */
3055 SET_IDENTIFIER_TYPE_VALUE (name, TREE_TYPE (match));
3056 else if (iter.hidden_p () && !DECL_HIDDEN_P (match))
3057 {
3058 /* Unhiding a previously hidden decl. */
3059 tree head = iter.reveal_node (old);
3060 if (head != old)
3061 {
3062 if (!ns)
3063 {
3064 update_local_overload (binding, head);
3065 binding->value = head;
3066 }
3067 else if (STAT_HACK_P (*slot))
3068 STAT_DECL (*slot) = head;
3069 else
3070 *slot = head;
3071 }
3072 if (DECL_EXTERN_C_P (match))
3073 /* We need to check and register the decl now. */
3074 check_extern_c_conflict (match);
3075 }
3076 return match;
3077 }
3078
3079 /* We are pushing a new decl. */
3080
3081 /* Skip a hidden builtin we failed to match already. There can
3082 only be one. */
3083 if (old && anticipated_builtin_p (old))
3084 old = OVL_CHAIN (old);
3085
3086 check_template_shadow (decl);
3087
3088 if (DECL_DECLARES_FUNCTION_P (decl))
3089 {
3090 check_default_args (decl);
3091
3092 if (is_friend)
3093 {
3094 if (level->kind != sk_namespace)
3095 {
3096 /* In a local class, a friend function declaration must
3097 find a matching decl in the innermost non-class scope.
3098 [class.friend/11] */
3099 error_at (DECL_SOURCE_LOCATION (decl),
3100 "friend declaration %qD in local class without "
3101 "prior local declaration", decl);
3102 /* Don't attempt to push it. */
3103 return error_mark_node;
3104 }
3105 /* Hide it from ordinary lookup. */
3106 DECL_ANTICIPATED (decl) = DECL_HIDDEN_FRIEND_P (decl) = true;
3107 }
3108 }
3109
3110 if (level->kind != sk_namespace)
3111 {
3112 check_local_shadow (decl);
3113
3114 if (TREE_CODE (decl) == NAMESPACE_DECL)
3115 /* A local namespace alias. */
3116 set_identifier_type_value (name, NULL_TREE);
3117
3118 if (!binding)
3119 binding = create_local_binding (level, name);
3120 }
3121 else if (!slot)
3122 {
3123 ns = current_namespace;
3124 slot = find_namespace_slot (ns, name, true);
3125 /* Update OLD to reflect the namespace we're going to be
3126 pushing into. */
3127 old = MAYBE_STAT_DECL (*slot);
3128 }
3129
3130 old = update_binding (level, binding, slot, old, decl, is_friend);
3131
3132 if (old != decl)
3133 /* An existing decl matched, use it. */
3134 decl = old;
3135 else if (TREE_CODE (decl) == TYPE_DECL)
3136 {
3137 tree type = TREE_TYPE (decl);
3138
3139 if (type != error_mark_node)
3140 {
3141 if (TYPE_NAME (type) != decl)
3142 set_underlying_type (decl);
3143
3144 if (!ns)
3145 set_identifier_type_value_with_scope (name, decl, level);
3146 else
3147 SET_IDENTIFIER_TYPE_VALUE (name, global_type_node);
3148 }
3149
3150 /* If this is a locally defined typedef in a function that
3151 is not a template instantation, record it to implement
3152 -Wunused-local-typedefs. */
3153 if (!instantiating_current_function_p ())
3154 record_locally_defined_typedef (decl);
3155 }
3156 else if (VAR_P (decl))
3157 maybe_register_incomplete_var (decl);
3158
3159 if ((VAR_P (decl) || TREE_CODE (decl) == FUNCTION_DECL)
3160 && DECL_EXTERN_C_P (decl))
3161 check_extern_c_conflict (decl);
3162 }
3163 else
3164 add_decl_to_level (level, decl);
3165
3166 return decl;
3167 }
3168
3169 /* Record a decl-node X as belonging to the current lexical scope.
3170 It's a friend if IS_FRIEND is true -- which affects exactly where
3171 we push it. */
3172
3173 tree
3174 pushdecl (tree x, bool is_friend)
3175 {
3176 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
3177 tree ret = do_pushdecl (x, is_friend);
3178 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
3179 return ret;
3180 }
3181
3182 /* Enter DECL into the symbol table, if that's appropriate. Returns
3183 DECL, or a modified version thereof. */
3184
3185 tree
3186 maybe_push_decl (tree decl)
3187 {
3188 tree type = TREE_TYPE (decl);
3189
3190 /* Add this decl to the current binding level, but not if it comes
3191 from another scope, e.g. a static member variable. TEM may equal
3192 DECL or it may be a previous decl of the same name. */
3193 if (decl == error_mark_node
3194 || (TREE_CODE (decl) != PARM_DECL
3195 && DECL_CONTEXT (decl) != NULL_TREE
3196 /* Definitions of namespace members outside their namespace are
3197 possible. */
3198 && !DECL_NAMESPACE_SCOPE_P (decl))
3199 || (TREE_CODE (decl) == TEMPLATE_DECL && !namespace_bindings_p ())
3200 || type == unknown_type_node
3201 /* The declaration of a template specialization does not affect
3202 the functions available for overload resolution, so we do not
3203 call pushdecl. */
3204 || (TREE_CODE (decl) == FUNCTION_DECL
3205 && DECL_TEMPLATE_SPECIALIZATION (decl)))
3206 return decl;
3207 else
3208 return pushdecl (decl);
3209 }
3210
3211 /* Bind DECL to ID in the current_binding_level, assumed to be a local
3212 binding level. If IS_USING is true, DECL got here through a
3213 using-declaration. */
3214
3215 static void
3216 push_local_binding (tree id, tree decl, bool is_using)
3217 {
3218 /* Skip over any local classes. This makes sense if we call
3219 push_local_binding with a friend decl of a local class. */
3220 cp_binding_level *b = innermost_nonclass_level ();
3221
3222 gcc_assert (b->kind != sk_namespace);
3223 if (find_local_binding (b, id))
3224 {
3225 /* Supplement the existing binding. */
3226 if (!supplement_binding (IDENTIFIER_BINDING (id), decl))
3227 /* It didn't work. Something else must be bound at this
3228 level. Do not add DECL to the list of things to pop
3229 later. */
3230 return;
3231 }
3232 else
3233 /* Create a new binding. */
3234 push_binding (id, decl, b);
3235
3236 if (TREE_CODE (decl) == OVERLOAD || is_using)
3237 /* We must put the OVERLOAD or using into a TREE_LIST since we
3238 cannot use the decl's chain itself. */
3239 decl = build_tree_list (NULL_TREE, decl);
3240
3241 /* And put DECL on the list of things declared by the current
3242 binding level. */
3243 add_decl_to_level (b, decl);
3244 }
3245
3246 \f
3247 /* true means unconditionally make a BLOCK for the next level pushed. */
3248
3249 static bool keep_next_level_flag;
3250
3251 static int binding_depth = 0;
3252
3253 static void
3254 indent (int depth)
3255 {
3256 int i;
3257
3258 for (i = 0; i < depth * 2; i++)
3259 putc (' ', stderr);
3260 }
3261
3262 /* Return a string describing the kind of SCOPE we have. */
3263 static const char *
3264 cp_binding_level_descriptor (cp_binding_level *scope)
3265 {
3266 /* The order of this table must match the "scope_kind"
3267 enumerators. */
3268 static const char* scope_kind_names[] = {
3269 "block-scope",
3270 "cleanup-scope",
3271 "try-scope",
3272 "catch-scope",
3273 "for-scope",
3274 "function-parameter-scope",
3275 "class-scope",
3276 "namespace-scope",
3277 "template-parameter-scope",
3278 "template-explicit-spec-scope"
3279 };
3280 const scope_kind kind = scope->explicit_spec_p
3281 ? sk_template_spec : scope->kind;
3282
3283 return scope_kind_names[kind];
3284 }
3285
3286 /* Output a debugging information about SCOPE when performing
3287 ACTION at LINE. */
3288 static void
3289 cp_binding_level_debug (cp_binding_level *scope, int line, const char *action)
3290 {
3291 const char *desc = cp_binding_level_descriptor (scope);
3292 if (scope->this_entity)
3293 verbatim ("%s %<%s(%E)%> %p %d", action, desc,
3294 scope->this_entity, (void *) scope, line);
3295 else
3296 verbatim ("%s %s %p %d", action, desc, (void *) scope, line);
3297 }
3298
3299 /* A chain of binding_level structures awaiting reuse. */
3300
3301 static GTY((deletable)) cp_binding_level *free_binding_level;
3302
3303 /* Insert SCOPE as the innermost binding level. */
3304
3305 void
3306 push_binding_level (cp_binding_level *scope)
3307 {
3308 /* Add it to the front of currently active scopes stack. */
3309 scope->level_chain = current_binding_level;
3310 current_binding_level = scope;
3311 keep_next_level_flag = false;
3312
3313 if (ENABLE_SCOPE_CHECKING)
3314 {
3315 scope->binding_depth = binding_depth;
3316 indent (binding_depth);
3317 cp_binding_level_debug (scope, LOCATION_LINE (input_location),
3318 "push");
3319 binding_depth++;
3320 }
3321 }
3322
3323 /* Create a new KIND scope and make it the top of the active scopes stack.
3324 ENTITY is the scope of the associated C++ entity (namespace, class,
3325 function, C++0x enumeration); it is NULL otherwise. */
3326
3327 cp_binding_level *
3328 begin_scope (scope_kind kind, tree entity)
3329 {
3330 cp_binding_level *scope;
3331
3332 /* Reuse or create a struct for this binding level. */
3333 if (!ENABLE_SCOPE_CHECKING && free_binding_level)
3334 {
3335 scope = free_binding_level;
3336 free_binding_level = scope->level_chain;
3337 memset (scope, 0, sizeof (cp_binding_level));
3338 }
3339 else
3340 scope = ggc_cleared_alloc<cp_binding_level> ();
3341
3342 scope->this_entity = entity;
3343 scope->more_cleanups_ok = true;
3344 switch (kind)
3345 {
3346 case sk_cleanup:
3347 scope->keep = true;
3348 break;
3349
3350 case sk_template_spec:
3351 scope->explicit_spec_p = true;
3352 kind = sk_template_parms;
3353 /* Fall through. */
3354 case sk_template_parms:
3355 case sk_block:
3356 case sk_try:
3357 case sk_catch:
3358 case sk_for:
3359 case sk_cond:
3360 case sk_class:
3361 case sk_scoped_enum:
3362 case sk_function_parms:
3363 case sk_transaction:
3364 case sk_omp:
3365 scope->keep = keep_next_level_flag;
3366 break;
3367
3368 case sk_namespace:
3369 NAMESPACE_LEVEL (entity) = scope;
3370 break;
3371
3372 default:
3373 /* Should not happen. */
3374 gcc_unreachable ();
3375 break;
3376 }
3377 scope->kind = kind;
3378
3379 push_binding_level (scope);
3380
3381 return scope;
3382 }
3383
3384 /* We're about to leave current scope. Pop the top of the stack of
3385 currently active scopes. Return the enclosing scope, now active. */
3386
3387 cp_binding_level *
3388 leave_scope (void)
3389 {
3390 cp_binding_level *scope = current_binding_level;
3391
3392 if (scope->kind == sk_namespace && class_binding_level)
3393 current_binding_level = class_binding_level;
3394
3395 /* We cannot leave a scope, if there are none left. */
3396 if (NAMESPACE_LEVEL (global_namespace))
3397 gcc_assert (!global_scope_p (scope));
3398
3399 if (ENABLE_SCOPE_CHECKING)
3400 {
3401 indent (--binding_depth);
3402 cp_binding_level_debug (scope, LOCATION_LINE (input_location),
3403 "leave");
3404 }
3405
3406 /* Move one nesting level up. */
3407 current_binding_level = scope->level_chain;
3408
3409 /* Namespace-scopes are left most probably temporarily, not
3410 completely; they can be reopened later, e.g. in namespace-extension
3411 or any name binding activity that requires us to resume a
3412 namespace. For classes, we cache some binding levels. For other
3413 scopes, we just make the structure available for reuse. */
3414 if (scope->kind != sk_namespace
3415 && scope != previous_class_level)
3416 {
3417 scope->level_chain = free_binding_level;
3418 gcc_assert (!ENABLE_SCOPE_CHECKING
3419 || scope->binding_depth == binding_depth);
3420 free_binding_level = scope;
3421 }
3422
3423 if (scope->kind == sk_class)
3424 {
3425 /* Reset DEFINING_CLASS_P to allow for reuse of a
3426 class-defining scope in a non-defining context. */
3427 scope->defining_class_p = 0;
3428
3429 /* Find the innermost enclosing class scope, and reset
3430 CLASS_BINDING_LEVEL appropriately. */
3431 class_binding_level = NULL;
3432 for (scope = current_binding_level; scope; scope = scope->level_chain)
3433 if (scope->kind == sk_class)
3434 {
3435 class_binding_level = scope;
3436 break;
3437 }
3438 }
3439
3440 return current_binding_level;
3441 }
3442
3443 /* When we exit a toplevel class scope, we save its binding level so
3444 that we can restore it quickly. Here, we've entered some other
3445 class, so we must invalidate our cache. */
3446
3447 void
3448 invalidate_class_lookup_cache (void)
3449 {
3450 previous_class_level->level_chain = free_binding_level;
3451 free_binding_level = previous_class_level;
3452 previous_class_level = NULL;
3453 }
3454
3455 static void
3456 resume_scope (cp_binding_level* b)
3457 {
3458 /* Resuming binding levels is meant only for namespaces,
3459 and those cannot nest into classes. */
3460 gcc_assert (!class_binding_level);
3461 /* Also, resuming a non-directly nested namespace is a no-no. */
3462 gcc_assert (b->level_chain == current_binding_level);
3463 current_binding_level = b;
3464 if (ENABLE_SCOPE_CHECKING)
3465 {
3466 b->binding_depth = binding_depth;
3467 indent (binding_depth);
3468 cp_binding_level_debug (b, LOCATION_LINE (input_location), "resume");
3469 binding_depth++;
3470 }
3471 }
3472
3473 /* Return the innermost binding level that is not for a class scope. */
3474
3475 static cp_binding_level *
3476 innermost_nonclass_level (void)
3477 {
3478 cp_binding_level *b;
3479
3480 b = current_binding_level;
3481 while (b->kind == sk_class)
3482 b = b->level_chain;
3483
3484 return b;
3485 }
3486
3487 /* We're defining an object of type TYPE. If it needs a cleanup, but
3488 we're not allowed to add any more objects with cleanups to the current
3489 scope, create a new binding level. */
3490
3491 void
3492 maybe_push_cleanup_level (tree type)
3493 {
3494 if (type != error_mark_node
3495 && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
3496 && current_binding_level->more_cleanups_ok == 0)
3497 {
3498 begin_scope (sk_cleanup, NULL);
3499 current_binding_level->statement_list = push_stmt_list ();
3500 }
3501 }
3502
3503 /* Return true if we are in the global binding level. */
3504
3505 bool
3506 global_bindings_p (void)
3507 {
3508 return global_scope_p (current_binding_level);
3509 }
3510
3511 /* True if we are currently in a toplevel binding level. This
3512 means either the global binding level or a namespace in a toplevel
3513 binding level. Since there are no non-toplevel namespace levels,
3514 this really means any namespace or template parameter level. We
3515 also include a class whose context is toplevel. */
3516
3517 bool
3518 toplevel_bindings_p (void)
3519 {
3520 cp_binding_level *b = innermost_nonclass_level ();
3521
3522 return b->kind == sk_namespace || b->kind == sk_template_parms;
3523 }
3524
3525 /* True if this is a namespace scope, or if we are defining a class
3526 which is itself at namespace scope, or whose enclosing class is
3527 such a class, etc. */
3528
3529 bool
3530 namespace_bindings_p (void)
3531 {
3532 cp_binding_level *b = innermost_nonclass_level ();
3533
3534 return b->kind == sk_namespace;
3535 }
3536
3537 /* True if the innermost non-class scope is a block scope. */
3538
3539 bool
3540 local_bindings_p (void)
3541 {
3542 cp_binding_level *b = innermost_nonclass_level ();
3543 return b->kind < sk_function_parms || b->kind == sk_omp;
3544 }
3545
3546 /* True if the current level needs to have a BLOCK made. */
3547
3548 bool
3549 kept_level_p (void)
3550 {
3551 return (current_binding_level->blocks != NULL_TREE
3552 || current_binding_level->keep
3553 || current_binding_level->kind == sk_cleanup
3554 || current_binding_level->names != NULL_TREE
3555 || current_binding_level->using_directives);
3556 }
3557
3558 /* Returns the kind of the innermost scope. */
3559
3560 scope_kind
3561 innermost_scope_kind (void)
3562 {
3563 return current_binding_level->kind;
3564 }
3565
3566 /* Returns true if this scope was created to store template parameters. */
3567
3568 bool
3569 template_parm_scope_p (void)
3570 {
3571 return innermost_scope_kind () == sk_template_parms;
3572 }
3573
3574 /* If KEEP is true, make a BLOCK node for the next binding level,
3575 unconditionally. Otherwise, use the normal logic to decide whether
3576 or not to create a BLOCK. */
3577
3578 void
3579 keep_next_level (bool keep)
3580 {
3581 keep_next_level_flag = keep;
3582 }
3583
3584 /* Return the list of declarations of the current local scope. */
3585
3586 tree
3587 get_local_decls (void)
3588 {
3589 gcc_assert (current_binding_level->kind != sk_namespace
3590 && current_binding_level->kind != sk_class);
3591 return current_binding_level->names;
3592 }
3593
3594 /* Return how many function prototypes we are currently nested inside. */
3595
3596 int
3597 function_parm_depth (void)
3598 {
3599 int level = 0;
3600 cp_binding_level *b;
3601
3602 for (b = current_binding_level;
3603 b->kind == sk_function_parms;
3604 b = b->level_chain)
3605 ++level;
3606
3607 return level;
3608 }
3609
3610 /* For debugging. */
3611 static int no_print_functions = 0;
3612 static int no_print_builtins = 0;
3613
3614 static void
3615 print_binding_level (cp_binding_level* lvl)
3616 {
3617 tree t;
3618 int i = 0, len;
3619 if (lvl->this_entity)
3620 print_node_brief (stderr, "entity=", lvl->this_entity, 1);
3621 fprintf (stderr, " blocks=%p", (void *) lvl->blocks);
3622 if (lvl->more_cleanups_ok)
3623 fprintf (stderr, " more-cleanups-ok");
3624 if (lvl->have_cleanups)
3625 fprintf (stderr, " have-cleanups");
3626 fprintf (stderr, "\n");
3627 if (lvl->names)
3628 {
3629 fprintf (stderr, " names:\t");
3630 /* We can probably fit 3 names to a line? */
3631 for (t = lvl->names; t; t = TREE_CHAIN (t))
3632 {
3633 if (no_print_functions && (TREE_CODE (t) == FUNCTION_DECL))
3634 continue;
3635 if (no_print_builtins
3636 && (TREE_CODE (t) == TYPE_DECL)
3637 && DECL_IS_BUILTIN (t))
3638 continue;
3639
3640 /* Function decls tend to have longer names. */
3641 if (TREE_CODE (t) == FUNCTION_DECL)
3642 len = 3;
3643 else
3644 len = 2;
3645 i += len;
3646 if (i > 6)
3647 {
3648 fprintf (stderr, "\n\t");
3649 i = len;
3650 }
3651 print_node_brief (stderr, "", t, 0);
3652 if (t == error_mark_node)
3653 break;
3654 }
3655 if (i)
3656 fprintf (stderr, "\n");
3657 }
3658 if (vec_safe_length (lvl->class_shadowed))
3659 {
3660 size_t i;
3661 cp_class_binding *b;
3662 fprintf (stderr, " class-shadowed:");
3663 FOR_EACH_VEC_ELT (*lvl->class_shadowed, i, b)
3664 fprintf (stderr, " %s ", IDENTIFIER_POINTER (b->identifier));
3665 fprintf (stderr, "\n");
3666 }
3667 if (lvl->type_shadowed)
3668 {
3669 fprintf (stderr, " type-shadowed:");
3670 for (t = lvl->type_shadowed; t; t = TREE_CHAIN (t))
3671 {
3672 fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
3673 }
3674 fprintf (stderr, "\n");
3675 }
3676 }
3677
3678 DEBUG_FUNCTION void
3679 debug (cp_binding_level &ref)
3680 {
3681 print_binding_level (&ref);
3682 }
3683
3684 DEBUG_FUNCTION void
3685 debug (cp_binding_level *ptr)
3686 {
3687 if (ptr)
3688 debug (*ptr);
3689 else
3690 fprintf (stderr, "<nil>\n");
3691 }
3692
3693
3694 static void
3695 print_other_binding_stack (cp_binding_level *stack)
3696 {
3697 cp_binding_level *level;
3698 for (level = stack; !global_scope_p (level); level = level->level_chain)
3699 {
3700 fprintf (stderr, "binding level %p\n", (void *) level);
3701 print_binding_level (level);
3702 }
3703 }
3704
3705 void
3706 print_binding_stack (void)
3707 {
3708 cp_binding_level *b;
3709 fprintf (stderr, "current_binding_level=%p\n"
3710 "class_binding_level=%p\n"
3711 "NAMESPACE_LEVEL (global_namespace)=%p\n",
3712 (void *) current_binding_level, (void *) class_binding_level,
3713 (void *) NAMESPACE_LEVEL (global_namespace));
3714 if (class_binding_level)
3715 {
3716 for (b = class_binding_level; b; b = b->level_chain)
3717 if (b == current_binding_level)
3718 break;
3719 if (b)
3720 b = class_binding_level;
3721 else
3722 b = current_binding_level;
3723 }
3724 else
3725 b = current_binding_level;
3726 print_other_binding_stack (b);
3727 fprintf (stderr, "global:\n");
3728 print_binding_level (NAMESPACE_LEVEL (global_namespace));
3729 }
3730 \f
3731 /* Return the type associated with ID. */
3732
3733 static tree
3734 identifier_type_value_1 (tree id)
3735 {
3736 /* There is no type with that name, anywhere. */
3737 if (REAL_IDENTIFIER_TYPE_VALUE (id) == NULL_TREE)
3738 return NULL_TREE;
3739 /* This is not the type marker, but the real thing. */
3740 if (REAL_IDENTIFIER_TYPE_VALUE (id) != global_type_node)
3741 return REAL_IDENTIFIER_TYPE_VALUE (id);
3742 /* Have to search for it. It must be on the global level, now.
3743 Ask lookup_name not to return non-types. */
3744 id = lookup_name_real (id, 2, 1, /*block_p=*/true, 0, 0);
3745 if (id)
3746 return TREE_TYPE (id);
3747 return NULL_TREE;
3748 }
3749
3750 /* Wrapper for identifier_type_value_1. */
3751
3752 tree
3753 identifier_type_value (tree id)
3754 {
3755 tree ret;
3756 timevar_start (TV_NAME_LOOKUP);
3757 ret = identifier_type_value_1 (id);
3758 timevar_stop (TV_NAME_LOOKUP);
3759 return ret;
3760 }
3761
3762 /* Push a definition of struct, union or enum tag named ID. into
3763 binding_level B. DECL is a TYPE_DECL for the type. We assume that
3764 the tag ID is not already defined. */
3765
3766 static void
3767 set_identifier_type_value_with_scope (tree id, tree decl, cp_binding_level *b)
3768 {
3769 tree type;
3770
3771 if (b->kind != sk_namespace)
3772 {
3773 /* Shadow the marker, not the real thing, so that the marker
3774 gets restored later. */
3775 tree old_type_value = REAL_IDENTIFIER_TYPE_VALUE (id);
3776 b->type_shadowed
3777 = tree_cons (id, old_type_value, b->type_shadowed);
3778 type = decl ? TREE_TYPE (decl) : NULL_TREE;
3779 TREE_TYPE (b->type_shadowed) = type;
3780 }
3781 else
3782 {
3783 tree *slot = find_namespace_slot (current_namespace, id, true);
3784 gcc_assert (decl);
3785 update_binding (b, NULL, slot, MAYBE_STAT_DECL (*slot), decl, false);
3786
3787 /* Store marker instead of real type. */
3788 type = global_type_node;
3789 }
3790 SET_IDENTIFIER_TYPE_VALUE (id, type);
3791 }
3792
3793 /* As set_identifier_type_value_with_scope, but using
3794 current_binding_level. */
3795
3796 void
3797 set_identifier_type_value (tree id, tree decl)
3798 {
3799 set_identifier_type_value_with_scope (id, decl, current_binding_level);
3800 }
3801
3802 /* Return the name for the constructor (or destructor) for the
3803 specified class. */
3804
3805 tree
3806 constructor_name (tree type)
3807 {
3808 tree decl = TYPE_NAME (TYPE_MAIN_VARIANT (type));
3809
3810 return decl ? DECL_NAME (decl) : NULL_TREE;
3811 }
3812
3813 /* Returns TRUE if NAME is the name for the constructor for TYPE,
3814 which must be a class type. */
3815
3816 bool
3817 constructor_name_p (tree name, tree type)
3818 {
3819 gcc_assert (MAYBE_CLASS_TYPE_P (type));
3820
3821 /* These don't have names. */
3822 if (TREE_CODE (type) == DECLTYPE_TYPE
3823 || TREE_CODE (type) == TYPEOF_TYPE)
3824 return false;
3825
3826 if (name && name == constructor_name (type))
3827 return true;
3828
3829 return false;
3830 }
3831
3832 /* Same as pushdecl, but define X in binding-level LEVEL. We rely on the
3833 caller to set DECL_CONTEXT properly.
3834
3835 Note that this must only be used when X will be the new innermost
3836 binding for its name, as we tack it onto the front of IDENTIFIER_BINDING
3837 without checking to see if the current IDENTIFIER_BINDING comes from a
3838 closer binding level than LEVEL. */
3839
3840 static tree
3841 do_pushdecl_with_scope (tree x, cp_binding_level *level, bool is_friend)
3842 {
3843 cp_binding_level *b;
3844
3845 if (level->kind == sk_class)
3846 {
3847 b = class_binding_level;
3848 class_binding_level = level;
3849 pushdecl_class_level (x);
3850 class_binding_level = b;
3851 }
3852 else
3853 {
3854 tree function_decl = current_function_decl;
3855 if (level->kind == sk_namespace)
3856 current_function_decl = NULL_TREE;
3857 b = current_binding_level;
3858 current_binding_level = level;
3859 x = pushdecl (x, is_friend);
3860 current_binding_level = b;
3861 current_function_decl = function_decl;
3862 }
3863 return x;
3864 }
3865
3866 /* Inject X into the local scope just before the function parms. */
3867
3868 tree
3869 pushdecl_outermost_localscope (tree x)
3870 {
3871 cp_binding_level *b = NULL;
3872 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
3873
3874 /* Find the scope just inside the function parms. */
3875 for (cp_binding_level *n = current_binding_level;
3876 n->kind != sk_function_parms; n = b->level_chain)
3877 b = n;
3878
3879 tree ret = b ? do_pushdecl_with_scope (x, b, false) : error_mark_node;
3880 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
3881
3882 return ret;
3883 }
3884
3885 /* Process a local-scope or namespace-scope using declaration. LOOKUP
3886 is the result of qualified lookup (both value & type are
3887 significant). FN_SCOPE_P indicates if we're at function-scope (as
3888 opposed to namespace-scope). *VALUE_P and *TYPE_P are the current
3889 bindings, which are altered to reflect the newly brought in
3890 declarations. */
3891
3892 static bool
3893 do_nonmember_using_decl (name_lookup &lookup, bool fn_scope_p,
3894 tree *value_p, tree *type_p)
3895 {
3896 tree value = *value_p;
3897 tree type = *type_p;
3898 bool failed = false;
3899
3900 /* Shift the old and new bindings around so we're comparing class and
3901 enumeration names to each other. */
3902 if (value && DECL_IMPLICIT_TYPEDEF_P (value))
3903 {
3904 type = value;
3905 value = NULL_TREE;
3906 }
3907
3908 if (lookup.value && DECL_IMPLICIT_TYPEDEF_P (lookup.value))
3909 {
3910 lookup.type = lookup.value;
3911 lookup.value = NULL_TREE;
3912 }
3913
3914 if (!lookup.value)
3915 /* Nothing. */;
3916 else if (OVL_P (lookup.value) && (!value || OVL_P (value)))
3917 {
3918 for (lkp_iterator usings (lookup.value); usings; ++usings)
3919 {
3920 tree new_fn = *usings;
3921
3922 /* [namespace.udecl]
3923
3924 If a function declaration in namespace scope or block
3925 scope has the same name and the same parameter types as a
3926 function introduced by a using declaration the program is
3927 ill-formed. */
3928 bool found = false;
3929 for (ovl_iterator old (value); !found && old; ++old)
3930 {
3931 tree old_fn = *old;
3932
3933 if (new_fn == old_fn)
3934 {
3935 /* The function already exists in the current
3936 namespace. */
3937 found = true;
3938 break;
3939 }
3940 else if (old.using_p ())
3941 continue; /* This is a using decl. */
3942 else if (old.hidden_p () && !DECL_HIDDEN_FRIEND_P (old_fn))
3943 continue; /* This is an anticipated builtin. */
3944 else if (!matching_fn_p (new_fn, old_fn))
3945 continue; /* Parameters do not match. */
3946 else if (decls_match (new_fn, old_fn))
3947 {
3948 /* Extern "C" in different namespaces. */
3949 found = true;
3950 break;
3951 }
3952 else
3953 {
3954 diagnose_name_conflict (new_fn, old_fn);
3955 failed = true;
3956 found = true;
3957 break;
3958 }
3959 }
3960
3961 if (!found)
3962 /* Unlike the decl-pushing case we don't drop anticipated
3963 builtins here. They don't cause a problem, and we'd
3964 like to match them with a future declaration. */
3965 value = ovl_insert (new_fn, value, true);
3966 }
3967 }
3968 else if (value
3969 /* Ignore anticipated builtins. */
3970 && !anticipated_builtin_p (value)
3971 && (fn_scope_p || !decls_match (lookup.value, value)))
3972 {
3973 diagnose_name_conflict (lookup.value, value);
3974 failed = true;
3975 }
3976 else
3977 value = lookup.value;
3978
3979 if (lookup.type && lookup.type != type)
3980 {
3981 if (type && !decls_match (lookup.type, type))
3982 {
3983 diagnose_name_conflict (lookup.type, type);
3984 failed = true;
3985 }
3986 else
3987 type = lookup.type;
3988 }
3989
3990 /* If value is empty, shift any class or enumeration name back. */
3991 if (!value)
3992 {
3993 value = type;
3994 type = NULL_TREE;
3995 }
3996 *value_p = value;
3997 *type_p = type;
3998
3999 return failed;
4000 }
4001
4002 /* Returns true if ANCESTOR encloses DESCENDANT, including matching.
4003 Both are namespaces. */
4004
4005 bool
4006 is_nested_namespace (tree ancestor, tree descendant, bool inline_only)
4007 {
4008 int depth = SCOPE_DEPTH (ancestor);
4009
4010 if (!depth && !inline_only)
4011 /* The global namespace encloses everything. */
4012 return true;
4013
4014 while (SCOPE_DEPTH (descendant) > depth
4015 && (!inline_only || DECL_NAMESPACE_INLINE_P (descendant)))
4016 descendant = CP_DECL_CONTEXT (descendant);
4017
4018 return ancestor == descendant;
4019 }
4020
4021 /* Returns true if ROOT (a non-alias namespace, class, or function)
4022 encloses CHILD. CHILD may be either a class type or a namespace
4023 (maybe alias). */
4024
4025 bool
4026 is_ancestor (tree root, tree child)
4027 {
4028 gcc_checking_assert ((TREE_CODE (root) == NAMESPACE_DECL
4029 && !DECL_NAMESPACE_ALIAS (root))
4030 || TREE_CODE (root) == FUNCTION_DECL
4031 || CLASS_TYPE_P (root));
4032 gcc_checking_assert (TREE_CODE (child) == NAMESPACE_DECL
4033 || CLASS_TYPE_P (child));
4034
4035 /* The global namespace encloses everything. Early-out for the
4036 common case. */
4037 if (root == global_namespace)
4038 return true;
4039
4040 /* Search CHILD until we reach namespace scope. */
4041 while (TREE_CODE (child) != NAMESPACE_DECL)
4042 {
4043 /* If we've reached the ROOT, it encloses CHILD. */
4044 if (root == child)
4045 return true;
4046
4047 /* Go out one level. */
4048 if (TYPE_P (child))
4049 child = TYPE_NAME (child);
4050 child = CP_DECL_CONTEXT (child);
4051 }
4052
4053 if (TREE_CODE (root) != NAMESPACE_DECL)
4054 /* Failed to meet the non-namespace we were looking for. */
4055 return false;
4056
4057 if (tree alias = DECL_NAMESPACE_ALIAS (child))
4058 child = alias;
4059
4060 return is_nested_namespace (root, child);
4061 }
4062
4063 /* Enter the class or namespace scope indicated by T suitable for name
4064 lookup. T can be arbitrary scope, not necessary nested inside the
4065 current scope. Returns a non-null scope to pop iff pop_scope
4066 should be called later to exit this scope. */
4067
4068 tree
4069 push_scope (tree t)
4070 {
4071 if (TREE_CODE (t) == NAMESPACE_DECL)
4072 push_decl_namespace (t);
4073 else if (CLASS_TYPE_P (t))
4074 {
4075 if (!at_class_scope_p ()
4076 || !same_type_p (current_class_type, t))
4077 push_nested_class (t);
4078 else
4079 /* T is the same as the current scope. There is therefore no
4080 need to re-enter the scope. Since we are not actually
4081 pushing a new scope, our caller should not call
4082 pop_scope. */
4083 t = NULL_TREE;
4084 }
4085
4086 return t;
4087 }
4088
4089 /* Leave scope pushed by push_scope. */
4090
4091 void
4092 pop_scope (tree t)
4093 {
4094 if (t == NULL_TREE)
4095 return;
4096 if (TREE_CODE (t) == NAMESPACE_DECL)
4097 pop_decl_namespace ();
4098 else if CLASS_TYPE_P (t)
4099 pop_nested_class ();
4100 }
4101
4102 /* Subroutine of push_inner_scope. */
4103
4104 static void
4105 push_inner_scope_r (tree outer, tree inner)
4106 {
4107 tree prev;
4108
4109 if (outer == inner
4110 || (TREE_CODE (inner) != NAMESPACE_DECL && !CLASS_TYPE_P (inner)))
4111 return;
4112
4113 prev = CP_DECL_CONTEXT (TREE_CODE (inner) == NAMESPACE_DECL ? inner : TYPE_NAME (inner));
4114 if (outer != prev)
4115 push_inner_scope_r (outer, prev);
4116 if (TREE_CODE (inner) == NAMESPACE_DECL)
4117 {
4118 cp_binding_level *save_template_parm = 0;
4119 /* Temporary take out template parameter scopes. They are saved
4120 in reversed order in save_template_parm. */
4121 while (current_binding_level->kind == sk_template_parms)
4122 {
4123 cp_binding_level *b = current_binding_level;
4124 current_binding_level = b->level_chain;
4125 b->level_chain = save_template_parm;
4126 save_template_parm = b;
4127 }
4128
4129 resume_scope (NAMESPACE_LEVEL (inner));
4130 current_namespace = inner;
4131
4132 /* Restore template parameter scopes. */
4133 while (save_template_parm)
4134 {
4135 cp_binding_level *b = save_template_parm;
4136 save_template_parm = b->level_chain;
4137 b->level_chain = current_binding_level;
4138 current_binding_level = b;
4139 }
4140 }
4141 else
4142 pushclass (inner);
4143 }
4144
4145 /* Enter the scope INNER from current scope. INNER must be a scope
4146 nested inside current scope. This works with both name lookup and
4147 pushing name into scope. In case a template parameter scope is present,
4148 namespace is pushed under the template parameter scope according to
4149 name lookup rule in 14.6.1/6.
4150
4151 Return the former current scope suitable for pop_inner_scope. */
4152
4153 tree
4154 push_inner_scope (tree inner)
4155 {
4156 tree outer = current_scope ();
4157 if (!outer)
4158 outer = current_namespace;
4159
4160 push_inner_scope_r (outer, inner);
4161 return outer;
4162 }
4163
4164 /* Exit the current scope INNER back to scope OUTER. */
4165
4166 void
4167 pop_inner_scope (tree outer, tree inner)
4168 {
4169 if (outer == inner
4170 || (TREE_CODE (inner) != NAMESPACE_DECL && !CLASS_TYPE_P (inner)))
4171 return;
4172
4173 while (outer != inner)
4174 {
4175 if (TREE_CODE (inner) == NAMESPACE_DECL)
4176 {
4177 cp_binding_level *save_template_parm = 0;
4178 /* Temporary take out template parameter scopes. They are saved
4179 in reversed order in save_template_parm. */
4180 while (current_binding_level->kind == sk_template_parms)
4181 {
4182 cp_binding_level *b = current_binding_level;
4183 current_binding_level = b->level_chain;
4184 b->level_chain = save_template_parm;
4185 save_template_parm = b;
4186 }
4187
4188 pop_namespace ();
4189
4190 /* Restore template parameter scopes. */
4191 while (save_template_parm)
4192 {
4193 cp_binding_level *b = save_template_parm;
4194 save_template_parm = b->level_chain;
4195 b->level_chain = current_binding_level;
4196 current_binding_level = b;
4197 }
4198 }
4199 else
4200 popclass ();
4201
4202 inner = CP_DECL_CONTEXT (TREE_CODE (inner) == NAMESPACE_DECL ? inner : TYPE_NAME (inner));
4203 }
4204 }
4205 \f
4206 /* Do a pushlevel for class declarations. */
4207
4208 void
4209 pushlevel_class (void)
4210 {
4211 class_binding_level = begin_scope (sk_class, current_class_type);
4212 }
4213
4214 /* ...and a poplevel for class declarations. */
4215
4216 void
4217 poplevel_class (void)
4218 {
4219 cp_binding_level *level = class_binding_level;
4220 cp_class_binding *cb;
4221 size_t i;
4222 tree shadowed;
4223
4224 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
4225 gcc_assert (level != 0);
4226
4227 /* If we're leaving a toplevel class, cache its binding level. */
4228 if (current_class_depth == 1)
4229 previous_class_level = level;
4230 for (shadowed = level->type_shadowed;
4231 shadowed;
4232 shadowed = TREE_CHAIN (shadowed))
4233 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (shadowed), TREE_VALUE (shadowed));
4234
4235 /* Remove the bindings for all of the class-level declarations. */
4236 if (level->class_shadowed)
4237 {
4238 FOR_EACH_VEC_ELT (*level->class_shadowed, i, cb)
4239 {
4240 IDENTIFIER_BINDING (cb->identifier) = cb->base->previous;
4241 cxx_binding_free (cb->base);
4242 }
4243 ggc_free (level->class_shadowed);
4244 level->class_shadowed = NULL;
4245 }
4246
4247 /* Now, pop out of the binding level which we created up in the
4248 `pushlevel_class' routine. */
4249 gcc_assert (current_binding_level == level);
4250 leave_scope ();
4251 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
4252 }
4253
4254 /* Set INHERITED_VALUE_BINDING_P on BINDING to true or false, as
4255 appropriate. DECL is the value to which a name has just been
4256 bound. CLASS_TYPE is the class in which the lookup occurred. */
4257
4258 static void
4259 set_inherited_value_binding_p (cxx_binding *binding, tree decl,
4260 tree class_type)
4261 {
4262 if (binding->value == decl && TREE_CODE (decl) != TREE_LIST)
4263 {
4264 tree context;
4265
4266 if (TREE_CODE (decl) == OVERLOAD)
4267 context = ovl_scope (decl);
4268 else
4269 {
4270 gcc_assert (DECL_P (decl));
4271 context = context_for_name_lookup (decl);
4272 }
4273
4274 if (is_properly_derived_from (class_type, context))
4275 INHERITED_VALUE_BINDING_P (binding) = 1;
4276 else
4277 INHERITED_VALUE_BINDING_P (binding) = 0;
4278 }
4279 else if (binding->value == decl)
4280 /* We only encounter a TREE_LIST when there is an ambiguity in the
4281 base classes. Such an ambiguity can be overridden by a
4282 definition in this class. */
4283 INHERITED_VALUE_BINDING_P (binding) = 1;
4284 else
4285 INHERITED_VALUE_BINDING_P (binding) = 0;
4286 }
4287
4288 /* Make the declaration of X appear in CLASS scope. */
4289
4290 bool
4291 pushdecl_class_level (tree x)
4292 {
4293 bool is_valid = true;
4294 bool subtime;
4295
4296 /* Do nothing if we're adding to an outer lambda closure type,
4297 outer_binding will add it later if it's needed. */
4298 if (current_class_type != class_binding_level->this_entity)
4299 return true;
4300
4301 subtime = timevar_cond_start (TV_NAME_LOOKUP);
4302 /* Get the name of X. */
4303 tree name = OVL_NAME (x);
4304
4305 if (name)
4306 {
4307 is_valid = push_class_level_binding (name, x);
4308 if (TREE_CODE (x) == TYPE_DECL)
4309 set_identifier_type_value (name, x);
4310 }
4311 else if (ANON_AGGR_TYPE_P (TREE_TYPE (x)))
4312 {
4313 /* If X is an anonymous aggregate, all of its members are
4314 treated as if they were members of the class containing the
4315 aggregate, for naming purposes. */
4316 location_t save_location = input_location;
4317 tree anon = TREE_TYPE (x);
4318 if (vec<tree, va_gc> *member_vec = CLASSTYPE_MEMBER_VEC (anon))
4319 for (unsigned ix = member_vec->length (); ix--;)
4320 {
4321 tree binding = (*member_vec)[ix];
4322 if (STAT_HACK_P (binding))
4323 {
4324 if (!pushdecl_class_level (STAT_TYPE (binding)))
4325 is_valid = false;
4326 binding = STAT_DECL (binding);
4327 }
4328 if (!pushdecl_class_level (binding))
4329 is_valid = false;
4330 }
4331 else
4332 for (tree f = TYPE_FIELDS (anon); f; f = DECL_CHAIN (f))
4333 if (TREE_CODE (f) == FIELD_DECL)
4334 {
4335 input_location = DECL_SOURCE_LOCATION (f);
4336 if (!pushdecl_class_level (f))
4337 is_valid = false;
4338 }
4339 input_location = save_location;
4340 }
4341 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
4342 return is_valid;
4343 }
4344
4345 /* Return the BINDING (if any) for NAME in SCOPE, which is a class
4346 scope. If the value returned is non-NULL, and the PREVIOUS field
4347 is not set, callers must set the PREVIOUS field explicitly. */
4348
4349 static cxx_binding *
4350 get_class_binding (tree name, cp_binding_level *scope)
4351 {
4352 tree class_type;
4353 tree type_binding;
4354 tree value_binding;
4355 cxx_binding *binding;
4356
4357 class_type = scope->this_entity;
4358
4359 /* Get the type binding. */
4360 type_binding = lookup_member (class_type, name,
4361 /*protect=*/2, /*want_type=*/true,
4362 tf_warning_or_error);
4363 /* Get the value binding. */
4364 value_binding = lookup_member (class_type, name,
4365 /*protect=*/2, /*want_type=*/false,
4366 tf_warning_or_error);
4367
4368 if (value_binding
4369 && (TREE_CODE (value_binding) == TYPE_DECL
4370 || DECL_CLASS_TEMPLATE_P (value_binding)
4371 || (TREE_CODE (value_binding) == TREE_LIST
4372 && TREE_TYPE (value_binding) == error_mark_node
4373 && (TREE_CODE (TREE_VALUE (value_binding))
4374 == TYPE_DECL))))
4375 /* We found a type binding, even when looking for a non-type
4376 binding. This means that we already processed this binding
4377 above. */
4378 ;
4379 else if (value_binding)
4380 {
4381 if (TREE_CODE (value_binding) == TREE_LIST
4382 && TREE_TYPE (value_binding) == error_mark_node)
4383 /* NAME is ambiguous. */
4384 ;
4385 else if (BASELINK_P (value_binding))
4386 /* NAME is some overloaded functions. */
4387 value_binding = BASELINK_FUNCTIONS (value_binding);
4388 }
4389
4390 /* If we found either a type binding or a value binding, create a
4391 new binding object. */
4392 if (type_binding || value_binding)
4393 {
4394 binding = new_class_binding (name,
4395 value_binding,
4396 type_binding,
4397 scope);
4398 /* This is a class-scope binding, not a block-scope binding. */
4399 LOCAL_BINDING_P (binding) = 0;
4400 set_inherited_value_binding_p (binding, value_binding, class_type);
4401 }
4402 else
4403 binding = NULL;
4404
4405 return binding;
4406 }
4407
4408 /* Make the declaration(s) of X appear in CLASS scope under the name
4409 NAME. Returns true if the binding is valid. */
4410
4411 static bool
4412 push_class_level_binding_1 (tree name, tree x)
4413 {
4414 cxx_binding *binding;
4415 tree decl = x;
4416 bool ok;
4417
4418 /* The class_binding_level will be NULL if x is a template
4419 parameter name in a member template. */
4420 if (!class_binding_level)
4421 return true;
4422
4423 if (name == error_mark_node)
4424 return false;
4425
4426 /* Can happen for an erroneous declaration (c++/60384). */
4427 if (!identifier_p (name))
4428 {
4429 gcc_assert (errorcount || sorrycount);
4430 return false;
4431 }
4432
4433 /* Check for invalid member names. But don't worry about a default
4434 argument-scope lambda being pushed after the class is complete. */
4435 gcc_assert (TYPE_BEING_DEFINED (current_class_type)
4436 || LAMBDA_TYPE_P (TREE_TYPE (decl)));
4437 /* Check that we're pushing into the right binding level. */
4438 gcc_assert (current_class_type == class_binding_level->this_entity);
4439
4440 /* We could have been passed a tree list if this is an ambiguous
4441 declaration. If so, pull the declaration out because
4442 check_template_shadow will not handle a TREE_LIST. */
4443 if (TREE_CODE (decl) == TREE_LIST
4444 && TREE_TYPE (decl) == error_mark_node)
4445 decl = TREE_VALUE (decl);
4446
4447 if (!check_template_shadow (decl))
4448 return false;
4449
4450 /* [class.mem]
4451
4452 If T is the name of a class, then each of the following shall
4453 have a name different from T:
4454
4455 -- every static data member of class T;
4456
4457 -- every member of class T that is itself a type;
4458
4459 -- every enumerator of every member of class T that is an
4460 enumerated type;
4461
4462 -- every member of every anonymous union that is a member of
4463 class T.
4464
4465 (Non-static data members were also forbidden to have the same
4466 name as T until TC1.) */
4467 if ((VAR_P (x)
4468 || TREE_CODE (x) == CONST_DECL
4469 || (TREE_CODE (x) == TYPE_DECL
4470 && !DECL_SELF_REFERENCE_P (x))
4471 /* A data member of an anonymous union. */
4472 || (TREE_CODE (x) == FIELD_DECL
4473 && DECL_CONTEXT (x) != current_class_type))
4474 && DECL_NAME (x) == DECL_NAME (TYPE_NAME (current_class_type)))
4475 {
4476 tree scope = context_for_name_lookup (x);
4477 if (TYPE_P (scope) && same_type_p (scope, current_class_type))
4478 {
4479 error_at (DECL_SOURCE_LOCATION (x),
4480 "%qD has the same name as the class in which it is "
4481 "declared", x);
4482 return false;
4483 }
4484 }
4485
4486 /* Get the current binding for NAME in this class, if any. */
4487 binding = IDENTIFIER_BINDING (name);
4488 if (!binding || binding->scope != class_binding_level)
4489 {
4490 binding = get_class_binding (name, class_binding_level);
4491 /* If a new binding was created, put it at the front of the
4492 IDENTIFIER_BINDING list. */
4493 if (binding)
4494 {
4495 binding->previous = IDENTIFIER_BINDING (name);
4496 IDENTIFIER_BINDING (name) = binding;
4497 }
4498 }
4499
4500 /* If there is already a binding, then we may need to update the
4501 current value. */
4502 if (binding && binding->value)
4503 {
4504 tree bval = binding->value;
4505 tree old_decl = NULL_TREE;
4506 tree target_decl = strip_using_decl (decl);
4507 tree target_bval = strip_using_decl (bval);
4508
4509 if (INHERITED_VALUE_BINDING_P (binding))
4510 {
4511 /* If the old binding was from a base class, and was for a
4512 tag name, slide it over to make room for the new binding.
4513 The old binding is still visible if explicitly qualified
4514 with a class-key. */
4515 if (TREE_CODE (target_bval) == TYPE_DECL
4516 && DECL_ARTIFICIAL (target_bval)
4517 && !(TREE_CODE (target_decl) == TYPE_DECL
4518 && DECL_ARTIFICIAL (target_decl)))
4519 {
4520 old_decl = binding->type;
4521 binding->type = bval;
4522 binding->value = NULL_TREE;
4523 INHERITED_VALUE_BINDING_P (binding) = 0;
4524 }
4525 else
4526 {
4527 old_decl = bval;
4528 /* Any inherited type declaration is hidden by the type
4529 declaration in the derived class. */
4530 if (TREE_CODE (target_decl) == TYPE_DECL
4531 && DECL_ARTIFICIAL (target_decl))
4532 binding->type = NULL_TREE;
4533 }
4534 }
4535 else if (TREE_CODE (decl) == USING_DECL
4536 && TREE_CODE (bval) == USING_DECL
4537 && same_type_p (USING_DECL_SCOPE (decl),
4538 USING_DECL_SCOPE (bval)))
4539 /* This is a using redeclaration that will be diagnosed later
4540 in supplement_binding */
4541 ;
4542 else if (TREE_CODE (decl) == USING_DECL
4543 && TREE_CODE (bval) == USING_DECL
4544 && DECL_DEPENDENT_P (decl)
4545 && DECL_DEPENDENT_P (bval))
4546 return true;
4547 else if (TREE_CODE (decl) == USING_DECL
4548 && OVL_P (target_bval))
4549 old_decl = bval;
4550 else if (TREE_CODE (bval) == USING_DECL
4551 && OVL_P (target_decl))
4552 return true;
4553 else if (OVL_P (target_decl)
4554 && OVL_P (target_bval))
4555 old_decl = bval;
4556
4557 if (old_decl && binding->scope == class_binding_level)
4558 {
4559 binding->value = x;
4560 /* It is always safe to clear INHERITED_VALUE_BINDING_P
4561 here. This function is only used to register bindings
4562 from with the class definition itself. */
4563 INHERITED_VALUE_BINDING_P (binding) = 0;
4564 return true;
4565 }
4566 }
4567
4568 /* Note that we declared this value so that we can issue an error if
4569 this is an invalid redeclaration of a name already used for some
4570 other purpose. */
4571 note_name_declared_in_class (name, decl);
4572
4573 /* If we didn't replace an existing binding, put the binding on the
4574 stack of bindings for the identifier, and update the shadowed
4575 list. */
4576 if (binding && binding->scope == class_binding_level)
4577 /* Supplement the existing binding. */
4578 ok = supplement_binding (binding, decl);
4579 else
4580 {
4581 /* Create a new binding. */
4582 push_binding (name, decl, class_binding_level);
4583 ok = true;
4584 }
4585
4586 return ok;
4587 }
4588
4589 /* Wrapper for push_class_level_binding_1. */
4590
4591 bool
4592 push_class_level_binding (tree name, tree x)
4593 {
4594 bool ret;
4595 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
4596 ret = push_class_level_binding_1 (name, x);
4597 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
4598 return ret;
4599 }
4600
4601 /* Process and lookup a using decl SCOPE::lookup.name, filling in
4602 lookup.values & lookup.type. Return true if ok. */
4603
4604 static bool
4605 lookup_using_decl (tree scope, name_lookup &lookup)
4606 {
4607 tree current = current_scope ();
4608 bool dependent_p = false;
4609
4610 if (TREE_CODE (scope) == NAMESPACE_DECL)
4611 {
4612 /* Naming a namespace member. */
4613 if (TYPE_P (current))
4614 {
4615 error ("using-declaration for non-member at class scope");
4616 return false;
4617 }
4618
4619 qualified_namespace_lookup (scope, &lookup);
4620 }
4621 else if (TREE_CODE (scope) == ENUMERAL_TYPE)
4622 {
4623 error ("using-declaration may not name enumerator %<%E::%D%>",
4624 scope, lookup.name);
4625 return false;
4626 }
4627 else
4628 {
4629 /* Naming a class member. */
4630 if (!TYPE_P (current))
4631 {
4632 error ("using-declaration for member at non-class scope");
4633 return false;
4634 }
4635
4636 /* Make sure the name is not invalid */
4637 if (TREE_CODE (lookup.name) == BIT_NOT_EXPR)
4638 {
4639 error ("%<%T::%D%> names destructor", scope, lookup.name);
4640 return false;
4641 }
4642
4643 /* Using T::T declares inheriting ctors, even if T is a typedef. */
4644 if (MAYBE_CLASS_TYPE_P (scope)
4645 && (lookup.name == TYPE_IDENTIFIER (scope)
4646 || constructor_name_p (lookup.name, scope)))
4647 {
4648 maybe_warn_cpp0x (CPP0X_INHERITING_CTORS);
4649 lookup.name = ctor_identifier;
4650 CLASSTYPE_NON_AGGREGATE (current) = true;
4651 }
4652
4653 /* Cannot introduce a constructor name. */
4654 if (constructor_name_p (lookup.name, current))
4655 {
4656 error ("%<%T::%D%> names constructor in %qT",
4657 scope, lookup.name, current);
4658 return false;
4659 }
4660
4661 /* Member using decls finish processing when completing the
4662 class. */
4663 /* From [namespace.udecl]:
4664
4665 A using-declaration used as a member-declaration shall refer
4666 to a member of a base class of the class being defined.
4667
4668 In general, we cannot check this constraint in a template
4669 because we do not know the entire set of base classes of the
4670 current class type. Morover, if SCOPE is dependent, it might
4671 match a non-dependent base. */
4672
4673 dependent_p = dependent_scope_p (scope);
4674 if (!dependent_p)
4675 {
4676 base_kind b_kind;
4677 tree binfo = lookup_base (current, scope, ba_any, &b_kind,
4678 tf_warning_or_error);
4679 if (b_kind < bk_proper_base)
4680 {
4681 /* If there are dependent bases, scope might resolve at
4682 instantiation time, even if it isn't exactly one of
4683 the dependent bases. */
4684 if (b_kind == bk_same_type || !any_dependent_bases_p ())
4685 {
4686 error_not_base_type (scope, current);
4687 return false;
4688 }
4689 /* Treat as-if dependent. */
4690 dependent_p = true;
4691 }
4692 else if (lookup.name == ctor_identifier && !binfo_direct_p (binfo))
4693 {
4694 error ("cannot inherit constructors from indirect base %qT",
4695 scope);
4696 return false;
4697 }
4698 else if (IDENTIFIER_CONV_OP_P (lookup.name)
4699 && dependent_type_p (TREE_TYPE (lookup.name)))
4700 dependent_p = true;
4701 else
4702 lookup.value = lookup_member (binfo, lookup.name, 0,
4703 false, tf_warning_or_error);
4704 }
4705 }
4706
4707 if (!dependent_p)
4708 {
4709 if (!lookup.value)
4710 {
4711 error ("%qD has not been declared in %qE", lookup.name, scope);
4712 return false;
4713 }
4714
4715 if (TREE_CODE (lookup.value) == TREE_LIST
4716 /* We can (independently) have ambiguous implicit typedefs. */
4717 || (lookup.type && TREE_CODE (lookup.type) == TREE_LIST))
4718 {
4719 error ("reference to %qD is ambiguous", lookup.name);
4720 print_candidates (TREE_CODE (lookup.value) == TREE_LIST
4721 ? lookup.value : lookup.type);
4722 return false;
4723 }
4724
4725 if (TREE_CODE (lookup.value) == NAMESPACE_DECL)
4726 {
4727 error ("using-declaration may not name namespace %qD", lookup.value);
4728 return false;
4729 }
4730 }
4731
4732 return true;
4733 }
4734
4735 /* Process "using SCOPE::NAME" in a class scope. Return the
4736 USING_DECL created. */
4737
4738 tree
4739 do_class_using_decl (tree scope, tree name)
4740 {
4741 if (name == error_mark_node
4742 || scope == error_mark_node)
4743 return NULL_TREE;
4744
4745 name_lookup lookup (name, 0);
4746 if (!lookup_using_decl (scope, lookup))
4747 return NULL_TREE;
4748
4749 tree found = lookup.value;
4750 if (found && BASELINK_P (found))
4751 /* The binfo from which the functions came does not matter. */
4752 found = BASELINK_FUNCTIONS (found);
4753
4754 tree using_decl = build_lang_decl (USING_DECL, lookup.name, NULL_TREE);
4755 USING_DECL_SCOPE (using_decl) = scope;
4756 USING_DECL_DECLS (using_decl) = found;
4757 DECL_DEPENDENT_P (using_decl) = !found;
4758
4759 return using_decl;
4760 }
4761
4762 \f
4763 /* Return the binding for NAME in NS. If NS is NULL, look in
4764 global_namespace. */
4765
4766 tree
4767 get_namespace_binding (tree ns, tree name)
4768 {
4769 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
4770 if (!ns)
4771 ns = global_namespace;
4772 gcc_checking_assert (!DECL_NAMESPACE_ALIAS (ns));
4773 tree ret = find_namespace_value (ns, name);
4774 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
4775 return ret;
4776 }
4777
4778 /* Push internal DECL into the global namespace. Does not do the
4779 full overload fn handling and does not add it to the list of things
4780 in the namespace. */
4781
4782 void
4783 set_global_binding (tree decl)
4784 {
4785 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
4786
4787 tree *slot = find_namespace_slot (global_namespace, DECL_NAME (decl), true);
4788
4789 if (*slot)
4790 /* The user's placed something in the implementor's namespace. */
4791 diagnose_name_conflict (decl, MAYBE_STAT_DECL (*slot));
4792
4793 /* Force the binding, so compiler internals continue to work. */
4794 *slot = decl;
4795
4796 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
4797 }
4798
4799 /* Set the context of a declaration to scope. Complain if we are not
4800 outside scope. */
4801
4802 void
4803 set_decl_namespace (tree decl, tree scope, bool friendp)
4804 {
4805 /* Get rid of namespace aliases. */
4806 scope = ORIGINAL_NAMESPACE (scope);
4807
4808 /* It is ok for friends to be qualified in parallel space. */
4809 if (!friendp && !is_nested_namespace (current_namespace, scope))
4810 error ("declaration of %qD not in a namespace surrounding %qD",
4811 decl, scope);
4812 DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
4813
4814 /* See whether this has been declared in the namespace or inline
4815 children. */
4816 tree old = NULL_TREE;
4817 {
4818 name_lookup lookup (DECL_NAME (decl), LOOKUP_HIDDEN);
4819 if (!lookup.search_qualified (scope, /*usings=*/false))
4820 /* No old declaration at all. */
4821 goto not_found;
4822 old = lookup.value;
4823 }
4824
4825 /* If it's a TREE_LIST, the result of the lookup was ambiguous. */
4826 if (TREE_CODE (old) == TREE_LIST)
4827 {
4828 ambiguous:
4829 DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
4830 error ("reference to %qD is ambiguous", decl);
4831 print_candidates (old);
4832 return;
4833 }
4834
4835 if (!DECL_DECLARES_FUNCTION_P (decl))
4836 {
4837 /* Don't compare non-function decls with decls_match here, since
4838 it can't check for the correct constness at this
4839 point. pushdecl will find those errors later. */
4840
4841 /* We might have found it in an inline namespace child of SCOPE. */
4842 if (TREE_CODE (decl) == TREE_CODE (old))
4843 DECL_CONTEXT (decl) = DECL_CONTEXT (old);
4844
4845 found:
4846 /* Writing "N::i" to declare something directly in "N" is invalid. */
4847 if (CP_DECL_CONTEXT (decl) == current_namespace
4848 && at_namespace_scope_p ())
4849 error_at (DECL_SOURCE_LOCATION (decl),
4850 "explicit qualification in declaration of %qD", decl);
4851 return;
4852 }
4853
4854 /* Since decl is a function, old should contain a function decl. */
4855 if (!OVL_P (old))
4856 goto not_found;
4857
4858 /* We handle these in check_explicit_instantiation_namespace. */
4859 if (processing_explicit_instantiation)
4860 return;
4861 if (processing_template_decl || processing_specialization)
4862 /* We have not yet called push_template_decl to turn a
4863 FUNCTION_DECL into a TEMPLATE_DECL, so the declarations won't
4864 match. But, we'll check later, when we construct the
4865 template. */
4866 return;
4867 /* Instantiations or specializations of templates may be declared as
4868 friends in any namespace. */
4869 if (friendp && DECL_USE_TEMPLATE (decl))
4870 return;
4871
4872 tree found;
4873 found = NULL_TREE;
4874
4875 for (lkp_iterator iter (old); iter; ++iter)
4876 {
4877 if (iter.using_p ())
4878 continue;
4879
4880 tree ofn = *iter;
4881
4882 /* Adjust DECL_CONTEXT first so decls_match will return true
4883 if DECL will match a declaration in an inline namespace. */
4884 DECL_CONTEXT (decl) = DECL_CONTEXT (ofn);
4885 if (decls_match (decl, ofn))
4886 {
4887 if (found)
4888 {
4889 /* We found more than one matching declaration. */
4890 DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
4891 goto ambiguous;
4892 }
4893 found = ofn;
4894 }
4895 }
4896
4897 if (found)
4898 {
4899 if (DECL_HIDDEN_FRIEND_P (found))
4900 {
4901 pedwarn (DECL_SOURCE_LOCATION (decl), 0,
4902 "%qD has not been declared within %qD", decl, scope);
4903 inform (DECL_SOURCE_LOCATION (found),
4904 "only here as a %<friend%>");
4905 }
4906 DECL_CONTEXT (decl) = DECL_CONTEXT (found);
4907 goto found;
4908 }
4909
4910 not_found:
4911 /* It didn't work, go back to the explicit scope. */
4912 DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
4913 error ("%qD should have been declared inside %qD", decl, scope);
4914 }
4915
4916 /* Return the namespace where the current declaration is declared. */
4917
4918 tree
4919 current_decl_namespace (void)
4920 {
4921 tree result;
4922 /* If we have been pushed into a different namespace, use it. */
4923 if (!vec_safe_is_empty (decl_namespace_list))
4924 return decl_namespace_list->last ();
4925
4926 if (current_class_type)
4927 result = decl_namespace_context (current_class_type);
4928 else if (current_function_decl)
4929 result = decl_namespace_context (current_function_decl);
4930 else
4931 result = current_namespace;
4932 return result;
4933 }
4934
4935 /* Process any ATTRIBUTES on a namespace definition. Returns true if
4936 attribute visibility is seen. */
4937
4938 bool
4939 handle_namespace_attrs (tree ns, tree attributes)
4940 {
4941 tree d;
4942 bool saw_vis = false;
4943
4944 if (attributes == error_mark_node)
4945 return false;
4946
4947 for (d = attributes; d; d = TREE_CHAIN (d))
4948 {
4949 tree name = get_attribute_name (d);
4950 tree args = TREE_VALUE (d);
4951
4952 if (is_attribute_p ("visibility", name))
4953 {
4954 /* attribute visibility is a property of the syntactic block
4955 rather than the namespace as a whole, so we don't touch the
4956 NAMESPACE_DECL at all. */
4957 tree x = args ? TREE_VALUE (args) : NULL_TREE;
4958 if (x == NULL_TREE || TREE_CODE (x) != STRING_CST || TREE_CHAIN (args))
4959 {
4960 warning (OPT_Wattributes,
4961 "%qD attribute requires a single NTBS argument",
4962 name);
4963 continue;
4964 }
4965
4966 if (!TREE_PUBLIC (ns))
4967 warning (OPT_Wattributes,
4968 "%qD attribute is meaningless since members of the "
4969 "anonymous namespace get local symbols", name);
4970
4971 push_visibility (TREE_STRING_POINTER (x), 1);
4972 saw_vis = true;
4973 }
4974 else if (is_attribute_p ("abi_tag", name))
4975 {
4976 if (!DECL_NAME (ns))
4977 {
4978 warning (OPT_Wattributes, "ignoring %qD attribute on anonymous "
4979 "namespace", name);
4980 continue;
4981 }
4982 if (!DECL_NAMESPACE_INLINE_P (ns))
4983 {
4984 warning (OPT_Wattributes, "ignoring %qD attribute on non-inline "
4985 "namespace", name);
4986 continue;
4987 }
4988 if (!args)
4989 {
4990 tree dn = DECL_NAME (ns);
4991 args = build_string (IDENTIFIER_LENGTH (dn) + 1,
4992 IDENTIFIER_POINTER (dn));
4993 TREE_TYPE (args) = char_array_type_node;
4994 args = fix_string_type (args);
4995 args = build_tree_list (NULL_TREE, args);
4996 }
4997 if (check_abi_tag_args (args, name))
4998 DECL_ATTRIBUTES (ns) = tree_cons (name, args,
4999 DECL_ATTRIBUTES (ns));
5000 }
5001 else if (is_attribute_p ("deprecated", name))
5002 {
5003 if (!DECL_NAME (ns))
5004 {
5005 warning (OPT_Wattributes, "ignoring %qD attribute on anonymous "
5006 "namespace", name);
5007 continue;
5008 }
5009 if (args && TREE_CODE (TREE_VALUE (args)) != STRING_CST)
5010 {
5011 error ("deprecated message is not a string");
5012 continue;
5013 }
5014 TREE_DEPRECATED (ns) = 1;
5015 if (args)
5016 DECL_ATTRIBUTES (ns) = tree_cons (name, args,
5017 DECL_ATTRIBUTES (ns));
5018 }
5019 else
5020 {
5021 warning (OPT_Wattributes, "%qD attribute directive ignored",
5022 name);
5023 continue;
5024 }
5025 }
5026
5027 return saw_vis;
5028 }
5029
5030 /* Temporarily set the namespace for the current declaration. */
5031
5032 void
5033 push_decl_namespace (tree decl)
5034 {
5035 if (TREE_CODE (decl) != NAMESPACE_DECL)
5036 decl = decl_namespace_context (decl);
5037 vec_safe_push (decl_namespace_list, ORIGINAL_NAMESPACE (decl));
5038 }
5039
5040 /* [namespace.memdef]/2 */
5041
5042 void
5043 pop_decl_namespace (void)
5044 {
5045 decl_namespace_list->pop ();
5046 }
5047
5048 /* Process a namespace-alias declaration. */
5049
5050 void
5051 do_namespace_alias (tree alias, tree name_space)
5052 {
5053 if (name_space == error_mark_node)
5054 return;
5055
5056 gcc_assert (TREE_CODE (name_space) == NAMESPACE_DECL);
5057
5058 name_space = ORIGINAL_NAMESPACE (name_space);
5059
5060 /* Build the alias. */
5061 alias = build_lang_decl (NAMESPACE_DECL, alias, void_type_node);
5062 DECL_NAMESPACE_ALIAS (alias) = name_space;
5063 DECL_EXTERNAL (alias) = 1;
5064 DECL_CONTEXT (alias) = FROB_CONTEXT (current_scope ());
5065 pushdecl (alias);
5066
5067 /* Emit debug info for namespace alias. */
5068 if (!building_stmt_list_p ())
5069 (*debug_hooks->early_global_decl) (alias);
5070 }
5071
5072 /* Like pushdecl, only it places X in the current namespace,
5073 if appropriate. */
5074
5075 tree
5076 pushdecl_namespace_level (tree x, bool is_friend)
5077 {
5078 cp_binding_level *b = current_binding_level;
5079 tree t;
5080
5081 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
5082 t = do_pushdecl_with_scope
5083 (x, NAMESPACE_LEVEL (current_namespace), is_friend);
5084
5085 /* Now, the type_shadowed stack may screw us. Munge it so it does
5086 what we want. */
5087 if (TREE_CODE (t) == TYPE_DECL)
5088 {
5089 tree name = DECL_NAME (t);
5090 tree newval;
5091 tree *ptr = (tree *)0;
5092 for (; !global_scope_p (b); b = b->level_chain)
5093 {
5094 tree shadowed = b->type_shadowed;
5095 for (; shadowed; shadowed = TREE_CHAIN (shadowed))
5096 if (TREE_PURPOSE (shadowed) == name)
5097 {
5098 ptr = &TREE_VALUE (shadowed);
5099 /* Can't break out of the loop here because sometimes
5100 a binding level will have duplicate bindings for
5101 PT names. It's gross, but I haven't time to fix it. */
5102 }
5103 }
5104 newval = TREE_TYPE (t);
5105 if (ptr == (tree *)0)
5106 {
5107 /* @@ This shouldn't be needed. My test case "zstring.cc" trips
5108 up here if this is changed to an assertion. --KR */
5109 SET_IDENTIFIER_TYPE_VALUE (name, t);
5110 }
5111 else
5112 {
5113 *ptr = newval;
5114 }
5115 }
5116 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
5117 return t;
5118 }
5119
5120 /* Process a using declaration in non-class scope. */
5121
5122 void
5123 finish_nonmember_using_decl (tree scope, tree name)
5124 {
5125 gcc_checking_assert (current_binding_level->kind != sk_class);
5126
5127 if (scope == error_mark_node || name == error_mark_node)
5128 return;
5129
5130 name_lookup lookup (name, 0);
5131
5132 if (!lookup_using_decl (scope, lookup))
5133 return;
5134
5135 /* Emit debug info. */
5136 if (!processing_template_decl)
5137 cp_emit_debug_info_for_using (lookup.value,
5138 current_binding_level->this_entity);
5139
5140 if (current_binding_level->kind == sk_namespace)
5141 {
5142 tree *slot = find_namespace_slot (current_namespace, name, true);
5143
5144 tree value = MAYBE_STAT_DECL (*slot);
5145 tree type = MAYBE_STAT_TYPE (*slot);
5146
5147 do_nonmember_using_decl (lookup, false, &value, &type);
5148
5149 if (STAT_HACK_P (*slot))
5150 {
5151 STAT_DECL (*slot) = value;
5152 STAT_TYPE (*slot) = type;
5153 }
5154 else if (type)
5155 *slot = stat_hack (value, type);
5156 else
5157 *slot = value;
5158 }
5159 else
5160 {
5161 tree using_decl = build_lang_decl (USING_DECL, lookup.name, NULL_TREE);
5162 USING_DECL_SCOPE (using_decl) = scope;
5163 add_decl_expr (using_decl);
5164
5165 cxx_binding *binding = find_local_binding (current_binding_level, name);
5166 tree value = NULL;
5167 tree type = NULL;
5168 if (binding)
5169 {
5170 value = binding->value;
5171 type = binding->type;
5172 }
5173
5174 /* DR 36 questions why using-decls at function scope may not be
5175 duplicates. Disallow it, as C++11 claimed and PR 20420
5176 implemented. */
5177 do_nonmember_using_decl (lookup, true, &value, &type);
5178
5179 if (!value)
5180 ;
5181 else if (binding && value == binding->value)
5182 ;
5183 else if (binding && binding->value && TREE_CODE (value) == OVERLOAD)
5184 {
5185 update_local_overload (IDENTIFIER_BINDING (name), value);
5186 IDENTIFIER_BINDING (name)->value = value;
5187 }
5188 else
5189 /* Install the new binding. */
5190 push_local_binding (name, value, true);
5191
5192 if (!type)
5193 ;
5194 else if (binding && type == binding->type)
5195 ;
5196 else
5197 {
5198 push_local_binding (name, type, true);
5199 set_identifier_type_value (name, type);
5200 }
5201 }
5202 }
5203
5204 /* Return the declarations that are members of the namespace NS. */
5205
5206 tree
5207 cp_namespace_decls (tree ns)
5208 {
5209 return NAMESPACE_LEVEL (ns)->names;
5210 }
5211
5212 /* Combine prefer_type and namespaces_only into flags. */
5213
5214 static int
5215 lookup_flags (int prefer_type, int namespaces_only)
5216 {
5217 if (namespaces_only)
5218 return LOOKUP_PREFER_NAMESPACES;
5219 if (prefer_type > 1)
5220 return LOOKUP_PREFER_TYPES;
5221 if (prefer_type > 0)
5222 return LOOKUP_PREFER_BOTH;
5223 return 0;
5224 }
5225
5226 /* Given a lookup that returned VAL, use FLAGS to decide if we want to
5227 ignore it or not. Subroutine of lookup_name_real and
5228 lookup_type_scope. */
5229
5230 static bool
5231 qualify_lookup (tree val, int flags)
5232 {
5233 if (val == NULL_TREE)
5234 return false;
5235 if ((flags & LOOKUP_PREFER_NAMESPACES) && TREE_CODE (val) == NAMESPACE_DECL)
5236 return true;
5237 if (flags & LOOKUP_PREFER_TYPES)
5238 {
5239 tree target_val = strip_using_decl (val);
5240 if (TREE_CODE (target_val) == TYPE_DECL
5241 || TREE_CODE (target_val) == TEMPLATE_DECL)
5242 return true;
5243 }
5244 if (flags & (LOOKUP_PREFER_NAMESPACES | LOOKUP_PREFER_TYPES))
5245 return false;
5246 /* Look through lambda things that we shouldn't be able to see. */
5247 if (!(flags & LOOKUP_HIDDEN) && is_lambda_ignored_entity (val))
5248 return false;
5249 return true;
5250 }
5251
5252 /* Is there a "using namespace std;" directive within USINGS? */
5253
5254 static bool
5255 using_directives_contain_std_p (vec<tree, va_gc> *usings)
5256 {
5257 if (!usings)
5258 return false;
5259
5260 for (unsigned ix = usings->length (); ix--;)
5261 if ((*usings)[ix] == std_node)
5262 return true;
5263
5264 return false;
5265 }
5266
5267 /* Is there a "using namespace std;" directive within the current
5268 namespace (or its ancestors)?
5269 Compare with name_lookup::search_unqualified. */
5270
5271 static bool
5272 has_using_namespace_std_directive_p ()
5273 {
5274 /* Look at local using-directives. */
5275 for (cp_binding_level *level = current_binding_level;
5276 level;
5277 level = level->level_chain)
5278 if (using_directives_contain_std_p (level->using_directives))
5279 return true;
5280
5281 return false;
5282 }
5283
5284 /* Subclass of deferred_diagnostic, for issuing a note when
5285 --param cxx-max-namespaces-for-diagnostic-help is reached.
5286
5287 The note should be issued after the error, but before any other
5288 deferred diagnostics. This is handled by decorating a wrapped
5289 deferred_diagnostic, and emitting a note before that wrapped note is
5290 deleted. */
5291
5292 class namespace_limit_reached : public deferred_diagnostic
5293 {
5294 public:
5295 namespace_limit_reached (location_t loc, unsigned limit, tree name,
5296 gnu::unique_ptr<deferred_diagnostic> wrapped)
5297 : deferred_diagnostic (loc),
5298 m_limit (limit), m_name (name),
5299 m_wrapped (move (wrapped))
5300 {
5301 }
5302
5303 ~namespace_limit_reached ()
5304 {
5305 /* Unconditionally warn that the search was truncated. */
5306 inform (get_location (),
5307 "maximum limit of %d namespaces searched for %qE",
5308 m_limit, m_name);
5309 /* m_wrapped will be implicitly deleted after this, emitting any followup
5310 diagnostic after the above note. */
5311 }
5312
5313 private:
5314 unsigned m_limit;
5315 tree m_name;
5316 gnu::unique_ptr<deferred_diagnostic> m_wrapped;
5317 };
5318
5319 /* Subclass of deferred_diagnostic, for use when issuing a single suggestion.
5320 Emit a note showing the location of the declaration of the suggestion. */
5321
5322 class show_candidate_location : public deferred_diagnostic
5323 {
5324 public:
5325 show_candidate_location (location_t loc, tree candidate)
5326 : deferred_diagnostic (loc),
5327 m_candidate (candidate)
5328 {
5329 }
5330
5331 ~show_candidate_location ()
5332 {
5333 inform (location_of (m_candidate), "%qE declared here", m_candidate);
5334 }
5335
5336 private:
5337 tree m_candidate;
5338 };
5339
5340 /* Subclass of deferred_diagnostic, for use when there are multiple candidates
5341 to be suggested by suggest_alternatives_for.
5342
5343 Emit a series of notes showing the various suggestions. */
5344
5345 class suggest_alternatives : public deferred_diagnostic
5346 {
5347 public:
5348 suggest_alternatives (location_t loc, vec<tree> candidates)
5349 : deferred_diagnostic (loc),
5350 m_candidates (candidates)
5351 {
5352 }
5353
5354 ~suggest_alternatives ()
5355 {
5356 if (m_candidates.length ())
5357 {
5358 inform_n (get_location (), m_candidates.length (),
5359 "suggested alternative:",
5360 "suggested alternatives:");
5361 for (unsigned ix = 0; ix != m_candidates.length (); ix++)
5362 {
5363 tree val = m_candidates[ix];
5364
5365 inform (location_of (val), " %qE", val);
5366 }
5367 }
5368 m_candidates.release ();
5369 }
5370
5371 private:
5372 vec<tree> m_candidates;
5373 };
5374
5375 /* A class for encapsulating the result of a search across
5376 multiple namespaces (and scoped enums within them) for an
5377 unrecognized name seen at a given source location. */
5378
5379 class namespace_hints
5380 {
5381 public:
5382 namespace_hints (location_t loc, tree name);
5383
5384 name_hint convert_candidates_to_name_hint ();
5385 name_hint maybe_decorate_with_limit (name_hint);
5386
5387 private:
5388 void maybe_add_candidate_for_scoped_enum (tree scoped_enum, tree name);
5389
5390 location_t m_loc;
5391 tree m_name;
5392 vec<tree> m_candidates;
5393
5394 /* Value of "--param cxx-max-namespaces-for-diagnostic-help". */
5395 unsigned m_limit;
5396
5397 /* Was the limit reached? */
5398 bool m_limited;
5399 };
5400
5401 /* Constructor for namespace_hints. Search namespaces and scoped enums,
5402 looking for an exact match for unrecognized NAME seen at LOC. */
5403
5404 namespace_hints::namespace_hints (location_t loc, tree name)
5405 : m_loc(loc), m_name (name)
5406 {
5407 auto_vec<tree> worklist;
5408
5409 m_candidates = vNULL;
5410 m_limited = false;
5411 m_limit = param_cxx_max_namespaces_for_diagnostic_help;
5412
5413 /* Breadth-first search of namespaces. Up to limit namespaces
5414 searched (limit zero == unlimited). */
5415 worklist.safe_push (global_namespace);
5416 for (unsigned ix = 0; ix != worklist.length (); ix++)
5417 {
5418 tree ns = worklist[ix];
5419 name_lookup lookup (name);
5420
5421 if (lookup.search_qualified (ns, false))
5422 m_candidates.safe_push (lookup.value);
5423
5424 if (!m_limited)
5425 {
5426 /* Look for child namespaces. We have to do this
5427 indirectly because they are chained in reverse order,
5428 which is confusing to the user. */
5429 auto_vec<tree> children;
5430
5431 for (tree decl = NAMESPACE_LEVEL (ns)->names;
5432 decl; decl = TREE_CHAIN (decl))
5433 {
5434 if (TREE_CODE (decl) == NAMESPACE_DECL
5435 && !DECL_NAMESPACE_ALIAS (decl)
5436 && !DECL_NAMESPACE_INLINE_P (decl))
5437 children.safe_push (decl);
5438
5439 /* Look for exact matches for NAME within scoped enums.
5440 These aren't added to the worklist, and so don't count
5441 against the search limit. */
5442 if (TREE_CODE (decl) == TYPE_DECL)
5443 {
5444 tree type = TREE_TYPE (decl);
5445 if (SCOPED_ENUM_P (type))
5446 maybe_add_candidate_for_scoped_enum (type, name);
5447 }
5448 }
5449
5450 while (!m_limited && !children.is_empty ())
5451 {
5452 if (worklist.length () == m_limit)
5453 m_limited = true;
5454 else
5455 worklist.safe_push (children.pop ());
5456 }
5457 }
5458 }
5459 }
5460
5461 /* Drop ownership of m_candidates, using it to generate a name_hint at m_loc
5462 for m_name, an IDENTIFIER_NODE for which name lookup failed.
5463
5464 If m_candidates is non-empty, use it to generate a suggestion and/or
5465 a deferred diagnostic that lists the possible candidate(s).
5466 */
5467
5468 name_hint
5469 namespace_hints::convert_candidates_to_name_hint ()
5470 {
5471 /* How many candidates do we have? */
5472
5473 /* If we have just one candidate, issue a name_hint with it as a suggestion
5474 (so that consumers are able to suggest it within the error message and emit
5475 it as a fix-it hint), and with a note showing the candidate's location. */
5476 if (m_candidates.length () == 1)
5477 {
5478 tree candidate = m_candidates[0];
5479 /* Clean up CANDIDATES. */
5480 m_candidates.release ();
5481 return name_hint (expr_to_string (candidate),
5482 new show_candidate_location (m_loc, candidate));
5483 }
5484 else if (m_candidates.length () > 1)
5485 /* If we have more than one candidate, issue a name_hint without a single
5486 "suggestion", but with a deferred diagnostic that lists the
5487 various candidates. This takes ownership of m_candidates. */
5488 return name_hint (NULL, new suggest_alternatives (m_loc, m_candidates));
5489
5490 /* Otherwise, m_candidates ought to be empty, so no cleanup is necessary. */
5491 gcc_assert (m_candidates.length () == 0);
5492 gcc_assert (m_candidates == vNULL);
5493
5494 return name_hint ();
5495 }
5496
5497 /* If --param cxx-max-namespaces-for-diagnostic-help was reached,
5498 then we want to emit a note about after the error, but before
5499 any other deferred diagnostics.
5500
5501 Handle this by figuring out what hint is needed, then optionally
5502 decorating HINT with a namespace_limit_reached wrapper. */
5503
5504 name_hint
5505 namespace_hints::maybe_decorate_with_limit (name_hint hint)
5506 {
5507 if (m_limited)
5508 return name_hint (hint.suggestion (),
5509 new namespace_limit_reached (m_loc, m_limit,
5510 m_name,
5511 hint.take_deferred ()));
5512 else
5513 return hint;
5514 }
5515
5516 /* Look inside SCOPED_ENUM for exact matches for NAME.
5517 If one is found, add its CONST_DECL to m_candidates. */
5518
5519 void
5520 namespace_hints::maybe_add_candidate_for_scoped_enum (tree scoped_enum,
5521 tree name)
5522 {
5523 gcc_assert (SCOPED_ENUM_P (scoped_enum));
5524
5525 for (tree iter = TYPE_VALUES (scoped_enum); iter; iter = TREE_CHAIN (iter))
5526 {
5527 tree id = TREE_PURPOSE (iter);
5528 if (id == name)
5529 {
5530 m_candidates.safe_push (TREE_VALUE (iter));
5531 return;
5532 }
5533 }
5534 }
5535
5536 /* Generate a name_hint at LOCATION for NAME, an IDENTIFIER_NODE for which
5537 name lookup failed.
5538
5539 Search through all available namespaces and any scoped enums within them
5540 and generate a suggestion and/or a deferred diagnostic that lists possible
5541 candidate(s).
5542
5543 If no exact matches are found, and SUGGEST_MISSPELLINGS is true, then also
5544 look for near-matches and suggest the best near-match, if there is one.
5545
5546 If nothing is found, then an empty name_hint is returned. */
5547
5548 name_hint
5549 suggest_alternatives_for (location_t location, tree name,
5550 bool suggest_misspellings)
5551 {
5552 /* First, search for exact matches in other namespaces. */
5553 namespace_hints ns_hints (location, name);
5554 name_hint result = ns_hints.convert_candidates_to_name_hint ();
5555
5556 /* Otherwise, try other approaches. */
5557 if (!result)
5558 result = suggest_alternatives_for_1 (location, name, suggest_misspellings);
5559
5560 return ns_hints.maybe_decorate_with_limit (gnu::move (result));
5561 }
5562
5563 /* The second half of suggest_alternatives_for, for when no exact matches
5564 were found in other namespaces. */
5565
5566 static name_hint
5567 suggest_alternatives_for_1 (location_t location, tree name,
5568 bool suggest_misspellings)
5569 {
5570 /* No candidates were found in the available namespaces. */
5571
5572 /* If there's a "using namespace std;" active, and this
5573 is one of the most common "std::" names, then it's probably a
5574 missing #include. */
5575 if (has_using_namespace_std_directive_p ())
5576 {
5577 name_hint hint = maybe_suggest_missing_std_header (location, name);
5578 if (hint)
5579 return hint;
5580 }
5581
5582 /* Otherwise, consider misspellings. */
5583 if (!suggest_misspellings)
5584 return name_hint ();
5585
5586 return lookup_name_fuzzy (name, FUZZY_LOOKUP_NAME, location);
5587 }
5588
5589 /* Generate a name_hint at LOCATION for NAME, an IDENTIFIER_NODE for which
5590 name lookup failed.
5591
5592 Search through all available namespaces and generate a suggestion and/or
5593 a deferred diagnostic that lists possible candidate(s).
5594
5595 This is similiar to suggest_alternatives_for, but doesn't fallback to
5596 the other approaches used by that function. */
5597
5598 name_hint
5599 suggest_alternatives_in_other_namespaces (location_t location, tree name)
5600 {
5601 namespace_hints ns_hints (location, name);
5602
5603 name_hint result = ns_hints.convert_candidates_to_name_hint ();
5604
5605 return ns_hints.maybe_decorate_with_limit (gnu::move (result));
5606 }
5607
5608 /* A well-known name within the C++ standard library, returned by
5609 get_std_name_hint. */
5610
5611 struct std_name_hint
5612 {
5613 /* A name within "std::". */
5614 const char *name;
5615
5616 /* The header name defining it within the C++ Standard Library
5617 (with '<' and '>'). */
5618 const char *header;
5619
5620 /* The dialect of C++ in which this was added. */
5621 enum cxx_dialect min_dialect;
5622 };
5623
5624 /* Subroutine of maybe_suggest_missing_header for handling unrecognized names
5625 for some of the most common names within "std::".
5626 Given non-NULL NAME, return the std_name_hint for it, or NULL. */
5627
5628 static const std_name_hint *
5629 get_std_name_hint (const char *name)
5630 {
5631 static const std_name_hint hints[] = {
5632 /* <any>. */
5633 {"any", "<any>", cxx17},
5634 {"any_cast", "<any>", cxx17},
5635 {"make_any", "<any>", cxx17},
5636 /* <array>. */
5637 {"array", "<array>", cxx11},
5638 {"to_array", "<array>", cxx20},
5639 /* <atomic>. */
5640 {"atomic", "<atomic>", cxx11},
5641 {"atomic_flag", "<atomic>", cxx11},
5642 {"atomic_ref", "<atomic>", cxx20},
5643 /* <bitset>. */
5644 {"bitset", "<bitset>", cxx11},
5645 /* <compare> */
5646 {"weak_equality", "<compare>", cxx20},
5647 {"strong_equality", "<compare>", cxx20},
5648 {"partial_ordering", "<compare>", cxx20},
5649 {"weak_ordering", "<compare>", cxx20},
5650 {"strong_ordering", "<compare>", cxx20},
5651 /* <complex>. */
5652 {"complex", "<complex>", cxx98},
5653 {"complex_literals", "<complex>", cxx14},
5654 /* <condition_variable>. */
5655 {"condition_variable", "<condition_variable>", cxx11},
5656 {"condition_variable_any", "<condition_variable>", cxx11},
5657 /* <cstddef>. */
5658 {"byte", "<cstddef>", cxx17},
5659 /* <deque>. */
5660 {"deque", "<deque>", cxx98},
5661 /* <forward_list>. */
5662 {"forward_list", "<forward_list>", cxx11},
5663 /* <fstream>. */
5664 {"basic_filebuf", "<fstream>", cxx98},
5665 {"basic_ifstream", "<fstream>", cxx98},
5666 {"basic_ofstream", "<fstream>", cxx98},
5667 {"basic_fstream", "<fstream>", cxx98},
5668 {"fstream", "<fstream>", cxx98},
5669 {"ifstream", "<fstream>", cxx98},
5670 {"ofstream", "<fstream>", cxx98},
5671 /* <functional>. */
5672 {"bind", "<functional>", cxx11},
5673 {"bind_front", "<functional>", cxx20},
5674 {"function", "<functional>", cxx11},
5675 {"hash", "<functional>", cxx11},
5676 {"invoke", "<functional>", cxx17},
5677 {"mem_fn", "<functional>", cxx11},
5678 {"not_fn", "<functional>", cxx17},
5679 {"reference_wrapper", "<functional>", cxx11},
5680 {"unwrap_reference", "<functional>", cxx20},
5681 {"unwrap_reference_t", "<functional>", cxx20},
5682 {"unwrap_ref_decay", "<functional>", cxx20},
5683 {"unwrap_ref_decay_t", "<functional>", cxx20},
5684 /* <future>. */
5685 {"async", "<future>", cxx11},
5686 {"future", "<future>", cxx11},
5687 {"packaged_task", "<future>", cxx11},
5688 {"promise", "<future>", cxx11},
5689 /* <iostream>. */
5690 {"cin", "<iostream>", cxx98},
5691 {"cout", "<iostream>", cxx98},
5692 {"cerr", "<iostream>", cxx98},
5693 {"clog", "<iostream>", cxx98},
5694 {"wcin", "<iostream>", cxx98},
5695 {"wcout", "<iostream>", cxx98},
5696 {"wclog", "<iostream>", cxx98},
5697 /* <istream>. */
5698 {"istream", "<istream>", cxx98},
5699 /* <iterator>. */
5700 {"advance", "<iterator>", cxx98},
5701 {"back_inserter", "<iterator>", cxx98},
5702 {"begin", "<iterator>", cxx11},
5703 {"distance", "<iterator>", cxx98},
5704 {"end", "<iterator>", cxx11},
5705 {"front_inserter", "<iterator>", cxx98},
5706 {"inserter", "<iterator>", cxx98},
5707 {"istream_iterator", "<iterator>", cxx98},
5708 {"istreambuf_iterator", "<iterator>", cxx98},
5709 {"iterator_traits", "<iterator>", cxx98},
5710 {"move_iterator", "<iterator>", cxx11},
5711 {"next", "<iterator>", cxx11},
5712 {"ostream_iterator", "<iterator>", cxx98},
5713 {"ostreambuf_iterator", "<iterator>", cxx98},
5714 {"prev", "<iterator>", cxx11},
5715 {"reverse_iterator", "<iterator>", cxx98},
5716 /* <ostream>. */
5717 {"ostream", "<ostream>", cxx98},
5718 /* <list>. */
5719 {"list", "<list>", cxx98},
5720 /* <map>. */
5721 {"map", "<map>", cxx98},
5722 {"multimap", "<map>", cxx98},
5723 /* <memory>. */
5724 {"allocate_shared", "<memory>", cxx11},
5725 {"allocator", "<memory>", cxx98},
5726 {"allocator_traits", "<memory>", cxx11},
5727 {"make_shared", "<memory>", cxx11},
5728 {"make_unique", "<memory>", cxx14},
5729 {"shared_ptr", "<memory>", cxx11},
5730 {"unique_ptr", "<memory>", cxx11},
5731 {"weak_ptr", "<memory>", cxx11},
5732 /* <memory_resource>. */
5733 {"pmr", "<memory_resource>", cxx17},
5734 /* <mutex>. */
5735 {"mutex", "<mutex>", cxx11},
5736 {"timed_mutex", "<mutex>", cxx11},
5737 {"recursive_mutex", "<mutex>", cxx11},
5738 {"recursive_timed_mutex", "<mutex>", cxx11},
5739 {"once_flag", "<mutex>", cxx11},
5740 {"call_once,", "<mutex>", cxx11},
5741 {"lock", "<mutex>", cxx11},
5742 {"scoped_lock", "<mutex>", cxx17},
5743 {"try_lock", "<mutex>", cxx11},
5744 {"lock_guard", "<mutex>", cxx11},
5745 {"unique_lock", "<mutex>", cxx11},
5746 /* <optional>. */
5747 {"optional", "<optional>", cxx17},
5748 {"make_optional", "<optional>", cxx17},
5749 /* <ostream>. */
5750 {"ostream", "<ostream>", cxx98},
5751 {"wostream", "<ostream>", cxx98},
5752 {"ends", "<ostream>", cxx98},
5753 {"flush", "<ostream>", cxx98},
5754 {"endl", "<ostream>", cxx98},
5755 /* <queue>. */
5756 {"queue", "<queue>", cxx98},
5757 {"priority_queue", "<queue>", cxx98},
5758 /* <set>. */
5759 {"set", "<set>", cxx98},
5760 {"multiset", "<set>", cxx98},
5761 /* <shared_mutex>. */
5762 {"shared_lock", "<shared_mutex>", cxx14},
5763 {"shared_mutex", "<shared_mutex>", cxx17},
5764 {"shared_timed_mutex", "<shared_mutex>", cxx14},
5765 /* <source_location>. */
5766 {"source_location", "<source_location>", cxx20},
5767 /* <sstream>. */
5768 {"basic_stringbuf", "<sstream>", cxx98},
5769 {"basic_istringstream", "<sstream>", cxx98},
5770 {"basic_ostringstream", "<sstream>", cxx98},
5771 {"basic_stringstream", "<sstream>", cxx98},
5772 {"istringstream", "<sstream>", cxx98},
5773 {"ostringstream", "<sstream>", cxx98},
5774 {"stringstream", "<sstream>", cxx98},
5775 /* <stack>. */
5776 {"stack", "<stack>", cxx98},
5777 /* <string>. */
5778 {"basic_string", "<string>", cxx98},
5779 {"string", "<string>", cxx98},
5780 {"wstring", "<string>", cxx98},
5781 {"u8string", "<string>", cxx20},
5782 {"u16string", "<string>", cxx11},
5783 {"u32string", "<string>", cxx11},
5784 /* <string_view>. */
5785 {"basic_string_view", "<string_view>", cxx17},
5786 {"string_view", "<string_view>", cxx17},
5787 /* <thread>. */
5788 {"thread", "<thread>", cxx11},
5789 {"this_thread", "<thread>", cxx11},
5790 /* <tuple>. */
5791 {"apply", "<tuple>", cxx17},
5792 {"forward_as_tuple", "<tuple>", cxx11},
5793 {"make_from_tuple", "<tuple>", cxx17},
5794 {"make_tuple", "<tuple>", cxx11},
5795 {"tie", "<tuple>", cxx11},
5796 {"tuple", "<tuple>", cxx11},
5797 {"tuple_cat", "<tuple>", cxx11},
5798 {"tuple_element", "<tuple>", cxx11},
5799 {"tuple_element_t", "<tuple>", cxx14},
5800 {"tuple_size", "<tuple>", cxx11},
5801 {"tuple_size_v", "<tuple>", cxx17},
5802 /* <type_traits>. */
5803 {"enable_if", "<type_traits>", cxx11},
5804 {"enable_if_t", "<type_traits>", cxx14},
5805 {"invoke_result", "<type_traits>", cxx17},
5806 {"invoke_result_t", "<type_traits>", cxx17},
5807 {"remove_cvref", "<type_traits>", cxx20},
5808 {"remove_cvref_t", "<type_traits>", cxx20},
5809 {"type_identity", "<type_traits>", cxx20},
5810 {"type_identity_t", "<type_traits>", cxx20},
5811 {"void_t", "<type_traits>", cxx17},
5812 {"conjunction", "<type_traits>", cxx17},
5813 {"conjunction_v", "<type_traits>", cxx17},
5814 {"disjunction", "<type_traits>", cxx17},
5815 {"disjunction_v", "<type_traits>", cxx17},
5816 {"negation", "<type_traits>", cxx17},
5817 {"negation_v", "<type_traits>", cxx17},
5818 /* <unordered_map>. */
5819 {"unordered_map", "<unordered_map>", cxx11},
5820 {"unordered_multimap", "<unordered_map>", cxx11},
5821 /* <unordered_set>. */
5822 {"unordered_set", "<unordered_set>", cxx11},
5823 {"unordered_multiset", "<unordered_set>", cxx11},
5824 /* <utility>. */
5825 {"declval", "<utility>", cxx11},
5826 {"forward", "<utility>", cxx11},
5827 {"make_pair", "<utility>", cxx98},
5828 {"move", "<utility>", cxx11},
5829 {"pair", "<utility>", cxx98},
5830 /* <variant>. */
5831 {"variant", "<variant>", cxx17},
5832 {"visit", "<variant>", cxx17},
5833 /* <vector>. */
5834 {"vector", "<vector>", cxx98},
5835 };
5836 const size_t num_hints = sizeof (hints) / sizeof (hints[0]);
5837 for (size_t i = 0; i < num_hints; i++)
5838 {
5839 if (strcmp (name, hints[i].name) == 0)
5840 return &hints[i];
5841 }
5842 return NULL;
5843 }
5844
5845 /* Describe DIALECT. */
5846
5847 static const char *
5848 get_cxx_dialect_name (enum cxx_dialect dialect)
5849 {
5850 switch (dialect)
5851 {
5852 default:
5853 gcc_unreachable ();
5854 case cxx98:
5855 return "C++98";
5856 case cxx11:
5857 return "C++11";
5858 case cxx14:
5859 return "C++14";
5860 case cxx17:
5861 return "C++17";
5862 case cxx20:
5863 return "C++20";
5864 }
5865 }
5866
5867 /* Subclass of deferred_diagnostic for use for names in the "std" namespace
5868 that weren't recognized, but for which we know which header it ought to be
5869 in.
5870
5871 Emit a note either suggesting the header to be included, or noting that
5872 the current dialect is too early for the given name. */
5873
5874 class missing_std_header : public deferred_diagnostic
5875 {
5876 public:
5877 missing_std_header (location_t loc,
5878 const char *name_str,
5879 const std_name_hint *header_hint)
5880 : deferred_diagnostic (loc),
5881 m_name_str (name_str),
5882 m_header_hint (header_hint)
5883 {}
5884 ~missing_std_header ()
5885 {
5886 gcc_rich_location richloc (get_location ());
5887 if (cxx_dialect >= m_header_hint->min_dialect)
5888 {
5889 const char *header = m_header_hint->header;
5890 maybe_add_include_fixit (&richloc, header, true);
5891 inform (&richloc,
5892 "%<std::%s%> is defined in header %qs;"
5893 " did you forget to %<#include %s%>?",
5894 m_name_str, header, header);
5895 }
5896 else
5897 inform (&richloc,
5898 "%<std::%s%> is only available from %s onwards",
5899 m_name_str, get_cxx_dialect_name (m_header_hint->min_dialect));
5900 }
5901
5902 private:
5903 const char *m_name_str;
5904 const std_name_hint *m_header_hint;
5905 };
5906
5907 /* Attempt to generate a name_hint that suggests pertinent header files
5908 for NAME at LOCATION, for common names within the "std" namespace,
5909 or an empty name_hint if this isn't applicable. */
5910
5911 static name_hint
5912 maybe_suggest_missing_std_header (location_t location, tree name)
5913 {
5914 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
5915
5916 const char *name_str = IDENTIFIER_POINTER (name);
5917 const std_name_hint *header_hint = get_std_name_hint (name_str);
5918 if (!header_hint)
5919 return name_hint ();
5920
5921 return name_hint (NULL, new missing_std_header (location, name_str,
5922 header_hint));
5923 }
5924
5925 /* Attempt to generate a name_hint that suggests a missing header file
5926 for NAME within SCOPE at LOCATION, or an empty name_hint if this isn't
5927 applicable. */
5928
5929 static name_hint
5930 maybe_suggest_missing_header (location_t location, tree name, tree scope)
5931 {
5932 if (scope == NULL_TREE)
5933 return name_hint ();
5934 if (TREE_CODE (scope) != NAMESPACE_DECL)
5935 return name_hint ();
5936 /* We only offer suggestions for the "std" namespace. */
5937 if (scope != std_node)
5938 return name_hint ();
5939 return maybe_suggest_missing_std_header (location, name);
5940 }
5941
5942 /* Generate a name_hint at LOCATION for NAME, an IDENTIFIER_NODE for which name
5943 lookup failed within the explicitly provided SCOPE.
5944
5945 Suggest the best meaningful candidates (if any), otherwise
5946 an empty name_hint is returned. */
5947
5948 name_hint
5949 suggest_alternative_in_explicit_scope (location_t location, tree name,
5950 tree scope)
5951 {
5952 /* Something went very wrong; don't suggest anything. */
5953 if (name == error_mark_node)
5954 return name_hint ();
5955
5956 /* Resolve any namespace aliases. */
5957 scope = ORIGINAL_NAMESPACE (scope);
5958
5959 name_hint hint = maybe_suggest_missing_header (location, name, scope);
5960 if (hint)
5961 return hint;
5962
5963 cp_binding_level *level = NAMESPACE_LEVEL (scope);
5964
5965 best_match <tree, const char *> bm (name);
5966 consider_binding_level (name, bm, level, false, FUZZY_LOOKUP_NAME);
5967
5968 /* See if we have a good suggesion for the user. */
5969 const char *fuzzy_name = bm.get_best_meaningful_candidate ();
5970 if (fuzzy_name)
5971 return name_hint (fuzzy_name, NULL);
5972
5973 return name_hint ();
5974 }
5975
5976 /* Given NAME, look within SCOPED_ENUM for possible spell-correction
5977 candidates. */
5978
5979 name_hint
5980 suggest_alternative_in_scoped_enum (tree name, tree scoped_enum)
5981 {
5982 gcc_assert (SCOPED_ENUM_P (scoped_enum));
5983
5984 best_match <tree, const char *> bm (name);
5985 for (tree iter = TYPE_VALUES (scoped_enum); iter; iter = TREE_CHAIN (iter))
5986 {
5987 tree id = TREE_PURPOSE (iter);
5988 bm.consider (IDENTIFIER_POINTER (id));
5989 }
5990 return name_hint (bm.get_best_meaningful_candidate (), NULL);
5991 }
5992
5993 /* Look up NAME (an IDENTIFIER_NODE) in SCOPE (either a NAMESPACE_DECL
5994 or a class TYPE).
5995
5996 If PREFER_TYPE is > 0, we only return TYPE_DECLs or namespaces.
5997 If PREFER_TYPE is > 1, we only return TYPE_DECLs.
5998
5999 Returns a DECL (or OVERLOAD, or BASELINK) representing the
6000 declaration found. If no suitable declaration can be found,
6001 ERROR_MARK_NODE is returned. If COMPLAIN is true and SCOPE is
6002 neither a class-type nor a namespace a diagnostic is issued. */
6003
6004 tree
6005 lookup_qualified_name (tree scope, tree name, int prefer_type, bool complain,
6006 bool find_hidden /*=false*/)
6007 {
6008 tree t = NULL_TREE;
6009
6010 if (TREE_CODE (scope) == NAMESPACE_DECL)
6011 {
6012 int flags = lookup_flags (prefer_type, /*namespaces_only*/false);
6013 if (find_hidden)
6014 flags |= LOOKUP_HIDDEN;
6015 name_lookup lookup (name, flags);
6016
6017 if (qualified_namespace_lookup (scope, &lookup))
6018 t = lookup.value;
6019 }
6020 else if (cxx_dialect != cxx98 && TREE_CODE (scope) == ENUMERAL_TYPE)
6021 t = lookup_enumerator (scope, name);
6022 else if (is_class_type (scope, complain))
6023 t = lookup_member (scope, name, 2, prefer_type, tf_warning_or_error);
6024
6025 if (!t)
6026 return error_mark_node;
6027 return t;
6028 }
6029
6030 /* Wrapper for the above that takes a string argument. The function name is
6031 not at the beginning of the line to keep this wrapper out of etags. */
6032
6033 tree lookup_qualified_name (tree t, const char *p, int wt, bool c, bool fh)
6034 { return lookup_qualified_name (t, get_identifier (p), wt, c, fh); }
6035
6036 /* [namespace.qual]
6037 Accepts the NAME to lookup and its qualifying SCOPE.
6038 Returns the name/type pair found into the cxx_binding *RESULT,
6039 or false on error. */
6040
6041 static bool
6042 qualified_namespace_lookup (tree scope, name_lookup *lookup)
6043 {
6044 timevar_start (TV_NAME_LOOKUP);
6045 query_oracle (lookup->name);
6046 bool found = lookup->search_qualified (ORIGINAL_NAMESPACE (scope));
6047 timevar_stop (TV_NAME_LOOKUP);
6048 return found;
6049 }
6050
6051 /* Helper function for lookup_name_fuzzy.
6052 Traverse binding level LVL, looking for good name matches for NAME
6053 (and BM). */
6054 static void
6055 consider_binding_level (tree name, best_match <tree, const char *> &bm,
6056 cp_binding_level *lvl, bool look_within_fields,
6057 enum lookup_name_fuzzy_kind kind)
6058 {
6059 if (look_within_fields)
6060 if (lvl->this_entity && TREE_CODE (lvl->this_entity) == RECORD_TYPE)
6061 {
6062 tree type = lvl->this_entity;
6063 bool want_type_p = (kind == FUZZY_LOOKUP_TYPENAME);
6064 tree best_matching_field
6065 = lookup_member_fuzzy (type, name, want_type_p);
6066 if (best_matching_field)
6067 bm.consider (IDENTIFIER_POINTER (best_matching_field));
6068 }
6069
6070 /* Only suggest names reserved for the implementation if NAME begins
6071 with an underscore. */
6072 bool consider_implementation_names = (IDENTIFIER_POINTER (name)[0] == '_');
6073
6074 for (tree t = lvl->names; t; t = TREE_CHAIN (t))
6075 {
6076 tree d = t;
6077
6078 /* OVERLOADs or decls from using declaration are wrapped into
6079 TREE_LIST. */
6080 if (TREE_CODE (d) == TREE_LIST)
6081 d = OVL_FIRST (TREE_VALUE (d));
6082
6083 /* Don't use bindings from implicitly declared functions,
6084 as they were likely misspellings themselves. */
6085 if (TREE_TYPE (d) == error_mark_node)
6086 continue;
6087
6088 /* Skip anticipated decls of builtin functions. */
6089 if (TREE_CODE (d) == FUNCTION_DECL
6090 && fndecl_built_in_p (d)
6091 && DECL_ANTICIPATED (d))
6092 continue;
6093
6094 /* Skip compiler-generated variables (e.g. __for_begin/__for_end
6095 within range for). */
6096 if (TREE_CODE (d) == VAR_DECL
6097 && DECL_ARTIFICIAL (d))
6098 continue;
6099
6100 tree suggestion = DECL_NAME (d);
6101 if (!suggestion)
6102 continue;
6103
6104 /* Don't suggest names that are for anonymous aggregate types, as
6105 they are an implementation detail generated by the compiler. */
6106 if (IDENTIFIER_ANON_P (suggestion))
6107 continue;
6108
6109 const char *suggestion_str = IDENTIFIER_POINTER (suggestion);
6110
6111 /* Ignore internal names with spaces in them. */
6112 if (strchr (suggestion_str, ' '))
6113 continue;
6114
6115 /* Don't suggest names that are reserved for use by the
6116 implementation, unless NAME began with an underscore. */
6117 if (name_reserved_for_implementation_p (suggestion_str)
6118 && !consider_implementation_names)
6119 continue;
6120
6121 bm.consider (suggestion_str);
6122 }
6123 }
6124
6125 /* Subclass of deferred_diagnostic. Notify the user that the
6126 given macro was used before it was defined.
6127 This can be done in the C++ frontend since tokenization happens
6128 upfront. */
6129
6130 class macro_use_before_def : public deferred_diagnostic
6131 {
6132 public:
6133 /* Factory function. Return a new macro_use_before_def instance if
6134 appropriate, or return NULL. */
6135 static macro_use_before_def *
6136 maybe_make (location_t use_loc, cpp_hashnode *macro)
6137 {
6138 location_t def_loc = cpp_macro_definition_location (macro);
6139 if (def_loc == UNKNOWN_LOCATION)
6140 return NULL;
6141
6142 /* We only want to issue a note if the macro was used *before* it was
6143 defined.
6144 We don't want to issue a note for cases where a macro was incorrectly
6145 used, leaving it unexpanded (e.g. by using the wrong argument
6146 count). */
6147 if (!linemap_location_before_p (line_table, use_loc, def_loc))
6148 return NULL;
6149
6150 return new macro_use_before_def (use_loc, macro);
6151 }
6152
6153 private:
6154 /* Ctor. LOC is the location of the usage. MACRO is the
6155 macro that was used. */
6156 macro_use_before_def (location_t loc, cpp_hashnode *macro)
6157 : deferred_diagnostic (loc), m_macro (macro)
6158 {
6159 gcc_assert (macro);
6160 }
6161
6162 ~macro_use_before_def ()
6163 {
6164 if (is_suppressed_p ())
6165 return;
6166
6167 inform (get_location (), "the macro %qs had not yet been defined",
6168 (const char *)m_macro->ident.str);
6169 inform (cpp_macro_definition_location (m_macro),
6170 "it was later defined here");
6171 }
6172
6173 private:
6174 cpp_hashnode *m_macro;
6175 };
6176
6177 /* Determine if it can ever make sense to offer RID as a suggestion for
6178 a misspelling.
6179
6180 Subroutine of lookup_name_fuzzy. */
6181
6182 static bool
6183 suggest_rid_p (enum rid rid)
6184 {
6185 switch (rid)
6186 {
6187 /* Support suggesting function-like keywords. */
6188 case RID_STATIC_ASSERT:
6189 return true;
6190
6191 default:
6192 /* Support suggesting the various decl-specifier words, to handle
6193 e.g. "singed" vs "signed" typos. */
6194 if (cp_keyword_starts_decl_specifier_p (rid))
6195 return true;
6196
6197 /* Otherwise, don't offer it. This avoids suggesting e.g. "if"
6198 and "do" for short misspellings, which are likely to lead to
6199 nonsensical results. */
6200 return false;
6201 }
6202 }
6203
6204 /* Search for near-matches for NAME within the current bindings, and within
6205 macro names, returning the best match as a const char *, or NULL if
6206 no reasonable match is found.
6207
6208 Use LOC for any deferred diagnostics. */
6209
6210 name_hint
6211 lookup_name_fuzzy (tree name, enum lookup_name_fuzzy_kind kind, location_t loc)
6212 {
6213 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
6214
6215 /* First, try some well-known names in the C++ standard library, in case
6216 the user forgot a #include. */
6217 const char *header_hint
6218 = get_cp_stdlib_header_for_name (IDENTIFIER_POINTER (name));
6219 if (header_hint)
6220 return name_hint (NULL,
6221 new suggest_missing_header (loc,
6222 IDENTIFIER_POINTER (name),
6223 header_hint));
6224
6225 best_match <tree, const char *> bm (name);
6226
6227 cp_binding_level *lvl;
6228 for (lvl = scope_chain->class_bindings; lvl; lvl = lvl->level_chain)
6229 consider_binding_level (name, bm, lvl, true, kind);
6230
6231 for (lvl = current_binding_level; lvl; lvl = lvl->level_chain)
6232 consider_binding_level (name, bm, lvl, false, kind);
6233
6234 /* Consider macros: if the user misspelled a macro name e.g. "SOME_MACRO"
6235 as:
6236 x = SOME_OTHER_MACRO (y);
6237 then "SOME_OTHER_MACRO" will survive to the frontend and show up
6238 as a misspelled identifier.
6239
6240 Use the best distance so far so that a candidate is only set if
6241 a macro is better than anything so far. This allows early rejection
6242 (without calculating the edit distance) of macro names that must have
6243 distance >= bm.get_best_distance (), and means that we only get a
6244 non-NULL result for best_macro_match if it's better than any of
6245 the identifiers already checked. */
6246 best_macro_match bmm (name, bm.get_best_distance (), parse_in);
6247 cpp_hashnode *best_macro = bmm.get_best_meaningful_candidate ();
6248 /* If a macro is the closest so far to NAME, consider it. */
6249 if (best_macro)
6250 bm.consider ((const char *)best_macro->ident.str);
6251 else if (bmm.get_best_distance () == 0)
6252 {
6253 /* If we have an exact match for a macro name, then either the
6254 macro was used with the wrong argument count, or the macro
6255 has been used before it was defined. */
6256 if (cpp_hashnode *macro = bmm.blithely_get_best_candidate ())
6257 if (cpp_user_macro_p (macro))
6258 return name_hint (NULL,
6259 macro_use_before_def::maybe_make (loc, macro));
6260 }
6261
6262 /* Try the "starts_decl_specifier_p" keywords to detect
6263 "singed" vs "signed" typos. */
6264 for (unsigned i = 0; i < num_c_common_reswords; i++)
6265 {
6266 const c_common_resword *resword = &c_common_reswords[i];
6267
6268 if (!suggest_rid_p (resword->rid))
6269 continue;
6270
6271 tree resword_identifier = ridpointers [resword->rid];
6272 if (!resword_identifier)
6273 continue;
6274 gcc_assert (TREE_CODE (resword_identifier) == IDENTIFIER_NODE);
6275
6276 /* Only consider reserved words that survived the
6277 filtering in init_reswords (e.g. for -std). */
6278 if (!IDENTIFIER_KEYWORD_P (resword_identifier))
6279 continue;
6280
6281 bm.consider (IDENTIFIER_POINTER (resword_identifier));
6282 }
6283
6284 return name_hint (bm.get_best_meaningful_candidate (), NULL);
6285 }
6286
6287 /* Subroutine of outer_binding.
6288
6289 Returns TRUE if BINDING is a binding to a template parameter of
6290 SCOPE. In that case SCOPE is the scope of a primary template
6291 parameter -- in the sense of G++, i.e, a template that has its own
6292 template header.
6293
6294 Returns FALSE otherwise. */
6295
6296 static bool
6297 binding_to_template_parms_of_scope_p (cxx_binding *binding,
6298 cp_binding_level *scope)
6299 {
6300 tree binding_value, tmpl, tinfo;
6301 int level;
6302
6303 if (!binding || !scope || !scope->this_entity)
6304 return false;
6305
6306 binding_value = binding->value ? binding->value : binding->type;
6307 tinfo = get_template_info (scope->this_entity);
6308
6309 /* BINDING_VALUE must be a template parm. */
6310 if (binding_value == NULL_TREE
6311 || (!DECL_P (binding_value)
6312 || !DECL_TEMPLATE_PARM_P (binding_value)))
6313 return false;
6314
6315 /* The level of BINDING_VALUE. */
6316 level =
6317 template_type_parameter_p (binding_value)
6318 ? TEMPLATE_PARM_LEVEL (TEMPLATE_TYPE_PARM_INDEX
6319 (TREE_TYPE (binding_value)))
6320 : TEMPLATE_PARM_LEVEL (DECL_INITIAL (binding_value));
6321
6322 /* The template of the current scope, iff said scope is a primary
6323 template. */
6324 tmpl = (tinfo
6325 && PRIMARY_TEMPLATE_P (TI_TEMPLATE (tinfo))
6326 ? TI_TEMPLATE (tinfo)
6327 : NULL_TREE);
6328
6329 /* If the level of the parm BINDING_VALUE equals the depth of TMPL,
6330 then BINDING_VALUE is a parameter of TMPL. */
6331 return (tmpl && level == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)));
6332 }
6333
6334 /* Return the innermost non-namespace binding for NAME from a scope
6335 containing BINDING, or, if BINDING is NULL, the current scope.
6336 Please note that for a given template, the template parameters are
6337 considered to be in the scope containing the current scope.
6338 If CLASS_P is false, then class bindings are ignored. */
6339
6340 cxx_binding *
6341 outer_binding (tree name,
6342 cxx_binding *binding,
6343 bool class_p)
6344 {
6345 cxx_binding *outer;
6346 cp_binding_level *scope;
6347 cp_binding_level *outer_scope;
6348
6349 if (binding)
6350 {
6351 scope = binding->scope->level_chain;
6352 outer = binding->previous;
6353 }
6354 else
6355 {
6356 scope = current_binding_level;
6357 outer = IDENTIFIER_BINDING (name);
6358 }
6359 outer_scope = outer ? outer->scope : NULL;
6360
6361 /* Because we create class bindings lazily, we might be missing a
6362 class binding for NAME. If there are any class binding levels
6363 between the LAST_BINDING_LEVEL and the scope in which OUTER was
6364 declared, we must lookup NAME in those class scopes. */
6365 if (class_p)
6366 while (scope && scope != outer_scope && scope->kind != sk_namespace)
6367 {
6368 if (scope->kind == sk_class)
6369 {
6370 cxx_binding *class_binding;
6371
6372 class_binding = get_class_binding (name, scope);
6373 if (class_binding)
6374 {
6375 /* Thread this new class-scope binding onto the
6376 IDENTIFIER_BINDING list so that future lookups
6377 find it quickly. */
6378 class_binding->previous = outer;
6379 if (binding)
6380 binding->previous = class_binding;
6381 else
6382 IDENTIFIER_BINDING (name) = class_binding;
6383 return class_binding;
6384 }
6385 }
6386 /* If we are in a member template, the template parms of the member
6387 template are considered to be inside the scope of the containing
6388 class, but within G++ the class bindings are all pushed between the
6389 template parms and the function body. So if the outer binding is
6390 a template parm for the current scope, return it now rather than
6391 look for a class binding. */
6392 if (outer_scope && outer_scope->kind == sk_template_parms
6393 && binding_to_template_parms_of_scope_p (outer, scope))
6394 return outer;
6395
6396 scope = scope->level_chain;
6397 }
6398
6399 return outer;
6400 }
6401
6402 /* Return the innermost block-scope or class-scope value binding for
6403 NAME, or NULL_TREE if there is no such binding. */
6404
6405 tree
6406 innermost_non_namespace_value (tree name)
6407 {
6408 cxx_binding *binding;
6409 binding = outer_binding (name, /*binding=*/NULL, /*class_p=*/true);
6410 return binding ? binding->value : NULL_TREE;
6411 }
6412
6413 /* Look up NAME in the current binding level and its superiors in the
6414 namespace of variables, functions and typedefs. Return a ..._DECL
6415 node of some kind representing its definition if there is only one
6416 such declaration, or return a TREE_LIST with all the overloaded
6417 definitions if there are many, or return 0 if it is undefined.
6418 Hidden name, either friend declaration or built-in function, are
6419 not ignored.
6420
6421 If PREFER_TYPE is > 0, we prefer TYPE_DECLs or namespaces.
6422 If PREFER_TYPE is > 1, we reject non-type decls (e.g. namespaces).
6423 Otherwise we prefer non-TYPE_DECLs.
6424
6425 If NONCLASS is nonzero, bindings in class scopes are ignored. If
6426 BLOCK_P is false, bindings in block scopes are ignored. */
6427
6428 static tree
6429 lookup_name_real_1 (tree name, int prefer_type, int nonclass, bool block_p,
6430 int namespaces_only, int flags)
6431 {
6432 cxx_binding *iter;
6433 tree val = NULL_TREE;
6434
6435 query_oracle (name);
6436
6437 /* Conversion operators are handled specially because ordinary
6438 unqualified name lookup will not find template conversion
6439 operators. */
6440 if (IDENTIFIER_CONV_OP_P (name))
6441 {
6442 cp_binding_level *level;
6443
6444 for (level = current_binding_level;
6445 level && level->kind != sk_namespace;
6446 level = level->level_chain)
6447 {
6448 tree class_type;
6449 tree operators;
6450
6451 /* A conversion operator can only be declared in a class
6452 scope. */
6453 if (level->kind != sk_class)
6454 continue;
6455
6456 /* Lookup the conversion operator in the class. */
6457 class_type = level->this_entity;
6458 operators = lookup_fnfields (class_type, name, /*protect=*/0,
6459 tf_warning_or_error);
6460 if (operators)
6461 return operators;
6462 }
6463
6464 return NULL_TREE;
6465 }
6466
6467 flags |= lookup_flags (prefer_type, namespaces_only);
6468
6469 /* First, look in non-namespace scopes. */
6470
6471 if (current_class_type == NULL_TREE)
6472 nonclass = 1;
6473
6474 if (block_p || !nonclass)
6475 for (iter = outer_binding (name, NULL, !nonclass);
6476 iter;
6477 iter = outer_binding (name, iter, !nonclass))
6478 {
6479 tree binding;
6480
6481 /* Skip entities we don't want. */
6482 if (LOCAL_BINDING_P (iter) ? !block_p : nonclass)
6483 continue;
6484
6485 /* If this is the kind of thing we're looking for, we're done. */
6486 if (qualify_lookup (iter->value, flags))
6487 binding = iter->value;
6488 else if ((flags & LOOKUP_PREFER_TYPES)
6489 && qualify_lookup (iter->type, flags))
6490 binding = iter->type;
6491 else
6492 binding = NULL_TREE;
6493
6494 if (binding)
6495 {
6496 if (TREE_CODE (binding) == TYPE_DECL && DECL_HIDDEN_P (binding))
6497 {
6498 /* A non namespace-scope binding can only be hidden in the
6499 presence of a local class, due to friend declarations.
6500
6501 In particular, consider:
6502
6503 struct C;
6504 void f() {
6505 struct A {
6506 friend struct B;
6507 friend struct C;
6508 void g() {
6509 B* b; // error: B is hidden
6510 C* c; // OK, finds ::C
6511 }
6512 };
6513 B *b; // error: B is hidden
6514 C *c; // OK, finds ::C
6515 struct B {};
6516 B *bb; // OK
6517 }
6518
6519 The standard says that "B" is a local class in "f"
6520 (but not nested within "A") -- but that name lookup
6521 for "B" does not find this declaration until it is
6522 declared directly with "f".
6523
6524 In particular:
6525
6526 [class.friend]
6527
6528 If a friend declaration appears in a local class and
6529 the name specified is an unqualified name, a prior
6530 declaration is looked up without considering scopes
6531 that are outside the innermost enclosing non-class
6532 scope. For a friend function declaration, if there is
6533 no prior declaration, the program is ill-formed. For a
6534 friend class declaration, if there is no prior
6535 declaration, the class that is specified belongs to the
6536 innermost enclosing non-class scope, but if it is
6537 subsequently referenced, its name is not found by name
6538 lookup until a matching declaration is provided in the
6539 innermost enclosing nonclass scope.
6540
6541 So just keep looking for a non-hidden binding.
6542 */
6543 gcc_assert (TREE_CODE (binding) == TYPE_DECL);
6544 continue;
6545 }
6546 val = binding;
6547 break;
6548 }
6549 }
6550
6551 /* Now lookup in namespace scopes. */
6552 if (!val)
6553 {
6554 name_lookup lookup (name, flags);
6555 if (lookup.search_unqualified
6556 (current_decl_namespace (), current_binding_level))
6557 val = lookup.value;
6558 }
6559
6560 /* If we have a single function from a using decl, pull it out. */
6561 if (val && TREE_CODE (val) == OVERLOAD && !really_overloaded_fn (val))
6562 val = OVL_FUNCTION (val);
6563
6564 return val;
6565 }
6566
6567 /* Wrapper for lookup_name_real_1. */
6568
6569 tree
6570 lookup_name_real (tree name, int prefer_type, int nonclass, bool block_p,
6571 int namespaces_only, int flags)
6572 {
6573 tree ret;
6574 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
6575 ret = lookup_name_real_1 (name, prefer_type, nonclass, block_p,
6576 namespaces_only, flags);
6577 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
6578 return ret;
6579 }
6580
6581 tree
6582 lookup_name_nonclass (tree name)
6583 {
6584 return lookup_name_real (name, 0, 1, /*block_p=*/true, 0, 0);
6585 }
6586
6587 tree
6588 lookup_name (tree name)
6589 {
6590 return lookup_name_real (name, 0, 0, /*block_p=*/true, 0, 0);
6591 }
6592
6593 tree
6594 lookup_name_prefer_type (tree name, int prefer_type)
6595 {
6596 return lookup_name_real (name, prefer_type, 0, /*block_p=*/true, 0, 0);
6597 }
6598
6599 /* Look up NAME for type used in elaborated name specifier in
6600 the scopes given by SCOPE. SCOPE can be either TS_CURRENT or
6601 TS_WITHIN_ENCLOSING_NON_CLASS. Although not implied by the
6602 name, more scopes are checked if cleanup or template parameter
6603 scope is encountered.
6604
6605 Unlike lookup_name_real, we make sure that NAME is actually
6606 declared in the desired scope, not from inheritance, nor using
6607 directive. For using declaration, there is DR138 still waiting
6608 to be resolved. Hidden name coming from an earlier friend
6609 declaration is also returned.
6610
6611 A TYPE_DECL best matching the NAME is returned. Catching error
6612 and issuing diagnostics are caller's responsibility. */
6613
6614 static tree
6615 lookup_type_scope_1 (tree name, tag_scope scope)
6616 {
6617 cp_binding_level *b = current_binding_level;
6618
6619 if (b->kind != sk_namespace)
6620 /* Look in non-namespace scopes. */
6621 for (cxx_binding *iter = NULL;
6622 (iter = outer_binding (name, iter, /*class_p=*/ true)); )
6623 {
6624 /* First check we're supposed to be looking in this scope --
6625 if we're not, we're done. */
6626 for (; b != iter->scope; b = b->level_chain)
6627 if (!(b->kind == sk_cleanup
6628 || b->kind == sk_template_parms
6629 || b->kind == sk_function_parms
6630 || (b->kind == sk_class
6631 && scope == ts_within_enclosing_non_class)))
6632 return NULL_TREE;
6633
6634 /* Check if this is the kind of thing we're looking for. If
6635 SCOPE is TS_CURRENT, also make sure it doesn't come from
6636 base class. For ITER->VALUE, we can simply use
6637 INHERITED_VALUE_BINDING_P. For ITER->TYPE, we have to
6638 use our own check.
6639
6640 We check ITER->TYPE before ITER->VALUE in order to handle
6641 typedef struct C {} C;
6642 correctly. */
6643 if (tree type = iter->type)
6644 if (qualify_lookup (type, LOOKUP_PREFER_TYPES)
6645 && (scope != ts_current
6646 || LOCAL_BINDING_P (iter)
6647 || DECL_CONTEXT (type) == iter->scope->this_entity))
6648 return type;
6649
6650 if (qualify_lookup (iter->value, LOOKUP_PREFER_TYPES)
6651 && (scope != ts_current
6652 || !INHERITED_VALUE_BINDING_P (iter)))
6653 return iter->value;
6654 }
6655
6656 /* Now check if we can look in namespace scope. */
6657 for (; b->kind != sk_namespace; b = b->level_chain)
6658 if (!(b->kind == sk_cleanup
6659 || b->kind == sk_template_parms
6660 || b->kind == sk_function_parms
6661 || (b->kind == sk_class
6662 && scope == ts_within_enclosing_non_class)))
6663 return NULL_TREE;
6664
6665 /* Look in the innermost namespace. */
6666 tree ns = b->this_entity;
6667 if (tree *slot = find_namespace_slot (ns, name))
6668 {
6669 /* If this is the kind of thing we're looking for, we're done. */
6670 if (tree type = MAYBE_STAT_TYPE (*slot))
6671 if (qualify_lookup (type, LOOKUP_PREFER_TYPES))
6672 return type;
6673
6674 if (tree decl = MAYBE_STAT_DECL (*slot))
6675 if (qualify_lookup (decl, LOOKUP_PREFER_TYPES))
6676 return decl;
6677 }
6678
6679 return NULL_TREE;
6680 }
6681
6682 /* Wrapper for lookup_type_scope_1. */
6683
6684 tree
6685 lookup_type_scope (tree name, tag_scope scope)
6686 {
6687 tree ret;
6688 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
6689 ret = lookup_type_scope_1 (name, scope);
6690 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
6691 return ret;
6692 }
6693
6694 /* Returns true iff DECL is a block-scope extern declaration of a function
6695 or variable. */
6696
6697 bool
6698 is_local_extern (tree decl)
6699 {
6700 cxx_binding *binding;
6701
6702 /* For functions, this is easy. */
6703 if (TREE_CODE (decl) == FUNCTION_DECL)
6704 return DECL_LOCAL_FUNCTION_P (decl);
6705
6706 if (!VAR_P (decl))
6707 return false;
6708 if (!current_function_decl)
6709 return false;
6710
6711 /* For variables, this is not easy. We need to look at the binding stack
6712 for the identifier to see whether the decl we have is a local. */
6713 for (binding = IDENTIFIER_BINDING (DECL_NAME (decl));
6714 binding && binding->scope->kind != sk_namespace;
6715 binding = binding->previous)
6716 if (binding->value == decl)
6717 return LOCAL_BINDING_P (binding);
6718
6719 return false;
6720 }
6721
6722 /* The type TYPE is being declared. If it is a class template, or a
6723 specialization of a class template, do any processing required and
6724 perform error-checking. If IS_FRIEND is nonzero, this TYPE is
6725 being declared a friend. B is the binding level at which this TYPE
6726 should be bound.
6727
6728 Returns the TYPE_DECL for TYPE, which may have been altered by this
6729 processing. */
6730
6731 static tree
6732 maybe_process_template_type_declaration (tree type, int is_friend,
6733 cp_binding_level *b)
6734 {
6735 tree decl = TYPE_NAME (type);
6736
6737 if (processing_template_parmlist)
6738 /* You can't declare a new template type in a template parameter
6739 list. But, you can declare a non-template type:
6740
6741 template <class A*> struct S;
6742
6743 is a forward-declaration of `A'. */
6744 ;
6745 else if (b->kind == sk_namespace
6746 && current_binding_level->kind != sk_namespace)
6747 /* If this new type is being injected into a containing scope,
6748 then it's not a template type. */
6749 ;
6750 else
6751 {
6752 gcc_assert (MAYBE_CLASS_TYPE_P (type)
6753 || TREE_CODE (type) == ENUMERAL_TYPE);
6754
6755 if (processing_template_decl)
6756 {
6757 /* This may change after the call to
6758 push_template_decl_real, but we want the original value. */
6759 tree name = DECL_NAME (decl);
6760
6761 decl = push_template_decl_real (decl, is_friend);
6762 if (decl == error_mark_node)
6763 return error_mark_node;
6764
6765 /* If the current binding level is the binding level for the
6766 template parameters (see the comment in
6767 begin_template_parm_list) and the enclosing level is a class
6768 scope, and we're not looking at a friend, push the
6769 declaration of the member class into the class scope. In the
6770 friend case, push_template_decl will already have put the
6771 friend into global scope, if appropriate. */
6772 if (TREE_CODE (type) != ENUMERAL_TYPE
6773 && !is_friend && b->kind == sk_template_parms
6774 && b->level_chain->kind == sk_class)
6775 {
6776 finish_member_declaration (CLASSTYPE_TI_TEMPLATE (type));
6777
6778 if (!COMPLETE_TYPE_P (current_class_type))
6779 {
6780 maybe_add_class_template_decl_list (current_class_type,
6781 type, /*friend_p=*/0);
6782 /* Put this UTD in the table of UTDs for the class. */
6783 if (CLASSTYPE_NESTED_UTDS (current_class_type) == NULL)
6784 CLASSTYPE_NESTED_UTDS (current_class_type) =
6785 binding_table_new (SCOPE_DEFAULT_HT_SIZE);
6786
6787 binding_table_insert
6788 (CLASSTYPE_NESTED_UTDS (current_class_type), name, type);
6789 }
6790 }
6791 }
6792 }
6793
6794 return decl;
6795 }
6796
6797 /* Push a tag name NAME for struct/class/union/enum type TYPE. In case
6798 that the NAME is a class template, the tag is processed but not pushed.
6799
6800 The pushed scope depend on the SCOPE parameter:
6801 - When SCOPE is TS_CURRENT, put it into the inner-most non-sk_cleanup
6802 scope.
6803 - When SCOPE is TS_GLOBAL, put it in the inner-most non-class and
6804 non-template-parameter scope. This case is needed for forward
6805 declarations.
6806 - When SCOPE is TS_WITHIN_ENCLOSING_NON_CLASS, this is similar to
6807 TS_GLOBAL case except that names within template-parameter scopes
6808 are not pushed at all.
6809
6810 Returns TYPE upon success and ERROR_MARK_NODE otherwise. */
6811
6812 static tree
6813 do_pushtag (tree name, tree type, tag_scope scope)
6814 {
6815 tree decl;
6816
6817 cp_binding_level *b = current_binding_level;
6818 while (true)
6819 {
6820 if (/* Cleanup scopes are not scopes from the point of view of
6821 the language. */
6822 b->kind == sk_cleanup
6823 /* Neither are function parameter scopes. */
6824 || b->kind == sk_function_parms
6825 /* Neither are the scopes used to hold template parameters
6826 for an explicit specialization. For an ordinary template
6827 declaration, these scopes are not scopes from the point of
6828 view of the language. */
6829 || (b->kind == sk_template_parms
6830 && (b->explicit_spec_p || scope == ts_global)))
6831 b = b->level_chain;
6832 else if (b->kind == sk_class
6833 && scope != ts_current)
6834 {
6835 b = b->level_chain;
6836 if (b->kind == sk_template_parms)
6837 b = b->level_chain;
6838 }
6839 else
6840 break;
6841 }
6842
6843 gcc_assert (identifier_p (name));
6844
6845 /* Do C++ gratuitous typedefing. */
6846 if (identifier_type_value_1 (name) != type)
6847 {
6848 tree tdef;
6849 int in_class = 0;
6850 tree context = TYPE_CONTEXT (type);
6851
6852 if (! context)
6853 {
6854 cp_binding_level *cb = b;
6855 while (cb->kind != sk_namespace
6856 && cb->kind != sk_class
6857 && (cb->kind != sk_function_parms
6858 || !cb->this_entity))
6859 cb = cb->level_chain;
6860 tree cs = cb->this_entity;
6861
6862 gcc_checking_assert (TREE_CODE (cs) == FUNCTION_DECL
6863 ? cs == current_function_decl
6864 : TYPE_P (cs) ? cs == current_class_type
6865 : cs == current_namespace);
6866
6867 if (scope == ts_current
6868 || (cs && TREE_CODE (cs) == FUNCTION_DECL))
6869 context = cs;
6870 else if (cs && TYPE_P (cs))
6871 /* When declaring a friend class of a local class, we want
6872 to inject the newly named class into the scope
6873 containing the local class, not the namespace
6874 scope. */
6875 context = decl_function_context (get_type_decl (cs));
6876 }
6877 if (!context)
6878 context = current_namespace;
6879
6880 if (b->kind == sk_class
6881 || (b->kind == sk_template_parms
6882 && b->level_chain->kind == sk_class))
6883 in_class = 1;
6884
6885 tdef = create_implicit_typedef (name, type);
6886 DECL_CONTEXT (tdef) = FROB_CONTEXT (context);
6887 if (scope == ts_within_enclosing_non_class)
6888 {
6889 /* This is a friend. Make this TYPE_DECL node hidden from
6890 ordinary name lookup. Its corresponding TEMPLATE_DECL
6891 will be marked in push_template_decl_real. */
6892 retrofit_lang_decl (tdef);
6893 DECL_ANTICIPATED (tdef) = 1;
6894 DECL_FRIEND_P (tdef) = 1;
6895 }
6896
6897 decl = maybe_process_template_type_declaration
6898 (type, scope == ts_within_enclosing_non_class, b);
6899 if (decl == error_mark_node)
6900 return decl;
6901
6902 if (b->kind == sk_class)
6903 {
6904 if (!TYPE_BEING_DEFINED (current_class_type))
6905 /* Don't push anywhere if the class is complete; a lambda in an
6906 NSDMI is not a member of the class. */
6907 ;
6908 else if (!PROCESSING_REAL_TEMPLATE_DECL_P ())
6909 /* Put this TYPE_DECL on the TYPE_FIELDS list for the
6910 class. But if it's a member template class, we want
6911 the TEMPLATE_DECL, not the TYPE_DECL, so this is done
6912 later. */
6913 finish_member_declaration (decl);
6914 else
6915 pushdecl_class_level (decl);
6916 }
6917 else if (b->kind != sk_template_parms)
6918 {
6919 decl = do_pushdecl_with_scope (decl, b, /*is_friend=*/false);
6920 if (decl == error_mark_node)
6921 return decl;
6922
6923 if (DECL_CONTEXT (decl) == std_node
6924 && init_list_identifier == DECL_NAME (TYPE_NAME (type))
6925 && !CLASSTYPE_TEMPLATE_INFO (type))
6926 {
6927 error ("declaration of %<std::initializer_list%> does not match "
6928 "%<#include <initializer_list>%>, isn%'t a template");
6929 return error_mark_node;
6930 }
6931 }
6932
6933 if (! in_class)
6934 set_identifier_type_value_with_scope (name, tdef, b);
6935
6936 TYPE_CONTEXT (type) = DECL_CONTEXT (decl);
6937
6938 /* If this is a local class, keep track of it. We need this
6939 information for name-mangling, and so that it is possible to
6940 find all function definitions in a translation unit in a
6941 convenient way. (It's otherwise tricky to find a member
6942 function definition it's only pointed to from within a local
6943 class.) */
6944 if (TYPE_FUNCTION_SCOPE_P (type))
6945 {
6946 if (processing_template_decl)
6947 {
6948 /* Push a DECL_EXPR so we call pushtag at the right time in
6949 template instantiation rather than in some nested context. */
6950 add_decl_expr (decl);
6951 }
6952 /* Lambdas use LAMBDA_EXPR_DISCRIMINATOR instead. */
6953 else if (!LAMBDA_TYPE_P (type))
6954 determine_local_discriminator (TYPE_NAME (type));
6955 }
6956 }
6957
6958 if (b->kind == sk_class
6959 && !COMPLETE_TYPE_P (current_class_type))
6960 {
6961 maybe_add_class_template_decl_list (current_class_type,
6962 type, /*friend_p=*/0);
6963
6964 if (CLASSTYPE_NESTED_UTDS (current_class_type) == NULL)
6965 CLASSTYPE_NESTED_UTDS (current_class_type)
6966 = binding_table_new (SCOPE_DEFAULT_HT_SIZE);
6967
6968 binding_table_insert
6969 (CLASSTYPE_NESTED_UTDS (current_class_type), name, type);
6970 }
6971
6972 decl = TYPE_NAME (type);
6973 gcc_assert (TREE_CODE (decl) == TYPE_DECL);
6974
6975 /* Set type visibility now if this is a forward declaration. */
6976 TREE_PUBLIC (decl) = 1;
6977 determine_visibility (decl);
6978
6979 return type;
6980 }
6981
6982 /* Wrapper for do_pushtag. */
6983
6984 tree
6985 pushtag (tree name, tree type, tag_scope scope)
6986 {
6987 tree ret;
6988 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
6989 ret = do_pushtag (name, type, scope);
6990 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
6991 return ret;
6992 }
6993
6994 \f
6995 /* Subroutines for reverting temporarily to top-level for instantiation
6996 of templates and such. We actually need to clear out the class- and
6997 local-value slots of all identifiers, so that only the global values
6998 are at all visible. Simply setting current_binding_level to the global
6999 scope isn't enough, because more binding levels may be pushed. */
7000 struct saved_scope *scope_chain;
7001
7002 /* Return true if ID has not already been marked. */
7003
7004 static inline bool
7005 store_binding_p (tree id)
7006 {
7007 if (!id || !IDENTIFIER_BINDING (id))
7008 return false;
7009
7010 if (IDENTIFIER_MARKED (id))
7011 return false;
7012
7013 return true;
7014 }
7015
7016 /* Add an appropriate binding to *OLD_BINDINGS which needs to already
7017 have enough space reserved. */
7018
7019 static void
7020 store_binding (tree id, vec<cxx_saved_binding, va_gc> **old_bindings)
7021 {
7022 cxx_saved_binding saved;
7023
7024 gcc_checking_assert (store_binding_p (id));
7025
7026 IDENTIFIER_MARKED (id) = 1;
7027
7028 saved.identifier = id;
7029 saved.binding = IDENTIFIER_BINDING (id);
7030 saved.real_type_value = REAL_IDENTIFIER_TYPE_VALUE (id);
7031 (*old_bindings)->quick_push (saved);
7032 IDENTIFIER_BINDING (id) = NULL;
7033 }
7034
7035 static void
7036 store_bindings (tree names, vec<cxx_saved_binding, va_gc> **old_bindings)
7037 {
7038 static vec<tree> bindings_need_stored;
7039 tree t, id;
7040 size_t i;
7041
7042 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
7043 for (t = names; t; t = TREE_CHAIN (t))
7044 {
7045 if (TREE_CODE (t) == TREE_LIST)
7046 id = TREE_PURPOSE (t);
7047 else
7048 id = DECL_NAME (t);
7049
7050 if (store_binding_p (id))
7051 bindings_need_stored.safe_push (id);
7052 }
7053 if (!bindings_need_stored.is_empty ())
7054 {
7055 vec_safe_reserve_exact (*old_bindings, bindings_need_stored.length ());
7056 for (i = 0; bindings_need_stored.iterate (i, &id); ++i)
7057 {
7058 /* We can apparently have duplicates in NAMES. */
7059 if (store_binding_p (id))
7060 store_binding (id, old_bindings);
7061 }
7062 bindings_need_stored.truncate (0);
7063 }
7064 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
7065 }
7066
7067 /* Like store_bindings, but NAMES is a vector of cp_class_binding
7068 objects, rather than a TREE_LIST. */
7069
7070 static void
7071 store_class_bindings (vec<cp_class_binding, va_gc> *names,
7072 vec<cxx_saved_binding, va_gc> **old_bindings)
7073 {
7074 static vec<tree> bindings_need_stored;
7075 size_t i;
7076 cp_class_binding *cb;
7077
7078 for (i = 0; vec_safe_iterate (names, i, &cb); ++i)
7079 if (store_binding_p (cb->identifier))
7080 bindings_need_stored.safe_push (cb->identifier);
7081 if (!bindings_need_stored.is_empty ())
7082 {
7083 tree id;
7084 vec_safe_reserve_exact (*old_bindings, bindings_need_stored.length ());
7085 for (i = 0; bindings_need_stored.iterate (i, &id); ++i)
7086 store_binding (id, old_bindings);
7087 bindings_need_stored.truncate (0);
7088 }
7089 }
7090
7091 /* A chain of saved_scope structures awaiting reuse. */
7092
7093 static GTY((deletable)) struct saved_scope *free_saved_scope;
7094
7095 static void
7096 do_push_to_top_level (void)
7097 {
7098 struct saved_scope *s;
7099 cp_binding_level *b;
7100 cxx_saved_binding *sb;
7101 size_t i;
7102 bool need_pop;
7103
7104 /* Reuse or create a new structure for this saved scope. */
7105 if (free_saved_scope != NULL)
7106 {
7107 s = free_saved_scope;
7108 free_saved_scope = s->prev;
7109
7110 vec<cxx_saved_binding, va_gc> *old_bindings = s->old_bindings;
7111 memset (s, 0, sizeof (*s));
7112 /* Also reuse the structure's old_bindings vector. */
7113 vec_safe_truncate (old_bindings, 0);
7114 s->old_bindings = old_bindings;
7115 }
7116 else
7117 s = ggc_cleared_alloc<saved_scope> ();
7118
7119 b = scope_chain ? current_binding_level : 0;
7120
7121 /* If we're in the middle of some function, save our state. */
7122 if (cfun)
7123 {
7124 need_pop = true;
7125 push_function_context ();
7126 }
7127 else
7128 need_pop = false;
7129
7130 if (scope_chain && previous_class_level)
7131 store_class_bindings (previous_class_level->class_shadowed,
7132 &s->old_bindings);
7133
7134 /* Have to include the global scope, because class-scope decls
7135 aren't listed anywhere useful. */
7136 for (; b; b = b->level_chain)
7137 {
7138 tree t;
7139
7140 /* Template IDs are inserted into the global level. If they were
7141 inserted into namespace level, finish_file wouldn't find them
7142 when doing pending instantiations. Therefore, don't stop at
7143 namespace level, but continue until :: . */
7144 if (global_scope_p (b))
7145 break;
7146
7147 store_bindings (b->names, &s->old_bindings);
7148 /* We also need to check class_shadowed to save class-level type
7149 bindings, since pushclass doesn't fill in b->names. */
7150 if (b->kind == sk_class)
7151 store_class_bindings (b->class_shadowed, &s->old_bindings);
7152
7153 /* Unwind type-value slots back to top level. */
7154 for (t = b->type_shadowed; t; t = TREE_CHAIN (t))
7155 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (t), TREE_VALUE (t));
7156 }
7157
7158 FOR_EACH_VEC_SAFE_ELT (s->old_bindings, i, sb)
7159 IDENTIFIER_MARKED (sb->identifier) = 0;
7160
7161 s->prev = scope_chain;
7162 s->bindings = b;
7163 s->need_pop_function_context = need_pop;
7164 s->function_decl = current_function_decl;
7165 s->unevaluated_operand = cp_unevaluated_operand;
7166 s->inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
7167 s->suppress_location_wrappers = suppress_location_wrappers;
7168 s->x_stmt_tree.stmts_are_full_exprs_p = true;
7169
7170 scope_chain = s;
7171 current_function_decl = NULL_TREE;
7172 current_lang_base = NULL;
7173 current_lang_name = lang_name_cplusplus;
7174 current_namespace = global_namespace;
7175 push_class_stack ();
7176 cp_unevaluated_operand = 0;
7177 c_inhibit_evaluation_warnings = 0;
7178 suppress_location_wrappers = 0;
7179 }
7180
7181 static void
7182 do_pop_from_top_level (void)
7183 {
7184 struct saved_scope *s = scope_chain;
7185 cxx_saved_binding *saved;
7186 size_t i;
7187
7188 /* Clear out class-level bindings cache. */
7189 if (previous_class_level)
7190 invalidate_class_lookup_cache ();
7191 pop_class_stack ();
7192
7193 release_tree_vector (current_lang_base);
7194
7195 scope_chain = s->prev;
7196 FOR_EACH_VEC_SAFE_ELT (s->old_bindings, i, saved)
7197 {
7198 tree id = saved->identifier;
7199
7200 IDENTIFIER_BINDING (id) = saved->binding;
7201 SET_IDENTIFIER_TYPE_VALUE (id, saved->real_type_value);
7202 }
7203
7204 /* If we were in the middle of compiling a function, restore our
7205 state. */
7206 if (s->need_pop_function_context)
7207 pop_function_context ();
7208 current_function_decl = s->function_decl;
7209 cp_unevaluated_operand = s->unevaluated_operand;
7210 c_inhibit_evaluation_warnings = s->inhibit_evaluation_warnings;
7211 suppress_location_wrappers = s->suppress_location_wrappers;
7212
7213 /* Make this saved_scope structure available for reuse by
7214 push_to_top_level. */
7215 s->prev = free_saved_scope;
7216 free_saved_scope = s;
7217 }
7218
7219 /* Push into the scope of the namespace NS, even if it is deeply
7220 nested within another namespace. */
7221
7222 static void
7223 do_push_nested_namespace (tree ns)
7224 {
7225 if (ns == global_namespace)
7226 do_push_to_top_level ();
7227 else
7228 {
7229 do_push_nested_namespace (CP_DECL_CONTEXT (ns));
7230 gcc_checking_assert
7231 (find_namespace_value (current_namespace, DECL_NAME (ns)) == ns);
7232 resume_scope (NAMESPACE_LEVEL (ns));
7233 current_namespace = ns;
7234 }
7235 }
7236
7237 /* Pop back from the scope of the namespace NS, which was previously
7238 entered with push_nested_namespace. */
7239
7240 static void
7241 do_pop_nested_namespace (tree ns)
7242 {
7243 while (ns != global_namespace)
7244 {
7245 ns = CP_DECL_CONTEXT (ns);
7246 current_namespace = ns;
7247 leave_scope ();
7248 }
7249
7250 do_pop_from_top_level ();
7251 }
7252
7253 /* Add TARGET to USINGS, if it does not already exist there.
7254 We used to build the complete graph of usings at this point, from
7255 the POV of the source namespaces. Now we build that as we perform
7256 the unqualified search. */
7257
7258 static void
7259 add_using_namespace (vec<tree, va_gc> *&usings, tree target)
7260 {
7261 if (usings)
7262 for (unsigned ix = usings->length (); ix--;)
7263 if ((*usings)[ix] == target)
7264 return;
7265
7266 vec_safe_push (usings, target);
7267 }
7268
7269 /* Tell the debug system of a using directive. */
7270
7271 static void
7272 emit_debug_info_using_namespace (tree from, tree target, bool implicit)
7273 {
7274 /* Emit debugging info. */
7275 tree context = from != global_namespace ? from : NULL_TREE;
7276 debug_hooks->imported_module_or_decl (target, NULL_TREE, context, false,
7277 implicit);
7278 }
7279
7280 /* Process a using directive. */
7281
7282 void
7283 finish_using_directive (tree target, tree attribs)
7284 {
7285 if (target == error_mark_node)
7286 return;
7287
7288 if (current_binding_level->kind != sk_namespace)
7289 add_stmt (build_stmt (input_location, USING_STMT, target));
7290 else
7291 emit_debug_info_using_namespace (current_binding_level->this_entity,
7292 ORIGINAL_NAMESPACE (target), false);
7293
7294 add_using_namespace (current_binding_level->using_directives,
7295 ORIGINAL_NAMESPACE (target));
7296
7297 if (attribs != error_mark_node)
7298 for (tree a = attribs; a; a = TREE_CHAIN (a))
7299 {
7300 tree name = get_attribute_name (a);
7301 if (current_binding_level->kind == sk_namespace
7302 && is_attribute_p ("strong", name))
7303 {
7304 if (warning (0, "%<strong%> using directive no longer supported")
7305 && CP_DECL_CONTEXT (target) == current_namespace)
7306 inform (DECL_SOURCE_LOCATION (target),
7307 "you can use an inline namespace instead");
7308 }
7309 else
7310 warning (OPT_Wattributes, "%qD attribute directive ignored", name);
7311 }
7312 }
7313
7314 /* Pushes X into the global namespace. */
7315
7316 tree
7317 pushdecl_top_level (tree x, bool is_friend)
7318 {
7319 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
7320 do_push_to_top_level ();
7321 x = pushdecl_namespace_level (x, is_friend);
7322 do_pop_from_top_level ();
7323 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
7324 return x;
7325 }
7326
7327 /* Pushes X into the global namespace and calls cp_finish_decl to
7328 register the variable, initializing it with INIT. */
7329
7330 tree
7331 pushdecl_top_level_and_finish (tree x, tree init)
7332 {
7333 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
7334 do_push_to_top_level ();
7335 x = pushdecl_namespace_level (x, false);
7336 cp_finish_decl (x, init, false, NULL_TREE, 0);
7337 do_pop_from_top_level ();
7338 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
7339 return x;
7340 }
7341
7342 /* Enter the namespaces from current_namerspace to NS. */
7343
7344 static int
7345 push_inline_namespaces (tree ns)
7346 {
7347 int count = 0;
7348 if (ns != current_namespace)
7349 {
7350 gcc_assert (ns != global_namespace);
7351 count += push_inline_namespaces (CP_DECL_CONTEXT (ns));
7352 resume_scope (NAMESPACE_LEVEL (ns));
7353 current_namespace = ns;
7354 count++;
7355 }
7356 return count;
7357 }
7358
7359 /* Push into the scope of the NAME namespace. If NAME is NULL_TREE,
7360 then we enter an anonymous namespace. If MAKE_INLINE is true, then
7361 we create an inline namespace (it is up to the caller to check upon
7362 redefinition). Return the number of namespaces entered. */
7363
7364 int
7365 push_namespace (tree name, bool make_inline)
7366 {
7367 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
7368 int count = 0;
7369
7370 /* We should not get here if the global_namespace is not yet constructed
7371 nor if NAME designates the global namespace: The global scope is
7372 constructed elsewhere. */
7373 gcc_checking_assert (global_namespace != NULL && name != global_identifier);
7374
7375 tree ns = NULL_TREE;
7376 {
7377 name_lookup lookup (name, 0);
7378 if (!lookup.search_qualified (current_namespace, /*usings=*/false))
7379 ;
7380 else if (TREE_CODE (lookup.value) == TREE_LIST)
7381 {
7382 /* An ambiguous lookup. If exactly one is a namespace, we
7383 want that. If more than one is a namespace, error, but
7384 pick one of them. */
7385 /* DR2061 can cause us to find multiple namespaces of the same
7386 name. We must treat that carefully and avoid thinking we
7387 need to push a new (possibly) duplicate namespace. Hey,
7388 if you want to use the same identifier within an inline
7389 nest, knock yourself out. */
7390 for (tree *chain = &lookup.value, next; (next = *chain);)
7391 {
7392 tree decl = TREE_VALUE (next);
7393 if (TREE_CODE (decl) == NAMESPACE_DECL)
7394 {
7395 if (!ns)
7396 ns = decl;
7397 else if (SCOPE_DEPTH (ns) >= SCOPE_DEPTH (decl))
7398 ns = decl;
7399
7400 /* Advance. */
7401 chain = &TREE_CHAIN (next);
7402 }
7403 else
7404 /* Stitch out. */
7405 *chain = TREE_CHAIN (next);
7406 }
7407
7408 if (TREE_CHAIN (lookup.value))
7409 {
7410 error ("%<namespace %E%> is ambiguous", name);
7411 print_candidates (lookup.value);
7412 }
7413 }
7414 else if (TREE_CODE (lookup.value) == NAMESPACE_DECL)
7415 ns = lookup.value;
7416
7417 if (ns)
7418 if (tree dna = DECL_NAMESPACE_ALIAS (ns))
7419 {
7420 /* A namespace alias is not allowed here, but if the alias
7421 is for a namespace also inside the current scope,
7422 accept it with a diagnostic. That's better than dying
7423 horribly. */
7424 if (is_nested_namespace (current_namespace, CP_DECL_CONTEXT (dna)))
7425 {
7426 error ("namespace alias %qD not allowed here, "
7427 "assuming %qD", ns, dna);
7428 ns = dna;
7429 }
7430 else
7431 ns = NULL_TREE;
7432 }
7433 }
7434
7435 bool new_ns = false;
7436 if (ns)
7437 /* DR2061. NS might be a member of an inline namespace. We
7438 need to push into those namespaces. */
7439 count += push_inline_namespaces (CP_DECL_CONTEXT (ns));
7440 else
7441 {
7442 ns = build_lang_decl (NAMESPACE_DECL, name, void_type_node);
7443 SCOPE_DEPTH (ns) = SCOPE_DEPTH (current_namespace) + 1;
7444 if (!SCOPE_DEPTH (ns))
7445 /* We only allow depth 255. */
7446 sorry ("cannot nest more than %d namespaces",
7447 SCOPE_DEPTH (current_namespace));
7448 DECL_CONTEXT (ns) = FROB_CONTEXT (current_namespace);
7449 new_ns = true;
7450
7451 if (pushdecl (ns) == error_mark_node)
7452 ns = NULL_TREE;
7453 else
7454 {
7455 if (!name)
7456 {
7457 SET_DECL_ASSEMBLER_NAME (ns, anon_identifier);
7458
7459 if (!make_inline)
7460 add_using_namespace (current_binding_level->using_directives,
7461 ns);
7462 }
7463 else if (TREE_PUBLIC (current_namespace))
7464 TREE_PUBLIC (ns) = 1;
7465
7466 if (make_inline)
7467 {
7468 DECL_NAMESPACE_INLINE_P (ns) = true;
7469 vec_safe_push (DECL_NAMESPACE_INLINEES (current_namespace), ns);
7470 }
7471
7472 if (!name || make_inline)
7473 emit_debug_info_using_namespace (current_namespace, ns, true);
7474 }
7475 }
7476
7477 if (ns)
7478 {
7479 if (make_inline && !DECL_NAMESPACE_INLINE_P (ns))
7480 {
7481 error ("inline namespace must be specified at initial definition");
7482 inform (DECL_SOURCE_LOCATION (ns), "%qD defined here", ns);
7483 }
7484 if (new_ns)
7485 begin_scope (sk_namespace, ns);
7486 else
7487 resume_scope (NAMESPACE_LEVEL (ns));
7488 current_namespace = ns;
7489 count++;
7490 }
7491
7492 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
7493 return count;
7494 }
7495
7496 /* Pop from the scope of the current namespace. */
7497
7498 void
7499 pop_namespace (void)
7500 {
7501 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
7502
7503 gcc_assert (current_namespace != global_namespace);
7504 current_namespace = CP_DECL_CONTEXT (current_namespace);
7505 /* The binding level is not popped, as it might be re-opened later. */
7506 leave_scope ();
7507
7508 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
7509 }
7510
7511 /* External entry points for do_{push_to/pop_from}_top_level. */
7512
7513 void
7514 push_to_top_level (void)
7515 {
7516 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
7517 do_push_to_top_level ();
7518 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
7519 }
7520
7521 void
7522 pop_from_top_level (void)
7523 {
7524 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
7525 do_pop_from_top_level ();
7526 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
7527 }
7528
7529 /* External entry points for do_{push,pop}_nested_namespace. */
7530
7531 void
7532 push_nested_namespace (tree ns)
7533 {
7534 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
7535 do_push_nested_namespace (ns);
7536 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
7537 }
7538
7539 void
7540 pop_nested_namespace (tree ns)
7541 {
7542 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
7543 gcc_assert (current_namespace == ns);
7544 do_pop_nested_namespace (ns);
7545 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
7546 }
7547
7548 /* Pop off extraneous binding levels left over due to syntax errors.
7549 We don't pop past namespaces, as they might be valid. */
7550
7551 void
7552 pop_everything (void)
7553 {
7554 if (ENABLE_SCOPE_CHECKING)
7555 verbatim ("XXX entering %<pop_everything ()%>");
7556 while (!namespace_bindings_p ())
7557 {
7558 if (current_binding_level->kind == sk_class)
7559 pop_nested_class ();
7560 else
7561 poplevel (0, 0, 0);
7562 }
7563 if (ENABLE_SCOPE_CHECKING)
7564 verbatim ("XXX leaving %<pop_everything ()%>");
7565 }
7566
7567 /* Emit debugging information for using declarations and directives.
7568 If input tree is overloaded fn then emit debug info for all
7569 candidates. */
7570
7571 void
7572 cp_emit_debug_info_for_using (tree t, tree context)
7573 {
7574 /* Don't try to emit any debug information if we have errors. */
7575 if (seen_error ())
7576 return;
7577
7578 /* Do not supply context to imported_module_or_decl, if
7579 it is a global namespace. */
7580 if (context == global_namespace)
7581 context = NULL_TREE;
7582
7583 t = MAYBE_BASELINK_FUNCTIONS (t);
7584
7585 for (lkp_iterator iter (t); iter; ++iter)
7586 {
7587 tree fn = *iter;
7588
7589 if (TREE_CODE (fn) == TEMPLATE_DECL)
7590 /* FIXME: Handle TEMPLATE_DECLs. */
7591 continue;
7592
7593 /* Ignore this FUNCTION_DECL if it refers to a builtin declaration
7594 of a builtin function. */
7595 if (TREE_CODE (fn) == FUNCTION_DECL
7596 && DECL_EXTERNAL (fn)
7597 && fndecl_built_in_p (fn))
7598 continue;
7599
7600 if (building_stmt_list_p ())
7601 add_stmt (build_stmt (input_location, USING_STMT, fn));
7602 else
7603 debug_hooks->imported_module_or_decl (fn, NULL_TREE, context,
7604 false, false);
7605 }
7606 }
7607
7608 /* Return the result of unqualified lookup for the overloaded operator
7609 designated by CODE, if we are in a template and the binding we find is
7610 not. */
7611
7612 static tree
7613 op_unqualified_lookup (tree fnname)
7614 {
7615 if (cxx_binding *binding = IDENTIFIER_BINDING (fnname))
7616 {
7617 cp_binding_level *l = binding->scope;
7618 while (l && !l->this_entity)
7619 l = l->level_chain;
7620 if (l && uses_template_parms (l->this_entity))
7621 /* Don't preserve decls from an uninstantiated template,
7622 wait until that template is instantiated. */
7623 return NULL_TREE;
7624 }
7625 tree fns = lookup_name (fnname);
7626 if (fns && fns == get_global_binding (fnname))
7627 /* The instantiation can find these. */
7628 return NULL_TREE;
7629 return fns;
7630 }
7631
7632 /* E is an expression representing an operation with dependent type, so we
7633 don't know yet whether it will use the built-in meaning of the operator or a
7634 function. Remember declarations of that operator in scope. */
7635
7636 const char *const op_bind_attrname = "operator bindings";
7637
7638 void
7639 maybe_save_operator_binding (tree e)
7640 {
7641 /* This is only useful in a generic lambda. */
7642 if (!processing_template_decl)
7643 return;
7644 tree cfn = current_function_decl;
7645 if (!cfn)
7646 return;
7647
7648 /* Let's only do this for generic lambdas for now, we could do it for all
7649 function templates if we wanted to. */
7650 if (!current_lambda_expr())
7651 return;
7652
7653 tree fnname = ovl_op_identifier (false, TREE_CODE (e));
7654 if (!fnname)
7655 return;
7656
7657 tree attributes = DECL_ATTRIBUTES (cfn);
7658 tree attr = lookup_attribute (op_bind_attrname, attributes);
7659 tree bindings = NULL_TREE;
7660 tree fns = NULL_TREE;
7661 if (attr)
7662 {
7663 bindings = TREE_VALUE (attr);
7664 if (tree elt = purpose_member (fnname, bindings))
7665 fns = TREE_VALUE (elt);
7666 }
7667
7668 if (!fns && (fns = op_unqualified_lookup (fnname)))
7669 {
7670 tree d = is_overloaded_fn (fns) ? get_first_fn (fns) : fns;
7671 if (DECL_P (d) && DECL_CLASS_SCOPE_P (d))
7672 /* We don't need to remember class-scope functions or declarations,
7673 normal unqualified lookup will find them again. */
7674 return;
7675
7676 bindings = tree_cons (fnname, fns, bindings);
7677 if (attr)
7678 TREE_VALUE (attr) = bindings;
7679 else
7680 DECL_ATTRIBUTES (cfn)
7681 = tree_cons (get_identifier (op_bind_attrname),
7682 bindings,
7683 attributes);
7684 }
7685 }
7686
7687 /* Called from cp_free_lang_data so we don't put this into LTO. */
7688
7689 void
7690 discard_operator_bindings (tree decl)
7691 {
7692 DECL_ATTRIBUTES (decl) = remove_attribute (op_bind_attrname,
7693 DECL_ATTRIBUTES (decl));
7694 }
7695
7696 /* Subroutine of start_preparsed_function: push the bindings we saved away in
7697 maybe_save_op_lookup into the function parameter binding level. */
7698
7699 void
7700 push_operator_bindings ()
7701 {
7702 tree decl1 = current_function_decl;
7703 if (tree attr = lookup_attribute (op_bind_attrname,
7704 DECL_ATTRIBUTES (decl1)))
7705 for (tree binds = TREE_VALUE (attr); binds; binds = TREE_CHAIN (binds))
7706 {
7707 tree name = TREE_PURPOSE (binds);
7708 tree val = TREE_VALUE (binds);
7709 push_local_binding (name, val, /*using*/true);
7710 }
7711 }
7712
7713 #include "gt-cp-name-lookup.h"