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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [cp/] [decl.c] - Blame information for rev 762

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 710 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, 2010, 2011, 2012
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 "flags.h"
37
#include "cp-tree.h"
38
#include "tree-iterator.h"
39
#include "tree-inline.h"
40
#include "decl.h"
41
#include "intl.h"
42
#include "output.h"
43
#include "toplev.h"
44
#include "hashtab.h"
45
#include "tm_p.h"
46
#include "target.h"
47
#include "c-family/c-common.h"
48
#include "c-family/c-objc.h"
49
#include "c-family/c-pragma.h"
50
#include "diagnostic.h"
51
#include "intl.h"
52
#include "debug.h"
53
#include "timevar.h"
54
#include "pointer-set.h"
55
#include "splay-tree.h"
56
#include "plugin.h"
57
 
58
/* Possible cases of bad specifiers type used by bad_specifiers. */
59
enum bad_spec_place {
60
  BSP_VAR,    /* variable */
61
  BSP_PARM,   /* parameter */
62
  BSP_TYPE,   /* type */
63
  BSP_FIELD   /* field */
64
};
65
 
66
static tree grokparms (tree parmlist, tree *);
67
static const char *redeclaration_error_message (tree, tree);
68
 
69
static int decl_jump_unsafe (tree);
70
static void require_complete_types_for_parms (tree);
71
static int ambi_op_p (enum tree_code);
72
static int unary_op_p (enum tree_code);
73
static void push_local_name (tree);
74
static tree grok_reference_init (tree, tree, tree, int);
75
static tree grokvardecl (tree, tree, const cp_decl_specifier_seq *,
76
                         int, int, tree);
77
static int check_static_variable_definition (tree, tree);
78
static void record_unknown_type (tree, const char *);
79
static tree builtin_function_1 (tree, tree, bool);
80
static tree build_library_fn_1 (tree, enum tree_code, tree);
81
static int member_function_or_else (tree, tree, enum overload_flags);
82
static void bad_specifiers (tree, enum bad_spec_place, int, int, int, int,
83
                            int);
84
static void check_for_uninitialized_const_var (tree);
85
static hashval_t typename_hash (const void *);
86
static int typename_compare (const void *, const void *);
87
static tree local_variable_p_walkfn (tree *, int *, void *);
88
static tree record_builtin_java_type (const char *, int);
89
static const char *tag_name (enum tag_types);
90
static tree lookup_and_check_tag (enum tag_types, tree, tag_scope, bool);
91
static int walk_namespaces_r (tree, walk_namespaces_fn, void *);
92
static void maybe_deduce_size_from_array_init (tree, tree);
93
static void layout_var_decl (tree);
94
static tree check_initializer (tree, tree, int, VEC(tree,gc) **);
95
static void make_rtl_for_nonlocal_decl (tree, tree, const char *);
96
static void save_function_data (tree);
97
static void copy_type_enum (tree , tree);
98
static void check_function_type (tree, tree);
99
static void finish_constructor_body (void);
100
static void begin_destructor_body (void);
101
static void finish_destructor_body (void);
102
static void record_key_method_defined (tree);
103
static tree create_array_type_for_decl (tree, tree, tree);
104
static tree get_atexit_node (void);
105
static tree get_dso_handle_node (void);
106
static tree start_cleanup_fn (void);
107
static void end_cleanup_fn (void);
108
static tree cp_make_fname_decl (location_t, tree, int);
109
static void initialize_predefined_identifiers (void);
110
static tree check_special_function_return_type
111
        (special_function_kind, tree, tree);
112
static tree push_cp_library_fn (enum tree_code, tree);
113
static tree build_cp_library_fn (tree, enum tree_code, tree);
114
static void store_parm_decls (tree);
115
static void initialize_local_var (tree, tree);
116
static void expand_static_init (tree, tree);
117
 
118
/* The following symbols are subsumed in the cp_global_trees array, and
119
   listed here individually for documentation purposes.
120
 
121
   C++ extensions
122
        tree wchar_decl_node;
123
 
124
        tree vtable_entry_type;
125
        tree delta_type_node;
126
        tree __t_desc_type_node;
127
 
128
        tree class_type_node;
129
        tree unknown_type_node;
130
 
131
   Array type `vtable_entry_type[]'
132
 
133
        tree vtbl_type_node;
134
        tree vtbl_ptr_type_node;
135
 
136
   Namespaces,
137
 
138
        tree std_node;
139
        tree abi_node;
140
 
141
   A FUNCTION_DECL which can call `abort'.  Not necessarily the
142
   one that the user will declare, but sufficient to be called
143
   by routines that want to abort the program.
144
 
145
        tree abort_fndecl;
146
 
147
   The FUNCTION_DECL for the default `::operator delete'.
148
 
149
        tree global_delete_fndecl;
150
 
151
   Used by RTTI
152
        tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
153
        tree tinfo_var_id;  */
154
 
155
tree cp_global_trees[CPTI_MAX];
156
 
157
/* Indicates that there is a type value in some namespace, although
158
   that is not necessarily in scope at the moment.  */
159
 
160
tree global_type_node;
161
 
162
/* The node that holds the "name" of the global scope.  */
163
tree global_scope_name;
164
 
165
#define local_names cp_function_chain->x_local_names
166
 
167
/* A list of objects which have constructors or destructors
168
   which reside in the global scope.  The decl is stored in
169
   the TREE_VALUE slot and the initializer is stored
170
   in the TREE_PURPOSE slot.  */
171
tree static_aggregates;
172
 
173
/* -- end of C++ */
174
 
175
/* A node for the integer constant 2.  */
176
 
177
tree integer_two_node;
178
 
179
/* Used only for jumps to as-yet undefined labels, since jumps to
180
   defined labels can have their validity checked immediately.  */
181
 
182
struct GTY((chain_next ("%h.next"))) named_label_use_entry {
183
  struct named_label_use_entry *next;
184
  /* The binding level to which this entry is *currently* attached.
185
     This is initially the binding level in which the goto appeared,
186
     but is modified as scopes are closed.  */
187
  cp_binding_level *binding_level;
188
  /* The head of the names list that was current when the goto appeared,
189
     or the inner scope popped.  These are the decls that will *not* be
190
     skipped when jumping to the label.  */
191
  tree names_in_scope;
192
  /* The location of the goto, for error reporting.  */
193
  location_t o_goto_locus;
194
  /* True if an OpenMP structured block scope has been closed since
195
     the goto appeared.  This means that the branch from the label will
196
     illegally exit an OpenMP scope.  */
197
  bool in_omp_scope;
198
};
199
 
200
/* A list of all LABEL_DECLs in the function that have names.  Here so
201
   we can clear out their names' definitions at the end of the
202
   function, and so we can check the validity of jumps to these labels.  */
203
 
204
struct GTY(()) named_label_entry {
205
  /* The decl itself.  */
206
  tree label_decl;
207
 
208
  /* The binding level to which the label is *currently* attached.
209
     This is initially set to the binding level in which the label
210
     is defined, but is modified as scopes are closed.  */
211
  cp_binding_level *binding_level;
212
  /* The head of the names list that was current when the label was
213
     defined, or the inner scope popped.  These are the decls that will
214
     be skipped when jumping to the label.  */
215
  tree names_in_scope;
216
  /* A vector of all decls from all binding levels that would be
217
     crossed by a backward branch to the label.  */
218
  VEC(tree,gc) *bad_decls;
219
 
220
  /* A list of uses of the label, before the label is defined.  */
221
  struct named_label_use_entry *uses;
222
 
223
  /* The following bits are set after the label is defined, and are
224
     updated as scopes are popped.  They indicate that a backward jump
225
     to the label will illegally enter a scope of the given flavor.  */
226
  bool in_try_scope;
227
  bool in_catch_scope;
228
  bool in_omp_scope;
229
};
230
 
231
#define named_labels cp_function_chain->x_named_labels
232
 
233
/* The number of function bodies which we are currently processing.
234
   (Zero if we are at namespace scope, one inside the body of a
235
   function, two inside the body of a function in a local class, etc.)  */
236
int function_depth;
237
 
238
/* To avoid unwanted recursion, finish_function defers all mark_used calls
239
   encountered during its execution until it finishes.  */
240
bool defer_mark_used_calls;
241
VEC(tree, gc) *deferred_mark_used_calls;
242
 
243
/* States indicating how grokdeclarator() should handle declspecs marked
244
   with __attribute__((deprecated)).  An object declared as
245
   __attribute__((deprecated)) suppresses warnings of uses of other
246
   deprecated items.  */
247
enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
248
 
249
 
250
/* A list of VAR_DECLs whose type was incomplete at the time the
251
   variable was declared.  */
252
 
253
typedef struct GTY(()) incomplete_var_d {
254
  tree decl;
255
  tree incomplete_type;
256
} incomplete_var;
257
 
258
DEF_VEC_O(incomplete_var);
259
DEF_VEC_ALLOC_O(incomplete_var,gc);
260
 
261
static GTY(()) VEC(incomplete_var,gc) *incomplete_vars;
262
 
263
/* Returns the kind of template specialization we are currently
264
   processing, given that it's declaration contained N_CLASS_SCOPES
265
   explicit scope qualifications.  */
266
 
267
tmpl_spec_kind
268
current_tmpl_spec_kind (int n_class_scopes)
269
{
270
  int n_template_parm_scopes = 0;
271
  int seen_specialization_p = 0;
272
  int innermost_specialization_p = 0;
273
  cp_binding_level *b;
274
 
275
  /* Scan through the template parameter scopes.  */
276
  for (b = current_binding_level;
277
       b->kind == sk_template_parms;
278
       b = b->level_chain)
279
    {
280
      /* If we see a specialization scope inside a parameter scope,
281
         then something is wrong.  That corresponds to a declaration
282
         like:
283
 
284
            template <class T> template <> ...
285
 
286
         which is always invalid since [temp.expl.spec] forbids the
287
         specialization of a class member template if the enclosing
288
         class templates are not explicitly specialized as well.  */
289
      if (b->explicit_spec_p)
290
        {
291
          if (n_template_parm_scopes == 0)
292
            innermost_specialization_p = 1;
293
          else
294
            seen_specialization_p = 1;
295
        }
296
      else if (seen_specialization_p == 1)
297
        return tsk_invalid_member_spec;
298
 
299
      ++n_template_parm_scopes;
300
    }
301
 
302
  /* Handle explicit instantiations.  */
303
  if (processing_explicit_instantiation)
304
    {
305
      if (n_template_parm_scopes != 0)
306
        /* We've seen a template parameter list during an explicit
307
           instantiation.  For example:
308
 
309
             template <class T> template void f(int);
310
 
311
           This is erroneous.  */
312
        return tsk_invalid_expl_inst;
313
      else
314
        return tsk_expl_inst;
315
    }
316
 
317
  if (n_template_parm_scopes < n_class_scopes)
318
    /* We've not seen enough template headers to match all the
319
       specialized classes present.  For example:
320
 
321
         template <class T> void R<T>::S<T>::f(int);
322
 
323
       This is invalid; there needs to be one set of template
324
       parameters for each class.  */
325
    return tsk_insufficient_parms;
326
  else if (n_template_parm_scopes == n_class_scopes)
327
    /* We're processing a non-template declaration (even though it may
328
       be a member of a template class.)  For example:
329
 
330
         template <class T> void S<T>::f(int);
331
 
332
       The `class T' matches the `S<T>', leaving no template headers
333
       corresponding to the `f'.  */
334
    return tsk_none;
335
  else if (n_template_parm_scopes > n_class_scopes + 1)
336
    /* We've got too many template headers.  For example:
337
 
338
         template <> template <class T> void f (T);
339
 
340
       There need to be more enclosing classes.  */
341
    return tsk_excessive_parms;
342
  else
343
    /* This must be a template.  It's of the form:
344
 
345
         template <class T> template <class U> void S<T>::f(U);
346
 
347
       This is a specialization if the innermost level was a
348
       specialization; otherwise it's just a definition of the
349
       template.  */
350
    return innermost_specialization_p ? tsk_expl_spec : tsk_template;
351
}
352
 
353
/* Exit the current scope.  */
354
 
355
void
356
finish_scope (void)
357
{
358
  poplevel (0, 0, 0);
359
}
360
 
361
/* When a label goes out of scope, check to see if that label was used
362
   in a valid manner, and issue any appropriate warnings or errors.  */
363
 
364
static void
365
pop_label (tree label, tree old_value)
366
{
367
  if (!processing_template_decl)
368
    {
369
      if (DECL_INITIAL (label) == NULL_TREE)
370
        {
371
          location_t location;
372
 
373
          error ("label %q+D used but not defined", label);
374
          location = input_location; /* FIXME want (input_filename, (line)0) */
375
          /* Avoid crashing later.  */
376
          define_label (location, DECL_NAME (label));
377
        }
378
      else
379
        warn_for_unused_label (label);
380
    }
381
 
382
  SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), old_value);
383
}
384
 
385
/* At the end of a function, all labels declared within the function
386
   go out of scope.  BLOCK is the top-level block for the
387
   function.  */
388
 
389
static int
390
pop_labels_1 (void **slot, void *data)
391
{
392
  struct named_label_entry *ent = (struct named_label_entry *) *slot;
393
  tree block = (tree) data;
394
 
395
  pop_label (ent->label_decl, NULL_TREE);
396
 
397
  /* Put the labels into the "variables" of the top-level block,
398
     so debugger can see them.  */
399
  DECL_CHAIN (ent->label_decl) = BLOCK_VARS (block);
400
  BLOCK_VARS (block) = ent->label_decl;
401
 
402
  htab_clear_slot (named_labels, slot);
403
 
404
  return 1;
405
}
406
 
407
static void
408
pop_labels (tree block)
409
{
410
  if (named_labels)
411
    {
412
      htab_traverse (named_labels, pop_labels_1, block);
413
      named_labels = NULL;
414
    }
415
}
416
 
417
/* At the end of a block with local labels, restore the outer definition.  */
418
 
419
static void
420
pop_local_label (tree label, tree old_value)
421
{
422
  struct named_label_entry dummy;
423
  void **slot;
424
 
425
  pop_label (label, old_value);
426
 
427
  dummy.label_decl = label;
428
  slot = htab_find_slot (named_labels, &dummy, NO_INSERT);
429
  htab_clear_slot (named_labels, slot);
430
}
431
 
432
/* The following two routines are used to interface to Objective-C++.
433
   The binding level is purposely treated as an opaque type.  */
434
 
435
void *
436
objc_get_current_scope (void)
437
{
438
  return current_binding_level;
439
}
440
 
441
/* The following routine is used by the NeXT-style SJLJ exceptions;
442
   variables get marked 'volatile' so as to not be clobbered by
443
   _setjmp()/_longjmp() calls.  All variables in the current scope,
444
   as well as parent scopes up to (but not including) ENCLOSING_BLK
445
   shall be thusly marked.  */
446
 
447
void
448
objc_mark_locals_volatile (void *enclosing_blk)
449
{
450
  cp_binding_level *scope;
451
 
452
  for (scope = current_binding_level;
453
       scope && scope != enclosing_blk;
454
       scope = scope->level_chain)
455
    {
456
      tree decl;
457
 
458
      for (decl = scope->names; decl; decl = TREE_CHAIN (decl))
459
        objc_volatilize_decl (decl);
460
 
461
      /* Do not climb up past the current function.  */
462
      if (scope->kind == sk_function_parms)
463
        break;
464
    }
465
}
466
 
467
/* Update data for defined and undefined labels when leaving a scope.  */
468
 
469
static int
470
poplevel_named_label_1 (void **slot, void *data)
471
{
472
  struct named_label_entry *ent = (struct named_label_entry *) *slot;
473
  cp_binding_level *bl = (cp_binding_level *) data;
474
  cp_binding_level *obl = bl->level_chain;
475
 
476
  if (ent->binding_level == bl)
477
    {
478
      tree decl;
479
 
480
      /* ENT->NAMES_IN_SCOPE may contain a mixture of DECLs and
481
         TREE_LISTs representing OVERLOADs, so be careful.  */
482
      for (decl = ent->names_in_scope; decl; decl = (DECL_P (decl)
483
                                                     ? DECL_CHAIN (decl)
484
                                                     : TREE_CHAIN (decl)))
485
        if (decl_jump_unsafe (decl))
486
          VEC_safe_push (tree, gc, ent->bad_decls, decl);
487
 
488
      ent->binding_level = obl;
489
      ent->names_in_scope = obl->names;
490
      switch (bl->kind)
491
        {
492
        case sk_try:
493
          ent->in_try_scope = true;
494
          break;
495
        case sk_catch:
496
          ent->in_catch_scope = true;
497
          break;
498
        case sk_omp:
499
          ent->in_omp_scope = true;
500
          break;
501
        default:
502
          break;
503
        }
504
    }
505
  else if (ent->uses)
506
    {
507
      struct named_label_use_entry *use;
508
 
509
      for (use = ent->uses; use ; use = use->next)
510
        if (use->binding_level == bl)
511
          {
512
            use->binding_level = obl;
513
            use->names_in_scope = obl->names;
514
            if (bl->kind == sk_omp)
515
              use->in_omp_scope = true;
516
          }
517
    }
518
 
519
  return 1;
520
}
521
 
522
/* Saved errorcount to avoid -Wunused-but-set-{parameter,variable} warnings
523
   when errors were reported, except for -Werror-unused-but-set-*.  */
524
static int unused_but_set_errorcount;
525
 
526
/* Exit a binding level.
527
   Pop the level off, and restore the state of the identifier-decl mappings
528
   that were in effect when this level was entered.
529
 
530
   If KEEP == 1, this level had explicit declarations, so
531
   and create a "block" (a BLOCK node) for the level
532
   to record its declarations and subblocks for symbol table output.
533
 
534
   If FUNCTIONBODY is nonzero, this level is the body of a function,
535
   so create a block as if KEEP were set and also clear out all
536
   label names.
537
 
538
   If REVERSE is nonzero, reverse the order of decls before putting
539
   them into the BLOCK.  */
540
 
541
tree
542
poplevel (int keep, int reverse, int functionbody)
543
{
544
  tree link;
545
  /* The chain of decls was accumulated in reverse order.
546
     Put it into forward order, just for cleanliness.  */
547
  tree decls;
548
  tree subblocks;
549
  tree block;
550
  tree decl;
551
  int leaving_for_scope;
552
  scope_kind kind;
553
  unsigned ix;
554
  cp_label_binding *label_bind;
555
 
556
  timevar_start (TV_NAME_LOOKUP);
557
 restart:
558
 
559
  block = NULL_TREE;
560
 
561
  gcc_assert (current_binding_level->kind != sk_class);
562
 
563
  if (current_binding_level->kind == sk_cleanup)
564
    functionbody = 0;
565
  subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
566
 
567
  gcc_assert (!VEC_length(cp_class_binding,
568
                          current_binding_level->class_shadowed));
569
 
570
  /* We used to use KEEP == 2 to indicate that the new block should go
571
     at the beginning of the list of blocks at this binding level,
572
     rather than the end.  This hack is no longer used.  */
573
  gcc_assert (keep == 0 || keep == 1);
574
 
575
  if (current_binding_level->keep)
576
    keep = 1;
577
 
578
  /* Any uses of undefined labels, and any defined labels, now operate
579
     under constraints of next binding contour.  */
580
  if (cfun && !functionbody && named_labels)
581
    htab_traverse (named_labels, poplevel_named_label_1,
582
                   current_binding_level);
583
 
584
  /* Get the decls in the order they were written.
585
     Usually current_binding_level->names is in reverse order.
586
     But parameter decls were previously put in forward order.  */
587
 
588
  if (reverse)
589
    current_binding_level->names
590
      = decls = nreverse (current_binding_level->names);
591
  else
592
    decls = current_binding_level->names;
593
 
594
  /* If there were any declarations or structure tags in that level,
595
     or if this level is a function body,
596
     create a BLOCK to record them for the life of this function.  */
597
  block = NULL_TREE;
598
  if (keep == 1 || functionbody)
599
    block = make_node (BLOCK);
600
  if (block != NULL_TREE)
601
    {
602
      BLOCK_VARS (block) = decls;
603
      BLOCK_SUBBLOCKS (block) = subblocks;
604
    }
605
 
606
  /* In each subblock, record that this is its superior.  */
607
  if (keep >= 0)
608
    for (link = subblocks; link; link = BLOCK_CHAIN (link))
609
      BLOCK_SUPERCONTEXT (link) = block;
610
 
611
  /* We still support the old for-scope rules, whereby the variables
612
     in a for-init statement were in scope after the for-statement
613
     ended.  We only use the new rules if flag_new_for_scope is
614
     nonzero.  */
615
  leaving_for_scope
616
    = current_binding_level->kind == sk_for && flag_new_for_scope == 1;
617
 
618
  /* Before we remove the declarations first check for unused variables.  */
619
  if ((warn_unused_variable || warn_unused_but_set_variable)
620
      && !processing_template_decl)
621
    for (decl = getdecls (); decl; decl = TREE_CHAIN (decl))
622
      if (TREE_CODE (decl) == VAR_DECL
623
          && (! TREE_USED (decl) || !DECL_READ_P (decl))
624
          && ! DECL_IN_SYSTEM_HEADER (decl)
625
          && DECL_NAME (decl) && ! DECL_ARTIFICIAL (decl))
626
        {
627
          if (! TREE_USED (decl))
628
            warning (OPT_Wunused_variable, "unused variable %q+D", decl);
629
          else if (DECL_CONTEXT (decl) == current_function_decl
630
                   && TREE_TYPE (decl) != error_mark_node
631
                   && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
632
                   && errorcount == unused_but_set_errorcount
633
                   && (!CLASS_TYPE_P (TREE_TYPE (decl))
634
                       || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
635
            {
636
              warning (OPT_Wunused_but_set_variable,
637
                       "variable %q+D set but not used", decl);
638
              unused_but_set_errorcount = errorcount;
639
            }
640
        }
641
 
642
  /* Remove declarations for all the DECLs in this level.  */
643
  for (link = decls; link; link = TREE_CHAIN (link))
644
    {
645
      if (leaving_for_scope && TREE_CODE (link) == VAR_DECL
646
          /* It's hard to make this ARM compatibility hack play nicely with
647
             lambdas, and it really isn't necessary in C++11 mode.  */
648
          && cxx_dialect < cxx0x
649
          && DECL_NAME (link))
650
        {
651
          tree name = DECL_NAME (link);
652
          cxx_binding *ob;
653
          tree ns_binding;
654
 
655
          ob = outer_binding (name,
656
                              IDENTIFIER_BINDING (name),
657
                              /*class_p=*/true);
658
          if (!ob)
659
            ns_binding = IDENTIFIER_NAMESPACE_VALUE (name);
660
          else
661
            ns_binding = NULL_TREE;
662
 
663
          if (ob && ob->scope == current_binding_level->level_chain)
664
            /* We have something like:
665
 
666
                 int i;
667
                 for (int i; ;);
668
 
669
               and we are leaving the `for' scope.  There's no reason to
670
               keep the binding of the inner `i' in this case.  */
671
            pop_binding (name, link);
672
          else if ((ob && (TREE_CODE (ob->value) == TYPE_DECL))
673
                   || (ns_binding && TREE_CODE (ns_binding) == TYPE_DECL))
674
            /* Here, we have something like:
675
 
676
                 typedef int I;
677
 
678
                 void f () {
679
                   for (int I; ;);
680
                 }
681
 
682
               We must pop the for-scope binding so we know what's a
683
               type and what isn't.  */
684
            pop_binding (name, link);
685
          else
686
            {
687
              /* Mark this VAR_DECL as dead so that we can tell we left it
688
                 there only for backward compatibility.  */
689
              DECL_DEAD_FOR_LOCAL (link) = 1;
690
 
691
              /* Keep track of what should have happened when we
692
                 popped the binding.  */
693
              if (ob && ob->value)
694
                {
695
                  SET_DECL_SHADOWED_FOR_VAR (link, ob->value);
696
                  DECL_HAS_SHADOWED_FOR_VAR_P (link) = 1;
697
                }
698
 
699
              /* Add it to the list of dead variables in the next
700
                 outermost binding to that we can remove these when we
701
                 leave that binding.  */
702
              VEC_safe_push (tree, gc,
703
                             current_binding_level->level_chain->dead_vars_from_for,
704
                             link);
705
 
706
              /* Although we don't pop the cxx_binding, we do clear
707
                 its SCOPE since the scope is going away now.  */
708
              IDENTIFIER_BINDING (name)->scope
709
                = current_binding_level->level_chain;
710
            }
711
        }
712
      else
713
        {
714
          tree name;
715
 
716
          /* Remove the binding.  */
717
          decl = link;
718
 
719
          if (TREE_CODE (decl) == TREE_LIST)
720
            decl = TREE_VALUE (decl);
721
          name = decl;
722
 
723
          if (TREE_CODE (name) == OVERLOAD)
724
            name = OVL_FUNCTION (name);
725
 
726
          gcc_assert (DECL_P (name));
727
          pop_binding (DECL_NAME (name), decl);
728
        }
729
    }
730
 
731
  /* Remove declarations for any `for' variables from inner scopes
732
     that we kept around.  */
733
  FOR_EACH_VEC_ELT_REVERSE (tree, current_binding_level->dead_vars_from_for,
734
                            ix, decl)
735
    pop_binding (DECL_NAME (decl), decl);
736
 
737
  /* Restore the IDENTIFIER_TYPE_VALUEs.  */
738
  for (link = current_binding_level->type_shadowed;
739
       link; link = TREE_CHAIN (link))
740
    SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
741
 
742
  /* Restore the IDENTIFIER_LABEL_VALUEs for local labels.  */
743
  FOR_EACH_VEC_ELT_REVERSE (cp_label_binding,
744
                            current_binding_level->shadowed_labels,
745
                            ix, label_bind)
746
    pop_local_label (label_bind->label, label_bind->prev_value);
747
 
748
  /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
749
     list if a `using' declaration put them there.  The debugging
750
     back ends won't understand OVERLOAD, so we remove them here.
751
     Because the BLOCK_VARS are (temporarily) shared with
752
     CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
753
     popped all the bindings.  */
754
  if (block)
755
    {
756
      tree* d;
757
 
758
      for (d = &BLOCK_VARS (block); *d; )
759
        {
760
          if (TREE_CODE (*d) == TREE_LIST)
761
            *d = TREE_CHAIN (*d);
762
          else
763
            d = &DECL_CHAIN (*d);
764
        }
765
    }
766
 
767
  /* If the level being exited is the top level of a function,
768
     check over all the labels.  */
769
  if (functionbody)
770
    {
771
      /* Since this is the top level block of a function, the vars are
772
         the function's parameters.  Don't leave them in the BLOCK
773
         because they are found in the FUNCTION_DECL instead.  */
774
      BLOCK_VARS (block) = 0;
775
      pop_labels (block);
776
    }
777
 
778
  kind = current_binding_level->kind;
779
  if (kind == sk_cleanup)
780
    {
781
      tree stmt;
782
 
783
      /* If this is a temporary binding created for a cleanup, then we'll
784
         have pushed a statement list level.  Pop that, create a new
785
         BIND_EXPR for the block, and insert it into the stream.  */
786
      stmt = pop_stmt_list (current_binding_level->statement_list);
787
      stmt = c_build_bind_expr (input_location, block, stmt);
788
      add_stmt (stmt);
789
    }
790
 
791
  leave_scope ();
792
  if (functionbody)
793
    {
794
      /* The current function is being defined, so its DECL_INITIAL
795
         should be error_mark_node.  */
796
      gcc_assert (DECL_INITIAL (current_function_decl) == error_mark_node);
797
      DECL_INITIAL (current_function_decl) = block;
798
    }
799
  else if (block)
800
    current_binding_level->blocks
801
      = block_chainon (current_binding_level->blocks, block);
802
 
803
  /* If we did not make a block for the level just exited,
804
     any blocks made for inner levels
805
     (since they cannot be recorded as subblocks in that level)
806
     must be carried forward so they will later become subblocks
807
     of something else.  */
808
  else if (subblocks)
809
    current_binding_level->blocks
810
      = block_chainon (current_binding_level->blocks, subblocks);
811
 
812
  /* Each and every BLOCK node created here in `poplevel' is important
813
     (e.g. for proper debugging information) so if we created one
814
     earlier, mark it as "used".  */
815
  if (block)
816
    TREE_USED (block) = 1;
817
 
818
  /* All temporary bindings created for cleanups are popped silently.  */
819
  if (kind == sk_cleanup)
820
    goto restart;
821
 
822
  timevar_stop (TV_NAME_LOOKUP);
823
  return block;
824
}
825
 
826
/* Walk all the namespaces contained NAMESPACE, including NAMESPACE
827
   itself, calling F for each.  The DATA is passed to F as well.  */
828
 
829
static int
830
walk_namespaces_r (tree name_space, walk_namespaces_fn f, void* data)
831
{
832
  int result = 0;
833
  tree current = NAMESPACE_LEVEL (name_space)->namespaces;
834
 
835
  result |= (*f) (name_space, data);
836
 
837
  for (; current; current = DECL_CHAIN (current))
838
    result |= walk_namespaces_r (current, f, data);
839
 
840
  return result;
841
}
842
 
843
/* Walk all the namespaces, calling F for each.  The DATA is passed to
844
   F as well.  */
845
 
846
int
847
walk_namespaces (walk_namespaces_fn f, void* data)
848
{
849
  return walk_namespaces_r (global_namespace, f, data);
850
}
851
 
852
/* Call wrapup_globals_declarations for the globals in NAMESPACE.  If
853
   DATA is non-NULL, this is the last time we will call
854
   wrapup_global_declarations for this NAMESPACE.  */
855
 
856
int
857
wrapup_globals_for_namespace (tree name_space, void* data)
858
{
859
  cp_binding_level *level = NAMESPACE_LEVEL (name_space);
860
  VEC(tree,gc) *statics = level->static_decls;
861
  tree *vec = VEC_address (tree, statics);
862
  int len = VEC_length (tree, statics);
863
  int last_time = (data != 0);
864
 
865
  if (last_time)
866
    {
867
      check_global_declarations (vec, len);
868
      emit_debug_global_declarations (vec, len);
869
      return 0;
870
    }
871
 
872
  /* Write out any globals that need to be output.  */
873
  return wrapup_global_declarations (vec, len);
874
}
875
 
876
 
877
/* In C++, you don't have to write `struct S' to refer to `S'; you
878
   can just use `S'.  We accomplish this by creating a TYPE_DECL as
879
   if the user had written `typedef struct S S'.  Create and return
880
   the TYPE_DECL for TYPE.  */
881
 
882
tree
883
create_implicit_typedef (tree name, tree type)
884
{
885
  tree decl;
886
 
887
  decl = build_decl (input_location, TYPE_DECL, name, type);
888
  DECL_ARTIFICIAL (decl) = 1;
889
  /* There are other implicit type declarations, like the one *within*
890
     a class that allows you to write `S::S'.  We must distinguish
891
     amongst these.  */
892
  SET_DECL_IMPLICIT_TYPEDEF_P (decl);
893
  TYPE_NAME (type) = decl;
894
  TYPE_STUB_DECL (type) = decl;
895
 
896
  return decl;
897
}
898
 
899
/* Remember a local name for name-mangling purposes.  */
900
 
901
static void
902
push_local_name (tree decl)
903
{
904
  size_t i, nelts;
905
  tree t, name;
906
 
907
  timevar_start (TV_NAME_LOOKUP);
908
 
909
  name = DECL_NAME (decl);
910
 
911
  nelts = VEC_length (tree, local_names);
912
  for (i = 0; i < nelts; i++)
913
    {
914
      t = VEC_index (tree, local_names, i);
915
      if (DECL_NAME (t) == name)
916
        {
917
          if (!DECL_LANG_SPECIFIC (decl))
918
            retrofit_lang_decl (decl);
919
          DECL_LANG_SPECIFIC (decl)->u.base.u2sel = 1;
920
          if (DECL_LANG_SPECIFIC (t))
921
            DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
922
          else
923
            DECL_DISCRIMINATOR (decl) = 1;
924
 
925
          VEC_replace (tree, local_names, i, decl);
926
          timevar_stop (TV_NAME_LOOKUP);
927
          return;
928
        }
929
    }
930
 
931
  VEC_safe_push (tree, gc, local_names, decl);
932
  timevar_stop (TV_NAME_LOOKUP);
933
}
934
 
935
/* Subroutine of duplicate_decls: return truthvalue of whether
936
   or not types of these decls match.
937
 
938
   For C++, we must compare the parameter list so that `int' can match
939
   `int&' in a parameter position, but `int&' is not confused with
940
   `const int&'.  */
941
 
942
int
943
decls_match (tree newdecl, tree olddecl)
944
{
945
  int types_match;
946
 
947
  if (newdecl == olddecl)
948
    return 1;
949
 
950
  if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
951
    /* If the two DECLs are not even the same kind of thing, we're not
952
       interested in their types.  */
953
    return 0;
954
 
955
  gcc_assert (DECL_P (newdecl));
956
 
957
  if (TREE_CODE (newdecl) == FUNCTION_DECL)
958
    {
959
      tree f1 = TREE_TYPE (newdecl);
960
      tree f2 = TREE_TYPE (olddecl);
961
      tree p1 = TYPE_ARG_TYPES (f1);
962
      tree p2 = TYPE_ARG_TYPES (f2);
963
 
964
      /* Specializations of different templates are different functions
965
         even if they have the same type.  */
966
      tree t1 = (DECL_USE_TEMPLATE (newdecl)
967
                 ? DECL_TI_TEMPLATE (newdecl)
968
                 : NULL_TREE);
969
      tree t2 = (DECL_USE_TEMPLATE (olddecl)
970
                 ? DECL_TI_TEMPLATE (olddecl)
971
                 : NULL_TREE);
972
      if (t1 != t2)
973
        return 0;
974
 
975
      if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
976
          && ! (DECL_EXTERN_C_P (newdecl)
977
                && DECL_EXTERN_C_P (olddecl)))
978
        return 0;
979
 
980
#ifdef NO_IMPLICIT_EXTERN_C
981
      /* A new declaration doesn't match a built-in one unless it
982
         is also extern "C".  */
983
      if (DECL_IS_BUILTIN (olddecl)
984
          && DECL_EXTERN_C_P (olddecl) && !DECL_EXTERN_C_P (newdecl))
985
        return 0;
986
#endif
987
 
988
      if (TREE_CODE (f1) != TREE_CODE (f2))
989
        return 0;
990
 
991
      if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
992
        {
993
          if (!prototype_p (f2) && DECL_EXTERN_C_P (olddecl)
994
              && (DECL_BUILT_IN (olddecl)
995
#ifndef NO_IMPLICIT_EXTERN_C
996
                  || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
997
                  || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
998
#endif
999
              ))
1000
            {
1001
              types_match = self_promoting_args_p (p1);
1002
              if (p1 == void_list_node)
1003
                TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1004
            }
1005
#ifndef NO_IMPLICIT_EXTERN_C
1006
          else if (!prototype_p (f1)
1007
                   && (DECL_EXTERN_C_P (olddecl)
1008
                       && DECL_IN_SYSTEM_HEADER (olddecl)
1009
                       && !DECL_CLASS_SCOPE_P (olddecl))
1010
                   && (DECL_EXTERN_C_P (newdecl)
1011
                       && DECL_IN_SYSTEM_HEADER (newdecl)
1012
                       && !DECL_CLASS_SCOPE_P (newdecl)))
1013
            {
1014
              types_match = self_promoting_args_p (p2);
1015
              TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1016
            }
1017
#endif
1018
          else
1019
            types_match =
1020
              compparms (p1, p2)
1021
              && (TYPE_ATTRIBUTES (TREE_TYPE (newdecl)) == NULL_TREE
1022
                  || comp_type_attributes (TREE_TYPE (newdecl),
1023
                                           TREE_TYPE (olddecl)) != 0);
1024
        }
1025
      else
1026
        types_match = 0;
1027
    }
1028
  else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1029
    {
1030
      if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl))
1031
          != TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)))
1032
        return 0;
1033
 
1034
      if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1035
                                DECL_TEMPLATE_PARMS (olddecl)))
1036
        return 0;
1037
 
1038
      if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1039
        types_match = same_type_p (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl)),
1040
                                   TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl)));
1041
      else
1042
        types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
1043
                                   DECL_TEMPLATE_RESULT (newdecl));
1044
    }
1045
  else
1046
    {
1047
      /* Need to check scope for variable declaration (VAR_DECL).
1048
         For typedef (TYPE_DECL), scope is ignored.  */
1049
      if (TREE_CODE (newdecl) == VAR_DECL
1050
          && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1051
          /* [dcl.link]
1052
             Two declarations for an object with C language linkage
1053
             with the same name (ignoring the namespace that qualify
1054
             it) that appear in different namespace scopes refer to
1055
             the same object.  */
1056
          && !(DECL_EXTERN_C_P (olddecl) && DECL_EXTERN_C_P (newdecl)))
1057
        return 0;
1058
 
1059
      if (TREE_TYPE (newdecl) == error_mark_node)
1060
        types_match = TREE_TYPE (olddecl) == error_mark_node;
1061
      else if (TREE_TYPE (olddecl) == NULL_TREE)
1062
        types_match = TREE_TYPE (newdecl) == NULL_TREE;
1063
      else if (TREE_TYPE (newdecl) == NULL_TREE)
1064
        types_match = 0;
1065
      else
1066
        types_match = comptypes (TREE_TYPE (newdecl),
1067
                                 TREE_TYPE (olddecl),
1068
                                 COMPARE_REDECLARATION);
1069
    }
1070
 
1071
  return types_match;
1072
}
1073
 
1074
/* If NEWDECL is `static' and an `extern' was seen previously,
1075
   warn about it.  OLDDECL is the previous declaration.
1076
 
1077
   Note that this does not apply to the C++ case of declaring
1078
   a variable `extern const' and then later `const'.
1079
 
1080
   Don't complain about built-in functions, since they are beyond
1081
   the user's control.  */
1082
 
1083
void
1084
warn_extern_redeclared_static (tree newdecl, tree olddecl)
1085
{
1086
  if (TREE_CODE (newdecl) == TYPE_DECL
1087
      || TREE_CODE (newdecl) == TEMPLATE_DECL
1088
      || TREE_CODE (newdecl) == CONST_DECL
1089
      || TREE_CODE (newdecl) == NAMESPACE_DECL)
1090
    return;
1091
 
1092
  /* Don't get confused by static member functions; that's a different
1093
     use of `static'.  */
1094
  if (TREE_CODE (newdecl) == FUNCTION_DECL
1095
      && DECL_STATIC_FUNCTION_P (newdecl))
1096
    return;
1097
 
1098
  /* If the old declaration was `static', or the new one isn't, then
1099
     everything is OK.  */
1100
  if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1101
    return;
1102
 
1103
  /* It's OK to declare a builtin function as `static'.  */
1104
  if (TREE_CODE (olddecl) == FUNCTION_DECL
1105
      && DECL_ARTIFICIAL (olddecl))
1106
    return;
1107
 
1108
  permerror (input_location, "%qD was declared %<extern%> and later %<static%>", newdecl);
1109
  permerror (input_location, "previous declaration of %q+D", olddecl);
1110
}
1111
 
1112
/* NEW_DECL is a redeclaration of OLD_DECL; both are functions or
1113
   function templates.  If their exception specifications do not
1114
   match, issue a diagnostic.  */
1115
 
1116
static void
1117
check_redeclaration_exception_specification (tree new_decl,
1118
                                             tree old_decl)
1119
{
1120
  tree new_type;
1121
  tree old_type;
1122
  tree new_exceptions;
1123
  tree old_exceptions;
1124
 
1125
  new_type = TREE_TYPE (new_decl);
1126
  new_exceptions = TYPE_RAISES_EXCEPTIONS (new_type);
1127
  old_type = TREE_TYPE (old_decl);
1128
  old_exceptions = TYPE_RAISES_EXCEPTIONS (old_type);
1129
 
1130
  /* [except.spec]
1131
 
1132
     If any declaration of a function has an exception-specification,
1133
     all declarations, including the definition and an explicit
1134
     specialization, of that function shall have an
1135
     exception-specification with the same set of type-ids.  */
1136
  if ((pedantic || ! DECL_IN_SYSTEM_HEADER (old_decl))
1137
      && ! DECL_IS_BUILTIN (old_decl)
1138
      && flag_exceptions
1139
      && !comp_except_specs (new_exceptions, old_exceptions, ce_normal))
1140
    {
1141
      error ("declaration of %qF has a different exception specifier",
1142
             new_decl);
1143
      error ("from previous declaration %q+F", old_decl);
1144
    }
1145
}
1146
 
1147
/* Return true if OLD_DECL and NEW_DECL agree on constexprness.
1148
   Otherwise issue diagnostics.  */
1149
 
1150
static bool
1151
validate_constexpr_redeclaration (tree old_decl, tree new_decl)
1152
{
1153
  old_decl = STRIP_TEMPLATE (old_decl);
1154
  new_decl = STRIP_TEMPLATE (new_decl);
1155
  if (!VAR_OR_FUNCTION_DECL_P (old_decl)
1156
      || !VAR_OR_FUNCTION_DECL_P (new_decl))
1157
    return true;
1158
  if (DECL_DECLARED_CONSTEXPR_P (old_decl)
1159
      == DECL_DECLARED_CONSTEXPR_P (new_decl))
1160
    return true;
1161
  if (TREE_CODE (old_decl) == FUNCTION_DECL && DECL_BUILT_IN (old_decl))
1162
    {
1163
      /* Hide a built-in declaration.  */
1164
      DECL_DECLARED_CONSTEXPR_P (old_decl)
1165
        = DECL_DECLARED_CONSTEXPR_P (new_decl);
1166
      return true;
1167
    }
1168
  error ("redeclaration %qD differs in %<constexpr%>", new_decl);
1169
  error ("from previous declaration %q+D", old_decl);
1170
  return false;
1171
}
1172
 
1173
#define GNU_INLINE_P(fn) (DECL_DECLARED_INLINE_P (fn)                   \
1174
                          && lookup_attribute ("gnu_inline",            \
1175
                                               DECL_ATTRIBUTES (fn)))
1176
 
1177
/* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1178
   If the redeclaration is invalid, a diagnostic is issued, and the
1179
   error_mark_node is returned.  Otherwise, OLDDECL is returned.
1180
 
1181
   If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
1182
   returned.
1183
 
1184
   NEWDECL_IS_FRIEND is true if NEWDECL was declared as a friend.  */
1185
 
1186
tree
1187
duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
1188
{
1189
  unsigned olddecl_uid = DECL_UID (olddecl);
1190
  int olddecl_friend = 0, types_match = 0, hidden_friend = 0;
1191
  int new_defines_function = 0;
1192
  tree new_template_info;
1193
 
1194
  if (newdecl == olddecl)
1195
    return olddecl;
1196
 
1197
  types_match = decls_match (newdecl, olddecl);
1198
 
1199
  /* If either the type of the new decl or the type of the old decl is an
1200
     error_mark_node, then that implies that we have already issued an
1201
     error (earlier) for some bogus type specification, and in that case,
1202
     it is rather pointless to harass the user with yet more error message
1203
     about the same declaration, so just pretend the types match here.  */
1204
  if (TREE_TYPE (newdecl) == error_mark_node
1205
      || TREE_TYPE (olddecl) == error_mark_node)
1206
    return error_mark_node;
1207
 
1208
  if (UDLIT_OPER_P (DECL_NAME (newdecl))
1209
      && UDLIT_OPER_P (DECL_NAME (olddecl)))
1210
    {
1211
      if (TREE_CODE (newdecl) == TEMPLATE_DECL
1212
          && TREE_CODE (olddecl) != TEMPLATE_DECL
1213
          && check_raw_literal_operator (olddecl))
1214
        error ("literal operator template %q+D conflicts with"
1215
               " raw literal operator %qD", newdecl, olddecl);
1216
      else if (TREE_CODE (newdecl) != TEMPLATE_DECL
1217
               && TREE_CODE (olddecl) == TEMPLATE_DECL
1218
               && check_raw_literal_operator (newdecl))
1219
        error ("raw literal operator %q+D conflicts with"
1220
               " literal operator template %qD", newdecl, olddecl);
1221
    }
1222
 
1223
  if (DECL_P (olddecl)
1224
      && TREE_CODE (newdecl) == FUNCTION_DECL
1225
      && TREE_CODE (olddecl) == FUNCTION_DECL
1226
      && (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl)))
1227
    {
1228
      if (DECL_DECLARED_INLINE_P (newdecl)
1229
          && DECL_UNINLINABLE (newdecl)
1230
          && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1231
        /* Already warned elsewhere.  */;
1232
      else if (DECL_DECLARED_INLINE_P (olddecl)
1233
               && DECL_UNINLINABLE (olddecl)
1234
               && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1235
        /* Already warned.  */;
1236
      else if (DECL_DECLARED_INLINE_P (newdecl)
1237
               && DECL_UNINLINABLE (olddecl)
1238
               && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1239
        {
1240
          warning (OPT_Wattributes, "function %q+D redeclared as inline",
1241
                   newdecl);
1242
          warning (OPT_Wattributes, "previous declaration of %q+D "
1243
                   "with attribute noinline", olddecl);
1244
        }
1245
      else if (DECL_DECLARED_INLINE_P (olddecl)
1246
               && DECL_UNINLINABLE (newdecl)
1247
               && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1248
        {
1249
          warning (OPT_Wattributes, "function %q+D redeclared with "
1250
                   "attribute noinline", newdecl);
1251
          warning (OPT_Wattributes, "previous declaration of %q+D was inline",
1252
                   olddecl);
1253
        }
1254
    }
1255
 
1256
  /* Check for redeclaration and other discrepancies.  */
1257
  if (TREE_CODE (olddecl) == FUNCTION_DECL
1258
      && DECL_ARTIFICIAL (olddecl))
1259
    {
1260
      gcc_assert (!DECL_HIDDEN_FRIEND_P (olddecl));
1261
      if (TREE_CODE (newdecl) != FUNCTION_DECL)
1262
        {
1263
          /* Avoid warnings redeclaring built-ins which have not been
1264
             explicitly declared.  */
1265
          if (DECL_ANTICIPATED (olddecl))
1266
            return NULL_TREE;
1267
 
1268
          /* If you declare a built-in or predefined function name as static,
1269
             the old definition is overridden, but optionally warn this was a
1270
             bad choice of name.  */
1271
          if (! TREE_PUBLIC (newdecl))
1272
            {
1273
              warning (OPT_Wshadow,
1274
                       DECL_BUILT_IN (olddecl)
1275
                       ? G_("shadowing built-in function %q#D")
1276
                       : G_("shadowing library function %q#D"), olddecl);
1277
              /* Discard the old built-in function.  */
1278
              return NULL_TREE;
1279
            }
1280
          /* If the built-in is not ansi, then programs can override
1281
             it even globally without an error.  */
1282
          else if (! DECL_BUILT_IN (olddecl))
1283
            warning (0, "library function %q#D redeclared as non-function %q#D",
1284
                     olddecl, newdecl);
1285
          else
1286
            {
1287
              error ("declaration of %q#D", newdecl);
1288
              error ("conflicts with built-in declaration %q#D",
1289
                     olddecl);
1290
            }
1291
          return NULL_TREE;
1292
        }
1293
      else if (!types_match)
1294
        {
1295
          /* Avoid warnings redeclaring built-ins which have not been
1296
             explicitly declared.  */
1297
          if (DECL_ANTICIPATED (olddecl))
1298
            {
1299
              /* Deal with fileptr_type_node.  FILE type is not known
1300
                 at the time we create the builtins.  */
1301
              tree t1, t2;
1302
 
1303
              for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1304
                   t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1305
                   t1 || t2;
1306
                   t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1307
                if (!t1 || !t2)
1308
                  break;
1309
                else if (TREE_VALUE (t2) == fileptr_type_node)
1310
                  {
1311
                    tree t = TREE_VALUE (t1);
1312
 
1313
                    if (TREE_CODE (t) == POINTER_TYPE
1314
                        && TYPE_NAME (TREE_TYPE (t))
1315
                        && DECL_NAME (TYPE_NAME (TREE_TYPE (t)))
1316
                           == get_identifier ("FILE")
1317
                        && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1318
                      {
1319
                        tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1320
 
1321
                        TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1322
                          = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1323
                        types_match = decls_match (newdecl, olddecl);
1324
                        if (types_match)
1325
                          return duplicate_decls (newdecl, olddecl,
1326
                                                  newdecl_is_friend);
1327
                        TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1328
                      }
1329
                  }
1330
                else if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1331
                  break;
1332
            }
1333
          else if ((DECL_EXTERN_C_P (newdecl)
1334
                    && DECL_EXTERN_C_P (olddecl))
1335
                   || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1336
                                 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1337
            {
1338
              /* A near match; override the builtin.  */
1339
 
1340
              if (TREE_PUBLIC (newdecl))
1341
                {
1342
                  warning (0, "new declaration %q#D", newdecl);
1343
                  warning (0, "ambiguates built-in declaration %q#D",
1344
                           olddecl);
1345
                }
1346
              else
1347
                warning (OPT_Wshadow,
1348
                         DECL_BUILT_IN (olddecl)
1349
                         ? G_("shadowing built-in function %q#D")
1350
                         : G_("shadowing library function %q#D"), olddecl);
1351
            }
1352
          else
1353
            /* Discard the old built-in function.  */
1354
            return NULL_TREE;
1355
 
1356
          /* Replace the old RTL to avoid problems with inlining.  */
1357
          COPY_DECL_RTL (newdecl, olddecl);
1358
        }
1359
      /* Even if the types match, prefer the new declarations type for
1360
         built-ins which have not been explicitly declared, for
1361
         exception lists, etc...  */
1362
      else if (DECL_IS_BUILTIN (olddecl))
1363
        {
1364
          tree type = TREE_TYPE (newdecl);
1365
          tree attribs = (*targetm.merge_type_attributes)
1366
            (TREE_TYPE (olddecl), type);
1367
 
1368
          type = cp_build_type_attribute_variant (type, attribs);
1369
          TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
1370
        }
1371
 
1372
      /* If a function is explicitly declared "throw ()", propagate that to
1373
         the corresponding builtin.  */
1374
      if (DECL_BUILT_IN_CLASS (olddecl) == BUILT_IN_NORMAL
1375
          && DECL_ANTICIPATED (olddecl)
1376
          && TREE_NOTHROW (newdecl)
1377
          && !TREE_NOTHROW (olddecl))
1378
        {
1379
          enum built_in_function fncode = DECL_FUNCTION_CODE (olddecl);
1380
          tree tmpdecl = builtin_decl_explicit (fncode);
1381
          if (tmpdecl && tmpdecl != olddecl && types_match)
1382
            TREE_NOTHROW (tmpdecl)  = 1;
1383
        }
1384
 
1385
      /* Whether or not the builtin can throw exceptions has no
1386
         bearing on this declarator.  */
1387
      TREE_NOTHROW (olddecl) = 0;
1388
 
1389
      if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1390
        {
1391
          /* If a builtin function is redeclared as `static', merge
1392
             the declarations, but make the original one static.  */
1393
          DECL_THIS_STATIC (olddecl) = 1;
1394
          TREE_PUBLIC (olddecl) = 0;
1395
 
1396
          /* Make the old declaration consistent with the new one so
1397
             that all remnants of the builtin-ness of this function
1398
             will be banished.  */
1399
          SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1400
          COPY_DECL_RTL (newdecl, olddecl);
1401
        }
1402
    }
1403
  else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1404
    {
1405
      /* C++ Standard, 3.3, clause 4:
1406
         "[Note: a namespace name or a class template name must be unique
1407
         in its declarative region (7.3.2, clause 14). ]"  */
1408
      if (TREE_CODE (olddecl) != NAMESPACE_DECL
1409
          && TREE_CODE (newdecl) != NAMESPACE_DECL
1410
          && (TREE_CODE (olddecl) != TEMPLATE_DECL
1411
              || TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) != TYPE_DECL)
1412
          && (TREE_CODE (newdecl) != TEMPLATE_DECL
1413
              || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != TYPE_DECL))
1414
        {
1415
          if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1416
               && TREE_CODE (newdecl) != TYPE_DECL)
1417
              || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1418
                  && TREE_CODE (olddecl) != TYPE_DECL))
1419
            {
1420
              /* We do nothing special here, because C++ does such nasty
1421
                 things with TYPE_DECLs.  Instead, just let the TYPE_DECL
1422
                 get shadowed, and know that if we need to find a TYPE_DECL
1423
                 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1424
                 slot of the identifier.  */
1425
              return NULL_TREE;
1426
            }
1427
 
1428
            if ((TREE_CODE (newdecl) == FUNCTION_DECL
1429
                 && DECL_FUNCTION_TEMPLATE_P (olddecl))
1430
                || (TREE_CODE (olddecl) == FUNCTION_DECL
1431
                    && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1432
              return NULL_TREE;
1433
        }
1434
 
1435
      error ("%q#D redeclared as different kind of symbol", newdecl);
1436
      if (TREE_CODE (olddecl) == TREE_LIST)
1437
        olddecl = TREE_VALUE (olddecl);
1438
      error ("previous declaration of %q+#D", olddecl);
1439
 
1440
      return error_mark_node;
1441
    }
1442
  else if (!types_match)
1443
    {
1444
      if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
1445
        /* These are certainly not duplicate declarations; they're
1446
           from different scopes.  */
1447
        return NULL_TREE;
1448
 
1449
      if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1450
        {
1451
          /* The name of a class template may not be declared to refer to
1452
             any other template, class, function, object, namespace, value,
1453
             or type in the same scope.  */
1454
          if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1455
              || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1456
            {
1457
              error ("declaration of template %q#D", newdecl);
1458
              error ("conflicts with previous declaration %q+#D", olddecl);
1459
            }
1460
          else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1461
                   && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1462
                   && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
1463
                                 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
1464
                   && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1465
                                           DECL_TEMPLATE_PARMS (olddecl))
1466
                   /* Template functions can be disambiguated by
1467
                      return type.  */
1468
                   && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1469
                                   TREE_TYPE (TREE_TYPE (olddecl))))
1470
            {
1471
              error ("new declaration %q#D", newdecl);
1472
              error ("ambiguates old declaration %q+#D", olddecl);
1473
            }
1474
          return NULL_TREE;
1475
        }
1476
      if (TREE_CODE (newdecl) == FUNCTION_DECL)
1477
        {
1478
          if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
1479
            {
1480
              error ("declaration of C function %q#D conflicts with",
1481
                     newdecl);
1482
              error ("previous declaration %q+#D here", olddecl);
1483
              return NULL_TREE;
1484
            }
1485
          else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1486
                              TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1487
            {
1488
              error ("new declaration %q#D", newdecl);
1489
              error ("ambiguates old declaration %q+#D", olddecl);
1490
              return error_mark_node;
1491
            }
1492
          else
1493
            return NULL_TREE;
1494
        }
1495
      else
1496
        {
1497
          error ("conflicting declaration %q#D", newdecl);
1498
          error ("%q+D has a previous declaration as %q#D", olddecl, olddecl);
1499
          return error_mark_node;
1500
        }
1501
    }
1502
  else if (TREE_CODE (newdecl) == FUNCTION_DECL
1503
            && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1504
                 && (!DECL_TEMPLATE_INFO (newdecl)
1505
                     || (DECL_TI_TEMPLATE (newdecl)
1506
                         != DECL_TI_TEMPLATE (olddecl))))
1507
                || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1508
                    && (!DECL_TEMPLATE_INFO (olddecl)
1509
                        || (DECL_TI_TEMPLATE (olddecl)
1510
                            != DECL_TI_TEMPLATE (newdecl))))))
1511
    /* It's OK to have a template specialization and a non-template
1512
       with the same type, or to have specializations of two
1513
       different templates with the same type.  Note that if one is a
1514
       specialization, and the other is an instantiation of the same
1515
       template, that we do not exit at this point.  That situation
1516
       can occur if we instantiate a template class, and then
1517
       specialize one of its methods.  This situation is valid, but
1518
       the declarations must be merged in the usual way.  */
1519
    return NULL_TREE;
1520
  else if (TREE_CODE (newdecl) == FUNCTION_DECL
1521
           && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
1522
                && !DECL_USE_TEMPLATE (newdecl))
1523
               || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1524
                   && !DECL_USE_TEMPLATE (olddecl))))
1525
    /* One of the declarations is a template instantiation, and the
1526
       other is not a template at all.  That's OK.  */
1527
    return NULL_TREE;
1528
  else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1529
    {
1530
      /* In [namespace.alias] we have:
1531
 
1532
           In a declarative region, a namespace-alias-definition can be
1533
           used to redefine a namespace-alias declared in that declarative
1534
           region to refer only to the namespace to which it already
1535
           refers.
1536
 
1537
         Therefore, if we encounter a second alias directive for the same
1538
         alias, we can just ignore the second directive.  */
1539
      if (DECL_NAMESPACE_ALIAS (newdecl)
1540
          && (DECL_NAMESPACE_ALIAS (newdecl)
1541
              == DECL_NAMESPACE_ALIAS (olddecl)))
1542
        return olddecl;
1543
      /* [namespace.alias]
1544
 
1545
         A namespace-name or namespace-alias shall not be declared as
1546
         the name of any other entity in the same declarative region.
1547
         A namespace-name defined at global scope shall not be
1548
         declared as the name of any other entity in any global scope
1549
         of the program.  */
1550
      error ("declaration of namespace %qD conflicts with", newdecl);
1551
      error ("previous declaration of namespace %q+D here", olddecl);
1552
      return error_mark_node;
1553
    }
1554
  else
1555
    {
1556
      const char *errmsg = redeclaration_error_message (newdecl, olddecl);
1557
      if (errmsg)
1558
        {
1559
          error_at (DECL_SOURCE_LOCATION (newdecl), errmsg, newdecl);
1560
          if (DECL_NAME (olddecl) != NULL_TREE)
1561
            error ((DECL_INITIAL (olddecl) && namespace_bindings_p ())
1562
                   ? G_("%q+#D previously defined here")
1563
                   : G_("%q+#D previously declared here"), olddecl);
1564
          return error_mark_node;
1565
        }
1566
      else if (TREE_CODE (olddecl) == FUNCTION_DECL
1567
               && DECL_INITIAL (olddecl) != NULL_TREE
1568
               && !prototype_p (TREE_TYPE (olddecl))
1569
               && prototype_p (TREE_TYPE (newdecl)))
1570
        {
1571
          /* Prototype decl follows defn w/o prototype.  */
1572
          warning_at (input_location, 0, "prototype for %q+#D", newdecl);
1573
          warning_at (DECL_SOURCE_LOCATION (olddecl), 0,
1574
                      "follows non-prototype definition here");
1575
        }
1576
      else if ((TREE_CODE (olddecl) == FUNCTION_DECL
1577
                || TREE_CODE (olddecl) == VAR_DECL)
1578
               && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
1579
        {
1580
          /* [dcl.link]
1581
             If two declarations of the same function or object
1582
             specify different linkage-specifications ..., the program
1583
             is ill-formed.... Except for functions with C++ linkage,
1584
             a function declaration without a linkage specification
1585
             shall not precede the first linkage specification for
1586
             that function.  A function can be declared without a
1587
             linkage specification after an explicit linkage
1588
             specification has been seen; the linkage explicitly
1589
             specified in the earlier declaration is not affected by
1590
             such a function declaration.
1591
 
1592
             DR 563 raises the question why the restrictions on
1593
             functions should not also apply to objects.  Older
1594
             versions of G++ silently ignore the linkage-specification
1595
             for this example:
1596
 
1597
               namespace N {
1598
                 extern int i;
1599
                 extern "C" int i;
1600
               }
1601
 
1602
             which is clearly wrong.  Therefore, we now treat objects
1603
             like functions.  */
1604
          if (current_lang_depth () == 0)
1605
            {
1606
              /* There is no explicit linkage-specification, so we use
1607
                 the linkage from the previous declaration.  */
1608
              if (!DECL_LANG_SPECIFIC (newdecl))
1609
                retrofit_lang_decl (newdecl);
1610
              SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1611
            }
1612
          else
1613
            {
1614
              error ("previous declaration of %q+#D with %qL linkage",
1615
                     olddecl, DECL_LANGUAGE (olddecl));
1616
              error ("conflicts with new declaration with %qL linkage",
1617
                     DECL_LANGUAGE (newdecl));
1618
            }
1619
        }
1620
 
1621
      if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
1622
        ;
1623
      else if (TREE_CODE (olddecl) == FUNCTION_DECL)
1624
        {
1625
          tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1626
          tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1627
          int i = 1;
1628
 
1629
          if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
1630
            t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
1631
 
1632
          for (; t1 && t1 != void_list_node;
1633
               t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1634
            if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1635
              {
1636
                if (1 == simple_cst_equal (TREE_PURPOSE (t1),
1637
                                           TREE_PURPOSE (t2)))
1638
                  {
1639
                    permerror (input_location, "default argument given for parameter %d of %q#D",
1640
                               i, newdecl);
1641
                    permerror (input_location, "after previous specification in %q+#D", olddecl);
1642
                  }
1643
                else
1644
                  {
1645
                    error ("default argument given for parameter %d of %q#D",
1646
                           i, newdecl);
1647
                    error ("after previous specification in %q+#D",
1648
                                 olddecl);
1649
                  }
1650
              }
1651
        }
1652
    }
1653
 
1654
  /* Do not merge an implicit typedef with an explicit one.  In:
1655
 
1656
       class A;
1657
       ...
1658
       typedef class A A __attribute__ ((foo));
1659
 
1660
     the attribute should apply only to the typedef.  */
1661
  if (TREE_CODE (olddecl) == TYPE_DECL
1662
      && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1663
          || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
1664
    return NULL_TREE;
1665
 
1666
  /* If new decl is `static' and an `extern' was seen previously,
1667
     warn about it.  */
1668
  warn_extern_redeclared_static (newdecl, olddecl);
1669
 
1670
  if (!validate_constexpr_redeclaration (olddecl, newdecl))
1671
    return error_mark_node;
1672
 
1673
  /* We have committed to returning 1 at this point.  */
1674
  if (TREE_CODE (newdecl) == FUNCTION_DECL)
1675
    {
1676
      /* Now that functions must hold information normally held
1677
         by field decls, there is extra work to do so that
1678
         declaration information does not get destroyed during
1679
         definition.  */
1680
      if (DECL_VINDEX (olddecl))
1681
        DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1682
      if (DECL_CONTEXT (olddecl))
1683
        DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
1684
      DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1685
      DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1686
      DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
1687
      DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
1688
      DECL_INVALID_OVERRIDER_P (newdecl) |= DECL_INVALID_OVERRIDER_P (olddecl);
1689
      DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
1690
      if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
1691
        SET_OVERLOADED_OPERATOR_CODE
1692
          (newdecl, DECL_OVERLOADED_OPERATOR_P (olddecl));
1693
      new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
1694
 
1695
      /* Optionally warn about more than one declaration for the same
1696
         name, but don't warn about a function declaration followed by a
1697
         definition.  */
1698
      if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1699
          && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
1700
          /* Don't warn about extern decl followed by definition.  */
1701
          && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
1702
          /* Don't warn about friends, let add_friend take care of it.  */
1703
          && ! (newdecl_is_friend || DECL_FRIEND_P (olddecl))
1704
          /* Don't warn about declaration followed by specialization.  */
1705
          && (! DECL_TEMPLATE_SPECIALIZATION (newdecl)
1706
              || DECL_TEMPLATE_SPECIALIZATION (olddecl)))
1707
        {
1708
          warning (OPT_Wredundant_decls, "redundant redeclaration of %qD in same scope", newdecl);
1709
          warning (OPT_Wredundant_decls, "previous declaration of %q+D", olddecl);
1710
        }
1711
 
1712
      if (DECL_DELETED_FN (newdecl))
1713
        {
1714
          error ("deleted definition of %qD", newdecl);
1715
          error ("after previous declaration %q+D", olddecl);
1716
        }
1717
      DECL_DELETED_FN (newdecl) |= DECL_DELETED_FN (olddecl);
1718
    }
1719
 
1720
  /* Deal with C++: must preserve virtual function table size.  */
1721
  if (TREE_CODE (olddecl) == TYPE_DECL)
1722
    {
1723
      tree newtype = TREE_TYPE (newdecl);
1724
      tree oldtype = TREE_TYPE (olddecl);
1725
 
1726
      if (newtype != error_mark_node && oldtype != error_mark_node
1727
          && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
1728
        CLASSTYPE_FRIEND_CLASSES (newtype)
1729
          = CLASSTYPE_FRIEND_CLASSES (oldtype);
1730
 
1731
      DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
1732
    }
1733
 
1734
  /* Copy all the DECL_... slots specified in the new decl
1735
     except for any that we copy here from the old type.  */
1736
  DECL_ATTRIBUTES (newdecl)
1737
    = (*targetm.merge_decl_attributes) (olddecl, newdecl);
1738
 
1739
  if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1740
    {
1741
      tree old_result;
1742
      tree new_result;
1743
      old_result = DECL_TEMPLATE_RESULT (olddecl);
1744
      new_result = DECL_TEMPLATE_RESULT (newdecl);
1745
      TREE_TYPE (olddecl) = TREE_TYPE (old_result);
1746
      DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
1747
        = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
1748
                   DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
1749
 
1750
      DECL_ATTRIBUTES (old_result)
1751
        = (*targetm.merge_decl_attributes) (old_result, new_result);
1752
 
1753
      if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1754
        {
1755
          if (GNU_INLINE_P (old_result) != GNU_INLINE_P (new_result)
1756
              && DECL_INITIAL (new_result))
1757
            {
1758
              if (DECL_INITIAL (old_result))
1759
                DECL_UNINLINABLE (old_result) = 1;
1760
              else
1761
                DECL_UNINLINABLE (old_result) = DECL_UNINLINABLE (new_result);
1762
              DECL_EXTERNAL (old_result) = DECL_EXTERNAL (new_result);
1763
              DECL_NOT_REALLY_EXTERN (old_result)
1764
                = DECL_NOT_REALLY_EXTERN (new_result);
1765
              DECL_INTERFACE_KNOWN (old_result)
1766
                = DECL_INTERFACE_KNOWN (new_result);
1767
              DECL_DECLARED_INLINE_P (old_result)
1768
                = DECL_DECLARED_INLINE_P (new_result);
1769
              DECL_DISREGARD_INLINE_LIMITS (old_result)
1770
                |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1771
 
1772
            }
1773
          else
1774
            {
1775
              DECL_DECLARED_INLINE_P (old_result)
1776
                |= DECL_DECLARED_INLINE_P (new_result);
1777
              DECL_DISREGARD_INLINE_LIMITS (old_result)
1778
                |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1779
              check_redeclaration_exception_specification (newdecl, olddecl);
1780
            }
1781
        }
1782
 
1783
      /* If the new declaration is a definition, update the file and
1784
         line information on the declaration, and also make
1785
         the old declaration the same definition.  */
1786
      if (DECL_INITIAL (new_result) != NULL_TREE)
1787
        {
1788
          DECL_SOURCE_LOCATION (olddecl)
1789
            = DECL_SOURCE_LOCATION (old_result)
1790
            = DECL_SOURCE_LOCATION (newdecl);
1791
          DECL_INITIAL (old_result) = DECL_INITIAL (new_result);
1792
          if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1793
            {
1794
              tree parm;
1795
              DECL_ARGUMENTS (old_result)
1796
                = DECL_ARGUMENTS (new_result);
1797
              for (parm = DECL_ARGUMENTS (old_result); parm;
1798
                   parm = DECL_CHAIN (parm))
1799
                DECL_CONTEXT (parm) = old_result;
1800
            }
1801
        }
1802
 
1803
      return olddecl;
1804
    }
1805
 
1806
  if (types_match)
1807
    {
1808
      /* Automatically handles default parameters.  */
1809
      tree oldtype = TREE_TYPE (olddecl);
1810
      tree newtype;
1811
 
1812
      if (TREE_CODE (newdecl) == FUNCTION_DECL)
1813
        maybe_instantiate_noexcept (olddecl);
1814
 
1815
      /* Merge the data types specified in the two decls.  */
1816
      newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
1817
 
1818
      /* If merge_types produces a non-typedef type, just use the old type.  */
1819
      if (TREE_CODE (newdecl) == TYPE_DECL
1820
          && newtype == DECL_ORIGINAL_TYPE (newdecl))
1821
        newtype = oldtype;
1822
 
1823
      if (TREE_CODE (newdecl) == VAR_DECL)
1824
        {
1825
          DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
1826
          DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
1827
          DECL_NONTRIVIALLY_INITIALIZED_P (newdecl)
1828
            |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl);
1829
          DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
1830
            |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
1831
 
1832
          /* Merge the threadprivate attribute from OLDDECL into NEWDECL.  */
1833
          if (DECL_LANG_SPECIFIC (olddecl)
1834
              && CP_DECL_THREADPRIVATE_P (olddecl))
1835
            {
1836
              /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed.  */
1837
              if (!DECL_LANG_SPECIFIC (newdecl))
1838
                retrofit_lang_decl (newdecl);
1839
 
1840
              DECL_TLS_MODEL (newdecl) = DECL_TLS_MODEL (olddecl);
1841
              CP_DECL_THREADPRIVATE_P (newdecl) = 1;
1842
            }
1843
        }
1844
 
1845
      /* Do this after calling `merge_types' so that default
1846
         parameters don't confuse us.  */
1847
      else if (TREE_CODE (newdecl) == FUNCTION_DECL)
1848
        check_redeclaration_exception_specification (newdecl, olddecl);
1849
      TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
1850
 
1851
      if (TREE_CODE (newdecl) == FUNCTION_DECL)
1852
        check_default_args (newdecl);
1853
 
1854
      /* Lay the type out, unless already done.  */
1855
      if (! same_type_p (newtype, oldtype)
1856
          && TREE_TYPE (newdecl) != error_mark_node
1857
          && !(processing_template_decl && uses_template_parms (newdecl)))
1858
        layout_type (TREE_TYPE (newdecl));
1859
 
1860
      if ((TREE_CODE (newdecl) == VAR_DECL
1861
           || TREE_CODE (newdecl) == PARM_DECL
1862
           || TREE_CODE (newdecl) == RESULT_DECL
1863
           || TREE_CODE (newdecl) == FIELD_DECL
1864
           || TREE_CODE (newdecl) == TYPE_DECL)
1865
          && !(processing_template_decl && uses_template_parms (newdecl)))
1866
        layout_decl (newdecl, 0);
1867
 
1868
      /* Merge the type qualifiers.  */
1869
      if (TREE_READONLY (newdecl))
1870
        TREE_READONLY (olddecl) = 1;
1871
      if (TREE_THIS_VOLATILE (newdecl))
1872
        TREE_THIS_VOLATILE (olddecl) = 1;
1873
      if (TREE_NOTHROW (newdecl))
1874
        TREE_NOTHROW (olddecl) = 1;
1875
 
1876
      /* Merge deprecatedness.  */
1877
      if (TREE_DEPRECATED (newdecl))
1878
        TREE_DEPRECATED (olddecl) = 1;
1879
 
1880
      /* Preserve function specific target and optimization options */
1881
      if (TREE_CODE (newdecl) == FUNCTION_DECL)
1882
        {
1883
          if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl)
1884
              && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl))
1885
            DECL_FUNCTION_SPECIFIC_TARGET (newdecl)
1886
              = DECL_FUNCTION_SPECIFIC_TARGET (olddecl);
1887
 
1888
          if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl)
1889
              && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl))
1890
            DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl)
1891
              = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl);
1892
        }
1893
 
1894
      /* Merge the initialization information.  */
1895
      if (DECL_INITIAL (newdecl) == NULL_TREE
1896
          && DECL_INITIAL (olddecl) != NULL_TREE)
1897
        {
1898
          DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
1899
          DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
1900
          if (TREE_CODE (newdecl) == FUNCTION_DECL)
1901
            {
1902
              DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
1903
              DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
1904
            }
1905
        }
1906
 
1907
      /* Merge the section attribute.
1908
         We want to issue an error if the sections conflict but that must be
1909
         done later in decl_attributes since we are called before attributes
1910
         are assigned.  */
1911
      if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
1912
        DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
1913
 
1914
      if (TREE_CODE (newdecl) == FUNCTION_DECL)
1915
        {
1916
          DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
1917
            |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
1918
          DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
1919
          TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1920
          TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
1921
          DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
1922
          DECL_IS_OPERATOR_NEW (newdecl) |= DECL_IS_OPERATOR_NEW (olddecl);
1923
          DECL_PURE_P (newdecl) |= DECL_PURE_P (olddecl);
1924
          TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
1925
          DECL_LOOPING_CONST_OR_PURE_P (newdecl)
1926
            |= DECL_LOOPING_CONST_OR_PURE_P (olddecl);
1927
          /* Keep the old RTL.  */
1928
          COPY_DECL_RTL (olddecl, newdecl);
1929
        }
1930
      else if (TREE_CODE (newdecl) == VAR_DECL
1931
               && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
1932
        {
1933
          /* Keep the old RTL.  We cannot keep the old RTL if the old
1934
             declaration was for an incomplete object and the new
1935
             declaration is not since many attributes of the RTL will
1936
             change.  */
1937
          COPY_DECL_RTL (olddecl, newdecl);
1938
        }
1939
    }
1940
  /* If cannot merge, then use the new type and qualifiers,
1941
     and don't preserve the old rtl.  */
1942
  else
1943
    {
1944
      /* Clean out any memory we had of the old declaration.  */
1945
      tree oldstatic = value_member (olddecl, static_aggregates);
1946
      if (oldstatic)
1947
        TREE_VALUE (oldstatic) = error_mark_node;
1948
 
1949
      TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
1950
      TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
1951
      TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
1952
      TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
1953
    }
1954
 
1955
  /* Merge the storage class information.  */
1956
  merge_weak (newdecl, olddecl);
1957
 
1958
  if (DECL_ONE_ONLY (olddecl))
1959
    DECL_COMDAT_GROUP (newdecl) = DECL_COMDAT_GROUP (olddecl);
1960
 
1961
  DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
1962
  TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
1963
  TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
1964
  if (! DECL_EXTERNAL (olddecl))
1965
    DECL_EXTERNAL (newdecl) = 0;
1966
 
1967
  new_template_info = NULL_TREE;
1968
  if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
1969
    {
1970
      bool new_redefines_gnu_inline = false;
1971
 
1972
      if (new_defines_function
1973
          && ((DECL_INTERFACE_KNOWN (olddecl)
1974
               && TREE_CODE (olddecl) == FUNCTION_DECL)
1975
              || (TREE_CODE (olddecl) == TEMPLATE_DECL
1976
                  && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
1977
                      == FUNCTION_DECL))))
1978
        {
1979
          tree fn = olddecl;
1980
 
1981
          if (TREE_CODE (fn) == TEMPLATE_DECL)
1982
            fn = DECL_TEMPLATE_RESULT (olddecl);
1983
 
1984
          new_redefines_gnu_inline = GNU_INLINE_P (fn) && DECL_INITIAL (fn);
1985
        }
1986
 
1987
      if (!new_redefines_gnu_inline)
1988
        {
1989
          DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
1990
          DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
1991
          DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
1992
        }
1993
      DECL_TEMPLATE_INSTANTIATED (newdecl)
1994
        |= DECL_TEMPLATE_INSTANTIATED (olddecl);
1995
      DECL_ODR_USED (newdecl) |= DECL_ODR_USED (olddecl);
1996
 
1997
      /* If the OLDDECL is an instantiation and/or specialization,
1998
         then the NEWDECL must be too.  But, it may not yet be marked
1999
         as such if the caller has created NEWDECL, but has not yet
2000
         figured out that it is a redeclaration.  */
2001
      if (!DECL_USE_TEMPLATE (newdecl))
2002
        DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
2003
 
2004
      /* Don't really know how much of the language-specific
2005
         values we should copy from old to new.  */
2006
      DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
2007
      DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
2008
      DECL_INITIALIZED_IN_CLASS_P (newdecl)
2009
        |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
2010
 
2011
      if (LANG_DECL_HAS_MIN (newdecl))
2012
        {
2013
          DECL_LANG_SPECIFIC (newdecl)->u.min.u2 =
2014
            DECL_LANG_SPECIFIC (olddecl)->u.min.u2;
2015
          if (DECL_TEMPLATE_INFO (newdecl))
2016
            new_template_info = DECL_TEMPLATE_INFO (newdecl);
2017
          DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
2018
        }
2019
      /* Only functions have these fields.  */
2020
      if (TREE_CODE (newdecl) == FUNCTION_DECL
2021
          || DECL_FUNCTION_TEMPLATE_P (newdecl))
2022
        {
2023
          DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
2024
          olddecl_friend = DECL_FRIEND_P (olddecl);
2025
          hidden_friend = (DECL_ANTICIPATED (olddecl)
2026
                           && DECL_HIDDEN_FRIEND_P (olddecl)
2027
                           && newdecl_is_friend);
2028
          DECL_BEFRIENDING_CLASSES (newdecl)
2029
            = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
2030
                       DECL_BEFRIENDING_CLASSES (olddecl));
2031
          /* DECL_THUNKS is only valid for virtual functions,
2032
             otherwise it is a DECL_FRIEND_CONTEXT.  */
2033
          if (DECL_VIRTUAL_P (newdecl))
2034
            DECL_THUNKS (newdecl) = DECL_THUNKS (olddecl);
2035
        }
2036
      /* Only variables have this field.  */
2037
      else if (TREE_CODE (newdecl) == VAR_DECL
2038
               && VAR_HAD_UNKNOWN_BOUND (olddecl))
2039
        SET_VAR_HAD_UNKNOWN_BOUND (newdecl);
2040
    }
2041
 
2042
  if (TREE_CODE (newdecl) == FUNCTION_DECL)
2043
    {
2044
      tree parm;
2045
 
2046
      /* Merge parameter attributes. */
2047
      tree oldarg, newarg;
2048
      for (oldarg = DECL_ARGUMENTS(olddecl),
2049
               newarg = DECL_ARGUMENTS(newdecl);
2050
           oldarg && newarg;
2051
           oldarg = DECL_CHAIN(oldarg), newarg = DECL_CHAIN(newarg)) {
2052
          DECL_ATTRIBUTES (newarg)
2053
              = (*targetm.merge_decl_attributes) (oldarg, newarg);
2054
          DECL_ATTRIBUTES (oldarg) = DECL_ATTRIBUTES (newarg);
2055
      }
2056
 
2057
      if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2058
          && !DECL_TEMPLATE_INSTANTIATION (newdecl))
2059
        {
2060
          /* If newdecl is not a specialization, then it is not a
2061
             template-related function at all.  And that means that we
2062
             should have exited above, returning 0.  */
2063
          gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
2064
 
2065
          if (DECL_ODR_USED (olddecl))
2066
            /* From [temp.expl.spec]:
2067
 
2068
               If a template, a member template or the member of a class
2069
               template is explicitly specialized then that
2070
               specialization shall be declared before the first use of
2071
               that specialization that would cause an implicit
2072
               instantiation to take place, in every translation unit in
2073
               which such a use occurs.  */
2074
            error ("explicit specialization of %qD after first use",
2075
                      olddecl);
2076
 
2077
          SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
2078
 
2079
          /* Don't propagate visibility from the template to the
2080
             specialization here.  We'll do that in determine_visibility if
2081
             appropriate.  */
2082
          DECL_VISIBILITY_SPECIFIED (olddecl) = 0;
2083
 
2084
          /* [temp.expl.spec/14] We don't inline explicit specialization
2085
             just because the primary template says so.  */
2086
 
2087
          /* But still keep DECL_DISREGARD_INLINE_LIMITS in sync with
2088
             the always_inline attribute.  */
2089
          if (DECL_DISREGARD_INLINE_LIMITS (olddecl)
2090
              && !DECL_DISREGARD_INLINE_LIMITS (newdecl))
2091
            {
2092
              if (DECL_DECLARED_INLINE_P (newdecl))
2093
                DECL_DISREGARD_INLINE_LIMITS (newdecl) = true;
2094
              else
2095
                DECL_ATTRIBUTES (newdecl)
2096
                  = remove_attribute ("always_inline",
2097
                                      DECL_ATTRIBUTES (newdecl));
2098
            }
2099
        }
2100
      else if (new_defines_function && DECL_INITIAL (olddecl))
2101
        {
2102
          /* Never inline re-defined extern inline functions.
2103
             FIXME: this could be better handled by keeping both
2104
             function as separate declarations.  */
2105
          DECL_UNINLINABLE (newdecl) = 1;
2106
        }
2107
      else
2108
        {
2109
          if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
2110
            DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
2111
 
2112
          DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
2113
 
2114
          DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
2115
            = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
2116
 
2117
          DECL_DISREGARD_INLINE_LIMITS (newdecl)
2118
            = DECL_DISREGARD_INLINE_LIMITS (olddecl)
2119
            = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
2120
               || DECL_DISREGARD_INLINE_LIMITS (olddecl));
2121
        }
2122
 
2123
      /* Preserve abstractness on cloned [cd]tors.  */
2124
      DECL_ABSTRACT (newdecl) = DECL_ABSTRACT (olddecl);
2125
 
2126
      /* Update newdecl's parms to point at olddecl.  */
2127
      for (parm = DECL_ARGUMENTS (newdecl); parm;
2128
           parm = DECL_CHAIN (parm))
2129
        DECL_CONTEXT (parm) = olddecl;
2130
 
2131
      if (! types_match)
2132
        {
2133
          SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
2134
          COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
2135
          COPY_DECL_RTL (newdecl, olddecl);
2136
        }
2137
      if (! types_match || new_defines_function)
2138
        {
2139
          /* These need to be copied so that the names are available.
2140
             Note that if the types do match, we'll preserve inline
2141
             info and other bits, but if not, we won't.  */
2142
          DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
2143
          DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
2144
        }
2145
      if (new_defines_function)
2146
        /* If defining a function declared with other language
2147
           linkage, use the previously declared language linkage.  */
2148
        SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
2149
      else if (types_match)
2150
        {
2151
          /* If redeclaring a builtin function, and not a definition,
2152
             it stays built in.  */
2153
          if (DECL_BUILT_IN (olddecl))
2154
            {
2155
              DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
2156
              DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
2157
              /* If we're keeping the built-in definition, keep the rtl,
2158
                 regardless of declaration matches.  */
2159
              COPY_DECL_RTL (olddecl, newdecl);
2160
              if (DECL_BUILT_IN_CLASS (newdecl) == BUILT_IN_NORMAL)
2161
                {
2162
                  enum built_in_function fncode = DECL_FUNCTION_CODE (newdecl);
2163
                  switch (fncode)
2164
                    {
2165
                      /* If a compatible prototype of these builtin functions
2166
                         is seen, assume the runtime implements it with the
2167
                         expected semantics.  */
2168
                    case BUILT_IN_STPCPY:
2169
                      if (builtin_decl_explicit_p (fncode))
2170
                        set_builtin_decl_implicit_p (fncode, true);
2171
                      break;
2172
                    default:
2173
                      break;
2174
                    }
2175
                }
2176
            }
2177
 
2178
          DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
2179
          /* Don't clear out the arguments if we're just redeclaring a
2180
             function.  */
2181
          if (DECL_ARGUMENTS (olddecl))
2182
            DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
2183
        }
2184
    }
2185
  else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
2186
    NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
2187
 
2188
  /* Now preserve various other info from the definition.  */
2189
  TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
2190
  TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
2191
  DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
2192
  COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
2193
 
2194
  /* Warn about conflicting visibility specifications.  */
2195
  if (DECL_VISIBILITY_SPECIFIED (olddecl)
2196
      && DECL_VISIBILITY_SPECIFIED (newdecl)
2197
      && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
2198
    {
2199
      warning_at (input_location, OPT_Wattributes,
2200
                  "%q+D: visibility attribute ignored because it", newdecl);
2201
      warning_at (DECL_SOURCE_LOCATION (olddecl), OPT_Wattributes,
2202
                  "conflicts with previous declaration here");
2203
    }
2204
  /* Choose the declaration which specified visibility.  */
2205
  if (DECL_VISIBILITY_SPECIFIED (olddecl))
2206
    {
2207
      DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
2208
      DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2209
    }
2210
  /* Init priority used to be merged from newdecl to olddecl by the memcpy,
2211
     so keep this behavior.  */
2212
  if (TREE_CODE (newdecl) == VAR_DECL && DECL_HAS_INIT_PRIORITY_P (newdecl))
2213
    {
2214
      SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
2215
      DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
2216
    }
2217
  /* Likewise for DECL_ALIGN, DECL_USER_ALIGN and DECL_PACKED.  */
2218
  if (DECL_ALIGN (olddecl) > DECL_ALIGN (newdecl))
2219
    {
2220
      DECL_ALIGN (newdecl) = DECL_ALIGN (olddecl);
2221
      DECL_USER_ALIGN (newdecl) |= DECL_USER_ALIGN (olddecl);
2222
    }
2223
  DECL_USER_ALIGN (olddecl) = DECL_USER_ALIGN (newdecl);
2224
  if (TREE_CODE (newdecl) == FIELD_DECL)
2225
    DECL_PACKED (olddecl) = DECL_PACKED (newdecl);
2226
 
2227
  /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
2228
     with that from NEWDECL below.  */
2229
  if (DECL_LANG_SPECIFIC (olddecl))
2230
    {
2231
      gcc_assert (DECL_LANG_SPECIFIC (olddecl)
2232
                  != DECL_LANG_SPECIFIC (newdecl));
2233
      ggc_free (DECL_LANG_SPECIFIC (olddecl));
2234
    }
2235
 
2236
  /* Merge the USED information.  */
2237
  if (TREE_USED (olddecl))
2238
    TREE_USED (newdecl) = 1;
2239
  else if (TREE_USED (newdecl))
2240
    TREE_USED (olddecl) = 1;
2241
  if (TREE_CODE (newdecl) == VAR_DECL)
2242
    {
2243
      if (DECL_READ_P (olddecl))
2244
        DECL_READ_P (newdecl) = 1;
2245
      else if (DECL_READ_P (newdecl))
2246
        DECL_READ_P (olddecl) = 1;
2247
    }
2248
  if (DECL_PRESERVE_P (olddecl))
2249
    DECL_PRESERVE_P (newdecl) = 1;
2250
  else if (DECL_PRESERVE_P (newdecl))
2251
    DECL_PRESERVE_P (olddecl) = 1;
2252
 
2253
  if (TREE_CODE (newdecl) == FUNCTION_DECL)
2254
    {
2255
      int function_size;
2256
 
2257
      function_size = sizeof (struct tree_decl_common);
2258
 
2259
      memcpy ((char *) olddecl + sizeof (struct tree_common),
2260
              (char *) newdecl + sizeof (struct tree_common),
2261
              function_size - sizeof (struct tree_common));
2262
 
2263
      memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2264
              (char *) newdecl + sizeof (struct tree_decl_common),
2265
              sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common));
2266
      if (new_template_info)
2267
        /* If newdecl is a template instantiation, it is possible that
2268
           the following sequence of events has occurred:
2269
 
2270
           o A friend function was declared in a class template.  The
2271
           class template was instantiated.
2272
 
2273
           o The instantiation of the friend declaration was
2274
           recorded on the instantiation list, and is newdecl.
2275
 
2276
           o Later, however, instantiate_class_template called pushdecl
2277
           on the newdecl to perform name injection.  But, pushdecl in
2278
           turn called duplicate_decls when it discovered that another
2279
           declaration of a global function with the same name already
2280
           existed.
2281
 
2282
           o Here, in duplicate_decls, we decided to clobber newdecl.
2283
 
2284
           If we're going to do that, we'd better make sure that
2285
           olddecl, and not newdecl, is on the list of
2286
           instantiations so that if we try to do the instantiation
2287
           again we won't get the clobbered declaration.  */
2288
        reregister_specialization (newdecl,
2289
                                   new_template_info,
2290
                                   olddecl);
2291
    }
2292
  else
2293
    {
2294
      size_t size = tree_code_size (TREE_CODE (olddecl));
2295
      memcpy ((char *) olddecl + sizeof (struct tree_common),
2296
              (char *) newdecl + sizeof (struct tree_common),
2297
              sizeof (struct tree_decl_common) - sizeof (struct tree_common));
2298
      switch (TREE_CODE (olddecl))
2299
        {
2300
        case LABEL_DECL:
2301
        case VAR_DECL:
2302
        case RESULT_DECL:
2303
        case PARM_DECL:
2304
        case FIELD_DECL:
2305
        case TYPE_DECL:
2306
        case CONST_DECL:
2307
          {
2308
            memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2309
                    (char *) newdecl + sizeof (struct tree_decl_common),
2310
                    size - sizeof (struct tree_decl_common)
2311
                    + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2312
          }
2313
          break;
2314
        default:
2315
          memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2316
                  (char *) newdecl + sizeof (struct tree_decl_common),
2317
                  sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common)
2318
                  + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2319
          break;
2320
        }
2321
    }
2322
  DECL_UID (olddecl) = olddecl_uid;
2323
  if (olddecl_friend)
2324
    DECL_FRIEND_P (olddecl) = 1;
2325
  if (hidden_friend)
2326
    {
2327
      DECL_ANTICIPATED (olddecl) = 1;
2328
      DECL_HIDDEN_FRIEND_P (olddecl) = 1;
2329
    }
2330
 
2331
  /* NEWDECL contains the merged attribute lists.
2332
     Update OLDDECL to be the same.  */
2333
  DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
2334
 
2335
  /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2336
    so that encode_section_info has a chance to look at the new decl
2337
    flags and attributes.  */
2338
  if (DECL_RTL_SET_P (olddecl)
2339
      && (TREE_CODE (olddecl) == FUNCTION_DECL
2340
          || (TREE_CODE (olddecl) == VAR_DECL
2341
              && TREE_STATIC (olddecl))))
2342
    make_decl_rtl (olddecl);
2343
 
2344
  /* The NEWDECL will no longer be needed.  Because every out-of-class
2345
     declaration of a member results in a call to duplicate_decls,
2346
     freeing these nodes represents in a significant savings.  */
2347
  ggc_free (newdecl);
2348
 
2349
  return olddecl;
2350
}
2351
 
2352
/* Return zero if the declaration NEWDECL is valid
2353
   when the declaration OLDDECL (assumed to be for the same name)
2354
   has already been seen.
2355
   Otherwise return an error message format string with a %s
2356
   where the identifier should go.  */
2357
 
2358
static const char *
2359
redeclaration_error_message (tree newdecl, tree olddecl)
2360
{
2361
  if (TREE_CODE (newdecl) == TYPE_DECL)
2362
    {
2363
      /* Because C++ can put things into name space for free,
2364
         constructs like "typedef struct foo { ... } foo"
2365
         would look like an erroneous redeclaration.  */
2366
      if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
2367
        return NULL;
2368
      else
2369
        return G_("redefinition of %q#D");
2370
    }
2371
  else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2372
    {
2373
      /* If this is a pure function, its olddecl will actually be
2374
         the original initialization to `0' (which we force to call
2375
         abort()).  Don't complain about redefinition in this case.  */
2376
      if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
2377
          && DECL_INITIAL (olddecl) == NULL_TREE)
2378
        return NULL;
2379
 
2380
      /* If both functions come from different namespaces, this is not
2381
         a redeclaration - this is a conflict with a used function.  */
2382
      if (DECL_NAMESPACE_SCOPE_P (olddecl)
2383
          && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
2384
          && ! decls_match (olddecl, newdecl))
2385
        return G_("%qD conflicts with used function");
2386
 
2387
      /* We'll complain about linkage mismatches in
2388
         warn_extern_redeclared_static.  */
2389
 
2390
      /* Defining the same name twice is no good.  */
2391
      if (DECL_INITIAL (olddecl) != NULL_TREE
2392
          && DECL_INITIAL (newdecl) != NULL_TREE)
2393
        {
2394
          if (DECL_NAME (olddecl) == NULL_TREE)
2395
            return G_("%q#D not declared in class");
2396
          else if (!GNU_INLINE_P (olddecl)
2397
                   || GNU_INLINE_P (newdecl))
2398
            return G_("redefinition of %q#D");
2399
        }
2400
 
2401
      if (DECL_DECLARED_INLINE_P (olddecl) && DECL_DECLARED_INLINE_P (newdecl))
2402
        {
2403
          bool olda = GNU_INLINE_P (olddecl);
2404
          bool newa = GNU_INLINE_P (newdecl);
2405
 
2406
          if (olda != newa)
2407
            {
2408
              if (newa)
2409
                return G_("%q+D redeclared inline with "
2410
                          "%<gnu_inline%> attribute");
2411
              else
2412
                return G_("%q+D redeclared inline without "
2413
                          "%<gnu_inline%> attribute");
2414
            }
2415
        }
2416
 
2417
      return NULL;
2418
    }
2419
  else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2420
    {
2421
      tree nt, ot;
2422
 
2423
      if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2424
        {
2425
          if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
2426
              && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
2427
            return G_("redefinition of %q#D");
2428
          return NULL;
2429
        }
2430
 
2431
      if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
2432
          || (DECL_TEMPLATE_RESULT (newdecl)
2433
              == DECL_TEMPLATE_RESULT (olddecl)))
2434
        return NULL;
2435
 
2436
      nt = DECL_TEMPLATE_RESULT (newdecl);
2437
      if (DECL_TEMPLATE_INFO (nt))
2438
        nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
2439
      ot = DECL_TEMPLATE_RESULT (olddecl);
2440
      if (DECL_TEMPLATE_INFO (ot))
2441
        ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
2442
      if (DECL_INITIAL (nt) && DECL_INITIAL (ot)
2443
          && (!GNU_INLINE_P (ot) || GNU_INLINE_P (nt)))
2444
        return G_("redefinition of %q#D");
2445
 
2446
      if (DECL_DECLARED_INLINE_P (ot) && DECL_DECLARED_INLINE_P (nt))
2447
        {
2448
          bool olda = GNU_INLINE_P (ot);
2449
          bool newa = GNU_INLINE_P (nt);
2450
 
2451
          if (olda != newa)
2452
            {
2453
              if (newa)
2454
                return G_("%q+D redeclared inline with "
2455
                          "%<gnu_inline%> attribute");
2456
              else
2457
                return G_("%q+D redeclared inline without "
2458
                          "%<gnu_inline%> attribute");
2459
            }
2460
        }
2461
 
2462
      /* Core issue #226 (C++0x):
2463
 
2464
           If a friend function template declaration specifies a
2465
           default template-argument, that declaration shall be a
2466
           definition and shall be the only declaration of the
2467
           function template in the translation unit.  */
2468
      if ((cxx_dialect != cxx98)
2469
          && TREE_CODE (ot) == FUNCTION_DECL && DECL_FRIEND_P (ot)
2470
          && !check_default_tmpl_args (nt, DECL_TEMPLATE_PARMS (newdecl),
2471
                                       /*is_primary=*/1, /*is_partial=*/0,
2472
                                       /*is_friend_decl=*/2))
2473
        return G_("redeclaration of friend %q#D "
2474
                  "may not have default template arguments");
2475
 
2476
      return NULL;
2477
    }
2478
  else if (TREE_CODE (newdecl) == VAR_DECL
2479
           && DECL_THREAD_LOCAL_P (newdecl) != DECL_THREAD_LOCAL_P (olddecl)
2480
           && (! DECL_LANG_SPECIFIC (olddecl)
2481
               || ! CP_DECL_THREADPRIVATE_P (olddecl)
2482
               || DECL_THREAD_LOCAL_P (newdecl)))
2483
    {
2484
      /* Only variables can be thread-local, and all declarations must
2485
         agree on this property.  */
2486
      if (DECL_THREAD_LOCAL_P (newdecl))
2487
        return G_("thread-local declaration of %q#D follows "
2488
                  "non-thread-local declaration");
2489
      else
2490
        return G_("non-thread-local declaration of %q#D follows "
2491
                  "thread-local declaration");
2492
    }
2493
  else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
2494
    {
2495
      /* The objects have been declared at namespace scope.  If either
2496
         is a member of an anonymous union, then this is an invalid
2497
         redeclaration.  For example:
2498
 
2499
           int i;
2500
           union { int i; };
2501
 
2502
           is invalid.  */
2503
      if ((TREE_CODE (newdecl) == VAR_DECL && DECL_ANON_UNION_VAR_P (newdecl))
2504
          || (TREE_CODE (olddecl) == VAR_DECL && DECL_ANON_UNION_VAR_P (olddecl)))
2505
        return G_("redeclaration of %q#D");
2506
      /* If at least one declaration is a reference, there is no
2507
         conflict.  For example:
2508
 
2509
           int i = 3;
2510
           extern int i;
2511
 
2512
         is valid.  */
2513
      if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
2514
        return NULL;
2515
      /* Reject two definitions.  */
2516
      return G_("redefinition of %q#D");
2517
    }
2518
  else
2519
    {
2520
      /* Objects declared with block scope:  */
2521
      /* Reject two definitions, and reject a definition
2522
         together with an external reference.  */
2523
      if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
2524
        return G_("redeclaration of %q#D");
2525
      return NULL;
2526
    }
2527
}
2528
 
2529
/* Hash and equality functions for the named_label table.  */
2530
 
2531
static hashval_t
2532
named_label_entry_hash (const void *data)
2533
{
2534
  const struct named_label_entry *ent = (const struct named_label_entry *) data;
2535
  return DECL_UID (ent->label_decl);
2536
}
2537
 
2538
static int
2539
named_label_entry_eq (const void *a, const void *b)
2540
{
2541
  const struct named_label_entry *ent_a = (const struct named_label_entry *) a;
2542
  const struct named_label_entry *ent_b = (const struct named_label_entry *) b;
2543
  return ent_a->label_decl == ent_b->label_decl;
2544
}
2545
 
2546
/* Create a new label, named ID.  */
2547
 
2548
static tree
2549
make_label_decl (tree id, int local_p)
2550
{
2551
  struct named_label_entry *ent;
2552
  void **slot;
2553
  tree decl;
2554
 
2555
  decl = build_decl (input_location, LABEL_DECL, id, void_type_node);
2556
 
2557
  DECL_CONTEXT (decl) = current_function_decl;
2558
  DECL_MODE (decl) = VOIDmode;
2559
  C_DECLARED_LABEL_FLAG (decl) = local_p;
2560
 
2561
  /* Say where one reference is to the label, for the sake of the
2562
     error if it is not defined.  */
2563
  DECL_SOURCE_LOCATION (decl) = input_location;
2564
 
2565
  /* Record the fact that this identifier is bound to this label.  */
2566
  SET_IDENTIFIER_LABEL_VALUE (id, decl);
2567
 
2568
  /* Create the label htab for the function on demand.  */
2569
  if (!named_labels)
2570
    named_labels = htab_create_ggc (13, named_label_entry_hash,
2571
                                    named_label_entry_eq, NULL);
2572
 
2573
  /* Record this label on the list of labels used in this function.
2574
     We do this before calling make_label_decl so that we get the
2575
     IDENTIFIER_LABEL_VALUE before the new label is declared.  */
2576
  ent = ggc_alloc_cleared_named_label_entry ();
2577
  ent->label_decl = decl;
2578
 
2579
  slot = htab_find_slot (named_labels, ent, INSERT);
2580
  gcc_assert (*slot == NULL);
2581
  *slot = ent;
2582
 
2583
  return decl;
2584
}
2585
 
2586
/* Look for a label named ID in the current function.  If one cannot
2587
   be found, create one.  (We keep track of used, but undefined,
2588
   labels, and complain about them at the end of a function.)  */
2589
 
2590
static tree
2591
lookup_label_1 (tree id)
2592
{
2593
  tree decl;
2594
 
2595
  /* You can't use labels at global scope.  */
2596
  if (current_function_decl == NULL_TREE)
2597
    {
2598
      error ("label %qE referenced outside of any function", id);
2599
      return NULL_TREE;
2600
    }
2601
 
2602
  /* See if we've already got this label.  */
2603
  decl = IDENTIFIER_LABEL_VALUE (id);
2604
  if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
2605
    return decl;
2606
 
2607
  decl = make_label_decl (id, /*local_p=*/0);
2608
  return decl;
2609
}
2610
 
2611
/* Wrapper for lookup_label_1.  */
2612
 
2613
tree
2614
lookup_label (tree id)
2615
{
2616
  tree ret;
2617
  bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
2618
  ret = lookup_label_1 (id);
2619
  timevar_cond_stop (TV_NAME_LOOKUP, subtime);
2620
  return ret;
2621
}
2622
 
2623
/* Declare a local label named ID.  */
2624
 
2625
tree
2626
declare_local_label (tree id)
2627
{
2628
  tree decl;
2629
  cp_label_binding *bind;
2630
 
2631
  /* Add a new entry to the SHADOWED_LABELS list so that when we leave
2632
     this scope we can restore the old value of IDENTIFIER_TYPE_VALUE.  */
2633
  bind = VEC_safe_push (cp_label_binding, gc,
2634
                        current_binding_level->shadowed_labels, NULL);
2635
  bind->prev_value = IDENTIFIER_LABEL_VALUE (id);
2636
 
2637
  decl = make_label_decl (id, /*local_p=*/1);
2638
  bind->label = decl;
2639
 
2640
  return decl;
2641
}
2642
 
2643
/* Returns nonzero if it is ill-formed to jump past the declaration of
2644
   DECL.  Returns 2 if it's also a real problem.  */
2645
 
2646
static int
2647
decl_jump_unsafe (tree decl)
2648
{
2649
  /* [stmt.dcl]/3: A program that jumps from a point where a local variable
2650
     with automatic storage duration is not in scope to a point where it is
2651
     in scope is ill-formed unless the variable has scalar type, class type
2652
     with a trivial default constructor and a trivial destructor, a
2653
     cv-qualified version of one of these types, or an array of one of the
2654
     preceding types and is declared without an initializer (8.5).  */
2655
  tree type = TREE_TYPE (decl);
2656
 
2657
  if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl)
2658
      || type == error_mark_node)
2659
    return 0;
2660
 
2661
  type = strip_array_types (type);
2662
 
2663
  if (type_has_nontrivial_default_init (TREE_TYPE (decl))
2664
      || DECL_NONTRIVIALLY_INITIALIZED_P (decl))
2665
    return 2;
2666
 
2667
  if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
2668
    return 1;
2669
 
2670
  return 0;
2671
}
2672
 
2673
/* A subroutine of check_previous_goto_1 to identify a branch to the user.  */
2674
 
2675
static void
2676
identify_goto (tree decl, const location_t *locus)
2677
{
2678
  if (decl)
2679
    permerror (input_location, "jump to label %qD", decl);
2680
  else
2681
    permerror (input_location, "jump to case label");
2682
  if (locus)
2683
    permerror (*locus, "  from here");
2684
}
2685
 
2686
/* Check that a single previously seen jump to a newly defined label
2687
   is OK.  DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
2688
   the jump context; NAMES are the names in scope in LEVEL at the jump
2689
   context; LOCUS is the source position of the jump or 0.  Returns
2690
   true if all is well.  */
2691
 
2692
static bool
2693
check_previous_goto_1 (tree decl, cp_binding_level* level, tree names,
2694
                       bool exited_omp, const location_t *locus)
2695
{
2696
  cp_binding_level *b;
2697
  bool identified = false, saw_eh = false, saw_omp = false;
2698
 
2699
  if (exited_omp)
2700
    {
2701
      identify_goto (decl, locus);
2702
      error ("  exits OpenMP structured block");
2703
      identified = saw_omp = true;
2704
    }
2705
 
2706
  for (b = current_binding_level; b ; b = b->level_chain)
2707
    {
2708
      tree new_decls, old_decls = (b == level ? names : NULL_TREE);
2709
 
2710
      for (new_decls = b->names; new_decls != old_decls;
2711
           new_decls = (DECL_P (new_decls) ? DECL_CHAIN (new_decls)
2712
                        : TREE_CHAIN (new_decls)))
2713
        {
2714
          int problem = decl_jump_unsafe (new_decls);
2715
          if (! problem)
2716
            continue;
2717
 
2718
          if (!identified)
2719
            {
2720
              identify_goto (decl, locus);
2721
              identified = true;
2722
            }
2723
          if (problem > 1)
2724
            error ("  crosses initialization of %q+#D", new_decls);
2725
          else
2726
            permerror (input_location, "  enters scope of %q+#D which has "
2727
                       "non-trivial destructor", new_decls);
2728
        }
2729
 
2730
      if (b == level)
2731
        break;
2732
      if ((b->kind == sk_try || b->kind == sk_catch) && !saw_eh)
2733
        {
2734
          if (!identified)
2735
            {
2736
              identify_goto (decl, locus);
2737
              identified = true;
2738
            }
2739
          if (b->kind == sk_try)
2740
            error ("  enters try block");
2741
          else
2742
            error ("  enters catch block");
2743
          saw_eh = true;
2744
        }
2745
      if (b->kind == sk_omp && !saw_omp)
2746
        {
2747
          if (!identified)
2748
            {
2749
              identify_goto (decl, locus);
2750
              identified = true;
2751
            }
2752
          error ("  enters OpenMP structured block");
2753
          saw_omp = true;
2754
        }
2755
    }
2756
 
2757
  return !identified;
2758
}
2759
 
2760
static void
2761
check_previous_goto (tree decl, struct named_label_use_entry *use)
2762
{
2763
  check_previous_goto_1 (decl, use->binding_level,
2764
                         use->names_in_scope, use->in_omp_scope,
2765
                         &use->o_goto_locus);
2766
}
2767
 
2768
static bool
2769
check_switch_goto (cp_binding_level* level)
2770
{
2771
  return check_previous_goto_1 (NULL_TREE, level, level->names, false, NULL);
2772
}
2773
 
2774
/* Check that a new jump to a label DECL is OK.  Called by
2775
   finish_goto_stmt.  */
2776
 
2777
void
2778
check_goto (tree decl)
2779
{
2780
  struct named_label_entry *ent, dummy;
2781
  bool saw_catch = false, identified = false;
2782
  tree bad;
2783
  unsigned ix;
2784
 
2785
  /* We can't know where a computed goto is jumping.
2786
     So we assume that it's OK.  */
2787
  if (TREE_CODE (decl) != LABEL_DECL)
2788
    return;
2789
 
2790
  /* We didn't record any information about this label when we created it,
2791
     and there's not much point since it's trivial to analyze as a return.  */
2792
  if (decl == cdtor_label)
2793
    return;
2794
 
2795
  dummy.label_decl = decl;
2796
  ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2797
  gcc_assert (ent != NULL);
2798
 
2799
  /* If the label hasn't been defined yet, defer checking.  */
2800
  if (! DECL_INITIAL (decl))
2801
    {
2802
      struct named_label_use_entry *new_use;
2803
 
2804
      /* Don't bother creating another use if the last goto had the
2805
         same data, and will therefore create the same set of errors.  */
2806
      if (ent->uses
2807
          && ent->uses->names_in_scope == current_binding_level->names)
2808
        return;
2809
 
2810
      new_use = ggc_alloc_named_label_use_entry ();
2811
      new_use->binding_level = current_binding_level;
2812
      new_use->names_in_scope = current_binding_level->names;
2813
      new_use->o_goto_locus = input_location;
2814
      new_use->in_omp_scope = false;
2815
 
2816
      new_use->next = ent->uses;
2817
      ent->uses = new_use;
2818
      return;
2819
    }
2820
 
2821
  if (ent->in_try_scope || ent->in_catch_scope
2822
      || ent->in_omp_scope || !VEC_empty (tree, ent->bad_decls))
2823
    {
2824
      permerror (input_location, "jump to label %q+D", decl);
2825
      permerror (input_location, "  from here");
2826
      identified = true;
2827
    }
2828
 
2829
  FOR_EACH_VEC_ELT (tree, ent->bad_decls, ix, bad)
2830
    {
2831
      int u = decl_jump_unsafe (bad);
2832
 
2833
      if (u > 1 && DECL_ARTIFICIAL (bad))
2834
        {
2835
          /* Can't skip init of __exception_info.  */
2836
          error_at (DECL_SOURCE_LOCATION (bad), "  enters catch block");
2837
          saw_catch = true;
2838
        }
2839
      else if (u > 1)
2840
        error ("  skips initialization of %q+#D", bad);
2841
      else
2842
        permerror (input_location, "  enters scope of %q+#D which has "
2843
                   "non-trivial destructor", bad);
2844
    }
2845
 
2846
  if (ent->in_try_scope)
2847
    error ("  enters try block");
2848
  else if (ent->in_catch_scope && !saw_catch)
2849
    error ("  enters catch block");
2850
 
2851
  if (ent->in_omp_scope)
2852
    error ("  enters OpenMP structured block");
2853
  else if (flag_openmp)
2854
    {
2855
      cp_binding_level *b;
2856
      for (b = current_binding_level; b ; b = b->level_chain)
2857
        {
2858
          if (b == ent->binding_level)
2859
            break;
2860
          if (b->kind == sk_omp)
2861
            {
2862
              if (!identified)
2863
                {
2864
                  permerror (input_location, "jump to label %q+D", decl);
2865
                  permerror (input_location, "  from here");
2866
                  identified = true;
2867
                }
2868
              error ("  exits OpenMP structured block");
2869
              break;
2870
            }
2871
        }
2872
    }
2873
}
2874
 
2875
/* Check that a return is ok wrt OpenMP structured blocks.
2876
   Called by finish_return_stmt.  Returns true if all is well.  */
2877
 
2878
bool
2879
check_omp_return (void)
2880
{
2881
  cp_binding_level *b;
2882
  for (b = current_binding_level; b ; b = b->level_chain)
2883
    if (b->kind == sk_omp)
2884
      {
2885
        error ("invalid exit from OpenMP structured block");
2886
        return false;
2887
      }
2888
    else if (b->kind == sk_function_parms)
2889
      break;
2890
  return true;
2891
}
2892
 
2893
/* Define a label, specifying the location in the source file.
2894
   Return the LABEL_DECL node for the label.  */
2895
 
2896
static tree
2897
define_label_1 (location_t location, tree name)
2898
{
2899
  struct named_label_entry *ent, dummy;
2900
  cp_binding_level *p;
2901
  tree decl;
2902
 
2903
  decl = lookup_label (name);
2904
 
2905
  dummy.label_decl = decl;
2906
  ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2907
  gcc_assert (ent != NULL);
2908
 
2909
  /* After labels, make any new cleanups in the function go into their
2910
     own new (temporary) binding contour.  */
2911
  for (p = current_binding_level;
2912
       p->kind != sk_function_parms;
2913
       p = p->level_chain)
2914
    p->more_cleanups_ok = 0;
2915
 
2916
  if (name == get_identifier ("wchar_t"))
2917
    permerror (input_location, "label named wchar_t");
2918
 
2919
  if (DECL_INITIAL (decl) != NULL_TREE)
2920
    {
2921
      error ("duplicate label %qD", decl);
2922
      return error_mark_node;
2923
    }
2924
  else
2925
    {
2926
      struct named_label_use_entry *use;
2927
 
2928
      /* Mark label as having been defined.  */
2929
      DECL_INITIAL (decl) = error_mark_node;
2930
      /* Say where in the source.  */
2931
      DECL_SOURCE_LOCATION (decl) = location;
2932
 
2933
      ent->binding_level = current_binding_level;
2934
      ent->names_in_scope = current_binding_level->names;
2935
 
2936
      for (use = ent->uses; use ; use = use->next)
2937
        check_previous_goto (decl, use);
2938
      ent->uses = NULL;
2939
    }
2940
 
2941
  return decl;
2942
}
2943
 
2944
/* Wrapper for define_label_1.  */
2945
 
2946
tree
2947
define_label (location_t location, tree name)
2948
{
2949
  tree ret;
2950
  bool running = timevar_cond_start (TV_NAME_LOOKUP);
2951
  ret = define_label_1 (location, name);
2952
  timevar_cond_stop (TV_NAME_LOOKUP, running);
2953
  return ret;
2954
}
2955
 
2956
 
2957
struct cp_switch
2958
{
2959
  cp_binding_level *level;
2960
  struct cp_switch *next;
2961
  /* The SWITCH_STMT being built.  */
2962
  tree switch_stmt;
2963
  /* A splay-tree mapping the low element of a case range to the high
2964
     element, or NULL_TREE if there is no high element.  Used to
2965
     determine whether or not a new case label duplicates an old case
2966
     label.  We need a tree, rather than simply a hash table, because
2967
     of the GNU case range extension.  */
2968
  splay_tree cases;
2969
};
2970
 
2971
/* A stack of the currently active switch statements.  The innermost
2972
   switch statement is on the top of the stack.  There is no need to
2973
   mark the stack for garbage collection because it is only active
2974
   during the processing of the body of a function, and we never
2975
   collect at that point.  */
2976
 
2977
static struct cp_switch *switch_stack;
2978
 
2979
/* Called right after a switch-statement condition is parsed.
2980
   SWITCH_STMT is the switch statement being parsed.  */
2981
 
2982
void
2983
push_switch (tree switch_stmt)
2984
{
2985
  struct cp_switch *p = XNEW (struct cp_switch);
2986
  p->level = current_binding_level;
2987
  p->next = switch_stack;
2988
  p->switch_stmt = switch_stmt;
2989
  p->cases = splay_tree_new (case_compare, NULL, NULL);
2990
  switch_stack = p;
2991
}
2992
 
2993
void
2994
pop_switch (void)
2995
{
2996
  struct cp_switch *cs = switch_stack;
2997
  location_t switch_location;
2998
 
2999
  /* Emit warnings as needed.  */
3000
  switch_location = EXPR_LOC_OR_HERE (cs->switch_stmt);
3001
  if (!processing_template_decl)
3002
    c_do_switch_warnings (cs->cases, switch_location,
3003
                          SWITCH_STMT_TYPE (cs->switch_stmt),
3004
                          SWITCH_STMT_COND (cs->switch_stmt));
3005
 
3006
  splay_tree_delete (cs->cases);
3007
  switch_stack = switch_stack->next;
3008
  free (cs);
3009
}
3010
 
3011
/* Convert a case constant VALUE in a switch to the type TYPE of the switch
3012
   condition.  Note that if TYPE and VALUE are already integral we don't
3013
   really do the conversion because the language-independent
3014
   warning/optimization code will work better that way.  */
3015
 
3016
static tree
3017
case_conversion (tree type, tree value)
3018
{
3019
  if (value == NULL_TREE)
3020
    return value;
3021
 
3022
  if (cxx_dialect >= cxx0x
3023
      && (SCOPED_ENUM_P (type)
3024
          || !INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (value))))
3025
    {
3026
      if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
3027
        type = type_promotes_to (type);
3028
      value = perform_implicit_conversion (type, value, tf_warning_or_error);
3029
    }
3030
  return cxx_constant_value (value);
3031
}
3032
 
3033
/* Note that we've seen a definition of a case label, and complain if this
3034
   is a bad place for one.  */
3035
 
3036
tree
3037
finish_case_label (location_t loc, tree low_value, tree high_value)
3038
{
3039
  tree cond, r;
3040
  cp_binding_level *p;
3041
  tree type;
3042
 
3043
  if (processing_template_decl)
3044
    {
3045
      tree label;
3046
 
3047
      /* For templates, just add the case label; we'll do semantic
3048
         analysis at instantiation-time.  */
3049
      label = build_decl (loc, LABEL_DECL, NULL_TREE, NULL_TREE);
3050
      return add_stmt (build_case_label (low_value, high_value, label));
3051
    }
3052
 
3053
  /* Find the condition on which this switch statement depends.  */
3054
  cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
3055
  if (cond && TREE_CODE (cond) == TREE_LIST)
3056
    cond = TREE_VALUE (cond);
3057
 
3058
  if (!check_switch_goto (switch_stack->level))
3059
    return error_mark_node;
3060
 
3061
  type = SWITCH_STMT_TYPE (switch_stack->switch_stmt);
3062
 
3063
  low_value = case_conversion (type, low_value);
3064
  high_value = case_conversion (type, high_value);
3065
 
3066
  r = c_add_case_label (loc, switch_stack->cases, cond, type,
3067
                        low_value, high_value);
3068
 
3069
  /* After labels, make any new cleanups in the function go into their
3070
     own new (temporary) binding contour.  */
3071
  for (p = current_binding_level;
3072
       p->kind != sk_function_parms;
3073
       p = p->level_chain)
3074
    p->more_cleanups_ok = 0;
3075
 
3076
  return r;
3077
}
3078
 
3079
/* Hash a TYPENAME_TYPE.  K is really of type `tree'.  */
3080
 
3081
static hashval_t
3082
typename_hash (const void* k)
3083
{
3084
  hashval_t hash;
3085
  const_tree const t = (const_tree) k;
3086
 
3087
  hash = (htab_hash_pointer (TYPE_CONTEXT (t))
3088
          ^ htab_hash_pointer (DECL_NAME (TYPE_NAME (t))));
3089
 
3090
  return hash;
3091
}
3092
 
3093
typedef struct typename_info {
3094
  tree scope;
3095
  tree name;
3096
  tree template_id;
3097
  bool enum_p;
3098
  bool class_p;
3099
} typename_info;
3100
 
3101
/* Compare two TYPENAME_TYPEs.  K1 is really of type `tree', K2 is
3102
   really of type `typename_info*'  */
3103
 
3104
static int
3105
typename_compare (const void * k1, const void * k2)
3106
{
3107
  const_tree const t1 = (const_tree) k1;
3108
  const typename_info *const t2 = (const typename_info *) k2;
3109
 
3110
  return (DECL_NAME (TYPE_NAME (t1)) == t2->name
3111
          && TYPE_CONTEXT (t1) == t2->scope
3112
          && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
3113
          && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
3114
          && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
3115
}
3116
 
3117
/* Build a TYPENAME_TYPE.  If the type is `typename T::t', CONTEXT is
3118
   the type of `T', NAME is the IDENTIFIER_NODE for `t'.
3119
 
3120
   Returns the new TYPENAME_TYPE.  */
3121
 
3122
static GTY ((param_is (union tree_node))) htab_t typename_htab;
3123
 
3124
static tree
3125
build_typename_type (tree context, tree name, tree fullname,
3126
                     enum tag_types tag_type)
3127
{
3128
  tree t;
3129
  tree d;
3130
  typename_info ti;
3131
  void **e;
3132
  hashval_t hash;
3133
 
3134
  if (typename_htab == NULL)
3135
    typename_htab = htab_create_ggc (61, &typename_hash,
3136
                                     &typename_compare, NULL);
3137
 
3138
  ti.scope = FROB_CONTEXT (context);
3139
  ti.name = name;
3140
  ti.template_id = fullname;
3141
  ti.enum_p = tag_type == enum_type;
3142
  ti.class_p = (tag_type == class_type
3143
                || tag_type == record_type
3144
                || tag_type == union_type);
3145
  hash =  (htab_hash_pointer (ti.scope)
3146
           ^ htab_hash_pointer (ti.name));
3147
 
3148
  /* See if we already have this type.  */
3149
  e = htab_find_slot_with_hash (typename_htab, &ti, hash, INSERT);
3150
  if (*e)
3151
    t = (tree) *e;
3152
  else
3153
    {
3154
      /* Build the TYPENAME_TYPE.  */
3155
      t = cxx_make_type (TYPENAME_TYPE);
3156
      TYPE_CONTEXT (t) = ti.scope;
3157
      TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
3158
      TYPENAME_IS_ENUM_P (t) = ti.enum_p;
3159
      TYPENAME_IS_CLASS_P (t) = ti.class_p;
3160
 
3161
      /* Build the corresponding TYPE_DECL.  */
3162
      d = build_decl (input_location, TYPE_DECL, name, t);
3163
      TYPE_NAME (TREE_TYPE (d)) = d;
3164
      TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3165
      DECL_CONTEXT (d) = FROB_CONTEXT (context);
3166
      DECL_ARTIFICIAL (d) = 1;
3167
 
3168
      /* Store it in the hash table.  */
3169
      *e = t;
3170
 
3171
      /* TYPENAME_TYPEs must always be compared structurally, because
3172
         they may or may not resolve down to another type depending on
3173
         the currently open classes. */
3174
      SET_TYPE_STRUCTURAL_EQUALITY (t);
3175
    }
3176
 
3177
  return t;
3178
}
3179
 
3180
/* Resolve `typename CONTEXT::NAME'.  TAG_TYPE indicates the tag
3181
   provided to name the type.  Returns an appropriate type, unless an
3182
   error occurs, in which case error_mark_node is returned.  If we
3183
   locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
3184
   return that, rather than the _TYPE it corresponds to, in other
3185
   cases we look through the type decl.  If TF_ERROR is set, complain
3186
   about errors, otherwise be quiet.  */
3187
 
3188
tree
3189
make_typename_type (tree context, tree name, enum tag_types tag_type,
3190
                    tsubst_flags_t complain)
3191
{
3192
  tree fullname;
3193
  tree t;
3194
  bool want_template;
3195
 
3196
  if (name == error_mark_node
3197
      || context == NULL_TREE
3198
      || context == error_mark_node)
3199
    return error_mark_node;
3200
 
3201
  if (TYPE_P (name))
3202
    {
3203
      if (!(TYPE_LANG_SPECIFIC (name)
3204
            && (CLASSTYPE_IS_TEMPLATE (name)
3205
                || CLASSTYPE_USE_TEMPLATE (name))))
3206
        name = TYPE_IDENTIFIER (name);
3207
      else
3208
        /* Create a TEMPLATE_ID_EXPR for the type.  */
3209
        name = build_nt (TEMPLATE_ID_EXPR,
3210
                         CLASSTYPE_TI_TEMPLATE (name),
3211
                         CLASSTYPE_TI_ARGS (name));
3212
    }
3213
  else if (TREE_CODE (name) == TYPE_DECL)
3214
    name = DECL_NAME (name);
3215
 
3216
  fullname = name;
3217
 
3218
  if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3219
    {
3220
      name = TREE_OPERAND (name, 0);
3221
      if (TREE_CODE (name) == TEMPLATE_DECL)
3222
        name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
3223
      else if (TREE_CODE (name) == OVERLOAD)
3224
        {
3225
          error ("%qD is not a type", name);
3226
          return error_mark_node;
3227
        }
3228
    }
3229
  if (TREE_CODE (name) == TEMPLATE_DECL)
3230
    {
3231
      error ("%qD used without template parameters", name);
3232
      return error_mark_node;
3233
    }
3234
  gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
3235
  gcc_assert (TYPE_P (context));
3236
 
3237
  if (!MAYBE_CLASS_TYPE_P (context))
3238
    {
3239
      if (complain & tf_error)
3240
        error ("%q#T is not a class", context);
3241
      return error_mark_node;
3242
    }
3243
 
3244
  /* When the CONTEXT is a dependent type,  NAME could refer to a
3245
     dependent base class of CONTEXT.  But look inside it anyway
3246
     if CONTEXT is a currently open scope, in case it refers to a
3247
     member of the current instantiation or a non-dependent base;
3248
     lookup will stop when we hit a dependent base.  */
3249
  if (!dependent_scope_p (context))
3250
    /* We should only set WANT_TYPE when we're a nested typename type.
3251
       Then we can give better diagnostics if we find a non-type.  */
3252
    t = lookup_field (context, name, 2, /*want_type=*/true);
3253
  else
3254
    t = NULL_TREE;
3255
 
3256
  if ((!t || TREE_CODE (t) == TREE_LIST) && dependent_type_p (context))
3257
    return build_typename_type (context, name, fullname, tag_type);
3258
 
3259
  want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR;
3260
 
3261
  if (!t)
3262
    {
3263
      if (complain & tf_error)
3264
        error (want_template ? G_("no class template named %q#T in %q#T")
3265
               : G_("no type named %q#T in %q#T"), name, context);
3266
      return error_mark_node;
3267
    }
3268
 
3269
  /* Pull out the template from an injected-class-name (or multiple).  */
3270
  if (want_template)
3271
    t = maybe_get_template_decl_from_type_decl (t);
3272
 
3273
  if (TREE_CODE (t) == TREE_LIST)
3274
    {
3275
      if (complain & tf_error)
3276
        {
3277
          error ("lookup of %qT in %qT is ambiguous", name, context);
3278
          print_candidates (t);
3279
        }
3280
      return error_mark_node;
3281
    }
3282
 
3283
  if (want_template && !DECL_TYPE_TEMPLATE_P (t))
3284
    {
3285
      if (complain & tf_error)
3286
        error ("%<typename %T::%D%> names %q#T, which is not a class template",
3287
               context, name, t);
3288
      return error_mark_node;
3289
    }
3290
  if (!want_template && TREE_CODE (t) != TYPE_DECL)
3291
    {
3292
      if (complain & tf_error)
3293
        error ("%<typename %T::%D%> names %q#T, which is not a type",
3294
               context, name, t);
3295
      return error_mark_node;
3296
    }
3297
 
3298
  if (complain & tf_error)
3299
    perform_or_defer_access_check (TYPE_BINFO (context), t, t);
3300
 
3301
  /* If we are currently parsing a template and if T is a typedef accessed
3302
     through CONTEXT then we need to remember and check access of T at
3303
     template instantiation time.  */
3304
  add_typedef_to_current_template_for_access_check (t, context, input_location);
3305
 
3306
  if (want_template)
3307
    return lookup_template_class (t, TREE_OPERAND (fullname, 1),
3308
                                  NULL_TREE, context,
3309
                                  /*entering_scope=*/0,
3310
                                  tf_warning_or_error | tf_user);
3311
 
3312
  if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
3313
    t = TREE_TYPE (t);
3314
 
3315
  return t;
3316
}
3317
 
3318
/* Resolve `CONTEXT::template NAME'.  Returns a TEMPLATE_DECL if the name
3319
   can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
3320
   in which case error_mark_node is returned.
3321
 
3322
   If PARM_LIST is non-NULL, also make sure that the template parameter
3323
   list of TEMPLATE_DECL matches.
3324
 
3325
   If COMPLAIN zero, don't complain about any errors that occur.  */
3326
 
3327
tree
3328
make_unbound_class_template (tree context, tree name, tree parm_list,
3329
                             tsubst_flags_t complain)
3330
{
3331
  tree t;
3332
  tree d;
3333
 
3334
  if (TYPE_P (name))
3335
    name = TYPE_IDENTIFIER (name);
3336
  else if (DECL_P (name))
3337
    name = DECL_NAME (name);
3338
  gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
3339
 
3340
  if (!dependent_type_p (context)
3341
      || currently_open_class (context))
3342
    {
3343
      tree tmpl = NULL_TREE;
3344
 
3345
      if (MAYBE_CLASS_TYPE_P (context))
3346
        tmpl = lookup_field (context, name, 0, false);
3347
 
3348
      if (tmpl && TREE_CODE (tmpl) == TYPE_DECL)
3349
        tmpl = maybe_get_template_decl_from_type_decl (tmpl);
3350
 
3351
      if (!tmpl || !DECL_TYPE_TEMPLATE_P (tmpl))
3352
        {
3353
          if (complain & tf_error)
3354
            error ("no class template named %q#T in %q#T", name, context);
3355
          return error_mark_node;
3356
        }
3357
 
3358
      if (parm_list
3359
          && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
3360
        {
3361
          if (complain & tf_error)
3362
            {
3363
              error ("template parameters do not match template");
3364
              error ("%q+D declared here", tmpl);
3365
            }
3366
          return error_mark_node;
3367
        }
3368
 
3369
      if (complain & tf_error)
3370
        perform_or_defer_access_check (TYPE_BINFO (context), tmpl, tmpl);
3371
 
3372
      return tmpl;
3373
    }
3374
 
3375
  /* Build the UNBOUND_CLASS_TEMPLATE.  */
3376
  t = cxx_make_type (UNBOUND_CLASS_TEMPLATE);
3377
  TYPE_CONTEXT (t) = FROB_CONTEXT (context);
3378
  TREE_TYPE (t) = NULL_TREE;
3379
  SET_TYPE_STRUCTURAL_EQUALITY (t);
3380
 
3381
  /* Build the corresponding TEMPLATE_DECL.  */
3382
  d = build_decl (input_location, TEMPLATE_DECL, name, t);
3383
  TYPE_NAME (TREE_TYPE (d)) = d;
3384
  TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3385
  DECL_CONTEXT (d) = FROB_CONTEXT (context);
3386
  DECL_ARTIFICIAL (d) = 1;
3387
  DECL_TEMPLATE_PARMS (d) = parm_list;
3388
 
3389
  return t;
3390
}
3391
 
3392
 
3393
 
3394
/* Push the declarations of builtin types into the namespace.
3395
   RID_INDEX is the index of the builtin type in the array
3396
   RID_POINTERS.  NAME is the name used when looking up the builtin
3397
   type.  TYPE is the _TYPE node for the builtin type.  */
3398
 
3399
void
3400
record_builtin_type (enum rid rid_index,
3401
                     const char* name,
3402
                     tree type)
3403
{
3404
  tree rname = NULL_TREE, tname = NULL_TREE;
3405
  tree tdecl = NULL_TREE;
3406
 
3407
  if ((int) rid_index < (int) RID_MAX)
3408
    rname = ridpointers[(int) rid_index];
3409
  if (name)
3410
    tname = get_identifier (name);
3411
 
3412
  /* The calls to SET_IDENTIFIER_GLOBAL_VALUE below should be
3413
     eliminated.  Built-in types should not be looked up name; their
3414
     names are keywords that the parser can recognize.  However, there
3415
     is code in c-common.c that uses identifier_global_value to look
3416
     up built-in types by name.  */
3417
  if (tname)
3418
    {
3419
      tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, tname, type);
3420
      DECL_ARTIFICIAL (tdecl) = 1;
3421
      SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
3422
    }
3423
  if (rname)
3424
    {
3425
      if (!tdecl)
3426
        {
3427
          tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, rname, type);
3428
          DECL_ARTIFICIAL (tdecl) = 1;
3429
        }
3430
      SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
3431
    }
3432
 
3433
  if (!TYPE_NAME (type))
3434
    TYPE_NAME (type) = tdecl;
3435
 
3436
  if (tdecl)
3437
    debug_hooks->type_decl (tdecl, 0);
3438
}
3439
 
3440
/* Record one of the standard Java types.
3441
 * Declare it as having the given NAME.
3442
 * If SIZE > 0, it is the size of one of the integral types;
3443
 * otherwise it is the negative of the size of one of the other types.  */
3444
 
3445
static tree
3446
record_builtin_java_type (const char* name, int size)
3447
{
3448
  tree type, decl;
3449
  if (size > 0)
3450
    {
3451
      type = build_nonstandard_integer_type (size, 0);
3452
      type = build_distinct_type_copy (type);
3453
    }
3454
  else if (size > -32)
3455
    {
3456
      tree stype;
3457
      /* "__java_char" or ""__java_boolean".  */
3458
      type = build_nonstandard_integer_type (-size, 1);
3459
      type = build_distinct_type_copy (type);
3460
      /* Get the signed type cached and attached to the unsigned type,
3461
         so it doesn't get garbage-collected at "random" times,
3462
         causing potential codegen differences out of different UIDs
3463
         and different alias set numbers.  */
3464
      stype = build_nonstandard_integer_type (-size, 0);
3465
      stype = build_distinct_type_copy (stype);
3466
      TREE_CHAIN (type) = stype;
3467
      /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
3468
    }
3469
  else
3470
    { /* "__java_float" or ""__java_double".  */
3471
      type = make_node (REAL_TYPE);
3472
      TYPE_PRECISION (type) = - size;
3473
      layout_type (type);
3474
    }
3475
  record_builtin_type (RID_MAX, name, type);
3476
  decl = TYPE_NAME (type);
3477
 
3478
  /* Suppress generate debug symbol entries for these types,
3479
     since for normal C++ they are just clutter.
3480
     However, push_lang_context undoes this if extern "Java" is seen.  */
3481
  DECL_IGNORED_P (decl) = 1;
3482
 
3483
  TYPE_FOR_JAVA (type) = 1;
3484
  return type;
3485
}
3486
 
3487
/* Push a type into the namespace so that the back ends ignore it.  */
3488
 
3489
static void
3490
record_unknown_type (tree type, const char* name)
3491
{
3492
  tree decl = pushdecl (build_decl (UNKNOWN_LOCATION,
3493
                                    TYPE_DECL, get_identifier (name), type));
3494
  /* Make sure the "unknown type" typedecl gets ignored for debug info.  */
3495
  DECL_IGNORED_P (decl) = 1;
3496
  TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
3497
  TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
3498
  TYPE_ALIGN (type) = 1;
3499
  TYPE_USER_ALIGN (type) = 0;
3500
  SET_TYPE_MODE (type, TYPE_MODE (void_type_node));
3501
}
3502
 
3503
/* A string for which we should create an IDENTIFIER_NODE at
3504
   startup.  */
3505
 
3506
typedef struct predefined_identifier
3507
{
3508
  /* The name of the identifier.  */
3509
  const char *const name;
3510
  /* The place where the IDENTIFIER_NODE should be stored.  */
3511
  tree *const node;
3512
  /* Nonzero if this is the name of a constructor or destructor.  */
3513
  const int ctor_or_dtor_p;
3514
} predefined_identifier;
3515
 
3516
/* Create all the predefined identifiers.  */
3517
 
3518
static void
3519
initialize_predefined_identifiers (void)
3520
{
3521
  const predefined_identifier *pid;
3522
 
3523
  /* A table of identifiers to create at startup.  */
3524
  static const predefined_identifier predefined_identifiers[] = {
3525
    { "C++", &lang_name_cplusplus, 0 },
3526
    { "C", &lang_name_c, 0 },
3527
    { "Java", &lang_name_java, 0 },
3528
    /* Some of these names have a trailing space so that it is
3529
       impossible for them to conflict with names written by users.  */
3530
    { "__ct ", &ctor_identifier, 1 },
3531
    { "__base_ctor ", &base_ctor_identifier, 1 },
3532
    { "__comp_ctor ", &complete_ctor_identifier, 1 },
3533
    { "__dt ", &dtor_identifier, 1 },
3534
    { "__comp_dtor ", &complete_dtor_identifier, 1 },
3535
    { "__base_dtor ", &base_dtor_identifier, 1 },
3536
    { "__deleting_dtor ", &deleting_dtor_identifier, 1 },
3537
    { IN_CHARGE_NAME, &in_charge_identifier, 0 },
3538
    { "nelts", &nelts_identifier, 0 },
3539
    { THIS_NAME, &this_identifier, 0 },
3540
    { VTABLE_DELTA_NAME, &delta_identifier, 0 },
3541
    { VTABLE_PFN_NAME, &pfn_identifier, 0 },
3542
    { "_vptr", &vptr_identifier, 0 },
3543
    { "__vtt_parm", &vtt_parm_identifier, 0 },
3544
    { "::", &global_scope_name, 0 },
3545
    { "std", &std_identifier, 0 },
3546
    { NULL, NULL, 0 }
3547
  };
3548
 
3549
  for (pid = predefined_identifiers; pid->name; ++pid)
3550
    {
3551
      *pid->node = get_identifier (pid->name);
3552
      if (pid->ctor_or_dtor_p)
3553
        IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
3554
    }
3555
}
3556
 
3557
/* Create the predefined scalar types of C,
3558
   and some nodes representing standard constants (0, 1, (void *)0).
3559
   Initialize the global binding level.
3560
   Make definitions for built-in primitive functions.  */
3561
 
3562
void
3563
cxx_init_decl_processing (void)
3564
{
3565
  tree void_ftype;
3566
  tree void_ftype_ptr;
3567
 
3568
  /* Create all the identifiers we need.  */
3569
  initialize_predefined_identifiers ();
3570
 
3571
  /* Create the global variables.  */
3572
  push_to_top_level ();
3573
 
3574
  current_function_decl = NULL_TREE;
3575
  current_binding_level = NULL;
3576
  /* Enter the global namespace.  */
3577
  gcc_assert (global_namespace == NULL_TREE);
3578
  global_namespace = build_lang_decl (NAMESPACE_DECL, global_scope_name,
3579
                                      void_type_node);
3580
  DECL_CONTEXT (global_namespace) = build_translation_unit_decl (NULL_TREE);
3581
  TREE_PUBLIC (global_namespace) = 1;
3582
  begin_scope (sk_namespace, global_namespace);
3583
 
3584
  if (flag_visibility_ms_compat)
3585
    default_visibility = VISIBILITY_HIDDEN;
3586
 
3587
  /* Initially, C.  */
3588
  current_lang_name = lang_name_c;
3589
 
3590
  /* Create the `std' namespace.  */
3591
  push_namespace (std_identifier);
3592
  std_node = current_namespace;
3593
  pop_namespace ();
3594
 
3595
  c_common_nodes_and_builtins ();
3596
 
3597
  java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
3598
  java_short_type_node = record_builtin_java_type ("__java_short", 16);
3599
  java_int_type_node = record_builtin_java_type ("__java_int", 32);
3600
  java_long_type_node = record_builtin_java_type ("__java_long", 64);
3601
  java_float_type_node = record_builtin_java_type ("__java_float", -32);
3602
  java_double_type_node = record_builtin_java_type ("__java_double", -64);
3603
  java_char_type_node = record_builtin_java_type ("__java_char", -16);
3604
  java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
3605
 
3606
  integer_two_node = build_int_cst (NULL_TREE, 2);
3607
 
3608
  record_builtin_type (RID_BOOL, "bool", boolean_type_node);
3609
  truthvalue_type_node = boolean_type_node;
3610
  truthvalue_false_node = boolean_false_node;
3611
  truthvalue_true_node = boolean_true_node;
3612
 
3613
  empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
3614
  noexcept_true_spec = build_tree_list (boolean_true_node, NULL_TREE);
3615
  noexcept_false_spec = build_tree_list (boolean_false_node, NULL_TREE);
3616
 
3617
#if 0
3618
  record_builtin_type (RID_MAX, NULL, string_type_node);
3619
#endif
3620
 
3621
  delta_type_node = ptrdiff_type_node;
3622
  vtable_index_type = ptrdiff_type_node;
3623
 
3624
  vtt_parm_type = build_pointer_type (const_ptr_type_node);
3625
  void_ftype = build_function_type_list (void_type_node, NULL_TREE);
3626
  void_ftype_ptr = build_function_type_list (void_type_node,
3627
                                             ptr_type_node, NULL_TREE);
3628
  void_ftype_ptr
3629
    = build_exception_variant (void_ftype_ptr, empty_except_spec);
3630
 
3631
  /* C++ extensions */
3632
 
3633
  unknown_type_node = make_node (LANG_TYPE);
3634
  record_unknown_type (unknown_type_node, "unknown type");
3635
 
3636
  /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node.  */
3637
  TREE_TYPE (unknown_type_node) = unknown_type_node;
3638
 
3639
  /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
3640
     result.  */
3641
  TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
3642
  TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
3643
 
3644
  init_list_type_node = make_node (LANG_TYPE);
3645
  record_unknown_type (init_list_type_node, "init list");
3646
 
3647
  dependent_lambda_return_type_node = make_node (LANG_TYPE);
3648
  record_unknown_type (dependent_lambda_return_type_node,
3649
                       "undeduced lambda return type");
3650
 
3651
  {
3652
    /* Make sure we get a unique function type, so we can give
3653
       its pointer type a name.  (This wins for gdb.) */
3654
    tree vfunc_type = make_node (FUNCTION_TYPE);
3655
    TREE_TYPE (vfunc_type) = integer_type_node;
3656
    TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
3657
    layout_type (vfunc_type);
3658
 
3659
    vtable_entry_type = build_pointer_type (vfunc_type);
3660
  }
3661
  record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
3662
 
3663
  vtbl_type_node
3664
    = build_cplus_array_type (vtable_entry_type, NULL_TREE);
3665
  layout_type (vtbl_type_node);
3666
  vtbl_type_node = cp_build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
3667
  record_builtin_type (RID_MAX, NULL, vtbl_type_node);
3668
  vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
3669
  layout_type (vtbl_ptr_type_node);
3670
  record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
3671
 
3672
  push_namespace (get_identifier ("__cxxabiv1"));
3673
  abi_node = current_namespace;
3674
  pop_namespace ();
3675
 
3676
  global_type_node = make_node (LANG_TYPE);
3677
  record_unknown_type (global_type_node, "global type");
3678
 
3679
  /* Now, C++.  */
3680
  current_lang_name = lang_name_cplusplus;
3681
 
3682
  {
3683
    tree newattrs, extvisattr;
3684
    tree newtype, deltype;
3685
    tree ptr_ftype_sizetype;
3686
    tree new_eh_spec;
3687
 
3688
    ptr_ftype_sizetype
3689
      = build_function_type_list (ptr_type_node, size_type_node, NULL_TREE);
3690
    if (cxx_dialect == cxx98)
3691
      {
3692
        tree bad_alloc_id;
3693
        tree bad_alloc_type_node;
3694
        tree bad_alloc_decl;
3695
 
3696
        push_namespace (std_identifier);
3697
        bad_alloc_id = get_identifier ("bad_alloc");
3698
        bad_alloc_type_node = make_class_type (RECORD_TYPE);
3699
        TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
3700
        bad_alloc_decl
3701
          = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
3702
        DECL_CONTEXT (bad_alloc_decl) = current_namespace;
3703
        pop_namespace ();
3704
 
3705
        new_eh_spec
3706
          = add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1);
3707
      }
3708
    else
3709
      new_eh_spec = noexcept_false_spec;
3710
 
3711
    /* Ensure attribs.c is initialized.  */
3712
    init_attributes ();
3713
    extvisattr = build_tree_list (get_identifier ("externally_visible"),
3714
                                  NULL_TREE);
3715
    newattrs = tree_cons (get_identifier ("alloc_size"),
3716
                          build_tree_list (NULL_TREE, integer_one_node),
3717
                          extvisattr);
3718
    newtype = cp_build_type_attribute_variant (ptr_ftype_sizetype, newattrs);
3719
    newtype = build_exception_variant (newtype, new_eh_spec);
3720
    deltype = cp_build_type_attribute_variant (void_ftype_ptr, extvisattr);
3721
    deltype = build_exception_variant (deltype, empty_except_spec);
3722
    push_cp_library_fn (NEW_EXPR, newtype);
3723
    push_cp_library_fn (VEC_NEW_EXPR, newtype);
3724
    global_delete_fndecl = push_cp_library_fn (DELETE_EXPR, deltype);
3725
    push_cp_library_fn (VEC_DELETE_EXPR, deltype);
3726
 
3727
    nullptr_type_node = make_node (NULLPTR_TYPE);
3728
    TYPE_SIZE (nullptr_type_node) = bitsize_int (GET_MODE_BITSIZE (ptr_mode));
3729
    TYPE_SIZE_UNIT (nullptr_type_node) = size_int (GET_MODE_SIZE (ptr_mode));
3730
    TYPE_UNSIGNED (nullptr_type_node) = 1;
3731
    TYPE_PRECISION (nullptr_type_node) = GET_MODE_BITSIZE (ptr_mode);
3732
    SET_TYPE_MODE (nullptr_type_node, ptr_mode);
3733
    record_builtin_type (RID_MAX, "decltype(nullptr)", nullptr_type_node);
3734
    nullptr_node = build_int_cst (nullptr_type_node, 0);
3735
  }
3736
 
3737
  abort_fndecl
3738
    = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype);
3739
 
3740
  /* Perform other language dependent initializations.  */
3741
  init_class_processing ();
3742
  init_rtti_processing ();
3743
  init_template_processing ();
3744
 
3745
  if (flag_exceptions)
3746
    init_exception_processing ();
3747
 
3748
  if (! supports_one_only ())
3749
    flag_weak = 0;
3750
 
3751
  make_fname_decl = cp_make_fname_decl;
3752
  start_fname_decls ();
3753
 
3754
  /* Show we use EH for cleanups.  */
3755
  if (flag_exceptions)
3756
    using_eh_for_cleanups ();
3757
}
3758
 
3759
/* Generate an initializer for a function naming variable from
3760
   NAME. NAME may be NULL, to indicate a dependent name.  TYPE_P is
3761
   filled in with the type of the init.  */
3762
 
3763
tree
3764
cp_fname_init (const char* name, tree *type_p)
3765
{
3766
  tree domain = NULL_TREE;
3767
  tree type;
3768
  tree init = NULL_TREE;
3769
  size_t length = 0;
3770
 
3771
  if (name)
3772
    {
3773
      length = strlen (name);
3774
      domain = build_index_type (size_int (length));
3775
      init = build_string (length + 1, name);
3776
    }
3777
 
3778
  type = cp_build_qualified_type (char_type_node, TYPE_QUAL_CONST);
3779
  type = build_cplus_array_type (type, domain);
3780
 
3781
  *type_p = type;
3782
 
3783
  if (init)
3784
    TREE_TYPE (init) = type;
3785
  else
3786
    init = error_mark_node;
3787
 
3788
  return init;
3789
}
3790
 
3791
/* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give
3792
   the decl, LOC is the location to give the decl, NAME is the
3793
   initialization string and TYPE_DEP indicates whether NAME depended
3794
   on the type of the function. We make use of that to detect
3795
   __PRETTY_FUNCTION__ inside a template fn. This is being done lazily
3796
   at the point of first use, so we mustn't push the decl now.  */
3797
 
3798
static tree
3799
cp_make_fname_decl (location_t loc, tree id, int type_dep)
3800
{
3801
  const char *const name = (type_dep && processing_template_decl
3802
                            ? NULL : fname_as_string (type_dep));
3803
  tree type;
3804
  tree init = cp_fname_init (name, &type);
3805
  tree decl = build_decl (loc, VAR_DECL, id, type);
3806
 
3807
  if (name)
3808
    free (CONST_CAST (char *, name));
3809
 
3810
  /* As we're using pushdecl_with_scope, we must set the context.  */
3811
  DECL_CONTEXT (decl) = current_function_decl;
3812
  DECL_PRETTY_FUNCTION_P (decl) = type_dep;
3813
 
3814
  TREE_STATIC (decl) = 1;
3815
  TREE_READONLY (decl) = 1;
3816
  DECL_ARTIFICIAL (decl) = 1;
3817
 
3818
  TREE_USED (decl) = 1;
3819
 
3820
  if (current_function_decl)
3821
    {
3822
      cp_binding_level *b = current_binding_level;
3823
      if (b->kind == sk_function_parms)
3824
        return error_mark_node;
3825
      while (b->level_chain->kind != sk_function_parms)
3826
        b = b->level_chain;
3827
      pushdecl_with_scope (decl, b, /*is_friend=*/false);
3828
      cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE,
3829
                      LOOKUP_ONLYCONVERTING);
3830
    }
3831
  else
3832
    {
3833
      DECL_THIS_STATIC (decl) = true;
3834
      pushdecl_top_level_and_finish (decl, init);
3835
    }
3836
 
3837
  return decl;
3838
}
3839
 
3840
static tree
3841
builtin_function_1 (tree decl, tree context, bool is_global)
3842
{
3843
  tree          id = DECL_NAME (decl);
3844
  const char *name = IDENTIFIER_POINTER (id);
3845
 
3846
  retrofit_lang_decl (decl);
3847
 
3848
  DECL_ARTIFICIAL (decl) = 1;
3849
  SET_OVERLOADED_OPERATOR_CODE (decl, ERROR_MARK);
3850
  SET_DECL_LANGUAGE (decl, lang_c);
3851
  /* Runtime library routines are, by definition, available in an
3852
     external shared object.  */
3853
  DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
3854
  DECL_VISIBILITY_SPECIFIED (decl) = 1;
3855
 
3856
  DECL_CONTEXT (decl) = context;
3857
 
3858
  if (is_global)
3859
    pushdecl_top_level (decl);
3860
  else
3861
    pushdecl (decl);
3862
 
3863
  /* A function in the user's namespace should have an explicit
3864
     declaration before it is used.  Mark the built-in function as
3865
     anticipated but not actually declared.  */
3866
  if (name[0] != '_' || name[1] != '_')
3867
    DECL_ANTICIPATED (decl) = 1;
3868
  else if (strncmp (name + 2, "builtin_", strlen ("builtin_")) != 0)
3869
    {
3870
      size_t len = strlen (name);
3871
 
3872
      /* Treat __*_chk fortification functions as anticipated as well,
3873
         unless they are __builtin_*.  */
3874
      if (len > strlen ("___chk")
3875
          && memcmp (name + len - strlen ("_chk"),
3876
                     "_chk", strlen ("_chk") + 1) == 0)
3877
        DECL_ANTICIPATED (decl) = 1;
3878
    }
3879
 
3880
  return decl;
3881
}
3882
 
3883
tree
3884
cxx_builtin_function (tree decl)
3885
{
3886
  tree          id = DECL_NAME (decl);
3887
  const char *name = IDENTIFIER_POINTER (id);
3888
  /* All builtins that don't begin with an '_' should additionally
3889
     go in the 'std' namespace.  */
3890
  if (name[0] != '_')
3891
    {
3892
      tree decl2 = copy_node(decl);
3893
      push_namespace (std_identifier);
3894
      builtin_function_1 (decl2, std_node, false);
3895
      pop_namespace ();
3896
    }
3897
 
3898
  return builtin_function_1 (decl, NULL_TREE, false);
3899
}
3900
 
3901
/* Like cxx_builtin_function, but guarantee the function is added to the global
3902
   scope.  This is to allow function specific options to add new machine
3903
   dependent builtins when the target ISA changes via attribute((target(...)))
3904
   which saves space on program startup if the program does not use non-generic
3905
   ISAs.  */
3906
 
3907
tree
3908
cxx_builtin_function_ext_scope (tree decl)
3909
{
3910
 
3911
  tree          id = DECL_NAME (decl);
3912
  const char *name = IDENTIFIER_POINTER (id);
3913
  /* All builtins that don't begin with an '_' should additionally
3914
     go in the 'std' namespace.  */
3915
  if (name[0] != '_')
3916
    {
3917
      tree decl2 = copy_node(decl);
3918
      push_namespace (std_identifier);
3919
      builtin_function_1 (decl2, std_node, true);
3920
      pop_namespace ();
3921
    }
3922
 
3923
  return builtin_function_1 (decl, NULL_TREE, true);
3924
}
3925
 
3926
/* Generate a FUNCTION_DECL with the typical flags for a runtime library
3927
   function.  Not called directly.  */
3928
 
3929
static tree
3930
build_library_fn_1 (tree name, enum tree_code operator_code, tree type)
3931
{
3932
  tree fn = build_lang_decl (FUNCTION_DECL, name, type);
3933
  DECL_EXTERNAL (fn) = 1;
3934
  TREE_PUBLIC (fn) = 1;
3935
  DECL_ARTIFICIAL (fn) = 1;
3936
  SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
3937
  SET_DECL_LANGUAGE (fn, lang_c);
3938
  /* Runtime library routines are, by definition, available in an
3939
     external shared object.  */
3940
  DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
3941
  DECL_VISIBILITY_SPECIFIED (fn) = 1;
3942
  return fn;
3943
}
3944
 
3945
/* Returns the _DECL for a library function with C linkage.
3946
   We assume that such functions never throw; if this is incorrect,
3947
   callers should unset TREE_NOTHROW.  */
3948
 
3949
static tree
3950
build_library_fn (tree name, tree type)
3951
{
3952
  tree fn = build_library_fn_1 (name, ERROR_MARK, type);
3953
  TREE_NOTHROW (fn) = 1;
3954
  return fn;
3955
}
3956
 
3957
/* Returns the _DECL for a library function with C++ linkage.  */
3958
 
3959
static tree
3960
build_cp_library_fn (tree name, enum tree_code operator_code, tree type)
3961
{
3962
  tree fn = build_library_fn_1 (name, operator_code, type);
3963
  TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
3964
  DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
3965
  SET_DECL_LANGUAGE (fn, lang_cplusplus);
3966
  return fn;
3967
}
3968
 
3969
/* Like build_library_fn, but takes a C string instead of an
3970
   IDENTIFIER_NODE.  */
3971
 
3972
tree
3973
build_library_fn_ptr (const char* name, tree type)
3974
{
3975
  return build_library_fn (get_identifier (name), type);
3976
}
3977
 
3978
/* Like build_cp_library_fn, but takes a C string instead of an
3979
   IDENTIFIER_NODE.  */
3980
 
3981
tree
3982
build_cp_library_fn_ptr (const char* name, tree type)
3983
{
3984
  return build_cp_library_fn (get_identifier (name), ERROR_MARK, type);
3985
}
3986
 
3987
/* Like build_library_fn, but also pushes the function so that we will
3988
   be able to find it via IDENTIFIER_GLOBAL_VALUE.  Also, the function
3989
   may throw exceptions listed in RAISES.  */
3990
 
3991
tree
3992
push_library_fn (tree name, tree type, tree raises)
3993
{
3994
  tree fn;
3995
 
3996
  if (raises)
3997
    type = build_exception_variant (type, raises);
3998
 
3999
  fn = build_library_fn (name, type);
4000
  pushdecl_top_level (fn);
4001
  return fn;
4002
}
4003
 
4004
/* Like build_cp_library_fn, but also pushes the function so that it
4005
   will be found by normal lookup.  */
4006
 
4007
static tree
4008
push_cp_library_fn (enum tree_code operator_code, tree type)
4009
{
4010
  tree fn = build_cp_library_fn (ansi_opname (operator_code),
4011
                                 operator_code,
4012
                                 type);
4013
  pushdecl (fn);
4014
  if (flag_tm)
4015
    apply_tm_attr (fn, get_identifier ("transaction_safe"));
4016
  return fn;
4017
}
4018
 
4019
/* Like push_library_fn, but takes a TREE_LIST of parm types rather than
4020
   a FUNCTION_TYPE.  */
4021
 
4022
tree
4023
push_void_library_fn (tree name, tree parmtypes)
4024
{
4025
  tree type = build_function_type (void_type_node, parmtypes);
4026
  return push_library_fn (name, type, NULL_TREE);
4027
}
4028
 
4029
/* Like push_library_fn, but also note that this function throws
4030
   and does not return.  Used for __throw_foo and the like.  */
4031
 
4032
tree
4033
push_throw_library_fn (tree name, tree type)
4034
{
4035
  tree fn = push_library_fn (name, type, NULL_TREE);
4036
  TREE_THIS_VOLATILE (fn) = 1;
4037
  TREE_NOTHROW (fn) = 0;
4038
  return fn;
4039
}
4040
 
4041
/* When we call finish_struct for an anonymous union, we create
4042
   default copy constructors and such.  But, an anonymous union
4043
   shouldn't have such things; this function undoes the damage to the
4044
   anonymous union type T.
4045
 
4046
   (The reason that we create the synthesized methods is that we don't
4047
   distinguish `union { int i; }' from `typedef union { int i; } U'.
4048
   The first is an anonymous union; the second is just an ordinary
4049
   union type.)  */
4050
 
4051
void
4052
fixup_anonymous_aggr (tree t)
4053
{
4054
  tree *q;
4055
 
4056
  /* Wipe out memory of synthesized methods.  */
4057
  TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
4058
  TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
4059
  TYPE_HAS_COPY_CTOR (t) = 0;
4060
  TYPE_HAS_CONST_COPY_CTOR (t) = 0;
4061
  TYPE_HAS_COPY_ASSIGN (t) = 0;
4062
  TYPE_HAS_CONST_COPY_ASSIGN (t) = 0;
4063
 
4064
  /* Splice the implicitly generated functions out of the TYPE_METHODS
4065
     list.  */
4066
  q = &TYPE_METHODS (t);
4067
  while (*q)
4068
    {
4069
      if (DECL_ARTIFICIAL (*q))
4070
        *q = TREE_CHAIN (*q);
4071
      else
4072
        q = &DECL_CHAIN (*q);
4073
    }
4074
 
4075
  /* ISO C++ 9.5.3.  Anonymous unions may not have function members.  */
4076
  if (TYPE_METHODS (t))
4077
    {
4078
      tree decl = TYPE_MAIN_DECL (t);
4079
 
4080
      if (TREE_CODE (t) != UNION_TYPE)
4081
        error_at (DECL_SOURCE_LOCATION (decl),
4082
                  "an anonymous struct cannot have function members");
4083
      else
4084
        error_at (DECL_SOURCE_LOCATION (decl),
4085
                  "an anonymous union cannot have function members");
4086
    }
4087
 
4088
  /* Anonymous aggregates cannot have fields with ctors, dtors or complex
4089
     assignment operators (because they cannot have these methods themselves).
4090
     For anonymous unions this is already checked because they are not allowed
4091
     in any union, otherwise we have to check it.  */
4092
  if (TREE_CODE (t) != UNION_TYPE)
4093
    {
4094
      tree field, type;
4095
 
4096
      for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
4097
        if (TREE_CODE (field) == FIELD_DECL)
4098
          {
4099
            type = TREE_TYPE (field);
4100
            if (CLASS_TYPE_P (type))
4101
              {
4102
                if (TYPE_NEEDS_CONSTRUCTING (type))
4103
                  error ("member %q+#D with constructor not allowed "
4104
                         "in anonymous aggregate", field);
4105
                if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
4106
                  error ("member %q+#D with destructor not allowed "
4107
                         "in anonymous aggregate", field);
4108
                if (TYPE_HAS_COMPLEX_COPY_ASSIGN (type))
4109
                  error ("member %q+#D with copy assignment operator "
4110
                         "not allowed in anonymous aggregate", field);
4111
              }
4112
          }
4113
    }
4114
}
4115
 
4116
/* Make sure that a declaration with no declarator is well-formed, i.e.
4117
   just declares a tagged type or anonymous union.
4118
 
4119
   Returns the type declared; or NULL_TREE if none.  */
4120
 
4121
tree
4122
check_tag_decl (cp_decl_specifier_seq *declspecs)
4123
{
4124
  int saw_friend = declspecs->specs[(int)ds_friend] != 0;
4125
  int saw_typedef = declspecs->specs[(int)ds_typedef] != 0;
4126
  /* If a class, struct, or enum type is declared by the DECLSPECS
4127
     (i.e, if a class-specifier, enum-specifier, or non-typename
4128
     elaborated-type-specifier appears in the DECLSPECS),
4129
     DECLARED_TYPE is set to the corresponding type.  */
4130
  tree declared_type = NULL_TREE;
4131
  bool error_p = false;
4132
 
4133
  if (declspecs->multiple_types_p)
4134
    error ("multiple types in one declaration");
4135
  else if (declspecs->redefined_builtin_type)
4136
    {
4137
      if (!in_system_header)
4138
        permerror (input_location, "redeclaration of C++ built-in type %qT",
4139
                   declspecs->redefined_builtin_type);
4140
      return NULL_TREE;
4141
    }
4142
 
4143
  if (declspecs->type
4144
      && TYPE_P (declspecs->type)
4145
      && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
4146
           && MAYBE_CLASS_TYPE_P (declspecs->type))
4147
          || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
4148
    declared_type = declspecs->type;
4149
  else if (declspecs->type == error_mark_node)
4150
    error_p = true;
4151
  if (declared_type == NULL_TREE && ! saw_friend && !error_p)
4152
    permerror (input_location, "declaration does not declare anything");
4153
  else if (declared_type != NULL_TREE && type_uses_auto (declared_type))
4154
    {
4155
      error ("%<auto%> can only be specified for variables "
4156
             "or function declarations");
4157
      return error_mark_node;
4158
    }
4159
  /* Check for an anonymous union.  */
4160
  else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type))
4161
           && TYPE_ANONYMOUS_P (declared_type))
4162
    {
4163
      /* 7/3 In a simple-declaration, the optional init-declarator-list
4164
         can be omitted only when declaring a class (clause 9) or
4165
         enumeration (7.2), that is, when the decl-specifier-seq contains
4166
         either a class-specifier, an elaborated-type-specifier with
4167
         a class-key (9.1), or an enum-specifier.  In these cases and
4168
         whenever a class-specifier or enum-specifier is present in the
4169
         decl-specifier-seq, the identifiers in these specifiers are among
4170
         the names being declared by the declaration (as class-name,
4171
         enum-names, or enumerators, depending on the syntax).  In such
4172
         cases, and except for the declaration of an unnamed bit-field (9.6),
4173
         the decl-specifier-seq shall introduce one or more names into the
4174
         program, or shall redeclare a name introduced by a previous
4175
         declaration.  [Example:
4176
             enum { };                  // ill-formed
4177
             typedef class { };         // ill-formed
4178
         --end example]  */
4179
      if (saw_typedef)
4180
        {
4181
          error ("missing type-name in typedef-declaration");
4182
          return NULL_TREE;
4183
        }
4184
      /* Anonymous unions are objects, so they can have specifiers.  */;
4185
      SET_ANON_AGGR_TYPE_P (declared_type);
4186
 
4187
      if (TREE_CODE (declared_type) != UNION_TYPE && !in_system_header)
4188
        pedwarn (input_location, OPT_pedantic, "ISO C++ prohibits anonymous structs");
4189
    }
4190
 
4191
  else
4192
    {
4193
      if (declspecs->specs[(int)ds_inline]
4194
          || declspecs->specs[(int)ds_virtual])
4195
        error ("%qs can only be specified for functions",
4196
               declspecs->specs[(int)ds_inline]
4197
               ? "inline" : "virtual");
4198
      else if (saw_friend
4199
               && (!current_class_type
4200
                   || current_scope () != current_class_type))
4201
        error ("%<friend%> can only be specified inside a class");
4202
      else if (declspecs->specs[(int)ds_explicit])
4203
        error ("%<explicit%> can only be specified for constructors");
4204
      else if (declspecs->storage_class)
4205
        error ("a storage class can only be specified for objects "
4206
               "and functions");
4207
      else if (declspecs->specs[(int)ds_const]
4208
               || declspecs->specs[(int)ds_volatile]
4209
               || declspecs->specs[(int)ds_restrict]
4210
               || declspecs->specs[(int)ds_thread])
4211
        error ("qualifiers can only be specified for objects "
4212
               "and functions");
4213
      else if (saw_typedef)
4214
        warning (0, "%<typedef%> was ignored in this declaration");
4215
      else if (declspecs->specs[(int) ds_constexpr])
4216
        error ("%<constexpr%> cannot be used for type declarations");
4217
    }
4218
 
4219
  return declared_type;
4220
}
4221
 
4222
/* Called when a declaration is seen that contains no names to declare.
4223
   If its type is a reference to a structure, union or enum inherited
4224
   from a containing scope, shadow that tag name for the current scope
4225
   with a forward reference.
4226
   If its type defines a new named structure or union
4227
   or defines an enum, it is valid but we need not do anything here.
4228
   Otherwise, it is an error.
4229
 
4230
   C++: may have to grok the declspecs to learn about static,
4231
   complain for anonymous unions.
4232
 
4233
   Returns the TYPE declared -- or NULL_TREE if none.  */
4234
 
4235
tree
4236
shadow_tag (cp_decl_specifier_seq *declspecs)
4237
{
4238
  tree t = check_tag_decl (declspecs);
4239
 
4240
  if (!t)
4241
    return NULL_TREE;
4242
 
4243
  if (declspecs->attributes)
4244
    {
4245
      warning (0, "attribute ignored in declaration of %q+#T", t);
4246
      warning (0, "attribute for %q+#T must follow the %qs keyword",
4247
               t, class_key_or_enum_as_string (t));
4248
 
4249
    }
4250
 
4251
  if (maybe_process_partial_specialization (t) == error_mark_node)
4252
    return NULL_TREE;
4253
 
4254
  /* This is where the variables in an anonymous union are
4255
     declared.  An anonymous union declaration looks like:
4256
     union { ... } ;
4257
     because there is no declarator after the union, the parser
4258
     sends that declaration here.  */
4259
  if (ANON_AGGR_TYPE_P (t))
4260
    {
4261
      fixup_anonymous_aggr (t);
4262
 
4263
      if (TYPE_FIELDS (t))
4264
        {
4265
          tree decl = grokdeclarator (/*declarator=*/NULL,
4266
                                      declspecs, NORMAL, 0, NULL);
4267
          finish_anon_union (decl);
4268
        }
4269
    }
4270
 
4271
  return t;
4272
}
4273
 
4274
/* Decode a "typename", such as "int **", returning a ..._TYPE node.  */
4275
 
4276
tree
4277
groktypename (cp_decl_specifier_seq *type_specifiers,
4278
              const cp_declarator *declarator,
4279
              bool is_template_arg)
4280
{
4281
  tree attrs;
4282
  tree type;
4283
  enum decl_context context
4284
    = is_template_arg ? TEMPLATE_TYPE_ARG : TYPENAME;
4285
  attrs = type_specifiers->attributes;
4286
  type_specifiers->attributes = NULL_TREE;
4287
  type = grokdeclarator (declarator, type_specifiers, context, 0, &attrs);
4288
  if (attrs && type != error_mark_node)
4289
    {
4290
      if (CLASS_TYPE_P (type))
4291
        warning (OPT_Wattributes, "ignoring attributes applied to class type %qT "
4292
                 "outside of definition", type);
4293
      else if (MAYBE_CLASS_TYPE_P (type))
4294
        /* A template type parameter or other dependent type.  */
4295
        warning (OPT_Wattributes, "ignoring attributes applied to dependent "
4296
                 "type %qT without an associated declaration", type);
4297
      else
4298
        cplus_decl_attributes (&type, attrs, 0);
4299
    }
4300
  return type;
4301
}
4302
 
4303
/* Process a DECLARATOR for a function-scope variable declaration,
4304
   namespace-scope variable declaration, or function declaration.
4305
   (Function definitions go through start_function; class member
4306
   declarations appearing in the body of the class go through
4307
   grokfield.)  The DECL corresponding to the DECLARATOR is returned.
4308
   If an error occurs, the error_mark_node is returned instead.
4309
 
4310
   DECLSPECS are the decl-specifiers for the declaration.  INITIALIZED is
4311
   SD_INITIALIZED if an explicit initializer is present, or SD_DEFAULTED
4312
   for an explicitly defaulted function, or SD_DELETED for an explicitly
4313
   deleted function, but 0 (SD_UNINITIALIZED) if this is a variable
4314
   implicitly initialized via a default constructor.  ATTRIBUTES and
4315
   PREFIX_ATTRIBUTES are GNU attributes associated with this declaration.
4316
 
4317
   The scope represented by the context of the returned DECL is pushed
4318
   (if it is not the global namespace) and is assigned to
4319
   *PUSHED_SCOPE_P.  The caller is then responsible for calling
4320
   pop_scope on *PUSHED_SCOPE_P if it is set.  */
4321
 
4322
tree
4323
start_decl (const cp_declarator *declarator,
4324
            cp_decl_specifier_seq *declspecs,
4325
            int initialized,
4326
            tree attributes,
4327
            tree prefix_attributes,
4328
            tree *pushed_scope_p)
4329
{
4330
  tree decl;
4331
  tree context;
4332
  bool was_public;
4333
  int flags;
4334
  bool alias;
4335
 
4336
  *pushed_scope_p = NULL_TREE;
4337
 
4338
  /* An object declared as __attribute__((deprecated)) suppresses
4339
     warnings of uses of other deprecated items.  */
4340
  if (lookup_attribute ("deprecated", attributes))
4341
    deprecated_state = DEPRECATED_SUPPRESS;
4342
 
4343
  attributes = chainon (attributes, prefix_attributes);
4344
 
4345
  decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
4346
                         &attributes);
4347
 
4348
  deprecated_state = DEPRECATED_NORMAL;
4349
 
4350
  if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE
4351
      || decl == error_mark_node)
4352
    return error_mark_node;
4353
 
4354
  context = CP_DECL_CONTEXT (decl);
4355
  if (context != global_namespace)
4356
    *pushed_scope_p = push_scope (context);
4357
 
4358
  if (initialized)
4359
    /* Is it valid for this decl to have an initializer at all?
4360
       If not, set INITIALIZED to zero, which will indirectly
4361
       tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
4362
    switch (TREE_CODE (decl))
4363
      {
4364
      case TYPE_DECL:
4365
        error ("typedef %qD is initialized (use decltype instead)", decl);
4366
        return error_mark_node;
4367
 
4368
      case FUNCTION_DECL:
4369
        if (initialized == SD_DELETED)
4370
          /* We'll handle the rest of the semantics later, but we need to
4371
             set this now so it's visible to duplicate_decls.  */
4372
          DECL_DELETED_FN (decl) = 1;
4373
        break;
4374
 
4375
      default:
4376
        break;
4377
      }
4378
 
4379
  if (initialized)
4380
    {
4381
      if (! toplevel_bindings_p ()
4382
          && DECL_EXTERNAL (decl))
4383
        warning (0, "declaration of %q#D has %<extern%> and is initialized",
4384
                 decl);
4385
      DECL_EXTERNAL (decl) = 0;
4386
      if (toplevel_bindings_p ())
4387
        TREE_STATIC (decl) = 1;
4388
    }
4389
  alias = lookup_attribute ("alias", DECL_ATTRIBUTES (decl)) != 0;
4390
 
4391
  if (alias && TREE_CODE (decl) == FUNCTION_DECL)
4392
    record_key_method_defined (decl);
4393
 
4394
  /* If this is a typedef that names the class for linkage purposes
4395
     (7.1.3p8), apply any attributes directly to the type.  */
4396
  if (TREE_CODE (decl) == TYPE_DECL
4397
      && TAGGED_TYPE_P (TREE_TYPE (decl))
4398
      && decl == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl))))
4399
    flags = ATTR_FLAG_TYPE_IN_PLACE;
4400
  else
4401
    flags = 0;
4402
 
4403
  /* Set attributes here so if duplicate decl, will have proper attributes.  */
4404
  cplus_decl_attributes (&decl, attributes, flags);
4405
 
4406
  /* Dllimported symbols cannot be defined.  Static data members (which
4407
     can be initialized in-class and dllimported) go through grokfield,
4408
     not here, so we don't need to exclude those decls when checking for
4409
     a definition.  */
4410
  if (initialized && DECL_DLLIMPORT_P (decl))
4411
    {
4412
      error ("definition of %q#D is marked %<dllimport%>", decl);
4413
      DECL_DLLIMPORT_P (decl) = 0;
4414
    }
4415
 
4416
  /* If #pragma weak was used, mark the decl weak now.  */
4417
  maybe_apply_pragma_weak (decl);
4418
 
4419
  if (TREE_CODE (decl) == FUNCTION_DECL
4420
      && DECL_DECLARED_INLINE_P (decl)
4421
      && DECL_UNINLINABLE (decl)
4422
      && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
4423
    warning (0, "inline function %q+D given attribute noinline", decl);
4424
 
4425
  if (TYPE_P (context) && COMPLETE_TYPE_P (complete_type (context)))
4426
    {
4427
      if (TREE_CODE (decl) == VAR_DECL)
4428
        {
4429
          tree field = lookup_field (context, DECL_NAME (decl), 0, false);
4430
          if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
4431
            error ("%q#D is not a static member of %q#T", decl, context);
4432
          else
4433
            {
4434
              if (DECL_CONTEXT (field) != context)
4435
                {
4436
                  if (!same_type_p (DECL_CONTEXT (field), context))
4437
                    permerror (input_location, "ISO C++ does not permit %<%T::%D%> "
4438
                               "to be defined as %<%T::%D%>",
4439
                               DECL_CONTEXT (field), DECL_NAME (decl),
4440
                               context, DECL_NAME (decl));
4441
                  DECL_CONTEXT (decl) = DECL_CONTEXT (field);
4442
                }
4443
              if (processing_specialization
4444
                  && template_class_depth (context) == 0
4445
                  && CLASSTYPE_TEMPLATE_SPECIALIZATION (context))
4446
                error ("template header not allowed in member definition "
4447
                       "of explicitly specialized class");
4448
              /* Static data member are tricky; an in-class initialization
4449
                 still doesn't provide a definition, so the in-class
4450
                 declaration will have DECL_EXTERNAL set, but will have an
4451
                 initialization.  Thus, duplicate_decls won't warn
4452
                 about this situation, and so we check here.  */
4453
              if (initialized && DECL_INITIALIZED_IN_CLASS_P (field))
4454
                error ("duplicate initialization of %qD", decl);
4455
              if (duplicate_decls (decl, field, /*newdecl_is_friend=*/false))
4456
                decl = field;
4457
              if (declspecs->specs[(int) ds_constexpr]
4458
                  && !DECL_DECLARED_CONSTEXPR_P (field))
4459
                error ("%qD declared %<constexpr%> outside its class", field);
4460
            }
4461
        }
4462
      else
4463
        {
4464
          tree field = check_classfn (context, decl,
4465
                                      (processing_template_decl
4466
                                       > template_class_depth (context))
4467
                                      ? current_template_parms
4468
                                      : NULL_TREE);
4469
          if (field && field != error_mark_node
4470
              && duplicate_decls (decl, field,
4471
                                 /*newdecl_is_friend=*/false))
4472
            decl = field;
4473
        }
4474
 
4475
      /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set.  */
4476
      DECL_IN_AGGR_P (decl) = 0;
4477
      /* Do not mark DECL as an explicit specialization if it was not
4478
         already marked as an instantiation; a declaration should
4479
         never be marked as a specialization unless we know what
4480
         template is being specialized.  */
4481
      if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
4482
        {
4483
          SET_DECL_TEMPLATE_SPECIALIZATION (decl);
4484
 
4485
          /* [temp.expl.spec] An explicit specialization of a static data
4486
             member of a template is a definition if the declaration
4487
             includes an initializer; otherwise, it is a declaration.
4488
 
4489
             We check for processing_specialization so this only applies
4490
             to the new specialization syntax.  */
4491
          if (!initialized && processing_specialization)
4492
            DECL_EXTERNAL (decl) = 1;
4493
        }
4494
 
4495
      if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl)
4496
          /* Aliases are definitions. */
4497
          && !alias)
4498
        permerror (input_location, "declaration of %q#D outside of class is not definition",
4499
                   decl);
4500
    }
4501
 
4502
  was_public = TREE_PUBLIC (decl);
4503
 
4504
  /* Enter this declaration into the symbol table.  */
4505
  decl = maybe_push_decl (decl);
4506
 
4507
  if (processing_template_decl)
4508
    decl = push_template_decl (decl);
4509
  if (decl == error_mark_node)
4510
    return error_mark_node;
4511
 
4512
  /* Tell the back end to use or not use .common as appropriate.  If we say
4513
     -fconserve-space, we want this to save .data space, at the expense of
4514
     wrong semantics.  If we say -fno-conserve-space, we want this to
4515
     produce errors about redefs; to do this we force variables into the
4516
     data segment.  */
4517
  if (flag_conserve_space
4518
      && TREE_CODE (decl) == VAR_DECL
4519
      && TREE_PUBLIC (decl)
4520
      && !DECL_THREAD_LOCAL_P (decl)
4521
      && !have_global_bss_p ())
4522
    DECL_COMMON (decl) = 1;
4523
 
4524
  if (TREE_CODE (decl) == VAR_DECL
4525
      && DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) && !was_public
4526
      && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl))
4527
    {
4528
      /* This is a const variable with implicit 'static'.  Set
4529
         DECL_THIS_STATIC so we can tell it from variables that are
4530
         !TREE_PUBLIC because of the anonymous namespace.  */
4531
      gcc_assert (CP_TYPE_CONST_P (TREE_TYPE (decl)) || errorcount);
4532
      DECL_THIS_STATIC (decl) = 1;
4533
    }
4534
 
4535
  if (!processing_template_decl && TREE_CODE (decl) == VAR_DECL)
4536
    start_decl_1 (decl, initialized);
4537
 
4538
  return decl;
4539
}
4540
 
4541
/* Process the declaration of a variable DECL.  INITIALIZED is true
4542
   iff DECL is explicitly initialized.  (INITIALIZED is false if the
4543
   variable is initialized via an implicitly-called constructor.)
4544
   This function must be called for ordinary variables (including, for
4545
   example, implicit instantiations of templates), but must not be
4546
   called for template declarations.  */
4547
 
4548
void
4549
start_decl_1 (tree decl, bool initialized)
4550
{
4551
  tree type;
4552
  bool complete_p;
4553
  bool aggregate_definition_p;
4554
 
4555
  gcc_assert (!processing_template_decl);
4556
 
4557
  if (error_operand_p (decl))
4558
    return;
4559
 
4560
  gcc_assert (TREE_CODE (decl) == VAR_DECL);
4561
 
4562
  type = TREE_TYPE (decl);
4563
  complete_p = COMPLETE_TYPE_P (type);
4564
  aggregate_definition_p = MAYBE_CLASS_TYPE_P (type) && !DECL_EXTERNAL (decl);
4565
 
4566
  /* If an explicit initializer is present, or if this is a definition
4567
     of an aggregate, then we need a complete type at this point.
4568
     (Scalars are always complete types, so there is nothing to
4569
     check.)  This code just sets COMPLETE_P; errors (if necessary)
4570
     are issued below.  */
4571
  if ((initialized || aggregate_definition_p)
4572
      && !complete_p
4573
      && COMPLETE_TYPE_P (complete_type (type)))
4574
    {
4575
      complete_p = true;
4576
      /* We will not yet have set TREE_READONLY on DECL if the type
4577
         was "const", but incomplete, before this point.  But, now, we
4578
         have a complete type, so we can try again.  */
4579
      cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
4580
    }
4581
 
4582
  if (initialized)
4583
    /* Is it valid for this decl to have an initializer at all?  */
4584
    {
4585
      /* Don't allow initializations for incomplete types except for
4586
         arrays which might be completed by the initialization.  */
4587
      if (complete_p)
4588
        ;                       /* A complete type is ok.  */
4589
      else if (type_uses_auto (type))
4590
        ;                       /* An auto type is ok.  */
4591
      else if (TREE_CODE (type) != ARRAY_TYPE)
4592
        {
4593
          error ("variable %q#D has initializer but incomplete type", decl);
4594
          type = TREE_TYPE (decl) = error_mark_node;
4595
        }
4596
      else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
4597
        {
4598
          if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
4599
            error ("elements of array %q#D have incomplete type", decl);
4600
          /* else we already gave an error in start_decl.  */
4601
        }
4602
    }
4603
  else if (aggregate_definition_p && !complete_p)
4604
    {
4605
      if (type_uses_auto (type))
4606
        error ("declaration of %q#D has no initializer", decl);
4607
      else
4608
        error ("aggregate %q#D has incomplete type and cannot be defined",
4609
               decl);
4610
      /* Change the type so that assemble_variable will give
4611
         DECL an rtl we can live with: (mem (const_int 0)).  */
4612
      type = TREE_TYPE (decl) = error_mark_node;
4613
    }
4614
 
4615
  /* Create a new scope to hold this declaration if necessary.
4616
     Whether or not a new scope is necessary cannot be determined
4617
     until after the type has been completed; if the type is a
4618
     specialization of a class template it is not until after
4619
     instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
4620
     will be set correctly.  */
4621
  maybe_push_cleanup_level (type);
4622
}
4623
 
4624
/* Handle initialization of references.  DECL, TYPE, and INIT have the
4625
   same meaning as in cp_finish_decl.  *CLEANUP must be NULL on entry,
4626
   but will be set to a new CLEANUP_STMT if a temporary is created
4627
   that must be destroyed subsequently.
4628
 
4629
   Returns an initializer expression to use to initialize DECL, or
4630
   NULL if the initialization can be performed statically.
4631
 
4632
   Quotes on semantics can be found in ARM 8.4.3.  */
4633
 
4634
static tree
4635
grok_reference_init (tree decl, tree type, tree init, int flags)
4636
{
4637
  if (init == NULL_TREE)
4638
    {
4639
      if ((DECL_LANG_SPECIFIC (decl) == 0
4640
           || DECL_IN_AGGR_P (decl) == 0)
4641
          && ! DECL_THIS_EXTERN (decl))
4642
        error ("%qD declared as reference but not initialized", decl);
4643
      return NULL_TREE;
4644
    }
4645
 
4646
  if (TREE_CODE (init) == TREE_LIST)
4647
    init = build_x_compound_expr_from_list (init, ELK_INIT,
4648
                                            tf_warning_or_error);
4649
 
4650
  if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
4651
      && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
4652
    /* Note: default conversion is only called in very special cases.  */
4653
    init = decay_conversion (init);
4654
 
4655
  /* Convert INIT to the reference type TYPE.  This may involve the
4656
     creation of a temporary, whose lifetime must be the same as that
4657
     of the reference.  If so, a DECL_EXPR for the temporary will be
4658
     added just after the DECL_EXPR for DECL.  That's why we don't set
4659
     DECL_INITIAL for local references (instead assigning to them
4660
     explicitly); we need to allow the temporary to be initialized
4661
     first.  */
4662
  return initialize_reference (type, init, flags,
4663
                               tf_warning_or_error);
4664
}
4665
 
4666
/* Designated initializers in arrays are not supported in GNU C++.
4667
   The parser cannot detect this error since it does not know whether
4668
   a given brace-enclosed initializer is for a class type or for an
4669
   array.  This function checks that CE does not use a designated
4670
   initializer.  If it does, an error is issued.  Returns true if CE
4671
   is valid, i.e., does not have a designated initializer.  */
4672
 
4673
static bool
4674
check_array_designated_initializer (const constructor_elt *ce,
4675
                                    unsigned HOST_WIDE_INT index)
4676
{
4677
  /* Designated initializers for array elements are not supported.  */
4678
  if (ce->index)
4679
    {
4680
      /* The parser only allows identifiers as designated
4681
         initializers.  */
4682
      if (ce->index == error_mark_node)
4683
        error ("name used in a GNU-style designated "
4684
               "initializer for an array");
4685
      else if (TREE_CODE (ce->index) == INTEGER_CST)
4686
        {
4687
          /* A C99 designator is OK if it matches the current index.  */
4688
          if (TREE_INT_CST_LOW (ce->index) == index)
4689
            return true;
4690
          else
4691
            sorry ("non-trivial designated initializers not supported");
4692
        }
4693
      else
4694
        {
4695
          gcc_assert (TREE_CODE (ce->index) == IDENTIFIER_NODE);
4696
          error ("name %qD used in a GNU-style designated "
4697
                 "initializer for an array", ce->index);
4698
        }
4699
      return false;
4700
    }
4701
 
4702
  return true;
4703
}
4704
 
4705
/* When parsing `int a[] = {1, 2};' we don't know the size of the
4706
   array until we finish parsing the initializer.  If that's the
4707
   situation we're in, update DECL accordingly.  */
4708
 
4709
static void
4710
maybe_deduce_size_from_array_init (tree decl, tree init)
4711
{
4712
  tree type = TREE_TYPE (decl);
4713
 
4714
  if (TREE_CODE (type) == ARRAY_TYPE
4715
      && TYPE_DOMAIN (type) == NULL_TREE
4716
      && TREE_CODE (decl) != TYPE_DECL)
4717
    {
4718
      /* do_default is really a C-ism to deal with tentative definitions.
4719
         But let's leave it here to ease the eventual merge.  */
4720
      int do_default = !DECL_EXTERNAL (decl);
4721
      tree initializer = init ? init : DECL_INITIAL (decl);
4722
      int failure = 0;
4723
 
4724
      /* Check that there are no designated initializers in INIT, as
4725
         those are not supported in GNU C++, and as the middle-end
4726
         will crash if presented with a non-numeric designated
4727
         initializer.  */
4728
      if (initializer && TREE_CODE (initializer) == CONSTRUCTOR)
4729
        {
4730
          VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initializer);
4731
          constructor_elt *ce;
4732
          HOST_WIDE_INT i;
4733
          FOR_EACH_VEC_ELT (constructor_elt, v, i, ce)
4734
            if (!check_array_designated_initializer (ce, i))
4735
              failure = 1;
4736
        }
4737
 
4738
      if (!failure)
4739
        {
4740
          failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
4741
                                            do_default);
4742
          if (failure == 1)
4743
            {
4744
              error ("initializer fails to determine size of %qD", decl);
4745
              TREE_TYPE (decl) = error_mark_node;
4746
            }
4747
          else if (failure == 2)
4748
            {
4749
              if (do_default)
4750
                {
4751
                  error ("array size missing in %qD", decl);
4752
                  TREE_TYPE (decl) = error_mark_node;
4753
                }
4754
              /* If a `static' var's size isn't known, make it extern as
4755
                 well as static, so it does not get allocated.  If it's not
4756
                 `static', then don't mark it extern; finish_incomplete_decl
4757
                 will give it a default size and it will get allocated.  */
4758
              else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
4759
                DECL_EXTERNAL (decl) = 1;
4760
            }
4761
          else if (failure == 3)
4762
            {
4763
              error ("zero-size array %qD", decl);
4764
              TREE_TYPE (decl) = error_mark_node;
4765
            }
4766
        }
4767
 
4768
      cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
4769
 
4770
      relayout_decl (decl);
4771
    }
4772
}
4773
 
4774
/* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
4775
   any appropriate error messages regarding the layout.  */
4776
 
4777
static void
4778
layout_var_decl (tree decl)
4779
{
4780
  tree type;
4781
 
4782
  type = TREE_TYPE (decl);
4783
  if (type == error_mark_node)
4784
    return;
4785
 
4786
  /* If we haven't already layed out this declaration, do so now.
4787
     Note that we must not call complete type for an external object
4788
     because it's type might involve templates that we are not
4789
     supposed to instantiate yet.  (And it's perfectly valid to say
4790
     `extern X x' for some incomplete type `X'.)  */
4791
  if (!DECL_EXTERNAL (decl))
4792
    complete_type (type);
4793
  if (!DECL_SIZE (decl)
4794
      && TREE_TYPE (decl) != error_mark_node
4795
      && (COMPLETE_TYPE_P (type)
4796
          || (TREE_CODE (type) == ARRAY_TYPE
4797
              && !TYPE_DOMAIN (type)
4798
              && COMPLETE_TYPE_P (TREE_TYPE (type)))))
4799
    layout_decl (decl, 0);
4800
 
4801
  if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
4802
    {
4803
      /* An automatic variable with an incomplete type: that is an error.
4804
         Don't talk about array types here, since we took care of that
4805
         message in grokdeclarator.  */
4806
      error ("storage size of %qD isn%'t known", decl);
4807
      TREE_TYPE (decl) = error_mark_node;
4808
    }
4809
#if 0
4810
  /* Keep this code around in case we later want to control debug info
4811
     based on whether a type is "used".  (jason 1999-11-11) */
4812
 
4813
  else if (!DECL_EXTERNAL (decl) && MAYBE_CLASS_TYPE_P (ttype))
4814
    /* Let debugger know it should output info for this type.  */
4815
    note_debug_info_needed (ttype);
4816
 
4817
  if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
4818
    note_debug_info_needed (DECL_CONTEXT (decl));
4819
#endif
4820
 
4821
  if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
4822
      && DECL_SIZE (decl) != NULL_TREE
4823
      && ! TREE_CONSTANT (DECL_SIZE (decl)))
4824
    {
4825
      if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
4826
        constant_expression_warning (DECL_SIZE (decl));
4827
      else
4828
        {
4829
          error ("storage size of %qD isn%'t constant", decl);
4830
          TREE_TYPE (decl) = error_mark_node;
4831
        }
4832
    }
4833
}
4834
 
4835
/* If a local static variable is declared in an inline function, or if
4836
   we have a weak definition, we must endeavor to create only one
4837
   instance of the variable at link-time.  */
4838
 
4839
void
4840
maybe_commonize_var (tree decl)
4841
{
4842
  /* Static data in a function with comdat linkage also has comdat
4843
     linkage.  */
4844
  if (TREE_STATIC (decl)
4845
      /* Don't mess with __FUNCTION__.  */
4846
      && ! DECL_ARTIFICIAL (decl)
4847
      && DECL_FUNCTION_SCOPE_P (decl)
4848
      && vague_linkage_p (DECL_CONTEXT (decl)))
4849
    {
4850
      if (flag_weak)
4851
        {
4852
          /* With weak symbols, we simply make the variable COMDAT;
4853
             that will cause copies in multiple translations units to
4854
             be merged.  */
4855
          comdat_linkage (decl);
4856
        }
4857
      else
4858
        {
4859
          if (DECL_INITIAL (decl) == NULL_TREE
4860
              || DECL_INITIAL (decl) == error_mark_node)
4861
            {
4862
              /* Without weak symbols, we can use COMMON to merge
4863
                 uninitialized variables.  */
4864
              TREE_PUBLIC (decl) = 1;
4865
              DECL_COMMON (decl) = 1;
4866
            }
4867
          else
4868
            {
4869
              /* While for initialized variables, we must use internal
4870
                 linkage -- which means that multiple copies will not
4871
                 be merged.  */
4872
              TREE_PUBLIC (decl) = 0;
4873
              DECL_COMMON (decl) = 0;
4874
              warning_at (input_location, 0,
4875
                          "sorry: semantics of inline function static "
4876
                          "data %q+#D are wrong (you%'ll wind up "
4877
                          "with multiple copies)", decl);
4878
              warning_at (DECL_SOURCE_LOCATION (decl), 0,
4879
                          "  you can work around this by removing "
4880
                          "the initializer");
4881
            }
4882
        }
4883
    }
4884
  else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
4885
    /* Set it up again; we might have set DECL_INITIAL since the last
4886
       time.  */
4887
    comdat_linkage (decl);
4888
}
4889
 
4890
/* Issue an error message if DECL is an uninitialized const variable.  */
4891
 
4892
static void
4893
check_for_uninitialized_const_var (tree decl)
4894
{
4895
  tree type = strip_array_types (TREE_TYPE (decl));
4896
 
4897
  /* ``Unless explicitly declared extern, a const object does not have
4898
     external linkage and must be initialized. ($8.4; $12.1)'' ARM
4899
     7.1.6 */
4900
  if (TREE_CODE (decl) == VAR_DECL
4901
      && TREE_CODE (type) != REFERENCE_TYPE
4902
      && CP_TYPE_CONST_P (type)
4903
      && !DECL_INITIAL (decl))
4904
    {
4905
      tree field = default_init_uninitialized_part (type);
4906
      if (!field)
4907
        return;
4908
 
4909
      permerror (DECL_SOURCE_LOCATION (decl),
4910
                 "uninitialized const %qD", decl);
4911
 
4912
      if (CLASS_TYPE_P (type))
4913
        {
4914
          tree defaulted_ctor;
4915
 
4916
          inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
4917
                  "%q#T has no user-provided default constructor", type);
4918
          defaulted_ctor = in_class_defaulted_default_constructor (type);
4919
          if (defaulted_ctor)
4920
            inform (DECL_SOURCE_LOCATION (defaulted_ctor),
4921
                    "constructor is not user-provided because it is "
4922
                    "explicitly defaulted in the class body");
4923
          inform (0, "and the implicitly-defined constructor does not "
4924
                  "initialize %q+#D", field);
4925
        }
4926
    }
4927
}
4928
 
4929
/* Structure holding the current initializer being processed by reshape_init.
4930
   CUR is a pointer to the current element being processed, END is a pointer
4931
   after the last element present in the initializer.  */
4932
typedef struct reshape_iterator_t
4933
{
4934
  constructor_elt *cur;
4935
  constructor_elt *end;
4936
} reshape_iter;
4937
 
4938
static tree reshape_init_r (tree, reshape_iter *, bool, tsubst_flags_t);
4939
 
4940
/* FIELD is a FIELD_DECL or NULL.  In the former case, the value
4941
   returned is the next FIELD_DECL (possibly FIELD itself) that can be
4942
   initialized.  If there are no more such fields, the return value
4943
   will be NULL.  */
4944
 
4945
tree
4946
next_initializable_field (tree field)
4947
{
4948
  while (field
4949
         && (TREE_CODE (field) != FIELD_DECL
4950
             || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
4951
             || DECL_ARTIFICIAL (field)))
4952
    field = DECL_CHAIN (field);
4953
 
4954
  return field;
4955
}
4956
 
4957
/* Subroutine of reshape_init_array and reshape_init_vector, which does
4958
   the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
4959
   INTEGER_CST representing the size of the array minus one (the maximum index),
4960
   or NULL_TREE if the array was declared without specifying the size. D is
4961
   the iterator within the constructor.  */
4962
 
4963
static tree
4964
reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d,
4965
                      tsubst_flags_t complain)
4966
{
4967
  tree new_init;
4968
  bool sized_array_p = (max_index != NULL_TREE);
4969
  unsigned HOST_WIDE_INT max_index_cst = 0;
4970
  unsigned HOST_WIDE_INT index;
4971
 
4972
  /* The initializer for an array is always a CONSTRUCTOR.  */
4973
  new_init = build_constructor (init_list_type_node, NULL);
4974
 
4975
  if (sized_array_p)
4976
    {
4977
      /* Minus 1 is used for zero sized arrays.  */
4978
      if (integer_all_onesp (max_index))
4979
        return new_init;
4980
 
4981
      if (host_integerp (max_index, 1))
4982
        max_index_cst = tree_low_cst (max_index, 1);
4983
      /* sizetype is sign extended, not zero extended.  */
4984
      else
4985
        max_index_cst = tree_low_cst (fold_convert (size_type_node, max_index),
4986
                                      1);
4987
    }
4988
 
4989
  /* Loop until there are no more initializers.  */
4990
  for (index = 0;
4991
       d->cur != d->end && (!sized_array_p || index <= max_index_cst);
4992
       ++index)
4993
    {
4994
      tree elt_init;
4995
 
4996
      check_array_designated_initializer (d->cur, index);
4997
      elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false,
4998
                                 complain);
4999
      if (elt_init == error_mark_node)
5000
        return error_mark_node;
5001
      CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init),
5002
                              size_int (index), elt_init);
5003
      if (!TREE_CONSTANT (elt_init))
5004
        TREE_CONSTANT (new_init) = false;
5005
    }
5006
 
5007
  return new_init;
5008
}
5009
 
5010
/* Subroutine of reshape_init_r, processes the initializers for arrays.
5011
   Parameters are the same of reshape_init_r.  */
5012
 
5013
static tree
5014
reshape_init_array (tree type, reshape_iter *d, tsubst_flags_t complain)
5015
{
5016
  tree max_index = NULL_TREE;
5017
 
5018
  gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
5019
 
5020
  if (TYPE_DOMAIN (type))
5021
    max_index = array_type_nelts (type);
5022
 
5023
  return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5024
}
5025
 
5026
/* Subroutine of reshape_init_r, processes the initializers for vectors.
5027
   Parameters are the same of reshape_init_r.  */
5028
 
5029
static tree
5030
reshape_init_vector (tree type, reshape_iter *d, tsubst_flags_t complain)
5031
{
5032
  tree max_index = NULL_TREE;
5033
 
5034
  gcc_assert (TREE_CODE (type) == VECTOR_TYPE);
5035
 
5036
  if (COMPOUND_LITERAL_P (d->cur->value))
5037
    {
5038
      tree value = d->cur->value;
5039
      if (!same_type_p (TREE_TYPE (value), type))
5040
        {
5041
          if (complain & tf_error)
5042
            error ("invalid type %qT as initializer for a vector of type %qT",
5043
                   TREE_TYPE (d->cur->value), type);
5044
          value = error_mark_node;
5045
        }
5046
      ++d->cur;
5047
      return value;
5048
    }
5049
 
5050
  /* For a vector, we initialize it as an array of the appropriate size.  */
5051
  if (TREE_CODE (type) == VECTOR_TYPE)
5052
    max_index = size_int (TYPE_VECTOR_SUBPARTS (type) - 1);
5053
 
5054
  return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5055
}
5056
 
5057
/* Subroutine of reshape_init_r, processes the initializers for classes
5058
   or union. Parameters are the same of reshape_init_r.  */
5059
 
5060
static tree
5061
reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p,
5062
                    tsubst_flags_t complain)
5063
{
5064
  tree field;
5065
  tree new_init;
5066
 
5067
  gcc_assert (CLASS_TYPE_P (type));
5068
 
5069
  /* The initializer for a class is always a CONSTRUCTOR.  */
5070
  new_init = build_constructor (init_list_type_node, NULL);
5071
  field = next_initializable_field (TYPE_FIELDS (type));
5072
 
5073
  if (!field)
5074
    {
5075
      /* [dcl.init.aggr]
5076
 
5077
        An initializer for an aggregate member that is an
5078
        empty class shall have the form of an empty
5079
        initializer-list {}.  */
5080
      if (!first_initializer_p)
5081
        {
5082
          if (complain & tf_error)
5083
            error ("initializer for %qT must be brace-enclosed", type);
5084
          return error_mark_node;
5085
        }
5086
      return new_init;
5087
    }
5088
 
5089
  /* Loop through the initializable fields, gathering initializers.  */
5090
  while (d->cur != d->end)
5091
    {
5092
      tree field_init;
5093
 
5094
      /* Handle designated initializers, as an extension.  */
5095
      if (d->cur->index)
5096
        {
5097
          if (TREE_CODE (d->cur->index) == INTEGER_CST)
5098
            {
5099
              if (complain & tf_error)
5100
                error ("%<[%E] =%> used in a GNU-style designated initializer"
5101
                       " for class %qT", d->cur->index, type);
5102
              return error_mark_node;
5103
            }
5104
 
5105
          field = lookup_field_1 (type, d->cur->index, /*want_type=*/false);
5106
 
5107
          if (!field || TREE_CODE (field) != FIELD_DECL)
5108
            {
5109
              if (complain & tf_error)
5110
                error ("%qT has no non-static data member named %qD", type,
5111
                       d->cur->index);
5112
              return error_mark_node;
5113
            }
5114
        }
5115
 
5116
      /* If we processed all the member of the class, we are done.  */
5117
      if (!field)
5118
        break;
5119
 
5120
      field_init = reshape_init_r (TREE_TYPE (field), d,
5121
                                   /*first_initializer_p=*/false, complain);
5122
      if (field_init == error_mark_node)
5123
        return error_mark_node;
5124
 
5125
      CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
5126
 
5127
      /* [dcl.init.aggr]
5128
 
5129
        When a union  is  initialized with a brace-enclosed
5130
        initializer, the braces shall only contain an
5131
        initializer for the first member of the union.  */
5132
      if (TREE_CODE (type) == UNION_TYPE)
5133
        break;
5134
 
5135
      field = next_initializable_field (DECL_CHAIN (field));
5136
    }
5137
 
5138
  return new_init;
5139
}
5140
 
5141
/* Subroutine of reshape_init_r.  We're in a context where C99 initializer
5142
   designators are not valid; either complain or return true to indicate
5143
   that reshape_init_r should return error_mark_node.  */
5144
 
5145
static bool
5146
has_designator_problem (reshape_iter *d, tsubst_flags_t complain)
5147
{
5148
  if (d->cur->index)
5149
    {
5150
      if (complain & tf_error)
5151
        error ("C99 designator %qE outside aggregate initializer",
5152
               d->cur->index);
5153
      else
5154
        return true;
5155
    }
5156
  return false;
5157
}
5158
 
5159
/* Subroutine of reshape_init, which processes a single initializer (part of
5160
   a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
5161
   iterator within the CONSTRUCTOR which points to the initializer to process.
5162
   FIRST_INITIALIZER_P is true if this is the first initializer of the
5163
   outermost CONSTRUCTOR node.  */
5164
 
5165
static tree
5166
reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p,
5167
                tsubst_flags_t complain)
5168
{
5169
  tree init = d->cur->value;
5170
 
5171
  if (error_operand_p (init))
5172
    return error_mark_node;
5173
 
5174
  if (first_initializer_p && !CP_AGGREGATE_TYPE_P (type)
5175
      && has_designator_problem (d, complain))
5176
    return error_mark_node;
5177
 
5178
  if (TREE_CODE (type) == COMPLEX_TYPE)
5179
    {
5180
      /* A complex type can be initialized from one or two initializers,
5181
         but braces are not elided.  */
5182
      d->cur++;
5183
      if (BRACE_ENCLOSED_INITIALIZER_P (init))
5184
        {
5185
          if (CONSTRUCTOR_NELTS (init) > 2)
5186
            {
5187
              if (complain & tf_error)
5188
                error ("too many initializers for %qT", type);
5189
              else
5190
                return error_mark_node;
5191
            }
5192
        }
5193
      else if (first_initializer_p && d->cur != d->end)
5194
        {
5195
          VEC(constructor_elt, gc) *v = 0;
5196
          CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, init);
5197
          CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, d->cur->value);
5198
          if (has_designator_problem (d, complain))
5199
            return error_mark_node;
5200
          d->cur++;
5201
          init = build_constructor (init_list_type_node, v);
5202
        }
5203
      return init;
5204
    }
5205
 
5206
  /* A non-aggregate type is always initialized with a single
5207
     initializer.  */
5208
  if (!CP_AGGREGATE_TYPE_P (type))
5209
    {
5210
      /* It is invalid to initialize a non-aggregate type with a
5211
         brace-enclosed initializer before C++0x.
5212
         We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
5213
         of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
5214
         a CONSTRUCTOR (with a record type).  */
5215
      if (TREE_CODE (init) == CONSTRUCTOR
5216
          && BRACE_ENCLOSED_INITIALIZER_P (init))  /* p7626.C */
5217
        {
5218
          if (SCALAR_TYPE_P (type))
5219
            {
5220
              if (complain & tf_error)
5221
                error ("braces around scalar initializer for type %qT", type);
5222
              init = error_mark_node;
5223
            }
5224
          else
5225
            maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5226
        }
5227
 
5228
      d->cur++;
5229
      return init;
5230
    }
5231
 
5232
  /* [dcl.init.aggr]
5233
 
5234
     All implicit type conversions (clause _conv_) are considered when
5235
     initializing the aggregate member with an initializer from an
5236
     initializer-list.  If the initializer can initialize a member,
5237
     the member is initialized.  Otherwise, if the member is itself a
5238
     non-empty subaggregate, brace elision is assumed and the
5239
     initializer is considered for the initialization of the first
5240
     member of the subaggregate.  */
5241
  if (TREE_CODE (init) != CONSTRUCTOR
5242
      /* But don't try this for the first initializer, since that would be
5243
         looking through the outermost braces; A a2 = { a1 }; is not a
5244
         valid aggregate initialization.  */
5245
      && !first_initializer_p
5246
      && (same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (init))
5247
          || can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL)))
5248
    {
5249
      d->cur++;
5250
      return init;
5251
    }
5252
 
5253
  /* [dcl.init.string]
5254
 
5255
      A char array (whether plain char, signed char, or unsigned char)
5256
      can be initialized by a string-literal (optionally enclosed in
5257
      braces); a wchar_t array can be initialized by a wide
5258
      string-literal (optionally enclosed in braces).  */
5259
  if (TREE_CODE (type) == ARRAY_TYPE
5260
      && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
5261
    {
5262
      tree str_init = init;
5263
 
5264
      /* Strip one level of braces if and only if they enclose a single
5265
         element (as allowed by [dcl.init.string]).  */
5266
      if (!first_initializer_p
5267
          && TREE_CODE (str_init) == CONSTRUCTOR
5268
          && VEC_length (constructor_elt, CONSTRUCTOR_ELTS (str_init)) == 1)
5269
        {
5270
          str_init = VEC_index (constructor_elt,
5271
                                CONSTRUCTOR_ELTS (str_init), 0)->value;
5272
        }
5273
 
5274
      /* If it's a string literal, then it's the initializer for the array
5275
         as a whole. Otherwise, continue with normal initialization for
5276
         array types (one value per array element).  */
5277
      if (TREE_CODE (str_init) == STRING_CST)
5278
        {
5279
          if (has_designator_problem (d, complain))
5280
            return error_mark_node;
5281
          d->cur++;
5282
          return str_init;
5283
        }
5284
    }
5285
 
5286
  /* The following cases are about aggregates. If we are not within a full
5287
     initializer already, and there is not a CONSTRUCTOR, it means that there
5288
     is a missing set of braces (that is, we are processing the case for
5289
     which reshape_init exists).  */
5290
  if (!first_initializer_p)
5291
    {
5292
      if (TREE_CODE (init) == CONSTRUCTOR)
5293
        {
5294
          if (TREE_TYPE (init) && TYPE_PTRMEMFUNC_P (TREE_TYPE (init)))
5295
            /* There is no need to reshape pointer-to-member function
5296
               initializers, as they are always constructed correctly
5297
               by the front end.  */
5298
           ;
5299
          else if (COMPOUND_LITERAL_P (init))
5300
          /* For a nested compound literal, there is no need to reshape since
5301
             brace elision is not allowed. Even if we decided to allow it,
5302
             we should add a call to reshape_init in finish_compound_literal,
5303
             before calling digest_init, so changing this code would still
5304
             not be necessary.  */
5305
            gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
5306
          else
5307
            {
5308
              ++d->cur;
5309
              gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5310
              return reshape_init (type, init, complain);
5311
            }
5312
        }
5313
 
5314
      warning (OPT_Wmissing_braces, "missing braces around initializer for %qT",
5315
               type);
5316
    }
5317
 
5318
  /* Dispatch to specialized routines.  */
5319
  if (CLASS_TYPE_P (type))
5320
    return reshape_init_class (type, d, first_initializer_p, complain);
5321
  else if (TREE_CODE (type) == ARRAY_TYPE)
5322
    return reshape_init_array (type, d, complain);
5323
  else if (TREE_CODE (type) == VECTOR_TYPE)
5324
    return reshape_init_vector (type, d, complain);
5325
  else
5326
    gcc_unreachable();
5327
}
5328
 
5329
/* Undo the brace-elision allowed by [dcl.init.aggr] in a
5330
   brace-enclosed aggregate initializer.
5331
 
5332
   INIT is the CONSTRUCTOR containing the list of initializers describing
5333
   a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
5334
   It may not presently match the shape of the TYPE; for example:
5335
 
5336
     struct S { int a; int b; };
5337
     struct S a[] = { 1, 2, 3, 4 };
5338
 
5339
   Here INIT will hold a VEC of four elements, rather than a
5340
   VEC of two elements, each itself a VEC of two elements.  This
5341
   routine transforms INIT from the former form into the latter.  The
5342
   revised CONSTRUCTOR node is returned.  */
5343
 
5344
tree
5345
reshape_init (tree type, tree init, tsubst_flags_t complain)
5346
{
5347
  VEC(constructor_elt, gc) *v;
5348
  reshape_iter d;
5349
  tree new_init;
5350
 
5351
  gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5352
 
5353
  v = CONSTRUCTOR_ELTS (init);
5354
 
5355
  /* An empty constructor does not need reshaping, and it is always a valid
5356
     initializer.  */
5357
  if (VEC_empty (constructor_elt, v))
5358
    return init;
5359
 
5360
  /* Recurse on this CONSTRUCTOR.  */
5361
  d.cur = VEC_index (constructor_elt, v, 0);
5362
  d.end = d.cur + VEC_length (constructor_elt, v);
5363
 
5364
  new_init = reshape_init_r (type, &d, true, complain);
5365
  if (new_init == error_mark_node)
5366
    return error_mark_node;
5367
 
5368
  /* Make sure all the element of the constructor were used. Otherwise,
5369
     issue an error about exceeding initializers.  */
5370
  if (d.cur != d.end)
5371
    {
5372
      if (complain & tf_error)
5373
        error ("too many initializers for %qT", type);
5374
      else
5375
        return error_mark_node;
5376
    }
5377
 
5378
  return new_init;
5379
}
5380
 
5381
/* Verify array initializer.  Returns true if errors have been reported.  */
5382
 
5383
bool
5384
check_array_initializer (tree decl, tree type, tree init)
5385
{
5386
  tree element_type = TREE_TYPE (type);
5387
 
5388
  /* The array type itself need not be complete, because the
5389
     initializer may tell us how many elements are in the array.
5390
     But, the elements of the array must be complete.  */
5391
  if (!COMPLETE_TYPE_P (complete_type (element_type)))
5392
    {
5393
      if (decl)
5394
        error ("elements of array %q#D have incomplete type", decl);
5395
      else
5396
        error ("elements of array %q#T have incomplete type", type);
5397
      return true;
5398
    }
5399
  /* It is not valid to initialize a VLA.  */
5400
  if (init
5401
      && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
5402
          || !TREE_CONSTANT (TYPE_SIZE (element_type))))
5403
    {
5404
      if (decl)
5405
        error ("variable-sized object %qD may not be initialized", decl);
5406
      else
5407
        error ("variable-sized compound literal");
5408
      return true;
5409
    }
5410
  return false;
5411
}
5412
 
5413
/* Subroutine of check_initializer; args are passed down from that function.
5414
   Set stmts_are_full_exprs_p to 1 across a call to build_aggr_init.  */
5415
 
5416
static tree
5417
build_aggr_init_full_exprs (tree decl, tree init, int flags)
5418
 
5419
{
5420
  gcc_assert (stmts_are_full_exprs_p ());
5421
  return build_aggr_init (decl, init, flags, tf_warning_or_error);
5422
}
5423
 
5424
/* Verify INIT (the initializer for DECL), and record the
5425
   initialization in DECL_INITIAL, if appropriate.  CLEANUP is as for
5426
   grok_reference_init.
5427
 
5428
   If the return value is non-NULL, it is an expression that must be
5429
   evaluated dynamically to initialize DECL.  */
5430
 
5431
static tree
5432
check_initializer (tree decl, tree init, int flags, VEC(tree,gc) **cleanups)
5433
{
5434
  tree type = TREE_TYPE (decl);
5435
  tree init_code = NULL;
5436
  tree extra_init = NULL_TREE;
5437
  tree core_type;
5438
 
5439
  /* Things that are going to be initialized need to have complete
5440
     type.  */
5441
  TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
5442
 
5443
  if (DECL_HAS_VALUE_EXPR_P (decl))
5444
    {
5445
      /* A variable with DECL_HAS_VALUE_EXPR_P set is just a placeholder,
5446
         it doesn't have storage to be initialized.  */
5447
      gcc_assert (init == NULL_TREE);
5448
      return NULL_TREE;
5449
    }
5450
 
5451
  if (type == error_mark_node)
5452
    /* We will have already complained.  */
5453
    return NULL_TREE;
5454
 
5455
  if (TREE_CODE (type) == ARRAY_TYPE)
5456
    {
5457
      if (check_array_initializer (decl, type, init))
5458
        return NULL_TREE;
5459
    }
5460
  else if (!COMPLETE_TYPE_P (type))
5461
    {
5462
      error ("%q#D has incomplete type", decl);
5463
      TREE_TYPE (decl) = error_mark_node;
5464
      return NULL_TREE;
5465
    }
5466
  else
5467
    /* There is no way to make a variable-sized class type in GNU C++.  */
5468
    gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
5469
 
5470
  if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
5471
    {
5472
      int init_len = VEC_length (constructor_elt, CONSTRUCTOR_ELTS (init));
5473
      if (SCALAR_TYPE_P (type))
5474
        {
5475
          if (init_len == 0)
5476
            {
5477
              maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5478
              init = build_zero_init (type, NULL_TREE, false);
5479
            }
5480
          else if (init_len != 1 && TREE_CODE (type) != COMPLEX_TYPE)
5481
            {
5482
              error ("scalar object %qD requires one element in initializer",
5483
                     decl);
5484
              TREE_TYPE (decl) = error_mark_node;
5485
              return NULL_TREE;
5486
            }
5487
        }
5488
    }
5489
 
5490
  if (TREE_CODE (decl) == CONST_DECL)
5491
    {
5492
      gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
5493
 
5494
      DECL_INITIAL (decl) = init;
5495
 
5496
      gcc_assert (init != NULL_TREE);
5497
      init = NULL_TREE;
5498
    }
5499
  else if (!init && DECL_REALLY_EXTERN (decl))
5500
    ;
5501
  else if (init || type_build_ctor_call (type)
5502
           || TREE_CODE (type) == REFERENCE_TYPE)
5503
    {
5504
      if (TREE_CODE (type) == REFERENCE_TYPE)
5505
        {
5506
          init = grok_reference_init (decl, type, init, flags);
5507
          flags |= LOOKUP_ALREADY_DIGESTED;
5508
        }
5509
      else if (!init)
5510
        check_for_uninitialized_const_var (decl);
5511
      /* Do not reshape constructors of vectors (they don't need to be
5512
         reshaped.  */
5513
      else if (BRACE_ENCLOSED_INITIALIZER_P (init))
5514
        {
5515
          if (is_std_init_list (type))
5516
            {
5517
              init = perform_implicit_conversion (type, init,
5518
                                                  tf_warning_or_error);
5519
              flags |= LOOKUP_ALREADY_DIGESTED;
5520
            }
5521
          else if (TYPE_NON_AGGREGATE_CLASS (type))
5522
            {
5523
              /* Don't reshape if the class has constructors.  */
5524
              if (cxx_dialect == cxx98)
5525
                error ("in C++98 %qD must be initialized by constructor, "
5526
                       "not by %<{...}%>",
5527
                       decl);
5528
            }
5529
          else if (TREE_CODE (type) == VECTOR_TYPE && TYPE_VECTOR_OPAQUE (type))
5530
            {
5531
              error ("opaque vector types cannot be initialized");
5532
              init = error_mark_node;
5533
            }
5534
          else
5535
            {
5536
              init = reshape_init (type, init, tf_warning_or_error);
5537
              if (SCALAR_TYPE_P (type))
5538
                check_narrowing (type, init);
5539
            }
5540
        }
5541
 
5542
      /* If DECL has an array type without a specific bound, deduce the
5543
         array size from the initializer.  */
5544
      maybe_deduce_size_from_array_init (decl, init);
5545
      type = TREE_TYPE (decl);
5546
      if (type == error_mark_node)
5547
        return NULL_TREE;
5548
 
5549
      if ((type_build_ctor_call (type) || CLASS_TYPE_P (type))
5550
          && !(flags & LOOKUP_ALREADY_DIGESTED)
5551
          && !(init && BRACE_ENCLOSED_INITIALIZER_P (init)
5552
               && CP_AGGREGATE_TYPE_P (type)))
5553
        {
5554
          init_code = build_aggr_init_full_exprs (decl, init, flags);
5555
 
5556
          /* If this is a constexpr initializer, expand_default_init will
5557
             have returned an INIT_EXPR rather than a CALL_EXPR.  In that
5558
             case, pull the initializer back out and pass it down into
5559
             store_init_value.  */
5560
          while (TREE_CODE (init_code) == EXPR_STMT
5561
                 || TREE_CODE (init_code) == CONVERT_EXPR)
5562
            init_code = TREE_OPERAND (init_code, 0);
5563
          if (TREE_CODE (init_code) == INIT_EXPR)
5564
            {
5565
              init = TREE_OPERAND (init_code, 1);
5566
              init_code = NULL_TREE;
5567
              /* Don't call digest_init; it's unnecessary and will complain
5568
                 about aggregate initialization of non-aggregate classes.  */
5569
              flags |= LOOKUP_ALREADY_DIGESTED;
5570
            }
5571
          else if (DECL_DECLARED_CONSTEXPR_P (decl))
5572
            {
5573
              /* Declared constexpr, but no suitable initializer; massage
5574
                 init appropriately so we can pass it into store_init_value
5575
                 for the error.  */
5576
              if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
5577
                init = finish_compound_literal (type, init,
5578
                                                tf_warning_or_error);
5579
              else if (CLASS_TYPE_P (type)
5580
                       && (!init || TREE_CODE (init) == TREE_LIST))
5581
                {
5582
                  init = build_functional_cast (type, init, tf_none);
5583
                  if (init != error_mark_node)
5584
                    TARGET_EXPR_DIRECT_INIT_P (init) = true;
5585
                }
5586
              init_code = NULL_TREE;
5587
            }
5588
          else
5589
            init = NULL_TREE;
5590
        }
5591
 
5592
      if (init && TREE_CODE (init) != TREE_VEC)
5593
        {
5594
          /* In aggregate initialization of a variable, each element
5595
             initialization is a full-expression because there is no
5596
             enclosing expression.  */
5597
          gcc_assert (stmts_are_full_exprs_p ());
5598
 
5599
          init_code = store_init_value (decl, init, cleanups, flags);
5600
 
5601
          if (pedantic && TREE_CODE (type) == ARRAY_TYPE
5602
              && DECL_INITIAL (decl)
5603
              && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
5604
              && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
5605
            warning (0, "array %qD initialized by parenthesized string literal %qE",
5606
                     decl, DECL_INITIAL (decl));
5607
          init = NULL;
5608
        }
5609
    }
5610
  else
5611
    {
5612
      if (CLASS_TYPE_P (core_type = strip_array_types (type))
5613
          && (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type)
5614
              || CLASSTYPE_REF_FIELDS_NEED_INIT (core_type)))
5615
        diagnose_uninitialized_cst_or_ref_member (core_type, /*using_new=*/false,
5616
                                                  /*complain=*/true);
5617
 
5618
      check_for_uninitialized_const_var (decl);
5619
    }
5620
 
5621
  if (init && init != error_mark_node)
5622
    init_code = build2 (INIT_EXPR, type, decl, init);
5623
 
5624
  if (extra_init)
5625
    init_code = add_stmt_to_compound (extra_init, init_code);
5626
 
5627
  if (init_code && DECL_IN_AGGR_P (decl))
5628
    {
5629
      static int explained = 0;
5630
 
5631
      if (cxx_dialect < cxx0x)
5632
        error ("initializer invalid for static member with constructor");
5633
      else
5634
        error ("non-constant in-class initialization invalid for static "
5635
               "member %qD", decl);
5636
      if (!explained)
5637
        {
5638
          error ("(an out of class initialization is required)");
5639
          explained = 1;
5640
        }
5641
    }
5642
 
5643
  return init_code;
5644
}
5645
 
5646
/* If DECL is not a local variable, give it RTL.  */
5647
 
5648
static void
5649
make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
5650
{
5651
  int toplev = toplevel_bindings_p ();
5652
  int defer_p;
5653
  const char *filename;
5654
 
5655
  /* Set the DECL_ASSEMBLER_NAME for the object.  */
5656
  if (asmspec)
5657
    {
5658
      /* The `register' keyword, when used together with an
5659
         asm-specification, indicates that the variable should be
5660
         placed in a particular register.  */
5661
      if (TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
5662
        {
5663
          set_user_assembler_name (decl, asmspec);
5664
          DECL_HARD_REGISTER (decl) = 1;
5665
        }
5666
      else
5667
        {
5668
          if (TREE_CODE (decl) == FUNCTION_DECL
5669
              && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
5670
            set_builtin_user_assembler_name (decl, asmspec);
5671
          set_user_assembler_name (decl, asmspec);
5672
        }
5673
    }
5674
 
5675
  /* Handle non-variables up front.  */
5676
  if (TREE_CODE (decl) != VAR_DECL)
5677
    {
5678
      rest_of_decl_compilation (decl, toplev, at_eof);
5679
      return;
5680
    }
5681
 
5682
  /* If we see a class member here, it should be a static data
5683
     member.  */
5684
  if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
5685
    {
5686
      gcc_assert (TREE_STATIC (decl));
5687
      /* An in-class declaration of a static data member should be
5688
         external; it is only a declaration, and not a definition.  */
5689
      if (init == NULL_TREE)
5690
        gcc_assert (DECL_EXTERNAL (decl) || !TREE_PUBLIC (decl));
5691
    }
5692
 
5693
  /* We don't create any RTL for local variables.  */
5694
  if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
5695
    return;
5696
 
5697
  /* We defer emission of local statics until the corresponding
5698
     DECL_EXPR is expanded.  */
5699
  defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
5700
 
5701
  /* We try to defer namespace-scope static constants so that they are
5702
     not emitted into the object file unnecessarily.  */
5703
  filename = input_filename;
5704
  if (!DECL_VIRTUAL_P (decl)
5705
      && TREE_READONLY (decl)
5706
      && DECL_INITIAL (decl) != NULL_TREE
5707
      && DECL_INITIAL (decl) != error_mark_node
5708
      && filename != NULL
5709
      && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
5710
      && toplev
5711
      && !TREE_PUBLIC (decl))
5712
    {
5713
      /* Fool with the linkage of static consts according to #pragma
5714
         interface.  */
5715
      struct c_fileinfo *finfo = get_fileinfo (filename);
5716
      if (!finfo->interface_unknown && !TREE_PUBLIC (decl))
5717
        {
5718
          TREE_PUBLIC (decl) = 1;
5719
          DECL_EXTERNAL (decl) = finfo->interface_only;
5720
        }
5721
 
5722
      defer_p = 1;
5723
    }
5724
  /* Likewise for template instantiations.  */
5725
  else if (DECL_LANG_SPECIFIC (decl)
5726
           && DECL_IMPLICIT_INSTANTIATION (decl))
5727
    defer_p = 1;
5728
 
5729
  /* If we're not deferring, go ahead and assemble the variable.  */
5730
  if (!defer_p)
5731
    rest_of_decl_compilation (decl, toplev, at_eof);
5732
}
5733
 
5734
/* walk_tree helper for wrap_temporary_cleanups, below.  */
5735
 
5736
static tree
5737
wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
5738
{
5739
  /* Stop at types or full-expression boundaries.  */
5740
  if (TYPE_P (*stmt_p)
5741
      || TREE_CODE (*stmt_p) == CLEANUP_POINT_EXPR)
5742
    {
5743
      *walk_subtrees = 0;
5744
      return NULL_TREE;
5745
    }
5746
 
5747
  if (TREE_CODE (*stmt_p) == TARGET_EXPR)
5748
    {
5749
      tree guard = (tree)data;
5750
      tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
5751
 
5752
      tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
5753
      /* Tell honor_protect_cleanup_actions to handle this as a separate
5754
         cleanup.  */
5755
      TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
5756
 
5757
      TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
5758
    }
5759
 
5760
  return NULL_TREE;
5761
}
5762
 
5763
/* We're initializing a local variable which has a cleanup GUARD.  If there
5764
   are any temporaries used in the initializer INIT of this variable, we
5765
   need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
5766
   variable will be cleaned up properly if one of them throws.
5767
 
5768
   Unfortunately, there's no way to express this properly in terms of
5769
   nesting, as the regions for the temporaries overlap the region for the
5770
   variable itself; if there are two temporaries, the variable needs to be
5771
   the first thing destroyed if either of them throws.  However, we only
5772
   want to run the variable's cleanup if it actually got constructed.  So
5773
   we need to guard the temporary cleanups with the variable's cleanup if
5774
   they are run on the normal path, but not if they are run on the
5775
   exceptional path.  We implement this by telling
5776
   honor_protect_cleanup_actions to strip the variable cleanup from the
5777
   exceptional path.  */
5778
 
5779
static void
5780
wrap_temporary_cleanups (tree init, tree guard)
5781
{
5782
  cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
5783
}
5784
 
5785
/* Generate code to initialize DECL (a local variable).  */
5786
 
5787
static void
5788
initialize_local_var (tree decl, tree init)
5789
{
5790
  tree type = TREE_TYPE (decl);
5791
  tree cleanup;
5792
  int already_used;
5793
 
5794
  gcc_assert (TREE_CODE (decl) == VAR_DECL
5795
              || TREE_CODE (decl) == RESULT_DECL);
5796
  gcc_assert (!TREE_STATIC (decl));
5797
 
5798
  if (DECL_SIZE (decl) == NULL_TREE)
5799
    {
5800
      /* If we used it already as memory, it must stay in memory.  */
5801
      DECL_INITIAL (decl) = NULL_TREE;
5802
      TREE_ADDRESSABLE (decl) = TREE_USED (decl);
5803
      return;
5804
    }
5805
 
5806
  if (type == error_mark_node)
5807
    return;
5808
 
5809
  /* Compute and store the initial value.  */
5810
  already_used = TREE_USED (decl) || TREE_USED (type);
5811
  if (TREE_USED (type))
5812
    DECL_READ_P (decl) = 1;
5813
 
5814
  /* Generate a cleanup, if necessary.  */
5815
  cleanup = cxx_maybe_build_cleanup (decl, tf_warning_or_error);
5816
 
5817
  /* Perform the initialization.  */
5818
  if (init)
5819
    {
5820
      if (TREE_CODE (init) == INIT_EXPR
5821
          && !TREE_SIDE_EFFECTS (TREE_OPERAND (init, 1)))
5822
        {
5823
          /* Stick simple initializers in DECL_INITIAL so that
5824
             -Wno-init-self works (c++/34772).  */
5825
          gcc_assert (TREE_OPERAND (init, 0) == decl);
5826
          DECL_INITIAL (decl) = TREE_OPERAND (init, 1);
5827
        }
5828
      else
5829
        {
5830
          int saved_stmts_are_full_exprs_p;
5831
 
5832
          /* If we're only initializing a single object, guard the
5833
             destructors of any temporaries used in its initializer with
5834
             its destructor.  This isn't right for arrays because each
5835
             element initialization is a full-expression.  */
5836
          if (cleanup && TREE_CODE (type) != ARRAY_TYPE)
5837
            wrap_temporary_cleanups (init, cleanup);
5838
 
5839
          gcc_assert (building_stmt_list_p ());
5840
          saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
5841
          current_stmt_tree ()->stmts_are_full_exprs_p = 1;
5842
          finish_expr_stmt (init);
5843
          current_stmt_tree ()->stmts_are_full_exprs_p =
5844
            saved_stmts_are_full_exprs_p;
5845
        }
5846
    }
5847
 
5848
  /* Set this to 0 so we can tell whether an aggregate which was
5849
     initialized was ever used.  Don't do this if it has a
5850
     destructor, so we don't complain about the 'resource
5851
     allocation is initialization' idiom.  Now set
5852
     attribute((unused)) on types so decls of that type will be
5853
     marked used. (see TREE_USED, above.)  */
5854
  if (TYPE_NEEDS_CONSTRUCTING (type)
5855
      && ! already_used
5856
      && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
5857
      && DECL_NAME (decl))
5858
    TREE_USED (decl) = 0;
5859
  else if (already_used)
5860
    TREE_USED (decl) = 1;
5861
 
5862
  if (cleanup)
5863
    finish_decl_cleanup (decl, cleanup);
5864
}
5865
 
5866
/* DECL is a VAR_DECL for a compiler-generated variable with static
5867
   storage duration (like a virtual table) whose initializer is a
5868
   compile-time constant.  Initialize the variable and provide it to the
5869
   back end.  */
5870
 
5871
void
5872
initialize_artificial_var (tree decl, VEC(constructor_elt,gc) *v)
5873
{
5874
  tree init;
5875
  gcc_assert (DECL_ARTIFICIAL (decl));
5876
  init = build_constructor (TREE_TYPE (decl), v);
5877
  gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
5878
  DECL_INITIAL (decl) = init;
5879
  DECL_INITIALIZED_P (decl) = 1;
5880
  determine_visibility (decl);
5881
  layout_var_decl (decl);
5882
  maybe_commonize_var (decl);
5883
  make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
5884
}
5885
 
5886
/* INIT is the initializer for a variable, as represented by the
5887
   parser.  Returns true iff INIT is type-dependent.  */
5888
 
5889
static bool
5890
type_dependent_init_p (tree init)
5891
{
5892
  if (TREE_CODE (init) == TREE_LIST)
5893
    /* A parenthesized initializer, e.g.: int i (3, 2); ? */
5894
    return any_type_dependent_elements_p (init);
5895
  else if (TREE_CODE (init) == CONSTRUCTOR)
5896
  /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
5897
    {
5898
      VEC(constructor_elt, gc) *elts;
5899
      size_t nelts;
5900
      size_t i;
5901
 
5902
      elts = CONSTRUCTOR_ELTS (init);
5903
      nelts = VEC_length (constructor_elt, elts);
5904
      for (i = 0; i < nelts; ++i)
5905
        if (type_dependent_init_p (VEC_index (constructor_elt,
5906
                                              elts, i)->value))
5907
          return true;
5908
    }
5909
  else
5910
    /* It must be a simple expression, e.g., int i = 3;  */
5911
    return type_dependent_expression_p (init);
5912
 
5913
  return false;
5914
}
5915
 
5916
/* INIT is the initializer for a variable, as represented by the
5917
   parser.  Returns true iff INIT is value-dependent.  */
5918
 
5919
static bool
5920
value_dependent_init_p (tree init)
5921
{
5922
  if (TREE_CODE (init) == TREE_LIST)
5923
    /* A parenthesized initializer, e.g.: int i (3, 2); ? */
5924
    return any_value_dependent_elements_p (init);
5925
  else if (TREE_CODE (init) == CONSTRUCTOR)
5926
  /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
5927
    {
5928
      VEC(constructor_elt, gc) *elts;
5929
      size_t nelts;
5930
      size_t i;
5931
 
5932
      elts = CONSTRUCTOR_ELTS (init);
5933
      nelts = VEC_length (constructor_elt, elts);
5934
      for (i = 0; i < nelts; ++i)
5935
        if (value_dependent_init_p (VEC_index (constructor_elt,
5936
                                               elts, i)->value))
5937
          return true;
5938
    }
5939
  else
5940
    /* It must be a simple expression, e.g., int i = 3;  */
5941
    return value_dependent_expression_p (init);
5942
 
5943
  return false;
5944
}
5945
 
5946
/* Finish processing of a declaration;
5947
   install its line number and initial value.
5948
   If the length of an array type is not known before,
5949
   it must be determined now, from the initial value, or it is an error.
5950
 
5951
   INIT is the initializer (if any) for DECL.  If INIT_CONST_EXPR_P is
5952
   true, then INIT is an integral constant expression.
5953
 
5954
   FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
5955
   if the (init) syntax was used.  */
5956
 
5957
void
5958
cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
5959
                tree asmspec_tree, int flags)
5960
{
5961
  tree type;
5962
  VEC(tree,gc) *cleanups = NULL;
5963
  const char *asmspec = NULL;
5964
  int was_readonly = 0;
5965
  bool var_definition_p = false;
5966
  tree auto_node;
5967
 
5968
  if (decl == error_mark_node)
5969
    return;
5970
  else if (! decl)
5971
    {
5972
      if (init)
5973
        error ("assignment (not initialization) in declaration");
5974
      return;
5975
    }
5976
 
5977
  gcc_assert (TREE_CODE (decl) != RESULT_DECL);
5978
  /* Parameters are handled by store_parm_decls, not cp_finish_decl.  */
5979
  gcc_assert (TREE_CODE (decl) != PARM_DECL);
5980
 
5981
  type = TREE_TYPE (decl);
5982
  if (type == error_mark_node)
5983
    return;
5984
 
5985
  /* If a name was specified, get the string.  */
5986
  if (at_namespace_scope_p ())
5987
    asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
5988
  if (asmspec_tree && asmspec_tree != error_mark_node)
5989
    asmspec = TREE_STRING_POINTER (asmspec_tree);
5990
 
5991
  if (current_class_type
5992
      && CP_DECL_CONTEXT (decl) == current_class_type
5993
      && TYPE_BEING_DEFINED (current_class_type)
5994
      && !CLASSTYPE_TEMPLATE_INSTANTIATION (current_class_type)
5995
      && (DECL_INITIAL (decl) || init))
5996
    DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
5997
 
5998
  auto_node = type_uses_auto (type);
5999
  if (auto_node)
6000
    {
6001
      tree d_init;
6002
      if (init == NULL_TREE)
6003
        {
6004
          error ("declaration of %q#D has no initializer", decl);
6005
          TREE_TYPE (decl) = error_mark_node;
6006
          return;
6007
        }
6008
      d_init = init;
6009
      if (TREE_CODE (d_init) == TREE_LIST)
6010
        d_init = build_x_compound_expr_from_list (d_init, ELK_INIT,
6011
                                                  tf_warning_or_error);
6012
      d_init = resolve_nondeduced_context (d_init);
6013
      type = TREE_TYPE (decl) = do_auto_deduction (type, d_init,
6014
                                                   auto_node);
6015
      if (type == error_mark_node)
6016
        return;
6017
    }
6018
 
6019
  if (!ensure_literal_type_for_constexpr_object (decl))
6020
    DECL_DECLARED_CONSTEXPR_P (decl) = 0;
6021
 
6022
  if (TREE_CODE (decl) == VAR_DECL
6023
      && DECL_CLASS_SCOPE_P (decl)
6024
      && DECL_INITIALIZED_IN_CLASS_P (decl))
6025
    check_static_variable_definition (decl, type);
6026
 
6027
  if (init && TREE_CODE (decl) == FUNCTION_DECL)
6028
    {
6029
      tree clone;
6030
      if (init == ridpointers[(int)RID_DELETE])
6031
        {
6032
          /* FIXME check this is 1st decl.  */
6033
          DECL_DELETED_FN (decl) = 1;
6034
          DECL_DECLARED_INLINE_P (decl) = 1;
6035
          DECL_INITIAL (decl) = error_mark_node;
6036
          FOR_EACH_CLONE (clone, decl)
6037
            {
6038
              DECL_DELETED_FN (clone) = 1;
6039
              DECL_DECLARED_INLINE_P (clone) = 1;
6040
              DECL_INITIAL (clone) = error_mark_node;
6041
            }
6042
          init = NULL_TREE;
6043
        }
6044
      else if (init == ridpointers[(int)RID_DEFAULT])
6045
        {
6046
          if (defaultable_fn_check (decl))
6047
            DECL_DEFAULTED_FN (decl) = 1;
6048
          else
6049
            DECL_INITIAL (decl) = NULL_TREE;
6050
        }
6051
    }
6052
 
6053
  if (init && TREE_CODE (decl) == VAR_DECL)
6054
    {
6055
      DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
6056
      /* If DECL is a reference, then we want to know whether init is a
6057
         reference constant; init_const_expr_p as passed tells us whether
6058
         it's an rvalue constant.  */
6059
      if (TREE_CODE (type) == REFERENCE_TYPE)
6060
        init_const_expr_p = potential_constant_expression (init);
6061
      if (init_const_expr_p)
6062
        {
6063
          /* Set these flags now for templates.  We'll update the flags in
6064
             store_init_value for instantiations.  */
6065
          DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
6066
          if (decl_maybe_constant_var_p (decl))
6067
            TREE_CONSTANT (decl) = 1;
6068
        }
6069
    }
6070
 
6071
  if (processing_template_decl)
6072
    {
6073
      bool type_dependent_p;
6074
 
6075
      /* Add this declaration to the statement-tree.  */
6076
      if (at_function_scope_p ())
6077
        add_decl_expr (decl);
6078
 
6079
      type_dependent_p = dependent_type_p (type);
6080
 
6081
      if (check_for_bare_parameter_packs (init))
6082
        {
6083
          init = NULL_TREE;
6084
          DECL_INITIAL (decl) = NULL_TREE;
6085
        }
6086
 
6087
      /* Generally, initializers in templates are expanded when the
6088
         template is instantiated.  But, if DECL is a variable constant
6089
         then it can be used in future constant expressions, so its value
6090
         must be available. */
6091
 
6092
      if (TREE_CODE (decl) != VAR_DECL || dependent_type_p (type))
6093
        /* We can't do anything if the decl has dependent type.  */;
6094
      else if (init
6095
               && init_const_expr_p
6096
               && !type_dependent_p
6097
               && decl_maybe_constant_var_p (decl)
6098
               && !type_dependent_init_p (init)
6099
               && !value_dependent_init_p (init))
6100
        {
6101
          /* This variable seems to be a non-dependent constant, so process
6102
             its initializer.  If check_initializer returns non-null the
6103
             initialization wasn't constant after all.  */
6104
          tree init_code;
6105
          cleanups = make_tree_vector ();
6106
          init_code = check_initializer (decl, init, flags, &cleanups);
6107
          if (init_code == NULL_TREE)
6108
            init = NULL_TREE;
6109
          release_tree_vector (cleanups);
6110
        }
6111
      else if (!DECL_PRETTY_FUNCTION_P (decl))
6112
        /* Deduce array size even if the initializer is dependent.  */
6113
        maybe_deduce_size_from_array_init (decl, init);
6114
 
6115
      if (init)
6116
        DECL_INITIAL (decl) = init;
6117
      return;
6118
    }
6119
 
6120
  /* Just store non-static data member initializers for later.  */
6121
  if (init && TREE_CODE (decl) == FIELD_DECL)
6122
    DECL_INITIAL (decl) = init;
6123
 
6124
  /* Take care of TYPE_DECLs up front.  */
6125
  if (TREE_CODE (decl) == TYPE_DECL)
6126
    {
6127
      if (type != error_mark_node
6128
          && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
6129
        {
6130
          if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
6131
            warning (0, "shadowing previous type declaration of %q#D", decl);
6132
          set_identifier_type_value (DECL_NAME (decl), decl);
6133
        }
6134
 
6135
      /* If we have installed this as the canonical typedef for this
6136
         type, and that type has not been defined yet, delay emitting
6137
         the debug information for it, as we will emit it later.  */
6138
      if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
6139
          && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
6140
        TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6141
 
6142
      rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl),
6143
                                at_eof);
6144
      return;
6145
    }
6146
 
6147
  /* A reference will be modified here, as it is initialized.  */
6148
  if (! DECL_EXTERNAL (decl)
6149
      && TREE_READONLY (decl)
6150
      && TREE_CODE (type) == REFERENCE_TYPE)
6151
    {
6152
      was_readonly = 1;
6153
      TREE_READONLY (decl) = 0;
6154
    }
6155
 
6156
  if (TREE_CODE (decl) == VAR_DECL)
6157
    {
6158
      /* Only variables with trivial initialization and destruction can
6159
         have thread-local storage.  */
6160
      if (DECL_THREAD_LOCAL_P (decl)
6161
          && (type_has_nontrivial_default_init (TREE_TYPE (decl))
6162
              || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
6163
        error ("%qD cannot be thread-local because it has non-trivial "
6164
               "type %qT", decl, TREE_TYPE (decl));
6165
      /* If this is a local variable that will need a mangled name,
6166
         register it now.  We must do this before processing the
6167
         initializer for the variable, since the initialization might
6168
         require a guard variable, and since the mangled name of the
6169
         guard variable will depend on the mangled name of this
6170
         variable.  */
6171
      if (DECL_FUNCTION_SCOPE_P (decl)
6172
          && TREE_STATIC (decl)
6173
          && !DECL_ARTIFICIAL (decl))
6174
        {
6175
          push_local_name (decl);
6176
          if (DECL_CONSTRUCTOR_P (current_function_decl)
6177
              || DECL_DESTRUCTOR_P (current_function_decl))
6178
            /* Normally local_decls is populated during GIMPLE lowering,
6179
               but [cd]tors are never actually compiled directly.  We need
6180
               to put statics on the list so we can deal with the label
6181
               address extension.  */
6182
            add_local_decl (cfun, decl);
6183
        }
6184
 
6185
      /* Convert the initializer to the type of DECL, if we have not
6186
         already initialized DECL.  */
6187
      if (!DECL_INITIALIZED_P (decl)
6188
          /* If !DECL_EXTERNAL then DECL is being defined.  In the
6189
             case of a static data member initialized inside the
6190
             class-specifier, there can be an initializer even if DECL
6191
             is *not* defined.  */
6192
          && (!DECL_EXTERNAL (decl) || init))
6193
        {
6194
          if (TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
6195
            {
6196
              tree jclass
6197
                = IDENTIFIER_GLOBAL_VALUE (get_identifier ("jclass"));
6198
              /* Allow libjava/prims.cc define primitive classes.  */
6199
              if (init != NULL_TREE
6200
                  || jclass == NULL_TREE
6201
                  || TREE_CODE (jclass) != TYPE_DECL
6202
                  || !POINTER_TYPE_P (TREE_TYPE (jclass))
6203
                  || !same_type_ignoring_top_level_qualifiers_p
6204
                                        (type, TREE_TYPE (TREE_TYPE (jclass))))
6205
                error ("Java object %qD not allocated with %<new%>", decl);
6206
              init = NULL_TREE;
6207
            }
6208
          cleanups = make_tree_vector ();
6209
          init = check_initializer (decl, init, flags, &cleanups);
6210
          /* Thread-local storage cannot be dynamically initialized.  */
6211
          if (DECL_THREAD_LOCAL_P (decl) && init)
6212
            {
6213
              error ("%qD is thread-local and so cannot be dynamically "
6214
                     "initialized", decl);
6215
              init = NULL_TREE;
6216
            }
6217
 
6218
          /* Check that the initializer for a static data member was a
6219
             constant.  Although we check in the parser that the
6220
             initializer is an integral constant expression, we do not
6221
             simplify division-by-zero at the point at which it
6222
             occurs.  Therefore, in:
6223
 
6224
               struct S { static const int i = 7 / 0; };
6225
 
6226
             we issue an error at this point.  It would
6227
             probably be better to forbid division by zero in
6228
             integral constant expressions.  */
6229
          if (DECL_EXTERNAL (decl) && init)
6230
            {
6231
              error ("%qD cannot be initialized by a non-constant expression"
6232
                     " when being declared", decl);
6233
              DECL_INITIALIZED_IN_CLASS_P (decl) = 0;
6234
              init = NULL_TREE;
6235
            }
6236
 
6237
          /* Handle:
6238
 
6239
             [dcl.init]
6240
 
6241
             The memory occupied by any object of static storage
6242
             duration is zero-initialized at program startup before
6243
             any other initialization takes place.
6244
 
6245
             We cannot create an appropriate initializer until after
6246
             the type of DECL is finalized.  If DECL_INITIAL is set,
6247
             then the DECL is statically initialized, and any
6248
             necessary zero-initialization has already been performed.  */
6249
          if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
6250
            DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
6251
                                                   /*nelts=*/NULL_TREE,
6252
                                                   /*static_storage_p=*/true);
6253
          /* Remember that the initialization for this variable has
6254
             taken place.  */
6255
          DECL_INITIALIZED_P (decl) = 1;
6256
          /* This declaration is the definition of this variable,
6257
             unless we are initializing a static data member within
6258
             the class specifier.  */
6259
          if (!DECL_EXTERNAL (decl))
6260
            var_definition_p = true;
6261
        }
6262
      /* If the variable has an array type, lay out the type, even if
6263
         there is no initializer.  It is valid to index through the
6264
         array, and we must get TYPE_ALIGN set correctly on the array
6265
         type.  */
6266
      else if (TREE_CODE (type) == ARRAY_TYPE)
6267
        layout_type (type);
6268
 
6269
      if (TREE_STATIC (decl)
6270
          && !at_function_scope_p ()
6271
          && current_function_decl == NULL)
6272
        /* So decl is a global variable or a static member of a
6273
           non local class. Record the types it uses
6274
           so that we can decide later to emit debug info for them.  */
6275
        record_types_used_by_current_var_decl (decl);
6276
    }
6277
  else if (TREE_CODE (decl) == FIELD_DECL
6278
           && TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
6279
    error ("non-static data member %qD has Java class type", decl);
6280
 
6281
  /* Add this declaration to the statement-tree.  This needs to happen
6282
     after the call to check_initializer so that the DECL_EXPR for a
6283
     reference temp is added before the DECL_EXPR for the reference itself.  */
6284
  if (DECL_FUNCTION_SCOPE_P (decl))
6285
    add_decl_expr (decl);
6286
 
6287
  /* Let the middle end know about variables and functions -- but not
6288
     static data members in uninstantiated class templates.  */
6289
  if (TREE_CODE (decl) == VAR_DECL
6290
      || TREE_CODE (decl) == FUNCTION_DECL)
6291
    {
6292
      if (TREE_CODE (decl) == VAR_DECL)
6293
        {
6294
          layout_var_decl (decl);
6295
          maybe_commonize_var (decl);
6296
        }
6297
 
6298
      /* This needs to happen after the linkage is set. */
6299
      determine_visibility (decl);
6300
 
6301
      if (var_definition_p && TREE_STATIC (decl))
6302
        {
6303
          /* If a TREE_READONLY variable needs initialization
6304
             at runtime, it is no longer readonly and we need to
6305
             avoid MEM_READONLY_P being set on RTL created for it.  */
6306
          if (init)
6307
            {
6308
              if (TREE_READONLY (decl))
6309
                TREE_READONLY (decl) = 0;
6310
              was_readonly = 0;
6311
            }
6312
          else if (was_readonly)
6313
            TREE_READONLY (decl) = 1;
6314
        }
6315
 
6316
      make_rtl_for_nonlocal_decl (decl, init, asmspec);
6317
 
6318
      /* Check for abstractness of the type. Notice that there is no
6319
         need to strip array types here since the check for those types
6320
         is already done within create_array_type_for_decl.  */
6321
      if (TREE_CODE (type) == FUNCTION_TYPE
6322
          || TREE_CODE (type) == METHOD_TYPE)
6323
        abstract_virtuals_error (decl, TREE_TYPE (type));
6324
      else
6325
        abstract_virtuals_error (decl, type);
6326
 
6327
      if (TREE_TYPE (decl) == error_mark_node)
6328
        /* No initialization required.  */
6329
        ;
6330
      else if (TREE_CODE (decl) == FUNCTION_DECL)
6331
        {
6332
          if (init)
6333
            {
6334
              if (init == ridpointers[(int)RID_DEFAULT])
6335
                {
6336
                  /* An out-of-class default definition is defined at
6337
                     the point where it is explicitly defaulted.  */
6338
                  if (DECL_DELETED_FN (decl))
6339
                    maybe_explain_implicit_delete (decl);
6340
                  else if (DECL_INITIAL (decl) == error_mark_node)
6341
                    synthesize_method (decl);
6342
                }
6343
              else
6344
                error ("function %q#D is initialized like a variable", decl);
6345
            }
6346
          /* else no initialization required.  */
6347
        }
6348
      else if (DECL_EXTERNAL (decl)
6349
               && ! (DECL_LANG_SPECIFIC (decl)
6350
                     && DECL_NOT_REALLY_EXTERN (decl)))
6351
        {
6352
          if (init)
6353
            DECL_INITIAL (decl) = init;
6354
        }
6355
      /* A variable definition.  */
6356
      else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
6357
        /* Initialize the local variable.  */
6358
        initialize_local_var (decl, init);
6359
 
6360
      /* If a variable is defined, and then a subsequent
6361
         definition with external linkage is encountered, we will
6362
         get here twice for the same variable.  We want to avoid
6363
         calling expand_static_init more than once.  For variables
6364
         that are not static data members, we can call
6365
         expand_static_init only when we actually process the
6366
         initializer.  It is not legal to redeclare a static data
6367
         member, so this issue does not arise in that case.  */
6368
      else if (var_definition_p && TREE_STATIC (decl))
6369
        expand_static_init (decl, init);
6370
    }
6371
 
6372
  /* If a CLEANUP_STMT was created to destroy a temporary bound to a
6373
     reference, insert it in the statement-tree now.  */
6374
  if (cleanups)
6375
    {
6376
      unsigned i; tree t;
6377
      FOR_EACH_VEC_ELT (tree, cleanups, i, t)
6378
        push_cleanup (decl, t, false);
6379
      release_tree_vector (cleanups);
6380
    }
6381
 
6382
  if (was_readonly)
6383
    TREE_READONLY (decl) = 1;
6384
 
6385
  invoke_plugin_callbacks (PLUGIN_FINISH_DECL, decl);
6386
}
6387
 
6388
/* Returns a declaration for a VAR_DECL as if:
6389
 
6390
     extern "C" TYPE NAME;
6391
 
6392
   had been seen.  Used to create compiler-generated global
6393
   variables.  */
6394
 
6395
static tree
6396
declare_global_var (tree name, tree type)
6397
{
6398
  tree decl;
6399
 
6400
  push_to_top_level ();
6401
  decl = build_decl (input_location, VAR_DECL, name, type);
6402
  TREE_PUBLIC (decl) = 1;
6403
  DECL_EXTERNAL (decl) = 1;
6404
  DECL_ARTIFICIAL (decl) = 1;
6405
  /* If the user has explicitly declared this variable (perhaps
6406
     because the code we are compiling is part of a low-level runtime
6407
     library), then it is possible that our declaration will be merged
6408
     with theirs by pushdecl.  */
6409
  decl = pushdecl (decl);
6410
  cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0);
6411
  pop_from_top_level ();
6412
 
6413
  return decl;
6414
}
6415
 
6416
/* Returns the type for the argument to "__cxa_atexit" (or "atexit",
6417
   if "__cxa_atexit" is not being used) corresponding to the function
6418
   to be called when the program exits.  */
6419
 
6420
static tree
6421
get_atexit_fn_ptr_type (void)
6422
{
6423
  tree fn_type;
6424
 
6425
  if (!atexit_fn_ptr_type_node)
6426
    {
6427
      tree arg_type;
6428
      if (flag_use_cxa_atexit
6429
          && !targetm.cxx.use_atexit_for_cxa_atexit ())
6430
        /* The parameter to "__cxa_atexit" is "void (*)(void *)".  */
6431
        arg_type = ptr_type_node;
6432
      else
6433
        /* The parameter to "atexit" is "void (*)(void)".  */
6434
        arg_type = NULL_TREE;
6435
 
6436
      fn_type = build_function_type_list (void_type_node,
6437
                                          arg_type, NULL_TREE);
6438
      atexit_fn_ptr_type_node = build_pointer_type (fn_type);
6439
    }
6440
 
6441
  return atexit_fn_ptr_type_node;
6442
}
6443
 
6444
/* Returns a pointer to the `atexit' function.  Note that if
6445
   FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
6446
   `__cxa_atexit' function specified in the IA64 C++ ABI.  */
6447
 
6448
static tree
6449
get_atexit_node (void)
6450
{
6451
  tree atexit_fndecl;
6452
  tree fn_type;
6453
  tree fn_ptr_type;
6454
  const char *name;
6455
  bool use_aeabi_atexit;
6456
 
6457
  if (atexit_node)
6458
    return atexit_node;
6459
 
6460
  if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
6461
    {
6462
      /* The declaration for `__cxa_atexit' is:
6463
 
6464
           int __cxa_atexit (void (*)(void *), void *, void *)
6465
 
6466
         We build up the argument types and then the function type
6467
         itself.  */
6468
      tree argtype0, argtype1, argtype2;
6469
 
6470
      use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
6471
      /* First, build the pointer-to-function type for the first
6472
         argument.  */
6473
      fn_ptr_type = get_atexit_fn_ptr_type ();
6474
      /* Then, build the rest of the argument types.  */
6475
      argtype2 = ptr_type_node;
6476
      if (use_aeabi_atexit)
6477
        {
6478
          argtype1 = fn_ptr_type;
6479
          argtype0 = ptr_type_node;
6480
        }
6481
      else
6482
        {
6483
          argtype1 = ptr_type_node;
6484
          argtype0 = fn_ptr_type;
6485
        }
6486
      /* And the final __cxa_atexit type.  */
6487
      fn_type = build_function_type_list (integer_type_node,
6488
                                          argtype0, argtype1, argtype2,
6489
                                          NULL_TREE);
6490
      fn_ptr_type = build_pointer_type (fn_type);
6491
      if (use_aeabi_atexit)
6492
        name = "__aeabi_atexit";
6493
      else
6494
        name = "__cxa_atexit";
6495
    }
6496
  else
6497
    {
6498
      /* The declaration for `atexit' is:
6499
 
6500
           int atexit (void (*)());
6501
 
6502
         We build up the argument types and then the function type
6503
         itself.  */
6504
      fn_ptr_type = get_atexit_fn_ptr_type ();
6505
      /* Build the final atexit type.  */
6506
      fn_type = build_function_type_list (integer_type_node,
6507
                                          fn_ptr_type, NULL_TREE);
6508
      name = "atexit";
6509
    }
6510
 
6511
  /* Now, build the function declaration.  */
6512
  push_lang_context (lang_name_c);
6513
  atexit_fndecl = build_library_fn_ptr (name, fn_type);
6514
  mark_used (atexit_fndecl);
6515
  pop_lang_context ();
6516
  atexit_node = decay_conversion (atexit_fndecl);
6517
 
6518
  return atexit_node;
6519
}
6520
 
6521
/* Returns the __dso_handle VAR_DECL.  */
6522
 
6523
static tree
6524
get_dso_handle_node (void)
6525
{
6526
  if (dso_handle_node)
6527
    return dso_handle_node;
6528
 
6529
  /* Declare the variable.  */
6530
  dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
6531
                                        ptr_type_node);
6532
 
6533
#ifdef HAVE_GAS_HIDDEN
6534
  DECL_VISIBILITY (dso_handle_node) = VISIBILITY_HIDDEN;
6535
  DECL_VISIBILITY_SPECIFIED (dso_handle_node) = 1;
6536
#endif
6537
 
6538
  return dso_handle_node;
6539
}
6540
 
6541
/* Begin a new function with internal linkage whose job will be simply
6542
   to destroy some particular variable.  */
6543
 
6544
static GTY(()) int start_cleanup_cnt;
6545
 
6546
static tree
6547
start_cleanup_fn (void)
6548
{
6549
  char name[32];
6550
  tree fntype;
6551
  tree fndecl;
6552
  bool use_cxa_atexit = flag_use_cxa_atexit
6553
                        && !targetm.cxx.use_atexit_for_cxa_atexit ();
6554
 
6555
  push_to_top_level ();
6556
 
6557
  /* No need to mangle this.  */
6558
  push_lang_context (lang_name_c);
6559
 
6560
  /* Build the name of the function.  */
6561
  sprintf (name, "__tcf_%d", start_cleanup_cnt++);
6562
  /* Build the function declaration.  */
6563
  fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
6564
  fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
6565
  /* It's a function with internal linkage, generated by the
6566
     compiler.  */
6567
  TREE_PUBLIC (fndecl) = 0;
6568
  DECL_ARTIFICIAL (fndecl) = 1;
6569
  /* Make the function `inline' so that it is only emitted if it is
6570
     actually needed.  It is unlikely that it will be inlined, since
6571
     it is only called via a function pointer, but we avoid unnecessary
6572
     emissions this way.  */
6573
  DECL_DECLARED_INLINE_P (fndecl) = 1;
6574
  DECL_INTERFACE_KNOWN (fndecl) = 1;
6575
  /* Build the parameter.  */
6576
  if (use_cxa_atexit)
6577
    {
6578
      tree parmdecl;
6579
 
6580
      parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
6581
      DECL_CONTEXT (parmdecl) = fndecl;
6582
      TREE_USED (parmdecl) = 1;
6583
      DECL_READ_P (parmdecl) = 1;
6584
      DECL_ARGUMENTS (fndecl) = parmdecl;
6585
    }
6586
 
6587
  pushdecl (fndecl);
6588
  start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
6589
 
6590
  pop_lang_context ();
6591
 
6592
  return current_function_decl;
6593
}
6594
 
6595
/* Finish the cleanup function begun by start_cleanup_fn.  */
6596
 
6597
static void
6598
end_cleanup_fn (void)
6599
{
6600
  expand_or_defer_fn (finish_function (0));
6601
 
6602
  pop_from_top_level ();
6603
}
6604
 
6605
/* Generate code to handle the destruction of DECL, an object with
6606
   static storage duration.  */
6607
 
6608
tree
6609
register_dtor_fn (tree decl)
6610
{
6611
  tree cleanup;
6612
  tree compound_stmt;
6613
  tree fcall;
6614
  tree type;
6615
  bool use_dtor;
6616
  tree arg0, arg1 = NULL_TREE, arg2 = NULL_TREE;
6617
 
6618
  type = TREE_TYPE (decl);
6619
  if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
6620
    return void_zero_node;
6621
 
6622
  /* If we're using "__cxa_atexit" (or "__aeabi_atexit"), and DECL is
6623
     a class object, we can just pass the destructor to
6624
     "__cxa_atexit"; we don't have to build a temporary function to do
6625
     the cleanup.  */
6626
  use_dtor = (flag_use_cxa_atexit
6627
              && !targetm.cxx.use_atexit_for_cxa_atexit ()
6628
              && CLASS_TYPE_P (type));
6629
  if (use_dtor)
6630
    {
6631
      int idx;
6632
 
6633
      /* Find the destructor.  */
6634
      idx = lookup_fnfields_1 (type, complete_dtor_identifier);
6635
      gcc_assert (idx >= 0);
6636
      cleanup = VEC_index (tree, CLASSTYPE_METHOD_VEC (type), idx);
6637
      /* Make sure it is accessible.  */
6638
      perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup);
6639
    }
6640
  else
6641
    {
6642
      /* Call build_cleanup before we enter the anonymous function so
6643
         that any access checks will be done relative to the current
6644
         scope, rather than the scope of the anonymous function.  */
6645
      build_cleanup (decl);
6646
 
6647
      /* Now start the function.  */
6648
      cleanup = start_cleanup_fn ();
6649
 
6650
      /* Now, recompute the cleanup.  It may contain SAVE_EXPRs that refer
6651
         to the original function, rather than the anonymous one.  That
6652
         will make the back end think that nested functions are in use,
6653
         which causes confusion.  */
6654
      push_deferring_access_checks (dk_no_check);
6655
      fcall = build_cleanup (decl);
6656
      pop_deferring_access_checks ();
6657
 
6658
      /* Create the body of the anonymous function.  */
6659
      compound_stmt = begin_compound_stmt (BCS_FN_BODY);
6660
      finish_expr_stmt (fcall);
6661
      finish_compound_stmt (compound_stmt);
6662
      end_cleanup_fn ();
6663
    }
6664
 
6665
  /* Call atexit with the cleanup function.  */
6666
  mark_used (cleanup);
6667
  cleanup = build_address (cleanup);
6668
  if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
6669
    {
6670
      tree addr;
6671
 
6672
      if (use_dtor)
6673
        {
6674
          /* We must convert CLEANUP to the type that "__cxa_atexit"
6675
             expects.  */
6676
          cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
6677
          /* "__cxa_atexit" will pass the address of DECL to the
6678
             cleanup function.  */
6679
          mark_used (decl);
6680
          addr = build_address (decl);
6681
          /* The declared type of the parameter to "__cxa_atexit" is
6682
             "void *".  For plain "T*", we could just let the
6683
             machinery in cp_build_function_call convert it -- but if the
6684
             type is "cv-qualified T *", then we need to convert it
6685
             before passing it in, to avoid spurious errors.  */
6686
          addr = build_nop (ptr_type_node, addr);
6687
        }
6688
      else
6689
        /* Since the cleanup functions we build ignore the address
6690
           they're given, there's no reason to pass the actual address
6691
           in, and, in general, it's cheaper to pass NULL than any
6692
           other value.  */
6693
        addr = null_pointer_node;
6694
      arg2 = cp_build_addr_expr (get_dso_handle_node (),
6695
                                 tf_warning_or_error);
6696
      if (targetm.cxx.use_aeabi_atexit ())
6697
        {
6698
          arg1 = cleanup;
6699
          arg0 = addr;
6700
        }
6701
      else
6702
        {
6703
          arg1 = addr;
6704
          arg0 = cleanup;
6705
        }
6706
    }
6707
  else
6708
    arg0 = cleanup;
6709
  return cp_build_function_call_nary (get_atexit_node (), tf_warning_or_error,
6710
                                      arg0, arg1, arg2, NULL_TREE);
6711
}
6712
 
6713
/* DECL is a VAR_DECL with static storage duration.  INIT, if present,
6714
   is its initializer.  Generate code to handle the construction
6715
   and destruction of DECL.  */
6716
 
6717
static void
6718
expand_static_init (tree decl, tree init)
6719
{
6720
  gcc_assert (TREE_CODE (decl) == VAR_DECL);
6721
  gcc_assert (TREE_STATIC (decl));
6722
 
6723
  /* Some variables require no dynamic initialization.  */
6724
  if (!init
6725
      && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
6726
    return;
6727
 
6728
  if (DECL_FUNCTION_SCOPE_P (decl))
6729
    {
6730
      /* Emit code to perform this initialization but once.  */
6731
      tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
6732
      tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
6733
      tree guard, guard_addr;
6734
      tree flag, begin;
6735
 
6736
      /* Emit code to perform this initialization but once.  This code
6737
         looks like:
6738
 
6739
           static <type> guard;
6740
           if (!guard.first_byte) {
6741
             if (__cxa_guard_acquire (&guard)) {
6742
               bool flag = false;
6743
               try {
6744
                 // Do initialization.
6745
                 flag = true; __cxa_guard_release (&guard);
6746
                 // Register variable for destruction at end of program.
6747
               } catch {
6748
                 if (!flag) __cxa_guard_abort (&guard);
6749
               }
6750
           }
6751
 
6752
         Note that the `flag' variable is only set to 1 *after* the
6753
         initialization is complete.  This ensures that an exception,
6754
         thrown during the construction, will cause the variable to
6755
         reinitialized when we pass through this code again, as per:
6756
 
6757
           [stmt.dcl]
6758
 
6759
           If the initialization exits by throwing an exception, the
6760
           initialization is not complete, so it will be tried again
6761
           the next time control enters the declaration.
6762
 
6763
         This process should be thread-safe, too; multiple threads
6764
         should not be able to initialize the variable more than
6765
         once.  */
6766
 
6767
      /* Create the guard variable.  */
6768
      guard = get_guard (decl);
6769
 
6770
      /* This optimization isn't safe on targets with relaxed memory
6771
         consistency.  On such targets we force synchronization in
6772
         __cxa_guard_acquire.  */
6773
      if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
6774
        {
6775
          /* Begin the conditional initialization.  */
6776
          if_stmt = begin_if_stmt ();
6777
          finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
6778
          then_clause = begin_compound_stmt (BCS_NO_SCOPE);
6779
        }
6780
 
6781
      if (flag_threadsafe_statics)
6782
        {
6783
          tree vfntype = NULL_TREE;
6784
          tree acquire_name, release_name, abort_name;
6785
          tree acquire_fn, release_fn, abort_fn;
6786
          guard_addr = build_address (guard);
6787
 
6788
          acquire_name = get_identifier ("__cxa_guard_acquire");
6789
          release_name = get_identifier ("__cxa_guard_release");
6790
          abort_name = get_identifier ("__cxa_guard_abort");
6791
          acquire_fn = identifier_global_value (acquire_name);
6792
          release_fn = identifier_global_value (release_name);
6793
          abort_fn = identifier_global_value (abort_name);
6794
          if (!acquire_fn)
6795
            acquire_fn = push_library_fn
6796
              (acquire_name, build_function_type_list (integer_type_node,
6797
                                                       TREE_TYPE (guard_addr),
6798
                                                       NULL_TREE),
6799
               NULL_TREE);
6800
          if (!release_fn || !abort_fn)
6801
            vfntype = build_function_type_list (void_type_node,
6802
                                                TREE_TYPE (guard_addr),
6803
                                                NULL_TREE);
6804
          if (!release_fn)
6805
            release_fn = push_library_fn (release_name, vfntype, NULL_TREE);
6806
          if (!abort_fn)
6807
            abort_fn = push_library_fn (abort_name, vfntype, NULL_TREE);
6808
 
6809
          inner_if_stmt = begin_if_stmt ();
6810
          finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
6811
                               inner_if_stmt);
6812
 
6813
          inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
6814
          begin = get_target_expr (boolean_false_node);
6815
          flag = TARGET_EXPR_SLOT (begin);
6816
 
6817
          TARGET_EXPR_CLEANUP (begin)
6818
            = build3 (COND_EXPR, void_type_node, flag,
6819
                      void_zero_node,
6820
                      build_call_n (abort_fn, 1, guard_addr));
6821
          CLEANUP_EH_ONLY (begin) = 1;
6822
 
6823
          /* Do the initialization itself.  */
6824
          init = add_stmt_to_compound (begin, init);
6825
          init = add_stmt_to_compound
6826
            (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
6827
          init = add_stmt_to_compound
6828
            (init, build_call_n (release_fn, 1, guard_addr));
6829
        }
6830
      else
6831
        init = add_stmt_to_compound (init, set_guard (guard));
6832
 
6833
      /* Use atexit to register a function for destroying this static
6834
         variable.  */
6835
      init = add_stmt_to_compound (init, register_dtor_fn (decl));
6836
 
6837
      finish_expr_stmt (init);
6838
 
6839
      if (flag_threadsafe_statics)
6840
        {
6841
          finish_compound_stmt (inner_then_clause);
6842
          finish_then_clause (inner_if_stmt);
6843
          finish_if_stmt (inner_if_stmt);
6844
        }
6845
 
6846
      if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
6847
        {
6848
          finish_compound_stmt (then_clause);
6849
          finish_then_clause (if_stmt);
6850
          finish_if_stmt (if_stmt);
6851
        }
6852
    }
6853
  else
6854
    static_aggregates = tree_cons (init, decl, static_aggregates);
6855
}
6856
 
6857
 
6858
/* Make TYPE a complete type based on INITIAL_VALUE.
6859
   Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
6860
   2 if there was no information (in which case assume 0 if DO_DEFAULT),
6861
   3 if the initializer list is empty (in pedantic mode). */
6862
 
6863
int
6864
cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
6865
{
6866
  int failure;
6867
  tree type, elt_type;
6868
 
6869
  if (initial_value)
6870
    {
6871
      unsigned HOST_WIDE_INT i;
6872
      tree value;
6873
 
6874
      /* An array of character type can be initialized from a
6875
         brace-enclosed string constant.
6876
 
6877
         FIXME: this code is duplicated from reshape_init. Probably
6878
         we should just call reshape_init here?  */
6879
      if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
6880
          && TREE_CODE (initial_value) == CONSTRUCTOR
6881
          && !VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (initial_value)))
6882
        {
6883
          VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initial_value);
6884
          tree value = VEC_index (constructor_elt, v, 0)->value;
6885
 
6886
          if (TREE_CODE (value) == STRING_CST
6887
              && VEC_length (constructor_elt, v) == 1)
6888
            initial_value = value;
6889
        }
6890
 
6891
      /* If any of the elements are parameter packs, we can't actually
6892
         complete this type now because the array size is dependent.  */
6893
      if (TREE_CODE (initial_value) == CONSTRUCTOR)
6894
        {
6895
          FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value),
6896
                                      i, value)
6897
            {
6898
              if (PACK_EXPANSION_P (value))
6899
                return 0;
6900
            }
6901
        }
6902
    }
6903
 
6904
  failure = complete_array_type (ptype, initial_value, do_default);
6905
 
6906
  /* We can create the array before the element type is complete, which
6907
     means that we didn't have these two bits set in the original type
6908
     either.  In completing the type, we are expected to propagate these
6909
     bits.  See also complete_type which does the same thing for arrays
6910
     of fixed size.  */
6911
  type = *ptype;
6912
  if (TYPE_DOMAIN (type))
6913
    {
6914
      elt_type = TREE_TYPE (type);
6915
      TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
6916
      TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
6917
        = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
6918
    }
6919
 
6920
  return failure;
6921
}
6922
 
6923
/* As above, but either give an error or reject zero-size arrays, depending
6924
   on COMPLAIN.  */
6925
 
6926
int
6927
cp_complete_array_type_or_error (tree *ptype, tree initial_value,
6928
                                 bool do_default, tsubst_flags_t complain)
6929
{
6930
  int failure;
6931
  bool sfinae = !(complain & tf_error);
6932
  /* In SFINAE context we can't be lenient about zero-size arrays.  */
6933
  if (sfinae)
6934
    ++pedantic;
6935
  failure = cp_complete_array_type (ptype, initial_value, do_default);
6936
  if (sfinae)
6937
    --pedantic;
6938
  if (failure)
6939
    {
6940
      if (sfinae)
6941
        /* Not an error.  */;
6942
      else if (failure == 1)
6943
        error ("initializer fails to determine size of %qT", *ptype);
6944
      else if (failure == 2)
6945
        {
6946
          if (do_default)
6947
            error ("array size missing in %qT", *ptype);
6948
        }
6949
      else if (failure == 3)
6950
        error ("zero-size array %qT", *ptype);
6951
      *ptype = error_mark_node;
6952
    }
6953
  return failure;
6954
}
6955
 
6956
/* Return zero if something is declared to be a member of type
6957
   CTYPE when in the context of CUR_TYPE.  STRING is the error
6958
   message to print in that case.  Otherwise, quietly return 1.  */
6959
 
6960
static int
6961
member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
6962
{
6963
  if (ctype && ctype != cur_type)
6964
    {
6965
      if (flags == DTOR_FLAG)
6966
        error ("destructor for alien class %qT cannot be a member", ctype);
6967
      else
6968
        error ("constructor for alien class %qT cannot be a member", ctype);
6969
      return 0;
6970
    }
6971
  return 1;
6972
}
6973
 
6974
/* Subroutine of `grokdeclarator'.  */
6975
 
6976
/* Generate errors possibly applicable for a given set of specifiers.
6977
   This is for ARM $7.1.2.  */
6978
 
6979
static void
6980
bad_specifiers (tree object,
6981
                enum bad_spec_place type,
6982
                int virtualp,
6983
                int quals,
6984
                int inlinep,
6985
                int friendp,
6986
                int raises)
6987
{
6988
  switch (type)
6989
    {
6990
      case BSP_VAR:
6991
        if (virtualp)
6992
          error ("%qD declared as a %<virtual%> variable", object);
6993
        if (inlinep)
6994
          error ("%qD declared as an %<inline%> variable", object);
6995
        if (quals)
6996
          error ("%<const%> and %<volatile%> function specifiers on "
6997
                 "%qD invalid in variable declaration", object);
6998
        break;
6999
      case BSP_PARM:
7000
        if (virtualp)
7001
          error ("%qD declared as a %<virtual%> parameter", object);
7002
        if (inlinep)
7003
          error ("%qD declared as an %<inline%> parameter", object);
7004
        if (quals)
7005
          error ("%<const%> and %<volatile%> function specifiers on "
7006
                 "%qD invalid in parameter declaration", object);
7007
        break;
7008
      case BSP_TYPE:
7009
        if (virtualp)
7010
          error ("%qD declared as a %<virtual%> type", object);
7011
        if (inlinep)
7012
          error ("%qD declared as an %<inline%> type", object);
7013
        if (quals)
7014
          error ("%<const%> and %<volatile%> function specifiers on "
7015
                 "%qD invalid in type declaration", object);
7016
        break;
7017
      case BSP_FIELD:
7018
        if (virtualp)
7019
          error ("%qD declared as a %<virtual%> field", object);
7020
        if (inlinep)
7021
          error ("%qD declared as an %<inline%> field", object);
7022
        if (quals)
7023
          error ("%<const%> and %<volatile%> function specifiers on "
7024
                 "%qD invalid in field declaration", object);
7025
        break;
7026
      default:
7027
        gcc_unreachable();
7028
    }
7029
  if (friendp)
7030
    error ("%q+D declared as a friend", object);
7031
  if (raises
7032
      && (TREE_CODE (object) == TYPE_DECL
7033
          || (!TYPE_PTRFN_P (TREE_TYPE (object))
7034
              && !TYPE_REFFN_P (TREE_TYPE (object))
7035
              && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
7036
    error ("%q+D declared with an exception specification", object);
7037
}
7038
 
7039
/* DECL is a member function or static data member and is presently
7040
   being defined.  Check that the definition is taking place in a
7041
   valid namespace.  */
7042
 
7043
static void
7044
check_class_member_definition_namespace (tree decl)
7045
{
7046
  /* These checks only apply to member functions and static data
7047
     members.  */
7048
  gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
7049
              || TREE_CODE (decl) == VAR_DECL);
7050
  /* We check for problems with specializations in pt.c in
7051
     check_specialization_namespace, where we can issue better
7052
     diagnostics.  */
7053
  if (processing_specialization)
7054
    return;
7055
  /* There are no restrictions on the placement of
7056
     explicit instantiations.  */
7057
  if (processing_explicit_instantiation)
7058
    return;
7059
  /* [class.mfct]
7060
 
7061
     A member function definition that appears outside of the
7062
     class definition shall appear in a namespace scope enclosing
7063
     the class definition.
7064
 
7065
     [class.static.data]
7066
 
7067
     The definition for a static data member shall appear in a
7068
     namespace scope enclosing the member's class definition.  */
7069
  if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
7070
    permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
7071
               decl, DECL_CONTEXT (decl));
7072
}
7073
 
7074
/* Build a PARM_DECL for the "this" parameter.  TYPE is the
7075
   METHOD_TYPE for a non-static member function; QUALS are the
7076
   cv-qualifiers that apply to the function.  */
7077
 
7078
tree
7079
build_this_parm (tree type, cp_cv_quals quals)
7080
{
7081
  tree this_type;
7082
  tree qual_type;
7083
  tree parm;
7084
  cp_cv_quals this_quals;
7085
 
7086
  if (CLASS_TYPE_P (type))
7087
    {
7088
      this_type
7089
        = cp_build_qualified_type (type, quals & ~TYPE_QUAL_RESTRICT);
7090
      this_type = build_pointer_type (this_type);
7091
    }
7092
  else
7093
    this_type = type_of_this_parm (type);
7094
  /* The `this' parameter is implicitly `const'; it cannot be
7095
     assigned to.  */
7096
  this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
7097
  qual_type = cp_build_qualified_type (this_type, this_quals);
7098
  parm = build_artificial_parm (this_identifier, qual_type);
7099
  cp_apply_type_quals_to_decl (this_quals, parm);
7100
  return parm;
7101
}
7102
 
7103
/* DECL is a static member function.  Complain if it was declared
7104
   with function-cv-quals.  */
7105
 
7106
static void
7107
check_static_quals (tree decl, cp_cv_quals quals)
7108
{
7109
  if (quals != TYPE_UNQUALIFIED)
7110
    error ("static member function %q#D declared with type qualifiers",
7111
           decl);
7112
}
7113
 
7114
/* CTYPE is class type, or null if non-class.
7115
   TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
7116
   or METHOD_TYPE.
7117
   DECLARATOR is the function's name.
7118
   PARMS is a chain of PARM_DECLs for the function.
7119
   VIRTUALP is truthvalue of whether the function is virtual or not.
7120
   FLAGS are to be passed through to `grokclassfn'.
7121
   QUALS are qualifiers indicating whether the function is `const'
7122
   or `volatile'.
7123
   RAISES is a list of exceptions that this function can raise.
7124
   CHECK is 1 if we must find this method in CTYPE, 0 if we should
7125
   not look, and -1 if we should not call `grokclassfn' at all.
7126
 
7127
   SFK is the kind of special function (if any) for the new function.
7128
 
7129
   Returns `NULL_TREE' if something goes wrong, after issuing
7130
   applicable error messages.  */
7131
 
7132
static tree
7133
grokfndecl (tree ctype,
7134
            tree type,
7135
            tree declarator,
7136
            tree parms,
7137
            tree orig_declarator,
7138
            int virtualp,
7139
            enum overload_flags flags,
7140
            cp_cv_quals quals,
7141
            tree raises,
7142
            int check,
7143
            int friendp,
7144
            int publicp,
7145
            int inlinep,
7146
            special_function_kind sfk,
7147
            bool funcdef_flag,
7148
            int template_count,
7149
            tree in_namespace,
7150
            tree* attrlist,
7151
            location_t location)
7152
{
7153
  tree decl;
7154
  int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
7155
  tree t;
7156
 
7157
  if (raises)
7158
    type = build_exception_variant (type, raises);
7159
 
7160
  decl = build_lang_decl (FUNCTION_DECL, declarator, type);
7161
 
7162
  /* If we have an explicit location, use it, otherwise use whatever
7163
     build_lang_decl used (probably input_location).  */
7164
  if (location != UNKNOWN_LOCATION)
7165
    DECL_SOURCE_LOCATION (decl) = location;
7166
 
7167
  if (TREE_CODE (type) == METHOD_TYPE)
7168
    {
7169
      tree parm;
7170
      parm = build_this_parm (type, quals);
7171
      DECL_CHAIN (parm) = parms;
7172
      parms = parm;
7173
    }
7174
  DECL_ARGUMENTS (decl) = parms;
7175
  for (t = parms; t; t = DECL_CHAIN (t))
7176
    DECL_CONTEXT (t) = decl;
7177
  /* Propagate volatile out from type to decl.  */
7178
  if (TYPE_VOLATILE (type))
7179
    TREE_THIS_VOLATILE (decl) = 1;
7180
 
7181
  /* Setup decl according to sfk.  */
7182
  switch (sfk)
7183
    {
7184
    case sfk_constructor:
7185
    case sfk_copy_constructor:
7186
    case sfk_move_constructor:
7187
      DECL_CONSTRUCTOR_P (decl) = 1;
7188
      break;
7189
    case sfk_destructor:
7190
      DECL_DESTRUCTOR_P (decl) = 1;
7191
      break;
7192
    default:
7193
      break;
7194
    }
7195
 
7196
  /* If pointers to member functions use the least significant bit to
7197
     indicate whether a function is virtual, ensure a pointer
7198
     to this function will have that bit clear.  */
7199
  if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
7200
      && TREE_CODE (type) == METHOD_TYPE
7201
      && DECL_ALIGN (decl) < 2 * BITS_PER_UNIT)
7202
    DECL_ALIGN (decl) = 2 * BITS_PER_UNIT;
7203
 
7204
  if (friendp
7205
      && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
7206
    {
7207
      if (funcdef_flag)
7208
        error
7209
          ("defining explicit specialization %qD in friend declaration",
7210
           orig_declarator);
7211
      else
7212
        {
7213
          tree fns = TREE_OPERAND (orig_declarator, 0);
7214
          tree args = TREE_OPERAND (orig_declarator, 1);
7215
 
7216
          if (PROCESSING_REAL_TEMPLATE_DECL_P ())
7217
            {
7218
              /* Something like `template <class T> friend void f<T>()'.  */
7219
              error ("invalid use of template-id %qD in declaration "
7220
                     "of primary template",
7221
                     orig_declarator);
7222
              return NULL_TREE;
7223
            }
7224
 
7225
 
7226
          /* A friend declaration of the form friend void f<>().  Record
7227
             the information in the TEMPLATE_ID_EXPR.  */
7228
          SET_DECL_IMPLICIT_INSTANTIATION (decl);
7229
 
7230
          if (TREE_CODE (fns) == COMPONENT_REF)
7231
            {
7232
              /* Due to bison parser ickiness, we will have already looked
7233
                 up an operator_name or PFUNCNAME within the current class
7234
                 (see template_id in parse.y). If the current class contains
7235
                 such a name, we'll get a COMPONENT_REF here. Undo that.  */
7236
 
7237
              gcc_assert (TREE_TYPE (TREE_OPERAND (fns, 0))
7238
                          == current_class_type);
7239
              fns = TREE_OPERAND (fns, 1);
7240
            }
7241
          gcc_assert (TREE_CODE (fns) == IDENTIFIER_NODE
7242
                      || TREE_CODE (fns) == OVERLOAD);
7243
          DECL_TEMPLATE_INFO (decl) = build_template_info (fns, args);
7244
 
7245
          for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
7246
            if (TREE_PURPOSE (t)
7247
                && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
7248
            {
7249
              error ("default arguments are not allowed in declaration "
7250
                     "of friend template specialization %qD",
7251
                     decl);
7252
              return NULL_TREE;
7253
            }
7254
 
7255
          if (inlinep)
7256
            {
7257
              error ("%<inline%> is not allowed in declaration of friend "
7258
                     "template specialization %qD",
7259
                     decl);
7260
              return NULL_TREE;
7261
            }
7262
        }
7263
    }
7264
 
7265
  /* If this decl has namespace scope, set that up.  */
7266
  if (in_namespace)
7267
    set_decl_namespace (decl, in_namespace, friendp);
7268
  else if (!ctype)
7269
    DECL_CONTEXT (decl) = FROB_CONTEXT (current_decl_namespace ());
7270
 
7271
  /* `main' and builtins have implicit 'C' linkage.  */
7272
  if ((MAIN_NAME_P (declarator)
7273
       || (IDENTIFIER_LENGTH (declarator) > 10
7274
           && IDENTIFIER_POINTER (declarator)[0] == '_'
7275
           && IDENTIFIER_POINTER (declarator)[1] == '_'
7276
           && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
7277
      && current_lang_name == lang_name_cplusplus
7278
      && ctype == NULL_TREE
7279
      && DECL_FILE_SCOPE_P (decl))
7280
    SET_DECL_LANGUAGE (decl, lang_c);
7281
 
7282
  /* Should probably propagate const out from type to decl I bet (mrs).  */
7283
  if (staticp)
7284
    {
7285
      DECL_STATIC_FUNCTION_P (decl) = 1;
7286
      DECL_CONTEXT (decl) = ctype;
7287
    }
7288
 
7289
  if (ctype)
7290
    {
7291
      DECL_CONTEXT (decl) = ctype;
7292
      if (funcdef_flag)
7293
        check_class_member_definition_namespace (decl);
7294
    }
7295
 
7296
  if (ctype == NULL_TREE && DECL_MAIN_P (decl))
7297
    {
7298
      if (processing_template_decl)
7299
        error ("cannot declare %<::main%> to be a template");
7300
      if (inlinep)
7301
        error ("cannot declare %<::main%> to be inline");
7302
      if (!publicp)
7303
        error ("cannot declare %<::main%> to be static");
7304
      inlinep = 0;
7305
      publicp = 1;
7306
    }
7307
 
7308
  /* Members of anonymous types and local classes have no linkage; make
7309
     them internal.  If a typedef is made later, this will be changed.  */
7310
  if (ctype && (TYPE_ANONYMOUS_P (ctype)
7311
                || decl_function_context (TYPE_MAIN_DECL (ctype))))
7312
    publicp = 0;
7313
 
7314
  if (publicp && cxx_dialect == cxx98)
7315
    {
7316
      /* [basic.link]: A name with no linkage (notably, the name of a class
7317
         or enumeration declared in a local scope) shall not be used to
7318
         declare an entity with linkage.
7319
 
7320
         DR 757 relaxes this restriction for C++0x.  */
7321
      t = no_linkage_check (TREE_TYPE (decl),
7322
                            /*relaxed_p=*/false);
7323
      if (t)
7324
        {
7325
          if (TYPE_ANONYMOUS_P (t))
7326
            {
7327
              if (DECL_EXTERN_C_P (decl))
7328
                /* Allow this; it's pretty common in C.  */;
7329
              else
7330
                {
7331
                  permerror (input_location, "anonymous type with no linkage "
7332
                             "used to declare function %q#D with linkage",
7333
                             decl);
7334
                  if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
7335
                    permerror (input_location, "%q+#D does not refer to the unqualified "
7336
                               "type, so it is not used for linkage",
7337
                               TYPE_NAME (t));
7338
                }
7339
            }
7340
          else
7341
            permerror (input_location, "type %qT with no linkage used to "
7342
                       "declare function %q#D with linkage", t, decl);
7343
        }
7344
    }
7345
 
7346
  TREE_PUBLIC (decl) = publicp;
7347
  if (! publicp)
7348
    {
7349
      DECL_INTERFACE_KNOWN (decl) = 1;
7350
      DECL_NOT_REALLY_EXTERN (decl) = 1;
7351
    }
7352
 
7353
  /* If the declaration was declared inline, mark it as such.  */
7354
  if (inlinep)
7355
    DECL_DECLARED_INLINE_P (decl) = 1;
7356
  if (inlinep & 2)
7357
    DECL_DECLARED_CONSTEXPR_P (decl) = true;
7358
 
7359
  DECL_EXTERNAL (decl) = 1;
7360
  if (quals && TREE_CODE (type) == FUNCTION_TYPE)
7361
    {
7362
      error (ctype
7363
             ? G_("static member function %qD cannot have cv-qualifier")
7364
             : G_("non-member function %qD cannot have cv-qualifier"),
7365
             decl);
7366
      quals = TYPE_UNQUALIFIED;
7367
    }
7368
 
7369
  if (IDENTIFIER_OPNAME_P (DECL_NAME (decl))
7370
      && !grok_op_properties (decl, /*complain=*/true))
7371
    return NULL_TREE;
7372
  else if (UDLIT_OPER_P (DECL_NAME (decl)))
7373
    {
7374
      bool long_long_unsigned_p;
7375
      bool long_double_p;
7376
      const char *suffix = NULL;
7377
      /* [over.literal]/6: Literal operators shall not have C linkage. */
7378
      if (DECL_LANGUAGE (decl) == lang_c)
7379
        {
7380
          error ("literal operator with C linkage");
7381
          return NULL_TREE;
7382
        }
7383
 
7384
      if (DECL_NAMESPACE_SCOPE_P (decl))
7385
        {
7386
          if (!check_literal_operator_args (decl, &long_long_unsigned_p,
7387
                                            &long_double_p))
7388
            {
7389
              error ("%qD has invalid argument list", decl);
7390
              return NULL_TREE;
7391
            }
7392
 
7393
          suffix = UDLIT_OP_SUFFIX (DECL_NAME (decl));
7394
          if (long_long_unsigned_p)
7395
            {
7396
              if (cpp_interpret_int_suffix (suffix, strlen (suffix)))
7397
                warning (0, "integer suffix %<%s%>"
7398
                            " shadowed by implementation", suffix);
7399
            }
7400
          else if (long_double_p)
7401
            {
7402
              if (cpp_interpret_float_suffix (suffix, strlen (suffix)))
7403
                warning (0, "floating point suffix %<%s%>"
7404
                            " shadowed by implementation", suffix);
7405
            }
7406
        }
7407
      else
7408
        {
7409
          error ("%qD must be a non-member function", decl);
7410
          return NULL_TREE;
7411
        }
7412
    }
7413
 
7414
  if (funcdef_flag)
7415
    /* Make the init_value nonzero so pushdecl knows this is not
7416
       tentative.  error_mark_node is replaced later with the BLOCK.  */
7417
    DECL_INITIAL (decl) = error_mark_node;
7418
 
7419
  if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
7420
    TREE_NOTHROW (decl) = 1;
7421
 
7422
  /* Caller will do the rest of this.  */
7423
  if (check < 0)
7424
    return decl;
7425
 
7426
  if (ctype != NULL_TREE)
7427
    grokclassfn (ctype, decl, flags);
7428
 
7429
  decl = check_explicit_specialization (orig_declarator, decl,
7430
                                        template_count,
7431
                                        2 * funcdef_flag +
7432
                                        4 * (friendp != 0));
7433
  if (decl == error_mark_node)
7434
    return NULL_TREE;
7435
 
7436
  if (DECL_STATIC_FUNCTION_P (decl))
7437
    check_static_quals (decl, quals);
7438
 
7439
  if (attrlist)
7440
    {
7441
      cplus_decl_attributes (&decl, *attrlist, 0);
7442
      *attrlist = NULL_TREE;
7443
    }
7444
 
7445
  /* Check main's type after attributes have been applied.  */
7446
  if (ctype == NULL_TREE && DECL_MAIN_P (decl))
7447
    {
7448
      if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
7449
                        integer_type_node))
7450
        {
7451
          tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
7452
          tree newtype;
7453
          error ("%<::main%> must return %<int%>");
7454
          newtype = build_function_type (integer_type_node, oldtypeargs);
7455
          TREE_TYPE (decl) = newtype;
7456
        }
7457
      if (warn_main)
7458
        check_main_parameter_types (decl);
7459
    }
7460
 
7461
  if (ctype != NULL_TREE
7462
      && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
7463
      && check)
7464
    {
7465
      tree old_decl = check_classfn (ctype, decl,
7466
                                     (processing_template_decl
7467
                                      > template_class_depth (ctype))
7468
                                     ? current_template_parms
7469
                                     : NULL_TREE);
7470
 
7471
      if (old_decl == error_mark_node)
7472
        return NULL_TREE;
7473
 
7474
      if (old_decl)
7475
        {
7476
          tree ok;
7477
          tree pushed_scope;
7478
 
7479
          if (TREE_CODE (old_decl) == TEMPLATE_DECL)
7480
            /* Because grokfndecl is always supposed to return a
7481
               FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
7482
               here.  We depend on our callers to figure out that its
7483
               really a template that's being returned.  */
7484
            old_decl = DECL_TEMPLATE_RESULT (old_decl);
7485
 
7486
          if (DECL_STATIC_FUNCTION_P (old_decl)
7487
              && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
7488
            {
7489
              /* Remove the `this' parm added by grokclassfn.  */
7490
              revert_static_member_fn (decl);
7491
              check_static_quals (decl, quals);
7492
            }
7493
          if (DECL_ARTIFICIAL (old_decl))
7494
            {
7495
              error ("definition of implicitly-declared %qD", old_decl);
7496
              return NULL_TREE;
7497
            }
7498
          else if (DECL_DEFAULTED_FN (old_decl))
7499
            {
7500
              error ("definition of explicitly-defaulted %q+D", decl);
7501
              error ("%q+#D explicitly defaulted here", old_decl);
7502
              return NULL_TREE;
7503
            }
7504
 
7505
          /* Since we've smashed OLD_DECL to its
7506
             DECL_TEMPLATE_RESULT, we must do the same to DECL.  */
7507
          if (TREE_CODE (decl) == TEMPLATE_DECL)
7508
            decl = DECL_TEMPLATE_RESULT (decl);
7509
 
7510
          /* Attempt to merge the declarations.  This can fail, in
7511
             the case of some invalid specialization declarations.  */
7512
          pushed_scope = push_scope (ctype);
7513
          ok = duplicate_decls (decl, old_decl, friendp);
7514
          if (pushed_scope)
7515
            pop_scope (pushed_scope);
7516
          if (!ok)
7517
            {
7518
              error ("no %q#D member function declared in class %qT",
7519
                     decl, ctype);
7520
              return NULL_TREE;
7521
            }
7522
          return old_decl;
7523
        }
7524
    }
7525
 
7526
  if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
7527
    return NULL_TREE;
7528
 
7529
  if (ctype == NULL_TREE || check)
7530
    return decl;
7531
 
7532
  if (virtualp)
7533
    DECL_VIRTUAL_P (decl) = 1;
7534
 
7535
  return decl;
7536
}
7537
 
7538
/* decl is a FUNCTION_DECL.
7539
   specifiers are the parsed virt-specifiers.
7540
 
7541
   Set flags to reflect the virt-specifiers.
7542
 
7543
   Returns decl.  */
7544
 
7545
static tree
7546
set_virt_specifiers (tree decl, cp_virt_specifiers specifiers)
7547
{
7548
  if (decl == NULL_TREE)
7549
    return decl;
7550
  if (specifiers & VIRT_SPEC_OVERRIDE)
7551
    DECL_OVERRIDE_P (decl) = 1;
7552
  if (specifiers & VIRT_SPEC_FINAL)
7553
    DECL_FINAL_P (decl) = 1;
7554
  return decl;
7555
}
7556
 
7557
/* DECL is a VAR_DECL for a static data member.  Set flags to reflect
7558
   the linkage that DECL will receive in the object file.  */
7559
 
7560
static void
7561
set_linkage_for_static_data_member (tree decl)
7562
{
7563
  /* A static data member always has static storage duration and
7564
     external linkage.  Note that static data members are forbidden in
7565
     local classes -- the only situation in which a class has
7566
     non-external linkage.  */
7567
  TREE_PUBLIC (decl) = 1;
7568
  TREE_STATIC (decl) = 1;
7569
  /* For non-template classes, static data members are always put
7570
     out in exactly those files where they are defined, just as
7571
     with ordinary namespace-scope variables.  */
7572
  if (!processing_template_decl)
7573
    DECL_INTERFACE_KNOWN (decl) = 1;
7574
}
7575
 
7576
/* Create a VAR_DECL named NAME with the indicated TYPE.
7577
 
7578
   If SCOPE is non-NULL, it is the class type or namespace containing
7579
   the variable.  If SCOPE is NULL, the variable should is created in
7580
   the innermost enclosings scope.  */
7581
 
7582
static tree
7583
grokvardecl (tree type,
7584
             tree name,
7585
             const cp_decl_specifier_seq *declspecs,
7586
             int initialized,
7587
             int constp,
7588
             tree scope)
7589
{
7590
  tree decl;
7591
  tree explicit_scope;
7592
 
7593
  gcc_assert (!name || TREE_CODE (name) == IDENTIFIER_NODE);
7594
 
7595
  /* Compute the scope in which to place the variable, but remember
7596
     whether or not that scope was explicitly specified by the user.   */
7597
  explicit_scope = scope;
7598
  if (!scope)
7599
    {
7600
      /* An explicit "extern" specifier indicates a namespace-scope
7601
         variable.  */
7602
      if (declspecs->storage_class == sc_extern)
7603
        scope = current_decl_namespace ();
7604
      else if (!at_function_scope_p ())
7605
        scope = current_scope ();
7606
    }
7607
 
7608
  if (scope
7609
      && (/* If the variable is a namespace-scope variable declared in a
7610
             template, we need DECL_LANG_SPECIFIC.  */
7611
          (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
7612
          /* Similarly for namespace-scope variables with language linkage
7613
             other than C++.  */
7614
          || (TREE_CODE (scope) == NAMESPACE_DECL
7615
              && current_lang_name != lang_name_cplusplus)
7616
          /* Similarly for static data members.  */
7617
          || TYPE_P (scope)))
7618
    decl = build_lang_decl (VAR_DECL, name, type);
7619
  else
7620
    decl = build_decl (input_location, VAR_DECL, name, type);
7621
 
7622
  if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
7623
    set_decl_namespace (decl, explicit_scope, 0);
7624
  else
7625
    DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
7626
 
7627
  if (declspecs->storage_class == sc_extern)
7628
    {
7629
      DECL_THIS_EXTERN (decl) = 1;
7630
      DECL_EXTERNAL (decl) = !initialized;
7631
    }
7632
 
7633
  if (DECL_CLASS_SCOPE_P (decl))
7634
    {
7635
      set_linkage_for_static_data_member (decl);
7636
      /* This function is only called with out-of-class definitions.  */
7637
      DECL_EXTERNAL (decl) = 0;
7638
      check_class_member_definition_namespace (decl);
7639
    }
7640
  /* At top level, either `static' or no s.c. makes a definition
7641
     (perhaps tentative), and absence of `static' makes it public.  */
7642
  else if (toplevel_bindings_p ())
7643
    {
7644
      TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
7645
                            && (DECL_THIS_EXTERN (decl) || ! constp));
7646
      TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
7647
    }
7648
  /* Not at top level, only `static' makes a static definition.  */
7649
  else
7650
    {
7651
      TREE_STATIC (decl) = declspecs->storage_class == sc_static;
7652
      TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
7653
    }
7654
 
7655
  if (declspecs->specs[(int)ds_thread])
7656
    DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
7657
 
7658
  /* If the type of the decl has no linkage, make sure that we'll
7659
     notice that in mark_used.  */
7660
  if (cxx_dialect > cxx98
7661
      && decl_linkage (decl) != lk_none
7662
      && DECL_LANG_SPECIFIC (decl) == NULL
7663
      && !DECL_EXTERN_C_P (decl)
7664
      && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
7665
    retrofit_lang_decl (decl);
7666
 
7667
  if (TREE_PUBLIC (decl))
7668
    {
7669
      /* [basic.link]: A name with no linkage (notably, the name of a class
7670
         or enumeration declared in a local scope) shall not be used to
7671
         declare an entity with linkage.
7672
 
7673
         DR 757 relaxes this restriction for C++0x.  */
7674
      tree t = (cxx_dialect > cxx98 ? NULL_TREE
7675
                : no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false));
7676
      if (t)
7677
        {
7678
          if (TYPE_ANONYMOUS_P (t))
7679
            {
7680
              if (DECL_EXTERN_C_P (decl))
7681
                /* Allow this; it's pretty common in C.  */
7682
                ;
7683
              else
7684
                {
7685
                  /* DRs 132, 319 and 389 seem to indicate types with
7686
                     no linkage can only be used to declare extern "C"
7687
                     entities.  Since it's not always an error in the
7688
                     ISO C++ 90 Standard, we only issue a warning.  */
7689
                  warning (0, "anonymous type with no linkage used to declare "
7690
                           "variable %q#D with linkage", decl);
7691
                  if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
7692
                    warning (0, "%q+#D does not refer to the unqualified "
7693
                             "type, so it is not used for linkage",
7694
                             TYPE_NAME (t));
7695
                }
7696
            }
7697
          else
7698
            warning (0, "type %qT with no linkage used to declare variable "
7699
                     "%q#D with linkage", t, decl);
7700
        }
7701
    }
7702
  else
7703
    DECL_INTERFACE_KNOWN (decl) = 1;
7704
 
7705
  return decl;
7706
}
7707
 
7708
/* Create and return a canonical pointer to member function type, for
7709
   TYPE, which is a POINTER_TYPE to a METHOD_TYPE.  */
7710
 
7711
tree
7712
build_ptrmemfunc_type (tree type)
7713
{
7714
  tree field, fields;
7715
  tree t;
7716
  tree unqualified_variant = NULL_TREE;
7717
 
7718
  if (type == error_mark_node)
7719
    return type;
7720
 
7721
  /* If a canonical type already exists for this type, use it.  We use
7722
     this method instead of type_hash_canon, because it only does a
7723
     simple equality check on the list of field members.  */
7724
 
7725
  if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
7726
    return t;
7727
 
7728
  /* Make sure that we always have the unqualified pointer-to-member
7729
     type first.  */
7730
  if (cp_type_quals (type) != TYPE_UNQUALIFIED)
7731
    unqualified_variant
7732
      = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
7733
 
7734
  t = make_class_type (RECORD_TYPE);
7735
  xref_basetypes (t, NULL_TREE);
7736
 
7737
  /* Let the front end know this is a pointer to member function...  */
7738
  TYPE_PTRMEMFUNC_FLAG (t) = 1;
7739
  /* ... and not really a class type.  */
7740
  SET_CLASS_TYPE_P (t, 0);
7741
 
7742
  field = build_decl (input_location, FIELD_DECL, pfn_identifier, type);
7743
  fields = field;
7744
 
7745
  field = build_decl (input_location, FIELD_DECL, delta_identifier,
7746
                      delta_type_node);
7747
  DECL_CHAIN (field) = fields;
7748
  fields = field;
7749
 
7750
  finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
7751
 
7752
  /* Zap out the name so that the back end will give us the debugging
7753
     information for this anonymous RECORD_TYPE.  */
7754
  TYPE_NAME (t) = NULL_TREE;
7755
 
7756
  /* If this is not the unqualified form of this pointer-to-member
7757
     type, set the TYPE_MAIN_VARIANT for this type to be the
7758
     unqualified type.  Since they are actually RECORD_TYPEs that are
7759
     not variants of each other, we must do this manually.
7760
     As we just built a new type there is no need to do yet another copy.  */
7761
  if (cp_type_quals (type) != TYPE_UNQUALIFIED)
7762
    {
7763
      int type_quals = cp_type_quals (type);
7764
      TYPE_READONLY (t) = (type_quals & TYPE_QUAL_CONST) != 0;
7765
      TYPE_VOLATILE (t) = (type_quals & TYPE_QUAL_VOLATILE) != 0;
7766
      TYPE_RESTRICT (t) = (type_quals & TYPE_QUAL_RESTRICT) != 0;
7767
      TYPE_MAIN_VARIANT (t) = unqualified_variant;
7768
      TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
7769
      TYPE_NEXT_VARIANT (unqualified_variant) = t;
7770
      TREE_TYPE (TYPE_BINFO (t)) = t;
7771
    }
7772
 
7773
  /* Cache this pointer-to-member type so that we can find it again
7774
     later.  */
7775
  TYPE_SET_PTRMEMFUNC_TYPE (type, t);
7776
 
7777
  if (TYPE_STRUCTURAL_EQUALITY_P (type))
7778
    SET_TYPE_STRUCTURAL_EQUALITY (t);
7779
  else if (TYPE_CANONICAL (type) != type)
7780
    TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
7781
 
7782
  return t;
7783
}
7784
 
7785
/* Create and return a pointer to data member type.  */
7786
 
7787
tree
7788
build_ptrmem_type (tree class_type, tree member_type)
7789
{
7790
  if (TREE_CODE (member_type) == METHOD_TYPE)
7791
    {
7792
      cp_cv_quals quals = type_memfn_quals (member_type);
7793
      member_type = build_memfn_type (member_type, class_type, quals);
7794
      return build_ptrmemfunc_type (build_pointer_type (member_type));
7795
    }
7796
  else
7797
    {
7798
      gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
7799
      return build_offset_type (class_type, member_type);
7800
    }
7801
}
7802
 
7803
/* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
7804
   Check to see that the definition is valid.  Issue appropriate error
7805
   messages.  Return 1 if the definition is particularly bad, or 0
7806
   otherwise.  */
7807
 
7808
static int
7809
check_static_variable_definition (tree decl, tree type)
7810
{
7811
  /* Can't check yet if we don't know the type.  */
7812
  if (dependent_type_p (type))
7813
    return 0;
7814
  /* If DECL is declared constexpr, we'll do the appropriate checks
7815
     in check_initializer.  */
7816
  if (DECL_P (decl) && DECL_DECLARED_CONSTEXPR_P (decl))
7817
    return 0;
7818
  else if (cxx_dialect >= cxx0x && !INTEGRAL_OR_ENUMERATION_TYPE_P (type))
7819
    {
7820
      if (!COMPLETE_TYPE_P (type))
7821
        error ("in-class initialization of static data member %q#D of "
7822
               "incomplete type", decl);
7823
      else if (literal_type_p (type))
7824
        permerror (input_location,
7825
                   "%<constexpr%> needed for in-class initialization of "
7826
                   "static data member %q#D of non-integral type", decl);
7827
      else
7828
        error ("in-class initialization of static data member %q#D of "
7829
               "non-literal type", decl);
7830
      return 1;
7831
    }
7832
 
7833
  /* Motion 10 at San Diego: If a static const integral data member is
7834
     initialized with an integral constant expression, the initializer
7835
     may appear either in the declaration (within the class), or in
7836
     the definition, but not both.  If it appears in the class, the
7837
     member is a member constant.  The file-scope definition is always
7838
     required.  */
7839
  if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
7840
    {
7841
      error ("invalid in-class initialization of static data member "
7842
             "of non-integral type %qT",
7843
             type);
7844
      return 1;
7845
    }
7846
  else if (!CP_TYPE_CONST_P (type))
7847
    error ("ISO C++ forbids in-class initialization of non-const "
7848
           "static member %qD",
7849
           decl);
7850
  else if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
7851
    pedwarn (input_location, OPT_pedantic, "ISO C++ forbids initialization of member constant "
7852
             "%qD of non-integral type %qT", decl, type);
7853
 
7854
  return 0;
7855
}
7856
 
7857
/* *expr_p is part of the TYPE_SIZE of a variably-sized array.  If any
7858
   SAVE_EXPRs in *expr_p wrap expressions with side-effects, break those
7859
   expressions out into temporary variables so that walk_tree doesn't
7860
   step into them (c++/15764).  */
7861
 
7862
static tree
7863
stabilize_save_expr_r (tree *expr_p, int *walk_subtrees, void *data)
7864
{
7865
  struct pointer_set_t *pset = (struct pointer_set_t *)data;
7866
  tree expr = *expr_p;
7867
  if (TREE_CODE (expr) == SAVE_EXPR)
7868
    {
7869
      tree op = TREE_OPERAND (expr, 0);
7870
      cp_walk_tree (&op, stabilize_save_expr_r, data, pset);
7871
      if (TREE_SIDE_EFFECTS (op))
7872
        TREE_OPERAND (expr, 0) = get_temp_regvar (TREE_TYPE (op), op);
7873
      *walk_subtrees = 0;
7874
    }
7875
  else if (!EXPR_P (expr) || !TREE_SIDE_EFFECTS (expr))
7876
    *walk_subtrees = 0;
7877
  return NULL;
7878
}
7879
 
7880
/* Entry point for the above.  */
7881
 
7882
static void
7883
stabilize_vla_size (tree size)
7884
{
7885
  struct pointer_set_t *pset = pointer_set_create ();
7886
  /* Break out any function calls into temporary variables.  */
7887
  cp_walk_tree (&size, stabilize_save_expr_r, pset, pset);
7888
}
7889
 
7890
/* Given the SIZE (i.e., number of elements) in an array, compute an
7891
   appropriate index type for the array.  If non-NULL, NAME is the
7892
   name of the thing being declared.  */
7893
 
7894
tree
7895
compute_array_index_type (tree name, tree size, tsubst_flags_t complain)
7896
{
7897
  tree type;
7898
  tree itype;
7899
  tree osize = size;
7900
  tree abi_1_itype = NULL_TREE;
7901
 
7902
  if (error_operand_p (size))
7903
    return error_mark_node;
7904
 
7905
  type = TREE_TYPE (size);
7906
  /* type_dependent_expression_p? */
7907
  if (!dependent_type_p (type))
7908
    {
7909
      mark_rvalue_use (size);
7910
 
7911
      if (cxx_dialect < cxx0x && TREE_CODE (size) == NOP_EXPR
7912
          && TREE_SIDE_EFFECTS (size))
7913
        /* In C++98, we mark a non-constant array bound with a magic
7914
           NOP_EXPR with TREE_SIDE_EFFECTS; don't fold in that case.  */;
7915
      else
7916
        {
7917
          size = fold_non_dependent_expr (size);
7918
 
7919
          if (CLASS_TYPE_P (type)
7920
              && CLASSTYPE_LITERAL_P (type))
7921
            {
7922
              size = build_expr_type_conversion (WANT_INT, size, true);
7923
              if (!size)
7924
                {
7925
                  if (!(complain & tf_error))
7926
                    return error_mark_node;
7927
                  if (name)
7928
                    error ("size of array %qD has non-integral type %qT",
7929
                           name, type);
7930
                  else
7931
                    error ("size of array has non-integral type %qT", type);
7932
                  size = integer_one_node;
7933
                }
7934
              if (size == error_mark_node)
7935
                return error_mark_node;
7936
              type = TREE_TYPE (size);
7937
              /* We didn't support this case in GCC 3.2, so don't bother
7938
                 trying to model it now in ABI v1.  */
7939
              abi_1_itype = error_mark_node;
7940
            }
7941
 
7942
          size = maybe_constant_value (size);
7943
          if (!TREE_CONSTANT (size))
7944
            size = osize;
7945
        }
7946
 
7947
      if (error_operand_p (size))
7948
        return error_mark_node;
7949
 
7950
      /* The array bound must be an integer type.  */
7951
      if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
7952
        {
7953
          if (!(complain & tf_error))
7954
            return error_mark_node;
7955
          if (name)
7956
            error ("size of array %qD has non-integral type %qT", name, type);
7957
          else
7958
            error ("size of array has non-integral type %qT", type);
7959
          size = integer_one_node;
7960
          type = TREE_TYPE (size);
7961
        }
7962
    }
7963
 
7964
  /* A type is dependent if it is...an array type constructed from any
7965
     dependent type or whose size is specified by a constant expression
7966
     that is value-dependent.  */
7967
  /* We can only call value_dependent_expression_p on integral constant
7968
     expressions; treat non-constant expressions as dependent, too.  */
7969
  if (processing_template_decl
7970
      && (dependent_type_p (type)
7971
          || !TREE_CONSTANT (size) || value_dependent_expression_p (size)))
7972
    {
7973
      /* We cannot do any checking for a SIZE that isn't known to be
7974
         constant. Just build the index type and mark that it requires
7975
         structural equality checks.  */
7976
      itype = build_index_type (build_min (MINUS_EXPR, sizetype,
7977
                                           size, integer_one_node));
7978
      TYPE_DEPENDENT_P (itype) = 1;
7979
      TYPE_DEPENDENT_P_VALID (itype) = 1;
7980
      SET_TYPE_STRUCTURAL_EQUALITY (itype);
7981
      return itype;
7982
    }
7983
 
7984
  if (!abi_version_at_least (2) && processing_template_decl
7985
      && abi_1_itype == NULL_TREE)
7986
    /* For abi-1, we handled all instances in templates the same way,
7987
       even when they were non-dependent. This affects the manglings
7988
       produced.  So, we do the normal checking for non-dependent
7989
       sizes, but at the end we'll return the same type that abi-1
7990
       would have, but with TYPE_CANONICAL set to the "right"
7991
       value that the current ABI would provide. */
7992
    abi_1_itype = build_index_type (build_min (MINUS_EXPR, sizetype,
7993
                                               osize, integer_one_node));
7994
 
7995
  /* Normally, the array-bound will be a constant.  */
7996
  if (TREE_CODE (size) == INTEGER_CST)
7997
    {
7998
      /* Check to see if the array bound overflowed.  Make that an
7999
         error, no matter how generous we're being.  */
8000
      constant_expression_error (size);
8001
 
8002
      /* An array must have a positive number of elements.  */
8003
      if (INT_CST_LT (size, integer_zero_node))
8004
        {
8005
          if (!(complain & tf_error))
8006
            return error_mark_node;
8007
          if (name)
8008
            error ("size of array %qD is negative", name);
8009
          else
8010
            error ("size of array is negative");
8011
          size = integer_one_node;
8012
        }
8013
      /* As an extension we allow zero-sized arrays.  */
8014
      else if (integer_zerop (size))
8015
        {
8016
          if (!(complain & tf_error))
8017
            /* We must fail if performing argument deduction (as
8018
               indicated by the state of complain), so that
8019
               another substitution can be found.  */
8020
            return error_mark_node;
8021
          else if (in_system_header)
8022
            /* Allow them in system headers because glibc uses them.  */;
8023
          else if (name)
8024
            pedwarn (input_location, OPT_pedantic, "ISO C++ forbids zero-size array %qD", name);
8025
          else
8026
            pedwarn (input_location, OPT_pedantic, "ISO C++ forbids zero-size array");
8027
        }
8028
    }
8029
  else if (TREE_CONSTANT (size)
8030
           /* We don't allow VLAs at non-function scopes, or during
8031
              tentative template substitution.  */
8032
           || !at_function_scope_p () || !(complain & tf_error))
8033
    {
8034
      if (!(complain & tf_error))
8035
        return error_mark_node;
8036
      /* `(int) &fn' is not a valid array bound.  */
8037
      if (name)
8038
        error ("size of array %qD is not an integral constant-expression",
8039
               name);
8040
      else
8041
        error ("size of array is not an integral constant-expression");
8042
      size = integer_one_node;
8043
    }
8044
  else if (pedantic && warn_vla != 0)
8045
    {
8046
      if (name)
8047
        pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array %qD", name);
8048
      else
8049
        pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array");
8050
    }
8051
  else if (warn_vla > 0)
8052
    {
8053
      if (name)
8054
        warning (OPT_Wvla,
8055
                 "variable length array %qD is used", name);
8056
      else
8057
        warning (OPT_Wvla,
8058
                 "variable length array is used");
8059
    }
8060
 
8061
  if (processing_template_decl && !TREE_CONSTANT (size))
8062
    /* A variable sized array.  */
8063
    itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
8064
  else
8065
    {
8066
      HOST_WIDE_INT saved_processing_template_decl;
8067
 
8068
      /* Compute the index of the largest element in the array.  It is
8069
         one less than the number of elements in the array.  We save
8070
         and restore PROCESSING_TEMPLATE_DECL so that computations in
8071
         cp_build_binary_op will be appropriately folded.  */
8072
      saved_processing_template_decl = processing_template_decl;
8073
      processing_template_decl = 0;
8074
      itype = cp_build_binary_op (input_location,
8075
                                  MINUS_EXPR,
8076
                                  cp_convert (ssizetype, size),
8077
                                  cp_convert (ssizetype, integer_one_node),
8078
                                  tf_warning_or_error);
8079
      itype = fold (itype);
8080
      processing_template_decl = saved_processing_template_decl;
8081
 
8082
      if (!TREE_CONSTANT (itype))
8083
        /* A variable sized array.  */
8084
        itype = variable_size (itype);
8085
      /* Make sure that there was no overflow when creating to a signed
8086
         index type.  (For example, on a 32-bit machine, an array with
8087
         size 2^32 - 1 is too big.)  */
8088
      else if (TREE_CODE (itype) == INTEGER_CST
8089
               && TREE_OVERFLOW (itype))
8090
        {
8091
          if (!(complain & tf_error))
8092
            return error_mark_node;
8093
          error ("overflow in array dimension");
8094
          TREE_OVERFLOW (itype) = 0;
8095
        }
8096
    }
8097
 
8098
  /* Create and return the appropriate index type.  */
8099
  if (abi_1_itype && abi_1_itype != error_mark_node)
8100
    {
8101
      tree t = build_index_type (itype);
8102
      TYPE_CANONICAL (abi_1_itype) = TYPE_CANONICAL (t);
8103
      itype = abi_1_itype;
8104
    }
8105
  else
8106
    itype = build_index_type (itype);
8107
 
8108
  /* If the index type were dependent, we would have returned early, so
8109
     remember that it isn't.  */
8110
  TYPE_DEPENDENT_P (itype) = 0;
8111
  TYPE_DEPENDENT_P_VALID (itype) = 1;
8112
  return itype;
8113
}
8114
 
8115
/* Returns the scope (if any) in which the entity declared by
8116
   DECLARATOR will be located.  If the entity was declared with an
8117
   unqualified name, NULL_TREE is returned.  */
8118
 
8119
tree
8120
get_scope_of_declarator (const cp_declarator *declarator)
8121
{
8122
  while (declarator && declarator->kind != cdk_id)
8123
    declarator = declarator->declarator;
8124
 
8125
  /* If the declarator-id is a SCOPE_REF, the scope in which the
8126
     declaration occurs is the first operand.  */
8127
  if (declarator
8128
      && declarator->u.id.qualifying_scope)
8129
    return declarator->u.id.qualifying_scope;
8130
 
8131
  /* Otherwise, the declarator is not a qualified name; the entity will
8132
     be declared in the current scope.  */
8133
  return NULL_TREE;
8134
}
8135
 
8136
/* Returns an ARRAY_TYPE for an array with SIZE elements of the
8137
   indicated TYPE.  If non-NULL, NAME is the NAME of the declaration
8138
   with this type.  */
8139
 
8140
static tree
8141
create_array_type_for_decl (tree name, tree type, tree size)
8142
{
8143
  tree itype = NULL_TREE;
8144
 
8145
  /* If things have already gone awry, bail now.  */
8146
  if (type == error_mark_node || size == error_mark_node)
8147
    return error_mark_node;
8148
 
8149
  /* 8.3.4/1: If the type of the identifier of D contains the auto
8150
     type-specifier, the program is ill-formed.  */
8151
  if (pedantic && type_uses_auto (type))
8152
    pedwarn (input_location, OPT_pedantic,
8153
             "declaration of %qD as array of %<auto%>", name);
8154
 
8155
  /* If there are some types which cannot be array elements,
8156
     issue an error-message and return.  */
8157
  switch (TREE_CODE (type))
8158
    {
8159
    case VOID_TYPE:
8160
      if (name)
8161
        error ("declaration of %qD as array of void", name);
8162
      else
8163
        error ("creating array of void");
8164
      return error_mark_node;
8165
 
8166
    case FUNCTION_TYPE:
8167
      if (name)
8168
        error ("declaration of %qD as array of functions", name);
8169
      else
8170
        error ("creating array of functions");
8171
      return error_mark_node;
8172
 
8173
    case REFERENCE_TYPE:
8174
      if (name)
8175
        error ("declaration of %qD as array of references", name);
8176
      else
8177
        error ("creating array of references");
8178
      return error_mark_node;
8179
 
8180
    case METHOD_TYPE:
8181
      if (name)
8182
        error ("declaration of %qD as array of function members", name);
8183
      else
8184
        error ("creating array of function members");
8185
      return error_mark_node;
8186
 
8187
    default:
8188
      break;
8189
    }
8190
 
8191
  /* [dcl.array]
8192
 
8193
     The constant expressions that specify the bounds of the arrays
8194
     can be omitted only for the first member of the sequence.  */
8195
  if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
8196
    {
8197
      if (name)
8198
        error ("declaration of %qD as multidimensional array must "
8199
               "have bounds for all dimensions except the first",
8200
               name);
8201
      else
8202
        error ("multidimensional array must have bounds for all "
8203
               "dimensions except the first");
8204
 
8205
      return error_mark_node;
8206
    }
8207
 
8208
  /* Figure out the index type for the array.  */
8209
  if (size)
8210
    itype = compute_array_index_type (name, size, tf_warning_or_error);
8211
 
8212
  /* [dcl.array]
8213
     T is called the array element type; this type shall not be [...] an
8214
     abstract class type.  */
8215
  abstract_virtuals_error (name, type);
8216
 
8217
  return build_cplus_array_type (type, itype);
8218
}
8219
 
8220
/* Check that it's OK to declare a function with the indicated TYPE.
8221
   SFK indicates the kind of special function (if any) that this
8222
   function is.  OPTYPE is the type given in a conversion operator
8223
   declaration, or the class type for a constructor/destructor.
8224
   Returns the actual return type of the function; that
8225
   may be different than TYPE if an error occurs, or for certain
8226
   special functions.  */
8227
 
8228
static tree
8229
check_special_function_return_type (special_function_kind sfk,
8230
                                    tree type,
8231
                                    tree optype)
8232
{
8233
  switch (sfk)
8234
    {
8235
    case sfk_constructor:
8236
      if (type)
8237
        error ("return type specification for constructor invalid");
8238
 
8239
      if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
8240
        type = build_pointer_type (optype);
8241
      else
8242
        type = void_type_node;
8243
      break;
8244
 
8245
    case sfk_destructor:
8246
      if (type)
8247
        error ("return type specification for destructor invalid");
8248
      /* We can't use the proper return type here because we run into
8249
         problems with ambiguous bases and covariant returns.
8250
         Java classes are left unchanged because (void *) isn't a valid
8251
         Java type, and we don't want to change the Java ABI.  */
8252
      if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
8253
        type = build_pointer_type (void_type_node);
8254
      else
8255
        type = void_type_node;
8256
      break;
8257
 
8258
    case sfk_conversion:
8259
      if (type)
8260
        error ("return type specified for %<operator %T%>",  optype);
8261
      type = optype;
8262
      break;
8263
 
8264
    default:
8265
      gcc_unreachable ();
8266
    }
8267
 
8268
  return type;
8269
}
8270
 
8271
/* A variable or data member (whose unqualified name is IDENTIFIER)
8272
   has been declared with the indicated TYPE.  If the TYPE is not
8273
   acceptable, issue an error message and return a type to use for
8274
   error-recovery purposes.  */
8275
 
8276
tree
8277
check_var_type (tree identifier, tree type)
8278
{
8279
  if (VOID_TYPE_P (type))
8280
    {
8281
      if (!identifier)
8282
        error ("unnamed variable or field declared void");
8283
      else if (TREE_CODE (identifier) == IDENTIFIER_NODE)
8284
        {
8285
          gcc_assert (!IDENTIFIER_OPNAME_P (identifier));
8286
          error ("variable or field %qE declared void", identifier);
8287
        }
8288
      else
8289
        error ("variable or field declared void");
8290
      type = error_mark_node;
8291
    }
8292
 
8293
  return type;
8294
}
8295
 
8296
/* Given declspecs and a declarator (abstract or otherwise), determine
8297
   the name and type of the object declared and construct a DECL node
8298
   for it.
8299
 
8300
   DECLSPECS points to the representation of declaration-specifier
8301
   sequence that precedes declarator.
8302
 
8303
   DECL_CONTEXT says which syntactic context this declaration is in:
8304
     NORMAL for most contexts.  Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
8305
     FUNCDEF for a function definition.  Like NORMAL but a few different
8306
      error messages in each case.  Return value may be zero meaning
8307
      this definition is too screwy to try to parse.
8308
     MEMFUNCDEF for a function definition.  Like FUNCDEF but prepares to
8309
      handle member functions (which have FIELD context).
8310
      Return value may be zero meaning this definition is too screwy to
8311
      try to parse.
8312
     PARM for a parameter declaration (either within a function prototype
8313
      or before a function body).  Make a PARM_DECL, or return void_type_node.
8314
     TPARM for a template parameter declaration.
8315
     CATCHPARM for a parameter declaration before a catch clause.
8316
     TYPENAME if for a typename (in a cast or sizeof).
8317
      Don't make a DECL node; just return the ..._TYPE node.
8318
     FIELD for a struct or union field; make a FIELD_DECL.
8319
     BITFIELD for a field with specified width.
8320
 
8321
   INITIALIZED is as for start_decl.
8322
 
8323
   ATTRLIST is a pointer to the list of attributes, which may be NULL
8324
   if there are none; *ATTRLIST may be modified if attributes from inside
8325
   the declarator should be applied to the declaration.
8326
 
8327
   When this function is called, scoping variables (such as
8328
   CURRENT_CLASS_TYPE) should reflect the scope in which the
8329
   declaration occurs, not the scope in which the new declaration will
8330
   be placed.  For example, on:
8331
 
8332
     void S::f() { ... }
8333
 
8334
   when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
8335
   should not be `S'.
8336
 
8337
   Returns a DECL (if a declarator is present), a TYPE (if there is no
8338
   declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
8339
   error occurs. */
8340
 
8341
tree
8342
grokdeclarator (const cp_declarator *declarator,
8343
                const cp_decl_specifier_seq *declspecs,
8344
                enum decl_context decl_context,
8345
                int initialized,
8346
                tree* attrlist)
8347
{
8348
  tree type = NULL_TREE;
8349
  int longlong = 0;
8350
  int explicit_int128 = 0;
8351
  int virtualp, explicitp, friendp, inlinep, staticp;
8352
  int explicit_int = 0;
8353
  int explicit_char = 0;
8354
  int defaulted_int = 0;
8355
  tree dependent_name = NULL_TREE;
8356
 
8357
  tree typedef_decl = NULL_TREE;
8358
  const char *name = NULL;
8359
  tree typedef_type = NULL_TREE;
8360
  /* True if this declarator is a function definition.  */
8361
  bool funcdef_flag = false;
8362
  cp_declarator_kind innermost_code = cdk_error;
8363
  int bitfield = 0;
8364
#if 0
8365
  /* See the code below that used this.  */
8366
  tree decl_attr = NULL_TREE;
8367
#endif
8368
 
8369
  /* Keep track of what sort of function is being processed
8370
     so that we can warn about default return values, or explicit
8371
     return values which do not match prescribed defaults.  */
8372
  special_function_kind sfk = sfk_none;
8373
 
8374
  tree dname = NULL_TREE;
8375
  tree ctor_return_type = NULL_TREE;
8376
  enum overload_flags flags = NO_SPECIAL;
8377
  /* cv-qualifiers that apply to the declarator, for a declaration of
8378
     a member function.  */
8379
  cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
8380
  /* virt-specifiers that apply to the declarator, for a declaration of
8381
     a member function.  */
8382
  cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
8383
  /* cv-qualifiers that apply to the type specified by the DECLSPECS.  */
8384
  int type_quals;
8385
  tree raises = NULL_TREE;
8386
  int template_count = 0;
8387
  tree returned_attrs = NULL_TREE;
8388
  tree parms = NULL_TREE;
8389
  const cp_declarator *id_declarator;
8390
  /* The unqualified name of the declarator; either an
8391
     IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR.  */
8392
  tree unqualified_id;
8393
  /* The class type, if any, in which this entity is located,
8394
     or NULL_TREE if none.  Note that this value may be different from
8395
     the current class type; for example if an attempt is made to declare
8396
     "A::f" inside "B", this value will be "A".  */
8397
  tree ctype = current_class_type;
8398
  /* The NAMESPACE_DECL for the namespace in which this entity is
8399
     located.  If an unqualified name is used to declare the entity,
8400
     this value will be NULL_TREE, even if the entity is located at
8401
     namespace scope.  */
8402
  tree in_namespace = NULL_TREE;
8403
  cp_storage_class storage_class;
8404
  bool unsigned_p, signed_p, short_p, long_p, thread_p;
8405
  bool type_was_error_mark_node = false;
8406
  bool parameter_pack_p = declarator? declarator->parameter_pack_p : false;
8407
  bool template_type_arg = false;
8408
  bool template_parm_flag = false;
8409
  bool constexpr_p = declspecs->specs[(int) ds_constexpr];
8410
  const char *errmsg;
8411
 
8412
  signed_p = declspecs->specs[(int)ds_signed];
8413
  unsigned_p = declspecs->specs[(int)ds_unsigned];
8414
  short_p = declspecs->specs[(int)ds_short];
8415
  long_p = declspecs->specs[(int)ds_long];
8416
  longlong = declspecs->specs[(int)ds_long] >= 2;
8417
  explicit_int128 = declspecs->explicit_int128_p;
8418
  thread_p = declspecs->specs[(int)ds_thread];
8419
 
8420
  if (decl_context == FUNCDEF)
8421
    funcdef_flag = true, decl_context = NORMAL;
8422
  else if (decl_context == MEMFUNCDEF)
8423
    funcdef_flag = true, decl_context = FIELD;
8424
  else if (decl_context == BITFIELD)
8425
    bitfield = 1, decl_context = FIELD;
8426
  else if (decl_context == TEMPLATE_TYPE_ARG)
8427
    template_type_arg = true, decl_context = TYPENAME;
8428
  else if (decl_context == TPARM)
8429
    template_parm_flag = true, decl_context = PARM;
8430
 
8431
  if (initialized > 1)
8432
    funcdef_flag = true;
8433
 
8434
  /* Look inside a declarator for the name being declared
8435
     and get it as a string, for an error message.  */
8436
  for (id_declarator = declarator;
8437
       id_declarator;
8438
       id_declarator = id_declarator->declarator)
8439
    {
8440
      if (id_declarator->kind != cdk_id)
8441
        innermost_code = id_declarator->kind;
8442
 
8443
      switch (id_declarator->kind)
8444
        {
8445
        case cdk_function:
8446
          if (id_declarator->declarator
8447
              && id_declarator->declarator->kind == cdk_id)
8448
            {
8449
              sfk = id_declarator->declarator->u.id.sfk;
8450
              if (sfk == sfk_destructor)
8451
                flags = DTOR_FLAG;
8452
            }
8453
          break;
8454
 
8455
        case cdk_id:
8456
          {
8457
            tree qualifying_scope = id_declarator->u.id.qualifying_scope;
8458
            tree decl = id_declarator->u.id.unqualified_name;
8459
            if (!decl)
8460
              break;
8461
            if (qualifying_scope)
8462
              {
8463
                if (at_function_scope_p ())
8464
                  {
8465
                    /* [dcl.meaning]
8466
 
8467
                       A declarator-id shall not be qualified except
8468
                       for ...
8469
 
8470
                       None of the cases are permitted in block
8471
                       scope.  */
8472
                    if (qualifying_scope == global_namespace)
8473
                      error ("invalid use of qualified-name %<::%D%>",
8474
                             decl);
8475
                    else if (TYPE_P (qualifying_scope))
8476
                      error ("invalid use of qualified-name %<%T::%D%>",
8477
                             qualifying_scope, decl);
8478
                    else
8479
                      error ("invalid use of qualified-name %<%D::%D%>",
8480
                             qualifying_scope, decl);
8481
                    return error_mark_node;
8482
                  }
8483
                else if (TYPE_P (qualifying_scope))
8484
                  {
8485
                    ctype = qualifying_scope;
8486
                    if (!MAYBE_CLASS_TYPE_P (ctype))
8487
                      {
8488
                        error ("%q#T is not a class or a namespace", ctype);
8489
                        ctype = NULL_TREE;
8490
                      }
8491
                    else if (innermost_code != cdk_function
8492
                             && current_class_type
8493
                             && !UNIQUELY_DERIVED_FROM_P (ctype,
8494
                                                          current_class_type))
8495
                      {
8496
                        error ("type %qT is not derived from type %qT",
8497
                               ctype, current_class_type);
8498
                        return error_mark_node;
8499
                      }
8500
                  }
8501
                else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
8502
                  in_namespace = qualifying_scope;
8503
              }
8504
            switch (TREE_CODE (decl))
8505
              {
8506
              case BIT_NOT_EXPR:
8507
                {
8508
                  tree type;
8509
 
8510
                  if (innermost_code != cdk_function)
8511
                    {
8512
                      error ("declaration of %qD as non-function", decl);
8513
                      return error_mark_node;
8514
                    }
8515
                  else if (!qualifying_scope
8516
                           && !(current_class_type && at_class_scope_p ()))
8517
                    {
8518
                      error ("declaration of %qD as non-member", decl);
8519
                      return error_mark_node;
8520
                    }
8521
 
8522
                  type = TREE_OPERAND (decl, 0);
8523
                  if (TYPE_P (type))
8524
                    type = constructor_name (type);
8525
                  name = identifier_to_locale (IDENTIFIER_POINTER (type));
8526
                  dname = decl;
8527
                }
8528
                break;
8529
 
8530
              case TEMPLATE_ID_EXPR:
8531
                {
8532
                  tree fns = TREE_OPERAND (decl, 0);
8533
 
8534
                  dname = fns;
8535
                  if (TREE_CODE (dname) != IDENTIFIER_NODE)
8536
                    {
8537
                      gcc_assert (is_overloaded_fn (dname));
8538
                      dname = DECL_NAME (get_first_fn (dname));
8539
                    }
8540
                }
8541
                /* Fall through.  */
8542
 
8543
              case IDENTIFIER_NODE:
8544
                if (TREE_CODE (decl) == IDENTIFIER_NODE)
8545
                  dname = decl;
8546
 
8547
                if (C_IS_RESERVED_WORD (dname))
8548
                  {
8549
                    error ("declarator-id missing; using reserved word %qD",
8550
                           dname);
8551
                    name = identifier_to_locale (IDENTIFIER_POINTER (dname));
8552
                  }
8553
                else if (!IDENTIFIER_TYPENAME_P (dname))
8554
                  name = identifier_to_locale (IDENTIFIER_POINTER (dname));
8555
                else
8556
                  {
8557
                    gcc_assert (flags == NO_SPECIAL);
8558
                    flags = TYPENAME_FLAG;
8559
                    ctor_return_type = TREE_TYPE (dname);
8560
                    sfk = sfk_conversion;
8561
                    if (is_typename_at_global_scope (dname))
8562
                      name = identifier_to_locale (IDENTIFIER_POINTER (dname));
8563
                    else
8564
                      name = "<invalid operator>";
8565
                  }
8566
                break;
8567
 
8568
              default:
8569
                gcc_unreachable ();
8570
              }
8571
            break;
8572
          }
8573
 
8574
        case cdk_array:
8575
        case cdk_pointer:
8576
        case cdk_reference:
8577
        case cdk_ptrmem:
8578
          break;
8579
 
8580
        case cdk_error:
8581
          return error_mark_node;
8582
 
8583
        default:
8584
          gcc_unreachable ();
8585
        }
8586
      if (id_declarator->kind == cdk_id)
8587
        break;
8588
    }
8589
 
8590
  /* [dcl.fct.edf]
8591
 
8592
     The declarator in a function-definition shall have the form
8593
     D1 ( parameter-declaration-clause) ...  */
8594
  if (funcdef_flag && innermost_code != cdk_function)
8595
    {
8596
      error ("function definition does not declare parameters");
8597
      return error_mark_node;
8598
    }
8599
 
8600
  if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
8601
      && innermost_code != cdk_function
8602
      && ! (ctype && !declspecs->any_specifiers_p))
8603
    {
8604
      error ("declaration of %qD as non-function", dname);
8605
      return error_mark_node;
8606
    }
8607
 
8608
  if (dname
8609
      && TREE_CODE (dname) == IDENTIFIER_NODE
8610
      && UDLIT_OPER_P (dname)
8611
      && innermost_code != cdk_function)
8612
    {
8613
      error ("declaration of %qD as non-function", dname);
8614
      return error_mark_node;
8615
    }
8616
 
8617
  if (dname && IDENTIFIER_OPNAME_P (dname))
8618
    {
8619
      if (declspecs->specs[(int)ds_typedef])
8620
        {
8621
          error ("declaration of %qD as %<typedef%>", dname);
8622
          return error_mark_node;
8623
        }
8624
      else if (decl_context == PARM || decl_context == CATCHPARM)
8625
        {
8626
          error ("declaration of %qD as parameter", dname);
8627
          return error_mark_node;
8628
        }
8629
    }
8630
 
8631
  /* Anything declared one level down from the top level
8632
     must be one of the parameters of a function
8633
     (because the body is at least two levels down).  */
8634
 
8635
  /* This heuristic cannot be applied to C++ nodes! Fixed, however,
8636
     by not allowing C++ class definitions to specify their parameters
8637
     with xdecls (must be spec.d in the parmlist).
8638
 
8639
     Since we now wait to push a class scope until we are sure that
8640
     we are in a legitimate method context, we must set oldcname
8641
     explicitly (since current_class_name is not yet alive).
8642
 
8643
     We also want to avoid calling this a PARM if it is in a namespace.  */
8644
 
8645
  if (decl_context == NORMAL && !toplevel_bindings_p ())
8646
    {
8647
      cp_binding_level *b = current_binding_level;
8648
      current_binding_level = b->level_chain;
8649
      if (current_binding_level != 0 && toplevel_bindings_p ())
8650
        decl_context = PARM;
8651
      current_binding_level = b;
8652
    }
8653
 
8654
  if (name == NULL)
8655
    name = decl_context == PARM ? "parameter" : "type name";
8656
 
8657
  if (constexpr_p && declspecs->specs[(int)ds_typedef])
8658
    {
8659
      error ("%<constexpr%> cannot appear in a typedef declaration");
8660
      return error_mark_node;
8661
    }
8662
 
8663
  /* If there were multiple types specified in the decl-specifier-seq,
8664
     issue an error message.  */
8665
  if (declspecs->multiple_types_p)
8666
    {
8667
      error ("two or more data types in declaration of %qs", name);
8668
      return error_mark_node;
8669
    }
8670
 
8671
  if (declspecs->conflicting_specifiers_p)
8672
    {
8673
      error ("conflicting specifiers in declaration of %qs", name);
8674
      return error_mark_node;
8675
    }
8676
 
8677
  /* Extract the basic type from the decl-specifier-seq.  */
8678
  type = declspecs->type;
8679
  if (type == error_mark_node)
8680
    {
8681
      type = NULL_TREE;
8682
      type_was_error_mark_node = true;
8683
    }
8684
  /* If the entire declaration is itself tagged as deprecated then
8685
     suppress reports of deprecated items.  */
8686
  if (type && TREE_DEPRECATED (type)
8687
      && deprecated_state != DEPRECATED_SUPPRESS)
8688
    warn_deprecated_use (type, NULL_TREE);
8689
  if (type && TREE_CODE (type) == TYPE_DECL)
8690
    {
8691
      typedef_decl = type;
8692
      type = TREE_TYPE (typedef_decl);
8693
      if (TREE_DEPRECATED (type)
8694
          && DECL_ARTIFICIAL (typedef_decl)
8695
          && deprecated_state != DEPRECATED_SUPPRESS)
8696
        warn_deprecated_use (type, NULL_TREE);
8697
    }
8698
  /* No type at all: default to `int', and set DEFAULTED_INT
8699
     because it was not a user-defined typedef.  */
8700
  if (type == NULL_TREE && (signed_p || unsigned_p || long_p || short_p))
8701
    {
8702
      /* These imply 'int'.  */
8703
      type = integer_type_node;
8704
      defaulted_int = 1;
8705
    }
8706
  /* Gather flags.  */
8707
  explicit_int = declspecs->explicit_int_p;
8708
  explicit_char = declspecs->explicit_char_p;
8709
 
8710
#if 0
8711
  /* See the code below that used this.  */
8712
  if (typedef_decl)
8713
    decl_attr = DECL_ATTRIBUTES (typedef_decl);
8714
#endif
8715
  typedef_type = type;
8716
 
8717
 
8718
  if (sfk != sfk_conversion)
8719
    ctor_return_type = ctype;
8720
 
8721
  if (sfk != sfk_none)
8722
    type = check_special_function_return_type (sfk, type,
8723
                                               ctor_return_type);
8724
  else if (type == NULL_TREE)
8725
    {
8726
      int is_main;
8727
 
8728
      explicit_int = -1;
8729
 
8730
      /* We handle `main' specially here, because 'main () { }' is so
8731
         common.  With no options, it is allowed.  With -Wreturn-type,
8732
         it is a warning.  It is only an error with -pedantic-errors.  */
8733
      is_main = (funcdef_flag
8734
                 && dname && TREE_CODE (dname) == IDENTIFIER_NODE
8735
                 && MAIN_NAME_P (dname)
8736
                 && ctype == NULL_TREE
8737
                 && in_namespace == NULL_TREE
8738
                 && current_namespace == global_namespace);
8739
 
8740
      if (type_was_error_mark_node)
8741
        /* We've already issued an error, don't complain more.  */;
8742
      else if (in_system_header || flag_ms_extensions)
8743
        /* Allow it, sigh.  */;
8744
      else if (! is_main)
8745
        permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
8746
      else if (pedantic)
8747
        pedwarn (input_location, OPT_pedantic,
8748
                 "ISO C++ forbids declaration of %qs with no type", name);
8749
      else
8750
        warning (OPT_Wreturn_type,
8751
                 "ISO C++ forbids declaration of %qs with no type", name);
8752
 
8753
      type = integer_type_node;
8754
    }
8755
 
8756
  ctype = NULL_TREE;
8757
 
8758
  if (explicit_int128)
8759
    {
8760
      if (int128_integer_type_node == NULL_TREE)
8761
        {
8762
          error ("%<__int128%> is not supported by this target");
8763
          explicit_int128 = false;
8764
        }
8765
      else if (pedantic && ! in_system_header)
8766
        pedwarn (input_location, OPT_pedantic,
8767
                 "ISO C++ does not support %<__int128%> for %qs", name);
8768
    }
8769
 
8770
  /* Now process the modifiers that were specified
8771
     and check for invalid combinations.  */
8772
 
8773
  /* Long double is a special combination.  */
8774
  if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
8775
    {
8776
      long_p = false;
8777
      type = cp_build_qualified_type (long_double_type_node,
8778
                                      cp_type_quals (type));
8779
    }
8780
 
8781
  /* Check all other uses of type modifiers.  */
8782
 
8783
  if (unsigned_p || signed_p || long_p || short_p)
8784
    {
8785
      int ok = 0;
8786
 
8787
      if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
8788
        error ("%<signed%> or %<unsigned%> invalid for %qs", name);
8789
      else if (signed_p && unsigned_p)
8790
        error ("%<signed%> and %<unsigned%> specified together for %qs", name);
8791
      else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
8792
        error ("%<long long%> invalid for %qs", name);
8793
      else if (long_p && TREE_CODE (type) == REAL_TYPE)
8794
        error ("%<long%> invalid for %qs", name);
8795
      else if (short_p && TREE_CODE (type) == REAL_TYPE)
8796
        error ("%<short%> invalid for %qs", name);
8797
      else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE)
8798
        error ("%<long%> or %<short%> invalid for %qs", name);
8799
      else if ((long_p || short_p || explicit_char || explicit_int) && explicit_int128)
8800
        error ("%<long%>, %<int%>, %<short%>, or %<char%> invalid for %qs", name);
8801
      else if ((long_p || short_p) && explicit_char)
8802
        error ("%<long%> or %<short%> specified with char for %qs", name);
8803
      else if (long_p && short_p)
8804
        error ("%<long%> and %<short%> specified together for %qs", name);
8805
      else if (type == char16_type_node || type == char32_type_node)
8806
        {
8807
          if (signed_p || unsigned_p)
8808
            error ("%<signed%> or %<unsigned%> invalid for %qs", name);
8809
          else if (short_p || long_p)
8810
            error ("%<short%> or %<long%> invalid for %qs", name);
8811
        }
8812
      else
8813
        {
8814
          ok = 1;
8815
          if (!explicit_int && !defaulted_int && !explicit_char && !explicit_int128 && pedantic)
8816
            {
8817
              pedwarn (input_location, OPT_pedantic,
8818
                       "long, short, signed or unsigned used invalidly for %qs",
8819
                       name);
8820
              if (flag_pedantic_errors)
8821
                ok = 0;
8822
            }
8823
        }
8824
 
8825
      /* Discard the type modifiers if they are invalid.  */
8826
      if (! ok)
8827
        {
8828
          unsigned_p = false;
8829
          signed_p = false;
8830
          long_p = false;
8831
          short_p = false;
8832
          longlong = 0;
8833
        }
8834
    }
8835
 
8836
  /* Decide whether an integer type is signed or not.
8837
     Optionally treat bitfields as signed by default.  */
8838
  if (unsigned_p
8839
      /* [class.bit]
8840
 
8841
         It is implementation-defined whether a plain (neither
8842
         explicitly signed or unsigned) char, short, int, or long
8843
         bit-field is signed or unsigned.
8844
 
8845
         Naturally, we extend this to long long as well.  Note that
8846
         this does not include wchar_t.  */
8847
      || (bitfield && !flag_signed_bitfields
8848
          && !signed_p
8849
          /* A typedef for plain `int' without `signed' can be
8850
             controlled just like plain `int', but a typedef for
8851
             `signed int' cannot be so controlled.  */
8852
          && !(typedef_decl
8853
               && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
8854
          && TREE_CODE (type) == INTEGER_TYPE
8855
          && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
8856
    {
8857
      if (explicit_int128)
8858
        type = int128_unsigned_type_node;
8859
      else if (longlong)
8860
        type = long_long_unsigned_type_node;
8861
      else if (long_p)
8862
        type = long_unsigned_type_node;
8863
      else if (short_p)
8864
        type = short_unsigned_type_node;
8865
      else if (type == char_type_node)
8866
        type = unsigned_char_type_node;
8867
      else if (typedef_decl)
8868
        type = unsigned_type_for (type);
8869
      else
8870
        type = unsigned_type_node;
8871
    }
8872
  else if (signed_p && type == char_type_node)
8873
    type = signed_char_type_node;
8874
  else if (explicit_int128)
8875
    type = int128_integer_type_node;
8876
  else if (longlong)
8877
    type = long_long_integer_type_node;
8878
  else if (long_p)
8879
    type = long_integer_type_node;
8880
  else if (short_p)
8881
    type = short_integer_type_node;
8882
 
8883
  if (declspecs->specs[(int)ds_complex])
8884
    {
8885
      if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
8886
        error ("complex invalid for %qs", name);
8887
      /* If we just have "complex", it is equivalent to
8888
         "complex double", but if any modifiers at all are specified it is
8889
         the complex form of TYPE.  E.g, "complex short" is
8890
         "complex short int".  */
8891
      else if (defaulted_int && ! longlong && ! explicit_int128
8892
               && ! (long_p || short_p || signed_p || unsigned_p))
8893
        type = complex_double_type_node;
8894
      else if (type == integer_type_node)
8895
        type = complex_integer_type_node;
8896
      else if (type == float_type_node)
8897
        type = complex_float_type_node;
8898
      else if (type == double_type_node)
8899
        type = complex_double_type_node;
8900
      else if (type == long_double_type_node)
8901
        type = complex_long_double_type_node;
8902
      else
8903
        type = build_complex_type (type);
8904
    }
8905
 
8906
  type_quals = TYPE_UNQUALIFIED;
8907
  if (declspecs->specs[(int)ds_const])
8908
    type_quals |= TYPE_QUAL_CONST;
8909
  if (declspecs->specs[(int)ds_volatile])
8910
    type_quals |= TYPE_QUAL_VOLATILE;
8911
  if (declspecs->specs[(int)ds_restrict])
8912
    type_quals |= TYPE_QUAL_RESTRICT;
8913
  if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
8914
    error ("qualifiers are not allowed on declaration of %<operator %T%>",
8915
           ctor_return_type);
8916
 
8917
  type_quals |= cp_type_quals (type);
8918
  type = cp_build_qualified_type_real
8919
    (type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
8920
                         ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
8921
  /* We might have ignored or rejected some of the qualifiers.  */
8922
  type_quals = cp_type_quals (type);
8923
 
8924
  staticp = 0;
8925
  inlinep = !! declspecs->specs[(int)ds_inline];
8926
  virtualp = !! declspecs->specs[(int)ds_virtual];
8927
  explicitp = !! declspecs->specs[(int)ds_explicit];
8928
 
8929
  storage_class = declspecs->storage_class;
8930
  if (storage_class == sc_static)
8931
    staticp = 1 + (decl_context == FIELD);
8932
 
8933
  if (virtualp && staticp == 2)
8934
    {
8935
      error ("member %qD cannot be declared both virtual and static", dname);
8936
      storage_class = sc_none;
8937
      staticp = 0;
8938
    }
8939
  friendp = !! declspecs->specs[(int)ds_friend];
8940
 
8941
  if (dependent_name && !friendp)
8942
    {
8943
      error ("%<%T::%D%> is not a valid declarator", ctype, dependent_name);
8944
      return error_mark_node;
8945
    }
8946
 
8947
  /* Issue errors about use of storage classes for parameters.  */
8948
  if (decl_context == PARM)
8949
    {
8950
      if (declspecs->specs[(int)ds_typedef])
8951
        {
8952
          error ("typedef declaration invalid in parameter declaration");
8953
          return error_mark_node;
8954
        }
8955
      else if (template_parm_flag && storage_class != sc_none)
8956
        {
8957
          error ("storage class specified for template parameter %qs", name);
8958
          return error_mark_node;
8959
        }
8960
      else if (storage_class == sc_static
8961
               || storage_class == sc_extern
8962
               || thread_p)
8963
        error ("storage class specifiers invalid in parameter declarations");
8964
 
8965
      /* Function parameters cannot be constexpr.  If we saw one, moan
8966
         and pretend it wasn't there.  */
8967
      if (constexpr_p)
8968
        {
8969
          error ("a parameter cannot be declared %<constexpr%>");
8970
          constexpr_p = 0;
8971
        }
8972
    }
8973
 
8974
  /* Give error if `virtual' is used outside of class declaration.  */
8975
  if (virtualp
8976
      && (current_class_name == NULL_TREE || decl_context != FIELD))
8977
    {
8978
      error ("%<virtual%> outside class declaration");
8979
      virtualp = 0;
8980
    }
8981
 
8982
  /* Static anonymous unions are dealt with here.  */
8983
  if (staticp && decl_context == TYPENAME
8984
      && declspecs->type
8985
      && ANON_AGGR_TYPE_P (declspecs->type))
8986
    decl_context = FIELD;
8987
 
8988
  /* Warn about storage classes that are invalid for certain
8989
     kinds of declarations (parameters, typenames, etc.).  */
8990
  if (thread_p
8991
      && ((storage_class
8992
           && storage_class != sc_extern
8993
           && storage_class != sc_static)
8994
          || declspecs->specs[(int)ds_typedef]))
8995
    {
8996
      error ("multiple storage classes in declaration of %qs", name);
8997
      thread_p = false;
8998
    }
8999
  if (decl_context != NORMAL
9000
      && ((storage_class != sc_none
9001
           && storage_class != sc_mutable)
9002
          || thread_p))
9003
    {
9004
      if ((decl_context == PARM || decl_context == CATCHPARM)
9005
          && (storage_class == sc_register
9006
              || storage_class == sc_auto))
9007
        ;
9008
      else if (declspecs->specs[(int)ds_typedef])
9009
        ;
9010
      else if (decl_context == FIELD
9011
               /* C++ allows static class elements.  */
9012
               && storage_class == sc_static)
9013
        /* C++ also allows inlines and signed and unsigned elements,
9014
           but in those cases we don't come in here.  */
9015
        ;
9016
      else
9017
        {
9018
          if (decl_context == FIELD)
9019
            error ("storage class specified for %qs", name);
9020
          else
9021
            {
9022
              if (decl_context == PARM || decl_context == CATCHPARM)
9023
                error ("storage class specified for parameter %qs", name);
9024
              else
9025
                error ("storage class specified for typename");
9026
            }
9027
          if (storage_class == sc_register
9028
              || storage_class == sc_auto
9029
              || storage_class == sc_extern
9030
              || thread_p)
9031
            storage_class = sc_none;
9032
        }
9033
    }
9034
  else if (storage_class == sc_extern && funcdef_flag
9035
           && ! toplevel_bindings_p ())
9036
    error ("nested function %qs declared %<extern%>", name);
9037
  else if (toplevel_bindings_p ())
9038
    {
9039
      if (storage_class == sc_auto)
9040
        error ("top-level declaration of %qs specifies %<auto%>", name);
9041
    }
9042
  else if (thread_p
9043
           && storage_class != sc_extern
9044
           && storage_class != sc_static)
9045
    {
9046
      error ("function-scope %qs implicitly auto and declared %<__thread%>",
9047
             name);
9048
      thread_p = false;
9049
    }
9050
 
9051
  if (storage_class && friendp)
9052
    {
9053
      error ("storage class specifiers invalid in friend function declarations");
9054
      storage_class = sc_none;
9055
      staticp = 0;
9056
    }
9057
 
9058
  if (!id_declarator)
9059
    unqualified_id = NULL_TREE;
9060
  else
9061
    {
9062
      unqualified_id = id_declarator->u.id.unqualified_name;
9063
      switch (TREE_CODE (unqualified_id))
9064
        {
9065
        case BIT_NOT_EXPR:
9066
          unqualified_id = TREE_OPERAND (unqualified_id, 0);
9067
          if (TYPE_P (unqualified_id))
9068
            unqualified_id = constructor_name (unqualified_id);
9069
          break;
9070
 
9071
        case IDENTIFIER_NODE:
9072
        case TEMPLATE_ID_EXPR:
9073
          break;
9074
 
9075
        default:
9076
          gcc_unreachable ();
9077
        }
9078
    }
9079
 
9080
  /* Determine the type of the entity declared by recurring on the
9081
     declarator.  */
9082
  for (; declarator; declarator = declarator->declarator)
9083
    {
9084
      const cp_declarator *inner_declarator;
9085
      tree attrs;
9086
 
9087
      if (type == error_mark_node)
9088
        return error_mark_node;
9089
 
9090
      attrs = declarator->attributes;
9091
      if (attrs)
9092
        {
9093
          int attr_flags;
9094
 
9095
          attr_flags = 0;
9096
          if (declarator == NULL || declarator->kind == cdk_id)
9097
            attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
9098
          if (declarator->kind == cdk_function)
9099
            attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
9100
          if (declarator->kind == cdk_array)
9101
            attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
9102
          returned_attrs = decl_attributes (&type,
9103
                                            chainon (returned_attrs, attrs),
9104
                                            attr_flags);
9105
        }
9106
 
9107
      if (declarator->kind == cdk_id)
9108
        break;
9109
 
9110
      inner_declarator = declarator->declarator;
9111
 
9112
      switch (declarator->kind)
9113
        {
9114
        case cdk_array:
9115
          type = create_array_type_for_decl (dname, type,
9116
                                             declarator->u.array.bounds);
9117
          break;
9118
 
9119
        case cdk_function:
9120
          {
9121
            tree arg_types;
9122
            int funcdecl_p;
9123
 
9124
            /* Declaring a function type.
9125
               Make sure we have a valid type for the function to return.  */
9126
 
9127
            if (type_quals != TYPE_UNQUALIFIED)
9128
              {
9129
                if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
9130
                  warning (OPT_Wignored_qualifiers,
9131
                           "type qualifiers ignored on function return type");
9132
                /* We now know that the TYPE_QUALS don't apply to the
9133
                   decl, but to its return type.  */
9134
                type_quals = TYPE_UNQUALIFIED;
9135
              }
9136
            errmsg = targetm.invalid_return_type (type);
9137
            if (errmsg)
9138
              {
9139
                error (errmsg);
9140
                type = integer_type_node;
9141
              }
9142
 
9143
            /* Error about some types functions can't return.  */
9144
 
9145
            if (TREE_CODE (type) == FUNCTION_TYPE)
9146
              {
9147
                error ("%qs declared as function returning a function", name);
9148
                return error_mark_node;
9149
              }
9150
            if (TREE_CODE (type) == ARRAY_TYPE)
9151
              {
9152
                error ("%qs declared as function returning an array", name);
9153
                return error_mark_node;
9154
              }
9155
 
9156
            /* Pick up type qualifiers which should be applied to `this'.  */
9157
            memfn_quals = declarator->u.function.qualifiers;
9158
            /* Pick up virt-specifiers.  */
9159
            virt_specifiers = declarator->u.function.virt_specifiers;
9160
            /* Pick up the exception specifications.  */
9161
            raises = declarator->u.function.exception_specification;
9162
            /* If the exception-specification is ill-formed, let's pretend
9163
               there wasn't one.  */
9164
            if (raises == error_mark_node)
9165
              raises = NULL_TREE;
9166
 
9167
            /* Say it's a definition only for the CALL_EXPR
9168
               closest to the identifier.  */
9169
            funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
9170
 
9171
            /* Handle a late-specified return type.  */
9172
            if (funcdecl_p)
9173
              {
9174
                if (type_uses_auto (type))
9175
                  {
9176
                    if (!declarator->u.function.late_return_type)
9177
                      {
9178
                        error ("%qs function uses %<auto%> type specifier without"
9179
                               " trailing return type", name);
9180
                        return error_mark_node;
9181
                      }
9182
                    else if (!is_auto (type))
9183
                      {
9184
                        error ("%qs function with trailing return type has"
9185
                               " %qT as its type rather than plain %<auto%>",
9186
                               name, type);
9187
                        return error_mark_node;
9188
                      }
9189
                  }
9190
                else if (declarator->u.function.late_return_type)
9191
                  {
9192
                    if (cxx_dialect < cxx0x)
9193
                      /* Not using maybe_warn_cpp0x because this should
9194
                         always be an error.  */
9195
                      error ("trailing return type only available with "
9196
                             "-std=c++11 or -std=gnu++11");
9197
                    else
9198
                      error ("%qs function with trailing return type not "
9199
                             "declared with %<auto%> type specifier", name);
9200
                    return error_mark_node;
9201
                  }
9202
              }
9203
            type = splice_late_return_type
9204
              (type, declarator->u.function.late_return_type);
9205
            if (type == error_mark_node)
9206
              return error_mark_node;
9207
 
9208
            if (ctype == NULL_TREE
9209
                && decl_context == FIELD
9210
                && funcdecl_p
9211
                && (friendp == 0 || dname == current_class_name))
9212
              ctype = current_class_type;
9213
 
9214
            if (ctype && (sfk == sfk_constructor
9215
                          || sfk == sfk_destructor))
9216
              {
9217
                /* We are within a class's scope. If our declarator name
9218
                   is the same as the class name, and we are defining
9219
                   a function, then it is a constructor/destructor, and
9220
                   therefore returns a void type.  */
9221
 
9222
                /* ISO C++ 12.4/2.  A destructor may not be declared
9223
                   const or volatile.  A destructor may not be
9224
                   static.
9225
 
9226
                   ISO C++ 12.1.  A constructor may not be declared
9227
                   const or volatile.  A constructor may not be
9228
                   virtual.  A constructor may not be static.  */
9229
                if (staticp == 2)
9230
                  error ((flags == DTOR_FLAG)
9231
                         ? G_("destructor cannot be static member function")
9232
                         : G_("constructor cannot be static member function"));
9233
                if (memfn_quals)
9234
                  {
9235
                    error ((flags == DTOR_FLAG)
9236
                           ? G_("destructors may not be cv-qualified")
9237
                           : G_("constructors may not be cv-qualified"));
9238
                    memfn_quals = TYPE_UNQUALIFIED;
9239
                  }
9240
 
9241
                if (decl_context == FIELD
9242
                    && !member_function_or_else (ctype,
9243
                                                 current_class_type,
9244
                                                 flags))
9245
                  return error_mark_node;
9246
 
9247
                if (flags != DTOR_FLAG)
9248
                  {
9249
                    /* It's a constructor.  */
9250
                    if (explicitp == 1)
9251
                      explicitp = 2;
9252
                    if (virtualp)
9253
                      {
9254
                        permerror (input_location, "constructors cannot be declared virtual");
9255
                        virtualp = 0;
9256
                      }
9257
                    if (decl_context == FIELD
9258
                        && sfk != sfk_constructor)
9259
                      return error_mark_node;
9260
                  }
9261
                if (decl_context == FIELD)
9262
                  staticp = 0;
9263
              }
9264
            else if (friendp)
9265
              {
9266
                if (initialized)
9267
                  error ("can%'t initialize friend function %qs", name);
9268
                if (virtualp)
9269
                  {
9270
                    /* Cannot be both friend and virtual.  */
9271
                    error ("virtual functions cannot be friends");
9272
                    friendp = 0;
9273
                  }
9274
                if (decl_context == NORMAL)
9275
                  error ("friend declaration not in class definition");
9276
                if (current_function_decl && funcdef_flag)
9277
                  error ("can%'t define friend function %qs in a local "
9278
                         "class definition",
9279
                         name);
9280
              }
9281
            else if (ctype && sfk == sfk_conversion)
9282
              {
9283
                if (explicitp == 1)
9284
                  {
9285
                    maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION);
9286
                    explicitp = 2;
9287
                  }
9288
              }
9289
 
9290
            arg_types = grokparms (declarator->u.function.parameters,
9291
                                   &parms);
9292
 
9293
            if (inner_declarator
9294
                && inner_declarator->kind == cdk_id
9295
                && inner_declarator->u.id.sfk == sfk_destructor
9296
                && arg_types != void_list_node)
9297
              {
9298
                error ("destructors may not have parameters");
9299
                arg_types = void_list_node;
9300
                parms = NULL_TREE;
9301
              }
9302
 
9303
            type = build_function_type (type, arg_types);
9304
          }
9305
          break;
9306
 
9307
        case cdk_pointer:
9308
        case cdk_reference:
9309
        case cdk_ptrmem:
9310
          /* Filter out pointers-to-references and references-to-references.
9311
             We can get these if a TYPE_DECL is used.  */
9312
 
9313
          if (TREE_CODE (type) == REFERENCE_TYPE)
9314
            {
9315
              if (declarator->kind != cdk_reference)
9316
                {
9317
                  error ("cannot declare pointer to %q#T", type);
9318
                  type = TREE_TYPE (type);
9319
                }
9320
 
9321
              /* In C++0x, we allow reference to reference declarations
9322
                 that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
9323
                 and template type arguments [14.3.1/4 temp.arg.type]. The
9324
                 check for direct reference to reference declarations, which
9325
                 are still forbidden, occurs below. Reasoning behind the change
9326
                 can be found in DR106, DR540, and the rvalue reference
9327
                 proposals. */
9328
              else if (cxx_dialect == cxx98)
9329
                {
9330
                  error ("cannot declare reference to %q#T", type);
9331
                  type = TREE_TYPE (type);
9332
                }
9333
            }
9334
          else if (VOID_TYPE_P (type))
9335
            {
9336
              if (declarator->kind == cdk_reference)
9337
                error ("cannot declare reference to %q#T", type);
9338
              else if (declarator->kind == cdk_ptrmem)
9339
                error ("cannot declare pointer to %q#T member", type);
9340
            }
9341
 
9342
          /* We now know that the TYPE_QUALS don't apply to the decl,
9343
             but to the target of the pointer.  */
9344
          type_quals = TYPE_UNQUALIFIED;
9345
 
9346
          if (declarator->kind == cdk_ptrmem
9347
              && (TREE_CODE (type) == FUNCTION_TYPE
9348
                  || (memfn_quals && TREE_CODE (type) == METHOD_TYPE)))
9349
            {
9350
              memfn_quals |= type_memfn_quals (type);
9351
              type = build_memfn_type (type,
9352
                                       declarator->u.pointer.class_type,
9353
                                       memfn_quals);
9354
              if (type == error_mark_node)
9355
                return error_mark_node;
9356
              memfn_quals = TYPE_UNQUALIFIED;
9357
            }
9358
 
9359
          if (TREE_CODE (type) == FUNCTION_TYPE
9360
              && type_memfn_quals (type) != TYPE_UNQUALIFIED)
9361
            error (declarator->kind == cdk_reference
9362
                   ? G_("cannot declare reference to qualified function type %qT")
9363
                   : G_("cannot declare pointer to qualified function type %qT"),
9364
                   type);
9365
 
9366
          /* When the pointed-to type involves components of variable size,
9367
             care must be taken to ensure that the size evaluation code is
9368
             emitted early enough to dominate all the possible later uses
9369
             and late enough for the variables on which it depends to have
9370
             been assigned.
9371
 
9372
             This is expected to happen automatically when the pointed-to
9373
             type has a name/declaration of it's own, but special attention
9374
             is required if the type is anonymous.
9375
 
9376
             We handle the NORMAL and FIELD contexts here by inserting a
9377
             dummy statement that just evaluates the size at a safe point
9378
             and ensures it is not deferred until e.g. within a deeper
9379
             conditional context (c++/43555).
9380
 
9381
             We expect nothing to be needed here for PARM or TYPENAME.
9382
             Evaluating the size at this point for TYPENAME would
9383
             actually be incorrect, as we might be in the middle of an
9384
             expression with side effects on the pointed-to type size
9385
             "arguments" prior to the pointer declaration point and the
9386
             size evaluation could end up prior to the side effects.  */
9387
 
9388
          if (!TYPE_NAME (type)
9389
              && (decl_context == NORMAL || decl_context == FIELD)
9390
              && at_function_scope_p ()
9391
              && variably_modified_type_p (type, NULL_TREE))
9392
            {
9393
              /* First break out any side-effects.  */
9394
              stabilize_vla_size (TYPE_SIZE (type));
9395
              /* And then force evaluation of the SAVE_EXPR.  */
9396
              finish_expr_stmt (TYPE_SIZE (type));
9397
            }
9398
 
9399
          if (declarator->kind == cdk_reference)
9400
            {
9401
              /* In C++0x, the type we are creating a reference to might be
9402
                 a typedef which is itself a reference type. In that case,
9403
                 we follow the reference collapsing rules in
9404
                 [7.1.3/8 dcl.typedef] to create the final reference type:
9405
 
9406
                 "If a typedef TD names a type that is a reference to a type
9407
                 T, an attempt to create the type 'lvalue reference to cv TD'
9408
                 creates the type 'lvalue reference to T,' while an attempt
9409
                 to create the type "rvalue reference to cv TD' creates the
9410
                 type TD."
9411
              */
9412
              if (VOID_TYPE_P (type))
9413
                /* We already gave an error.  */;
9414
              else if (TREE_CODE (type) == REFERENCE_TYPE)
9415
                {
9416
                  if (declarator->u.reference.rvalue_ref)
9417
                    /* Leave type alone.  */;
9418
                  else
9419
                    type = cp_build_reference_type (TREE_TYPE (type), false);
9420
                }
9421
              else
9422
                type = cp_build_reference_type
9423
                  (type, declarator->u.reference.rvalue_ref);
9424
 
9425
              /* In C++0x, we need this check for direct reference to
9426
                 reference declarations, which are forbidden by
9427
                 [8.3.2/5 dcl.ref]. Reference to reference declarations
9428
                 are only allowed indirectly through typedefs and template
9429
                 type arguments. Example:
9430
 
9431
                   void foo(int & &);      // invalid ref-to-ref decl
9432
 
9433
                   typedef int & int_ref;
9434
                   void foo(int_ref &);    // valid ref-to-ref decl
9435
              */
9436
              if (inner_declarator && inner_declarator->kind == cdk_reference)
9437
                error ("cannot declare reference to %q#T, which is not "
9438
                       "a typedef or a template type argument", type);
9439
            }
9440
          else if (TREE_CODE (type) == METHOD_TYPE)
9441
            type = build_ptrmemfunc_type (build_pointer_type (type));
9442
          else if (declarator->kind == cdk_ptrmem)
9443
            {
9444
              gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
9445
                          != NAMESPACE_DECL);
9446
              if (declarator->u.pointer.class_type == error_mark_node)
9447
                /* We will already have complained.  */
9448
                type = error_mark_node;
9449
              else
9450
                type = build_ptrmem_type (declarator->u.pointer.class_type,
9451
                                          type);
9452
            }
9453
          else
9454
            type = build_pointer_type (type);
9455
 
9456
          /* Process a list of type modifier keywords (such as
9457
             const or volatile) that were given inside the `*' or `&'.  */
9458
 
9459
          if (declarator->u.pointer.qualifiers)
9460
            {
9461
              type
9462
                = cp_build_qualified_type (type,
9463
                                           declarator->u.pointer.qualifiers);
9464
              type_quals = cp_type_quals (type);
9465
            }
9466
          ctype = NULL_TREE;
9467
          break;
9468
 
9469
        case cdk_error:
9470
          break;
9471
 
9472
        default:
9473
          gcc_unreachable ();
9474
        }
9475
    }
9476
 
9477
  /* We need to stabilize side-effects in VLA sizes for regular array
9478
     declarations too, not just pointers to arrays.  */
9479
  if (type != error_mark_node && !TYPE_NAME (type)
9480
      && (decl_context == NORMAL || decl_context == FIELD)
9481
      && at_function_scope_p ()
9482
      && variably_modified_type_p (type, NULL_TREE))
9483
    stabilize_vla_size (TYPE_SIZE (type));
9484
 
9485
  /* A `constexpr' specifier used in an object declaration declares
9486
     the object as `const'.  */
9487
  if (constexpr_p && innermost_code != cdk_function)
9488
    {
9489
      if (type_quals & TYPE_QUAL_CONST)
9490
        error ("both %<const%> and %<constexpr%> cannot be used here");
9491
      if (type_quals & TYPE_QUAL_VOLATILE)
9492
        error ("both %<volatile%> and %<constexpr%> cannot be used here");
9493
      if (TREE_CODE (type) != REFERENCE_TYPE)
9494
        {
9495
          type_quals |= TYPE_QUAL_CONST;
9496
          type = cp_build_qualified_type (type, type_quals);
9497
        }
9498
    }
9499
 
9500
  if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
9501
      && TREE_CODE (type) != FUNCTION_TYPE
9502
      && TREE_CODE (type) != METHOD_TYPE)
9503
    {
9504
      error ("template-id %qD used as a declarator",
9505
             unqualified_id);
9506
      unqualified_id = dname;
9507
    }
9508
 
9509
  /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
9510
     qualified with a class-name, turn it into a METHOD_TYPE, unless
9511
     we know that the function is static.  We take advantage of this
9512
     opportunity to do other processing that pertains to entities
9513
     explicitly declared to be class members.  Note that if DECLARATOR
9514
     is non-NULL, we know it is a cdk_id declarator; otherwise, we
9515
     would not have exited the loop above.  */
9516
  if (declarator
9517
      && declarator->u.id.qualifying_scope
9518
      && MAYBE_CLASS_TYPE_P (declarator->u.id.qualifying_scope))
9519
    {
9520
      tree t;
9521
 
9522
      ctype = declarator->u.id.qualifying_scope;
9523
      ctype = TYPE_MAIN_VARIANT (ctype);
9524
      t = ctype;
9525
      while (t != NULL_TREE && CLASS_TYPE_P (t))
9526
        {
9527
          /* You're supposed to have one `template <...>' for every
9528
             template class, but you don't need one for a full
9529
             specialization.  For example:
9530
 
9531
               template <class T> struct S{};
9532
               template <> struct S<int> { void f(); };
9533
               void S<int>::f () {}
9534
 
9535
             is correct; there shouldn't be a `template <>' for the
9536
             definition of `S<int>::f'.  */
9537
          if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t)
9538
              && !any_dependent_template_arguments_p (CLASSTYPE_TI_ARGS (t)))
9539
            /* T is an explicit (not partial) specialization.  All
9540
               containing classes must therefore also be explicitly
9541
               specialized.  */
9542
            break;
9543
          if ((CLASSTYPE_USE_TEMPLATE (t) || CLASSTYPE_IS_TEMPLATE (t))
9544
              && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))
9545
            template_count += 1;
9546
 
9547
          t = TYPE_MAIN_DECL (t);
9548
          t = DECL_CONTEXT (t);
9549
        }
9550
 
9551
      if (ctype == current_class_type)
9552
        {
9553
          if (friendp)
9554
            {
9555
              permerror (input_location, "member functions are implicitly friends of their class");
9556
              friendp = 0;
9557
            }
9558
          else
9559
            permerror (declarator->id_loc,
9560
                          "extra qualification %<%T::%> on member %qs",
9561
                          ctype, name);
9562
        }
9563
      else if (/* If the qualifying type is already complete, then we
9564
                  can skip the following checks.  */
9565
               !COMPLETE_TYPE_P (ctype)
9566
               && (/* If the function is being defined, then
9567
                      qualifying type must certainly be complete.  */
9568
                   funcdef_flag
9569
                   /* A friend declaration of "T::f" is OK, even if
9570
                      "T" is a template parameter.  But, if this
9571
                      function is not a friend, the qualifying type
9572
                      must be a class.  */
9573
                   || (!friendp && !CLASS_TYPE_P (ctype))
9574
                   /* For a declaration, the type need not be
9575
                      complete, if either it is dependent (since there
9576
                      is no meaningful definition of complete in that
9577
                      case) or the qualifying class is currently being
9578
                      defined.  */
9579
                   || !(dependent_type_p (ctype)
9580
                        || currently_open_class (ctype)))
9581
               /* Check that the qualifying type is complete.  */
9582
               && !complete_type_or_else (ctype, NULL_TREE))
9583
        return error_mark_node;
9584
      else if (TREE_CODE (type) == FUNCTION_TYPE)
9585
        {
9586
          if (current_class_type
9587
              && (!friendp || funcdef_flag))
9588
            {
9589
              error (funcdef_flag
9590
                     ? G_("cannot define member function %<%T::%s%> "
9591
                          "within %<%T%>")
9592
                     : G_("cannot declare member function %<%T::%s%> "
9593
                          "within %<%T%>"),
9594
                     ctype, name, current_class_type);
9595
              return error_mark_node;
9596
            }
9597
        }
9598
      else if (declspecs->specs[(int)ds_typedef]
9599
               && current_class_type)
9600
        {
9601
          error ("cannot declare member %<%T::%s%> within %qT",
9602
                 ctype, name, current_class_type);
9603
          return error_mark_node;
9604
        }
9605
    }
9606
 
9607
  if (ctype == NULL_TREE && decl_context == FIELD && friendp == 0)
9608
    ctype = current_class_type;
9609
 
9610
  /* Now TYPE has the actual type.  */
9611
 
9612
  if (returned_attrs)
9613
    {
9614
      if (attrlist)
9615
        *attrlist = chainon (returned_attrs, *attrlist);
9616
      else
9617
        attrlist = &returned_attrs;
9618
    }
9619
 
9620
  /* Handle parameter packs. */
9621
  if (parameter_pack_p)
9622
    {
9623
      if (decl_context == PARM)
9624
        /* Turn the type into a pack expansion.*/
9625
        type = make_pack_expansion (type);
9626
      else
9627
        error ("non-parameter %qs cannot be a parameter pack", name);
9628
    }
9629
 
9630
  /* Did array size calculations overflow?  */
9631
 
9632
  if (TREE_CODE (type) == ARRAY_TYPE
9633
      && COMPLETE_TYPE_P (type)
9634
      && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
9635
      && TREE_OVERFLOW (TYPE_SIZE_UNIT (type)))
9636
    {
9637
      error ("size of array %qs is too large", name);
9638
      /* If we proceed with the array type as it is, we'll eventually
9639
         crash in tree_low_cst().  */
9640
      type = error_mark_node;
9641
    }
9642
 
9643
  if ((decl_context == FIELD || decl_context == PARM)
9644
      && !processing_template_decl
9645
      && variably_modified_type_p (type, NULL_TREE))
9646
    {
9647
      if (decl_context == FIELD)
9648
        error ("data member may not have variably modified type %qT", type);
9649
      else
9650
        error ("parameter may not have variably modified type %qT", type);
9651
      type = error_mark_node;
9652
    }
9653
 
9654
  if (explicitp == 1 || (explicitp && friendp))
9655
    {
9656
      /* [dcl.fct.spec] The explicit specifier shall only be used in
9657
         declarations of constructors within a class definition.  */
9658
      error ("only declarations of constructors can be %<explicit%>");
9659
      explicitp = 0;
9660
    }
9661
 
9662
  if (storage_class == sc_mutable)
9663
    {
9664
      if (decl_context != FIELD || friendp)
9665
        {
9666
          error ("non-member %qs cannot be declared %<mutable%>", name);
9667
          storage_class = sc_none;
9668
        }
9669
      else if (decl_context == TYPENAME || declspecs->specs[(int)ds_typedef])
9670
        {
9671
          error ("non-object member %qs cannot be declared %<mutable%>", name);
9672
          storage_class = sc_none;
9673
        }
9674
      else if (TREE_CODE (type) == FUNCTION_TYPE
9675
               || TREE_CODE (type) == METHOD_TYPE)
9676
        {
9677
          error ("function %qs cannot be declared %<mutable%>", name);
9678
          storage_class = sc_none;
9679
        }
9680
      else if (staticp)
9681
        {
9682
          error ("static %qs cannot be declared %<mutable%>", name);
9683
          storage_class = sc_none;
9684
        }
9685
      else if (type_quals & TYPE_QUAL_CONST)
9686
        {
9687
          error ("const %qs cannot be declared %<mutable%>", name);
9688
          storage_class = sc_none;
9689
        }
9690
      else if (TREE_CODE (type) == REFERENCE_TYPE)
9691
        {
9692
          permerror (input_location, "reference %qs cannot be declared "
9693
                     "%<mutable%>", name);
9694
          storage_class = sc_none;
9695
        }
9696
    }
9697
 
9698
  /* If this is declaring a typedef name, return a TYPE_DECL.  */
9699
  if (declspecs->specs[(int)ds_typedef] && decl_context != TYPENAME)
9700
    {
9701
      tree decl;
9702
 
9703
      /* Note that the grammar rejects storage classes
9704
         in typenames, fields or parameters.  */
9705
      if (current_lang_name == lang_name_java)
9706
        TYPE_FOR_JAVA (type) = 1;
9707
 
9708
      /* This declaration:
9709
 
9710
           typedef void f(int) const;
9711
 
9712
         declares a function type which is not a member of any
9713
         particular class, but which is cv-qualified; for
9714
         example "f S::*" declares a pointer to a const-qualified
9715
         member function of S.  We record the cv-qualification in the
9716
         function type.  */
9717
      if (memfn_quals && TREE_CODE (type) == FUNCTION_TYPE)
9718
        {
9719
          type = apply_memfn_quals (type, memfn_quals);
9720
 
9721
          /* We have now dealt with these qualifiers.  */
9722
          memfn_quals = TYPE_UNQUALIFIED;
9723
        }
9724
 
9725
      if (type_uses_auto (type))
9726
        {
9727
          error ("typedef declared %<auto%>");
9728
          type = error_mark_node;
9729
        }
9730
 
9731
      if (decl_context == FIELD)
9732
        decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
9733
      else
9734
        decl = build_decl (input_location, TYPE_DECL, unqualified_id, type);
9735
      if (id_declarator && declarator->u.id.qualifying_scope) {
9736
        error_at (DECL_SOURCE_LOCATION (decl),
9737
                  "typedef name may not be a nested-name-specifier");
9738
        TREE_TYPE (decl) = error_mark_node;
9739
      }
9740
 
9741
      if (decl_context != FIELD)
9742
        {
9743
          if (!current_function_decl)
9744
            DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
9745
          else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
9746
                   || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
9747
                       (current_function_decl)))
9748
            /* The TYPE_DECL is "abstract" because there will be
9749
               clones of this constructor/destructor, and there will
9750
               be copies of this TYPE_DECL generated in those
9751
               clones.  */
9752
            DECL_ABSTRACT (decl) = 1;
9753
        }
9754
      else if (constructor_name_p (unqualified_id, current_class_type))
9755
        permerror (input_location, "ISO C++ forbids nested type %qD with same name "
9756
                   "as enclosing class",
9757
                   unqualified_id);
9758
 
9759
      /* If the user declares "typedef struct {...} foo" then the
9760
         struct will have an anonymous name.  Fill that name in now.
9761
         Nothing can refer to it, so nothing needs know about the name
9762
         change.  */
9763
      if (type != error_mark_node
9764
          && unqualified_id
9765
          && TYPE_NAME (type)
9766
          && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
9767
          && TYPE_ANONYMOUS_P (type)
9768
          && declspecs->type_definition_p
9769
          && cp_type_quals (type) == TYPE_UNQUALIFIED)
9770
        {
9771
          tree t;
9772
 
9773
          /* Replace the anonymous name with the real name everywhere.  */
9774
          for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
9775
            {
9776
              if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
9777
                /* We do not rename the debug info representing the
9778
                   anonymous tagged type because the standard says in
9779
                   [dcl.typedef] that the naming applies only for
9780
                   linkage purposes.  */
9781
                /*debug_hooks->set_name (t, decl);*/
9782
                TYPE_NAME (t) = decl;
9783
            }
9784
 
9785
          if (TYPE_LANG_SPECIFIC (type))
9786
            TYPE_WAS_ANONYMOUS (type) = 1;
9787
 
9788
          /* If this is a typedef within a template class, the nested
9789
             type is a (non-primary) template.  The name for the
9790
             template needs updating as well.  */
9791
          if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
9792
            DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
9793
              = TYPE_IDENTIFIER (type);
9794
 
9795
          /* Adjust linkage now that we aren't anonymous anymore.  */
9796
          set_linkage_according_to_type (type, TYPE_MAIN_DECL (type));
9797
          determine_visibility (TYPE_MAIN_DECL (type));
9798
 
9799
          /* FIXME remangle member functions; member functions of a
9800
             type with external linkage have external linkage.  */
9801
        }
9802
 
9803
      if (signed_p
9804
          || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
9805
        C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
9806
 
9807
      bad_specifiers (decl, BSP_TYPE, virtualp,
9808
                      memfn_quals != TYPE_UNQUALIFIED,
9809
                      inlinep, friendp, raises != NULL_TREE);
9810
 
9811
      if (declspecs->specs[(int)ds_alias])
9812
        /* Acknowledge that this was written:
9813
             `using analias = atype;'.  */
9814
        TYPE_DECL_ALIAS_P (decl) = 1;
9815
 
9816
      return decl;
9817
    }
9818
 
9819
  /* Detect the case of an array type of unspecified size
9820
     which came, as such, direct from a typedef name.
9821
     We must copy the type, so that the array's domain can be
9822
     individually set by the object's initializer.  */
9823
 
9824
  if (type && typedef_type
9825
      && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
9826
      && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
9827
    type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
9828
 
9829
  /* Detect where we're using a typedef of function type to declare a
9830
     function. PARMS will not be set, so we must create it now.  */
9831
 
9832
  if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
9833
    {
9834
      tree decls = NULL_TREE;
9835
      tree args;
9836
 
9837
      for (args = TYPE_ARG_TYPES (type);
9838
           args && args != void_list_node;
9839
           args = TREE_CHAIN (args))
9840
        {
9841
          tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
9842
 
9843
          DECL_CHAIN (decl) = decls;
9844
          decls = decl;
9845
        }
9846
 
9847
      parms = nreverse (decls);
9848
 
9849
      if (decl_context != TYPENAME)
9850
        {
9851
          /* A cv-qualifier-seq shall only be part of the function type
9852
             for a non-static member function. [8.3.5/4 dcl.fct] */
9853
          if (type_memfn_quals (type) != TYPE_UNQUALIFIED
9854
              && (current_class_type == NULL_TREE || staticp) )
9855
            {
9856
              error (staticp
9857
                     ? G_("qualified function types cannot be used to "
9858
                          "declare static member functions")
9859
                     : G_("qualified function types cannot be used to "
9860
                          "declare free functions"));
9861
              type = TYPE_MAIN_VARIANT (type);
9862
            }
9863
 
9864
          /* The qualifiers on the function type become the qualifiers on
9865
             the non-static member function. */
9866
          memfn_quals |= type_memfn_quals (type);
9867
          type_quals = TYPE_UNQUALIFIED;
9868
        }
9869
    }
9870
 
9871
  /* If this is a type name (such as, in a cast or sizeof),
9872
     compute the type and return it now.  */
9873
 
9874
  if (decl_context == TYPENAME)
9875
    {
9876
      /* Note that the grammar rejects storage classes
9877
         in typenames, fields or parameters.  */
9878
      if (type_quals != TYPE_UNQUALIFIED)
9879
        type_quals = TYPE_UNQUALIFIED;
9880
 
9881
      /* Special case: "friend class foo" looks like a TYPENAME context.  */
9882
      if (friendp)
9883
        {
9884
          if (type_quals != TYPE_UNQUALIFIED)
9885
            {
9886
              error ("type qualifiers specified for friend class declaration");
9887
              type_quals = TYPE_UNQUALIFIED;
9888
            }
9889
          if (inlinep)
9890
            {
9891
              error ("%<inline%> specified for friend class declaration");
9892
              inlinep = 0;
9893
            }
9894
 
9895
          if (!current_aggr)
9896
            {
9897
              /* Don't allow friend declaration without a class-key.  */
9898
              if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
9899
                permerror (input_location, "template parameters cannot be friends");
9900
              else if (TREE_CODE (type) == TYPENAME_TYPE)
9901
                permerror (input_location, "friend declaration requires class-key, "
9902
                           "i.e. %<friend class %T::%D%>",
9903
                           TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
9904
              else
9905
                permerror (input_location, "friend declaration requires class-key, "
9906
                           "i.e. %<friend %#T%>",
9907
                           type);
9908
            }
9909
 
9910
          /* Only try to do this stuff if we didn't already give up.  */
9911
          if (type != integer_type_node)
9912
            {
9913
              /* A friendly class?  */
9914
              if (current_class_type)
9915
                make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
9916
                                   /*complain=*/true);
9917
              else
9918
                error ("trying to make class %qT a friend of global scope",
9919
                       type);
9920
 
9921
              type = void_type_node;
9922
            }
9923
        }
9924
      else if (memfn_quals)
9925
        {
9926
          if (ctype == NULL_TREE
9927
              && TREE_CODE (type) == METHOD_TYPE)
9928
            ctype = TYPE_METHOD_BASETYPE (type);
9929
 
9930
          if (ctype)
9931
            type = build_memfn_type (type, ctype, memfn_quals);
9932
          /* Core issue #547: need to allow this in template type args.  */
9933
          else if (template_type_arg && TREE_CODE (type) == FUNCTION_TYPE)
9934
            type = apply_memfn_quals (type, memfn_quals);
9935
          else
9936
            error ("invalid qualifiers on non-member function type");
9937
        }
9938
 
9939
      return type;
9940
    }
9941
  else if (unqualified_id == NULL_TREE && decl_context != PARM
9942
           && decl_context != CATCHPARM
9943
           && TREE_CODE (type) != UNION_TYPE
9944
           && ! bitfield)
9945
    {
9946
      error ("abstract declarator %qT used as declaration", type);
9947
      return error_mark_node;
9948
    }
9949
 
9950
  /* Only functions may be declared using an operator-function-id.  */
9951
  if (unqualified_id
9952
      && IDENTIFIER_OPNAME_P (unqualified_id)
9953
      && TREE_CODE (type) != FUNCTION_TYPE
9954
      && TREE_CODE (type) != METHOD_TYPE)
9955
    {
9956
      error ("declaration of %qD as non-function", unqualified_id);
9957
      return error_mark_node;
9958
    }
9959
 
9960
  /* We don't check parameter types here because we can emit a better
9961
     error message later.  */
9962
  if (decl_context != PARM)
9963
    {
9964
      type = check_var_type (unqualified_id, type);
9965
      if (type == error_mark_node)
9966
        return error_mark_node;
9967
    }
9968
 
9969
  /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
9970
     or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE.  */
9971
 
9972
  if (decl_context == PARM || decl_context == CATCHPARM)
9973
    {
9974
      if (ctype || in_namespace)
9975
        error ("cannot use %<::%> in parameter declaration");
9976
 
9977
      if (type_uses_auto (type))
9978
        {
9979
          error ("parameter declared %<auto%>");
9980
          type = error_mark_node;
9981
        }
9982
 
9983
      /* A parameter declared as an array of T is really a pointer to T.
9984
         One declared as a function is really a pointer to a function.
9985
         One declared as a member is really a pointer to member.  */
9986
 
9987
      if (TREE_CODE (type) == ARRAY_TYPE)
9988
        {
9989
          /* Transfer const-ness of array into that of type pointed to.  */
9990
          type = build_pointer_type (TREE_TYPE (type));
9991
          type_quals = TYPE_UNQUALIFIED;
9992
        }
9993
      else if (TREE_CODE (type) == FUNCTION_TYPE)
9994
        type = build_pointer_type (type);
9995
    }
9996
 
9997
  if (ctype && TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
9998
      && !NEW_DELETE_OPNAME_P (unqualified_id))
9999
    {
10000
      cp_cv_quals real_quals = memfn_quals;
10001
      if (constexpr_p && sfk != sfk_constructor && sfk != sfk_destructor)
10002
        real_quals |= TYPE_QUAL_CONST;
10003
      type = build_memfn_type (type, ctype, real_quals);
10004
    }
10005
 
10006
  {
10007
    tree decl;
10008
 
10009
    if (decl_context == PARM)
10010
      {
10011
        decl = cp_build_parm_decl (unqualified_id, type);
10012
 
10013
        bad_specifiers (decl, BSP_PARM, virtualp,
10014
                        memfn_quals != TYPE_UNQUALIFIED,
10015
                        inlinep, friendp, raises != NULL_TREE);
10016
      }
10017
    else if (decl_context == FIELD)
10018
      {
10019
        if (!staticp && type_uses_auto (type))
10020
          {
10021
            error ("non-static data member declared %<auto%>");
10022
            type = error_mark_node;
10023
          }
10024
 
10025
        /* The C99 flexible array extension.  */
10026
        if (!staticp && TREE_CODE (type) == ARRAY_TYPE
10027
            && TYPE_DOMAIN (type) == NULL_TREE)
10028
          {
10029
            tree itype = compute_array_index_type (dname, integer_zero_node,
10030
                                                   tf_warning_or_error);
10031
            type = build_cplus_array_type (TREE_TYPE (type), itype);
10032
          }
10033
 
10034
        if (type == error_mark_node)
10035
          {
10036
            /* Happens when declaring arrays of sizes which
10037
               are error_mark_node, for example.  */
10038
            decl = NULL_TREE;
10039
          }
10040
        else if (in_namespace && !friendp)
10041
          {
10042
            /* Something like struct S { int N::j; };  */
10043
            error ("invalid use of %<::%>");
10044
            return error_mark_node;
10045
          }
10046
        else if (TREE_CODE (type) == FUNCTION_TYPE
10047
                 || TREE_CODE (type) == METHOD_TYPE)
10048
          {
10049
            int publicp = 0;
10050
            tree function_context;
10051
 
10052
            if (friendp == 0)
10053
              {
10054
                /* This should never happen in pure C++ (the check
10055
                   could be an assert).  It could happen in
10056
                   Objective-C++ if someone writes invalid code that
10057
                   uses a function declaration for an instance
10058
                   variable or property (instance variables and
10059
                   properties are parsed as FIELD_DECLs, but they are
10060
                   part of an Objective-C class, not a C++ class).
10061
                   That code is invalid and is caught by this
10062
                   check.  */
10063
                if (!ctype)
10064
                  {
10065
                    error ("declaration of function %qD in invalid context",
10066
                           unqualified_id);
10067
                    return error_mark_node;
10068
                  }
10069
 
10070
                /* ``A union may [ ... ] not [ have ] virtual functions.''
10071
                   ARM 9.5 */
10072
                if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
10073
                  {
10074
                    error ("function %qD declared virtual inside a union",
10075
                           unqualified_id);
10076
                    return error_mark_node;
10077
                  }
10078
 
10079
                if (NEW_DELETE_OPNAME_P (unqualified_id))
10080
                  {
10081
                    if (virtualp)
10082
                      {
10083
                        error ("%qD cannot be declared virtual, since it "
10084
                               "is always static",
10085
                               unqualified_id);
10086
                        virtualp = 0;
10087
                      }
10088
                  }
10089
              }
10090
 
10091
            /* Check that the name used for a destructor makes sense.  */
10092
            if (sfk == sfk_destructor)
10093
              {
10094
                tree uqname = id_declarator->u.id.unqualified_name;
10095
 
10096
                if (!ctype)
10097
                  {
10098
                    gcc_assert (friendp);
10099
                    error ("expected qualified name in friend declaration "
10100
                           "for destructor %qD", uqname);
10101
                    return error_mark_node;
10102
                  }
10103
 
10104
                if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
10105
                  {
10106
                    error ("declaration of %qD as member of %qT",
10107
                           uqname, ctype);
10108
                    return error_mark_node;
10109
                  }
10110
                if (constexpr_p)
10111
                  {
10112
                    error ("a destructor cannot be %<constexpr%>");
10113
                    return error_mark_node;
10114
                  }
10115
              }
10116
            else if (sfk == sfk_constructor && friendp && !ctype)
10117
              {
10118
                error ("expected qualified name in friend declaration "
10119
                       "for constructor %qD",
10120
                       id_declarator->u.id.unqualified_name);
10121
                return error_mark_node;
10122
              }
10123
 
10124
            /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node.  */
10125
            function_context = (ctype != NULL_TREE) ?
10126
              decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
10127
            publicp = (! friendp || ! staticp)
10128
              && function_context == NULL_TREE;
10129
            decl = grokfndecl (ctype, type,
10130
                               TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
10131
                               ? unqualified_id : dname,
10132
                               parms,
10133
                               unqualified_id,
10134
                               virtualp, flags, memfn_quals, raises,
10135
                               friendp ? -1 : 0, friendp, publicp,
10136
                               inlinep | (2 * constexpr_p),
10137
                               sfk,
10138
                               funcdef_flag, template_count, in_namespace,
10139
                               attrlist, declarator->id_loc);
10140
            decl = set_virt_specifiers (decl, virt_specifiers);
10141
            if (decl == NULL_TREE)
10142
              return error_mark_node;
10143
#if 0
10144
            /* This clobbers the attrs stored in `decl' from `attrlist'.  */
10145
            /* The decl and setting of decl_attr is also turned off.  */
10146
            decl = build_decl_attribute_variant (decl, decl_attr);
10147
#endif
10148
 
10149
            /* [class.conv.ctor]
10150
 
10151
               A constructor declared without the function-specifier
10152
               explicit that can be called with a single parameter
10153
               specifies a conversion from the type of its first
10154
               parameter to the type of its class.  Such a constructor
10155
               is called a converting constructor.  */
10156
            if (explicitp == 2)
10157
              DECL_NONCONVERTING_P (decl) = 1;
10158
          }
10159
        else if (!staticp && !dependent_type_p (type)
10160
                 && !COMPLETE_TYPE_P (complete_type (type))
10161
                 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
10162
          {
10163
            if (unqualified_id)
10164
              error ("field %qD has incomplete type", unqualified_id);
10165
            else
10166
              error ("name %qT has incomplete type", type);
10167
 
10168
            /* If we're instantiating a template, tell them which
10169
               instantiation made the field's type be incomplete.  */
10170
            if (current_class_type
10171
                && TYPE_NAME (current_class_type)
10172
                && IDENTIFIER_TEMPLATE (current_class_name)
10173
                && declspecs->type
10174
                && declspecs->type == type)
10175
              error ("  in instantiation of template %qT",
10176
                     current_class_type);
10177
 
10178
            return error_mark_node;
10179
          }
10180
        else
10181
          {
10182
            if (friendp)
10183
              {
10184
                error ("%qE is neither function nor member function; "
10185
                       "cannot be declared friend", unqualified_id);
10186
                friendp = 0;
10187
              }
10188
            decl = NULL_TREE;
10189
          }
10190
 
10191
        if (friendp)
10192
          {
10193
            /* Friends are treated specially.  */
10194
            if (ctype == current_class_type)
10195
              ;  /* We already issued a permerror.  */
10196
            else if (decl && DECL_NAME (decl))
10197
              {
10198
                if (template_class_depth (current_class_type) == 0)
10199
                  {
10200
                    decl = check_explicit_specialization
10201
                      (unqualified_id, decl, template_count,
10202
                       2 * funcdef_flag + 4);
10203
                    if (decl == error_mark_node)
10204
                      return error_mark_node;
10205
                  }
10206
 
10207
                decl = do_friend (ctype, unqualified_id, decl,
10208
                                  *attrlist, flags,
10209
                                  funcdef_flag);
10210
                return decl;
10211
              }
10212
            else
10213
              return error_mark_node;
10214
          }
10215
 
10216
        /* Structure field.  It may not be a function, except for C++.  */
10217
 
10218
        if (decl == NULL_TREE)
10219
          {
10220
            if (staticp)
10221
              {
10222
                /* C++ allows static class members.  All other work
10223
                   for this is done by grokfield.  */
10224
                decl = build_lang_decl (VAR_DECL, unqualified_id, type);
10225
                set_linkage_for_static_data_member (decl);
10226
                /* Even if there is an in-class initialization, DECL
10227
                   is considered undefined until an out-of-class
10228
                   definition is provided.  */
10229
                DECL_EXTERNAL (decl) = 1;
10230
 
10231
                if (thread_p)
10232
                  DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
10233
 
10234
                if (constexpr_p && !initialized)
10235
                  {
10236
                    error ("constexpr static data member %qD must have an "
10237
                           "initializer", decl);
10238
                    constexpr_p = false;
10239
                  }
10240
              }
10241
            else
10242
              {
10243
                if (constexpr_p)
10244
                  {
10245
                    error ("non-static data member %qE declared %<constexpr%>",
10246
                           unqualified_id);
10247
                    constexpr_p = false;
10248
                  }
10249
                decl = build_decl (input_location,
10250
                                   FIELD_DECL, unqualified_id, type);
10251
                DECL_NONADDRESSABLE_P (decl) = bitfield;
10252
                if (bitfield && !unqualified_id)
10253
                  TREE_NO_WARNING (decl) = 1;
10254
 
10255
                if (storage_class == sc_mutable)
10256
                  {
10257
                    DECL_MUTABLE_P (decl) = 1;
10258
                    storage_class = sc_none;
10259
                  }
10260
 
10261
                if (initialized)
10262
                  {
10263
                    /* An attempt is being made to initialize a non-static
10264
                       member.  This is new in C++11.  */
10265
                    maybe_warn_cpp0x (CPP0X_NSDMI);
10266
 
10267
                    /* If this has been parsed with static storage class, but
10268
                       errors forced staticp to be cleared, ensure NSDMI is
10269
                       not present.  */
10270
                    if (declspecs->storage_class == sc_static)
10271
                      DECL_INITIAL (decl) = error_mark_node;
10272
                  }
10273
              }
10274
 
10275
            bad_specifiers (decl, BSP_FIELD, virtualp,
10276
                            memfn_quals != TYPE_UNQUALIFIED,
10277
                            inlinep, friendp, raises != NULL_TREE);
10278
          }
10279
      }
10280
    else if (TREE_CODE (type) == FUNCTION_TYPE
10281
             || TREE_CODE (type) == METHOD_TYPE)
10282
      {
10283
        tree original_name;
10284
        int publicp = 0;
10285
 
10286
        if (!unqualified_id)
10287
          return error_mark_node;
10288
 
10289
        if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
10290
          original_name = dname;
10291
        else
10292
          original_name = unqualified_id;
10293
 
10294
        if (storage_class == sc_auto)
10295
          error ("storage class %<auto%> invalid for function %qs", name);
10296
        else if (storage_class == sc_register)
10297
          error ("storage class %<register%> invalid for function %qs", name);
10298
        else if (thread_p)
10299
          error ("storage class %<__thread%> invalid for function %qs", name);
10300
 
10301
        if (virt_specifiers)
10302
          error ("virt-specifiers in %qs not allowed outside a class definition", name);
10303
        /* Function declaration not at top level.
10304
           Storage classes other than `extern' are not allowed
10305
           and `extern' makes no difference.  */
10306
        if (! toplevel_bindings_p ()
10307
            && (storage_class == sc_static
10308
                || declspecs->specs[(int)ds_inline])
10309
            && pedantic)
10310
          {
10311
            if (storage_class == sc_static)
10312
              pedwarn (input_location, OPT_pedantic,
10313
                       "%<static%> specified invalid for function %qs "
10314
                       "declared out of global scope", name);
10315
            else
10316
              pedwarn (input_location, OPT_pedantic,
10317
                       "%<inline%> specifier invalid for function %qs "
10318
                       "declared out of global scope", name);
10319
          }
10320
 
10321
        if (ctype == NULL_TREE)
10322
          {
10323
            if (virtualp)
10324
              {
10325
                error ("virtual non-class function %qs", name);
10326
                virtualp = 0;
10327
              }
10328
            else if (sfk == sfk_constructor
10329
                     || sfk == sfk_destructor)
10330
              {
10331
                error (funcdef_flag
10332
                       ? G_("%qs defined in a non-class scope")
10333
                       : G_("%qs declared in a non-class scope"), name);
10334
                sfk = sfk_none;
10335
              }
10336
          }
10337
 
10338
        /* Record presence of `static'.  */
10339
        publicp = (ctype != NULL_TREE
10340
                   || storage_class == sc_extern
10341
                   || storage_class != sc_static);
10342
 
10343
        decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
10344
                           virtualp, flags, memfn_quals, raises,
10345
                           1, friendp,
10346
                           publicp, inlinep | (2 * constexpr_p), sfk,
10347
                           funcdef_flag,
10348
                           template_count, in_namespace, attrlist,
10349
                           declarator->id_loc);
10350
        if (decl == NULL_TREE)
10351
          return error_mark_node;
10352
 
10353
        if (staticp == 1)
10354
          {
10355
            int invalid_static = 0;
10356
 
10357
            /* Don't allow a static member function in a class, and forbid
10358
               declaring main to be static.  */
10359
            if (TREE_CODE (type) == METHOD_TYPE)
10360
              {
10361
                permerror (input_location, "cannot declare member function %qD to have "
10362
                           "static linkage", decl);
10363
                invalid_static = 1;
10364
              }
10365
            else if (current_function_decl)
10366
              {
10367
                /* FIXME need arm citation */
10368
                error ("cannot declare static function inside another function");
10369
                invalid_static = 1;
10370
              }
10371
 
10372
            if (invalid_static)
10373
              {
10374
                staticp = 0;
10375
                storage_class = sc_none;
10376
              }
10377
          }
10378
      }
10379
    else
10380
      {
10381
        /* It's a variable.  */
10382
 
10383
        /* An uninitialized decl with `extern' is a reference.  */
10384
        decl = grokvardecl (type, unqualified_id,
10385
                            declspecs,
10386
                            initialized,
10387
                            (type_quals & TYPE_QUAL_CONST) != 0,
10388
                            ctype ? ctype : in_namespace);
10389
        bad_specifiers (decl, BSP_VAR, virtualp,
10390
                        memfn_quals != TYPE_UNQUALIFIED,
10391
                        inlinep, friendp, raises != NULL_TREE);
10392
 
10393
        if (ctype)
10394
          {
10395
            DECL_CONTEXT (decl) = ctype;
10396
            if (staticp == 1)
10397
              {
10398
                permerror (input_location, "%<static%> may not be used when defining "
10399
                           "(as opposed to declaring) a static data member");
10400
                staticp = 0;
10401
                storage_class = sc_none;
10402
              }
10403
            if (storage_class == sc_register && TREE_STATIC (decl))
10404
              {
10405
                error ("static member %qD declared %<register%>", decl);
10406
                storage_class = sc_none;
10407
              }
10408
            if (storage_class == sc_extern && pedantic)
10409
              {
10410
                pedwarn (input_location, OPT_pedantic,
10411
                         "cannot explicitly declare member %q#D to have "
10412
                         "extern linkage", decl);
10413
                storage_class = sc_none;
10414
              }
10415
          }
10416
        else if (constexpr_p && DECL_EXTERNAL (decl))
10417
          {
10418
            error ("declaration of constexpr variable %qD is not a definition",
10419
                   decl);
10420
            constexpr_p = false;
10421
          }
10422
      }
10423
 
10424
    if (storage_class == sc_extern && initialized && !funcdef_flag)
10425
      {
10426
        if (toplevel_bindings_p ())
10427
          {
10428
            /* It's common practice (and completely valid) to have a const
10429
               be initialized and declared extern.  */
10430
            if (!(type_quals & TYPE_QUAL_CONST))
10431
              warning (0, "%qs initialized and declared %<extern%>", name);
10432
          }
10433
        else
10434
          {
10435
            error ("%qs has both %<extern%> and initializer", name);
10436
            return error_mark_node;
10437
          }
10438
      }
10439
 
10440
    /* Record `register' declaration for warnings on &
10441
       and in case doing stupid register allocation.  */
10442
 
10443
    if (storage_class == sc_register)
10444
      DECL_REGISTER (decl) = 1;
10445
    else if (storage_class == sc_extern)
10446
      DECL_THIS_EXTERN (decl) = 1;
10447
    else if (storage_class == sc_static)
10448
      DECL_THIS_STATIC (decl) = 1;
10449
 
10450
    /* Set constexpr flag on vars (functions got it in grokfndecl).  */
10451
    if (constexpr_p && TREE_CODE (decl) == VAR_DECL)
10452
      DECL_DECLARED_CONSTEXPR_P (decl) = true;
10453
 
10454
    /* Record constancy and volatility on the DECL itself .  There's
10455
       no need to do this when processing a template; we'll do this
10456
       for the instantiated declaration based on the type of DECL.  */
10457
    if (!processing_template_decl)
10458
      cp_apply_type_quals_to_decl (type_quals, decl);
10459
 
10460
    return decl;
10461
  }
10462
}
10463
 
10464
/* Subroutine of start_function.  Ensure that each of the parameter
10465
   types (as listed in PARMS) is complete, as is required for a
10466
   function definition.  */
10467
 
10468
static void
10469
require_complete_types_for_parms (tree parms)
10470
{
10471
  for (; parms; parms = DECL_CHAIN (parms))
10472
    {
10473
      if (dependent_type_p (TREE_TYPE (parms)))
10474
        continue;
10475
      if (!VOID_TYPE_P (TREE_TYPE (parms))
10476
          && complete_type_or_else (TREE_TYPE (parms), parms))
10477
        {
10478
          relayout_decl (parms);
10479
          DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
10480
        }
10481
      else
10482
        /* grokparms or complete_type_or_else will have already issued
10483
           an error.  */
10484
        TREE_TYPE (parms) = error_mark_node;
10485
    }
10486
}
10487
 
10488
/* Returns nonzero if T is a local variable.  */
10489
 
10490
int
10491
local_variable_p (const_tree t)
10492
{
10493
  if ((TREE_CODE (t) == VAR_DECL
10494
       /* A VAR_DECL with a context that is a _TYPE is a static data
10495
          member.  */
10496
       && !TYPE_P (CP_DECL_CONTEXT (t))
10497
       /* Any other non-local variable must be at namespace scope.  */
10498
       && !DECL_NAMESPACE_SCOPE_P (t))
10499
      || (TREE_CODE (t) == PARM_DECL))
10500
    return 1;
10501
 
10502
  return 0;
10503
}
10504
 
10505
/* Like local_variable_p, but suitable for use as a tree-walking
10506
   function.  */
10507
 
10508
static tree
10509
local_variable_p_walkfn (tree *tp, int *walk_subtrees,
10510
                         void *data ATTRIBUTE_UNUSED)
10511
{
10512
  /* Check DECL_NAME to avoid including temporaries.  We don't check
10513
     DECL_ARTIFICIAL because we do want to complain about 'this'.  */
10514
  if (local_variable_p (*tp) && DECL_NAME (*tp))
10515
    return *tp;
10516
  else if (TYPE_P (*tp))
10517
    *walk_subtrees = 0;
10518
 
10519
  return NULL_TREE;
10520
}
10521
 
10522
/* Check that ARG, which is a default-argument expression for a
10523
   parameter DECL, is valid.  Returns ARG, or ERROR_MARK_NODE, if
10524
   something goes wrong.  DECL may also be a _TYPE node, rather than a
10525
   DECL, if there is no DECL available.  */
10526
 
10527
tree
10528
check_default_argument (tree decl, tree arg)
10529
{
10530
  tree var;
10531
  tree decl_type;
10532
 
10533
  if (TREE_CODE (arg) == DEFAULT_ARG)
10534
    /* We get a DEFAULT_ARG when looking at an in-class declaration
10535
       with a default argument.  Ignore the argument for now; we'll
10536
       deal with it after the class is complete.  */
10537
    return arg;
10538
 
10539
  if (TYPE_P (decl))
10540
    {
10541
      decl_type = decl;
10542
      decl = NULL_TREE;
10543
    }
10544
  else
10545
    decl_type = TREE_TYPE (decl);
10546
 
10547
  if (arg == error_mark_node
10548
      || decl == error_mark_node
10549
      || TREE_TYPE (arg) == error_mark_node
10550
      || decl_type == error_mark_node)
10551
    /* Something already went wrong.  There's no need to check
10552
       further.  */
10553
    return error_mark_node;
10554
 
10555
  /* [dcl.fct.default]
10556
 
10557
     A default argument expression is implicitly converted to the
10558
     parameter type.  */
10559
  if (!TREE_TYPE (arg)
10560
      || !can_convert_arg (decl_type, TREE_TYPE (arg), arg, LOOKUP_NORMAL))
10561
    {
10562
      if (decl)
10563
        error ("default argument for %q#D has type %qT",
10564
               decl, TREE_TYPE (arg));
10565
      else
10566
        error ("default argument for parameter of type %qT has type %qT",
10567
               decl_type, TREE_TYPE (arg));
10568
 
10569
      return error_mark_node;
10570
    }
10571
 
10572
  /* [dcl.fct.default]
10573
 
10574
     Local variables shall not be used in default argument
10575
     expressions.
10576
 
10577
     The keyword `this' shall not be used in a default argument of a
10578
     member function.  */
10579
  var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
10580
  if (var)
10581
    {
10582
      if (DECL_NAME (var) == this_identifier)
10583
        permerror (input_location, "default argument %qE uses %qD", arg, var);
10584
      else
10585
        error ("default argument %qE uses local variable %qD", arg, var);
10586
      return error_mark_node;
10587
    }
10588
 
10589
  /* All is well.  */
10590
  return arg;
10591
}
10592
 
10593
/* Returns a deprecated type used within TYPE, or NULL_TREE if none.  */
10594
 
10595
static tree
10596
type_is_deprecated (tree type)
10597
{
10598
  enum tree_code code;
10599
  if (TREE_DEPRECATED (type))
10600
    return type;
10601
  if (TYPE_NAME (type)
10602
      && TREE_DEPRECATED (TYPE_NAME (type)))
10603
    return type;
10604
 
10605
  /* Do warn about using typedefs to a deprecated class.  */
10606
  if (TAGGED_TYPE_P (type) && type != TYPE_MAIN_VARIANT (type))
10607
    return type_is_deprecated (TYPE_MAIN_VARIANT (type));
10608
 
10609
  code = TREE_CODE (type);
10610
 
10611
  if (code == POINTER_TYPE || code == REFERENCE_TYPE
10612
      || code == OFFSET_TYPE || code == FUNCTION_TYPE
10613
      || code == METHOD_TYPE || code == ARRAY_TYPE)
10614
    return type_is_deprecated (TREE_TYPE (type));
10615
 
10616
  if (TYPE_PTRMEMFUNC_P (type))
10617
    return type_is_deprecated
10618
      (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
10619
 
10620
  return NULL_TREE;
10621
}
10622
 
10623
/* Decode the list of parameter types for a function type.
10624
   Given the list of things declared inside the parens,
10625
   return a list of types.
10626
 
10627
   If this parameter does not end with an ellipsis, we append
10628
   void_list_node.
10629
 
10630
   *PARMS is set to the chain of PARM_DECLs created.  */
10631
 
10632
static tree
10633
grokparms (tree parmlist, tree *parms)
10634
{
10635
  tree result = NULL_TREE;
10636
  tree decls = NULL_TREE;
10637
  tree parm;
10638
  int any_error = 0;
10639
 
10640
  for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
10641
    {
10642
      tree type = NULL_TREE;
10643
      tree init = TREE_PURPOSE (parm);
10644
      tree decl = TREE_VALUE (parm);
10645
      const char *errmsg;
10646
 
10647
      if (parm == void_list_node)
10648
        break;
10649
 
10650
      if (! decl || TREE_TYPE (decl) == error_mark_node)
10651
        continue;
10652
 
10653
      type = TREE_TYPE (decl);
10654
      if (VOID_TYPE_P (type))
10655
        {
10656
          if (same_type_p (type, void_type_node)
10657
              && DECL_SELF_REFERENCE_P (type)
10658
              && !DECL_NAME (decl) && !result && TREE_CHAIN (parm) == void_list_node)
10659
            /* this is a parmlist of `(void)', which is ok.  */
10660
            break;
10661
          cxx_incomplete_type_error (decl, type);
10662
          /* It's not a good idea to actually create parameters of
10663
             type `void'; other parts of the compiler assume that a
10664
             void type terminates the parameter list.  */
10665
          type = error_mark_node;
10666
          TREE_TYPE (decl) = error_mark_node;
10667
        }
10668
 
10669
      if (type != error_mark_node
10670
          && TYPE_FOR_JAVA (type)
10671
          && MAYBE_CLASS_TYPE_P (type))
10672
        {
10673
          error ("parameter %qD has Java class type", decl);
10674
          type = error_mark_node;
10675
          TREE_TYPE (decl) = error_mark_node;
10676
          init = NULL_TREE;
10677
        }
10678
 
10679
      if (type != error_mark_node
10680
          && (errmsg = targetm.invalid_parameter_type (type)))
10681
        {
10682
          error (errmsg);
10683
          type = error_mark_node;
10684
          TREE_TYPE (decl) = error_mark_node;
10685
        }
10686
 
10687
      if (type != error_mark_node)
10688
        {
10689
          if (deprecated_state != DEPRECATED_SUPPRESS)
10690
            {
10691
              tree deptype = type_is_deprecated (type);
10692
              if (deptype)
10693
                warn_deprecated_use (deptype, NULL_TREE);
10694
            }
10695
 
10696
          /* Top-level qualifiers on the parameters are
10697
             ignored for function types.  */
10698
          type = cp_build_qualified_type (type, 0);
10699
          if (TREE_CODE (type) == METHOD_TYPE)
10700
            {
10701
              error ("parameter %qD invalidly declared method type", decl);
10702
              type = build_pointer_type (type);
10703
              TREE_TYPE (decl) = type;
10704
            }
10705
          else if (abstract_virtuals_error (decl, type))
10706
            any_error = 1;  /* Seems like a good idea.  */
10707
          else if (POINTER_TYPE_P (type))
10708
            {
10709
              /* [dcl.fct]/6, parameter types cannot contain pointers
10710
                 (references) to arrays of unknown bound.  */
10711
              tree t = TREE_TYPE (type);
10712
              int ptr = TYPE_PTR_P (type);
10713
 
10714
              while (1)
10715
                {
10716
                  if (TYPE_PTR_P (t))
10717
                    ptr = 1;
10718
                  else if (TREE_CODE (t) != ARRAY_TYPE)
10719
                    break;
10720
                  else if (!TYPE_DOMAIN (t))
10721
                    break;
10722
                  t = TREE_TYPE (t);
10723
                }
10724
              if (TREE_CODE (t) == ARRAY_TYPE)
10725
                error (ptr
10726
                       ? G_("parameter %qD includes pointer to array of "
10727
                            "unknown bound %qT")
10728
                       : G_("parameter %qD includes reference to array of "
10729
                            "unknown bound %qT"),
10730
                       decl, t);
10731
            }
10732
 
10733
          if (any_error)
10734
            init = NULL_TREE;
10735
          else if (init && !processing_template_decl)
10736
            init = check_default_argument (decl, init);
10737
        }
10738
 
10739
      DECL_CHAIN (decl) = decls;
10740
      decls = decl;
10741
      result = tree_cons (init, type, result);
10742
    }
10743
  decls = nreverse (decls);
10744
  result = nreverse (result);
10745
  if (parm)
10746
    result = chainon (result, void_list_node);
10747
  *parms = decls;
10748
 
10749
  return result;
10750
}
10751
 
10752
 
10753
/* D is a constructor or overloaded `operator='.
10754
 
10755
   Let T be the class in which D is declared. Then, this function
10756
   returns:
10757
 
10758
   -1 if D's is an ill-formed constructor or copy assignment operator
10759
      whose first parameter is of type `T'.
10760
 
10761
      operator.
10762
   1  if D is a copy constructor or copy assignment operator whose
10763
      first parameter is a reference to non-const qualified T.
10764
   2  if D is a copy constructor or copy assignment operator whose
10765
      first parameter is a reference to const qualified T.
10766
 
10767
   This function can be used as a predicate. Positive values indicate
10768
   a copy constructor and nonzero values indicate a copy assignment
10769
   operator.  */
10770
 
10771
int
10772
copy_fn_p (const_tree d)
10773
{
10774
  tree args;
10775
  tree arg_type;
10776
  int result = 1;
10777
 
10778
  gcc_assert (DECL_FUNCTION_MEMBER_P (d));
10779
 
10780
  if (TREE_CODE (d) == TEMPLATE_DECL
10781
      || (DECL_TEMPLATE_INFO (d)
10782
          && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
10783
    /* Instantiations of template member functions are never copy
10784
       functions.  Note that member functions of templated classes are
10785
       represented as template functions internally, and we must
10786
       accept those as copy functions.  */
10787
    return 0;
10788
 
10789
  args = FUNCTION_FIRST_USER_PARMTYPE (d);
10790
  if (!args)
10791
    return 0;
10792
 
10793
  arg_type = TREE_VALUE (args);
10794
  if (arg_type == error_mark_node)
10795
    return 0;
10796
 
10797
  if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
10798
    {
10799
      /* Pass by value copy assignment operator.  */
10800
      result = -1;
10801
    }
10802
  else if (TREE_CODE (arg_type) == REFERENCE_TYPE
10803
           && !TYPE_REF_IS_RVALUE (arg_type)
10804
           && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
10805
    {
10806
      if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
10807
        result = 2;
10808
    }
10809
  else
10810
    return 0;
10811
 
10812
  args = TREE_CHAIN (args);
10813
 
10814
  if (args && args != void_list_node && !TREE_PURPOSE (args))
10815
    /* There are more non-optional args.  */
10816
    return 0;
10817
 
10818
  return result;
10819
}
10820
 
10821
/* D is a constructor or overloaded `operator='.
10822
 
10823
   Let T be the class in which D is declared. Then, this function
10824
   returns true when D is a move constructor or move assignment
10825
   operator, false otherwise.  */
10826
 
10827
bool
10828
move_fn_p (const_tree d)
10829
{
10830
  tree args;
10831
  tree arg_type;
10832
  bool result = false;
10833
 
10834
  gcc_assert (DECL_FUNCTION_MEMBER_P (d));
10835
 
10836
  if (cxx_dialect == cxx98)
10837
    /* There are no move constructors if we are in C++98 mode.  */
10838
    return false;
10839
 
10840
  if (TREE_CODE (d) == TEMPLATE_DECL
10841
      || (DECL_TEMPLATE_INFO (d)
10842
         && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
10843
    /* Instantiations of template member functions are never copy
10844
       functions.  Note that member functions of templated classes are
10845
       represented as template functions internally, and we must
10846
       accept those as copy functions.  */
10847
    return 0;
10848
 
10849
  args = FUNCTION_FIRST_USER_PARMTYPE (d);
10850
  if (!args)
10851
    return 0;
10852
 
10853
  arg_type = TREE_VALUE (args);
10854
  if (arg_type == error_mark_node)
10855
    return 0;
10856
 
10857
  if (TREE_CODE (arg_type) == REFERENCE_TYPE
10858
      && TYPE_REF_IS_RVALUE (arg_type)
10859
      && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
10860
                      DECL_CONTEXT (d)))
10861
    result = true;
10862
 
10863
  args = TREE_CHAIN (args);
10864
 
10865
  if (args && args != void_list_node && !TREE_PURPOSE (args))
10866
    /* There are more non-optional args.  */
10867
    return false;
10868
 
10869
  return result;
10870
}
10871
 
10872
/* Remember any special properties of member function DECL.  */
10873
 
10874
void
10875
grok_special_member_properties (tree decl)
10876
{
10877
  tree class_type;
10878
 
10879
  if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
10880
    return;
10881
 
10882
  class_type = DECL_CONTEXT (decl);
10883
  if (DECL_CONSTRUCTOR_P (decl))
10884
    {
10885
      int ctor = copy_fn_p (decl);
10886
 
10887
      if (!DECL_ARTIFICIAL (decl))
10888
        TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
10889
 
10890
      if (ctor > 0)
10891
        {
10892
          /* [class.copy]
10893
 
10894
             A non-template constructor for class X is a copy
10895
             constructor if its first parameter is of type X&, const
10896
             X&, volatile X& or const volatile X&, and either there
10897
             are no other parameters or else all other parameters have
10898
             default arguments.  */
10899
          TYPE_HAS_COPY_CTOR (class_type) = 1;
10900
          if (user_provided_p (decl))
10901
            TYPE_HAS_COMPLEX_COPY_CTOR (class_type) = 1;
10902
          if (ctor > 1)
10903
            TYPE_HAS_CONST_COPY_CTOR (class_type) = 1;
10904
        }
10905
      else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
10906
        {
10907
          TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
10908
          if (user_provided_p (decl))
10909
            TYPE_HAS_COMPLEX_DFLT (class_type) = 1;
10910
        }
10911
      else if (move_fn_p (decl) && user_provided_p (decl))
10912
        TYPE_HAS_COMPLEX_MOVE_CTOR (class_type) = 1;
10913
      else if (is_list_ctor (decl))
10914
        TYPE_HAS_LIST_CTOR (class_type) = 1;
10915
 
10916
      if (DECL_DECLARED_CONSTEXPR_P (decl)
10917
          && !copy_fn_p (decl) && !move_fn_p (decl))
10918
        TYPE_HAS_CONSTEXPR_CTOR (class_type) = 1;
10919
    }
10920
  else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
10921
    {
10922
      /* [class.copy]
10923
 
10924
         A non-template assignment operator for class X is a copy
10925
         assignment operator if its parameter is of type X, X&, const
10926
         X&, volatile X& or const volatile X&.  */
10927
 
10928
      int assop = copy_fn_p (decl);
10929
 
10930
      if (assop)
10931
        {
10932
          TYPE_HAS_COPY_ASSIGN (class_type) = 1;
10933
          if (user_provided_p (decl))
10934
            TYPE_HAS_COMPLEX_COPY_ASSIGN (class_type) = 1;
10935
          if (assop != 1)
10936
            TYPE_HAS_CONST_COPY_ASSIGN (class_type) = 1;
10937
        }
10938
      else if (move_fn_p (decl) && user_provided_p (decl))
10939
        TYPE_HAS_COMPLEX_MOVE_ASSIGN (class_type) = 1;
10940
    }
10941
  /* Destructors are handled in check_methods.  */
10942
}
10943
 
10944
/* Check a constructor DECL has the correct form.  Complains
10945
   if the class has a constructor of the form X(X).  */
10946
 
10947
int
10948
grok_ctor_properties (const_tree ctype, const_tree decl)
10949
{
10950
  int ctor_parm = copy_fn_p (decl);
10951
 
10952
  if (ctor_parm < 0)
10953
    {
10954
      /* [class.copy]
10955
 
10956
         A declaration of a constructor for a class X is ill-formed if
10957
         its first parameter is of type (optionally cv-qualified) X
10958
         and either there are no other parameters or else all other
10959
         parameters have default arguments.
10960
 
10961
         We *don't* complain about member template instantiations that
10962
         have this form, though; they can occur as we try to decide
10963
         what constructor to use during overload resolution.  Since
10964
         overload resolution will never prefer such a constructor to
10965
         the non-template copy constructor (which is either explicitly
10966
         or implicitly defined), there's no need to worry about their
10967
         existence.  Theoretically, they should never even be
10968
         instantiated, but that's hard to forestall.  */
10969
      error ("invalid constructor; you probably meant %<%T (const %T&)%>",
10970
                ctype, ctype);
10971
      return 0;
10972
    }
10973
 
10974
  return 1;
10975
}
10976
 
10977
/* An operator with this code is unary, but can also be binary.  */
10978
 
10979
static int
10980
ambi_op_p (enum tree_code code)
10981
{
10982
  return (code == INDIRECT_REF
10983
          || code == ADDR_EXPR
10984
          || code == UNARY_PLUS_EXPR
10985
          || code == NEGATE_EXPR
10986
          || code == PREINCREMENT_EXPR
10987
          || code == PREDECREMENT_EXPR);
10988
}
10989
 
10990
/* An operator with this name can only be unary.  */
10991
 
10992
static int
10993
unary_op_p (enum tree_code code)
10994
{
10995
  return (code == TRUTH_NOT_EXPR
10996
          || code == BIT_NOT_EXPR
10997
          || code == COMPONENT_REF
10998
          || code == TYPE_EXPR);
10999
}
11000
 
11001
/* DECL is a declaration for an overloaded operator.  If COMPLAIN is true,
11002
   errors are issued for invalid declarations.  */
11003
 
11004
bool
11005
grok_op_properties (tree decl, bool complain)
11006
{
11007
  tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
11008
  tree argtype;
11009
  int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
11010
  tree name = DECL_NAME (decl);
11011
  enum tree_code operator_code;
11012
  int arity;
11013
  bool ellipsis_p;
11014
  tree class_type;
11015
 
11016
  /* Count the number of arguments and check for ellipsis.  */
11017
  for (argtype = argtypes, arity = 0;
11018
       argtype && argtype != void_list_node;
11019
       argtype = TREE_CHAIN (argtype))
11020
    ++arity;
11021
  ellipsis_p = !argtype;
11022
 
11023
  class_type = DECL_CONTEXT (decl);
11024
  if (class_type && !CLASS_TYPE_P (class_type))
11025
    class_type = NULL_TREE;
11026
 
11027
  if (DECL_CONV_FN_P (decl))
11028
    operator_code = TYPE_EXPR;
11029
  else
11030
    do
11031
      {
11032
#define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P)       \
11033
        if (ansi_opname (CODE) == name)                         \
11034
          {                                                     \
11035
            operator_code = (CODE);                             \
11036
            break;                                              \
11037
          }                                                     \
11038
        else if (ansi_assopname (CODE) == name)                 \
11039
          {                                                     \
11040
            operator_code = (CODE);                             \
11041
            DECL_ASSIGNMENT_OPERATOR_P (decl) = 1;              \
11042
            break;                                              \
11043
          }
11044
 
11045
#include "operators.def"
11046
#undef DEF_OPERATOR
11047
 
11048
        gcc_unreachable ();
11049
      }
11050
    while (0);
11051
  gcc_assert (operator_code != MAX_TREE_CODES);
11052
  SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
11053
 
11054
  if (class_type)
11055
    switch (operator_code)
11056
      {
11057
      case NEW_EXPR:
11058
        TYPE_HAS_NEW_OPERATOR (class_type) = 1;
11059
        break;
11060
 
11061
      case DELETE_EXPR:
11062
        TYPE_GETS_DELETE (class_type) |= 1;
11063
        break;
11064
 
11065
      case VEC_NEW_EXPR:
11066
        TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
11067
        break;
11068
 
11069
      case VEC_DELETE_EXPR:
11070
        TYPE_GETS_DELETE (class_type) |= 2;
11071
        break;
11072
 
11073
      default:
11074
        break;
11075
      }
11076
 
11077
    /* [basic.std.dynamic.allocation]/1:
11078
 
11079
       A program is ill-formed if an allocation function is declared
11080
       in a namespace scope other than global scope or declared static
11081
       in global scope.
11082
 
11083
       The same also holds true for deallocation functions.  */
11084
  if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
11085
      || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
11086
    {
11087
      if (DECL_NAMESPACE_SCOPE_P (decl))
11088
        {
11089
          if (CP_DECL_CONTEXT (decl) != global_namespace)
11090
            {
11091
              error ("%qD may not be declared within a namespace", decl);
11092
              return false;
11093
            }
11094
          else if (!TREE_PUBLIC (decl))
11095
            {
11096
              error ("%qD may not be declared as static", decl);
11097
              return false;
11098
            }
11099
        }
11100
    }
11101
 
11102
  if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
11103
    {
11104
      TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
11105
      DECL_IS_OPERATOR_NEW (decl) = 1;
11106
    }
11107
  else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
11108
    TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
11109
  else
11110
    {
11111
      /* An operator function must either be a non-static member function
11112
         or have at least one parameter of a class, a reference to a class,
11113
         an enumeration, or a reference to an enumeration.  13.4.0.6 */
11114
      if (! methodp || DECL_STATIC_FUNCTION_P (decl))
11115
        {
11116
          if (operator_code == TYPE_EXPR
11117
              || operator_code == CALL_EXPR
11118
              || operator_code == COMPONENT_REF
11119
              || operator_code == ARRAY_REF
11120
              || operator_code == NOP_EXPR)
11121
            {
11122
              error ("%qD must be a nonstatic member function", decl);
11123
              return false;
11124
            }
11125
          else
11126
            {
11127
              tree p;
11128
 
11129
              if (DECL_STATIC_FUNCTION_P (decl))
11130
                {
11131
                  error ("%qD must be either a non-static member "
11132
                         "function or a non-member function", decl);
11133
                  return false;
11134
                }
11135
 
11136
              for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
11137
                {
11138
                  tree arg = non_reference (TREE_VALUE (p));
11139
                  if (arg == error_mark_node)
11140
                    return false;
11141
 
11142
                  /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
11143
                     because these checks are performed even on
11144
                     template functions.  */
11145
                  if (MAYBE_CLASS_TYPE_P (arg)
11146
                      || TREE_CODE (arg) == ENUMERAL_TYPE)
11147
                    break;
11148
                }
11149
 
11150
              if (!p || p == void_list_node)
11151
                {
11152
                  if (complain)
11153
                    error ("%qD must have an argument of class or "
11154
                           "enumerated type", decl);
11155
                  return false;
11156
                }
11157
            }
11158
        }
11159
 
11160
      /* There are no restrictions on the arguments to an overloaded
11161
         "operator ()".  */
11162
      if (operator_code == CALL_EXPR)
11163
        return true;
11164
 
11165
      /* Warn about conversion operators that will never be used.  */
11166
      if (IDENTIFIER_TYPENAME_P (name)
11167
          && ! DECL_TEMPLATE_INFO (decl)
11168
          && warn_conversion
11169
          /* Warn only declaring the function; there is no need to
11170
             warn again about out-of-class definitions.  */
11171
          && class_type == current_class_type)
11172
        {
11173
          tree t = TREE_TYPE (name);
11174
          int ref = (TREE_CODE (t) == REFERENCE_TYPE);
11175
 
11176
          if (ref)
11177
            t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
11178
 
11179
          if (TREE_CODE (t) == VOID_TYPE)
11180
            warning (OPT_Wconversion,
11181
                     ref
11182
                     ? G_("conversion to a reference to void "
11183
                          "will never use a type conversion operator")
11184
                     : G_("conversion to void "
11185
                          "will never use a type conversion operator"));
11186
          else if (class_type)
11187
            {
11188
              if (t == class_type)
11189
                warning (OPT_Wconversion,
11190
                     ref
11191
                     ? G_("conversion to a reference to the same type "
11192
                          "will never use a type conversion operator")
11193
                     : G_("conversion to the same type "
11194
                          "will never use a type conversion operator"));
11195
              /* Don't force t to be complete here.  */
11196
              else if (MAYBE_CLASS_TYPE_P (t)
11197
                       && COMPLETE_TYPE_P (t)
11198
                       && DERIVED_FROM_P (t, class_type))
11199
                 warning (OPT_Wconversion,
11200
                          ref
11201
                          ? G_("conversion to a reference to a base class "
11202
                               "will never use a type conversion operator")
11203
                          : G_("conversion to a base class "
11204
                               "will never use a type conversion operator"));
11205
            }
11206
 
11207
        }
11208
 
11209
      if (operator_code == COND_EXPR)
11210
        {
11211
          /* 13.4.0.3 */
11212
          error ("ISO C++ prohibits overloading operator ?:");
11213
          return false;
11214
        }
11215
      else if (ellipsis_p)
11216
        {
11217
          error ("%qD must not have variable number of arguments", decl);
11218
          return false;
11219
        }
11220
      else if (ambi_op_p (operator_code))
11221
        {
11222
          if (arity == 1)
11223
            /* We pick the one-argument operator codes by default, so
11224
               we don't have to change anything.  */
11225
            ;
11226
          else if (arity == 2)
11227
            {
11228
              /* If we thought this was a unary operator, we now know
11229
                 it to be a binary operator.  */
11230
              switch (operator_code)
11231
                {
11232
                case INDIRECT_REF:
11233
                  operator_code = MULT_EXPR;
11234
                  break;
11235
 
11236
                case ADDR_EXPR:
11237
                  operator_code = BIT_AND_EXPR;
11238
                  break;
11239
 
11240
                case UNARY_PLUS_EXPR:
11241
                  operator_code = PLUS_EXPR;
11242
                  break;
11243
 
11244
                case NEGATE_EXPR:
11245
                  operator_code = MINUS_EXPR;
11246
                  break;
11247
 
11248
                case PREINCREMENT_EXPR:
11249
                  operator_code = POSTINCREMENT_EXPR;
11250
                  break;
11251
 
11252
                case PREDECREMENT_EXPR:
11253
                  operator_code = POSTDECREMENT_EXPR;
11254
                  break;
11255
 
11256
                default:
11257
                  gcc_unreachable ();
11258
                }
11259
 
11260
              SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
11261
 
11262
              if ((operator_code == POSTINCREMENT_EXPR
11263
                   || operator_code == POSTDECREMENT_EXPR)
11264
                  && ! processing_template_decl
11265
                  && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
11266
                {
11267
                  if (methodp)
11268
                    error ("postfix %qD must take %<int%> as its argument",
11269
                           decl);
11270
                  else
11271
                    error ("postfix %qD must take %<int%> as its second "
11272
                           "argument", decl);
11273
                  return false;
11274
                }
11275
            }
11276
          else
11277
            {
11278
              if (methodp)
11279
                error ("%qD must take either zero or one argument", decl);
11280
              else
11281
                error ("%qD must take either one or two arguments", decl);
11282
              return false;
11283
            }
11284
 
11285
          /* More Effective C++ rule 6.  */
11286
          if (warn_ecpp
11287
              && (operator_code == POSTINCREMENT_EXPR
11288
                  || operator_code == POSTDECREMENT_EXPR
11289
                  || operator_code == PREINCREMENT_EXPR
11290
                  || operator_code == PREDECREMENT_EXPR))
11291
            {
11292
              tree arg = TREE_VALUE (argtypes);
11293
              tree ret = TREE_TYPE (TREE_TYPE (decl));
11294
              if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
11295
                arg = TREE_TYPE (arg);
11296
              arg = TYPE_MAIN_VARIANT (arg);
11297
              if (operator_code == PREINCREMENT_EXPR
11298
                  || operator_code == PREDECREMENT_EXPR)
11299
                {
11300
                  if (TREE_CODE (ret) != REFERENCE_TYPE
11301
                      || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
11302
                                       arg))
11303
                    warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
11304
                             build_reference_type (arg));
11305
                }
11306
              else
11307
                {
11308
                  if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
11309
                    warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
11310
                }
11311
            }
11312
        }
11313
      else if (unary_op_p (operator_code))
11314
        {
11315
          if (arity != 1)
11316
            {
11317
              if (methodp)
11318
                error ("%qD must take %<void%>", decl);
11319
              else
11320
                error ("%qD must take exactly one argument", decl);
11321
              return false;
11322
            }
11323
        }
11324
      else /* if (binary_op_p (operator_code)) */
11325
        {
11326
          if (arity != 2)
11327
            {
11328
              if (methodp)
11329
                error ("%qD must take exactly one argument", decl);
11330
              else
11331
                error ("%qD must take exactly two arguments", decl);
11332
              return false;
11333
            }
11334
 
11335
          /* More Effective C++ rule 7.  */
11336
          if (warn_ecpp
11337
              && (operator_code == TRUTH_ANDIF_EXPR
11338
                  || operator_code == TRUTH_ORIF_EXPR
11339
                  || operator_code == COMPOUND_EXPR))
11340
            warning (OPT_Weffc__, "user-defined %qD always evaluates both arguments",
11341
                     decl);
11342
        }
11343
 
11344
      /* Effective C++ rule 23.  */
11345
      if (warn_ecpp
11346
          && arity == 2
11347
          && !DECL_ASSIGNMENT_OPERATOR_P (decl)
11348
          && (operator_code == PLUS_EXPR
11349
              || operator_code == MINUS_EXPR
11350
              || operator_code == TRUNC_DIV_EXPR
11351
              || operator_code == MULT_EXPR
11352
              || operator_code == TRUNC_MOD_EXPR)
11353
          && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
11354
        warning (OPT_Weffc__, "%qD should return by value", decl);
11355
 
11356
      /* [over.oper]/8 */
11357
      for (; argtypes && argtypes != void_list_node;
11358
          argtypes = TREE_CHAIN (argtypes))
11359
        if (TREE_PURPOSE (argtypes))
11360
          {
11361
            TREE_PURPOSE (argtypes) = NULL_TREE;
11362
            if (operator_code == POSTINCREMENT_EXPR
11363
                || operator_code == POSTDECREMENT_EXPR)
11364
              {
11365
                pedwarn (input_location, OPT_pedantic, "%qD cannot have default arguments",
11366
                         decl);
11367
              }
11368
            else
11369
              {
11370
                error ("%qD cannot have default arguments", decl);
11371
                return false;
11372
              }
11373
          }
11374
    }
11375
  return true;
11376
}
11377
 
11378
/* Return a string giving the keyword associate with CODE.  */
11379
 
11380
static const char *
11381
tag_name (enum tag_types code)
11382
{
11383
  switch (code)
11384
    {
11385
    case record_type:
11386
      return "struct";
11387
    case class_type:
11388
      return "class";
11389
    case union_type:
11390
      return "union";
11391
    case enum_type:
11392
      return "enum";
11393
    case typename_type:
11394
      return "typename";
11395
    default:
11396
      gcc_unreachable ();
11397
    }
11398
}
11399
 
11400
/* Name lookup in an elaborated-type-specifier (after the keyword
11401
   indicated by TAG_CODE) has found the TYPE_DECL DECL.  If the
11402
   elaborated-type-specifier is invalid, issue a diagnostic and return
11403
   error_mark_node; otherwise, return the *_TYPE to which it referred.
11404
   If ALLOW_TEMPLATE_P is true, TYPE may be a class template.  */
11405
 
11406
tree
11407
check_elaborated_type_specifier (enum tag_types tag_code,
11408
                                 tree decl,
11409
                                 bool allow_template_p)
11410
{
11411
  tree type;
11412
 
11413
  if (decl == error_mark_node)
11414
    return error_mark_node;
11415
 
11416
  /* In the case of:
11417
 
11418
       struct S { struct S *p; };
11419
 
11420
     name lookup will find the TYPE_DECL for the implicit "S::S"
11421
     typedef.  Adjust for that here.  */
11422
  if (DECL_SELF_REFERENCE_P (decl))
11423
    decl = TYPE_NAME (TREE_TYPE (decl));
11424
 
11425
  type = TREE_TYPE (decl);
11426
 
11427
  /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
11428
     is false for this case as well.  */
11429
  if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
11430
    {
11431
      error ("using template type parameter %qT after %qs",
11432
             type, tag_name (tag_code));
11433
      return error_mark_node;
11434
    }
11435
  /* Accept bound template template parameters.  */
11436
  else if (allow_template_p
11437
           && TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
11438
    ;
11439
  /*   [dcl.type.elab]
11440
 
11441
       If the identifier resolves to a typedef-name or the
11442
       simple-template-id resolves to an alias template
11443
       specialization, the elaborated-type-specifier is ill-formed.
11444
 
11445
     In other words, the only legitimate declaration to use in the
11446
     elaborated type specifier is the implicit typedef created when
11447
     the type is declared.  */
11448
  else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
11449
           && !DECL_SELF_REFERENCE_P (decl)
11450
           && tag_code != typename_type)
11451
    {
11452
      if (alias_template_specialization_p (type))
11453
        error ("using alias template specialization %qT after %qs",
11454
               type, tag_name (tag_code));
11455
      else
11456
        error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
11457
      inform (DECL_SOURCE_LOCATION (decl),
11458
              "%qD has a previous declaration here", decl);
11459
      return error_mark_node;
11460
    }
11461
  else if (TREE_CODE (type) != RECORD_TYPE
11462
           && TREE_CODE (type) != UNION_TYPE
11463
           && tag_code != enum_type
11464
           && tag_code != typename_type)
11465
    {
11466
      error ("%qT referred to as %qs", type, tag_name (tag_code));
11467
      error ("%q+T has a previous declaration here", type);
11468
      return error_mark_node;
11469
    }
11470
  else if (TREE_CODE (type) != ENUMERAL_TYPE
11471
           && tag_code == enum_type)
11472
    {
11473
      error ("%qT referred to as enum", type);
11474
      error ("%q+T has a previous declaration here", type);
11475
      return error_mark_node;
11476
    }
11477
  else if (!allow_template_p
11478
           && TREE_CODE (type) == RECORD_TYPE
11479
           && CLASSTYPE_IS_TEMPLATE (type))
11480
    {
11481
      /* If a class template appears as elaborated type specifier
11482
         without a template header such as:
11483
 
11484
           template <class T> class C {};
11485
           void f(class C);             // No template header here
11486
 
11487
         then the required template argument is missing.  */
11488
      error ("template argument required for %<%s %T%>",
11489
             tag_name (tag_code),
11490
             DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
11491
      return error_mark_node;
11492
    }
11493
 
11494
  return type;
11495
}
11496
 
11497
/* Lookup NAME in elaborate type specifier in scope according to
11498
   SCOPE and issue diagnostics if necessary.
11499
   Return *_TYPE node upon success, NULL_TREE when the NAME is not
11500
   found, and ERROR_MARK_NODE for type error.  */
11501
 
11502
static tree
11503
lookup_and_check_tag (enum tag_types tag_code, tree name,
11504
                      tag_scope scope, bool template_header_p)
11505
{
11506
  tree t;
11507
  tree decl;
11508
  if (scope == ts_global)
11509
    {
11510
      /* First try ordinary name lookup, ignoring hidden class name
11511
         injected via friend declaration.  */
11512
      decl = lookup_name_prefer_type (name, 2);
11513
      /* If that fails, the name will be placed in the smallest
11514
         non-class, non-function-prototype scope according to 3.3.1/5.
11515
         We may already have a hidden name declared as friend in this
11516
         scope.  So lookup again but not ignoring hidden names.
11517
         If we find one, that name will be made visible rather than
11518
         creating a new tag.  */
11519
      if (!decl)
11520
        decl = lookup_type_scope (name, ts_within_enclosing_non_class);
11521
    }
11522
  else
11523
    decl = lookup_type_scope (name, scope);
11524
 
11525
  if (decl && DECL_CLASS_TEMPLATE_P (decl))
11526
    decl = DECL_TEMPLATE_RESULT (decl);
11527
 
11528
  if (decl && TREE_CODE (decl) == TYPE_DECL)
11529
    {
11530
      /* Look for invalid nested type:
11531
           class C {
11532
             class C {};
11533
           };  */
11534
      if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
11535
        {
11536
          error ("%qD has the same name as the class in which it is "
11537
                 "declared",
11538
                 decl);
11539
          return error_mark_node;
11540
        }
11541
 
11542
      /* Two cases we need to consider when deciding if a class
11543
         template is allowed as an elaborated type specifier:
11544
         1. It is a self reference to its own class.
11545
         2. It comes with a template header.
11546
 
11547
         For example:
11548
 
11549
           template <class T> class C {
11550
             class C *c1;               // DECL_SELF_REFERENCE_P is true
11551
             class D;
11552
           };
11553
           template <class U> class C; // template_header_p is true
11554
           template <class T> class C<T>::D {
11555
             class C *c2;               // DECL_SELF_REFERENCE_P is true
11556
           };  */
11557
 
11558
      t = check_elaborated_type_specifier (tag_code,
11559
                                           decl,
11560
                                           template_header_p
11561
                                           | DECL_SELF_REFERENCE_P (decl));
11562
      return t;
11563
    }
11564
  else if (decl && TREE_CODE (decl) == TREE_LIST)
11565
    {
11566
      error ("reference to %qD is ambiguous", name);
11567
      print_candidates (decl);
11568
      return error_mark_node;
11569
    }
11570
  else
11571
    return NULL_TREE;
11572
}
11573
 
11574
/* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
11575
   Define the tag as a forward-reference if it is not defined.
11576
 
11577
   If a declaration is given, process it here, and report an error if
11578
   multiple declarations are not identical.
11579
 
11580
   SCOPE is TS_CURRENT when this is also a definition.  Only look in
11581
   the current frame for the name (since C++ allows new names in any
11582
   scope.)  It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
11583
   declaration.  Only look beginning from the current scope outward up
11584
   till the nearest non-class scope.  Otherwise it is TS_GLOBAL.
11585
 
11586
   TEMPLATE_HEADER_P is true when this declaration is preceded by
11587
   a set of template parameters.  */
11588
 
11589
static tree
11590
xref_tag_1 (enum tag_types tag_code, tree name,
11591
            tag_scope scope, bool template_header_p)
11592
{
11593
  enum tree_code code;
11594
  tree t;
11595
  tree context = NULL_TREE;
11596
 
11597
  gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
11598
 
11599
  switch (tag_code)
11600
    {
11601
    case record_type:
11602
    case class_type:
11603
      code = RECORD_TYPE;
11604
      break;
11605
    case union_type:
11606
      code = UNION_TYPE;
11607
      break;
11608
    case enum_type:
11609
      code = ENUMERAL_TYPE;
11610
      break;
11611
    default:
11612
      gcc_unreachable ();
11613
    }
11614
 
11615
  /* In case of anonymous name, xref_tag is only called to
11616
     make type node and push name.  Name lookup is not required.  */
11617
  if (ANON_AGGRNAME_P (name))
11618
    t = NULL_TREE;
11619
  else
11620
    t = lookup_and_check_tag  (tag_code, name,
11621
                               scope, template_header_p);
11622
 
11623
  if (t == error_mark_node)
11624
    return error_mark_node;
11625
 
11626
  if (scope != ts_current && t && current_class_type
11627
      && template_class_depth (current_class_type)
11628
      && template_header_p)
11629
    {
11630
      /* Since SCOPE is not TS_CURRENT, we are not looking at a
11631
         definition of this tag.  Since, in addition, we are currently
11632
         processing a (member) template declaration of a template
11633
         class, we must be very careful; consider:
11634
 
11635
           template <class X>
11636
           struct S1
11637
 
11638
           template <class U>
11639
           struct S2
11640
           { template <class V>
11641
           friend struct S1; };
11642
 
11643
         Here, the S2::S1 declaration should not be confused with the
11644
         outer declaration.  In particular, the inner version should
11645
         have a template parameter of level 2, not level 1.  This
11646
         would be particularly important if the member declaration
11647
         were instead:
11648
 
11649
           template <class V = U> friend struct S1;
11650
 
11651
         say, when we should tsubst into `U' when instantiating
11652
         S2.  On the other hand, when presented with:
11653
 
11654
           template <class T>
11655
           struct S1 {
11656
             template <class U>
11657
             struct S2 {};
11658
             template <class U>
11659
             friend struct S2;
11660
           };
11661
 
11662
         we must find the inner binding eventually.  We
11663
         accomplish this by making sure that the new type we
11664
         create to represent this declaration has the right
11665
         TYPE_CONTEXT.  */
11666
      context = TYPE_CONTEXT (t);
11667
      t = NULL_TREE;
11668
    }
11669
 
11670
  if (! t)
11671
    {
11672
      /* If no such tag is yet defined, create a forward-reference node
11673
         and record it as the "definition".
11674
         When a real declaration of this type is found,
11675
         the forward-reference will be altered into a real type.  */
11676
      if (code == ENUMERAL_TYPE)
11677
        {
11678
          error ("use of enum %q#D without previous declaration", name);
11679
          return error_mark_node;
11680
        }
11681
      else
11682
        {
11683
          t = make_class_type (code);
11684
          TYPE_CONTEXT (t) = context;
11685
          t = pushtag (name, t, scope);
11686
        }
11687
    }
11688
  else
11689
    {
11690
      if (template_header_p && MAYBE_CLASS_TYPE_P (t))
11691
        {
11692
          if (!redeclare_class_template (t, current_template_parms))
11693
            return error_mark_node;
11694
        }
11695
      else if (!processing_template_decl
11696
               && CLASS_TYPE_P (t)
11697
               && CLASSTYPE_IS_TEMPLATE (t))
11698
        {
11699
          error ("redeclaration of %qT as a non-template", t);
11700
          error ("previous declaration %q+D", t);
11701
          return error_mark_node;
11702
        }
11703
 
11704
      /* Make injected friend class visible.  */
11705
      if (scope != ts_within_enclosing_non_class
11706
          && hidden_name_p (TYPE_NAME (t)))
11707
        {
11708
          DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
11709
          DECL_FRIEND_P (TYPE_NAME (t)) = 0;
11710
 
11711
          if (TYPE_TEMPLATE_INFO (t))
11712
            {
11713
              DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
11714
              DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
11715
            }
11716
        }
11717
    }
11718
 
11719
  return t;
11720
}
11721
 
11722
/* Wrapper for xref_tag_1.  */
11723
 
11724
tree
11725
xref_tag (enum tag_types tag_code, tree name,
11726
          tag_scope scope, bool template_header_p)
11727
{
11728
  tree ret;
11729
  bool subtime;
11730
  subtime = timevar_cond_start (TV_NAME_LOOKUP);
11731
  ret = xref_tag_1 (tag_code, name, scope, template_header_p);
11732
  timevar_cond_stop (TV_NAME_LOOKUP, subtime);
11733
  return ret;
11734
}
11735
 
11736
 
11737
tree
11738
xref_tag_from_type (tree old, tree id, tag_scope scope)
11739
{
11740
  enum tag_types tag_kind;
11741
 
11742
  if (TREE_CODE (old) == RECORD_TYPE)
11743
    tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
11744
  else
11745
    tag_kind  = union_type;
11746
 
11747
  if (id == NULL_TREE)
11748
    id = TYPE_IDENTIFIER (old);
11749
 
11750
  return xref_tag (tag_kind, id, scope, false);
11751
}
11752
 
11753
/* Create the binfo hierarchy for REF with (possibly NULL) base list
11754
   BASE_LIST.  For each element on BASE_LIST the TREE_PURPOSE is an
11755
   access_* node, and the TREE_VALUE is the type of the base-class.
11756
   Non-NULL TREE_TYPE indicates virtual inheritance.
11757
 
11758
   Returns true if the binfo hierarchy was successfully created,
11759
   false if an error was detected. */
11760
 
11761
bool
11762
xref_basetypes (tree ref, tree base_list)
11763
{
11764
  tree *basep;
11765
  tree binfo, base_binfo;
11766
  unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases.  */
11767
  unsigned max_bases = 0;  /* Maximum direct bases.  */
11768
  int i;
11769
  tree default_access;
11770
  tree igo_prev; /* Track Inheritance Graph Order.  */
11771
 
11772
  if (ref == error_mark_node)
11773
    return false;
11774
 
11775
  /* The base of a derived class is private by default, all others are
11776
     public.  */
11777
  default_access = (TREE_CODE (ref) == RECORD_TYPE
11778
                    && CLASSTYPE_DECLARED_CLASS (ref)
11779
                    ? access_private_node : access_public_node);
11780
 
11781
  /* First, make sure that any templates in base-classes are
11782
     instantiated.  This ensures that if we call ourselves recursively
11783
     we do not get confused about which classes are marked and which
11784
     are not.  */
11785
  basep = &base_list;
11786
  while (*basep)
11787
    {
11788
      tree basetype = TREE_VALUE (*basep);
11789
 
11790
      if (!(processing_template_decl && uses_template_parms (basetype))
11791
          && !complete_type_or_else (basetype, NULL))
11792
        /* An incomplete type.  Remove it from the list.  */
11793
        *basep = TREE_CHAIN (*basep);
11794
      else
11795
        {
11796
          max_bases++;
11797
          if (TREE_TYPE (*basep))
11798
            max_vbases++;
11799
          if (CLASS_TYPE_P (basetype))
11800
            max_vbases += VEC_length (tree, CLASSTYPE_VBASECLASSES (basetype));
11801
          basep = &TREE_CHAIN (*basep);
11802
        }
11803
    }
11804
 
11805
  TYPE_MARKED_P (ref) = 1;
11806
 
11807
  /* The binfo slot should be empty, unless this is an (ill-formed)
11808
     redefinition.  */
11809
  if (TYPE_BINFO (ref) && !TYPE_SIZE (ref))
11810
    {
11811
      error ("redefinition of %q#T", ref);
11812
      return false;
11813
    }
11814
 
11815
  gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
11816
 
11817
  binfo = make_tree_binfo (max_bases);
11818
 
11819
  TYPE_BINFO (ref) = binfo;
11820
  BINFO_OFFSET (binfo) = size_zero_node;
11821
  BINFO_TYPE (binfo) = ref;
11822
 
11823
  /* Apply base-class info set up to the variants of this type.  */
11824
  fixup_type_variants (ref);
11825
 
11826
  if (max_bases)
11827
    {
11828
      BINFO_BASE_ACCESSES (binfo) = VEC_alloc (tree, gc, max_bases);
11829
      /* An aggregate cannot have baseclasses.  */
11830
      CLASSTYPE_NON_AGGREGATE (ref) = 1;
11831
 
11832
      if (TREE_CODE (ref) == UNION_TYPE)
11833
        {
11834
          error ("derived union %qT invalid", ref);
11835
          return false;
11836
        }
11837
    }
11838
 
11839
  if (max_bases > 1)
11840
    {
11841
      if (TYPE_FOR_JAVA (ref))
11842
        {
11843
          error ("Java class %qT cannot have multiple bases", ref);
11844
          return false;
11845
        }
11846
    }
11847
 
11848
  if (max_vbases)
11849
    {
11850
      CLASSTYPE_VBASECLASSES (ref) = VEC_alloc (tree, gc, max_vbases);
11851
 
11852
      if (TYPE_FOR_JAVA (ref))
11853
        {
11854
          error ("Java class %qT cannot have virtual bases", ref);
11855
          return false;
11856
        }
11857
    }
11858
 
11859
  for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
11860
    {
11861
      tree access = TREE_PURPOSE (base_list);
11862
      int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
11863
      tree basetype = TREE_VALUE (base_list);
11864
 
11865
      if (access == access_default_node)
11866
        access = default_access;
11867
 
11868
      if (PACK_EXPANSION_P (basetype))
11869
        basetype = PACK_EXPANSION_PATTERN (basetype);
11870
      if (TREE_CODE (basetype) == TYPE_DECL)
11871
        basetype = TREE_TYPE (basetype);
11872
      if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
11873
        {
11874
          error ("base type %qT fails to be a struct or class type",
11875
                 basetype);
11876
          return false;
11877
        }
11878
 
11879
      if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
11880
        TYPE_FOR_JAVA (ref) = 1;
11881
 
11882
      base_binfo = NULL_TREE;
11883
      if (CLASS_TYPE_P (basetype) && !dependent_scope_p (basetype))
11884
        {
11885
          base_binfo = TYPE_BINFO (basetype);
11886
          /* The original basetype could have been a typedef'd type.  */
11887
          basetype = BINFO_TYPE (base_binfo);
11888
 
11889
          /* Inherit flags from the base.  */
11890
          TYPE_HAS_NEW_OPERATOR (ref)
11891
            |= TYPE_HAS_NEW_OPERATOR (basetype);
11892
          TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
11893
            |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
11894
          TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
11895
          TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
11896
          CLASSTYPE_DIAMOND_SHAPED_P (ref)
11897
            |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
11898
          CLASSTYPE_REPEATED_BASE_P (ref)
11899
            |= CLASSTYPE_REPEATED_BASE_P (basetype);
11900
        }
11901
 
11902
      /* We must do this test after we've seen through a typedef
11903
         type.  */
11904
      if (TYPE_MARKED_P (basetype))
11905
        {
11906
          if (basetype == ref)
11907
            error ("recursive type %qT undefined", basetype);
11908
          else
11909
            error ("duplicate base type %qT invalid", basetype);
11910
          return false;
11911
        }
11912
 
11913
      if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
11914
        /* Regenerate the pack expansion for the bases. */
11915
        basetype = make_pack_expansion (basetype);
11916
 
11917
      TYPE_MARKED_P (basetype) = 1;
11918
 
11919
      base_binfo = copy_binfo (base_binfo, basetype, ref,
11920
                               &igo_prev, via_virtual);
11921
      if (!BINFO_INHERITANCE_CHAIN (base_binfo))
11922
        BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
11923
 
11924
      BINFO_BASE_APPEND (binfo, base_binfo);
11925
      BINFO_BASE_ACCESS_APPEND (binfo, access);
11926
    }
11927
 
11928
  if (VEC_length (tree, CLASSTYPE_VBASECLASSES (ref)) < max_vbases)
11929
    /* If we didn't get max_vbases vbases, we must have shared at
11930
       least one of them, and are therefore diamond shaped.  */
11931
    CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
11932
 
11933
  /* Unmark all the types.  */
11934
  for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
11935
    TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
11936
  TYPE_MARKED_P (ref) = 0;
11937
 
11938
  /* Now see if we have a repeated base type.  */
11939
  if (!CLASSTYPE_REPEATED_BASE_P (ref))
11940
    {
11941
      for (base_binfo = binfo; base_binfo;
11942
           base_binfo = TREE_CHAIN (base_binfo))
11943
        {
11944
          if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
11945
            {
11946
              CLASSTYPE_REPEATED_BASE_P (ref) = 1;
11947
              break;
11948
            }
11949
          TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
11950
        }
11951
      for (base_binfo = binfo; base_binfo;
11952
           base_binfo = TREE_CHAIN (base_binfo))
11953
        if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
11954
          TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
11955
        else
11956
          break;
11957
    }
11958
 
11959
  return true;
11960
}
11961
 
11962
 
11963
/* Copies the enum-related properties from type SRC to type DST.
11964
   Used with the underlying type of an enum and the enum itself.  */
11965
static void
11966
copy_type_enum (tree dst, tree src)
11967
{
11968
  tree t;
11969
  for (t = dst; t; t = TYPE_NEXT_VARIANT (t))
11970
    {
11971
      TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (src);
11972
      TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (src);
11973
      TYPE_SIZE (t) = TYPE_SIZE (src);
11974
      TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (src);
11975
      SET_TYPE_MODE (dst, TYPE_MODE (src));
11976
      TYPE_PRECISION (t) = TYPE_PRECISION (src);
11977
      TYPE_ALIGN (t) = TYPE_ALIGN (src);
11978
      TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (src);
11979
      TYPE_UNSIGNED (t) = TYPE_UNSIGNED (src);
11980
    }
11981
}
11982
 
11983
/* Begin compiling the definition of an enumeration type.
11984
   NAME is its name,
11985
 
11986
   if ENUMTYPE is not NULL_TREE then the type has alredy been found.
11987
 
11988
   UNDERLYING_TYPE is the type that will be used as the storage for
11989
   the enumeration type. This should be NULL_TREE if no storage type
11990
   was specified.
11991
 
11992
   SCOPED_ENUM_P is true if this is a scoped enumeration type.
11993
 
11994
   if IS_NEW is not NULL, gets TRUE iff a new type is created.
11995
 
11996
   Returns the type object, as yet incomplete.
11997
   Also records info about it so that build_enumerator
11998
   may be used to declare the individual values as they are read.  */
11999
 
12000
tree
12001
start_enum (tree name, tree enumtype, tree underlying_type,
12002
            bool scoped_enum_p, bool *is_new)
12003
{
12004
  tree prevtype = NULL_TREE;
12005
  gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
12006
 
12007
  if (is_new)
12008
    *is_new = false;
12009
  /* [C++0x dcl.enum]p5:
12010
 
12011
    If not explicitly specified, the underlying type of a scoped
12012
    enumeration type is int.  */
12013
  if (!underlying_type && scoped_enum_p)
12014
    underlying_type = integer_type_node;
12015
 
12016
  if (underlying_type)
12017
    underlying_type = cv_unqualified (underlying_type);
12018
 
12019
  /* If this is the real definition for a previous forward reference,
12020
     fill in the contents in the same object that used to be the
12021
     forward reference.  */
12022
  if (!enumtype)
12023
    enumtype = lookup_and_check_tag (enum_type, name,
12024
                                     /*tag_scope=*/ts_current,
12025
                                     /*template_header_p=*/false);
12026
 
12027
  /* In case of a template_decl, the only check that should be deferred
12028
     to instantiation time is the comparison of underlying types.  */
12029
  if (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE)
12030
    {
12031
      if (scoped_enum_p != SCOPED_ENUM_P (enumtype))
12032
        {
12033
          error_at (input_location, "scoped/unscoped mismatch "
12034
                    "in enum %q#T", enumtype);
12035
          error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
12036
                    "previous definition here");
12037
          enumtype = error_mark_node;
12038
        }
12039
      else if (ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) != !! underlying_type)
12040
        {
12041
          error_at (input_location, "underlying type mismatch "
12042
                    "in enum %q#T", enumtype);
12043
          error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
12044
                    "previous definition here");
12045
          enumtype = error_mark_node;
12046
        }
12047
      else if (underlying_type && ENUM_UNDERLYING_TYPE (enumtype)
12048
               && !dependent_type_p (underlying_type)
12049
               && !dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))
12050
               && !same_type_p (underlying_type,
12051
                                ENUM_UNDERLYING_TYPE (enumtype)))
12052
        {
12053
          error_at (input_location, "different underlying type "
12054
                    "in enum %q#T", enumtype);
12055
          error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
12056
                    "previous definition here");
12057
          underlying_type = NULL_TREE;
12058
        }
12059
    }
12060
 
12061
  if (!enumtype || TREE_CODE (enumtype) != ENUMERAL_TYPE
12062
      || processing_template_decl)
12063
    {
12064
      /* In case of error, make a dummy enum to allow parsing to
12065
         continue.  */
12066
      if (enumtype == error_mark_node)
12067
        {
12068
          name = make_anon_name ();
12069
          enumtype = NULL_TREE;
12070
        }
12071
 
12072
      /* enumtype may be an ENUMERAL_TYPE if this is a redefinition
12073
         of an opaque enum, or an opaque enum of an already defined
12074
         enumeration (C++0x only).
12075
         In any other case, it'll be NULL_TREE. */
12076
      if (!enumtype)
12077
        {
12078
          if (is_new)
12079
            *is_new = true;
12080
        }
12081
      prevtype = enumtype;
12082
 
12083
      /* Do not push the decl more than once, unless we need to
12084
         compare underlying types at instantiation time */
12085
      if (!enumtype
12086
          || TREE_CODE (enumtype) != ENUMERAL_TYPE
12087
          || (underlying_type
12088
              && dependent_type_p (underlying_type))
12089
          || (ENUM_UNDERLYING_TYPE (enumtype)
12090
              && dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))))
12091
        {
12092
          enumtype = cxx_make_type (ENUMERAL_TYPE);
12093
          enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
12094
        }
12095
      else
12096
          enumtype = xref_tag (enum_type, name, /*tag_scope=*/ts_current,
12097
                               false);
12098
 
12099
      if (enumtype == error_mark_node)
12100
        return error_mark_node;
12101
 
12102
      /* The enum is considered opaque until the opening '{' of the
12103
         enumerator list.  */
12104
      SET_OPAQUE_ENUM_P (enumtype, true);
12105
      ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) = !! underlying_type;
12106
    }
12107
 
12108
  SET_SCOPED_ENUM_P (enumtype, scoped_enum_p);
12109
 
12110
  if (underlying_type)
12111
    {
12112
      if (CP_INTEGRAL_TYPE_P (underlying_type))
12113
        {
12114
          copy_type_enum (enumtype, underlying_type);
12115
          ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
12116
        }
12117
      else if (dependent_type_p (underlying_type))
12118
        ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
12119
      else
12120
        error ("underlying type %<%T%> of %<%T%> must be an integral type",
12121
               underlying_type, enumtype);
12122
    }
12123
 
12124
  /* If into a template class, the returned enum is always the first
12125
     declaration (opaque or not) seen. This way all the references to
12126
     this type will be to the same declaration. The following ones are used
12127
     only to check for definition errors.  */
12128
  if (prevtype && processing_template_decl)
12129
    return prevtype;
12130
  else
12131
    return enumtype;
12132
}
12133
 
12134
/* After processing and defining all the values of an enumeration type,
12135
   install their decls in the enumeration type.
12136
   ENUMTYPE is the type object.  */
12137
 
12138
void
12139
finish_enum_value_list (tree enumtype)
12140
{
12141
  tree values;
12142
  tree underlying_type;
12143
  tree decl;
12144
  tree value;
12145
  tree minnode, maxnode;
12146
  tree t;
12147
 
12148
  bool fixed_underlying_type_p
12149
    = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
12150
 
12151
  /* We built up the VALUES in reverse order.  */
12152
  TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
12153
 
12154
  /* For an enum defined in a template, just set the type of the values;
12155
     all further processing is postponed until the template is
12156
     instantiated.  We need to set the type so that tsubst of a CONST_DECL
12157
     works.  */
12158
  if (processing_template_decl)
12159
    {
12160
      for (values = TYPE_VALUES (enumtype);
12161
           values;
12162
           values = TREE_CHAIN (values))
12163
        TREE_TYPE (TREE_VALUE (values)) = enumtype;
12164
      return;
12165
    }
12166
 
12167
  /* Determine the minimum and maximum values of the enumerators.  */
12168
  if (TYPE_VALUES (enumtype))
12169
    {
12170
      minnode = maxnode = NULL_TREE;
12171
 
12172
      for (values = TYPE_VALUES (enumtype);
12173
           values;
12174
           values = TREE_CHAIN (values))
12175
        {
12176
          decl = TREE_VALUE (values);
12177
 
12178
          /* [dcl.enum]: Following the closing brace of an enum-specifier,
12179
             each enumerator has the type of its enumeration.  Prior to the
12180
             closing brace, the type of each enumerator is the type of its
12181
             initializing value.  */
12182
          TREE_TYPE (decl) = enumtype;
12183
 
12184
          /* Update the minimum and maximum values, if appropriate.  */
12185
          value = DECL_INITIAL (decl);
12186
          if (value == error_mark_node)
12187
            value = integer_zero_node;
12188
          /* Figure out what the minimum and maximum values of the
12189
             enumerators are.  */
12190
          if (!minnode)
12191
            minnode = maxnode = value;
12192
          else if (tree_int_cst_lt (maxnode, value))
12193
            maxnode = value;
12194
          else if (tree_int_cst_lt (value, minnode))
12195
            minnode = value;
12196
        }
12197
    }
12198
  else
12199
    /* [dcl.enum]
12200
 
12201
       If the enumerator-list is empty, the underlying type is as if
12202
       the enumeration had a single enumerator with value 0.  */
12203
    minnode = maxnode = integer_zero_node;
12204
 
12205
  if (!fixed_underlying_type_p)
12206
    {
12207
      /* Compute the number of bits require to represent all values of the
12208
         enumeration.  We must do this before the type of MINNODE and
12209
         MAXNODE are transformed, since tree_int_cst_min_precision relies
12210
         on the TREE_TYPE of the value it is passed.  */
12211
      bool unsignedp = tree_int_cst_sgn (minnode) >= 0;
12212
      int lowprec = tree_int_cst_min_precision (minnode, unsignedp);
12213
      int highprec = tree_int_cst_min_precision (maxnode, unsignedp);
12214
      int precision = MAX (lowprec, highprec);
12215
      unsigned int itk;
12216
      bool use_short_enum;
12217
 
12218
      /* Determine the underlying type of the enumeration.
12219
 
12220
         [dcl.enum]
12221
 
12222
         The underlying type of an enumeration is an integral type that
12223
         can represent all the enumerator values defined in the
12224
         enumeration.  It is implementation-defined which integral type is
12225
         used as the underlying type for an enumeration except that the
12226
         underlying type shall not be larger than int unless the value of
12227
         an enumerator cannot fit in an int or unsigned int.
12228
 
12229
         We use "int" or an "unsigned int" as the underlying type, even if
12230
         a smaller integral type would work, unless the user has
12231
         explicitly requested that we use the smallest possible type.  The
12232
         user can request that for all enumerations with a command line
12233
         flag, or for just one enumeration with an attribute.  */
12234
 
12235
      use_short_enum = flag_short_enums
12236
        || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
12237
 
12238
      for (itk = (use_short_enum ? itk_char : itk_int);
12239
           itk != itk_none;
12240
           itk++)
12241
        {
12242
          underlying_type = integer_types[itk];
12243
          if (underlying_type != NULL_TREE
12244
              && TYPE_PRECISION (underlying_type) >= precision
12245
              && TYPE_UNSIGNED (underlying_type) == unsignedp)
12246
            break;
12247
        }
12248
      if (itk == itk_none)
12249
        {
12250
          /* DR 377
12251
 
12252
             IF no integral type can represent all the enumerator values, the
12253
             enumeration is ill-formed.  */
12254
          error ("no integral type can represent all of the enumerator values "
12255
                 "for %qT", enumtype);
12256
          precision = TYPE_PRECISION (long_long_integer_type_node);
12257
          underlying_type = integer_types[itk_unsigned_long_long];
12258
        }
12259
 
12260
      /* [dcl.enum]
12261
 
12262
         The value of sizeof() applied to an enumeration type, an object
12263
         of an enumeration type, or an enumerator, is the value of sizeof()
12264
         applied to the underlying type.  */
12265
      copy_type_enum (enumtype, underlying_type);
12266
 
12267
      /* Compute the minimum and maximum values for the type.
12268
 
12269
         [dcl.enum]
12270
 
12271
         For an enumeration where emin is the smallest enumerator and emax
12272
         is the largest, the values of the enumeration are the values of the
12273
         underlying type in the range bmin to bmax, where bmin and bmax are,
12274
         respectively, the smallest and largest values of the smallest bit-
12275
         field that can store emin and emax.  */
12276
 
12277
      /* The middle-end currently assumes that types with TYPE_PRECISION
12278
         narrower than their underlying type are suitably zero or sign
12279
         extended to fill their mode.  Similarly, it assumes that the front
12280
         end assures that a value of a particular type must be within
12281
         TYPE_MIN_VALUE and TYPE_MAX_VALUE.
12282
 
12283
         We used to set these fields based on bmin and bmax, but that led
12284
         to invalid assumptions like optimizing away bounds checking.  So
12285
         now we just set the TYPE_PRECISION, TYPE_MIN_VALUE, and
12286
         TYPE_MAX_VALUE to the values for the mode above and only restrict
12287
         the ENUM_UNDERLYING_TYPE for the benefit of diagnostics.  */
12288
      ENUM_UNDERLYING_TYPE (enumtype)
12289
        = build_distinct_type_copy (underlying_type);
12290
      TYPE_PRECISION (ENUM_UNDERLYING_TYPE (enumtype)) = precision;
12291
      set_min_and_max_values_for_integral_type
12292
        (ENUM_UNDERLYING_TYPE (enumtype), precision, unsignedp);
12293
 
12294
      /* If -fstrict-enums, still constrain TYPE_MIN/MAX_VALUE.  */
12295
      if (flag_strict_enums)
12296
        set_min_and_max_values_for_integral_type (enumtype, precision,
12297
                                                  unsignedp);
12298
    }
12299
  else
12300
    underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
12301
 
12302
  /* Convert each of the enumerators to the type of the underlying
12303
     type of the enumeration.  */
12304
  for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
12305
    {
12306
      location_t saved_location;
12307
 
12308
      decl = TREE_VALUE (values);
12309
      saved_location = input_location;
12310
      input_location = DECL_SOURCE_LOCATION (decl);
12311
      if (fixed_underlying_type_p)
12312
        /* If the enumeration type has a fixed underlying type, we
12313
           already checked all of the enumerator values.  */
12314
        value = DECL_INITIAL (decl);
12315
      else
12316
        value = perform_implicit_conversion (underlying_type,
12317
                                             DECL_INITIAL (decl),
12318
                                             tf_warning_or_error);
12319
      input_location = saved_location;
12320
 
12321
      /* Do not clobber shared ints.  */
12322
      value = copy_node (value);
12323
 
12324
      TREE_TYPE (value) = enumtype;
12325
      DECL_INITIAL (decl) = value;
12326
    }
12327
 
12328
  /* Fix up all variant types of this enum type.  */
12329
  for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
12330
    TYPE_VALUES (t) = TYPE_VALUES (enumtype);
12331
 
12332
  /* Finish debugging output for this type.  */
12333
  rest_of_type_compilation (enumtype, namespace_bindings_p ());
12334
}
12335
 
12336
/* Finishes the enum type. This is called only the first time an
12337
   enumeration is seen, be it opaque or odinary.
12338
   ENUMTYPE is the type object.  */
12339
 
12340
void
12341
finish_enum (tree enumtype)
12342
{
12343
  if (processing_template_decl)
12344
    {
12345
      if (at_function_scope_p ())
12346
        add_stmt (build_min (TAG_DEFN, enumtype));
12347
      return;
12348
    }
12349
 
12350
  /* If this is a forward declaration, there should not be any variants,
12351
     though we can get a variant in the middle of an enum-specifier with
12352
     wacky code like 'enum E { e = sizeof(const E*) };'  */
12353
  gcc_assert (enumtype == TYPE_MAIN_VARIANT (enumtype)
12354
              && (TYPE_VALUES (enumtype)
12355
                  || !TYPE_NEXT_VARIANT (enumtype)));
12356
}
12357
 
12358
/* Build and install a CONST_DECL for an enumeration constant of the
12359
   enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
12360
   LOC is the location of NAME.
12361
   Assignment of sequential values by default is handled here.  */
12362
 
12363
void
12364
build_enumerator (tree name, tree value, tree enumtype, location_t loc)
12365
{
12366
  tree decl;
12367
  tree context;
12368
  tree type;
12369
 
12370
  /* If the VALUE was erroneous, pretend it wasn't there; that will
12371
     result in the enum being assigned the next value in sequence.  */
12372
  if (value == error_mark_node)
12373
    value = NULL_TREE;
12374
 
12375
  /* Remove no-op casts from the value.  */
12376
  if (value)
12377
    STRIP_TYPE_NOPS (value);
12378
 
12379
  if (! processing_template_decl)
12380
    {
12381
      /* Validate and default VALUE.  */
12382
      if (value != NULL_TREE)
12383
        {
12384
          value = cxx_constant_value (value);
12385
 
12386
          if (TREE_CODE (value) != INTEGER_CST
12387
              || ! INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (value)))
12388
            {
12389
              error ("enumerator value for %qD is not an integer constant",
12390
                     name);
12391
              value = NULL_TREE;
12392
            }
12393
        }
12394
 
12395
      /* Default based on previous value.  */
12396
      if (value == NULL_TREE)
12397
        {
12398
          if (TYPE_VALUES (enumtype))
12399
            {
12400
              HOST_WIDE_INT hi;
12401
              unsigned HOST_WIDE_INT lo;
12402
              tree prev_value;
12403
              bool overflowed;
12404
 
12405
              /* C++03 7.2/4: If no initializer is specified for the first
12406
                 enumerator, the type is an unspecified integral
12407
                 type. Otherwise the type is the same as the type of the
12408
                 initializing value of the preceding enumerator unless the
12409
                 incremented value is not representable in that type, in
12410
                 which case the type is an unspecified integral type
12411
                 sufficient to contain the incremented value.  */
12412
              prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
12413
              if (error_operand_p (prev_value))
12414
                value = error_mark_node;
12415
              else
12416
                {
12417
                  overflowed = add_double (TREE_INT_CST_LOW (prev_value),
12418
                                           TREE_INT_CST_HIGH (prev_value),
12419
                                           1, 0, &lo, &hi);
12420
                  if (!overflowed)
12421
                    {
12422
                      double_int di;
12423
                      tree type = TREE_TYPE (prev_value);
12424
                      bool pos = (TYPE_UNSIGNED (type) || hi >= 0);
12425
                      di.low = lo; di.high = hi;
12426
                      if (!double_int_fits_to_tree_p (type, di))
12427
                        {
12428
                          unsigned int itk;
12429
                          for (itk = itk_int; itk != itk_none; itk++)
12430
                            {
12431
                              type = integer_types[itk];
12432
                              if (type != NULL_TREE
12433
                                  && (pos || !TYPE_UNSIGNED (type))
12434
                                  && double_int_fits_to_tree_p (type, di))
12435
                                break;
12436
                            }
12437
                          if (type && cxx_dialect < cxx0x
12438
                              && itk > itk_unsigned_long)
12439
                            pedwarn (input_location, OPT_Wlong_long, pos ? "\
12440
incremented enumerator value is too large for %<unsigned long%>" :  "\
12441
incremented enumerator value is too large for %<long%>");
12442
                        }
12443
                      if (type == NULL_TREE)
12444
                        overflowed = true;
12445
                      else
12446
                        value = double_int_to_tree (type, di);
12447
                    }
12448
 
12449
                  if (overflowed)
12450
                    {
12451
                      error ("overflow in enumeration values at %qD", name);
12452
                      value = error_mark_node;
12453
                    }
12454
                }
12455
            }
12456
          else
12457
            value = integer_zero_node;
12458
        }
12459
 
12460
      /* Remove no-op casts from the value.  */
12461
      STRIP_TYPE_NOPS (value);
12462
 
12463
      /* If the underlying type of the enum is fixed, check whether
12464
         the enumerator values fits in the underlying type.  If it
12465
         does not fit, the program is ill-formed [C++0x dcl.enum].  */
12466
      if (ENUM_UNDERLYING_TYPE (enumtype)
12467
          && value
12468
          && TREE_CODE (value) == INTEGER_CST
12469
          && !int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
12470
        {
12471
          error ("enumerator value %E is too large for underlying type %<%T%>",
12472
                 value, ENUM_UNDERLYING_TYPE (enumtype));
12473
 
12474
          /* Silently convert the value so that we can continue.  */
12475
          value = perform_implicit_conversion (ENUM_UNDERLYING_TYPE (enumtype),
12476
                                               value, tf_none);
12477
        }
12478
    }
12479
 
12480
  /* C++ associates enums with global, function, or class declarations.  */
12481
  context = current_scope ();
12482
 
12483
  /* Build the actual enumeration constant.  Note that the enumeration
12484
     constants have the underlying type of the enum (if it is fixed)
12485
     or the type of their initializer (if the underlying type of the
12486
     enum is not fixed):
12487
 
12488
      [ C++0x dcl.enum ]
12489
 
12490
        If the underlying type is fixed, the type of each enumerator
12491
        prior to the closing brace is the underlying type; if the
12492
        initializing value of an enumerator cannot be represented by
12493
        the underlying type, the program is ill-formed. If the
12494
        underlying type is not fixed, the type of each enumerator is
12495
        the type of its initializing value.
12496
 
12497
    If the underlying type is not fixed, it will be computed by
12498
    finish_enum and we will reset the type of this enumerator.  Of
12499
    course, if we're processing a template, there may be no value.  */
12500
  type = value ? TREE_TYPE (value) : NULL_TREE;
12501
 
12502
  if (context && context == current_class_type)
12503
    /* This enum declaration is local to the class.  We need the full
12504
       lang_decl so that we can record DECL_CLASS_CONTEXT, for example.  */
12505
    decl = build_lang_decl_loc (loc, CONST_DECL, name, type);
12506
  else
12507
    /* It's a global enum, or it's local to a function.  (Note local to
12508
       a function could mean local to a class method.  */
12509
    decl = build_decl (loc, CONST_DECL, name, type);
12510
 
12511
  DECL_CONTEXT (decl) = FROB_CONTEXT (context);
12512
  TREE_CONSTANT (decl) = 1;
12513
  TREE_READONLY (decl) = 1;
12514
  DECL_INITIAL (decl) = value;
12515
 
12516
  if (context && context == current_class_type && !SCOPED_ENUM_P (enumtype))
12517
    /* In something like `struct S { enum E { i = 7 }; };' we put `i'
12518
       on the TYPE_FIELDS list for `S'.  (That's so that you can say
12519
       things like `S::i' later.)  */
12520
    finish_member_declaration (decl);
12521
  else
12522
    pushdecl (decl);
12523
 
12524
  /* Add this enumeration constant to the list for this type.  */
12525
  TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
12526
}
12527
 
12528
/* Look for an enumerator with the given NAME within the enumeration
12529
   type ENUMTYPE.  This routine is used primarily for qualified name
12530
   lookup into an enumerator in C++0x, e.g.,
12531
 
12532
     enum class Color { Red, Green, Blue };
12533
 
12534
     Color color = Color::Red;
12535
 
12536
   Returns the value corresponding to the enumerator, or
12537
   NULL_TREE if no such enumerator was found.  */
12538
tree
12539
lookup_enumerator (tree enumtype, tree name)
12540
{
12541
  tree e;
12542
  gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
12543
 
12544
  e = purpose_member (name, TYPE_VALUES (enumtype));
12545
  return e? TREE_VALUE (e) : NULL_TREE;
12546
}
12547
 
12548
 
12549
/* We're defining DECL.  Make sure that its type is OK.  */
12550
 
12551
static void
12552
check_function_type (tree decl, tree current_function_parms)
12553
{
12554
  tree fntype = TREE_TYPE (decl);
12555
  tree return_type = complete_type (TREE_TYPE (fntype));
12556
 
12557
  /* In a function definition, arg types must be complete.  */
12558
  require_complete_types_for_parms (current_function_parms);
12559
 
12560
  if (dependent_type_p (return_type))
12561
    return;
12562
  if (!COMPLETE_OR_VOID_TYPE_P (return_type)
12563
      || (TYPE_FOR_JAVA (return_type) && MAYBE_CLASS_TYPE_P (return_type)))
12564
    {
12565
      tree args = TYPE_ARG_TYPES (fntype);
12566
 
12567
      if (!COMPLETE_OR_VOID_TYPE_P (return_type))
12568
        error ("return type %q#T is incomplete", return_type);
12569
      else
12570
        error ("return type has Java class type %q#T", return_type);
12571
 
12572
      /* Make it return void instead.  */
12573
      if (TREE_CODE (fntype) == METHOD_TYPE)
12574
        fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
12575
                                             void_type_node,
12576
                                             TREE_CHAIN (args));
12577
      else
12578
        fntype = build_function_type (void_type_node, args);
12579
      fntype
12580
        = build_exception_variant (fntype,
12581
                                   TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
12582
      fntype = (cp_build_type_attribute_variant
12583
                (fntype, TYPE_ATTRIBUTES (TREE_TYPE (decl))));
12584
      TREE_TYPE (decl) = fntype;
12585
    }
12586
  else
12587
    abstract_virtuals_error (decl, TREE_TYPE (fntype));
12588
}
12589
 
12590
/* Create the FUNCTION_DECL for a function definition.
12591
   DECLSPECS and DECLARATOR are the parts of the declaration;
12592
   they describe the function's name and the type it returns,
12593
   but twisted together in a fashion that parallels the syntax of C.
12594
 
12595
   FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
12596
   DECLARATOR is really the DECL for the function we are about to
12597
   process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
12598
   indicating that the function is an inline defined in-class.
12599
 
12600
   This function creates a binding context for the function body
12601
   as well as setting up the FUNCTION_DECL in current_function_decl.
12602
 
12603
   For C++, we must first check whether that datum makes any sense.
12604
   For example, "class A local_a(1,2);" means that variable local_a
12605
   is an aggregate of type A, which should have a constructor
12606
   applied to it with the argument list [1, 2].
12607
 
12608
   On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
12609
   or may be a BLOCK if the function has been defined previously
12610
   in this translation unit.  On exit, DECL_INITIAL (decl1) will be
12611
   error_mark_node if the function has never been defined, or
12612
   a BLOCK if the function has been defined somewhere.  */
12613
 
12614
void
12615
start_preparsed_function (tree decl1, tree attrs, int flags)
12616
{
12617
  tree ctype = NULL_TREE;
12618
  tree fntype;
12619
  tree restype;
12620
  int doing_friend = 0;
12621
  cp_binding_level *bl;
12622
  tree current_function_parms;
12623
  struct c_fileinfo *finfo
12624
    = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
12625
  bool honor_interface;
12626
 
12627
  /* Sanity check.  */
12628
  gcc_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE);
12629
  gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
12630
 
12631
  fntype = TREE_TYPE (decl1);
12632
  if (TREE_CODE (fntype) == METHOD_TYPE)
12633
    ctype = TYPE_METHOD_BASETYPE (fntype);
12634
 
12635
  /* ISO C++ 11.4/5.  A friend function defined in a class is in
12636
     the (lexical) scope of the class in which it is defined.  */
12637
  if (!ctype && DECL_FRIEND_P (decl1))
12638
    {
12639
      ctype = DECL_FRIEND_CONTEXT (decl1);
12640
 
12641
      /* CTYPE could be null here if we're dealing with a template;
12642
         for example, `inline friend float foo()' inside a template
12643
         will have no CTYPE set.  */
12644
      if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
12645
        ctype = NULL_TREE;
12646
      else
12647
        doing_friend = 1;
12648
    }
12649
 
12650
  if (DECL_DECLARED_INLINE_P (decl1)
12651
      && lookup_attribute ("noinline", attrs))
12652
    warning (0, "inline function %q+D given attribute noinline", decl1);
12653
 
12654
  /* Handle gnu_inline attribute.  */
12655
  if (GNU_INLINE_P (decl1))
12656
    {
12657
      DECL_EXTERNAL (decl1) = 1;
12658
      DECL_NOT_REALLY_EXTERN (decl1) = 0;
12659
      DECL_INTERFACE_KNOWN (decl1) = 1;
12660
      DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
12661
    }
12662
 
12663
  if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
12664
    /* This is a constructor, we must ensure that any default args
12665
       introduced by this definition are propagated to the clones
12666
       now. The clones are used directly in overload resolution.  */
12667
    adjust_clone_args (decl1);
12668
 
12669
  /* Sometimes we don't notice that a function is a static member, and
12670
     build a METHOD_TYPE for it.  Fix that up now.  */
12671
  gcc_assert (!(ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
12672
                && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE));
12673
 
12674
  /* Set up current_class_type, and enter the scope of the class, if
12675
     appropriate.  */
12676
  if (ctype)
12677
    push_nested_class (ctype);
12678
  else if (DECL_STATIC_FUNCTION_P (decl1))
12679
    push_nested_class (DECL_CONTEXT (decl1));
12680
 
12681
  /* Now that we have entered the scope of the class, we must restore
12682
     the bindings for any template parameters surrounding DECL1, if it
12683
     is an inline member template.  (Order is important; consider the
12684
     case where a template parameter has the same name as a field of
12685
     the class.)  It is not until after this point that
12686
     PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly.  */
12687
  if (flags & SF_INCLASS_INLINE)
12688
    maybe_begin_member_template_processing (decl1);
12689
 
12690
  /* Effective C++ rule 15.  */
12691
  if (warn_ecpp
12692
      && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
12693
      && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
12694
    warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
12695
 
12696
  /* Make the init_value nonzero so pushdecl knows this is not tentative.
12697
     error_mark_node is replaced below (in poplevel) with the BLOCK.  */
12698
  if (!DECL_INITIAL (decl1))
12699
    DECL_INITIAL (decl1) = error_mark_node;
12700
 
12701
  /* This function exists in static storage.
12702
     (This does not mean `static' in the C sense!)  */
12703
  TREE_STATIC (decl1) = 1;
12704
 
12705
  /* We must call push_template_decl after current_class_type is set
12706
     up.  (If we are processing inline definitions after exiting a
12707
     class scope, current_class_type will be NULL_TREE until set above
12708
     by push_nested_class.)  */
12709
  if (processing_template_decl)
12710
    {
12711
      /* FIXME: Handle error_mark_node more gracefully.  */
12712
      tree newdecl1 = push_template_decl (decl1);
12713
      if (newdecl1 != error_mark_node)
12714
        decl1 = newdecl1;
12715
    }
12716
 
12717
  /* We are now in the scope of the function being defined.  */
12718
  current_function_decl = decl1;
12719
 
12720
  /* Save the parm names or decls from this function's declarator
12721
     where store_parm_decls will find them.  */
12722
  current_function_parms = DECL_ARGUMENTS (decl1);
12723
 
12724
  /* Make sure the parameter and return types are reasonable.  When
12725
     you declare a function, these types can be incomplete, but they
12726
     must be complete when you define the function.  */
12727
  check_function_type (decl1, current_function_parms);
12728
 
12729
  /* Build the return declaration for the function.  */
12730
  restype = TREE_TYPE (fntype);
12731
  if (DECL_RESULT (decl1) == NULL_TREE)
12732
    {
12733
      tree resdecl;
12734
 
12735
      resdecl = build_decl (input_location, RESULT_DECL, 0, restype);
12736
      DECL_ARTIFICIAL (resdecl) = 1;
12737
      DECL_IGNORED_P (resdecl) = 1;
12738
      DECL_RESULT (decl1) = resdecl;
12739
 
12740
      cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
12741
    }
12742
 
12743
  /* Let the user know we're compiling this function.  */
12744
  announce_function (decl1);
12745
 
12746
  /* Record the decl so that the function name is defined.
12747
     If we already have a decl for this name, and it is a FUNCTION_DECL,
12748
     use the old decl.  */
12749
  if (!processing_template_decl && !(flags & SF_PRE_PARSED))
12750
    {
12751
      /* A specialization is not used to guide overload resolution.  */
12752
      if (!DECL_FUNCTION_MEMBER_P (decl1)
12753
          && !(DECL_USE_TEMPLATE (decl1) &&
12754
               PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
12755
        {
12756
          tree olddecl = pushdecl (decl1);
12757
 
12758
          if (olddecl == error_mark_node)
12759
            /* If something went wrong when registering the declaration,
12760
               use DECL1; we have to have a FUNCTION_DECL to use when
12761
               parsing the body of the function.  */
12762
            ;
12763
          else
12764
            {
12765
              /* Otherwise, OLDDECL is either a previous declaration
12766
                 of the same function or DECL1 itself.  */
12767
 
12768
              if (warn_missing_declarations
12769
                  && olddecl == decl1
12770
                  && !DECL_MAIN_P (decl1)
12771
                  && TREE_PUBLIC (decl1)
12772
                  && !DECL_DECLARED_INLINE_P (decl1))
12773
                {
12774
                  tree context;
12775
 
12776
                  /* Check whether DECL1 is in an anonymous
12777
                     namespace.  */
12778
                  for (context = DECL_CONTEXT (decl1);
12779
                       context;
12780
                       context = DECL_CONTEXT (context))
12781
                    {
12782
                      if (TREE_CODE (context) == NAMESPACE_DECL
12783
                          && DECL_NAME (context) == NULL_TREE)
12784
                        break;
12785
                    }
12786
 
12787
                  if (context == NULL)
12788
                    warning (OPT_Wmissing_declarations,
12789
                             "no previous declaration for %q+D", decl1);
12790
                }
12791
 
12792
              decl1 = olddecl;
12793
            }
12794
        }
12795
      else
12796
        {
12797
          /* We need to set the DECL_CONTEXT.  */
12798
          if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
12799
            DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
12800
        }
12801
      fntype = TREE_TYPE (decl1);
12802
 
12803
      /* If #pragma weak applies, mark the decl appropriately now.
12804
         The pragma only applies to global functions.  Because
12805
         determining whether or not the #pragma applies involves
12806
         computing the mangled name for the declaration, we cannot
12807
         apply the pragma until after we have merged this declaration
12808
         with any previous declarations; if the original declaration
12809
         has a linkage specification, that specification applies to
12810
         the definition as well, and may affect the mangled name.  */
12811
      if (DECL_FILE_SCOPE_P (decl1))
12812
        maybe_apply_pragma_weak (decl1);
12813
    }
12814
 
12815
  /* Reset this in case the call to pushdecl changed it.  */
12816
  current_function_decl = decl1;
12817
 
12818
  gcc_assert (DECL_INITIAL (decl1));
12819
 
12820
  /* This function may already have been parsed, in which case just
12821
     return; our caller will skip over the body without parsing.  */
12822
  if (DECL_INITIAL (decl1) != error_mark_node)
12823
    return;
12824
 
12825
  /* Initialize RTL machinery.  We cannot do this until
12826
     CURRENT_FUNCTION_DECL and DECL_RESULT are set up.  We do this
12827
     even when processing a template; this is how we get
12828
     CFUN set up, and our per-function variables initialized.
12829
     FIXME factor out the non-RTL stuff.  */
12830
  bl = current_binding_level;
12831
  allocate_struct_function (decl1, processing_template_decl);
12832
 
12833
  /* Initialize the language data structures.  Whenever we start
12834
     a new function, we destroy temporaries in the usual way.  */
12835
  cfun->language = ggc_alloc_cleared_language_function ();
12836
  current_stmt_tree ()->stmts_are_full_exprs_p = 1;
12837
  current_binding_level = bl;
12838
 
12839
  /* Start the statement-tree, start the tree now.  */
12840
  DECL_SAVED_TREE (decl1) = push_stmt_list ();
12841
 
12842
  /* If we are (erroneously) defining a function that we have already
12843
     defined before, wipe out what we knew before.  */
12844
  if (!DECL_PENDING_INLINE_P (decl1))
12845
    DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
12846
 
12847
  if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
12848
    {
12849
      /* We know that this was set up by `grokclassfn'.  We do not
12850
         wait until `store_parm_decls', since evil parse errors may
12851
         never get us to that point.  Here we keep the consistency
12852
         between `current_class_type' and `current_class_ptr'.  */
12853
      tree t = DECL_ARGUMENTS (decl1);
12854
 
12855
      gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
12856
      gcc_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE);
12857
 
12858
      cp_function_chain->x_current_class_ref
12859
        = cp_build_indirect_ref (t, RO_NULL, tf_warning_or_error);
12860
      /* Set this second to avoid shortcut in cp_build_indirect_ref.  */
12861
      cp_function_chain->x_current_class_ptr = t;
12862
 
12863
      /* Constructors and destructors need to know whether they're "in
12864
         charge" of initializing virtual base classes.  */
12865
      t = DECL_CHAIN (t);
12866
      if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
12867
        {
12868
          current_in_charge_parm = t;
12869
          t = DECL_CHAIN (t);
12870
        }
12871
      if (DECL_HAS_VTT_PARM_P (decl1))
12872
        {
12873
          gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
12874
          current_vtt_parm = t;
12875
        }
12876
    }
12877
 
12878
  honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
12879
                     /* Implicitly-defined methods (like the
12880
                        destructor for a class in which no destructor
12881
                        is explicitly declared) must not be defined
12882
                        until their definition is needed.  So, we
12883
                        ignore interface specifications for
12884
                        compiler-generated functions.  */
12885
                     && !DECL_ARTIFICIAL (decl1));
12886
 
12887
  if (processing_template_decl)
12888
    /* Don't mess with interface flags.  */;
12889
  else if (DECL_INTERFACE_KNOWN (decl1))
12890
    {
12891
      tree ctx = decl_function_context (decl1);
12892
 
12893
      if (DECL_NOT_REALLY_EXTERN (decl1))
12894
        DECL_EXTERNAL (decl1) = 0;
12895
 
12896
      if (ctx != NULL_TREE && DECL_DECLARED_INLINE_P (ctx)
12897
          && TREE_PUBLIC (ctx))
12898
        /* This is a function in a local class in an extern inline
12899
           function.  */
12900
        comdat_linkage (decl1);
12901
    }
12902
  /* If this function belongs to an interface, it is public.
12903
     If it belongs to someone else's interface, it is also external.
12904
     This only affects inlines and template instantiations.  */
12905
  else if (!finfo->interface_unknown && honor_interface)
12906
    {
12907
      if (DECL_DECLARED_INLINE_P (decl1)
12908
          || DECL_TEMPLATE_INSTANTIATION (decl1))
12909
        {
12910
          DECL_EXTERNAL (decl1)
12911
            = (finfo->interface_only
12912
               || (DECL_DECLARED_INLINE_P (decl1)
12913
                   && ! flag_implement_inlines
12914
                   && !DECL_VINDEX (decl1)));
12915
 
12916
          /* For WIN32 we also want to put these in linkonce sections.  */
12917
          maybe_make_one_only (decl1);
12918
        }
12919
      else
12920
        DECL_EXTERNAL (decl1) = 0;
12921
      DECL_INTERFACE_KNOWN (decl1) = 1;
12922
      /* If this function is in an interface implemented in this file,
12923
         make sure that the back end knows to emit this function
12924
         here.  */
12925
      if (!DECL_EXTERNAL (decl1))
12926
        mark_needed (decl1);
12927
    }
12928
  else if (finfo->interface_unknown && finfo->interface_only
12929
           && honor_interface)
12930
    {
12931
      /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
12932
         interface, we will have both finfo->interface_unknown and
12933
         finfo->interface_only set.  In that case, we don't want to
12934
         use the normal heuristics because someone will supply a
12935
         #pragma implementation elsewhere, and deducing it here would
12936
         produce a conflict.  */
12937
      comdat_linkage (decl1);
12938
      DECL_EXTERNAL (decl1) = 0;
12939
      DECL_INTERFACE_KNOWN (decl1) = 1;
12940
      DECL_DEFER_OUTPUT (decl1) = 1;
12941
    }
12942
  else
12943
    {
12944
      /* This is a definition, not a reference.
12945
         So clear DECL_EXTERNAL, unless this is a GNU extern inline.  */
12946
      if (!GNU_INLINE_P (decl1))
12947
        DECL_EXTERNAL (decl1) = 0;
12948
 
12949
      if ((DECL_DECLARED_INLINE_P (decl1)
12950
           || DECL_TEMPLATE_INSTANTIATION (decl1))
12951
          && ! DECL_INTERFACE_KNOWN (decl1))
12952
        DECL_DEFER_OUTPUT (decl1) = 1;
12953
      else
12954
        DECL_INTERFACE_KNOWN (decl1) = 1;
12955
    }
12956
 
12957
  /* Determine the ELF visibility attribute for the function.  We must not
12958
     do this before calling "pushdecl", as we must allow "duplicate_decls"
12959
     to merge any attributes appropriately.  We also need to wait until
12960
     linkage is set.  */
12961
  if (!DECL_CLONED_FUNCTION_P (decl1))
12962
    determine_visibility (decl1);
12963
 
12964
  begin_scope (sk_function_parms, decl1);
12965
 
12966
  ++function_depth;
12967
 
12968
  if (DECL_DESTRUCTOR_P (decl1)
12969
      || (DECL_CONSTRUCTOR_P (decl1)
12970
          && targetm.cxx.cdtor_returns_this ()))
12971
    {
12972
      cdtor_label = build_decl (input_location,
12973
                                LABEL_DECL, NULL_TREE, NULL_TREE);
12974
      DECL_CONTEXT (cdtor_label) = current_function_decl;
12975
    }
12976
 
12977
  start_fname_decls ();
12978
 
12979
  store_parm_decls (current_function_parms);
12980
}
12981
 
12982
 
12983
/* Like start_preparsed_function, except that instead of a
12984
   FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
12985
 
12986
   Returns 1 on success.  If the DECLARATOR is not suitable for a function
12987
   (it defines a datum instead), we return 0, which tells
12988
   yyparse to report a parse error.  */
12989
 
12990
int
12991
start_function (cp_decl_specifier_seq *declspecs,
12992
                const cp_declarator *declarator,
12993
                tree attrs)
12994
{
12995
  tree decl1;
12996
 
12997
  decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
12998
  if (decl1 == error_mark_node)
12999
    return 0;
13000
  /* If the declarator is not suitable for a function definition,
13001
     cause a syntax error.  */
13002
  if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
13003
    {
13004
      error ("invalid function declaration");
13005
      return 0;
13006
    }
13007
 
13008
  if (DECL_MAIN_P (decl1))
13009
    /* main must return int.  grokfndecl should have corrected it
13010
       (and issued a diagnostic) if the user got it wrong.  */
13011
    gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
13012
                             integer_type_node));
13013
 
13014
  start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
13015
 
13016
  return 1;
13017
}
13018
 
13019
/* Returns true iff an EH_SPEC_BLOCK should be created in the body of
13020
   FN.  */
13021
 
13022
static bool
13023
use_eh_spec_block (tree fn)
13024
{
13025
  return (flag_exceptions && flag_enforce_eh_specs
13026
          && !processing_template_decl
13027
          && !type_throw_all_p (TREE_TYPE (fn))
13028
          /* We insert the EH_SPEC_BLOCK only in the original
13029
             function; then, it is copied automatically to the
13030
             clones.  */
13031
          && !DECL_CLONED_FUNCTION_P (fn)
13032
          /* Implicitly-generated constructors and destructors have
13033
             exception specifications.  However, those specifications
13034
             are the union of the possible exceptions specified by the
13035
             constructors/destructors for bases and members, so no
13036
             unallowed exception will ever reach this function.  By
13037
             not creating the EH_SPEC_BLOCK we save a little memory,
13038
             and we avoid spurious warnings about unreachable
13039
             code.  */
13040
          && !DECL_DEFAULTED_FN (fn));
13041
}
13042
 
13043
/* Store the parameter declarations into the current function declaration.
13044
   This is called after parsing the parameter declarations, before
13045
   digesting the body of the function.
13046
 
13047
   Also install to binding contour return value identifier, if any.  */
13048
 
13049
static void
13050
store_parm_decls (tree current_function_parms)
13051
{
13052
  tree fndecl = current_function_decl;
13053
  tree parm;
13054
 
13055
  /* This is a chain of any other decls that came in among the parm
13056
     declarations.  If a parm is declared with  enum {foo, bar} x;
13057
     then CONST_DECLs for foo and bar are put here.  */
13058
  tree nonparms = NULL_TREE;
13059
 
13060
  if (current_function_parms)
13061
    {
13062
      /* This case is when the function was defined with an ANSI prototype.
13063
         The parms already have decls, so we need not do anything here
13064
         except record them as in effect
13065
         and complain if any redundant old-style parm decls were written.  */
13066
 
13067
      tree specparms = current_function_parms;
13068
      tree next;
13069
 
13070
      /* Must clear this because it might contain TYPE_DECLs declared
13071
             at class level.  */
13072
      current_binding_level->names = NULL;
13073
 
13074
      /* If we're doing semantic analysis, then we'll call pushdecl
13075
             for each of these.  We must do them in reverse order so that
13076
             they end in the correct forward order.  */
13077
      specparms = nreverse (specparms);
13078
 
13079
      for (parm = specparms; parm; parm = next)
13080
        {
13081
          next = DECL_CHAIN (parm);
13082
          if (TREE_CODE (parm) == PARM_DECL)
13083
            {
13084
              if (DECL_NAME (parm) == NULL_TREE
13085
                  || TREE_CODE (parm) != VOID_TYPE)
13086
                pushdecl (parm);
13087
              else
13088
                error ("parameter %qD declared void", parm);
13089
            }
13090
          else
13091
            {
13092
              /* If we find an enum constant or a type tag,
13093
                 put it aside for the moment.  */
13094
              TREE_CHAIN (parm) = NULL_TREE;
13095
              nonparms = chainon (nonparms, parm);
13096
            }
13097
        }
13098
 
13099
      /* Get the decls in their original chain order and record in the
13100
         function.  This is all and only the PARM_DECLs that were
13101
         pushed into scope by the loop above.  */
13102
      DECL_ARGUMENTS (fndecl) = getdecls ();
13103
    }
13104
  else
13105
    DECL_ARGUMENTS (fndecl) = NULL_TREE;
13106
 
13107
  /* Now store the final chain of decls for the arguments
13108
     as the decl-chain of the current lexical scope.
13109
     Put the enumerators in as well, at the front so that
13110
     DECL_ARGUMENTS is not modified.  */
13111
  current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
13112
 
13113
  if (use_eh_spec_block (current_function_decl))
13114
    current_eh_spec_block = begin_eh_spec_block ();
13115
}
13116
 
13117
 
13118
/* We have finished doing semantic analysis on DECL, but have not yet
13119
   generated RTL for its body.  Save away our current state, so that
13120
   when we want to generate RTL later we know what to do.  */
13121
 
13122
static void
13123
save_function_data (tree decl)
13124
{
13125
  struct language_function *f;
13126
 
13127
  /* Save the language-specific per-function data so that we can
13128
     get it back when we really expand this function.  */
13129
  gcc_assert (!DECL_PENDING_INLINE_P (decl));
13130
 
13131
  /* Make a copy.  */
13132
  f = ggc_alloc_language_function ();
13133
  memcpy (f, cp_function_chain, sizeof (struct language_function));
13134
  DECL_SAVED_FUNCTION_DATA (decl) = f;
13135
 
13136
  /* Clear out the bits we don't need.  */
13137
  f->base.x_stmt_tree.x_cur_stmt_list = NULL;
13138
  f->bindings = NULL;
13139
  f->x_local_names = NULL;
13140
  f->base.local_typedefs = NULL;
13141
}
13142
 
13143
 
13144
/* Set the return value of the constructor (if present).  */
13145
 
13146
static void
13147
finish_constructor_body (void)
13148
{
13149
  tree val;
13150
  tree exprstmt;
13151
 
13152
  if (targetm.cxx.cdtor_returns_this ()
13153
      && (! TYPE_FOR_JAVA (current_class_type)))
13154
    {
13155
      /* Any return from a constructor will end up here.  */
13156
      add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
13157
 
13158
      val = DECL_ARGUMENTS (current_function_decl);
13159
      val = build2 (MODIFY_EXPR, TREE_TYPE (val),
13160
                    DECL_RESULT (current_function_decl), val);
13161
      /* Return the address of the object.  */
13162
      exprstmt = build_stmt (input_location, RETURN_EXPR, val);
13163
      add_stmt (exprstmt);
13164
    }
13165
}
13166
 
13167
/* Do all the processing for the beginning of a destructor; set up the
13168
   vtable pointers and cleanups for bases and members.  */
13169
 
13170
static void
13171
begin_destructor_body (void)
13172
{
13173
  tree compound_stmt;
13174
 
13175
  /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
13176
     issued an error message.  We still want to try to process the
13177
     body of the function, but initialize_vtbl_ptrs will crash if
13178
     TYPE_BINFO is NULL.  */
13179
  if (COMPLETE_TYPE_P (current_class_type))
13180
    {
13181
      compound_stmt = begin_compound_stmt (0);
13182
      /* Make all virtual function table pointers in non-virtual base
13183
         classes point to CURRENT_CLASS_TYPE's virtual function
13184
         tables.  */
13185
      initialize_vtbl_ptrs (current_class_ptr);
13186
      finish_compound_stmt (compound_stmt);
13187
 
13188
      /* And insert cleanups for our bases and members so that they
13189
         will be properly destroyed if we throw.  */
13190
      push_base_cleanups ();
13191
    }
13192
}
13193
 
13194
/* At the end of every destructor we generate code to delete the object if
13195
   necessary.  Do that now.  */
13196
 
13197
static void
13198
finish_destructor_body (void)
13199
{
13200
  tree exprstmt;
13201
 
13202
  /* Any return from a destructor will end up here; that way all base
13203
     and member cleanups will be run when the function returns.  */
13204
  add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
13205
 
13206
  /* In a virtual destructor, we must call delete.  */
13207
  if (DECL_VIRTUAL_P (current_function_decl))
13208
    {
13209
      tree if_stmt;
13210
      tree virtual_size = cxx_sizeof (current_class_type);
13211
 
13212
      /* [class.dtor]
13213
 
13214
      At the point of definition of a virtual destructor (including
13215
      an implicit definition), non-placement operator delete shall
13216
      be looked up in the scope of the destructor's class and if
13217
      found shall be accessible and unambiguous.  */
13218
      exprstmt = build_op_delete_call(DELETE_EXPR, current_class_ptr,
13219
                                      virtual_size,
13220
                                      /*global_p=*/false,
13221
                                      /*placement=*/NULL_TREE,
13222
                                      /*alloc_fn=*/NULL_TREE);
13223
 
13224
      if_stmt = begin_if_stmt ();
13225
      finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
13226
                                   current_in_charge_parm,
13227
                                   integer_one_node),
13228
                           if_stmt);
13229
      finish_expr_stmt (exprstmt);
13230
      finish_then_clause (if_stmt);
13231
      finish_if_stmt (if_stmt);
13232
    }
13233
 
13234
  if (targetm.cxx.cdtor_returns_this ())
13235
    {
13236
      tree val;
13237
 
13238
      val = DECL_ARGUMENTS (current_function_decl);
13239
      val = build2 (MODIFY_EXPR, TREE_TYPE (val),
13240
                    DECL_RESULT (current_function_decl), val);
13241
      /* Return the address of the object.  */
13242
      exprstmt = build_stmt (input_location, RETURN_EXPR, val);
13243
      add_stmt (exprstmt);
13244
    }
13245
}
13246
 
13247
/* Do the necessary processing for the beginning of a function body, which
13248
   in this case includes member-initializers, but not the catch clauses of
13249
   a function-try-block.  Currently, this means opening a binding level
13250
   for the member-initializers (in a ctor), member cleanups (in a dtor),
13251
   and capture proxies (in a lambda operator()).  */
13252
 
13253
tree
13254
begin_function_body (void)
13255
{
13256
  tree stmt;
13257
 
13258
  if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
13259
    return NULL_TREE;
13260
 
13261
  if (processing_template_decl)
13262
    /* Do nothing now.  */;
13263
  else
13264
    /* Always keep the BLOCK node associated with the outermost pair of
13265
       curly braces of a function.  These are needed for correct
13266
       operation of dwarfout.c.  */
13267
    keep_next_level (true);
13268
 
13269
  stmt = begin_compound_stmt (BCS_FN_BODY);
13270
 
13271
  if (processing_template_decl)
13272
    /* Do nothing now.  */;
13273
  else if (DECL_DESTRUCTOR_P (current_function_decl))
13274
    begin_destructor_body ();
13275
 
13276
  return stmt;
13277
}
13278
 
13279
/* Do the processing for the end of a function body.  Currently, this means
13280
   closing out the cleanups for fully-constructed bases and members, and in
13281
   the case of the destructor, deleting the object if desired.  Again, this
13282
   is only meaningful for [cd]tors, since they are the only functions where
13283
   there is a significant distinction between the main body and any
13284
   function catch clauses.  Handling, say, main() return semantics here
13285
   would be wrong, as flowing off the end of a function catch clause for
13286
   main() would also need to return 0.  */
13287
 
13288
void
13289
finish_function_body (tree compstmt)
13290
{
13291
  if (compstmt == NULL_TREE)
13292
    return;
13293
 
13294
  /* Close the block.  */
13295
  finish_compound_stmt (compstmt);
13296
 
13297
  if (processing_template_decl)
13298
    /* Do nothing now.  */;
13299
  else if (DECL_CONSTRUCTOR_P (current_function_decl))
13300
    finish_constructor_body ();
13301
  else if (DECL_DESTRUCTOR_P (current_function_decl))
13302
    finish_destructor_body ();
13303
}
13304
 
13305
/* Given a function, returns the BLOCK corresponding to the outermost level
13306
   of curly braces, skipping the artificial block created for constructor
13307
   initializers.  */
13308
 
13309
tree
13310
outer_curly_brace_block (tree fndecl)
13311
{
13312
  tree block = BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl));
13313
  if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
13314
    /* Skip the artificial function body block.  */
13315
    block = BLOCK_SUBBLOCKS (block);
13316
  return block;
13317
}
13318
 
13319
/* If FNDECL is a class's key method, add the class to the list of
13320
   keyed classes that should be emitted.  */
13321
 
13322
static void
13323
record_key_method_defined (tree fndecl)
13324
{
13325
  if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
13326
      && DECL_VIRTUAL_P (fndecl)
13327
      && !processing_template_decl)
13328
    {
13329
      tree fnclass = DECL_CONTEXT (fndecl);
13330
      if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
13331
        keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
13332
    }
13333
}
13334
 
13335
/* Subroutine of finish_function.
13336
   Save the body of constexpr functions for possible
13337
   future compile time evaluation.  */
13338
 
13339
static void
13340
maybe_save_function_definition (tree fun)
13341
{
13342
  if (!processing_template_decl
13343
      && DECL_DECLARED_CONSTEXPR_P (fun)
13344
      && !DECL_CLONED_FUNCTION_P (fun))
13345
    register_constexpr_fundef (fun, DECL_SAVED_TREE (fun));
13346
}
13347
 
13348
/* Finish up a function declaration and compile that function
13349
   all the way to assembler language output.  The free the storage
13350
   for the function definition.
13351
 
13352
   FLAGS is a bitwise or of the following values:
13353
     2 - INCLASS_INLINE
13354
       We just finished processing the body of an in-class inline
13355
       function definition.  (This processing will have taken place
13356
       after the class definition is complete.)  */
13357
 
13358
tree
13359
finish_function (int flags)
13360
{
13361
  tree fndecl = current_function_decl;
13362
  tree fntype, ctype = NULL_TREE;
13363
  int inclass_inline = (flags & 2) != 0;
13364
 
13365
  /* When we get some parse errors, we can end up without a
13366
     current_function_decl, so cope.  */
13367
  if (fndecl == NULL_TREE)
13368
    return error_mark_node;
13369
 
13370
  if (c_dialect_objc ())
13371
    objc_finish_function ();
13372
 
13373
  gcc_assert (!defer_mark_used_calls);
13374
  defer_mark_used_calls = true;
13375
 
13376
  record_key_method_defined (fndecl);
13377
 
13378
  fntype = TREE_TYPE (fndecl);
13379
 
13380
  /*  TREE_READONLY (fndecl) = 1;
13381
      This caused &foo to be of type ptr-to-const-function
13382
      which then got a warning when stored in a ptr-to-function variable.  */
13383
 
13384
  gcc_assert (building_stmt_list_p ());
13385
  /* The current function is being defined, so its DECL_INITIAL should
13386
     be set, and unless there's a multiple definition, it should be
13387
     error_mark_node.  */
13388
  gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
13389
 
13390
  /* For a cloned function, we've already got all the code we need;
13391
     there's no need to add any extra bits.  */
13392
  if (!DECL_CLONED_FUNCTION_P (fndecl))
13393
    {
13394
      if (DECL_MAIN_P (current_function_decl))
13395
        {
13396
          /* Make it so that `main' always returns 0 by default (or
13397
             1 for VMS).  */
13398
#if VMS_TARGET
13399
          finish_return_stmt (integer_one_node);
13400
#else
13401
          finish_return_stmt (integer_zero_node);
13402
#endif
13403
        }
13404
 
13405
      if (use_eh_spec_block (current_function_decl))
13406
        finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
13407
                              (TREE_TYPE (current_function_decl)),
13408
                              current_eh_spec_block);
13409
    }
13410
 
13411
  /* If we're saving up tree structure, tie off the function now.  */
13412
  DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
13413
 
13414
  finish_fname_decls ();
13415
 
13416
  /* If this function can't throw any exceptions, remember that.  */
13417
  if (!processing_template_decl
13418
      && !cp_function_chain->can_throw
13419
      && !flag_non_call_exceptions
13420
      && !decl_replaceable_p (fndecl))
13421
    TREE_NOTHROW (fndecl) = 1;
13422
 
13423
  /* This must come after expand_function_end because cleanups might
13424
     have declarations (from inline functions) that need to go into
13425
     this function's blocks.  */
13426
 
13427
  /* If the current binding level isn't the outermost binding level
13428
     for this function, either there is a bug, or we have experienced
13429
     syntax errors and the statement tree is malformed.  */
13430
  if (current_binding_level->kind != sk_function_parms)
13431
    {
13432
      /* Make sure we have already experienced errors.  */
13433
      gcc_assert (errorcount);
13434
 
13435
      /* Throw away the broken statement tree and extra binding
13436
         levels.  */
13437
      DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
13438
 
13439
      while (current_binding_level->kind != sk_function_parms)
13440
        {
13441
          if (current_binding_level->kind == sk_class)
13442
            pop_nested_class ();
13443
          else
13444
            poplevel (0, 0, 0);
13445
        }
13446
    }
13447
  poplevel (1, 0, 1);
13448
 
13449
  /* Statements should always be full-expressions at the outermost set
13450
     of curly braces for a function.  */
13451
  gcc_assert (stmts_are_full_exprs_p ());
13452
 
13453
  /* Save constexpr function body before it gets munged by
13454
     the NRV transformation.   */
13455
  maybe_save_function_definition (fndecl);
13456
 
13457
  /* Set up the named return value optimization, if we can.  Candidate
13458
     variables are selected in check_return_expr.  */
13459
  if (current_function_return_value)
13460
    {
13461
      tree r = current_function_return_value;
13462
      tree outer;
13463
 
13464
      if (r != error_mark_node
13465
          /* This is only worth doing for fns that return in memory--and
13466
             simpler, since we don't have to worry about promoted modes.  */
13467
          && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
13468
          /* Only allow this for variables declared in the outer scope of
13469
             the function so we know that their lifetime always ends with a
13470
             return; see g++.dg/opt/nrv6.C.  We could be more flexible if
13471
             we were to do this optimization in tree-ssa.  */
13472
          && (outer = outer_curly_brace_block (fndecl))
13473
          && chain_member (r, BLOCK_VARS (outer)))
13474
        finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
13475
 
13476
      current_function_return_value = NULL_TREE;
13477
    }
13478
 
13479
  /* Remember that we were in class scope.  */
13480
  if (current_class_name)
13481
    ctype = current_class_type;
13482
 
13483
  /* Must mark the RESULT_DECL as being in this function.  */
13484
  DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
13485
 
13486
  /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
13487
     to the FUNCTION_DECL node itself.  */
13488
  BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
13489
 
13490
  /* Save away current state, if appropriate.  */
13491
  if (!processing_template_decl)
13492
    save_function_data (fndecl);
13493
 
13494
  /* Complain if there's just no return statement.  */
13495
  if (warn_return_type
13496
      && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE
13497
      && !dependent_type_p (TREE_TYPE (fntype))
13498
      && !current_function_returns_value && !current_function_returns_null
13499
      /* Don't complain if we abort or throw.  */
13500
      && !current_function_returns_abnormally
13501
      /* Don't complain if we are declared noreturn.  */
13502
      && !TREE_THIS_VOLATILE (fndecl)
13503
      && !DECL_NAME (DECL_RESULT (fndecl))
13504
      && !TREE_NO_WARNING (fndecl)
13505
      /* Structor return values (if any) are set by the compiler.  */
13506
      && !DECL_CONSTRUCTOR_P (fndecl)
13507
      && !DECL_DESTRUCTOR_P (fndecl))
13508
    {
13509
      warning (OPT_Wreturn_type,
13510
               "no return statement in function returning non-void");
13511
      TREE_NO_WARNING (fndecl) = 1;
13512
    }
13513
 
13514
  /* Store the end of the function, so that we get good line number
13515
     info for the epilogue.  */
13516
  cfun->function_end_locus = input_location;
13517
 
13518
  /* Complain about parameters that are only set, but never otherwise used.  */
13519
  if (warn_unused_but_set_parameter
13520
      && !processing_template_decl
13521
      && errorcount == unused_but_set_errorcount
13522
      && !DECL_CLONED_FUNCTION_P (fndecl))
13523
    {
13524
      tree decl;
13525
 
13526
      for (decl = DECL_ARGUMENTS (fndecl);
13527
           decl;
13528
           decl = DECL_CHAIN (decl))
13529
        if (TREE_USED (decl)
13530
            && TREE_CODE (decl) == PARM_DECL
13531
            && !DECL_READ_P (decl)
13532
            && DECL_NAME (decl)
13533
            && !DECL_ARTIFICIAL (decl)
13534
            && !TREE_NO_WARNING (decl)
13535
            && !DECL_IN_SYSTEM_HEADER (decl)
13536
            && TREE_TYPE (decl) != error_mark_node
13537
            && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
13538
            && (!CLASS_TYPE_P (TREE_TYPE (decl))
13539
                || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
13540
          warning (OPT_Wunused_but_set_parameter,
13541
                   "parameter %q+D set but not used", decl);
13542
      unused_but_set_errorcount = errorcount;
13543
    }
13544
 
13545
  /* Complain about locally defined typedefs that are not used in this
13546
     function.  */
13547
  maybe_warn_unused_local_typedefs ();
13548
 
13549
  /* Genericize before inlining.  */
13550
  if (!processing_template_decl)
13551
    {
13552
      struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
13553
      invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
13554
      cp_genericize (fndecl);
13555
      /* Clear out the bits we don't need.  */
13556
      f->x_current_class_ptr = NULL;
13557
      f->x_current_class_ref = NULL;
13558
      f->x_eh_spec_block = NULL;
13559
      f->x_in_charge_parm = NULL;
13560
      f->x_vtt_parm = NULL;
13561
      f->x_return_value = NULL;
13562
      f->bindings = NULL;
13563
      f->extern_decl_map = NULL;
13564
    }
13565
  /* Clear out the bits we don't need.  */
13566
  local_names = NULL;
13567
 
13568
  /* We're leaving the context of this function, so zap cfun.  It's still in
13569
     DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation.  */
13570
  set_cfun (NULL);
13571
  current_function_decl = NULL;
13572
 
13573
  /* If this is an in-class inline definition, we may have to pop the
13574
     bindings for the template parameters that we added in
13575
     maybe_begin_member_template_processing when start_function was
13576
     called.  */
13577
  if (inclass_inline)
13578
    maybe_end_member_template_processing ();
13579
 
13580
  /* Leave the scope of the class.  */
13581
  if (ctype)
13582
    pop_nested_class ();
13583
 
13584
  --function_depth;
13585
 
13586
  /* Clean up.  */
13587
  current_function_decl = NULL_TREE;
13588
 
13589
  defer_mark_used_calls = false;
13590
  if (deferred_mark_used_calls)
13591
    {
13592
      unsigned int i;
13593
      tree decl;
13594
 
13595
      FOR_EACH_VEC_ELT (tree, deferred_mark_used_calls, i, decl)
13596
        mark_used (decl);
13597
      VEC_free (tree, gc, deferred_mark_used_calls);
13598
    }
13599
 
13600
  return fndecl;
13601
}
13602
 
13603
/* Create the FUNCTION_DECL for a function definition.
13604
   DECLSPECS and DECLARATOR are the parts of the declaration;
13605
   they describe the return type and the name of the function,
13606
   but twisted together in a fashion that parallels the syntax of C.
13607
 
13608
   This function creates a binding context for the function body
13609
   as well as setting up the FUNCTION_DECL in current_function_decl.
13610
 
13611
   Returns a FUNCTION_DECL on success.
13612
 
13613
   If the DECLARATOR is not suitable for a function (it defines a datum
13614
   instead), we return 0, which tells yyparse to report a parse error.
13615
 
13616
   May return void_type_node indicating that this method is actually
13617
   a friend.  See grokfield for more details.
13618
 
13619
   Came here with a `.pushlevel' .
13620
 
13621
   DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
13622
   CHANGES TO CODE IN `grokfield'.  */
13623
 
13624
tree
13625
grokmethod (cp_decl_specifier_seq *declspecs,
13626
            const cp_declarator *declarator, tree attrlist)
13627
{
13628
  tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
13629
                                &attrlist);
13630
 
13631
  if (fndecl == error_mark_node)
13632
    return error_mark_node;
13633
 
13634
  if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
13635
    {
13636
      error ("invalid member function declaration");
13637
      return error_mark_node;
13638
    }
13639
 
13640
  if (attrlist)
13641
    cplus_decl_attributes (&fndecl, attrlist, 0);
13642
 
13643
  /* Pass friends other than inline friend functions back.  */
13644
  if (fndecl == void_type_node)
13645
    return fndecl;
13646
 
13647
  if (DECL_IN_AGGR_P (fndecl))
13648
    {
13649
      if (DECL_CLASS_SCOPE_P (fndecl))
13650
        error ("%qD is already defined in class %qT", fndecl,
13651
               DECL_CONTEXT (fndecl));
13652
      return error_mark_node;
13653
    }
13654
 
13655
  check_template_shadow (fndecl);
13656
 
13657
  DECL_DECLARED_INLINE_P (fndecl) = 1;
13658
  DECL_NO_INLINE_WARNING_P (fndecl) = 1;
13659
 
13660
  /* We process method specializations in finish_struct_1.  */
13661
  if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
13662
    {
13663
      fndecl = push_template_decl (fndecl);
13664
      if (fndecl == error_mark_node)
13665
        return fndecl;
13666
    }
13667
 
13668
  if (! DECL_FRIEND_P (fndecl))
13669
    {
13670
      if (DECL_CHAIN (fndecl))
13671
        {
13672
          fndecl = copy_node (fndecl);
13673
          TREE_CHAIN (fndecl) = NULL_TREE;
13674
        }
13675
    }
13676
 
13677
  cp_finish_decl (fndecl, NULL_TREE, false, NULL_TREE, 0);
13678
 
13679
  DECL_IN_AGGR_P (fndecl) = 1;
13680
  return fndecl;
13681
}
13682
 
13683
 
13684
/* VAR is a VAR_DECL.  If its type is incomplete, remember VAR so that
13685
   we can lay it out later, when and if its type becomes complete.  */
13686
 
13687
void
13688
maybe_register_incomplete_var (tree var)
13689
{
13690
  gcc_assert (TREE_CODE (var) == VAR_DECL);
13691
 
13692
  /* Keep track of variables with incomplete types.  */
13693
  if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
13694
      && DECL_EXTERNAL (var))
13695
    {
13696
      tree inner_type = TREE_TYPE (var);
13697
 
13698
      while (TREE_CODE (inner_type) == ARRAY_TYPE)
13699
        inner_type = TREE_TYPE (inner_type);
13700
      inner_type = TYPE_MAIN_VARIANT (inner_type);
13701
 
13702
      if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
13703
          /* RTTI TD entries are created while defining the type_info.  */
13704
          || (TYPE_LANG_SPECIFIC (inner_type)
13705
              && TYPE_BEING_DEFINED (inner_type)))
13706
        {
13707
          incomplete_var *iv
13708
            = VEC_safe_push (incomplete_var, gc, incomplete_vars, NULL);
13709
          iv->decl = var;
13710
          iv->incomplete_type = inner_type;
13711
        }
13712
    }
13713
}
13714
 
13715
/* Called when a class type (given by TYPE) is defined.  If there are
13716
   any existing VAR_DECLs whose type has been completed by this
13717
   declaration, update them now.  */
13718
 
13719
void
13720
complete_vars (tree type)
13721
{
13722
  unsigned ix;
13723
  incomplete_var *iv;
13724
 
13725
  for (ix = 0; VEC_iterate (incomplete_var, incomplete_vars, ix, iv); )
13726
    {
13727
      if (same_type_p (type, iv->incomplete_type))
13728
        {
13729
          tree var = iv->decl;
13730
          tree type = TREE_TYPE (var);
13731
          /* Complete the type of the variable.  The VAR_DECL itself
13732
             will be laid out in expand_expr.  */
13733
          complete_type (type);
13734
          cp_apply_type_quals_to_decl (cp_type_quals (type), var);
13735
          /* Remove this entry from the list.  */
13736
          VEC_unordered_remove (incomplete_var, incomplete_vars, ix);
13737
        }
13738
      else
13739
        ix++;
13740
    }
13741
 
13742
  /* Check for pending declarations which may have abstract type.  */
13743
  complete_type_check_abstract (type);
13744
}
13745
 
13746
/* If DECL is of a type which needs a cleanup, build and return an
13747
   expression to perform that cleanup here.  Return NULL_TREE if no
13748
   cleanup need be done.  */
13749
 
13750
tree
13751
cxx_maybe_build_cleanup (tree decl, tsubst_flags_t complain)
13752
{
13753
  tree type;
13754
  tree attr;
13755
  tree cleanup;
13756
 
13757
  /* Assume no cleanup is required.  */
13758
  cleanup = NULL_TREE;
13759
 
13760
  if (error_operand_p (decl))
13761
    return cleanup;
13762
 
13763
  /* Handle "__attribute__((cleanup))".  We run the cleanup function
13764
     before the destructor since the destructor is what actually
13765
     terminates the lifetime of the object.  */
13766
  attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
13767
  if (attr)
13768
    {
13769
      tree id;
13770
      tree fn;
13771
      tree arg;
13772
 
13773
      /* Get the name specified by the user for the cleanup function.  */
13774
      id = TREE_VALUE (TREE_VALUE (attr));
13775
      /* Look up the name to find the cleanup function to call.  It is
13776
         important to use lookup_name here because that is what is
13777
         used in c-common.c:handle_cleanup_attribute when performing
13778
         initial checks on the attribute.  Note that those checks
13779
         include ensuring that the function found is not an overloaded
13780
         function, or an object with an overloaded call operator,
13781
         etc.; we can rely on the fact that the function found is an
13782
         ordinary FUNCTION_DECL.  */
13783
      fn = lookup_name (id);
13784
      arg = build_address (decl);
13785
      mark_used (decl);
13786
      cleanup = cp_build_function_call_nary (fn, complain, arg, NULL_TREE);
13787
      if (cleanup == error_mark_node)
13788
        return error_mark_node;
13789
    }
13790
  /* Handle ordinary C++ destructors.  */
13791
  type = TREE_TYPE (decl);
13792
  if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
13793
    {
13794
      int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
13795
      bool has_vbases = (TREE_CODE (type) == RECORD_TYPE
13796
                         && CLASSTYPE_VBASECLASSES (type));
13797
      tree addr;
13798
      tree call;
13799
 
13800
      if (TREE_CODE (type) == ARRAY_TYPE)
13801
        addr = decl;
13802
      else
13803
        addr = build_address (decl);
13804
 
13805
      /* Optimize for space over speed here.  */
13806
      if (!has_vbases || flag_expensive_optimizations)
13807
        flags |= LOOKUP_NONVIRTUAL;
13808
 
13809
      call = build_delete (TREE_TYPE (addr), addr,
13810
                           sfk_complete_destructor, flags, 0, complain);
13811
      if (call == error_mark_node)
13812
        cleanup = error_mark_node;
13813
      else if (cleanup)
13814
        cleanup = cp_build_compound_expr (cleanup, call, complain);
13815
      else
13816
        cleanup = call;
13817
    }
13818
 
13819
  /* build_delete sets the location of the destructor call to the
13820
     current location, even though the destructor is going to be
13821
     called later, at the end of the current scope.  This can lead to
13822
     a "jumpy" behaviour for users of debuggers when they step around
13823
     the end of the block.  So let's unset the location of the
13824
     destructor call instead.  */
13825
  if (cleanup != NULL && EXPR_P (cleanup))
13826
    SET_EXPR_LOCATION (cleanup, UNKNOWN_LOCATION);
13827
  return cleanup;
13828
}
13829
 
13830
 
13831
/* When a stmt has been parsed, this function is called.  */
13832
 
13833
void
13834
finish_stmt (void)
13835
{
13836
}
13837
 
13838
/* Return the FUNCTION_TYPE that corresponds to MEMFNTYPE, which can be a
13839
   FUNCTION_DECL, METHOD_TYPE, FUNCTION_TYPE, pointer or reference to
13840
   METHOD_TYPE or FUNCTION_TYPE, or pointer to member function.  */
13841
 
13842
tree
13843
static_fn_type (tree memfntype)
13844
{
13845
  tree fntype;
13846
  tree args;
13847
 
13848
  if (TYPE_PTRMEMFUNC_P (memfntype))
13849
    memfntype = TYPE_PTRMEMFUNC_FN_TYPE (memfntype);
13850
  if (POINTER_TYPE_P (memfntype)
13851
      || TREE_CODE (memfntype) == FUNCTION_DECL)
13852
    memfntype = TREE_TYPE (memfntype);
13853
  if (TREE_CODE (memfntype) == FUNCTION_TYPE)
13854
    return memfntype;
13855
  gcc_assert (TREE_CODE (memfntype) == METHOD_TYPE);
13856
  args = TYPE_ARG_TYPES (memfntype);
13857
  fntype = build_function_type (TREE_TYPE (memfntype), TREE_CHAIN (args));
13858
  fntype = apply_memfn_quals (fntype, type_memfn_quals (memfntype));
13859
  fntype = (cp_build_type_attribute_variant
13860
            (fntype, TYPE_ATTRIBUTES (memfntype)));
13861
  fntype = (build_exception_variant
13862
            (fntype, TYPE_RAISES_EXCEPTIONS (memfntype)));
13863
  return fntype;
13864
}
13865
 
13866
/* DECL was originally constructed as a non-static member function,
13867
   but turned out to be static.  Update it accordingly.  */
13868
 
13869
void
13870
revert_static_member_fn (tree decl)
13871
{
13872
  tree stype = static_fn_type (decl);
13873
  cp_cv_quals quals = type_memfn_quals (stype);
13874
 
13875
  if (quals != TYPE_UNQUALIFIED)
13876
    stype = apply_memfn_quals (stype, TYPE_UNQUALIFIED);
13877
 
13878
  TREE_TYPE (decl) = stype;
13879
 
13880
  if (DECL_ARGUMENTS (decl))
13881
    DECL_ARGUMENTS (decl) = DECL_CHAIN (DECL_ARGUMENTS (decl));
13882
  DECL_STATIC_FUNCTION_P (decl) = 1;
13883
}
13884
 
13885
/* Return which tree structure is used by T, or TS_CP_GENERIC if T is
13886
   one of the language-independent trees.  */
13887
 
13888
enum cp_tree_node_structure_enum
13889
cp_tree_node_structure (union lang_tree_node * t)
13890
{
13891
  switch (TREE_CODE (&t->generic))
13892
    {
13893
    case DEFAULT_ARG:           return TS_CP_DEFAULT_ARG;
13894
    case DEFERRED_NOEXCEPT:     return TS_CP_DEFERRED_NOEXCEPT;
13895
    case IDENTIFIER_NODE:       return TS_CP_IDENTIFIER;
13896
    case OVERLOAD:              return TS_CP_OVERLOAD;
13897
    case TEMPLATE_PARM_INDEX:   return TS_CP_TPI;
13898
    case PTRMEM_CST:            return TS_CP_PTRMEM;
13899
    case BASELINK:              return TS_CP_BASELINK;
13900
    case STATIC_ASSERT:         return TS_CP_STATIC_ASSERT;
13901
    case ARGUMENT_PACK_SELECT:  return TS_CP_ARGUMENT_PACK_SELECT;
13902
    case TRAIT_EXPR:            return TS_CP_TRAIT_EXPR;
13903
    case LAMBDA_EXPR:           return TS_CP_LAMBDA_EXPR;
13904
    case TEMPLATE_INFO:         return TS_CP_TEMPLATE_INFO;
13905
    case USERDEF_LITERAL:       return TS_CP_USERDEF_LITERAL;
13906
    default:                    return TS_CP_GENERIC;
13907
    }
13908
}
13909
 
13910
/* Build the void_list_node (void_type_node having been created).  */
13911
tree
13912
build_void_list_node (void)
13913
{
13914
  tree t = build_tree_list (NULL_TREE, void_type_node);
13915
  return t;
13916
}
13917
 
13918
bool
13919
cp_missing_noreturn_ok_p (tree decl)
13920
{
13921
  /* A missing noreturn is ok for the `main' function.  */
13922
  return DECL_MAIN_P (decl);
13923
}
13924
 
13925
/* Return the COMDAT group into which DECL should be placed.  */
13926
 
13927
tree
13928
cxx_comdat_group (tree decl)
13929
{
13930
  tree name;
13931
 
13932
  /* Virtual tables, construction virtual tables, and virtual table
13933
     tables all go in a single COMDAT group, named after the primary
13934
     virtual table.  */
13935
  if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
13936
    name = DECL_ASSEMBLER_NAME (CLASSTYPE_VTABLES (DECL_CONTEXT (decl)));
13937
  /* For all other DECLs, the COMDAT group is the mangled name of the
13938
     declaration itself.  */
13939
  else
13940
    {
13941
      while (DECL_THUNK_P (decl))
13942
        {
13943
          /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
13944
             into the same section as the target function.  In that case
13945
             we must return target's name.  */
13946
          tree target = THUNK_TARGET (decl);
13947
          if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
13948
              && DECL_SECTION_NAME (target) != NULL
13949
              && DECL_ONE_ONLY (target))
13950
            decl = target;
13951
          else
13952
            break;
13953
        }
13954
      name = DECL_ASSEMBLER_NAME (decl);
13955
    }
13956
 
13957
  return name;
13958
}
13959
 
13960
#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.