OpenCores
URL https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [gcc-4.5.1/] [gcc/] [cp/] [decl.c] - Blame information for rev 378

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 283 jeremybenn
/* Process declarations and variables for C++ compiler.
2
   Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3
   2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
4
   Free Software Foundation, Inc.
5
   Contributed by Michael Tiemann (tiemann@cygnus.com)
6
 
7
This file is part of GCC.
8
 
9
GCC is free software; you can redistribute it and/or modify
10
it under the terms of the GNU General Public License as published by
11
the Free Software Foundation; either version 3, or (at your option)
12
any later version.
13
 
14
GCC is distributed in the hope that it will be useful,
15
but WITHOUT ANY WARRANTY; without even the implied warranty of
16
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
GNU General Public License for more details.
18
 
19
You should have received a copy of the GNU General Public License
20
along with GCC; see the file COPYING3.  If not see
21
<http://www.gnu.org/licenses/>.  */
22
 
23
 
24
/* Process declarations and symbol lookup for C++ front end.
25
   Also constructs types; the standard scalar types at initialization,
26
   and structure, union, array and enum types when they are declared.  */
27
 
28
/* ??? not all decl nodes are given the most useful possible
29
   line numbers.  For example, the CONST_DECLs for enum values.  */
30
 
31
#include "config.h"
32
#include "system.h"
33
#include "coretypes.h"
34
#include "tm.h"
35
#include "tree.h"
36
#include "rtl.h"
37
#include "expr.h"
38
#include "flags.h"
39
#include "cp-tree.h"
40
#include "tree-inline.h"
41
#include "decl.h"
42
#include "intl.h"
43
#include "output.h"
44
#include "except.h"
45
#include "toplev.h"
46
#include "hashtab.h"
47
#include "tm_p.h"
48
#include "target.h"
49
#include "c-common.h"
50
#include "c-pragma.h"
51
#include "diagnostic.h"
52
#include "intl.h"
53
#include "debug.h"
54
#include "timevar.h"
55
#include "tree-flow.h"
56
#include "pointer-set.h"
57
#include "plugin.h"
58
 
59
static tree grokparms (tree parmlist, tree *);
60
static const char *redeclaration_error_message (tree, tree);
61
 
62
static int decl_jump_unsafe (tree);
63
static void require_complete_types_for_parms (tree);
64
static int ambi_op_p (enum tree_code);
65
static int unary_op_p (enum tree_code);
66
static void push_local_name (tree);
67
static tree grok_reference_init (tree, tree, tree, tree *);
68
static tree grokvardecl (tree, tree, const cp_decl_specifier_seq *,
69
                         int, int, tree);
70
static void record_unknown_type (tree, const char *);
71
static tree builtin_function_1 (tree, tree, bool);
72
static tree build_library_fn_1 (tree, enum tree_code, tree);
73
static int member_function_or_else (tree, tree, enum overload_flags);
74
static void bad_specifiers (tree, const char *, int, int, int, int,
75
                            int);
76
static void check_for_uninitialized_const_var (tree);
77
static hashval_t typename_hash (const void *);
78
static int typename_compare (const void *, const void *);
79
static tree local_variable_p_walkfn (tree *, int *, void *);
80
static tree record_builtin_java_type (const char *, int);
81
static const char *tag_name (enum tag_types);
82
static tree lookup_and_check_tag (enum tag_types, tree, tag_scope, bool);
83
static int walk_namespaces_r (tree, walk_namespaces_fn, void *);
84
static void maybe_deduce_size_from_array_init (tree, tree);
85
static void layout_var_decl (tree);
86
static tree check_initializer (tree, tree, int, tree *);
87
static void make_rtl_for_nonlocal_decl (tree, tree, const char *);
88
static void save_function_data (tree);
89
static void check_function_type (tree, tree);
90
static void finish_constructor_body (void);
91
static void begin_destructor_body (void);
92
static void finish_destructor_body (void);
93
static tree create_array_type_for_decl (tree, tree, tree);
94
static tree get_atexit_node (void);
95
static tree get_dso_handle_node (void);
96
static tree start_cleanup_fn (void);
97
static void end_cleanup_fn (void);
98
static tree cp_make_fname_decl (location_t, tree, int);
99
static void initialize_predefined_identifiers (void);
100
static tree check_special_function_return_type
101
        (special_function_kind, tree, tree);
102
static tree push_cp_library_fn (enum tree_code, tree);
103
static tree build_cp_library_fn (tree, enum tree_code, tree);
104
static void store_parm_decls (tree);
105
static void initialize_local_var (tree, tree);
106
static void expand_static_init (tree, tree);
107
 
108
/* The following symbols are subsumed in the cp_global_trees array, and
109
   listed here individually for documentation purposes.
110
 
111
   C++ extensions
112
        tree wchar_decl_node;
113
 
114
        tree vtable_entry_type;
115
        tree delta_type_node;
116
        tree __t_desc_type_node;
117
 
118
        tree class_type_node;
119
        tree unknown_type_node;
120
 
121
   Array type `vtable_entry_type[]'
122
 
123
        tree vtbl_type_node;
124
        tree vtbl_ptr_type_node;
125
 
126
   Namespaces,
127
 
128
        tree std_node;
129
        tree abi_node;
130
 
131
   A FUNCTION_DECL which can call `abort'.  Not necessarily the
132
   one that the user will declare, but sufficient to be called
133
   by routines that want to abort the program.
134
 
135
        tree abort_fndecl;
136
 
137
   The FUNCTION_DECL for the default `::operator delete'.
138
 
139
        tree global_delete_fndecl;
140
 
141
   Used by RTTI
142
        tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
143
        tree tinfo_var_id;  */
144
 
145
tree cp_global_trees[CPTI_MAX];
146
 
147
/* Indicates that there is a type value in some namespace, although
148
   that is not necessarily in scope at the moment.  */
149
 
150
tree global_type_node;
151
 
152
/* The node that holds the "name" of the global scope.  */
153
tree global_scope_name;
154
 
155
#define local_names cp_function_chain->x_local_names
156
 
157
/* A list of objects which have constructors or destructors
158
   which reside in the global scope.  The decl is stored in
159
   the TREE_VALUE slot and the initializer is stored
160
   in the TREE_PURPOSE slot.  */
161
tree static_aggregates;
162
 
163
/* -- end of C++ */
164
 
165
/* A node for the integer constants 2, and 3.  */
166
 
167
tree integer_two_node, integer_three_node;
168
 
169
/* Used only for jumps to as-yet undefined labels, since jumps to
170
   defined labels can have their validity checked immediately.  */
171
 
172
struct GTY(()) named_label_use_entry {
173
  struct named_label_use_entry *next;
174
  /* The binding level to which this entry is *currently* attached.
175
     This is initially the binding level in which the goto appeared,
176
     but is modified as scopes are closed.  */
177
  struct cp_binding_level *binding_level;
178
  /* The head of the names list that was current when the goto appeared,
179
     or the inner scope popped.  These are the decls that will *not* be
180
     skipped when jumping to the label.  */
181
  tree names_in_scope;
182
  /* The location of the goto, for error reporting.  */
183
  location_t o_goto_locus;
184
  /* True if an OpenMP structured block scope has been closed since
185
     the goto appeared.  This means that the branch from the label will
186
     illegally exit an OpenMP scope.  */
187
  bool in_omp_scope;
188
};
189
 
190
/* A list of all LABEL_DECLs in the function that have names.  Here so
191
   we can clear out their names' definitions at the end of the
192
   function, and so we can check the validity of jumps to these labels.  */
193
 
194
struct GTY(()) named_label_entry {
195
  /* The decl itself.  */
196
  tree label_decl;
197
 
198
  /* The binding level to which the label is *currently* attached.
199
     This is initially set to the binding level in which the label
200
     is defined, but is modified as scopes are closed.  */
201
  struct cp_binding_level *binding_level;
202
  /* The head of the names list that was current when the label was
203
     defined, or the inner scope popped.  These are the decls that will
204
     be skipped when jumping to the label.  */
205
  tree names_in_scope;
206
  /* A tree list of all decls from all binding levels that would be
207
     crossed by a backward branch to the label.  */
208
  tree bad_decls;
209
 
210
  /* A list of uses of the label, before the label is defined.  */
211
  struct named_label_use_entry *uses;
212
 
213
  /* The following bits are set after the label is defined, and are
214
     updated as scopes are popped.  They indicate that a backward jump
215
     to the label will illegally enter a scope of the given flavor.  */
216
  bool in_try_scope;
217
  bool in_catch_scope;
218
  bool in_omp_scope;
219
};
220
 
221
#define named_labels cp_function_chain->x_named_labels
222
 
223
/* The number of function bodies which we are currently processing.
224
   (Zero if we are at namespace scope, one inside the body of a
225
   function, two inside the body of a function in a local class, etc.)  */
226
int function_depth;
227
 
228
/* To avoid unwanted recursion, finish_function defers all mark_used calls
229
   encountered during its execution until it finishes.  */
230
bool defer_mark_used_calls;
231
VEC(tree, gc) *deferred_mark_used_calls;
232
 
233
/* States indicating how grokdeclarator() should handle declspecs marked
234
   with __attribute__((deprecated)).  An object declared as
235
   __attribute__((deprecated)) suppresses warnings of uses of other
236
   deprecated items.  */
237
enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
238
 
239
 
240
/* A TREE_LIST of VAR_DECLs.  The TREE_PURPOSE is a RECORD_TYPE or
241
   UNION_TYPE; the TREE_VALUE is a VAR_DECL with that type.  At the
242
   time the VAR_DECL was declared, the type was incomplete.  */
243
 
244
static GTY(()) tree incomplete_vars;
245
 
246
/* Returns the kind of template specialization we are currently
247
   processing, given that it's declaration contained N_CLASS_SCOPES
248
   explicit scope qualifications.  */
249
 
250
tmpl_spec_kind
251
current_tmpl_spec_kind (int n_class_scopes)
252
{
253
  int n_template_parm_scopes = 0;
254
  int seen_specialization_p = 0;
255
  int innermost_specialization_p = 0;
256
  struct cp_binding_level *b;
257
 
258
  /* Scan through the template parameter scopes.  */
259
  for (b = current_binding_level;
260
       b->kind == sk_template_parms;
261
       b = b->level_chain)
262
    {
263
      /* If we see a specialization scope inside a parameter scope,
264
         then something is wrong.  That corresponds to a declaration
265
         like:
266
 
267
            template <class T> template <> ...
268
 
269
         which is always invalid since [temp.expl.spec] forbids the
270
         specialization of a class member template if the enclosing
271
         class templates are not explicitly specialized as well.  */
272
      if (b->explicit_spec_p)
273
        {
274
          if (n_template_parm_scopes == 0)
275
            innermost_specialization_p = 1;
276
          else
277
            seen_specialization_p = 1;
278
        }
279
      else if (seen_specialization_p == 1)
280
        return tsk_invalid_member_spec;
281
 
282
      ++n_template_parm_scopes;
283
    }
284
 
285
  /* Handle explicit instantiations.  */
286
  if (processing_explicit_instantiation)
287
    {
288
      if (n_template_parm_scopes != 0)
289
        /* We've seen a template parameter list during an explicit
290
           instantiation.  For example:
291
 
292
             template <class T> template void f(int);
293
 
294
           This is erroneous.  */
295
        return tsk_invalid_expl_inst;
296
      else
297
        return tsk_expl_inst;
298
    }
299
 
300
  if (n_template_parm_scopes < n_class_scopes)
301
    /* We've not seen enough template headers to match all the
302
       specialized classes present.  For example:
303
 
304
         template <class T> void R<T>::S<T>::f(int);
305
 
306
       This is invalid; there needs to be one set of template
307
       parameters for each class.  */
308
    return tsk_insufficient_parms;
309
  else if (n_template_parm_scopes == n_class_scopes)
310
    /* We're processing a non-template declaration (even though it may
311
       be a member of a template class.)  For example:
312
 
313
         template <class T> void S<T>::f(int);
314
 
315
       The `class T' matches the `S<T>', leaving no template headers
316
       corresponding to the `f'.  */
317
    return tsk_none;
318
  else if (n_template_parm_scopes > n_class_scopes + 1)
319
    /* We've got too many template headers.  For example:
320
 
321
         template <> template <class T> void f (T);
322
 
323
       There need to be more enclosing classes.  */
324
    return tsk_excessive_parms;
325
  else
326
    /* This must be a template.  It's of the form:
327
 
328
         template <class T> template <class U> void S<T>::f(U);
329
 
330
       This is a specialization if the innermost level was a
331
       specialization; otherwise it's just a definition of the
332
       template.  */
333
    return innermost_specialization_p ? tsk_expl_spec : tsk_template;
334
}
335
 
336
/* Exit the current scope.  */
337
 
338
void
339
finish_scope (void)
340
{
341
  poplevel (0, 0, 0);
342
}
343
 
344
/* When a label goes out of scope, check to see if that label was used
345
   in a valid manner, and issue any appropriate warnings or errors.  */
346
 
347
static void
348
pop_label (tree label, tree old_value)
349
{
350
  if (!processing_template_decl)
351
    {
352
      if (DECL_INITIAL (label) == NULL_TREE)
353
        {
354
          location_t location;
355
 
356
          error ("label %q+D used but not defined", label);
357
          location = input_location; /* FIXME want (input_filename, (line)0) */
358
          /* Avoid crashing later.  */
359
          define_label (location, DECL_NAME (label));
360
        }
361
      else
362
        warn_for_unused_label (label);
363
    }
364
 
365
  SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), old_value);
366
}
367
 
368
/* At the end of a function, all labels declared within the function
369
   go out of scope.  BLOCK is the top-level block for the
370
   function.  */
371
 
372
static int
373
pop_labels_1 (void **slot, void *data)
374
{
375
  struct named_label_entry *ent = (struct named_label_entry *) *slot;
376
  tree block = (tree) data;
377
 
378
  pop_label (ent->label_decl, NULL_TREE);
379
 
380
  /* Put the labels into the "variables" of the top-level block,
381
     so debugger can see them.  */
382
  TREE_CHAIN (ent->label_decl) = BLOCK_VARS (block);
383
  BLOCK_VARS (block) = ent->label_decl;
384
 
385
  htab_clear_slot (named_labels, slot);
386
 
387
  return 1;
388
}
389
 
390
static void
391
pop_labels (tree block)
392
{
393
  if (named_labels)
394
    {
395
      htab_traverse (named_labels, pop_labels_1, block);
396
      named_labels = NULL;
397
    }
398
}
399
 
400
/* At the end of a block with local labels, restore the outer definition.  */
401
 
402
static void
403
pop_local_label (tree label, tree old_value)
404
{
405
  struct named_label_entry dummy;
406
  void **slot;
407
 
408
  pop_label (label, old_value);
409
 
410
  dummy.label_decl = label;
411
  slot = htab_find_slot (named_labels, &dummy, NO_INSERT);
412
  htab_clear_slot (named_labels, slot);
413
}
414
 
415
/* The following two routines are used to interface to Objective-C++.
416
   The binding level is purposely treated as an opaque type.  */
417
 
418
void *
419
objc_get_current_scope (void)
420
{
421
  return current_binding_level;
422
}
423
 
424
/* The following routine is used by the NeXT-style SJLJ exceptions;
425
   variables get marked 'volatile' so as to not be clobbered by
426
   _setjmp()/_longjmp() calls.  All variables in the current scope,
427
   as well as parent scopes up to (but not including) ENCLOSING_BLK
428
   shall be thusly marked.  */
429
 
430
void
431
objc_mark_locals_volatile (void *enclosing_blk)
432
{
433
  struct cp_binding_level *scope;
434
 
435
  for (scope = current_binding_level;
436
       scope && scope != enclosing_blk;
437
       scope = scope->level_chain)
438
    {
439
      tree decl;
440
 
441
      for (decl = scope->names; decl; decl = TREE_CHAIN (decl))
442
        objc_volatilize_decl (decl);
443
 
444
      /* Do not climb up past the current function.  */
445
      if (scope->kind == sk_function_parms)
446
        break;
447
    }
448
}
449
 
450
/* Update data for defined and undefined labels when leaving a scope.  */
451
 
452
static int
453
poplevel_named_label_1 (void **slot, void *data)
454
{
455
  struct named_label_entry *ent = (struct named_label_entry *) *slot;
456
  struct cp_binding_level *bl = (struct cp_binding_level *) data;
457
  struct cp_binding_level *obl = bl->level_chain;
458
 
459
  if (ent->binding_level == bl)
460
    {
461
      tree decl;
462
 
463
      for (decl = ent->names_in_scope; decl; decl = TREE_CHAIN (decl))
464
        if (decl_jump_unsafe (decl))
465
          ent->bad_decls = tree_cons (NULL, decl, ent->bad_decls);
466
 
467
      ent->binding_level = obl;
468
      ent->names_in_scope = obl->names;
469
      switch (bl->kind)
470
        {
471
        case sk_try:
472
          ent->in_try_scope = true;
473
          break;
474
        case sk_catch:
475
          ent->in_catch_scope = true;
476
          break;
477
        case sk_omp:
478
          ent->in_omp_scope = true;
479
          break;
480
        default:
481
          break;
482
        }
483
    }
484
  else if (ent->uses)
485
    {
486
      struct named_label_use_entry *use;
487
 
488
      for (use = ent->uses; use ; use = use->next)
489
        if (use->binding_level == bl)
490
          {
491
            use->binding_level = obl;
492
            use->names_in_scope = obl->names;
493
            if (bl->kind == sk_omp)
494
              use->in_omp_scope = true;
495
          }
496
    }
497
 
498
  return 1;
499
}
500
 
501
/* Exit a binding level.
502
   Pop the level off, and restore the state of the identifier-decl mappings
503
   that were in effect when this level was entered.
504
 
505
   If KEEP == 1, this level had explicit declarations, so
506
   and create a "block" (a BLOCK node) for the level
507
   to record its declarations and subblocks for symbol table output.
508
 
509
   If FUNCTIONBODY is nonzero, this level is the body of a function,
510
   so create a block as if KEEP were set and also clear out all
511
   label names.
512
 
513
   If REVERSE is nonzero, reverse the order of decls before putting
514
   them into the BLOCK.  */
515
 
516
tree
517
poplevel (int keep, int reverse, int functionbody)
518
{
519
  tree link;
520
  /* The chain of decls was accumulated in reverse order.
521
     Put it into forward order, just for cleanliness.  */
522
  tree decls;
523
  tree subblocks;
524
  tree block;
525
  tree decl;
526
  int leaving_for_scope;
527
  scope_kind kind;
528
 
529
  timevar_push (TV_NAME_LOOKUP);
530
 restart:
531
 
532
  block = NULL_TREE;
533
 
534
  gcc_assert (current_binding_level->kind != sk_class);
535
 
536
  if (current_binding_level->kind == sk_cleanup)
537
    functionbody = 0;
538
  subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
539
 
540
  gcc_assert (!VEC_length(cp_class_binding,
541
                          current_binding_level->class_shadowed));
542
 
543
  /* We used to use KEEP == 2 to indicate that the new block should go
544
     at the beginning of the list of blocks at this binding level,
545
     rather than the end.  This hack is no longer used.  */
546
  gcc_assert (keep == 0 || keep == 1);
547
 
548
  if (current_binding_level->keep)
549
    keep = 1;
550
 
551
  /* Any uses of undefined labels, and any defined labels, now operate
552
     under constraints of next binding contour.  */
553
  if (cfun && !functionbody && named_labels)
554
    htab_traverse (named_labels, poplevel_named_label_1,
555
                   current_binding_level);
556
 
557
  /* Get the decls in the order they were written.
558
     Usually current_binding_level->names is in reverse order.
559
     But parameter decls were previously put in forward order.  */
560
 
561
  if (reverse)
562
    current_binding_level->names
563
      = decls = nreverse (current_binding_level->names);
564
  else
565
    decls = current_binding_level->names;
566
 
567
  /* If there were any declarations or structure tags in that level,
568
     or if this level is a function body,
569
     create a BLOCK to record them for the life of this function.  */
570
  block = NULL_TREE;
571
  if (keep == 1 || functionbody)
572
    block = make_node (BLOCK);
573
  if (block != NULL_TREE)
574
    {
575
      BLOCK_VARS (block) = decls;
576
      BLOCK_SUBBLOCKS (block) = subblocks;
577
    }
578
 
579
  /* In each subblock, record that this is its superior.  */
580
  if (keep >= 0)
581
    for (link = subblocks; link; link = BLOCK_CHAIN (link))
582
      BLOCK_SUPERCONTEXT (link) = block;
583
 
584
  /* We still support the old for-scope rules, whereby the variables
585
     in a for-init statement were in scope after the for-statement
586
     ended.  We only use the new rules if flag_new_for_scope is
587
     nonzero.  */
588
  leaving_for_scope
589
    = current_binding_level->kind == sk_for && flag_new_for_scope == 1;
590
 
591
  /* Before we remove the declarations first check for unused variables.  */
592
  if (warn_unused_variable
593
      && !processing_template_decl)
594
    for (decl = getdecls (); decl; decl = TREE_CHAIN (decl))
595
      if (TREE_CODE (decl) == VAR_DECL
596
          && ! TREE_USED (decl)
597
          && ! DECL_IN_SYSTEM_HEADER (decl)
598
          && DECL_NAME (decl) && ! DECL_ARTIFICIAL (decl))
599
        warning (OPT_Wunused_variable, "unused variable %q+D", decl);
600
 
601
  /* Remove declarations for all the DECLs in this level.  */
602
  for (link = decls; link; link = TREE_CHAIN (link))
603
    {
604
      if (leaving_for_scope && TREE_CODE (link) == VAR_DECL
605
          && DECL_NAME (link))
606
        {
607
          tree name = DECL_NAME (link);
608
          cxx_binding *ob;
609
          tree ns_binding;
610
 
611
          ob = outer_binding (name,
612
                              IDENTIFIER_BINDING (name),
613
                              /*class_p=*/true);
614
          if (!ob)
615
            ns_binding = IDENTIFIER_NAMESPACE_VALUE (name);
616
          else
617
            ns_binding = NULL_TREE;
618
 
619
          if (ob && ob->scope == current_binding_level->level_chain)
620
            /* We have something like:
621
 
622
                 int i;
623
                 for (int i; ;);
624
 
625
               and we are leaving the `for' scope.  There's no reason to
626
               keep the binding of the inner `i' in this case.  */
627
            pop_binding (name, link);
628
          else if ((ob && (TREE_CODE (ob->value) == TYPE_DECL))
629
                   || (ns_binding && TREE_CODE (ns_binding) == TYPE_DECL))
630
            /* Here, we have something like:
631
 
632
                 typedef int I;
633
 
634
                 void f () {
635
                   for (int I; ;);
636
                 }
637
 
638
               We must pop the for-scope binding so we know what's a
639
               type and what isn't.  */
640
            pop_binding (name, link);
641
          else
642
            {
643
              /* Mark this VAR_DECL as dead so that we can tell we left it
644
                 there only for backward compatibility.  */
645
              DECL_DEAD_FOR_LOCAL (link) = 1;
646
 
647
              /* Keep track of what should have happened when we
648
                 popped the binding.  */
649
              if (ob && ob->value)
650
                {
651
                  SET_DECL_SHADOWED_FOR_VAR (link, ob->value);
652
                  DECL_HAS_SHADOWED_FOR_VAR_P (link) = 1;
653
                }
654
 
655
              /* Add it to the list of dead variables in the next
656
                 outermost binding to that we can remove these when we
657
                 leave that binding.  */
658
              current_binding_level->level_chain->dead_vars_from_for
659
                = tree_cons (NULL_TREE, link,
660
                             current_binding_level->level_chain->
661
                             dead_vars_from_for);
662
 
663
              /* Although we don't pop the cxx_binding, we do clear
664
                 its SCOPE since the scope is going away now.  */
665
              IDENTIFIER_BINDING (name)->scope
666
                = current_binding_level->level_chain;
667
            }
668
        }
669
      else
670
        {
671
          tree name;
672
 
673
          /* Remove the binding.  */
674
          decl = link;
675
 
676
          if (TREE_CODE (decl) == TREE_LIST)
677
            decl = TREE_VALUE (decl);
678
          name = decl;
679
 
680
          if (TREE_CODE (name) == OVERLOAD)
681
            name = OVL_FUNCTION (name);
682
 
683
          gcc_assert (DECL_P (name));
684
          pop_binding (DECL_NAME (name), decl);
685
        }
686
    }
687
 
688
  /* Remove declarations for any `for' variables from inner scopes
689
     that we kept around.  */
690
  for (link = current_binding_level->dead_vars_from_for;
691
       link; link = TREE_CHAIN (link))
692
    pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
693
 
694
  /* Restore the IDENTIFIER_TYPE_VALUEs.  */
695
  for (link = current_binding_level->type_shadowed;
696
       link; link = TREE_CHAIN (link))
697
    SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
698
 
699
  /* Restore the IDENTIFIER_LABEL_VALUEs for local labels.  */
700
  for (link = current_binding_level->shadowed_labels;
701
       link;
702
       link = TREE_CHAIN (link))
703
    pop_local_label (TREE_VALUE (link), TREE_PURPOSE (link));
704
 
705
  /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
706
     list if a `using' declaration put them there.  The debugging
707
     back ends won't understand OVERLOAD, so we remove them here.
708
     Because the BLOCK_VARS are (temporarily) shared with
709
     CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
710
     popped all the bindings.  */
711
  if (block)
712
    {
713
      tree* d;
714
 
715
      for (d = &BLOCK_VARS (block); *d; )
716
        {
717
          if (TREE_CODE (*d) == TREE_LIST)
718
            *d = TREE_CHAIN (*d);
719
          else
720
            d = &TREE_CHAIN (*d);
721
        }
722
    }
723
 
724
  /* If the level being exited is the top level of a function,
725
     check over all the labels.  */
726
  if (functionbody)
727
    {
728
      /* Since this is the top level block of a function, the vars are
729
         the function's parameters.  Don't leave them in the BLOCK
730
         because they are found in the FUNCTION_DECL instead.  */
731
      BLOCK_VARS (block) = 0;
732
      pop_labels (block);
733
    }
734
 
735
  kind = current_binding_level->kind;
736
  if (kind == sk_cleanup)
737
    {
738
      tree stmt;
739
 
740
      /* If this is a temporary binding created for a cleanup, then we'll
741
         have pushed a statement list level.  Pop that, create a new
742
         BIND_EXPR for the block, and insert it into the stream.  */
743
      stmt = pop_stmt_list (current_binding_level->statement_list);
744
      stmt = c_build_bind_expr (input_location, block, stmt);
745
      add_stmt (stmt);
746
    }
747
 
748
  leave_scope ();
749
  if (functionbody)
750
    {
751
      /* The current function is being defined, so its DECL_INITIAL
752
         should be error_mark_node.  */
753
      gcc_assert (DECL_INITIAL (current_function_decl) == error_mark_node);
754
      DECL_INITIAL (current_function_decl) = block;
755
    }
756
  else if (block)
757
    current_binding_level->blocks
758
      = chainon (current_binding_level->blocks, block);
759
 
760
  /* If we did not make a block for the level just exited,
761
     any blocks made for inner levels
762
     (since they cannot be recorded as subblocks in that level)
763
     must be carried forward so they will later become subblocks
764
     of something else.  */
765
  else if (subblocks)
766
    current_binding_level->blocks
767
      = chainon (current_binding_level->blocks, subblocks);
768
 
769
  /* Each and every BLOCK node created here in `poplevel' is important
770
     (e.g. for proper debugging information) so if we created one
771
     earlier, mark it as "used".  */
772
  if (block)
773
    TREE_USED (block) = 1;
774
 
775
  /* All temporary bindings created for cleanups are popped silently.  */
776
  if (kind == sk_cleanup)
777
    goto restart;
778
 
779
  POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, block);
780
}
781
 
782
/* Walk all the namespaces contained NAMESPACE, including NAMESPACE
783
   itself, calling F for each.  The DATA is passed to F as well.  */
784
 
785
static int
786
walk_namespaces_r (tree name_space, walk_namespaces_fn f, void* data)
787
{
788
  int result = 0;
789
  tree current = NAMESPACE_LEVEL (name_space)->namespaces;
790
 
791
  result |= (*f) (name_space, data);
792
 
793
  for (; current; current = TREE_CHAIN (current))
794
    result |= walk_namespaces_r (current, f, data);
795
 
796
  return result;
797
}
798
 
799
/* Walk all the namespaces, calling F for each.  The DATA is passed to
800
   F as well.  */
801
 
802
int
803
walk_namespaces (walk_namespaces_fn f, void* data)
804
{
805
  return walk_namespaces_r (global_namespace, f, data);
806
}
807
 
808
/* Call wrapup_globals_declarations for the globals in NAMESPACE.  If
809
   DATA is non-NULL, this is the last time we will call
810
   wrapup_global_declarations for this NAMESPACE.  */
811
 
812
int
813
wrapup_globals_for_namespace (tree name_space, void* data)
814
{
815
  struct cp_binding_level *level = NAMESPACE_LEVEL (name_space);
816
  VEC(tree,gc) *statics = level->static_decls;
817
  tree *vec = VEC_address (tree, statics);
818
  int len = VEC_length (tree, statics);
819
  int last_time = (data != 0);
820
 
821
  if (last_time)
822
    {
823
      check_global_declarations (vec, len);
824
      emit_debug_global_declarations (vec, len);
825
      return 0;
826
    }
827
 
828
  /* Write out any globals that need to be output.  */
829
  return wrapup_global_declarations (vec, len);
830
}
831
 
832
 
833
/* In C++, you don't have to write `struct S' to refer to `S'; you
834
   can just use `S'.  We accomplish this by creating a TYPE_DECL as
835
   if the user had written `typedef struct S S'.  Create and return
836
   the TYPE_DECL for TYPE.  */
837
 
838
tree
839
create_implicit_typedef (tree name, tree type)
840
{
841
  tree decl;
842
 
843
  decl = build_decl (input_location, TYPE_DECL, name, type);
844
  DECL_ARTIFICIAL (decl) = 1;
845
  /* There are other implicit type declarations, like the one *within*
846
     a class that allows you to write `S::S'.  We must distinguish
847
     amongst these.  */
848
  SET_DECL_IMPLICIT_TYPEDEF_P (decl);
849
  TYPE_NAME (type) = decl;
850
  TYPE_STUB_DECL (type) = decl;
851
 
852
  return decl;
853
}
854
 
855
/* Remember a local name for name-mangling purposes.  */
856
 
857
static void
858
push_local_name (tree decl)
859
{
860
  size_t i, nelts;
861
  tree t, name;
862
 
863
  timevar_push (TV_NAME_LOOKUP);
864
 
865
  name = DECL_NAME (decl);
866
 
867
  nelts = VEC_length (tree, local_names);
868
  for (i = 0; i < nelts; i++)
869
    {
870
      t = VEC_index (tree, local_names, i);
871
      if (DECL_NAME (t) == name)
872
        {
873
          if (!DECL_LANG_SPECIFIC (decl))
874
            retrofit_lang_decl (decl);
875
          DECL_LANG_SPECIFIC (decl)->u.base.u2sel = 1;
876
          if (DECL_LANG_SPECIFIC (t))
877
            DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
878
          else
879
            DECL_DISCRIMINATOR (decl) = 1;
880
 
881
          VEC_replace (tree, local_names, i, decl);
882
          timevar_pop (TV_NAME_LOOKUP);
883
          return;
884
        }
885
    }
886
 
887
  VEC_safe_push (tree, gc, local_names, decl);
888
  timevar_pop (TV_NAME_LOOKUP);
889
}
890
 
891
/* Subroutine of duplicate_decls: return truthvalue of whether
892
   or not types of these decls match.
893
 
894
   For C++, we must compare the parameter list so that `int' can match
895
   `int&' in a parameter position, but `int&' is not confused with
896
   `const int&'.  */
897
 
898
int
899
decls_match (tree newdecl, tree olddecl)
900
{
901
  int types_match;
902
 
903
  if (newdecl == olddecl)
904
    return 1;
905
 
906
  if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
907
    /* If the two DECLs are not even the same kind of thing, we're not
908
       interested in their types.  */
909
    return 0;
910
 
911
  if (TREE_CODE (newdecl) == FUNCTION_DECL)
912
    {
913
      tree f1 = TREE_TYPE (newdecl);
914
      tree f2 = TREE_TYPE (olddecl);
915
      tree p1 = TYPE_ARG_TYPES (f1);
916
      tree p2 = TYPE_ARG_TYPES (f2);
917
 
918
      /* Specializations of different templates are different functions
919
         even if they have the same type.  */
920
      tree t1 = (DECL_USE_TEMPLATE (newdecl)
921
                 ? DECL_TI_TEMPLATE (newdecl)
922
                 : NULL_TREE);
923
      tree t2 = (DECL_USE_TEMPLATE (olddecl)
924
                 ? DECL_TI_TEMPLATE (olddecl)
925
                 : NULL_TREE);
926
      if (t1 != t2)
927
        return 0;
928
 
929
      if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
930
          && ! (DECL_EXTERN_C_P (newdecl)
931
                && DECL_EXTERN_C_P (olddecl)))
932
        return 0;
933
 
934
#ifdef NO_IMPLICIT_EXTERN_C
935
      /* A new declaration doesn't match a built-in one unless it
936
         is also extern "C".  */
937
      if (DECL_IS_BUILTIN (olddecl)
938
          && DECL_EXTERN_C_P (olddecl) && !DECL_EXTERN_C_P (newdecl))
939
        return 0;
940
#endif
941
 
942
      if (TREE_CODE (f1) != TREE_CODE (f2))
943
        return 0;
944
 
945
      if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
946
        {
947
          if (p2 == NULL_TREE && DECL_EXTERN_C_P (olddecl)
948
              && (DECL_BUILT_IN (olddecl)
949
#ifndef NO_IMPLICIT_EXTERN_C
950
                  || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
951
                  || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
952
#endif
953
              ))
954
            {
955
              types_match = self_promoting_args_p (p1);
956
              if (p1 == void_list_node)
957
                TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
958
            }
959
#ifndef NO_IMPLICIT_EXTERN_C
960
          else if (p1 == NULL_TREE
961
                   && (DECL_EXTERN_C_P (olddecl)
962
                       && DECL_IN_SYSTEM_HEADER (olddecl)
963
                       && !DECL_CLASS_SCOPE_P (olddecl))
964
                   && (DECL_EXTERN_C_P (newdecl)
965
                       && DECL_IN_SYSTEM_HEADER (newdecl)
966
                       && !DECL_CLASS_SCOPE_P (newdecl)))
967
            {
968
              types_match = self_promoting_args_p (p2);
969
              TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
970
            }
971
#endif
972
          else
973
            types_match = compparms (p1, p2);
974
        }
975
      else
976
        types_match = 0;
977
    }
978
  else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
979
    {
980
      if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl))
981
          != TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)))
982
        return 0;
983
 
984
      if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
985
                                DECL_TEMPLATE_PARMS (olddecl)))
986
        return 0;
987
 
988
      if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
989
        types_match = same_type_p (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl)),
990
                                   TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl)));
991
      else
992
        types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
993
                                   DECL_TEMPLATE_RESULT (newdecl));
994
    }
995
  else
996
    {
997
      /* Need to check scope for variable declaration (VAR_DECL).
998
         For typedef (TYPE_DECL), scope is ignored.  */
999
      if (TREE_CODE (newdecl) == VAR_DECL
1000
          && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1001
          /* [dcl.link]
1002
             Two declarations for an object with C language linkage
1003
             with the same name (ignoring the namespace that qualify
1004
             it) that appear in different namespace scopes refer to
1005
             the same object.  */
1006
          && !(DECL_EXTERN_C_P (olddecl) && DECL_EXTERN_C_P (newdecl)))
1007
        return 0;
1008
 
1009
      if (TREE_TYPE (newdecl) == error_mark_node)
1010
        types_match = TREE_TYPE (olddecl) == error_mark_node;
1011
      else if (TREE_TYPE (olddecl) == NULL_TREE)
1012
        types_match = TREE_TYPE (newdecl) == NULL_TREE;
1013
      else if (TREE_TYPE (newdecl) == NULL_TREE)
1014
        types_match = 0;
1015
      else
1016
        types_match = comptypes (TREE_TYPE (newdecl),
1017
                                 TREE_TYPE (olddecl),
1018
                                 COMPARE_REDECLARATION);
1019
    }
1020
 
1021
  return types_match;
1022
}
1023
 
1024
/* If NEWDECL is `static' and an `extern' was seen previously,
1025
   warn about it.  OLDDECL is the previous declaration.
1026
 
1027
   Note that this does not apply to the C++ case of declaring
1028
   a variable `extern const' and then later `const'.
1029
 
1030
   Don't complain about built-in functions, since they are beyond
1031
   the user's control.  */
1032
 
1033
void
1034
warn_extern_redeclared_static (tree newdecl, tree olddecl)
1035
{
1036
  if (TREE_CODE (newdecl) == TYPE_DECL
1037
      || TREE_CODE (newdecl) == TEMPLATE_DECL
1038
      || TREE_CODE (newdecl) == CONST_DECL
1039
      || TREE_CODE (newdecl) == NAMESPACE_DECL)
1040
    return;
1041
 
1042
  /* Don't get confused by static member functions; that's a different
1043
     use of `static'.  */
1044
  if (TREE_CODE (newdecl) == FUNCTION_DECL
1045
      && DECL_STATIC_FUNCTION_P (newdecl))
1046
    return;
1047
 
1048
  /* If the old declaration was `static', or the new one isn't, then
1049
     then everything is OK.  */
1050
  if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1051
    return;
1052
 
1053
  /* It's OK to declare a builtin function as `static'.  */
1054
  if (TREE_CODE (olddecl) == FUNCTION_DECL
1055
      && DECL_ARTIFICIAL (olddecl))
1056
    return;
1057
 
1058
  permerror (input_location, "%qD was declared %<extern%> and later %<static%>", newdecl);
1059
  permerror (input_location, "previous declaration of %q+D", olddecl);
1060
}
1061
 
1062
/* NEW_DECL is a redeclaration of OLD_DECL; both are functions or
1063
   function templates.  If their exception specifications do not
1064
   match, issue a diagnostic.  */
1065
 
1066
static void
1067
check_redeclaration_exception_specification (tree new_decl,
1068
                                             tree old_decl)
1069
{
1070
  tree new_type;
1071
  tree old_type;
1072
  tree new_exceptions;
1073
  tree old_exceptions;
1074
 
1075
  new_type = TREE_TYPE (new_decl);
1076
  new_exceptions = TYPE_RAISES_EXCEPTIONS (new_type);
1077
  old_type = TREE_TYPE (old_decl);
1078
  old_exceptions = TYPE_RAISES_EXCEPTIONS (old_type);
1079
 
1080
  /* [except.spec]
1081
 
1082
     If any declaration of a function has an exception-specification,
1083
     all declarations, including the definition and an explicit
1084
     specialization, of that function shall have an
1085
     exception-specification with the same set of type-ids.  */
1086
  if ((pedantic || ! DECL_IN_SYSTEM_HEADER (old_decl))
1087
      && ! DECL_IS_BUILTIN (old_decl)
1088
      && flag_exceptions
1089
      && !comp_except_specs (new_exceptions, old_exceptions,
1090
                             /*exact=*/true))
1091
    {
1092
      error ("declaration of %qF throws different exceptions", new_decl);
1093
      error ("from previous declaration %q+F", old_decl);
1094
    }
1095
}
1096
 
1097
#define GNU_INLINE_P(fn) (DECL_DECLARED_INLINE_P (fn)                   \
1098
                          && lookup_attribute ("gnu_inline",            \
1099
                                               DECL_ATTRIBUTES (fn)))
1100
 
1101
/* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1102
   If the redeclaration is invalid, a diagnostic is issued, and the
1103
   error_mark_node is returned.  Otherwise, OLDDECL is returned.
1104
 
1105
   If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
1106
   returned.
1107
 
1108
   NEWDECL_IS_FRIEND is true if NEWDECL was declared as a friend.  */
1109
 
1110
tree
1111
duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
1112
{
1113
  unsigned olddecl_uid = DECL_UID (olddecl);
1114
  int olddecl_friend = 0, types_match = 0, hidden_friend = 0;
1115
  int new_defines_function = 0;
1116
  tree new_template_info;
1117
 
1118
  if (newdecl == olddecl)
1119
    return olddecl;
1120
 
1121
  types_match = decls_match (newdecl, olddecl);
1122
 
1123
  /* If either the type of the new decl or the type of the old decl is an
1124
     error_mark_node, then that implies that we have already issued an
1125
     error (earlier) for some bogus type specification, and in that case,
1126
     it is rather pointless to harass the user with yet more error message
1127
     about the same declaration, so just pretend the types match here.  */
1128
  if (TREE_TYPE (newdecl) == error_mark_node
1129
      || TREE_TYPE (olddecl) == error_mark_node)
1130
    return error_mark_node;
1131
 
1132
  if (DECL_P (olddecl)
1133
      && TREE_CODE (newdecl) == FUNCTION_DECL
1134
      && TREE_CODE (olddecl) == FUNCTION_DECL
1135
      && (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl)))
1136
    {
1137
      if (DECL_DECLARED_INLINE_P (newdecl)
1138
          && DECL_UNINLINABLE (newdecl)
1139
          && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1140
        /* Already warned elsewhere.  */;
1141
      else if (DECL_DECLARED_INLINE_P (olddecl)
1142
               && DECL_UNINLINABLE (olddecl)
1143
               && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1144
        /* Already warned.  */;
1145
      else if (DECL_DECLARED_INLINE_P (newdecl)
1146
               && DECL_UNINLINABLE (olddecl)
1147
               && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1148
        {
1149
          warning (OPT_Wattributes, "function %q+D redeclared as inline",
1150
                   newdecl);
1151
          warning (OPT_Wattributes, "previous declaration of %q+D "
1152
                   "with attribute noinline", olddecl);
1153
        }
1154
      else if (DECL_DECLARED_INLINE_P (olddecl)
1155
               && DECL_UNINLINABLE (newdecl)
1156
               && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1157
        {
1158
          warning (OPT_Wattributes, "function %q+D redeclared with "
1159
                   "attribute noinline", newdecl);
1160
          warning (OPT_Wattributes, "previous declaration of %q+D was inline",
1161
                   olddecl);
1162
        }
1163
    }
1164
 
1165
  /* Check for redeclaration and other discrepancies.  */
1166
  if (TREE_CODE (olddecl) == FUNCTION_DECL
1167
      && DECL_ARTIFICIAL (olddecl))
1168
    {
1169
      gcc_assert (!DECL_HIDDEN_FRIEND_P (olddecl));
1170
      if (TREE_CODE (newdecl) != FUNCTION_DECL)
1171
        {
1172
          /* Avoid warnings redeclaring built-ins which have not been
1173
             explicitly declared.  */
1174
          if (DECL_ANTICIPATED (olddecl))
1175
            return NULL_TREE;
1176
 
1177
          /* If you declare a built-in or predefined function name as static,
1178
             the old definition is overridden, but optionally warn this was a
1179
             bad choice of name.  */
1180
          if (! TREE_PUBLIC (newdecl))
1181
            {
1182
              warning (OPT_Wshadow,
1183
                       DECL_BUILT_IN (olddecl)
1184
                       ? G_("shadowing built-in function %q#D")
1185
                       : G_("shadowing library function %q#D"), olddecl);
1186
              /* Discard the old built-in function.  */
1187
              return NULL_TREE;
1188
            }
1189
          /* If the built-in is not ansi, then programs can override
1190
             it even globally without an error.  */
1191
          else if (! DECL_BUILT_IN (olddecl))
1192
            warning (0, "library function %q#D redeclared as non-function %q#D",
1193
                     olddecl, newdecl);
1194
          else
1195
            {
1196
              error ("declaration of %q#D", newdecl);
1197
              error ("conflicts with built-in declaration %q#D",
1198
                     olddecl);
1199
            }
1200
          return NULL_TREE;
1201
        }
1202
      else if (!types_match)
1203
        {
1204
          /* Avoid warnings redeclaring built-ins which have not been
1205
             explicitly declared.  */
1206
          if (DECL_ANTICIPATED (olddecl))
1207
            {
1208
              /* Deal with fileptr_type_node.  FILE type is not known
1209
                 at the time we create the builtins.  */
1210
              tree t1, t2;
1211
 
1212
              for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1213
                   t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1214
                   t1 || t2;
1215
                   t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1216
                if (!t1 || !t2)
1217
                  break;
1218
                else if (TREE_VALUE (t2) == fileptr_type_node)
1219
                  {
1220
                    tree t = TREE_VALUE (t1);
1221
 
1222
                    if (TREE_CODE (t) == POINTER_TYPE
1223
                        && TYPE_NAME (TREE_TYPE (t))
1224
                        && DECL_NAME (TYPE_NAME (TREE_TYPE (t)))
1225
                           == get_identifier ("FILE")
1226
                        && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1227
                      {
1228
                        tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1229
 
1230
                        TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1231
                          = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1232
                        types_match = decls_match (newdecl, olddecl);
1233
                        if (types_match)
1234
                          return duplicate_decls (newdecl, olddecl,
1235
                                                  newdecl_is_friend);
1236
                        TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1237
                      }
1238
                  }
1239
                else if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1240
                  break;
1241
            }
1242
          else if ((DECL_EXTERN_C_P (newdecl)
1243
                    && DECL_EXTERN_C_P (olddecl))
1244
                   || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1245
                                 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1246
            {
1247
              /* A near match; override the builtin.  */
1248
 
1249
              if (TREE_PUBLIC (newdecl))
1250
                {
1251
                  warning (0, "new declaration %q#D", newdecl);
1252
                  warning (0, "ambiguates built-in declaration %q#D",
1253
                           olddecl);
1254
                }
1255
              else
1256
                warning (OPT_Wshadow,
1257
                         DECL_BUILT_IN (olddecl)
1258
                         ? G_("shadowing built-in function %q#D")
1259
                         : G_("shadowing library function %q#D"), olddecl);
1260
            }
1261
          else
1262
            /* Discard the old built-in function.  */
1263
            return NULL_TREE;
1264
 
1265
          /* Replace the old RTL to avoid problems with inlining.  */
1266
          COPY_DECL_RTL (newdecl, olddecl);
1267
        }
1268
      /* Even if the types match, prefer the new declarations type for
1269
         built-ins which have not been explicitly declared, for
1270
         exception lists, etc...  */
1271
      else if (DECL_ANTICIPATED (olddecl))
1272
        {
1273
          tree type = TREE_TYPE (newdecl);
1274
          tree attribs = (*targetm.merge_type_attributes)
1275
            (TREE_TYPE (olddecl), type);
1276
 
1277
          type = cp_build_type_attribute_variant (type, attribs);
1278
          TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
1279
        }
1280
 
1281
      /* If a function is explicitly declared "throw ()", propagate that to
1282
         the corresponding builtin.  */
1283
      if (DECL_BUILT_IN_CLASS (olddecl) == BUILT_IN_NORMAL
1284
          && DECL_ANTICIPATED (olddecl)
1285
          && TREE_NOTHROW (newdecl)
1286
          && !TREE_NOTHROW (olddecl)
1287
          && built_in_decls [DECL_FUNCTION_CODE (olddecl)] != NULL_TREE
1288
          && built_in_decls [DECL_FUNCTION_CODE (olddecl)] != olddecl
1289
          && types_match)
1290
        TREE_NOTHROW (built_in_decls [DECL_FUNCTION_CODE (olddecl)]) = 1;
1291
 
1292
      /* Whether or not the builtin can throw exceptions has no
1293
         bearing on this declarator.  */
1294
      TREE_NOTHROW (olddecl) = 0;
1295
 
1296
      if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1297
        {
1298
          /* If a builtin function is redeclared as `static', merge
1299
             the declarations, but make the original one static.  */
1300
          DECL_THIS_STATIC (olddecl) = 1;
1301
          TREE_PUBLIC (olddecl) = 0;
1302
 
1303
          /* Make the old declaration consistent with the new one so
1304
             that all remnants of the builtin-ness of this function
1305
             will be banished.  */
1306
          SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1307
          COPY_DECL_RTL (newdecl, olddecl);
1308
        }
1309
    }
1310
  else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1311
    {
1312
      /* C++ Standard, 3.3, clause 4:
1313
         "[Note: a namespace name or a class template name must be unique
1314
         in its declarative region (7.3.2, clause 14). ]"  */
1315
      if (TREE_CODE (olddecl) != NAMESPACE_DECL
1316
          && TREE_CODE (newdecl) != NAMESPACE_DECL
1317
          && (TREE_CODE (olddecl) != TEMPLATE_DECL
1318
              || TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) != TYPE_DECL)
1319
          && (TREE_CODE (newdecl) != TEMPLATE_DECL
1320
              || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != TYPE_DECL))
1321
        {
1322
          if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1323
               && TREE_CODE (newdecl) != TYPE_DECL)
1324
              || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1325
                  && TREE_CODE (olddecl) != TYPE_DECL))
1326
            {
1327
              /* We do nothing special here, because C++ does such nasty
1328
                 things with TYPE_DECLs.  Instead, just let the TYPE_DECL
1329
                 get shadowed, and know that if we need to find a TYPE_DECL
1330
                 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1331
                 slot of the identifier.  */
1332
              return NULL_TREE;
1333
            }
1334
 
1335
            if ((TREE_CODE (newdecl) == FUNCTION_DECL
1336
                 && DECL_FUNCTION_TEMPLATE_P (olddecl))
1337
                || (TREE_CODE (olddecl) == FUNCTION_DECL
1338
                    && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1339
              return NULL_TREE;
1340
        }
1341
 
1342
      error ("%q#D redeclared as different kind of symbol", newdecl);
1343
      if (TREE_CODE (olddecl) == TREE_LIST)
1344
        olddecl = TREE_VALUE (olddecl);
1345
      error ("previous declaration of %q+#D", olddecl);
1346
 
1347
      return error_mark_node;
1348
    }
1349
  else if (!types_match)
1350
    {
1351
      if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
1352
        /* These are certainly not duplicate declarations; they're
1353
           from different scopes.  */
1354
        return NULL_TREE;
1355
 
1356
      if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1357
        {
1358
          /* The name of a class template may not be declared to refer to
1359
             any other template, class, function, object, namespace, value,
1360
             or type in the same scope.  */
1361
          if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1362
              || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1363
            {
1364
              error ("declaration of template %q#D", newdecl);
1365
              error ("conflicts with previous declaration %q+#D", olddecl);
1366
            }
1367
          else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1368
                   && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1369
                   && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
1370
                                 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
1371
                   && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1372
                                           DECL_TEMPLATE_PARMS (olddecl))
1373
                   /* Template functions can be disambiguated by
1374
                      return type.  */
1375
                   && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1376
                                   TREE_TYPE (TREE_TYPE (olddecl))))
1377
            {
1378
              error ("new declaration %q#D", newdecl);
1379
              error ("ambiguates old declaration %q+#D", olddecl);
1380
            }
1381
          return NULL_TREE;
1382
        }
1383
      if (TREE_CODE (newdecl) == FUNCTION_DECL)
1384
        {
1385
          if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
1386
            {
1387
              error ("declaration of C function %q#D conflicts with",
1388
                     newdecl);
1389
              error ("previous declaration %q+#D here", olddecl);
1390
            }
1391
          else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1392
                              TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1393
            {
1394
              error ("new declaration %q#D", newdecl);
1395
              error ("ambiguates old declaration %q+#D", olddecl);
1396
              return error_mark_node;
1397
            }
1398
          else
1399
            return NULL_TREE;
1400
        }
1401
      else
1402
        {
1403
          error ("conflicting declaration %q#D", newdecl);
1404
          error ("%q+D has a previous declaration as %q#D", olddecl, olddecl);
1405
          return error_mark_node;
1406
        }
1407
    }
1408
  else if (TREE_CODE (newdecl) == FUNCTION_DECL
1409
            && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1410
                 && (!DECL_TEMPLATE_INFO (newdecl)
1411
                     || (DECL_TI_TEMPLATE (newdecl)
1412
                         != DECL_TI_TEMPLATE (olddecl))))
1413
                || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1414
                    && (!DECL_TEMPLATE_INFO (olddecl)
1415
                        || (DECL_TI_TEMPLATE (olddecl)
1416
                            != DECL_TI_TEMPLATE (newdecl))))))
1417
    /* It's OK to have a template specialization and a non-template
1418
       with the same type, or to have specializations of two
1419
       different templates with the same type.  Note that if one is a
1420
       specialization, and the other is an instantiation of the same
1421
       template, that we do not exit at this point.  That situation
1422
       can occur if we instantiate a template class, and then
1423
       specialize one of its methods.  This situation is valid, but
1424
       the declarations must be merged in the usual way.  */
1425
    return NULL_TREE;
1426
  else if (TREE_CODE (newdecl) == FUNCTION_DECL
1427
           && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
1428
                && !DECL_USE_TEMPLATE (newdecl))
1429
               || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1430
                   && !DECL_USE_TEMPLATE (olddecl))))
1431
    /* One of the declarations is a template instantiation, and the
1432
       other is not a template at all.  That's OK.  */
1433
    return NULL_TREE;
1434
  else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1435
    {
1436
      /* In [namespace.alias] we have:
1437
 
1438
           In a declarative region, a namespace-alias-definition can be
1439
           used to redefine a namespace-alias declared in that declarative
1440
           region to refer only to the namespace to which it already
1441
           refers.
1442
 
1443
         Therefore, if we encounter a second alias directive for the same
1444
         alias, we can just ignore the second directive.  */
1445
      if (DECL_NAMESPACE_ALIAS (newdecl)
1446
          && (DECL_NAMESPACE_ALIAS (newdecl)
1447
              == DECL_NAMESPACE_ALIAS (olddecl)))
1448
        return olddecl;
1449
      /* [namespace.alias]
1450
 
1451
         A namespace-name or namespace-alias shall not be declared as
1452
         the name of any other entity in the same declarative region.
1453
         A namespace-name defined at global scope shall not be
1454
         declared as the name of any other entity in any global scope
1455
         of the program.  */
1456
      error ("declaration of namespace %qD conflicts with", newdecl);
1457
      error ("previous declaration of namespace %q+D here", olddecl);
1458
      return error_mark_node;
1459
    }
1460
  else
1461
    {
1462
      const char *errmsg = redeclaration_error_message (newdecl, olddecl);
1463
      if (errmsg)
1464
        {
1465
          error_at (DECL_SOURCE_LOCATION (newdecl), errmsg, newdecl);
1466
          if (DECL_NAME (olddecl) != NULL_TREE)
1467
            error ((DECL_INITIAL (olddecl) && namespace_bindings_p ())
1468
                         ? "%q+#D previously defined here"
1469
                         : "%q+#D previously declared here", olddecl);
1470
          return error_mark_node;
1471
        }
1472
      else if (TREE_CODE (olddecl) == FUNCTION_DECL
1473
               && DECL_INITIAL (olddecl) != NULL_TREE
1474
               && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
1475
               && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
1476
        {
1477
          /* Prototype decl follows defn w/o prototype.  */
1478
          warning_at (input_location, 0, "prototype for %q+#D", newdecl);
1479
          warning_at (DECL_SOURCE_LOCATION (olddecl), 0,
1480
                      "follows non-prototype definition here");
1481
        }
1482
      else if ((TREE_CODE (olddecl) == FUNCTION_DECL
1483
                || TREE_CODE (olddecl) == VAR_DECL)
1484
               && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
1485
        {
1486
          /* [dcl.link]
1487
             If two declarations of the same function or object
1488
             specify different linkage-specifications ..., the program
1489
             is ill-formed.... Except for functions with C++ linkage,
1490
             a function declaration without a linkage specification
1491
             shall not precede the first linkage specification for
1492
             that function.  A function can be declared without a
1493
             linkage specification after an explicit linkage
1494
             specification has been seen; the linkage explicitly
1495
             specified in the earlier declaration is not affected by
1496
             such a function declaration.
1497
 
1498
             DR 563 raises the question why the restrictions on
1499
             functions should not also apply to objects.  Older
1500
             versions of G++ silently ignore the linkage-specification
1501
             for this example:
1502
 
1503
               namespace N {
1504
                 extern int i;
1505
                 extern "C" int i;
1506
               }
1507
 
1508
             which is clearly wrong.  Therefore, we now treat objects
1509
             like functions.  */
1510
          if (current_lang_depth () == 0)
1511
            {
1512
              /* There is no explicit linkage-specification, so we use
1513
                 the linkage from the previous declaration.  */
1514
              if (!DECL_LANG_SPECIFIC (newdecl))
1515
                retrofit_lang_decl (newdecl);
1516
              SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1517
            }
1518
          else
1519
            {
1520
              error ("previous declaration of %q+#D with %qL linkage",
1521
                     olddecl, DECL_LANGUAGE (olddecl));
1522
              error ("conflicts with new declaration with %qL linkage",
1523
                     DECL_LANGUAGE (newdecl));
1524
            }
1525
        }
1526
 
1527
      if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
1528
        ;
1529
      else if (TREE_CODE (olddecl) == FUNCTION_DECL)
1530
        {
1531
          tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1532
          tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1533
          int i = 1;
1534
 
1535
          if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
1536
            t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
1537
 
1538
          for (; t1 && t1 != void_list_node;
1539
               t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1540
            if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1541
              {
1542
                if (1 == simple_cst_equal (TREE_PURPOSE (t1),
1543
                                           TREE_PURPOSE (t2)))
1544
                  {
1545
                    permerror (input_location, "default argument given for parameter %d of %q#D",
1546
                               i, newdecl);
1547
                    permerror (input_location, "after previous specification in %q+#D", olddecl);
1548
                  }
1549
                else
1550
                  {
1551
                    error ("default argument given for parameter %d of %q#D",
1552
                           i, newdecl);
1553
                    error ("after previous specification in %q+#D",
1554
                                 olddecl);
1555
                  }
1556
              }
1557
        }
1558
    }
1559
 
1560
  /* Do not merge an implicit typedef with an explicit one.  In:
1561
 
1562
       class A;
1563
       ...
1564
       typedef class A A __attribute__ ((foo));
1565
 
1566
     the attribute should apply only to the typedef.  */
1567
  if (TREE_CODE (olddecl) == TYPE_DECL
1568
      && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1569
          || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
1570
    return NULL_TREE;
1571
 
1572
  /* If new decl is `static' and an `extern' was seen previously,
1573
     warn about it.  */
1574
  warn_extern_redeclared_static (newdecl, olddecl);
1575
 
1576
  /* We have committed to returning 1 at this point.  */
1577
  if (TREE_CODE (newdecl) == FUNCTION_DECL)
1578
    {
1579
      /* Now that functions must hold information normally held
1580
         by field decls, there is extra work to do so that
1581
         declaration information does not get destroyed during
1582
         definition.  */
1583
      if (DECL_VINDEX (olddecl))
1584
        DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1585
      if (DECL_CONTEXT (olddecl))
1586
        DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
1587
      DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1588
      DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1589
      DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
1590
      DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
1591
      DECL_INVALID_OVERRIDER_P (newdecl) |= DECL_INVALID_OVERRIDER_P (olddecl);
1592
      DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
1593
      if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
1594
        SET_OVERLOADED_OPERATOR_CODE
1595
          (newdecl, DECL_OVERLOADED_OPERATOR_P (olddecl));
1596
      new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
1597
 
1598
      /* Optionally warn about more than one declaration for the same
1599
         name, but don't warn about a function declaration followed by a
1600
         definition.  */
1601
      if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1602
          && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
1603
          /* Don't warn about extern decl followed by definition.  */
1604
          && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
1605
          /* Don't warn about friends, let add_friend take care of it.  */
1606
          && ! (newdecl_is_friend || DECL_FRIEND_P (olddecl)))
1607
        {
1608
          warning (OPT_Wredundant_decls, "redundant redeclaration of %qD in same scope", newdecl);
1609
          warning (OPT_Wredundant_decls, "previous declaration of %q+D", olddecl);
1610
        }
1611
 
1612
      if (DECL_DELETED_FN (newdecl))
1613
        {
1614
          error ("deleted definition of %qD", newdecl);
1615
          error ("after previous declaration %q+D", olddecl);
1616
        }
1617
    }
1618
 
1619
  /* Deal with C++: must preserve virtual function table size.  */
1620
  if (TREE_CODE (olddecl) == TYPE_DECL)
1621
    {
1622
      tree newtype = TREE_TYPE (newdecl);
1623
      tree oldtype = TREE_TYPE (olddecl);
1624
 
1625
      if (newtype != error_mark_node && oldtype != error_mark_node
1626
          && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
1627
        CLASSTYPE_FRIEND_CLASSES (newtype)
1628
          = CLASSTYPE_FRIEND_CLASSES (oldtype);
1629
 
1630
      DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
1631
    }
1632
 
1633
  /* Copy all the DECL_... slots specified in the new decl
1634
     except for any that we copy here from the old type.  */
1635
  DECL_ATTRIBUTES (newdecl)
1636
    = (*targetm.merge_decl_attributes) (olddecl, newdecl);
1637
 
1638
  if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1639
    {
1640
      tree old_result;
1641
      tree new_result;
1642
      old_result = DECL_TEMPLATE_RESULT (olddecl);
1643
      new_result = DECL_TEMPLATE_RESULT (newdecl);
1644
      TREE_TYPE (olddecl) = TREE_TYPE (old_result);
1645
      DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
1646
        = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
1647
                   DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
1648
 
1649
      DECL_ATTRIBUTES (old_result)
1650
        = (*targetm.merge_decl_attributes) (old_result, new_result);
1651
 
1652
      if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1653
        {
1654
          if (GNU_INLINE_P (old_result) != GNU_INLINE_P (new_result)
1655
              && DECL_INITIAL (new_result))
1656
            {
1657
              if (DECL_INITIAL (old_result))
1658
                DECL_UNINLINABLE (old_result) = 1;
1659
              else
1660
                DECL_UNINLINABLE (old_result) = DECL_UNINLINABLE (new_result);
1661
              DECL_EXTERNAL (old_result) = DECL_EXTERNAL (new_result);
1662
              DECL_NOT_REALLY_EXTERN (old_result)
1663
                = DECL_NOT_REALLY_EXTERN (new_result);
1664
              DECL_INTERFACE_KNOWN (old_result)
1665
                = DECL_INTERFACE_KNOWN (new_result);
1666
              DECL_DECLARED_INLINE_P (old_result)
1667
                = DECL_DECLARED_INLINE_P (new_result);
1668
              DECL_DISREGARD_INLINE_LIMITS (old_result)
1669
                |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1670
 
1671
            }
1672
          else
1673
            {
1674
              DECL_DECLARED_INLINE_P (old_result)
1675
                |= DECL_DECLARED_INLINE_P (new_result);
1676
              DECL_DISREGARD_INLINE_LIMITS (old_result)
1677
                |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1678
              check_redeclaration_exception_specification (newdecl, olddecl);
1679
            }
1680
        }
1681
 
1682
      /* If the new declaration is a definition, update the file and
1683
         line information on the declaration, and also make
1684
         the old declaration the same definition.  */
1685
      if (DECL_INITIAL (new_result) != NULL_TREE)
1686
        {
1687
          DECL_SOURCE_LOCATION (olddecl)
1688
            = DECL_SOURCE_LOCATION (old_result)
1689
            = DECL_SOURCE_LOCATION (newdecl);
1690
          DECL_INITIAL (old_result) = DECL_INITIAL (new_result);
1691
          if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1692
            {
1693
              tree parm;
1694
              DECL_ARGUMENTS (old_result)
1695
                = DECL_ARGUMENTS (new_result);
1696
              for (parm = DECL_ARGUMENTS (old_result); parm;
1697
                   parm = TREE_CHAIN (parm))
1698
                DECL_CONTEXT (parm) = old_result;
1699
            }
1700
        }
1701
 
1702
      return olddecl;
1703
    }
1704
 
1705
  if (types_match)
1706
    {
1707
      /* Automatically handles default parameters.  */
1708
      tree oldtype = TREE_TYPE (olddecl);
1709
      tree newtype;
1710
 
1711
      /* Merge the data types specified in the two decls.  */
1712
      newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
1713
 
1714
      /* If merge_types produces a non-typedef type, just use the old type.  */
1715
      if (TREE_CODE (newdecl) == TYPE_DECL
1716
          && newtype == DECL_ORIGINAL_TYPE (newdecl))
1717
        newtype = oldtype;
1718
 
1719
      if (TREE_CODE (newdecl) == VAR_DECL)
1720
        {
1721
          DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
1722
          DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
1723
          DECL_NONTRIVIALLY_INITIALIZED_P (newdecl)
1724
            |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl);
1725
          DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
1726
            |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
1727
 
1728
          /* Merge the threadprivate attribute from OLDDECL into NEWDECL.  */
1729
          if (DECL_LANG_SPECIFIC (olddecl)
1730
              && CP_DECL_THREADPRIVATE_P (olddecl))
1731
            {
1732
              /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed.  */
1733
              if (!DECL_LANG_SPECIFIC (newdecl))
1734
                retrofit_lang_decl (newdecl);
1735
 
1736
              DECL_TLS_MODEL (newdecl) = DECL_TLS_MODEL (olddecl);
1737
              CP_DECL_THREADPRIVATE_P (newdecl) = 1;
1738
            }
1739
        }
1740
 
1741
      /* Do this after calling `merge_types' so that default
1742
         parameters don't confuse us.  */
1743
      else if (TREE_CODE (newdecl) == FUNCTION_DECL)
1744
        check_redeclaration_exception_specification (newdecl, olddecl);
1745
      TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
1746
 
1747
      if (TREE_CODE (newdecl) == FUNCTION_DECL)
1748
        check_default_args (newdecl);
1749
 
1750
      /* Lay the type out, unless already done.  */
1751
      if (! same_type_p (newtype, oldtype)
1752
          && TREE_TYPE (newdecl) != error_mark_node
1753
          && !(processing_template_decl && uses_template_parms (newdecl)))
1754
        layout_type (TREE_TYPE (newdecl));
1755
 
1756
      if ((TREE_CODE (newdecl) == VAR_DECL
1757
           || TREE_CODE (newdecl) == PARM_DECL
1758
           || TREE_CODE (newdecl) == RESULT_DECL
1759
           || TREE_CODE (newdecl) == FIELD_DECL
1760
           || TREE_CODE (newdecl) == TYPE_DECL)
1761
          && !(processing_template_decl && uses_template_parms (newdecl)))
1762
        layout_decl (newdecl, 0);
1763
 
1764
      /* Merge the type qualifiers.  */
1765
      if (TREE_READONLY (newdecl))
1766
        TREE_READONLY (olddecl) = 1;
1767
      if (TREE_THIS_VOLATILE (newdecl))
1768
        TREE_THIS_VOLATILE (olddecl) = 1;
1769
      if (TREE_NOTHROW (newdecl))
1770
        TREE_NOTHROW (olddecl) = 1;
1771
 
1772
      /* Merge deprecatedness.  */
1773
      if (TREE_DEPRECATED (newdecl))
1774
        TREE_DEPRECATED (olddecl) = 1;
1775
 
1776
      /* Preserve function specific target and optimization options */
1777
      if (TREE_CODE (newdecl) == FUNCTION_DECL)
1778
        {
1779
          if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl)
1780
              && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl))
1781
            DECL_FUNCTION_SPECIFIC_TARGET (newdecl)
1782
              = DECL_FUNCTION_SPECIFIC_TARGET (olddecl);
1783
 
1784
          if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl)
1785
              && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl))
1786
            DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl)
1787
              = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl);
1788
        }
1789
 
1790
      /* Merge the initialization information.  */
1791
      if (DECL_INITIAL (newdecl) == NULL_TREE
1792
          && DECL_INITIAL (olddecl) != NULL_TREE)
1793
        {
1794
          DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
1795
          DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
1796
          if (TREE_CODE (newdecl) == FUNCTION_DECL)
1797
            {
1798
              DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
1799
              DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
1800
            }
1801
        }
1802
 
1803
      /* Merge the section attribute.
1804
         We want to issue an error if the sections conflict but that must be
1805
         done later in decl_attributes since we are called before attributes
1806
         are assigned.  */
1807
      if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
1808
        DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
1809
 
1810
      if (TREE_CODE (newdecl) == FUNCTION_DECL)
1811
        {
1812
          DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
1813
            |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
1814
          DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
1815
          TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1816
          TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
1817
          DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
1818
          DECL_IS_OPERATOR_NEW (newdecl) |= DECL_IS_OPERATOR_NEW (olddecl);
1819
          DECL_PURE_P (newdecl) |= DECL_PURE_P (olddecl);
1820
          TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
1821
          DECL_LOOPING_CONST_OR_PURE_P (newdecl)
1822
            |= DECL_LOOPING_CONST_OR_PURE_P (olddecl);
1823
          /* Keep the old RTL.  */
1824
          COPY_DECL_RTL (olddecl, newdecl);
1825
        }
1826
      else if (TREE_CODE (newdecl) == VAR_DECL
1827
               && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
1828
        {
1829
          /* Keep the old RTL.  We cannot keep the old RTL if the old
1830
             declaration was for an incomplete object and the new
1831
             declaration is not since many attributes of the RTL will
1832
             change.  */
1833
          COPY_DECL_RTL (olddecl, newdecl);
1834
        }
1835
    }
1836
  /* If cannot merge, then use the new type and qualifiers,
1837
     and don't preserve the old rtl.  */
1838
  else
1839
    {
1840
      /* Clean out any memory we had of the old declaration.  */
1841
      tree oldstatic = value_member (olddecl, static_aggregates);
1842
      if (oldstatic)
1843
        TREE_VALUE (oldstatic) = error_mark_node;
1844
 
1845
      TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
1846
      TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
1847
      TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
1848
      TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
1849
    }
1850
 
1851
  /* Merge the storage class information.  */
1852
  merge_weak (newdecl, olddecl);
1853
 
1854
  if (DECL_ONE_ONLY (olddecl))
1855
    DECL_COMDAT_GROUP (newdecl) = DECL_COMDAT_GROUP (olddecl);
1856
 
1857
  DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
1858
  TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
1859
  TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
1860
  if (! DECL_EXTERNAL (olddecl))
1861
    DECL_EXTERNAL (newdecl) = 0;
1862
 
1863
  new_template_info = NULL_TREE;
1864
  if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
1865
    {
1866
      bool new_redefines_gnu_inline = false;
1867
 
1868
      if (new_defines_function
1869
          && ((DECL_INTERFACE_KNOWN (olddecl)
1870
               && TREE_CODE (olddecl) == FUNCTION_DECL)
1871
              || (TREE_CODE (olddecl) == TEMPLATE_DECL
1872
                  && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
1873
                      == FUNCTION_DECL))))
1874
        {
1875
          tree fn = olddecl;
1876
 
1877
          if (TREE_CODE (fn) == TEMPLATE_DECL)
1878
            fn = DECL_TEMPLATE_RESULT (olddecl);
1879
 
1880
          new_redefines_gnu_inline = GNU_INLINE_P (fn) && DECL_INITIAL (fn);
1881
        }
1882
 
1883
      if (!new_redefines_gnu_inline)
1884
        {
1885
          DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
1886
          DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
1887
          DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
1888
        }
1889
      DECL_TEMPLATE_INSTANTIATED (newdecl)
1890
        |= DECL_TEMPLATE_INSTANTIATED (olddecl);
1891
      DECL_ODR_USED (newdecl) |= DECL_ODR_USED (olddecl);
1892
 
1893
      /* If the OLDDECL is an instantiation and/or specialization,
1894
         then the NEWDECL must be too.  But, it may not yet be marked
1895
         as such if the caller has created NEWDECL, but has not yet
1896
         figured out that it is a redeclaration.  */
1897
      if (!DECL_USE_TEMPLATE (newdecl))
1898
        DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
1899
 
1900
      /* Don't really know how much of the language-specific
1901
         values we should copy from old to new.  */
1902
      DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
1903
      DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
1904
      DECL_INITIALIZED_IN_CLASS_P (newdecl)
1905
        |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
1906
 
1907
      if (LANG_DECL_HAS_MIN (newdecl))
1908
        {
1909
          DECL_LANG_SPECIFIC (newdecl)->u.min.u2 =
1910
            DECL_LANG_SPECIFIC (olddecl)->u.min.u2;
1911
          if (DECL_TEMPLATE_INFO (newdecl))
1912
            new_template_info = DECL_TEMPLATE_INFO (newdecl);
1913
          DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
1914
        }
1915
      /* Only functions have these fields.  */
1916
      if (TREE_CODE (newdecl) == FUNCTION_DECL
1917
          || DECL_FUNCTION_TEMPLATE_P (newdecl))
1918
        {
1919
          DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
1920
          olddecl_friend = DECL_FRIEND_P (olddecl);
1921
          hidden_friend = (DECL_ANTICIPATED (olddecl)
1922
                           && DECL_HIDDEN_FRIEND_P (olddecl)
1923
                           && newdecl_is_friend);
1924
          DECL_BEFRIENDING_CLASSES (newdecl)
1925
            = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
1926
                       DECL_BEFRIENDING_CLASSES (olddecl));
1927
          /* DECL_THUNKS is only valid for virtual functions,
1928
             otherwise it is a DECL_FRIEND_CONTEXT.  */
1929
          if (DECL_VIRTUAL_P (newdecl))
1930
            DECL_THUNKS (newdecl) = DECL_THUNKS (olddecl);
1931
        }
1932
    }
1933
 
1934
  if (TREE_CODE (newdecl) == FUNCTION_DECL)
1935
    {
1936
      tree parm;
1937
 
1938
      /* Merge parameter attributes. */
1939
      tree oldarg, newarg;
1940
      for (oldarg = DECL_ARGUMENTS(olddecl),
1941
               newarg = DECL_ARGUMENTS(newdecl);
1942
           oldarg && newarg;
1943
           oldarg = TREE_CHAIN(oldarg), newarg = TREE_CHAIN(newarg)) {
1944
          DECL_ATTRIBUTES (newarg)
1945
              = (*targetm.merge_decl_attributes) (oldarg, newarg);
1946
          DECL_ATTRIBUTES (oldarg) = DECL_ATTRIBUTES (newarg);
1947
      }
1948
 
1949
      if (DECL_TEMPLATE_INSTANTIATION (olddecl)
1950
          && !DECL_TEMPLATE_INSTANTIATION (newdecl))
1951
        {
1952
          /* If newdecl is not a specialization, then it is not a
1953
             template-related function at all.  And that means that we
1954
             should have exited above, returning 0.  */
1955
          gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
1956
 
1957
          if (DECL_ODR_USED (olddecl))
1958
            /* From [temp.expl.spec]:
1959
 
1960
               If a template, a member template or the member of a class
1961
               template is explicitly specialized then that
1962
               specialization shall be declared before the first use of
1963
               that specialization that would cause an implicit
1964
               instantiation to take place, in every translation unit in
1965
               which such a use occurs.  */
1966
            error ("explicit specialization of %qD after first use",
1967
                      olddecl);
1968
 
1969
          SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
1970
 
1971
          /* Don't propagate visibility from the template to the
1972
             specialization here.  We'll do that in determine_visibility if
1973
             appropriate.  */
1974
          DECL_VISIBILITY_SPECIFIED (olddecl) = 0;
1975
 
1976
          /* [temp.expl.spec/14] We don't inline explicit specialization
1977
             just because the primary template says so.  */
1978
        }
1979
      else if (new_defines_function && DECL_INITIAL (olddecl))
1980
        {
1981
          /* Never inline re-defined extern inline functions.
1982
             FIXME: this could be better handled by keeping both
1983
             function as separate declarations.  */
1984
          DECL_UNINLINABLE (newdecl) = 1;
1985
        }
1986
      else
1987
        {
1988
          if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
1989
            DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
1990
 
1991
          DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
1992
 
1993
          DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
1994
            = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
1995
 
1996
          DECL_DISREGARD_INLINE_LIMITS (newdecl)
1997
            = DECL_DISREGARD_INLINE_LIMITS (olddecl)
1998
            = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
1999
               || DECL_DISREGARD_INLINE_LIMITS (olddecl));
2000
        }
2001
 
2002
      /* Preserve abstractness on cloned [cd]tors.  */
2003
      DECL_ABSTRACT (newdecl) = DECL_ABSTRACT (olddecl);
2004
 
2005
      /* Update newdecl's parms to point at olddecl.  */
2006
      for (parm = DECL_ARGUMENTS (newdecl); parm;
2007
           parm = TREE_CHAIN (parm))
2008
        DECL_CONTEXT (parm) = olddecl;
2009
 
2010
      if (! types_match)
2011
        {
2012
          SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
2013
          COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
2014
          COPY_DECL_RTL (newdecl, olddecl);
2015
        }
2016
      if (! types_match || new_defines_function)
2017
        {
2018
          /* These need to be copied so that the names are available.
2019
             Note that if the types do match, we'll preserve inline
2020
             info and other bits, but if not, we won't.  */
2021
          DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
2022
          DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
2023
        }
2024
      if (new_defines_function)
2025
        /* If defining a function declared with other language
2026
           linkage, use the previously declared language linkage.  */
2027
        SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
2028
      else if (types_match)
2029
        {
2030
          /* If redeclaring a builtin function, and not a definition,
2031
             it stays built in.  */
2032
          if (DECL_BUILT_IN (olddecl))
2033
            {
2034
              DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
2035
              DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
2036
              /* If we're keeping the built-in definition, keep the rtl,
2037
                 regardless of declaration matches.  */
2038
              COPY_DECL_RTL (olddecl, newdecl);
2039
            }
2040
 
2041
          DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
2042
          /* Don't clear out the arguments if we're just redeclaring a
2043
             function.  */
2044
          if (DECL_ARGUMENTS (olddecl))
2045
            DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
2046
        }
2047
    }
2048
  else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
2049
    NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
2050
 
2051
  /* Now preserve various other info from the definition.  */
2052
  TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
2053
  TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
2054
  DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
2055
  COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
2056
 
2057
  /* Warn about conflicting visibility specifications.  */
2058
  if (DECL_VISIBILITY_SPECIFIED (olddecl)
2059
      && DECL_VISIBILITY_SPECIFIED (newdecl)
2060
      && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
2061
    {
2062
      warning_at (input_location, OPT_Wattributes,
2063
                  "%q+D: visibility attribute ignored because it", newdecl);
2064
      warning_at (DECL_SOURCE_LOCATION (olddecl), OPT_Wattributes,
2065
                  "conflicts with previous declaration here");
2066
    }
2067
  /* Choose the declaration which specified visibility.  */
2068
  if (DECL_VISIBILITY_SPECIFIED (olddecl))
2069
    {
2070
      DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
2071
      DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2072
    }
2073
  /* Init priority used to be merged from newdecl to olddecl by the memcpy,
2074
     so keep this behavior.  */
2075
  if (TREE_CODE (newdecl) == VAR_DECL && DECL_HAS_INIT_PRIORITY_P (newdecl))
2076
    {
2077
      SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
2078
      DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
2079
    }
2080 378 julius
  /* Likewise for DECL_USER_ALIGN and DECL_PACKED.  */
2081
  DECL_USER_ALIGN (olddecl) = DECL_USER_ALIGN (newdecl);
2082
  if (TREE_CODE (newdecl) == FIELD_DECL)
2083
    DECL_PACKED (olddecl) = DECL_PACKED (newdecl);
2084 283 jeremybenn
 
2085
  /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
2086
     with that from NEWDECL below.  */
2087
  if (DECL_LANG_SPECIFIC (olddecl))
2088
    {
2089
      gcc_assert (DECL_LANG_SPECIFIC (olddecl)
2090
                  != DECL_LANG_SPECIFIC (newdecl));
2091
      ggc_free (DECL_LANG_SPECIFIC (olddecl));
2092
    }
2093
 
2094
  /* Merge the USED information.  */
2095
  if (TREE_USED (olddecl))
2096
    TREE_USED (newdecl) = 1;
2097
  else if (TREE_USED (newdecl))
2098
    TREE_USED (olddecl) = 1;
2099
  if (DECL_PRESERVE_P (olddecl))
2100
    DECL_PRESERVE_P (newdecl) = 1;
2101
  else if (DECL_PRESERVE_P (newdecl))
2102
    DECL_PRESERVE_P (olddecl) = 1;
2103
 
2104
  if (TREE_CODE (newdecl) == FUNCTION_DECL)
2105
    {
2106
      int function_size;
2107
 
2108
      function_size = sizeof (struct tree_decl_common);
2109
 
2110
      memcpy ((char *) olddecl + sizeof (struct tree_common),
2111
              (char *) newdecl + sizeof (struct tree_common),
2112
              function_size - sizeof (struct tree_common));
2113
 
2114
      memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2115
              (char *) newdecl + sizeof (struct tree_decl_common),
2116
              sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common));
2117
      if (new_template_info)
2118
        /* If newdecl is a template instantiation, it is possible that
2119
           the following sequence of events has occurred:
2120
 
2121
           o A friend function was declared in a class template.  The
2122
           class template was instantiated.
2123
 
2124
           o The instantiation of the friend declaration was
2125
           recorded on the instantiation list, and is newdecl.
2126
 
2127
           o Later, however, instantiate_class_template called pushdecl
2128
           on the newdecl to perform name injection.  But, pushdecl in
2129
           turn called duplicate_decls when it discovered that another
2130
           declaration of a global function with the same name already
2131
           existed.
2132
 
2133
           o Here, in duplicate_decls, we decided to clobber newdecl.
2134
 
2135
           If we're going to do that, we'd better make sure that
2136
           olddecl, and not newdecl, is on the list of
2137
           instantiations so that if we try to do the instantiation
2138
           again we won't get the clobbered declaration.  */
2139
        reregister_specialization (newdecl,
2140
                                   new_template_info,
2141
                                   olddecl);
2142
    }
2143
  else
2144
    {
2145
      size_t size = tree_code_size (TREE_CODE (olddecl));
2146
      memcpy ((char *) olddecl + sizeof (struct tree_common),
2147
              (char *) newdecl + sizeof (struct tree_common),
2148
              sizeof (struct tree_decl_common) - sizeof (struct tree_common));
2149
      switch (TREE_CODE (olddecl))
2150
        {
2151
        case LABEL_DECL:
2152
        case VAR_DECL:
2153
        case RESULT_DECL:
2154
        case PARM_DECL:
2155
        case FIELD_DECL:
2156
        case TYPE_DECL:
2157
        case CONST_DECL:
2158
          {
2159
            memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2160
                    (char *) newdecl + sizeof (struct tree_decl_common),
2161
                    size - sizeof (struct tree_decl_common)
2162
                    + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2163
          }
2164
          break;
2165
        default:
2166
          memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2167
                  (char *) newdecl + sizeof (struct tree_decl_common),
2168
                  sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common)
2169
                  + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2170
          break;
2171
        }
2172
    }
2173
  DECL_UID (olddecl) = olddecl_uid;
2174
  if (olddecl_friend)
2175
    DECL_FRIEND_P (olddecl) = 1;
2176
  if (hidden_friend)
2177
    {
2178
      DECL_ANTICIPATED (olddecl) = 1;
2179
      DECL_HIDDEN_FRIEND_P (olddecl) = 1;
2180
    }
2181
 
2182
  /* NEWDECL contains the merged attribute lists.
2183
     Update OLDDECL to be the same.  */
2184
  DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
2185
 
2186
  /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2187
    so that encode_section_info has a chance to look at the new decl
2188
    flags and attributes.  */
2189
  if (DECL_RTL_SET_P (olddecl)
2190
      && (TREE_CODE (olddecl) == FUNCTION_DECL
2191
          || (TREE_CODE (olddecl) == VAR_DECL
2192
              && TREE_STATIC (olddecl))))
2193
    make_decl_rtl (olddecl);
2194
 
2195
  /* The NEWDECL will no longer be needed.  Because every out-of-class
2196
     declaration of a member results in a call to duplicate_decls,
2197
     freeing these nodes represents in a significant savings.  */
2198
  ggc_free (newdecl);
2199
 
2200
  return olddecl;
2201
}
2202
 
2203
/* Return zero if the declaration NEWDECL is valid
2204
   when the declaration OLDDECL (assumed to be for the same name)
2205
   has already been seen.
2206
   Otherwise return an error message format string with a %s
2207
   where the identifier should go.  */
2208
 
2209
static const char *
2210
redeclaration_error_message (tree newdecl, tree olddecl)
2211
{
2212
  if (TREE_CODE (newdecl) == TYPE_DECL)
2213
    {
2214
      /* Because C++ can put things into name space for free,
2215
         constructs like "typedef struct foo { ... } foo"
2216
         would look like an erroneous redeclaration.  */
2217
      if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
2218
        return NULL;
2219
      else
2220
        return G_("redefinition of %q#D");
2221
    }
2222
  else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2223
    {
2224
      /* If this is a pure function, its olddecl will actually be
2225
         the original initialization to `0' (which we force to call
2226
         abort()).  Don't complain about redefinition in this case.  */
2227
      if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
2228
          && DECL_INITIAL (olddecl) == NULL_TREE)
2229
        return NULL;
2230
 
2231
      /* If both functions come from different namespaces, this is not
2232
         a redeclaration - this is a conflict with a used function.  */
2233
      if (DECL_NAMESPACE_SCOPE_P (olddecl)
2234
          && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
2235
          && ! decls_match (olddecl, newdecl))
2236
        return G_("%qD conflicts with used function");
2237
 
2238
      /* We'll complain about linkage mismatches in
2239
         warn_extern_redeclared_static.  */
2240
 
2241
      /* Defining the same name twice is no good.  */
2242
      if (DECL_INITIAL (olddecl) != NULL_TREE
2243
          && DECL_INITIAL (newdecl) != NULL_TREE)
2244
        {
2245
          if (DECL_NAME (olddecl) == NULL_TREE)
2246
            return G_("%q#D not declared in class");
2247
          else if (!GNU_INLINE_P (olddecl)
2248
                   || GNU_INLINE_P (newdecl))
2249
            return G_("redefinition of %q#D");
2250
        }
2251
 
2252
      if (DECL_DECLARED_INLINE_P (olddecl) && DECL_DECLARED_INLINE_P (newdecl))
2253
        {
2254
          bool olda = GNU_INLINE_P (olddecl);
2255
          bool newa = GNU_INLINE_P (newdecl);
2256
 
2257
          if (olda != newa)
2258
            {
2259
              if (newa)
2260
                return G_("%q+D redeclared inline with "
2261
                          "%<gnu_inline%> attribute");
2262
              else
2263
                return G_("%q+D redeclared inline without "
2264
                          "%<gnu_inline%> attribute");
2265
            }
2266
        }
2267
 
2268
      return NULL;
2269
    }
2270
  else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2271
    {
2272
      tree nt, ot;
2273
 
2274
      if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2275
        {
2276
          if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
2277
              && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
2278
            return G_("redefinition of %q#D");
2279
          return NULL;
2280
        }
2281
 
2282
      if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
2283
          || (DECL_TEMPLATE_RESULT (newdecl)
2284
              == DECL_TEMPLATE_RESULT (olddecl)))
2285
        return NULL;
2286
 
2287
      nt = DECL_TEMPLATE_RESULT (newdecl);
2288
      if (DECL_TEMPLATE_INFO (nt))
2289
        nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
2290
      ot = DECL_TEMPLATE_RESULT (olddecl);
2291
      if (DECL_TEMPLATE_INFO (ot))
2292
        ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
2293
      if (DECL_INITIAL (nt) && DECL_INITIAL (ot)
2294
          && (!GNU_INLINE_P (ot) || GNU_INLINE_P (nt)))
2295
        return G_("redefinition of %q#D");
2296
 
2297
      if (DECL_DECLARED_INLINE_P (ot) && DECL_DECLARED_INLINE_P (nt))
2298
        {
2299
          bool olda = GNU_INLINE_P (ot);
2300
          bool newa = GNU_INLINE_P (nt);
2301
 
2302
          if (olda != newa)
2303
            {
2304
              if (newa)
2305
                return G_("%q+D redeclared inline with "
2306
                          "%<gnu_inline%> attribute");
2307
              else
2308
                return G_("%q+D redeclared inline without "
2309
                          "%<gnu_inline%> attribute");
2310
            }
2311
        }
2312
 
2313
      /* Core issue #226 (C++0x):
2314
 
2315
           If a friend function template declaration specifies a
2316
           default template-argument, that declaration shall be a
2317
           definition and shall be the only declaration of the
2318
           function template in the translation unit.  */
2319
      if ((cxx_dialect != cxx98)
2320
          && TREE_CODE (ot) == FUNCTION_DECL && DECL_FRIEND_P (ot)
2321
          && !check_default_tmpl_args (nt, DECL_TEMPLATE_PARMS (newdecl),
2322
                                       /*is_primary=*/1, /*is_partial=*/0,
2323
                                       /*is_friend_decl=*/2))
2324
        return G_("redeclaration of friend %q#D "
2325
                  "may not have default template arguments");
2326
 
2327
      return NULL;
2328
    }
2329
  else if (TREE_CODE (newdecl) == VAR_DECL
2330
           && DECL_THREAD_LOCAL_P (newdecl) != DECL_THREAD_LOCAL_P (olddecl)
2331
           && (! DECL_LANG_SPECIFIC (olddecl)
2332
               || ! CP_DECL_THREADPRIVATE_P (olddecl)
2333
               || DECL_THREAD_LOCAL_P (newdecl)))
2334
    {
2335
      /* Only variables can be thread-local, and all declarations must
2336
         agree on this property.  */
2337
      if (DECL_THREAD_LOCAL_P (newdecl))
2338
        return G_("thread-local declaration of %q#D follows "
2339
                  "non-thread-local declaration");
2340
      else
2341
        return G_("non-thread-local declaration of %q#D follows "
2342
                  "thread-local declaration");
2343
    }
2344
  else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
2345
    {
2346
      /* The objects have been declared at namespace scope.  If either
2347
         is a member of an anonymous union, then this is an invalid
2348
         redeclaration.  For example:
2349
 
2350
           int i;
2351
           union { int i; };
2352
 
2353
           is invalid.  */
2354
      if ((TREE_CODE (newdecl) == VAR_DECL && DECL_ANON_UNION_VAR_P (newdecl))
2355
          || (TREE_CODE (olddecl) == VAR_DECL && DECL_ANON_UNION_VAR_P (olddecl)))
2356
        return G_("redeclaration of %q#D");
2357
      /* If at least one declaration is a reference, there is no
2358
         conflict.  For example:
2359
 
2360
           int i = 3;
2361
           extern int i;
2362
 
2363
         is valid.  */
2364
      if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
2365
        return NULL;
2366
      /* Reject two definitions.  */
2367
      return G_("redefinition of %q#D");
2368
    }
2369
  else
2370
    {
2371
      /* Objects declared with block scope:  */
2372
      /* Reject two definitions, and reject a definition
2373
         together with an external reference.  */
2374
      if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
2375
        return G_("redeclaration of %q#D");
2376
      return NULL;
2377
    }
2378
}
2379
 
2380
/* Hash and equality functions for the named_label table.  */
2381
 
2382
static hashval_t
2383
named_label_entry_hash (const void *data)
2384
{
2385
  const struct named_label_entry *ent = (const struct named_label_entry *) data;
2386
  return DECL_UID (ent->label_decl);
2387
}
2388
 
2389
static int
2390
named_label_entry_eq (const void *a, const void *b)
2391
{
2392
  const struct named_label_entry *ent_a = (const struct named_label_entry *) a;
2393
  const struct named_label_entry *ent_b = (const struct named_label_entry *) b;
2394
  return ent_a->label_decl == ent_b->label_decl;
2395
}
2396
 
2397
/* Create a new label, named ID.  */
2398
 
2399
static tree
2400
make_label_decl (tree id, int local_p)
2401
{
2402
  struct named_label_entry *ent;
2403
  void **slot;
2404
  tree decl;
2405
 
2406
  decl = build_decl (input_location, LABEL_DECL, id, void_type_node);
2407
 
2408
  DECL_CONTEXT (decl) = current_function_decl;
2409
  DECL_MODE (decl) = VOIDmode;
2410
  C_DECLARED_LABEL_FLAG (decl) = local_p;
2411
 
2412
  /* Say where one reference is to the label, for the sake of the
2413
     error if it is not defined.  */
2414
  DECL_SOURCE_LOCATION (decl) = input_location;
2415
 
2416
  /* Record the fact that this identifier is bound to this label.  */
2417
  SET_IDENTIFIER_LABEL_VALUE (id, decl);
2418
 
2419
  /* Create the label htab for the function on demand.  */
2420
  if (!named_labels)
2421
    named_labels = htab_create_ggc (13, named_label_entry_hash,
2422
                                    named_label_entry_eq, NULL);
2423
 
2424
  /* Record this label on the list of labels used in this function.
2425
     We do this before calling make_label_decl so that we get the
2426
     IDENTIFIER_LABEL_VALUE before the new label is declared.  */
2427
  ent = GGC_CNEW (struct named_label_entry);
2428
  ent->label_decl = decl;
2429
 
2430
  slot = htab_find_slot (named_labels, ent, INSERT);
2431
  gcc_assert (*slot == NULL);
2432
  *slot = ent;
2433
 
2434
  return decl;
2435
}
2436
 
2437
/* Look for a label named ID in the current function.  If one cannot
2438
   be found, create one.  (We keep track of used, but undefined,
2439
   labels, and complain about them at the end of a function.)  */
2440
 
2441
tree
2442
lookup_label (tree id)
2443
{
2444
  tree decl;
2445
 
2446
  timevar_push (TV_NAME_LOOKUP);
2447
  /* You can't use labels at global scope.  */
2448
  if (current_function_decl == NULL_TREE)
2449
    {
2450
      error ("label %qE referenced outside of any function", id);
2451
      POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
2452
    }
2453
 
2454
  /* See if we've already got this label.  */
2455
  decl = IDENTIFIER_LABEL_VALUE (id);
2456
  if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
2457
    POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
2458
 
2459
  decl = make_label_decl (id, /*local_p=*/0);
2460
  POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
2461
}
2462
 
2463
/* Declare a local label named ID.  */
2464
 
2465
tree
2466
declare_local_label (tree id)
2467
{
2468
  tree decl, shadow;
2469
 
2470
  /* Add a new entry to the SHADOWED_LABELS list so that when we leave
2471
     this scope we can restore the old value of IDENTIFIER_TYPE_VALUE.  */
2472
  shadow = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
2473
                      current_binding_level->shadowed_labels);
2474
  current_binding_level->shadowed_labels = shadow;
2475
 
2476
  decl = make_label_decl (id, /*local_p=*/1);
2477
  TREE_VALUE (shadow) = decl;
2478
 
2479
  return decl;
2480
}
2481
 
2482
/* Returns nonzero if it is ill-formed to jump past the declaration of
2483
   DECL.  Returns 2 if it's also a real problem.  */
2484
 
2485
static int
2486
decl_jump_unsafe (tree decl)
2487
{
2488
  /* [stmt.dcl]/3: A program that jumps from a point where a local variable
2489
     with automatic storage duration is not in scope to a point where it is
2490
     in scope is ill-formed unless the variable has scalar type, class type
2491
     with a trivial default constructor and a trivial destructor, a
2492
     cv-qualified version of one of these types, or an array of one of the
2493
     preceding types and is declared without an initializer (8.5).  */
2494
  tree type = TREE_TYPE (decl);
2495
 
2496
  if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl)
2497
      || type == error_mark_node)
2498
    return 0;
2499
 
2500
  type = strip_array_types (type);
2501
 
2502
  if (type_has_nontrivial_default_init (TREE_TYPE (decl))
2503
      || DECL_NONTRIVIALLY_INITIALIZED_P (decl))
2504
    return 2;
2505
 
2506
  if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
2507
    return 1;
2508
 
2509
  return 0;
2510
}
2511
 
2512
/* A subroutine of check_previous_goto_1 to identify a branch to the user.  */
2513
 
2514
static void
2515
identify_goto (tree decl, const location_t *locus)
2516
{
2517
  if (decl)
2518
    permerror (input_location, "jump to label %qD", decl);
2519
  else
2520
    permerror (input_location, "jump to case label");
2521
  if (locus)
2522
    permerror (*locus, "  from here");
2523
}
2524
 
2525
/* Check that a single previously seen jump to a newly defined label
2526
   is OK.  DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
2527
   the jump context; NAMES are the names in scope in LEVEL at the jump
2528
   context; LOCUS is the source position of the jump or 0.  Returns
2529
   true if all is well.  */
2530
 
2531
static bool
2532
check_previous_goto_1 (tree decl, struct cp_binding_level* level, tree names,
2533
                       bool exited_omp, const location_t *locus)
2534
{
2535
  struct cp_binding_level *b;
2536
  bool identified = false, saw_eh = false, saw_omp = false;
2537
 
2538
  if (exited_omp)
2539
    {
2540
      identify_goto (decl, locus);
2541
      error ("  exits OpenMP structured block");
2542
      identified = saw_omp = true;
2543
    }
2544
 
2545
  for (b = current_binding_level; b ; b = b->level_chain)
2546
    {
2547
      tree new_decls, old_decls = (b == level ? names : NULL_TREE);
2548
 
2549
      for (new_decls = b->names; new_decls != old_decls;
2550
           new_decls = TREE_CHAIN (new_decls))
2551
        {
2552
          int problem = decl_jump_unsafe (new_decls);
2553
          if (! problem)
2554
            continue;
2555
 
2556
          if (!identified)
2557
            {
2558
              identify_goto (decl, locus);
2559
              identified = true;
2560
            }
2561
          if (problem > 1)
2562
            error ("  crosses initialization of %q+#D", new_decls);
2563
          else
2564
            permerror (input_location, "  enters scope of %q+#D which has "
2565
                       "non-trivial destructor", new_decls);
2566
        }
2567
 
2568
      if (b == level)
2569
        break;
2570
      if ((b->kind == sk_try || b->kind == sk_catch) && !saw_eh)
2571
        {
2572
          if (!identified)
2573
            {
2574
              identify_goto (decl, locus);
2575
              identified = true;
2576
            }
2577
          if (b->kind == sk_try)
2578
            error ("  enters try block");
2579
          else
2580
            error ("  enters catch block");
2581
          saw_eh = true;
2582
        }
2583
      if (b->kind == sk_omp && !saw_omp)
2584
        {
2585
          if (!identified)
2586
            {
2587
              identify_goto (decl, locus);
2588
              identified = true;
2589
            }
2590
          error ("  enters OpenMP structured block");
2591
          saw_omp = true;
2592
        }
2593
    }
2594
 
2595
  return !identified;
2596
}
2597
 
2598
static void
2599
check_previous_goto (tree decl, struct named_label_use_entry *use)
2600
{
2601
  check_previous_goto_1 (decl, use->binding_level,
2602
                         use->names_in_scope, use->in_omp_scope,
2603
                         &use->o_goto_locus);
2604
}
2605
 
2606
static bool
2607
check_switch_goto (struct cp_binding_level* level)
2608
{
2609
  return check_previous_goto_1 (NULL_TREE, level, level->names, false, NULL);
2610
}
2611
 
2612
/* Check that a new jump to a label DECL is OK.  Called by
2613
   finish_goto_stmt.  */
2614
 
2615
void
2616
check_goto (tree decl)
2617
{
2618
  struct named_label_entry *ent, dummy;
2619
  bool saw_catch = false, identified = false;
2620
  tree bad;
2621
 
2622
  /* We can't know where a computed goto is jumping.
2623
     So we assume that it's OK.  */
2624
  if (TREE_CODE (decl) != LABEL_DECL)
2625
    return;
2626
 
2627
  /* We didn't record any information about this label when we created it,
2628
     and there's not much point since it's trivial to analyze as a return.  */
2629
  if (decl == cdtor_label)
2630
    return;
2631
 
2632
  dummy.label_decl = decl;
2633
  ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2634
  gcc_assert (ent != NULL);
2635
 
2636
  /* If the label hasn't been defined yet, defer checking.  */
2637
  if (! DECL_INITIAL (decl))
2638
    {
2639
      struct named_label_use_entry *new_use;
2640
 
2641
      /* Don't bother creating another use if the last goto had the
2642
         same data, and will therefore create the same set of errors.  */
2643
      if (ent->uses
2644
          && ent->uses->names_in_scope == current_binding_level->names)
2645
        return;
2646
 
2647
      new_use = GGC_NEW (struct named_label_use_entry);
2648
      new_use->binding_level = current_binding_level;
2649
      new_use->names_in_scope = current_binding_level->names;
2650
      new_use->o_goto_locus = input_location;
2651
      new_use->in_omp_scope = false;
2652
 
2653
      new_use->next = ent->uses;
2654
      ent->uses = new_use;
2655
      return;
2656
    }
2657
 
2658
  if (ent->in_try_scope || ent->in_catch_scope
2659
      || ent->in_omp_scope || ent->bad_decls)
2660
    {
2661
      permerror (input_location, "jump to label %q+D", decl);
2662
      permerror (input_location, "  from here");
2663
      identified = true;
2664
    }
2665
 
2666
  for (bad = ent->bad_decls; bad; bad = TREE_CHAIN (bad))
2667
    {
2668
      tree b = TREE_VALUE (bad);
2669
      int u = decl_jump_unsafe (b);
2670
 
2671
      if (u > 1 && DECL_ARTIFICIAL (b))
2672
        {
2673
          /* Can't skip init of __exception_info.  */
2674
          error_at (DECL_SOURCE_LOCATION (b), "  enters catch block");
2675
          saw_catch = true;
2676
        }
2677
      else if (u > 1)
2678
        error ("  skips initialization of %q+#D", b);
2679
      else
2680
        permerror (input_location, "  enters scope of %q+#D which has "
2681
                   "non-trivial destructor", b);
2682
    }
2683
 
2684
  if (ent->in_try_scope)
2685
    error ("  enters try block");
2686
  else if (ent->in_catch_scope && !saw_catch)
2687
    error ("  enters catch block");
2688
 
2689
  if (ent->in_omp_scope)
2690
    error ("  enters OpenMP structured block");
2691
  else if (flag_openmp)
2692
    {
2693
      struct cp_binding_level *b;
2694
      for (b = current_binding_level; b ; b = b->level_chain)
2695
        {
2696
          if (b == ent->binding_level)
2697
            break;
2698
          if (b->kind == sk_omp)
2699
            {
2700
              if (!identified)
2701
                {
2702
                  permerror (input_location, "jump to label %q+D", decl);
2703
                  permerror (input_location, "  from here");
2704
                  identified = true;
2705
                }
2706
              error ("  exits OpenMP structured block");
2707
              break;
2708
            }
2709
        }
2710
    }
2711
}
2712
 
2713
/* Check that a return is ok wrt OpenMP structured blocks.
2714
   Called by finish_return_stmt.  Returns true if all is well.  */
2715
 
2716
bool
2717
check_omp_return (void)
2718
{
2719
  struct cp_binding_level *b;
2720
  for (b = current_binding_level; b ; b = b->level_chain)
2721
    if (b->kind == sk_omp)
2722
      {
2723
        error ("invalid exit from OpenMP structured block");
2724
        return false;
2725
      }
2726
  return true;
2727
}
2728
 
2729
/* Define a label, specifying the location in the source file.
2730
   Return the LABEL_DECL node for the label.  */
2731
 
2732
tree
2733
define_label (location_t location, tree name)
2734
{
2735
  struct named_label_entry *ent, dummy;
2736
  struct cp_binding_level *p;
2737
  tree decl;
2738
 
2739
  timevar_push (TV_NAME_LOOKUP);
2740
 
2741
  decl = lookup_label (name);
2742
 
2743
  dummy.label_decl = decl;
2744
  ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2745
  gcc_assert (ent != NULL);
2746
 
2747
  /* After labels, make any new cleanups in the function go into their
2748
     own new (temporary) binding contour.  */
2749
  for (p = current_binding_level;
2750
       p->kind != sk_function_parms;
2751
       p = p->level_chain)
2752
    p->more_cleanups_ok = 0;
2753
 
2754
  if (name == get_identifier ("wchar_t"))
2755
    permerror (input_location, "label named wchar_t");
2756
 
2757
  if (DECL_INITIAL (decl) != NULL_TREE)
2758
    {
2759
      error ("duplicate label %qD", decl);
2760
      POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
2761
    }
2762
  else
2763
    {
2764
      struct named_label_use_entry *use;
2765
 
2766
      /* Mark label as having been defined.  */
2767
      DECL_INITIAL (decl) = error_mark_node;
2768
      /* Say where in the source.  */
2769
      DECL_SOURCE_LOCATION (decl) = location;
2770
 
2771
      ent->binding_level = current_binding_level;
2772
      ent->names_in_scope = current_binding_level->names;
2773
 
2774
      for (use = ent->uses; use ; use = use->next)
2775
        check_previous_goto (decl, use);
2776
      ent->uses = NULL;
2777
    }
2778
 
2779
  POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
2780
}
2781
 
2782
struct cp_switch
2783
{
2784
  struct cp_binding_level *level;
2785
  struct cp_switch *next;
2786
  /* The SWITCH_STMT being built.  */
2787
  tree switch_stmt;
2788
  /* A splay-tree mapping the low element of a case range to the high
2789
     element, or NULL_TREE if there is no high element.  Used to
2790
     determine whether or not a new case label duplicates an old case
2791
     label.  We need a tree, rather than simply a hash table, because
2792
     of the GNU case range extension.  */
2793
  splay_tree cases;
2794
};
2795
 
2796
/* A stack of the currently active switch statements.  The innermost
2797
   switch statement is on the top of the stack.  There is no need to
2798
   mark the stack for garbage collection because it is only active
2799
   during the processing of the body of a function, and we never
2800
   collect at that point.  */
2801
 
2802
static struct cp_switch *switch_stack;
2803
 
2804
/* Called right after a switch-statement condition is parsed.
2805
   SWITCH_STMT is the switch statement being parsed.  */
2806
 
2807
void
2808
push_switch (tree switch_stmt)
2809
{
2810
  struct cp_switch *p = XNEW (struct cp_switch);
2811
  p->level = current_binding_level;
2812
  p->next = switch_stack;
2813
  p->switch_stmt = switch_stmt;
2814
  p->cases = splay_tree_new (case_compare, NULL, NULL);
2815
  switch_stack = p;
2816
}
2817
 
2818
void
2819
pop_switch (void)
2820
{
2821
  struct cp_switch *cs = switch_stack;
2822
  location_t switch_location;
2823
 
2824
  /* Emit warnings as needed.  */
2825
  if (EXPR_HAS_LOCATION (cs->switch_stmt))
2826
    switch_location = EXPR_LOCATION (cs->switch_stmt);
2827
  else
2828
    switch_location = input_location;
2829
  if (!processing_template_decl)
2830
    c_do_switch_warnings (cs->cases, switch_location,
2831
                          SWITCH_STMT_TYPE (cs->switch_stmt),
2832
                          SWITCH_STMT_COND (cs->switch_stmt));
2833
 
2834
  splay_tree_delete (cs->cases);
2835
  switch_stack = switch_stack->next;
2836
  free (cs);
2837
}
2838
 
2839
/* Note that we've seen a definition of a case label, and complain if this
2840
   is a bad place for one.  */
2841
 
2842
tree
2843
finish_case_label (location_t loc, tree low_value, tree high_value)
2844
{
2845
  tree cond, r;
2846
  struct cp_binding_level *p;
2847
 
2848
  if (processing_template_decl)
2849
    {
2850
      tree label;
2851
 
2852
      /* For templates, just add the case label; we'll do semantic
2853
         analysis at instantiation-time.  */
2854
      label = build_decl (loc, LABEL_DECL, NULL_TREE, NULL_TREE);
2855
      return add_stmt (build_case_label (loc, low_value, high_value, label));
2856
    }
2857
 
2858
  /* Find the condition on which this switch statement depends.  */
2859
  cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
2860
  if (cond && TREE_CODE (cond) == TREE_LIST)
2861
    cond = TREE_VALUE (cond);
2862
 
2863
  if (!check_switch_goto (switch_stack->level))
2864
    return error_mark_node;
2865
 
2866
  r = c_add_case_label (loc, switch_stack->cases, cond,
2867
                        SWITCH_STMT_TYPE (switch_stack->switch_stmt),
2868
                        low_value, high_value);
2869
 
2870
  /* After labels, make any new cleanups in the function go into their
2871
     own new (temporary) binding contour.  */
2872
  for (p = current_binding_level;
2873
       p->kind != sk_function_parms;
2874
       p = p->level_chain)
2875
    p->more_cleanups_ok = 0;
2876
 
2877
  return r;
2878
}
2879
 
2880
/* Hash a TYPENAME_TYPE.  K is really of type `tree'.  */
2881
 
2882
static hashval_t
2883
typename_hash (const void* k)
2884
{
2885
  hashval_t hash;
2886
  const_tree const t = (const_tree) k;
2887
 
2888
  hash = (htab_hash_pointer (TYPE_CONTEXT (t))
2889
          ^ htab_hash_pointer (DECL_NAME (TYPE_NAME (t))));
2890
 
2891
  return hash;
2892
}
2893
 
2894
typedef struct typename_info {
2895
  tree scope;
2896
  tree name;
2897
  tree template_id;
2898
  bool enum_p;
2899
  bool class_p;
2900
} typename_info;
2901
 
2902
/* Compare two TYPENAME_TYPEs.  K1 is really of type `tree', K2 is
2903
   really of type `typename_info*'  */
2904
 
2905
static int
2906
typename_compare (const void * k1, const void * k2)
2907
{
2908
  const_tree const t1 = (const_tree) k1;
2909
  const typename_info *const t2 = (const typename_info *) k2;
2910
 
2911
  return (DECL_NAME (TYPE_NAME (t1)) == t2->name
2912
          && TYPE_CONTEXT (t1) == t2->scope
2913
          && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
2914
          && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
2915
          && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
2916
}
2917
 
2918
/* Build a TYPENAME_TYPE.  If the type is `typename T::t', CONTEXT is
2919
   the type of `T', NAME is the IDENTIFIER_NODE for `t'.
2920
 
2921
   Returns the new TYPENAME_TYPE.  */
2922
 
2923
static GTY ((param_is (union tree_node))) htab_t typename_htab;
2924
 
2925
static tree
2926
build_typename_type (tree context, tree name, tree fullname,
2927
                     enum tag_types tag_type)
2928
{
2929
  tree t;
2930
  tree d;
2931
  typename_info ti;
2932
  void **e;
2933
  hashval_t hash;
2934
 
2935
  if (typename_htab == NULL)
2936
    typename_htab = htab_create_ggc (61, &typename_hash,
2937
                                     &typename_compare, NULL);
2938
 
2939
  ti.scope = FROB_CONTEXT (context);
2940
  ti.name = name;
2941
  ti.template_id = fullname;
2942
  ti.enum_p = tag_type == enum_type;
2943
  ti.class_p = (tag_type == class_type
2944
                || tag_type == record_type
2945
                || tag_type == union_type);
2946
  hash =  (htab_hash_pointer (ti.scope)
2947
           ^ htab_hash_pointer (ti.name));
2948
 
2949
  /* See if we already have this type.  */
2950
  e = htab_find_slot_with_hash (typename_htab, &ti, hash, INSERT);
2951
  if (*e)
2952
    t = (tree) *e;
2953
  else
2954
    {
2955
      /* Build the TYPENAME_TYPE.  */
2956
      t = cxx_make_type (TYPENAME_TYPE);
2957
      TYPE_CONTEXT (t) = ti.scope;
2958
      TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
2959
      TYPENAME_IS_ENUM_P (t) = ti.enum_p;
2960
      TYPENAME_IS_CLASS_P (t) = ti.class_p;
2961
 
2962
      /* Build the corresponding TYPE_DECL.  */
2963
      d = build_decl (input_location, TYPE_DECL, name, t);
2964
      TYPE_NAME (TREE_TYPE (d)) = d;
2965
      TYPE_STUB_DECL (TREE_TYPE (d)) = d;
2966
      DECL_CONTEXT (d) = FROB_CONTEXT (context);
2967
      DECL_ARTIFICIAL (d) = 1;
2968
 
2969
      /* Store it in the hash table.  */
2970
      *e = t;
2971
 
2972
      /* TYPENAME_TYPEs must always be compared structurally, because
2973
         they may or may not resolve down to another type depending on
2974
         the currently open classes. */
2975
      SET_TYPE_STRUCTURAL_EQUALITY (t);
2976
    }
2977
 
2978
  return t;
2979
}
2980
 
2981
/* Resolve `typename CONTEXT::NAME'.  TAG_TYPE indicates the tag
2982
   provided to name the type.  Returns an appropriate type, unless an
2983
   error occurs, in which case error_mark_node is returned.  If we
2984
   locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
2985
   return that, rather than the _TYPE it corresponds to, in other
2986
   cases we look through the type decl.  If TF_ERROR is set, complain
2987
   about errors, otherwise be quiet.  */
2988
 
2989
tree
2990
make_typename_type (tree context, tree name, enum tag_types tag_type,
2991
                    tsubst_flags_t complain)
2992
{
2993
  tree fullname;
2994
  tree t;
2995
  bool want_template;
2996
 
2997
  if (name == error_mark_node
2998
      || context == NULL_TREE
2999
      || context == error_mark_node)
3000
    return error_mark_node;
3001
 
3002
  if (TYPE_P (name))
3003
    {
3004
      if (!(TYPE_LANG_SPECIFIC (name)
3005
            && (CLASSTYPE_IS_TEMPLATE (name)
3006
                || CLASSTYPE_USE_TEMPLATE (name))))
3007
        name = TYPE_IDENTIFIER (name);
3008
      else
3009
        /* Create a TEMPLATE_ID_EXPR for the type.  */
3010
        name = build_nt (TEMPLATE_ID_EXPR,
3011
                         CLASSTYPE_TI_TEMPLATE (name),
3012
                         CLASSTYPE_TI_ARGS (name));
3013
    }
3014
  else if (TREE_CODE (name) == TYPE_DECL)
3015
    name = DECL_NAME (name);
3016
 
3017
  fullname = name;
3018
 
3019
  if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3020
    {
3021
      name = TREE_OPERAND (name, 0);
3022
      if (TREE_CODE (name) == TEMPLATE_DECL)
3023
        name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
3024
      else if (TREE_CODE (name) == OVERLOAD)
3025
        {
3026
          error ("%qD is not a type", name);
3027
          return error_mark_node;
3028
        }
3029
    }
3030
  if (TREE_CODE (name) == TEMPLATE_DECL)
3031
    {
3032
      error ("%qD used without template parameters", name);
3033
      return error_mark_node;
3034
    }
3035
  gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
3036
  gcc_assert (TYPE_P (context));
3037
 
3038
  if (!MAYBE_CLASS_TYPE_P (context))
3039
    {
3040
      if (complain & tf_error)
3041
        error ("%q#T is not a class", context);
3042
      return error_mark_node;
3043
    }
3044
 
3045
  /* When the CONTEXT is a dependent type,  NAME could refer to a
3046
     dependent base class of CONTEXT.  But look inside it anyway
3047
     if CONTEXT is a currently open scope, in case it refers to a
3048
     member of the current instantiation or a non-dependent base;
3049
     lookup will stop when we hit a dependent base.  */
3050
  if (!dependent_scope_p (context))
3051
    /* We should only set WANT_TYPE when we're a nested typename type.
3052
       Then we can give better diagnostics if we find a non-type.  */
3053
    t = lookup_field (context, name, 2, /*want_type=*/true);
3054
  else
3055
    t = NULL_TREE;
3056
 
3057
  if ((!t || TREE_CODE (t) == TREE_LIST) && dependent_type_p (context))
3058
    return build_typename_type (context, name, fullname, tag_type);
3059
 
3060
  want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR;
3061
 
3062
  if (!t)
3063
    {
3064
      if (complain & tf_error)
3065
        error (want_template ? "no class template named %q#T in %q#T"
3066
               : "no type named %q#T in %q#T", name, context);
3067
      return error_mark_node;
3068
    }
3069
 
3070
  /* Pull out the template from an injected-class-name (or multiple).  */
3071
  if (want_template)
3072
    t = maybe_get_template_decl_from_type_decl (t);
3073
 
3074
  if (TREE_CODE (t) == TREE_LIST)
3075
    {
3076
      if (complain & tf_error)
3077
        {
3078
          error ("lookup of %qT in %qT is ambiguous", name, context);
3079
          print_candidates (t);
3080
        }
3081
      return error_mark_node;
3082
    }
3083
 
3084
  if (want_template && !DECL_CLASS_TEMPLATE_P (t))
3085
    {
3086
      if (complain & tf_error)
3087
        error ("%<typename %T::%D%> names %q#T, which is not a class template",
3088
               context, name, t);
3089
      return error_mark_node;
3090
    }
3091
  if (!want_template && TREE_CODE (t) != TYPE_DECL)
3092
    {
3093
      if (complain & tf_error)
3094
        error ("%<typename %T::%D%> names %q#T, which is not a type",
3095
               context, name, t);
3096
      return error_mark_node;
3097
    }
3098
 
3099
  if (complain & tf_error)
3100
    perform_or_defer_access_check (TYPE_BINFO (context), t, t);
3101
 
3102
  /* If we are currently parsing a template and if T is a typedef accessed
3103
     through CONTEXT then we need to remember and check access of T at
3104
     template instantiation time.  */
3105
  add_typedef_to_current_template_for_access_check (t, context, input_location);
3106
 
3107
  if (want_template)
3108
    return lookup_template_class (t, TREE_OPERAND (fullname, 1),
3109
                                  NULL_TREE, context,
3110
                                  /*entering_scope=*/0,
3111
                                  tf_warning_or_error | tf_user);
3112
 
3113
  if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
3114
    t = TREE_TYPE (t);
3115
 
3116
  return t;
3117
}
3118
 
3119
/* Resolve `CONTEXT::template NAME'.  Returns a TEMPLATE_DECL if the name
3120
   can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
3121
   in which case error_mark_node is returned.
3122
 
3123
   If PARM_LIST is non-NULL, also make sure that the template parameter
3124
   list of TEMPLATE_DECL matches.
3125
 
3126
   If COMPLAIN zero, don't complain about any errors that occur.  */
3127
 
3128
tree
3129
make_unbound_class_template (tree context, tree name, tree parm_list,
3130
                             tsubst_flags_t complain)
3131
{
3132
  tree t;
3133
  tree d;
3134
 
3135
  if (TYPE_P (name))
3136
    name = TYPE_IDENTIFIER (name);
3137
  else if (DECL_P (name))
3138
    name = DECL_NAME (name);
3139
  gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
3140
 
3141
  if (!dependent_type_p (context)
3142
      || currently_open_class (context))
3143
    {
3144
      tree tmpl = NULL_TREE;
3145
 
3146
      if (MAYBE_CLASS_TYPE_P (context))
3147
        tmpl = lookup_field (context, name, 0, false);
3148
 
3149
      if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
3150
        {
3151
          if (complain & tf_error)
3152
            error ("no class template named %q#T in %q#T", name, context);
3153
          return error_mark_node;
3154
        }
3155
 
3156
      if (parm_list
3157
          && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
3158
        {
3159
          if (complain & tf_error)
3160
            {
3161
              error ("template parameters do not match template");
3162
              error ("%q+D declared here", tmpl);
3163
            }
3164
          return error_mark_node;
3165
        }
3166
 
3167
      if (complain & tf_error)
3168
        perform_or_defer_access_check (TYPE_BINFO (context), tmpl, tmpl);
3169
 
3170
      return tmpl;
3171
    }
3172
 
3173
  /* Build the UNBOUND_CLASS_TEMPLATE.  */
3174
  t = cxx_make_type (UNBOUND_CLASS_TEMPLATE);
3175
  TYPE_CONTEXT (t) = FROB_CONTEXT (context);
3176
  TREE_TYPE (t) = NULL_TREE;
3177
  SET_TYPE_STRUCTURAL_EQUALITY (t);
3178
 
3179
  /* Build the corresponding TEMPLATE_DECL.  */
3180
  d = build_decl (input_location, TEMPLATE_DECL, name, t);
3181
  TYPE_NAME (TREE_TYPE (d)) = d;
3182
  TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3183
  DECL_CONTEXT (d) = FROB_CONTEXT (context);
3184
  DECL_ARTIFICIAL (d) = 1;
3185
  DECL_TEMPLATE_PARMS (d) = parm_list;
3186
 
3187
  return t;
3188
}
3189
 
3190
 
3191
 
3192
/* Push the declarations of builtin types into the namespace.
3193
   RID_INDEX is the index of the builtin type in the array
3194
   RID_POINTERS.  NAME is the name used when looking up the builtin
3195
   type.  TYPE is the _TYPE node for the builtin type.  */
3196
 
3197
void
3198
record_builtin_type (enum rid rid_index,
3199
                     const char* name,
3200
                     tree type)
3201
{
3202
  tree rname = NULL_TREE, tname = NULL_TREE;
3203
  tree tdecl = NULL_TREE;
3204
 
3205
  if ((int) rid_index < (int) RID_MAX)
3206
    rname = ridpointers[(int) rid_index];
3207
  if (name)
3208
    tname = get_identifier (name);
3209
 
3210
  /* The calls to SET_IDENTIFIER_GLOBAL_VALUE below should be
3211
     eliminated.  Built-in types should not be looked up name; their
3212
     names are keywords that the parser can recognize.  However, there
3213
     is code in c-common.c that uses identifier_global_value to look
3214
     up built-in types by name.  */
3215
  if (tname)
3216
    {
3217
      tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, tname, type);
3218
      DECL_ARTIFICIAL (tdecl) = 1;
3219
      SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
3220
    }
3221
  if (rname)
3222
    {
3223
      if (!tdecl)
3224
        {
3225
          tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, rname, type);
3226
          DECL_ARTIFICIAL (tdecl) = 1;
3227
        }
3228
      SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
3229
    }
3230
 
3231
  if (!TYPE_NAME (type))
3232
    TYPE_NAME (type) = tdecl;
3233
 
3234
  if (tdecl)
3235
    debug_hooks->type_decl (tdecl, 0);
3236
}
3237
 
3238
/* Record one of the standard Java types.
3239
 * Declare it as having the given NAME.
3240
 * If SIZE > 0, it is the size of one of the integral types;
3241
 * otherwise it is the negative of the size of one of the other types.  */
3242
 
3243
static tree
3244
record_builtin_java_type (const char* name, int size)
3245
{
3246
  tree type, decl;
3247
  if (size > 0)
3248
    type = build_nonstandard_integer_type (size, 0);
3249
  else if (size > -32)
3250
    {
3251
      tree stype;
3252
      /* "__java_char" or ""__java_boolean".  */
3253
      type = build_nonstandard_integer_type (-size, 1);
3254
      /* Get the signed type cached and attached to the unsigned type,
3255
         so it doesn't get garbage-collected at "random" times,
3256
         causing potential codegen differences out of different UIDs
3257
         and different alias set numbers.  */
3258
      stype = build_nonstandard_integer_type (-size, 0);
3259
      TREE_CHAIN (type) = stype;
3260
      /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
3261
    }
3262
  else
3263
    { /* "__java_float" or ""__java_double".  */
3264
      type = make_node (REAL_TYPE);
3265
      TYPE_PRECISION (type) = - size;
3266
      layout_type (type);
3267
    }
3268
  record_builtin_type (RID_MAX, name, type);
3269
  decl = TYPE_NAME (type);
3270
 
3271
  /* Suppress generate debug symbol entries for these types,
3272
     since for normal C++ they are just clutter.
3273
     However, push_lang_context undoes this if extern "Java" is seen.  */
3274
  DECL_IGNORED_P (decl) = 1;
3275
 
3276
  TYPE_FOR_JAVA (type) = 1;
3277
  return type;
3278
}
3279
 
3280
/* Push a type into the namespace so that the back ends ignore it.  */
3281
 
3282
static void
3283
record_unknown_type (tree type, const char* name)
3284
{
3285
  tree decl = pushdecl (build_decl (UNKNOWN_LOCATION,
3286
                                    TYPE_DECL, get_identifier (name), type));
3287
  /* Make sure the "unknown type" typedecl gets ignored for debug info.  */
3288
  DECL_IGNORED_P (decl) = 1;
3289
  TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
3290
  TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
3291
  TYPE_ALIGN (type) = 1;
3292
  TYPE_USER_ALIGN (type) = 0;
3293
  SET_TYPE_MODE (type, TYPE_MODE (void_type_node));
3294
}
3295
 
3296
/* A string for which we should create an IDENTIFIER_NODE at
3297
   startup.  */
3298
 
3299
typedef struct predefined_identifier
3300
{
3301
  /* The name of the identifier.  */
3302
  const char *const name;
3303
  /* The place where the IDENTIFIER_NODE should be stored.  */
3304
  tree *const node;
3305
  /* Nonzero if this is the name of a constructor or destructor.  */
3306
  const int ctor_or_dtor_p;
3307
} predefined_identifier;
3308
 
3309
/* Create all the predefined identifiers.  */
3310
 
3311
static void
3312
initialize_predefined_identifiers (void)
3313
{
3314
  const predefined_identifier *pid;
3315
 
3316
  /* A table of identifiers to create at startup.  */
3317
  static const predefined_identifier predefined_identifiers[] = {
3318
    { "C++", &lang_name_cplusplus, 0 },
3319
    { "C", &lang_name_c, 0 },
3320
    { "Java", &lang_name_java, 0 },
3321
    /* Some of these names have a trailing space so that it is
3322
       impossible for them to conflict with names written by users.  */
3323
    { "__ct ", &ctor_identifier, 1 },
3324
    { "__base_ctor ", &base_ctor_identifier, 1 },
3325
    { "__comp_ctor ", &complete_ctor_identifier, 1 },
3326
    { "__dt ", &dtor_identifier, 1 },
3327
    { "__comp_dtor ", &complete_dtor_identifier, 1 },
3328
    { "__base_dtor ", &base_dtor_identifier, 1 },
3329
    { "__deleting_dtor ", &deleting_dtor_identifier, 1 },
3330
    { IN_CHARGE_NAME, &in_charge_identifier, 0 },
3331
    { "nelts", &nelts_identifier, 0 },
3332
    { THIS_NAME, &this_identifier, 0 },
3333
    { VTABLE_DELTA_NAME, &delta_identifier, 0 },
3334
    { VTABLE_PFN_NAME, &pfn_identifier, 0 },
3335
    { "_vptr", &vptr_identifier, 0 },
3336
    { "__vtt_parm", &vtt_parm_identifier, 0 },
3337
    { "::", &global_scope_name, 0 },
3338
    { "std", &std_identifier, 0 },
3339
    { NULL, NULL, 0 }
3340
  };
3341
 
3342
  for (pid = predefined_identifiers; pid->name; ++pid)
3343
    {
3344
      *pid->node = get_identifier (pid->name);
3345
      if (pid->ctor_or_dtor_p)
3346
        IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
3347
    }
3348
}
3349
 
3350
/* Create the predefined scalar types of C,
3351
   and some nodes representing standard constants (0, 1, (void *)0).
3352
   Initialize the global binding level.
3353
   Make definitions for built-in primitive functions.  */
3354
 
3355
void
3356
cxx_init_decl_processing (void)
3357
{
3358
  tree void_ftype;
3359
  tree void_ftype_ptr;
3360
 
3361
  build_common_tree_nodes (flag_signed_char, false);
3362
 
3363
  /* Create all the identifiers we need.  */
3364
  initialize_predefined_identifiers ();
3365
 
3366
  /* Create the global variables.  */
3367
  push_to_top_level ();
3368
 
3369
  current_function_decl = NULL_TREE;
3370
  current_binding_level = NULL;
3371
  /* Enter the global namespace.  */
3372
  gcc_assert (global_namespace == NULL_TREE);
3373
  global_namespace = build_lang_decl (NAMESPACE_DECL, global_scope_name,
3374
                                      void_type_node);
3375
  TREE_PUBLIC (global_namespace) = 1;
3376
  begin_scope (sk_namespace, global_namespace);
3377
 
3378
  current_lang_name = NULL_TREE;
3379
 
3380
  if (flag_visibility_ms_compat)
3381
    default_visibility = VISIBILITY_HIDDEN;
3382
 
3383
  /* Initially, C.  */
3384
  current_lang_name = lang_name_c;
3385
 
3386
  /* Create the `std' namespace.  */
3387
  push_namespace (std_identifier);
3388
  std_node = current_namespace;
3389
  pop_namespace ();
3390
 
3391
  c_common_nodes_and_builtins ();
3392
 
3393
  java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
3394
  java_short_type_node = record_builtin_java_type ("__java_short", 16);
3395
  java_int_type_node = record_builtin_java_type ("__java_int", 32);
3396
  java_long_type_node = record_builtin_java_type ("__java_long", 64);
3397
  java_float_type_node = record_builtin_java_type ("__java_float", -32);
3398
  java_double_type_node = record_builtin_java_type ("__java_double", -64);
3399
  java_char_type_node = record_builtin_java_type ("__java_char", -16);
3400
  java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
3401
 
3402
  integer_two_node = build_int_cst (NULL_TREE, 2);
3403
  integer_three_node = build_int_cst (NULL_TREE, 3);
3404
 
3405
  record_builtin_type (RID_BOOL, "bool", boolean_type_node);
3406
  truthvalue_type_node = boolean_type_node;
3407
  truthvalue_false_node = boolean_false_node;
3408
  truthvalue_true_node = boolean_true_node;
3409
 
3410
  empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
3411
 
3412
#if 0
3413
  record_builtin_type (RID_MAX, NULL, string_type_node);
3414
#endif
3415
 
3416
  delta_type_node = ptrdiff_type_node;
3417
  vtable_index_type = ptrdiff_type_node;
3418
 
3419
  vtt_parm_type = build_pointer_type (const_ptr_type_node);
3420
  void_ftype = build_function_type (void_type_node, void_list_node);
3421
  void_ftype_ptr = build_function_type (void_type_node,
3422
                                        tree_cons (NULL_TREE,
3423
                                                   ptr_type_node,
3424
                                                   void_list_node));
3425
  void_ftype_ptr
3426
    = build_exception_variant (void_ftype_ptr, empty_except_spec);
3427
 
3428
  /* C++ extensions */
3429
 
3430
  unknown_type_node = make_node (UNKNOWN_TYPE);
3431
  record_unknown_type (unknown_type_node, "unknown type");
3432
 
3433
  /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node.  */
3434
  TREE_TYPE (unknown_type_node) = unknown_type_node;
3435
 
3436
  /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
3437
     result.  */
3438
  TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
3439
  TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
3440
 
3441
  init_list_type_node = make_node (UNKNOWN_TYPE);
3442
  record_unknown_type (init_list_type_node, "init list");
3443
 
3444
  {
3445
    /* Make sure we get a unique function type, so we can give
3446
       its pointer type a name.  (This wins for gdb.) */
3447
    tree vfunc_type = make_node (FUNCTION_TYPE);
3448
    TREE_TYPE (vfunc_type) = integer_type_node;
3449
    TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
3450
    layout_type (vfunc_type);
3451
 
3452
    vtable_entry_type = build_pointer_type (vfunc_type);
3453
  }
3454
  record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
3455
 
3456
  vtbl_type_node
3457
    = build_cplus_array_type (vtable_entry_type, NULL_TREE);
3458
  layout_type (vtbl_type_node);
3459
  vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
3460
  record_builtin_type (RID_MAX, NULL, vtbl_type_node);
3461
  vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
3462
  layout_type (vtbl_ptr_type_node);
3463
  record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
3464
 
3465
  push_namespace (get_identifier ("__cxxabiv1"));
3466
  abi_node = current_namespace;
3467
  pop_namespace ();
3468
 
3469
  global_type_node = make_node (LANG_TYPE);
3470
  record_unknown_type (global_type_node, "global type");
3471
 
3472
  /* Now, C++.  */
3473
  current_lang_name = lang_name_cplusplus;
3474
 
3475
  {
3476
    tree bad_alloc_id;
3477
    tree bad_alloc_type_node;
3478
    tree bad_alloc_decl;
3479
    tree newtype, deltype;
3480
    tree ptr_ftype_sizetype;
3481
 
3482
    push_namespace (std_identifier);
3483
    bad_alloc_id = get_identifier ("bad_alloc");
3484
    bad_alloc_type_node = make_class_type (RECORD_TYPE);
3485
    TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
3486
    bad_alloc_decl
3487
      = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
3488
    DECL_CONTEXT (bad_alloc_decl) = current_namespace;
3489
    pop_namespace ();
3490
 
3491
    ptr_ftype_sizetype
3492
      = build_function_type (ptr_type_node,
3493
                             tree_cons (NULL_TREE,
3494
                                        size_type_node,
3495
                                        void_list_node));
3496
    newtype = build_exception_variant
3497
      (ptr_ftype_sizetype, add_exception_specifier
3498
       (NULL_TREE, bad_alloc_type_node, -1));
3499
    deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
3500
    push_cp_library_fn (NEW_EXPR, newtype);
3501
    push_cp_library_fn (VEC_NEW_EXPR, newtype);
3502
    global_delete_fndecl = push_cp_library_fn (DELETE_EXPR, deltype);
3503
    push_cp_library_fn (VEC_DELETE_EXPR, deltype);
3504
  }
3505
 
3506
  abort_fndecl
3507
    = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype);
3508
 
3509
  /* Perform other language dependent initializations.  */
3510
  init_class_processing ();
3511
  init_rtti_processing ();
3512
  init_template_processing ();
3513
 
3514
  if (flag_exceptions)
3515
    init_exception_processing ();
3516
 
3517
  if (! supports_one_only ())
3518
    flag_weak = 0;
3519
 
3520
  make_fname_decl = cp_make_fname_decl;
3521
  start_fname_decls ();
3522
 
3523
  /* Show we use EH for cleanups.  */
3524
  if (flag_exceptions)
3525
    using_eh_for_cleanups ();
3526
}
3527
 
3528
/* Generate an initializer for a function naming variable from
3529
   NAME. NAME may be NULL, to indicate a dependent name.  TYPE_P is
3530
   filled in with the type of the init.  */
3531
 
3532
tree
3533
cp_fname_init (const char* name, tree *type_p)
3534
{
3535
  tree domain = NULL_TREE;
3536
  tree type;
3537
  tree init = NULL_TREE;
3538
  size_t length = 0;
3539
 
3540
  if (name)
3541
    {
3542
      length = strlen (name);
3543
      domain = build_index_type (size_int (length));
3544
      init = build_string (length + 1, name);
3545
    }
3546
 
3547
  type = build_qualified_type (char_type_node, TYPE_QUAL_CONST);
3548
  type = build_cplus_array_type (type, domain);
3549
 
3550
  *type_p = type;
3551
 
3552
  if (init)
3553
    TREE_TYPE (init) = type;
3554
  else
3555
    init = error_mark_node;
3556
 
3557
  return init;
3558
}
3559
 
3560
/* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give
3561
   the decl, LOC is the location to give the decl, NAME is the
3562
   initialization string and TYPE_DEP indicates whether NAME depended
3563
   on the type of the function. We make use of that to detect
3564
   __PRETTY_FUNCTION__ inside a template fn. This is being done lazily
3565
   at the point of first use, so we mustn't push the decl now.  */
3566
 
3567
static tree
3568
cp_make_fname_decl (location_t loc, tree id, int type_dep)
3569
{
3570
  const char *const name = (type_dep && processing_template_decl
3571
                            ? NULL : fname_as_string (type_dep));
3572
  tree type;
3573
  tree init = cp_fname_init (name, &type);
3574
  tree decl = build_decl (loc, VAR_DECL, id, type);
3575
 
3576
  if (name)
3577
    free (CONST_CAST (char *, name));
3578
 
3579
  /* As we're using pushdecl_with_scope, we must set the context.  */
3580
  DECL_CONTEXT (decl) = current_function_decl;
3581
  DECL_PRETTY_FUNCTION_P (decl) = type_dep;
3582
 
3583
  TREE_STATIC (decl) = 1;
3584
  TREE_READONLY (decl) = 1;
3585
  DECL_ARTIFICIAL (decl) = 1;
3586
 
3587
  TREE_USED (decl) = 1;
3588
 
3589
  if (current_function_decl)
3590
    {
3591
      struct cp_binding_level *b = current_binding_level;
3592
      while (b->level_chain->kind != sk_function_parms)
3593
        b = b->level_chain;
3594
      pushdecl_with_scope (decl, b, /*is_friend=*/false);
3595
      cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE,
3596
                      LOOKUP_ONLYCONVERTING);
3597
    }
3598
  else
3599
    pushdecl_top_level_and_finish (decl, init);
3600
 
3601
  return decl;
3602
}
3603
 
3604
static tree
3605
builtin_function_1 (tree decl, tree context, bool is_global)
3606
{
3607
  tree          id = DECL_NAME (decl);
3608
  const char *name = IDENTIFIER_POINTER (id);
3609
 
3610
  retrofit_lang_decl (decl);
3611
 
3612
  DECL_ARTIFICIAL (decl) = 1;
3613
  SET_OVERLOADED_OPERATOR_CODE (decl, ERROR_MARK);
3614
  SET_DECL_LANGUAGE (decl, lang_c);
3615
  /* Runtime library routines are, by definition, available in an
3616
     external shared object.  */
3617
  DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
3618
  DECL_VISIBILITY_SPECIFIED (decl) = 1;
3619
 
3620
  DECL_CONTEXT (decl) = context;
3621
 
3622
  if (is_global)
3623
    pushdecl_top_level (decl);
3624
  else
3625
    pushdecl (decl);
3626
 
3627
  /* A function in the user's namespace should have an explicit
3628
     declaration before it is used.  Mark the built-in function as
3629
     anticipated but not actually declared.  */
3630
  if (name[0] != '_' || name[1] != '_')
3631
    DECL_ANTICIPATED (decl) = 1;
3632
  else if (strncmp (name + 2, "builtin_", strlen ("builtin_")) != 0)
3633
    {
3634
      size_t len = strlen (name);
3635
 
3636
      /* Treat __*_chk fortification functions as anticipated as well,
3637
         unless they are __builtin_*.  */
3638
      if (len > strlen ("___chk")
3639
          && memcmp (name + len - strlen ("_chk"),
3640
                     "_chk", strlen ("_chk") + 1) == 0)
3641
        DECL_ANTICIPATED (decl) = 1;
3642
    }
3643
 
3644
  return decl;
3645
}
3646
 
3647
tree
3648
cxx_builtin_function (tree decl)
3649
{
3650
  tree          id = DECL_NAME (decl);
3651
  const char *name = IDENTIFIER_POINTER (id);
3652
  /* All builtins that don't begin with an '_' should additionally
3653
     go in the 'std' namespace.  */
3654
  if (name[0] != '_')
3655
    {
3656
      tree decl2 = copy_node(decl);
3657
      push_namespace (std_identifier);
3658
      builtin_function_1 (decl2, std_node, false);
3659
      pop_namespace ();
3660
    }
3661
 
3662
  return builtin_function_1 (decl, NULL_TREE, false);
3663
}
3664
 
3665
/* Like cxx_builtin_function, but guarantee the function is added to the global
3666
   scope.  This is to allow function specific options to add new machine
3667
   dependent builtins when the target ISA changes via attribute((target(...)))
3668
   which saves space on program startup if the program does not use non-generic
3669
   ISAs.  */
3670
 
3671
tree
3672
cxx_builtin_function_ext_scope (tree decl)
3673
{
3674
 
3675
  tree          id = DECL_NAME (decl);
3676
  const char *name = IDENTIFIER_POINTER (id);
3677
  /* All builtins that don't begin with an '_' should additionally
3678
     go in the 'std' namespace.  */
3679
  if (name[0] != '_')
3680
    {
3681
      tree decl2 = copy_node(decl);
3682
      push_namespace (std_identifier);
3683
      builtin_function_1 (decl2, std_node, true);
3684
      pop_namespace ();
3685
    }
3686
 
3687
  return builtin_function_1 (decl, NULL_TREE, true);
3688
}
3689
 
3690
/* Generate a FUNCTION_DECL with the typical flags for a runtime library
3691
   function.  Not called directly.  */
3692
 
3693
static tree
3694
build_library_fn_1 (tree name, enum tree_code operator_code, tree type)
3695
{
3696
  tree fn = build_lang_decl (FUNCTION_DECL, name, type);
3697
  DECL_EXTERNAL (fn) = 1;
3698
  TREE_PUBLIC (fn) = 1;
3699
  DECL_ARTIFICIAL (fn) = 1;
3700
  SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
3701
  SET_DECL_LANGUAGE (fn, lang_c);
3702
  /* Runtime library routines are, by definition, available in an
3703
     external shared object.  */
3704
  DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
3705
  DECL_VISIBILITY_SPECIFIED (fn) = 1;
3706
  return fn;
3707
}
3708
 
3709
/* Returns the _DECL for a library function with C linkage.
3710
   We assume that such functions never throw; if this is incorrect,
3711
   callers should unset TREE_NOTHROW.  */
3712
 
3713
static tree
3714
build_library_fn (tree name, tree type)
3715
{
3716
  tree fn = build_library_fn_1 (name, ERROR_MARK, type);
3717
  TREE_NOTHROW (fn) = 1;
3718
  return fn;
3719
}
3720
 
3721
/* Returns the _DECL for a library function with C++ linkage.  */
3722
 
3723
static tree
3724
build_cp_library_fn (tree name, enum tree_code operator_code, tree type)
3725
{
3726
  tree fn = build_library_fn_1 (name, operator_code, type);
3727
  TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
3728
  DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
3729
  SET_DECL_LANGUAGE (fn, lang_cplusplus);
3730
  return fn;
3731
}
3732
 
3733
/* Like build_library_fn, but takes a C string instead of an
3734
   IDENTIFIER_NODE.  */
3735
 
3736
tree
3737
build_library_fn_ptr (const char* name, tree type)
3738
{
3739
  return build_library_fn (get_identifier (name), type);
3740
}
3741
 
3742
/* Like build_cp_library_fn, but takes a C string instead of an
3743
   IDENTIFIER_NODE.  */
3744
 
3745
tree
3746
build_cp_library_fn_ptr (const char* name, tree type)
3747
{
3748
  return build_cp_library_fn (get_identifier (name), ERROR_MARK, type);
3749
}
3750
 
3751
/* Like build_library_fn, but also pushes the function so that we will
3752
   be able to find it via IDENTIFIER_GLOBAL_VALUE.  Also, the function
3753
   may throw exceptions listed in RAISES.  */
3754
 
3755
tree
3756
push_library_fn (tree name, tree type, tree raises)
3757
{
3758
  tree fn;
3759
 
3760
  if (raises)
3761
    type = build_exception_variant (type, raises);
3762
 
3763
  fn = build_library_fn (name, type);
3764
  pushdecl_top_level (fn);
3765
  return fn;
3766
}
3767
 
3768
/* Like build_cp_library_fn, but also pushes the function so that it
3769
   will be found by normal lookup.  */
3770
 
3771
static tree
3772
push_cp_library_fn (enum tree_code operator_code, tree type)
3773
{
3774
  tree fn = build_cp_library_fn (ansi_opname (operator_code),
3775
                                 operator_code,
3776
                                 type);
3777
  pushdecl (fn);
3778
  return fn;
3779
}
3780
 
3781
/* Like push_library_fn, but takes a TREE_LIST of parm types rather than
3782
   a FUNCTION_TYPE.  */
3783
 
3784
tree
3785
push_void_library_fn (tree name, tree parmtypes)
3786
{
3787
  tree type = build_function_type (void_type_node, parmtypes);
3788
  return push_library_fn (name, type, NULL_TREE);
3789
}
3790
 
3791
/* Like push_library_fn, but also note that this function throws
3792
   and does not return.  Used for __throw_foo and the like.  */
3793
 
3794
tree
3795
push_throw_library_fn (tree name, tree type)
3796
{
3797
  tree fn = push_library_fn (name, type, NULL_TREE);
3798
  TREE_THIS_VOLATILE (fn) = 1;
3799
  TREE_NOTHROW (fn) = 0;
3800
  return fn;
3801
}
3802
 
3803
/* When we call finish_struct for an anonymous union, we create
3804
   default copy constructors and such.  But, an anonymous union
3805
   shouldn't have such things; this function undoes the damage to the
3806
   anonymous union type T.
3807
 
3808
   (The reason that we create the synthesized methods is that we don't
3809
   distinguish `union { int i; }' from `typedef union { int i; } U'.
3810
   The first is an anonymous union; the second is just an ordinary
3811
   union type.)  */
3812
 
3813
void
3814
fixup_anonymous_aggr (tree t)
3815
{
3816
  tree *q;
3817
 
3818
  /* Wipe out memory of synthesized methods.  */
3819
  TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
3820
  TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
3821
  TYPE_HAS_INIT_REF (t) = 0;
3822
  TYPE_HAS_CONST_INIT_REF (t) = 0;
3823
  TYPE_HAS_ASSIGN_REF (t) = 0;
3824
  TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
3825
 
3826
  /* Splice the implicitly generated functions out of the TYPE_METHODS
3827
     list.  */
3828
  q = &TYPE_METHODS (t);
3829
  while (*q)
3830
    {
3831
      if (DECL_ARTIFICIAL (*q))
3832
        *q = TREE_CHAIN (*q);
3833
      else
3834
        q = &TREE_CHAIN (*q);
3835
    }
3836
 
3837
  /* ISO C++ 9.5.3.  Anonymous unions may not have function members.  */
3838
  if (TYPE_METHODS (t))
3839
    {
3840
      tree decl = TYPE_MAIN_DECL (t);
3841
 
3842
      if (TREE_CODE (t) != UNION_TYPE)
3843
        error_at (DECL_SOURCE_LOCATION (decl),
3844
                  "an anonymous struct cannot have function members");
3845
      else
3846
        error_at (DECL_SOURCE_LOCATION (decl),
3847
                  "an anonymous union cannot have function members");
3848
    }
3849
 
3850
  /* Anonymous aggregates cannot have fields with ctors, dtors or complex
3851
     assignment operators (because they cannot have these methods themselves).
3852
     For anonymous unions this is already checked because they are not allowed
3853
     in any union, otherwise we have to check it.  */
3854
  if (TREE_CODE (t) != UNION_TYPE)
3855
    {
3856
      tree field, type;
3857
 
3858
      for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
3859
        if (TREE_CODE (field) == FIELD_DECL)
3860
          {
3861
            type = TREE_TYPE (field);
3862
            if (CLASS_TYPE_P (type))
3863
              {
3864
                if (TYPE_NEEDS_CONSTRUCTING (type))
3865
                  error ("member %q+#D with constructor not allowed "
3866
                         "in anonymous aggregate", field);
3867
                if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3868
                  error ("member %q+#D with destructor not allowed "
3869
                         "in anonymous aggregate", field);
3870
                if (TYPE_HAS_COMPLEX_ASSIGN_REF (type))
3871
                  error ("member %q+#D with copy assignment operator "
3872
                         "not allowed in anonymous aggregate", field);
3873
              }
3874
          }
3875
    }
3876
}
3877
 
3878
/* Make sure that a declaration with no declarator is well-formed, i.e.
3879
   just declares a tagged type or anonymous union.
3880
 
3881
   Returns the type declared; or NULL_TREE if none.  */
3882
 
3883
tree
3884
check_tag_decl (cp_decl_specifier_seq *declspecs)
3885
{
3886
  int saw_friend = declspecs->specs[(int)ds_friend] != 0;
3887
  int saw_typedef = declspecs->specs[(int)ds_typedef] != 0;
3888
  /* If a class, struct, or enum type is declared by the DECLSPECS
3889
     (i.e, if a class-specifier, enum-specifier, or non-typename
3890
     elaborated-type-specifier appears in the DECLSPECS),
3891
     DECLARED_TYPE is set to the corresponding type.  */
3892
  tree declared_type = NULL_TREE;
3893
  bool error_p = false;
3894
 
3895
  if (declspecs->multiple_types_p)
3896
    error ("multiple types in one declaration");
3897
  else if (declspecs->redefined_builtin_type)
3898
    {
3899
      if (!in_system_header)
3900
        permerror (input_location, "redeclaration of C++ built-in type %qT",
3901
                   declspecs->redefined_builtin_type);
3902
      return NULL_TREE;
3903
    }
3904
 
3905
  if (declspecs->type
3906
      && TYPE_P (declspecs->type)
3907
      && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
3908
           && MAYBE_CLASS_TYPE_P (declspecs->type))
3909
          || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
3910
    declared_type = declspecs->type;
3911
  else if (declspecs->type == error_mark_node)
3912
    error_p = true;
3913
  if (declared_type == NULL_TREE && ! saw_friend && !error_p)
3914
    permerror (input_location, "declaration does not declare anything");
3915
  /* Check for an anonymous union.  */
3916
  else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type))
3917
           && TYPE_ANONYMOUS_P (declared_type))
3918
    {
3919
      /* 7/3 In a simple-declaration, the optional init-declarator-list
3920
         can be omitted only when declaring a class (clause 9) or
3921
         enumeration (7.2), that is, when the decl-specifier-seq contains
3922
         either a class-specifier, an elaborated-type-specifier with
3923
         a class-key (9.1), or an enum-specifier.  In these cases and
3924
         whenever a class-specifier or enum-specifier is present in the
3925
         decl-specifier-seq, the identifiers in these specifiers are among
3926
         the names being declared by the declaration (as class-name,
3927
         enum-names, or enumerators, depending on the syntax).  In such
3928
         cases, and except for the declaration of an unnamed bit-field (9.6),
3929
         the decl-specifier-seq shall introduce one or more names into the
3930
         program, or shall redeclare a name introduced by a previous
3931
         declaration.  [Example:
3932
             enum { };                  // ill-formed
3933
             typedef class { };         // ill-formed
3934
         --end example]  */
3935
      if (saw_typedef)
3936
        {
3937
          error ("missing type-name in typedef-declaration");
3938
          return NULL_TREE;
3939
        }
3940
      /* Anonymous unions are objects, so they can have specifiers.  */;
3941
      SET_ANON_AGGR_TYPE_P (declared_type);
3942
 
3943
      if (TREE_CODE (declared_type) != UNION_TYPE && !in_system_header)
3944
        pedwarn (input_location, OPT_pedantic, "ISO C++ prohibits anonymous structs");
3945
    }
3946
 
3947
  else
3948
    {
3949
      if (declspecs->specs[(int)ds_inline]
3950
          || declspecs->specs[(int)ds_virtual])
3951
        error ("%qs can only be specified for functions",
3952
               declspecs->specs[(int)ds_inline]
3953
               ? "inline" : "virtual");
3954
      else if (saw_friend
3955
               && (!current_class_type
3956
                   || current_scope () != current_class_type))
3957
        error ("%<friend%> can only be specified inside a class");
3958
      else if (declspecs->specs[(int)ds_explicit])
3959
        error ("%<explicit%> can only be specified for constructors");
3960
      else if (declspecs->storage_class)
3961
        error ("a storage class can only be specified for objects "
3962
               "and functions");
3963
      else if (declspecs->specs[(int)ds_const]
3964
               || declspecs->specs[(int)ds_volatile]
3965
               || declspecs->specs[(int)ds_restrict]
3966
               || declspecs->specs[(int)ds_thread])
3967
        error ("qualifiers can only be specified for objects "
3968
               "and functions");
3969
      else if (saw_typedef)
3970
        warning (0, "%<typedef%> was ignored in this declaration");
3971
      else if (declspecs->specs[(int) ds_constexpr])
3972
        error ("%<constexpr> cannot be used for type declarations");
3973
    }
3974
 
3975
  return declared_type;
3976
}
3977
 
3978
/* Called when a declaration is seen that contains no names to declare.
3979
   If its type is a reference to a structure, union or enum inherited
3980
   from a containing scope, shadow that tag name for the current scope
3981
   with a forward reference.
3982
   If its type defines a new named structure or union
3983
   or defines an enum, it is valid but we need not do anything here.
3984
   Otherwise, it is an error.
3985
 
3986
   C++: may have to grok the declspecs to learn about static,
3987
   complain for anonymous unions.
3988
 
3989
   Returns the TYPE declared -- or NULL_TREE if none.  */
3990
 
3991
tree
3992
shadow_tag (cp_decl_specifier_seq *declspecs)
3993
{
3994
  tree t = check_tag_decl (declspecs);
3995
 
3996
  if (!t)
3997
    return NULL_TREE;
3998
 
3999
  if (declspecs->attributes)
4000
    {
4001
      warning (0, "attribute ignored in declaration of %q+#T", t);
4002
      warning (0, "attribute for %q+#T must follow the %qs keyword",
4003
               t, class_key_or_enum_as_string (t));
4004
 
4005
    }
4006
 
4007
  if (maybe_process_partial_specialization (t) == error_mark_node)
4008
    return NULL_TREE;
4009
 
4010
  /* This is where the variables in an anonymous union are
4011
     declared.  An anonymous union declaration looks like:
4012
     union { ... } ;
4013
     because there is no declarator after the union, the parser
4014
     sends that declaration here.  */
4015
  if (ANON_AGGR_TYPE_P (t))
4016
    {
4017
      fixup_anonymous_aggr (t);
4018
 
4019
      if (TYPE_FIELDS (t))
4020
        {
4021
          tree decl = grokdeclarator (/*declarator=*/NULL,
4022
                                      declspecs, NORMAL, 0, NULL);
4023
          finish_anon_union (decl);
4024
        }
4025
    }
4026
 
4027
  return t;
4028
}
4029
 
4030
/* Decode a "typename", such as "int **", returning a ..._TYPE node.  */
4031
 
4032
tree
4033
groktypename (cp_decl_specifier_seq *type_specifiers,
4034
              const cp_declarator *declarator,
4035
              bool is_template_arg)
4036
{
4037
  tree attrs;
4038
  tree type;
4039
  enum decl_context context
4040
    = is_template_arg ? TEMPLATE_TYPE_ARG : TYPENAME;
4041
  attrs = type_specifiers->attributes;
4042
  type_specifiers->attributes = NULL_TREE;
4043
  type = grokdeclarator (declarator, type_specifiers, context, 0, &attrs);
4044
  if (attrs && type != error_mark_node)
4045
    {
4046
      if (CLASS_TYPE_P (type))
4047
        warning (OPT_Wattributes, "ignoring attributes applied to class type %qT "
4048
                 "outside of definition", type);
4049
      else if (MAYBE_CLASS_TYPE_P (type))
4050
        /* A template type parameter or other dependent type.  */
4051
        warning (OPT_Wattributes, "ignoring attributes applied to dependent "
4052
                 "type %qT without an associated declaration", type);
4053
      else
4054
        cplus_decl_attributes (&type, attrs, 0);
4055
    }
4056
  return type;
4057
}
4058
 
4059
/* Process a DECLARATOR for a function-scope variable declaration,
4060
   namespace-scope variable declaration, or function declaration.
4061
   (Function definitions go through start_function; class member
4062
   declarations appearing in the body of the class go through
4063
   grokfield.)  The DECL corresponding to the DECLARATOR is returned.
4064
   If an error occurs, the error_mark_node is returned instead.
4065
 
4066
   DECLSPECS are the decl-specifiers for the declaration.  INITIALIZED is
4067
   SD_INITIALIZED if an explicit initializer is present, or SD_DEFAULTED
4068
   for an explicitly defaulted function, or SD_DELETED for an explicitly
4069
   deleted function, but 0 (SD_UNINITIALIZED) if this is a variable
4070
   implicitly initialized via a default constructor.  ATTRIBUTES and
4071
   PREFIX_ATTRIBUTES are GNU attributes associated with this declaration.
4072
   *PUSHED_SCOPE_P is set to the scope entered in this function, if any; if
4073
   set, the caller is responsible for calling pop_scope.  */
4074
 
4075
tree
4076
start_decl (const cp_declarator *declarator,
4077
            cp_decl_specifier_seq *declspecs,
4078
            int initialized,
4079
            tree attributes,
4080
            tree prefix_attributes,
4081
            tree *pushed_scope_p)
4082
{
4083
  tree decl;
4084
  tree context;
4085
  bool was_public;
4086
  int flags;
4087
 
4088
  *pushed_scope_p = NULL_TREE;
4089
 
4090
  /* An object declared as __attribute__((deprecated)) suppresses
4091
     warnings of uses of other deprecated items.  */
4092
  if (lookup_attribute ("deprecated", attributes))
4093
    deprecated_state = DEPRECATED_SUPPRESS;
4094
 
4095
  attributes = chainon (attributes, prefix_attributes);
4096
 
4097
  decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
4098
                         &attributes);
4099
 
4100
  deprecated_state = DEPRECATED_NORMAL;
4101
 
4102
  if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE
4103
      || decl == error_mark_node)
4104
    return error_mark_node;
4105
 
4106
  context = DECL_CONTEXT (decl);
4107
 
4108
  if (context)
4109
    {
4110
      *pushed_scope_p = push_scope (context);
4111
 
4112
      /* We are only interested in class contexts, later.  */
4113
      if (TREE_CODE (context) == NAMESPACE_DECL)
4114
        context = NULL_TREE;
4115
    }
4116
 
4117
  if (initialized)
4118
    /* Is it valid for this decl to have an initializer at all?
4119
       If not, set INITIALIZED to zero, which will indirectly
4120
       tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
4121
    switch (TREE_CODE (decl))
4122
      {
4123
      case TYPE_DECL:
4124
        error ("typedef %qD is initialized (use decltype instead)", decl);
4125
        return error_mark_node;
4126
 
4127
      case FUNCTION_DECL:
4128
        if (initialized == SD_DELETED)
4129
          /* We'll handle the rest of the semantics later, but we need to
4130
             set this now so it's visible to duplicate_decls.  */
4131
          DECL_DELETED_FN (decl) = 1;
4132
        break;
4133
 
4134
      default:
4135
        break;
4136
      }
4137
 
4138
  if (initialized)
4139
    {
4140
      if (! toplevel_bindings_p ()
4141
          && DECL_EXTERNAL (decl))
4142
        warning (0, "declaration of %q#D has %<extern%> and is initialized",
4143
                 decl);
4144
      DECL_EXTERNAL (decl) = 0;
4145
      if (toplevel_bindings_p ())
4146
        TREE_STATIC (decl) = 1;
4147
    }
4148
 
4149
  /* If this is a typedef that names the class for linkage purposes
4150
     (7.1.3p8), apply any attributes directly to the type.  */
4151
  if (TREE_CODE (decl) == TYPE_DECL
4152
      && TAGGED_TYPE_P (TREE_TYPE (decl))
4153
      && decl == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl))))
4154
    flags = ATTR_FLAG_TYPE_IN_PLACE;
4155
  else
4156
    flags = 0;
4157
 
4158
  /* Set attributes here so if duplicate decl, will have proper attributes.  */
4159
  cplus_decl_attributes (&decl, attributes, flags);
4160
 
4161
  /* Dllimported symbols cannot be defined.  Static data members (which
4162
     can be initialized in-class and dllimported) go through grokfield,
4163
     not here, so we don't need to exclude those decls when checking for
4164
     a definition.  */
4165
  if (initialized && DECL_DLLIMPORT_P (decl))
4166
    {
4167
      error ("definition of %q#D is marked %<dllimport%>", decl);
4168
      DECL_DLLIMPORT_P (decl) = 0;
4169
    }
4170
 
4171
  /* If #pragma weak was used, mark the decl weak now.  */
4172
  maybe_apply_pragma_weak (decl);
4173
 
4174
  if (TREE_CODE (decl) == FUNCTION_DECL
4175
      && DECL_DECLARED_INLINE_P (decl)
4176
      && DECL_UNINLINABLE (decl)
4177
      && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
4178
    warning (0, "inline function %q+D given attribute noinline", decl);
4179
 
4180
  if (context && COMPLETE_TYPE_P (complete_type (context)))
4181
    {
4182
      if (TREE_CODE (decl) == VAR_DECL)
4183
        {
4184
          tree field = lookup_field (context, DECL_NAME (decl), 0, false);
4185
          if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
4186
            error ("%q#D is not a static member of %q#T", decl, context);
4187
          else
4188
            {
4189
              if (DECL_CONTEXT (field) != context)
4190
                {
4191
                  if (!same_type_p (DECL_CONTEXT (field), context))
4192
                    permerror (input_location, "ISO C++ does not permit %<%T::%D%> "
4193
                               "to be defined as %<%T::%D%>",
4194
                               DECL_CONTEXT (field), DECL_NAME (decl),
4195
                               context, DECL_NAME (decl));
4196
                  DECL_CONTEXT (decl) = DECL_CONTEXT (field);
4197
                }
4198
              if (processing_specialization
4199
                  && template_class_depth (context) == 0
4200
                  && CLASSTYPE_TEMPLATE_SPECIALIZATION (context))
4201
                error ("template header not allowed in member definition "
4202
                       "of explicitly specialized class");
4203
              /* Static data member are tricky; an in-class initialization
4204
                 still doesn't provide a definition, so the in-class
4205
                 declaration will have DECL_EXTERNAL set, but will have an
4206
                 initialization.  Thus, duplicate_decls won't warn
4207
                 about this situation, and so we check here.  */
4208
              if (initialized && DECL_INITIALIZED_IN_CLASS_P (field))
4209
                error ("duplicate initialization of %qD", decl);
4210
              if (duplicate_decls (decl, field, /*newdecl_is_friend=*/false))
4211
                decl = field;
4212
              if (declspecs->specs[(int) ds_constexpr]
4213
                  && !DECL_DECLARED_CONSTEXPR_P (field))
4214
                error ("%qD declared %<constexpr%> outside its class", field);
4215
            }
4216
        }
4217
      else
4218
        {
4219
          tree field = check_classfn (context, decl,
4220
                                      (processing_template_decl
4221
                                       > template_class_depth (context))
4222
                                      ? current_template_parms
4223
                                      : NULL_TREE);
4224
          if (field && field != error_mark_node
4225
              && duplicate_decls (decl, field,
4226
                                 /*newdecl_is_friend=*/false))
4227
            decl = field;
4228
        }
4229
 
4230
      /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set.  */
4231
      DECL_IN_AGGR_P (decl) = 0;
4232
      /* Do not mark DECL as an explicit specialization if it was not
4233
         already marked as an instantiation; a declaration should
4234
         never be marked as a specialization unless we know what
4235
         template is being specialized.  */
4236
      if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
4237
        {
4238
          SET_DECL_TEMPLATE_SPECIALIZATION (decl);
4239
 
4240
          /* [temp.expl.spec] An explicit specialization of a static data
4241
             member of a template is a definition if the declaration
4242
             includes an initializer; otherwise, it is a declaration.
4243
 
4244
             We check for processing_specialization so this only applies
4245
             to the new specialization syntax.  */
4246
          if (!initialized && processing_specialization)
4247
            DECL_EXTERNAL (decl) = 1;
4248
        }
4249
 
4250
      if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
4251
        permerror (input_location, "declaration of %q#D outside of class is not definition",
4252
                   decl);
4253
 
4254
      if (!ensure_literal_type_for_constexpr_object (decl))
4255
        return error_mark_node;
4256
    }
4257
 
4258
  was_public = TREE_PUBLIC (decl);
4259
 
4260
  /* Enter this declaration into the symbol table.  */
4261
  decl = maybe_push_decl (decl);
4262
 
4263
  if (processing_template_decl)
4264
    decl = push_template_decl (decl);
4265
  if (decl == error_mark_node)
4266
    return error_mark_node;
4267
 
4268
  /* Tell the back end to use or not use .common as appropriate.  If we say
4269
     -fconserve-space, we want this to save .data space, at the expense of
4270
     wrong semantics.  If we say -fno-conserve-space, we want this to
4271
     produce errors about redefs; to do this we force variables into the
4272
     data segment.  */
4273
  if (flag_conserve_space
4274
      && TREE_CODE (decl) == VAR_DECL
4275
      && TREE_PUBLIC (decl)
4276
      && !DECL_THREAD_LOCAL_P (decl)
4277
      && !have_global_bss_p ())
4278
    DECL_COMMON (decl) = 1;
4279
 
4280
  if (TREE_CODE (decl) == VAR_DECL
4281
      && DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) && !was_public
4282
      && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl))
4283
    {
4284
      /* This is a const variable with implicit 'static'.  Set
4285
         DECL_THIS_STATIC so we can tell it from variables that are
4286
         !TREE_PUBLIC because of the anonymous namespace.  */
4287
      gcc_assert (cp_type_readonly (TREE_TYPE (decl)));
4288
      DECL_THIS_STATIC (decl) = 1;
4289
    }
4290
 
4291
  if (!processing_template_decl && TREE_CODE (decl) == VAR_DECL)
4292
    start_decl_1 (decl, initialized);
4293
 
4294
  return decl;
4295
}
4296
 
4297
/* Process the declaration of a variable DECL.  INITIALIZED is true
4298
   iff DECL is explicitly initialized.  (INITIALIZED is false if the
4299
   variable is initialized via an implicitly-called constructor.)
4300
   This function must be called for ordinary variables (including, for
4301
   example, implicit instantiations of templates), but must not be
4302
   called for template declarations.  */
4303
 
4304
void
4305
start_decl_1 (tree decl, bool initialized)
4306
{
4307
  tree type;
4308
  bool complete_p;
4309
  bool aggregate_definition_p;
4310
 
4311
  gcc_assert (!processing_template_decl);
4312
 
4313
  if (error_operand_p (decl))
4314
    return;
4315
 
4316
  gcc_assert (TREE_CODE (decl) == VAR_DECL);
4317
 
4318
  type = TREE_TYPE (decl);
4319
  complete_p = COMPLETE_TYPE_P (type);
4320
  aggregate_definition_p = MAYBE_CLASS_TYPE_P (type) && !DECL_EXTERNAL (decl);
4321
 
4322
  /* If an explicit initializer is present, or if this is a definition
4323
     of an aggregate, then we need a complete type at this point.
4324
     (Scalars are always complete types, so there is nothing to
4325
     check.)  This code just sets COMPLETE_P; errors (if necessary)
4326
     are issued below.  */
4327
  if ((initialized || aggregate_definition_p)
4328
      && !complete_p
4329
      && COMPLETE_TYPE_P (complete_type (type)))
4330
    {
4331
      complete_p = true;
4332
      /* We will not yet have set TREE_READONLY on DECL if the type
4333
         was "const", but incomplete, before this point.  But, now, we
4334
         have a complete type, so we can try again.  */
4335
      cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
4336
    }
4337
 
4338
  if (initialized)
4339
    /* Is it valid for this decl to have an initializer at all?  */
4340
    {
4341
      /* Don't allow initializations for incomplete types except for
4342
         arrays which might be completed by the initialization.  */
4343
      if (complete_p)
4344
        ;                       /* A complete type is ok.  */
4345
      else if (type_uses_auto (type))
4346
        ;                       /* An auto type is ok.  */
4347
      else if (TREE_CODE (type) != ARRAY_TYPE)
4348
        {
4349
          error ("variable %q#D has initializer but incomplete type", decl);
4350
          type = TREE_TYPE (decl) = error_mark_node;
4351
        }
4352
      else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
4353
        {
4354
          if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
4355
            error ("elements of array %q#D have incomplete type", decl);
4356
          /* else we already gave an error in start_decl.  */
4357
        }
4358
    }
4359
  else if (aggregate_definition_p && !complete_p)
4360
    {
4361
      if (type_uses_auto (type))
4362
        error ("declaration of %q#D has no initializer", decl);
4363
      else
4364
        error ("aggregate %q#D has incomplete type and cannot be defined",
4365
               decl);
4366
      /* Change the type so that assemble_variable will give
4367
         DECL an rtl we can live with: (mem (const_int 0)).  */
4368
      type = TREE_TYPE (decl) = error_mark_node;
4369
    }
4370
 
4371
  /* Create a new scope to hold this declaration if necessary.
4372
     Whether or not a new scope is necessary cannot be determined
4373
     until after the type has been completed; if the type is a
4374
     specialization of a class template it is not until after
4375
     instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
4376
     will be set correctly.  */
4377
  maybe_push_cleanup_level (type);
4378
}
4379
 
4380
/* Handle initialization of references.  DECL, TYPE, and INIT have the
4381
   same meaning as in cp_finish_decl.  *CLEANUP must be NULL on entry,
4382
   but will be set to a new CLEANUP_STMT if a temporary is created
4383
   that must be destroyed subsequently.
4384
 
4385
   Returns an initializer expression to use to initialize DECL, or
4386
   NULL if the initialization can be performed statically.
4387
 
4388
   Quotes on semantics can be found in ARM 8.4.3.  */
4389
 
4390
static tree
4391
grok_reference_init (tree decl, tree type, tree init, tree *cleanup)
4392
{
4393
  tree tmp;
4394
 
4395
  if (init == NULL_TREE)
4396
    {
4397
      if ((DECL_LANG_SPECIFIC (decl) == 0
4398
           || DECL_IN_AGGR_P (decl) == 0)
4399
          && ! DECL_THIS_EXTERN (decl))
4400
        error ("%qD declared as reference but not initialized", decl);
4401
      return NULL_TREE;
4402
    }
4403
 
4404
  if (TREE_CODE (init) == TREE_LIST)
4405
    init = build_x_compound_expr_from_list (init, "initializer");
4406
 
4407
  if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
4408
      && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
4409
    /* Note: default conversion is only called in very special cases.  */
4410
    init = decay_conversion (init);
4411
 
4412
  /* Convert INIT to the reference type TYPE.  This may involve the
4413
     creation of a temporary, whose lifetime must be the same as that
4414
     of the reference.  If so, a DECL_EXPR for the temporary will be
4415
     added just after the DECL_EXPR for DECL.  That's why we don't set
4416
     DECL_INITIAL for local references (instead assigning to them
4417
     explicitly); we need to allow the temporary to be initialized
4418
     first.  */
4419
  tmp = initialize_reference (type, init, decl, cleanup, tf_warning_or_error);
4420
 
4421
  if (tmp == error_mark_node)
4422
    return NULL_TREE;
4423
  else if (tmp == NULL_TREE)
4424
    {
4425
      error ("cannot initialize %qT from %qT", type, TREE_TYPE (init));
4426
      return NULL_TREE;
4427
    }
4428
 
4429
  if (TREE_STATIC (decl) && !TREE_CONSTANT (tmp))
4430
    return tmp;
4431
 
4432
  DECL_INITIAL (decl) = tmp;
4433
 
4434
  return NULL_TREE;
4435
}
4436
 
4437
/* Subroutine of check_initializer.  We're initializing a DECL of
4438
   std::initializer_list<T> TYPE from a braced-init-list INIT, and need to
4439
   extend the lifetime of the underlying array to match that of the decl,
4440
   just like for reference initialization.  CLEANUP is as for
4441
   grok_reference_init.  */
4442
 
4443
static tree
4444
build_init_list_var_init (tree decl, tree type, tree init, tree *cleanup)
4445
{
4446
  tree aggr_init, array, arrtype;
4447
  init = perform_implicit_conversion (type, init, tf_warning_or_error);
4448
  if (error_operand_p (init))
4449
    return error_mark_node;
4450
 
4451
  aggr_init = TARGET_EXPR_INITIAL (init);
4452
  init = build2 (INIT_EXPR, type, decl, init);
4453
 
4454
  array = AGGR_INIT_EXPR_ARG (aggr_init, 1);
4455
  arrtype = TREE_TYPE (array);
4456
  STRIP_NOPS (array);
4457
  gcc_assert (TREE_CODE (array) == ADDR_EXPR);
4458
  array = TREE_OPERAND (array, 0);
4459
  /* If the array is constant, finish_compound_literal already made it a
4460
     static variable and we don't need to do anything here.  */
4461
  if (decl && TREE_CODE (array) == TARGET_EXPR)
4462
    {
4463
      tree subinit;
4464
      tree var = set_up_extended_ref_temp (decl, array, cleanup, &subinit);
4465
      var = build_address (var);
4466
      var = convert (arrtype, var);
4467
      AGGR_INIT_EXPR_ARG (aggr_init, 1) = var;
4468
      init = build2 (COMPOUND_EXPR, TREE_TYPE (init), subinit, init);
4469
    }
4470
  return init;
4471
}
4472
 
4473
/* Designated initializers in arrays are not supported in GNU C++.
4474
   The parser cannot detect this error since it does not know whether
4475
   a given brace-enclosed initializer is for a class type or for an
4476
   array.  This function checks that CE does not use a designated
4477
   initializer.  If it does, an error is issued.  Returns true if CE
4478
   is valid, i.e., does not have a designated initializer.  */
4479
 
4480
static bool
4481
check_array_designated_initializer (const constructor_elt *ce)
4482
{
4483
  /* Designated initializers for array elements are not supported.  */
4484
  if (ce->index)
4485
    {
4486
      /* The parser only allows identifiers as designated
4487
         initializers.  */
4488
      if (ce->index == error_mark_node)
4489
        error ("name used in a GNU-style designated "
4490
               "initializer for an array");
4491
      else
4492
        {
4493
          gcc_assert (TREE_CODE (ce->index) == IDENTIFIER_NODE);
4494
          error ("name %qD used in a GNU-style designated "
4495
                 "initializer for an array", ce->index);
4496
        }
4497
      return false;
4498
    }
4499
 
4500
  return true;
4501
}
4502
 
4503
/* When parsing `int a[] = {1, 2};' we don't know the size of the
4504
   array until we finish parsing the initializer.  If that's the
4505
   situation we're in, update DECL accordingly.  */
4506
 
4507
static void
4508
maybe_deduce_size_from_array_init (tree decl, tree init)
4509
{
4510
  tree type = TREE_TYPE (decl);
4511
 
4512
  if (TREE_CODE (type) == ARRAY_TYPE
4513
      && TYPE_DOMAIN (type) == NULL_TREE
4514
      && TREE_CODE (decl) != TYPE_DECL)
4515
    {
4516
      /* do_default is really a C-ism to deal with tentative definitions.
4517
         But let's leave it here to ease the eventual merge.  */
4518
      int do_default = !DECL_EXTERNAL (decl);
4519
      tree initializer = init ? init : DECL_INITIAL (decl);
4520
      int failure = 0;
4521
 
4522
      /* Check that there are no designated initializers in INIT, as
4523
         those are not supported in GNU C++, and as the middle-end
4524
         will crash if presented with a non-numeric designated
4525
         initializer.  */
4526
      if (initializer && TREE_CODE (initializer) == CONSTRUCTOR)
4527
        {
4528
          VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initializer);
4529
          constructor_elt *ce;
4530
          HOST_WIDE_INT i;
4531
          for (i = 0;
4532
               VEC_iterate (constructor_elt, v, i, ce);
4533
               ++i)
4534
            if (!check_array_designated_initializer (ce))
4535
              failure = 1;
4536
        }
4537
 
4538
      if (!failure)
4539
        {
4540
          failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
4541
                                            do_default);
4542
          if (failure == 1)
4543
            {
4544
              error ("initializer fails to determine size of %qD", decl);
4545
              TREE_TYPE (decl) = error_mark_node;
4546
            }
4547
          else if (failure == 2)
4548
            {
4549
              if (do_default)
4550
                {
4551
                  error ("array size missing in %qD", decl);
4552
                  TREE_TYPE (decl) = error_mark_node;
4553
                }
4554
              /* If a `static' var's size isn't known, make it extern as
4555
                 well as static, so it does not get allocated.  If it's not
4556
                 `static', then don't mark it extern; finish_incomplete_decl
4557
                 will give it a default size and it will get allocated.  */
4558
              else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
4559
                DECL_EXTERNAL (decl) = 1;
4560
            }
4561
          else if (failure == 3)
4562
            {
4563
              error ("zero-size array %qD", decl);
4564
              TREE_TYPE (decl) = error_mark_node;
4565
            }
4566
        }
4567
 
4568
      cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
4569
 
4570
      relayout_decl (decl);
4571
    }
4572
}
4573
 
4574
/* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
4575
   any appropriate error messages regarding the layout.  */
4576
 
4577
static void
4578
layout_var_decl (tree decl)
4579
{
4580
  tree type;
4581
 
4582
  type = TREE_TYPE (decl);
4583
  if (type == error_mark_node)
4584
    return;
4585
 
4586
  /* If we haven't already layed out this declaration, do so now.
4587
     Note that we must not call complete type for an external object
4588
     because it's type might involve templates that we are not
4589
     supposed to instantiate yet.  (And it's perfectly valid to say
4590
     `extern X x' for some incomplete type `X'.)  */
4591
  if (!DECL_EXTERNAL (decl))
4592
    complete_type (type);
4593
  if (!DECL_SIZE (decl)
4594
      && TREE_TYPE (decl) != error_mark_node
4595
      && (COMPLETE_TYPE_P (type)
4596
          || (TREE_CODE (type) == ARRAY_TYPE
4597
              && !TYPE_DOMAIN (type)
4598
              && COMPLETE_TYPE_P (TREE_TYPE (type)))))
4599
    layout_decl (decl, 0);
4600
 
4601
  if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
4602
    {
4603
      /* An automatic variable with an incomplete type: that is an error.
4604
         Don't talk about array types here, since we took care of that
4605
         message in grokdeclarator.  */
4606
      error ("storage size of %qD isn't known", decl);
4607
      TREE_TYPE (decl) = error_mark_node;
4608
    }
4609
#if 0
4610
  /* Keep this code around in case we later want to control debug info
4611
     based on whether a type is "used".  (jason 1999-11-11) */
4612
 
4613
  else if (!DECL_EXTERNAL (decl) && MAYBE_CLASS_TYPE_P (ttype))
4614
    /* Let debugger know it should output info for this type.  */
4615
    note_debug_info_needed (ttype);
4616
 
4617
  if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
4618
    note_debug_info_needed (DECL_CONTEXT (decl));
4619
#endif
4620
 
4621
  if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
4622
      && DECL_SIZE (decl) != NULL_TREE
4623
      && ! TREE_CONSTANT (DECL_SIZE (decl)))
4624
    {
4625
      if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
4626
        constant_expression_warning (DECL_SIZE (decl));
4627
      else
4628
        {
4629
          error ("storage size of %qD isn't constant", decl);
4630
          TREE_TYPE (decl) = error_mark_node;
4631
        }
4632
    }
4633
}
4634
 
4635
/* If a local static variable is declared in an inline function, or if
4636
   we have a weak definition, we must endeavor to create only one
4637
   instance of the variable at link-time.  */
4638
 
4639
void
4640
maybe_commonize_var (tree decl)
4641
{
4642
  /* Static data in a function with comdat linkage also has comdat
4643
     linkage.  */
4644
  if (TREE_STATIC (decl)
4645
      /* Don't mess with __FUNCTION__.  */
4646
      && ! DECL_ARTIFICIAL (decl)
4647
      && DECL_FUNCTION_SCOPE_P (decl)
4648
      && vague_linkage_p (DECL_CONTEXT (decl)))
4649
    {
4650
      if (flag_weak)
4651
        {
4652
          /* With weak symbols, we simply make the variable COMDAT;
4653
             that will cause copies in multiple translations units to
4654
             be merged.  */
4655
          comdat_linkage (decl);
4656
        }
4657
      else
4658
        {
4659
          if (DECL_INITIAL (decl) == NULL_TREE
4660
              || DECL_INITIAL (decl) == error_mark_node)
4661
            {
4662
              /* Without weak symbols, we can use COMMON to merge
4663
                 uninitialized variables.  */
4664
              TREE_PUBLIC (decl) = 1;
4665
              DECL_COMMON (decl) = 1;
4666
            }
4667
          else
4668
            {
4669
              /* While for initialized variables, we must use internal
4670
                 linkage -- which means that multiple copies will not
4671
                 be merged.  */
4672
              TREE_PUBLIC (decl) = 0;
4673
              DECL_COMMON (decl) = 0;
4674
              warning_at (input_location, 0,
4675
                          "sorry: semantics of inline function static "
4676
                          "data %q+#D are wrong (you'll wind up "
4677
                          "with multiple copies)", decl);
4678
              warning_at (DECL_SOURCE_LOCATION (decl), 0,
4679
                          "  you can work around this by removing "
4680
                          "the initializer");
4681
            }
4682
        }
4683
    }
4684
  else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
4685
    /* Set it up again; we might have set DECL_INITIAL since the last
4686
       time.  */
4687
    comdat_linkage (decl);
4688
}
4689
 
4690
/* Issue an error message if DECL is an uninitialized const variable.  */
4691
 
4692
static void
4693
check_for_uninitialized_const_var (tree decl)
4694
{
4695
  tree type = TREE_TYPE (decl);
4696
 
4697
  if (TREE_CODE (decl) == VAR_DECL && DECL_DECLARED_CONSTEXPR_P (decl)
4698
      && DECL_INITIAL (decl) == NULL)
4699
    error ("missing initializer for constexpr %qD", decl);
4700
 
4701
  /* ``Unless explicitly declared extern, a const object does not have
4702
     external linkage and must be initialized. ($8.4; $12.1)'' ARM
4703
     7.1.6 */
4704
  else if (TREE_CODE (decl) == VAR_DECL
4705
      && TREE_CODE (type) != REFERENCE_TYPE
4706
      && CP_TYPE_CONST_P (type)
4707
      && !TYPE_NEEDS_CONSTRUCTING (type)
4708
      && !DECL_INITIAL (decl))
4709
    error ("uninitialized const %qD", decl);
4710
}
4711
 
4712
 
4713
/* Structure holding the current initializer being processed by reshape_init.
4714
   CUR is a pointer to the current element being processed, END is a pointer
4715
   after the last element present in the initializer.  */
4716
typedef struct reshape_iterator_t
4717
{
4718
  constructor_elt *cur;
4719
  constructor_elt *end;
4720
} reshape_iter;
4721
 
4722
static tree reshape_init_r (tree, reshape_iter *, bool);
4723
 
4724
/* FIELD is a FIELD_DECL or NULL.  In the former case, the value
4725
   returned is the next FIELD_DECL (possibly FIELD itself) that can be
4726
   initialized.  If there are no more such fields, the return value
4727
   will be NULL.  */
4728
 
4729
tree
4730
next_initializable_field (tree field)
4731
{
4732
  while (field
4733
         && (TREE_CODE (field) != FIELD_DECL
4734
             || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
4735
             || DECL_ARTIFICIAL (field)))
4736
    field = TREE_CHAIN (field);
4737
 
4738
  return field;
4739
}
4740
 
4741
/* Subroutine of reshape_init_array and reshape_init_vector, which does
4742
   the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
4743
   INTEGER_CST representing the size of the array minus one (the maximum index),
4744
   or NULL_TREE if the array was declared without specifying the size. D is
4745
   the iterator within the constructor.  */
4746
 
4747
static tree
4748
reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d)
4749
{
4750
  tree new_init;
4751
  bool sized_array_p = (max_index != NULL_TREE);
4752
  unsigned HOST_WIDE_INT max_index_cst = 0;
4753
  unsigned HOST_WIDE_INT index;
4754
 
4755
  /* The initializer for an array is always a CONSTRUCTOR.  */
4756
  new_init = build_constructor (init_list_type_node, NULL);
4757
 
4758
  if (sized_array_p)
4759
    {
4760
      /* Minus 1 is used for zero sized arrays.  */
4761
      if (integer_all_onesp (max_index))
4762
        return new_init;
4763
 
4764
      if (host_integerp (max_index, 1))
4765
        max_index_cst = tree_low_cst (max_index, 1);
4766
      /* sizetype is sign extended, not zero extended.  */
4767
      else
4768
        max_index_cst = tree_low_cst (fold_convert (size_type_node, max_index),
4769
                                      1);
4770
    }
4771
 
4772
  /* Loop until there are no more initializers.  */
4773
  for (index = 0;
4774
       d->cur != d->end && (!sized_array_p || index <= max_index_cst);
4775
       ++index)
4776
    {
4777
      tree elt_init;
4778
 
4779
      check_array_designated_initializer (d->cur);
4780
      elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false);
4781
      if (elt_init == error_mark_node)
4782
        return error_mark_node;
4783
      CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), NULL_TREE, elt_init);
4784
    }
4785
 
4786
  return new_init;
4787
}
4788
 
4789
/* Subroutine of reshape_init_r, processes the initializers for arrays.
4790
   Parameters are the same of reshape_init_r.  */
4791
 
4792
static tree
4793
reshape_init_array (tree type, reshape_iter *d)
4794
{
4795
  tree max_index = NULL_TREE;
4796
 
4797
  gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
4798
 
4799
  if (TYPE_DOMAIN (type))
4800
    max_index = array_type_nelts (type);
4801
 
4802
  return reshape_init_array_1 (TREE_TYPE (type), max_index, d);
4803
}
4804
 
4805
/* Subroutine of reshape_init_r, processes the initializers for vectors.
4806
   Parameters are the same of reshape_init_r.  */
4807
 
4808
static tree
4809
reshape_init_vector (tree type, reshape_iter *d)
4810
{
4811
  tree max_index = NULL_TREE;
4812
  tree rtype;
4813
 
4814
  gcc_assert (TREE_CODE (type) == VECTOR_TYPE);
4815
 
4816
  if (COMPOUND_LITERAL_P (d->cur->value))
4817
    {
4818
      tree value = d->cur->value;
4819
      if (!same_type_p (TREE_TYPE (value), type))
4820
        {
4821
          error ("invalid type %qT as initializer for a vector of type %qT",
4822
                TREE_TYPE (d->cur->value), type);
4823
          value = error_mark_node;
4824
        }
4825
      ++d->cur;
4826
      return value;
4827
    }
4828
 
4829
  /* For a vector, the representation type is a struct
4830
      containing a single member which is an array of the
4831
      appropriate size.  */
4832
  rtype = TYPE_DEBUG_REPRESENTATION_TYPE (type);
4833
  if (rtype && TYPE_DOMAIN (TREE_TYPE (TYPE_FIELDS (rtype))))
4834
    max_index = array_type_nelts (TREE_TYPE (TYPE_FIELDS (rtype)));
4835
 
4836
  return reshape_init_array_1 (TREE_TYPE (type), max_index, d);
4837
}
4838
 
4839
/* Subroutine of reshape_init_r, processes the initializers for classes
4840
   or union. Parameters are the same of reshape_init_r.  */
4841
 
4842
static tree
4843
reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p)
4844
{
4845
  tree field;
4846
  tree new_init;
4847
 
4848
  gcc_assert (CLASS_TYPE_P (type));
4849
 
4850
  /* The initializer for a class is always a CONSTRUCTOR.  */
4851
  new_init = build_constructor (init_list_type_node, NULL);
4852
  field = next_initializable_field (TYPE_FIELDS (type));
4853
 
4854
  if (!field)
4855
    {
4856
      /* [dcl.init.aggr]
4857
 
4858
        An initializer for an aggregate member that is an
4859
        empty class shall have the form of an empty
4860
        initializer-list {}.  */
4861
      if (!first_initializer_p)
4862
        {
4863
          error ("initializer for %qT must be brace-enclosed", type);
4864
          return error_mark_node;
4865
        }
4866
      return new_init;
4867
    }
4868
 
4869
  /* Loop through the initializable fields, gathering initializers.  */
4870
  while (d->cur != d->end)
4871
    {
4872
      tree field_init;
4873
 
4874
      /* Handle designated initializers, as an extension.  */
4875
      if (d->cur->index)
4876
        {
4877
          field = lookup_field_1 (type, d->cur->index, /*want_type=*/false);
4878
 
4879
          if (!field || TREE_CODE (field) != FIELD_DECL)
4880
            {
4881
              error ("%qT has no non-static data member named %qD", type,
4882
                    d->cur->index);
4883
              return error_mark_node;
4884
            }
4885
        }
4886
 
4887
      /* If we processed all the member of the class, we are done.  */
4888
      if (!field)
4889
        break;
4890
 
4891
      field_init = reshape_init_r (TREE_TYPE (field), d,
4892
                                   /*first_initializer_p=*/false);
4893
      if (field_init == error_mark_node)
4894
        return error_mark_node;
4895
 
4896
      CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
4897
 
4898
      /* [dcl.init.aggr]
4899
 
4900
        When a union  is  initialized with a brace-enclosed
4901
        initializer, the braces shall only contain an
4902
        initializer for the first member of the union.  */
4903
      if (TREE_CODE (type) == UNION_TYPE)
4904
        break;
4905
 
4906
      field = next_initializable_field (TREE_CHAIN (field));
4907
    }
4908
 
4909
  return new_init;
4910
}
4911
 
4912
/* Subroutine of reshape_init, which processes a single initializer (part of
4913
   a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
4914
   iterator within the CONSTRUCTOR which points to the initializer to process.
4915
   FIRST_INITIALIZER_P is true if this is the first initializer of the
4916
   outermost CONSTRUCTOR node.  */
4917
 
4918
static tree
4919
reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p)
4920
{
4921
  tree init = d->cur->value;
4922
 
4923
  if (error_operand_p (init))
4924
    return error_mark_node;
4925
 
4926
  /* A non-aggregate type is always initialized with a single
4927
     initializer.  */
4928
  if (!CP_AGGREGATE_TYPE_P (type))
4929
    {
4930
      /* It is invalid to initialize a non-aggregate type with a
4931
         brace-enclosed initializer before C++0x.
4932
         We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
4933
         of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
4934
         a CONSTRUCTOR (with a record type).  */
4935
      if (TREE_CODE (init) == CONSTRUCTOR
4936
          && BRACE_ENCLOSED_INITIALIZER_P (init))  /* p7626.C */
4937
        {
4938
          if (SCALAR_TYPE_P (type))
4939
            {
4940
              error ("braces around scalar initializer for type %qT", type);
4941
              init = error_mark_node;
4942
            }
4943
          else
4944
            maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
4945
        }
4946
 
4947
      d->cur++;
4948
      return init;
4949
    }
4950
 
4951
  /* [dcl.init.aggr]
4952
 
4953
     All implicit type conversions (clause _conv_) are considered when
4954
     initializing the aggregate member with an initializer from an
4955
     initializer-list.  If the initializer can initialize a member,
4956
     the member is initialized.  Otherwise, if the member is itself a
4957
     non-empty subaggregate, brace elision is assumed and the
4958
     initializer is considered for the initialization of the first
4959
     member of the subaggregate.  */
4960
  if (TREE_CODE (init) != CONSTRUCTOR
4961
      /* But don't try this for the first initializer, since that would be
4962
         looking through the outermost braces; A a2 = { a1 }; is not a
4963
         valid aggregate initialization.  */
4964
      && !first_initializer_p
4965
      && (same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (init))
4966
          || can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL)))
4967
    {
4968
      d->cur++;
4969
      return init;
4970
    }
4971
 
4972
  /* [dcl.init.string]
4973
 
4974
      A char array (whether plain char, signed char, or unsigned char)
4975
      can be initialized by a string-literal (optionally enclosed in
4976
      braces); a wchar_t array can be initialized by a wide
4977
      string-literal (optionally enclosed in braces).  */
4978
  if (TREE_CODE (type) == ARRAY_TYPE
4979
      && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
4980
    {
4981
      tree str_init = init;
4982
 
4983
      /* Strip one level of braces if and only if they enclose a single
4984
         element (as allowed by [dcl.init.string]).  */
4985
      if (!first_initializer_p
4986
          && TREE_CODE (str_init) == CONSTRUCTOR
4987
          && VEC_length (constructor_elt, CONSTRUCTOR_ELTS (str_init)) == 1)
4988
        {
4989
          str_init = VEC_index (constructor_elt,
4990
                                CONSTRUCTOR_ELTS (str_init), 0)->value;
4991
        }
4992
 
4993
      /* If it's a string literal, then it's the initializer for the array
4994
         as a whole. Otherwise, continue with normal initialization for
4995
         array types (one value per array element).  */
4996
      if (TREE_CODE (str_init) == STRING_CST)
4997
        {
4998
          d->cur++;
4999
          return str_init;
5000
        }
5001
    }
5002
 
5003
  /* The following cases are about aggregates. If we are not within a full
5004
     initializer already, and there is not a CONSTRUCTOR, it means that there
5005
     is a missing set of braces (that is, we are processing the case for
5006
     which reshape_init exists).  */
5007
  if (!first_initializer_p)
5008
    {
5009
      if (TREE_CODE (init) == CONSTRUCTOR)
5010
        {
5011
          if (TREE_TYPE (init) && TYPE_PTRMEMFUNC_P (TREE_TYPE (init)))
5012
            /* There is no need to reshape pointer-to-member function
5013
               initializers, as they are always constructed correctly
5014
               by the front end.  */
5015
           ;
5016
          else if (COMPOUND_LITERAL_P (init))
5017
          /* For a nested compound literal, there is no need to reshape since
5018
             brace elision is not allowed. Even if we decided to allow it,
5019
             we should add a call to reshape_init in finish_compound_literal,
5020
             before calling digest_init, so changing this code would still
5021
             not be necessary.  */
5022
            gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
5023
          else
5024
            {
5025
              ++d->cur;
5026
              gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5027
              return reshape_init (type, init);
5028
            }
5029
        }
5030
 
5031
      warning (OPT_Wmissing_braces, "missing braces around initializer for %qT",
5032
               type);
5033
    }
5034
 
5035
  /* Dispatch to specialized routines.  */
5036
  if (CLASS_TYPE_P (type))
5037
    return reshape_init_class (type, d, first_initializer_p);
5038
  else if (TREE_CODE (type) == ARRAY_TYPE)
5039
    return reshape_init_array (type, d);
5040
  else if (TREE_CODE (type) == VECTOR_TYPE)
5041
    return reshape_init_vector (type, d);
5042
  else
5043
    gcc_unreachable();
5044
}
5045
 
5046
/* Undo the brace-elision allowed by [dcl.init.aggr] in a
5047
   brace-enclosed aggregate initializer.
5048
 
5049
   INIT is the CONSTRUCTOR containing the list of initializers describing
5050
   a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
5051
   It may not presently match the shape of the TYPE; for example:
5052
 
5053
     struct S { int a; int b; };
5054
     struct S a[] = { 1, 2, 3, 4 };
5055
 
5056
   Here INIT will hold a VEC of four elements, rather than a
5057
   VEC of two elements, each itself a VEC of two elements.  This
5058
   routine transforms INIT from the former form into the latter.  The
5059
   revised CONSTRUCTOR node is returned.  */
5060
 
5061
tree
5062
reshape_init (tree type, tree init)
5063
{
5064
  VEC(constructor_elt, gc) *v;
5065
  reshape_iter d;
5066
  tree new_init;
5067
 
5068
  gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5069
 
5070
  v = CONSTRUCTOR_ELTS (init);
5071
 
5072
  /* An empty constructor does not need reshaping, and it is always a valid
5073
     initializer.  */
5074
  if (VEC_empty (constructor_elt, v))
5075
    return init;
5076
 
5077
  /* Recurse on this CONSTRUCTOR.  */
5078
  d.cur = VEC_index (constructor_elt, v, 0);
5079
  d.end = d.cur + VEC_length (constructor_elt, v);
5080
 
5081
  new_init = reshape_init_r (type, &d, true);
5082
  if (new_init == error_mark_node)
5083
    return error_mark_node;
5084
 
5085
  /* Make sure all the element of the constructor were used. Otherwise,
5086
     issue an error about exceeding initializers.  */
5087
  if (d.cur != d.end)
5088
    error ("too many initializers for %qT", type);
5089
 
5090
  return new_init;
5091
}
5092
 
5093
/* Verify array initializer.  Returns true if errors have been reported.  */
5094
 
5095
bool
5096
check_array_initializer (tree decl, tree type, tree init)
5097
{
5098
  tree element_type = TREE_TYPE (type);
5099
 
5100
  /* The array type itself need not be complete, because the
5101
     initializer may tell us how many elements are in the array.
5102
     But, the elements of the array must be complete.  */
5103
  if (!COMPLETE_TYPE_P (complete_type (element_type)))
5104
    {
5105
      if (decl)
5106
        error ("elements of array %q#D have incomplete type", decl);
5107
      else
5108
        error ("elements of array %q#T have incomplete type", type);
5109
      return true;
5110
    }
5111
  /* It is not valid to initialize a VLA.  */
5112
  if (init
5113
      && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
5114
          || !TREE_CONSTANT (TYPE_SIZE (element_type))))
5115
    {
5116
      if (decl)
5117
        error ("variable-sized object %qD may not be initialized", decl);
5118
      else
5119
        error ("variable-sized compound literal");
5120
      return true;
5121
    }
5122
  return false;
5123
}
5124
 
5125
/* Subroutine of check_initializer; args are passed down from that function.
5126
   Set stmts_are_full_exprs_p to 1 across a call to build_aggr_init.  */
5127
 
5128
static tree
5129
build_aggr_init_full_exprs (tree decl, tree init, int flags)
5130
 
5131
{
5132
  int saved_stmts_are_full_exprs_p = 0;
5133
  if (building_stmt_tree ())
5134
    {
5135
      saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
5136
      current_stmt_tree ()->stmts_are_full_exprs_p = 1;
5137
    }
5138
  init = build_aggr_init (decl, init, flags, tf_warning_or_error);
5139
  if (building_stmt_tree ())
5140
    current_stmt_tree ()->stmts_are_full_exprs_p =
5141
      saved_stmts_are_full_exprs_p;
5142
  return init;
5143
}
5144
 
5145
/* Verify INIT (the initializer for DECL), and record the
5146
   initialization in DECL_INITIAL, if appropriate.  CLEANUP is as for
5147
   grok_reference_init.
5148
 
5149
   If the return value is non-NULL, it is an expression that must be
5150
   evaluated dynamically to initialize DECL.  */
5151
 
5152
static tree
5153
check_initializer (tree decl, tree init, int flags, tree *cleanup)
5154
{
5155
  tree type = TREE_TYPE (decl);
5156
  tree init_code = NULL;
5157
 
5158
  /* Things that are going to be initialized need to have complete
5159
     type.  */
5160
  TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
5161
 
5162
  if (type == error_mark_node)
5163
    /* We will have already complained.  */
5164
    return NULL_TREE;
5165
 
5166
  if (TREE_CODE (type) == ARRAY_TYPE)
5167
    {
5168
      if (check_array_initializer (decl, type, init))
5169
        return NULL_TREE;
5170
    }
5171
  else if (!COMPLETE_TYPE_P (type))
5172
    {
5173
      error ("%qD has incomplete type", decl);
5174
      TREE_TYPE (decl) = error_mark_node;
5175
      return NULL_TREE;
5176
    }
5177
  else
5178
    /* There is no way to make a variable-sized class type in GNU C++.  */
5179
    gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
5180
 
5181
  if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
5182
    {
5183
      int init_len = VEC_length (constructor_elt, CONSTRUCTOR_ELTS (init));
5184
      if (SCALAR_TYPE_P (type))
5185
        {
5186
          if (init_len == 0)
5187
            {
5188
              maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5189
              init = build_zero_init (type, NULL_TREE, false);
5190
            }
5191
          else if (init_len != 1)
5192
            {
5193
              error ("scalar object %qD requires one element in initializer",
5194
                     decl);
5195
              TREE_TYPE (decl) = error_mark_node;
5196
              return NULL_TREE;
5197
            }
5198
        }
5199
    }
5200
 
5201
  if (TREE_CODE (decl) == CONST_DECL)
5202
    {
5203
      gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
5204
 
5205
      DECL_INITIAL (decl) = init;
5206
 
5207
      gcc_assert (init != NULL_TREE);
5208
      init = NULL_TREE;
5209
    }
5210
  else if (!DECL_EXTERNAL (decl) && TREE_CODE (type) == REFERENCE_TYPE)
5211
    init = grok_reference_init (decl, type, init, cleanup);
5212
  else if (init)
5213
    {
5214
      /* Do not reshape constructors of vectors (they don't need to be
5215
         reshaped.  */
5216
      if (BRACE_ENCLOSED_INITIALIZER_P (init))
5217
        {
5218
          if (is_std_init_list (type))
5219
            return build_init_list_var_init (decl, type, init, cleanup);
5220
          else if (TYPE_NON_AGGREGATE_CLASS (type))
5221
            {
5222
              /* Don't reshape if the class has constructors.  */
5223
              if (cxx_dialect == cxx98)
5224
                error ("in C++98 %qD must be initialized by constructor, "
5225
                       "not by %<{...}%>",
5226
                       decl);
5227
            }
5228
          else if (TREE_CODE (type) == VECTOR_TYPE && TYPE_VECTOR_OPAQUE (type))
5229
            {
5230
              error ("opaque vector types cannot be initialized");
5231
              init = error_mark_node;
5232
            }
5233
          else
5234
            init = reshape_init (type, init);
5235
        }
5236
 
5237
      /* If DECL has an array type without a specific bound, deduce the
5238
         array size from the initializer.  */
5239
      maybe_deduce_size_from_array_init (decl, init);
5240
      type = TREE_TYPE (decl);
5241
      if (type == error_mark_node)
5242
        return NULL_TREE;
5243
 
5244
      if (TYPE_NEEDS_CONSTRUCTING (type)
5245
          || (CLASS_TYPE_P (type)
5246
              && !BRACE_ENCLOSED_INITIALIZER_P (init)))
5247
        return build_aggr_init_full_exprs (decl, init, flags);
5248
      else if (TREE_CODE (init) != TREE_VEC)
5249
        {
5250
          init_code = store_init_value (decl, init, flags);
5251
          if (pedantic && TREE_CODE (type) == ARRAY_TYPE
5252
              && DECL_INITIAL (decl)
5253
              && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
5254
              && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
5255
            warning (0, "array %qD initialized by parenthesized string literal %qE",
5256
                     decl, DECL_INITIAL (decl));
5257
          init = NULL;
5258
        }
5259
    }
5260
  else if (DECL_EXTERNAL (decl))
5261
    ;
5262
  else if (TYPE_P (type) && TYPE_NEEDS_CONSTRUCTING (type))
5263
    return build_aggr_init_full_exprs (decl, init, flags);
5264
  else if (MAYBE_CLASS_TYPE_P (type))
5265
    {
5266
      tree core_type = strip_array_types (type);
5267
 
5268
      if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
5269
        error ("structure %qD with uninitialized const members", decl);
5270
      if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
5271
        error ("structure %qD with uninitialized reference members", decl);
5272
 
5273
      check_for_uninitialized_const_var (decl);
5274
    }
5275
  else
5276
    check_for_uninitialized_const_var (decl);
5277
 
5278
  if (init && init != error_mark_node)
5279
    init_code = build2 (INIT_EXPR, type, decl, init);
5280
 
5281
  return init_code;
5282
}
5283
 
5284
/* If DECL is not a local variable, give it RTL.  */
5285
 
5286
static void
5287
make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
5288
{
5289
  int toplev = toplevel_bindings_p ();
5290
  int defer_p;
5291
  const char *filename;
5292
 
5293
  /* Set the DECL_ASSEMBLER_NAME for the object.  */
5294
  if (asmspec)
5295
    {
5296
      /* The `register' keyword, when used together with an
5297
         asm-specification, indicates that the variable should be
5298
         placed in a particular register.  */
5299
      if (TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
5300
        {
5301
          set_user_assembler_name (decl, asmspec);
5302
          DECL_HARD_REGISTER (decl) = 1;
5303
        }
5304
      else
5305
        {
5306
          if (TREE_CODE (decl) == FUNCTION_DECL
5307
              && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
5308
            set_builtin_user_assembler_name (decl, asmspec);
5309
          set_user_assembler_name (decl, asmspec);
5310
        }
5311
    }
5312
 
5313
  /* Handle non-variables up front.  */
5314
  if (TREE_CODE (decl) != VAR_DECL)
5315
    {
5316
      rest_of_decl_compilation (decl, toplev, at_eof);
5317
      return;
5318
    }
5319
 
5320
  /* If we see a class member here, it should be a static data
5321
     member.  */
5322
  if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
5323
    {
5324
      gcc_assert (TREE_STATIC (decl));
5325
      /* An in-class declaration of a static data member should be
5326
         external; it is only a declaration, and not a definition.  */
5327
      if (init == NULL_TREE)
5328
        gcc_assert (DECL_EXTERNAL (decl) || !TREE_PUBLIC (decl));
5329
    }
5330
 
5331
  /* We don't create any RTL for local variables.  */
5332
  if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
5333
    return;
5334
 
5335
  /* We defer emission of local statics until the corresponding
5336
     DECL_EXPR is expanded.  */
5337
  defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
5338
 
5339
  /* We try to defer namespace-scope static constants so that they are
5340
     not emitted into the object file unnecessarily.  */
5341
  filename = input_filename;
5342
  if (!DECL_VIRTUAL_P (decl)
5343
      && TREE_READONLY (decl)
5344
      && DECL_INITIAL (decl) != NULL_TREE
5345
      && DECL_INITIAL (decl) != error_mark_node
5346
      && filename != NULL
5347
      && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
5348
      && toplev
5349
      && !TREE_PUBLIC (decl))
5350
    {
5351
      /* Fool with the linkage of static consts according to #pragma
5352
         interface.  */
5353
      struct c_fileinfo *finfo = get_fileinfo (filename);
5354
      if (!finfo->interface_unknown && !TREE_PUBLIC (decl))
5355
        {
5356
          TREE_PUBLIC (decl) = 1;
5357
          DECL_EXTERNAL (decl) = finfo->interface_only;
5358
        }
5359
 
5360
      defer_p = 1;
5361
    }
5362
  /* Likewise for template instantiations.  */
5363
  else if (DECL_LANG_SPECIFIC (decl)
5364
           && DECL_IMPLICIT_INSTANTIATION (decl))
5365
    defer_p = 1;
5366
 
5367
  /* If we're not deferring, go ahead and assemble the variable.  */
5368
  if (!defer_p)
5369
    rest_of_decl_compilation (decl, toplev, at_eof);
5370
}
5371
 
5372
/* walk_tree helper for wrap_temporary_cleanups, below.  */
5373
 
5374
static tree
5375
wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
5376
{
5377
  if (TYPE_P (*stmt_p))
5378
    {
5379
      *walk_subtrees = 0;
5380
      return NULL_TREE;
5381
    }
5382
 
5383
  if (TREE_CODE (*stmt_p) == TARGET_EXPR)
5384
    {
5385
      tree guard = (tree)data;
5386
      tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
5387
 
5388
      tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
5389
      /* Tell honor_protect_cleanup_actions to handle this as a separate
5390
         cleanup.  */
5391
      TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
5392
 
5393
      TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
5394
    }
5395
 
5396
  return NULL_TREE;
5397
}
5398
 
5399
/* We're initializing a local variable which has a cleanup GUARD.  If there
5400
   are any temporaries used in the initializer INIT of this variable, we
5401
   need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
5402
   variable will be cleaned up properly if one of them throws.
5403
 
5404
   Unfortunately, there's no way to express this properly in terms of
5405
   nesting, as the regions for the temporaries overlap the region for the
5406
   variable itself; if there are two temporaries, the variable needs to be
5407
   the first thing destroyed if either of them throws.  However, we only
5408
   want to run the variable's cleanup if it actually got constructed.  So
5409
   we need to guard the temporary cleanups with the variable's cleanup if
5410
   they are run on the normal path, but not if they are run on the
5411
   exceptional path.  We implement this by telling
5412
   honor_protect_cleanup_actions to strip the variable cleanup from the
5413
   exceptional path.  */
5414
 
5415
static void
5416
wrap_temporary_cleanups (tree init, tree guard)
5417
{
5418
  cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
5419
}
5420
 
5421
/* Generate code to initialize DECL (a local variable).  */
5422
 
5423
static void
5424
initialize_local_var (tree decl, tree init)
5425
{
5426
  tree type = TREE_TYPE (decl);
5427
  tree cleanup;
5428
  int already_used;
5429
 
5430
  gcc_assert (TREE_CODE (decl) == VAR_DECL
5431
              || TREE_CODE (decl) == RESULT_DECL);
5432
  gcc_assert (!TREE_STATIC (decl));
5433
 
5434
  if (DECL_SIZE (decl) == NULL_TREE)
5435
    {
5436
      /* If we used it already as memory, it must stay in memory.  */
5437
      DECL_INITIAL (decl) = NULL_TREE;
5438
      TREE_ADDRESSABLE (decl) = TREE_USED (decl);
5439
      return;
5440
    }
5441
 
5442
  if (type == error_mark_node)
5443
    return;
5444
 
5445
  /* Compute and store the initial value.  */
5446
  already_used = TREE_USED (decl) || TREE_USED (type);
5447
 
5448
  /* Generate a cleanup, if necessary.  */
5449
  cleanup = cxx_maybe_build_cleanup (decl);
5450
 
5451
  /* Perform the initialization.  */
5452
  if (init)
5453
    {
5454
      int saved_stmts_are_full_exprs_p;
5455
 
5456
      /* If we're only initializing a single object, guard the destructors
5457
         of any temporaries used in its initializer with its destructor.
5458
         This isn't right for arrays because each element initialization is
5459
         a full-expression.  */
5460
      if (cleanup && TREE_CODE (type) != ARRAY_TYPE)
5461
        wrap_temporary_cleanups (init, cleanup);
5462
 
5463
      gcc_assert (building_stmt_tree ());
5464
      saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
5465
      current_stmt_tree ()->stmts_are_full_exprs_p = 1;
5466
      finish_expr_stmt (init);
5467
      current_stmt_tree ()->stmts_are_full_exprs_p =
5468
        saved_stmts_are_full_exprs_p;
5469
    }
5470
 
5471
  /* Set this to 0 so we can tell whether an aggregate which was
5472
     initialized was ever used.  Don't do this if it has a
5473
     destructor, so we don't complain about the 'resource
5474
     allocation is initialization' idiom.  Now set
5475
     attribute((unused)) on types so decls of that type will be
5476
     marked used. (see TREE_USED, above.)  */
5477
  if (TYPE_NEEDS_CONSTRUCTING (type)
5478
      && ! already_used
5479
      && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
5480
      && DECL_NAME (decl))
5481
    TREE_USED (decl) = 0;
5482
  else if (already_used)
5483
    TREE_USED (decl) = 1;
5484
 
5485
  if (cleanup)
5486
    finish_decl_cleanup (decl, cleanup);
5487
}
5488
 
5489
/* DECL is a VAR_DECL for a compiler-generated variable with static
5490
   storage duration (like a virtual table) whose initializer is a
5491
   compile-time constant.  INIT must be either a TREE_LIST of values,
5492
   or a CONSTRUCTOR.  Initialize the variable and provide it to the
5493
   back end.  */
5494
 
5495
void
5496
initialize_artificial_var (tree decl, tree init)
5497
{
5498
  gcc_assert (DECL_ARTIFICIAL (decl));
5499
  if (TREE_CODE (init) == TREE_LIST)
5500
    init = build_constructor_from_list (TREE_TYPE (decl), init);
5501
  gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
5502
  DECL_INITIAL (decl) = init;
5503
  DECL_INITIALIZED_P (decl) = 1;
5504
  determine_visibility (decl);
5505
  layout_var_decl (decl);
5506
  maybe_commonize_var (decl);
5507
  make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
5508
}
5509
 
5510
/* INIT is the initializer for a variable, as represented by the
5511
   parser.  Returns true iff INIT is value-dependent.  */
5512
 
5513
static bool
5514
value_dependent_init_p (tree init)
5515
{
5516
  if (TREE_CODE (init) == TREE_LIST)
5517
    /* A parenthesized initializer, e.g.: int i (3, 2); ? */
5518
    return any_value_dependent_elements_p (init);
5519
  else if (TREE_CODE (init) == CONSTRUCTOR)
5520
  /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
5521
    {
5522
      VEC(constructor_elt, gc) *elts;
5523
      size_t nelts;
5524
      size_t i;
5525
 
5526
      elts = CONSTRUCTOR_ELTS (init);
5527
      nelts = VEC_length (constructor_elt, elts);
5528
      for (i = 0; i < nelts; ++i)
5529
        if (value_dependent_init_p (VEC_index (constructor_elt,
5530
                                               elts, i)->value))
5531
          return true;
5532
    }
5533
  else
5534
    /* It must be a simple expression, e.g., int i = 3;  */
5535
    return value_dependent_expression_p (init);
5536
 
5537
  return false;
5538
}
5539
 
5540
/* Finish processing of a declaration;
5541
   install its line number and initial value.
5542
   If the length of an array type is not known before,
5543
   it must be determined now, from the initial value, or it is an error.
5544
 
5545
   INIT is the initializer (if any) for DECL.  If INIT_CONST_EXPR_P is
5546
   true, then INIT is an integral constant expression.
5547
 
5548
   FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
5549
   if the (init) syntax was used.  */
5550
 
5551
void
5552
cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
5553
                tree asmspec_tree, int flags)
5554
{
5555
  tree type;
5556
  tree cleanup;
5557
  const char *asmspec = NULL;
5558
  int was_readonly = 0;
5559
  bool var_definition_p = false;
5560
  int saved_processing_template_decl;
5561
  tree auto_node;
5562
 
5563
  if (decl == error_mark_node)
5564
    return;
5565
  else if (! decl)
5566
    {
5567
      if (init)
5568
        error ("assignment (not initialization) in declaration");
5569
      return;
5570
    }
5571
 
5572
  gcc_assert (TREE_CODE (decl) != RESULT_DECL);
5573
  /* Parameters are handled by store_parm_decls, not cp_finish_decl.  */
5574
  gcc_assert (TREE_CODE (decl) != PARM_DECL);
5575
 
5576
  type = TREE_TYPE (decl);
5577
  if (type == error_mark_node)
5578
    return;
5579
 
5580
  /* Assume no cleanup is required.  */
5581
  cleanup = NULL_TREE;
5582
  saved_processing_template_decl = processing_template_decl;
5583
 
5584
  /* If a name was specified, get the string.  */
5585
  if (global_scope_p (current_binding_level))
5586
    asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
5587
  if (asmspec_tree && asmspec_tree != error_mark_node)
5588
    asmspec = TREE_STRING_POINTER (asmspec_tree);
5589
 
5590
  if (current_class_type
5591
      && CP_DECL_CONTEXT (decl) == current_class_type
5592
      && TYPE_BEING_DEFINED (current_class_type)
5593
      && (DECL_INITIAL (decl) || init))
5594
    DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
5595
 
5596
  auto_node = type_uses_auto (type);
5597
  if (auto_node)
5598
    {
5599
      if (init == NULL_TREE)
5600
        {
5601
          error ("declaration of %q#D has no initializer", decl);
5602
          TREE_TYPE (decl) = error_mark_node;
5603
          return;
5604
        }
5605
      if (TREE_CODE (init) == TREE_LIST)
5606
        init = build_x_compound_expr_from_list (init, "initializer");
5607
      if (describable_type (init))
5608
        {
5609
          type = TREE_TYPE (decl) = do_auto_deduction (type, init, auto_node);
5610
          if (type == error_mark_node)
5611
            return;
5612
        }
5613
    }
5614
 
5615
  if (init && TREE_CODE (decl) == FUNCTION_DECL)
5616
    {
5617
      tree clone;
5618
      if (init == ridpointers[(int)RID_DELETE])
5619
        {
5620
          /* FIXME check this is 1st decl.  */
5621
          DECL_DELETED_FN (decl) = 1;
5622
          DECL_DECLARED_INLINE_P (decl) = 1;
5623
          DECL_INITIAL (decl) = error_mark_node;
5624
          FOR_EACH_CLONE (clone, decl)
5625
            {
5626
              DECL_DELETED_FN (clone) = 1;
5627
              DECL_DECLARED_INLINE_P (clone) = 1;
5628
              DECL_INITIAL (clone) = error_mark_node;
5629
            }
5630
          init = NULL_TREE;
5631
        }
5632
      else if (init == ridpointers[(int)RID_DEFAULT])
5633
        {
5634
          if (defaultable_fn_check (decl))
5635
            DECL_DEFAULTED_FN (decl) = 1;
5636
          else
5637
            DECL_INITIAL (decl) = NULL_TREE;
5638
        }
5639
    }
5640
 
5641
  if (processing_template_decl)
5642
    {
5643
      bool type_dependent_p;
5644
 
5645
      /* Add this declaration to the statement-tree.  */
5646
      if (at_function_scope_p ())
5647
        add_decl_expr (decl);
5648
 
5649
      type_dependent_p = dependent_type_p (type);
5650
 
5651
      if (check_for_bare_parameter_packs (init))
5652
        {
5653
          init = NULL_TREE;
5654
          DECL_INITIAL (decl) = NULL_TREE;
5655
        }
5656
 
5657
      if (init && init_const_expr_p && TREE_CODE (decl) == VAR_DECL)
5658
        {
5659
          DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
5660
          if (DECL_INTEGRAL_CONSTANT_VAR_P (decl))
5661
            TREE_CONSTANT (decl) = 1;
5662
        }
5663
 
5664
      /* Generally, initializers in templates are expanded when the
5665
         template is instantiated.  But, if DECL is an integral
5666
         constant static data member, then it can be used in future
5667
         integral constant expressions, and its value must be
5668
         available. */
5669
      if (!(init
5670
            && DECL_CLASS_SCOPE_P (decl)
5671
            && DECL_INTEGRAL_CONSTANT_VAR_P (decl)
5672
            && !type_dependent_p
5673
            && !value_dependent_init_p (init)))
5674
        {
5675
          if (init)
5676
            DECL_INITIAL (decl) = init;
5677
          if (TREE_CODE (decl) == VAR_DECL
5678
              && !DECL_PRETTY_FUNCTION_P (decl)
5679
              && !type_dependent_p)
5680
            maybe_deduce_size_from_array_init (decl, init);
5681
          goto finish_end;
5682
        }
5683
 
5684
      if (TREE_CODE (init) == TREE_LIST)
5685
        {
5686
          /* If the parenthesized-initializer form was used (e.g.,
5687
             "int A<N>::i(X)"), then INIT will be a TREE_LIST of initializer
5688
             arguments.  (There is generally only one.)  We convert them
5689
             individually.  */
5690
          tree list = init;
5691
          for (; list; list = TREE_CHAIN (list))
5692
            {
5693
              tree elt = TREE_VALUE (list);
5694
              TREE_VALUE (list) = fold_non_dependent_expr (elt);
5695
            }
5696
        }
5697
      else
5698
        init = fold_non_dependent_expr (init);
5699
      processing_template_decl = 0;
5700
    }
5701
 
5702
  /* Take care of TYPE_DECLs up front.  */
5703
  if (TREE_CODE (decl) == TYPE_DECL)
5704
    {
5705
      if (type != error_mark_node
5706
          && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
5707
        {
5708
          if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
5709
            warning (0, "shadowing previous type declaration of %q#D", decl);
5710
          set_identifier_type_value (DECL_NAME (decl), decl);
5711
        }
5712
 
5713
      /* If we have installed this as the canonical typedef for this
5714
         type, and that type has not been defined yet, delay emitting
5715
         the debug information for it, as we will emit it later.  */
5716
      if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
5717
          && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
5718
        TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
5719
 
5720
      rest_of_decl_compilation (decl, DECL_CONTEXT (decl) == NULL_TREE,
5721
                                at_eof);
5722
      goto finish_end;
5723
    }
5724
 
5725
  /* A reference will be modified here, as it is initialized.  */
5726
  if (! DECL_EXTERNAL (decl)
5727
      && TREE_READONLY (decl)
5728
      && TREE_CODE (type) == REFERENCE_TYPE)
5729
    {
5730
      was_readonly = 1;
5731
      TREE_READONLY (decl) = 0;
5732
    }
5733
 
5734
  if (TREE_CODE (decl) == VAR_DECL)
5735
    {
5736
      /* Only variables with trivial initialization and destruction can
5737
         have thread-local storage.  */
5738
      if (DECL_THREAD_LOCAL_P (decl)
5739
          && (type_has_nontrivial_default_init (TREE_TYPE (decl))
5740
              || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
5741
        error ("%qD cannot be thread-local because it has non-trivial "
5742
               "type %qT", decl, TREE_TYPE (decl));
5743
      /* If this is a local variable that will need a mangled name,
5744
         register it now.  We must do this before processing the
5745
         initializer for the variable, since the initialization might
5746
         require a guard variable, and since the mangled name of the
5747
         guard variable will depend on the mangled name of this
5748
         variable.  */
5749
      if (DECL_FUNCTION_SCOPE_P (decl)
5750
          && TREE_STATIC (decl)
5751
          && !DECL_ARTIFICIAL (decl))
5752
        {
5753
          push_local_name (decl);
5754
          if (DECL_CONSTRUCTOR_P (current_function_decl)
5755
              || DECL_DESTRUCTOR_P (current_function_decl))
5756
            /* Normally local_decls is populated during GIMPLE lowering,
5757
               but [cd]tors are never actually compiled directly.  We need
5758
               to put statics on the list so we can deal with the label
5759
               address extension.  */
5760
            cfun->local_decls = tree_cons (NULL_TREE, decl,
5761
                                           cfun->local_decls);
5762
        }
5763
 
5764
      /* Convert the initializer to the type of DECL, if we have not
5765
         already initialized DECL.  */
5766
      if (!DECL_INITIALIZED_P (decl)
5767
          /* If !DECL_EXTERNAL then DECL is being defined.  In the
5768
             case of a static data member initialized inside the
5769
             class-specifier, there can be an initializer even if DECL
5770
             is *not* defined.  */
5771
          && (!DECL_EXTERNAL (decl) || init))
5772
        {
5773
          if (TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
5774
            {
5775
              tree jclass
5776
                = IDENTIFIER_GLOBAL_VALUE (get_identifier ("jclass"));
5777
              /* Allow libjava/prims.cc define primitive classes.  */
5778
              if (init != NULL_TREE
5779
                  || jclass == NULL_TREE
5780
                  || TREE_CODE (jclass) != TYPE_DECL
5781
                  || !POINTER_TYPE_P (TREE_TYPE (jclass))
5782
                  || !same_type_ignoring_top_level_qualifiers_p
5783
                                        (type, TREE_TYPE (TREE_TYPE (jclass))))
5784
                error ("Java object %qD not allocated with %<new%>", decl);
5785
              init = NULL_TREE;
5786
            }
5787
          if (init)
5788
            {
5789
              DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
5790
              if (init_const_expr_p)
5791
                {
5792
                  DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
5793
                  if (DECL_INTEGRAL_CONSTANT_VAR_P (decl))
5794
                    TREE_CONSTANT (decl) = 1;
5795
                }
5796
            }
5797
          init = check_initializer (decl, init, flags, &cleanup);
5798
          /* Thread-local storage cannot be dynamically initialized.  */
5799
          if (DECL_THREAD_LOCAL_P (decl) && init)
5800
            {
5801
              error ("%qD is thread-local and so cannot be dynamically "
5802
                     "initialized", decl);
5803
              init = NULL_TREE;
5804
            }
5805
 
5806
          /* Check that the initializer for a static data member was a
5807
             constant.  Although we check in the parser that the
5808
             initializer is an integral constant expression, we do not
5809
             simplify division-by-zero at the point at which it
5810
             occurs.  Therefore, in:
5811
 
5812
               struct S { static const int i = 7 / 0; };
5813
 
5814
             we issue an error at this point.  It would
5815
             probably be better to forbid division by zero in
5816
             integral constant expressions.  */
5817
          if (DECL_EXTERNAL (decl) && init)
5818
            {
5819
              error ("%qD cannot be initialized by a non-constant expression"
5820
                     " when being declared", decl);
5821
              DECL_INITIALIZED_IN_CLASS_P (decl) = 0;
5822
              init = NULL_TREE;
5823
            }
5824
 
5825
          /* Handle:
5826
 
5827
             [dcl.init]
5828
 
5829
             The memory occupied by any object of static storage
5830
             duration is zero-initialized at program startup before
5831
             any other initialization takes place.
5832
 
5833
             We cannot create an appropriate initializer until after
5834
             the type of DECL is finalized.  If DECL_INITIAL is set,
5835
             then the DECL is statically initialized, and any
5836
             necessary zero-initialization has already been performed.  */
5837
          if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
5838
            DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
5839
                                                   /*nelts=*/NULL_TREE,
5840
                                                   /*static_storage_p=*/true);
5841
          /* Remember that the initialization for this variable has
5842
             taken place.  */
5843
          DECL_INITIALIZED_P (decl) = 1;
5844
          /* This declaration is the definition of this variable,
5845
             unless we are initializing a static data member within
5846
             the class specifier.  */
5847
          if (!DECL_EXTERNAL (decl))
5848
            var_definition_p = true;
5849
        }
5850
      /* If the variable has an array type, lay out the type, even if
5851
         there is no initializer.  It is valid to index through the
5852
         array, and we must get TYPE_ALIGN set correctly on the array
5853
         type.  */
5854
      else if (TREE_CODE (type) == ARRAY_TYPE)
5855
        layout_type (type);
5856
 
5857
      if (!processing_template_decl
5858
          && TREE_STATIC (decl)
5859
          && !at_function_scope_p ()
5860
          && current_function_decl == NULL)
5861
        /* So decl is a global variable or a static member of a
5862
           non local class. Record the types it uses
5863
           so that we can decide later to emit debug info for them.  */
5864
        record_types_used_by_current_var_decl (decl);
5865
    }
5866
  else if (TREE_CODE (decl) == FIELD_DECL
5867
           && TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
5868
    error ("non-static data member %qD has Java class type", decl);
5869
 
5870
  /* Add this declaration to the statement-tree.  This needs to happen
5871
     after the call to check_initializer so that the DECL_EXPR for a
5872
     reference temp is added before the DECL_EXPR for the reference itself.  */
5873
  if (at_function_scope_p ())
5874
    add_decl_expr (decl);
5875
 
5876
  /* Let the middle end know about variables and functions -- but not
5877
     static data members in uninstantiated class templates.  */
5878
  if (!saved_processing_template_decl
5879
      && (TREE_CODE (decl) == VAR_DECL
5880
          || TREE_CODE (decl) == FUNCTION_DECL))
5881
    {
5882
      if (TREE_CODE (decl) == VAR_DECL)
5883
        {
5884
          layout_var_decl (decl);
5885
          maybe_commonize_var (decl);
5886
        }
5887
 
5888
      /* This needs to happen after the linkage is set. */
5889
      determine_visibility (decl);
5890
 
5891
      if (var_definition_p && TREE_STATIC (decl))
5892
        {
5893
          /* If a TREE_READONLY variable needs initialization
5894
             at runtime, it is no longer readonly and we need to
5895
             avoid MEM_READONLY_P being set on RTL created for it.  */
5896
          if (init)
5897
            {
5898
              if (TREE_READONLY (decl))
5899
                TREE_READONLY (decl) = 0;
5900
              was_readonly = 0;
5901
            }
5902
          else if (was_readonly)
5903
            TREE_READONLY (decl) = 1;
5904
        }
5905
 
5906
      make_rtl_for_nonlocal_decl (decl, init, asmspec);
5907
 
5908
      /* Check for abstractness of the type. Notice that there is no
5909
         need to strip array types here since the check for those types
5910
         is already done within create_array_type_for_decl.  */
5911
      if (TREE_CODE (type) == FUNCTION_TYPE
5912
          || TREE_CODE (type) == METHOD_TYPE)
5913
        abstract_virtuals_error (decl, TREE_TYPE (type));
5914
      else
5915
        abstract_virtuals_error (decl, type);
5916
 
5917
      if (TREE_TYPE (decl) == error_mark_node)
5918
        /* No initialization required.  */
5919
        ;
5920
      else if (TREE_CODE (decl) == FUNCTION_DECL)
5921
        {
5922
          if (init)
5923
            {
5924
              if (init == ridpointers[(int)RID_DEFAULT])
5925
                {
5926
                  /* An out-of-class default definition is defined at
5927
                     the point where it is explicitly defaulted.  */
5928
                  if (DECL_INITIAL (decl) == error_mark_node)
5929
                    synthesize_method (decl);
5930
                }
5931
              else
5932
                error ("function %q#D is initialized like a variable", decl);
5933
            }
5934
          /* else no initialization required.  */
5935
        }
5936
      else if (DECL_EXTERNAL (decl)
5937
               && ! (DECL_LANG_SPECIFIC (decl)
5938
                     && DECL_NOT_REALLY_EXTERN (decl)))
5939
        {
5940
          if (init)
5941
            DECL_INITIAL (decl) = init;
5942
        }
5943
      /* A variable definition.  */
5944
      else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
5945
        /* Initialize the local variable.  */
5946
        initialize_local_var (decl, init);
5947
 
5948
      /* If a variable is defined, and then a subsequent
5949
         definition with external linkage is encountered, we will
5950
         get here twice for the same variable.  We want to avoid
5951
         calling expand_static_init more than once.  For variables
5952
         that are not static data members, we can call
5953
         expand_static_init only when we actually process the
5954
         initializer.  It is not legal to redeclare a static data
5955
         member, so this issue does not arise in that case.  */
5956
      else if (var_definition_p && TREE_STATIC (decl))
5957
        expand_static_init (decl, init);
5958
    }
5959
 
5960
  /* If a CLEANUP_STMT was created to destroy a temporary bound to a
5961
     reference, insert it in the statement-tree now.  */
5962
  if (cleanup)
5963
    push_cleanup (decl, cleanup, false);
5964
 
5965
 finish_end:
5966
  processing_template_decl = saved_processing_template_decl;
5967
 
5968
  if (was_readonly)
5969
    TREE_READONLY (decl) = 1;
5970
 
5971
  /* If this was marked 'used', be sure it will be output.  */
5972
  if (lookup_attribute ("used", DECL_ATTRIBUTES (decl)))
5973
    mark_decl_referenced (decl);
5974
}
5975
 
5976
/* Returns a declaration for a VAR_DECL as if:
5977
 
5978
     extern "C" TYPE NAME;
5979
 
5980
   had been seen.  Used to create compiler-generated global
5981
   variables.  */
5982
 
5983
static tree
5984
declare_global_var (tree name, tree type)
5985
{
5986
  tree decl;
5987
 
5988
  push_to_top_level ();
5989
  decl = build_decl (input_location, VAR_DECL, name, type);
5990
  TREE_PUBLIC (decl) = 1;
5991
  DECL_EXTERNAL (decl) = 1;
5992
  DECL_ARTIFICIAL (decl) = 1;
5993
  /* If the user has explicitly declared this variable (perhaps
5994
     because the code we are compiling is part of a low-level runtime
5995
     library), then it is possible that our declaration will be merged
5996
     with theirs by pushdecl.  */
5997
  decl = pushdecl (decl);
5998
  cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0);
5999
  pop_from_top_level ();
6000
 
6001
  return decl;
6002
}
6003
 
6004
/* Returns the type for the argument to "__cxa_atexit" (or "atexit",
6005
   if "__cxa_atexit" is not being used) corresponding to the function
6006
   to be called when the program exits.  */
6007
 
6008
static tree
6009
get_atexit_fn_ptr_type (void)
6010
{
6011
  tree arg_types;
6012
  tree fn_type;
6013
 
6014
  if (!atexit_fn_ptr_type_node)
6015
    {
6016
      if (flag_use_cxa_atexit
6017
          && !targetm.cxx.use_atexit_for_cxa_atexit ())
6018
        /* The parameter to "__cxa_atexit" is "void (*)(void *)".  */
6019
        arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
6020
      else
6021
        /* The parameter to "atexit" is "void (*)(void)".  */
6022
        arg_types = void_list_node;
6023
 
6024
      fn_type = build_function_type (void_type_node, arg_types);
6025
      atexit_fn_ptr_type_node = build_pointer_type (fn_type);
6026
    }
6027
 
6028
  return atexit_fn_ptr_type_node;
6029
}
6030
 
6031
/* Returns a pointer to the `atexit' function.  Note that if
6032
   FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
6033
   `__cxa_atexit' function specified in the IA64 C++ ABI.  */
6034
 
6035
static tree
6036
get_atexit_node (void)
6037
{
6038
  tree atexit_fndecl;
6039
  tree arg_types;
6040
  tree fn_type;
6041
  tree fn_ptr_type;
6042
  const char *name;
6043
  bool use_aeabi_atexit;
6044
 
6045
  if (atexit_node)
6046
    return atexit_node;
6047
 
6048
  if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
6049
    {
6050
      /* The declaration for `__cxa_atexit' is:
6051
 
6052
           int __cxa_atexit (void (*)(void *), void *, void *)
6053
 
6054
         We build up the argument types and then then function type
6055
         itself.  */
6056
 
6057
      use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
6058
      /* First, build the pointer-to-function type for the first
6059
         argument.  */
6060
      fn_ptr_type = get_atexit_fn_ptr_type ();
6061
      /* Then, build the rest of the argument types.  */
6062
      arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
6063
      if (use_aeabi_atexit)
6064
        {
6065
          arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
6066
          arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
6067
        }
6068
      else
6069
        {
6070
          arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
6071
          arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
6072
        }
6073
      /* And the final __cxa_atexit type.  */
6074
      fn_type = build_function_type (integer_type_node, arg_types);
6075
      fn_ptr_type = build_pointer_type (fn_type);
6076
      if (use_aeabi_atexit)
6077
        name = "__aeabi_atexit";
6078
      else
6079
        name = "__cxa_atexit";
6080
    }
6081
  else
6082
    {
6083
      /* The declaration for `atexit' is:
6084
 
6085
           int atexit (void (*)());
6086
 
6087
         We build up the argument types and then then function type
6088
         itself.  */
6089
      fn_ptr_type = get_atexit_fn_ptr_type ();
6090
      arg_types = tree_cons (NULL_TREE, fn_ptr_type, void_list_node);
6091
      /* Build the final atexit type.  */
6092
      fn_type = build_function_type (integer_type_node, arg_types);
6093
      name = "atexit";
6094
    }
6095
 
6096
  /* Now, build the function declaration.  */
6097
  push_lang_context (lang_name_c);
6098
  atexit_fndecl = build_library_fn_ptr (name, fn_type);
6099
  mark_used (atexit_fndecl);
6100
  pop_lang_context ();
6101
  atexit_node = decay_conversion (atexit_fndecl);
6102
 
6103
  return atexit_node;
6104
}
6105
 
6106
/* Returns the __dso_handle VAR_DECL.  */
6107
 
6108
static tree
6109
get_dso_handle_node (void)
6110
{
6111
  if (dso_handle_node)
6112
    return dso_handle_node;
6113
 
6114
  /* Declare the variable.  */
6115
  dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
6116
                                        ptr_type_node);
6117
 
6118
  return dso_handle_node;
6119
}
6120
 
6121
/* Begin a new function with internal linkage whose job will be simply
6122
   to destroy some particular variable.  */
6123
 
6124
static GTY(()) int start_cleanup_cnt;
6125
 
6126
static tree
6127
start_cleanup_fn (void)
6128
{
6129
  char name[32];
6130
  tree fntype;
6131
  tree fndecl;
6132
  bool use_cxa_atexit = flag_use_cxa_atexit
6133
                        && !targetm.cxx.use_atexit_for_cxa_atexit ();
6134
 
6135
  push_to_top_level ();
6136
 
6137
  /* No need to mangle this.  */
6138
  push_lang_context (lang_name_c);
6139
 
6140
  /* Build the name of the function.  */
6141
  sprintf (name, "__tcf_%d", start_cleanup_cnt++);
6142
  /* Build the function declaration.  */
6143
  fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
6144
  fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
6145
  /* It's a function with internal linkage, generated by the
6146
     compiler.  */
6147
  TREE_PUBLIC (fndecl) = 0;
6148
  DECL_ARTIFICIAL (fndecl) = 1;
6149
  /* Make the function `inline' so that it is only emitted if it is
6150
     actually needed.  It is unlikely that it will be inlined, since
6151
     it is only called via a function pointer, but we avoid unnecessary
6152
     emissions this way.  */
6153
  DECL_DECLARED_INLINE_P (fndecl) = 1;
6154
  DECL_INTERFACE_KNOWN (fndecl) = 1;
6155
  /* Build the parameter.  */
6156
  if (use_cxa_atexit)
6157
    {
6158
      tree parmdecl;
6159
 
6160
      parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
6161
      DECL_CONTEXT (parmdecl) = fndecl;
6162
      TREE_USED (parmdecl) = 1;
6163
      DECL_ARGUMENTS (fndecl) = parmdecl;
6164
    }
6165
 
6166
  pushdecl (fndecl);
6167
  start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
6168
 
6169
  pop_lang_context ();
6170
 
6171
  return current_function_decl;
6172
}
6173
 
6174
/* Finish the cleanup function begun by start_cleanup_fn.  */
6175
 
6176
static void
6177
end_cleanup_fn (void)
6178
{
6179
  expand_or_defer_fn (finish_function (0));
6180
 
6181
  pop_from_top_level ();
6182
}
6183
 
6184
/* Generate code to handle the destruction of DECL, an object with
6185
   static storage duration.  */
6186
 
6187
tree
6188
register_dtor_fn (tree decl)
6189
{
6190
  tree cleanup;
6191
  tree compound_stmt;
6192
  tree args;
6193
  tree fcall;
6194
  tree type;
6195
  bool use_dtor;
6196
 
6197
  type = TREE_TYPE (decl);
6198
  if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
6199
    return void_zero_node;
6200
 
6201
  /* If we're using "__cxa_atexit" (or "__aeabi_atexit"), and DECL is
6202
     a class object, we can just pass the destructor to
6203
     "__cxa_atexit"; we don't have to build a temporary function to do
6204
     the cleanup.  */
6205
  use_dtor = (flag_use_cxa_atexit
6206
              && !targetm.cxx.use_atexit_for_cxa_atexit ()
6207
              && CLASS_TYPE_P (type));
6208
  if (use_dtor)
6209
    {
6210
      int idx;
6211
 
6212
      /* Find the destructor.  */
6213
      idx = lookup_fnfields_1 (type, complete_dtor_identifier);
6214
      gcc_assert (idx >= 0);
6215
      cleanup = VEC_index (tree, CLASSTYPE_METHOD_VEC (type), idx);
6216
      /* Make sure it is accessible.  */
6217
      perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup);
6218
    }
6219
  else
6220
    {
6221
      /* Call build_cleanup before we enter the anonymous function so
6222
         that any access checks will be done relative to the current
6223
         scope, rather than the scope of the anonymous function.  */
6224
      build_cleanup (decl);
6225
 
6226
      /* Now start the function.  */
6227
      cleanup = start_cleanup_fn ();
6228
 
6229
      /* Now, recompute the cleanup.  It may contain SAVE_EXPRs that refer
6230
         to the original function, rather than the anonymous one.  That
6231
         will make the back end think that nested functions are in use,
6232
         which causes confusion.  */
6233
      push_deferring_access_checks (dk_no_check);
6234
      fcall = build_cleanup (decl);
6235
      pop_deferring_access_checks ();
6236
 
6237
      /* Create the body of the anonymous function.  */
6238
      compound_stmt = begin_compound_stmt (BCS_FN_BODY);
6239
      finish_expr_stmt (fcall);
6240
      finish_compound_stmt (compound_stmt);
6241
      end_cleanup_fn ();
6242
    }
6243
 
6244
  /* Call atexit with the cleanup function.  */
6245
  mark_used (cleanup);
6246
  cleanup = build_address (cleanup);
6247
  if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
6248
    {
6249
      tree addr;
6250
 
6251
      if (use_dtor)
6252
        {
6253
          /* We must convert CLEANUP to the type that "__cxa_atexit"
6254
             expects.  */
6255
          cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
6256
          /* "__cxa_atexit" will pass the address of DECL to the
6257
             cleanup function.  */
6258
          mark_used (decl);
6259
          addr = build_address (decl);
6260
          /* The declared type of the parameter to "__cxa_atexit" is
6261
             "void *".  For plain "T*", we could just let the
6262
             machinery in cp_build_function_call convert it -- but if the
6263
             type is "cv-qualified T *", then we need to convert it
6264
             before passing it in, to avoid spurious errors.  */
6265
          addr = build_nop (ptr_type_node, addr);
6266
        }
6267
      else
6268
        /* Since the cleanup functions we build ignore the address
6269
           they're given, there's no reason to pass the actual address
6270
           in, and, in general, it's cheaper to pass NULL than any
6271
           other value.  */
6272
        addr = null_pointer_node;
6273
      args = tree_cons (NULL_TREE,
6274
                        cp_build_unary_op (ADDR_EXPR, get_dso_handle_node (), 0,
6275
                                        tf_warning_or_error),
6276
                        NULL_TREE);
6277
      if (targetm.cxx.use_aeabi_atexit ())
6278
        {
6279
          args = tree_cons (NULL_TREE, cleanup, args);
6280
          args = tree_cons (NULL_TREE, addr, args);
6281
        }
6282
      else
6283
        {
6284
          args = tree_cons (NULL_TREE, addr, args);
6285
          args = tree_cons (NULL_TREE, cleanup, args);
6286
        }
6287
    }
6288
  else
6289
    args = tree_cons (NULL_TREE, cleanup, NULL_TREE);
6290
  return cp_build_function_call (get_atexit_node (), args,
6291
                                 tf_warning_or_error);
6292
}
6293
 
6294
/* DECL is a VAR_DECL with static storage duration.  INIT, if present,
6295
   is its initializer.  Generate code to handle the construction
6296
   and destruction of DECL.  */
6297
 
6298
static void
6299
expand_static_init (tree decl, tree init)
6300
{
6301
  gcc_assert (TREE_CODE (decl) == VAR_DECL);
6302
  gcc_assert (TREE_STATIC (decl));
6303
 
6304
  /* Some variables require no initialization.  */
6305
  if (!init
6306
      && !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
6307
      && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
6308
    return;
6309
 
6310
  if (DECL_FUNCTION_SCOPE_P (decl))
6311
    {
6312
      /* Emit code to perform this initialization but once.  */
6313
      tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
6314
      tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
6315
      tree guard, guard_addr;
6316
      tree acquire_fn, release_fn, abort_fn;
6317
      tree flag, begin;
6318
 
6319
      /* Emit code to perform this initialization but once.  This code
6320
         looks like:
6321
 
6322
           static <type> guard;
6323
           if (!guard.first_byte) {
6324
             if (__cxa_guard_acquire (&guard)) {
6325
               bool flag = false;
6326
               try {
6327
                 // Do initialization.
6328
                 flag = true; __cxa_guard_release (&guard);
6329
                 // Register variable for destruction at end of program.
6330
               } catch {
6331
                 if (!flag) __cxa_guard_abort (&guard);
6332
               }
6333
           }
6334
 
6335
         Note that the `flag' variable is only set to 1 *after* the
6336
         initialization is complete.  This ensures that an exception,
6337
         thrown during the construction, will cause the variable to
6338
         reinitialized when we pass through this code again, as per:
6339
 
6340
           [stmt.dcl]
6341
 
6342
           If the initialization exits by throwing an exception, the
6343
           initialization is not complete, so it will be tried again
6344
           the next time control enters the declaration.
6345
 
6346
         This process should be thread-safe, too; multiple threads
6347
         should not be able to initialize the variable more than
6348
         once.  */
6349
 
6350
      /* Create the guard variable.  */
6351
      guard = get_guard (decl);
6352
 
6353
      /* This optimization isn't safe on targets with relaxed memory
6354
         consistency.  On such targets we force synchronization in
6355
         __cxa_guard_acquire.  */
6356
      if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
6357
        {
6358
          /* Begin the conditional initialization.  */
6359
          if_stmt = begin_if_stmt ();
6360
          finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
6361
          then_clause = begin_compound_stmt (BCS_NO_SCOPE);
6362
        }
6363
 
6364
      if (flag_threadsafe_statics)
6365
        {
6366
          guard_addr = build_address (guard);
6367
 
6368
          acquire_fn = get_identifier ("__cxa_guard_acquire");
6369
          release_fn = get_identifier ("__cxa_guard_release");
6370
          abort_fn = get_identifier ("__cxa_guard_abort");
6371
          if (!get_global_value_if_present (acquire_fn, &acquire_fn))
6372
            {
6373
              tree argtypes = tree_cons (NULL_TREE, TREE_TYPE (guard_addr),
6374
                                         void_list_node);
6375
              tree vfntype = build_function_type (void_type_node, argtypes);
6376
              acquire_fn = push_library_fn
6377
                (acquire_fn, build_function_type (integer_type_node, argtypes),
6378
                 NULL_TREE);
6379
              release_fn = push_library_fn (release_fn, vfntype, NULL_TREE);
6380
              abort_fn = push_library_fn (abort_fn, vfntype, NULL_TREE);
6381
            }
6382
          else
6383
            {
6384
              release_fn = identifier_global_value (release_fn);
6385
              abort_fn = identifier_global_value (abort_fn);
6386
            }
6387
 
6388
          inner_if_stmt = begin_if_stmt ();
6389
          finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
6390
                               inner_if_stmt);
6391
 
6392
          inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
6393
          begin = get_target_expr (boolean_false_node);
6394
          flag = TARGET_EXPR_SLOT (begin);
6395
 
6396
          TARGET_EXPR_CLEANUP (begin)
6397
            = build3 (COND_EXPR, void_type_node, flag,
6398
                      void_zero_node,
6399
                      build_call_n (abort_fn, 1, guard_addr));
6400
          CLEANUP_EH_ONLY (begin) = 1;
6401
 
6402
          /* Do the initialization itself.  */
6403
          init = add_stmt_to_compound (begin, init);
6404
          init = add_stmt_to_compound
6405
            (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
6406
          init = add_stmt_to_compound
6407
            (init, build_call_n (release_fn, 1, guard_addr));
6408
        }
6409
      else
6410
        init = add_stmt_to_compound (init, set_guard (guard));
6411
 
6412
      /* Use atexit to register a function for destroying this static
6413
         variable.  */
6414
      init = add_stmt_to_compound (init, register_dtor_fn (decl));
6415
 
6416
      finish_expr_stmt (init);
6417
 
6418
      if (flag_threadsafe_statics)
6419
        {
6420
          finish_compound_stmt (inner_then_clause);
6421
          finish_then_clause (inner_if_stmt);
6422
          finish_if_stmt (inner_if_stmt);
6423
        }
6424
 
6425
      if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
6426
        {
6427
          finish_compound_stmt (then_clause);
6428
          finish_then_clause (if_stmt);
6429
          finish_if_stmt (if_stmt);
6430
        }
6431
    }
6432
  else
6433
    static_aggregates = tree_cons (init, decl, static_aggregates);
6434
}
6435
 
6436
 
6437
/* Make TYPE a complete type based on INITIAL_VALUE.
6438
   Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
6439
   2 if there was no information (in which case assume 0 if DO_DEFAULT),
6440
   3 if the initializer list is empty (in pedantic mode). */
6441
 
6442
int
6443
cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
6444
{
6445
  int failure;
6446
  tree type, elt_type;
6447
 
6448
  if (initial_value)
6449
    {
6450
      unsigned HOST_WIDE_INT i;
6451
      tree value;
6452
 
6453
      /* An array of character type can be initialized from a
6454
         brace-enclosed string constant.
6455
 
6456
         FIXME: this code is duplicated from reshape_init. Probably
6457
         we should just call reshape_init here?  */
6458
      if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
6459
          && TREE_CODE (initial_value) == CONSTRUCTOR
6460
          && !VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (initial_value)))
6461
        {
6462
          VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initial_value);
6463
          tree value = VEC_index (constructor_elt, v, 0)->value;
6464
 
6465
          if (TREE_CODE (value) == STRING_CST
6466
              && VEC_length (constructor_elt, v) == 1)
6467
            initial_value = value;
6468
        }
6469
 
6470
      /* If any of the elements are parameter packs, we can't actually
6471
         complete this type now because the array size is dependent.  */
6472
      if (TREE_CODE (initial_value) == CONSTRUCTOR)
6473
        {
6474
          FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value),
6475
                                      i, value)
6476
            {
6477
              if (PACK_EXPANSION_P (value))
6478
                return 0;
6479
            }
6480
        }
6481
    }
6482
 
6483
  failure = complete_array_type (ptype, initial_value, do_default);
6484
 
6485
  /* We can create the array before the element type is complete, which
6486
     means that we didn't have these two bits set in the original type
6487
     either.  In completing the type, we are expected to propagate these
6488
     bits.  See also complete_type which does the same thing for arrays
6489
     of fixed size.  */
6490
  type = *ptype;
6491
  if (TYPE_DOMAIN (type))
6492
    {
6493
      elt_type = TREE_TYPE (type);
6494
      TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
6495
      TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
6496
        = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
6497
    }
6498
 
6499
  return failure;
6500
}
6501
 
6502
/* Return zero if something is declared to be a member of type
6503
   CTYPE when in the context of CUR_TYPE.  STRING is the error
6504
   message to print in that case.  Otherwise, quietly return 1.  */
6505
 
6506
static int
6507
member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
6508
{
6509
  if (ctype && ctype != cur_type)
6510
    {
6511
      if (flags == DTOR_FLAG)
6512
        error ("destructor for alien class %qT cannot be a member", ctype);
6513
      else
6514
        error ("constructor for alien class %qT cannot be a member", ctype);
6515
      return 0;
6516
    }
6517
  return 1;
6518
}
6519
 
6520
/* Subroutine of `grokdeclarator'.  */
6521
 
6522
/* Generate errors possibly applicable for a given set of specifiers.
6523
   This is for ARM $7.1.2.  */
6524
 
6525
static void
6526
bad_specifiers (tree object,
6527
                const char* type,
6528
                int virtualp,
6529
                int quals,
6530
                int inlinep,
6531
                int friendp,
6532
                int raises)
6533
{
6534
  if (virtualp)
6535
    error ("%qD declared as a %<virtual%> %s", object, type);
6536
  if (inlinep)
6537
    error ("%qD declared as an %<inline%> %s", object, type);
6538
  if (quals)
6539
    error ("%<const%> and %<volatile%> function specifiers on "
6540
           "%qD invalid in %s declaration",
6541
           object, type);
6542
  if (friendp)
6543
    error ("%q+D declared as a friend", object);
6544
  if (raises
6545
      && (TREE_CODE (object) == TYPE_DECL
6546
          || (!TYPE_PTRFN_P (TREE_TYPE (object))
6547
              && !TYPE_REFFN_P (TREE_TYPE (object))
6548
              && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
6549
    error ("%q+D declared with an exception specification", object);
6550
}
6551
 
6552
/* DECL is a member function or static data member and is presently
6553
   being defined.  Check that the definition is taking place in a
6554
   valid namespace.  */
6555
 
6556
static void
6557
check_class_member_definition_namespace (tree decl)
6558
{
6559
  /* These checks only apply to member functions and static data
6560
     members.  */
6561
  gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
6562
              || TREE_CODE (decl) == VAR_DECL);
6563
  /* We check for problems with specializations in pt.c in
6564
     check_specialization_namespace, where we can issue better
6565
     diagnostics.  */
6566
  if (processing_specialization)
6567
    return;
6568
  /* There are no restrictions on the placement of
6569
     explicit instantiations.  */
6570
  if (processing_explicit_instantiation)
6571
    return;
6572
  /* [class.mfct]
6573
 
6574
     A member function definition that appears outside of the
6575
     class definition shall appear in a namespace scope enclosing
6576
     the class definition.
6577
 
6578
     [class.static.data]
6579
 
6580
     The definition for a static data member shall appear in a
6581
     namespace scope enclosing the member's class definition.  */
6582
  if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
6583
    permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
6584
               decl, DECL_CONTEXT (decl));
6585
}
6586
 
6587
/* Build a PARM_DECL for the "this" parameter.  TYPE is the
6588
   METHOD_TYPE for a non-static member function; QUALS are the
6589
   cv-qualifiers that apply to the function.  */
6590
 
6591
tree
6592
build_this_parm (tree type, cp_cv_quals quals)
6593
{
6594
  tree this_type;
6595
  tree qual_type;
6596
  tree parm;
6597
  cp_cv_quals this_quals;
6598
 
6599
  this_type = TREE_VALUE (TYPE_ARG_TYPES (type));
6600
  /* The `this' parameter is implicitly `const'; it cannot be
6601
     assigned to.  */
6602
  this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
6603
  qual_type = cp_build_qualified_type (this_type, this_quals);
6604
  parm = build_artificial_parm (this_identifier, qual_type);
6605
  cp_apply_type_quals_to_decl (this_quals, parm);
6606
  return parm;
6607
}
6608
 
6609
/* CTYPE is class type, or null if non-class.
6610
   TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
6611
   or METHOD_TYPE.
6612
   DECLARATOR is the function's name.
6613
   PARMS is a chain of PARM_DECLs for the function.
6614
   VIRTUALP is truthvalue of whether the function is virtual or not.
6615
   FLAGS are to be passed through to `grokclassfn'.
6616
   QUALS are qualifiers indicating whether the function is `const'
6617
   or `volatile'.
6618
   RAISES is a list of exceptions that this function can raise.
6619
   CHECK is 1 if we must find this method in CTYPE, 0 if we should
6620
   not look, and -1 if we should not call `grokclassfn' at all.
6621
 
6622
   SFK is the kind of special function (if any) for the new function.
6623
 
6624
   Returns `NULL_TREE' if something goes wrong, after issuing
6625
   applicable error messages.  */
6626
 
6627
static tree
6628
grokfndecl (tree ctype,
6629
            tree type,
6630
            tree declarator,
6631
            tree parms,
6632
            tree orig_declarator,
6633
            int virtualp,
6634
            enum overload_flags flags,
6635
            cp_cv_quals quals,
6636
            tree raises,
6637
            int check,
6638
            int friendp,
6639
            int publicp,
6640
            int inlinep,
6641
            special_function_kind sfk,
6642
            bool funcdef_flag,
6643
            int template_count,
6644
            tree in_namespace,
6645
            tree* attrlist,
6646
            location_t location)
6647
{
6648
  tree decl;
6649
  int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
6650
  tree t;
6651
 
6652
  if (raises)
6653
    type = build_exception_variant (type, raises);
6654
 
6655
  decl = build_lang_decl (FUNCTION_DECL, declarator, type);
6656
 
6657
  /* If we have an explicit location, use it, otherwise use whatever
6658
     build_lang_decl used (probably input_location).  */
6659
  if (location != UNKNOWN_LOCATION)
6660
    DECL_SOURCE_LOCATION (decl) = location;
6661
 
6662
  if (TREE_CODE (type) == METHOD_TYPE)
6663
    {
6664
      tree parm;
6665
      parm = build_this_parm (type, quals);
6666
      TREE_CHAIN (parm) = parms;
6667
      parms = parm;
6668
    }
6669
  DECL_ARGUMENTS (decl) = parms;
6670
  for (t = parms; t; t = TREE_CHAIN (t))
6671
    DECL_CONTEXT (t) = decl;
6672
  /* Propagate volatile out from type to decl.  */
6673
  if (TYPE_VOLATILE (type))
6674
    TREE_THIS_VOLATILE (decl) = 1;
6675
 
6676
  /* Setup decl according to sfk.  */
6677
  switch (sfk)
6678
    {
6679
    case sfk_constructor:
6680
    case sfk_copy_constructor:
6681
    case sfk_move_constructor:
6682
      DECL_CONSTRUCTOR_P (decl) = 1;
6683
      break;
6684
    case sfk_destructor:
6685
      DECL_DESTRUCTOR_P (decl) = 1;
6686
      break;
6687
    default:
6688
      break;
6689
    }
6690
 
6691
  /* If pointers to member functions use the least significant bit to
6692
     indicate whether a function is virtual, ensure a pointer
6693
     to this function will have that bit clear.  */
6694
  if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
6695
      && TREE_CODE (type) == METHOD_TYPE
6696
      && DECL_ALIGN (decl) < 2 * BITS_PER_UNIT)
6697
    DECL_ALIGN (decl) = 2 * BITS_PER_UNIT;
6698
 
6699
  if (friendp
6700
      && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
6701
    {
6702
      if (funcdef_flag)
6703
        error
6704
          ("defining explicit specialization %qD in friend declaration",
6705
           orig_declarator);
6706
      else
6707
        {
6708
          tree fns = TREE_OPERAND (orig_declarator, 0);
6709
          tree args = TREE_OPERAND (orig_declarator, 1);
6710
 
6711
          if (PROCESSING_REAL_TEMPLATE_DECL_P ())
6712
            {
6713
              /* Something like `template <class T> friend void f<T>()'.  */
6714
              error ("invalid use of template-id %qD in declaration "
6715
                     "of primary template",
6716
                     orig_declarator);
6717
              return NULL_TREE;
6718
            }
6719
 
6720
 
6721
          /* A friend declaration of the form friend void f<>().  Record
6722
             the information in the TEMPLATE_ID_EXPR.  */
6723
          SET_DECL_IMPLICIT_INSTANTIATION (decl);
6724
 
6725
          if (TREE_CODE (fns) == COMPONENT_REF)
6726
            {
6727
              /* Due to bison parser ickiness, we will have already looked
6728
                 up an operator_name or PFUNCNAME within the current class
6729
                 (see template_id in parse.y). If the current class contains
6730
                 such a name, we'll get a COMPONENT_REF here. Undo that.  */
6731
 
6732
              gcc_assert (TREE_TYPE (TREE_OPERAND (fns, 0))
6733
                          == current_class_type);
6734
              fns = TREE_OPERAND (fns, 1);
6735
            }
6736
          gcc_assert (TREE_CODE (fns) == IDENTIFIER_NODE
6737
                      || TREE_CODE (fns) == OVERLOAD);
6738
          DECL_TEMPLATE_INFO (decl) = build_template_info (fns, args);
6739
 
6740
          for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
6741
            if (TREE_PURPOSE (t)
6742
                && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
6743
            {
6744
              error ("default arguments are not allowed in declaration "
6745
                     "of friend template specialization %qD",
6746
                     decl);
6747
              return NULL_TREE;
6748
            }
6749
 
6750
          if (inlinep)
6751
            {
6752
              error ("%<inline%> is not allowed in declaration of friend "
6753
                     "template specialization %qD",
6754
                     decl);
6755
              return NULL_TREE;
6756
            }
6757
        }
6758
    }
6759
 
6760
  /* If this decl has namespace scope, set that up.  */
6761
  if (in_namespace)
6762
    set_decl_namespace (decl, in_namespace, friendp);
6763
  else if (!ctype)
6764
    DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
6765
 
6766
  /* `main' and builtins have implicit 'C' linkage.  */
6767
  if ((MAIN_NAME_P (declarator)
6768
       || (IDENTIFIER_LENGTH (declarator) > 10
6769
           && IDENTIFIER_POINTER (declarator)[0] == '_'
6770
           && IDENTIFIER_POINTER (declarator)[1] == '_'
6771
           && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
6772
      && current_lang_name == lang_name_cplusplus
6773
      && ctype == NULL_TREE
6774
      /* NULL_TREE means global namespace.  */
6775
      && DECL_CONTEXT (decl) == NULL_TREE)
6776
    SET_DECL_LANGUAGE (decl, lang_c);
6777
 
6778
  /* Should probably propagate const out from type to decl I bet (mrs).  */
6779
  if (staticp)
6780
    {
6781
      DECL_STATIC_FUNCTION_P (decl) = 1;
6782
      DECL_CONTEXT (decl) = ctype;
6783
    }
6784
 
6785
  if (ctype)
6786
    {
6787
      DECL_CONTEXT (decl) = ctype;
6788
      if (funcdef_flag)
6789
        check_class_member_definition_namespace (decl);
6790
    }
6791
 
6792
  if (ctype == NULL_TREE && DECL_MAIN_P (decl))
6793
    {
6794
      if (processing_template_decl)
6795
        error ("cannot declare %<::main%> to be a template");
6796
      if (inlinep)
6797
        error ("cannot declare %<::main%> to be inline");
6798
      if (!publicp)
6799
        error ("cannot declare %<::main%> to be static");
6800
      inlinep = 0;
6801
      publicp = 1;
6802
    }
6803
 
6804
  /* Members of anonymous types and local classes have no linkage; make
6805
     them internal.  If a typedef is made later, this will be changed.  */
6806
  if (ctype && (TYPE_ANONYMOUS_P (ctype)
6807
                || decl_function_context (TYPE_MAIN_DECL (ctype))))
6808
    publicp = 0;
6809
 
6810
  if (publicp && cxx_dialect == cxx98)
6811
    {
6812
      /* [basic.link]: A name with no linkage (notably, the name of a class
6813
         or enumeration declared in a local scope) shall not be used to
6814
         declare an entity with linkage.
6815
 
6816
         DR 757 relaxes this restriction for C++0x.  */
6817
      t = no_linkage_check (TREE_TYPE (decl),
6818
                            /*relaxed_p=*/false);
6819
      if (t)
6820
        {
6821
          if (TYPE_ANONYMOUS_P (t))
6822
            {
6823
              if (DECL_EXTERN_C_P (decl))
6824
                /* Allow this; it's pretty common in C.  */;
6825
              else
6826
                {
6827
                  permerror (input_location, "non-local function %q#D uses anonymous type",
6828
                              decl);
6829
                  if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
6830
                    permerror (input_location, "%q+#D does not refer to the unqualified "
6831
                               "type, so it is not used for linkage",
6832
                               TYPE_NAME (t));
6833
                }
6834
            }
6835
          else
6836
            permerror (input_location, "non-local function %q#D uses local type %qT", decl, t);
6837
        }
6838
    }
6839
 
6840
  TREE_PUBLIC (decl) = publicp;
6841
  if (! publicp)
6842
    {
6843
      DECL_INTERFACE_KNOWN (decl) = 1;
6844
      DECL_NOT_REALLY_EXTERN (decl) = 1;
6845
    }
6846
 
6847
  /* If the declaration was declared inline, mark it as such.  */
6848
  if (inlinep)
6849
    DECL_DECLARED_INLINE_P (decl) = 1;
6850
 
6851
  DECL_EXTERNAL (decl) = 1;
6852
  if (quals && TREE_CODE (type) == FUNCTION_TYPE)
6853
    {
6854
      error (ctype
6855
             ? G_("static member function %qD cannot have cv-qualifier")
6856
             : G_("non-member function %qD cannot have cv-qualifier"),
6857
             decl);
6858
      quals = TYPE_UNQUALIFIED;
6859
    }
6860
 
6861
  if (IDENTIFIER_OPNAME_P (DECL_NAME (decl))
6862
      && !grok_op_properties (decl, /*complain=*/true))
6863
    return NULL_TREE;
6864
 
6865
  if (funcdef_flag)
6866
    /* Make the init_value nonzero so pushdecl knows this is not
6867
       tentative.  error_mark_node is replaced later with the BLOCK.  */
6868
    DECL_INITIAL (decl) = error_mark_node;
6869
 
6870
  if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
6871
    TREE_NOTHROW (decl) = 1;
6872
 
6873
  /* Caller will do the rest of this.  */
6874
  if (check < 0)
6875
    return decl;
6876
 
6877
  if (ctype != NULL_TREE)
6878
    grokclassfn (ctype, decl, flags);
6879
 
6880
  decl = check_explicit_specialization (orig_declarator, decl,
6881
                                        template_count,
6882
                                        2 * funcdef_flag +
6883
                                        4 * (friendp != 0));
6884
  if (decl == error_mark_node)
6885
    return NULL_TREE;
6886
 
6887
  if (attrlist)
6888
    {
6889
      cplus_decl_attributes (&decl, *attrlist, 0);
6890
      *attrlist = NULL_TREE;
6891
    }
6892
 
6893
  /* Check main's type after attributes have been applied.  */
6894
  if (ctype == NULL_TREE && DECL_MAIN_P (decl))
6895
    {
6896
      if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
6897
                        integer_type_node))
6898
        {
6899
          tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
6900
          tree newtype;
6901
          error ("%<::main%> must return %<int%>");
6902
          newtype = build_function_type (integer_type_node, oldtypeargs);
6903
          TREE_TYPE (decl) = newtype;
6904
        }
6905
      if (warn_main)
6906
        check_main_parameter_types (decl);
6907
    }
6908
 
6909
  if (ctype != NULL_TREE
6910
      && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
6911
      && check)
6912
    {
6913
      tree old_decl = check_classfn (ctype, decl,
6914
                                     (processing_template_decl
6915
                                      > template_class_depth (ctype))
6916
                                     ? current_template_parms
6917
                                     : NULL_TREE);
6918
 
6919
      if (old_decl == error_mark_node)
6920
        return NULL_TREE;
6921
 
6922
      if (old_decl)
6923
        {
6924
          tree ok;
6925
          tree pushed_scope;
6926
 
6927
          if (TREE_CODE (old_decl) == TEMPLATE_DECL)
6928
            /* Because grokfndecl is always supposed to return a
6929
               FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
6930
               here.  We depend on our callers to figure out that its
6931
               really a template that's being returned.  */
6932
            old_decl = DECL_TEMPLATE_RESULT (old_decl);
6933
 
6934
          if (DECL_STATIC_FUNCTION_P (old_decl)
6935
              && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
6936
            /* Remove the `this' parm added by grokclassfn.
6937
               XXX Isn't this done in start_function, too?  */
6938
            revert_static_member_fn (decl);
6939
          if (DECL_ARTIFICIAL (old_decl))
6940
            {
6941
              error ("definition of implicitly-declared %qD", old_decl);
6942
              return NULL_TREE;
6943
            }
6944
 
6945
          /* Since we've smashed OLD_DECL to its
6946
             DECL_TEMPLATE_RESULT, we must do the same to DECL.  */
6947
          if (TREE_CODE (decl) == TEMPLATE_DECL)
6948
            decl = DECL_TEMPLATE_RESULT (decl);
6949
 
6950
          /* Attempt to merge the declarations.  This can fail, in
6951
             the case of some invalid specialization declarations.  */
6952
          pushed_scope = push_scope (ctype);
6953
          ok = duplicate_decls (decl, old_decl, friendp);
6954
          if (pushed_scope)
6955
            pop_scope (pushed_scope);
6956
          if (!ok)
6957
            {
6958
              error ("no %q#D member function declared in class %qT",
6959
                     decl, ctype);
6960
              return NULL_TREE;
6961
            }
6962
          return old_decl;
6963
        }
6964
    }
6965
 
6966
  if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
6967
    return NULL_TREE;
6968
 
6969
  if (ctype == NULL_TREE || check)
6970
    return decl;
6971
 
6972
  if (virtualp)
6973
    DECL_VIRTUAL_P (decl) = 1;
6974
 
6975
  return decl;
6976
}
6977
 
6978
/* DECL is a VAR_DECL for a static data member.  Set flags to reflect
6979
   the linkage that DECL will receive in the object file.  */
6980
 
6981
static void
6982
set_linkage_for_static_data_member (tree decl)
6983
{
6984
  /* A static data member always has static storage duration and
6985
     external linkage.  Note that static data members are forbidden in
6986
     local classes -- the only situation in which a class has
6987
     non-external linkage.  */
6988
  TREE_PUBLIC (decl) = 1;
6989
  TREE_STATIC (decl) = 1;
6990
  /* For non-template classes, static data members are always put
6991
     out in exactly those files where they are defined, just as
6992
     with ordinary namespace-scope variables.  */
6993
  if (!processing_template_decl)
6994
    DECL_INTERFACE_KNOWN (decl) = 1;
6995
}
6996
 
6997
/* Create a VAR_DECL named NAME with the indicated TYPE.
6998
 
6999
   If SCOPE is non-NULL, it is the class type or namespace containing
7000
   the variable.  If SCOPE is NULL, the variable should is created in
7001
   the innermost enclosings scope.  */
7002
 
7003
static tree
7004
grokvardecl (tree type,
7005
             tree name,
7006
             const cp_decl_specifier_seq *declspecs,
7007
             int initialized,
7008
             int constp,
7009
             tree scope)
7010
{
7011
  tree decl;
7012
  tree explicit_scope;
7013
 
7014
  gcc_assert (!name || TREE_CODE (name) == IDENTIFIER_NODE);
7015
 
7016
  /* Compute the scope in which to place the variable, but remember
7017
     whether or not that scope was explicitly specified by the user.   */
7018
  explicit_scope = scope;
7019
  if (!scope)
7020
    {
7021
      /* An explicit "extern" specifier indicates a namespace-scope
7022
         variable.  */
7023
      if (declspecs->storage_class == sc_extern)
7024
        scope = current_namespace;
7025
      else if (!at_function_scope_p ())
7026
        scope = current_scope ();
7027
    }
7028
 
7029
  if (scope
7030
      && (/* If the variable is a namespace-scope variable declared in a
7031
             template, we need DECL_LANG_SPECIFIC.  */
7032
          (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
7033
          /* Similarly for namespace-scope variables with language linkage
7034
             other than C++.  */
7035
          || (TREE_CODE (scope) == NAMESPACE_DECL
7036
              && current_lang_name != lang_name_cplusplus)
7037
          /* Similarly for static data members.  */
7038
          || TYPE_P (scope)))
7039
    decl = build_lang_decl (VAR_DECL, name, type);
7040
  else
7041
    decl = build_decl (input_location, VAR_DECL, name, type);
7042
 
7043
  if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
7044
    set_decl_namespace (decl, explicit_scope, 0);
7045
  else
7046
    DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
7047
 
7048
  if (declspecs->storage_class == sc_extern)
7049
    {
7050
      DECL_THIS_EXTERN (decl) = 1;
7051
      DECL_EXTERNAL (decl) = !initialized;
7052
    }
7053
 
7054
  if (DECL_CLASS_SCOPE_P (decl))
7055
    {
7056
      set_linkage_for_static_data_member (decl);
7057
      /* This function is only called with out-of-class definitions.  */
7058
      DECL_EXTERNAL (decl) = 0;
7059
      check_class_member_definition_namespace (decl);
7060
    }
7061
  /* At top level, either `static' or no s.c. makes a definition
7062
     (perhaps tentative), and absence of `static' makes it public.  */
7063
  else if (toplevel_bindings_p ())
7064
    {
7065
      TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
7066
                            && (DECL_THIS_EXTERN (decl) || ! constp));
7067
      TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
7068
    }
7069
  /* Not at top level, only `static' makes a static definition.  */
7070
  else
7071
    {
7072
      TREE_STATIC (decl) = declspecs->storage_class == sc_static;
7073
      TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
7074
    }
7075
 
7076
  if (declspecs->specs[(int)ds_thread])
7077
    DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
7078
 
7079
  /* If the type of the decl has no linkage, make sure that we'll
7080
     notice that in mark_used.  */
7081
  if (cxx_dialect > cxx98
7082
      && decl_linkage (decl) != lk_none
7083
      && DECL_LANG_SPECIFIC (decl) == NULL
7084
      && !DECL_EXTERN_C_P (decl)
7085
      && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
7086
    retrofit_lang_decl (decl);
7087
 
7088
  if (TREE_PUBLIC (decl))
7089
    {
7090
      /* [basic.link]: A name with no linkage (notably, the name of a class
7091
         or enumeration declared in a local scope) shall not be used to
7092
         declare an entity with linkage.
7093
 
7094
         DR 757 relaxes this restriction for C++0x.  */
7095
      tree t = (cxx_dialect > cxx98 ? NULL_TREE
7096
                : no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false));
7097
      if (t)
7098
        {
7099
          if (TYPE_ANONYMOUS_P (t))
7100
            {
7101
              if (DECL_EXTERN_C_P (decl))
7102
                /* Allow this; it's pretty common in C.  */
7103
                ;
7104
              else
7105
                {
7106
                  /* DRs 132, 319 and 389 seem to indicate types with
7107
                     no linkage can only be used to declare extern "C"
7108
                     entities.  Since it's not always an error in the
7109
                     ISO C++ 90 Standard, we only issue a warning.  */
7110
                  warning (0, "non-local variable %q#D uses anonymous type",
7111
                           decl);
7112
                  if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
7113
                    warning (0, "%q+#D does not refer to the unqualified "
7114
                             "type, so it is not used for linkage",
7115
                             TYPE_NAME (t));
7116
                }
7117
            }
7118
          else
7119
            warning (0, "non-local variable %q#D uses local type %qT", decl, t);
7120
        }
7121
    }
7122
  else
7123
    DECL_INTERFACE_KNOWN (decl) = 1;
7124
 
7125
  return decl;
7126
}
7127
 
7128
/* Create and return a canonical pointer to member function type, for
7129
   TYPE, which is a POINTER_TYPE to a METHOD_TYPE.  */
7130
 
7131
tree
7132
build_ptrmemfunc_type (tree type)
7133
{
7134
  tree field, fields;
7135
  tree t;
7136
  tree unqualified_variant = NULL_TREE;
7137
 
7138
  if (type == error_mark_node)
7139
    return type;
7140
 
7141
  /* If a canonical type already exists for this type, use it.  We use
7142
     this method instead of type_hash_canon, because it only does a
7143
     simple equality check on the list of field members.  */
7144
 
7145
  if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
7146
    return t;
7147
 
7148
  /* Make sure that we always have the unqualified pointer-to-member
7149
     type first.  */
7150
  if (cp_type_quals (type) != TYPE_UNQUALIFIED)
7151
    unqualified_variant
7152
      = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
7153
 
7154
  t = make_class_type (RECORD_TYPE);
7155
  xref_basetypes (t, NULL_TREE);
7156
 
7157
  /* Let the front end know this is a pointer to member function...  */
7158
  TYPE_PTRMEMFUNC_FLAG (t) = 1;
7159
  /* ... and not really a class type.  */
7160
  SET_CLASS_TYPE_P (t, 0);
7161
 
7162
  field = build_decl (input_location, FIELD_DECL, pfn_identifier, type);
7163
  fields = field;
7164
 
7165
  field = build_decl (input_location, FIELD_DECL, delta_identifier,
7166
                      delta_type_node);
7167
  TREE_CHAIN (field) = fields;
7168
  fields = field;
7169
 
7170
  finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
7171
 
7172
  /* Zap out the name so that the back end will give us the debugging
7173
     information for this anonymous RECORD_TYPE.  */
7174
  TYPE_NAME (t) = NULL_TREE;
7175
 
7176
  /* If this is not the unqualified form of this pointer-to-member
7177
     type, set the TYPE_MAIN_VARIANT for this type to be the
7178
     unqualified type.  Since they are actually RECORD_TYPEs that are
7179
     not variants of each other, we must do this manually.
7180
     As we just built a new type there is no need to do yet another copy.  */
7181
  if (cp_type_quals (type) != TYPE_UNQUALIFIED)
7182
    {
7183
      int type_quals = cp_type_quals (type);
7184
      TYPE_READONLY (t) = (type_quals & TYPE_QUAL_CONST) != 0;
7185
      TYPE_VOLATILE (t) = (type_quals & TYPE_QUAL_VOLATILE) != 0;
7186
      TYPE_RESTRICT (t) = (type_quals & TYPE_QUAL_RESTRICT) != 0;
7187
      TYPE_MAIN_VARIANT (t) = unqualified_variant;
7188
      TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
7189
      TYPE_NEXT_VARIANT (unqualified_variant) = t;
7190
      TREE_TYPE (TYPE_BINFO (t)) = t;
7191
    }
7192
 
7193
  /* Cache this pointer-to-member type so that we can find it again
7194
     later.  */
7195
  TYPE_SET_PTRMEMFUNC_TYPE (type, t);
7196
 
7197
  if (TYPE_STRUCTURAL_EQUALITY_P (type))
7198
    SET_TYPE_STRUCTURAL_EQUALITY (t);
7199
  else if (TYPE_CANONICAL (type) != type)
7200
    TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
7201
 
7202
  return t;
7203
}
7204
 
7205
/* Create and return a pointer to data member type.  */
7206
 
7207
tree
7208
build_ptrmem_type (tree class_type, tree member_type)
7209
{
7210
  if (TREE_CODE (member_type) == METHOD_TYPE)
7211
    {
7212
      tree arg_types = TYPE_ARG_TYPES (member_type);
7213
      cp_cv_quals quals = cp_type_quals (TREE_TYPE (TREE_VALUE (arg_types)));
7214
      member_type = build_memfn_type (member_type, class_type, quals);
7215
      return build_ptrmemfunc_type (build_pointer_type (member_type));
7216
    }
7217
  else
7218
    {
7219
      gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
7220
      return build_offset_type (class_type, member_type);
7221
    }
7222
}
7223
 
7224
/* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
7225
   Check to see that the definition is valid.  Issue appropriate error
7226
   messages.  Return 1 if the definition is particularly bad, or 0
7227
   otherwise.  */
7228
 
7229
int
7230
check_static_variable_definition (tree decl, tree type)
7231
{
7232
  /* Motion 10 at San Diego: If a static const integral data member is
7233
     initialized with an integral constant expression, the initializer
7234
     may appear either in the declaration (within the class), or in
7235
     the definition, but not both.  If it appears in the class, the
7236
     member is a member constant.  The file-scope definition is always
7237
     required.  */
7238
  if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
7239
    {
7240
      error ("invalid in-class initialization of static data member "
7241
             "of non-integral type %qT",
7242
             type);
7243
      /* If we just return the declaration, crashes will sometimes
7244
         occur.  We therefore return void_type_node, as if this were a
7245
         friend declaration, to cause callers to completely ignore
7246
         this declaration.  */
7247
      return 1;
7248
    }
7249
  else if (!CP_TYPE_CONST_P (type))
7250
    error ("ISO C++ forbids in-class initialization of non-const "
7251
           "static member %qD",
7252
           decl);
7253
  else if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
7254
    pedwarn (input_location, OPT_pedantic, "ISO C++ forbids initialization of member constant "
7255
             "%qD of non-integral type %qT", decl, type);
7256
 
7257
  return 0;
7258
}
7259
 
7260
/* Given the SIZE (i.e., number of elements) in an array, compute an
7261
   appropriate index type for the array.  If non-NULL, NAME is the
7262
   name of the thing being declared.  */
7263
 
7264
tree
7265
compute_array_index_type (tree name, tree size)
7266
{
7267
  tree type;
7268
  tree itype;
7269
  tree abi_1_itype = NULL_TREE;
7270
 
7271
  if (error_operand_p (size))
7272
    return error_mark_node;
7273
 
7274
  type = TREE_TYPE (size);
7275
  /* The array bound must be an integer type.  */
7276
  if (!dependent_type_p (type) && !INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
7277
    {
7278
      if (name)
7279
        error ("size of array %qD has non-integral type %qT", name, type);
7280
      else
7281
        error ("size of array has non-integral type %qT", type);
7282
      size = integer_one_node;
7283
      type = TREE_TYPE (size);
7284
    }
7285
 
7286
  /* We can only call value_dependent_expression_p on integral constant
7287
     expressions; the parser adds a dummy NOP_EXPR with TREE_SIDE_EFFECTS
7288
     set if this isn't one.  */
7289
  if (processing_template_decl
7290
      && (TREE_SIDE_EFFECTS (size) || value_dependent_expression_p (size)))
7291
    {
7292
      /* We cannot do any checking for a SIZE that isn't known to be
7293
         constant. Just build the index type and mark that it requires
7294
         structural equality checks.  */
7295
      itype = build_index_type (build_min (MINUS_EXPR, sizetype,
7296
                                           size, integer_one_node));
7297
      TYPE_DEPENDENT_P (itype) = 1;
7298
      TYPE_DEPENDENT_P_VALID (itype) = 1;
7299
      SET_TYPE_STRUCTURAL_EQUALITY (itype);
7300
      return itype;
7301
    }
7302
 
7303
  if (!abi_version_at_least (2) && processing_template_decl)
7304
    /* For abi-1, we handled all instances in templates the same way,
7305
       even when they were non-dependent. This affects the manglings
7306
       produced.  So, we do the normal checking for non-dependent
7307
       sizes, but at the end we'll return the same type that abi-1
7308
       would have, but with TYPE_CANONICAL set to the "right"
7309
       value that the current ABI would provide. */
7310
    abi_1_itype = build_index_type (build_min (MINUS_EXPR, sizetype,
7311
                                               size, integer_one_node));
7312
 
7313
  /* The size might be the result of a cast.  */
7314
  STRIP_TYPE_NOPS (size);
7315
 
7316
  /* It might be a const variable or enumeration constant.  */
7317
  size = integral_constant_value (size);
7318
 
7319
  /* Normally, the array-bound will be a constant.  */
7320
  if (TREE_CODE (size) == INTEGER_CST)
7321
    {
7322
      /* Check to see if the array bound overflowed.  Make that an
7323
         error, no matter how generous we're being.  */
7324
      constant_expression_error (size);
7325
 
7326
      /* An array must have a positive number of elements.  */
7327
      if (INT_CST_LT (size, integer_zero_node))
7328
        {
7329
          if (name)
7330
            error ("size of array %qD is negative", name);
7331
          else
7332
            error ("size of array is negative");
7333
          size = integer_one_node;
7334
        }
7335
      /* As an extension we allow zero-sized arrays.  We always allow
7336
         them in system headers because glibc uses them.  */
7337
      else if (integer_zerop (size) && !in_system_header)
7338
        {
7339
          if (name)
7340
            pedwarn (input_location, OPT_pedantic, "ISO C++ forbids zero-size array %qD", name);
7341
          else
7342
            pedwarn (input_location, OPT_pedantic, "ISO C++ forbids zero-size array");
7343
        }
7344
    }
7345
  else if (TREE_CONSTANT (size))
7346
    {
7347
      /* `(int) &fn' is not a valid array bound.  */
7348
      if (name)
7349
        error ("size of array %qD is not an integral constant-expression",
7350
               name);
7351
      else
7352
        error ("size of array is not an integral constant-expression");
7353
      size = integer_one_node;
7354
    }
7355
  else if (pedantic && warn_vla != 0)
7356
    {
7357
      if (name)
7358
        pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array %qD", name);
7359
      else
7360
        pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array");
7361
    }
7362
  else if (warn_vla > 0)
7363
    {
7364
      if (name)
7365
        warning (OPT_Wvla,
7366
                 "variable length array %qD is used", name);
7367
      else
7368
        warning (OPT_Wvla,
7369
                 "variable length array is used");
7370
    }
7371
 
7372
  if (processing_template_decl && !TREE_CONSTANT (size))
7373
    /* A variable sized array.  */
7374
    itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
7375
  else
7376
    {
7377
      HOST_WIDE_INT saved_processing_template_decl;
7378
 
7379
      /* Compute the index of the largest element in the array.  It is
7380
         one less than the number of elements in the array.  We save
7381
         and restore PROCESSING_TEMPLATE_DECL so that computations in
7382
         cp_build_binary_op will be appropriately folded.  */
7383
      saved_processing_template_decl = processing_template_decl;
7384
      processing_template_decl = 0;
7385
      itype = cp_build_binary_op (input_location,
7386
                                  MINUS_EXPR,
7387
                                  cp_convert (ssizetype, size),
7388
                                  cp_convert (ssizetype, integer_one_node),
7389
                                  tf_warning_or_error);
7390
      itype = fold (itype);
7391
      processing_template_decl = saved_processing_template_decl;
7392
 
7393
      if (!TREE_CONSTANT (itype))
7394
        /* A variable sized array.  */
7395
        itype = variable_size (itype);
7396
      /* Make sure that there was no overflow when creating to a signed
7397
         index type.  (For example, on a 32-bit machine, an array with
7398
         size 2^32 - 1 is too big.)  */
7399
      else if (TREE_CODE (itype) == INTEGER_CST
7400
               && TREE_OVERFLOW (itype))
7401
        {
7402
          error ("overflow in array dimension");
7403
          TREE_OVERFLOW (itype) = 0;
7404
        }
7405
    }
7406
 
7407
  /* Create and return the appropriate index type.  */
7408
  if (abi_1_itype)
7409
    {
7410
      tree t = build_index_type (itype);
7411
      TYPE_CANONICAL (abi_1_itype) = TYPE_CANONICAL (t);
7412
      return abi_1_itype;
7413
    }
7414
  else
7415
    return build_index_type (itype);
7416
}
7417
 
7418
/* Returns the scope (if any) in which the entity declared by
7419
   DECLARATOR will be located.  If the entity was declared with an
7420
   unqualified name, NULL_TREE is returned.  */
7421
 
7422
tree
7423
get_scope_of_declarator (const cp_declarator *declarator)
7424
{
7425
  while (declarator && declarator->kind != cdk_id)
7426
    declarator = declarator->declarator;
7427
 
7428
  /* If the declarator-id is a SCOPE_REF, the scope in which the
7429
     declaration occurs is the first operand.  */
7430
  if (declarator
7431
      && declarator->u.id.qualifying_scope)
7432
    return declarator->u.id.qualifying_scope;
7433
 
7434
  /* Otherwise, the declarator is not a qualified name; the entity will
7435
     be declared in the current scope.  */
7436
  return NULL_TREE;
7437
}
7438
 
7439
/* Returns an ARRAY_TYPE for an array with SIZE elements of the
7440
   indicated TYPE.  If non-NULL, NAME is the NAME of the declaration
7441
   with this type.  */
7442
 
7443
static tree
7444
create_array_type_for_decl (tree name, tree type, tree size)
7445
{
7446
  tree itype = NULL_TREE;
7447
 
7448
  /* If things have already gone awry, bail now.  */
7449
  if (type == error_mark_node || size == error_mark_node)
7450
    return error_mark_node;
7451
 
7452
  /* If there are some types which cannot be array elements,
7453
     issue an error-message and return.  */
7454
  switch (TREE_CODE (type))
7455
    {
7456
    case VOID_TYPE:
7457
      if (name)
7458
        error ("declaration of %qD as array of void", name);
7459
      else
7460
        error ("creating array of void");
7461
      return error_mark_node;
7462
 
7463
    case FUNCTION_TYPE:
7464
      if (name)
7465
        error ("declaration of %qD as array of functions", name);
7466
      else
7467
        error ("creating array of functions");
7468
      return error_mark_node;
7469
 
7470
    case REFERENCE_TYPE:
7471
      if (name)
7472
        error ("declaration of %qD as array of references", name);
7473
      else
7474
        error ("creating array of references");
7475
      return error_mark_node;
7476
 
7477
    case METHOD_TYPE:
7478
      if (name)
7479
        error ("declaration of %qD as array of function members", name);
7480
      else
7481
        error ("creating array of function members");
7482
      return error_mark_node;
7483
 
7484
    default:
7485
      break;
7486
    }
7487
 
7488
  /* [dcl.array]
7489
 
7490
     The constant expressions that specify the bounds of the arrays
7491
     can be omitted only for the first member of the sequence.  */
7492
  if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
7493
    {
7494
      if (name)
7495
        error ("declaration of %qD as multidimensional array must "
7496
               "have bounds for all dimensions except the first",
7497
               name);
7498
      else
7499
        error ("multidimensional array must have bounds for all "
7500
               "dimensions except the first");
7501
 
7502
      return error_mark_node;
7503
    }
7504
 
7505
  /* Figure out the index type for the array.  */
7506
  if (size)
7507
    itype = compute_array_index_type (name, size);
7508
 
7509
  /* [dcl.array]
7510
     T is called the array element type; this type shall not be [...] an
7511
     abstract class type.  */
7512
  abstract_virtuals_error (name, type);
7513
 
7514
  return build_cplus_array_type (type, itype);
7515
}
7516
 
7517
/* Check that it's OK to declare a function with the indicated TYPE.
7518
   SFK indicates the kind of special function (if any) that this
7519
   function is.  OPTYPE is the type given in a conversion operator
7520
   declaration, or the class type for a constructor/destructor.
7521
   Returns the actual return type of the function; that
7522
   may be different than TYPE if an error occurs, or for certain
7523
   special functions.  */
7524
 
7525
static tree
7526
check_special_function_return_type (special_function_kind sfk,
7527
                                    tree type,
7528
                                    tree optype)
7529
{
7530
  switch (sfk)
7531
    {
7532
    case sfk_constructor:
7533
      if (type)
7534
        error ("return type specification for constructor invalid");
7535
 
7536
      if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
7537
        type = build_pointer_type (optype);
7538
      else
7539
        type = void_type_node;
7540
      break;
7541
 
7542
    case sfk_destructor:
7543
      if (type)
7544
        error ("return type specification for destructor invalid");
7545
      /* We can't use the proper return type here because we run into
7546
         problems with ambiguous bases and covariant returns.
7547
         Java classes are left unchanged because (void *) isn't a valid
7548
         Java type, and we don't want to change the Java ABI.  */
7549
      if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
7550
        type = build_pointer_type (void_type_node);
7551
      else
7552
        type = void_type_node;
7553
      break;
7554
 
7555
    case sfk_conversion:
7556
      if (type)
7557
        error ("return type specified for %<operator %T%>",  optype);
7558
      type = optype;
7559
      break;
7560
 
7561
    default:
7562
      gcc_unreachable ();
7563
    }
7564
 
7565
  return type;
7566
}
7567
 
7568
/* A variable or data member (whose unqualified name is IDENTIFIER)
7569
   has been declared with the indicated TYPE.  If the TYPE is not
7570
   acceptable, issue an error message and return a type to use for
7571
   error-recovery purposes.  */
7572
 
7573
tree
7574
check_var_type (tree identifier, tree type)
7575
{
7576
  if (VOID_TYPE_P (type))
7577
    {
7578
      if (!identifier)
7579
        error ("unnamed variable or field declared void");
7580
      else if (TREE_CODE (identifier) == IDENTIFIER_NODE)
7581
        {
7582
          gcc_assert (!IDENTIFIER_OPNAME_P (identifier));
7583
          error ("variable or field %qE declared void", identifier);
7584
        }
7585
      else
7586
        error ("variable or field declared void");
7587
      type = error_mark_node;
7588
    }
7589
 
7590
  return type;
7591
}
7592
 
7593
/* Given declspecs and a declarator (abstract or otherwise), determine
7594
   the name and type of the object declared and construct a DECL node
7595
   for it.
7596
 
7597
   DECLSPECS points to the representation of declaration-specifier
7598
   sequence that precedes declarator.
7599
 
7600
   DECL_CONTEXT says which syntactic context this declaration is in:
7601
     NORMAL for most contexts.  Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
7602
     FUNCDEF for a function definition.  Like NORMAL but a few different
7603
      error messages in each case.  Return value may be zero meaning
7604
      this definition is too screwy to try to parse.
7605
     MEMFUNCDEF for a function definition.  Like FUNCDEF but prepares to
7606
      handle member functions (which have FIELD context).
7607
      Return value may be zero meaning this definition is too screwy to
7608
      try to parse.
7609
     PARM for a parameter declaration (either within a function prototype
7610
      or before a function body).  Make a PARM_DECL, or return void_type_node.
7611
     TPARM for a template parameter declaration.
7612
     CATCHPARM for a parameter declaration before a catch clause.
7613
     TYPENAME if for a typename (in a cast or sizeof).
7614
      Don't make a DECL node; just return the ..._TYPE node.
7615
     FIELD for a struct or union field; make a FIELD_DECL.
7616
     BITFIELD for a field with specified width.
7617
 
7618
   INITIALIZED is as for start_decl.
7619
 
7620
   ATTRLIST is a pointer to the list of attributes, which may be NULL
7621
   if there are none; *ATTRLIST may be modified if attributes from inside
7622
   the declarator should be applied to the declaration.
7623
 
7624
   When this function is called, scoping variables (such as
7625
   CURRENT_CLASS_TYPE) should reflect the scope in which the
7626
   declaration occurs, not the scope in which the new declaration will
7627
   be placed.  For example, on:
7628
 
7629
     void S::f() { ... }
7630
 
7631
   when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
7632
   should not be `S'.
7633
 
7634
   Returns a DECL (if a declarator is present), a TYPE (if there is no
7635
   declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
7636
   error occurs. */
7637
 
7638
tree
7639
grokdeclarator (const cp_declarator *declarator,
7640
                const cp_decl_specifier_seq *declspecs,
7641
                enum decl_context decl_context,
7642
                int initialized,
7643
                tree* attrlist)
7644
{
7645
  tree type = NULL_TREE;
7646
  int longlong = 0;
7647
  int virtualp, explicitp, friendp, inlinep, staticp;
7648
  int explicit_int = 0;
7649
  int explicit_char = 0;
7650
  int defaulted_int = 0;
7651
  tree dependent_name = NULL_TREE;
7652
 
7653
  tree typedef_decl = NULL_TREE;
7654
  const char *name = NULL;
7655
  tree typedef_type = NULL_TREE;
7656
  /* True if this declarator is a function definition.  */
7657
  bool funcdef_flag = false;
7658
  cp_declarator_kind innermost_code = cdk_error;
7659
  int bitfield = 0;
7660
#if 0
7661
  /* See the code below that used this.  */
7662
  tree decl_attr = NULL_TREE;
7663
#endif
7664
 
7665
  /* Keep track of what sort of function is being processed
7666
     so that we can warn about default return values, or explicit
7667
     return values which do not match prescribed defaults.  */
7668
  special_function_kind sfk = sfk_none;
7669
 
7670
  tree dname = NULL_TREE;
7671
  tree ctor_return_type = NULL_TREE;
7672
  enum overload_flags flags = NO_SPECIAL;
7673
  /* cv-qualifiers that apply to the declarator, for a declaration of
7674
     a member function.  */
7675
  cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
7676
  /* cv-qualifiers that apply to the type specified by the DECLSPECS.  */
7677
  int type_quals;
7678
  tree raises = NULL_TREE;
7679
  int template_count = 0;
7680
  tree returned_attrs = NULL_TREE;
7681
  tree parms = NULL_TREE;
7682
  const cp_declarator *id_declarator;
7683
  /* The unqualified name of the declarator; either an
7684
     IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR.  */
7685
  tree unqualified_id;
7686
  /* The class type, if any, in which this entity is located,
7687
     or NULL_TREE if none.  Note that this value may be different from
7688
     the current class type; for example if an attempt is made to declare
7689
     "A::f" inside "B", this value will be "A".  */
7690
  tree ctype = current_class_type;
7691
  /* The NAMESPACE_DECL for the namespace in which this entity is
7692
     located.  If an unqualified name is used to declare the entity,
7693
     this value will be NULL_TREE, even if the entity is located at
7694
     namespace scope.  */
7695
  tree in_namespace = NULL_TREE;
7696
  cp_storage_class storage_class;
7697
  bool unsigned_p, signed_p, short_p, long_p, thread_p;
7698
  bool type_was_error_mark_node = false;
7699
  bool parameter_pack_p = declarator? declarator->parameter_pack_p : false;
7700
  bool template_type_arg = false;
7701
  bool template_parm_flag = false;
7702
  bool constexpr_p = declspecs->specs[(int) ds_constexpr];
7703
  const char *errmsg;
7704
 
7705
  signed_p = declspecs->specs[(int)ds_signed];
7706
  unsigned_p = declspecs->specs[(int)ds_unsigned];
7707
  short_p = declspecs->specs[(int)ds_short];
7708
  long_p = declspecs->specs[(int)ds_long];
7709
  longlong = declspecs->specs[(int)ds_long] >= 2;
7710
  thread_p = declspecs->specs[(int)ds_thread];
7711
 
7712
  if (decl_context == FUNCDEF)
7713
    funcdef_flag = true, decl_context = NORMAL;
7714
  else if (decl_context == MEMFUNCDEF)
7715
    funcdef_flag = true, decl_context = FIELD;
7716
  else if (decl_context == BITFIELD)
7717
    bitfield = 1, decl_context = FIELD;
7718
  else if (decl_context == TEMPLATE_TYPE_ARG)
7719
    template_type_arg = true, decl_context = TYPENAME;
7720
  else if (decl_context == TPARM)
7721
    template_parm_flag = true, decl_context = PARM;
7722
 
7723
  if (initialized > 1)
7724
    funcdef_flag = true;
7725
 
7726
  /* Look inside a declarator for the name being declared
7727
     and get it as a string, for an error message.  */
7728
  for (id_declarator = declarator;
7729
       id_declarator;
7730
       id_declarator = id_declarator->declarator)
7731
    {
7732
      if (id_declarator->kind != cdk_id)
7733
        innermost_code = id_declarator->kind;
7734
 
7735
      switch (id_declarator->kind)
7736
        {
7737
        case cdk_function:
7738
          if (id_declarator->declarator
7739
              && id_declarator->declarator->kind == cdk_id)
7740
            {
7741
              sfk = id_declarator->declarator->u.id.sfk;
7742
              if (sfk == sfk_destructor)
7743
                flags = DTOR_FLAG;
7744
            }
7745
          break;
7746
 
7747
        case cdk_id:
7748
          {
7749
            tree qualifying_scope = id_declarator->u.id.qualifying_scope;
7750
            tree decl = id_declarator->u.id.unqualified_name;
7751
            if (!decl)
7752
              break;
7753
            if (qualifying_scope)
7754
              {
7755
                if (at_function_scope_p ())
7756
                  {
7757
                    /* [dcl.meaning]
7758
 
7759
                       A declarator-id shall not be qualified except
7760
                       for ...
7761
 
7762
                       None of the cases are permitted in block
7763
                       scope.  */
7764
                    if (qualifying_scope == global_namespace)
7765
                      error ("invalid use of qualified-name %<::%D%>",
7766
                             decl);
7767
                    else if (TYPE_P (qualifying_scope))
7768
                      error ("invalid use of qualified-name %<%T::%D%>",
7769
                             qualifying_scope, decl);
7770
                    else
7771
                      error ("invalid use of qualified-name %<%D::%D%>",
7772
                             qualifying_scope, decl);
7773
                    return error_mark_node;
7774
                  }
7775
                else if (TYPE_P (qualifying_scope))
7776
                  {
7777
                    ctype = qualifying_scope;
7778
                    if (innermost_code != cdk_function
7779
                        && current_class_type
7780
                        && !UNIQUELY_DERIVED_FROM_P (ctype,
7781
                                                     current_class_type))
7782
                      {
7783
                        error ("type %qT is not derived from type %qT",
7784
                               ctype, current_class_type);
7785
                        return error_mark_node;
7786
                      }
7787
                  }
7788
                else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
7789
                  in_namespace = qualifying_scope;
7790
              }
7791
            switch (TREE_CODE (decl))
7792
              {
7793
              case BIT_NOT_EXPR:
7794
                {
7795
                  tree type;
7796
 
7797
                  if (innermost_code != cdk_function)
7798
                    {
7799
                      error ("declaration of %qD as non-function", decl);
7800
                      return error_mark_node;
7801
                    }
7802
                  else if (!qualifying_scope
7803
                           && !(current_class_type && at_class_scope_p ()))
7804
                    {
7805
                      error ("declaration of %qD as non-member", decl);
7806
                      return error_mark_node;
7807
                    }
7808
 
7809
                  type = TREE_OPERAND (decl, 0);
7810
                  if (TYPE_P (type))
7811
                    type = constructor_name (type);
7812
                  name = identifier_to_locale (IDENTIFIER_POINTER (type));
7813
                  dname = decl;
7814
                }
7815
                break;
7816
 
7817
              case TEMPLATE_ID_EXPR:
7818
                {
7819
                  tree fns = TREE_OPERAND (decl, 0);
7820
 
7821
                  dname = fns;
7822
                  if (TREE_CODE (dname) != IDENTIFIER_NODE)
7823
                    {
7824
                      gcc_assert (is_overloaded_fn (dname));
7825
                      dname = DECL_NAME (get_first_fn (dname));
7826
                    }
7827
                }
7828
                /* Fall through.  */
7829
 
7830
              case IDENTIFIER_NODE:
7831
                if (TREE_CODE (decl) == IDENTIFIER_NODE)
7832
                  dname = decl;
7833
 
7834
                if (C_IS_RESERVED_WORD (dname))
7835
                  {
7836
                    error ("declarator-id missing; using reserved word %qD",
7837
                           dname);
7838
                    name = identifier_to_locale (IDENTIFIER_POINTER (dname));
7839
                  }
7840
                else if (!IDENTIFIER_TYPENAME_P (dname))
7841
                  name = identifier_to_locale (IDENTIFIER_POINTER (dname));
7842
                else
7843
                  {
7844
                    gcc_assert (flags == NO_SPECIAL);
7845
                    flags = TYPENAME_FLAG;
7846
                    ctor_return_type = TREE_TYPE (dname);
7847
                    sfk = sfk_conversion;
7848
                    if (is_typename_at_global_scope (dname))
7849
                      name = identifier_to_locale (IDENTIFIER_POINTER (dname));
7850
                    else
7851
                      name = "<invalid operator>";
7852
                  }
7853
                break;
7854
 
7855
              default:
7856
                gcc_unreachable ();
7857
              }
7858
            break;
7859
          }
7860
 
7861
        case cdk_array:
7862
        case cdk_pointer:
7863
        case cdk_reference:
7864
        case cdk_ptrmem:
7865
          break;
7866
 
7867
        case cdk_error:
7868
          return error_mark_node;
7869
 
7870
        default:
7871
          gcc_unreachable ();
7872
        }
7873
      if (id_declarator->kind == cdk_id)
7874
        break;
7875
    }
7876
 
7877
  /* [dcl.fct.edf]
7878
 
7879
     The declarator in a function-definition shall have the form
7880
     D1 ( parameter-declaration-clause) ...  */
7881
  if (funcdef_flag && innermost_code != cdk_function)
7882
    {
7883
      error ("function definition does not declare parameters");
7884
      return error_mark_node;
7885
    }
7886
 
7887
  if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
7888
      && innermost_code != cdk_function
7889
      && ! (ctype && !declspecs->any_specifiers_p))
7890
    {
7891
      error ("declaration of %qD as non-function", dname);
7892
      return error_mark_node;
7893
    }
7894
 
7895
  /* Anything declared one level down from the top level
7896
     must be one of the parameters of a function
7897
     (because the body is at least two levels down).  */
7898
 
7899
  /* This heuristic cannot be applied to C++ nodes! Fixed, however,
7900
     by not allowing C++ class definitions to specify their parameters
7901
     with xdecls (must be spec.d in the parmlist).
7902
 
7903
     Since we now wait to push a class scope until we are sure that
7904
     we are in a legitimate method context, we must set oldcname
7905
     explicitly (since current_class_name is not yet alive).
7906
 
7907
     We also want to avoid calling this a PARM if it is in a namespace.  */
7908
 
7909
  if (decl_context == NORMAL && !toplevel_bindings_p ())
7910
    {
7911
      struct cp_binding_level *b = current_binding_level;
7912
      current_binding_level = b->level_chain;
7913
      if (current_binding_level != 0 && toplevel_bindings_p ())
7914
        decl_context = PARM;
7915
      current_binding_level = b;
7916
    }
7917
 
7918
  if (name == NULL)
7919
    name = decl_context == PARM ? "parameter" : "type name";
7920
 
7921
  /* If there were multiple types specified in the decl-specifier-seq,
7922
     issue an error message.  */
7923
  if (declspecs->multiple_types_p)
7924
    {
7925
      error ("two or more data types in declaration of %qs", name);
7926
      return error_mark_node;
7927
    }
7928
 
7929
  if (declspecs->conflicting_specifiers_p)
7930
    {
7931
      error ("conflicting specifiers in declaration of %qs", name);
7932
      return error_mark_node;
7933
    }
7934
 
7935
  /* Extract the basic type from the decl-specifier-seq.  */
7936
  type = declspecs->type;
7937
  if (type == error_mark_node)
7938
    {
7939
      type = NULL_TREE;
7940
      type_was_error_mark_node = true;
7941
    }
7942
  /* If the entire declaration is itself tagged as deprecated then
7943
     suppress reports of deprecated items.  */
7944
  if (type && TREE_DEPRECATED (type)
7945
      && deprecated_state != DEPRECATED_SUPPRESS)
7946
    warn_deprecated_use (type, NULL_TREE);
7947
  if (type && TREE_CODE (type) == TYPE_DECL)
7948
    {
7949
      typedef_decl = type;
7950
      type = TREE_TYPE (typedef_decl);
7951
      if (TREE_DEPRECATED (type)
7952
          && DECL_ARTIFICIAL (typedef_decl)
7953
          && deprecated_state != DEPRECATED_SUPPRESS)
7954
        warn_deprecated_use (type, NULL_TREE);
7955
    }
7956
  /* No type at all: default to `int', and set DEFAULTED_INT
7957
     because it was not a user-defined typedef.  */
7958
  if (type == NULL_TREE && (signed_p || unsigned_p || long_p || short_p))
7959
    {
7960
      /* These imply 'int'.  */
7961
      type = integer_type_node;
7962
      defaulted_int = 1;
7963
    }
7964
  /* Gather flags.  */
7965
  explicit_int = declspecs->explicit_int_p;
7966
  explicit_char = declspecs->explicit_char_p;
7967
 
7968
#if 0
7969
  /* See the code below that used this.  */
7970
  if (typedef_decl)
7971
    decl_attr = DECL_ATTRIBUTES (typedef_decl);
7972
#endif
7973
  typedef_type = type;
7974
 
7975
 
7976
  if (sfk != sfk_conversion)
7977
    ctor_return_type = ctype;
7978
 
7979
  if (sfk != sfk_none)
7980
    type = check_special_function_return_type (sfk, type,
7981
                                               ctor_return_type);
7982
  else if (type == NULL_TREE)
7983
    {
7984
      int is_main;
7985
 
7986
      explicit_int = -1;
7987
 
7988
      /* We handle `main' specially here, because 'main () { }' is so
7989
         common.  With no options, it is allowed.  With -Wreturn-type,
7990
         it is a warning.  It is only an error with -pedantic-errors.  */
7991
      is_main = (funcdef_flag
7992
                 && dname && MAIN_NAME_P (dname)
7993
                 && ctype == NULL_TREE
7994
                 && in_namespace == NULL_TREE
7995
                 && current_namespace == global_namespace);
7996
 
7997
      if (type_was_error_mark_node)
7998
        /* We've already issued an error, don't complain more.  */;
7999
      else if (in_system_header || flag_ms_extensions)
8000
        /* Allow it, sigh.  */;
8001
      else if (! is_main)
8002
        permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
8003
      else if (pedantic)
8004
        pedwarn (input_location, OPT_pedantic,
8005
                 "ISO C++ forbids declaration of %qs with no type", name);
8006
      else
8007
        warning (OPT_Wreturn_type,
8008
                 "ISO C++ forbids declaration of %qs with no type", name);
8009
 
8010
      type = integer_type_node;
8011
    }
8012
 
8013
  ctype = NULL_TREE;
8014
 
8015
  /* Now process the modifiers that were specified
8016
     and check for invalid combinations.  */
8017
 
8018
  /* Long double is a special combination.  */
8019
  if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
8020
    {
8021
      long_p = false;
8022
      type = build_qualified_type (long_double_type_node,
8023
                                   cp_type_quals (type));
8024
    }
8025
 
8026
  /* Check all other uses of type modifiers.  */
8027
 
8028
  if (unsigned_p || signed_p || long_p || short_p)
8029
    {
8030
      int ok = 0;
8031
 
8032
      if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
8033
        error ("%<signed%> or %<unsigned%> invalid for %qs", name);
8034
      else if (signed_p && unsigned_p)
8035
        error ("%<signed%> and %<unsigned%> specified together for %qs", name);
8036
      else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
8037
        error ("%<long long%> invalid for %qs", name);
8038
      else if (long_p && TREE_CODE (type) == REAL_TYPE)
8039
        error ("%<long%> invalid for %qs", name);
8040
      else if (short_p && TREE_CODE (type) == REAL_TYPE)
8041
        error ("%<short%> invalid for %qs", name);
8042
      else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE)
8043
        error ("%<long%> or %<short%> invalid for %qs", name);
8044
      else if ((long_p || short_p) && explicit_char)
8045
        error ("%<long%> or %<short%> specified with char for %qs", name);
8046
      else if (long_p && short_p)
8047
        error ("%<long%> and %<short%> specified together for %qs", name);
8048
      else if (type == char16_type_node || type == char32_type_node)
8049
        {
8050
          if (signed_p || unsigned_p)
8051
            error ("%<signed%> or %<unsigned%> invalid for %qs", name);
8052
          else if (short_p || long_p)
8053
            error ("%<short%> or %<long%> invalid for %qs", name);
8054
        }
8055
      else
8056
        {
8057
          ok = 1;
8058
          if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
8059
            {
8060
              pedwarn (input_location, OPT_pedantic,
8061
                       "long, short, signed or unsigned used invalidly for %qs",
8062
                       name);
8063
              if (flag_pedantic_errors)
8064
                ok = 0;
8065
            }
8066
        }
8067
 
8068
      /* Discard the type modifiers if they are invalid.  */
8069
      if (! ok)
8070
        {
8071
          unsigned_p = false;
8072
          signed_p = false;
8073
          long_p = false;
8074
          short_p = false;
8075
          longlong = 0;
8076
        }
8077
    }
8078
 
8079
  /* Decide whether an integer type is signed or not.
8080
     Optionally treat bitfields as signed by default.  */
8081
  if (unsigned_p
8082
      /* [class.bit]
8083
 
8084
         It is implementation-defined whether a plain (neither
8085
         explicitly signed or unsigned) char, short, int, or long
8086
         bit-field is signed or unsigned.
8087
 
8088
         Naturally, we extend this to long long as well.  Note that
8089
         this does not include wchar_t.  */
8090
      || (bitfield && !flag_signed_bitfields
8091
          && !signed_p
8092
          /* A typedef for plain `int' without `signed' can be
8093
             controlled just like plain `int', but a typedef for
8094
             `signed int' cannot be so controlled.  */
8095
          && !(typedef_decl
8096
               && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
8097
          && TREE_CODE (type) == INTEGER_TYPE
8098
          && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
8099
    {
8100
      if (longlong)
8101
        type = long_long_unsigned_type_node;
8102
      else if (long_p)
8103
        type = long_unsigned_type_node;
8104
      else if (short_p)
8105
        type = short_unsigned_type_node;
8106
      else if (type == char_type_node)
8107
        type = unsigned_char_type_node;
8108
      else if (typedef_decl)
8109
        type = unsigned_type_for (type);
8110
      else
8111
        type = unsigned_type_node;
8112
    }
8113
  else if (signed_p && type == char_type_node)
8114
    type = signed_char_type_node;
8115
  else if (longlong)
8116
    type = long_long_integer_type_node;
8117
  else if (long_p)
8118
    type = long_integer_type_node;
8119
  else if (short_p)
8120
    type = short_integer_type_node;
8121
 
8122
  if (declspecs->specs[(int)ds_complex])
8123
    {
8124
      if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
8125
        error ("complex invalid for %qs", name);
8126
      /* If we just have "complex", it is equivalent to
8127
         "complex double", but if any modifiers at all are specified it is
8128
         the complex form of TYPE.  E.g, "complex short" is
8129
         "complex short int".  */
8130
 
8131
      else if (defaulted_int && ! longlong
8132
               && ! (long_p || short_p || signed_p || unsigned_p))
8133
        type = complex_double_type_node;
8134
      else if (type == integer_type_node)
8135
        type = complex_integer_type_node;
8136
      else if (type == float_type_node)
8137
        type = complex_float_type_node;
8138
      else if (type == double_type_node)
8139
        type = complex_double_type_node;
8140
      else if (type == long_double_type_node)
8141
        type = complex_long_double_type_node;
8142
      else
8143
        type = build_complex_type (type);
8144
    }
8145
 
8146
  type_quals = TYPE_UNQUALIFIED;
8147
  if (declspecs->specs[(int)ds_const])
8148
    type_quals |= TYPE_QUAL_CONST;
8149
  /* A `constexpr' specifier used in an object declaration declares
8150
     the object as `const'.  */
8151
  if (constexpr_p)
8152
    {
8153
      if (innermost_code == cdk_function)
8154
        ;
8155
      else if (declspecs->specs[(int)ds_const] != 0)
8156
        error ("both %<const%> and %<constexpr%> cannot be used here");
8157
      else
8158
        type_quals |= TYPE_QUAL_CONST;
8159
    }
8160
  if (declspecs->specs[(int)ds_volatile])
8161
    type_quals |= TYPE_QUAL_VOLATILE;
8162
  if (declspecs->specs[(int)ds_restrict])
8163
    type_quals |= TYPE_QUAL_RESTRICT;
8164
  if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
8165
    error ("qualifiers are not allowed on declaration of %<operator %T%>",
8166
           ctor_return_type);
8167
 
8168
  if (TREE_CODE (type) == FUNCTION_TYPE
8169
      && type_quals != TYPE_UNQUALIFIED)
8170
    {
8171
      /* This was an error in C++98 (cv-qualifiers cannot be added to
8172
         a function type), but DR 295 makes the code well-formed by
8173
         dropping the extra qualifiers. */
8174
      if (pedantic && cxx_dialect == cxx98)
8175
        {
8176
          tree bad_type = build_qualified_type (type, type_quals);
8177
          pedwarn (input_location, OPT_pedantic,
8178
                   "ignoring %qV qualifiers added to function type %qT",
8179
                   bad_type, type);
8180
        }
8181
      type_quals = TYPE_UNQUALIFIED;
8182
    }
8183
  type_quals |= cp_type_quals (type);
8184
  type = cp_build_qualified_type_real
8185
    (type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
8186
                         ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
8187
  /* We might have ignored or rejected some of the qualifiers.  */
8188
  type_quals = cp_type_quals (type);
8189
 
8190
  staticp = 0;
8191
  inlinep = !! declspecs->specs[(int)ds_inline];
8192
  virtualp = !! declspecs->specs[(int)ds_virtual];
8193
  explicitp = !! declspecs->specs[(int)ds_explicit];
8194
 
8195
  storage_class = declspecs->storage_class;
8196
  if (storage_class == sc_static)
8197
    staticp = 1 + (decl_context == FIELD);
8198
 
8199
  if (virtualp && staticp == 2)
8200
    {
8201
      error ("member %qD cannot be declared both virtual and static", dname);
8202
      storage_class = sc_none;
8203
      staticp = 0;
8204
    }
8205
  friendp = !! declspecs->specs[(int)ds_friend];
8206
 
8207
  if (dependent_name && !friendp)
8208
    {
8209
      error ("%<%T::%D%> is not a valid declarator", ctype, dependent_name);
8210
      return error_mark_node;
8211
    }
8212
 
8213
  /* Issue errors about use of storage classes for parameters.  */
8214
  if (decl_context == PARM)
8215
    {
8216
      if (declspecs->specs[(int)ds_typedef])
8217
        {
8218
          error ("typedef declaration invalid in parameter declaration");
8219
          return error_mark_node;
8220
        }
8221
      else if (template_parm_flag && storage_class != sc_none)
8222
        {
8223
          error ("storage class specified for template parameter %qs", name);
8224
          return error_mark_node;
8225
        }
8226
      else if (storage_class == sc_static
8227
               || storage_class == sc_extern
8228
               || thread_p)
8229
        error ("storage class specifiers invalid in parameter declarations");
8230
 
8231
      if (type_uses_auto (type))
8232
        {
8233
          error ("parameter declared %<auto%>");
8234
          type = error_mark_node;
8235
        }
8236
 
8237
      /* Function parameters cannot be constexpr.  If we saw one, moan
8238
         and pretend it wasn't there.  */
8239
      if (constexpr_p)
8240
        {
8241
          error ("a parameter cannot be declared %<constexpr%>");
8242
          constexpr_p = 0;
8243
        }
8244
    }
8245
 
8246
  /* Give error if `virtual' is used outside of class declaration.  */
8247
  if (virtualp
8248
      && (current_class_name == NULL_TREE || decl_context != FIELD))
8249
    {
8250
      error ("%<virtual%> outside class declaration");
8251
      virtualp = 0;
8252
    }
8253
 
8254
  /* Static anonymous unions are dealt with here.  */
8255
  if (staticp && decl_context == TYPENAME
8256
      && declspecs->type
8257
      && ANON_AGGR_TYPE_P (declspecs->type))
8258
    decl_context = FIELD;
8259
 
8260
  /* Warn about storage classes that are invalid for certain
8261
     kinds of declarations (parameters, typenames, etc.).  */
8262
  if (thread_p
8263
      && ((storage_class
8264
           && storage_class != sc_extern
8265
           && storage_class != sc_static)
8266
          || declspecs->specs[(int)ds_typedef]))
8267
    {
8268
      error ("multiple storage classes in declaration of %qs", name);
8269
      thread_p = false;
8270
    }
8271
  if (decl_context != NORMAL
8272
      && ((storage_class != sc_none
8273
           && storage_class != sc_mutable)
8274
          || thread_p))
8275
    {
8276
      if ((decl_context == PARM || decl_context == CATCHPARM)
8277
          && (storage_class == sc_register
8278
              || storage_class == sc_auto))
8279
        ;
8280
      else if (declspecs->specs[(int)ds_typedef])
8281
        ;
8282
      else if (decl_context == FIELD
8283
               /* C++ allows static class elements.  */
8284
               && storage_class == sc_static)
8285
        /* C++ also allows inlines and signed and unsigned elements,
8286
           but in those cases we don't come in here.  */
8287
        ;
8288
      else
8289
        {
8290
          if (decl_context == FIELD)
8291
            error ("storage class specified for %qs", name);
8292
          else
8293
            {
8294
              if (decl_context == PARM || decl_context == CATCHPARM)
8295
                error ("storage class specified for parameter %qs", name);
8296
              else
8297
                error ("storage class specified for typename");
8298
            }
8299
          if (storage_class == sc_register
8300
              || storage_class == sc_auto
8301
              || storage_class == sc_extern
8302
              || thread_p)
8303
            storage_class = sc_none;
8304
        }
8305
    }
8306
  else if (storage_class == sc_extern && funcdef_flag
8307
           && ! toplevel_bindings_p ())
8308
    error ("nested function %qs declared %<extern%>", name);
8309
  else if (toplevel_bindings_p ())
8310
    {
8311
      if (storage_class == sc_auto)
8312
        error ("top-level declaration of %qs specifies %<auto%>", name);
8313
    }
8314
  else if (thread_p
8315
           && storage_class != sc_extern
8316
           && storage_class != sc_static)
8317
    {
8318
      error ("function-scope %qs implicitly auto and declared %<__thread%>",
8319
             name);
8320
      thread_p = false;
8321
    }
8322
 
8323
  if (storage_class && friendp)
8324
    {
8325
      error ("storage class specifiers invalid in friend function declarations");
8326
      storage_class = sc_none;
8327
      staticp = 0;
8328
    }
8329
 
8330
  if (!id_declarator)
8331
    unqualified_id = NULL_TREE;
8332
  else
8333
    {
8334
      unqualified_id = id_declarator->u.id.unqualified_name;
8335
      switch (TREE_CODE (unqualified_id))
8336
        {
8337
        case BIT_NOT_EXPR:
8338
          unqualified_id = TREE_OPERAND (unqualified_id, 0);
8339
          if (TYPE_P (unqualified_id))
8340
            unqualified_id = constructor_name (unqualified_id);
8341
          break;
8342
 
8343
        case IDENTIFIER_NODE:
8344
        case TEMPLATE_ID_EXPR:
8345
          break;
8346
 
8347
        default:
8348
          gcc_unreachable ();
8349
        }
8350
    }
8351
 
8352
  /* Determine the type of the entity declared by recurring on the
8353
     declarator.  */
8354
  for (; declarator; declarator = declarator->declarator)
8355
    {
8356
      const cp_declarator *inner_declarator;
8357
      tree attrs;
8358
 
8359
      if (type == error_mark_node)
8360
        return error_mark_node;
8361
 
8362
      attrs = declarator->attributes;
8363
      if (attrs)
8364
        {
8365
          int attr_flags;
8366
 
8367
          attr_flags = 0;
8368
          if (declarator == NULL || declarator->kind == cdk_id)
8369
            attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
8370
          if (declarator->kind == cdk_function)
8371
            attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
8372
          if (declarator->kind == cdk_array)
8373
            attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
8374
          returned_attrs = decl_attributes (&type,
8375
                                            chainon (returned_attrs, attrs),
8376
                                            attr_flags);
8377
        }
8378
 
8379
      if (declarator->kind == cdk_id)
8380
        break;
8381
 
8382
      inner_declarator = declarator->declarator;
8383
 
8384
      switch (declarator->kind)
8385
        {
8386
        case cdk_array:
8387
          type = create_array_type_for_decl (dname, type,
8388
                                             declarator->u.array.bounds);
8389
          break;
8390
 
8391
        case cdk_function:
8392
          {
8393
            tree arg_types;
8394
            int funcdecl_p;
8395
 
8396
            /* Declaring a function type.
8397
               Make sure we have a valid type for the function to return.  */
8398
 
8399
            if (type_quals != TYPE_UNQUALIFIED)
8400
              {
8401
                if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
8402
                  warning (OPT_Wignored_qualifiers,
8403
                           "type qualifiers ignored on function return type");
8404
                /* We now know that the TYPE_QUALS don't apply to the
8405
                   decl, but to its return type.  */
8406
                type_quals = TYPE_UNQUALIFIED;
8407
              }
8408
            errmsg = targetm.invalid_return_type (type);
8409
            if (errmsg)
8410
              {
8411
                error (errmsg);
8412
                type = integer_type_node;
8413
              }
8414
 
8415
            /* Error about some types functions can't return.  */
8416
 
8417
            if (TREE_CODE (type) == FUNCTION_TYPE)
8418
              {
8419
                error ("%qs declared as function returning a function", name);
8420
                return error_mark_node;
8421
              }
8422
            if (TREE_CODE (type) == ARRAY_TYPE)
8423
              {
8424
                error ("%qs declared as function returning an array", name);
8425
                return error_mark_node;
8426
              }
8427
 
8428
            /* Pick up type qualifiers which should be applied to `this'.  */
8429
            memfn_quals = declarator->u.function.qualifiers;
8430
 
8431
            /* Pick up the exception specifications.  */
8432
            raises = declarator->u.function.exception_specification;
8433
 
8434
            /* Say it's a definition only for the CALL_EXPR
8435
               closest to the identifier.  */
8436
            funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
8437
 
8438
            /* Handle a late-specified return type.  */
8439
            if (funcdecl_p)
8440
              {
8441
                if (type_uses_auto (type))
8442
                  {
8443
                    if (!declarator->u.function.late_return_type)
8444
                      {
8445
                        error ("%qs function uses %<auto%> type specifier without"
8446
                               " late return type", name);
8447
                        return error_mark_node;
8448
                      }
8449
                    else if (!is_auto (type))
8450
                      {
8451
                        error ("%qs function with late return type has"
8452
                               " %qT as its type rather than plain %<auto%>",
8453
                               name, type);
8454
                        return error_mark_node;
8455
                      }
8456
                  }
8457
                else if (declarator->u.function.late_return_type)
8458
                  {
8459
                    error ("%qs function with late return type not declared"
8460
                           " with %<auto%> type specifier", name);
8461
                    return error_mark_node;
8462
                  }
8463
              }
8464
            type = splice_late_return_type
8465
              (type, declarator->u.function.late_return_type);
8466
            if (type == error_mark_node)
8467
              return error_mark_node;
8468
 
8469
            if (ctype == NULL_TREE
8470
                && decl_context == FIELD
8471
                && funcdecl_p
8472
                && (friendp == 0 || dname == current_class_name))
8473
              ctype = current_class_type;
8474
 
8475
            if (ctype && (sfk == sfk_constructor
8476
                          || sfk == sfk_destructor))
8477
              {
8478
                /* We are within a class's scope. If our declarator name
8479
                   is the same as the class name, and we are defining
8480
                   a function, then it is a constructor/destructor, and
8481
                   therefore returns a void type.  */
8482
 
8483
                /* ISO C++ 12.4/2.  A destructor may not be declared
8484
                   const or volatile.  A destructor may not be
8485
                   static.
8486
 
8487
                   ISO C++ 12.1.  A constructor may not be declared
8488
                   const or volatile.  A constructor may not be
8489
                   virtual.  A constructor may not be static.  */
8490
                if (staticp == 2)
8491
                  error ((flags == DTOR_FLAG)
8492
                         ? "destructor cannot be static member function"
8493
                         : "constructor cannot be static member function");
8494
                if (memfn_quals)
8495
                  {
8496
                    error ((flags == DTOR_FLAG)
8497
                           ? "destructors may not be cv-qualified"
8498
                           : "constructors may not be cv-qualified");
8499
                    memfn_quals = TYPE_UNQUALIFIED;
8500
                  }
8501
 
8502
                if (decl_context == FIELD
8503
                    && !member_function_or_else (ctype,
8504
                                                 current_class_type,
8505
                                                 flags))
8506
                  return error_mark_node;
8507
 
8508
                if (flags != DTOR_FLAG)
8509
                  {
8510
                    /* It's a constructor.  */
8511
                    if (explicitp == 1)
8512
                      explicitp = 2;
8513
                    if (virtualp)
8514
                      {
8515
                        permerror (input_location, "constructors cannot be declared virtual");
8516
                        virtualp = 0;
8517
                      }
8518
                    if (decl_context == FIELD
8519
                        && sfk != sfk_constructor)
8520
                      return error_mark_node;
8521
                  }
8522
                if (decl_context == FIELD)
8523
                  staticp = 0;
8524
              }
8525
            else if (friendp)
8526
              {
8527
                if (initialized)
8528
                  error ("can't initialize friend function %qs", name);
8529
                if (virtualp)
8530
                  {
8531
                    /* Cannot be both friend and virtual.  */
8532
                    error ("virtual functions cannot be friends");
8533
                    friendp = 0;
8534
                  }
8535
                if (decl_context == NORMAL)
8536
                  error ("friend declaration not in class definition");
8537
                if (current_function_decl && funcdef_flag)
8538
                  error ("can't define friend function %qs in a local "
8539
                         "class definition",
8540
                         name);
8541
              }
8542
            else if (ctype && sfk == sfk_conversion)
8543
              {
8544
                if (explicitp == 1)
8545
                  {
8546
                    maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION);
8547
                    explicitp = 2;
8548
                  }
8549
              }
8550
 
8551
            /* It is not allowed to use `constexpr' in a function
8552
               declaration that is not a definition.
8553
               That is too strict, though.  */
8554
            if (constexpr_p && !funcdef_flag)
8555
              {
8556
                error ("the %<constexpr%> specifier cannot be used in "
8557
                       "a function declaration that is not a definition");
8558
                constexpr_p = false;
8559
              }
8560
 
8561
            /* A constexpr non-static member function is implicitly const.  */
8562
            if (constexpr_p && decl_context == FIELD && staticp == 0
8563
                && sfk != sfk_constructor && sfk != sfk_destructor)
8564
              memfn_quals |= TYPE_QUAL_CONST;
8565
 
8566
            arg_types = grokparms (declarator->u.function.parameters,
8567
                                   &parms);
8568
 
8569
            if (inner_declarator
8570
                && inner_declarator->kind == cdk_id
8571
                && inner_declarator->u.id.sfk == sfk_destructor
8572
                && arg_types != void_list_node)
8573
              {
8574
                error ("destructors may not have parameters");
8575
                arg_types = void_list_node;
8576
                parms = NULL_TREE;
8577
              }
8578
 
8579
            type = build_function_type (type, arg_types);
8580
          }
8581
          break;
8582
 
8583
        case cdk_pointer:
8584
        case cdk_reference:
8585
        case cdk_ptrmem:
8586
          /* Filter out pointers-to-references and references-to-references.
8587
             We can get these if a TYPE_DECL is used.  */
8588
 
8589
          if (TREE_CODE (type) == REFERENCE_TYPE)
8590
            {
8591
              if (declarator->kind != cdk_reference)
8592
                {
8593
                  error ("cannot declare pointer to %q#T", type);
8594
                  type = TREE_TYPE (type);
8595
                }
8596
 
8597
              /* In C++0x, we allow reference to reference declarations
8598
                 that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
8599
                 and template type arguments [14.3.1/4 temp.arg.type]. The
8600
                 check for direct reference to reference declarations, which
8601
                 are still forbidden, occurs below. Reasoning behind the change
8602
                 can be found in DR106, DR540, and the rvalue reference
8603
                 proposals. */
8604
              else if (cxx_dialect == cxx98)
8605
                {
8606
                  error ("cannot declare reference to %q#T", type);
8607
                  type = TREE_TYPE (type);
8608
                }
8609
            }
8610
          else if (VOID_TYPE_P (type))
8611
            {
8612
              if (declarator->kind == cdk_reference)
8613
                error ("cannot declare reference to %q#T", type);
8614
              else if (declarator->kind == cdk_ptrmem)
8615
                error ("cannot declare pointer to %q#T member", type);
8616
            }
8617
 
8618
          /* We now know that the TYPE_QUALS don't apply to the decl,
8619
             but to the target of the pointer.  */
8620
          type_quals = TYPE_UNQUALIFIED;
8621
 
8622
          if (declarator->kind == cdk_ptrmem
8623
              && (TREE_CODE (type) == FUNCTION_TYPE
8624
                  || (memfn_quals && TREE_CODE (type) == METHOD_TYPE)))
8625
            {
8626
              memfn_quals |= cp_type_quals (type);
8627
              type = build_memfn_type (type,
8628
                                       declarator->u.pointer.class_type,
8629
                                       memfn_quals);
8630
              memfn_quals = TYPE_UNQUALIFIED;
8631
            }
8632
 
8633
          if (TREE_CODE (type) == FUNCTION_TYPE
8634
              && cp_type_quals (type) != TYPE_UNQUALIFIED)
8635
            error (declarator->kind == cdk_reference
8636
                   ? G_("cannot declare reference to qualified function type %qT")
8637
                   : G_("cannot declare pointer to qualified function type %qT"),
8638
                   type);
8639
 
8640
          /* When the pointed-to type involves components of variable size,
8641
             care must be taken to ensure that the size evaluation code is
8642
             emitted early enough to dominate all the possible later uses
8643
             and late enough for the variables on which it depends to have
8644
             been assigned.
8645
 
8646
             This is expected to happen automatically when the pointed-to
8647
             type has a name/declaration of it's own, but special attention
8648
             is required if the type is anonymous.
8649
 
8650
             We handle the NORMAL and FIELD contexts here by inserting a
8651
             dummy statement that just evaluates the size at a safe point
8652
             and ensures it is not deferred until e.g. within a deeper
8653
             conditional context (c++/43555).
8654
 
8655
             We expect nothing to be needed here for PARM or TYPENAME.
8656
             Evaluating the size at this point for TYPENAME would
8657
             actually be incorrect, as we might be in the middle of an
8658
             expression with side effects on the pointed-to type size
8659
             "arguments" prior to the pointer declaration point and the
8660
             size evaluation could end up prior to the side effects.  */
8661
 
8662
          if (!TYPE_NAME (type)
8663
              && (decl_context == NORMAL || decl_context == FIELD)
8664
              && at_function_scope_p ()
8665
              && variably_modified_type_p (type, NULL_TREE))
8666
            finish_expr_stmt (TYPE_SIZE (type));
8667
 
8668
          if (declarator->kind == cdk_reference)
8669
            {
8670
              /* In C++0x, the type we are creating a reference to might be
8671
                 a typedef which is itself a reference type. In that case,
8672
                 we follow the reference collapsing rules in
8673
                 [7.1.3/8 dcl.typedef] to create the final reference type:
8674
 
8675
                 "If a typedef TD names a type that is a reference to a type
8676
                 T, an attempt to create the type 'lvalue reference to cv TD'
8677
                 creates the type 'lvalue reference to T,' while an attempt
8678
                 to create the type "rvalue reference to cv TD' creates the
8679
                 type TD."
8680
              */
8681
              if (!VOID_TYPE_P (type))
8682
                type = cp_build_reference_type
8683
                       ((TREE_CODE (type) == REFERENCE_TYPE
8684
                         ? TREE_TYPE (type) : type),
8685
                        (declarator->u.reference.rvalue_ref
8686
                         && (TREE_CODE(type) != REFERENCE_TYPE
8687
                             || TYPE_REF_IS_RVALUE (type))));
8688
 
8689
              /* In C++0x, we need this check for direct reference to
8690
                 reference declarations, which are forbidden by
8691
                 [8.3.2/5 dcl.ref]. Reference to reference declarations
8692
                 are only allowed indirectly through typedefs and template
8693
                 type arguments. Example:
8694
 
8695
                   void foo(int & &);      // invalid ref-to-ref decl
8696
 
8697
                   typedef int & int_ref;
8698
                   void foo(int_ref &);    // valid ref-to-ref decl
8699
              */
8700
              if (inner_declarator && inner_declarator->kind == cdk_reference)
8701
                error ("cannot declare reference to %q#T, which is not "
8702
                       "a typedef or a template type argument", type);
8703
            }
8704
          else if (TREE_CODE (type) == METHOD_TYPE)
8705
            type = build_ptrmemfunc_type (build_pointer_type (type));
8706
          else if (declarator->kind == cdk_ptrmem)
8707
            {
8708
              gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
8709
                          != NAMESPACE_DECL);
8710
              if (declarator->u.pointer.class_type == error_mark_node)
8711
                /* We will already have complained.  */
8712
                type = error_mark_node;
8713
              else
8714
                type = build_ptrmem_type (declarator->u.pointer.class_type,
8715
                                          type);
8716
            }
8717
          else
8718
            type = build_pointer_type (type);
8719
 
8720
          /* Process a list of type modifier keywords (such as
8721
             const or volatile) that were given inside the `*' or `&'.  */
8722
 
8723
          if (declarator->u.pointer.qualifiers)
8724
            {
8725
              type
8726
                = cp_build_qualified_type (type,
8727
                                           declarator->u.pointer.qualifiers);
8728
              type_quals = cp_type_quals (type);
8729
            }
8730
          ctype = NULL_TREE;
8731
          break;
8732
 
8733
        case cdk_error:
8734
          break;
8735
 
8736
        default:
8737
          gcc_unreachable ();
8738
        }
8739
    }
8740
 
8741
  if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
8742
      && TREE_CODE (type) != FUNCTION_TYPE
8743
      && TREE_CODE (type) != METHOD_TYPE)
8744
    {
8745
      error ("template-id %qD used as a declarator",
8746
             unqualified_id);
8747
      unqualified_id = dname;
8748
    }
8749
 
8750
  /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
8751
     qualified with a class-name, turn it into a METHOD_TYPE, unless
8752
     we know that the function is static.  We take advantage of this
8753
     opportunity to do other processing that pertains to entities
8754
     explicitly declared to be class members.  Note that if DECLARATOR
8755
     is non-NULL, we know it is a cdk_id declarator; otherwise, we
8756
     would not have exited the loop above.  */
8757
  if (declarator
8758
      && declarator->u.id.qualifying_scope
8759
      && TYPE_P (declarator->u.id.qualifying_scope))
8760
    {
8761
      tree t;
8762
 
8763
      ctype = declarator->u.id.qualifying_scope;
8764
      ctype = TYPE_MAIN_VARIANT (ctype);
8765
      t = ctype;
8766
      while (t != NULL_TREE && CLASS_TYPE_P (t))
8767
        {
8768
          /* You're supposed to have one `template <...>' for every
8769
             template class, but you don't need one for a full
8770
             specialization.  For example:
8771
 
8772
               template <class T> struct S{};
8773
               template <> struct S<int> { void f(); };
8774
               void S<int>::f () {}
8775
 
8776
             is correct; there shouldn't be a `template <>' for the
8777
             definition of `S<int>::f'.  */
8778
          if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t)
8779
              && !any_dependent_template_arguments_p (CLASSTYPE_TI_ARGS (t)))
8780
            /* T is an explicit (not partial) specialization.  All
8781
               containing classes must therefore also be explicitly
8782
               specialized.  */
8783
            break;
8784
          if ((CLASSTYPE_USE_TEMPLATE (t) || CLASSTYPE_IS_TEMPLATE (t))
8785
              && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))
8786
            template_count += 1;
8787
 
8788
          t = TYPE_MAIN_DECL (t);
8789
          t = DECL_CONTEXT (t);
8790
        }
8791
 
8792
      if (ctype == current_class_type)
8793
        {
8794
          if (friendp)
8795
            {
8796
              permerror (input_location, "member functions are implicitly friends of their class");
8797
              friendp = 0;
8798
            }
8799
          else
8800
            permerror (declarator->id_loc,
8801
                          "extra qualification %<%T::%> on member %qs",
8802
                          ctype, name);
8803
        }
8804
      else if (/* If the qualifying type is already complete, then we
8805
                  can skip the following checks.  */
8806
               !COMPLETE_TYPE_P (ctype)
8807
               && (/* If the function is being defined, then
8808
                      qualifying type must certainly be complete.  */
8809
                   funcdef_flag
8810
                   /* A friend declaration of "T::f" is OK, even if
8811
                      "T" is a template parameter.  But, if this
8812
                      function is not a friend, the qualifying type
8813
                      must be a class.  */
8814
                   || (!friendp && !CLASS_TYPE_P (ctype))
8815
                   /* For a declaration, the type need not be
8816
                      complete, if either it is dependent (since there
8817
                      is no meaningful definition of complete in that
8818
                      case) or the qualifying class is currently being
8819
                      defined.  */
8820
                   || !(dependent_type_p (ctype)
8821
                        || currently_open_class (ctype)))
8822
               /* Check that the qualifying type is complete.  */
8823
               && !complete_type_or_else (ctype, NULL_TREE))
8824
        return error_mark_node;
8825
      else if (TREE_CODE (type) == FUNCTION_TYPE)
8826
        {
8827
          tree sname = declarator->u.id.unqualified_name;
8828
 
8829
          if (current_class_type
8830
              && (!friendp || funcdef_flag))
8831
            {
8832
              error (funcdef_flag
8833
                     ? "cannot define member function %<%T::%s%> within %<%T%>"
8834
                     : "cannot declare member function %<%T::%s%> within %<%T%>",
8835
                     ctype, name, current_class_type);
8836
              return error_mark_node;
8837
            }
8838
 
8839
          /* It is not permitted to define a member function outside ist
8840
             membership class as `constexpr'.  */
8841
          if (constexpr_p)
8842
            error ("a constexpr function cannot be defined "
8843
                   "outside of its class");
8844
 
8845
          if (TREE_CODE (sname) == IDENTIFIER_NODE
8846
              && NEW_DELETE_OPNAME_P (sname))
8847
            /* Overloaded operator new and operator delete
8848
               are always static functions.  */
8849
            ;
8850
          else
8851
            type = build_memfn_type (type, ctype, memfn_quals);
8852
        }
8853
      else if (declspecs->specs[(int)ds_typedef]
8854
               && current_class_type)
8855
        {
8856
          error ("cannot declare member %<%T::%s%> within %qT",
8857
                 ctype, name, current_class_type);
8858
          return error_mark_node;
8859
        }
8860
    }
8861
 
8862
  /* Now TYPE has the actual type.  */
8863
 
8864
  if (returned_attrs)
8865
    {
8866
      if (attrlist)
8867
        *attrlist = chainon (returned_attrs, *attrlist);
8868
      else
8869
        attrlist = &returned_attrs;
8870
    }
8871
 
8872
  /* Handle parameter packs. */
8873
  if (parameter_pack_p)
8874
    {
8875
      if (decl_context == PARM)
8876
        /* Turn the type into a pack expansion.*/
8877
        type = make_pack_expansion (type);
8878
      else
8879
        error ("non-parameter %qs cannot be a parameter pack", name);
8880
    }
8881
 
8882
  /* Did array size calculations overflow?  */
8883
 
8884
  if (TREE_CODE (type) == ARRAY_TYPE
8885
      && COMPLETE_TYPE_P (type)
8886
      && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
8887
      && TREE_OVERFLOW (TYPE_SIZE_UNIT (type)))
8888
    {
8889
      error ("size of array %qs is too large", name);
8890
      /* If we proceed with the array type as it is, we'll eventually
8891
         crash in tree_low_cst().  */
8892
      type = error_mark_node;
8893
    }
8894
 
8895
  if ((decl_context == FIELD || decl_context == PARM)
8896
      && !processing_template_decl
8897
      && variably_modified_type_p (type, NULL_TREE))
8898
    {
8899
      if (decl_context == FIELD)
8900
        error ("data member may not have variably modified type %qT", type);
8901
      else
8902
        error ("parameter may not have variably modified type %qT", type);
8903
      type = error_mark_node;
8904
    }
8905
 
8906
  if (explicitp == 1 || (explicitp && friendp))
8907
    {
8908
      /* [dcl.fct.spec] The explicit specifier shall only be used in
8909
         declarations of constructors within a class definition.  */
8910
      error ("only declarations of constructors can be %<explicit%>");
8911
      explicitp = 0;
8912
    }
8913
 
8914
  if (storage_class == sc_mutable)
8915
    {
8916
      if (decl_context != FIELD || friendp)
8917
        {
8918
          error ("non-member %qs cannot be declared %<mutable%>", name);
8919
          storage_class = sc_none;
8920
        }
8921
      else if (decl_context == TYPENAME || declspecs->specs[(int)ds_typedef])
8922
        {
8923
          error ("non-object member %qs cannot be declared %<mutable%>", name);
8924
          storage_class = sc_none;
8925
        }
8926
      else if (TREE_CODE (type) == FUNCTION_TYPE
8927
               || TREE_CODE (type) == METHOD_TYPE)
8928
        {
8929
          error ("function %qs cannot be declared %<mutable%>", name);
8930
          storage_class = sc_none;
8931
        }
8932
      else if (staticp)
8933
        {
8934
          error ("static %qs cannot be declared %<mutable%>", name);
8935
          storage_class = sc_none;
8936
        }
8937
      else if (type_quals & TYPE_QUAL_CONST)
8938
        {
8939
          error ("const %qs cannot be declared %<mutable%>", name);
8940
          storage_class = sc_none;
8941
        }
8942
    }
8943
 
8944
  /* If this is declaring a typedef name, return a TYPE_DECL.  */
8945
  if (declspecs->specs[(int)ds_typedef] && decl_context != TYPENAME)
8946
    {
8947
      tree decl;
8948
 
8949
      /* Note that the grammar rejects storage classes
8950
         in typenames, fields or parameters.  */
8951
      if (current_lang_name == lang_name_java)
8952
        TYPE_FOR_JAVA (type) = 1;
8953
 
8954
      /* This declaration:
8955
 
8956
           typedef void f(int) const;
8957
 
8958
         declares a function type which is not a member of any
8959
         particular class, but which is cv-qualified; for
8960
         example "f S::*" declares a pointer to a const-qualified
8961
         member function of S.  We record the cv-qualification in the
8962
         function type.  */
8963
      if (memfn_quals && TREE_CODE (type) == FUNCTION_TYPE)
8964
        {
8965
          type = cp_build_qualified_type (type, memfn_quals);
8966
 
8967
          /* We have now dealt with these qualifiers.  */
8968
          memfn_quals = TYPE_UNQUALIFIED;
8969
        }
8970
 
8971
      if (decl_context == FIELD)
8972
        decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
8973
      else
8974
        decl = build_decl (input_location, TYPE_DECL, unqualified_id, type);
8975
      if (id_declarator && declarator->u.id.qualifying_scope) {
8976
        error_at (DECL_SOURCE_LOCATION (decl),
8977
                  "typedef name may not be a nested-name-specifier");
8978
        TREE_TYPE (decl) = error_mark_node;
8979
      }
8980
 
8981
      if (decl_context != FIELD)
8982
        {
8983
          if (!current_function_decl)
8984
            DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
8985
          else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
8986
                   || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
8987
                       (current_function_decl)))
8988
            /* The TYPE_DECL is "abstract" because there will be
8989
               clones of this constructor/destructor, and there will
8990
               be copies of this TYPE_DECL generated in those
8991
               clones.  */
8992
            DECL_ABSTRACT (decl) = 1;
8993
        }
8994
      else if (constructor_name_p (unqualified_id, current_class_type))
8995
        permerror (input_location, "ISO C++ forbids nested type %qD with same name "
8996
                   "as enclosing class",
8997
                   unqualified_id);
8998
 
8999
      /* If the user declares "typedef struct {...} foo" then the
9000
         struct will have an anonymous name.  Fill that name in now.
9001
         Nothing can refer to it, so nothing needs know about the name
9002
         change.  */
9003
      if (type != error_mark_node
9004
          && unqualified_id
9005
          && TYPE_NAME (type)
9006
          && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
9007
          && TYPE_ANONYMOUS_P (type)
9008
          && cp_type_quals (type) == TYPE_UNQUALIFIED)
9009
        {
9010
          tree t;
9011
 
9012
          /* Replace the anonymous name with the real name everywhere.  */
9013
          for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
9014
            {
9015
              if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
9016
                {
9017
                  debug_hooks->set_name (t, decl);
9018
                  TYPE_NAME (t) = decl;
9019
                }
9020
            }
9021
 
9022
          if (TYPE_LANG_SPECIFIC (type))
9023
            TYPE_WAS_ANONYMOUS (type) = 1;
9024
 
9025
          /* If this is a typedef within a template class, the nested
9026
             type is a (non-primary) template.  The name for the
9027
             template needs updating as well.  */
9028
          if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
9029
            DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
9030
              = TYPE_IDENTIFIER (type);
9031
 
9032
          /* Adjust linkage now that we aren't anonymous anymore.  */
9033
          set_linkage_according_to_type (type, TYPE_MAIN_DECL (type));
9034
          determine_visibility (TYPE_MAIN_DECL (type));
9035
 
9036
          /* FIXME remangle member functions; member functions of a
9037
             type with external linkage have external linkage.  */
9038
        }
9039
 
9040
      if (signed_p
9041
          || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
9042
        C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
9043
 
9044
      bad_specifiers (decl, "type", virtualp,
9045
                      memfn_quals != TYPE_UNQUALIFIED,
9046
                      inlinep, friendp, raises != NULL_TREE);
9047
 
9048
      return decl;
9049
    }
9050
 
9051
  /* Detect the case of an array type of unspecified size
9052
     which came, as such, direct from a typedef name.
9053
     We must copy the type, so that the array's domain can be
9054
     individually set by the object's initializer.  */
9055
 
9056
  if (type && typedef_type
9057
      && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
9058
      && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
9059
    type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
9060
 
9061
  /* Detect where we're using a typedef of function type to declare a
9062
     function. PARMS will not be set, so we must create it now.  */
9063
 
9064
  if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
9065
    {
9066
      tree decls = NULL_TREE;
9067
      tree args;
9068
 
9069
      for (args = TYPE_ARG_TYPES (type);
9070
           args && args != void_list_node;
9071
           args = TREE_CHAIN (args))
9072
        {
9073
          tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
9074
 
9075
          TREE_CHAIN (decl) = decls;
9076
          decls = decl;
9077
        }
9078
 
9079
      parms = nreverse (decls);
9080
 
9081
      if (decl_context != TYPENAME)
9082
        {
9083
          /* A cv-qualifier-seq shall only be part of the function type
9084
             for a non-static member function. [8.3.5/4 dcl.fct] */
9085
          if (cp_type_quals (type) != TYPE_UNQUALIFIED
9086
              && (current_class_type == NULL_TREE || staticp) )
9087
            {
9088
              error (staticp
9089
                     ? G_("qualified function types cannot be used to "
9090
                          "declare static member functions")
9091
                     : G_("qualified function types cannot be used to "
9092
                          "declare free functions"));
9093
              type = TYPE_MAIN_VARIANT (type);
9094
            }
9095
 
9096
          /* The qualifiers on the function type become the qualifiers on
9097
             the non-static member function. */
9098
          memfn_quals |= cp_type_quals (type);
9099
          type_quals = TYPE_UNQUALIFIED;
9100
        }
9101
    }
9102
 
9103
  /* If this is a type name (such as, in a cast or sizeof),
9104
     compute the type and return it now.  */
9105
 
9106
  if (decl_context == TYPENAME)
9107
    {
9108
      /* Note that the grammar rejects storage classes
9109
         in typenames, fields or parameters.  */
9110
      if (type_quals != TYPE_UNQUALIFIED)
9111
        type_quals = TYPE_UNQUALIFIED;
9112
 
9113
      /* Special case: "friend class foo" looks like a TYPENAME context.  */
9114
      if (friendp)
9115
        {
9116
          if (type_quals != TYPE_UNQUALIFIED)
9117
            {
9118
              error ("type qualifiers specified for friend class declaration");
9119
              type_quals = TYPE_UNQUALIFIED;
9120
            }
9121
          if (inlinep)
9122
            {
9123
              error ("%<inline%> specified for friend class declaration");
9124
              inlinep = 0;
9125
            }
9126
 
9127
          if (!current_aggr)
9128
            {
9129
              /* Don't allow friend declaration without a class-key.  */
9130
              if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
9131
                permerror (input_location, "template parameters cannot be friends");
9132
              else if (TREE_CODE (type) == TYPENAME_TYPE)
9133
                permerror (input_location, "friend declaration requires class-key, "
9134
                           "i.e. %<friend class %T::%D%>",
9135
                           TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
9136
              else
9137
                permerror (input_location, "friend declaration requires class-key, "
9138
                           "i.e. %<friend %#T%>",
9139
                           type);
9140
            }
9141
 
9142
          /* Only try to do this stuff if we didn't already give up.  */
9143
          if (type != integer_type_node)
9144
            {
9145
              /* A friendly class?  */
9146
              if (current_class_type)
9147
                make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
9148
                                   /*complain=*/true);
9149
              else
9150
                error ("trying to make class %qT a friend of global scope",
9151
                       type);
9152
 
9153
              type = void_type_node;
9154
            }
9155
        }
9156
      else if (memfn_quals)
9157
        {
9158
          if (ctype == NULL_TREE
9159
              && TREE_CODE (type) == METHOD_TYPE)
9160
            ctype = TYPE_METHOD_BASETYPE (type);
9161
 
9162
          if (ctype)
9163
            type = build_memfn_type (type, ctype, memfn_quals);
9164
          /* Core issue #547: need to allow this in template type args.  */
9165
          else if (template_type_arg && TREE_CODE (type) == FUNCTION_TYPE)
9166
            type = cp_build_qualified_type (type, memfn_quals);
9167
          else
9168
            error ("invalid qualifiers on non-member function type");
9169
        }
9170
 
9171
      return type;
9172
    }
9173
  else if (unqualified_id == NULL_TREE && decl_context != PARM
9174
           && decl_context != CATCHPARM
9175
           && TREE_CODE (type) != UNION_TYPE
9176
           && ! bitfield)
9177
    {
9178
      error ("abstract declarator %qT used as declaration", type);
9179
      return error_mark_node;
9180
    }
9181
 
9182
  /* Only functions may be declared using an operator-function-id.  */
9183
  if (unqualified_id
9184
      && IDENTIFIER_OPNAME_P (unqualified_id)
9185
      && TREE_CODE (type) != FUNCTION_TYPE
9186
      && TREE_CODE (type) != METHOD_TYPE)
9187
    {
9188
      error ("declaration of %qD as non-function", unqualified_id);
9189
      return error_mark_node;
9190
    }
9191
 
9192
  /* We don't check parameter types here because we can emit a better
9193
     error message later.  */
9194
  if (decl_context != PARM)
9195
    {
9196
      type = check_var_type (unqualified_id, type);
9197
      if (type == error_mark_node)
9198
        return error_mark_node;
9199
    }
9200
 
9201
  /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
9202
     or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE.  */
9203
 
9204
  if (decl_context == PARM || decl_context == CATCHPARM)
9205
    {
9206
      if (ctype || in_namespace)
9207
        error ("cannot use %<::%> in parameter declaration");
9208
 
9209
      /* A parameter declared as an array of T is really a pointer to T.
9210
         One declared as a function is really a pointer to a function.
9211
         One declared as a member is really a pointer to member.  */
9212
 
9213
      if (TREE_CODE (type) == ARRAY_TYPE)
9214
        {
9215
          /* Transfer const-ness of array into that of type pointed to.  */
9216
          type = build_pointer_type (TREE_TYPE (type));
9217
          type_quals = TYPE_UNQUALIFIED;
9218
        }
9219
      else if (TREE_CODE (type) == FUNCTION_TYPE)
9220
        type = build_pointer_type (type);
9221
    }
9222
 
9223
  {
9224
    tree decl;
9225
 
9226
    if (decl_context == PARM)
9227
      {
9228
        decl = cp_build_parm_decl (unqualified_id, type);
9229
 
9230
        bad_specifiers (decl, "parameter", virtualp,
9231
                        memfn_quals != TYPE_UNQUALIFIED,
9232
                        inlinep, friendp, raises != NULL_TREE);
9233
      }
9234
    else if (decl_context == FIELD)
9235
      {
9236
        /* The C99 flexible array extension.  */
9237
        if (!staticp && TREE_CODE (type) == ARRAY_TYPE
9238
            && TYPE_DOMAIN (type) == NULL_TREE)
9239
          {
9240
            tree itype = compute_array_index_type (dname, integer_zero_node);
9241
            type = build_cplus_array_type (TREE_TYPE (type), itype);
9242
          }
9243
 
9244
        if (type == error_mark_node)
9245
          {
9246
            /* Happens when declaring arrays of sizes which
9247
               are error_mark_node, for example.  */
9248
            decl = NULL_TREE;
9249
          }
9250
        else if (in_namespace && !friendp)
9251
          {
9252
            /* Something like struct S { int N::j; };  */
9253
            error ("invalid use of %<::%>");
9254
            return error_mark_node;
9255
          }
9256
        else if (TREE_CODE (type) == FUNCTION_TYPE)
9257
          {
9258
            int publicp = 0;
9259
            tree function_context;
9260
 
9261
            if (friendp == 0)
9262
              {
9263
                if (ctype == NULL_TREE)
9264
                  ctype = current_class_type;
9265
 
9266
                if (ctype == NULL_TREE)
9267
                  {
9268
                    error ("can't make %qD into a method -- not in a class",
9269
                           unqualified_id);
9270
                    return error_mark_node;
9271
                  }
9272
 
9273
                /* ``A union may [ ... ] not [ have ] virtual functions.''
9274
                   ARM 9.5 */
9275
                if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
9276
                  {
9277
                    error ("function %qD declared virtual inside a union",
9278
                           unqualified_id);
9279
                    return error_mark_node;
9280
                  }
9281
 
9282
                if (NEW_DELETE_OPNAME_P (unqualified_id))
9283
                  {
9284
                    if (virtualp)
9285
                      {
9286
                        error ("%qD cannot be declared virtual, since it "
9287
                               "is always static",
9288
                               unqualified_id);
9289
                        virtualp = 0;
9290
                      }
9291
                  }
9292
                else if (staticp < 2)
9293
                  type = build_memfn_type (type, ctype, memfn_quals);
9294
              }
9295
 
9296
            /* Check that the name used for a destructor makes sense.  */
9297
            if (sfk == sfk_destructor)
9298
              {
9299
                tree uqname = id_declarator->u.id.unqualified_name;
9300
 
9301
                if (!ctype)
9302
                  {
9303
                    gcc_assert (friendp);
9304
                    error ("expected qualified name in friend declaration "
9305
                           "for destructor %qD", uqname);
9306
                    return error_mark_node;
9307
                  }
9308
 
9309
                if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
9310
                  {
9311
                    error ("declaration of %qD as member of %qT",
9312
                           uqname, ctype);
9313
                    return error_mark_node;
9314
                  }
9315
                if (constexpr_p)
9316
                  error ("a destructor cannot be %<constexpr%>");
9317
              }
9318
            else if (sfk == sfk_constructor && friendp)
9319
              {
9320
                error ("expected qualified name in friend declaration "
9321
                       "for constructor %qD",
9322
                       id_declarator->u.id.unqualified_name);
9323
                return error_mark_node;
9324
              }
9325
 
9326
            /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node.  */
9327
            function_context = (ctype != NULL_TREE) ?
9328
              decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
9329
            publicp = (! friendp || ! staticp)
9330
              && function_context == NULL_TREE;
9331
            decl = grokfndecl (ctype, type,
9332
                               TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
9333
                               ? unqualified_id : dname,
9334
                               parms,
9335
                               unqualified_id,
9336
                               virtualp, flags, memfn_quals, raises,
9337
                               friendp ? -1 : 0, friendp, publicp,
9338
                               inlinep || constexpr_p,
9339
                               sfk,
9340
                               funcdef_flag, template_count, in_namespace,
9341
                               attrlist, declarator->id_loc);
9342
            if (decl == NULL_TREE)
9343
              return error_mark_node;
9344
#if 0
9345
            /* This clobbers the attrs stored in `decl' from `attrlist'.  */
9346
            /* The decl and setting of decl_attr is also turned off.  */
9347
            decl = build_decl_attribute_variant (decl, decl_attr);
9348
#endif
9349
 
9350
            /* [class.conv.ctor]
9351
 
9352
               A constructor declared without the function-specifier
9353
               explicit that can be called with a single parameter
9354
               specifies a conversion from the type of its first
9355
               parameter to the type of its class.  Such a constructor
9356
               is called a converting constructor.  */
9357
            if (explicitp == 2)
9358
              DECL_NONCONVERTING_P (decl) = 1;
9359
          }
9360
        else if (TREE_CODE (type) == METHOD_TYPE)
9361
          {
9362
            /* We only get here for friend declarations of
9363
               members of other classes.  */
9364
            /* All method decls are public, so tell grokfndecl to set
9365
               TREE_PUBLIC, also.  */
9366
            decl = grokfndecl (ctype, type,
9367
                               TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
9368
                               ? unqualified_id : dname,
9369
                               parms,
9370
                               unqualified_id,
9371
                               virtualp, flags, memfn_quals, raises,
9372
                               friendp ? -1 : 0, friendp, 1, 0, sfk,
9373
                               funcdef_flag, template_count, in_namespace,
9374
                               attrlist,
9375
                               declarator->id_loc);
9376
            if (decl == NULL_TREE)
9377
              return error_mark_node;
9378
          }
9379
        else if (!staticp && !dependent_type_p (type)
9380
                 && !COMPLETE_TYPE_P (complete_type (type))
9381
                 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
9382
          {
9383
            if (unqualified_id)
9384
              error ("field %qD has incomplete type", unqualified_id);
9385
            else
9386
              error ("name %qT has incomplete type", type);
9387
 
9388
            /* If we're instantiating a template, tell them which
9389
               instantiation made the field's type be incomplete.  */
9390
            if (current_class_type
9391
                && TYPE_NAME (current_class_type)
9392
                && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
9393
                && declspecs->type
9394
                && declspecs->type == type)
9395
              error ("  in instantiation of template %qT",
9396
                     current_class_type);
9397
 
9398
            return error_mark_node;
9399
          }
9400
        else
9401
          {
9402
            if (friendp)
9403
              {
9404
                error ("%qE is neither function nor member function; "
9405
                       "cannot be declared friend", unqualified_id);
9406
                friendp = 0;
9407
              }
9408
            decl = NULL_TREE;
9409
          }
9410
 
9411
        if (friendp)
9412
          {
9413
            /* Friends are treated specially.  */
9414
            if (ctype == current_class_type)
9415
              ;  /* We already issued a permerror.  */
9416
            else if (decl && DECL_NAME (decl))
9417
              {
9418
                if (template_class_depth (current_class_type) == 0)
9419
                  {
9420
                    decl = check_explicit_specialization
9421
                      (unqualified_id, decl, template_count,
9422
                       2 * funcdef_flag + 4);
9423
                    if (decl == error_mark_node)
9424
                      return error_mark_node;
9425
                  }
9426
 
9427
                DECL_DECLARED_CONSTEXPR_P (decl) = constexpr_p;
9428
                decl = do_friend (ctype, unqualified_id, decl,
9429
                                  *attrlist, flags,
9430
                                  funcdef_flag);
9431
                return decl;
9432
              }
9433
            else
9434
              return error_mark_node;
9435
          }
9436
 
9437
        /* Structure field.  It may not be a function, except for C++.  */
9438
 
9439
        if (decl == NULL_TREE)
9440
          {
9441
            if (initialized)
9442
              {
9443
                if (!staticp)
9444
                  {
9445
                    /* An attempt is being made to initialize a non-static
9446
                       member.  But, from [class.mem]:
9447
 
9448
                       4 A member-declarator can contain a
9449
                       constant-initializer only if it declares a static
9450
                       member (_class.static_) of integral or enumeration
9451
                       type, see _class.static.data_.
9452
 
9453
                       This used to be relatively common practice, but
9454
                       the rest of the compiler does not correctly
9455
                       handle the initialization unless the member is
9456
                       static so we make it static below.  */
9457
                    permerror (input_location, "ISO C++ forbids initialization of member %qD",
9458
                               unqualified_id);
9459
                    permerror (input_location, "making %qD static", unqualified_id);
9460
                    staticp = 1;
9461
                  }
9462
 
9463
                if (uses_template_parms (type))
9464
                  /* We'll check at instantiation time.  */
9465
                  ;
9466
                else if (check_static_variable_definition (unqualified_id,
9467
                                                           type))
9468
                  /* If we just return the declaration, crashes
9469
                     will sometimes occur.  We therefore return
9470
                     void_type_node, as if this was a friend
9471
                     declaration, to cause callers to completely
9472
                     ignore this declaration.  */
9473
                  return error_mark_node;
9474
              }
9475
 
9476
            if (staticp)
9477
              {
9478
                /* C++ allows static class members.  All other work
9479
                   for this is done by grokfield.  */
9480
                decl = build_lang_decl (VAR_DECL, unqualified_id, type);
9481
                set_linkage_for_static_data_member (decl);
9482
                /* Even if there is an in-class initialization, DECL
9483
                   is considered undefined until an out-of-class
9484
                   definition is provided.  */
9485
                DECL_EXTERNAL (decl) = 1;
9486
 
9487
                if (thread_p)
9488
                  DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
9489
              }
9490
            else
9491
              {
9492
                if (constexpr_p)
9493
                  error ("non-static data member %qE declared %<constexpr%>",
9494
                         unqualified_id);
9495
                decl = build_decl (input_location,
9496
                                   FIELD_DECL, unqualified_id, type);
9497
                DECL_NONADDRESSABLE_P (decl) = bitfield;
9498
                if (bitfield && !unqualified_id)
9499
                  TREE_NO_WARNING (decl) = 1;
9500
 
9501
                if (storage_class == sc_mutable)
9502
                  {
9503
                    DECL_MUTABLE_P (decl) = 1;
9504
                    storage_class = sc_none;
9505
                  }
9506
              }
9507
 
9508
            bad_specifiers (decl, "field", virtualp,
9509
                            memfn_quals != TYPE_UNQUALIFIED,
9510
                            inlinep, friendp, raises != NULL_TREE);
9511
          }
9512
      }
9513
    else if (TREE_CODE (type) == FUNCTION_TYPE
9514
             || TREE_CODE (type) == METHOD_TYPE)
9515
      {
9516
        tree original_name;
9517
        int publicp = 0;
9518
 
9519
        if (!unqualified_id)
9520
          return error_mark_node;
9521
 
9522
        if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
9523
          original_name = dname;
9524
        else
9525
          original_name = unqualified_id;
9526
 
9527
        if (storage_class == sc_auto)
9528
          error ("storage class %<auto%> invalid for function %qs", name);
9529
        else if (storage_class == sc_register)
9530
          error ("storage class %<register%> invalid for function %qs", name);
9531
        else if (thread_p)
9532
          error ("storage class %<__thread%> invalid for function %qs", name);
9533
 
9534
        /* Function declaration not at top level.
9535
           Storage classes other than `extern' are not allowed
9536
           and `extern' makes no difference.  */
9537
        if (! toplevel_bindings_p ()
9538
            && (storage_class == sc_static
9539
                || declspecs->specs[(int)ds_inline])
9540
            && pedantic)
9541
          {
9542
            if (storage_class == sc_static)
9543
              pedwarn (input_location, OPT_pedantic,
9544
                       "%<static%> specified invalid for function %qs "
9545
                       "declared out of global scope", name);
9546
            else
9547
              pedwarn (input_location, OPT_pedantic,
9548
                       "%<inline%> specifier invalid for function %qs "
9549
                       "declared out of global scope", name);
9550
          }
9551
 
9552
        if (ctype != NULL_TREE
9553
            && TREE_CODE (ctype) != NAMESPACE_DECL && !MAYBE_CLASS_TYPE_P (ctype))
9554
          {
9555
            error ("%q#T is not a class or a namespace", ctype);
9556
            ctype = NULL_TREE;
9557
          }
9558
 
9559
        if (ctype == NULL_TREE)
9560
          {
9561
            if (virtualp)
9562
              {
9563
                error ("virtual non-class function %qs", name);
9564
                virtualp = 0;
9565
              }
9566
            else if (sfk == sfk_constructor
9567
                     || sfk == sfk_destructor)
9568
              {
9569
                error (funcdef_flag
9570
                       ? "%qs defined in a non-class scope"
9571
                       : "%qs declared in a non-class scope", name);
9572
                sfk = sfk_none;
9573
              }
9574
          }
9575
        else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
9576
                 && !NEW_DELETE_OPNAME_P (original_name))
9577
          type = build_method_type_directly (ctype,
9578
                                             TREE_TYPE (type),
9579
                                             TYPE_ARG_TYPES (type));
9580
 
9581
        /* Record presence of `static'.  */
9582
        publicp = (ctype != NULL_TREE
9583
                   || storage_class == sc_extern
9584
                   || storage_class != sc_static);
9585
 
9586
        decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
9587
                           virtualp, flags, memfn_quals, raises,
9588
                           1, friendp,
9589
                           publicp, inlinep || constexpr_p, sfk, funcdef_flag,
9590
                           template_count, in_namespace, attrlist,
9591
                           declarator->id_loc);
9592
        if (decl == NULL_TREE)
9593
          return error_mark_node;
9594
 
9595
        if (staticp == 1)
9596
          {
9597
            int invalid_static = 0;
9598
 
9599
            /* Don't allow a static member function in a class, and forbid
9600
               declaring main to be static.  */
9601
            if (TREE_CODE (type) == METHOD_TYPE)
9602
              {
9603
                permerror (input_location, "cannot declare member function %qD to have "
9604
                           "static linkage", decl);
9605
                invalid_static = 1;
9606
              }
9607
            else if (current_function_decl)
9608
              {
9609
                /* FIXME need arm citation */
9610
                error ("cannot declare static function inside another function");
9611
                invalid_static = 1;
9612
              }
9613
 
9614
            if (invalid_static)
9615
              {
9616
                staticp = 0;
9617
                storage_class = sc_none;
9618
              }
9619
          }
9620
      }
9621
    else
9622
      {
9623
        /* It's a variable.  */
9624
 
9625
        /* An uninitialized decl with `extern' is a reference.  */
9626
        decl = grokvardecl (type, unqualified_id,
9627
                            declspecs,
9628
                            initialized,
9629
                            (type_quals & TYPE_QUAL_CONST) != 0,
9630
                            ctype ? ctype : in_namespace);
9631
        bad_specifiers (decl, "variable", virtualp,
9632
                        memfn_quals != TYPE_UNQUALIFIED,
9633
                        inlinep, friendp, raises != NULL_TREE);
9634
 
9635
        if (ctype)
9636
          {
9637
            DECL_CONTEXT (decl) = ctype;
9638
            if (staticp == 1)
9639
              {
9640
                permerror (input_location, "%<static%> may not be used when defining "
9641
                           "(as opposed to declaring) a static data member");
9642
                staticp = 0;
9643
                storage_class = sc_none;
9644
              }
9645
            if (storage_class == sc_register && TREE_STATIC (decl))
9646
              {
9647
                error ("static member %qD declared %<register%>", decl);
9648
                storage_class = sc_none;
9649
              }
9650
            if (storage_class == sc_extern && pedantic)
9651
              {
9652
                pedwarn (input_location, OPT_pedantic,
9653
                         "cannot explicitly declare member %q#D to have "
9654
                         "extern linkage", decl);
9655
                storage_class = sc_none;
9656
              }
9657
          }
9658
      }
9659
 
9660
    if (storage_class == sc_extern && initialized && !funcdef_flag)
9661
      {
9662
        if (toplevel_bindings_p ())
9663
          {
9664
            /* It's common practice (and completely valid) to have a const
9665
               be initialized and declared extern.  */
9666
            if (!(type_quals & TYPE_QUAL_CONST))
9667
              warning (0, "%qs initialized and declared %<extern%>", name);
9668
          }
9669
        else
9670
          {
9671
            error ("%qs has both %<extern%> and initializer", name);
9672
            return error_mark_node;
9673
          }
9674
      }
9675
 
9676
    /* Record `register' declaration for warnings on &
9677
       and in case doing stupid register allocation.  */
9678
 
9679
    if (storage_class == sc_register)
9680
      DECL_REGISTER (decl) = 1;
9681
    else if (storage_class == sc_extern)
9682
      DECL_THIS_EXTERN (decl) = 1;
9683
    else if (storage_class == sc_static)
9684
      DECL_THIS_STATIC (decl) = 1;
9685
 
9686
    /* Don't forget constexprness.  */
9687
    if (VAR_OR_FUNCTION_DECL_P (decl))
9688
      DECL_DECLARED_CONSTEXPR_P (decl) = constexpr_p;
9689
 
9690
    /* Record constancy and volatility on the DECL itself .  There's
9691
       no need to do this when processing a template; we'll do this
9692
       for the instantiated declaration based on the type of DECL.  */
9693
    if (!processing_template_decl)
9694
      cp_apply_type_quals_to_decl (type_quals, decl);
9695
 
9696
    return decl;
9697
  }
9698
}
9699
 
9700
/* Subroutine of start_function.  Ensure that each of the parameter
9701
   types (as listed in PARMS) is complete, as is required for a
9702
   function definition.  */
9703
 
9704
static void
9705
require_complete_types_for_parms (tree parms)
9706
{
9707
  for (; parms; parms = TREE_CHAIN (parms))
9708
    {
9709
      if (dependent_type_p (TREE_TYPE (parms)))
9710
        continue;
9711
      if (!VOID_TYPE_P (TREE_TYPE (parms))
9712
          && complete_type_or_else (TREE_TYPE (parms), parms))
9713
        {
9714
          relayout_decl (parms);
9715
          DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
9716
        }
9717
      else
9718
        /* grokparms or complete_type_or_else will have already issued
9719
           an error.  */
9720
        TREE_TYPE (parms) = error_mark_node;
9721
    }
9722
}
9723
 
9724
/* Returns nonzero if T is a local variable.  */
9725
 
9726
int
9727
local_variable_p (const_tree t)
9728
{
9729
  if ((TREE_CODE (t) == VAR_DECL
9730
       /* A VAR_DECL with a context that is a _TYPE is a static data
9731
          member.  */
9732
       && !TYPE_P (CP_DECL_CONTEXT (t))
9733
       /* Any other non-local variable must be at namespace scope.  */
9734
       && !DECL_NAMESPACE_SCOPE_P (t))
9735
      || (TREE_CODE (t) == PARM_DECL))
9736
    return 1;
9737
 
9738
  return 0;
9739
}
9740
 
9741
/* Like local_variable_p, but suitable for use as a tree-walking
9742
   function.  */
9743
 
9744
static tree
9745
local_variable_p_walkfn (tree *tp, int *walk_subtrees,
9746
                         void *data ATTRIBUTE_UNUSED)
9747
{
9748
  if (local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
9749
    return *tp;
9750
  else if (TYPE_P (*tp))
9751
    *walk_subtrees = 0;
9752
 
9753
  return NULL_TREE;
9754
}
9755
 
9756
 
9757
/* Check that ARG, which is a default-argument expression for a
9758
   parameter DECL, is valid.  Returns ARG, or ERROR_MARK_NODE, if
9759
   something goes wrong.  DECL may also be a _TYPE node, rather than a
9760
   DECL, if there is no DECL available.  */
9761
 
9762
tree
9763
check_default_argument (tree decl, tree arg)
9764
{
9765
  tree var;
9766
  tree decl_type;
9767
 
9768
  if (TREE_CODE (arg) == DEFAULT_ARG)
9769
    /* We get a DEFAULT_ARG when looking at an in-class declaration
9770
       with a default argument.  Ignore the argument for now; we'll
9771
       deal with it after the class is complete.  */
9772
    return arg;
9773
 
9774
  if (TYPE_P (decl))
9775
    {
9776
      decl_type = decl;
9777
      decl = NULL_TREE;
9778
    }
9779
  else
9780
    decl_type = TREE_TYPE (decl);
9781
 
9782
  if (arg == error_mark_node
9783
      || decl == error_mark_node
9784
      || TREE_TYPE (arg) == error_mark_node
9785
      || decl_type == error_mark_node)
9786
    /* Something already went wrong.  There's no need to check
9787
       further.  */
9788
    return error_mark_node;
9789
 
9790
  /* [dcl.fct.default]
9791
 
9792
     A default argument expression is implicitly converted to the
9793
     parameter type.  */
9794
  if (!TREE_TYPE (arg)
9795
      || !can_convert_arg (decl_type, TREE_TYPE (arg), arg, LOOKUP_NORMAL))
9796
    {
9797
      if (decl)
9798
        error ("default argument for %q#D has type %qT",
9799
               decl, TREE_TYPE (arg));
9800
      else
9801
        error ("default argument for parameter of type %qT has type %qT",
9802
               decl_type, TREE_TYPE (arg));
9803
 
9804
      return error_mark_node;
9805
    }
9806
 
9807
  /* [dcl.fct.default]
9808
 
9809
     Local variables shall not be used in default argument
9810
     expressions.
9811
 
9812
     The keyword `this' shall not be used in a default argument of a
9813
     member function.  */
9814
  var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
9815
  if (var)
9816
    {
9817
      error ("default argument %qE uses local variable %qD", arg, var);
9818
      return error_mark_node;
9819
    }
9820
 
9821
  /* All is well.  */
9822
  return arg;
9823
}
9824
 
9825
/* Returns a deprecated type used within TYPE, or NULL_TREE if none.  */
9826
 
9827
static tree
9828
type_is_deprecated (tree type)
9829
{
9830
  enum tree_code code;
9831
  if (TREE_DEPRECATED (type))
9832
    return type;
9833
  if (TYPE_NAME (type)
9834
      && TREE_DEPRECATED (TYPE_NAME (type)))
9835
    return type;
9836
 
9837
  /* Do warn about using typedefs to a deprecated class.  */
9838
  if (TAGGED_TYPE_P (type) && type != TYPE_MAIN_VARIANT (type))
9839
    return type_is_deprecated (TYPE_MAIN_VARIANT (type));
9840
 
9841
  code = TREE_CODE (type);
9842
 
9843
  if (code == POINTER_TYPE || code == REFERENCE_TYPE
9844
      || code == OFFSET_TYPE || code == FUNCTION_TYPE
9845
      || code == METHOD_TYPE || code == ARRAY_TYPE)
9846
    return type_is_deprecated (TREE_TYPE (type));
9847
 
9848
  if (TYPE_PTRMEMFUNC_P (type))
9849
    return type_is_deprecated
9850
      (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
9851
 
9852
  return NULL_TREE;
9853
}
9854
 
9855
/* Decode the list of parameter types for a function type.
9856
   Given the list of things declared inside the parens,
9857
   return a list of types.
9858
 
9859
   If this parameter does not end with an ellipsis, we append
9860
   void_list_node.
9861
 
9862
   *PARMS is set to the chain of PARM_DECLs created.  */
9863
 
9864
static tree
9865
grokparms (tree parmlist, tree *parms)
9866
{
9867
  tree result = NULL_TREE;
9868
  tree decls = NULL_TREE;
9869
  tree parm;
9870
  int any_error = 0;
9871
 
9872
  for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
9873
    {
9874
      tree type = NULL_TREE;
9875
      tree init = TREE_PURPOSE (parm);
9876
      tree decl = TREE_VALUE (parm);
9877
      const char *errmsg;
9878
 
9879
      if (parm == void_list_node)
9880
        break;
9881
 
9882
      if (! decl || TREE_TYPE (decl) == error_mark_node)
9883
        continue;
9884
 
9885
      type = TREE_TYPE (decl);
9886
      if (VOID_TYPE_P (type))
9887
        {
9888
          if (same_type_p (type, void_type_node)
9889
              && DECL_SELF_REFERENCE_P (type)
9890
              && !DECL_NAME (decl) && !result && TREE_CHAIN (parm) == void_list_node)
9891
            /* this is a parmlist of `(void)', which is ok.  */
9892
            break;
9893
          cxx_incomplete_type_error (decl, type);
9894
          /* It's not a good idea to actually create parameters of
9895
             type `void'; other parts of the compiler assume that a
9896
             void type terminates the parameter list.  */
9897
          type = error_mark_node;
9898
          TREE_TYPE (decl) = error_mark_node;
9899
        }
9900
 
9901
      if (type != error_mark_node
9902
          && TYPE_FOR_JAVA (type)
9903
          && MAYBE_CLASS_TYPE_P (type))
9904
        {
9905
          error ("parameter %qD has Java class type", decl);
9906
          type = error_mark_node;
9907
          TREE_TYPE (decl) = error_mark_node;
9908
          init = NULL_TREE;
9909
        }
9910
 
9911
      if (type != error_mark_node
9912
          && (errmsg = targetm.invalid_parameter_type (type)))
9913
        {
9914
          error (errmsg);
9915
          type = error_mark_node;
9916
          TREE_TYPE (decl) = error_mark_node;
9917
        }
9918
 
9919
      if (type != error_mark_node)
9920
        {
9921
          if (deprecated_state != DEPRECATED_SUPPRESS)
9922
            {
9923
              tree deptype = type_is_deprecated (type);
9924
              if (deptype)
9925
                warn_deprecated_use (deptype, NULL_TREE);
9926
            }
9927
 
9928
          /* Top-level qualifiers on the parameters are
9929
             ignored for function types.  */
9930
          type = cp_build_qualified_type (type, 0);
9931
          if (TREE_CODE (type) == METHOD_TYPE)
9932
            {
9933
              error ("parameter %qD invalidly declared method type", decl);
9934
              type = build_pointer_type (type);
9935
              TREE_TYPE (decl) = type;
9936
            }
9937
          else if (abstract_virtuals_error (decl, type))
9938
            any_error = 1;  /* Seems like a good idea.  */
9939
          else if (POINTER_TYPE_P (type))
9940
            {
9941
              /* [dcl.fct]/6, parameter types cannot contain pointers
9942
                 (references) to arrays of unknown bound.  */
9943
              tree t = TREE_TYPE (type);
9944
              int ptr = TYPE_PTR_P (type);
9945
 
9946
              while (1)
9947
                {
9948
                  if (TYPE_PTR_P (t))
9949
                    ptr = 1;
9950
                  else if (TREE_CODE (t) != ARRAY_TYPE)
9951
                    break;
9952
                  else if (!TYPE_DOMAIN (t))
9953
                    break;
9954
                  t = TREE_TYPE (t);
9955
                }
9956
              if (TREE_CODE (t) == ARRAY_TYPE)
9957
                error (ptr
9958
                       ? G_("parameter %qD includes pointer to array of "
9959
                            "unknown bound %qT")
9960
                       : G_("parameter %qD includes reference to array of "
9961
                            "unknown bound %qT"),
9962
                       decl, t);
9963
            }
9964
 
9965
          if (any_error)
9966
            init = NULL_TREE;
9967
          else if (init && !processing_template_decl)
9968
            init = check_default_argument (decl, init);
9969
        }
9970
 
9971
      if (TREE_CODE (decl) == PARM_DECL
9972
          && FUNCTION_PARAMETER_PACK_P (decl)
9973
          && TREE_CHAIN (parm)
9974
          && TREE_CHAIN (parm) != void_list_node)
9975
        error ("parameter packs must be at the end of the parameter list");
9976
 
9977
      TREE_CHAIN (decl) = decls;
9978
      decls = decl;
9979
      result = tree_cons (init, type, result);
9980
    }
9981
  decls = nreverse (decls);
9982
  result = nreverse (result);
9983
  if (parm)
9984
    result = chainon (result, void_list_node);
9985
  *parms = decls;
9986
 
9987
  return result;
9988
}
9989
 
9990
 
9991
/* D is a constructor or overloaded `operator='.
9992
 
9993
   Let T be the class in which D is declared. Then, this function
9994
   returns:
9995
 
9996
   -1 if D's is an ill-formed constructor or copy assignment operator
9997
      whose first parameter is of type `T'.
9998
 
9999
      operator.
10000
   1  if D is a copy constructor or copy assignment operator whose
10001
      first parameter is a reference to non-const qualified T.
10002
   2  if D is a copy constructor or copy assignment operator whose
10003
      first parameter is a reference to const qualified T.
10004
 
10005
   This function can be used as a predicate. Positive values indicate
10006
   a copy constructor and nonzero values indicate a copy assignment
10007
   operator.  */
10008
 
10009
int
10010
copy_fn_p (const_tree d)
10011
{
10012
  tree args;
10013
  tree arg_type;
10014
  int result = 1;
10015
 
10016
  gcc_assert (DECL_FUNCTION_MEMBER_P (d));
10017
 
10018
  if (TREE_CODE (d) == TEMPLATE_DECL
10019
      || (DECL_TEMPLATE_INFO (d)
10020
          && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
10021
    /* Instantiations of template member functions are never copy
10022
       functions.  Note that member functions of templated classes are
10023
       represented as template functions internally, and we must
10024
       accept those as copy functions.  */
10025
    return 0;
10026
 
10027
  args = FUNCTION_FIRST_USER_PARMTYPE (d);
10028
  if (!args)
10029
    return 0;
10030
 
10031
  arg_type = TREE_VALUE (args);
10032
  if (arg_type == error_mark_node)
10033
    return 0;
10034
 
10035
  if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
10036
    {
10037
      /* Pass by value copy assignment operator.  */
10038
      result = -1;
10039
    }
10040
  else if (TREE_CODE (arg_type) == REFERENCE_TYPE
10041
           && !TYPE_REF_IS_RVALUE (arg_type)
10042
           && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
10043
    {
10044
      if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
10045
        result = 2;
10046
    }
10047
  else
10048
    return 0;
10049
 
10050
  args = TREE_CHAIN (args);
10051
 
10052
  if (args && args != void_list_node && !TREE_PURPOSE (args))
10053
    /* There are more non-optional args.  */
10054
    return 0;
10055
 
10056
  return result;
10057
}
10058
 
10059
/* D is a constructor or overloaded `operator='.
10060
 
10061
   Let T be the class in which D is declared. Then, this function
10062
   returns true when D is a move constructor or move assignment
10063
   operator, false otherwise.  */
10064
 
10065
bool
10066
move_fn_p (const_tree d)
10067
{
10068
  tree args;
10069
  tree arg_type;
10070
  bool result = false;
10071
 
10072
  gcc_assert (DECL_FUNCTION_MEMBER_P (d));
10073
 
10074
  if (cxx_dialect == cxx98)
10075
    /* There are no move constructors if we are in C++98 mode.  */
10076
    return false;
10077
 
10078
  if (TREE_CODE (d) == TEMPLATE_DECL
10079
      || (DECL_TEMPLATE_INFO (d)
10080
         && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
10081
    /* Instantiations of template member functions are never copy
10082
       functions.  Note that member functions of templated classes are
10083
       represented as template functions internally, and we must
10084
       accept those as copy functions.  */
10085
    return 0;
10086
 
10087
  args = FUNCTION_FIRST_USER_PARMTYPE (d);
10088
  if (!args)
10089
    return 0;
10090
 
10091
  arg_type = TREE_VALUE (args);
10092
  if (arg_type == error_mark_node)
10093
    return 0;
10094
 
10095
  if (TREE_CODE (arg_type) == REFERENCE_TYPE
10096
      && TYPE_REF_IS_RVALUE (arg_type)
10097
      && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
10098
                      DECL_CONTEXT (d)))
10099
    result = true;
10100
 
10101
  args = TREE_CHAIN (args);
10102
 
10103
  if (args && args != void_list_node && !TREE_PURPOSE (args))
10104
    /* There are more non-optional args.  */
10105
    return false;
10106
 
10107
  return result;
10108
}
10109
 
10110
/* Remember any special properties of member function DECL.  */
10111
 
10112
void
10113
grok_special_member_properties (tree decl)
10114
{
10115
  tree class_type;
10116
 
10117
  if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
10118
    return;
10119
 
10120
  class_type = DECL_CONTEXT (decl);
10121
  if (DECL_CONSTRUCTOR_P (decl))
10122
    {
10123
      int ctor = copy_fn_p (decl);
10124
 
10125
      if (!DECL_ARTIFICIAL (decl))
10126
        TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
10127
 
10128
      if (ctor > 0)
10129
        {
10130
          /* [class.copy]
10131
 
10132
             A non-template constructor for class X is a copy
10133
             constructor if its first parameter is of type X&, const
10134
             X&, volatile X& or const volatile X&, and either there
10135
             are no other parameters or else all other parameters have
10136
             default arguments.  */
10137
          TYPE_HAS_INIT_REF (class_type) = 1;
10138
          if (user_provided_p (decl))
10139
            TYPE_HAS_COMPLEX_INIT_REF (class_type) = 1;
10140
          if (ctor > 1)
10141
            TYPE_HAS_CONST_INIT_REF (class_type) = 1;
10142
        }
10143
      else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
10144
        {
10145
          TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
10146
          if (user_provided_p (decl))
10147
            TYPE_HAS_COMPLEX_DFLT (class_type) = 1;
10148
        }
10149
      else if (is_list_ctor (decl))
10150
        TYPE_HAS_LIST_CTOR (class_type) = 1;
10151
    }
10152
  else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
10153
    {
10154
      /* [class.copy]
10155
 
10156
         A non-template assignment operator for class X is a copy
10157
         assignment operator if its parameter is of type X, X&, const
10158
         X&, volatile X& or const volatile X&.  */
10159
 
10160
      int assop = copy_fn_p (decl);
10161
 
10162
      if (assop)
10163
        {
10164
          TYPE_HAS_ASSIGN_REF (class_type) = 1;
10165
          if (user_provided_p (decl))
10166
            TYPE_HAS_COMPLEX_ASSIGN_REF (class_type) = 1;
10167
          if (assop != 1)
10168
            TYPE_HAS_CONST_ASSIGN_REF (class_type) = 1;
10169
        }
10170
    }
10171
}
10172
 
10173
/* Check a constructor DECL has the correct form.  Complains
10174
   if the class has a constructor of the form X(X).  */
10175
 
10176
int
10177
grok_ctor_properties (const_tree ctype, const_tree decl)
10178
{
10179
  int ctor_parm = copy_fn_p (decl);
10180
 
10181
  if (ctor_parm < 0)
10182
    {
10183
      /* [class.copy]
10184
 
10185
         A declaration of a constructor for a class X is ill-formed if
10186
         its first parameter is of type (optionally cv-qualified) X
10187
         and either there are no other parameters or else all other
10188
         parameters have default arguments.
10189
 
10190
         We *don't* complain about member template instantiations that
10191
         have this form, though; they can occur as we try to decide
10192
         what constructor to use during overload resolution.  Since
10193
         overload resolution will never prefer such a constructor to
10194
         the non-template copy constructor (which is either explicitly
10195
         or implicitly defined), there's no need to worry about their
10196
         existence.  Theoretically, they should never even be
10197
         instantiated, but that's hard to forestall.  */
10198
      error ("invalid constructor; you probably meant %<%T (const %T&)%>",
10199
                ctype, ctype);
10200
      return 0;
10201
    }
10202
 
10203
  return 1;
10204
}
10205
 
10206
/* An operator with this code is unary, but can also be binary.  */
10207
 
10208
static int
10209
ambi_op_p (enum tree_code code)
10210
{
10211
  return (code == INDIRECT_REF
10212
          || code == ADDR_EXPR
10213
          || code == UNARY_PLUS_EXPR
10214
          || code == NEGATE_EXPR
10215
          || code == PREINCREMENT_EXPR
10216
          || code == PREDECREMENT_EXPR);
10217
}
10218
 
10219
/* An operator with this name can only be unary.  */
10220
 
10221
static int
10222
unary_op_p (enum tree_code code)
10223
{
10224
  return (code == TRUTH_NOT_EXPR
10225
          || code == BIT_NOT_EXPR
10226
          || code == COMPONENT_REF
10227
          || code == TYPE_EXPR);
10228
}
10229
 
10230
/* DECL is a declaration for an overloaded operator.  If COMPLAIN is true,
10231
   errors are issued for invalid declarations.  */
10232
 
10233
bool
10234
grok_op_properties (tree decl, bool complain)
10235
{
10236
  tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
10237
  tree argtype;
10238
  int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
10239
  tree name = DECL_NAME (decl);
10240
  enum tree_code operator_code;
10241
  int arity;
10242
  bool ellipsis_p;
10243
  tree class_type;
10244
 
10245
  /* Count the number of arguments and check for ellipsis.  */
10246
  for (argtype = argtypes, arity = 0;
10247
       argtype && argtype != void_list_node;
10248
       argtype = TREE_CHAIN (argtype))
10249
    ++arity;
10250
  ellipsis_p = !argtype;
10251
 
10252
  class_type = DECL_CONTEXT (decl);
10253
  if (class_type && !CLASS_TYPE_P (class_type))
10254
    class_type = NULL_TREE;
10255
 
10256
  if (DECL_CONV_FN_P (decl))
10257
    operator_code = TYPE_EXPR;
10258
  else
10259
    do
10260
      {
10261
#define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P)       \
10262
        if (ansi_opname (CODE) == name)                         \
10263
          {                                                     \
10264
            operator_code = (CODE);                             \
10265
            break;                                              \
10266
          }                                                     \
10267
        else if (ansi_assopname (CODE) == name)                 \
10268
          {                                                     \
10269
            operator_code = (CODE);                             \
10270
            DECL_ASSIGNMENT_OPERATOR_P (decl) = 1;              \
10271
            break;                                              \
10272
          }
10273
 
10274
#include "operators.def"
10275
#undef DEF_OPERATOR
10276
 
10277
        gcc_unreachable ();
10278
      }
10279
    while (0);
10280
  gcc_assert (operator_code != MAX_TREE_CODES);
10281
  SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
10282
 
10283
  if (class_type)
10284
    switch (operator_code)
10285
      {
10286
      case NEW_EXPR:
10287
        TYPE_HAS_NEW_OPERATOR (class_type) = 1;
10288
        break;
10289
 
10290
      case DELETE_EXPR:
10291
        TYPE_GETS_DELETE (class_type) |= 1;
10292
        break;
10293
 
10294
      case VEC_NEW_EXPR:
10295
        TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
10296
        break;
10297
 
10298
      case VEC_DELETE_EXPR:
10299
        TYPE_GETS_DELETE (class_type) |= 2;
10300
        break;
10301
 
10302
      default:
10303
        break;
10304
      }
10305
 
10306
    /* [basic.std.dynamic.allocation]/1:
10307
 
10308
       A program is ill-formed if an allocation function is declared
10309
       in a namespace scope other than global scope or declared static
10310
       in global scope.
10311
 
10312
       The same also holds true for deallocation functions.  */
10313
  if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
10314
      || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
10315
    {
10316
      if (DECL_NAMESPACE_SCOPE_P (decl))
10317
        {
10318
          if (CP_DECL_CONTEXT (decl) != global_namespace)
10319
            {
10320
              error ("%qD may not be declared within a namespace", decl);
10321
              return false;
10322
            }
10323
          else if (!TREE_PUBLIC (decl))
10324
            {
10325
              error ("%qD may not be declared as static", decl);
10326
              return false;
10327
            }
10328
        }
10329
    }
10330
 
10331
  if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
10332
    {
10333
      TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
10334
      DECL_IS_OPERATOR_NEW (decl) = 1;
10335
    }
10336
  else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
10337
    TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
10338
  else
10339
    {
10340
      /* An operator function must either be a non-static member function
10341
         or have at least one parameter of a class, a reference to a class,
10342
         an enumeration, or a reference to an enumeration.  13.4.0.6 */
10343
      if (! methodp || DECL_STATIC_FUNCTION_P (decl))
10344
        {
10345
          if (operator_code == TYPE_EXPR
10346
              || operator_code == CALL_EXPR
10347
              || operator_code == COMPONENT_REF
10348
              || operator_code == ARRAY_REF
10349
              || operator_code == NOP_EXPR)
10350
            {
10351
              error ("%qD must be a nonstatic member function", decl);
10352
              return false;
10353
            }
10354
          else
10355
            {
10356
              tree p;
10357
 
10358
              if (DECL_STATIC_FUNCTION_P (decl))
10359
                {
10360
                  error ("%qD must be either a non-static member "
10361
                         "function or a non-member function", decl);
10362
                  return false;
10363
                }
10364
 
10365
              for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
10366
                {
10367
                  tree arg = non_reference (TREE_VALUE (p));
10368
                  if (arg == error_mark_node)
10369
                    return false;
10370
 
10371
                  /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
10372
                     because these checks are performed even on
10373
                     template functions.  */
10374
                  if (MAYBE_CLASS_TYPE_P (arg)
10375
                      || TREE_CODE (arg) == ENUMERAL_TYPE)
10376
                    break;
10377
                }
10378
 
10379
              if (!p || p == void_list_node)
10380
                {
10381
                  if (complain)
10382
                    error ("%qD must have an argument of class or "
10383
                           "enumerated type", decl);
10384
                  return false;
10385
                }
10386
            }
10387
        }
10388
 
10389
      /* There are no restrictions on the arguments to an overloaded
10390
         "operator ()".  */
10391
      if (operator_code == CALL_EXPR)
10392
        return true;
10393
 
10394
      /* Warn about conversion operators that will never be used.  */
10395
      if (IDENTIFIER_TYPENAME_P (name)
10396
          && ! DECL_TEMPLATE_INFO (decl)
10397
          && warn_conversion
10398
          /* Warn only declaring the function; there is no need to
10399
             warn again about out-of-class definitions.  */
10400
          && class_type == current_class_type)
10401
        {
10402
          tree t = TREE_TYPE (name);
10403
          int ref = (TREE_CODE (t) == REFERENCE_TYPE);
10404
 
10405
          if (ref)
10406
            t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
10407
 
10408
          if (TREE_CODE (t) == VOID_TYPE)
10409
            warning (OPT_Wconversion,
10410
                     ref
10411
                     ? G_("conversion to a reference to void "
10412
                          "will never use a type conversion operator")
10413
                     : G_("conversion to void "
10414
                          "will never use a type conversion operator"));
10415
          else if (class_type)
10416
            {
10417
              if (t == class_type)
10418
                warning (OPT_Wconversion,
10419
                     ref
10420
                     ? G_("conversion to a reference to the same type "
10421
                          "will never use a type conversion operator")
10422
                     : G_("conversion to the same type "
10423
                          "will never use a type conversion operator"));
10424
              /* Don't force t to be complete here.  */
10425
              else if (MAYBE_CLASS_TYPE_P (t)
10426
                       && COMPLETE_TYPE_P (t)
10427
                       && DERIVED_FROM_P (t, class_type))
10428
                 warning (OPT_Wconversion,
10429
                          ref
10430
                          ? G_("conversion to a reference to a base class "
10431
                               "will never use a type conversion operator")
10432
                          : G_("conversion to a base class "
10433
                               "will never use a type conversion operator"));
10434
            }
10435
 
10436
        }
10437
 
10438
      if (operator_code == COND_EXPR)
10439
        {
10440
          /* 13.4.0.3 */
10441
          error ("ISO C++ prohibits overloading operator ?:");
10442
          return false;
10443
        }
10444
      else if (ellipsis_p)
10445
        {
10446
          error ("%qD must not have variable number of arguments", decl);
10447
          return false;
10448
        }
10449
      else if (ambi_op_p (operator_code))
10450
        {
10451
          if (arity == 1)
10452
            /* We pick the one-argument operator codes by default, so
10453
               we don't have to change anything.  */
10454
            ;
10455
          else if (arity == 2)
10456
            {
10457
              /* If we thought this was a unary operator, we now know
10458
                 it to be a binary operator.  */
10459
              switch (operator_code)
10460
                {
10461
                case INDIRECT_REF:
10462
                  operator_code = MULT_EXPR;
10463
                  break;
10464
 
10465
                case ADDR_EXPR:
10466
                  operator_code = BIT_AND_EXPR;
10467
                  break;
10468
 
10469
                case UNARY_PLUS_EXPR:
10470
                  operator_code = PLUS_EXPR;
10471
                  break;
10472
 
10473
                case NEGATE_EXPR:
10474
                  operator_code = MINUS_EXPR;
10475
                  break;
10476
 
10477
                case PREINCREMENT_EXPR:
10478
                  operator_code = POSTINCREMENT_EXPR;
10479
                  break;
10480
 
10481
                case PREDECREMENT_EXPR:
10482
                  operator_code = POSTDECREMENT_EXPR;
10483
                  break;
10484
 
10485
                default:
10486
                  gcc_unreachable ();
10487
                }
10488
 
10489
              SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
10490
 
10491
              if ((operator_code == POSTINCREMENT_EXPR
10492
                   || operator_code == POSTDECREMENT_EXPR)
10493
                  && ! processing_template_decl
10494
                  && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
10495
                {
10496
                  if (methodp)
10497
                    error ("postfix %qD must take %<int%> as its argument",
10498
                           decl);
10499
                  else
10500
                    error ("postfix %qD must take %<int%> as its second "
10501
                           "argument", decl);
10502
                  return false;
10503
                }
10504
            }
10505
          else
10506
            {
10507
              if (methodp)
10508
                error ("%qD must take either zero or one argument", decl);
10509
              else
10510
                error ("%qD must take either one or two arguments", decl);
10511
              return false;
10512
            }
10513
 
10514
          /* More Effective C++ rule 6.  */
10515
          if (warn_ecpp
10516
              && (operator_code == POSTINCREMENT_EXPR
10517
                  || operator_code == POSTDECREMENT_EXPR
10518
                  || operator_code == PREINCREMENT_EXPR
10519
                  || operator_code == PREDECREMENT_EXPR))
10520
            {
10521
              tree arg = TREE_VALUE (argtypes);
10522
              tree ret = TREE_TYPE (TREE_TYPE (decl));
10523
              if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
10524
                arg = TREE_TYPE (arg);
10525
              arg = TYPE_MAIN_VARIANT (arg);
10526
              if (operator_code == PREINCREMENT_EXPR
10527
                  || operator_code == PREDECREMENT_EXPR)
10528
                {
10529
                  if (TREE_CODE (ret) != REFERENCE_TYPE
10530
                      || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
10531
                                       arg))
10532
                    warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
10533
                             build_reference_type (arg));
10534
                }
10535
              else
10536
                {
10537
                  if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
10538
                    warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
10539
                }
10540
            }
10541
        }
10542
      else if (unary_op_p (operator_code))
10543
        {
10544
          if (arity != 1)
10545
            {
10546
              if (methodp)
10547
                error ("%qD must take %<void%>", decl);
10548
              else
10549
                error ("%qD must take exactly one argument", decl);
10550
              return false;
10551
            }
10552
        }
10553
      else /* if (binary_op_p (operator_code)) */
10554
        {
10555
          if (arity != 2)
10556
            {
10557
              if (methodp)
10558
                error ("%qD must take exactly one argument", decl);
10559
              else
10560
                error ("%qD must take exactly two arguments", decl);
10561
              return false;
10562
            }
10563
 
10564
          /* More Effective C++ rule 7.  */
10565
          if (warn_ecpp
10566
              && (operator_code == TRUTH_ANDIF_EXPR
10567
                  || operator_code == TRUTH_ORIF_EXPR
10568
                  || operator_code == COMPOUND_EXPR))
10569
            warning (OPT_Weffc__, "user-defined %qD always evaluates both arguments",
10570
                     decl);
10571
        }
10572
 
10573
      /* Effective C++ rule 23.  */
10574
      if (warn_ecpp
10575
          && arity == 2
10576
          && !DECL_ASSIGNMENT_OPERATOR_P (decl)
10577
          && (operator_code == PLUS_EXPR
10578
              || operator_code == MINUS_EXPR
10579
              || operator_code == TRUNC_DIV_EXPR
10580
              || operator_code == MULT_EXPR
10581
              || operator_code == TRUNC_MOD_EXPR)
10582
          && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
10583
        warning (OPT_Weffc__, "%qD should return by value", decl);
10584
 
10585
      /* [over.oper]/8 */
10586
      for (; argtypes && argtypes != void_list_node;
10587
          argtypes = TREE_CHAIN (argtypes))
10588
        if (TREE_PURPOSE (argtypes))
10589
          {
10590
            TREE_PURPOSE (argtypes) = NULL_TREE;
10591
            if (operator_code == POSTINCREMENT_EXPR
10592
                || operator_code == POSTDECREMENT_EXPR)
10593
              {
10594
                pedwarn (input_location, OPT_pedantic, "%qD cannot have default arguments",
10595
                         decl);
10596
              }
10597
            else
10598
              {
10599
                error ("%qD cannot have default arguments", decl);
10600
                return false;
10601
              }
10602
          }
10603
    }
10604
  return true;
10605
}
10606
 
10607
/* Return a string giving the keyword associate with CODE.  */
10608
 
10609
static const char *
10610
tag_name (enum tag_types code)
10611
{
10612
  switch (code)
10613
    {
10614
    case record_type:
10615
      return "struct";
10616
    case class_type:
10617
      return "class";
10618
    case union_type:
10619
      return "union";
10620
    case enum_type:
10621
      return "enum";
10622
    case typename_type:
10623
      return "typename";
10624
    default:
10625
      gcc_unreachable ();
10626
    }
10627
}
10628
 
10629
/* Name lookup in an elaborated-type-specifier (after the keyword
10630
   indicated by TAG_CODE) has found the TYPE_DECL DECL.  If the
10631
   elaborated-type-specifier is invalid, issue a diagnostic and return
10632
   error_mark_node; otherwise, return the *_TYPE to which it referred.
10633
   If ALLOW_TEMPLATE_P is true, TYPE may be a class template.  */
10634
 
10635
tree
10636
check_elaborated_type_specifier (enum tag_types tag_code,
10637
                                 tree decl,
10638
                                 bool allow_template_p)
10639
{
10640
  tree type;
10641
 
10642
  /* In the case of:
10643
 
10644
       struct S { struct S *p; };
10645
 
10646
     name lookup will find the TYPE_DECL for the implicit "S::S"
10647
     typedef.  Adjust for that here.  */
10648
  if (DECL_SELF_REFERENCE_P (decl))
10649
    decl = TYPE_NAME (TREE_TYPE (decl));
10650
 
10651
  type = TREE_TYPE (decl);
10652
 
10653
  /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
10654
     is false for this case as well.  */
10655
  if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
10656
    {
10657
      error ("using template type parameter %qT after %qs",
10658
             type, tag_name (tag_code));
10659
      return error_mark_node;
10660
    }
10661
  /*   [dcl.type.elab]
10662
 
10663
       If the identifier resolves to a typedef-name or a template
10664
       type-parameter, the elaborated-type-specifier is ill-formed.
10665
 
10666
     In other words, the only legitimate declaration to use in the
10667
     elaborated type specifier is the implicit typedef created when
10668
     the type is declared.  */
10669
  else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
10670
           && !DECL_SELF_REFERENCE_P (decl)
10671
           && tag_code != typename_type)
10672
    {
10673
      error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
10674
      error ("%q+D has a previous declaration here", decl);
10675
      return error_mark_node;
10676
    }
10677
  else if (TREE_CODE (type) != RECORD_TYPE
10678
           && TREE_CODE (type) != UNION_TYPE
10679
           && tag_code != enum_type
10680
           && tag_code != typename_type)
10681
    {
10682
      error ("%qT referred to as %qs", type, tag_name (tag_code));
10683
      error ("%q+T has a previous declaration here", type);
10684
      return error_mark_node;
10685
    }
10686
  else if (TREE_CODE (type) != ENUMERAL_TYPE
10687
           && tag_code == enum_type)
10688
    {
10689
      error ("%qT referred to as enum", type);
10690
      error ("%q+T has a previous declaration here", type);
10691
      return error_mark_node;
10692
    }
10693
  else if (!allow_template_p
10694
           && TREE_CODE (type) == RECORD_TYPE
10695
           && CLASSTYPE_IS_TEMPLATE (type))
10696
    {
10697
      /* If a class template appears as elaborated type specifier
10698
         without a template header such as:
10699
 
10700
           template <class T> class C {};
10701
           void f(class C);             // No template header here
10702
 
10703
         then the required template argument is missing.  */
10704
      error ("template argument required for %<%s %T%>",
10705
             tag_name (tag_code),
10706
             DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
10707
      return error_mark_node;
10708
    }
10709
 
10710
  return type;
10711
}
10712
 
10713
/* Lookup NAME in elaborate type specifier in scope according to
10714
   SCOPE and issue diagnostics if necessary.
10715
   Return *_TYPE node upon success, NULL_TREE when the NAME is not
10716
   found, and ERROR_MARK_NODE for type error.  */
10717
 
10718
static tree
10719
lookup_and_check_tag (enum tag_types tag_code, tree name,
10720
                      tag_scope scope, bool template_header_p)
10721
{
10722
  tree t;
10723
  tree decl;
10724
  if (scope == ts_global)
10725
    {
10726
      /* First try ordinary name lookup, ignoring hidden class name
10727
         injected via friend declaration.  */
10728
      decl = lookup_name_prefer_type (name, 2);
10729
      /* If that fails, the name will be placed in the smallest
10730
         non-class, non-function-prototype scope according to 3.3.1/5.
10731
         We may already have a hidden name declared as friend in this
10732
         scope.  So lookup again but not ignoring hidden names.
10733
         If we find one, that name will be made visible rather than
10734
         creating a new tag.  */
10735
      if (!decl)
10736
        decl = lookup_type_scope (name, ts_within_enclosing_non_class);
10737
    }
10738
  else
10739
    decl = lookup_type_scope (name, scope);
10740
 
10741
  if (decl && DECL_CLASS_TEMPLATE_P (decl))
10742
    decl = DECL_TEMPLATE_RESULT (decl);
10743
 
10744
  if (decl && TREE_CODE (decl) == TYPE_DECL)
10745
    {
10746
      /* Look for invalid nested type:
10747
           class C {
10748
             class C {};
10749
           };  */
10750
      if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
10751
        {
10752
          error ("%qD has the same name as the class in which it is "
10753
                 "declared",
10754
                 decl);
10755
          return error_mark_node;
10756
        }
10757
 
10758
      /* Two cases we need to consider when deciding if a class
10759
         template is allowed as an elaborated type specifier:
10760
         1. It is a self reference to its own class.
10761
         2. It comes with a template header.
10762
 
10763
         For example:
10764
 
10765
           template <class T> class C {
10766
             class C *c1;               // DECL_SELF_REFERENCE_P is true
10767
             class D;
10768
           };
10769
           template <class U> class C; // template_header_p is true
10770
           template <class T> class C<T>::D {
10771
             class C *c2;               // DECL_SELF_REFERENCE_P is true
10772
           };  */
10773
 
10774
      t = check_elaborated_type_specifier (tag_code,
10775
                                           decl,
10776
                                           template_header_p
10777
                                           | DECL_SELF_REFERENCE_P (decl));
10778
      return t;
10779
    }
10780
  else if (decl && TREE_CODE (decl) == TREE_LIST)
10781
    {
10782
      error ("reference to %qD is ambiguous", name);
10783
      print_candidates (decl);
10784
      return error_mark_node;
10785
    }
10786
  else
10787
    return NULL_TREE;
10788
}
10789
 
10790
/* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
10791
   Define the tag as a forward-reference if it is not defined.
10792
 
10793
   If a declaration is given, process it here, and report an error if
10794
   multiple declarations are not identical.
10795
 
10796
   SCOPE is TS_CURRENT when this is also a definition.  Only look in
10797
   the current frame for the name (since C++ allows new names in any
10798
   scope.)  It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
10799
   declaration.  Only look beginning from the current scope outward up
10800
   till the nearest non-class scope.  Otherwise it is TS_GLOBAL.
10801
 
10802
   TEMPLATE_HEADER_P is true when this declaration is preceded by
10803
   a set of template parameters.  */
10804
 
10805
tree
10806
xref_tag (enum tag_types tag_code, tree name,
10807
          tag_scope scope, bool template_header_p)
10808
{
10809
  enum tree_code code;
10810
  tree t;
10811
  tree context = NULL_TREE;
10812
 
10813
  timevar_push (TV_NAME_LOOKUP);
10814
 
10815
  gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
10816
 
10817
  switch (tag_code)
10818
    {
10819
    case record_type:
10820
    case class_type:
10821
      code = RECORD_TYPE;
10822
      break;
10823
    case union_type:
10824
      code = UNION_TYPE;
10825
      break;
10826
    case enum_type:
10827
      code = ENUMERAL_TYPE;
10828
      break;
10829
    default:
10830
      gcc_unreachable ();
10831
    }
10832
 
10833
  /* In case of anonymous name, xref_tag is only called to
10834
     make type node and push name.  Name lookup is not required.  */
10835
  if (ANON_AGGRNAME_P (name))
10836
    t = NULL_TREE;
10837
  else
10838
    t = lookup_and_check_tag  (tag_code, name,
10839
                               scope, template_header_p);
10840
 
10841
  if (t == error_mark_node)
10842
    POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
10843
 
10844
  if (scope != ts_current && t && current_class_type
10845
      && template_class_depth (current_class_type)
10846
      && template_header_p)
10847
    {
10848
      /* Since SCOPE is not TS_CURRENT, we are not looking at a
10849
         definition of this tag.  Since, in addition, we are currently
10850
         processing a (member) template declaration of a template
10851
         class, we must be very careful; consider:
10852
 
10853
           template <class X>
10854
           struct S1
10855
 
10856
           template <class U>
10857
           struct S2
10858
           { template <class V>
10859
           friend struct S1; };
10860
 
10861
         Here, the S2::S1 declaration should not be confused with the
10862
         outer declaration.  In particular, the inner version should
10863
         have a template parameter of level 2, not level 1.  This
10864
         would be particularly important if the member declaration
10865
         were instead:
10866
 
10867
           template <class V = U> friend struct S1;
10868
 
10869
         say, when we should tsubst into `U' when instantiating
10870
         S2.  On the other hand, when presented with:
10871
 
10872
           template <class T>
10873
           struct S1 {
10874
             template <class U>
10875
             struct S2 {};
10876
             template <class U>
10877
             friend struct S2;
10878
           };
10879
 
10880
         we must find the inner binding eventually.  We
10881
         accomplish this by making sure that the new type we
10882
         create to represent this declaration has the right
10883
         TYPE_CONTEXT.  */
10884
      context = TYPE_CONTEXT (t);
10885
      t = NULL_TREE;
10886
    }
10887
 
10888
  if (! t)
10889
    {
10890
      /* If no such tag is yet defined, create a forward-reference node
10891
         and record it as the "definition".
10892
         When a real declaration of this type is found,
10893
         the forward-reference will be altered into a real type.  */
10894
      if (code == ENUMERAL_TYPE)
10895
        {
10896
          error ("use of enum %q#D without previous declaration", name);
10897
          POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
10898
        }
10899
      else
10900
        {
10901
          t = make_class_type (code);
10902
          TYPE_CONTEXT (t) = context;
10903
          t = pushtag (name, t, scope);
10904
        }
10905
    }
10906
  else
10907
    {
10908
      if (template_header_p && MAYBE_CLASS_TYPE_P (t))
10909
        {
10910
          if (!redeclare_class_template (t, current_template_parms))
10911
            POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
10912
        }
10913
      else if (!processing_template_decl
10914
               && CLASS_TYPE_P (t)
10915
               && CLASSTYPE_IS_TEMPLATE (t))
10916
        {
10917
          error ("redeclaration of %qT as a non-template", t);
10918
          error ("previous declaration %q+D", t);
10919
          POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
10920
        }
10921
 
10922
      /* Make injected friend class visible.  */
10923
      if (scope != ts_within_enclosing_non_class
10924
          && hidden_name_p (TYPE_NAME (t)))
10925
        {
10926
          DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
10927
          DECL_FRIEND_P (TYPE_NAME (t)) = 0;
10928
 
10929
          if (TYPE_TEMPLATE_INFO (t))
10930
            {
10931
              DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
10932
              DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
10933
            }
10934
        }
10935
    }
10936
 
10937
  POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
10938
}
10939
 
10940
tree
10941
xref_tag_from_type (tree old, tree id, tag_scope scope)
10942
{
10943
  enum tag_types tag_kind;
10944
 
10945
  if (TREE_CODE (old) == RECORD_TYPE)
10946
    tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
10947
  else
10948
    tag_kind  = union_type;
10949
 
10950
  if (id == NULL_TREE)
10951
    id = TYPE_IDENTIFIER (old);
10952
 
10953
  return xref_tag (tag_kind, id, scope, false);
10954
}
10955
 
10956
/* Create the binfo hierarchy for REF with (possibly NULL) base list
10957
   BASE_LIST.  For each element on BASE_LIST the TREE_PURPOSE is an
10958
   access_* node, and the TREE_VALUE is the type of the base-class.
10959
   Non-NULL TREE_TYPE indicates virtual inheritance.
10960
 
10961
   Returns true if the binfo hierarchy was successfully created,
10962
   false if an error was detected. */
10963
 
10964
bool
10965
xref_basetypes (tree ref, tree base_list)
10966
{
10967
  tree *basep;
10968
  tree binfo, base_binfo;
10969
  unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases.  */
10970
  unsigned max_bases = 0;  /* Maximum direct bases.  */
10971
  int i;
10972
  tree default_access;
10973
  tree igo_prev; /* Track Inheritance Graph Order.  */
10974
 
10975
  if (ref == error_mark_node)
10976
    return false;
10977
 
10978
  /* The base of a derived class is private by default, all others are
10979
     public.  */
10980
  default_access = (TREE_CODE (ref) == RECORD_TYPE
10981
                    && CLASSTYPE_DECLARED_CLASS (ref)
10982
                    ? access_private_node : access_public_node);
10983
 
10984
  /* First, make sure that any templates in base-classes are
10985
     instantiated.  This ensures that if we call ourselves recursively
10986
     we do not get confused about which classes are marked and which
10987
     are not.  */
10988
  basep = &base_list;
10989
  while (*basep)
10990
    {
10991
      tree basetype = TREE_VALUE (*basep);
10992
 
10993
      if (!(processing_template_decl && uses_template_parms (basetype))
10994
          && !complete_type_or_else (basetype, NULL))
10995
        /* An incomplete type.  Remove it from the list.  */
10996
        *basep = TREE_CHAIN (*basep);
10997
      else
10998
        {
10999
          max_bases++;
11000
          if (TREE_TYPE (*basep))
11001
            max_vbases++;
11002
          if (CLASS_TYPE_P (basetype))
11003
            max_vbases += VEC_length (tree, CLASSTYPE_VBASECLASSES (basetype));
11004
          basep = &TREE_CHAIN (*basep);
11005
        }
11006
    }
11007
 
11008
  TYPE_MARKED_P (ref) = 1;
11009
 
11010
  /* The binfo slot should be empty, unless this is an (ill-formed)
11011
     redefinition.  */
11012
  gcc_assert (!TYPE_BINFO (ref) || TYPE_SIZE (ref));
11013
  gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
11014
 
11015
  binfo = make_tree_binfo (max_bases);
11016
 
11017
  TYPE_BINFO (ref) = binfo;
11018
  BINFO_OFFSET (binfo) = size_zero_node;
11019
  BINFO_TYPE (binfo) = ref;
11020
 
11021
  /* Apply base-class info set up to the variants of this type.  */
11022
  fixup_type_variants (ref);
11023
 
11024
  if (max_bases)
11025
    {
11026
      BINFO_BASE_ACCESSES (binfo) = VEC_alloc (tree, gc, max_bases);
11027
      /* An aggregate cannot have baseclasses.  */
11028
      CLASSTYPE_NON_AGGREGATE (ref) = 1;
11029
 
11030
      if (TREE_CODE (ref) == UNION_TYPE)
11031
        {
11032
          error ("derived union %qT invalid", ref);
11033
          return false;
11034
        }
11035
    }
11036
 
11037
  if (max_bases > 1)
11038
    {
11039
      if (TYPE_FOR_JAVA (ref))
11040
        {
11041
          error ("Java class %qT cannot have multiple bases", ref);
11042
          return false;
11043
        }
11044
    }
11045
 
11046
  if (max_vbases)
11047
    {
11048
      CLASSTYPE_VBASECLASSES (ref) = VEC_alloc (tree, gc, max_vbases);
11049
 
11050
      if (TYPE_FOR_JAVA (ref))
11051
        {
11052
          error ("Java class %qT cannot have virtual bases", ref);
11053
          return false;
11054
        }
11055
    }
11056
 
11057
  for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
11058
    {
11059
      tree access = TREE_PURPOSE (base_list);
11060
      int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
11061
      tree basetype = TREE_VALUE (base_list);
11062
 
11063
      if (access == access_default_node)
11064
        access = default_access;
11065
 
11066
      if (PACK_EXPANSION_P (basetype))
11067
        basetype = PACK_EXPANSION_PATTERN (basetype);
11068
      if (TREE_CODE (basetype) == TYPE_DECL)
11069
        basetype = TREE_TYPE (basetype);
11070
      if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
11071
        {
11072
          error ("base type %qT fails to be a struct or class type",
11073
                 basetype);
11074
          return false;
11075
        }
11076
 
11077
      if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
11078
        TYPE_FOR_JAVA (ref) = 1;
11079
 
11080
      base_binfo = NULL_TREE;
11081
      if (CLASS_TYPE_P (basetype) && !dependent_type_p (basetype))
11082
        {
11083
          base_binfo = TYPE_BINFO (basetype);
11084
          /* The original basetype could have been a typedef'd type.  */
11085
          basetype = BINFO_TYPE (base_binfo);
11086
 
11087
          /* Inherit flags from the base.  */
11088
          TYPE_HAS_NEW_OPERATOR (ref)
11089
            |= TYPE_HAS_NEW_OPERATOR (basetype);
11090
          TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
11091
            |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
11092
          TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
11093
          TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
11094
          CLASSTYPE_DIAMOND_SHAPED_P (ref)
11095
            |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
11096
          CLASSTYPE_REPEATED_BASE_P (ref)
11097
            |= CLASSTYPE_REPEATED_BASE_P (basetype);
11098
        }
11099
 
11100
      /* We must do this test after we've seen through a typedef
11101
         type.  */
11102
      if (TYPE_MARKED_P (basetype))
11103
        {
11104
          if (basetype == ref)
11105
            error ("recursive type %qT undefined", basetype);
11106
          else
11107
            error ("duplicate base type %qT invalid", basetype);
11108
          return false;
11109
        }
11110
 
11111
      if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
11112
        /* Regenerate the pack expansion for the bases. */
11113
        basetype = make_pack_expansion (basetype);
11114
 
11115
      TYPE_MARKED_P (basetype) = 1;
11116
 
11117
      base_binfo = copy_binfo (base_binfo, basetype, ref,
11118
                               &igo_prev, via_virtual);
11119
      if (!BINFO_INHERITANCE_CHAIN (base_binfo))
11120
        BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
11121
 
11122
      BINFO_BASE_APPEND (binfo, base_binfo);
11123
      BINFO_BASE_ACCESS_APPEND (binfo, access);
11124
    }
11125
 
11126
  if (VEC_space (tree, CLASSTYPE_VBASECLASSES (ref), 1))
11127
    /* If we have space in the vbase vector, we must have shared at
11128
       least one of them, and are therefore diamond shaped.  */
11129
    CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
11130
 
11131
  /* Unmark all the types.  */
11132
  for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
11133
    TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
11134
  TYPE_MARKED_P (ref) = 0;
11135
 
11136
  /* Now see if we have a repeated base type.  */
11137
  if (!CLASSTYPE_REPEATED_BASE_P (ref))
11138
    {
11139
      for (base_binfo = binfo; base_binfo;
11140
           base_binfo = TREE_CHAIN (base_binfo))
11141
        {
11142
          if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
11143
            {
11144
              CLASSTYPE_REPEATED_BASE_P (ref) = 1;
11145
              break;
11146
            }
11147
          TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
11148
        }
11149
      for (base_binfo = binfo; base_binfo;
11150
           base_binfo = TREE_CHAIN (base_binfo))
11151
        if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
11152
          TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
11153
        else
11154
          break;
11155
    }
11156
 
11157
  return true;
11158
}
11159
 
11160
 
11161
/* Begin compiling the definition of an enumeration type.
11162
   NAME is its name,
11163
 
11164
   UNDERLYING_TYPE is the type that will be used as the storage for
11165
   the enumeration type. This should be NULL_TREE if no storage type
11166
   was specified.
11167
 
11168
   SCOPED_ENUM_P is true if this is a scoped enumeration type.
11169
 
11170
   Returns the type object, as yet incomplete.
11171
   Also records info about it so that build_enumerator
11172
   may be used to declare the individual values as they are read.  */
11173
 
11174
tree
11175
start_enum (tree name, tree underlying_type, bool scoped_enum_p)
11176
{
11177
  tree enumtype;
11178
 
11179
  gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
11180
 
11181
  /* If this is the real definition for a previous forward reference,
11182
     fill in the contents in the same object that used to be the
11183
     forward reference.  */
11184
 
11185
  enumtype = lookup_and_check_tag (enum_type, name,
11186
                                   /*tag_scope=*/ts_current,
11187
                                   /*template_header_p=*/false);
11188
 
11189
  if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
11190
    {
11191
      error_at (input_location, "multiple definition of %q#T", enumtype);
11192
      error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
11193
                "previous definition here");
11194
      /* Clear out TYPE_VALUES, and start again.  */
11195
      TYPE_VALUES (enumtype) = NULL_TREE;
11196
    }
11197
  else
11198
    {
11199
      /* In case of error, make a dummy enum to allow parsing to
11200
         continue.  */
11201
      if (enumtype == error_mark_node)
11202
        name = make_anon_name ();
11203
 
11204
      enumtype = cxx_make_type (ENUMERAL_TYPE);
11205
      enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
11206
    }
11207
 
11208
  if (enumtype == error_mark_node)
11209
    return enumtype;
11210
 
11211
  if (scoped_enum_p)
11212
    {
11213
      SET_SCOPED_ENUM_P (enumtype, 1);
11214
      begin_scope (sk_scoped_enum, enumtype);
11215
 
11216
      /* [C++0x dcl.enum]p5:
11217
 
11218
          If not explicitly specified, the underlying type of a scoped
11219
          enumeration type is int.  */
11220
      if (!underlying_type)
11221
        underlying_type = integer_type_node;
11222
    }
11223
 
11224
  if (underlying_type)
11225
    {
11226
      if (CP_INTEGRAL_TYPE_P (underlying_type))
11227
        {
11228
          TYPE_MIN_VALUE (enumtype) = TYPE_MIN_VALUE (underlying_type);
11229
          TYPE_MAX_VALUE (enumtype) = TYPE_MAX_VALUE (underlying_type);
11230
          TYPE_SIZE (enumtype) = TYPE_SIZE (underlying_type);
11231
          TYPE_SIZE_UNIT (enumtype) = TYPE_SIZE_UNIT (underlying_type);
11232
          SET_TYPE_MODE (enumtype, TYPE_MODE (underlying_type));
11233
          TYPE_PRECISION (enumtype) = TYPE_PRECISION (underlying_type);
11234
          TYPE_ALIGN (enumtype) = TYPE_ALIGN (underlying_type);
11235
          TYPE_USER_ALIGN (enumtype) = TYPE_USER_ALIGN (underlying_type);
11236
          TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (underlying_type);
11237
          ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
11238
        }
11239
      else if (!dependent_type_p (underlying_type))
11240
        error ("underlying type %<%T%> of %<%T%> must be an integral type",
11241
               underlying_type, enumtype);
11242
    }
11243
 
11244
  return enumtype;
11245
}
11246
 
11247
/* After processing and defining all the values of an enumeration type,
11248
   install their decls in the enumeration type and finish it off.
11249
   ENUMTYPE is the type object and VALUES a list of name-value pairs.  */
11250
 
11251
void
11252
finish_enum (tree enumtype)
11253
{
11254
  tree values;
11255
  tree decl;
11256
  tree minnode;
11257
  tree maxnode;
11258
  tree value;
11259
  tree t;
11260
  bool unsignedp;
11261
  bool use_short_enum;
11262
  int lowprec;
11263
  int highprec;
11264
  int precision;
11265
  unsigned int itk;
11266
  tree underlying_type = NULL_TREE;
11267
  bool fixed_underlying_type_p
11268
    = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
11269
 
11270
  /* We built up the VALUES in reverse order.  */
11271
  TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
11272
 
11273
  /* For an enum defined in a template, just set the type of the values;
11274
     all further processing is postponed until the template is
11275
     instantiated.  We need to set the type so that tsubst of a CONST_DECL
11276
     works.  */
11277
  if (processing_template_decl)
11278
    {
11279
      for (values = TYPE_VALUES (enumtype);
11280
           values;
11281
           values = TREE_CHAIN (values))
11282
        TREE_TYPE (TREE_VALUE (values)) = enumtype;
11283
      if (at_function_scope_p ())
11284
        add_stmt (build_min (TAG_DEFN, enumtype));
11285
      if (SCOPED_ENUM_P (enumtype))
11286
        finish_scope ();
11287
      return;
11288
    }
11289
 
11290
  /* Determine the minimum and maximum values of the enumerators.  */
11291
  if (TYPE_VALUES (enumtype))
11292
    {
11293
      minnode = maxnode = NULL_TREE;
11294
 
11295
      for (values = TYPE_VALUES (enumtype);
11296
           values;
11297
           values = TREE_CHAIN (values))
11298
        {
11299
          decl = TREE_VALUE (values);
11300
 
11301
          /* [dcl.enum]: Following the closing brace of an enum-specifier,
11302
             each enumerator has the type of its enumeration.  Prior to the
11303
             closing brace, the type of each enumerator is the type of its
11304
             initializing value.  */
11305
          TREE_TYPE (decl) = enumtype;
11306
 
11307
          /* Update the minimum and maximum values, if appropriate.  */
11308
          value = DECL_INITIAL (decl);
11309
          if (value == error_mark_node)
11310
            value = integer_zero_node;
11311
          /* Figure out what the minimum and maximum values of the
11312
             enumerators are.  */
11313
          if (!minnode)
11314
            minnode = maxnode = value;
11315
          else if (tree_int_cst_lt (maxnode, value))
11316
            maxnode = value;
11317
          else if (tree_int_cst_lt (value, minnode))
11318
            minnode = value;
11319
        }
11320
    }
11321
  else
11322
    /* [dcl.enum]
11323
 
11324
       If the enumerator-list is empty, the underlying type is as if
11325
       the enumeration had a single enumerator with value 0.  */
11326
    minnode = maxnode = integer_zero_node;
11327
 
11328
  /* Compute the number of bits require to represent all values of the
11329
     enumeration.  We must do this before the type of MINNODE and
11330
     MAXNODE are transformed, since tree_int_cst_min_precision relies
11331
     on the TREE_TYPE of the value it is passed.  */
11332
  unsignedp = tree_int_cst_sgn (minnode) >= 0;
11333
  lowprec = tree_int_cst_min_precision (minnode, unsignedp);
11334
  highprec = tree_int_cst_min_precision (maxnode, unsignedp);
11335
  precision = MAX (lowprec, highprec);
11336
 
11337
  if (!fixed_underlying_type_p)
11338
    {
11339
      /* Determine the underlying type of the enumeration.
11340
 
11341
         [dcl.enum]
11342
 
11343
         The underlying type of an enumeration is an integral type that
11344
         can represent all the enumerator values defined in the
11345
         enumeration.  It is implementation-defined which integral type is
11346
         used as the underlying type for an enumeration except that the
11347
         underlying type shall not be larger than int unless the value of
11348
         an enumerator cannot fit in an int or unsigned int.
11349
 
11350
         We use "int" or an "unsigned int" as the underlying type, even if
11351
         a smaller integral type would work, unless the user has
11352
         explicitly requested that we use the smallest possible type.  The
11353
         user can request that for all enumerations with a command line
11354
         flag, or for just one enumeration with an attribute.  */
11355
 
11356
      use_short_enum = flag_short_enums
11357
        || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
11358
 
11359
      for (itk = (use_short_enum ? itk_char : itk_int);
11360
           itk != itk_none;
11361
           itk++)
11362
        {
11363
          underlying_type = integer_types[itk];
11364
          if (TYPE_PRECISION (underlying_type) >= precision
11365
              && TYPE_UNSIGNED (underlying_type) == unsignedp)
11366
            break;
11367
        }
11368
      if (itk == itk_none)
11369
        {
11370
          /* DR 377
11371
 
11372
             IF no integral type can represent all the enumerator values, the
11373
             enumeration is ill-formed.  */
11374
          error ("no integral type can represent all of the enumerator values "
11375
                 "for %qT", enumtype);
11376
          precision = TYPE_PRECISION (long_long_integer_type_node);
11377
          underlying_type = integer_types[itk_unsigned_long_long];
11378
        }
11379
 
11380
      /* [dcl.enum]
11381
 
11382
         The value of sizeof() applied to an enumeration type, an object
11383
         of an enumeration type, or an enumerator, is the value of sizeof()
11384
         applied to the underlying type.  */
11385
      TYPE_SIZE (enumtype) = TYPE_SIZE (underlying_type);
11386
      TYPE_SIZE_UNIT (enumtype) = TYPE_SIZE_UNIT (underlying_type);
11387
      SET_TYPE_MODE (enumtype, TYPE_MODE (underlying_type));
11388
      TYPE_ALIGN (enumtype) = TYPE_ALIGN (underlying_type);
11389
      TYPE_USER_ALIGN (enumtype) = TYPE_USER_ALIGN (underlying_type);
11390
      TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (underlying_type);
11391
 
11392
      /* Set the underlying type of the enumeration type to the
11393
         computed enumeration type, restricted to the enumerator
11394
         values. */
11395
      ENUM_UNDERLYING_TYPE (enumtype)
11396
        = build_distinct_type_copy (underlying_type);
11397
      set_min_and_max_values_for_integral_type
11398
        (ENUM_UNDERLYING_TYPE (enumtype), precision, unsignedp);
11399
    }
11400
  else
11401
    underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
11402
 
11403
  /* Compute the minimum and maximum values for the type.
11404
 
11405
     [dcl.enum]
11406
 
11407
     For an enumeration where emin is the smallest enumerator and emax
11408
     is the largest, the values of the enumeration are the values of the
11409
     underlying type in the range bmin to bmax, where bmin and bmax are,
11410
     respectively, the smallest and largest values of the smallest bit-
11411
     field that can store emin and emax.  */
11412
 
11413
  /* The middle-end currently assumes that types with TYPE_PRECISION
11414
     narrower than their underlying type are suitably zero or sign
11415
     extended to fill their mode.  g++ doesn't make these guarantees.
11416
     Until the middle-end can represent such paradoxical types, we
11417
     set the TYPE_PRECISION to the width of the underlying type.  */
11418
  TYPE_PRECISION (enumtype) = TYPE_PRECISION (underlying_type);
11419
 
11420
  set_min_and_max_values_for_integral_type (enumtype, precision, unsignedp);
11421
 
11422
  /* Convert each of the enumerators to the type of the underlying
11423
     type of the enumeration.  */
11424
  for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
11425
    {
11426
      location_t saved_location;
11427
 
11428
      decl = TREE_VALUE (values);
11429
      saved_location = input_location;
11430
      input_location = DECL_SOURCE_LOCATION (decl);
11431
      if (fixed_underlying_type_p)
11432
        /* If the enumeration type has a fixed underlying type, we
11433
           already checked all of the enumerator values.  */
11434
        value = DECL_INITIAL (decl);
11435
      else
11436
        value = perform_implicit_conversion (underlying_type,
11437
                                             DECL_INITIAL (decl),
11438
                                             tf_warning_or_error);
11439
      input_location = saved_location;
11440
 
11441
      /* Do not clobber shared ints.  */
11442
      value = copy_node (value);
11443
 
11444
      TREE_TYPE (value) = enumtype;
11445
      DECL_INITIAL (decl) = value;
11446
    }
11447
 
11448
  /* Fix up all variant types of this enum type.  */
11449
  for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
11450
    {
11451
      TYPE_VALUES (t) = TYPE_VALUES (enumtype);
11452
      TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (enumtype);
11453
      TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (enumtype);
11454
      TYPE_SIZE (t) = TYPE_SIZE (enumtype);
11455
      TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (enumtype);
11456
      SET_TYPE_MODE (t, TYPE_MODE (enumtype));
11457
      TYPE_PRECISION (t) = TYPE_PRECISION (enumtype);
11458
      TYPE_ALIGN (t) = TYPE_ALIGN (enumtype);
11459
      TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (enumtype);
11460
      TYPE_UNSIGNED (t) = TYPE_UNSIGNED (enumtype);
11461
      ENUM_UNDERLYING_TYPE (t) = ENUM_UNDERLYING_TYPE (enumtype);
11462
    }
11463
 
11464
  /* Finish up the scope of a scoped enumeration.  */
11465
  if (SCOPED_ENUM_P (enumtype))
11466
    finish_scope ();
11467
 
11468
  /* Finish debugging output for this type.  */
11469
  rest_of_type_compilation (enumtype, namespace_bindings_p ());
11470
}
11471
 
11472
/* Build and install a CONST_DECL for an enumeration constant of the
11473
   enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
11474
   Assignment of sequential values by default is handled here.  */
11475
 
11476
void
11477
build_enumerator (tree name, tree value, tree enumtype)
11478
{
11479
  tree decl;
11480
  tree context;
11481
  tree type;
11482
 
11483
  /* If the VALUE was erroneous, pretend it wasn't there; that will
11484
     result in the enum being assigned the next value in sequence.  */
11485
  if (value == error_mark_node)
11486
    value = NULL_TREE;
11487
 
11488
  /* Remove no-op casts from the value.  */
11489
  if (value)
11490
    STRIP_TYPE_NOPS (value);
11491
 
11492
  if (! processing_template_decl)
11493
    {
11494
      /* Validate and default VALUE.  */
11495
      if (value != NULL_TREE)
11496
        {
11497
          value = integral_constant_value (value);
11498
 
11499
          if (TREE_CODE (value) == INTEGER_CST)
11500
            {
11501
              value = perform_integral_promotions (value);
11502
              constant_expression_warning (value);
11503
            }
11504
          else
11505
            {
11506
              error ("enumerator value for %qD is not an integer constant", name);
11507
              value = NULL_TREE;
11508
            }
11509
        }
11510
 
11511
      /* Default based on previous value.  */
11512
      if (value == NULL_TREE)
11513
        {
11514
          if (TYPE_VALUES (enumtype))
11515
            {
11516
              HOST_WIDE_INT hi;
11517
              unsigned HOST_WIDE_INT lo;
11518
              tree prev_value;
11519
              bool overflowed;
11520
 
11521
              /* The next value is the previous value plus one.
11522
                 add_double doesn't know the type of the target expression,
11523
                 so we must check with int_fits_type_p as well.  */
11524
              prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
11525
              if (error_operand_p (prev_value))
11526
                value = error_mark_node;
11527
              else
11528
                {
11529
                  overflowed = add_double (TREE_INT_CST_LOW (prev_value),
11530
                                           TREE_INT_CST_HIGH (prev_value),
11531
                                           1, 0, &lo, &hi);
11532
                  value = build_int_cst_wide (TREE_TYPE (prev_value), lo, hi);
11533
                  overflowed
11534
                    |= !int_fits_type_p (value, TREE_TYPE (prev_value));
11535
 
11536
                  if (overflowed)
11537
                    {
11538
                      error ("overflow in enumeration values at %qD", name);
11539
                      value = error_mark_node;
11540
                    }
11541
                }
11542
            }
11543
          else
11544
            value = integer_zero_node;
11545
        }
11546
 
11547
      /* Remove no-op casts from the value.  */
11548
      STRIP_TYPE_NOPS (value);
11549
 
11550
      /* If the underlying type of the enum is fixed, check whether
11551
         the enumerator values fits in the underlying type.  If it
11552
         does not fit, the program is ill-formed [C++0x dcl.enum].  */
11553
      if (ENUM_UNDERLYING_TYPE (enumtype)
11554
          && value
11555
          && TREE_CODE (value) == INTEGER_CST
11556
          && !int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
11557
        {
11558
          error ("enumerator value %E is too large for underlying type %<%T%>",
11559
                 value, ENUM_UNDERLYING_TYPE (enumtype));
11560
 
11561
          /* Silently convert the value so that we can continue.  */
11562
          value = perform_implicit_conversion (ENUM_UNDERLYING_TYPE (enumtype),
11563
                                               value, tf_none);
11564
        }
11565
    }
11566
 
11567
  /* C++ associates enums with global, function, or class declarations.  */
11568
  context = current_scope ();
11569
 
11570
  /* Build the actual enumeration constant.  Note that the enumeration
11571
     constants have the underlying type of the enum (if it is fixed)
11572
     or the type of their initializer (if the underlying type of the
11573
     enum is not fixed):
11574
 
11575
      [ C++0x dcl.enum ]
11576
 
11577
        If the underlying type is fixed, the type of each enumerator
11578
        prior to the closing brace is the underlying type; if the
11579
        initializing value of an enumerator cannot be represented by
11580
        the underlying type, the program is ill-formed. If the
11581
        underlying type is not fixed, the type of each enumerator is
11582
        the type of its initializing value.
11583
 
11584
    If the underlying type is not fixed, it will be computed by
11585
    finish_enum and we will reset the type of this enumerator.  Of
11586
    course, if we're processing a template, there may be no value.  */
11587
  type = value ? TREE_TYPE (value) : NULL_TREE;
11588
 
11589
  if (context && context == current_class_type)
11590
    /* This enum declaration is local to the class.  We need the full
11591
       lang_decl so that we can record DECL_CLASS_CONTEXT, for example.  */
11592
    decl = build_lang_decl (CONST_DECL, name, type);
11593
  else
11594
    /* It's a global enum, or it's local to a function.  (Note local to
11595
      a function could mean local to a class method.  */
11596
    decl = build_decl (input_location, CONST_DECL, name, type);
11597
 
11598
  DECL_CONTEXT (decl) = FROB_CONTEXT (context);
11599
  TREE_CONSTANT (decl) = 1;
11600
  TREE_READONLY (decl) = 1;
11601
  DECL_INITIAL (decl) = value;
11602
 
11603
  if (context && context == current_class_type && !SCOPED_ENUM_P (enumtype))
11604
    /* In something like `struct S { enum E { i = 7 }; };' we put `i'
11605
       on the TYPE_FIELDS list for `S'.  (That's so that you can say
11606
       things like `S::i' later.)  */
11607
    finish_member_declaration (decl);
11608
  else
11609
    pushdecl (decl);
11610
 
11611
  /* Add this enumeration constant to the list for this type.  */
11612
  TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
11613
}
11614
 
11615
/* Look for an enumerator with the given NAME within the enumeration
11616
   type ENUMTYPE.  This routine is used primarily for qualified name
11617
   lookup into an enumerator in C++0x, e.g.,
11618
 
11619
     enum class Color { Red, Green, Blue };
11620
 
11621
     Color color = Color::Red;
11622
 
11623
   Returns the value corresponding to the enumerator, or
11624
   NULL_TREE if no such enumerator was found.  */
11625
tree
11626
lookup_enumerator (tree enumtype, tree name)
11627
{
11628
  tree e;
11629
  gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
11630
 
11631
  e = purpose_member (name, TYPE_VALUES (enumtype));
11632
  return e? TREE_VALUE (e) : NULL_TREE;
11633
}
11634
 
11635
 
11636
/* We're defining DECL.  Make sure that its type is OK.  */
11637
 
11638
static void
11639
check_function_type (tree decl, tree current_function_parms)
11640
{
11641
  tree fntype = TREE_TYPE (decl);
11642
  tree return_type = complete_type (TREE_TYPE (fntype));
11643
 
11644
  /* In a function definition, arg types must be complete.  */
11645
  require_complete_types_for_parms (current_function_parms);
11646
 
11647
  /* constexpr functions must have literal argument types and
11648
     literal return type.  */
11649
  validate_constexpr_fundecl (decl);
11650
 
11651
  if (dependent_type_p (return_type))
11652
    return;
11653
  if (!COMPLETE_OR_VOID_TYPE_P (return_type)
11654
      || (TYPE_FOR_JAVA (return_type) && MAYBE_CLASS_TYPE_P (return_type)))
11655
    {
11656
      tree args = TYPE_ARG_TYPES (fntype);
11657
 
11658
      if (!COMPLETE_OR_VOID_TYPE_P (return_type))
11659
        error ("return type %q#T is incomplete", return_type);
11660
      else
11661
        error ("return type has Java class type %q#T", return_type);
11662
 
11663
      /* Make it return void instead.  */
11664
      if (TREE_CODE (fntype) == METHOD_TYPE)
11665
        fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
11666
                                             void_type_node,
11667
                                             TREE_CHAIN (args));
11668
      else
11669
        fntype = build_function_type (void_type_node, args);
11670
      fntype
11671
        = build_exception_variant (fntype,
11672
                                   TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
11673
      fntype = (cp_build_type_attribute_variant
11674
                (fntype, TYPE_ATTRIBUTES (TREE_TYPE (decl))));
11675
      TREE_TYPE (decl) = fntype;
11676
    }
11677
  else
11678
    abstract_virtuals_error (decl, TREE_TYPE (fntype));
11679
}
11680
 
11681
/* Create the FUNCTION_DECL for a function definition.
11682
   DECLSPECS and DECLARATOR are the parts of the declaration;
11683
   they describe the function's name and the type it returns,
11684
   but twisted together in a fashion that parallels the syntax of C.
11685
 
11686
   FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
11687
   DECLARATOR is really the DECL for the function we are about to
11688
   process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
11689
   indicating that the function is an inline defined in-class.
11690
 
11691
   This function creates a binding context for the function body
11692
   as well as setting up the FUNCTION_DECL in current_function_decl.
11693
 
11694
   For C++, we must first check whether that datum makes any sense.
11695
   For example, "class A local_a(1,2);" means that variable local_a
11696
   is an aggregate of type A, which should have a constructor
11697
   applied to it with the argument list [1, 2].
11698
 
11699
   On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
11700
   or may be a BLOCK if the function has been defined previously
11701
   in this translation unit.  On exit, DECL_INITIAL (decl1) will be
11702
   error_mark_node if the function has never been defined, or
11703
   a BLOCK if the function has been defined somewhere.  */
11704
 
11705
void
11706
start_preparsed_function (tree decl1, tree attrs, int flags)
11707
{
11708
  tree ctype = NULL_TREE;
11709
  tree fntype;
11710
  tree restype;
11711
  int doing_friend = 0;
11712
  struct cp_binding_level *bl;
11713
  tree current_function_parms;
11714
  struct c_fileinfo *finfo
11715
    = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
11716
  bool honor_interface;
11717
 
11718
  /* Sanity check.  */
11719
  gcc_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE);
11720
  gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
11721
 
11722
  fntype = TREE_TYPE (decl1);
11723
  if (TREE_CODE (fntype) == METHOD_TYPE)
11724
    ctype = TYPE_METHOD_BASETYPE (fntype);
11725
 
11726
  /* ISO C++ 11.4/5.  A friend function defined in a class is in
11727
     the (lexical) scope of the class in which it is defined.  */
11728
  if (!ctype && DECL_FRIEND_P (decl1))
11729
    {
11730
      ctype = DECL_FRIEND_CONTEXT (decl1);
11731
 
11732
      /* CTYPE could be null here if we're dealing with a template;
11733
         for example, `inline friend float foo()' inside a template
11734
         will have no CTYPE set.  */
11735
      if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
11736
        ctype = NULL_TREE;
11737
      else
11738
        doing_friend = 1;
11739
    }
11740
 
11741
  if (DECL_DECLARED_INLINE_P (decl1)
11742
      && lookup_attribute ("noinline", attrs))
11743
    warning (0, "inline function %q+D given attribute noinline", decl1);
11744
 
11745
  /* Handle gnu_inline attribute.  */
11746
  if (GNU_INLINE_P (decl1))
11747
    {
11748
      DECL_EXTERNAL (decl1) = 1;
11749
      DECL_NOT_REALLY_EXTERN (decl1) = 0;
11750
      DECL_INTERFACE_KNOWN (decl1) = 1;
11751
      DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
11752
    }
11753
 
11754
  if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
11755
    /* This is a constructor, we must ensure that any default args
11756
       introduced by this definition are propagated to the clones
11757
       now. The clones are used directly in overload resolution.  */
11758
    adjust_clone_args (decl1);
11759
 
11760
  /* Sometimes we don't notice that a function is a static member, and
11761
     build a METHOD_TYPE for it.  Fix that up now.  */
11762
  if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
11763
      && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
11764
    {
11765
      revert_static_member_fn (decl1);
11766
      ctype = NULL_TREE;
11767
    }
11768
 
11769
  /* Set up current_class_type, and enter the scope of the class, if
11770
     appropriate.  */
11771
  if (ctype)
11772
    push_nested_class (ctype);
11773
  else if (DECL_STATIC_FUNCTION_P (decl1))
11774
    push_nested_class (DECL_CONTEXT (decl1));
11775
 
11776
  /* Now that we have entered the scope of the class, we must restore
11777
     the bindings for any template parameters surrounding DECL1, if it
11778
     is an inline member template.  (Order is important; consider the
11779
     case where a template parameter has the same name as a field of
11780
     the class.)  It is not until after this point that
11781
     PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly.  */
11782
  if (flags & SF_INCLASS_INLINE)
11783
    maybe_begin_member_template_processing (decl1);
11784
 
11785
  /* Effective C++ rule 15.  */
11786
  if (warn_ecpp
11787
      && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
11788
      && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
11789
    warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
11790
 
11791
  /* Make the init_value nonzero so pushdecl knows this is not tentative.
11792
     error_mark_node is replaced below (in poplevel) with the BLOCK.  */
11793
  if (!DECL_INITIAL (decl1))
11794
    DECL_INITIAL (decl1) = error_mark_node;
11795
 
11796
  /* This function exists in static storage.
11797
     (This does not mean `static' in the C sense!)  */
11798
  TREE_STATIC (decl1) = 1;
11799
 
11800
  /* We must call push_template_decl after current_class_type is set
11801
     up.  (If we are processing inline definitions after exiting a
11802
     class scope, current_class_type will be NULL_TREE until set above
11803
     by push_nested_class.)  */
11804
  if (processing_template_decl)
11805
    {
11806
      /* FIXME: Handle error_mark_node more gracefully.  */
11807
      tree newdecl1 = push_template_decl (decl1);
11808
      if (newdecl1 != error_mark_node)
11809
        decl1 = newdecl1;
11810
    }
11811
 
11812
  /* We are now in the scope of the function being defined.  */
11813
  current_function_decl = decl1;
11814
 
11815
  /* Save the parm names or decls from this function's declarator
11816
     where store_parm_decls will find them.  */
11817
  current_function_parms = DECL_ARGUMENTS (decl1);
11818
 
11819
  /* Make sure the parameter and return types are reasonable.  When
11820
     you declare a function, these types can be incomplete, but they
11821
     must be complete when you define the function.  */
11822
  check_function_type (decl1, current_function_parms);
11823
 
11824
  /* Build the return declaration for the function.  */
11825
  restype = TREE_TYPE (fntype);
11826
  if (DECL_RESULT (decl1) == NULL_TREE)
11827
    {
11828
      tree resdecl;
11829
 
11830
      resdecl = build_decl (input_location, RESULT_DECL, 0, restype);
11831
      DECL_ARTIFICIAL (resdecl) = 1;
11832
      DECL_IGNORED_P (resdecl) = 1;
11833
      DECL_RESULT (decl1) = resdecl;
11834
 
11835
      cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
11836
    }
11837
 
11838
  /* Let the user know we're compiling this function.  */
11839
  announce_function (decl1);
11840
 
11841
  /* Record the decl so that the function name is defined.
11842
     If we already have a decl for this name, and it is a FUNCTION_DECL,
11843
     use the old decl.  */
11844
  if (!processing_template_decl && !(flags & SF_PRE_PARSED))
11845
    {
11846
      /* A specialization is not used to guide overload resolution.  */
11847
      if (!DECL_FUNCTION_MEMBER_P (decl1)
11848
          && !(DECL_USE_TEMPLATE (decl1) &&
11849
               PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
11850
        {
11851
          tree olddecl = pushdecl (decl1);
11852
 
11853
          if (olddecl == error_mark_node)
11854
            /* If something went wrong when registering the declaration,
11855
               use DECL1; we have to have a FUNCTION_DECL to use when
11856
               parsing the body of the function.  */
11857
            ;
11858
          else
11859
            {
11860
              /* Otherwise, OLDDECL is either a previous declaration
11861
                 of the same function or DECL1 itself.  */
11862
 
11863
              if (warn_missing_declarations
11864
                  && olddecl == decl1
11865
                  && !DECL_MAIN_P (decl1)
11866
                  && TREE_PUBLIC (decl1)
11867
                  && !DECL_DECLARED_INLINE_P (decl1))
11868
                {
11869
                  tree context;
11870
 
11871
                  /* Check whether DECL1 is in an anonymous
11872
                     namespace.  */
11873
                  for (context = DECL_CONTEXT (decl1);
11874
                       context;
11875
                       context = DECL_CONTEXT (context))
11876
                    {
11877
                      if (TREE_CODE (context) == NAMESPACE_DECL
11878
                          && DECL_NAME (context) == NULL_TREE)
11879
                        break;
11880
                    }
11881
 
11882
                  if (context == NULL)
11883
                    warning (OPT_Wmissing_declarations,
11884
                             "no previous declaration for %q+D", decl1);
11885
                }
11886
 
11887
              decl1 = olddecl;
11888
            }
11889
        }
11890
      else
11891
        {
11892
          /* We need to set the DECL_CONTEXT.  */
11893
          if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
11894
            DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
11895
        }
11896
      fntype = TREE_TYPE (decl1);
11897
 
11898
      /* If #pragma weak applies, mark the decl appropriately now.
11899
         The pragma only applies to global functions.  Because
11900
         determining whether or not the #pragma applies involves
11901
         computing the mangled name for the declaration, we cannot
11902
         apply the pragma until after we have merged this declaration
11903
         with any previous declarations; if the original declaration
11904
         has a linkage specification, that specification applies to
11905
         the definition as well, and may affect the mangled name.  */
11906
      if (!DECL_CONTEXT (decl1))
11907
        maybe_apply_pragma_weak (decl1);
11908
    }
11909
 
11910
  /* Reset this in case the call to pushdecl changed it.  */
11911
  current_function_decl = decl1;
11912
 
11913
  gcc_assert (DECL_INITIAL (decl1));
11914
 
11915
  /* This function may already have been parsed, in which case just
11916
     return; our caller will skip over the body without parsing.  */
11917
  if (DECL_INITIAL (decl1) != error_mark_node)
11918
    return;
11919
 
11920
  /* Initialize RTL machinery.  We cannot do this until
11921
     CURRENT_FUNCTION_DECL and DECL_RESULT are set up.  We do this
11922
     even when processing a template; this is how we get
11923
     CFUN set up, and our per-function variables initialized.
11924
     FIXME factor out the non-RTL stuff.  */
11925
  bl = current_binding_level;
11926
  allocate_struct_function (decl1, processing_template_decl);
11927
 
11928
  /* Initialize the language data structures.  Whenever we start
11929
     a new function, we destroy temporaries in the usual way.  */
11930
  cfun->language = GGC_CNEW (struct language_function);
11931
  current_stmt_tree ()->stmts_are_full_exprs_p = 1;
11932
  current_binding_level = bl;
11933
 
11934
  /* Even though we're inside a function body, we still don't want to
11935
     call expand_expr to calculate the size of a variable-sized array.
11936
     We haven't necessarily assigned RTL to all variables yet, so it's
11937
     not safe to try to expand expressions involving them.  */
11938
  cfun->dont_save_pending_sizes_p = 1;
11939
 
11940
  /* Start the statement-tree, start the tree now.  */
11941
  DECL_SAVED_TREE (decl1) = push_stmt_list ();
11942
 
11943
  /* If we are (erroneously) defining a function that we have already
11944
     defined before, wipe out what we knew before.  */
11945
  if (!DECL_PENDING_INLINE_P (decl1))
11946
    DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
11947
 
11948
  if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
11949
    {
11950
      /* We know that this was set up by `grokclassfn'.  We do not
11951
         wait until `store_parm_decls', since evil parse errors may
11952
         never get us to that point.  Here we keep the consistency
11953
         between `current_class_type' and `current_class_ptr'.  */
11954
      tree t = DECL_ARGUMENTS (decl1);
11955
 
11956
      gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
11957
      gcc_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE);
11958
 
11959
      cp_function_chain->x_current_class_ref
11960
        = cp_build_indirect_ref (t, RO_NULL, tf_warning_or_error);
11961
      cp_function_chain->x_current_class_ptr = t;
11962
 
11963
      /* Constructors and destructors need to know whether they're "in
11964
         charge" of initializing virtual base classes.  */
11965
      t = TREE_CHAIN (t);
11966
      if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
11967
        {
11968
          current_in_charge_parm = t;
11969
          t = TREE_CHAIN (t);
11970
        }
11971
      if (DECL_HAS_VTT_PARM_P (decl1))
11972
        {
11973
          gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
11974
          current_vtt_parm = t;
11975
        }
11976
    }
11977
 
11978
  honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
11979
                     /* Implicitly-defined methods (like the
11980
                        destructor for a class in which no destructor
11981
                        is explicitly declared) must not be defined
11982
                        until their definition is needed.  So, we
11983
                        ignore interface specifications for
11984
                        compiler-generated functions.  */
11985
                     && !DECL_ARTIFICIAL (decl1));
11986
 
11987
  if (DECL_INTERFACE_KNOWN (decl1))
11988
    {
11989
      tree ctx = decl_function_context (decl1);
11990
 
11991
      if (DECL_NOT_REALLY_EXTERN (decl1))
11992
        DECL_EXTERNAL (decl1) = 0;
11993
 
11994
      if (ctx != NULL_TREE && DECL_DECLARED_INLINE_P (ctx)
11995
          && TREE_PUBLIC (ctx))
11996
        /* This is a function in a local class in an extern inline
11997
           function.  */
11998
        comdat_linkage (decl1);
11999
    }
12000
  /* If this function belongs to an interface, it is public.
12001
     If it belongs to someone else's interface, it is also external.
12002
     This only affects inlines and template instantiations.  */
12003
  else if (!finfo->interface_unknown && honor_interface)
12004
    {
12005
      if (DECL_DECLARED_INLINE_P (decl1)
12006
          || DECL_TEMPLATE_INSTANTIATION (decl1)
12007
          || processing_template_decl)
12008
        {
12009
          DECL_EXTERNAL (decl1)
12010
            = (finfo->interface_only
12011
               || (DECL_DECLARED_INLINE_P (decl1)
12012
                   && ! flag_implement_inlines
12013
                   && !DECL_VINDEX (decl1)));
12014
 
12015
          /* For WIN32 we also want to put these in linkonce sections.  */
12016
          maybe_make_one_only (decl1);
12017
        }
12018
      else
12019
        DECL_EXTERNAL (decl1) = 0;
12020
      DECL_INTERFACE_KNOWN (decl1) = 1;
12021
      /* If this function is in an interface implemented in this file,
12022
         make sure that the back end knows to emit this function
12023
         here.  */
12024
      if (!DECL_EXTERNAL (decl1))
12025
        mark_needed (decl1);
12026
    }
12027
  else if (finfo->interface_unknown && finfo->interface_only
12028
           && honor_interface)
12029
    {
12030
      /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
12031
         interface, we will have both finfo->interface_unknown and
12032
         finfo->interface_only set.  In that case, we don't want to
12033
         use the normal heuristics because someone will supply a
12034
         #pragma implementation elsewhere, and deducing it here would
12035
         produce a conflict.  */
12036
      comdat_linkage (decl1);
12037
      DECL_EXTERNAL (decl1) = 0;
12038
      DECL_INTERFACE_KNOWN (decl1) = 1;
12039
      DECL_DEFER_OUTPUT (decl1) = 1;
12040
    }
12041
  else
12042
    {
12043
      /* This is a definition, not a reference.
12044
         So clear DECL_EXTERNAL, unless this is a GNU extern inline.  */
12045
      if (!GNU_INLINE_P (decl1))
12046
        DECL_EXTERNAL (decl1) = 0;
12047
 
12048
      if ((DECL_DECLARED_INLINE_P (decl1)
12049
           || DECL_TEMPLATE_INSTANTIATION (decl1))
12050
          && ! DECL_INTERFACE_KNOWN (decl1))
12051
        DECL_DEFER_OUTPUT (decl1) = 1;
12052
      else
12053
        DECL_INTERFACE_KNOWN (decl1) = 1;
12054
    }
12055
 
12056
  /* Determine the ELF visibility attribute for the function.  We must not
12057
     do this before calling "pushdecl", as we must allow "duplicate_decls"
12058
     to merge any attributes appropriately.  We also need to wait until
12059
     linkage is set.  */
12060
  if (!DECL_CLONED_FUNCTION_P (decl1))
12061
    determine_visibility (decl1);
12062
 
12063
  begin_scope (sk_function_parms, decl1);
12064
 
12065
  ++function_depth;
12066
 
12067
  if (DECL_DESTRUCTOR_P (decl1)
12068
      || (DECL_CONSTRUCTOR_P (decl1)
12069
          && targetm.cxx.cdtor_returns_this ()))
12070
    {
12071
      cdtor_label = build_decl (input_location,
12072
                                LABEL_DECL, NULL_TREE, NULL_TREE);
12073
      DECL_CONTEXT (cdtor_label) = current_function_decl;
12074
    }
12075
 
12076
  start_fname_decls ();
12077
 
12078
  store_parm_decls (current_function_parms);
12079
}
12080
 
12081
 
12082
/* Like start_preparsed_function, except that instead of a
12083
   FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
12084
 
12085
   Returns 1 on success.  If the DECLARATOR is not suitable for a function
12086
   (it defines a datum instead), we return 0, which tells
12087
   yyparse to report a parse error.  */
12088
 
12089
int
12090
start_function (cp_decl_specifier_seq *declspecs,
12091
                const cp_declarator *declarator,
12092
                tree attrs)
12093
{
12094
  tree decl1;
12095
 
12096
  decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
12097
  if (decl1 == error_mark_node)
12098
    return 0;
12099
  /* If the declarator is not suitable for a function definition,
12100
     cause a syntax error.  */
12101
  if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
12102
    {
12103
      error ("invalid function declaration");
12104
      return 0;
12105
    }
12106
 
12107
  if (DECL_MAIN_P (decl1))
12108
    /* main must return int.  grokfndecl should have corrected it
12109
       (and issued a diagnostic) if the user got it wrong.  */
12110
    gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
12111
                             integer_type_node));
12112
 
12113
  start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
12114
 
12115
  return 1;
12116
}
12117
 
12118
/* Returns true iff an EH_SPEC_BLOCK should be created in the body of
12119
   FN.  */
12120
 
12121
static bool
12122
use_eh_spec_block (tree fn)
12123
{
12124
  return (flag_exceptions && flag_enforce_eh_specs
12125
          && !processing_template_decl
12126
          && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn))
12127
          /* We insert the EH_SPEC_BLOCK only in the original
12128
             function; then, it is copied automatically to the
12129
             clones.  */
12130
          && !DECL_CLONED_FUNCTION_P (fn)
12131
          /* Implicitly-generated constructors and destructors have
12132
             exception specifications.  However, those specifications
12133
             are the union of the possible exceptions specified by the
12134
             constructors/destructors for bases and members, so no
12135
             unallowed exception will ever reach this function.  By
12136
             not creating the EH_SPEC_BLOCK we save a little memory,
12137
             and we avoid spurious warnings about unreachable
12138
             code.  */
12139
          && !DECL_ARTIFICIAL (fn));
12140
}
12141
 
12142
/* Store the parameter declarations into the current function declaration.
12143
   This is called after parsing the parameter declarations, before
12144
   digesting the body of the function.
12145
 
12146
   Also install to binding contour return value identifier, if any.  */
12147
 
12148
static void
12149
store_parm_decls (tree current_function_parms)
12150
{
12151
  tree fndecl = current_function_decl;
12152
  tree parm;
12153
 
12154
  /* This is a chain of any other decls that came in among the parm
12155
     declarations.  If a parm is declared with  enum {foo, bar} x;
12156
     then CONST_DECLs for foo and bar are put here.  */
12157
  tree nonparms = NULL_TREE;
12158
 
12159
  if (current_function_parms)
12160
    {
12161
      /* This case is when the function was defined with an ANSI prototype.
12162
         The parms already have decls, so we need not do anything here
12163
         except record them as in effect
12164
         and complain if any redundant old-style parm decls were written.  */
12165
 
12166
      tree specparms = current_function_parms;
12167
      tree next;
12168
 
12169
      /* Must clear this because it might contain TYPE_DECLs declared
12170
             at class level.  */
12171
      current_binding_level->names = NULL;
12172
 
12173
      /* If we're doing semantic analysis, then we'll call pushdecl
12174
             for each of these.  We must do them in reverse order so that
12175
             they end in the correct forward order.  */
12176
      specparms = nreverse (specparms);
12177
 
12178
      for (parm = specparms; parm; parm = next)
12179
        {
12180
          next = TREE_CHAIN (parm);
12181
          if (TREE_CODE (parm) == PARM_DECL)
12182
            {
12183
              if (DECL_NAME (parm) == NULL_TREE
12184
                  || TREE_CODE (parm) != VOID_TYPE)
12185
                pushdecl (parm);
12186
              else
12187
                error ("parameter %qD declared void", parm);
12188
            }
12189
          else
12190
            {
12191
              /* If we find an enum constant or a type tag,
12192
                 put it aside for the moment.  */
12193
              TREE_CHAIN (parm) = NULL_TREE;
12194
              nonparms = chainon (nonparms, parm);
12195
            }
12196
        }
12197
 
12198
      /* Get the decls in their original chain order and record in the
12199
         function.  This is all and only the PARM_DECLs that were
12200
         pushed into scope by the loop above.  */
12201
      DECL_ARGUMENTS (fndecl) = getdecls ();
12202
    }
12203
  else
12204
    DECL_ARGUMENTS (fndecl) = NULL_TREE;
12205
 
12206
  /* Now store the final chain of decls for the arguments
12207
     as the decl-chain of the current lexical scope.
12208
     Put the enumerators in as well, at the front so that
12209
     DECL_ARGUMENTS is not modified.  */
12210
  current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
12211
 
12212
  if (use_eh_spec_block (current_function_decl))
12213
    current_eh_spec_block = begin_eh_spec_block ();
12214
}
12215
 
12216
 
12217
/* We have finished doing semantic analysis on DECL, but have not yet
12218
   generated RTL for its body.  Save away our current state, so that
12219
   when we want to generate RTL later we know what to do.  */
12220
 
12221
static void
12222
save_function_data (tree decl)
12223
{
12224
  struct language_function *f;
12225
 
12226
  /* Save the language-specific per-function data so that we can
12227
     get it back when we really expand this function.  */
12228
  gcc_assert (!DECL_PENDING_INLINE_P (decl));
12229
 
12230
  /* Make a copy.  */
12231
  f = GGC_NEW (struct language_function);
12232
  memcpy (f, cp_function_chain, sizeof (struct language_function));
12233
  DECL_SAVED_FUNCTION_DATA (decl) = f;
12234
 
12235
  /* Clear out the bits we don't need.  */
12236
  f->base.x_stmt_tree.x_cur_stmt_list = NULL_TREE;
12237
  f->bindings = NULL;
12238
  f->x_local_names = NULL;
12239
}
12240
 
12241
 
12242
/* Set the return value of the constructor (if present).  */
12243
 
12244
static void
12245
finish_constructor_body (void)
12246
{
12247
  tree val;
12248
  tree exprstmt;
12249
 
12250
  if (targetm.cxx.cdtor_returns_this ()
12251
      && (! TYPE_FOR_JAVA (current_class_type)))
12252
    {
12253
      /* Any return from a constructor will end up here.  */
12254
      add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
12255
 
12256
      val = DECL_ARGUMENTS (current_function_decl);
12257
      val = build2 (MODIFY_EXPR, TREE_TYPE (val),
12258
                    DECL_RESULT (current_function_decl), val);
12259
      /* Return the address of the object.  */
12260
      exprstmt = build_stmt (input_location, RETURN_EXPR, val);
12261
      add_stmt (exprstmt);
12262
    }
12263
}
12264
 
12265
/* Do all the processing for the beginning of a destructor; set up the
12266
   vtable pointers and cleanups for bases and members.  */
12267
 
12268
static void
12269
begin_destructor_body (void)
12270
{
12271
  tree compound_stmt;
12272
 
12273
  /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
12274
     issued an error message.  We still want to try to process the
12275
     body of the function, but initialize_vtbl_ptrs will crash if
12276
     TYPE_BINFO is NULL.  */
12277
  if (COMPLETE_TYPE_P (current_class_type))
12278
    {
12279
      compound_stmt = begin_compound_stmt (0);
12280
      /* Make all virtual function table pointers in non-virtual base
12281
         classes point to CURRENT_CLASS_TYPE's virtual function
12282
         tables.  */
12283
      initialize_vtbl_ptrs (current_class_ptr);
12284
      finish_compound_stmt (compound_stmt);
12285
 
12286
      /* And insert cleanups for our bases and members so that they
12287
         will be properly destroyed if we throw.  */
12288
      push_base_cleanups ();
12289
    }
12290
}
12291
 
12292
/* At the end of every destructor we generate code to delete the object if
12293
   necessary.  Do that now.  */
12294
 
12295
static void
12296
finish_destructor_body (void)
12297
{
12298
  tree exprstmt;
12299
 
12300
  /* Any return from a destructor will end up here; that way all base
12301
     and member cleanups will be run when the function returns.  */
12302
  add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
12303
 
12304
  /* In a virtual destructor, we must call delete.  */
12305
  if (DECL_VIRTUAL_P (current_function_decl))
12306
    {
12307
      tree if_stmt;
12308
      tree virtual_size = cxx_sizeof (current_class_type);
12309
 
12310
      /* [class.dtor]
12311
 
12312
      At the point of definition of a virtual destructor (including
12313
      an implicit definition), non-placement operator delete shall
12314
      be looked up in the scope of the destructor's class and if
12315
      found shall be accessible and unambiguous.  */
12316
      exprstmt = build_op_delete_call(DELETE_EXPR, current_class_ptr,
12317
                                      virtual_size,
12318
                                      /*global_p=*/false,
12319
                                      /*placement=*/NULL_TREE,
12320
                                      /*alloc_fn=*/NULL_TREE);
12321
 
12322
      if_stmt = begin_if_stmt ();
12323
      finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
12324
                                   current_in_charge_parm,
12325
                                   integer_one_node),
12326
                           if_stmt);
12327
      finish_expr_stmt (exprstmt);
12328
      finish_then_clause (if_stmt);
12329
      finish_if_stmt (if_stmt);
12330
    }
12331
 
12332
  if (targetm.cxx.cdtor_returns_this ())
12333
    {
12334
      tree val;
12335
 
12336
      val = DECL_ARGUMENTS (current_function_decl);
12337
      val = build2 (MODIFY_EXPR, TREE_TYPE (val),
12338
                    DECL_RESULT (current_function_decl), val);
12339
      /* Return the address of the object.  */
12340
      exprstmt = build_stmt (input_location, RETURN_EXPR, val);
12341
      add_stmt (exprstmt);
12342
    }
12343
}
12344
 
12345
/* Do the necessary processing for the beginning of a function body, which
12346
   in this case includes member-initializers, but not the catch clauses of
12347
   a function-try-block.  Currently, this means opening a binding level
12348
   for the member-initializers (in a ctor) and member cleanups (in a dtor).  */
12349
 
12350
tree
12351
begin_function_body (void)
12352
{
12353
  tree stmt;
12354
 
12355
  if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
12356
    return NULL_TREE;
12357
 
12358
  if (processing_template_decl)
12359
    /* Do nothing now.  */;
12360
  else
12361
    /* Always keep the BLOCK node associated with the outermost pair of
12362
       curly braces of a function.  These are needed for correct
12363
       operation of dwarfout.c.  */
12364
    keep_next_level (true);
12365
 
12366
  stmt = begin_compound_stmt (BCS_FN_BODY);
12367
 
12368
  if (processing_template_decl)
12369
    /* Do nothing now.  */;
12370
  else if (DECL_DESTRUCTOR_P (current_function_decl))
12371
    begin_destructor_body ();
12372
 
12373
  return stmt;
12374
}
12375
 
12376
/* Do the processing for the end of a function body.  Currently, this means
12377
   closing out the cleanups for fully-constructed bases and members, and in
12378
   the case of the destructor, deleting the object if desired.  Again, this
12379
   is only meaningful for [cd]tors, since they are the only functions where
12380
   there is a significant distinction between the main body and any
12381
   function catch clauses.  Handling, say, main() return semantics here
12382
   would be wrong, as flowing off the end of a function catch clause for
12383
   main() would also need to return 0.  */
12384
 
12385
void
12386
finish_function_body (tree compstmt)
12387
{
12388
  if (compstmt == NULL_TREE)
12389
    return;
12390
 
12391
  /* Close the block.  */
12392
  finish_compound_stmt (compstmt);
12393
 
12394
  if (processing_template_decl)
12395
    /* Do nothing now.  */;
12396
  else if (DECL_CONSTRUCTOR_P (current_function_decl))
12397
    finish_constructor_body ();
12398
  else if (DECL_DESTRUCTOR_P (current_function_decl))
12399
    finish_destructor_body ();
12400
}
12401
 
12402
/* Given a function, returns the BLOCK corresponding to the outermost level
12403
   of curly braces, skipping the artificial block created for constructor
12404
   initializers.  */
12405
 
12406
tree
12407
outer_curly_brace_block (tree fndecl)
12408
{
12409
  tree block = BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl));
12410
  if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
12411
    /* Skip the artificial function body block.  */
12412
    block = BLOCK_SUBBLOCKS (block);
12413
  return block;
12414
}
12415
 
12416
/* Finish up a function declaration and compile that function
12417
   all the way to assembler language output.  The free the storage
12418
   for the function definition.
12419
 
12420
   FLAGS is a bitwise or of the following values:
12421
     2 - INCLASS_INLINE
12422
       We just finished processing the body of an in-class inline
12423
       function definition.  (This processing will have taken place
12424
       after the class definition is complete.)  */
12425
 
12426
tree
12427
finish_function (int flags)
12428
{
12429
  tree fndecl = current_function_decl;
12430
  tree fntype, ctype = NULL_TREE;
12431
  int inclass_inline = (flags & 2) != 0;
12432
  int nested;
12433
 
12434
  /* When we get some parse errors, we can end up without a
12435
     current_function_decl, so cope.  */
12436
  if (fndecl == NULL_TREE)
12437
    return error_mark_node;
12438
 
12439
  gcc_assert (!defer_mark_used_calls);
12440
  defer_mark_used_calls = true;
12441
 
12442
  if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
12443
      && DECL_VIRTUAL_P (fndecl)
12444
      && !processing_template_decl)
12445
    {
12446
      tree fnclass = DECL_CONTEXT (fndecl);
12447
      if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
12448
        keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
12449
    }
12450
 
12451
  nested = function_depth > 1;
12452
  fntype = TREE_TYPE (fndecl);
12453
 
12454
  /*  TREE_READONLY (fndecl) = 1;
12455
      This caused &foo to be of type ptr-to-const-function
12456
      which then got a warning when stored in a ptr-to-function variable.  */
12457
 
12458
  gcc_assert (building_stmt_tree ());
12459
  /* The current function is being defined, so its DECL_INITIAL should
12460
     be set, and unless there's a multiple definition, it should be
12461
     error_mark_node.  */
12462
  gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
12463
 
12464
  /* For a cloned function, we've already got all the code we need;
12465
     there's no need to add any extra bits.  */
12466
  if (!DECL_CLONED_FUNCTION_P (fndecl))
12467
    {
12468
      if (DECL_MAIN_P (current_function_decl))
12469
        {
12470
          tree stmt;
12471
 
12472
          /* Make it so that `main' always returns 0 by default (or
12473
             1 for VMS).  */
12474
#if VMS_TARGET
12475
          stmt = finish_return_stmt (integer_one_node);
12476
#else
12477
          stmt = finish_return_stmt (integer_zero_node);
12478
#endif
12479
          /* Hack.  We don't want the middle-end to warn that this
12480
             return is unreachable, so put the statement on the
12481
             special line 0.  */
12482
          {
12483
            location_t linezero = linemap_line_start (line_table, 0, 1);
12484
            SET_EXPR_LOCATION (stmt, linezero);
12485
          }
12486
        }
12487
 
12488
      if (use_eh_spec_block (current_function_decl))
12489
        finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
12490
                              (TREE_TYPE (current_function_decl)),
12491
                              current_eh_spec_block);
12492
    }
12493
 
12494
  /* If we're saving up tree structure, tie off the function now.  */
12495
  DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
12496
 
12497
  finish_fname_decls ();
12498
 
12499
  /* If this function can't throw any exceptions, remember that.  */
12500
  if (!processing_template_decl
12501
      && !cp_function_chain->can_throw
12502
      && !flag_non_call_exceptions
12503
      && !DECL_REPLACEABLE_P (fndecl))
12504
    TREE_NOTHROW (fndecl) = 1;
12505
 
12506
  /* This must come after expand_function_end because cleanups might
12507
     have declarations (from inline functions) that need to go into
12508
     this function's blocks.  */
12509
 
12510
  /* If the current binding level isn't the outermost binding level
12511
     for this function, either there is a bug, or we have experienced
12512
     syntax errors and the statement tree is malformed.  */
12513
  if (current_binding_level->kind != sk_function_parms)
12514
    {
12515
      /* Make sure we have already experienced errors.  */
12516
      gcc_assert (errorcount);
12517
 
12518
      /* Throw away the broken statement tree and extra binding
12519
         levels.  */
12520
      DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
12521
 
12522
      while (current_binding_level->kind != sk_function_parms)
12523
        {
12524
          if (current_binding_level->kind == sk_class)
12525
            pop_nested_class ();
12526
          else
12527
            poplevel (0, 0, 0);
12528
        }
12529
    }
12530
  poplevel (1, 0, 1);
12531
 
12532
  /* Statements should always be full-expressions at the outermost set
12533
     of curly braces for a function.  */
12534
  gcc_assert (stmts_are_full_exprs_p ());
12535
 
12536
  /* Set up the named return value optimization, if we can.  Candidate
12537
     variables are selected in check_return_expr.  */
12538
  if (current_function_return_value)
12539
    {
12540
      tree r = current_function_return_value;
12541
      tree outer;
12542
 
12543
      if (r != error_mark_node
12544
          /* This is only worth doing for fns that return in memory--and
12545
             simpler, since we don't have to worry about promoted modes.  */
12546
          && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
12547
          /* Only allow this for variables declared in the outer scope of
12548
             the function so we know that their lifetime always ends with a
12549
             return; see g++.dg/opt/nrv6.C.  We could be more flexible if
12550
             we were to do this optimization in tree-ssa.  */
12551
          && (outer = outer_curly_brace_block (fndecl))
12552
          && chain_member (r, BLOCK_VARS (outer)))
12553
        finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
12554
 
12555
      current_function_return_value = NULL_TREE;
12556
    }
12557
 
12558
  /* Remember that we were in class scope.  */
12559
  if (current_class_name)
12560
    ctype = current_class_type;
12561
 
12562
  /* Must mark the RESULT_DECL as being in this function.  */
12563
  DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
12564
 
12565
  /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
12566
     to the FUNCTION_DECL node itself.  */
12567
  BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
12568
 
12569
  /* Save away current state, if appropriate.  */
12570
  if (!processing_template_decl)
12571
    save_function_data (fndecl);
12572
 
12573
  /* Complain if there's just no return statement.  */
12574
  if (warn_return_type
12575
      && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE
12576
      && !dependent_type_p (TREE_TYPE (fntype))
12577
      && !current_function_returns_value && !current_function_returns_null
12578
      /* Don't complain if we abort or throw.  */
12579
      && !current_function_returns_abnormally
12580
      /* Don't complain if we are declared noreturn.  */
12581
      && !TREE_THIS_VOLATILE (fndecl)
12582
      && !DECL_NAME (DECL_RESULT (fndecl))
12583
      && !TREE_NO_WARNING (fndecl)
12584
      /* Structor return values (if any) are set by the compiler.  */
12585
      && !DECL_CONSTRUCTOR_P (fndecl)
12586
      && !DECL_DESTRUCTOR_P (fndecl))
12587
    {
12588
      warning (OPT_Wreturn_type,
12589
               "no return statement in function returning non-void");
12590
      TREE_NO_WARNING (fndecl) = 1;
12591
    }
12592
 
12593
  /* Store the end of the function, so that we get good line number
12594
     info for the epilogue.  */
12595
  cfun->function_end_locus = input_location;
12596
 
12597
  /* Genericize before inlining.  */
12598
  if (!processing_template_decl)
12599
    {
12600
      struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
12601
      invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
12602
      cp_genericize (fndecl);
12603
      /* Clear out the bits we don't need.  */
12604
      f->x_current_class_ptr = NULL;
12605
      f->x_current_class_ref = NULL;
12606
      f->x_eh_spec_block = NULL;
12607
      f->x_in_charge_parm = NULL;
12608
      f->x_vtt_parm = NULL;
12609
      f->x_return_value = NULL;
12610
      f->bindings = NULL;
12611
      f->extern_decl_map = NULL;
12612
    }
12613
  /* Clear out the bits we don't need.  */
12614
  local_names = NULL;
12615
 
12616
  /* We're leaving the context of this function, so zap cfun.  It's still in
12617
     DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation.  */
12618
  set_cfun (NULL);
12619
  current_function_decl = NULL;
12620
 
12621
  /* If this is an in-class inline definition, we may have to pop the
12622
     bindings for the template parameters that we added in
12623
     maybe_begin_member_template_processing when start_function was
12624
     called.  */
12625
  if (inclass_inline)
12626
    maybe_end_member_template_processing ();
12627
 
12628
  /* Leave the scope of the class.  */
12629
  if (ctype)
12630
    pop_nested_class ();
12631
 
12632
  --function_depth;
12633
 
12634
  /* Clean up.  */
12635
  if (! nested)
12636
    /* Let the error reporting routines know that we're outside a
12637
       function.  For a nested function, this value is used in
12638
       cxx_pop_function_context and then reset via pop_function_context.  */
12639
    current_function_decl = NULL_TREE;
12640
 
12641
  defer_mark_used_calls = false;
12642
  if (deferred_mark_used_calls)
12643
    {
12644
      unsigned int i;
12645
      tree decl;
12646
 
12647
      for (i = 0; VEC_iterate (tree, deferred_mark_used_calls, i, decl); i++)
12648
        mark_used (decl);
12649
      VEC_free (tree, gc, deferred_mark_used_calls);
12650
    }
12651
 
12652
  return fndecl;
12653
}
12654
 
12655
/* Create the FUNCTION_DECL for a function definition.
12656
   DECLSPECS and DECLARATOR are the parts of the declaration;
12657
   they describe the return type and the name of the function,
12658
   but twisted together in a fashion that parallels the syntax of C.
12659
 
12660
   This function creates a binding context for the function body
12661
   as well as setting up the FUNCTION_DECL in current_function_decl.
12662
 
12663
   Returns a FUNCTION_DECL on success.
12664
 
12665
   If the DECLARATOR is not suitable for a function (it defines a datum
12666
   instead), we return 0, which tells yyparse to report a parse error.
12667
 
12668
   May return void_type_node indicating that this method is actually
12669
   a friend.  See grokfield for more details.
12670
 
12671
   Came here with a `.pushlevel' .
12672
 
12673
   DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
12674
   CHANGES TO CODE IN `grokfield'.  */
12675
 
12676
tree
12677
grokmethod (cp_decl_specifier_seq *declspecs,
12678
            const cp_declarator *declarator, tree attrlist)
12679
{
12680
  tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
12681
                                &attrlist);
12682
 
12683
  if (fndecl == error_mark_node)
12684
    return error_mark_node;
12685
 
12686
  if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
12687
    {
12688
      error ("invalid member function declaration");
12689
      return error_mark_node;
12690
    }
12691
 
12692
  if (attrlist)
12693
    cplus_decl_attributes (&fndecl, attrlist, 0);
12694
 
12695
  /* Pass friends other than inline friend functions back.  */
12696
  if (fndecl == void_type_node)
12697
    return fndecl;
12698
 
12699
  if (DECL_IN_AGGR_P (fndecl))
12700
    {
12701
      if (DECL_CONTEXT (fndecl)
12702
          && TREE_CODE (DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
12703
        error ("%qD is already defined in class %qT", fndecl,
12704
               DECL_CONTEXT (fndecl));
12705
      return error_mark_node;
12706
    }
12707
 
12708
  check_template_shadow (fndecl);
12709
 
12710
  DECL_DECLARED_INLINE_P (fndecl) = 1;
12711
  DECL_NO_INLINE_WARNING_P (fndecl) = 1;
12712
 
12713
  /* We process method specializations in finish_struct_1.  */
12714
  if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
12715
    {
12716
      fndecl = push_template_decl (fndecl);
12717
      if (fndecl == error_mark_node)
12718
        return fndecl;
12719
    }
12720
 
12721
  if (! DECL_FRIEND_P (fndecl))
12722
    {
12723
      if (TREE_CHAIN (fndecl))
12724
        {
12725
          fndecl = copy_node (fndecl);
12726
          TREE_CHAIN (fndecl) = NULL_TREE;
12727
        }
12728
    }
12729
 
12730
  cp_finish_decl (fndecl, NULL_TREE, false, NULL_TREE, 0);
12731
 
12732
  DECL_IN_AGGR_P (fndecl) = 1;
12733
  return fndecl;
12734
}
12735
 
12736
 
12737
/* VAR is a VAR_DECL.  If its type is incomplete, remember VAR so that
12738
   we can lay it out later, when and if its type becomes complete.  */
12739
 
12740
void
12741
maybe_register_incomplete_var (tree var)
12742
{
12743
  gcc_assert (TREE_CODE (var) == VAR_DECL);
12744
 
12745
  /* Keep track of variables with incomplete types.  */
12746
  if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
12747
      && DECL_EXTERNAL (var))
12748
    {
12749
      tree inner_type = TREE_TYPE (var);
12750
 
12751
      while (TREE_CODE (inner_type) == ARRAY_TYPE)
12752
        inner_type = TREE_TYPE (inner_type);
12753
      inner_type = TYPE_MAIN_VARIANT (inner_type);
12754
 
12755
      if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
12756
          /* RTTI TD entries are created while defining the type_info.  */
12757
          || (TYPE_LANG_SPECIFIC (inner_type)
12758
              && TYPE_BEING_DEFINED (inner_type)))
12759
        incomplete_vars = tree_cons (inner_type, var, incomplete_vars);
12760
    }
12761
}
12762
 
12763
/* Called when a class type (given by TYPE) is defined.  If there are
12764
   any existing VAR_DECLs whose type has been completed by this
12765
   declaration, update them now.  */
12766
 
12767
void
12768
complete_vars (tree type)
12769
{
12770
  tree *list = &incomplete_vars;
12771
 
12772
  gcc_assert (CLASS_TYPE_P (type));
12773
  while (*list)
12774
    {
12775
      if (same_type_p (type, TREE_PURPOSE (*list)))
12776
        {
12777
          tree var = TREE_VALUE (*list);
12778
          tree type = TREE_TYPE (var);
12779
          /* Complete the type of the variable.  The VAR_DECL itself
12780
             will be laid out in expand_expr.  */
12781
          complete_type (type);
12782
          cp_apply_type_quals_to_decl (cp_type_quals (type), var);
12783
          /* Remove this entry from the list.  */
12784
          *list = TREE_CHAIN (*list);
12785
        }
12786
      else
12787
        list = &TREE_CHAIN (*list);
12788
    }
12789
 
12790
  /* Check for pending declarations which may have abstract type.  */
12791
  complete_type_check_abstract (type);
12792
}
12793
 
12794
/* If DECL is of a type which needs a cleanup, build and return an
12795
   expression to perform that cleanup here.  Return NULL_TREE if no
12796
   cleanup need be done.  */
12797
 
12798
tree
12799
cxx_maybe_build_cleanup (tree decl)
12800
{
12801
  tree type;
12802
  tree attr;
12803
  tree cleanup;
12804
 
12805
  /* Assume no cleanup is required.  */
12806
  cleanup = NULL_TREE;
12807
 
12808
  if (error_operand_p (decl))
12809
    return cleanup;
12810
 
12811
  /* Handle "__attribute__((cleanup))".  We run the cleanup function
12812
     before the destructor since the destructor is what actually
12813
     terminates the lifetime of the object.  */
12814
  attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
12815
  if (attr)
12816
    {
12817
      tree id;
12818
      tree fn;
12819
      tree arg;
12820
 
12821
      /* Get the name specified by the user for the cleanup function.  */
12822
      id = TREE_VALUE (TREE_VALUE (attr));
12823
      /* Look up the name to find the cleanup function to call.  It is
12824
         important to use lookup_name here because that is what is
12825
         used in c-common.c:handle_cleanup_attribute when performing
12826
         initial checks on the attribute.  Note that those checks
12827
         include ensuring that the function found is not an overloaded
12828
         function, or an object with an overloaded call operator,
12829
         etc.; we can rely on the fact that the function found is an
12830
         ordinary FUNCTION_DECL.  */
12831
      fn = lookup_name (id);
12832
      arg = build_address (decl);
12833
      mark_used (decl);
12834
      cleanup = cp_build_function_call (fn, build_tree_list (NULL_TREE,
12835
                                                             arg),
12836
                                        tf_warning_or_error);
12837
    }
12838
  /* Handle ordinary C++ destructors.  */
12839
  type = TREE_TYPE (decl);
12840
  if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
12841
    {
12842
      int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
12843
      bool has_vbases = (TREE_CODE (type) == RECORD_TYPE
12844
                         && CLASSTYPE_VBASECLASSES (type));
12845
      tree addr;
12846
      tree call;
12847
 
12848
      if (TREE_CODE (type) == ARRAY_TYPE)
12849
        addr = decl;
12850
      else
12851
        addr = build_address (decl);
12852
 
12853
      /* Optimize for space over speed here.  */
12854
      if (!has_vbases || flag_expensive_optimizations)
12855
        flags |= LOOKUP_NONVIRTUAL;
12856
 
12857
      call = build_delete (TREE_TYPE (addr), addr,
12858
                           sfk_complete_destructor, flags, 0);
12859
      if (cleanup)
12860
        cleanup = build_compound_expr (input_location, cleanup, call);
12861
      else
12862
        cleanup = call;
12863
    }
12864
 
12865
  return cleanup;
12866
}
12867
 
12868
/* When a stmt has been parsed, this function is called.  */
12869
 
12870
void
12871
finish_stmt (void)
12872
{
12873
}
12874
 
12875
/* Return the FUNCTION_TYPE that corresponds to MEMFNTYPE, which can be a
12876
   FUNCTION_DECL, METHOD_TYPE, FUNCTION_TYPE, pointer or reference to
12877
   METHOD_TYPE or FUNCTION_TYPE, or pointer to member function.  */
12878
 
12879
tree
12880
static_fn_type (tree memfntype)
12881
{
12882
  tree fntype;
12883
  tree args;
12884
  int quals;
12885
 
12886
  if (TYPE_PTRMEMFUNC_P (memfntype))
12887
    memfntype = TYPE_PTRMEMFUNC_FN_TYPE (memfntype);
12888
  if (POINTER_TYPE_P (memfntype)
12889
      || TREE_CODE (memfntype) == FUNCTION_DECL)
12890
    memfntype = TREE_TYPE (memfntype);
12891
  if (TREE_CODE (memfntype) == FUNCTION_TYPE)
12892
    return memfntype;
12893
  gcc_assert (TREE_CODE (memfntype) == METHOD_TYPE);
12894
  args = TYPE_ARG_TYPES (memfntype);
12895
  fntype = build_function_type (TREE_TYPE (memfntype), TREE_CHAIN (args));
12896
  quals = cp_type_quals (TREE_TYPE (TREE_VALUE (args)));
12897
  fntype = build_qualified_type (fntype, quals);
12898
  fntype = (cp_build_type_attribute_variant
12899
            (fntype, TYPE_ATTRIBUTES (memfntype)));
12900
  fntype = (build_exception_variant
12901
            (fntype, TYPE_RAISES_EXCEPTIONS (memfntype)));
12902
  return fntype;
12903
}
12904
 
12905
/* DECL was originally constructed as a non-static member function,
12906
   but turned out to be static.  Update it accordingly.  */
12907
 
12908
void
12909
revert_static_member_fn (tree decl)
12910
{
12911
  TREE_TYPE (decl) = static_fn_type (decl);
12912
 
12913
  if (cp_type_quals (TREE_TYPE (decl)) != TYPE_UNQUALIFIED)
12914
    error ("static member function %q#D declared with type qualifiers", decl);
12915
 
12916
  if (DECL_ARGUMENTS (decl))
12917
    DECL_ARGUMENTS (decl) = TREE_CHAIN (DECL_ARGUMENTS (decl));
12918
  DECL_STATIC_FUNCTION_P (decl) = 1;
12919
}
12920
 
12921
/* Return which tree structure is used by T, or TS_CP_GENERIC if T is
12922
   one of the language-independent trees.  */
12923
 
12924
enum cp_tree_node_structure_enum
12925
cp_tree_node_structure (union lang_tree_node * t)
12926
{
12927
  switch (TREE_CODE (&t->generic))
12928
    {
12929
    case DEFAULT_ARG:           return TS_CP_DEFAULT_ARG;
12930
    case IDENTIFIER_NODE:       return TS_CP_IDENTIFIER;
12931
    case OVERLOAD:              return TS_CP_OVERLOAD;
12932
    case TEMPLATE_PARM_INDEX:   return TS_CP_TPI;
12933
    case PTRMEM_CST:            return TS_CP_PTRMEM;
12934
    case BASELINK:              return TS_CP_BASELINK;
12935
    case STATIC_ASSERT:         return TS_CP_STATIC_ASSERT;
12936
    case ARGUMENT_PACK_SELECT:  return TS_CP_ARGUMENT_PACK_SELECT;
12937
    case TRAIT_EXPR:            return TS_CP_TRAIT_EXPR;
12938
    case LAMBDA_EXPR:           return TS_CP_LAMBDA_EXPR;
12939
    case TEMPLATE_INFO:         return TS_CP_TEMPLATE_INFO;
12940
    default:                    return TS_CP_GENERIC;
12941
    }
12942
}
12943
 
12944
/* Build the void_list_node (void_type_node having been created).  */
12945
tree
12946
build_void_list_node (void)
12947
{
12948
  tree t = build_tree_list (NULL_TREE, void_type_node);
12949
  return t;
12950
}
12951
 
12952
bool
12953
cp_missing_noreturn_ok_p (tree decl)
12954
{
12955
  /* A missing noreturn is ok for the `main' function.  */
12956
  return DECL_MAIN_P (decl);
12957
}
12958
 
12959
/* Return the COMDAT group into which DECL should be placed.  */
12960
 
12961
tree
12962
cxx_comdat_group (tree decl)
12963
{
12964
  tree name;
12965
 
12966
  /* Virtual tables, construction virtual tables, and virtual table
12967
     tables all go in a single COMDAT group, named after the primary
12968
     virtual table.  */
12969
  if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
12970
    name = DECL_ASSEMBLER_NAME (CLASSTYPE_VTABLES (DECL_CONTEXT (decl)));
12971
  /* For all other DECLs, the COMDAT group is the mangled name of the
12972
     declaration itself.  */
12973
  else
12974
    {
12975
      while (DECL_THUNK_P (decl))
12976
        {
12977
          /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
12978
             into the same section as the target function.  In that case
12979
             we must return target's name.  */
12980
          tree target = THUNK_TARGET (decl);
12981
          if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
12982
              && DECL_SECTION_NAME (target) != NULL
12983
              && DECL_ONE_ONLY (target))
12984
            decl = target;
12985
          else
12986
            break;
12987
        }
12988
      name = DECL_ASSEMBLER_NAME (decl);
12989
    }
12990
 
12991
  return name;
12992
}
12993
 
12994
#include "gt-cp-decl.h"

powered by: WebSVN 2.1.0

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