OpenCores
URL https://opencores.org/ocsvn/openrisc_2011-10-31/openrisc_2011-10-31/trunk

Subversion Repositories openrisc_2011-10-31

[/] [openrisc/] [trunk/] [gnu-src/] [gcc-4.5.1/] [gcc/] [cp/] [name-lookup.c] - Blame information for rev 283

Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.