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

Subversion Repositories openrisc_me

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

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

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