* tree.h (TYPE_ALIGN, DECL_ALIGN): Return shifted amount.
[platform/upstream/linaro-gcc.git] / gcc / cp / decl.c
1 /* Process declarations and variables for C++ compiler.
2    Copyright (C) 1988-2016 Free Software Foundation, Inc.
3    Contributed by Michael Tiemann (tiemann@cygnus.com)
4
5 This file is part of GCC.
6
7 GCC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3, or (at your option)
10 any later version.
11
12 GCC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3.  If not see
19 <http://www.gnu.org/licenses/>.  */
20
21
22 /* Process declarations and symbol lookup for C++ front end.
23    Also constructs types; the standard scalar types at initialization,
24    and structure, union, array and enum types when they are declared.  */
25
26 /* ??? not all decl nodes are given the most useful possible
27    line numbers.  For example, the CONST_DECLs for enum values.  */
28
29 #include "config.h"
30 #include "system.h"
31 #include "coretypes.h"
32 #include "target.h"
33 #include "c-family/c-target.h"
34 #include "cp-tree.h"
35 #include "timevar.h"
36 #include "stringpool.h"
37 #include "cgraph.h"
38 #include "stor-layout.h"
39 #include "varasm.h"
40 #include "attribs.h"
41 #include "flags.h"
42 #include "tree-iterator.h"
43 #include "decl.h"
44 #include "intl.h"
45 #include "toplev.h"
46 #include "c-family/c-objc.h"
47 #include "c-family/c-pragma.h"
48 #include "c-family/c-ubsan.h"
49 #include "debug.h"
50 #include "plugin.h"
51 #include "cilk.h"
52 #include "builtins.h"
53
54 /* Possible cases of bad specifiers type used by bad_specifiers. */
55 enum bad_spec_place {
56   BSP_VAR,    /* variable */
57   BSP_PARM,   /* parameter */
58   BSP_TYPE,   /* type */
59   BSP_FIELD   /* field */
60 };
61
62 static const char *redeclaration_error_message (tree, tree);
63
64 static int decl_jump_unsafe (tree);
65 static void require_complete_types_for_parms (tree);
66 static int ambi_op_p (enum tree_code);
67 static int unary_op_p (enum tree_code);
68 static void push_local_name (tree);
69 static tree grok_reference_init (tree, tree, tree, int);
70 static tree grokvardecl (tree, tree, tree, const cp_decl_specifier_seq *,
71                          int, int, int, tree);
72 static int check_static_variable_definition (tree, tree);
73 static void record_unknown_type (tree, const char *);
74 static tree builtin_function_1 (tree, tree, bool);
75 static int member_function_or_else (tree, tree, enum overload_flags);
76 static void bad_specifiers (tree, enum bad_spec_place, int, int, int, int,
77                             int);
78 static void check_for_uninitialized_const_var (tree);
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, vec<tree, va_gc> **);
87 static void make_rtl_for_nonlocal_decl (tree, tree, const char *);
88 static void save_function_data (tree);
89 static void copy_type_enum (tree , tree);
90 static void check_function_type (tree, tree);
91 static void finish_constructor_body (void);
92 static void begin_destructor_body (void);
93 static void finish_destructor_body (void);
94 static void record_key_method_defined (tree);
95 static tree create_array_type_for_decl (tree, tree, tree);
96 static tree get_atexit_node (void);
97 static tree get_dso_handle_node (void);
98 static tree start_cleanup_fn (void);
99 static void end_cleanup_fn (void);
100 static tree cp_make_fname_decl (location_t, tree, int);
101 static void initialize_predefined_identifiers (void);
102 static tree check_special_function_return_type
103        (special_function_kind, tree, tree, int, const location_t*);
104 static tree push_cp_library_fn (enum tree_code, tree, int);
105 static tree build_cp_library_fn (tree, enum tree_code, tree, int);
106 static void store_parm_decls (tree);
107 static void initialize_local_var (tree, tree);
108 static void expand_static_init (tree, tree);
109
110 /* The following symbols are subsumed in the cp_global_trees array, and
111    listed here individually for documentation purposes.
112
113    C++ extensions
114         tree wchar_decl_node;
115
116         tree vtable_entry_type;
117         tree delta_type_node;
118         tree __t_desc_type_node;
119
120         tree class_type_node;
121         tree unknown_type_node;
122
123    Array type `vtable_entry_type[]'
124
125         tree vtbl_type_node;
126         tree vtbl_ptr_type_node;
127
128    Namespaces,
129
130         tree std_node;
131         tree abi_node;
132
133    A FUNCTION_DECL which can call `abort'.  Not necessarily the
134    one that the user will declare, but sufficient to be called
135    by routines that want to abort the program.
136
137         tree abort_fndecl;
138
139    Used by RTTI
140         tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
141         tree tinfo_var_id;  */
142
143 tree cp_global_trees[CPTI_MAX];
144
145 /* Indicates that there is a type value in some namespace, although
146    that is not necessarily in scope at the moment.  */
147
148 tree global_type_node;
149
150 /* The node that holds the "name" of the global scope.  */
151 tree global_scope_name;
152
153 #define local_names cp_function_chain->x_local_names
154
155 /* A list of objects which have constructors or destructors
156    which reside in the global scope.  The decl is stored in
157    the TREE_VALUE slot and the initializer is stored
158    in the TREE_PURPOSE slot.  */
159 tree static_aggregates;
160
161 /* Like static_aggregates, but for thread_local variables.  */
162 tree tls_aggregates;
163
164 /* -- end of C++ */
165
166 /* A node for the integer constant 2.  */
167
168 tree integer_two_node;
169
170 /* Used only for jumps to as-yet undefined labels, since jumps to
171    defined labels can have their validity checked immediately.  */
172
173 struct GTY((chain_next ("%h.next"))) named_label_use_entry {
174   struct named_label_use_entry *next;
175   /* The binding level to which this entry is *currently* attached.
176      This is initially the binding level in which the goto appeared,
177      but is modified as scopes are closed.  */
178   cp_binding_level *binding_level;
179   /* The head of the names list that was current when the goto appeared,
180      or the inner scope popped.  These are the decls that will *not* be
181      skipped when jumping to the label.  */
182   tree names_in_scope;
183   /* The location of the goto, for error reporting.  */
184   location_t o_goto_locus;
185   /* True if an OpenMP structured block scope has been closed since
186      the goto appeared.  This means that the branch from the label will
187      illegally exit an OpenMP scope.  */
188   bool in_omp_scope;
189 };
190
191 /* A list of all LABEL_DECLs in the function that have names.  Here so
192    we can clear out their names' definitions at the end of the
193    function, and so we can check the validity of jumps to these labels.  */
194
195 struct GTY((for_user)) named_label_entry {
196   /* The decl itself.  */
197   tree label_decl;
198
199   /* The binding level to which the label is *currently* attached.
200      This is initially set to the binding level in which the label
201      is defined, but is modified as scopes are closed.  */
202   cp_binding_level *binding_level;
203   /* The head of the names list that was current when the label was
204      defined, or the inner scope popped.  These are the decls that will
205      be skipped when jumping to the label.  */
206   tree names_in_scope;
207   /* A vector of all decls from all binding levels that would be
208      crossed by a backward branch to the label.  */
209   vec<tree, va_gc> *bad_decls;
210
211   /* A list of uses of the label, before the label is defined.  */
212   struct named_label_use_entry *uses;
213
214   /* The following bits are set after the label is defined, and are
215      updated as scopes are popped.  They indicate that a backward jump
216      to the label will illegally enter a scope of the given flavor.  */
217   bool in_try_scope;
218   bool in_catch_scope;
219   bool in_omp_scope;
220   bool in_transaction_scope;
221 };
222
223 #define named_labels cp_function_chain->x_named_labels
224 \f
225 /* The number of function bodies which we are currently processing.
226    (Zero if we are at namespace scope, one inside the body of a
227    function, two inside the body of a function in a local class, etc.)  */
228 int function_depth;
229
230 /* States indicating how grokdeclarator() should handle declspecs marked
231    with __attribute__((deprecated)).  An object declared as
232    __attribute__((deprecated)) suppresses warnings of uses of other
233    deprecated items.  */
234 enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
235
236 \f
237 /* A list of VAR_DECLs whose type was incomplete at the time the
238    variable was declared.  */
239
240 struct GTY(()) incomplete_var {
241   tree decl;
242   tree incomplete_type;
243 };
244
245
246 static GTY(()) vec<incomplete_var, va_gc> *incomplete_vars;
247 \f
248 /* Returns the kind of template specialization we are currently
249    processing, given that it's declaration contained N_CLASS_SCOPES
250    explicit scope qualifications.  */
251
252 tmpl_spec_kind
253 current_tmpl_spec_kind (int n_class_scopes)
254 {
255   int n_template_parm_scopes = 0;
256   int seen_specialization_p = 0;
257   int innermost_specialization_p = 0;
258   cp_binding_level *b;
259
260   /* Scan through the template parameter scopes.  */
261   for (b = current_binding_level;
262        b->kind == sk_template_parms;
263        b = b->level_chain)
264     {
265       /* If we see a specialization scope inside a parameter scope,
266          then something is wrong.  That corresponds to a declaration
267          like:
268
269             template <class T> template <> ...
270
271          which is always invalid since [temp.expl.spec] forbids the
272          specialization of a class member template if the enclosing
273          class templates are not explicitly specialized as well.  */
274       if (b->explicit_spec_p)
275         {
276           if (n_template_parm_scopes == 0)
277             innermost_specialization_p = 1;
278           else
279             seen_specialization_p = 1;
280         }
281       else if (seen_specialization_p == 1)
282         return tsk_invalid_member_spec;
283
284       ++n_template_parm_scopes;
285     }
286
287   /* Handle explicit instantiations.  */
288   if (processing_explicit_instantiation)
289     {
290       if (n_template_parm_scopes != 0)
291         /* We've seen a template parameter list during an explicit
292            instantiation.  For example:
293
294              template <class T> template void f(int);
295
296            This is erroneous.  */
297         return tsk_invalid_expl_inst;
298       else
299         return tsk_expl_inst;
300     }
301
302   if (n_template_parm_scopes < n_class_scopes)
303     /* We've not seen enough template headers to match all the
304        specialized classes present.  For example:
305
306          template <class T> void R<T>::S<T>::f(int);
307
308        This is invalid; there needs to be one set of template
309        parameters for each class.  */
310     return tsk_insufficient_parms;
311   else if (n_template_parm_scopes == n_class_scopes)
312     /* We're processing a non-template declaration (even though it may
313        be a member of a template class.)  For example:
314
315          template <class T> void S<T>::f(int);
316
317        The `class T' matches the `S<T>', leaving no template headers
318        corresponding to the `f'.  */
319     return tsk_none;
320   else if (n_template_parm_scopes > n_class_scopes + 1)
321     /* We've got too many template headers.  For example:
322
323          template <> template <class T> void f (T);
324
325        There need to be more enclosing classes.  */
326     return tsk_excessive_parms;
327   else
328     /* This must be a template.  It's of the form:
329
330          template <class T> template <class U> void S<T>::f(U);
331
332        This is a specialization if the innermost level was a
333        specialization; otherwise it's just a definition of the
334        template.  */
335     return innermost_specialization_p ? tsk_expl_spec : tsk_template;
336 }
337
338 /* Exit the current scope.  */
339
340 void
341 finish_scope (void)
342 {
343   poplevel (0, 0, 0);
344 }
345
346 /* When a label goes out of scope, check to see if that label was used
347    in a valid manner, and issue any appropriate warnings or errors.  */
348
349 static void
350 pop_label (tree label, tree old_value)
351 {
352   if (!processing_template_decl)
353     {
354       if (DECL_INITIAL (label) == NULL_TREE)
355         {
356           location_t location;
357
358           error ("label %q+D used but not defined", label);
359           location = input_location;
360             /* FIXME want (LOCATION_FILE (input_location), (line)0) */
361           /* Avoid crashing later.  */
362           define_label (location, DECL_NAME (label));
363         }
364       else 
365         warn_for_unused_label (label);
366     }
367
368   SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), old_value);
369 }
370
371 /* Push all named labels into a vector, so that we can sort it on DECL_UID
372    to avoid code generation differences.  */
373
374 int
375 note_label (named_label_entry **slot, vec<named_label_entry **> &labels)
376 {
377   labels.quick_push (slot);
378   return 1;
379 }
380
381 /* Helper function to sort named label entries in a vector by DECL_UID.  */
382
383 static int
384 sort_labels (const void *a, const void *b)
385 {
386   named_label_entry **slot1 = *(named_label_entry **const *) a;
387   named_label_entry **slot2 = *(named_label_entry **const *) b;
388   if (DECL_UID ((*slot1)->label_decl) < DECL_UID ((*slot2)->label_decl))
389     return -1;
390   if (DECL_UID ((*slot1)->label_decl) > DECL_UID ((*slot2)->label_decl))
391     return 1;
392   return 0;
393 }
394
395 /* At the end of a function, all labels declared within the function
396    go out of scope.  BLOCK is the top-level block for the
397    function.  */
398
399 static void
400 pop_labels (tree block)
401 {
402   if (named_labels)
403     {
404       auto_vec<named_label_entry **, 32> labels;
405       named_label_entry **slot;
406       unsigned int i;
407
408       /* Push all the labels into a vector and sort them by DECL_UID,
409          so that gaps between DECL_UIDs don't affect code generation.  */
410       labels.reserve_exact (named_labels->elements ());
411       named_labels->traverse<vec<named_label_entry **> &, note_label> (labels);
412       labels.qsort (sort_labels);
413       FOR_EACH_VEC_ELT (labels, i, slot)
414         {
415           struct named_label_entry *ent = *slot;
416
417           pop_label (ent->label_decl, NULL_TREE);
418
419           /* Put the labels into the "variables" of the top-level block,
420              so debugger can see them.  */
421           DECL_CHAIN (ent->label_decl) = BLOCK_VARS (block);
422           BLOCK_VARS (block) = ent->label_decl;
423
424           named_labels->clear_slot (slot);
425         }
426       named_labels = NULL;
427     }
428 }
429
430 /* At the end of a block with local labels, restore the outer definition.  */
431
432 static void
433 pop_local_label (tree label, tree old_value)
434 {
435   struct named_label_entry dummy;
436
437   pop_label (label, old_value);
438
439   dummy.label_decl = label;
440   named_label_entry **slot = named_labels->find_slot (&dummy, NO_INSERT);
441   named_labels->clear_slot (slot);
442 }
443
444 /* The following two routines are used to interface to Objective-C++.
445    The binding level is purposely treated as an opaque type.  */
446
447 void *
448 objc_get_current_scope (void)
449 {
450   return current_binding_level;
451 }
452
453 /* The following routine is used by the NeXT-style SJLJ exceptions;
454    variables get marked 'volatile' so as to not be clobbered by
455    _setjmp()/_longjmp() calls.  All variables in the current scope,
456    as well as parent scopes up to (but not including) ENCLOSING_BLK
457    shall be thusly marked.  */
458
459 void
460 objc_mark_locals_volatile (void *enclosing_blk)
461 {
462   cp_binding_level *scope;
463
464   for (scope = current_binding_level;
465        scope && scope != enclosing_blk;
466        scope = scope->level_chain)
467     {
468       tree decl;
469
470       for (decl = scope->names; decl; decl = TREE_CHAIN (decl))
471         objc_volatilize_decl (decl);
472
473       /* Do not climb up past the current function.  */
474       if (scope->kind == sk_function_parms)
475         break;
476     }
477 }
478
479 /* Update data for defined and undefined labels when leaving a scope.  */
480
481 int
482 poplevel_named_label_1 (named_label_entry **slot, cp_binding_level *bl)
483 {
484   named_label_entry *ent = *slot;
485   cp_binding_level *obl = bl->level_chain;
486
487   if (ent->binding_level == bl)
488     {
489       tree decl;
490
491       /* ENT->NAMES_IN_SCOPE may contain a mixture of DECLs and
492          TREE_LISTs representing OVERLOADs, so be careful.  */
493       for (decl = ent->names_in_scope; decl; decl = (DECL_P (decl)
494                                                      ? DECL_CHAIN (decl)
495                                                      : TREE_CHAIN (decl)))
496         if (decl_jump_unsafe (decl))
497           vec_safe_push (ent->bad_decls, decl);
498
499       ent->binding_level = obl;
500       ent->names_in_scope = obl->names;
501       switch (bl->kind)
502         {
503         case sk_try:
504           ent->in_try_scope = true;
505           break;
506         case sk_catch:
507           ent->in_catch_scope = true;
508           break;
509         case sk_omp:
510           ent->in_omp_scope = true;
511           break;
512         case sk_transaction:
513           ent->in_transaction_scope = true;
514           break;
515         default:
516           break;
517         }
518     }
519   else if (ent->uses)
520     {
521       struct named_label_use_entry *use;
522
523       for (use = ent->uses; use ; use = use->next)
524         if (use->binding_level == bl)
525           {
526             use->binding_level = obl;
527             use->names_in_scope = obl->names;
528             if (bl->kind == sk_omp)
529               use->in_omp_scope = true;
530           }
531     }
532
533   return 1;
534 }
535
536 /* Saved errorcount to avoid -Wunused-but-set-{parameter,variable} warnings
537    when errors were reported, except for -Werror-unused-but-set-*.  */
538 static int unused_but_set_errorcount;
539
540 /* Exit a binding level.
541    Pop the level off, and restore the state of the identifier-decl mappings
542    that were in effect when this level was entered.
543
544    If KEEP == 1, this level had explicit declarations, so
545    and create a "block" (a BLOCK node) for the level
546    to record its declarations and subblocks for symbol table output.
547
548    If FUNCTIONBODY is nonzero, this level is the body of a function,
549    so create a block as if KEEP were set and also clear out all
550    label names.
551
552    If REVERSE is nonzero, reverse the order of decls before putting
553    them into the BLOCK.  */
554
555 tree
556 poplevel (int keep, int reverse, int functionbody)
557 {
558   tree link;
559   /* The chain of decls was accumulated in reverse order.
560      Put it into forward order, just for cleanliness.  */
561   tree decls;
562   tree subblocks;
563   tree block;
564   tree decl;
565   int leaving_for_scope;
566   scope_kind kind;
567   unsigned ix;
568   cp_label_binding *label_bind;
569
570   bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
571  restart:
572
573   block = NULL_TREE;
574
575   gcc_assert (current_binding_level->kind != sk_class);
576
577   if (current_binding_level->kind == sk_cleanup)
578     functionbody = 0;
579   subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
580
581   gcc_assert (!vec_safe_length (current_binding_level->class_shadowed));
582
583   /* We used to use KEEP == 2 to indicate that the new block should go
584      at the beginning of the list of blocks at this binding level,
585      rather than the end.  This hack is no longer used.  */
586   gcc_assert (keep == 0 || keep == 1);
587
588   if (current_binding_level->keep)
589     keep = 1;
590
591   /* Any uses of undefined labels, and any defined labels, now operate
592      under constraints of next binding contour.  */
593   if (cfun && !functionbody && named_labels)
594     named_labels->traverse<cp_binding_level *, poplevel_named_label_1>
595                    (current_binding_level);
596
597   /* Get the decls in the order they were written.
598      Usually current_binding_level->names is in reverse order.
599      But parameter decls were previously put in forward order.  */
600
601   if (reverse)
602     current_binding_level->names
603       = decls = nreverse (current_binding_level->names);
604   else
605     decls = current_binding_level->names;
606
607   /* If there were any declarations or structure tags in that level,
608      or if this level is a function body,
609      create a BLOCK to record them for the life of this function.  */
610   block = NULL_TREE;
611   /* Avoid function body block if possible.  */
612   if (functionbody && subblocks && BLOCK_CHAIN (subblocks) == NULL_TREE)
613     keep = 0;
614   else if (keep == 1 || functionbody)
615     block = make_node (BLOCK);
616   if (block != NULL_TREE)
617     {
618       BLOCK_VARS (block) = decls;
619       BLOCK_SUBBLOCKS (block) = subblocks;
620     }
621
622   /* In each subblock, record that this is its superior.  */
623   if (keep >= 0)
624     for (link = subblocks; link; link = BLOCK_CHAIN (link))
625       BLOCK_SUPERCONTEXT (link) = block;
626
627   /* We still support the old for-scope rules, whereby the variables
628      in a for-init statement were in scope after the for-statement
629      ended.  We only use the new rules if flag_new_for_scope is
630      nonzero.  */
631   leaving_for_scope
632     = current_binding_level->kind == sk_for && flag_new_for_scope == 1;
633
634   /* Before we remove the declarations first check for unused variables.  */
635   if ((warn_unused_variable || warn_unused_but_set_variable)
636       && current_binding_level->kind != sk_template_parms
637       && !processing_template_decl)
638     for (tree d = getdecls (); d; d = TREE_CHAIN (d))
639       {
640         /* There are cases where D itself is a TREE_LIST.  See in
641            push_local_binding where the list of decls returned by
642            getdecls is built.  */
643         decl = TREE_CODE (d) == TREE_LIST ? TREE_VALUE (d) : d;
644         tree type = TREE_TYPE (decl);
645         if (VAR_P (decl)
646             && (! TREE_USED (decl) || !DECL_READ_P (decl))
647             && ! DECL_IN_SYSTEM_HEADER (decl)
648             && DECL_NAME (decl) && ! DECL_ARTIFICIAL (decl)
649             && type != error_mark_node
650             && (!CLASS_TYPE_P (type)
651                 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
652                 || lookup_attribute ("warn_unused",
653                                      TYPE_ATTRIBUTES (TREE_TYPE (decl)))))
654           {
655             if (! TREE_USED (decl))
656               warning_at (DECL_SOURCE_LOCATION (decl),
657                           OPT_Wunused_variable, "unused variable %qD", decl);
658             else if (DECL_CONTEXT (decl) == current_function_decl
659                      // For -Wunused-but-set-variable leave references alone.
660                      && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
661                      && errorcount == unused_but_set_errorcount)
662               {
663                 warning_at (DECL_SOURCE_LOCATION (decl),
664                             OPT_Wunused_but_set_variable,
665                             "variable %qD set but not used", decl);
666                 unused_but_set_errorcount = errorcount;
667               }
668           }
669       }
670
671   /* Remove declarations for all the DECLs in this level.  */
672   for (link = decls; link; link = TREE_CHAIN (link))
673     {
674       if (leaving_for_scope && VAR_P (link)
675           /* It's hard to make this ARM compatibility hack play nicely with
676              lambdas, and it really isn't necessary in C++11 mode.  */
677           && cxx_dialect < cxx11
678           && DECL_NAME (link))
679         {
680           tree name = DECL_NAME (link);
681           cxx_binding *ob;
682           tree ns_binding;
683
684           ob = outer_binding (name,
685                               IDENTIFIER_BINDING (name),
686                               /*class_p=*/true);
687           if (!ob)
688             ns_binding = IDENTIFIER_NAMESPACE_VALUE (name);
689           else
690             ns_binding = NULL_TREE;
691
692           if (ob && ob->scope == current_binding_level->level_chain)
693             /* We have something like:
694
695                  int i;
696                  for (int i; ;);
697
698                and we are leaving the `for' scope.  There's no reason to
699                keep the binding of the inner `i' in this case.  */
700             pop_binding (name, link);
701           else if ((ob && (TREE_CODE (ob->value) == TYPE_DECL))
702                    || (ns_binding && TREE_CODE (ns_binding) == TYPE_DECL))
703             /* Here, we have something like:
704
705                  typedef int I;
706
707                  void f () {
708                    for (int I; ;);
709                  }
710
711                We must pop the for-scope binding so we know what's a
712                type and what isn't.  */
713             pop_binding (name, link);
714           else
715             {
716               /* Mark this VAR_DECL as dead so that we can tell we left it
717                  there only for backward compatibility.  */
718               DECL_DEAD_FOR_LOCAL (link) = 1;
719
720               /* Keep track of what should have happened when we
721                  popped the binding.  */
722               if (ob && ob->value)
723                 {
724                   SET_DECL_SHADOWED_FOR_VAR (link, ob->value);
725                   DECL_HAS_SHADOWED_FOR_VAR_P (link) = 1;
726                 }
727
728               /* Add it to the list of dead variables in the next
729                  outermost binding to that we can remove these when we
730                  leave that binding.  */
731               vec_safe_push (
732                   current_binding_level->level_chain->dead_vars_from_for,
733                   link);
734
735               /* Although we don't pop the cxx_binding, we do clear
736                  its SCOPE since the scope is going away now.  */
737               IDENTIFIER_BINDING (name)->scope
738                 = current_binding_level->level_chain;
739             }
740         }
741       else
742         {
743           tree name;
744
745           /* Remove the binding.  */
746           decl = link;
747
748           if (TREE_CODE (decl) == TREE_LIST)
749             decl = TREE_VALUE (decl);
750           name = decl;
751
752           if (TREE_CODE (name) == OVERLOAD)
753             name = OVL_FUNCTION (name);
754
755           gcc_assert (DECL_P (name));
756           pop_binding (DECL_NAME (name), decl);
757         }
758     }
759
760   /* Remove declarations for any `for' variables from inner scopes
761      that we kept around.  */
762   FOR_EACH_VEC_SAFE_ELT_REVERSE (current_binding_level->dead_vars_from_for,
763                                  ix, decl)
764     pop_binding (DECL_NAME (decl), decl);
765
766   /* Restore the IDENTIFIER_TYPE_VALUEs.  */
767   for (link = current_binding_level->type_shadowed;
768        link; link = TREE_CHAIN (link))
769     SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
770
771   /* Restore the IDENTIFIER_LABEL_VALUEs for local labels.  */
772   FOR_EACH_VEC_SAFE_ELT_REVERSE (current_binding_level->shadowed_labels,
773                                  ix, label_bind)
774     pop_local_label (label_bind->label, label_bind->prev_value);
775
776   /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
777      list if a `using' declaration put them there.  The debugging
778      back ends won't understand OVERLOAD, so we remove them here.
779      Because the BLOCK_VARS are (temporarily) shared with
780      CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
781      popped all the bindings.  */
782   if (block)
783     {
784       tree* d;
785
786       for (d = &BLOCK_VARS (block); *d; )
787         {
788           if (TREE_CODE (*d) == TREE_LIST)
789             *d = TREE_CHAIN (*d);
790           else
791             d = &DECL_CHAIN (*d);
792         }
793     }
794
795   /* If the level being exited is the top level of a function,
796      check over all the labels.  */
797   if (functionbody)
798     {
799       if (block)
800         {
801           /* Since this is the top level block of a function, the vars are
802              the function's parameters.  Don't leave them in the BLOCK
803              because they are found in the FUNCTION_DECL instead.  */
804           BLOCK_VARS (block) = 0;
805           pop_labels (block);
806         }
807       else
808         pop_labels (subblocks);
809     }
810
811   kind = current_binding_level->kind;
812   if (kind == sk_cleanup)
813     {
814       tree stmt;
815
816       /* If this is a temporary binding created for a cleanup, then we'll
817          have pushed a statement list level.  Pop that, create a new
818          BIND_EXPR for the block, and insert it into the stream.  */
819       stmt = pop_stmt_list (current_binding_level->statement_list);
820       stmt = c_build_bind_expr (input_location, block, stmt);
821       add_stmt (stmt);
822     }
823
824   leave_scope ();
825   if (functionbody)
826     {
827       /* The current function is being defined, so its DECL_INITIAL
828          should be error_mark_node.  */
829       gcc_assert (DECL_INITIAL (current_function_decl) == error_mark_node);
830       DECL_INITIAL (current_function_decl) = block ? block : subblocks;
831       if (subblocks)
832         {
833           if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
834             {
835               if (BLOCK_SUBBLOCKS (subblocks))
836                 BLOCK_OUTER_CURLY_BRACE_P (BLOCK_SUBBLOCKS (subblocks)) = 1;
837             }
838           else
839             BLOCK_OUTER_CURLY_BRACE_P (subblocks) = 1;
840         }
841     }
842   else if (block)
843     current_binding_level->blocks
844       = block_chainon (current_binding_level->blocks, block);
845
846   /* If we did not make a block for the level just exited,
847      any blocks made for inner levels
848      (since they cannot be recorded as subblocks in that level)
849      must be carried forward so they will later become subblocks
850      of something else.  */
851   else if (subblocks)
852     current_binding_level->blocks
853       = block_chainon (current_binding_level->blocks, subblocks);
854
855   /* Each and every BLOCK node created here in `poplevel' is important
856      (e.g. for proper debugging information) so if we created one
857      earlier, mark it as "used".  */
858   if (block)
859     TREE_USED (block) = 1;
860
861   /* All temporary bindings created for cleanups are popped silently.  */
862   if (kind == sk_cleanup)
863     goto restart;
864
865   timevar_cond_stop (TV_NAME_LOOKUP, subtime);
866   return block;
867 }
868
869 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
870    itself, calling F for each.  The DATA is passed to F as well.  */
871
872 static int
873 walk_namespaces_r (tree name_space, walk_namespaces_fn f, void* data)
874 {
875   int result = 0;
876   tree current = NAMESPACE_LEVEL (name_space)->namespaces;
877
878   result |= (*f) (name_space, data);
879
880   for (; current; current = DECL_CHAIN (current))
881     result |= walk_namespaces_r (current, f, data);
882
883   return result;
884 }
885
886 /* Walk all the namespaces, calling F for each.  The DATA is passed to
887    F as well.  */
888
889 int
890 walk_namespaces (walk_namespaces_fn f, void* data)
891 {
892   return walk_namespaces_r (global_namespace, f, data);
893 }
894
895 /* Call wrapup_globals_declarations for the globals in NAMESPACE.  */
896
897 int
898 wrapup_globals_for_namespace (tree name_space, void* data ATTRIBUTE_UNUSED)
899 {
900   cp_binding_level *level = NAMESPACE_LEVEL (name_space);
901   vec<tree, va_gc> *statics = level->static_decls;
902   tree *vec = statics->address ();
903   int len = statics->length ();
904
905   if (warn_unused_function)
906     {
907       tree decl;
908       unsigned int i;
909       FOR_EACH_VEC_SAFE_ELT (statics, i, decl)
910         if (TREE_CODE (decl) == FUNCTION_DECL
911             && DECL_INITIAL (decl) == 0
912             && DECL_EXTERNAL (decl)
913             && !TREE_PUBLIC (decl)
914             && !DECL_ARTIFICIAL (decl)
915             && !TREE_NO_WARNING (decl))
916           {
917             warning (OPT_Wunused_function,
918                      "%q+F declared %<static%> but never defined", decl);
919             TREE_NO_WARNING (decl) = 1;
920           }
921     }
922
923   /* Write out any globals that need to be output.  */
924   return wrapup_global_declarations (vec, len);
925 }
926 \f
927 /* In C++, you don't have to write `struct S' to refer to `S'; you
928    can just use `S'.  We accomplish this by creating a TYPE_DECL as
929    if the user had written `typedef struct S S'.  Create and return
930    the TYPE_DECL for TYPE.  */
931
932 tree
933 create_implicit_typedef (tree name, tree type)
934 {
935   tree decl;
936
937   decl = build_decl (input_location, TYPE_DECL, name, type);
938   DECL_ARTIFICIAL (decl) = 1;
939   /* There are other implicit type declarations, like the one *within*
940      a class that allows you to write `S::S'.  We must distinguish
941      amongst these.  */
942   SET_DECL_IMPLICIT_TYPEDEF_P (decl);
943   TYPE_NAME (type) = decl;
944   TYPE_STUB_DECL (type) = decl;
945
946   return decl;
947 }
948
949 /* Remember a local name for name-mangling purposes.  */
950
951 static void
952 push_local_name (tree decl)
953 {
954   size_t i, nelts;
955   tree t, name;
956
957   timevar_start (TV_NAME_LOOKUP);
958
959   name = DECL_NAME (decl);
960
961   nelts = vec_safe_length (local_names);
962   for (i = 0; i < nelts; i++)
963     {
964       t = (*local_names)[i];
965       if (DECL_NAME (t) == name)
966         {
967           if (!DECL_LANG_SPECIFIC (decl))
968             retrofit_lang_decl (decl);
969           DECL_LANG_SPECIFIC (decl)->u.base.u2sel = 1;
970           if (DECL_DISCRIMINATOR_SET_P (t))
971             DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
972           else
973             DECL_DISCRIMINATOR (decl) = 1;
974
975           (*local_names)[i] = decl;
976           timevar_stop (TV_NAME_LOOKUP);
977           return;
978         }
979     }
980
981   vec_safe_push (local_names, decl);
982   timevar_stop (TV_NAME_LOOKUP);
983 }
984 \f
985 /* Subroutine of duplicate_decls: return truthvalue of whether
986    or not types of these decls match.
987
988    For C++, we must compare the parameter list so that `int' can match
989    `int&' in a parameter position, but `int&' is not confused with
990    `const int&'.  */
991
992 int
993 decls_match (tree newdecl, tree olddecl)
994 {
995   int types_match;
996
997   if (newdecl == olddecl)
998     return 1;
999
1000   if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
1001     /* If the two DECLs are not even the same kind of thing, we're not
1002        interested in their types.  */
1003     return 0;
1004
1005   gcc_assert (DECL_P (newdecl));
1006
1007   if (TREE_CODE (newdecl) == FUNCTION_DECL)
1008     {
1009       tree f1 = TREE_TYPE (newdecl);
1010       tree f2 = TREE_TYPE (olddecl);
1011       tree p1 = TYPE_ARG_TYPES (f1);
1012       tree p2 = TYPE_ARG_TYPES (f2);
1013       tree r2;
1014
1015       /* Specializations of different templates are different functions
1016          even if they have the same type.  */
1017       tree t1 = (DECL_USE_TEMPLATE (newdecl)
1018                  ? DECL_TI_TEMPLATE (newdecl)
1019                  : NULL_TREE);
1020       tree t2 = (DECL_USE_TEMPLATE (olddecl)
1021                  ? DECL_TI_TEMPLATE (olddecl)
1022                  : NULL_TREE);
1023       if (t1 != t2)
1024         return 0;
1025
1026       if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1027           && ! (DECL_EXTERN_C_P (newdecl)
1028                 && DECL_EXTERN_C_P (olddecl)))
1029         return 0;
1030
1031       /* A new declaration doesn't match a built-in one unless it
1032          is also extern "C".  */
1033       if (DECL_IS_BUILTIN (olddecl)
1034           && DECL_EXTERN_C_P (olddecl) && !DECL_EXTERN_C_P (newdecl))
1035         return 0;
1036
1037       if (TREE_CODE (f1) != TREE_CODE (f2))
1038         return 0;
1039
1040       /* A declaration with deduced return type should use its pre-deduction
1041          type for declaration matching.  */
1042       r2 = fndecl_declared_return_type (olddecl);
1043
1044       if (same_type_p (TREE_TYPE (f1), r2))
1045         {
1046           if (!prototype_p (f2) && DECL_EXTERN_C_P (olddecl)
1047               && (DECL_BUILT_IN (olddecl)
1048 #ifndef NO_IMPLICIT_EXTERN_C
1049                   || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
1050                   || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
1051 #endif
1052               ))
1053             {
1054               types_match = self_promoting_args_p (p1);
1055               if (p1 == void_list_node)
1056                 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1057             }
1058 #ifndef NO_IMPLICIT_EXTERN_C
1059           else if (!prototype_p (f1)
1060                    && (DECL_EXTERN_C_P (olddecl)
1061                        && DECL_IN_SYSTEM_HEADER (olddecl)
1062                        && !DECL_CLASS_SCOPE_P (olddecl))
1063                    && (DECL_EXTERN_C_P (newdecl)
1064                        && DECL_IN_SYSTEM_HEADER (newdecl)
1065                        && !DECL_CLASS_SCOPE_P (newdecl)))
1066             {
1067               types_match = self_promoting_args_p (p2);
1068               TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1069             }
1070 #endif
1071           else
1072             types_match =
1073               compparms (p1, p2)
1074               && type_memfn_rqual (f1) == type_memfn_rqual (f2)
1075               && (TYPE_ATTRIBUTES (TREE_TYPE (newdecl)) == NULL_TREE
1076                   || comp_type_attributes (TREE_TYPE (newdecl),
1077                                            TREE_TYPE (olddecl)) != 0);
1078         }
1079       else
1080         types_match = 0;
1081
1082       /* The decls dont match if they correspond to two different versions
1083          of the same function.   Disallow extern "C" functions to be
1084          versions for now.  */
1085       if (types_match
1086           && !DECL_EXTERN_C_P (newdecl)
1087           && !DECL_EXTERN_C_P (olddecl)
1088           && targetm.target_option.function_versions (newdecl, olddecl))
1089         {
1090           /* Mark functions as versions if necessary.  Modify the mangled decl
1091              name if necessary.  */
1092           if (DECL_FUNCTION_VERSIONED (newdecl)
1093               && DECL_FUNCTION_VERSIONED (olddecl))
1094             return 0;
1095           if (!DECL_FUNCTION_VERSIONED (newdecl))
1096             {
1097               DECL_FUNCTION_VERSIONED (newdecl) = 1;
1098               if (DECL_ASSEMBLER_NAME_SET_P (newdecl))
1099                 mangle_decl (newdecl);
1100             }
1101           if (!DECL_FUNCTION_VERSIONED (olddecl))
1102             {
1103               DECL_FUNCTION_VERSIONED (olddecl) = 1;
1104               if (DECL_ASSEMBLER_NAME_SET_P (olddecl))
1105                mangle_decl (olddecl);
1106             }
1107           cgraph_node::record_function_versions (olddecl, newdecl);
1108           return 0;
1109         }
1110     }
1111   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1112     {
1113       tree oldres = DECL_TEMPLATE_RESULT (olddecl);
1114       tree newres = DECL_TEMPLATE_RESULT (newdecl);
1115
1116       if (TREE_CODE (newres) != TREE_CODE (oldres))
1117         return 0;
1118
1119       if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1120                                 DECL_TEMPLATE_PARMS (olddecl)))
1121         return 0;
1122
1123       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1124         types_match = (same_type_p (TREE_TYPE (oldres), TREE_TYPE (newres))
1125                        && equivalently_constrained (olddecl, newdecl));
1126       else
1127         // We don't need to check equivalently_constrained for variable and
1128         // function templates because we check it on the results.
1129         types_match = decls_match (oldres, newres);
1130     }
1131   else
1132     {
1133       /* Need to check scope for variable declaration (VAR_DECL).
1134          For typedef (TYPE_DECL), scope is ignored.  */
1135       if (VAR_P (newdecl)
1136           && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1137           /* [dcl.link]
1138              Two declarations for an object with C language linkage
1139              with the same name (ignoring the namespace that qualify
1140              it) that appear in different namespace scopes refer to
1141              the same object.  */
1142           && !(DECL_EXTERN_C_P (olddecl) && DECL_EXTERN_C_P (newdecl)))
1143         return 0;
1144
1145       if (TREE_TYPE (newdecl) == error_mark_node)
1146         types_match = TREE_TYPE (olddecl) == error_mark_node;
1147       else if (TREE_TYPE (olddecl) == NULL_TREE)
1148         types_match = TREE_TYPE (newdecl) == NULL_TREE;
1149       else if (TREE_TYPE (newdecl) == NULL_TREE)
1150         types_match = 0;
1151       else
1152         types_match = comptypes (TREE_TYPE (newdecl),
1153                                  TREE_TYPE (olddecl),
1154                                  COMPARE_REDECLARATION);
1155     }
1156
1157   // Normal functions can be constrained, as can variable partial
1158   // specializations.
1159   if (types_match && VAR_OR_FUNCTION_DECL_P (newdecl))
1160     types_match = equivalently_constrained (newdecl, olddecl);
1161
1162   return types_match;
1163 }
1164
1165 /* If NEWDECL is `static' and an `extern' was seen previously,
1166    warn about it.  OLDDECL is the previous declaration.
1167
1168    Note that this does not apply to the C++ case of declaring
1169    a variable `extern const' and then later `const'.
1170
1171    Don't complain about built-in functions, since they are beyond
1172    the user's control.  */
1173
1174 void
1175 warn_extern_redeclared_static (tree newdecl, tree olddecl)
1176 {
1177   if (TREE_CODE (newdecl) == TYPE_DECL
1178       || TREE_CODE (newdecl) == TEMPLATE_DECL
1179       || TREE_CODE (newdecl) == CONST_DECL
1180       || TREE_CODE (newdecl) == NAMESPACE_DECL)
1181     return;
1182
1183   /* Don't get confused by static member functions; that's a different
1184      use of `static'.  */
1185   if (TREE_CODE (newdecl) == FUNCTION_DECL
1186       && DECL_STATIC_FUNCTION_P (newdecl))
1187     return;
1188
1189   /* If the old declaration was `static', or the new one isn't, then
1190      everything is OK.  */
1191   if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1192     return;
1193
1194   /* It's OK to declare a builtin function as `static'.  */
1195   if (TREE_CODE (olddecl) == FUNCTION_DECL
1196       && DECL_ARTIFICIAL (olddecl))
1197     return;
1198
1199   if (permerror (DECL_SOURCE_LOCATION (newdecl),
1200                  "%qD was declared %<extern%> and later %<static%>", newdecl))
1201     inform (DECL_SOURCE_LOCATION (olddecl),
1202             "previous declaration of %qD", olddecl);
1203 }
1204
1205 /* NEW_DECL is a redeclaration of OLD_DECL; both are functions or
1206    function templates.  If their exception specifications do not
1207    match, issue a diagnostic.  */
1208
1209 static void
1210 check_redeclaration_exception_specification (tree new_decl,
1211                                              tree old_decl)
1212 {
1213   tree new_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (new_decl));
1214   tree old_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (old_decl));
1215
1216   /* Two default specs are equivalent, don't force evaluation.  */
1217   if (UNEVALUATED_NOEXCEPT_SPEC_P (new_exceptions)
1218       && UNEVALUATED_NOEXCEPT_SPEC_P (old_exceptions))
1219     return;
1220
1221   maybe_instantiate_noexcept (new_decl);
1222   maybe_instantiate_noexcept (old_decl);
1223   new_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (new_decl));
1224   old_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (old_decl));
1225
1226   /* [except.spec]
1227
1228      If any declaration of a function has an exception-specification,
1229      all declarations, including the definition and an explicit
1230      specialization, of that function shall have an
1231      exception-specification with the same set of type-ids.  */
1232   if (! DECL_IS_BUILTIN (old_decl)
1233       && !comp_except_specs (new_exceptions, old_exceptions, ce_normal))
1234     {
1235       const char *msg
1236         = "declaration of %q+F has a different exception specifier";
1237       bool complained = true;
1238       if (DECL_IN_SYSTEM_HEADER (old_decl))
1239         complained = pedwarn (0, OPT_Wsystem_headers, msg, new_decl);
1240       else if (!flag_exceptions)
1241         /* We used to silently permit mismatched eh specs with
1242            -fno-exceptions, so make them a pedwarn now.  */
1243         complained = pedwarn (0, OPT_Wpedantic, msg, new_decl);
1244       else
1245         error (msg, new_decl);
1246       if (complained)
1247         inform (0, "from previous declaration %q+F", old_decl);
1248     }
1249 }
1250
1251 /* Return true if OLD_DECL and NEW_DECL agree on constexprness.
1252    Otherwise issue diagnostics.  */
1253
1254 static bool
1255 validate_constexpr_redeclaration (tree old_decl, tree new_decl)
1256 {
1257   old_decl = STRIP_TEMPLATE (old_decl);
1258   new_decl = STRIP_TEMPLATE (new_decl);
1259   if (!VAR_OR_FUNCTION_DECL_P (old_decl)
1260       || !VAR_OR_FUNCTION_DECL_P (new_decl))
1261     return true;
1262   if (DECL_DECLARED_CONSTEXPR_P (old_decl)
1263       == DECL_DECLARED_CONSTEXPR_P (new_decl))
1264     return true;
1265   if (TREE_CODE (old_decl) == FUNCTION_DECL)
1266     {
1267       if (DECL_BUILT_IN (old_decl))
1268         {
1269           /* Hide a built-in declaration.  */
1270           DECL_DECLARED_CONSTEXPR_P (old_decl)
1271             = DECL_DECLARED_CONSTEXPR_P (new_decl);
1272           return true;
1273         }
1274       /* 7.1.5 [dcl.constexpr]
1275          Note: An explicit specialization can differ from the template
1276          declaration with respect to the constexpr specifier.  */
1277       if (! DECL_TEMPLATE_SPECIALIZATION (old_decl)
1278           && DECL_TEMPLATE_SPECIALIZATION (new_decl))
1279         return true;
1280
1281       error ("redeclaration %q+D differs in %<constexpr%>", new_decl);
1282       error ("from previous declaration %q+D", old_decl);
1283       return false;
1284     }
1285   return true;
1286 }
1287
1288 // If OLDDECL and NEWDECL are concept declarations with the same type
1289 // (i.e., and template parameters), but different requirements,
1290 // emit diagnostics and return true. Otherwise, return false.
1291 static inline bool
1292 check_concept_refinement (tree olddecl, tree newdecl)
1293 {
1294   if (!DECL_DECLARED_CONCEPT_P (olddecl) || !DECL_DECLARED_CONCEPT_P (newdecl))
1295     return false;
1296
1297   tree d1 = DECL_TEMPLATE_RESULT (olddecl);
1298   tree d2 = DECL_TEMPLATE_RESULT (newdecl);
1299   if (TREE_CODE (d1) != TREE_CODE (d2))
1300     return false;
1301
1302   tree t1 = TREE_TYPE (d1);
1303   tree t2 = TREE_TYPE (d2);
1304   if (TREE_CODE (d1) == FUNCTION_DECL)
1305     {
1306       if (compparms (TYPE_ARG_TYPES (t1), TYPE_ARG_TYPES (t2))
1307           && comp_template_parms (DECL_TEMPLATE_PARMS (olddecl),
1308                                   DECL_TEMPLATE_PARMS (newdecl))
1309           && !equivalently_constrained (olddecl, newdecl))
1310         {
1311           error ("cannot specialize concept %q#D", olddecl);
1312           return true;
1313         }
1314     }
1315   return false;
1316 }
1317
1318 /* DECL is a redeclaration of a function or function template.  If
1319    it does have default arguments issue a diagnostic.  Note: this
1320    function is used to enforce the requirements in C++11 8.3.6 about
1321    no default arguments in redeclarations.  */
1322
1323 static void
1324 check_redeclaration_no_default_args (tree decl)
1325 {
1326   gcc_assert (DECL_DECLARES_FUNCTION_P (decl));
1327
1328   for (tree t = FUNCTION_FIRST_USER_PARMTYPE (decl);
1329        t && t != void_list_node; t = TREE_CHAIN (t))
1330     if (TREE_PURPOSE (t))
1331       {
1332         permerror (DECL_SOURCE_LOCATION (decl),
1333                    "redeclaration of %q#D may not have default "
1334                    "arguments", decl);
1335         return;
1336       }
1337 }
1338
1339 #define GNU_INLINE_P(fn) (DECL_DECLARED_INLINE_P (fn)                   \
1340                           && lookup_attribute ("gnu_inline",            \
1341                                                DECL_ATTRIBUTES (fn)))
1342
1343 /* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1344    If the redeclaration is invalid, a diagnostic is issued, and the
1345    error_mark_node is returned.  Otherwise, OLDDECL is returned.
1346
1347    If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
1348    returned.
1349
1350    NEWDECL_IS_FRIEND is true if NEWDECL was declared as a friend.  */
1351
1352 tree
1353 duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
1354 {
1355   unsigned olddecl_uid = DECL_UID (olddecl);
1356   int olddecl_friend = 0, types_match = 0, hidden_friend = 0;
1357   int new_defines_function = 0;
1358   tree new_template_info;
1359
1360   if (newdecl == olddecl)
1361     return olddecl;
1362
1363   types_match = decls_match (newdecl, olddecl);
1364
1365   /* If either the type of the new decl or the type of the old decl is an
1366      error_mark_node, then that implies that we have already issued an
1367      error (earlier) for some bogus type specification, and in that case,
1368      it is rather pointless to harass the user with yet more error message
1369      about the same declaration, so just pretend the types match here.  */
1370   if (TREE_TYPE (newdecl) == error_mark_node
1371       || TREE_TYPE (olddecl) == error_mark_node)
1372     return error_mark_node;
1373
1374   if (UDLIT_OPER_P (DECL_NAME (newdecl))
1375       && UDLIT_OPER_P (DECL_NAME (olddecl)))
1376     {
1377       if (TREE_CODE (newdecl) == TEMPLATE_DECL
1378           && TREE_CODE (olddecl) != TEMPLATE_DECL
1379           && check_raw_literal_operator (olddecl))
1380         error ("literal operator template %q+D conflicts with"
1381                " raw literal operator %qD", newdecl, olddecl);
1382       else if (TREE_CODE (newdecl) != TEMPLATE_DECL
1383                && TREE_CODE (olddecl) == TEMPLATE_DECL
1384                && check_raw_literal_operator (newdecl))
1385         error ("raw literal operator %q+D conflicts with"
1386                " literal operator template %qD", newdecl, olddecl);
1387     }
1388
1389   if (DECL_P (olddecl)
1390       && TREE_CODE (newdecl) == FUNCTION_DECL
1391       && TREE_CODE (olddecl) == FUNCTION_DECL
1392       && (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl)))
1393     {
1394       if (DECL_DECLARED_INLINE_P (newdecl)
1395           && DECL_UNINLINABLE (newdecl)
1396           && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1397         /* Already warned elsewhere.  */;
1398       else if (DECL_DECLARED_INLINE_P (olddecl)
1399                && DECL_UNINLINABLE (olddecl)
1400                && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1401         /* Already warned.  */;
1402       else if (DECL_DECLARED_INLINE_P (newdecl)
1403                && DECL_UNINLINABLE (olddecl)
1404                && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1405         {
1406           if (warning_at (DECL_SOURCE_LOCATION (newdecl),
1407                           OPT_Wattributes, "function %qD redeclared as inline",
1408                           newdecl))
1409             inform (DECL_SOURCE_LOCATION (olddecl),
1410                     "previous declaration of %qD with attribute noinline",
1411                     olddecl);
1412         }
1413       else if (DECL_DECLARED_INLINE_P (olddecl)
1414                && DECL_UNINLINABLE (newdecl)
1415                && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1416         {
1417           if (warning_at (DECL_SOURCE_LOCATION (newdecl),
1418                           OPT_Wattributes, "function %qD redeclared with "
1419                           "attribute noinline", newdecl))
1420             inform (DECL_SOURCE_LOCATION (olddecl),
1421                     "previous declaration of %qD was inline",
1422                     olddecl);
1423         }
1424     }
1425
1426   /* Check for redeclaration and other discrepancies.  */
1427   if (TREE_CODE (olddecl) == FUNCTION_DECL
1428       && DECL_ARTIFICIAL (olddecl))
1429     {
1430       gcc_assert (!DECL_HIDDEN_FRIEND_P (olddecl));
1431       if (TREE_CODE (newdecl) != FUNCTION_DECL)
1432         {
1433           /* Avoid warnings redeclaring built-ins which have not been
1434              explicitly declared.  */
1435           if (DECL_ANTICIPATED (olddecl))
1436             return NULL_TREE;
1437
1438           /* If you declare a built-in or predefined function name as static,
1439              the old definition is overridden, but optionally warn this was a
1440              bad choice of name.  */
1441           if (! TREE_PUBLIC (newdecl))
1442             {
1443               warning (OPT_Wshadow, 
1444                        DECL_BUILT_IN (olddecl)
1445                        ? G_("shadowing built-in function %q#D")
1446                        : G_("shadowing library function %q#D"), olddecl);
1447               /* Discard the old built-in function.  */
1448               return NULL_TREE;
1449             }
1450           /* If the built-in is not ansi, then programs can override
1451              it even globally without an error.  */
1452           else if (! DECL_BUILT_IN (olddecl))
1453             warning_at (DECL_SOURCE_LOCATION (newdecl), 0,
1454                         "library function %q#D redeclared as non-function %q#D",
1455                         olddecl, newdecl);
1456           else
1457             error ("declaration of %q+#D conflicts with built-in "
1458                    "declaration %q#D", newdecl, olddecl);
1459           return NULL_TREE;
1460         }
1461       else if (DECL_OMP_DECLARE_REDUCTION_P (olddecl))
1462         {
1463           gcc_assert (DECL_OMP_DECLARE_REDUCTION_P (newdecl));
1464           error_at (DECL_SOURCE_LOCATION (newdecl),
1465                     "redeclaration of %<pragma omp declare reduction%>");
1466           inform (DECL_SOURCE_LOCATION (olddecl),
1467                   "previous %<pragma omp declare reduction%> declaration");
1468           return error_mark_node;
1469         }
1470       else if (!types_match)
1471         {
1472           /* Avoid warnings redeclaring built-ins which have not been
1473              explicitly declared.  */
1474           if (DECL_ANTICIPATED (olddecl))
1475             {
1476               /* Deal with fileptr_type_node.  FILE type is not known
1477                  at the time we create the builtins.  */
1478               tree t1, t2;
1479
1480               for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1481                    t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1482                    t1 || t2;
1483                    t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1484                 if (!t1 || !t2)
1485                   break;
1486                 else if (TREE_VALUE (t2) == fileptr_type_node)
1487                   {
1488                     tree t = TREE_VALUE (t1);
1489
1490                     if (TYPE_PTR_P (t)
1491                         && TYPE_IDENTIFIER (TREE_TYPE (t))
1492                            == get_identifier ("FILE")
1493                         && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1494                       {
1495                         tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1496
1497                         TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1498                           = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1499                         types_match = decls_match (newdecl, olddecl);
1500                         if (types_match)
1501                           return duplicate_decls (newdecl, olddecl,
1502                                                   newdecl_is_friend);
1503                         TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1504                       }
1505                   }
1506                 else if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1507                   break;
1508             }
1509           else if ((DECL_EXTERN_C_P (newdecl)
1510                     && DECL_EXTERN_C_P (olddecl))
1511                    || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1512                                  TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1513             {
1514               /* A near match; override the builtin.  */
1515
1516               if (TREE_PUBLIC (newdecl))
1517                 warning_at (DECL_SOURCE_LOCATION (newdecl), 0,
1518                             "new declaration %q#D ambiguates built-in "
1519                             "declaration %q#D", newdecl, olddecl);
1520               else
1521                 warning (OPT_Wshadow, 
1522                          DECL_BUILT_IN (olddecl)
1523                          ? G_("shadowing built-in function %q#D")
1524                          : G_("shadowing library function %q#D"), olddecl);
1525             }
1526           else
1527             /* Discard the old built-in function.  */
1528             return NULL_TREE;
1529
1530           /* Replace the old RTL to avoid problems with inlining.  */
1531           COPY_DECL_RTL (newdecl, olddecl);
1532         }
1533       /* Even if the types match, prefer the new declarations type for
1534          built-ins which have not been explicitly declared, for
1535          exception lists, etc...  */
1536       else if (DECL_IS_BUILTIN (olddecl))
1537         {
1538           tree type = TREE_TYPE (newdecl);
1539           tree attribs = (*targetm.merge_type_attributes)
1540             (TREE_TYPE (olddecl), type);
1541
1542           type = cp_build_type_attribute_variant (type, attribs);
1543           TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
1544         }
1545
1546       /* If a function is explicitly declared "throw ()", propagate that to
1547          the corresponding builtin.  */
1548       if (DECL_BUILT_IN_CLASS (olddecl) == BUILT_IN_NORMAL
1549           && DECL_ANTICIPATED (olddecl)
1550           && TREE_NOTHROW (newdecl)
1551           && !TREE_NOTHROW (olddecl))
1552         {
1553           enum built_in_function fncode = DECL_FUNCTION_CODE (olddecl);
1554           tree tmpdecl = builtin_decl_explicit (fncode);
1555           if (tmpdecl && tmpdecl != olddecl && types_match)
1556             TREE_NOTHROW (tmpdecl)  = 1;
1557         }
1558
1559       /* Whether or not the builtin can throw exceptions has no
1560          bearing on this declarator.  */
1561       TREE_NOTHROW (olddecl) = 0;
1562
1563       if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1564         {
1565           /* If a builtin function is redeclared as `static', merge
1566              the declarations, but make the original one static.  */
1567           DECL_THIS_STATIC (olddecl) = 1;
1568           TREE_PUBLIC (olddecl) = 0;
1569
1570           /* Make the old declaration consistent with the new one so
1571              that all remnants of the builtin-ness of this function
1572              will be banished.  */
1573           SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1574           COPY_DECL_RTL (newdecl, olddecl);
1575         }
1576     }
1577   else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1578     {
1579       /* C++ Standard, 3.3, clause 4:
1580          "[Note: a namespace name or a class template name must be unique
1581          in its declarative region (7.3.2, clause 14). ]"  */
1582       if (TREE_CODE (olddecl) != NAMESPACE_DECL
1583           && TREE_CODE (newdecl) != NAMESPACE_DECL
1584           && (TREE_CODE (olddecl) != TEMPLATE_DECL
1585               || TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) != TYPE_DECL)
1586           && (TREE_CODE (newdecl) != TEMPLATE_DECL
1587               || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != TYPE_DECL))
1588         {
1589           if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1590                && TREE_CODE (newdecl) != TYPE_DECL)
1591               || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1592                   && TREE_CODE (olddecl) != TYPE_DECL))
1593             {
1594               /* We do nothing special here, because C++ does such nasty
1595                  things with TYPE_DECLs.  Instead, just let the TYPE_DECL
1596                  get shadowed, and know that if we need to find a TYPE_DECL
1597                  for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1598                  slot of the identifier.  */
1599               return NULL_TREE;
1600             }
1601             
1602             if ((TREE_CODE (newdecl) == FUNCTION_DECL
1603                  && DECL_FUNCTION_TEMPLATE_P (olddecl))
1604                 || (TREE_CODE (olddecl) == FUNCTION_DECL
1605                     && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1606               return NULL_TREE;
1607         }
1608
1609       error ("%q#D redeclared as different kind of symbol", newdecl);
1610       if (TREE_CODE (olddecl) == TREE_LIST)
1611         olddecl = TREE_VALUE (olddecl);
1612       inform (DECL_SOURCE_LOCATION (olddecl),
1613               "previous declaration %q#D", olddecl);
1614
1615       return error_mark_node;
1616     }
1617   else if (!types_match)
1618     {
1619       if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
1620         /* These are certainly not duplicate declarations; they're
1621            from different scopes.  */
1622         return NULL_TREE;
1623
1624       if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1625         {
1626           /* The name of a class template may not be declared to refer to
1627              any other template, class, function, object, namespace, value,
1628              or type in the same scope.  */
1629           if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1630               || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1631             {
1632               error ("conflicting declaration of template %q+#D", newdecl);
1633               inform (DECL_SOURCE_LOCATION (olddecl),
1634                       "previous declaration %q#D", olddecl);
1635               return error_mark_node;
1636             }
1637           else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1638                    && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1639                    && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
1640                                  TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
1641                    && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1642                                            DECL_TEMPLATE_PARMS (olddecl))
1643                    /* Template functions can be disambiguated by
1644                       return type.  */
1645                    && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1646                                    TREE_TYPE (TREE_TYPE (olddecl)))
1647                    // Template functions can also be disambiguated by
1648                    // constraints.
1649                    && equivalently_constrained (olddecl, newdecl))
1650             {
1651               error ("ambiguating new declaration %q+#D", newdecl);
1652               inform (DECL_SOURCE_LOCATION (olddecl),
1653                       "old declaration %q#D", olddecl);
1654             }
1655           else if (check_concept_refinement (olddecl, newdecl))
1656             return error_mark_node;
1657           return NULL_TREE;
1658         }
1659       if (TREE_CODE (newdecl) == FUNCTION_DECL)
1660         {
1661           if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
1662             {
1663               error ("conflicting declaration of C function %q+#D",
1664                      newdecl);
1665               inform (DECL_SOURCE_LOCATION (olddecl),
1666                       "previous declaration %q#D", olddecl);
1667               return NULL_TREE;
1668             }
1669           /* For function versions, params and types match, but they
1670              are not ambiguous.  */
1671           else if ((!DECL_FUNCTION_VERSIONED (newdecl)
1672                     && !DECL_FUNCTION_VERSIONED (olddecl))
1673                    // The functions have the same parameter types.
1674                    && compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1675                                  TYPE_ARG_TYPES (TREE_TYPE (olddecl)))
1676                    // And the same constraints.
1677                    && equivalently_constrained (newdecl, olddecl))
1678             {
1679               error ("ambiguating new declaration of %q+#D", newdecl);
1680               inform (DECL_SOURCE_LOCATION (olddecl),
1681                       "old declaration %q#D", olddecl);
1682               return error_mark_node;
1683             }
1684           else
1685             return NULL_TREE;
1686         }
1687       else
1688         {
1689           error ("conflicting declaration %q+#D", newdecl);
1690           inform (DECL_SOURCE_LOCATION (olddecl),
1691                   "previous declaration as %q#D", olddecl);
1692           return error_mark_node;
1693         }
1694     }
1695   else if (TREE_CODE (newdecl) == FUNCTION_DECL
1696             && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1697                  && (!DECL_TEMPLATE_INFO (newdecl)
1698                      || (DECL_TI_TEMPLATE (newdecl)
1699                          != DECL_TI_TEMPLATE (olddecl))))
1700                 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1701                     && (!DECL_TEMPLATE_INFO (olddecl)
1702                         || (DECL_TI_TEMPLATE (olddecl)
1703                             != DECL_TI_TEMPLATE (newdecl))))))
1704     /* It's OK to have a template specialization and a non-template
1705        with the same type, or to have specializations of two
1706        different templates with the same type.  Note that if one is a
1707        specialization, and the other is an instantiation of the same
1708        template, that we do not exit at this point.  That situation
1709        can occur if we instantiate a template class, and then
1710        specialize one of its methods.  This situation is valid, but
1711        the declarations must be merged in the usual way.  */
1712     return NULL_TREE;
1713   else if (TREE_CODE (newdecl) == FUNCTION_DECL
1714            && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
1715                 && !DECL_USE_TEMPLATE (newdecl))
1716                || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1717                    && !DECL_USE_TEMPLATE (olddecl))))
1718     /* One of the declarations is a template instantiation, and the
1719        other is not a template at all.  That's OK.  */
1720     return NULL_TREE;
1721   else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1722     {
1723       /* In [namespace.alias] we have:
1724
1725            In a declarative region, a namespace-alias-definition can be
1726            used to redefine a namespace-alias declared in that declarative
1727            region to refer only to the namespace to which it already
1728            refers.
1729
1730          Therefore, if we encounter a second alias directive for the same
1731          alias, we can just ignore the second directive.  */
1732       if (DECL_NAMESPACE_ALIAS (newdecl)
1733           && (DECL_NAMESPACE_ALIAS (newdecl)
1734               == DECL_NAMESPACE_ALIAS (olddecl)))
1735         return olddecl;
1736       /* [namespace.alias]
1737
1738          A namespace-name or namespace-alias shall not be declared as
1739          the name of any other entity in the same declarative region.
1740          A namespace-name defined at global scope shall not be
1741          declared as the name of any other entity in any global scope
1742          of the program.  */
1743       error ("conflicting declaration of namespace %q+D", newdecl);
1744       inform (DECL_SOURCE_LOCATION (olddecl),
1745               "previous declaration of namespace %qD here", olddecl);
1746       return error_mark_node;
1747     }
1748   else
1749     {
1750       const char *errmsg = redeclaration_error_message (newdecl, olddecl);
1751       if (errmsg)
1752         {
1753           error_at (DECL_SOURCE_LOCATION (newdecl), errmsg, newdecl);
1754           if (DECL_NAME (olddecl) != NULL_TREE)
1755             inform (DECL_SOURCE_LOCATION (olddecl),
1756                     (DECL_INITIAL (olddecl) && namespace_bindings_p ())
1757                     ? G_("%q#D previously defined here")
1758                     : G_("%q#D previously declared here"), olddecl);
1759           return error_mark_node;
1760         }
1761       else if (TREE_CODE (olddecl) == FUNCTION_DECL
1762                && DECL_INITIAL (olddecl) != NULL_TREE
1763                && !prototype_p (TREE_TYPE (olddecl))
1764                && prototype_p (TREE_TYPE (newdecl)))
1765         {
1766           /* Prototype decl follows defn w/o prototype.  */
1767           if (warning_at (DECL_SOURCE_LOCATION (newdecl), 0,
1768                           "prototype specified for %q#D", newdecl))
1769             inform (DECL_SOURCE_LOCATION (olddecl),
1770                     "previous non-prototype definition here");
1771         }
1772       else if (VAR_OR_FUNCTION_DECL_P (olddecl)
1773                && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
1774         {
1775           /* [dcl.link]
1776              If two declarations of the same function or object
1777              specify different linkage-specifications ..., the program
1778              is ill-formed.... Except for functions with C++ linkage,
1779              a function declaration without a linkage specification
1780              shall not precede the first linkage specification for
1781              that function.  A function can be declared without a
1782              linkage specification after an explicit linkage
1783              specification has been seen; the linkage explicitly
1784              specified in the earlier declaration is not affected by
1785              such a function declaration.
1786
1787              DR 563 raises the question why the restrictions on
1788              functions should not also apply to objects.  Older
1789              versions of G++ silently ignore the linkage-specification
1790              for this example:
1791
1792                namespace N { 
1793                  extern int i;
1794                  extern "C" int i;
1795                }
1796
1797              which is clearly wrong.  Therefore, we now treat objects
1798              like functions.  */
1799           if (current_lang_depth () == 0)
1800             {
1801               /* There is no explicit linkage-specification, so we use
1802                  the linkage from the previous declaration.  */
1803               if (!DECL_LANG_SPECIFIC (newdecl))
1804                 retrofit_lang_decl (newdecl);
1805               SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1806             }
1807           else
1808             {
1809               error ("conflicting declaration of %q+#D with %qL linkage",
1810                      newdecl, DECL_LANGUAGE (newdecl));
1811               inform (DECL_SOURCE_LOCATION (olddecl),
1812                       "previous declaration with %qL linkage",
1813                       DECL_LANGUAGE (olddecl));
1814             }
1815         }
1816
1817       if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
1818         ;
1819       else if (TREE_CODE (olddecl) == FUNCTION_DECL)
1820         {
1821           /* Note: free functions, as TEMPLATE_DECLs, are handled below.  */
1822           if (DECL_FUNCTION_MEMBER_P (olddecl)
1823               && (/* grokfndecl passes member function templates too
1824                      as FUNCTION_DECLs.  */
1825                   DECL_TEMPLATE_INFO (olddecl)
1826                   /* C++11 8.3.6/6.
1827                      Default arguments for a member function of a class
1828                      template shall be specified on the initial declaration
1829                      of the member function within the class template.  */
1830                   || CLASSTYPE_TEMPLATE_INFO (CP_DECL_CONTEXT (olddecl))))
1831             check_redeclaration_no_default_args (newdecl);
1832           else
1833             {
1834               tree t1 = FUNCTION_FIRST_USER_PARMTYPE (olddecl);
1835               tree t2 = FUNCTION_FIRST_USER_PARMTYPE (newdecl);
1836               int i = 1;
1837
1838               for (; t1 && t1 != void_list_node;
1839                    t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1840                 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1841                   {
1842                     if (1 == simple_cst_equal (TREE_PURPOSE (t1),
1843                                                TREE_PURPOSE (t2)))
1844                       {
1845                         if (permerror (input_location,
1846                                        "default argument given for parameter "
1847                                        "%d of %q#D", i, newdecl))
1848                           inform (DECL_SOURCE_LOCATION (olddecl),
1849                                   "previous specification in %q#D here",
1850                                   olddecl);
1851                       }
1852                     else
1853                       {
1854                         error ("default argument given for parameter %d "
1855                                "of %q#D", i, newdecl);
1856                         inform (DECL_SOURCE_LOCATION (olddecl),
1857                                 "previous specification in %q#D here",
1858                                 olddecl);
1859                       }
1860                   }
1861             }
1862         }
1863     }
1864
1865   /* Do not merge an implicit typedef with an explicit one.  In:
1866
1867        class A;
1868        ...
1869        typedef class A A __attribute__ ((foo));
1870
1871      the attribute should apply only to the typedef.  */
1872   if (TREE_CODE (olddecl) == TYPE_DECL
1873       && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1874           || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
1875     return NULL_TREE;
1876
1877   /* If new decl is `static' and an `extern' was seen previously,
1878      warn about it.  */
1879   warn_extern_redeclared_static (newdecl, olddecl);
1880
1881   if (!validate_constexpr_redeclaration (olddecl, newdecl))
1882     return error_mark_node;
1883
1884   /* We have committed to returning 1 at this point.  */
1885   if (TREE_CODE (newdecl) == FUNCTION_DECL)
1886     {
1887       /* Now that functions must hold information normally held
1888          by field decls, there is extra work to do so that
1889          declaration information does not get destroyed during
1890          definition.  */
1891       if (DECL_VINDEX (olddecl))
1892         DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1893       if (DECL_CONTEXT (olddecl))
1894         DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
1895       DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1896       DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1897       DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
1898       DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
1899       DECL_INVALID_OVERRIDER_P (newdecl) |= DECL_INVALID_OVERRIDER_P (olddecl);
1900       DECL_FINAL_P (newdecl) |= DECL_FINAL_P (olddecl);
1901       DECL_OVERRIDE_P (newdecl) |= DECL_OVERRIDE_P (olddecl);
1902       DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
1903       if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
1904         SET_OVERLOADED_OPERATOR_CODE
1905           (newdecl, DECL_OVERLOADED_OPERATOR_P (olddecl));
1906       new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
1907
1908       /* Optionally warn about more than one declaration for the same
1909          name, but don't warn about a function declaration followed by a
1910          definition.  */
1911       if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1912           && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
1913           /* Don't warn about extern decl followed by definition.  */
1914           && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
1915           /* Don't warn about friends, let add_friend take care of it.  */
1916           && ! (newdecl_is_friend || DECL_FRIEND_P (olddecl))
1917           /* Don't warn about declaration followed by specialization.  */
1918           && (! DECL_TEMPLATE_SPECIALIZATION (newdecl)
1919               || DECL_TEMPLATE_SPECIALIZATION (olddecl)))
1920         {
1921           if (warning_at (DECL_SOURCE_LOCATION (newdecl),
1922                           OPT_Wredundant_decls,
1923                           "redundant redeclaration of %qD in same scope",
1924                           newdecl))
1925             inform (DECL_SOURCE_LOCATION (olddecl),
1926                     "previous declaration of %qD", olddecl);
1927         }
1928
1929       if (!(DECL_TEMPLATE_INSTANTIATION (olddecl)
1930             && DECL_TEMPLATE_SPECIALIZATION (newdecl)))
1931         {
1932           if (DECL_DELETED_FN (newdecl))
1933             {
1934               error ("deleted definition of %q+D", newdecl);
1935               inform (DECL_SOURCE_LOCATION (olddecl),
1936                       "previous declaration of %qD", olddecl);
1937             }
1938           DECL_DELETED_FN (newdecl) |= DECL_DELETED_FN (olddecl);
1939         }
1940     }
1941
1942   /* Deal with C++: must preserve virtual function table size.  */
1943   if (TREE_CODE (olddecl) == TYPE_DECL)
1944     {
1945       tree newtype = TREE_TYPE (newdecl);
1946       tree oldtype = TREE_TYPE (olddecl);
1947
1948       if (newtype != error_mark_node && oldtype != error_mark_node
1949           && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
1950         CLASSTYPE_FRIEND_CLASSES (newtype)
1951           = CLASSTYPE_FRIEND_CLASSES (oldtype);
1952
1953       DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
1954     }
1955
1956   /* Copy all the DECL_... slots specified in the new decl
1957      except for any that we copy here from the old type.  */
1958   DECL_ATTRIBUTES (newdecl)
1959     = (*targetm.merge_decl_attributes) (olddecl, newdecl);
1960
1961   if (DECL_DECLARES_FUNCTION_P (olddecl) && DECL_DECLARES_FUNCTION_P (newdecl))
1962     {
1963       olddecl_friend = DECL_FRIEND_P (olddecl);
1964       hidden_friend = (DECL_ANTICIPATED (olddecl)
1965                        && DECL_HIDDEN_FRIEND_P (olddecl)
1966                        && newdecl_is_friend);
1967       if (!hidden_friend)
1968         {
1969           DECL_ANTICIPATED (olddecl) = 0;
1970           DECL_HIDDEN_FRIEND_P (olddecl) = 0;
1971         }
1972     }
1973
1974   if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1975     {
1976       tree old_result;
1977       tree new_result;
1978       old_result = DECL_TEMPLATE_RESULT (olddecl);
1979       new_result = DECL_TEMPLATE_RESULT (newdecl);
1980       TREE_TYPE (olddecl) = TREE_TYPE (old_result);
1981       DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
1982         = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
1983                    DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
1984
1985       DECL_ATTRIBUTES (old_result)
1986         = (*targetm.merge_decl_attributes) (old_result, new_result);
1987
1988       if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1989         {
1990           /* Per C++11 8.3.6/4, default arguments cannot be added in later
1991              declarations of a function template.  */
1992           if (DECL_SOURCE_LOCATION (newdecl)
1993               != DECL_SOURCE_LOCATION (olddecl))
1994             check_redeclaration_no_default_args (newdecl);
1995
1996           check_default_args (newdecl);
1997
1998           if (GNU_INLINE_P (old_result) != GNU_INLINE_P (new_result)
1999               && DECL_INITIAL (new_result))
2000             {
2001               if (DECL_INITIAL (old_result))
2002                 DECL_UNINLINABLE (old_result) = 1;
2003               else
2004                 DECL_UNINLINABLE (old_result) = DECL_UNINLINABLE (new_result);
2005               DECL_EXTERNAL (old_result) = DECL_EXTERNAL (new_result);
2006               DECL_NOT_REALLY_EXTERN (old_result)
2007                 = DECL_NOT_REALLY_EXTERN (new_result);
2008               DECL_INTERFACE_KNOWN (old_result)
2009                 = DECL_INTERFACE_KNOWN (new_result);
2010               DECL_DECLARED_INLINE_P (old_result)
2011                 = DECL_DECLARED_INLINE_P (new_result);
2012               DECL_DISREGARD_INLINE_LIMITS (old_result)
2013                 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
2014
2015             }
2016           else
2017             {
2018               DECL_DECLARED_INLINE_P (old_result)
2019                 |= DECL_DECLARED_INLINE_P (new_result);
2020               DECL_DISREGARD_INLINE_LIMITS (old_result)
2021                 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
2022               check_redeclaration_exception_specification (newdecl, olddecl);
2023             }
2024         }
2025
2026       /* If the new declaration is a definition, update the file and
2027          line information on the declaration, and also make
2028          the old declaration the same definition.  */
2029       if (DECL_INITIAL (new_result) != NULL_TREE)
2030         {
2031           DECL_SOURCE_LOCATION (olddecl)
2032             = DECL_SOURCE_LOCATION (old_result)
2033             = DECL_SOURCE_LOCATION (newdecl);
2034           DECL_INITIAL (old_result) = DECL_INITIAL (new_result);
2035           if (DECL_FUNCTION_TEMPLATE_P (newdecl))
2036             {
2037               tree parm;
2038               DECL_ARGUMENTS (old_result)
2039                 = DECL_ARGUMENTS (new_result);
2040               for (parm = DECL_ARGUMENTS (old_result); parm;
2041                    parm = DECL_CHAIN (parm))
2042                 DECL_CONTEXT (parm) = old_result;
2043             }
2044         }
2045
2046       return olddecl;
2047     }
2048
2049   if (types_match)
2050     {
2051       if (TREE_CODE (newdecl) == FUNCTION_DECL)
2052         check_redeclaration_exception_specification (newdecl, olddecl);
2053
2054       /* Automatically handles default parameters.  */
2055       tree oldtype = TREE_TYPE (olddecl);
2056       tree newtype;
2057
2058       /* For typedefs use the old type, as the new type's DECL_NAME points
2059          at newdecl, which will be ggc_freed.  */
2060       if (TREE_CODE (newdecl) == TYPE_DECL)
2061         {
2062           /* But NEWTYPE might have an attribute, honor that.  */
2063           tree tem = TREE_TYPE (newdecl);
2064           newtype = oldtype;
2065
2066           if (TYPE_USER_ALIGN (tem))
2067             {
2068               if (TYPE_ALIGN (tem) > TYPE_ALIGN (newtype))
2069                 SET_TYPE_ALIGN (newtype, TYPE_ALIGN (tem));
2070               TYPE_USER_ALIGN (newtype) = true;
2071             }
2072
2073           /* And remove the new type from the variants list.  */
2074           if (TYPE_NAME (TREE_TYPE (newdecl)) == newdecl)
2075             {
2076               tree remove = TREE_TYPE (newdecl);
2077               for (tree t = TYPE_MAIN_VARIANT (remove); ;
2078                    t = TYPE_NEXT_VARIANT (t))
2079                 if (TYPE_NEXT_VARIANT (t) == remove)
2080                   {
2081                     TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (remove);
2082                     break;
2083                   }
2084             }
2085         }
2086       else
2087         /* Merge the data types specified in the two decls.  */
2088         newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
2089
2090       if (VAR_P (newdecl))
2091         {
2092           DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
2093           /* For already initialized vars, TREE_READONLY could have been
2094              cleared in cp_finish_decl, because the var needs runtime
2095              initialization or destruction.  Make sure not to set
2096              TREE_READONLY on it again.  */
2097           if (DECL_INITIALIZED_P (olddecl)
2098               && !DECL_EXTERNAL (olddecl)
2099               && !TREE_READONLY (olddecl))
2100             TREE_READONLY (newdecl) = 0;
2101           DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
2102           DECL_NONTRIVIALLY_INITIALIZED_P (newdecl)
2103             |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl);
2104           DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
2105             |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
2106
2107           /* Merge the threadprivate attribute from OLDDECL into NEWDECL.  */
2108           if (DECL_LANG_SPECIFIC (olddecl)
2109               && CP_DECL_THREADPRIVATE_P (olddecl))
2110             {
2111               /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed.  */
2112               if (!DECL_LANG_SPECIFIC (newdecl))
2113                 retrofit_lang_decl (newdecl);
2114
2115               CP_DECL_THREADPRIVATE_P (newdecl) = 1;
2116             }
2117         }
2118
2119       /* An explicit specialization of a function template or of a member
2120          function of a class template can be declared transaction_safe
2121          independently of whether the corresponding template entity is declared
2122          transaction_safe. */
2123       if (flag_tm && TREE_CODE (newdecl) == FUNCTION_DECL
2124           && DECL_TEMPLATE_INSTANTIATION (olddecl)
2125           && DECL_TEMPLATE_SPECIALIZATION (newdecl)
2126           && tx_safe_fn_type_p (newtype)
2127           && !tx_safe_fn_type_p (TREE_TYPE (newdecl)))
2128         newtype = tx_unsafe_fn_variant (newtype);
2129
2130       TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
2131
2132       if (TREE_CODE (newdecl) == FUNCTION_DECL)
2133         check_default_args (newdecl);
2134
2135       /* Lay the type out, unless already done.  */
2136       if (! same_type_p (newtype, oldtype)
2137           && TREE_TYPE (newdecl) != error_mark_node
2138           && !(processing_template_decl && uses_template_parms (newdecl)))
2139         layout_type (TREE_TYPE (newdecl));
2140
2141       if ((VAR_P (newdecl)
2142            || TREE_CODE (newdecl) == PARM_DECL
2143            || TREE_CODE (newdecl) == RESULT_DECL
2144            || TREE_CODE (newdecl) == FIELD_DECL
2145            || TREE_CODE (newdecl) == TYPE_DECL)
2146           && !(processing_template_decl && uses_template_parms (newdecl)))
2147         layout_decl (newdecl, 0);
2148
2149       /* Merge the type qualifiers.  */
2150       if (TREE_READONLY (newdecl))
2151         TREE_READONLY (olddecl) = 1;
2152       if (TREE_THIS_VOLATILE (newdecl))
2153         TREE_THIS_VOLATILE (olddecl) = 1;
2154       if (TREE_NOTHROW (newdecl))
2155         TREE_NOTHROW (olddecl) = 1;
2156
2157       /* Merge deprecatedness.  */
2158       if (TREE_DEPRECATED (newdecl))
2159         TREE_DEPRECATED (olddecl) = 1;
2160
2161       /* Preserve function specific target and optimization options */
2162       if (TREE_CODE (newdecl) == FUNCTION_DECL)
2163         {
2164           if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl)
2165               && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl))
2166             DECL_FUNCTION_SPECIFIC_TARGET (newdecl)
2167               = DECL_FUNCTION_SPECIFIC_TARGET (olddecl);
2168
2169           if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl)
2170               && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl))
2171             DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl)
2172               = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl);
2173         }
2174
2175       /* Merge the initialization information.  */
2176       if (DECL_INITIAL (newdecl) == NULL_TREE
2177           && DECL_INITIAL (olddecl) != NULL_TREE)
2178         {
2179           DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
2180           DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
2181           if (TREE_CODE (newdecl) == FUNCTION_DECL)
2182             {
2183               DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
2184               DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
2185             }
2186         }
2187
2188       if (TREE_CODE (newdecl) == FUNCTION_DECL)
2189         {
2190           DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
2191             |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
2192           DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
2193           TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
2194           TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
2195           DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
2196           DECL_IS_OPERATOR_NEW (newdecl) |= DECL_IS_OPERATOR_NEW (olddecl);
2197           DECL_PURE_P (newdecl) |= DECL_PURE_P (olddecl);
2198           TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
2199           DECL_LOOPING_CONST_OR_PURE_P (newdecl) 
2200             |= DECL_LOOPING_CONST_OR_PURE_P (olddecl);
2201           /* Keep the old RTL.  */
2202           COPY_DECL_RTL (olddecl, newdecl);
2203         }
2204       else if (VAR_P (newdecl)
2205                && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
2206         {
2207           /* Keep the old RTL.  We cannot keep the old RTL if the old
2208              declaration was for an incomplete object and the new
2209              declaration is not since many attributes of the RTL will
2210              change.  */
2211           COPY_DECL_RTL (olddecl, newdecl);
2212         }
2213     }
2214   /* If cannot merge, then use the new type and qualifiers,
2215      and don't preserve the old rtl.  */
2216   else
2217     {
2218       /* Clean out any memory we had of the old declaration.  */
2219       tree oldstatic = value_member (olddecl, static_aggregates);
2220       if (oldstatic)
2221         TREE_VALUE (oldstatic) = error_mark_node;
2222
2223       TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
2224       TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
2225       TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
2226       TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
2227     }
2228
2229   /* Merge the storage class information.  */
2230   merge_weak (newdecl, olddecl);
2231
2232   DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
2233   TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
2234   TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
2235   if (! DECL_EXTERNAL (olddecl))
2236     DECL_EXTERNAL (newdecl) = 0;
2237   if (! DECL_COMDAT (olddecl))
2238     DECL_COMDAT (newdecl) = 0;
2239
2240   new_template_info = NULL_TREE;
2241   if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
2242     {
2243       bool new_redefines_gnu_inline = false;
2244
2245       if (new_defines_function
2246           && ((DECL_INTERFACE_KNOWN (olddecl)
2247                && TREE_CODE (olddecl) == FUNCTION_DECL)
2248               || (TREE_CODE (olddecl) == TEMPLATE_DECL
2249                   && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
2250                       == FUNCTION_DECL))))
2251         {
2252           tree fn = olddecl;
2253
2254           if (TREE_CODE (fn) == TEMPLATE_DECL)
2255             fn = DECL_TEMPLATE_RESULT (olddecl);
2256
2257           new_redefines_gnu_inline = GNU_INLINE_P (fn) && DECL_INITIAL (fn);
2258         }
2259
2260       if (!new_redefines_gnu_inline)
2261         {
2262           DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
2263           DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
2264           DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
2265         }
2266       DECL_TEMPLATE_INSTANTIATED (newdecl)
2267         |= DECL_TEMPLATE_INSTANTIATED (olddecl);
2268       DECL_ODR_USED (newdecl) |= DECL_ODR_USED (olddecl);
2269
2270       /* If the OLDDECL is an instantiation and/or specialization,
2271          then the NEWDECL must be too.  But, it may not yet be marked
2272          as such if the caller has created NEWDECL, but has not yet
2273          figured out that it is a redeclaration.  */
2274       if (!DECL_USE_TEMPLATE (newdecl))
2275         DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
2276
2277       /* Don't really know how much of the language-specific
2278          values we should copy from old to new.  */
2279       DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
2280       DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
2281       DECL_INITIALIZED_IN_CLASS_P (newdecl)
2282         |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
2283
2284       if (LANG_DECL_HAS_MIN (newdecl))
2285         {
2286           DECL_LANG_SPECIFIC (newdecl)->u.min.u2 =
2287             DECL_LANG_SPECIFIC (olddecl)->u.min.u2;
2288           if (DECL_TEMPLATE_INFO (newdecl))
2289             {
2290               new_template_info = DECL_TEMPLATE_INFO (newdecl);
2291               if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2292                   && DECL_TEMPLATE_SPECIALIZATION (newdecl))
2293                 /* Remember the presence of explicit specialization args.  */
2294                 TINFO_USED_TEMPLATE_ID (DECL_TEMPLATE_INFO (olddecl))
2295                   = TINFO_USED_TEMPLATE_ID (new_template_info);
2296             }
2297           DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
2298         }
2299       /* Only functions have these fields.  */
2300       if (DECL_DECLARES_FUNCTION_P (newdecl))
2301         {
2302           DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
2303           DECL_BEFRIENDING_CLASSES (newdecl)
2304             = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
2305                        DECL_BEFRIENDING_CLASSES (olddecl));
2306           /* DECL_THUNKS is only valid for virtual functions,
2307              otherwise it is a DECL_FRIEND_CONTEXT.  */
2308           if (DECL_VIRTUAL_P (newdecl))
2309             SET_DECL_THUNKS (newdecl, DECL_THUNKS (olddecl));
2310         }
2311       /* Only variables have this field.  */
2312       else if (VAR_P (newdecl)
2313                && VAR_HAD_UNKNOWN_BOUND (olddecl))
2314         SET_VAR_HAD_UNKNOWN_BOUND (newdecl);
2315     }
2316
2317   if (TREE_CODE (newdecl) == FUNCTION_DECL)
2318     {
2319       tree parm;
2320
2321       /* Merge parameter attributes. */
2322       tree oldarg, newarg;
2323       for (oldarg = DECL_ARGUMENTS(olddecl), 
2324                newarg = DECL_ARGUMENTS(newdecl);
2325            oldarg && newarg;
2326            oldarg = DECL_CHAIN(oldarg), newarg = DECL_CHAIN(newarg)) {
2327           DECL_ATTRIBUTES (newarg)
2328               = (*targetm.merge_decl_attributes) (oldarg, newarg);
2329           DECL_ATTRIBUTES (oldarg) = DECL_ATTRIBUTES (newarg);
2330       }
2331       
2332       if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2333           && !DECL_TEMPLATE_INSTANTIATION (newdecl))
2334         {
2335           /* If newdecl is not a specialization, then it is not a
2336              template-related function at all.  And that means that we
2337              should have exited above, returning 0.  */
2338           gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
2339
2340           if (DECL_ODR_USED (olddecl))
2341             /* From [temp.expl.spec]:
2342
2343                If a template, a member template or the member of a class
2344                template is explicitly specialized then that
2345                specialization shall be declared before the first use of
2346                that specialization that would cause an implicit
2347                instantiation to take place, in every translation unit in
2348                which such a use occurs.  */
2349             error ("explicit specialization of %qD after first use",
2350                       olddecl);
2351
2352           SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
2353           DECL_COMDAT (newdecl) = (TREE_PUBLIC (newdecl)
2354                                    && DECL_DECLARED_INLINE_P (newdecl));
2355
2356           /* Don't propagate visibility from the template to the
2357              specialization here.  We'll do that in determine_visibility if
2358              appropriate.  */
2359           DECL_VISIBILITY_SPECIFIED (olddecl) = 0;
2360
2361           /* [temp.expl.spec/14] We don't inline explicit specialization
2362              just because the primary template says so.  */
2363
2364           /* But still keep DECL_DISREGARD_INLINE_LIMITS in sync with
2365              the always_inline attribute.  */
2366           if (DECL_DISREGARD_INLINE_LIMITS (olddecl)
2367               && !DECL_DISREGARD_INLINE_LIMITS (newdecl))
2368             {
2369               if (DECL_DECLARED_INLINE_P (newdecl))
2370                 DECL_DISREGARD_INLINE_LIMITS (newdecl) = true;
2371               else
2372                 DECL_ATTRIBUTES (newdecl)
2373                   = remove_attribute ("always_inline",
2374                                       DECL_ATTRIBUTES (newdecl));
2375             }
2376         }
2377       else if (new_defines_function && DECL_INITIAL (olddecl))
2378         {
2379           /* Never inline re-defined extern inline functions.
2380              FIXME: this could be better handled by keeping both
2381              function as separate declarations.  */
2382           DECL_UNINLINABLE (newdecl) = 1;
2383         }
2384       else
2385         {
2386           if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
2387             DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
2388
2389           DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
2390
2391           DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
2392             = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
2393
2394           DECL_DISREGARD_INLINE_LIMITS (newdecl)
2395             = DECL_DISREGARD_INLINE_LIMITS (olddecl)
2396             = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
2397                || DECL_DISREGARD_INLINE_LIMITS (olddecl));
2398         }
2399
2400       /* Preserve abstractness on cloned [cd]tors.  */
2401       DECL_ABSTRACT_P (newdecl) = DECL_ABSTRACT_P (olddecl);
2402
2403       /* Update newdecl's parms to point at olddecl.  */
2404       for (parm = DECL_ARGUMENTS (newdecl); parm;
2405            parm = DECL_CHAIN (parm))
2406         DECL_CONTEXT (parm) = olddecl;
2407
2408       if (! types_match)
2409         {
2410           SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
2411           COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
2412           COPY_DECL_RTL (newdecl, olddecl);
2413         }
2414       if (! types_match || new_defines_function)
2415         {
2416           /* These need to be copied so that the names are available.
2417              Note that if the types do match, we'll preserve inline
2418              info and other bits, but if not, we won't.  */
2419           DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
2420           DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
2421         }
2422       /* If redeclaring a builtin function, it stays built in
2423          if newdecl is a gnu_inline definition, or if newdecl is just
2424          a declaration.  */
2425       if (DECL_BUILT_IN (olddecl)
2426           && (new_defines_function ? GNU_INLINE_P (newdecl) : types_match))
2427         {
2428           DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
2429           DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
2430           /* If we're keeping the built-in definition, keep the rtl,
2431              regardless of declaration matches.  */
2432           COPY_DECL_RTL (olddecl, newdecl);
2433           if (DECL_BUILT_IN_CLASS (newdecl) == BUILT_IN_NORMAL)
2434             {
2435               enum built_in_function fncode = DECL_FUNCTION_CODE (newdecl);
2436               switch (fncode)
2437                 {
2438                   /* If a compatible prototype of these builtin functions
2439                      is seen, assume the runtime implements it with the
2440                      expected semantics.  */
2441                 case BUILT_IN_STPCPY:
2442                   if (builtin_decl_explicit_p (fncode))
2443                     set_builtin_decl_implicit_p (fncode, true);
2444                   break;
2445                 default:
2446                   if (builtin_decl_explicit_p (fncode))
2447                     set_builtin_decl_declared_p (fncode, true);
2448                   break;
2449                 }
2450             }
2451         }
2452       if (new_defines_function)
2453         /* If defining a function declared with other language
2454            linkage, use the previously declared language linkage.  */
2455         SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
2456       else if (types_match)
2457         {
2458           DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
2459           /* Don't clear out the arguments if we're just redeclaring a
2460              function.  */
2461           if (DECL_ARGUMENTS (olddecl))
2462             DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
2463         }
2464     }
2465   else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
2466     NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
2467
2468   /* Now preserve various other info from the definition.  */
2469   TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
2470   TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
2471   DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
2472   COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
2473
2474   /* Warn about conflicting visibility specifications.  */
2475   if (DECL_VISIBILITY_SPECIFIED (olddecl)
2476       && DECL_VISIBILITY_SPECIFIED (newdecl)
2477       && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
2478     {
2479       if (warning_at (DECL_SOURCE_LOCATION (newdecl), OPT_Wattributes,
2480                       "%qD: visibility attribute ignored because it "
2481                       "conflicts with previous declaration", newdecl))
2482         inform (DECL_SOURCE_LOCATION (olddecl),
2483                 "previous declaration of %qD", olddecl);
2484     }
2485   /* Choose the declaration which specified visibility.  */
2486   if (DECL_VISIBILITY_SPECIFIED (olddecl))
2487     {
2488       DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
2489       DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2490     }
2491   /* Init priority used to be merged from newdecl to olddecl by the memcpy,
2492      so keep this behavior.  */
2493   if (VAR_P (newdecl) && DECL_HAS_INIT_PRIORITY_P (newdecl))
2494     {
2495       SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
2496       DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
2497     }
2498   /* Likewise for DECL_ALIGN, DECL_USER_ALIGN and DECL_PACKED.  */
2499   if (DECL_ALIGN (olddecl) > DECL_ALIGN (newdecl))
2500     {
2501       SET_DECL_ALIGN (newdecl, DECL_ALIGN (olddecl));
2502       DECL_USER_ALIGN (newdecl) |= DECL_USER_ALIGN (olddecl);
2503     }
2504   DECL_USER_ALIGN (olddecl) = DECL_USER_ALIGN (newdecl);
2505   if (TREE_CODE (newdecl) == FIELD_DECL)
2506     DECL_PACKED (olddecl) = DECL_PACKED (newdecl);
2507
2508   /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
2509      with that from NEWDECL below.  */
2510   if (DECL_LANG_SPECIFIC (olddecl))
2511     {
2512       gcc_assert (DECL_LANG_SPECIFIC (olddecl)
2513                   != DECL_LANG_SPECIFIC (newdecl));
2514       ggc_free (DECL_LANG_SPECIFIC (olddecl));
2515     }
2516
2517   /* Merge the USED information.  */
2518   if (TREE_USED (olddecl))
2519     TREE_USED (newdecl) = 1;
2520   else if (TREE_USED (newdecl))
2521     TREE_USED (olddecl) = 1;
2522   if (VAR_P (newdecl))
2523     {
2524       if (DECL_READ_P (olddecl))
2525         DECL_READ_P (newdecl) = 1;
2526       else if (DECL_READ_P (newdecl))
2527         DECL_READ_P (olddecl) = 1;
2528     }
2529   if (DECL_PRESERVE_P (olddecl))
2530     DECL_PRESERVE_P (newdecl) = 1;
2531   else if (DECL_PRESERVE_P (newdecl))
2532     DECL_PRESERVE_P (olddecl) = 1;
2533
2534   /* Merge the DECL_FUNCTION_VERSIONED information.  newdecl will be copied
2535      to olddecl and deleted.  */
2536   if (TREE_CODE (newdecl) == FUNCTION_DECL
2537       && DECL_FUNCTION_VERSIONED (olddecl))
2538     {
2539       /* Set the flag for newdecl so that it gets copied to olddecl.  */
2540       DECL_FUNCTION_VERSIONED (newdecl) = 1;
2541       /* newdecl will be purged after copying to olddecl and is no longer
2542          a version.  */
2543       cgraph_node::delete_function_version (newdecl);
2544     }
2545
2546   if (TREE_CODE (newdecl) == FUNCTION_DECL)
2547     {
2548       int function_size;
2549       struct symtab_node *snode = symtab_node::get (olddecl);
2550
2551       function_size = sizeof (struct tree_decl_common);
2552
2553       memcpy ((char *) olddecl + sizeof (struct tree_common),
2554               (char *) newdecl + sizeof (struct tree_common),
2555               function_size - sizeof (struct tree_common));
2556
2557       memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2558               (char *) newdecl + sizeof (struct tree_decl_common),
2559               sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common));
2560
2561       /* Preserve symtab node mapping.  */
2562       olddecl->decl_with_vis.symtab_node = snode;
2563
2564       if (new_template_info)
2565         /* If newdecl is a template instantiation, it is possible that
2566            the following sequence of events has occurred:
2567
2568            o A friend function was declared in a class template.  The
2569            class template was instantiated.
2570
2571            o The instantiation of the friend declaration was
2572            recorded on the instantiation list, and is newdecl.
2573
2574            o Later, however, instantiate_class_template called pushdecl
2575            on the newdecl to perform name injection.  But, pushdecl in
2576            turn called duplicate_decls when it discovered that another
2577            declaration of a global function with the same name already
2578            existed.
2579
2580            o Here, in duplicate_decls, we decided to clobber newdecl.
2581
2582            If we're going to do that, we'd better make sure that
2583            olddecl, and not newdecl, is on the list of
2584            instantiations so that if we try to do the instantiation
2585            again we won't get the clobbered declaration.  */
2586         reregister_specialization (newdecl,
2587                                    new_template_info,
2588                                    olddecl);
2589     }
2590   else
2591     {
2592       size_t size = tree_code_size (TREE_CODE (newdecl));
2593
2594       memcpy ((char *) olddecl + sizeof (struct tree_common),
2595               (char *) newdecl + sizeof (struct tree_common),
2596               sizeof (struct tree_decl_common) - sizeof (struct tree_common));
2597       switch (TREE_CODE (newdecl))
2598         {
2599         case LABEL_DECL:
2600         case VAR_DECL:
2601         case RESULT_DECL:
2602         case PARM_DECL:
2603         case FIELD_DECL:
2604         case TYPE_DECL:
2605         case CONST_DECL:
2606           {
2607             struct symtab_node *snode = NULL;
2608
2609             if (VAR_P (newdecl)
2610                 && (TREE_STATIC (olddecl) || TREE_PUBLIC (olddecl)
2611                     || DECL_EXTERNAL (olddecl)))
2612               snode = symtab_node::get (olddecl);
2613             memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2614                     (char *) newdecl + sizeof (struct tree_decl_common),
2615                     size - sizeof (struct tree_decl_common)
2616                     + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2617             if (VAR_P (newdecl))
2618               olddecl->decl_with_vis.symtab_node = snode;
2619           }
2620           break;
2621         default:
2622           memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2623                   (char *) newdecl + sizeof (struct tree_decl_common),
2624                   sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common)
2625                   + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2626           break;
2627         }
2628     }
2629
2630   if (VAR_OR_FUNCTION_DECL_P (newdecl))
2631     {
2632       if (DECL_EXTERNAL (olddecl)
2633           || TREE_PUBLIC (olddecl)
2634           || TREE_STATIC (olddecl))
2635         {
2636           /* Merge the section attribute.
2637              We want to issue an error if the sections conflict but that must be
2638              done later in decl_attributes since we are called before attributes
2639              are assigned.  */
2640           if (DECL_SECTION_NAME (newdecl) != NULL)
2641             set_decl_section_name (olddecl, DECL_SECTION_NAME (newdecl));
2642
2643           if (DECL_ONE_ONLY (newdecl))
2644             {
2645               struct symtab_node *oldsym, *newsym;
2646               if (TREE_CODE (olddecl) == FUNCTION_DECL)
2647                 oldsym = cgraph_node::get_create (olddecl);
2648               else
2649                 oldsym = varpool_node::get_create (olddecl);
2650               newsym = symtab_node::get (newdecl);
2651               oldsym->set_comdat_group (newsym->get_comdat_group ());
2652             }
2653         }
2654
2655       if (VAR_P (newdecl)
2656           && CP_DECL_THREAD_LOCAL_P (newdecl))
2657         {
2658           CP_DECL_THREAD_LOCAL_P (olddecl) = true;
2659           if (!processing_template_decl)
2660             set_decl_tls_model (olddecl, DECL_TLS_MODEL (newdecl));
2661         }
2662     }
2663
2664   DECL_UID (olddecl) = olddecl_uid;
2665   if (olddecl_friend)
2666     DECL_FRIEND_P (olddecl) = 1;
2667   if (hidden_friend)
2668     {
2669       DECL_ANTICIPATED (olddecl) = 1;
2670       DECL_HIDDEN_FRIEND_P (olddecl) = 1;
2671     }
2672
2673   /* NEWDECL contains the merged attribute lists.
2674      Update OLDDECL to be the same.  */
2675   DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
2676
2677   /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2678     so that encode_section_info has a chance to look at the new decl
2679     flags and attributes.  */
2680   if (DECL_RTL_SET_P (olddecl)
2681       && (TREE_CODE (olddecl) == FUNCTION_DECL
2682           || (VAR_P (olddecl)
2683               && TREE_STATIC (olddecl))))
2684     make_decl_rtl (olddecl);
2685
2686   /* The NEWDECL will no longer be needed.  Because every out-of-class
2687      declaration of a member results in a call to duplicate_decls,
2688      freeing these nodes represents in a significant savings.
2689
2690      Before releasing the node, be sore to remove function from symbol
2691      table that might have been inserted there to record comdat group.
2692      Be sure to however do not free DECL_STRUCT_FUNCTION because this
2693      structure is shared in between newdecl and oldecl.  */
2694   if (TREE_CODE (newdecl) == FUNCTION_DECL)
2695     DECL_STRUCT_FUNCTION (newdecl) = NULL;
2696   if (VAR_OR_FUNCTION_DECL_P (newdecl))
2697     {
2698       struct symtab_node *snode = symtab_node::get (newdecl);
2699       if (snode)
2700         snode->remove ();
2701     }
2702
2703   /* Remove the associated constraints for newdecl, if any, before
2704      reclaiming memory. */
2705   if (flag_concepts)
2706     remove_constraints (newdecl);
2707
2708   ggc_free (newdecl);
2709
2710   return olddecl;
2711 }
2712 \f
2713 /* Return zero if the declaration NEWDECL is valid
2714    when the declaration OLDDECL (assumed to be for the same name)
2715    has already been seen.
2716    Otherwise return an error message format string with a %s
2717    where the identifier should go.  */
2718
2719 static const char *
2720 redeclaration_error_message (tree newdecl, tree olddecl)
2721 {
2722   if (TREE_CODE (newdecl) == TYPE_DECL)
2723     {
2724       /* Because C++ can put things into name space for free,
2725          constructs like "typedef struct foo { ... } foo"
2726          would look like an erroneous redeclaration.  */
2727       if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
2728         return NULL;
2729       else
2730         return G_("redefinition of %q#D");
2731     }
2732   else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2733     {
2734       /* If this is a pure function, its olddecl will actually be
2735          the original initialization to `0' (which we force to call
2736          abort()).  Don't complain about redefinition in this case.  */
2737       if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
2738           && DECL_INITIAL (olddecl) == NULL_TREE)
2739         return NULL;
2740
2741       /* If both functions come from different namespaces, this is not
2742          a redeclaration - this is a conflict with a used function.  */
2743       if (DECL_NAMESPACE_SCOPE_P (olddecl)
2744           && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
2745           && ! decls_match (olddecl, newdecl))
2746         return G_("%qD conflicts with used function");
2747
2748       /* We'll complain about linkage mismatches in
2749          warn_extern_redeclared_static.  */
2750
2751       /* Defining the same name twice is no good.  */
2752       if (DECL_INITIAL (olddecl) != NULL_TREE
2753           && DECL_INITIAL (newdecl) != NULL_TREE)
2754         {
2755           if (DECL_NAME (olddecl) == NULL_TREE)
2756             return G_("%q#D not declared in class");
2757           else if (!GNU_INLINE_P (olddecl)
2758                    || GNU_INLINE_P (newdecl))
2759             return G_("redefinition of %q#D");
2760         }
2761
2762       if (DECL_DECLARED_INLINE_P (olddecl) && DECL_DECLARED_INLINE_P (newdecl))
2763         {
2764           bool olda = GNU_INLINE_P (olddecl);
2765           bool newa = GNU_INLINE_P (newdecl);
2766
2767           if (olda != newa)
2768             {
2769               if (newa)
2770                 return G_("%q+D redeclared inline with "
2771                           "%<gnu_inline%> attribute");
2772               else
2773                 return G_("%q+D redeclared inline without "
2774                           "%<gnu_inline%> attribute");
2775             }
2776         }
2777
2778       check_abi_tag_redeclaration
2779         (olddecl, lookup_attribute ("abi_tag", DECL_ATTRIBUTES (olddecl)),
2780          lookup_attribute ("abi_tag", DECL_ATTRIBUTES (newdecl)));
2781
2782       return NULL;
2783     }
2784   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2785     {
2786       tree nt, ot;
2787
2788       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2789         {
2790           if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
2791               && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
2792             return G_("redefinition of %q#D");
2793           return NULL;
2794         }
2795
2796       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
2797           || (DECL_TEMPLATE_RESULT (newdecl)
2798               == DECL_TEMPLATE_RESULT (olddecl)))
2799         return NULL;
2800
2801       nt = DECL_TEMPLATE_RESULT (newdecl);
2802       if (DECL_TEMPLATE_INFO (nt))
2803         nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
2804       ot = DECL_TEMPLATE_RESULT (olddecl);
2805       if (DECL_TEMPLATE_INFO (ot))
2806         ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
2807       if (DECL_INITIAL (nt) && DECL_INITIAL (ot)
2808           && (!GNU_INLINE_P (ot) || GNU_INLINE_P (nt)))
2809         return G_("redefinition of %q#D");
2810
2811       if (DECL_DECLARED_INLINE_P (ot) && DECL_DECLARED_INLINE_P (nt))
2812         {
2813           bool olda = GNU_INLINE_P (ot);
2814           bool newa = GNU_INLINE_P (nt);
2815
2816           if (olda != newa)
2817             {
2818               if (newa)
2819                 return G_("%q+D redeclared inline with "
2820                           "%<gnu_inline%> attribute");
2821               else
2822                 return G_("%q+D redeclared inline without "
2823                           "%<gnu_inline%> attribute");
2824             }
2825         }
2826
2827       /* Core issue #226 (C++0x): 
2828            
2829            If a friend function template declaration specifies a
2830            default template-argument, that declaration shall be a
2831            definition and shall be the only declaration of the
2832            function template in the translation unit.  */
2833       if ((cxx_dialect != cxx98) 
2834           && TREE_CODE (ot) == FUNCTION_DECL && DECL_FRIEND_P (ot)
2835           && !check_default_tmpl_args (nt, DECL_TEMPLATE_PARMS (newdecl), 
2836                                        /*is_primary=*/true,
2837                                        /*is_partial=*/false,
2838                                        /*is_friend_decl=*/2))
2839         return G_("redeclaration of friend %q#D "
2840                   "may not have default template arguments");
2841
2842       return NULL;
2843     }
2844   else if (VAR_P (newdecl)
2845            && CP_DECL_THREAD_LOCAL_P (newdecl) != CP_DECL_THREAD_LOCAL_P (olddecl)
2846            && (! DECL_LANG_SPECIFIC (olddecl)
2847                || ! CP_DECL_THREADPRIVATE_P (olddecl)
2848                || CP_DECL_THREAD_LOCAL_P (newdecl)))
2849     {
2850       /* Only variables can be thread-local, and all declarations must
2851          agree on this property.  */
2852       if (CP_DECL_THREAD_LOCAL_P (newdecl))
2853         return G_("thread-local declaration of %q#D follows "
2854                   "non-thread-local declaration");
2855       else
2856         return G_("non-thread-local declaration of %q#D follows "
2857                   "thread-local declaration");
2858     }
2859   else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
2860     {
2861       /* The objects have been declared at namespace scope.  If either
2862          is a member of an anonymous union, then this is an invalid
2863          redeclaration.  For example:
2864
2865            int i;
2866            union { int i; };
2867
2868            is invalid.  */
2869       if ((VAR_P (newdecl) && DECL_ANON_UNION_VAR_P (newdecl))
2870           || (VAR_P (olddecl) && DECL_ANON_UNION_VAR_P (olddecl)))
2871         return G_("redeclaration of %q#D");
2872       /* If at least one declaration is a reference, there is no
2873          conflict.  For example:
2874
2875            int i = 3;
2876            extern int i;
2877
2878          is valid.  */
2879       if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
2880         return NULL;
2881       /* Reject two definitions.  */
2882       return G_("redefinition of %q#D");
2883     }
2884   else
2885     {
2886       /* Objects declared with block scope:  */
2887       /* Reject two definitions, and reject a definition
2888          together with an external reference.  */
2889       if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
2890         return G_("redeclaration of %q#D");
2891       return NULL;
2892     }
2893 }
2894 \f
2895 /* Hash and equality functions for the named_label table.  */
2896
2897 hashval_t
2898 named_label_hasher::hash (named_label_entry *ent)
2899 {
2900   return DECL_UID (ent->label_decl);
2901 }
2902
2903 bool
2904 named_label_hasher::equal (named_label_entry *a, named_label_entry *b)
2905 {
2906   return a->label_decl == b->label_decl;
2907 }
2908
2909 /* Create a new label, named ID.  */
2910
2911 static tree
2912 make_label_decl (tree id, int local_p)
2913 {
2914   struct named_label_entry *ent;
2915   tree decl;
2916
2917   decl = build_decl (input_location, LABEL_DECL, id, void_type_node);
2918
2919   DECL_CONTEXT (decl) = current_function_decl;
2920   DECL_MODE (decl) = VOIDmode;
2921   C_DECLARED_LABEL_FLAG (decl) = local_p;
2922
2923   /* Say where one reference is to the label, for the sake of the
2924      error if it is not defined.  */
2925   DECL_SOURCE_LOCATION (decl) = input_location;
2926
2927   /* Record the fact that this identifier is bound to this label.  */
2928   SET_IDENTIFIER_LABEL_VALUE (id, decl);
2929
2930   /* Create the label htab for the function on demand.  */
2931   if (!named_labels)
2932     named_labels = hash_table<named_label_hasher>::create_ggc (13);
2933
2934   /* Record this label on the list of labels used in this function.
2935      We do this before calling make_label_decl so that we get the
2936      IDENTIFIER_LABEL_VALUE before the new label is declared.  */
2937   ent = ggc_cleared_alloc<named_label_entry> ();
2938   ent->label_decl = decl;
2939
2940   named_label_entry **slot = named_labels->find_slot (ent, INSERT);
2941   gcc_assert (*slot == NULL);
2942   *slot = ent;
2943
2944   return decl;
2945 }
2946
2947 /* Look for a label named ID in the current function.  If one cannot
2948    be found, create one.  (We keep track of used, but undefined,
2949    labels, and complain about them at the end of a function.)  */
2950
2951 static tree
2952 lookup_label_1 (tree id)
2953 {
2954   tree decl;
2955
2956   /* You can't use labels at global scope.  */
2957   if (current_function_decl == NULL_TREE)
2958     {
2959       error ("label %qE referenced outside of any function", id);
2960       return NULL_TREE;
2961     }
2962
2963   /* See if we've already got this label.  */
2964   decl = IDENTIFIER_LABEL_VALUE (id);
2965   if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
2966     return decl;
2967
2968   decl = make_label_decl (id, /*local_p=*/0);
2969   return decl;
2970 }
2971
2972 /* Wrapper for lookup_label_1.  */
2973
2974 tree
2975 lookup_label (tree id)
2976 {
2977   tree ret;
2978   bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
2979   ret = lookup_label_1 (id);
2980   timevar_cond_stop (TV_NAME_LOOKUP, subtime);
2981   return ret;
2982 }
2983
2984 /* Declare a local label named ID.  */
2985
2986 tree
2987 declare_local_label (tree id)
2988 {
2989   tree decl;
2990   cp_label_binding bind;
2991
2992   /* Add a new entry to the SHADOWED_LABELS list so that when we leave
2993      this scope we can restore the old value of IDENTIFIER_TYPE_VALUE.  */
2994   bind.prev_value = IDENTIFIER_LABEL_VALUE (id);
2995
2996   decl = make_label_decl (id, /*local_p=*/1);
2997   bind.label = decl;
2998   vec_safe_push (current_binding_level->shadowed_labels, bind);
2999
3000   return decl;
3001 }
3002
3003 /* Returns nonzero if it is ill-formed to jump past the declaration of
3004    DECL.  Returns 2 if it's also a real problem.  */
3005
3006 static int
3007 decl_jump_unsafe (tree decl)
3008 {
3009   /* [stmt.dcl]/3: A program that jumps from a point where a local variable
3010      with automatic storage duration is not in scope to a point where it is
3011      in scope is ill-formed unless the variable has scalar type, class type
3012      with a trivial default constructor and a trivial destructor, a
3013      cv-qualified version of one of these types, or an array of one of the
3014      preceding types and is declared without an initializer (8.5).  */
3015   tree type = TREE_TYPE (decl);
3016
3017   if (!VAR_P (decl) || TREE_STATIC (decl)
3018       || type == error_mark_node)
3019     return 0;
3020
3021   if (DECL_NONTRIVIALLY_INITIALIZED_P (decl)
3022       || variably_modified_type_p (type, NULL_TREE))
3023     return 2;
3024
3025   if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3026     return 1;
3027
3028   return 0;
3029 }
3030
3031 /* A subroutine of check_previous_goto_1 and check_goto to identify a branch
3032    to the user.  */
3033
3034 static bool
3035 identify_goto (tree decl, location_t loc, const location_t *locus,
3036                diagnostic_t diag_kind)
3037 {
3038   bool complained
3039     = (decl ? emit_diagnostic (diag_kind, loc, 0, "jump to label %qD", decl)
3040             : emit_diagnostic (diag_kind, loc, 0, "jump to case label"));
3041   if (complained && locus)
3042     inform (*locus, "  from here");
3043   return complained;
3044 }
3045
3046 /* Check that a single previously seen jump to a newly defined label
3047    is OK.  DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
3048    the jump context; NAMES are the names in scope in LEVEL at the jump
3049    context; LOCUS is the source position of the jump or 0.  Returns
3050    true if all is well.  */
3051
3052 static bool
3053 check_previous_goto_1 (tree decl, cp_binding_level* level, tree names,
3054                        bool exited_omp, const location_t *locus)
3055 {
3056   cp_binding_level *b;
3057   bool complained = false;
3058   int identified = 0;
3059   bool saw_eh = false, saw_omp = false, saw_tm = false;
3060
3061   if (exited_omp)
3062     {
3063       complained = identify_goto (decl, input_location, locus, DK_ERROR);
3064       if (complained)
3065         inform (input_location, "  exits OpenMP structured block");
3066       saw_omp = true;
3067       identified = 2;
3068     }
3069
3070   for (b = current_binding_level; b ; b = b->level_chain)
3071     {
3072       tree new_decls, old_decls = (b == level ? names : NULL_TREE);
3073
3074       for (new_decls = b->names; new_decls != old_decls;
3075            new_decls = (DECL_P (new_decls) ? DECL_CHAIN (new_decls)
3076                         : TREE_CHAIN (new_decls)))
3077         {
3078           int problem = decl_jump_unsafe (new_decls);
3079           if (! problem)
3080             continue;
3081
3082           if (!identified)
3083             {
3084               complained = identify_goto (decl, input_location, locus,
3085                                           DK_PERMERROR);
3086               identified = 1;
3087             }
3088           if (complained)
3089             {
3090               if (problem > 1)
3091                 inform (DECL_SOURCE_LOCATION (new_decls),
3092                         "  crosses initialization of %q#D", new_decls);
3093               else
3094                 inform (DECL_SOURCE_LOCATION (new_decls),
3095                         "  enters scope of %q#D which has "
3096                         "non-trivial destructor", new_decls);
3097             }
3098         }
3099
3100       if (b == level)
3101         break;
3102       if ((b->kind == sk_try || b->kind == sk_catch) && !saw_eh)
3103         {
3104           if (identified < 2)
3105             {
3106               complained = identify_goto (decl, input_location, locus,
3107                                           DK_ERROR);
3108               identified = 2;
3109             }
3110           if (complained)
3111             {
3112               if (b->kind == sk_try)
3113                 inform (input_location, "  enters try block");
3114               else
3115                 inform (input_location, "  enters catch block");
3116             }
3117           saw_eh = true;
3118         }
3119       if (b->kind == sk_omp && !saw_omp)
3120         {
3121           if (identified < 2)
3122             {
3123               complained = identify_goto (decl, input_location, locus,
3124                                           DK_ERROR);
3125               identified = 2;
3126             }
3127           if (complained)
3128             inform (input_location, "  enters OpenMP structured block");
3129           saw_omp = true;
3130         }
3131       if (b->kind == sk_transaction && !saw_tm)
3132         {
3133           if (identified < 2)
3134             {
3135               complained = identify_goto (decl, input_location, locus,
3136                                           DK_ERROR);
3137               identified = 2;
3138             }
3139           if (complained)
3140             inform (input_location,
3141                     "  enters synchronized or atomic statement");
3142           saw_tm = true;
3143         }
3144     }
3145
3146   return !identified;
3147 }
3148
3149 static void
3150 check_previous_goto (tree decl, struct named_label_use_entry *use)
3151 {
3152   check_previous_goto_1 (decl, use->binding_level,
3153                          use->names_in_scope, use->in_omp_scope,
3154                          &use->o_goto_locus);
3155 }
3156
3157 static bool
3158 check_switch_goto (cp_binding_level* level)
3159 {
3160   return check_previous_goto_1 (NULL_TREE, level, level->names, false, NULL);
3161 }
3162
3163 /* Check that a new jump to a label DECL is OK.  Called by
3164    finish_goto_stmt.  */
3165
3166 void
3167 check_goto (tree decl)
3168 {
3169   struct named_label_entry *ent, dummy;
3170   bool saw_catch = false, complained = false;
3171   int identified = 0;
3172   tree bad;
3173   unsigned ix;
3174
3175   /* We can't know where a computed goto is jumping.
3176      So we assume that it's OK.  */
3177   if (TREE_CODE (decl) != LABEL_DECL)
3178     return;
3179
3180   /* We didn't record any information about this label when we created it,
3181      and there's not much point since it's trivial to analyze as a return.  */
3182   if (decl == cdtor_label)
3183     return;
3184
3185   dummy.label_decl = decl;
3186   ent = named_labels->find (&dummy);
3187   gcc_assert (ent != NULL);
3188
3189   /* If the label hasn't been defined yet, defer checking.  */
3190   if (! DECL_INITIAL (decl))
3191     {
3192       struct named_label_use_entry *new_use;
3193
3194       /* Don't bother creating another use if the last goto had the
3195          same data, and will therefore create the same set of errors.  */
3196       if (ent->uses
3197           && ent->uses->names_in_scope == current_binding_level->names)
3198         return;
3199
3200       new_use = ggc_alloc<named_label_use_entry> ();
3201       new_use->binding_level = current_binding_level;
3202       new_use->names_in_scope = current_binding_level->names;
3203       new_use->o_goto_locus = input_location;
3204       new_use->in_omp_scope = false;
3205
3206       new_use->next = ent->uses;
3207       ent->uses = new_use;
3208       return;
3209     }
3210
3211   if (ent->in_try_scope || ent->in_catch_scope || ent->in_transaction_scope
3212       || ent->in_omp_scope || !vec_safe_is_empty (ent->bad_decls))
3213     {
3214       diagnostic_t diag_kind = DK_PERMERROR;
3215       if (ent->in_try_scope || ent->in_catch_scope
3216           || ent->in_transaction_scope || ent->in_omp_scope)
3217         diag_kind = DK_ERROR;
3218       complained = identify_goto (decl, DECL_SOURCE_LOCATION (decl),
3219                                   &input_location, diag_kind);
3220       identified = 1 + (diag_kind == DK_ERROR);
3221     }
3222
3223   FOR_EACH_VEC_SAFE_ELT (ent->bad_decls, ix, bad)
3224     {
3225       int u = decl_jump_unsafe (bad);
3226
3227       if (u > 1 && DECL_ARTIFICIAL (bad))
3228         {
3229           /* Can't skip init of __exception_info.  */
3230           if (identified == 1)
3231             {
3232               complained = identify_goto (decl, DECL_SOURCE_LOCATION (decl),
3233                                           &input_location, DK_ERROR);
3234               identified = 2;
3235             }
3236           if (complained)
3237             inform (DECL_SOURCE_LOCATION (bad), "  enters catch block");
3238           saw_catch = true;
3239         }
3240       else if (complained)
3241         {
3242           if (u > 1)
3243             inform (DECL_SOURCE_LOCATION (bad),
3244                     "  skips initialization of %q#D", bad);
3245           else
3246             inform (DECL_SOURCE_LOCATION (bad),
3247                     "  enters scope of %q#D which has "
3248                     "non-trivial destructor", bad);
3249         }
3250     }
3251
3252   if (complained)
3253     {
3254       if (ent->in_try_scope)
3255         inform (input_location, "  enters try block");
3256       else if (ent->in_catch_scope && !saw_catch)
3257         inform (input_location, "  enters catch block");
3258       else if (ent->in_transaction_scope)
3259         inform (input_location, "  enters synchronized or atomic statement");
3260     }
3261
3262   if (ent->in_omp_scope)
3263     {
3264       if (complained)
3265         inform (input_location, "  enters OpenMP structured block");
3266     }
3267   else if (flag_openmp)
3268     {
3269       cp_binding_level *b;
3270       for (b = current_binding_level; b ; b = b->level_chain)
3271         {
3272           if (b == ent->binding_level)
3273             break;
3274           if (b->kind == sk_omp)
3275             {
3276               if (identified < 2)
3277                 {
3278                   complained = identify_goto (decl,
3279                                               DECL_SOURCE_LOCATION (decl),
3280                                               &input_location, DK_ERROR);
3281                   identified = 2;
3282                 }
3283               if (complained)
3284                 inform (input_location, "  exits OpenMP structured block");
3285               break;
3286             }
3287         }
3288     }
3289 }
3290
3291 /* Check that a return is ok wrt OpenMP structured blocks.
3292    Called by finish_return_stmt.  Returns true if all is well.  */
3293
3294 bool
3295 check_omp_return (void)
3296 {
3297   cp_binding_level *b;
3298   for (b = current_binding_level; b ; b = b->level_chain)
3299     if (b->kind == sk_omp)
3300       {
3301         error ("invalid exit from OpenMP structured block");
3302         return false;
3303       }
3304     else if (b->kind == sk_function_parms)
3305       break;
3306   return true;
3307 }
3308
3309 /* Define a label, specifying the location in the source file.
3310    Return the LABEL_DECL node for the label.  */
3311
3312 static tree
3313 define_label_1 (location_t location, tree name)
3314 {
3315   struct named_label_entry *ent, dummy;
3316   cp_binding_level *p;
3317   tree decl;
3318
3319   decl = lookup_label (name);
3320
3321   dummy.label_decl = decl;
3322   ent = named_labels->find (&dummy);
3323   gcc_assert (ent != NULL);
3324
3325   /* After labels, make any new cleanups in the function go into their
3326      own new (temporary) binding contour.  */
3327   for (p = current_binding_level;
3328        p->kind != sk_function_parms;
3329        p = p->level_chain)
3330     p->more_cleanups_ok = 0;
3331
3332   if (name == get_identifier ("wchar_t"))
3333     permerror (input_location, "label named wchar_t");
3334
3335   if (DECL_INITIAL (decl) != NULL_TREE)
3336     {
3337       error ("duplicate label %qD", decl);
3338       return error_mark_node;
3339     }
3340   else
3341     {
3342       struct named_label_use_entry *use;
3343
3344       /* Mark label as having been defined.  */
3345       DECL_INITIAL (decl) = error_mark_node;
3346       /* Say where in the source.  */
3347       DECL_SOURCE_LOCATION (decl) = location;
3348
3349       ent->binding_level = current_binding_level;
3350       ent->names_in_scope = current_binding_level->names;
3351
3352       for (use = ent->uses; use ; use = use->next)
3353         check_previous_goto (decl, use);
3354       ent->uses = NULL;
3355     }
3356
3357   return decl;
3358 }
3359
3360 /* Wrapper for define_label_1.  */
3361
3362 tree
3363 define_label (location_t location, tree name)
3364 {
3365   tree ret;
3366   bool running = timevar_cond_start (TV_NAME_LOOKUP);
3367   ret = define_label_1 (location, name);
3368   timevar_cond_stop (TV_NAME_LOOKUP, running);
3369   return ret;
3370 }
3371
3372
3373 struct cp_switch
3374 {
3375   cp_binding_level *level;
3376   struct cp_switch *next;
3377   /* The SWITCH_STMT being built.  */
3378   tree switch_stmt;
3379   /* A splay-tree mapping the low element of a case range to the high
3380      element, or NULL_TREE if there is no high element.  Used to
3381      determine whether or not a new case label duplicates an old case
3382      label.  We need a tree, rather than simply a hash table, because
3383      of the GNU case range extension.  */
3384   splay_tree cases;
3385   /* Remember whether there was a case value that is outside the
3386      range of the original type of the controlling expression.  */
3387   bool outside_range_p;
3388 };
3389
3390 /* A stack of the currently active switch statements.  The innermost
3391    switch statement is on the top of the stack.  There is no need to
3392    mark the stack for garbage collection because it is only active
3393    during the processing of the body of a function, and we never
3394    collect at that point.  */
3395
3396 static struct cp_switch *switch_stack;
3397
3398 /* Called right after a switch-statement condition is parsed.
3399    SWITCH_STMT is the switch statement being parsed.  */
3400
3401 void
3402 push_switch (tree switch_stmt)
3403 {
3404   struct cp_switch *p = XNEW (struct cp_switch);
3405   p->level = current_binding_level;
3406   p->next = switch_stack;
3407   p->switch_stmt = switch_stmt;
3408   p->cases = splay_tree_new (case_compare, NULL, NULL);
3409   p->outside_range_p = false;
3410   switch_stack = p;
3411 }
3412
3413 void
3414 pop_switch (void)
3415 {
3416   struct cp_switch *cs = switch_stack;
3417   location_t switch_location;
3418
3419   /* Emit warnings as needed.  */
3420   switch_location = EXPR_LOC_OR_LOC (cs->switch_stmt, input_location);
3421   const bool bool_cond_p
3422     = (SWITCH_STMT_TYPE (cs->switch_stmt)
3423        && TREE_CODE (SWITCH_STMT_TYPE (cs->switch_stmt)) == BOOLEAN_TYPE);
3424   if (!processing_template_decl)
3425     c_do_switch_warnings (cs->cases, switch_location,
3426                           SWITCH_STMT_TYPE (cs->switch_stmt),
3427                           SWITCH_STMT_COND (cs->switch_stmt),
3428                           bool_cond_p, cs->outside_range_p);
3429
3430   splay_tree_delete (cs->cases);
3431   switch_stack = switch_stack->next;
3432   free (cs);
3433 }
3434
3435 /* Convert a case constant VALUE in a switch to the type TYPE of the switch
3436    condition.  Note that if TYPE and VALUE are already integral we don't
3437    really do the conversion because the language-independent
3438    warning/optimization code will work better that way.  */
3439
3440 static tree
3441 case_conversion (tree type, tree value)
3442 {
3443   if (value == NULL_TREE)
3444     return value;
3445
3446   if (cxx_dialect >= cxx11
3447       && (SCOPED_ENUM_P (type)
3448           || !INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (value))))
3449     {
3450       if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
3451         type = type_promotes_to (type);
3452       value = (perform_implicit_conversion_flags
3453                (type, value, tf_warning_or_error,
3454                 LOOKUP_IMPLICIT | LOOKUP_NO_NON_INTEGRAL));
3455     }
3456   return cxx_constant_value (value);
3457 }
3458
3459 /* Note that we've seen a definition of a case label, and complain if this
3460    is a bad place for one.  */
3461
3462 tree
3463 finish_case_label (location_t loc, tree low_value, tree high_value)
3464 {
3465   tree cond, r;
3466   cp_binding_level *p;
3467   tree type;
3468
3469   if (processing_template_decl)
3470     {
3471       tree label;
3472
3473       /* For templates, just add the case label; we'll do semantic
3474          analysis at instantiation-time.  */
3475       label = build_decl (loc, LABEL_DECL, NULL_TREE, NULL_TREE);
3476       return add_stmt (build_case_label (low_value, high_value, label));
3477     }
3478
3479   /* Find the condition on which this switch statement depends.  */
3480   cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
3481   if (cond && TREE_CODE (cond) == TREE_LIST)
3482     cond = TREE_VALUE (cond);
3483
3484   if (!check_switch_goto (switch_stack->level))
3485     return error_mark_node;
3486
3487   type = SWITCH_STMT_TYPE (switch_stack->switch_stmt);
3488
3489   low_value = case_conversion (type, low_value);
3490   high_value = case_conversion (type, high_value);
3491
3492   r = c_add_case_label (loc, switch_stack->cases, cond, type,
3493                         low_value, high_value,
3494                         &switch_stack->outside_range_p);
3495
3496   /* After labels, make any new cleanups in the function go into their
3497      own new (temporary) binding contour.  */
3498   for (p = current_binding_level;
3499        p->kind != sk_function_parms;
3500        p = p->level_chain)
3501     p->more_cleanups_ok = 0;
3502
3503   return r;
3504 }
3505 \f
3506 struct typename_info {
3507   tree scope;
3508   tree name;
3509   tree template_id;
3510   bool enum_p;
3511   bool class_p;
3512 };
3513
3514 struct typename_hasher : ggc_ptr_hash<tree_node>
3515 {
3516   typedef typename_info *compare_type;
3517
3518   /* Hash a TYPENAME_TYPE.  */
3519
3520   static hashval_t
3521   hash (tree t)
3522   {
3523     hashval_t hash;
3524
3525     hash = (htab_hash_pointer (TYPE_CONTEXT (t))
3526             ^ htab_hash_pointer (TYPE_IDENTIFIER (t)));
3527
3528     return hash;
3529   }
3530
3531   /* Compare two TYPENAME_TYPEs.  */
3532
3533   static bool
3534   equal (tree t1, const typename_info *t2)
3535   {
3536     return (TYPE_IDENTIFIER (t1) == t2->name
3537             && TYPE_CONTEXT (t1) == t2->scope
3538             && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
3539             && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
3540             && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
3541   }
3542 };
3543
3544 /* Build a TYPENAME_TYPE.  If the type is `typename T::t', CONTEXT is
3545    the type of `T', NAME is the IDENTIFIER_NODE for `t'.
3546
3547    Returns the new TYPENAME_TYPE.  */
3548
3549 static GTY (()) hash_table<typename_hasher> *typename_htab;
3550
3551 static tree
3552 build_typename_type (tree context, tree name, tree fullname,
3553                      enum tag_types tag_type)
3554 {
3555   tree t;
3556   tree d;
3557   typename_info ti;
3558   tree *e;
3559   hashval_t hash;
3560
3561   if (typename_htab == NULL)
3562     typename_htab = hash_table<typename_hasher>::create_ggc (61);
3563
3564   ti.scope = FROB_CONTEXT (context);
3565   ti.name = name;
3566   ti.template_id = fullname;
3567   ti.enum_p = tag_type == enum_type;
3568   ti.class_p = (tag_type == class_type
3569                 || tag_type == record_type
3570                 || tag_type == union_type);
3571   hash =  (htab_hash_pointer (ti.scope)
3572            ^ htab_hash_pointer (ti.name));
3573
3574   /* See if we already have this type.  */
3575   e = typename_htab->find_slot_with_hash (&ti, hash, INSERT);
3576   if (*e)
3577     t = *e;
3578   else
3579     {
3580       /* Build the TYPENAME_TYPE.  */
3581       t = cxx_make_type (TYPENAME_TYPE);
3582       TYPE_CONTEXT (t) = ti.scope;
3583       TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
3584       TYPENAME_IS_ENUM_P (t) = ti.enum_p;
3585       TYPENAME_IS_CLASS_P (t) = ti.class_p;
3586
3587       /* Build the corresponding TYPE_DECL.  */
3588       d = build_decl (input_location, TYPE_DECL, name, t);
3589       TYPE_NAME (TREE_TYPE (d)) = d;
3590       TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3591       DECL_CONTEXT (d) = FROB_CONTEXT (context);
3592       DECL_ARTIFICIAL (d) = 1;
3593
3594       /* Store it in the hash table.  */
3595       *e = t;
3596
3597       /* TYPENAME_TYPEs must always be compared structurally, because
3598          they may or may not resolve down to another type depending on
3599          the currently open classes. */
3600       SET_TYPE_STRUCTURAL_EQUALITY (t);
3601     }
3602
3603   return t;
3604 }
3605
3606 /* Resolve `typename CONTEXT::NAME'.  TAG_TYPE indicates the tag
3607    provided to name the type.  Returns an appropriate type, unless an
3608    error occurs, in which case error_mark_node is returned.  If we
3609    locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
3610    return that, rather than the _TYPE it corresponds to, in other
3611    cases we look through the type decl.  If TF_ERROR is set, complain
3612    about errors, otherwise be quiet.  */
3613
3614 tree
3615 make_typename_type (tree context, tree name, enum tag_types tag_type,
3616                     tsubst_flags_t complain)
3617 {
3618   tree fullname;
3619   tree t;
3620   bool want_template;
3621
3622   if (name == error_mark_node
3623       || context == NULL_TREE
3624       || context == error_mark_node)
3625     return error_mark_node;
3626
3627   if (TYPE_P (name))
3628     {
3629       if (!(TYPE_LANG_SPECIFIC (name)
3630             && (CLASSTYPE_IS_TEMPLATE (name)
3631                 || CLASSTYPE_USE_TEMPLATE (name))))
3632         name = TYPE_IDENTIFIER (name);
3633       else
3634         /* Create a TEMPLATE_ID_EXPR for the type.  */
3635         name = build_nt (TEMPLATE_ID_EXPR,
3636                          CLASSTYPE_TI_TEMPLATE (name),
3637                          CLASSTYPE_TI_ARGS (name));
3638     }
3639   else if (TREE_CODE (name) == TYPE_DECL)
3640     name = DECL_NAME (name);
3641
3642   fullname = name;
3643
3644   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3645     {
3646       name = TREE_OPERAND (name, 0);
3647       if (DECL_TYPE_TEMPLATE_P (name))
3648         name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
3649       if (TREE_CODE (name) != IDENTIFIER_NODE)
3650         {
3651           if (complain & tf_error)
3652             error ("%qD is not a type", name);
3653           return error_mark_node;
3654         }
3655     }
3656   if (TREE_CODE (name) == TEMPLATE_DECL)
3657     {
3658       if (complain & tf_error)
3659         error ("%qD used without template parameters", name);
3660       return error_mark_node;
3661     }
3662   gcc_assert (identifier_p (name));
3663   gcc_assert (TYPE_P (context));
3664
3665   if (!MAYBE_CLASS_TYPE_P (context))
3666     {
3667       if (complain & tf_error)
3668         error ("%q#T is not a class", context);
3669       return error_mark_node;
3670     }
3671   
3672   /* When the CONTEXT is a dependent type,  NAME could refer to a
3673      dependent base class of CONTEXT.  But look inside it anyway
3674      if CONTEXT is a currently open scope, in case it refers to a
3675      member of the current instantiation or a non-dependent base;
3676      lookup will stop when we hit a dependent base.  */
3677   if (!dependent_scope_p (context))
3678     /* We should only set WANT_TYPE when we're a nested typename type.
3679        Then we can give better diagnostics if we find a non-type.  */
3680     t = lookup_field (context, name, 2, /*want_type=*/true);
3681   else
3682     t = NULL_TREE;
3683
3684   if ((!t || TREE_CODE (t) == TREE_LIST) && dependent_type_p (context))
3685     return build_typename_type (context, name, fullname, tag_type);
3686
3687   want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR;
3688   
3689   if (!t)
3690     {
3691       if (complain & tf_error)
3692         error (want_template ? G_("no class template named %q#T in %q#T")
3693                : G_("no type named %q#T in %q#T"), name, context);
3694       return error_mark_node;
3695     }
3696   
3697   /* Pull out the template from an injected-class-name (or multiple).  */
3698   if (want_template)
3699     t = maybe_get_template_decl_from_type_decl (t);
3700
3701   if (TREE_CODE (t) == TREE_LIST)
3702     {
3703       if (complain & tf_error)
3704         {
3705           error ("lookup of %qT in %qT is ambiguous", name, context);
3706           print_candidates (t);
3707         }
3708       return error_mark_node;
3709     }
3710
3711   if (want_template && !DECL_TYPE_TEMPLATE_P (t))
3712     {
3713       if (complain & tf_error)
3714         error ("%<typename %T::%D%> names %q#T, which is not a class template",
3715                context, name, t);
3716       return error_mark_node;
3717     }
3718   if (!want_template && TREE_CODE (t) != TYPE_DECL)
3719     {
3720       if (complain & tf_error)
3721         error ("%<typename %T::%D%> names %q#T, which is not a type",
3722                context, name, t);
3723       return error_mark_node;
3724     }
3725
3726   if (!perform_or_defer_access_check (TYPE_BINFO (context), t, t, complain))
3727     return error_mark_node;
3728
3729   /* If we are currently parsing a template and if T is a typedef accessed
3730      through CONTEXT then we need to remember and check access of T at
3731      template instantiation time.  */
3732   add_typedef_to_current_template_for_access_check (t, context, input_location);
3733
3734   if (want_template)
3735     return lookup_template_class (t, TREE_OPERAND (fullname, 1),
3736                                   NULL_TREE, context,
3737                                   /*entering_scope=*/0,
3738                                   complain | tf_user);
3739   
3740   if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
3741     t = TREE_TYPE (t);
3742
3743   maybe_record_typedef_use (t);
3744
3745   return t;
3746 }
3747
3748 /* Resolve `CONTEXT::template NAME'.  Returns a TEMPLATE_DECL if the name
3749    can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
3750    in which case error_mark_node is returned.
3751
3752    If PARM_LIST is non-NULL, also make sure that the template parameter
3753    list of TEMPLATE_DECL matches.
3754
3755    If COMPLAIN zero, don't complain about any errors that occur.  */
3756
3757 tree
3758 make_unbound_class_template (tree context, tree name, tree parm_list,
3759                              tsubst_flags_t complain)
3760 {
3761   tree t;
3762   tree d;
3763
3764   if (TYPE_P (name))
3765     name = TYPE_IDENTIFIER (name);
3766   else if (DECL_P (name))
3767     name = DECL_NAME (name);
3768   gcc_assert (identifier_p (name));
3769
3770   if (!dependent_type_p (context)
3771       || currently_open_class (context))
3772     {
3773       tree tmpl = NULL_TREE;
3774
3775       if (MAYBE_CLASS_TYPE_P (context))
3776         tmpl = lookup_field (context, name, 0, false);
3777
3778       if (tmpl && TREE_CODE (tmpl) == TYPE_DECL)
3779         tmpl = maybe_get_template_decl_from_type_decl (tmpl);
3780
3781       if (!tmpl || !DECL_TYPE_TEMPLATE_P (tmpl))
3782         {
3783           if (complain & tf_error)
3784             error ("no class template named %q#T in %q#T", name, context);
3785           return error_mark_node;
3786         }
3787
3788       if (parm_list
3789           && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
3790         {
3791           if (complain & tf_error)
3792             {
3793               error ("template parameters do not match template %qD", tmpl);
3794               inform (DECL_SOURCE_LOCATION (tmpl),
3795                       "%qD declared here", tmpl);
3796             }
3797           return error_mark_node;
3798         }
3799
3800       if (!perform_or_defer_access_check (TYPE_BINFO (context), tmpl, tmpl,
3801                                           complain))
3802         return error_mark_node;
3803
3804       return tmpl;
3805     }
3806
3807   /* Build the UNBOUND_CLASS_TEMPLATE.  */
3808   t = cxx_make_type (UNBOUND_CLASS_TEMPLATE);
3809   TYPE_CONTEXT (t) = FROB_CONTEXT (context);
3810   TREE_TYPE (t) = NULL_TREE;
3811   SET_TYPE_STRUCTURAL_EQUALITY (t);
3812
3813   /* Build the corresponding TEMPLATE_DECL.  */
3814   d = build_decl (input_location, TEMPLATE_DECL, name, t);
3815   TYPE_NAME (TREE_TYPE (d)) = d;
3816   TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3817   DECL_CONTEXT (d) = FROB_CONTEXT (context);
3818   DECL_ARTIFICIAL (d) = 1;
3819   DECL_TEMPLATE_PARMS (d) = parm_list;
3820
3821   return t;
3822 }
3823
3824 \f
3825
3826 /* Push the declarations of builtin types into the namespace.
3827    RID_INDEX is the index of the builtin type in the array
3828    RID_POINTERS.  NAME is the name used when looking up the builtin
3829    type.  TYPE is the _TYPE node for the builtin type.  */
3830
3831 void
3832 record_builtin_type (enum rid rid_index,
3833                      const char* name,
3834                      tree type)
3835 {
3836   tree rname = NULL_TREE, tname = NULL_TREE;
3837   tree tdecl = NULL_TREE;
3838
3839   if ((int) rid_index < (int) RID_MAX)
3840     rname = ridpointers[(int) rid_index];
3841   if (name)
3842     tname = get_identifier (name);
3843
3844   /* The calls to SET_IDENTIFIER_GLOBAL_VALUE below should be
3845      eliminated.  Built-in types should not be looked up name; their
3846      names are keywords that the parser can recognize.  However, there
3847      is code in c-common.c that uses identifier_global_value to look
3848      up built-in types by name.  */
3849   if (tname)
3850     {
3851       tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, tname, type);
3852       DECL_ARTIFICIAL (tdecl) = 1;
3853       SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
3854     }
3855   if (rname)
3856     {
3857       if (!tdecl)
3858         {
3859           tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, rname, type);
3860           DECL_ARTIFICIAL (tdecl) = 1;
3861         }
3862       SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
3863     }
3864
3865   if (!TYPE_NAME (type))
3866     TYPE_NAME (type) = tdecl;
3867
3868   if (tdecl)
3869     debug_hooks->type_decl (tdecl, 0);
3870 }
3871
3872 /* Record one of the standard Java types.
3873  * Declare it as having the given NAME.
3874  * If SIZE > 0, it is the size of one of the integral types;
3875  * otherwise it is the negative of the size of one of the other types.  */
3876
3877 static tree
3878 record_builtin_java_type (const char* name, int size)
3879 {
3880   tree type, decl;
3881   if (size > 0)
3882     {
3883       type = build_nonstandard_integer_type (size, 0);
3884       type = build_distinct_type_copy (type);
3885     }
3886   else if (size > -32)
3887     {
3888       tree stype;
3889       /* "__java_char" or ""__java_boolean".  */
3890       type = build_nonstandard_integer_type (-size, 1);
3891       type = build_distinct_type_copy (type);
3892       /* Get the signed type cached and attached to the unsigned type,
3893          so it doesn't get garbage-collected at "random" times,
3894          causing potential codegen differences out of different UIDs
3895          and different alias set numbers.  */
3896       stype = build_nonstandard_integer_type (-size, 0);
3897       stype = build_distinct_type_copy (stype);
3898       TREE_CHAIN (type) = stype;
3899       /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
3900     }
3901   else
3902     { /* "__java_float" or ""__java_double".  */
3903       type = make_node (REAL_TYPE);
3904       TYPE_PRECISION (type) = - size;
3905       layout_type (type);
3906     }
3907   record_builtin_type (RID_MAX, name, type);
3908   decl = TYPE_NAME (type);
3909
3910   /* Suppress generate debug symbol entries for these types,
3911      since for normal C++ they are just clutter.
3912      However, push_lang_context undoes this if extern "Java" is seen.  */
3913   DECL_IGNORED_P (decl) = 1;
3914
3915   TYPE_FOR_JAVA (type) = 1;
3916   return type;
3917 }
3918
3919 /* Push a type into the namespace so that the back ends ignore it.  */
3920
3921 static void
3922 record_unknown_type (tree type, const char* name)
3923 {
3924   tree decl = pushdecl (build_decl (UNKNOWN_LOCATION,
3925                                     TYPE_DECL, get_identifier (name), type));
3926   /* Make sure the "unknown type" typedecl gets ignored for debug info.  */
3927   DECL_IGNORED_P (decl) = 1;
3928   TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
3929   TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
3930   SET_TYPE_ALIGN (type, 1);
3931   TYPE_USER_ALIGN (type) = 0;
3932   SET_TYPE_MODE (type, TYPE_MODE (void_type_node));
3933 }
3934
3935 /* A string for which we should create an IDENTIFIER_NODE at
3936    startup.  */
3937
3938 struct predefined_identifier
3939 {
3940   /* The name of the identifier.  */
3941   const char *const name;
3942   /* The place where the IDENTIFIER_NODE should be stored.  */
3943   tree *const node;
3944   /* Nonzero if this is the name of a constructor or destructor.  */
3945   const int ctor_or_dtor_p;
3946 };
3947
3948 /* Create all the predefined identifiers.  */
3949
3950 static void
3951 initialize_predefined_identifiers (void)
3952 {
3953   const predefined_identifier *pid;
3954
3955   /* A table of identifiers to create at startup.  */
3956   static const predefined_identifier predefined_identifiers[] = {
3957     { "C++", &lang_name_cplusplus, 0 },
3958     { "C", &lang_name_c, 0 },
3959     { "Java", &lang_name_java, 0 },
3960     /* Some of these names have a trailing space so that it is
3961        impossible for them to conflict with names written by users.  */
3962     { "__ct ", &ctor_identifier, 1 },
3963     { "__base_ctor ", &base_ctor_identifier, 1 },
3964     { "__comp_ctor ", &complete_ctor_identifier, 1 },
3965     { "__dt ", &dtor_identifier, 1 },
3966     { "__comp_dtor ", &complete_dtor_identifier, 1 },
3967     { "__base_dtor ", &base_dtor_identifier, 1 },
3968     { "__deleting_dtor ", &deleting_dtor_identifier, 1 },
3969     { IN_CHARGE_NAME, &in_charge_identifier, 0 },
3970     { "nelts", &nelts_identifier, 0 },
3971     { THIS_NAME, &this_identifier, 0 },
3972     { VTABLE_DELTA_NAME, &delta_identifier, 0 },
3973     { VTABLE_PFN_NAME, &pfn_identifier, 0 },
3974     { "_vptr", &vptr_identifier, 0 },
3975     { "__vtt_parm", &vtt_parm_identifier, 0 },
3976     { "::", &global_scope_name, 0 },
3977     { "std", &std_identifier, 0 },
3978     { NULL, NULL, 0 }
3979   };
3980
3981   for (pid = predefined_identifiers; pid->name; ++pid)
3982     {
3983       *pid->node = get_identifier (pid->name);
3984       if (pid->ctor_or_dtor_p)
3985         IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
3986     }
3987 }
3988
3989 /* Create the predefined scalar types of C,
3990    and some nodes representing standard constants (0, 1, (void *)0).
3991    Initialize the global binding level.
3992    Make definitions for built-in primitive functions.  */
3993
3994 void
3995 cxx_init_decl_processing (void)
3996 {
3997   tree void_ftype;
3998   tree void_ftype_ptr;
3999
4000   /* Create all the identifiers we need.  */
4001   initialize_predefined_identifiers ();
4002
4003   /* Create the global variables.  */
4004   push_to_top_level ();
4005
4006   current_function_decl = NULL_TREE;
4007   current_binding_level = NULL;
4008   /* Enter the global namespace.  */
4009   gcc_assert (global_namespace == NULL_TREE);
4010   global_namespace = build_lang_decl (NAMESPACE_DECL, global_scope_name,
4011                                       void_type_node);
4012   DECL_CONTEXT (global_namespace) = build_translation_unit_decl (NULL_TREE);
4013   debug_hooks->register_main_translation_unit
4014     (DECL_CONTEXT (global_namespace));
4015   TREE_PUBLIC (global_namespace) = 1;
4016   begin_scope (sk_namespace, global_namespace);
4017
4018   if (flag_visibility_ms_compat)
4019     default_visibility = VISIBILITY_HIDDEN;
4020
4021   /* Initially, C.  */
4022   current_lang_name = lang_name_c;
4023
4024   /* Create the `std' namespace.  */
4025   push_namespace (std_identifier);
4026   std_node = current_namespace;
4027   pop_namespace ();
4028
4029   c_common_nodes_and_builtins ();
4030
4031   java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
4032   java_short_type_node = record_builtin_java_type ("__java_short", 16);
4033   java_int_type_node = record_builtin_java_type ("__java_int", 32);
4034   java_long_type_node = record_builtin_java_type ("__java_long", 64);
4035   java_float_type_node = record_builtin_java_type ("__java_float", -32);
4036   java_double_type_node = record_builtin_java_type ("__java_double", -64);
4037   java_char_type_node = record_builtin_java_type ("__java_char", -16);
4038   java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
4039
4040   integer_two_node = build_int_cst (NULL_TREE, 2);
4041
4042   record_builtin_type (RID_BOOL, "bool", boolean_type_node);
4043   truthvalue_type_node = boolean_type_node;
4044   truthvalue_false_node = boolean_false_node;
4045   truthvalue_true_node = boolean_true_node;
4046
4047   empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
4048   noexcept_true_spec = build_tree_list (boolean_true_node, NULL_TREE);
4049   noexcept_false_spec = build_tree_list (boolean_false_node, NULL_TREE);
4050
4051 #if 0
4052   record_builtin_type (RID_MAX, NULL, string_type_node);
4053 #endif
4054
4055   delta_type_node = ptrdiff_type_node;
4056   vtable_index_type = ptrdiff_type_node;
4057
4058   vtt_parm_type = build_pointer_type (const_ptr_type_node);
4059   void_ftype = build_function_type_list (void_type_node, NULL_TREE);
4060   void_ftype_ptr = build_function_type_list (void_type_node,
4061                                              ptr_type_node, NULL_TREE);
4062   void_ftype_ptr
4063     = build_exception_variant (void_ftype_ptr, empty_except_spec);
4064
4065   /* C++ extensions */
4066
4067   unknown_type_node = make_node (LANG_TYPE);
4068   record_unknown_type (unknown_type_node, "unknown type");
4069
4070   /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node.  */
4071   TREE_TYPE (unknown_type_node) = unknown_type_node;
4072
4073   /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
4074      result.  */
4075   TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
4076   TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
4077
4078   init_list_type_node = make_node (LANG_TYPE);
4079   record_unknown_type (init_list_type_node, "init list");
4080
4081   {
4082     /* Make sure we get a unique function type, so we can give
4083        its pointer type a name.  (This wins for gdb.) */
4084     tree vfunc_type = make_node (FUNCTION_TYPE);
4085     TREE_TYPE (vfunc_type) = integer_type_node;
4086     TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
4087     layout_type (vfunc_type);
4088
4089     vtable_entry_type = build_pointer_type (vfunc_type);
4090   }
4091   record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
4092
4093   vtbl_type_node
4094     = build_cplus_array_type (vtable_entry_type, NULL_TREE);
4095   layout_type (vtbl_type_node);
4096   vtbl_type_node = cp_build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
4097   record_builtin_type (RID_MAX, NULL, vtbl_type_node);
4098   vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
4099   layout_type (vtbl_ptr_type_node);
4100   record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
4101
4102   push_namespace (get_identifier ("__cxxabiv1"));
4103   abi_node = current_namespace;
4104   pop_namespace ();
4105
4106   global_type_node = make_node (LANG_TYPE);
4107   record_unknown_type (global_type_node, "global type");
4108
4109   /* Now, C++.  */
4110   current_lang_name = lang_name_cplusplus;
4111
4112   {
4113     tree newattrs, extvisattr;
4114     tree newtype, deltype;
4115     tree ptr_ftype_sizetype;
4116     tree new_eh_spec;
4117
4118     ptr_ftype_sizetype
4119       = build_function_type_list (ptr_type_node, size_type_node, NULL_TREE);
4120     if (cxx_dialect == cxx98)
4121       {
4122         tree bad_alloc_id;
4123         tree bad_alloc_type_node;
4124         tree bad_alloc_decl;
4125
4126         push_namespace (std_identifier);
4127         bad_alloc_id = get_identifier ("bad_alloc");
4128         bad_alloc_type_node = make_class_type (RECORD_TYPE);
4129         TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
4130         bad_alloc_decl
4131           = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
4132         DECL_CONTEXT (bad_alloc_decl) = current_namespace;
4133         pop_namespace ();
4134
4135         new_eh_spec
4136           = add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1);
4137       }
4138     else
4139       new_eh_spec = noexcept_false_spec;
4140
4141     /* Ensure attribs.c is initialized.  */
4142     init_attributes ();
4143
4144     /* Ensure constraint.cc is initialized. */
4145     init_constraint_processing ();
4146
4147     extvisattr = build_tree_list (get_identifier ("externally_visible"),
4148                                   NULL_TREE);
4149     newattrs = tree_cons (get_identifier ("alloc_size"),
4150                           build_tree_list (NULL_TREE, integer_one_node),
4151                           extvisattr);
4152     newtype = cp_build_type_attribute_variant (ptr_ftype_sizetype, newattrs);
4153     newtype = build_exception_variant (newtype, new_eh_spec);
4154     deltype = cp_build_type_attribute_variant (void_ftype_ptr, extvisattr);
4155     deltype = build_exception_variant (deltype, empty_except_spec);
4156     tree opnew = push_cp_library_fn (NEW_EXPR, newtype, 0);
4157     DECL_IS_MALLOC (opnew) = 1;
4158     DECL_IS_OPERATOR_NEW (opnew) = 1;
4159     opnew = push_cp_library_fn (VEC_NEW_EXPR, newtype, 0);
4160     DECL_IS_MALLOC (opnew) = 1;
4161     DECL_IS_OPERATOR_NEW (opnew) = 1;
4162     push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4163     push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4164     if (flag_sized_deallocation)
4165       {
4166         /* Also push the sized deallocation variants:
4167              void operator delete(void*, std::size_t) throw();
4168              void operator delete[](void*, std::size_t) throw();  */
4169         tree void_ftype_ptr_size
4170           = build_function_type_list (void_type_node, ptr_type_node,
4171                                       size_type_node, NULL_TREE);
4172         deltype = cp_build_type_attribute_variant (void_ftype_ptr_size,
4173                                                    extvisattr);
4174         deltype = build_exception_variant (deltype, empty_except_spec);
4175         push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4176         push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4177       }
4178
4179     nullptr_type_node = make_node (NULLPTR_TYPE);
4180     TYPE_SIZE (nullptr_type_node) = bitsize_int (GET_MODE_BITSIZE (ptr_mode));
4181     TYPE_SIZE_UNIT (nullptr_type_node) = size_int (GET_MODE_SIZE (ptr_mode));
4182     TYPE_UNSIGNED (nullptr_type_node) = 1;
4183     TYPE_PRECISION (nullptr_type_node) = GET_MODE_BITSIZE (ptr_mode);
4184     if (abi_version_at_least (9))
4185       SET_TYPE_ALIGN (nullptr_type_node, GET_MODE_ALIGNMENT (ptr_mode));
4186     SET_TYPE_MODE (nullptr_type_node, ptr_mode);
4187     record_builtin_type (RID_MAX, "decltype(nullptr)", nullptr_type_node);
4188     nullptr_node = build_int_cst (nullptr_type_node, 0);
4189   }
4190
4191   abort_fndecl
4192     = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype,
4193                             ECF_NORETURN | ECF_NOTHROW);
4194
4195   /* Perform other language dependent initializations.  */
4196   init_class_processing ();
4197   init_rtti_processing ();
4198   init_template_processing ();
4199
4200   if (flag_exceptions)
4201     init_exception_processing ();
4202
4203   if (! supports_one_only ())
4204     flag_weak = 0;
4205
4206   make_fname_decl = cp_make_fname_decl;
4207   start_fname_decls ();
4208
4209   /* Show we use EH for cleanups.  */
4210   if (flag_exceptions)
4211     using_eh_for_cleanups ();
4212 }
4213
4214 /* Generate an initializer for a function naming variable from
4215    NAME. NAME may be NULL, to indicate a dependent name.  TYPE_P is
4216    filled in with the type of the init.  */
4217
4218 tree
4219 cp_fname_init (const char* name, tree *type_p)
4220 {
4221   tree domain = NULL_TREE;
4222   tree type;
4223   tree init = NULL_TREE;
4224   size_t length = 0;
4225
4226   if (name)
4227     {
4228       length = strlen (name);
4229       domain = build_index_type (size_int (length));
4230       init = build_string (length + 1, name);
4231     }
4232
4233   type = cp_build_qualified_type (char_type_node, TYPE_QUAL_CONST);
4234   type = build_cplus_array_type (type, domain);
4235
4236   *type_p = type;
4237
4238   if (init)
4239     TREE_TYPE (init) = type;
4240   else
4241     init = error_mark_node;
4242
4243   return init;
4244 }
4245
4246 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give
4247    the decl, LOC is the location to give the decl, NAME is the
4248    initialization string and TYPE_DEP indicates whether NAME depended
4249    on the type of the function. We make use of that to detect
4250    __PRETTY_FUNCTION__ inside a template fn. This is being done lazily
4251    at the point of first use, so we mustn't push the decl now.  */
4252
4253 static tree
4254 cp_make_fname_decl (location_t loc, tree id, int type_dep)
4255 {
4256   const char *const name = (type_dep && processing_template_decl
4257                             ? NULL : fname_as_string (type_dep));
4258   tree type;
4259   tree init = cp_fname_init (name, &type);
4260   tree decl = build_decl (loc, VAR_DECL, id, type);
4261
4262   if (name)
4263     free (CONST_CAST (char *, name));
4264
4265   /* As we're using pushdecl_with_scope, we must set the context.  */
4266   DECL_CONTEXT (decl) = current_function_decl;
4267
4268   TREE_STATIC (decl) = 1;
4269   TREE_READONLY (decl) = 1;
4270   DECL_ARTIFICIAL (decl) = 1;
4271
4272   TREE_USED (decl) = 1;
4273
4274   if (current_function_decl)
4275     {
4276       cp_binding_level *b = current_binding_level;
4277       if (b->kind == sk_function_parms)
4278         return error_mark_node;
4279       while (b->level_chain->kind != sk_function_parms)
4280         b = b->level_chain;
4281       pushdecl_with_scope (decl, b, /*is_friend=*/false);
4282       cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE,
4283                       LOOKUP_ONLYCONVERTING);
4284     }
4285   else
4286     {
4287       DECL_THIS_STATIC (decl) = true;
4288       pushdecl_top_level_and_finish (decl, init);
4289     }
4290
4291   return decl;
4292 }
4293
4294 static tree
4295 builtin_function_1 (tree decl, tree context, bool is_global)
4296 {
4297   tree          id = DECL_NAME (decl);
4298   const char *name = IDENTIFIER_POINTER (id);
4299
4300   retrofit_lang_decl (decl);
4301
4302   DECL_ARTIFICIAL (decl) = 1;
4303   SET_OVERLOADED_OPERATOR_CODE (decl, ERROR_MARK);
4304   SET_DECL_LANGUAGE (decl, lang_c);
4305   /* Runtime library routines are, by definition, available in an
4306      external shared object.  */
4307   DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
4308   DECL_VISIBILITY_SPECIFIED (decl) = 1;
4309
4310   DECL_CONTEXT (decl) = context;
4311
4312   if (is_global)
4313     pushdecl_top_level (decl);
4314   else
4315     pushdecl (decl);
4316
4317   /* A function in the user's namespace should have an explicit
4318      declaration before it is used.  Mark the built-in function as
4319      anticipated but not actually declared.  */
4320   if (name[0] != '_' || name[1] != '_')
4321     DECL_ANTICIPATED (decl) = 1;
4322   else if (strncmp (name + 2, "builtin_", strlen ("builtin_")) != 0)
4323     {
4324       size_t len = strlen (name);
4325
4326       /* Treat __*_chk fortification functions as anticipated as well,
4327          unless they are __builtin_*.  */
4328       if (len > strlen ("___chk")
4329           && memcmp (name + len - strlen ("_chk"),
4330                      "_chk", strlen ("_chk") + 1) == 0)
4331         DECL_ANTICIPATED (decl) = 1;
4332     }
4333
4334   return decl;
4335 }
4336
4337 tree
4338 cxx_builtin_function (tree decl)
4339 {
4340   tree          id = DECL_NAME (decl);
4341   const char *name = IDENTIFIER_POINTER (id);
4342   /* All builtins that don't begin with an '_' should additionally
4343      go in the 'std' namespace.  */
4344   if (name[0] != '_')
4345     {
4346       tree decl2 = copy_node(decl);
4347       push_namespace (std_identifier);
4348       builtin_function_1 (decl2, std_node, false);
4349       pop_namespace ();
4350     }
4351
4352   return builtin_function_1 (decl, NULL_TREE, false);
4353 }
4354
4355 /* Like cxx_builtin_function, but guarantee the function is added to the global
4356    scope.  This is to allow function specific options to add new machine
4357    dependent builtins when the target ISA changes via attribute((target(...)))
4358    which saves space on program startup if the program does not use non-generic
4359    ISAs.  */
4360
4361 tree
4362 cxx_builtin_function_ext_scope (tree decl)
4363 {
4364
4365   tree          id = DECL_NAME (decl);
4366   const char *name = IDENTIFIER_POINTER (id);
4367   /* All builtins that don't begin with an '_' should additionally
4368      go in the 'std' namespace.  */
4369   if (name[0] != '_')
4370     {
4371       tree decl2 = copy_node(decl);
4372       push_namespace (std_identifier);
4373       builtin_function_1 (decl2, std_node, true);
4374       pop_namespace ();
4375     }
4376
4377   return builtin_function_1 (decl, NULL_TREE, true);
4378 }
4379
4380 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
4381    function.  Not called directly.  */
4382
4383 static tree
4384 build_library_fn (tree name, enum tree_code operator_code, tree type,
4385                   int ecf_flags)
4386 {
4387   tree fn = build_lang_decl (FUNCTION_DECL, name, type);
4388   DECL_EXTERNAL (fn) = 1;
4389   TREE_PUBLIC (fn) = 1;
4390   DECL_ARTIFICIAL (fn) = 1;
4391   SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
4392   SET_DECL_LANGUAGE (fn, lang_c);
4393   /* Runtime library routines are, by definition, available in an
4394      external shared object.  */
4395   DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
4396   DECL_VISIBILITY_SPECIFIED (fn) = 1;
4397   set_call_expr_flags (fn, ecf_flags);
4398   return fn;
4399 }
4400
4401 /* Returns the _DECL for a library function with C++ linkage.  */
4402
4403 static tree
4404 build_cp_library_fn (tree name, enum tree_code operator_code, tree type,
4405                      int ecf_flags)
4406 {
4407   tree fn = build_library_fn (name, operator_code, type, ecf_flags);
4408   DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
4409   SET_DECL_LANGUAGE (fn, lang_cplusplus);
4410   return fn;
4411 }
4412
4413 /* Like build_library_fn, but takes a C string instead of an
4414    IDENTIFIER_NODE.  */
4415
4416 tree
4417 build_library_fn_ptr (const char* name, tree type, int ecf_flags)
4418 {
4419   return build_library_fn (get_identifier (name), ERROR_MARK, type, ecf_flags);
4420 }
4421
4422 /* Like build_cp_library_fn, but takes a C string instead of an
4423    IDENTIFIER_NODE.  */
4424
4425 tree
4426 build_cp_library_fn_ptr (const char* name, tree type, int ecf_flags)
4427 {
4428   return build_cp_library_fn (get_identifier (name), ERROR_MARK, type,
4429                               ecf_flags);
4430 }
4431
4432 /* Like build_library_fn, but also pushes the function so that we will
4433    be able to find it via IDENTIFIER_GLOBAL_VALUE.  Also, the function
4434    may throw exceptions listed in RAISES.  */
4435
4436 tree
4437 push_library_fn (tree name, tree type, tree raises, int ecf_flags)
4438 {
4439   tree fn;
4440
4441   if (raises)
4442     type = build_exception_variant (type, raises);
4443
4444   fn = build_library_fn (name, ERROR_MARK, type, ecf_flags);
4445   pushdecl_top_level (fn);
4446   return fn;
4447 }
4448
4449 /* Like build_cp_library_fn, but also pushes the function so that it
4450    will be found by normal lookup.  */
4451
4452 static tree
4453 push_cp_library_fn (enum tree_code operator_code, tree type,
4454                     int ecf_flags)
4455 {
4456   tree fn = build_cp_library_fn (ansi_opname (operator_code),
4457                                  operator_code,
4458                                  type, ecf_flags);
4459   pushdecl (fn);
4460   if (flag_tm)
4461     apply_tm_attr (fn, get_identifier ("transaction_safe"));
4462   return fn;
4463 }
4464
4465 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
4466    a FUNCTION_TYPE.  */
4467
4468 tree
4469 push_void_library_fn (tree name, tree parmtypes, int ecf_flags)
4470 {
4471   tree type = build_function_type (void_type_node, parmtypes);
4472   return push_library_fn (name, type, NULL_TREE, ecf_flags);
4473 }
4474
4475 /* Like push_library_fn, but also note that this function throws
4476    and does not return.  Used for __throw_foo and the like.  */
4477
4478 tree
4479 push_throw_library_fn (tree name, tree type)
4480 {
4481   tree fn = push_library_fn (name, type, NULL_TREE, ECF_NORETURN);
4482   return fn;
4483 }
4484 \f
4485 /* When we call finish_struct for an anonymous union, we create
4486    default copy constructors and such.  But, an anonymous union
4487    shouldn't have such things; this function undoes the damage to the
4488    anonymous union type T.
4489
4490    (The reason that we create the synthesized methods is that we don't
4491    distinguish `union { int i; }' from `typedef union { int i; } U'.
4492    The first is an anonymous union; the second is just an ordinary
4493    union type.)  */
4494
4495 void
4496 fixup_anonymous_aggr (tree t)
4497 {
4498   tree *q;
4499
4500   /* Wipe out memory of synthesized methods.  */
4501   TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
4502   TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
4503   TYPE_HAS_COPY_CTOR (t) = 0;
4504   TYPE_HAS_CONST_COPY_CTOR (t) = 0;
4505   TYPE_HAS_COPY_ASSIGN (t) = 0;
4506   TYPE_HAS_CONST_COPY_ASSIGN (t) = 0;
4507
4508   /* Splice the implicitly generated functions out of the TYPE_METHODS
4509      list.  */
4510   q = &TYPE_METHODS (t);
4511   while (*q)
4512     {
4513       if (DECL_ARTIFICIAL (*q))
4514         *q = TREE_CHAIN (*q);
4515       else
4516         q = &DECL_CHAIN (*q);
4517     }
4518
4519   /* ISO C++ 9.5.3.  Anonymous unions may not have function members.  */
4520   if (TYPE_METHODS (t))
4521     {
4522       tree decl = TYPE_MAIN_DECL (t);
4523
4524       if (TREE_CODE (t) != UNION_TYPE)
4525         error_at (DECL_SOURCE_LOCATION (decl), 
4526                   "an anonymous struct cannot have function members");
4527       else
4528         error_at (DECL_SOURCE_LOCATION (decl),
4529                   "an anonymous union cannot have function members");
4530     }
4531
4532   /* Anonymous aggregates cannot have fields with ctors, dtors or complex
4533      assignment operators (because they cannot have these methods themselves).
4534      For anonymous unions this is already checked because they are not allowed
4535      in any union, otherwise we have to check it.  */
4536   if (TREE_CODE (t) != UNION_TYPE)
4537     {
4538       tree field, type;
4539
4540       for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
4541         if (TREE_CODE (field) == FIELD_DECL)
4542           {
4543             type = TREE_TYPE (field);
4544             if (CLASS_TYPE_P (type))
4545               {
4546                 if (TYPE_NEEDS_CONSTRUCTING (type))
4547                   error ("member %q+#D with constructor not allowed "
4548                          "in anonymous aggregate", field);
4549                 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
4550                   error ("member %q+#D with destructor not allowed "
4551                          "in anonymous aggregate", field);
4552                 if (TYPE_HAS_COMPLEX_COPY_ASSIGN (type))
4553                   error ("member %q+#D with copy assignment operator "
4554                          "not allowed in anonymous aggregate", field);
4555               }
4556           }
4557     }
4558 }
4559
4560 /* Warn for an attribute located at LOCATION that appertains to the
4561    class type CLASS_TYPE that has not been properly placed after its
4562    class-key, in it class-specifier.  */
4563
4564 void
4565 warn_misplaced_attr_for_class_type (source_location location,
4566                                     tree class_type)
4567 {
4568   gcc_assert (OVERLOAD_TYPE_P (class_type));
4569
4570   if (warning_at (location, OPT_Wattributes,
4571                   "attribute ignored in declaration "
4572                   "of %q#T", class_type))
4573     inform (location,
4574             "attribute for %q#T must follow the %qs keyword",
4575             class_type, class_key_or_enum_as_string (class_type));
4576 }
4577
4578 /* Make sure that a declaration with no declarator is well-formed, i.e.
4579    just declares a tagged type or anonymous union.
4580
4581    Returns the type declared; or NULL_TREE if none.  */
4582
4583 tree
4584 check_tag_decl (cp_decl_specifier_seq *declspecs,
4585                 bool explicit_type_instantiation_p)
4586 {
4587   int saw_friend = decl_spec_seq_has_spec_p (declspecs, ds_friend);
4588   int saw_typedef = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
4589   /* If a class, struct, or enum type is declared by the DECLSPECS
4590      (i.e, if a class-specifier, enum-specifier, or non-typename
4591      elaborated-type-specifier appears in the DECLSPECS),
4592      DECLARED_TYPE is set to the corresponding type.  */
4593   tree declared_type = NULL_TREE;
4594   bool error_p = false;
4595
4596   if (declspecs->multiple_types_p)
4597     error ("multiple types in one declaration");
4598   else if (declspecs->redefined_builtin_type)
4599     {
4600       if (!in_system_header_at (input_location))
4601         permerror (declspecs->locations[ds_redefined_builtin_type_spec],
4602                    "redeclaration of C++ built-in type %qT",
4603                    declspecs->redefined_builtin_type);
4604       return NULL_TREE;
4605     }
4606
4607   if (declspecs->type
4608       && TYPE_P (declspecs->type)
4609       && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
4610            && MAYBE_CLASS_TYPE_P (declspecs->type))
4611           || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
4612     declared_type = declspecs->type;
4613   else if (declspecs->type == error_mark_node)
4614     error_p = true;
4615   if (declared_type == NULL_TREE && ! saw_friend && !error_p)
4616     permerror (input_location, "declaration does not declare anything");
4617   else if (declared_type != NULL_TREE && type_uses_auto (declared_type))
4618     {
4619       error_at (declspecs->locations[ds_type_spec],
4620                 "%<auto%> can only be specified for variables "
4621                 "or function declarations");
4622       return error_mark_node;
4623     }
4624   /* Check for an anonymous union.  */
4625   else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type))
4626            && TYPE_ANONYMOUS_P (declared_type))
4627     {
4628       /* 7/3 In a simple-declaration, the optional init-declarator-list
4629          can be omitted only when declaring a class (clause 9) or
4630          enumeration (7.2), that is, when the decl-specifier-seq contains
4631          either a class-specifier, an elaborated-type-specifier with
4632          a class-key (9.1), or an enum-specifier.  In these cases and
4633          whenever a class-specifier or enum-specifier is present in the
4634          decl-specifier-seq, the identifiers in these specifiers are among
4635          the names being declared by the declaration (as class-name,
4636          enum-names, or enumerators, depending on the syntax).  In such
4637          cases, and except for the declaration of an unnamed bit-field (9.6),
4638          the decl-specifier-seq shall introduce one or more names into the
4639          program, or shall redeclare a name introduced by a previous
4640          declaration.  [Example:
4641              enum { };                  // ill-formed
4642              typedef class { };         // ill-formed
4643          --end example]  */
4644       if (saw_typedef)
4645         {
4646           error ("missing type-name in typedef-declaration");
4647           return NULL_TREE;
4648         }
4649       /* Anonymous unions are objects, so they can have specifiers.  */;
4650       SET_ANON_AGGR_TYPE_P (declared_type);
4651
4652       if (TREE_CODE (declared_type) != UNION_TYPE
4653           && !in_system_header_at (input_location))
4654         pedwarn (input_location, OPT_Wpedantic, "ISO C++ prohibits anonymous structs");
4655     }
4656
4657   else
4658     {
4659       if (decl_spec_seq_has_spec_p (declspecs, ds_inline))
4660         error_at (declspecs->locations[ds_inline],
4661                   "%<inline%> can only be specified for functions");
4662       else if (decl_spec_seq_has_spec_p (declspecs, ds_virtual))
4663         error_at (declspecs->locations[ds_virtual],
4664                   "%<virtual%> can only be specified for functions");
4665       else if (saw_friend
4666                && (!current_class_type
4667                    || current_scope () != current_class_type))
4668         error_at (declspecs->locations[ds_friend],
4669                   "%<friend%> can only be specified inside a class");
4670       else if (decl_spec_seq_has_spec_p (declspecs, ds_explicit))
4671         error_at (declspecs->locations[ds_explicit],
4672                   "%<explicit%> can only be specified for constructors");
4673       else if (declspecs->storage_class)
4674         error_at (declspecs->locations[ds_storage_class],
4675                   "a storage class can only be specified for objects "
4676                   "and functions");
4677       else if (decl_spec_seq_has_spec_p (declspecs, ds_const))
4678         error_at (declspecs->locations[ds_const],
4679                   "%<const%> can only be specified for objects and "
4680                   "functions");
4681       else if (decl_spec_seq_has_spec_p (declspecs, ds_volatile))
4682         error_at (declspecs->locations[ds_volatile],
4683                   "%<volatile%> can only be specified for objects and "
4684                   "functions");
4685       else if (decl_spec_seq_has_spec_p (declspecs, ds_restrict))
4686         error_at (declspecs->locations[ds_restrict],
4687                   "%<__restrict%> can only be specified for objects and "
4688                   "functions");
4689       else if (decl_spec_seq_has_spec_p (declspecs, ds_thread))
4690         error_at (declspecs->locations[ds_thread],
4691                   "%<__thread%> can only be specified for objects "
4692                   "and functions");
4693       else if (saw_typedef)
4694         warning_at (declspecs->locations[ds_typedef], 0,
4695                     "%<typedef%> was ignored in this declaration");
4696       else if (decl_spec_seq_has_spec_p (declspecs,  ds_constexpr))
4697         error_at (declspecs->locations[ds_constexpr],
4698                   "%<constexpr%> cannot be used for type declarations");
4699     }
4700
4701   if (declspecs->attributes && warn_attributes && declared_type)
4702     {
4703       location_t loc;
4704       if (!CLASS_TYPE_P (declared_type)
4705           || !CLASSTYPE_TEMPLATE_INSTANTIATION (declared_type))
4706         /* For a non-template class, use the name location.  */
4707         loc = location_of (declared_type);
4708       else
4709         /* For a template class (an explicit instantiation), use the
4710            current location.  */
4711         loc = input_location;
4712
4713       if (explicit_type_instantiation_p)
4714         /* [dcl.attr.grammar]/4:
4715
4716                No attribute-specifier-seq shall appertain to an explicit
4717                instantiation.  */
4718         {
4719           if (warning_at (loc, OPT_Wattributes,
4720                           "attribute ignored in explicit instantiation %q#T",
4721                           declared_type))
4722             inform (loc,
4723                     "no attribute can be applied to "
4724                     "an explicit instantiation");
4725         }
4726       else
4727         warn_misplaced_attr_for_class_type (loc, declared_type);
4728     }
4729
4730   return declared_type;
4731 }
4732
4733 /* Called when a declaration is seen that contains no names to declare.
4734    If its type is a reference to a structure, union or enum inherited
4735    from a containing scope, shadow that tag name for the current scope
4736    with a forward reference.
4737    If its type defines a new named structure or union
4738    or defines an enum, it is valid but we need not do anything here.
4739    Otherwise, it is an error.
4740
4741    C++: may have to grok the declspecs to learn about static,
4742    complain for anonymous unions.
4743
4744    Returns the TYPE declared -- or NULL_TREE if none.  */
4745
4746 tree
4747 shadow_tag (cp_decl_specifier_seq *declspecs)
4748 {
4749   tree t = check_tag_decl (declspecs,
4750                            /*explicit_type_instantiation_p=*/false);
4751
4752   if (!t)
4753     return NULL_TREE;
4754
4755   if (maybe_process_partial_specialization (t) == error_mark_node)
4756     return NULL_TREE;
4757
4758   /* This is where the variables in an anonymous union are
4759      declared.  An anonymous union declaration looks like:
4760      union { ... } ;
4761      because there is no declarator after the union, the parser
4762      sends that declaration here.  */
4763   if (ANON_AGGR_TYPE_P (t))
4764     {
4765       fixup_anonymous_aggr (t);
4766
4767       if (TYPE_FIELDS (t))
4768         {
4769           tree decl = grokdeclarator (/*declarator=*/NULL,
4770                                       declspecs, NORMAL, 0, NULL);
4771           finish_anon_union (decl);
4772         }
4773     }
4774
4775   return t;
4776 }
4777 \f
4778 /* Decode a "typename", such as "int **", returning a ..._TYPE node.  */
4779
4780 tree
4781 groktypename (cp_decl_specifier_seq *type_specifiers,
4782               const cp_declarator *declarator,
4783               bool is_template_arg)
4784 {
4785   tree attrs;
4786   tree type;
4787   enum decl_context context
4788     = is_template_arg ? TEMPLATE_TYPE_ARG : TYPENAME;
4789   attrs = type_specifiers->attributes;
4790   type_specifiers->attributes = NULL_TREE;
4791   type = grokdeclarator (declarator, type_specifiers, context, 0, &attrs);
4792   if (attrs && type != error_mark_node)
4793     {
4794       if (CLASS_TYPE_P (type))
4795         warning (OPT_Wattributes, "ignoring attributes applied to class type %qT "
4796                  "outside of definition", type);
4797       else if (MAYBE_CLASS_TYPE_P (type))
4798         /* A template type parameter or other dependent type.  */
4799         warning (OPT_Wattributes, "ignoring attributes applied to dependent "
4800                  "type %qT without an associated declaration", type);
4801       else
4802         cplus_decl_attributes (&type, attrs, 0);
4803     }
4804   return type;
4805 }
4806
4807 /* Process a DECLARATOR for a function-scope variable declaration,
4808    namespace-scope variable declaration, or function declaration.
4809    (Function definitions go through start_function; class member
4810    declarations appearing in the body of the class go through
4811    grokfield.)  The DECL corresponding to the DECLARATOR is returned.
4812    If an error occurs, the error_mark_node is returned instead.
4813    
4814    DECLSPECS are the decl-specifiers for the declaration.  INITIALIZED is
4815    SD_INITIALIZED if an explicit initializer is present, or SD_DEFAULTED
4816    for an explicitly defaulted function, or SD_DELETED for an explicitly
4817    deleted function, but 0 (SD_UNINITIALIZED) if this is a variable
4818    implicitly initialized via a default constructor.  ATTRIBUTES and
4819    PREFIX_ATTRIBUTES are GNU attributes associated with this declaration.
4820
4821    The scope represented by the context of the returned DECL is pushed
4822    (if it is not the global namespace) and is assigned to
4823    *PUSHED_SCOPE_P.  The caller is then responsible for calling
4824    pop_scope on *PUSHED_SCOPE_P if it is set.  */
4825
4826 tree
4827 start_decl (const cp_declarator *declarator,
4828             cp_decl_specifier_seq *declspecs,
4829             int initialized,
4830             tree attributes,
4831             tree prefix_attributes,
4832             tree *pushed_scope_p)
4833 {
4834   tree decl;
4835   tree context;
4836   bool was_public;
4837   int flags;
4838   bool alias;
4839
4840   *pushed_scope_p = NULL_TREE;
4841
4842   /* An object declared as __attribute__((deprecated)) suppresses
4843      warnings of uses of other deprecated items.  */
4844   if (lookup_attribute ("deprecated", attributes))
4845     deprecated_state = DEPRECATED_SUPPRESS;
4846
4847   attributes = chainon (attributes, prefix_attributes);
4848
4849   decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
4850                          &attributes);
4851
4852   deprecated_state = DEPRECATED_NORMAL;
4853
4854   if (decl == NULL_TREE || VOID_TYPE_P (decl)
4855       || decl == error_mark_node)
4856     return error_mark_node;
4857
4858   context = CP_DECL_CONTEXT (decl);
4859   if (context != global_namespace)
4860     *pushed_scope_p = push_scope (context);
4861
4862   /* Is it valid for this decl to have an initializer at all?
4863      If not, set INITIALIZED to zero, which will indirectly
4864      tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
4865   if (initialized
4866       && TREE_CODE (decl) == TYPE_DECL)
4867     {
4868       error ("typedef %qD is initialized (use decltype instead)", decl);
4869       return error_mark_node;
4870     }
4871
4872   if (initialized)
4873     {
4874       if (! toplevel_bindings_p ()
4875           && DECL_EXTERNAL (decl))
4876         warning (0, "declaration of %q#D has %<extern%> and is initialized",
4877                  decl);
4878       DECL_EXTERNAL (decl) = 0;
4879       if (toplevel_bindings_p ())
4880         TREE_STATIC (decl) = 1;
4881     }
4882   alias = lookup_attribute ("alias", DECL_ATTRIBUTES (decl)) != 0;
4883   
4884   if (alias && TREE_CODE (decl) == FUNCTION_DECL)
4885     record_key_method_defined (decl);
4886
4887   /* If this is a typedef that names the class for linkage purposes
4888      (7.1.3p8), apply any attributes directly to the type.  */
4889   if (TREE_CODE (decl) == TYPE_DECL
4890       && OVERLOAD_TYPE_P (TREE_TYPE (decl))
4891       && decl == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl))))
4892     flags = ATTR_FLAG_TYPE_IN_PLACE;
4893   else
4894     flags = 0;
4895
4896   /* Set attributes here so if duplicate decl, will have proper attributes.  */
4897   cplus_decl_attributes (&decl, attributes, flags);
4898
4899   /* Dllimported symbols cannot be defined.  Static data members (which
4900      can be initialized in-class and dllimported) go through grokfield,
4901      not here, so we don't need to exclude those decls when checking for
4902      a definition.  */
4903   if (initialized && DECL_DLLIMPORT_P (decl))
4904     {
4905       error ("definition of %q#D is marked %<dllimport%>", decl);
4906       DECL_DLLIMPORT_P (decl) = 0;
4907     }
4908
4909   /* If #pragma weak was used, mark the decl weak now.  */
4910   if (!processing_template_decl)
4911     maybe_apply_pragma_weak (decl);
4912
4913   if (TREE_CODE (decl) == FUNCTION_DECL
4914       && DECL_DECLARED_INLINE_P (decl)
4915       && DECL_UNINLINABLE (decl)
4916       && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
4917     warning_at (DECL_SOURCE_LOCATION (decl), 0,
4918                 "inline function %qD given attribute noinline", decl);
4919
4920   if (TYPE_P (context) && COMPLETE_TYPE_P (complete_type (context)))
4921     {
4922       bool this_tmpl = (processing_template_decl
4923                         > template_class_depth (context));
4924       if (VAR_P (decl))
4925         {
4926           tree field = lookup_field (context, DECL_NAME (decl), 0, false);
4927           if (field == NULL_TREE
4928               || !(VAR_P (field) || variable_template_p (field)))
4929             error ("%q+#D is not a static data member of %q#T", decl, context);
4930           else if (variable_template_p (field) && !this_tmpl)
4931             {
4932               if (DECL_LANG_SPECIFIC (decl)
4933                   && DECL_TEMPLATE_SPECIALIZATION (decl))
4934                 /* OK, specialization was already checked.  */;
4935               else
4936                 {
4937                   error_at (DECL_SOURCE_LOCATION (decl),
4938                             "non-member-template declaration of %qD", decl);
4939                   inform (DECL_SOURCE_LOCATION (field), "does not match "
4940                           "member template declaration here");
4941                   return error_mark_node;
4942                 }
4943             }
4944           else
4945             {
4946               if (variable_template_p (field))
4947                 field = DECL_TEMPLATE_RESULT (field);
4948
4949               if (DECL_CONTEXT (field) != context)
4950                 {
4951                   if (!same_type_p (DECL_CONTEXT (field), context))
4952                     permerror (input_location, "ISO C++ does not permit %<%T::%D%> "
4953                                "to be defined as %<%T::%D%>",
4954                                DECL_CONTEXT (field), DECL_NAME (decl),
4955                                context, DECL_NAME (decl));
4956                   DECL_CONTEXT (decl) = DECL_CONTEXT (field);
4957                 }
4958               /* Static data member are tricky; an in-class initialization
4959                  still doesn't provide a definition, so the in-class
4960                  declaration will have DECL_EXTERNAL set, but will have an
4961                  initialization.  Thus, duplicate_decls won't warn
4962                  about this situation, and so we check here.  */
4963               if (initialized && DECL_INITIALIZED_IN_CLASS_P (field))
4964                 error ("duplicate initialization of %qD", decl);
4965               if (duplicate_decls (decl, field, /*newdecl_is_friend=*/false))
4966                 decl = field;
4967               if (decl_spec_seq_has_spec_p (declspecs, ds_constexpr)
4968                   && !DECL_DECLARED_CONSTEXPR_P (field))
4969                 error ("%qD declared %<constexpr%> outside its class", field);
4970             }
4971         }
4972       else
4973         {
4974           tree field = check_classfn (context, decl,
4975                                       this_tmpl
4976                                       ? current_template_parms
4977                                       : NULL_TREE);
4978           if (field && field != error_mark_node
4979               && duplicate_decls (decl, field,
4980                                  /*newdecl_is_friend=*/false))
4981             decl = field;
4982         }
4983
4984       /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set.  */
4985       DECL_IN_AGGR_P (decl) = 0;
4986       /* Do not mark DECL as an explicit specialization if it was not
4987          already marked as an instantiation; a declaration should
4988          never be marked as a specialization unless we know what
4989          template is being specialized.  */
4990       if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
4991         {
4992           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
4993           if (TREE_CODE (decl) == FUNCTION_DECL)
4994             DECL_COMDAT (decl) = (TREE_PUBLIC (decl)
4995                                   && DECL_DECLARED_INLINE_P (decl));
4996           else
4997             DECL_COMDAT (decl) = false;
4998
4999           /* [temp.expl.spec] An explicit specialization of a static data
5000              member of a template is a definition if the declaration
5001              includes an initializer; otherwise, it is a declaration.
5002
5003              We check for processing_specialization so this only applies
5004              to the new specialization syntax.  */
5005           if (!initialized && processing_specialization)
5006             DECL_EXTERNAL (decl) = 1;
5007         }
5008
5009       if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl)
5010           /* Aliases are definitions. */
5011           && !alias)
5012         permerror (input_location, "declaration of %q#D outside of class is not definition",
5013                    decl);
5014     }
5015
5016   was_public = TREE_PUBLIC (decl);
5017
5018   /* Enter this declaration into the symbol table.  Don't push the plain
5019      VAR_DECL for a variable template.  */
5020   if (!template_parm_scope_p ()
5021       || !VAR_P (decl))
5022     decl = maybe_push_decl (decl);
5023
5024   if (processing_template_decl)
5025     decl = push_template_decl (decl);
5026   if (decl == error_mark_node)
5027     return error_mark_node;
5028
5029   if (VAR_P (decl)
5030       && DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) && !was_public
5031       && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl))
5032     {
5033       /* This is a const variable with implicit 'static'.  Set
5034          DECL_THIS_STATIC so we can tell it from variables that are
5035          !TREE_PUBLIC because of the anonymous namespace.  */
5036       gcc_assert (CP_TYPE_CONST_P (TREE_TYPE (decl)) || errorcount);
5037       DECL_THIS_STATIC (decl) = 1;
5038     }
5039
5040   if (current_function_decl && VAR_P (decl)
5041       && DECL_DECLARED_CONSTEXPR_P (current_function_decl))
5042     {
5043       bool ok = false;
5044       if (CP_DECL_THREAD_LOCAL_P (decl))
5045         error ("%qD declared %<thread_local%> in %<constexpr%> function",
5046                decl);
5047       else if (TREE_STATIC (decl))
5048         error ("%qD declared %<static%> in %<constexpr%> function", decl);
5049       else
5050         ok = true;
5051       if (!ok)
5052         cp_function_chain->invalid_constexpr = true;
5053     }
5054
5055   if (!processing_template_decl && VAR_P (decl))
5056     start_decl_1 (decl, initialized);
5057
5058   return decl;
5059 }
5060
5061 /* Process the declaration of a variable DECL.  INITIALIZED is true
5062    iff DECL is explicitly initialized.  (INITIALIZED is false if the
5063    variable is initialized via an implicitly-called constructor.)
5064    This function must be called for ordinary variables (including, for
5065    example, implicit instantiations of templates), but must not be
5066    called for template declarations.  */
5067
5068 void
5069 start_decl_1 (tree decl, bool initialized)
5070 {
5071   tree type;
5072   bool complete_p;
5073   bool aggregate_definition_p;
5074
5075   gcc_assert (!processing_template_decl);
5076
5077   if (error_operand_p (decl))
5078     return;
5079
5080   gcc_assert (VAR_P (decl));
5081
5082   type = TREE_TYPE (decl);
5083   complete_p = COMPLETE_TYPE_P (type);
5084   aggregate_definition_p = MAYBE_CLASS_TYPE_P (type) && !DECL_EXTERNAL (decl);
5085
5086   /* If an explicit initializer is present, or if this is a definition
5087      of an aggregate, then we need a complete type at this point.
5088      (Scalars are always complete types, so there is nothing to
5089      check.)  This code just sets COMPLETE_P; errors (if necessary)
5090      are issued below.  */
5091   if ((initialized || aggregate_definition_p) 
5092       && !complete_p
5093       && COMPLETE_TYPE_P (complete_type (type)))
5094     {
5095       complete_p = true;
5096       /* We will not yet have set TREE_READONLY on DECL if the type
5097          was "const", but incomplete, before this point.  But, now, we
5098          have a complete type, so we can try again.  */
5099       cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
5100     }
5101
5102   if (initialized)
5103     /* Is it valid for this decl to have an initializer at all?  */
5104     {
5105       /* Don't allow initializations for incomplete types except for
5106          arrays which might be completed by the initialization.  */
5107       if (complete_p)
5108         ;                       /* A complete type is ok.  */
5109       else if (type_uses_auto (type))
5110         ;                       /* An auto type is ok.  */
5111       else if (TREE_CODE (type) != ARRAY_TYPE)
5112         {
5113           error ("variable %q#D has initializer but incomplete type", decl);
5114           type = TREE_TYPE (decl) = error_mark_node;
5115         }
5116       else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
5117         {
5118           if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
5119             error ("elements of array %q#D have incomplete type", decl);
5120           /* else we already gave an error in start_decl.  */
5121         }
5122     }
5123   else if (aggregate_definition_p && !complete_p)
5124     {
5125       if (type_uses_auto (type))
5126         error ("declaration of %q#D has no initializer", decl);
5127       else
5128         error ("aggregate %q#D has incomplete type and cannot be defined",
5129                decl);
5130       /* Change the type so that assemble_variable will give
5131          DECL an rtl we can live with: (mem (const_int 0)).  */
5132       type = TREE_TYPE (decl) = error_mark_node;
5133     }
5134
5135   /* Create a new scope to hold this declaration if necessary.
5136      Whether or not a new scope is necessary cannot be determined
5137      until after the type has been completed; if the type is a
5138      specialization of a class template it is not until after
5139      instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
5140      will be set correctly.  */
5141   maybe_push_cleanup_level (type);
5142 }
5143
5144 /* Handle initialization of references.  DECL, TYPE, and INIT have the
5145    same meaning as in cp_finish_decl.  *CLEANUP must be NULL on entry,
5146    but will be set to a new CLEANUP_STMT if a temporary is created
5147    that must be destroyed subsequently.
5148
5149    Returns an initializer expression to use to initialize DECL, or
5150    NULL if the initialization can be performed statically.
5151
5152    Quotes on semantics can be found in ARM 8.4.3.  */
5153
5154 static tree
5155 grok_reference_init (tree decl, tree type, tree init, int flags)
5156 {
5157   if (init == NULL_TREE)
5158     {
5159       if ((DECL_LANG_SPECIFIC (decl) == 0
5160            || DECL_IN_AGGR_P (decl) == 0)
5161           && ! DECL_THIS_EXTERN (decl))
5162         error ("%qD declared as reference but not initialized", decl);
5163       return NULL_TREE;
5164     }
5165
5166   if (TREE_CODE (init) == TREE_LIST)
5167     init = build_x_compound_expr_from_list (init, ELK_INIT,
5168                                             tf_warning_or_error);
5169
5170   tree ttype = TREE_TYPE (type);
5171   if (TREE_CODE (ttype) != ARRAY_TYPE
5172       && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
5173     /* Note: default conversion is only called in very special cases.  */
5174     init = decay_conversion (init, tf_warning_or_error);
5175
5176   /* check_initializer handles this for non-reference variables, but for
5177      references we need to do it here or the initializer will get the
5178      incomplete array type and confuse later calls to
5179      cp_complete_array_type.  */
5180   if (TREE_CODE (ttype) == ARRAY_TYPE
5181       && TYPE_DOMAIN (ttype) == NULL_TREE
5182       && (BRACE_ENCLOSED_INITIALIZER_P (init)
5183           || TREE_CODE (init) == STRING_CST))
5184     {
5185       cp_complete_array_type (&ttype, init, false);
5186       if (ttype != TREE_TYPE (type))
5187         type = cp_build_reference_type (ttype, TYPE_REF_IS_RVALUE (type));
5188     }
5189
5190   /* Convert INIT to the reference type TYPE.  This may involve the
5191      creation of a temporary, whose lifetime must be the same as that
5192      of the reference.  If so, a DECL_EXPR for the temporary will be
5193      added just after the DECL_EXPR for DECL.  That's why we don't set
5194      DECL_INITIAL for local references (instead assigning to them
5195      explicitly); we need to allow the temporary to be initialized
5196      first.  */
5197   return initialize_reference (type, init, flags,
5198                                tf_warning_or_error);
5199 }
5200
5201 /* Designated initializers in arrays are not supported in GNU C++.
5202    The parser cannot detect this error since it does not know whether
5203    a given brace-enclosed initializer is for a class type or for an
5204    array.  This function checks that CE does not use a designated
5205    initializer.  If it does, an error is issued.  Returns true if CE
5206    is valid, i.e., does not have a designated initializer.  */
5207
5208 static bool
5209 check_array_designated_initializer (constructor_elt *ce,
5210                                     unsigned HOST_WIDE_INT index)
5211 {
5212   /* Designated initializers for array elements are not supported.  */
5213   if (ce->index)
5214     {
5215       /* The parser only allows identifiers as designated
5216          initializers.  */
5217       if (ce->index == error_mark_node)
5218         {
5219           error ("name used in a GNU-style designated "
5220                  "initializer for an array");
5221           return false;
5222         }
5223       else if (identifier_p (ce->index))
5224         {
5225           error ("name %qD used in a GNU-style designated "
5226                  "initializer for an array", ce->index);
5227           return false;
5228         }
5229
5230       tree ce_index = build_expr_type_conversion (WANT_INT | WANT_ENUM,
5231                                                   ce->index, true);
5232       if (ce_index
5233           && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (ce_index))
5234           && (TREE_CODE (ce_index = maybe_constant_value (ce_index))
5235               == INTEGER_CST))
5236         {
5237           /* A C99 designator is OK if it matches the current index.  */
5238           if (wi::eq_p (ce_index, index))
5239             return true;
5240           else
5241             sorry ("non-trivial designated initializers not supported");
5242         }
5243       else
5244         error ("C99 designator %qE is not an integral constant-expression",
5245                ce->index);
5246
5247       return false;
5248     }
5249
5250   return true;
5251 }
5252
5253 /* When parsing `int a[] = {1, 2};' we don't know the size of the
5254    array until we finish parsing the initializer.  If that's the
5255    situation we're in, update DECL accordingly.  */
5256
5257 static void
5258 maybe_deduce_size_from_array_init (tree decl, tree init)
5259 {
5260   tree type = TREE_TYPE (decl);
5261
5262   if (TREE_CODE (type) == ARRAY_TYPE
5263       && TYPE_DOMAIN (type) == NULL_TREE
5264       && TREE_CODE (decl) != TYPE_DECL)
5265     {
5266       /* do_default is really a C-ism to deal with tentative definitions.
5267          But let's leave it here to ease the eventual merge.  */
5268       int do_default = !DECL_EXTERNAL (decl);
5269       tree initializer = init ? init : DECL_INITIAL (decl);
5270       int failure = 0;
5271
5272       /* Check that there are no designated initializers in INIT, as
5273          those are not supported in GNU C++, and as the middle-end
5274          will crash if presented with a non-numeric designated
5275          initializer.  */
5276       if (initializer && BRACE_ENCLOSED_INITIALIZER_P (initializer))
5277         {
5278           vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initializer);
5279           constructor_elt *ce;
5280           HOST_WIDE_INT i;
5281           FOR_EACH_VEC_SAFE_ELT (v, i, ce)
5282             if (!check_array_designated_initializer (ce, i))
5283               failure = 1;
5284         }
5285
5286       if (!failure)
5287         {
5288           failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
5289                                             do_default);
5290           if (failure == 1)
5291             {
5292               error ("initializer fails to determine size of %qD", decl);
5293             }
5294           else if (failure == 2)
5295             {
5296               if (do_default)
5297                 {
5298                   error ("array size missing in %qD", decl);
5299                 }
5300               /* If a `static' var's size isn't known, make it extern as
5301                  well as static, so it does not get allocated.  If it's not
5302                  `static', then don't mark it extern; finish_incomplete_decl
5303                  will give it a default size and it will get allocated.  */
5304               else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
5305                 DECL_EXTERNAL (decl) = 1;
5306             }
5307           else if (failure == 3)
5308             {
5309               error ("zero-size array %qD", decl);
5310             }
5311         }
5312
5313       cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
5314
5315       relayout_decl (decl);
5316     }
5317 }
5318
5319 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
5320    any appropriate error messages regarding the layout.  */
5321
5322 static void
5323 layout_var_decl (tree decl)
5324 {
5325   tree type;
5326
5327   type = TREE_TYPE (decl);
5328   if (type == error_mark_node)
5329     return;
5330
5331   /* If we haven't already laid out this declaration, do so now.
5332      Note that we must not call complete type for an external object
5333      because it's type might involve templates that we are not
5334      supposed to instantiate yet.  (And it's perfectly valid to say
5335      `extern X x' for some incomplete type `X'.)  */
5336   if (!DECL_EXTERNAL (decl))
5337     complete_type (type);
5338   if (!DECL_SIZE (decl)
5339       && TREE_TYPE (decl) != error_mark_node
5340       && complete_or_array_type_p (type))
5341     layout_decl (decl, 0);
5342
5343   if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
5344     {
5345       /* An automatic variable with an incomplete type: that is an error.
5346          Don't talk about array types here, since we took care of that
5347          message in grokdeclarator.  */
5348       error ("storage size of %qD isn%'t known", decl);
5349       TREE_TYPE (decl) = error_mark_node;
5350     }
5351 #if 0
5352   /* Keep this code around in case we later want to control debug info
5353      based on whether a type is "used".  (jason 1999-11-11) */
5354
5355   else if (!DECL_EXTERNAL (decl) && MAYBE_CLASS_TYPE_P (ttype))
5356     /* Let debugger know it should output info for this type.  */
5357     note_debug_info_needed (ttype);
5358
5359   if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
5360     note_debug_info_needed (DECL_CONTEXT (decl));
5361 #endif
5362
5363   if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
5364       && DECL_SIZE (decl) != NULL_TREE
5365       && ! TREE_CONSTANT (DECL_SIZE (decl)))
5366     {
5367       if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
5368         constant_expression_warning (DECL_SIZE (decl));
5369       else
5370         {
5371           error ("storage size of %qD isn%'t constant", decl);
5372           TREE_TYPE (decl) = error_mark_node;
5373         }
5374     }
5375 }
5376
5377 /* If a local static variable is declared in an inline function, or if
5378    we have a weak definition, we must endeavor to create only one
5379    instance of the variable at link-time.  */
5380
5381 void
5382 maybe_commonize_var (tree decl)
5383 {
5384   /* Static data in a function with comdat linkage also has comdat
5385      linkage.  */
5386   if (TREE_STATIC (decl)
5387       /* Don't mess with __FUNCTION__.  */
5388       && ! DECL_ARTIFICIAL (decl)
5389       && DECL_FUNCTION_SCOPE_P (decl)
5390       && vague_linkage_p (DECL_CONTEXT (decl)))
5391     {
5392       if (flag_weak)
5393         {
5394           /* With weak symbols, we simply make the variable COMDAT;
5395              that will cause copies in multiple translations units to
5396              be merged.  */
5397           comdat_linkage (decl);
5398         }
5399       else
5400         {
5401           if (DECL_INITIAL (decl) == NULL_TREE
5402               || DECL_INITIAL (decl) == error_mark_node)
5403             {
5404               /* Without weak symbols, we can use COMMON to merge
5405                  uninitialized variables.  */
5406               TREE_PUBLIC (decl) = 1;
5407               DECL_COMMON (decl) = 1;
5408             }
5409           else
5410             {
5411               /* While for initialized variables, we must use internal
5412                  linkage -- which means that multiple copies will not
5413                  be merged.  */
5414               TREE_PUBLIC (decl) = 0;
5415               DECL_COMMON (decl) = 0;
5416               if (warning_at (DECL_SOURCE_LOCATION (decl), 0,
5417                               "sorry: semantics of inline function static "
5418                               "data %q#D are wrong (you%'ll wind up "
5419                               "with multiple copies)", decl))
5420                 inform (DECL_SOURCE_LOCATION (decl),
5421                         "you can work around this by removing the initializer");
5422             }
5423         }
5424     }
5425 }
5426
5427 /* Issue an error message if DECL is an uninitialized const variable.  */
5428
5429 static void
5430 check_for_uninitialized_const_var (tree decl)
5431 {
5432   tree type = strip_array_types (TREE_TYPE (decl));
5433
5434   /* ``Unless explicitly declared extern, a const object does not have
5435      external linkage and must be initialized. ($8.4; $12.1)'' ARM
5436      7.1.6 */
5437   if (VAR_P (decl)
5438       && TREE_CODE (type) != REFERENCE_TYPE
5439       && (CP_TYPE_CONST_P (type) || var_in_constexpr_fn (decl))
5440       && !DECL_INITIAL (decl))
5441     {
5442       tree field = default_init_uninitialized_part (type);
5443       if (!field)
5444         return;
5445
5446       if (CP_TYPE_CONST_P (type))
5447         permerror (DECL_SOURCE_LOCATION (decl),
5448                    "uninitialized const %qD", decl);
5449       else
5450         {
5451           error_at (DECL_SOURCE_LOCATION (decl),
5452                     "uninitialized variable %qD in %<constexpr%> function",
5453                     decl);
5454           cp_function_chain->invalid_constexpr = true;
5455         }
5456
5457       if (CLASS_TYPE_P (type))
5458         {
5459           tree defaulted_ctor;
5460
5461           inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
5462                   "%q#T has no user-provided default constructor", type);
5463           defaulted_ctor = in_class_defaulted_default_constructor (type);
5464           if (defaulted_ctor)
5465             inform (DECL_SOURCE_LOCATION (defaulted_ctor),
5466                     "constructor is not user-provided because it is "
5467                     "explicitly defaulted in the class body");
5468           inform (DECL_SOURCE_LOCATION (field),
5469                   "and the implicitly-defined constructor does not "
5470                   "initialize %q#D", field);
5471         }
5472     }
5473 }
5474 \f
5475 /* Structure holding the current initializer being processed by reshape_init.
5476    CUR is a pointer to the current element being processed, END is a pointer
5477    after the last element present in the initializer.  */
5478 struct reshape_iter
5479 {
5480   constructor_elt *cur;
5481   constructor_elt *end;
5482 };
5483
5484 static tree reshape_init_r (tree, reshape_iter *, bool, tsubst_flags_t);
5485
5486 /* FIELD is a FIELD_DECL or NULL.  In the former case, the value
5487    returned is the next FIELD_DECL (possibly FIELD itself) that can be
5488    initialized.  If there are no more such fields, the return value
5489    will be NULL.  */
5490
5491 tree
5492 next_initializable_field (tree field)
5493 {
5494   while (field
5495          && (TREE_CODE (field) != FIELD_DECL
5496              || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
5497              || DECL_ARTIFICIAL (field)))
5498     field = DECL_CHAIN (field);
5499
5500   return field;
5501 }
5502
5503 /* Subroutine of reshape_init_array and reshape_init_vector, which does
5504    the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
5505    INTEGER_CST representing the size of the array minus one (the maximum index),
5506    or NULL_TREE if the array was declared without specifying the size. D is
5507    the iterator within the constructor.  */
5508
5509 static tree
5510 reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d,
5511                       tsubst_flags_t complain)
5512 {
5513   tree new_init;
5514   bool sized_array_p = (max_index && TREE_CONSTANT (max_index));
5515   unsigned HOST_WIDE_INT max_index_cst = 0;
5516   unsigned HOST_WIDE_INT index;
5517
5518   /* The initializer for an array is always a CONSTRUCTOR.  */
5519   new_init = build_constructor (init_list_type_node, NULL);
5520
5521   if (sized_array_p)
5522     {
5523       /* Minus 1 is used for zero sized arrays.  */
5524       if (integer_all_onesp (max_index))
5525         return new_init;
5526
5527       if (tree_fits_uhwi_p (max_index))
5528         max_index_cst = tree_to_uhwi (max_index);
5529       /* sizetype is sign extended, not zero extended.  */
5530       else
5531         max_index_cst = tree_to_uhwi (fold_convert (size_type_node, max_index));
5532     }
5533
5534   /* Loop until there are no more initializers.  */
5535   for (index = 0;
5536        d->cur != d->end && (!sized_array_p || index <= max_index_cst);
5537        ++index)
5538     {
5539       tree elt_init;
5540       constructor_elt *old_cur = d->cur;
5541
5542       check_array_designated_initializer (d->cur, index);
5543       elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false,
5544                                  complain);
5545       if (elt_init == error_mark_node)
5546         return error_mark_node;
5547       CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init),
5548                               size_int (index), elt_init);
5549       if (!TREE_CONSTANT (elt_init))
5550         TREE_CONSTANT (new_init) = false;
5551
5552       /* This can happen with an invalid initializer (c++/54501).  */
5553       if (d->cur == old_cur && !sized_array_p)
5554         break;
5555     }
5556
5557   return new_init;
5558 }
5559
5560 /* Subroutine of reshape_init_r, processes the initializers for arrays.
5561    Parameters are the same of reshape_init_r.  */
5562
5563 static tree
5564 reshape_init_array (tree type, reshape_iter *d, tsubst_flags_t complain)
5565 {
5566   tree max_index = NULL_TREE;
5567
5568   gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
5569
5570   if (TYPE_DOMAIN (type))
5571     max_index = array_type_nelts (type);
5572
5573   return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5574 }
5575
5576 /* Subroutine of reshape_init_r, processes the initializers for vectors.
5577    Parameters are the same of reshape_init_r.  */
5578
5579 static tree
5580 reshape_init_vector (tree type, reshape_iter *d, tsubst_flags_t complain)
5581 {
5582   tree max_index = NULL_TREE;
5583
5584   gcc_assert (VECTOR_TYPE_P (type));
5585
5586   if (COMPOUND_LITERAL_P (d->cur->value))
5587     {
5588       tree value = d->cur->value;
5589       if (!same_type_p (TREE_TYPE (value), type))
5590         {
5591           if (complain & tf_error)
5592             error ("invalid type %qT as initializer for a vector of type %qT",
5593                    TREE_TYPE (d->cur->value), type);
5594           value = error_mark_node;
5595         }
5596       ++d->cur;
5597       return value;
5598     }
5599
5600   /* For a vector, we initialize it as an array of the appropriate size.  */
5601   if (VECTOR_TYPE_P (type))
5602     max_index = size_int (TYPE_VECTOR_SUBPARTS (type) - 1);
5603
5604   return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5605 }
5606
5607 /* Subroutine of reshape_init_r, processes the initializers for classes
5608    or union. Parameters are the same of reshape_init_r.  */
5609
5610 static tree
5611 reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p,
5612                     tsubst_flags_t complain)
5613 {
5614   tree field;
5615   tree new_init;
5616
5617   gcc_assert (CLASS_TYPE_P (type));
5618
5619   /* The initializer for a class is always a CONSTRUCTOR.  */
5620   new_init = build_constructor (init_list_type_node, NULL);
5621   field = next_initializable_field (TYPE_FIELDS (type));
5622
5623   if (!field)
5624     {
5625       /* [dcl.init.aggr]
5626
5627         An initializer for an aggregate member that is an
5628         empty class shall have the form of an empty
5629         initializer-list {}.  */
5630       if (!first_initializer_p)
5631         {
5632           if (complain & tf_error)
5633             error ("initializer for %qT must be brace-enclosed", type);
5634           return error_mark_node;
5635         }
5636       return new_init;
5637     }
5638
5639   /* Loop through the initializable fields, gathering initializers.  */
5640   while (d->cur != d->end)
5641     {
5642       tree field_init;
5643       constructor_elt *old_cur = d->cur;
5644
5645       /* Handle designated initializers, as an extension.  */
5646       if (d->cur->index)
5647         {
5648           if (d->cur->index == error_mark_node)
5649             return error_mark_node;
5650
5651           if (TREE_CODE (d->cur->index) == FIELD_DECL)
5652             /* We already reshaped this.  */
5653             gcc_assert (d->cur->index == field);
5654           else if (TREE_CODE (d->cur->index) == IDENTIFIER_NODE)
5655             field = lookup_field_1 (type, d->cur->index, /*want_type=*/false);
5656           else
5657             {
5658               if (complain & tf_error)
5659                 error ("%<[%E] =%> used in a GNU-style designated initializer"
5660                        " for class %qT", d->cur->index, type);
5661               return error_mark_node;
5662             }
5663
5664           if (!field || TREE_CODE (field) != FIELD_DECL)
5665             {
5666               if (complain & tf_error)
5667                 error ("%qT has no non-static data member named %qD", type,
5668                        d->cur->index);
5669               return error_mark_node;
5670             }
5671         }
5672
5673       /* If we processed all the member of the class, we are done.  */
5674       if (!field)
5675         break;
5676
5677       field_init = reshape_init_r (TREE_TYPE (field), d,
5678                                    /*first_initializer_p=*/false, complain);
5679       if (field_init == error_mark_node)
5680         return error_mark_node;
5681
5682       if (d->cur == old_cur && d->cur->index)
5683         {
5684           /* This can happen with an invalid initializer for a flexible
5685              array member (c++/54441).  */
5686           if (complain & tf_error)
5687             error ("invalid initializer for %q#D", field);
5688           return error_mark_node;
5689         }
5690
5691       CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
5692
5693       /* [dcl.init.aggr]
5694
5695         When a union  is  initialized with a brace-enclosed
5696         initializer, the braces shall only contain an
5697         initializer for the first member of the union.  */
5698       if (TREE_CODE (type) == UNION_TYPE)
5699         break;
5700
5701       field = next_initializable_field (DECL_CHAIN (field));
5702     }
5703
5704   return new_init;
5705 }
5706
5707 /* Subroutine of reshape_init_r.  We're in a context where C99 initializer
5708    designators are not valid; either complain or return true to indicate
5709    that reshape_init_r should return error_mark_node.  */
5710
5711 static bool
5712 has_designator_problem (reshape_iter *d, tsubst_flags_t complain)
5713 {
5714   if (d->cur->index)
5715     {
5716       if (complain & tf_error)
5717         error ("C99 designator %qE outside aggregate initializer",
5718                d->cur->index);
5719       else
5720         return true;
5721     }
5722   return false;
5723 }
5724
5725 /* Subroutine of reshape_init, which processes a single initializer (part of
5726    a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
5727    iterator within the CONSTRUCTOR which points to the initializer to process.
5728    FIRST_INITIALIZER_P is true if this is the first initializer of the
5729    outermost CONSTRUCTOR node.  */
5730
5731 static tree
5732 reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p,
5733                 tsubst_flags_t complain)
5734 {
5735   tree init = d->cur->value;
5736
5737   if (error_operand_p (init))
5738     return error_mark_node;
5739
5740   if (first_initializer_p && !CP_AGGREGATE_TYPE_P (type)
5741       && has_designator_problem (d, complain))
5742     return error_mark_node;
5743
5744   if (TREE_CODE (type) == COMPLEX_TYPE)
5745     {
5746       /* A complex type can be initialized from one or two initializers,
5747          but braces are not elided.  */
5748       d->cur++;
5749       if (BRACE_ENCLOSED_INITIALIZER_P (init))
5750         {
5751           if (CONSTRUCTOR_NELTS (init) > 2)
5752             {
5753               if (complain & tf_error)
5754                 error ("too many initializers for %qT", type);
5755               else
5756                 return error_mark_node;
5757             }
5758         }
5759       else if (first_initializer_p && d->cur != d->end)
5760         {
5761           vec<constructor_elt, va_gc> *v = 0;
5762           CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, init);
5763           CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, d->cur->value);
5764           if (has_designator_problem (d, complain))
5765             return error_mark_node;
5766           d->cur++;
5767           init = build_constructor (init_list_type_node, v);
5768         }
5769       return init;
5770     }
5771
5772   /* A non-aggregate type is always initialized with a single
5773      initializer.  */
5774   if (!CP_AGGREGATE_TYPE_P (type))
5775     {
5776       /* It is invalid to initialize a non-aggregate type with a
5777          brace-enclosed initializer before C++0x.
5778          We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
5779          of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
5780          a CONSTRUCTOR (with a record type).  */
5781       if (TREE_CODE (init) == CONSTRUCTOR
5782           /* Don't complain about a capture-init.  */
5783           && !CONSTRUCTOR_IS_DIRECT_INIT (init)
5784           && BRACE_ENCLOSED_INITIALIZER_P (init))  /* p7626.C */
5785         {
5786           if (SCALAR_TYPE_P (type))
5787             {
5788               if (cxx_dialect < cxx11
5789                   /* Isn't value-initialization.  */
5790                   || CONSTRUCTOR_NELTS (init) > 0)
5791                 {
5792                   if (complain & tf_error)
5793                     error ("braces around scalar initializer for type %qT",
5794                            type);
5795                   init = error_mark_node;
5796                 }
5797             }
5798           else
5799             maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5800         }
5801
5802       d->cur++;
5803       return init;
5804     }
5805
5806   /* "If T is a class type and the initializer list has a single element of
5807      type cv U, where U is T or a class derived from T, the object is
5808      initialized from that element."  Even if T is an aggregate.  */
5809   if (cxx_dialect >= cxx11 && (CLASS_TYPE_P (type) || VECTOR_TYPE_P (type))
5810       && first_initializer_p
5811       && d->end - d->cur == 1
5812       && reference_related_p (type, TREE_TYPE (init)))
5813     {
5814       d->cur++;
5815       return init;
5816     }
5817
5818   /* [dcl.init.aggr]
5819
5820      All implicit type conversions (clause _conv_) are considered when
5821      initializing the aggregate member with an initializer from an
5822      initializer-list.  If the initializer can initialize a member,
5823      the member is initialized.  Otherwise, if the member is itself a
5824      non-empty subaggregate, brace elision is assumed and the
5825      initializer is considered for the initialization of the first
5826      member of the subaggregate.  */
5827   if (TREE_CODE (init) != CONSTRUCTOR
5828       /* But don't try this for the first initializer, since that would be
5829          looking through the outermost braces; A a2 = { a1 }; is not a
5830          valid aggregate initialization.  */
5831       && !first_initializer_p
5832       && (same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (init))
5833           || can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL,
5834                               complain)))
5835     {
5836       d->cur++;
5837       return init;
5838     }
5839
5840   /* [dcl.init.string]
5841
5842       A char array (whether plain char, signed char, or unsigned char)
5843       can be initialized by a string-literal (optionally enclosed in
5844       braces); a wchar_t array can be initialized by a wide
5845       string-literal (optionally enclosed in braces).  */
5846   if (TREE_CODE (type) == ARRAY_TYPE
5847       && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
5848     {
5849       tree str_init = init;
5850
5851       /* Strip one level of braces if and only if they enclose a single
5852          element (as allowed by [dcl.init.string]).  */
5853       if (!first_initializer_p
5854           && TREE_CODE (str_init) == CONSTRUCTOR
5855           && vec_safe_length (CONSTRUCTOR_ELTS (str_init)) == 1)
5856         {
5857           str_init = (*CONSTRUCTOR_ELTS (str_init))[0].value;
5858         }
5859
5860       /* If it's a string literal, then it's the initializer for the array
5861          as a whole. Otherwise, continue with normal initialization for
5862          array types (one value per array element).  */
5863       if (TREE_CODE (str_init) == STRING_CST)
5864         {
5865           if (has_designator_problem (d, complain))
5866             return error_mark_node;
5867           d->cur++;
5868           return str_init;
5869         }
5870     }
5871
5872   /* The following cases are about aggregates. If we are not within a full
5873      initializer already, and there is not a CONSTRUCTOR, it means that there
5874      is a missing set of braces (that is, we are processing the case for
5875      which reshape_init exists).  */
5876   if (!first_initializer_p)
5877     {
5878       if (TREE_CODE (init) == CONSTRUCTOR)
5879         {
5880           if (TREE_TYPE (init) && TYPE_PTRMEMFUNC_P (TREE_TYPE (init)))
5881             /* There is no need to reshape pointer-to-member function
5882                initializers, as they are always constructed correctly
5883                by the front end.  */
5884            ;
5885           else if (COMPOUND_LITERAL_P (init))
5886           /* For a nested compound literal, there is no need to reshape since
5887              brace elision is not allowed. Even if we decided to allow it,
5888              we should add a call to reshape_init in finish_compound_literal,
5889              before calling digest_init, so changing this code would still
5890              not be necessary.  */
5891             gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
5892           else
5893             {
5894               ++d->cur;
5895               gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5896               return reshape_init (type, init, complain);
5897             }
5898         }
5899
5900       if (complain & tf_warning)
5901         warning (OPT_Wmissing_braces,
5902                  "missing braces around initializer for %qT",
5903                  type);
5904     }
5905
5906   /* Dispatch to specialized routines.  */
5907   if (CLASS_TYPE_P (type))
5908     return reshape_init_class (type, d, first_initializer_p, complain);
5909   else if (TREE_CODE (type) == ARRAY_TYPE)
5910     return reshape_init_array (type, d, complain);
5911   else if (VECTOR_TYPE_P (type))
5912     return reshape_init_vector (type, d, complain);
5913   else
5914     gcc_unreachable();
5915 }
5916
5917 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
5918    brace-enclosed aggregate initializer.
5919
5920    INIT is the CONSTRUCTOR containing the list of initializers describing
5921    a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
5922    It may not presently match the shape of the TYPE; for example:
5923
5924      struct S { int a; int b; };
5925      struct S a[] = { 1, 2, 3, 4 };
5926
5927    Here INIT will hold a vector of four elements, rather than a
5928    vector of two elements, each itself a vector of two elements.  This
5929    routine transforms INIT from the former form into the latter.  The
5930    revised CONSTRUCTOR node is returned.  */
5931
5932 tree
5933 reshape_init (tree type, tree init, tsubst_flags_t complain)
5934 {
5935   vec<constructor_elt, va_gc> *v;
5936   reshape_iter d;
5937   tree new_init;
5938
5939   gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5940
5941   v = CONSTRUCTOR_ELTS (init);
5942
5943   /* An empty constructor does not need reshaping, and it is always a valid
5944      initializer.  */
5945   if (vec_safe_is_empty (v))
5946     return init;
5947
5948   /* Recurse on this CONSTRUCTOR.  */
5949   d.cur = &(*v)[0];
5950   d.end = d.cur + v->length ();
5951
5952   new_init = reshape_init_r (type, &d, true, complain);
5953   if (new_init == error_mark_node)
5954     return error_mark_node;
5955
5956   /* Make sure all the element of the constructor were used. Otherwise,
5957      issue an error about exceeding initializers.  */
5958   if (d.cur != d.end)
5959     {
5960       if (complain & tf_error)
5961         error ("too many initializers for %qT", type);
5962       else
5963         return error_mark_node;
5964     }
5965
5966   return new_init;
5967 }
5968
5969 /* Verify array initializer.  Returns true if errors have been reported.  */
5970
5971 bool
5972 check_array_initializer (tree decl, tree type, tree init)
5973 {
5974   tree element_type = TREE_TYPE (type);
5975
5976   /* The array type itself need not be complete, because the
5977      initializer may tell us how many elements are in the array.
5978      But, the elements of the array must be complete.  */
5979   if (!COMPLETE_TYPE_P (complete_type (element_type)))
5980     {
5981       if (decl)
5982         error ("elements of array %q#D have incomplete type", decl);
5983       else
5984         error ("elements of array %q#T have incomplete type", type);
5985       return true;
5986     }
5987   /* A compound literal can't have variable size.  */
5988   if (init && !decl
5989       && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
5990           || !TREE_CONSTANT (TYPE_SIZE (element_type))))
5991     {
5992       error ("variable-sized compound literal");
5993       return true;
5994     }
5995   return false;
5996 }
5997
5998 /* Subroutine of check_initializer; args are passed down from that function.
5999    Set stmts_are_full_exprs_p to 1 across a call to build_aggr_init.  */
6000
6001 static tree
6002 build_aggr_init_full_exprs (tree decl, tree init, int flags)
6003      
6004 {
6005   gcc_assert (stmts_are_full_exprs_p ());
6006   return build_aggr_init (decl, init, flags, tf_warning_or_error);
6007 }
6008
6009 /* Verify INIT (the initializer for DECL), and record the
6010    initialization in DECL_INITIAL, if appropriate.  CLEANUP is as for
6011    grok_reference_init.
6012
6013    If the return value is non-NULL, it is an expression that must be
6014    evaluated dynamically to initialize DECL.  */
6015
6016 static tree
6017 check_initializer (tree decl, tree init, int flags, vec<tree, va_gc> **cleanups)
6018 {
6019   tree type = TREE_TYPE (decl);
6020   tree init_code = NULL;
6021   tree core_type;
6022
6023   /* Things that are going to be initialized need to have complete
6024      type.  */
6025   TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
6026
6027   if (DECL_HAS_VALUE_EXPR_P (decl))
6028     {
6029       /* A variable with DECL_HAS_VALUE_EXPR_P set is just a placeholder,
6030          it doesn't have storage to be initialized.  */
6031       gcc_assert (init == NULL_TREE);
6032       return NULL_TREE;
6033     }
6034
6035   if (type == error_mark_node)
6036     /* We will have already complained.  */
6037     return NULL_TREE;
6038
6039   if (TREE_CODE (type) == ARRAY_TYPE)
6040     {
6041       if (check_array_initializer (decl, type, init))
6042         return NULL_TREE;
6043     }
6044   else if (!COMPLETE_TYPE_P (type))
6045     {
6046       error ("%q#D has incomplete type", decl);
6047       TREE_TYPE (decl) = error_mark_node;
6048       return NULL_TREE;
6049     }
6050   else
6051     /* There is no way to make a variable-sized class type in GNU C++.  */
6052     gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
6053
6054   if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
6055     {
6056       int init_len = vec_safe_length (CONSTRUCTOR_ELTS (init));
6057       if (SCALAR_TYPE_P (type))
6058         {
6059           if (init_len == 0)
6060             {
6061               maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
6062               init = build_zero_init (type, NULL_TREE, false);
6063             }
6064           else if (init_len != 1 && TREE_CODE (type) != COMPLEX_TYPE)
6065             {
6066               error ("scalar object %qD requires one element in initializer",
6067                      decl);
6068               TREE_TYPE (decl) = error_mark_node;
6069               return NULL_TREE;
6070             }
6071         }
6072     }
6073
6074   if (TREE_CODE (decl) == CONST_DECL)
6075     {
6076       gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
6077
6078       DECL_INITIAL (decl) = init;
6079
6080       gcc_assert (init != NULL_TREE);
6081       init = NULL_TREE;
6082     }
6083   else if (!init && DECL_REALLY_EXTERN (decl))
6084     ;
6085   else if (init || type_build_ctor_call (type)
6086            || TREE_CODE (type) == REFERENCE_TYPE)
6087     {
6088       if (TREE_CODE (type) == REFERENCE_TYPE)
6089         {
6090           init = grok_reference_init (decl, type, init, flags);
6091           flags |= LOOKUP_ALREADY_DIGESTED;
6092         }
6093       else if (!init)
6094         check_for_uninitialized_const_var (decl);
6095       /* Do not reshape constructors of vectors (they don't need to be
6096          reshaped.  */
6097       else if (BRACE_ENCLOSED_INITIALIZER_P (init))
6098         {
6099           if (is_std_init_list (type))
6100             {
6101               init = perform_implicit_conversion (type, init,
6102                                                   tf_warning_or_error);
6103               flags |= LOOKUP_ALREADY_DIGESTED;
6104             }
6105           else if (TYPE_NON_AGGREGATE_CLASS (type))
6106             {
6107               /* Don't reshape if the class has constructors.  */
6108               if (cxx_dialect == cxx98)
6109                 error ("in C++98 %qD must be initialized by constructor, "
6110                        "not by %<{...}%>",
6111                        decl);
6112             }
6113           else if (VECTOR_TYPE_P (type) && TYPE_VECTOR_OPAQUE (type))
6114             {
6115               error ("opaque vector types cannot be initialized");
6116               init = error_mark_node;
6117             }
6118           else
6119             {
6120               init = reshape_init (type, init, tf_warning_or_error);
6121               flags |= LOOKUP_NO_NARROWING;
6122             }
6123         }
6124       else if (TREE_CODE (init) == TREE_LIST
6125                && TREE_TYPE (init) != unknown_type_node
6126                && !MAYBE_CLASS_TYPE_P (type))
6127         {
6128           gcc_assert (TREE_CODE (decl) != RESULT_DECL);
6129
6130           /* We get here with code like `int a (2);' */
6131           init = build_x_compound_expr_from_list (init, ELK_INIT,
6132                                                   tf_warning_or_error);
6133         }
6134
6135       /* If DECL has an array type without a specific bound, deduce the
6136          array size from the initializer.  */
6137       maybe_deduce_size_from_array_init (decl, init);
6138       type = TREE_TYPE (decl);
6139       if (type == error_mark_node)
6140         return NULL_TREE;
6141
6142       if ((type_build_ctor_call (type) || CLASS_TYPE_P (type))
6143           && !(flags & LOOKUP_ALREADY_DIGESTED)
6144           && !(init && BRACE_ENCLOSED_INITIALIZER_P (init)
6145                && CP_AGGREGATE_TYPE_P (type)
6146                && (CLASS_TYPE_P (type)
6147                    || !TYPE_NEEDS_CONSTRUCTING (type)
6148                    || type_has_extended_temps (type))))
6149         {
6150           init_code = build_aggr_init_full_exprs (decl, init, flags);
6151
6152           /* A constructor call is a non-trivial initializer even if
6153              it isn't explicitly written.  */
6154           if (TREE_SIDE_EFFECTS (init_code))
6155             DECL_NONTRIVIALLY_INITIALIZED_P (decl) = true;
6156
6157           /* If this is a constexpr initializer, expand_default_init will
6158              have returned an INIT_EXPR rather than a CALL_EXPR.  In that
6159              case, pull the initializer back out and pass it down into
6160              store_init_value.  */
6161           while (TREE_CODE (init_code) == EXPR_STMT
6162                  || TREE_CODE (init_code) == CONVERT_EXPR)
6163             init_code = TREE_OPERAND (init_code, 0);
6164           if (TREE_CODE (init_code) == INIT_EXPR)
6165             {
6166               init = TREE_OPERAND (init_code, 1);
6167               init_code = NULL_TREE;
6168               /* Don't call digest_init; it's unnecessary and will complain
6169                  about aggregate initialization of non-aggregate classes.  */
6170               flags |= LOOKUP_ALREADY_DIGESTED;
6171             }
6172           else if (DECL_DECLARED_CONSTEXPR_P (decl))
6173             {
6174               /* Declared constexpr, but no suitable initializer; massage
6175                  init appropriately so we can pass it into store_init_value
6176                  for the error.  */
6177               if (CLASS_TYPE_P (type)
6178                   && (!init || TREE_CODE (init) == TREE_LIST))
6179                 {
6180                   init = build_functional_cast (type, init, tf_none);
6181                   if (TREE_CODE (init) == TARGET_EXPR)
6182                     TARGET_EXPR_DIRECT_INIT_P (init) = true;
6183                 }
6184               init_code = NULL_TREE;
6185             }
6186           else
6187             init = NULL_TREE;
6188         }
6189
6190       if (init && TREE_CODE (init) != TREE_VEC)
6191         {
6192           /* In aggregate initialization of a variable, each element
6193              initialization is a full-expression because there is no
6194              enclosing expression.  */
6195           gcc_assert (stmts_are_full_exprs_p ());
6196
6197           init_code = store_init_value (decl, init, cleanups, flags);
6198
6199           if (pedantic && TREE_CODE (type) == ARRAY_TYPE
6200               && DECL_INITIAL (decl)
6201               && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
6202               && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
6203             warning (0, "array %qD initialized by parenthesized string literal %qE",
6204                      decl, DECL_INITIAL (decl));
6205           init = NULL;
6206         }
6207     }
6208   else
6209     {
6210       if (CLASS_TYPE_P (core_type = strip_array_types (type))
6211           && (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type)
6212               || CLASSTYPE_REF_FIELDS_NEED_INIT (core_type)))
6213         diagnose_uninitialized_cst_or_ref_member (core_type, /*using_new=*/false,
6214                                                   /*complain=*/true);
6215
6216       check_for_uninitialized_const_var (decl);
6217     }
6218
6219   if (init && init != error_mark_node)
6220     init_code = build2 (INIT_EXPR, type, decl, init);
6221
6222   if (init_code)
6223     {
6224       /* We might have set these in cp_finish_decl.  */
6225       DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = false;
6226       TREE_CONSTANT (decl) = false;
6227     }
6228
6229   if (init_code && DECL_IN_AGGR_P (decl))
6230     {
6231       static int explained = 0;
6232
6233       if (cxx_dialect < cxx11)
6234         error ("initializer invalid for static member with constructor");
6235       else
6236         error ("non-constant in-class initialization invalid for static "
6237                "member %qD", decl);
6238       if (!explained)
6239         {
6240           inform (input_location,
6241                   "(an out of class initialization is required)");
6242           explained = 1;
6243         }
6244       return NULL_TREE;
6245     }
6246
6247   return init_code;
6248 }
6249
6250 /* If DECL is not a local variable, give it RTL.  */
6251
6252 static void
6253 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
6254 {
6255   int toplev = toplevel_bindings_p ();
6256   int defer_p;
6257
6258   /* Set the DECL_ASSEMBLER_NAME for the object.  */
6259   if (asmspec)
6260     {
6261       /* The `register' keyword, when used together with an
6262          asm-specification, indicates that the variable should be
6263          placed in a particular register.  */
6264       if (VAR_P (decl) && DECL_REGISTER (decl))
6265         {
6266           set_user_assembler_name (decl, asmspec);
6267           DECL_HARD_REGISTER (decl) = 1;
6268         }
6269       else
6270         {
6271           if (TREE_CODE (decl) == FUNCTION_DECL
6272               && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
6273             set_builtin_user_assembler_name (decl, asmspec);
6274           set_user_assembler_name (decl, asmspec);
6275         }
6276     }
6277
6278   /* Handle non-variables up front.  */
6279   if (!VAR_P (decl))
6280     {
6281       rest_of_decl_compilation (decl, toplev, at_eof);
6282       return;
6283     }
6284
6285   /* If we see a class member here, it should be a static data
6286      member.  */
6287   if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
6288     {
6289       gcc_assert (TREE_STATIC (decl));
6290       /* An in-class declaration of a static data member should be
6291          external; it is only a declaration, and not a definition.  */
6292       if (init == NULL_TREE)
6293         gcc_assert (DECL_EXTERNAL (decl) || !TREE_PUBLIC (decl));
6294     }
6295
6296   /* We don't create any RTL for local variables.  */
6297   if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
6298     return;
6299
6300   /* We defer emission of local statics until the corresponding
6301      DECL_EXPR is expanded.  But with constexpr its function might never
6302      be expanded, so go ahead and tell cgraph about the variable now.  */
6303   defer_p = ((DECL_FUNCTION_SCOPE_P (decl)
6304               && !DECL_DECLARED_CONSTEXPR_P (DECL_CONTEXT (decl)))
6305              || DECL_VIRTUAL_P (decl));
6306
6307   /* Defer template instantiations.  */
6308   if (DECL_LANG_SPECIFIC (decl)
6309       && DECL_IMPLICIT_INSTANTIATION (decl))
6310     defer_p = 1;
6311
6312   /* If we're not deferring, go ahead and assemble the variable.  */
6313   if (!defer_p)
6314     rest_of_decl_compilation (decl, toplev, at_eof);
6315 }
6316
6317 /* walk_tree helper for wrap_temporary_cleanups, below.  */
6318
6319 static tree
6320 wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
6321 {
6322   /* Stop at types or full-expression boundaries.  */
6323   if (TYPE_P (*stmt_p)
6324       || TREE_CODE (*stmt_p) == CLEANUP_POINT_EXPR)
6325     {
6326       *walk_subtrees = 0;
6327       return NULL_TREE;
6328     }
6329
6330   if (TREE_CODE (*stmt_p) == TARGET_EXPR)
6331     {
6332       tree guard = (tree)data;
6333       tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
6334
6335       tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
6336       /* Tell honor_protect_cleanup_actions to handle this as a separate
6337          cleanup.  */
6338       TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
6339  
6340       TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
6341     }
6342
6343   return NULL_TREE;
6344 }
6345
6346 /* We're initializing a local variable which has a cleanup GUARD.  If there
6347    are any temporaries used in the initializer INIT of this variable, we
6348    need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
6349    variable will be cleaned up properly if one of them throws.
6350
6351    Unfortunately, there's no way to express this properly in terms of
6352    nesting, as the regions for the temporaries overlap the region for the
6353    variable itself; if there are two temporaries, the variable needs to be
6354    the first thing destroyed if either of them throws.  However, we only
6355    want to run the variable's cleanup if it actually got constructed.  So
6356    we need to guard the temporary cleanups with the variable's cleanup if
6357    they are run on the normal path, but not if they are run on the
6358    exceptional path.  We implement this by telling
6359    honor_protect_cleanup_actions to strip the variable cleanup from the
6360    exceptional path.  */
6361
6362 static void
6363 wrap_temporary_cleanups (tree init, tree guard)
6364 {
6365   cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
6366 }
6367
6368 /* Generate code to initialize DECL (a local variable).  */
6369
6370 static void
6371 initialize_local_var (tree decl, tree init)
6372 {
6373   tree type = TREE_TYPE (decl);
6374   tree cleanup;
6375   int already_used;
6376
6377   gcc_assert (VAR_P (decl)
6378               || TREE_CODE (decl) == RESULT_DECL);
6379   gcc_assert (!TREE_STATIC (decl));
6380
6381   if (DECL_SIZE (decl) == NULL_TREE)
6382     {
6383       /* If we used it already as memory, it must stay in memory.  */
6384       DECL_INITIAL (decl) = NULL_TREE;
6385       TREE_ADDRESSABLE (decl) = TREE_USED (decl);
6386       return;
6387     }
6388
6389   if (type == error_mark_node)
6390     return;
6391
6392   /* Compute and store the initial value.  */
6393   already_used = TREE_USED (decl) || TREE_USED (type);
6394   if (TREE_USED (type))
6395     DECL_READ_P (decl) = 1;
6396
6397   /* Generate a cleanup, if necessary.  */
6398   cleanup = cxx_maybe_build_cleanup (decl, tf_warning_or_error);
6399
6400   /* Perform the initialization.  */
6401   if (init)
6402     {
6403       tree rinit = (TREE_CODE (init) == INIT_EXPR
6404                     ? TREE_OPERAND (init, 1) : NULL_TREE);
6405       if (rinit && !TREE_SIDE_EFFECTS (rinit))
6406         {
6407           /* Stick simple initializers in DECL_INITIAL so that
6408              -Wno-init-self works (c++/34772).  */
6409           gcc_assert (TREE_OPERAND (init, 0) == decl);
6410           DECL_INITIAL (decl) = rinit;
6411
6412           if (warn_init_self && TREE_CODE (type) == REFERENCE_TYPE)
6413             {
6414               STRIP_NOPS (rinit);
6415               if (rinit == decl)
6416                 warning_at (DECL_SOURCE_LOCATION (decl),
6417                             OPT_Winit_self,
6418                             "reference %qD is initialized with itself", decl);
6419             }
6420         }
6421       else
6422         {
6423           int saved_stmts_are_full_exprs_p;
6424
6425           /* If we're only initializing a single object, guard the
6426              destructors of any temporaries used in its initializer with
6427              its destructor.  This isn't right for arrays because each
6428              element initialization is a full-expression.  */
6429           if (cleanup && TREE_CODE (type) != ARRAY_TYPE)
6430             wrap_temporary_cleanups (init, cleanup);
6431
6432           gcc_assert (building_stmt_list_p ());
6433           saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
6434           current_stmt_tree ()->stmts_are_full_exprs_p = 1;
6435           finish_expr_stmt (init);
6436           current_stmt_tree ()->stmts_are_full_exprs_p =
6437             saved_stmts_are_full_exprs_p;
6438         }
6439     }
6440
6441   /* Set this to 0 so we can tell whether an aggregate which was
6442      initialized was ever used.  Don't do this if it has a
6443      destructor, so we don't complain about the 'resource
6444      allocation is initialization' idiom.  Now set
6445      attribute((unused)) on types so decls of that type will be
6446      marked used. (see TREE_USED, above.)  */
6447   if (TYPE_NEEDS_CONSTRUCTING (type)
6448       && ! already_used
6449       && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
6450       && DECL_NAME (decl))
6451     TREE_USED (decl) = 0;
6452   else if (already_used)
6453     TREE_USED (decl) = 1;
6454
6455   if (cleanup)
6456     finish_decl_cleanup (decl, cleanup);
6457 }
6458
6459 /* DECL is a VAR_DECL for a compiler-generated variable with static
6460    storage duration (like a virtual table) whose initializer is a
6461    compile-time constant.  Initialize the variable and provide it to the
6462    back end.  */
6463
6464 void
6465 initialize_artificial_var (tree decl, vec<constructor_elt, va_gc> *v)
6466 {
6467   tree init;
6468   gcc_assert (DECL_ARTIFICIAL (decl));
6469   init = build_constructor (TREE_TYPE (decl), v);
6470   gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
6471   DECL_INITIAL (decl) = init;
6472   DECL_INITIALIZED_P (decl) = 1;
6473   determine_visibility (decl);
6474   layout_var_decl (decl);
6475   maybe_commonize_var (decl);
6476   make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
6477 }
6478
6479 /* INIT is the initializer for a variable, as represented by the
6480    parser.  Returns true iff INIT is type-dependent.  */
6481
6482 static bool
6483 type_dependent_init_p (tree init)
6484 {
6485   if (TREE_CODE (init) == TREE_LIST)
6486     /* A parenthesized initializer, e.g.: int i (3, 2); ? */
6487     return any_type_dependent_elements_p (init);
6488   else if (TREE_CODE (init) == CONSTRUCTOR)
6489   /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
6490     {
6491       vec<constructor_elt, va_gc> *elts;
6492       size_t nelts;
6493       size_t i;
6494
6495       elts = CONSTRUCTOR_ELTS (init);
6496       nelts = vec_safe_length (elts);
6497       for (i = 0; i < nelts; ++i)
6498         if (type_dependent_init_p ((*elts)[i].value))
6499           return true;
6500     }
6501   else
6502     /* It must be a simple expression, e.g., int i = 3;  */
6503     return type_dependent_expression_p (init);
6504
6505   return false;
6506 }
6507
6508 /* INIT is the initializer for a variable, as represented by the
6509    parser.  Returns true iff INIT is value-dependent.  */
6510
6511 static bool
6512 value_dependent_init_p (tree init)
6513 {
6514   if (TREE_CODE (init) == TREE_LIST)
6515     /* A parenthesized initializer, e.g.: int i (3, 2); ? */
6516     return any_value_dependent_elements_p (init);
6517   else if (TREE_CODE (init) == CONSTRUCTOR)
6518   /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
6519     {
6520       vec<constructor_elt, va_gc> *elts;
6521       size_t nelts;
6522       size_t i;
6523
6524       elts = CONSTRUCTOR_ELTS (init);
6525       nelts = vec_safe_length (elts);
6526       for (i = 0; i < nelts; ++i)
6527         if (value_dependent_init_p ((*elts)[i].value))
6528           return true;
6529     }
6530   else
6531     /* It must be a simple expression, e.g., int i = 3;  */
6532     return value_dependent_expression_p (init);
6533   
6534   return false;
6535 }
6536
6537 // Returns true if a DECL is VAR_DECL with the concept specifier.
6538 static inline bool
6539 is_concept_var (tree decl)
6540 {
6541   return (VAR_P (decl)
6542           // Not all variables have DECL_LANG_SPECIFIC.
6543           && DECL_LANG_SPECIFIC (decl)
6544           && DECL_DECLARED_CONCEPT_P (decl));
6545 }
6546
6547 /* A helper function to be called via walk_tree.  If any label exists
6548    under *TP, it is (going to be) forced.  Set has_forced_label_in_static.  */
6549
6550 static tree
6551 notice_forced_label_r (tree *tp, int *walk_subtrees, void *)
6552 {
6553   if (TYPE_P (*tp))
6554     *walk_subtrees = 0;
6555   if (TREE_CODE (*tp) == LABEL_DECL)
6556     cfun->has_forced_label_in_static = 1;
6557   return NULL_TREE;
6558 }
6559
6560 /* Finish processing of a declaration;
6561    install its line number and initial value.
6562    If the length of an array type is not known before,
6563    it must be determined now, from the initial value, or it is an error.
6564
6565    INIT is the initializer (if any) for DECL.  If INIT_CONST_EXPR_P is
6566    true, then INIT is an integral constant expression.
6567
6568    FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
6569    if the (init) syntax was used.  */
6570
6571 void
6572 cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
6573                 tree asmspec_tree, int flags)
6574 {
6575   tree type;
6576   vec<tree, va_gc> *cleanups = NULL;
6577   const char *asmspec = NULL;
6578   int was_readonly = 0;
6579   bool var_definition_p = false;
6580   tree auto_node;
6581
6582   if (decl == error_mark_node)
6583     return;
6584   else if (! decl)
6585     {
6586       if (init)
6587         error ("assignment (not initialization) in declaration");
6588       return;
6589     }
6590
6591   gcc_assert (TREE_CODE (decl) != RESULT_DECL);
6592   /* Parameters are handled by store_parm_decls, not cp_finish_decl.  */
6593   gcc_assert (TREE_CODE (decl) != PARM_DECL);
6594
6595   type = TREE_TYPE (decl);
6596   if (type == error_mark_node)
6597     return;
6598
6599   /* If a name was specified, get the string.  */
6600   if (at_namespace_scope_p ())
6601     asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
6602   if (asmspec_tree && asmspec_tree != error_mark_node)
6603     asmspec = TREE_STRING_POINTER (asmspec_tree);
6604
6605   if (current_class_type
6606       && CP_DECL_CONTEXT (decl) == current_class_type
6607       && TYPE_BEING_DEFINED (current_class_type)
6608       && !CLASSTYPE_TEMPLATE_INSTANTIATION (current_class_type)
6609       && (DECL_INITIAL (decl) || init))
6610     DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
6611
6612   if (TREE_CODE (decl) != FUNCTION_DECL
6613       && (auto_node = type_uses_auto (type)))
6614     {
6615       tree d_init;
6616       if (init == NULL_TREE)
6617         {
6618           if (DECL_LANG_SPECIFIC (decl)
6619               && DECL_TEMPLATE_INSTANTIATION (decl)
6620               && !DECL_TEMPLATE_INSTANTIATED (decl))
6621             {
6622               /* init is null because we're deferring instantiating the
6623                  initializer until we need it.  Well, we need it now.  */
6624               instantiate_decl (decl, /*defer_ok*/true, /*expl*/false);
6625               return;
6626             }
6627
6628           error ("declaration of %q#D has no initializer", decl);
6629           TREE_TYPE (decl) = error_mark_node;
6630           return;
6631         }
6632       d_init = init;
6633       if (TREE_CODE (d_init) == TREE_LIST)
6634         d_init = build_x_compound_expr_from_list (d_init, ELK_INIT,
6635                                                   tf_warning_or_error);
6636       d_init = resolve_nondeduced_context (d_init, tf_warning_or_error);
6637       type = TREE_TYPE (decl) = do_auto_deduction (type, d_init,
6638                                                    auto_node,
6639                                                    tf_warning_or_error,
6640                                                    adc_variable_type);
6641       if (type == error_mark_node)
6642         return;
6643       if (TREE_CODE (type) == FUNCTION_TYPE)
6644         {
6645           error ("initializer for %<decltype(auto) %D%> has function type "
6646                  "(did you forget the %<()%> ?)", decl);
6647           TREE_TYPE (decl) = error_mark_node;
6648           return;
6649         }
6650       cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
6651     }
6652
6653   if (!ensure_literal_type_for_constexpr_object (decl))
6654     DECL_DECLARED_CONSTEXPR_P (decl) = 0;
6655
6656   if (VAR_P (decl)
6657       && DECL_CLASS_SCOPE_P (decl)
6658       && DECL_INITIALIZED_IN_CLASS_P (decl))
6659     check_static_variable_definition (decl, type);
6660
6661   if (init && TREE_CODE (decl) == FUNCTION_DECL)
6662     {
6663       tree clone;
6664       if (init == ridpointers[(int)RID_DELETE])
6665         {
6666           /* FIXME check this is 1st decl.  */
6667           DECL_DELETED_FN (decl) = 1;
6668           DECL_DECLARED_INLINE_P (decl) = 1;
6669           DECL_INITIAL (decl) = error_mark_node;
6670           FOR_EACH_CLONE (clone, decl)
6671             {
6672               DECL_DELETED_FN (clone) = 1;
6673               DECL_DECLARED_INLINE_P (clone) = 1;
6674               DECL_INITIAL (clone) = error_mark_node;
6675             }
6676           init = NULL_TREE;
6677         }
6678       else if (init == ridpointers[(int)RID_DEFAULT])
6679         {
6680           if (defaultable_fn_check (decl))
6681             DECL_DEFAULTED_FN (decl) = 1;
6682           else
6683             DECL_INITIAL (decl) = NULL_TREE;
6684         }
6685     }
6686
6687   if (init && VAR_P (decl))
6688     {
6689       DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
6690       /* If DECL is a reference, then we want to know whether init is a
6691          reference constant; init_const_expr_p as passed tells us whether
6692          it's an rvalue constant.  */
6693       if (TREE_CODE (type) == REFERENCE_TYPE)
6694         init_const_expr_p = potential_constant_expression (init);
6695       if (init_const_expr_p)
6696         {
6697           /* Set these flags now for templates.  We'll update the flags in
6698              store_init_value for instantiations.  */
6699           DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
6700           if (decl_maybe_constant_var_p (decl))
6701             TREE_CONSTANT (decl) = 1;
6702         }
6703     }
6704
6705   if (processing_template_decl)
6706     {
6707       bool type_dependent_p;
6708
6709       /* Add this declaration to the statement-tree.  */
6710       if (at_function_scope_p ())
6711         add_decl_expr (decl);
6712
6713       type_dependent_p = dependent_type_p (type);
6714
6715       if (check_for_bare_parameter_packs (init))
6716         {
6717           init = NULL_TREE;
6718           DECL_INITIAL (decl) = NULL_TREE;
6719         }
6720
6721       /* Generally, initializers in templates are expanded when the
6722          template is instantiated.  But, if DECL is a variable constant
6723          then it can be used in future constant expressions, so its value
6724          must be available. */
6725
6726       if (!VAR_P (decl) || type_dependent_p)
6727         /* We can't do anything if the decl has dependent type.  */;
6728       else if (init
6729                && init_const_expr_p
6730                && TREE_CODE (type) != REFERENCE_TYPE
6731                && decl_maybe_constant_var_p (decl)
6732                && !type_dependent_init_p (init)
6733                && !value_dependent_init_p (init))
6734         {
6735           /* This variable seems to be a non-dependent constant, so process
6736              its initializer.  If check_initializer returns non-null the
6737              initialization wasn't constant after all.  */
6738           tree init_code;
6739           cleanups = make_tree_vector ();
6740           init_code = check_initializer (decl, init, flags, &cleanups);
6741           if (init_code == NULL_TREE)
6742             init = NULL_TREE;
6743           release_tree_vector (cleanups);
6744         }
6745       else if (!init && is_concept_var (decl))
6746         error ("variable concept has no initializer");
6747       else if (!DECL_PRETTY_FUNCTION_P (decl))
6748         {
6749           /* Deduce array size even if the initializer is dependent.  */
6750           maybe_deduce_size_from_array_init (decl, init);
6751           /* And complain about multiple initializers.  */
6752           if (init && TREE_CODE (init) == TREE_LIST && TREE_CHAIN (init)
6753               && !MAYBE_CLASS_TYPE_P (type))
6754             init = build_x_compound_expr_from_list (init, ELK_INIT,
6755                                                     tf_warning_or_error);
6756         }
6757
6758       if (init)
6759         DECL_INITIAL (decl) = init;
6760       return;
6761     }
6762
6763   /* Just store non-static data member initializers for later.  */
6764   if (init && TREE_CODE (decl) == FIELD_DECL)
6765     DECL_INITIAL (decl) = init;
6766
6767   /* Take care of TYPE_DECLs up front.  */
6768   if (TREE_CODE (decl) == TYPE_DECL)
6769     {
6770       if (type != error_mark_node
6771           && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
6772         {
6773           if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
6774             warning (0, "shadowing previous type declaration of %q#D", decl);
6775           set_identifier_type_value (DECL_NAME (decl), decl);
6776         }
6777
6778       /* If we have installed this as the canonical typedef for this
6779          type, and that type has not been defined yet, delay emitting
6780          the debug information for it, as we will emit it later.  */
6781       if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
6782           && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
6783         TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6784
6785       rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl),
6786                                 at_eof);
6787       return;
6788     }
6789
6790   /* A reference will be modified here, as it is initialized.  */
6791   if (! DECL_EXTERNAL (decl)
6792       && TREE_READONLY (decl)
6793       && TREE_CODE (type) == REFERENCE_TYPE)
6794     {
6795       was_readonly = 1;
6796       TREE_READONLY (decl) = 0;
6797     }
6798
6799   if (VAR_P (decl))
6800     {
6801       /* If this is a local variable that will need a mangled name,
6802          register it now.  We must do this before processing the
6803          initializer for the variable, since the initialization might
6804          require a guard variable, and since the mangled name of the
6805          guard variable will depend on the mangled name of this
6806          variable.  */
6807       if (DECL_FUNCTION_SCOPE_P (decl)
6808           && TREE_STATIC (decl)
6809           && !DECL_ARTIFICIAL (decl))
6810         {
6811           push_local_name (decl);
6812           /* Normally has_forced_label_in_static is set during GIMPLE
6813              lowering, but [cd]tors are never actually compiled directly.
6814              We need to set this early so we can deal with the label
6815              address extension.  */
6816           if ((DECL_CONSTRUCTOR_P (current_function_decl)
6817                || DECL_DESTRUCTOR_P (current_function_decl))
6818               && init)
6819             {
6820               walk_tree (&init, notice_forced_label_r, NULL, NULL);
6821               add_local_decl (cfun, decl);
6822             }
6823           /* And make sure it's in the symbol table for
6824              c_parse_final_cleanups to find.  */
6825           varpool_node::get_create (decl);
6826         }
6827
6828       /* Convert the initializer to the type of DECL, if we have not
6829          already initialized DECL.  */
6830       if (!DECL_INITIALIZED_P (decl)
6831           /* If !DECL_EXTERNAL then DECL is being defined.  In the
6832              case of a static data member initialized inside the
6833              class-specifier, there can be an initializer even if DECL
6834              is *not* defined.  */
6835           && (!DECL_EXTERNAL (decl) || init))
6836         {
6837           if (TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
6838             {
6839               tree jclass
6840                 = IDENTIFIER_GLOBAL_VALUE (get_identifier ("jclass"));
6841               /* Allow libjava/prims.cc define primitive classes.  */
6842               if (init != NULL_TREE
6843                   || jclass == NULL_TREE
6844                   || TREE_CODE (jclass) != TYPE_DECL
6845                   || !POINTER_TYPE_P (TREE_TYPE (jclass))
6846                   || !same_type_ignoring_top_level_qualifiers_p
6847                                         (type, TREE_TYPE (TREE_TYPE (jclass))))
6848                 error ("Java object %qD not allocated with %<new%>", decl);
6849               init = NULL_TREE;
6850             }
6851           cleanups = make_tree_vector ();
6852           init = check_initializer (decl, init, flags, &cleanups);
6853
6854           /* Handle:
6855
6856              [dcl.init]
6857
6858              The memory occupied by any object of static storage
6859              duration is zero-initialized at program startup before
6860              any other initialization takes place.
6861
6862              We cannot create an appropriate initializer until after
6863              the type of DECL is finalized.  If DECL_INITIAL is set,
6864              then the DECL is statically initialized, and any
6865              necessary zero-initialization has already been performed.  */
6866           if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
6867             DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
6868                                                    /*nelts=*/NULL_TREE,
6869                                                    /*static_storage_p=*/true);
6870           /* Remember that the initialization for this variable has
6871              taken place.  */
6872           DECL_INITIALIZED_P (decl) = 1;
6873           /* This declaration is the definition of this variable,
6874              unless we are initializing a static data member within
6875              the class specifier.  */
6876           if (!DECL_EXTERNAL (decl))
6877             var_definition_p = true;
6878         }
6879       /* If the variable has an array type, lay out the type, even if
6880          there is no initializer.  It is valid to index through the
6881          array, and we must get TYPE_ALIGN set correctly on the array
6882          type.  */
6883       else if (TREE_CODE (type) == ARRAY_TYPE)
6884         layout_type (type);
6885
6886       if (TREE_STATIC (decl)
6887           && !at_function_scope_p ()
6888           && current_function_decl == NULL)
6889         /* So decl is a global variable or a static member of a
6890            non local class. Record the types it uses
6891            so that we can decide later to emit debug info for them.  */
6892         record_types_used_by_current_var_decl (decl);
6893     }
6894   else if (TREE_CODE (decl) == FIELD_DECL
6895            && TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
6896     error ("non-static data member %qD has Java class type", decl);
6897
6898   /* Add this declaration to the statement-tree.  This needs to happen
6899      after the call to check_initializer so that the DECL_EXPR for a
6900      reference temp is added before the DECL_EXPR for the reference itself.  */
6901   if (DECL_FUNCTION_SCOPE_P (decl))
6902     {
6903       /* If we're building a variable sized type, and we might be
6904          reachable other than via the top of the current binding
6905          level, then create a new BIND_EXPR so that we deallocate
6906          the object at the right time.  */
6907       if (VAR_P (decl)
6908           && DECL_SIZE (decl)
6909           && !TREE_CONSTANT (DECL_SIZE (decl))
6910           && STATEMENT_LIST_HAS_LABEL (cur_stmt_list))
6911         {
6912           tree bind;
6913           bind = build3 (BIND_EXPR, void_type_node, NULL, NULL, NULL);
6914           TREE_SIDE_EFFECTS (bind) = 1;
6915           add_stmt (bind);
6916           BIND_EXPR_BODY (bind) = push_stmt_list ();
6917         }
6918       add_decl_expr (decl);
6919     }
6920
6921   /* Let the middle end know about variables and functions -- but not
6922      static data members in uninstantiated class templates.  */
6923   if (VAR_OR_FUNCTION_DECL_P (decl))
6924     {
6925       if (VAR_P (decl))
6926         {
6927           layout_var_decl (decl);
6928           maybe_commonize_var (decl);
6929         }
6930
6931       /* This needs to happen after the linkage is set. */
6932       determine_visibility (decl);
6933
6934       if (var_definition_p && TREE_STATIC (decl))
6935         {
6936           /* If a TREE_READONLY variable needs initialization
6937              at runtime, it is no longer readonly and we need to
6938              avoid MEM_READONLY_P being set on RTL created for it.  */
6939           if (init)
6940             {
6941               if (TREE_READONLY (decl))
6942                 TREE_READONLY (decl) = 0;
6943               was_readonly = 0;
6944             }
6945           else if (was_readonly)
6946             TREE_READONLY (decl) = 1;
6947
6948           /* Likewise if it needs destruction.  */
6949           if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
6950             TREE_READONLY (decl) = 0;
6951         }
6952
6953       make_rtl_for_nonlocal_decl (decl, init, asmspec);
6954
6955       /* Check for abstractness of the type. Notice that there is no
6956          need to strip array types here since the check for those types
6957          is already done within create_array_type_for_decl.  */
6958       abstract_virtuals_error (decl, type);
6959
6960       if (TREE_TYPE (decl) == error_mark_node)
6961         /* No initialization required.  */
6962         ;
6963       else if (TREE_CODE (decl) == FUNCTION_DECL)
6964         {
6965           if (init)
6966             {
6967               if (init == ridpointers[(int)RID_DEFAULT])
6968                 {
6969                   /* An out-of-class default definition is defined at
6970                      the point where it is explicitly defaulted.  */
6971                   if (DECL_DELETED_FN (decl))
6972                     maybe_explain_implicit_delete (decl);
6973                   else if (DECL_INITIAL (decl) == error_mark_node)
6974                     synthesize_method (decl);
6975                 }
6976               else
6977                 error ("function %q#D is initialized like a variable", decl);
6978             }
6979           /* else no initialization required.  */
6980         }
6981       else if (DECL_EXTERNAL (decl)
6982                && ! (DECL_LANG_SPECIFIC (decl)
6983                      && DECL_NOT_REALLY_EXTERN (decl)))
6984         {
6985           if (init)
6986             DECL_INITIAL (decl) = init;
6987         }
6988       /* A variable definition.  */
6989       else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
6990         /* Initialize the local variable.  */
6991         initialize_local_var (decl, init);
6992
6993       /* If a variable is defined, and then a subsequent
6994          definition with external linkage is encountered, we will
6995          get here twice for the same variable.  We want to avoid
6996          calling expand_static_init more than once.  For variables
6997          that are not static data members, we can call
6998          expand_static_init only when we actually process the
6999          initializer.  It is not legal to redeclare a static data
7000          member, so this issue does not arise in that case.  */
7001       else if (var_definition_p && TREE_STATIC (decl))
7002         expand_static_init (decl, init);
7003     }
7004
7005   /* If a CLEANUP_STMT was created to destroy a temporary bound to a
7006      reference, insert it in the statement-tree now.  */
7007   if (cleanups)
7008     {
7009       unsigned i; tree t;
7010       FOR_EACH_VEC_ELT (*cleanups, i, t)
7011         push_cleanup (decl, t, false);
7012       release_tree_vector (cleanups);
7013     }
7014
7015   if (was_readonly)
7016     TREE_READONLY (decl) = 1;
7017
7018   invoke_plugin_callbacks (PLUGIN_FINISH_DECL, decl);
7019 }
7020
7021 /* Returns a declaration for a VAR_DECL as if:
7022
7023      extern "C" TYPE NAME;
7024
7025    had been seen.  Used to create compiler-generated global
7026    variables.  */
7027
7028 static tree
7029 declare_global_var (tree name, tree type)
7030 {
7031   tree decl;
7032
7033   push_to_top_level ();
7034   decl = build_decl (input_location, VAR_DECL, name, type);
7035   TREE_PUBLIC (decl) = 1;
7036   DECL_EXTERNAL (decl) = 1;
7037   DECL_ARTIFICIAL (decl) = 1;
7038   /* If the user has explicitly declared this variable (perhaps
7039      because the code we are compiling is part of a low-level runtime
7040      library), then it is possible that our declaration will be merged
7041      with theirs by pushdecl.  */
7042   decl = pushdecl (decl);
7043   cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0);
7044   pop_from_top_level ();
7045
7046   return decl;
7047 }
7048
7049 /* Returns the type for the argument to "__cxa_atexit" (or "atexit",
7050    if "__cxa_atexit" is not being used) corresponding to the function
7051    to be called when the program exits.  */
7052
7053 static tree
7054 get_atexit_fn_ptr_type (void)
7055 {
7056   tree fn_type;
7057
7058   if (!atexit_fn_ptr_type_node)
7059     {
7060       tree arg_type;
7061       if (flag_use_cxa_atexit 
7062           && !targetm.cxx.use_atexit_for_cxa_atexit ())
7063         /* The parameter to "__cxa_atexit" is "void (*)(void *)".  */
7064         arg_type = ptr_type_node;
7065       else
7066         /* The parameter to "atexit" is "void (*)(void)".  */
7067         arg_type = NULL_TREE;
7068       
7069       fn_type = build_function_type_list (void_type_node,
7070                                           arg_type, NULL_TREE);
7071       atexit_fn_ptr_type_node = build_pointer_type (fn_type);
7072     }
7073
7074   return atexit_fn_ptr_type_node;
7075 }
7076
7077 /* Returns a pointer to the `atexit' function.  Note that if
7078    FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
7079    `__cxa_atexit' function specified in the IA64 C++ ABI.  */
7080
7081 static tree
7082 get_atexit_node (void)
7083 {
7084   tree atexit_fndecl;
7085   tree fn_type;
7086   tree fn_ptr_type;
7087   const char *name;
7088   bool use_aeabi_atexit;
7089
7090   if (atexit_node)
7091     return atexit_node;
7092
7093   if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
7094     {
7095       /* The declaration for `__cxa_atexit' is:
7096
7097            int __cxa_atexit (void (*)(void *), void *, void *)
7098
7099          We build up the argument types and then the function type
7100          itself.  */
7101       tree argtype0, argtype1, argtype2;
7102
7103       use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
7104       /* First, build the pointer-to-function type for the first
7105          argument.  */
7106       fn_ptr_type = get_atexit_fn_ptr_type ();
7107       /* Then, build the rest of the argument types.  */
7108       argtype2 = ptr_type_node;
7109       if (use_aeabi_atexit)
7110         {
7111           argtype1 = fn_ptr_type;
7112           argtype0 = ptr_type_node;
7113         }
7114       else
7115         {
7116           argtype1 = ptr_type_node;
7117           argtype0 = fn_ptr_type;
7118         }
7119       /* And the final __cxa_atexit type.  */
7120       fn_type = build_function_type_list (integer_type_node,
7121                                           argtype0, argtype1, argtype2,
7122                                           NULL_TREE);
7123       if (use_aeabi_atexit)
7124         name = "__aeabi_atexit";
7125       else
7126         name = "__cxa_atexit";
7127     }
7128   else
7129     {
7130       /* The declaration for `atexit' is:
7131
7132            int atexit (void (*)());
7133
7134          We build up the argument types and then the function type
7135          itself.  */
7136       fn_ptr_type = get_atexit_fn_ptr_type ();
7137       /* Build the final atexit type.  */
7138       fn_type = build_function_type_list (integer_type_node,
7139                                           fn_ptr_type, NULL_TREE);
7140       name = "atexit";
7141     }
7142
7143   /* Now, build the function declaration.  */
7144   push_lang_context (lang_name_c);
7145   atexit_fndecl = build_library_fn_ptr (name, fn_type, ECF_LEAF | ECF_NOTHROW);
7146   mark_used (atexit_fndecl);
7147   pop_lang_context ();
7148   atexit_node = decay_conversion (atexit_fndecl, tf_warning_or_error);
7149
7150   return atexit_node;
7151 }
7152
7153 /* Like get_atexit_node, but for thread-local cleanups.  */
7154
7155 static tree
7156 get_thread_atexit_node (void)
7157 {
7158   /* The declaration for `__cxa_thread_atexit' is:
7159
7160      int __cxa_thread_atexit (void (*)(void *), void *, void *) */
7161   tree fn_type = build_function_type_list (integer_type_node,
7162                                            get_atexit_fn_ptr_type (),
7163                                            ptr_type_node, ptr_type_node,
7164                                            NULL_TREE);
7165
7166   /* Now, build the function declaration.  */
7167   tree atexit_fndecl = build_library_fn_ptr ("__cxa_thread_atexit", fn_type,
7168                                              ECF_LEAF | ECF_NOTHROW);
7169   return decay_conversion (atexit_fndecl, tf_warning_or_error);
7170 }
7171
7172 /* Returns the __dso_handle VAR_DECL.  */
7173
7174 static tree
7175 get_dso_handle_node (void)
7176 {
7177   if (dso_handle_node)
7178     return dso_handle_node;
7179
7180   /* Declare the variable.  */
7181   dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
7182                                         ptr_type_node);
7183
7184 #ifdef HAVE_GAS_HIDDEN
7185   if (dso_handle_node != error_mark_node)
7186     {
7187       DECL_VISIBILITY (dso_handle_node) = VISIBILITY_HIDDEN;
7188       DECL_VISIBILITY_SPECIFIED (dso_handle_node) = 1;
7189     }
7190 #endif
7191
7192   return dso_handle_node;
7193 }
7194
7195 /* Begin a new function with internal linkage whose job will be simply
7196    to destroy some particular variable.  */
7197
7198 static GTY(()) int start_cleanup_cnt;
7199
7200 static tree
7201 start_cleanup_fn (void)
7202 {
7203   char name[32];
7204   tree fntype;
7205   tree fndecl;
7206   bool use_cxa_atexit = flag_use_cxa_atexit
7207                         && !targetm.cxx.use_atexit_for_cxa_atexit ();
7208
7209   push_to_top_level ();
7210
7211   /* No need to mangle this.  */
7212   push_lang_context (lang_name_c);
7213
7214   /* Build the name of the function.  */
7215   sprintf (name, "__tcf_%d", start_cleanup_cnt++);
7216   /* Build the function declaration.  */
7217   fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
7218   fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
7219   /* It's a function with internal linkage, generated by the
7220      compiler.  */
7221   TREE_PUBLIC (fndecl) = 0;
7222   DECL_ARTIFICIAL (fndecl) = 1;
7223   /* Make the function `inline' so that it is only emitted if it is
7224      actually needed.  It is unlikely that it will be inlined, since
7225      it is only called via a function pointer, but we avoid unnecessary
7226      emissions this way.  */
7227   DECL_DECLARED_INLINE_P (fndecl) = 1;
7228   DECL_INTERFACE_KNOWN (fndecl) = 1;
7229   /* Build the parameter.  */
7230   if (use_cxa_atexit)
7231     {
7232       tree parmdecl;
7233
7234       parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
7235       DECL_CONTEXT (parmdecl) = fndecl;
7236       TREE_USED (parmdecl) = 1;
7237       DECL_READ_P (parmdecl) = 1;
7238       DECL_ARGUMENTS (fndecl) = parmdecl;
7239     }
7240
7241   pushdecl (fndecl);
7242   start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
7243
7244   pop_lang_context ();
7245
7246   return current_function_decl;
7247 }
7248
7249 /* Finish the cleanup function begun by start_cleanup_fn.  */
7250
7251 static void
7252 end_cleanup_fn (void)
7253 {
7254   expand_or_defer_fn (finish_function (0));
7255
7256   pop_from_top_level ();
7257 }
7258
7259 /* Generate code to handle the destruction of DECL, an object with
7260    static storage duration.  */
7261
7262 tree
7263 register_dtor_fn (tree decl)
7264 {
7265   tree cleanup;
7266   tree addr;
7267   tree compound_stmt;
7268   tree fcall;
7269   tree type;
7270   bool ob_parm, dso_parm, use_dtor;
7271   tree arg0, arg1, arg2;
7272   tree atex_node;
7273
7274   type = TREE_TYPE (decl);
7275   if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
7276     return void_node;
7277
7278   /* If we're using "__cxa_atexit" (or "__cxa_thread_atexit" or
7279      "__aeabi_atexit"), and DECL is a class object, we can just pass the
7280      destructor to "__cxa_atexit"; we don't have to build a temporary
7281      function to do the cleanup.  */
7282   dso_parm = (flag_use_cxa_atexit
7283               && !targetm.cxx.use_atexit_for_cxa_atexit ());
7284   ob_parm = (CP_DECL_THREAD_LOCAL_P (decl) || dso_parm);
7285   use_dtor = ob_parm && CLASS_TYPE_P (type);
7286   if (use_dtor)
7287     {
7288       int idx;
7289
7290       /* Find the destructor.  */
7291       idx = lookup_fnfields_1 (type, complete_dtor_identifier);
7292       gcc_assert (idx >= 0);
7293       cleanup = (*CLASSTYPE_METHOD_VEC (type))[idx];
7294       /* Make sure it is accessible.  */
7295       perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup,
7296                                      tf_warning_or_error);
7297     }
7298   else
7299     {
7300       /* Call build_cleanup before we enter the anonymous function so
7301          that any access checks will be done relative to the current
7302          scope, rather than the scope of the anonymous function.  */
7303       build_cleanup (decl);
7304   
7305       /* Now start the function.  */
7306       cleanup = start_cleanup_fn ();
7307       
7308       /* Now, recompute the cleanup.  It may contain SAVE_EXPRs that refer
7309          to the original function, rather than the anonymous one.  That
7310          will make the back end think that nested functions are in use,
7311          which causes confusion.  */
7312       push_deferring_access_checks (dk_no_check);
7313       fcall = build_cleanup (decl);
7314       pop_deferring_access_checks ();
7315       
7316       /* Create the body of the anonymous function.  */
7317       compound_stmt = begin_compound_stmt (BCS_FN_BODY);
7318       finish_expr_stmt (fcall);
7319       finish_compound_stmt (compound_stmt);
7320       end_cleanup_fn ();
7321     }
7322
7323   /* Call atexit with the cleanup function.  */
7324   mark_used (cleanup);
7325   cleanup = build_address (cleanup);
7326
7327   if (CP_DECL_THREAD_LOCAL_P (decl))
7328     atex_node = get_thread_atexit_node ();
7329   else
7330     atex_node = get_atexit_node ();
7331
7332   if (use_dtor)
7333     {
7334       /* We must convert CLEANUP to the type that "__cxa_atexit"
7335          expects.  */
7336       cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
7337       /* "__cxa_atexit" will pass the address of DECL to the
7338          cleanup function.  */
7339       mark_used (decl);
7340       addr = build_address (decl);
7341       /* The declared type of the parameter to "__cxa_atexit" is
7342          "void *".  For plain "T*", we could just let the
7343          machinery in cp_build_function_call convert it -- but if the
7344          type is "cv-qualified T *", then we need to convert it
7345          before passing it in, to avoid spurious errors.  */
7346       addr = build_nop (ptr_type_node, addr);
7347     }
7348   else
7349     /* Since the cleanup functions we build ignore the address
7350        they're given, there's no reason to pass the actual address
7351        in, and, in general, it's cheaper to pass NULL than any
7352        other value.  */
7353     addr = null_pointer_node;
7354
7355   if (dso_parm)
7356     arg2 = cp_build_addr_expr (get_dso_handle_node (),
7357                                tf_warning_or_error);
7358   else if (ob_parm)
7359     /* Just pass NULL to the dso handle parm if we don't actually
7360        have a DSO handle on this target.  */
7361     arg2 = null_pointer_node;
7362   else
7363     arg2 = NULL_TREE;
7364
7365   if (ob_parm)
7366     {
7367       if (!CP_DECL_THREAD_LOCAL_P (decl)
7368           && targetm.cxx.use_aeabi_atexit ())
7369         {
7370           arg1 = cleanup;
7371           arg0 = addr;
7372         }
7373       else
7374         {
7375           arg1 = addr;
7376           arg0 = cleanup;
7377         }
7378     }
7379   else
7380     {
7381       arg0 = cleanup;
7382       arg1 = NULL_TREE;
7383     }
7384   return cp_build_function_call_nary (atex_node, tf_warning_or_error,
7385                                       arg0, arg1, arg2, NULL_TREE);
7386 }
7387
7388 /* DECL is a VAR_DECL with static storage duration.  INIT, if present,
7389    is its initializer.  Generate code to handle the construction
7390    and destruction of DECL.  */
7391
7392 static void
7393 expand_static_init (tree decl, tree init)
7394 {
7395   gcc_assert (VAR_P (decl));
7396   gcc_assert (TREE_STATIC (decl));
7397
7398   /* Some variables require no dynamic initialization.  */
7399   if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
7400     {
7401       /* Make sure the destructor is callable.  */
7402       cxx_maybe_build_cleanup (decl, tf_warning_or_error);
7403       if (!init)
7404         return;
7405     }
7406
7407   if (CP_DECL_THREAD_LOCAL_P (decl) && DECL_GNU_TLS_P (decl)
7408       && !DECL_FUNCTION_SCOPE_P (decl))
7409     {
7410       if (init)
7411         error ("non-local variable %qD declared %<__thread%> "
7412                "needs dynamic initialization", decl);
7413       else
7414         error ("non-local variable %qD declared %<__thread%> "
7415                "has a non-trivial destructor", decl);
7416       static bool informed;
7417       if (!informed)
7418         {
7419           inform (DECL_SOURCE_LOCATION (decl),
7420                   "C++11 %<thread_local%> allows dynamic initialization "
7421                   "and destruction");
7422           informed = true;
7423         }
7424       return;
7425     }
7426
7427   if (DECL_FUNCTION_SCOPE_P (decl))
7428     {
7429       /* Emit code to perform this initialization but once.  */
7430       tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
7431       tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
7432       tree guard, guard_addr;
7433       tree flag, begin;
7434       /* We don't need thread-safety code for thread-local vars.  */
7435       bool thread_guard = (flag_threadsafe_statics
7436                            && !CP_DECL_THREAD_LOCAL_P (decl));
7437
7438       /* Emit code to perform this initialization but once.  This code
7439          looks like:
7440
7441            static <type> guard;
7442            if (!__atomic_load (guard.first_byte)) {
7443              if (__cxa_guard_acquire (&guard)) {
7444                bool flag = false;
7445                try {
7446                  // Do initialization.
7447                  flag = true; __cxa_guard_release (&guard);
7448                  // Register variable for destruction at end of program.
7449                } catch {
7450                  if (!flag) __cxa_guard_abort (&guard);
7451                }
7452            }
7453
7454          Note that the `flag' variable is only set to 1 *after* the
7455          initialization is complete.  This ensures that an exception,
7456          thrown during the construction, will cause the variable to
7457          reinitialized when we pass through this code again, as per:
7458
7459            [stmt.dcl]
7460
7461            If the initialization exits by throwing an exception, the
7462            initialization is not complete, so it will be tried again
7463            the next time control enters the declaration.
7464
7465          This process should be thread-safe, too; multiple threads
7466          should not be able to initialize the variable more than
7467          once.  */
7468
7469       /* Create the guard variable.  */
7470       guard = get_guard (decl);
7471
7472       /* Begin the conditional initialization.  */
7473       if_stmt = begin_if_stmt ();
7474
7475       finish_if_stmt_cond (get_guard_cond (guard, thread_guard), if_stmt);
7476       then_clause = begin_compound_stmt (BCS_NO_SCOPE);
7477
7478       if (thread_guard)
7479         {
7480           tree vfntype = NULL_TREE;
7481           tree acquire_name, release_name, abort_name;
7482           tree acquire_fn, release_fn, abort_fn;
7483           guard_addr = build_address (guard);
7484
7485           acquire_name = get_identifier ("__cxa_guard_acquire");
7486           release_name = get_identifier ("__cxa_guard_release");
7487           abort_name = get_identifier ("__cxa_guard_abort");
7488           acquire_fn = identifier_global_value (acquire_name);
7489           release_fn = identifier_global_value (release_name);
7490           abort_fn = identifier_global_value (abort_name);
7491           if (!acquire_fn)
7492             acquire_fn = push_library_fn
7493               (acquire_name, build_function_type_list (integer_type_node,
7494                                                        TREE_TYPE (guard_addr),
7495                                                        NULL_TREE),
7496                NULL_TREE, ECF_NOTHROW | ECF_LEAF);
7497           if (!release_fn || !abort_fn)
7498             vfntype = build_function_type_list (void_type_node,
7499                                                 TREE_TYPE (guard_addr),
7500                                                 NULL_TREE);
7501           if (!release_fn)
7502             release_fn = push_library_fn (release_name, vfntype, NULL_TREE,
7503                                            ECF_NOTHROW | ECF_LEAF);
7504           if (!abort_fn)
7505             abort_fn = push_library_fn (abort_name, vfntype, NULL_TREE,
7506                                         ECF_NOTHROW | ECF_LEAF);
7507
7508           inner_if_stmt = begin_if_stmt ();
7509           finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
7510                                inner_if_stmt);
7511
7512           inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
7513           begin = get_target_expr (boolean_false_node);
7514           flag = TARGET_EXPR_SLOT (begin);
7515
7516           TARGET_EXPR_CLEANUP (begin)
7517             = build3 (COND_EXPR, void_type_node, flag,
7518                       void_node,
7519                       build_call_n (abort_fn, 1, guard_addr));
7520           CLEANUP_EH_ONLY (begin) = 1;
7521
7522           /* Do the initialization itself.  */
7523           init = add_stmt_to_compound (begin, init);
7524           init = add_stmt_to_compound
7525             (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
7526           init = add_stmt_to_compound
7527             (init, build_call_n (release_fn, 1, guard_addr));
7528         }
7529       else
7530         init = add_stmt_to_compound (init, set_guard (guard));
7531
7532       /* Use atexit to register a function for destroying this static
7533          variable.  */
7534       init = add_stmt_to_compound (init, register_dtor_fn (decl));
7535
7536       finish_expr_stmt (init);
7537
7538       if (thread_guard)
7539         {
7540           finish_compound_stmt (inner_then_clause);
7541           finish_then_clause (inner_if_stmt);
7542           finish_if_stmt (inner_if_stmt);
7543         }
7544
7545       finish_compound_stmt (then_clause);
7546       finish_then_clause (if_stmt);
7547       finish_if_stmt (if_stmt);
7548     }
7549   else if (CP_DECL_THREAD_LOCAL_P (decl))
7550     tls_aggregates = tree_cons (init, decl, tls_aggregates);
7551   else
7552     static_aggregates = tree_cons (init, decl, static_aggregates);
7553 }
7554
7555 \f
7556 /* Make TYPE a complete type based on INITIAL_VALUE.
7557    Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
7558    2 if there was no information (in which case assume 0 if DO_DEFAULT),
7559    3 if the initializer list is empty (in pedantic mode). */
7560
7561 int
7562 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
7563 {
7564   int failure;
7565   tree type, elt_type;
7566
7567   /* Don't get confused by a CONSTRUCTOR for some other type.  */
7568   if (initial_value && TREE_CODE (initial_value) == CONSTRUCTOR
7569       && !BRACE_ENCLOSED_INITIALIZER_P (initial_value)
7570       && TREE_CODE (TREE_TYPE (initial_value)) != ARRAY_TYPE)
7571     return 1;
7572
7573   if (initial_value)
7574     {
7575       unsigned HOST_WIDE_INT i;
7576       tree value;
7577
7578       /* An array of character type can be initialized from a
7579          brace-enclosed string constant.
7580
7581          FIXME: this code is duplicated from reshape_init. Probably
7582          we should just call reshape_init here?  */
7583       if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
7584           && TREE_CODE (initial_value) == CONSTRUCTOR
7585           && !vec_safe_is_empty (CONSTRUCTOR_ELTS (initial_value)))
7586         {
7587           vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initial_value);
7588           tree value = (*v)[0].value;
7589
7590           if (TREE_CODE (value) == STRING_CST
7591               && v->length () == 1)
7592             initial_value = value;
7593         }
7594
7595       /* If any of the elements are parameter packs, we can't actually
7596          complete this type now because the array size is dependent.  */
7597       if (TREE_CODE (initial_value) == CONSTRUCTOR)
7598         {
7599           FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value), 
7600                                       i, value)
7601             {
7602               if (PACK_EXPANSION_P (value))
7603                 return 0;
7604             }
7605         }
7606     }
7607
7608   failure = complete_array_type (ptype, initial_value, do_default);
7609
7610   /* We can create the array before the element type is complete, which
7611      means that we didn't have these two bits set in the original type
7612      either.  In completing the type, we are expected to propagate these
7613      bits.  See also complete_type which does the same thing for arrays
7614      of fixed size.  */
7615   type = *ptype;
7616   if (TYPE_DOMAIN (type))
7617     {
7618       elt_type = TREE_TYPE (type);
7619       TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
7620       TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
7621         = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
7622     }
7623
7624   return failure;
7625 }
7626
7627 /* As above, but either give an error or reject zero-size arrays, depending
7628    on COMPLAIN.  */
7629
7630 int
7631 cp_complete_array_type_or_error (tree *ptype, tree initial_value,
7632                                  bool do_default, tsubst_flags_t complain)
7633 {
7634   int failure;
7635   bool sfinae = !(complain & tf_error);
7636   /* In SFINAE context we can't be lenient about zero-size arrays.  */
7637   if (sfinae)
7638     ++pedantic;
7639   failure = cp_complete_array_type (ptype, initial_value, do_default);
7640   if (sfinae)
7641     --pedantic;
7642   if (failure)
7643     {
7644       if (sfinae)
7645         /* Not an error.  */;
7646       else if (failure == 1)
7647         error ("initializer fails to determine size of %qT", *ptype);
7648       else if (failure == 2)
7649         {
7650           if (do_default)
7651             error ("array size missing in %qT", *ptype);
7652         }
7653       else if (failure == 3)
7654         error ("zero-size array %qT", *ptype);
7655       *ptype = error_mark_node;
7656     }
7657   return failure;
7658 }
7659 \f
7660 /* Return zero if something is declared to be a member of type
7661    CTYPE when in the context of CUR_TYPE.  STRING is the error
7662    message to print in that case.  Otherwise, quietly return 1.  */
7663
7664 static int
7665 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
7666 {
7667   if (ctype && ctype != cur_type)
7668     {
7669       if (flags == DTOR_FLAG)
7670         error ("destructor for alien class %qT cannot be a member", ctype);
7671       else
7672         error ("constructor for alien class %qT cannot be a member", ctype);
7673       return 0;
7674     }
7675   return 1;
7676 }
7677 \f
7678 /* Subroutine of `grokdeclarator'.  */
7679
7680 /* Generate errors possibly applicable for a given set of specifiers.
7681    This is for ARM $7.1.2.  */
7682
7683 static void
7684 bad_specifiers (tree object,
7685                 enum bad_spec_place type,
7686                 int virtualp,
7687                 int quals,
7688                 int inlinep,
7689                 int friendp,
7690                 int raises)
7691 {
7692   switch (type)
7693     {
7694       case BSP_VAR:
7695         if (virtualp)
7696           error ("%qD declared as a %<virtual%> variable", object);
7697         if (inlinep)
7698           error ("%qD declared as an %<inline%> variable", object);
7699         if (quals)
7700           error ("%<const%> and %<volatile%> function specifiers on "
7701                  "%qD invalid in variable declaration", object);
7702         break;
7703       case BSP_PARM:
7704         if (virtualp)
7705           error ("%qD declared as a %<virtual%> parameter", object);
7706         if (inlinep)
7707           error ("%qD declared as an %<inline%> parameter", object);
7708         if (quals)
7709           error ("%<const%> and %<volatile%> function specifiers on "
7710                  "%qD invalid in parameter declaration", object);
7711         break;
7712       case BSP_TYPE:
7713         if (virtualp)
7714           error ("%qD declared as a %<virtual%> type", object);
7715         if (inlinep)
7716           error ("%qD declared as an %<inline%> type", object);
7717         if (quals)
7718           error ("%<const%> and %<volatile%> function specifiers on "
7719                  "%qD invalid in type declaration", object);
7720         break;
7721       case BSP_FIELD:
7722         if (virtualp)
7723           error ("%qD declared as a %<virtual%> field", object);
7724         if (inlinep)
7725           error ("%qD declared as an %<inline%> field", object);
7726         if (quals)
7727           error ("%<const%> and %<volatile%> function specifiers on "
7728                  "%qD invalid in field declaration", object);
7729         break;
7730       default:
7731         gcc_unreachable();
7732     }
7733   if (friendp)
7734     error ("%q+D declared as a friend", object);
7735   if (raises
7736       && (TREE_CODE (object) == TYPE_DECL
7737           || (!TYPE_PTRFN_P (TREE_TYPE (object))
7738               && !TYPE_REFFN_P (TREE_TYPE (object))
7739               && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
7740     error ("%q+D declared with an exception specification", object);
7741 }
7742
7743 /* DECL is a member function or static data member and is presently
7744    being defined.  Check that the definition is taking place in a
7745    valid namespace.  */
7746
7747 static void
7748 check_class_member_definition_namespace (tree decl)
7749 {
7750   /* These checks only apply to member functions and static data
7751      members.  */
7752   gcc_assert (VAR_OR_FUNCTION_DECL_P (decl));
7753   /* We check for problems with specializations in pt.c in
7754      check_specialization_namespace, where we can issue better
7755      diagnostics.  */
7756   if (processing_specialization)
7757     return;
7758   /* There are no restrictions on the placement of
7759      explicit instantiations.  */
7760   if (processing_explicit_instantiation)
7761     return;
7762   /* [class.mfct]
7763
7764      A member function definition that appears outside of the
7765      class definition shall appear in a namespace scope enclosing
7766      the class definition.
7767
7768      [class.static.data]
7769
7770      The definition for a static data member shall appear in a
7771      namespace scope enclosing the member's class definition.  */
7772   if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
7773     permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
7774                decl, DECL_CONTEXT (decl));
7775 }
7776
7777 /* Build a PARM_DECL for the "this" parameter.  TYPE is the
7778    METHOD_TYPE for a non-static member function; QUALS are the
7779    cv-qualifiers that apply to the function.  */
7780
7781 tree
7782 build_this_parm (tree type, cp_cv_quals quals)
7783 {
7784   tree this_type;
7785   tree qual_type;
7786   tree parm;
7787   cp_cv_quals this_quals;
7788
7789   if (CLASS_TYPE_P (type))
7790     {
7791       this_type
7792         = cp_build_qualified_type (type, quals & ~TYPE_QUAL_RESTRICT);
7793       this_type = build_pointer_type (this_type);
7794     }
7795   else
7796     this_type = type_of_this_parm (type);
7797   /* The `this' parameter is implicitly `const'; it cannot be
7798      assigned to.  */
7799   this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
7800   qual_type = cp_build_qualified_type (this_type, this_quals);
7801   parm = build_artificial_parm (this_identifier, qual_type);
7802   cp_apply_type_quals_to_decl (this_quals, parm);
7803   return parm;
7804 }
7805
7806 /* DECL is a static member function.  Complain if it was declared
7807    with function-cv-quals.  */
7808
7809 static void
7810 check_static_quals (tree decl, cp_cv_quals quals)
7811 {
7812   if (quals != TYPE_UNQUALIFIED)
7813     error ("static member function %q#D declared with type qualifiers",
7814            decl);
7815 }
7816
7817 // Check that FN takes no arguments and returns bool.
7818 static void
7819 check_concept_fn (tree fn)
7820 {
7821   // A constraint is nullary.
7822   if (DECL_ARGUMENTS (fn))
7823     error ("concept %q#D declared with function parameters", fn);
7824
7825   // The declared return type of the concept shall be bool, and
7826   // it shall not be deduced from it definition.
7827   tree type = TREE_TYPE (TREE_TYPE (fn));
7828   if (is_auto (type))
7829     error ("concept %q#D declared with a deduced return type", fn);
7830   else if (type != boolean_type_node)
7831     error ("concept %q#D with non-%<bool%> return type %qT", fn, type);
7832 }
7833
7834 /* Helper function.  Replace the temporary this parameter injected
7835    during cp_finish_omp_declare_simd with the real this parameter.  */
7836
7837 static tree
7838 declare_simd_adjust_this (tree *tp, int *walk_subtrees, void *data)
7839 {
7840   tree this_parm = (tree) data;
7841   if (TREE_CODE (*tp) == PARM_DECL
7842       && DECL_NAME (*tp) == this_identifier
7843       && *tp != this_parm)
7844     *tp = this_parm;
7845   else if (TYPE_P (*tp))
7846     *walk_subtrees = 0;
7847   return NULL_TREE;
7848 }
7849
7850 /* CTYPE is class type, or null if non-class.
7851    TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
7852    or METHOD_TYPE.
7853    DECLARATOR is the function's name.
7854    PARMS is a chain of PARM_DECLs for the function.
7855    VIRTUALP is truthvalue of whether the function is virtual or not.
7856    FLAGS are to be passed through to `grokclassfn'.
7857    QUALS are qualifiers indicating whether the function is `const'
7858    or `volatile'.
7859    RAISES is a list of exceptions that this function can raise.
7860    CHECK is 1 if we must find this method in CTYPE, 0 if we should
7861    not look, and -1 if we should not call `grokclassfn' at all.
7862
7863    SFK is the kind of special function (if any) for the new function.
7864
7865    Returns `NULL_TREE' if something goes wrong, after issuing
7866    applicable error messages.  */
7867
7868 static tree
7869 grokfndecl (tree ctype,
7870             tree type,
7871             tree declarator,
7872             tree parms,
7873             tree orig_declarator,
7874             tree decl_reqs,
7875             int virtualp,
7876             enum overload_flags flags,
7877             cp_cv_quals quals,
7878             cp_ref_qualifier rqual,
7879             tree raises,
7880             int check,
7881             int friendp,
7882             int publicp,
7883             int inlinep,
7884             bool deletedp,
7885             special_function_kind sfk,
7886             bool funcdef_flag,
7887             int template_count,
7888             tree in_namespace,
7889             tree* attrlist,
7890             location_t location)
7891 {
7892   tree decl;
7893   int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
7894   tree t;
7895
7896   // Was the concept specifier present?
7897   bool concept_p = inlinep & 4;
7898
7899   // Concept declarations must have a corresponding definition.
7900   if (concept_p && !funcdef_flag)
7901     {
7902       error ("concept %qD has no definition", declarator);
7903       return NULL_TREE;
7904     }
7905
7906   if (rqual)
7907     type = build_ref_qualified_type (type, rqual);
7908   if (raises)
7909     type = build_exception_variant (type, raises);
7910
7911   decl = build_lang_decl (FUNCTION_DECL, declarator, type);
7912
7913   /* Set the constraints on the declaration. */
7914   if (flag_concepts)
7915     {
7916       tree tmpl_reqs = NULL_TREE;
7917       if (processing_template_decl > template_class_depth (ctype))
7918         tmpl_reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
7919
7920       /* Adjust the required expression into a constraint. */
7921       if (decl_reqs)
7922         decl_reqs = normalize_expression (decl_reqs);
7923
7924       tree ci = build_constraints (tmpl_reqs, decl_reqs);
7925       set_constraints (decl, ci);
7926     }
7927
7928   /* If we have an explicit location, use it, otherwise use whatever
7929      build_lang_decl used (probably input_location).  */
7930   if (location != UNKNOWN_LOCATION)
7931     DECL_SOURCE_LOCATION (decl) = location;
7932
7933   if (TREE_CODE (type) == METHOD_TYPE)
7934     {
7935       tree parm;
7936       parm = build_this_parm (type, quals);
7937       DECL_CHAIN (parm) = parms;
7938       parms = parm;
7939
7940       /* Allocate space to hold the vptr bit if needed.  */
7941       SET_DECL_ALIGN (decl, MINIMUM_METHOD_BOUNDARY);
7942     }
7943   DECL_ARGUMENTS (decl) = parms;
7944   for (t = parms; t; t = DECL_CHAIN (t))
7945     DECL_CONTEXT (t) = decl;
7946   /* Propagate volatile out from type to decl.  */
7947   if (TYPE_VOLATILE (type))
7948     TREE_THIS_VOLATILE (decl) = 1;
7949
7950   /* Setup decl according to sfk.  */
7951   switch (sfk)
7952     {
7953     case sfk_constructor:
7954     case sfk_copy_constructor:
7955     case sfk_move_constructor:
7956       DECL_CONSTRUCTOR_P (decl) = 1;
7957       break;
7958     case sfk_destructor:
7959       DECL_DESTRUCTOR_P (decl) = 1;
7960       break;
7961     default:
7962       break;
7963     }
7964
7965   if (friendp
7966       && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
7967     {
7968       if (funcdef_flag)
7969         error
7970           ("defining explicit specialization %qD in friend declaration",
7971            orig_declarator);
7972       else
7973         {
7974           tree fns = TREE_OPERAND (orig_declarator, 0);
7975           tree args = TREE_OPERAND (orig_declarator, 1);
7976
7977           if (PROCESSING_REAL_TEMPLATE_DECL_P ())
7978             {
7979               /* Something like `template <class T> friend void f<T>()'.  */
7980               error ("invalid use of template-id %qD in declaration "
7981                      "of primary template",
7982                      orig_declarator);
7983               return NULL_TREE;
7984             }
7985
7986
7987           /* A friend declaration of the form friend void f<>().  Record
7988              the information in the TEMPLATE_ID_EXPR.  */
7989           SET_DECL_IMPLICIT_INSTANTIATION (decl);
7990
7991           gcc_assert (identifier_p (fns) || TREE_CODE (fns) == OVERLOAD);
7992           DECL_TEMPLATE_INFO (decl) = build_template_info (fns, args);
7993
7994           for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
7995             if (TREE_PURPOSE (t)
7996                 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
7997             {
7998               error ("default arguments are not allowed in declaration "
7999                      "of friend template specialization %qD",
8000                      decl);
8001               return NULL_TREE;
8002             }
8003
8004           if (inlinep & 1)
8005             {
8006               error ("%<inline%> is not allowed in declaration of friend "
8007                      "template specialization %qD",
8008                      decl);
8009               return NULL_TREE;
8010             }
8011         }
8012     }
8013
8014   /* If this decl has namespace scope, set that up.  */
8015   if (in_namespace)
8016     set_decl_namespace (decl, in_namespace, friendp);
8017   else if (!ctype)
8018     DECL_CONTEXT (decl) = FROB_CONTEXT (current_decl_namespace ());
8019
8020   /* `main' and builtins have implicit 'C' linkage.  */
8021   if ((MAIN_NAME_P (declarator)
8022        || (IDENTIFIER_LENGTH (declarator) > 10
8023            && IDENTIFIER_POINTER (declarator)[0] == '_'
8024            && IDENTIFIER_POINTER (declarator)[1] == '_'
8025            && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0)
8026        || (targetcm.cxx_implicit_extern_c
8027            && targetcm.cxx_implicit_extern_c(IDENTIFIER_POINTER (declarator))))
8028       && current_lang_name == lang_name_cplusplus
8029       && ctype == NULL_TREE
8030       && DECL_FILE_SCOPE_P (decl))
8031     SET_DECL_LANGUAGE (decl, lang_c);
8032
8033   /* Should probably propagate const out from type to decl I bet (mrs).  */
8034   if (staticp)
8035     {
8036       DECL_STATIC_FUNCTION_P (decl) = 1;
8037       DECL_CONTEXT (decl) = ctype;
8038     }
8039
8040   if (deletedp)
8041     DECL_DELETED_FN (decl) = 1;
8042
8043   if (ctype)
8044     {
8045       DECL_CONTEXT (decl) = ctype;
8046       if (funcdef_flag)
8047         check_class_member_definition_namespace (decl);
8048     }
8049
8050   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
8051     {
8052       if (PROCESSING_REAL_TEMPLATE_DECL_P())
8053         error ("cannot declare %<::main%> to be a template");
8054       if (inlinep & 1)
8055         error ("cannot declare %<::main%> to be inline");
8056       if (inlinep & 2)
8057         error ("cannot declare %<::main%> to be constexpr");
8058       if (!publicp)
8059         error ("cannot declare %<::main%> to be static");
8060       inlinep = 0;
8061       publicp = 1;
8062     }
8063
8064   /* Members of anonymous types and local classes have no linkage; make
8065      them internal.  If a typedef is made later, this will be changed.  */
8066   if (ctype && (!TREE_PUBLIC (TYPE_MAIN_DECL (ctype))
8067                 || decl_function_context (TYPE_MAIN_DECL (ctype))))
8068     publicp = 0;
8069
8070   if (publicp && cxx_dialect == cxx98)
8071     {
8072       /* [basic.link]: A name with no linkage (notably, the name of a class
8073          or enumeration declared in a local scope) shall not be used to
8074          declare an entity with linkage.
8075
8076          DR 757 relaxes this restriction for C++0x.  */
8077       no_linkage_error (decl);
8078     }
8079
8080   TREE_PUBLIC (decl) = publicp;
8081   if (! publicp)
8082     {
8083       DECL_INTERFACE_KNOWN (decl) = 1;
8084       DECL_NOT_REALLY_EXTERN (decl) = 1;
8085     }
8086
8087   /* If the declaration was declared inline, mark it as such.  */
8088   if (inlinep)
8089     {
8090       DECL_DECLARED_INLINE_P (decl) = 1;
8091       if (publicp)
8092         DECL_COMDAT (decl) = 1;
8093     }
8094   if (inlinep & 2)
8095     DECL_DECLARED_CONSTEXPR_P (decl) = true;
8096
8097   // If the concept declaration specifier was found, check
8098   // that the declaration satisfies the necessary requirements.
8099   if (concept_p)
8100     {
8101       DECL_DECLARED_CONCEPT_P (decl) = true;
8102       check_concept_fn (decl);
8103     }
8104
8105   DECL_EXTERNAL (decl) = 1;
8106   if (TREE_CODE (type) == FUNCTION_TYPE)
8107     {
8108       if (quals || rqual)
8109         TREE_TYPE (decl) = apply_memfn_quals (TREE_TYPE (decl),
8110                                               TYPE_UNQUALIFIED,
8111                                               REF_QUAL_NONE);
8112
8113       if (quals)
8114         {
8115           error (ctype
8116                  ? G_("static member function %qD cannot have cv-qualifier")
8117                  : G_("non-member function %qD cannot have cv-qualifier"),
8118                  decl);
8119           quals = TYPE_UNQUALIFIED;
8120         }
8121
8122       if (rqual)
8123         {
8124           error (ctype
8125                  ? G_("static member function %qD cannot have ref-qualifier")
8126                  : G_("non-member function %qD cannot have ref-qualifier"),
8127                  decl);
8128           rqual = REF_QUAL_NONE;
8129         }
8130     }
8131
8132   if (IDENTIFIER_OPNAME_P (DECL_NAME (decl))
8133       && !grok_op_properties (decl, /*complain=*/true))
8134     return NULL_TREE;
8135   else if (UDLIT_OPER_P (DECL_NAME (decl)))
8136     {
8137       bool long_long_unsigned_p;
8138       bool long_double_p;
8139       const char *suffix = NULL;
8140       /* [over.literal]/6: Literal operators shall not have C linkage. */
8141       if (DECL_LANGUAGE (decl) == lang_c)
8142         {
8143           error ("literal operator with C linkage");
8144           return NULL_TREE;
8145         }
8146
8147       if (DECL_NAMESPACE_SCOPE_P (decl))
8148         {
8149           if (!check_literal_operator_args (decl, &long_long_unsigned_p,
8150                                             &long_double_p))
8151             {
8152               error ("%qD has invalid argument list", decl);
8153               return NULL_TREE;
8154             }
8155
8156           suffix = UDLIT_OP_SUFFIX (DECL_NAME (decl));
8157           if (long_long_unsigned_p)
8158             {
8159               if (cpp_interpret_int_suffix (parse_in, suffix, strlen (suffix)))
8160                 warning (0, "integer suffix %<%s%>"
8161                             " shadowed by implementation", suffix);
8162             }
8163           else if (long_double_p)
8164             {
8165               if (cpp_interpret_float_suffix (parse_in, suffix, strlen (suffix)))
8166                 warning (0, "floating point suffix %<%s%>"
8167                             " shadowed by implementation", suffix);
8168             }
8169         }
8170       else
8171         {
8172           error ("%qD must be a non-member function", decl);
8173           return NULL_TREE;
8174         }
8175     }
8176
8177   if (funcdef_flag)
8178     /* Make the init_value nonzero so pushdecl knows this is not
8179        tentative.  error_mark_node is replaced later with the BLOCK.  */
8180     DECL_INITIAL (decl) = error_mark_node;
8181
8182   if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
8183     TREE_NOTHROW (decl) = 1;
8184
8185   if (flag_openmp || flag_openmp_simd || flag_cilkplus)
8186     {
8187       /* Adjust "omp declare simd" attributes.  */
8188       tree ods = lookup_attribute ("omp declare simd", *attrlist);
8189       if (ods)
8190         {
8191           tree attr;
8192           for (attr = ods; attr;
8193                attr = lookup_attribute ("omp declare simd", TREE_CHAIN (attr)))
8194             {
8195               if (TREE_CODE (type) == METHOD_TYPE)
8196                 walk_tree (&TREE_VALUE (attr), declare_simd_adjust_this,
8197                            DECL_ARGUMENTS (decl), NULL);
8198               if (TREE_VALUE (attr) != NULL_TREE)
8199                 {
8200                   tree cl = TREE_VALUE (TREE_VALUE (attr));
8201                   cl = c_omp_declare_simd_clauses_to_numbers
8202                                                 (DECL_ARGUMENTS (decl), cl);
8203                   if (cl)
8204                     TREE_VALUE (TREE_VALUE (attr)) = cl;
8205                   else
8206                     TREE_VALUE (attr) = NULL_TREE;
8207                 }
8208             }
8209         }
8210     }
8211
8212   /* Caller will do the rest of this.  */
8213   if (check < 0)
8214     return decl;
8215
8216   if (ctype != NULL_TREE)
8217     grokclassfn (ctype, decl, flags);
8218
8219   /* 12.4/3  */
8220   if (cxx_dialect >= cxx11
8221       && DECL_DESTRUCTOR_P (decl)
8222       && !TYPE_BEING_DEFINED (DECL_CONTEXT (decl))
8223       && !processing_template_decl)
8224     deduce_noexcept_on_destructor (decl);
8225
8226   decl = check_explicit_specialization (orig_declarator, decl,
8227                                         template_count,
8228                                         2 * funcdef_flag +
8229                                         4 * (friendp != 0) +
8230                                         8 * concept_p);
8231   if (decl == error_mark_node)
8232     return NULL_TREE;
8233
8234   if (DECL_STATIC_FUNCTION_P (decl))
8235     check_static_quals (decl, quals);
8236
8237   if (attrlist)
8238     {
8239       cplus_decl_attributes (&decl, *attrlist, 0);
8240       *attrlist = NULL_TREE;
8241     }
8242
8243   /* Check main's type after attributes have been applied.  */
8244   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
8245     {
8246       if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
8247                         integer_type_node))
8248         {
8249           tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
8250           tree newtype;
8251           error ("%<::main%> must return %<int%>");
8252           newtype = build_function_type (integer_type_node, oldtypeargs);
8253           TREE_TYPE (decl) = newtype;
8254         }
8255       if (warn_main)
8256         check_main_parameter_types (decl);
8257     }
8258
8259   if (ctype != NULL_TREE
8260       && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
8261       && check)
8262     {
8263       tree old_decl = check_classfn (ctype, decl,
8264                                      (processing_template_decl
8265                                       > template_class_depth (ctype))
8266                                      ? current_template_parms
8267                                      : NULL_TREE);
8268
8269       if (old_decl == error_mark_node)
8270         return NULL_TREE;
8271
8272       if (old_decl)
8273         {
8274           tree ok;
8275           tree pushed_scope;
8276
8277           if (TREE_CODE (old_decl) == TEMPLATE_DECL)
8278             /* Because grokfndecl is always supposed to return a
8279                FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
8280                here.  We depend on our callers to figure out that its
8281                really a template that's being returned.  */
8282             old_decl = DECL_TEMPLATE_RESULT (old_decl);
8283
8284           if (DECL_STATIC_FUNCTION_P (old_decl)
8285               && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
8286             {
8287               /* Remove the `this' parm added by grokclassfn.  */
8288               revert_static_member_fn (decl);
8289               check_static_quals (decl, quals);
8290             }
8291           if (DECL_ARTIFICIAL (old_decl))
8292             {
8293               error ("definition of implicitly-declared %qD", old_decl);
8294               return NULL_TREE;
8295             }
8296           else if (DECL_DEFAULTED_FN (old_decl))
8297             {
8298               error ("definition of explicitly-defaulted %q+D", decl);
8299               error ("%q+#D explicitly defaulted here", old_decl);
8300               return NULL_TREE;
8301             }
8302
8303           /* Since we've smashed OLD_DECL to its
8304              DECL_TEMPLATE_RESULT, we must do the same to DECL.  */
8305           if (TREE_CODE (decl) == TEMPLATE_DECL)
8306             decl = DECL_TEMPLATE_RESULT (decl);
8307
8308           /* Attempt to merge the declarations.  This can fail, in
8309              the case of some invalid specialization declarations.  */
8310           pushed_scope = push_scope (ctype);
8311           ok = duplicate_decls (decl, old_decl, friendp);
8312           if (pushed_scope)
8313             pop_scope (pushed_scope);
8314           if (!ok)
8315             {
8316               error ("no %q#D member function declared in class %qT",
8317                      decl, ctype);
8318               return NULL_TREE;
8319             }
8320           if (ok == error_mark_node)
8321             return NULL_TREE;
8322           return old_decl;
8323         }
8324     }
8325
8326   if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
8327     return NULL_TREE;
8328
8329   if (ctype == NULL_TREE || check)
8330     return decl;
8331
8332   if (virtualp)
8333     DECL_VIRTUAL_P (decl) = 1;
8334
8335   return decl;
8336 }
8337
8338 /* decl is a FUNCTION_DECL.
8339    specifiers are the parsed virt-specifiers.
8340
8341    Set flags to reflect the virt-specifiers.
8342
8343    Returns decl.  */
8344
8345 static tree
8346 set_virt_specifiers (tree decl, cp_virt_specifiers specifiers)
8347 {
8348   if (decl == NULL_TREE)
8349     return decl;
8350   if (specifiers & VIRT_SPEC_OVERRIDE)
8351     DECL_OVERRIDE_P (decl) = 1;
8352   if (specifiers & VIRT_SPEC_FINAL)
8353     DECL_FINAL_P (decl) = 1;
8354   return decl;
8355 }
8356
8357 /* DECL is a VAR_DECL for a static data member.  Set flags to reflect
8358    the linkage that DECL will receive in the object file.  */
8359
8360 static void
8361 set_linkage_for_static_data_member (tree decl)
8362 {
8363   /* A static data member always has static storage duration and
8364      external linkage.  Note that static data members are forbidden in
8365      local classes -- the only situation in which a class has
8366      non-external linkage.  */
8367   TREE_PUBLIC (decl) = 1;
8368   TREE_STATIC (decl) = 1;
8369   /* For non-template classes, static data members are always put
8370      out in exactly those files where they are defined, just as
8371      with ordinary namespace-scope variables.  */
8372   if (!processing_template_decl)
8373     DECL_INTERFACE_KNOWN (decl) = 1;
8374 }
8375
8376 /* Create a VAR_DECL named NAME with the indicated TYPE.
8377
8378    If SCOPE is non-NULL, it is the class type or namespace containing
8379    the variable.  If SCOPE is NULL, the variable should is created in
8380    the innermost enclosing scope.  */
8381
8382 static tree
8383 grokvardecl (tree type,
8384              tree name,
8385              tree orig_declarator,
8386              const cp_decl_specifier_seq *declspecs,
8387              int initialized,
8388              int flags,
8389              int template_count,
8390              tree scope)
8391 {
8392   tree decl;
8393   tree explicit_scope;
8394
8395   gcc_assert (!name || identifier_p (name));
8396
8397   bool constp = flags&1;
8398   bool conceptp = flags&2;
8399
8400   /* Compute the scope in which to place the variable, but remember
8401      whether or not that scope was explicitly specified by the user.   */
8402   explicit_scope = scope;
8403   if (!scope)
8404     {
8405       /* An explicit "extern" specifier indicates a namespace-scope
8406          variable.  */
8407       if (declspecs->storage_class == sc_extern)
8408         scope = current_decl_namespace ();
8409       else if (!at_function_scope_p ())
8410         scope = current_scope ();
8411     }
8412
8413   if (scope
8414       && (/* If the variable is a namespace-scope variable declared in a
8415              template, we need DECL_LANG_SPECIFIC.  */
8416           (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
8417           /* Similarly for namespace-scope variables with language linkage
8418              other than C++.  */
8419           || (TREE_CODE (scope) == NAMESPACE_DECL
8420               && current_lang_name != lang_name_cplusplus)
8421           /* Similarly for static data members.  */
8422           || TYPE_P (scope)
8423           /* Similarly for explicit specializations.  */
8424           || (orig_declarator
8425               && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)))
8426     decl = build_lang_decl (VAR_DECL, name, type);
8427   else
8428     decl = build_decl (input_location, VAR_DECL, name, type);
8429
8430   if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
8431     set_decl_namespace (decl, explicit_scope, 0);
8432   else
8433     DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
8434
8435   if (declspecs->storage_class == sc_extern)
8436     {
8437       DECL_THIS_EXTERN (decl) = 1;
8438       DECL_EXTERNAL (decl) = !initialized;
8439     }
8440
8441   if (DECL_CLASS_SCOPE_P (decl))
8442     {
8443       set_linkage_for_static_data_member (decl);
8444       /* This function is only called with out-of-class definitions.  */
8445       DECL_EXTERNAL (decl) = 0;
8446       check_class_member_definition_namespace (decl);
8447     }
8448   /* At top level, either `static' or no s.c. makes a definition
8449      (perhaps tentative), and absence of `static' makes it public.  */
8450   else if (toplevel_bindings_p ())
8451     {
8452       TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
8453                             && (DECL_THIS_EXTERN (decl) || ! constp));
8454       TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
8455     }
8456   /* Not at top level, only `static' makes a static definition.  */
8457   else
8458     {
8459       TREE_STATIC (decl) = declspecs->storage_class == sc_static;
8460       TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
8461     }
8462
8463   if (decl_spec_seq_has_spec_p (declspecs, ds_thread))
8464     {
8465       if (DECL_EXTERNAL (decl) || TREE_STATIC (decl))
8466         {
8467           CP_DECL_THREAD_LOCAL_P (decl) = true;
8468           if (!processing_template_decl)
8469             set_decl_tls_model (decl, decl_default_tls_model (decl));
8470         }
8471       if (declspecs->gnu_thread_keyword_p)
8472         SET_DECL_GNU_TLS_P (decl);
8473     }
8474
8475   /* If the type of the decl has no linkage, make sure that we'll
8476      notice that in mark_used.  */
8477   if (cxx_dialect > cxx98
8478       && decl_linkage (decl) != lk_none
8479       && DECL_LANG_SPECIFIC (decl) == NULL
8480       && !DECL_EXTERN_C_P (decl)
8481       && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
8482     retrofit_lang_decl (decl);
8483
8484   if (TREE_PUBLIC (decl))
8485     {
8486       /* [basic.link]: A name with no linkage (notably, the name of a class
8487          or enumeration declared in a local scope) shall not be used to
8488          declare an entity with linkage.
8489
8490          DR 757 relaxes this restriction for C++0x.  */
8491       if (cxx_dialect < cxx11)
8492         no_linkage_error (decl);
8493     }
8494   else
8495     DECL_INTERFACE_KNOWN (decl) = 1;
8496
8497   if (DECL_NAME (decl)
8498       && MAIN_NAME_P (DECL_NAME (decl))
8499       && scope == global_namespace)
8500     error ("cannot declare %<::main%> to be a global variable");
8501
8502   /* Check that the variable can be safely declared as a concept.
8503      Note that this also forbids explicit specializations.  */
8504   if (conceptp)
8505     {
8506       if (!processing_template_decl)
8507         {
8508           error ("a non-template variable cannot be %<concept%>");
8509           return NULL_TREE;
8510         }
8511       else
8512         DECL_DECLARED_CONCEPT_P (decl) = true;
8513       if (!same_type_ignoring_top_level_qualifiers_p (type, boolean_type_node))
8514         error_at (declspecs->locations[ds_type_spec],
8515                   "concept must have type %<bool%>");
8516     }
8517   else if (flag_concepts
8518            && processing_template_decl > template_class_depth (scope))
8519     {
8520       tree reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
8521       tree ci = build_constraints (reqs, NULL_TREE);
8522       set_constraints (decl, ci);
8523     }
8524
8525   // Handle explicit specializations and instantiations of variable templates.
8526   if (orig_declarator)
8527     decl = check_explicit_specialization (orig_declarator, decl,
8528                                           template_count, conceptp * 8);
8529
8530   return decl != error_mark_node ? decl : NULL_TREE;
8531 }
8532
8533 /* Create and return a canonical pointer to member function type, for
8534    TYPE, which is a POINTER_TYPE to a METHOD_TYPE.  */
8535
8536 tree
8537 build_ptrmemfunc_type (tree type)
8538 {
8539   tree field, fields;
8540   tree t;
8541
8542   if (type == error_mark_node)
8543     return type;
8544
8545   /* Make sure that we always have the unqualified pointer-to-member
8546      type first.  */
8547   if (cp_cv_quals quals = cp_type_quals (type))
8548     {
8549       tree unqual = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
8550       return cp_build_qualified_type (unqual, quals);
8551     }
8552
8553   /* If a canonical type already exists for this type, use it.  We use
8554      this method instead of type_hash_canon, because it only does a
8555      simple equality check on the list of field members.  */
8556
8557   if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
8558     return t;
8559
8560   t = make_node (RECORD_TYPE);
8561
8562   /* Let the front end know this is a pointer to member function.  */
8563   TYPE_PTRMEMFUNC_FLAG (t) = 1;
8564
8565   field = build_decl (input_location, FIELD_DECL, pfn_identifier, type);
8566   fields = field;
8567
8568   field = build_decl (input_location, FIELD_DECL, delta_identifier, 
8569                       delta_type_node);
8570   DECL_CHAIN (field) = fields;
8571   fields = field;
8572
8573   finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
8574
8575   /* Zap out the name so that the back end will give us the debugging
8576      information for this anonymous RECORD_TYPE.  */
8577   TYPE_NAME (t) = NULL_TREE;
8578
8579   /* Cache this pointer-to-member type so that we can find it again
8580      later.  */
8581   TYPE_SET_PTRMEMFUNC_TYPE (type, t);
8582
8583   if (TYPE_STRUCTURAL_EQUALITY_P (type))
8584     SET_TYPE_STRUCTURAL_EQUALITY (t);
8585   else if (TYPE_CANONICAL (type) != type)
8586     TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
8587
8588   return t;
8589 }
8590
8591 /* Create and return a pointer to data member type.  */
8592
8593 tree
8594 build_ptrmem_type (tree class_type, tree member_type)
8595 {
8596   if (TREE_CODE (member_type) == METHOD_TYPE)
8597     {
8598       cp_cv_quals quals = type_memfn_quals (member_type);
8599       cp_ref_qualifier rqual = type_memfn_rqual (member_type);
8600       member_type = build_memfn_type (member_type, class_type, quals, rqual);
8601       return build_ptrmemfunc_type (build_pointer_type (member_type));
8602     }
8603   else
8604     {
8605       gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
8606       return build_offset_type (class_type, member_type);
8607     }
8608 }
8609
8610 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
8611    Check to see that the definition is valid.  Issue appropriate error
8612    messages.  Return 1 if the definition is particularly bad, or 0
8613    otherwise.  */
8614
8615 static int
8616 check_static_variable_definition (tree decl, tree type)
8617 {
8618   /* Can't check yet if we don't know the type.  */
8619   if (dependent_type_p (type))
8620     return 0;
8621   /* If DECL is declared constexpr, we'll do the appropriate checks
8622      in check_initializer.  */
8623   if (DECL_P (decl) && DECL_DECLARED_CONSTEXPR_P (decl))
8624     return 0;
8625   else if (cxx_dialect >= cxx11 && !INTEGRAL_OR_ENUMERATION_TYPE_P (type))
8626     {
8627       if (!COMPLETE_TYPE_P (type))
8628         error ("in-class initialization of static data member %q#D of "
8629                "incomplete type", decl);
8630       else if (literal_type_p (type))
8631         permerror (input_location,
8632                    "%<constexpr%> needed for in-class initialization of "
8633                    "static data member %q#D of non-integral type", decl);
8634       else
8635         error ("in-class initialization of static data member %q#D of "
8636                "non-literal type", decl);
8637       return 1;
8638     }
8639
8640   /* Motion 10 at San Diego: If a static const integral data member is
8641      initialized with an integral constant expression, the initializer
8642      may appear either in the declaration (within the class), or in
8643      the definition, but not both.  If it appears in the class, the
8644      member is a member constant.  The file-scope definition is always
8645      required.  */
8646   if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
8647     {
8648       error ("invalid in-class initialization of static data member "
8649              "of non-integral type %qT",
8650              type);
8651       return 1;
8652     }
8653   else if (!CP_TYPE_CONST_P (type))
8654     error ("ISO C++ forbids in-class initialization of non-const "
8655            "static member %qD",
8656            decl);
8657   else if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
8658     pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids initialization of member constant "
8659              "%qD of non-integral type %qT", decl, type);
8660
8661   return 0;
8662 }
8663
8664 /* *expr_p is part of the TYPE_SIZE of a variably-sized array.  If any
8665    SAVE_EXPRs in *expr_p wrap expressions with side-effects, break those
8666    expressions out into temporary variables so that walk_tree doesn't
8667    step into them (c++/15764).  */
8668
8669 static tree
8670 stabilize_save_expr_r (tree *expr_p, int *walk_subtrees, void *data)
8671 {
8672   hash_set<tree> *pset = (hash_set<tree> *)data;
8673   tree expr = *expr_p;
8674   if (TREE_CODE (expr) == SAVE_EXPR)
8675     {
8676       tree op = TREE_OPERAND (expr, 0);
8677       cp_walk_tree (&op, stabilize_save_expr_r, data, pset);
8678       if (TREE_SIDE_EFFECTS (op))
8679         TREE_OPERAND (expr, 0) = get_temp_regvar (TREE_TYPE (op), op);
8680       *walk_subtrees = 0;
8681     }
8682   else if (!EXPR_P (expr) || !TREE_SIDE_EFFECTS (expr))
8683     *walk_subtrees = 0;
8684   return NULL;
8685 }
8686
8687 /* Entry point for the above.  */
8688
8689 static void
8690 stabilize_vla_size (tree size)
8691 {
8692   hash_set<tree> pset;
8693   /* Break out any function calls into temporary variables.  */
8694   cp_walk_tree (&size, stabilize_save_expr_r, &pset, &pset);
8695 }
8696
8697 /* Reduce a SIZEOF_EXPR to its value.  */
8698
8699 tree
8700 fold_sizeof_expr (tree t)
8701 {
8702   tree r;
8703   if (SIZEOF_EXPR_TYPE_P (t))
8704     r = cxx_sizeof_or_alignof_type (TREE_TYPE (TREE_OPERAND (t, 0)),
8705                                     SIZEOF_EXPR, false);
8706   else if (TYPE_P (TREE_OPERAND (t, 0)))
8707     r = cxx_sizeof_or_alignof_type (TREE_OPERAND (t, 0), SIZEOF_EXPR,
8708                                     false);
8709   else
8710     r = cxx_sizeof_or_alignof_expr (TREE_OPERAND (t, 0), SIZEOF_EXPR,
8711                                     false);
8712   if (r == error_mark_node)
8713     r = size_one_node;
8714   return r;
8715 }
8716
8717 /* Given the SIZE (i.e., number of elements) in an array, compute
8718    an appropriate index type for the array.  If non-NULL, NAME is
8719    the name of the entity being declared.  */
8720
8721 tree
8722 compute_array_index_type (tree name, tree size, tsubst_flags_t complain)
8723 {
8724   tree itype;
8725   tree osize = size;
8726
8727   if (error_operand_p (size))
8728     return error_mark_node;
8729
8730   if (!type_dependent_expression_p (size))
8731     {
8732       tree type = TREE_TYPE (size);
8733
8734       mark_rvalue_use (size);
8735
8736       if (cxx_dialect < cxx11 && TREE_CODE (size) == NOP_EXPR
8737           && TREE_SIDE_EFFECTS (size))
8738         /* In C++98, we mark a non-constant array bound with a magic
8739            NOP_EXPR with TREE_SIDE_EFFECTS; don't fold in that case.  */;
8740       else
8741         {
8742           size = instantiate_non_dependent_expr_sfinae (size, complain);
8743
8744           if (CLASS_TYPE_P (type)
8745               && CLASSTYPE_LITERAL_P (type))
8746             {
8747               size = build_expr_type_conversion (WANT_INT, size, true);
8748               if (!size)
8749                 {
8750                   if (!(complain & tf_error))
8751                     return error_mark_node;
8752                   if (name)
8753                     error ("size of array %qD has non-integral type %qT",
8754                            name, type);
8755                   else
8756                     error ("size of array has non-integral type %qT", type);
8757                   size = integer_one_node;
8758                 }
8759               if (size == error_mark_node)
8760                 return error_mark_node;
8761               type = TREE_TYPE (size);
8762             }
8763
8764           if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
8765             size = maybe_constant_value (size);
8766
8767           if (!TREE_CONSTANT (size))
8768             size = osize;
8769         }
8770
8771       if (error_operand_p (size))
8772         return error_mark_node;
8773
8774       /* The array bound must be an integer type.  */
8775       if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
8776         {
8777           if (!(complain & tf_error))
8778             return error_mark_node;
8779           if (name)
8780             error ("size of array %qD has non-integral type %qT", name, type);
8781           else
8782             error ("size of array has non-integral type %qT", type);
8783           size = integer_one_node;
8784           type = TREE_TYPE (size);
8785         }
8786     }
8787
8788   /* A type is dependent if it is...an array type constructed from any
8789      dependent type or whose size is specified by a constant expression
8790      that is value-dependent.  */
8791   /* We can only call value_dependent_expression_p on integral constant
8792      expressions; treat non-constant expressions as dependent, too.  */
8793   if (processing_template_decl
8794       && (type_dependent_expression_p (size)
8795           || !TREE_CONSTANT (size) || value_dependent_expression_p (size)))
8796     {
8797       /* We cannot do any checking for a SIZE that isn't known to be
8798          constant. Just build the index type and mark that it requires
8799          structural equality checks.  */
8800       itype = build_index_type (build_min (MINUS_EXPR, sizetype,
8801                                            size, size_one_node));
8802       TYPE_DEPENDENT_P (itype) = 1;
8803       TYPE_DEPENDENT_P_VALID (itype) = 1;
8804       SET_TYPE_STRUCTURAL_EQUALITY (itype);
8805       return itype;
8806     }
8807
8808   if (TREE_CODE (size) != INTEGER_CST)
8809     {
8810       tree folded = cp_fully_fold (size);
8811       if (TREE_CODE (folded) == INTEGER_CST)
8812         pedwarn (location_of (size), OPT_Wpedantic,
8813                  "size of array is not an integral constant-expression");
8814       /* Use the folded result for VLAs, too; it will have resolved
8815          SIZEOF_EXPR.  */
8816       size = folded;
8817     }
8818
8819   /* Normally, the array-bound will be a constant.  */
8820   if (TREE_CODE (size) == INTEGER_CST)
8821     {
8822       /* Check to see if the array bound overflowed.  Make that an
8823          error, no matter how generous we're being.  */
8824       constant_expression_error (size);
8825
8826       /* An array must have a positive number of elements.  */
8827       if (tree_int_cst_lt (size, integer_zero_node))
8828         {
8829           if (!(complain & tf_error))
8830             return error_mark_node;
8831           if (name)
8832             error ("size of array %qD is negative", name);
8833           else
8834             error ("size of array is negative");
8835           size = integer_one_node;
8836         }
8837       /* As an extension we allow zero-sized arrays.  */
8838       else if (integer_zerop (size))
8839         {
8840           if (!(complain & tf_error))
8841             /* We must fail if performing argument deduction (as
8842                indicated by the state of complain), so that
8843                another substitution can be found.  */
8844             return error_mark_node;
8845           else if (in_system_header_at (input_location))
8846             /* Allow them in system headers because glibc uses them.  */;
8847           else if (name)
8848             pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array %qD", name);
8849           else
8850             pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array");
8851         }
8852     }
8853   else if (TREE_CONSTANT (size)
8854            /* We don't allow VLAs at non-function scopes, or during
8855               tentative template substitution.  */
8856            || !at_function_scope_p ()
8857            || !(complain & tf_error))
8858     {
8859       if (!(complain & tf_error))
8860         return error_mark_node;
8861       /* `(int) &fn' is not a valid array bound.  */
8862       if (name)
8863         error ("size of array %qD is not an integral constant-expression",
8864                name);
8865       else
8866         error ("size of array is not an integral constant-expression");
8867       size = integer_one_node;
8868     }
8869   else if (pedantic && warn_vla != 0)
8870     {
8871       if (name)
8872         pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array %qD", name);
8873       else
8874         pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array");
8875     }
8876   else if (warn_vla > 0)
8877     {
8878       if (name)
8879         warning (OPT_Wvla, 
8880                  "variable length array %qD is used", name);
8881       else
8882         warning (OPT_Wvla, 
8883                  "variable length array is used");
8884     }
8885
8886   if (processing_template_decl && !TREE_CONSTANT (size))
8887     /* A variable sized array.  */
8888     itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
8889   else
8890     {
8891       HOST_WIDE_INT saved_processing_template_decl;
8892
8893       /* Compute the index of the largest element in the array.  It is
8894          one less than the number of elements in the array.  We save
8895          and restore PROCESSING_TEMPLATE_DECL so that computations in
8896          cp_build_binary_op will be appropriately folded.  */
8897       saved_processing_template_decl = processing_template_decl;
8898       processing_template_decl = 0;
8899       itype = cp_build_binary_op (input_location,
8900                                   MINUS_EXPR,
8901                                   cp_convert (ssizetype, size, complain),
8902                                   cp_convert (ssizetype, integer_one_node,
8903                                               complain),
8904                                   complain);
8905       itype = maybe_constant_value (itype);
8906       processing_template_decl = saved_processing_template_decl;
8907
8908       if (!TREE_CONSTANT (itype))
8909         {
8910           /* A variable sized array.  */
8911           itype = variable_size (itype);
8912
8913           stabilize_vla_size (itype);
8914
8915           if (flag_sanitize & SANITIZE_VLA
8916               && do_ubsan_in_current_function ())
8917             {
8918               /* We have to add 1 -- in the ubsan routine we generate
8919                  LE_EXPR rather than LT_EXPR.  */
8920               tree t = fold_build2 (PLUS_EXPR, TREE_TYPE (itype), itype,
8921                                     build_one_cst (TREE_TYPE (itype)));
8922               t = ubsan_instrument_vla (input_location, t);
8923               finish_expr_stmt (t);
8924             }
8925         }
8926       /* Make sure that there was no overflow when creating to a signed
8927          index type.  (For example, on a 32-bit machine, an array with
8928          size 2^32 - 1 is too big.)  */
8929       else if (TREE_CODE (itype) == INTEGER_CST
8930                && TREE_OVERFLOW (itype))
8931         {
8932           if (!(complain & tf_error))
8933             return error_mark_node;
8934           error ("overflow in array dimension");
8935           TREE_OVERFLOW (itype) = 0;
8936         }
8937     }
8938
8939   /* Create and return the appropriate index type.  */
8940   itype = build_index_type (itype);
8941
8942   /* If the index type were dependent, we would have returned early, so
8943      remember that it isn't.  */
8944   TYPE_DEPENDENT_P (itype) = 0;
8945   TYPE_DEPENDENT_P_VALID (itype) = 1;
8946   return itype;
8947 }
8948
8949 /* Returns the scope (if any) in which the entity declared by
8950    DECLARATOR will be located.  If the entity was declared with an
8951    unqualified name, NULL_TREE is returned.  */
8952
8953 tree
8954 get_scope_of_declarator (const cp_declarator *declarator)
8955 {
8956   while (declarator && declarator->kind != cdk_id)
8957     declarator = declarator->declarator;
8958
8959   /* If the declarator-id is a SCOPE_REF, the scope in which the
8960      declaration occurs is the first operand.  */
8961   if (declarator
8962       && declarator->u.id.qualifying_scope)
8963     return declarator->u.id.qualifying_scope;
8964
8965   /* Otherwise, the declarator is not a qualified name; the entity will
8966      be declared in the current scope.  */
8967   return NULL_TREE;
8968 }
8969
8970 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
8971    indicated TYPE.  If non-NULL, NAME is the NAME of the declaration
8972    with this type.  */
8973
8974 static tree
8975 create_array_type_for_decl (tree name, tree type, tree size)
8976 {
8977   tree itype = NULL_TREE;
8978
8979   /* If things have already gone awry, bail now.  */
8980   if (type == error_mark_node || size == error_mark_node)
8981     return error_mark_node;
8982
8983   /* 8.3.4/1: If the type of the identifier of D contains the auto
8984      type-specifier, the program is ill-formed.  */
8985   if (type_uses_auto (type))
8986     {
8987       error ("%qD declared as array of %qT", name, type);
8988       return error_mark_node;
8989     }
8990
8991   /* If there are some types which cannot be array elements,
8992      issue an error-message and return.  */
8993   switch (TREE_CODE (type))
8994     {
8995     case VOID_TYPE:
8996       if (name)
8997         error ("declaration of %qD as array of void", name);
8998       else
8999         error ("creating array of void");
9000       return error_mark_node;
9001
9002     case FUNCTION_TYPE:
9003       if (name)
9004         error ("declaration of %qD as array of functions", name);
9005       else
9006         error ("creating array of functions");
9007       return error_mark_node;
9008
9009     case REFERENCE_TYPE:
9010       if (name)
9011         error ("declaration of %qD as array of references", name);
9012       else
9013         error ("creating array of references");
9014       return error_mark_node;
9015
9016     case METHOD_TYPE:
9017       if (name)
9018         error ("declaration of %qD as array of function members", name);
9019       else
9020         error ("creating array of function members");
9021       return error_mark_node;
9022
9023     default:
9024       break;
9025     }
9026
9027   /* [dcl.array]
9028
9029      The constant expressions that specify the bounds of the arrays
9030      can be omitted only for the first member of the sequence.  */
9031   if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
9032     {
9033       if (name)
9034         error ("declaration of %qD as multidimensional array must "
9035                "have bounds for all dimensions except the first",
9036                name);
9037       else
9038         error ("multidimensional array must have bounds for all "
9039                "dimensions except the first");
9040
9041       return error_mark_node;
9042     }
9043
9044   /* Figure out the index type for the array.  */
9045   if (size)
9046     itype = compute_array_index_type (name, size, tf_warning_or_error);
9047
9048   /* [dcl.array]
9049      T is called the array element type; this type shall not be [...] an
9050      abstract class type.  */
9051   abstract_virtuals_error (name, type);
9052
9053   return build_cplus_array_type (type, itype);
9054 }
9055
9056 /* Returns the smallest location != UNKNOWN_LOCATION among the
9057    three stored in LOCATIONS[ds_const], LOCATIONS[ds_volatile],
9058    and LOCATIONS[ds_restrict].  */
9059
9060 static location_t
9061 smallest_type_quals_location (int type_quals, const location_t* locations)
9062 {
9063   location_t loc = UNKNOWN_LOCATION;
9064
9065   if (type_quals & TYPE_QUAL_CONST)
9066     loc = locations[ds_const];
9067
9068   if ((type_quals & TYPE_QUAL_VOLATILE)
9069       && (loc == UNKNOWN_LOCATION || locations[ds_volatile] < loc))
9070     loc = locations[ds_volatile];
9071
9072   if ((type_quals & TYPE_QUAL_RESTRICT)
9073       && (loc == UNKNOWN_LOCATION || locations[ds_restrict] < loc))
9074     loc = locations[ds_restrict];
9075
9076   return loc;
9077 }
9078
9079 /* Check that it's OK to declare a function with the indicated TYPE
9080    and TYPE_QUALS.  SFK indicates the kind of special function (if any)
9081    that this function is.  OPTYPE is the type given in a conversion
9082    operator declaration, or the class type for a constructor/destructor.
9083    Returns the actual return type of the function; that may be different
9084    than TYPE if an error occurs, or for certain special functions.  */
9085
9086 static tree
9087 check_special_function_return_type (special_function_kind sfk,
9088                                     tree type,
9089                                     tree optype,
9090                                     int type_quals,
9091                                     const location_t* locations)
9092 {
9093   switch (sfk)
9094     {
9095     case sfk_constructor:
9096       if (type)
9097         error ("return type specification for constructor invalid");
9098       else if (type_quals != TYPE_UNQUALIFIED)
9099         error_at (smallest_type_quals_location (type_quals, locations),
9100                   "qualifiers are not allowed on constructor declaration");
9101
9102       if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
9103         type = build_pointer_type (optype);
9104       else
9105         type = void_type_node;
9106       break;
9107
9108     case sfk_destructor:
9109       if (type)
9110         error ("return type specification for destructor invalid");
9111       else if (type_quals != TYPE_UNQUALIFIED)
9112         error_at (smallest_type_quals_location (type_quals, locations),
9113                   "qualifiers are not allowed on destructor declaration");
9114
9115       /* We can't use the proper return type here because we run into
9116          problems with ambiguous bases and covariant returns.
9117          Java classes are left unchanged because (void *) isn't a valid
9118          Java type, and we don't want to change the Java ABI.  */
9119       if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
9120         type = build_pointer_type (void_type_node);
9121       else
9122         type = void_type_node;
9123       break;
9124
9125     case sfk_conversion:
9126       if (type)
9127         error ("return type specified for %<operator %T%>", optype);
9128       else if (type_quals != TYPE_UNQUALIFIED)
9129         error_at (smallest_type_quals_location (type_quals, locations),
9130                   "qualifiers are not allowed on declaration of "
9131                   "%<operator %T%>", optype);
9132
9133       type = optype;
9134       break;
9135
9136     default:
9137       gcc_unreachable ();
9138     }
9139
9140   return type;
9141 }
9142
9143 /* A variable or data member (whose unqualified name is IDENTIFIER)
9144    has been declared with the indicated TYPE.  If the TYPE is not
9145    acceptable, issue an error message and return a type to use for
9146    error-recovery purposes.  */
9147
9148 tree
9149 check_var_type (tree identifier, tree type)
9150 {
9151   if (VOID_TYPE_P (type))
9152     {
9153       if (!identifier)
9154         error ("unnamed variable or field declared void");
9155       else if (identifier_p (identifier))
9156         {
9157           gcc_assert (!IDENTIFIER_OPNAME_P (identifier));
9158           error ("variable or field %qE declared void", identifier);
9159         }
9160       else
9161         error ("variable or field declared void");
9162       type = error_mark_node;
9163     }
9164
9165   return type;
9166 }
9167
9168 /* Given declspecs and a declarator (abstract or otherwise), determine
9169    the name and type of the object declared and construct a DECL node
9170    for it.
9171
9172    DECLSPECS points to the representation of declaration-specifier
9173    sequence that precedes declarator.
9174
9175    DECL_CONTEXT says which syntactic context this declaration is in:
9176      NORMAL for most contexts.  Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
9177      FUNCDEF for a function definition.  Like NORMAL but a few different
9178       error messages in each case.  Return value may be zero meaning
9179       this definition is too screwy to try to parse.
9180      MEMFUNCDEF for a function definition.  Like FUNCDEF but prepares to
9181       handle member functions (which have FIELD context).
9182       Return value may be zero meaning this definition is too screwy to
9183       try to parse.
9184      PARM for a parameter declaration (either within a function prototype
9185       or before a function body).  Make a PARM_DECL, or return void_type_node.
9186      TPARM for a template parameter declaration.
9187      CATCHPARM for a parameter declaration before a catch clause.
9188      TYPENAME if for a typename (in a cast or sizeof).
9189       Don't make a DECL node; just return the ..._TYPE node.
9190      FIELD for a struct or union field; make a FIELD_DECL.
9191      BITFIELD for a field with specified width.
9192
9193    INITIALIZED is as for start_decl.
9194
9195    ATTRLIST is a pointer to the list of attributes, which may be NULL
9196    if there are none; *ATTRLIST may be modified if attributes from inside
9197    the declarator should be applied to the declaration.
9198
9199    When this function is called, scoping variables (such as
9200    CURRENT_CLASS_TYPE) should reflect the scope in which the
9201    declaration occurs, not the scope in which the new declaration will
9202    be placed.  For example, on:
9203
9204      void S::f() { ... }
9205
9206    when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
9207    should not be `S'.
9208
9209    Returns a DECL (if a declarator is present), a TYPE (if there is no
9210    declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
9211    error occurs. */
9212
9213 tree
9214 grokdeclarator (const cp_declarator *declarator,
9215                 cp_decl_specifier_seq *declspecs,
9216                 enum decl_context decl_context,
9217                 int initialized,
9218                 tree* attrlist)
9219 {
9220   tree type = NULL_TREE;
9221   int longlong = 0;
9222   int explicit_intN = 0;
9223   int virtualp, explicitp, friendp, inlinep, staticp;
9224   int explicit_int = 0;
9225   int explicit_char = 0;
9226   int defaulted_int = 0;
9227
9228   tree typedef_decl = NULL_TREE;
9229   const char *name = NULL;
9230   tree typedef_type = NULL_TREE;
9231   /* True if this declarator is a function definition.  */
9232   bool funcdef_flag = false;
9233   cp_declarator_kind innermost_code = cdk_error;
9234   int bitfield = 0;
9235 #if 0
9236   /* See the code below that used this.  */
9237   tree decl_attr = NULL_TREE;
9238 #endif
9239
9240   /* Keep track of what sort of function is being processed
9241      so that we can warn about default return values, or explicit
9242      return values which do not match prescribed defaults.  */
9243   special_function_kind sfk = sfk_none;
9244
9245   tree dname = NULL_TREE;
9246   tree ctor_return_type = NULL_TREE;
9247   enum overload_flags flags = NO_SPECIAL;
9248   /* cv-qualifiers that apply to the declarator, for a declaration of
9249      a member function.  */
9250   cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
9251   /* virt-specifiers that apply to the declarator, for a declaration of
9252      a member function.  */
9253   cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
9254   /* ref-qualifier that applies to the declarator, for a declaration of
9255      a member function.  */
9256   cp_ref_qualifier rqual = REF_QUAL_NONE;
9257   /* cv-qualifiers that apply to the type specified by the DECLSPECS.  */
9258   int type_quals = TYPE_UNQUALIFIED;
9259   tree raises = NULL_TREE;
9260   int template_count = 0;
9261   tree returned_attrs = NULL_TREE;
9262   tree parms = NULL_TREE;
9263   const cp_declarator *id_declarator;
9264   /* The unqualified name of the declarator; either an
9265      IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR.  */
9266   tree unqualified_id;
9267   /* The class type, if any, in which this entity is located,
9268      or NULL_TREE if none.  Note that this value may be different from
9269      the current class type; for example if an attempt is made to declare
9270      "A::f" inside "B", this value will be "A".  */
9271   tree ctype = current_class_type;
9272   /* The NAMESPACE_DECL for the namespace in which this entity is
9273      located.  If an unqualified name is used to declare the entity,
9274      this value will be NULL_TREE, even if the entity is located at
9275      namespace scope.  */
9276   tree in_namespace = NULL_TREE;
9277   cp_storage_class storage_class;
9278   bool unsigned_p, signed_p, short_p, long_p, thread_p;
9279   bool type_was_error_mark_node = false;
9280   bool parameter_pack_p = declarator? declarator->parameter_pack_p : false;
9281   bool template_type_arg = false;
9282   bool template_parm_flag = false;
9283   bool typedef_p = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
9284   bool constexpr_p = decl_spec_seq_has_spec_p (declspecs, ds_constexpr);
9285   bool late_return_type_p = false;
9286   bool array_parameter_p = false;
9287   source_location saved_loc = input_location;
9288   const char *errmsg;
9289   tree reqs = NULL_TREE;
9290
9291   signed_p = decl_spec_seq_has_spec_p (declspecs, ds_signed);
9292   unsigned_p = decl_spec_seq_has_spec_p (declspecs, ds_unsigned);
9293   short_p = decl_spec_seq_has_spec_p (declspecs, ds_short);
9294   long_p = decl_spec_seq_has_spec_p (declspecs, ds_long);
9295   longlong = decl_spec_seq_has_spec_p (declspecs, ds_long_long);
9296   explicit_intN = declspecs->explicit_intN_p;
9297   thread_p = decl_spec_seq_has_spec_p (declspecs, ds_thread);
9298
9299   // Was concept_p specified? Note that ds_concept
9300   // implies ds_constexpr!
9301   bool concept_p = decl_spec_seq_has_spec_p (declspecs, ds_concept);
9302   if (concept_p)
9303     constexpr_p = true;
9304
9305   if (decl_spec_seq_has_spec_p (declspecs, ds_const))
9306     type_quals |= TYPE_QUAL_CONST;
9307   if (decl_spec_seq_has_spec_p (declspecs, ds_volatile))
9308     type_quals |= TYPE_QUAL_VOLATILE;
9309   if (decl_spec_seq_has_spec_p (declspecs, ds_restrict))
9310     type_quals |= TYPE_QUAL_RESTRICT;
9311
9312   if (decl_context == FUNCDEF)
9313     funcdef_flag = true, decl_context = NORMAL;
9314   else if (decl_context == MEMFUNCDEF)
9315     funcdef_flag = true, decl_context = FIELD;
9316   else if (decl_context == BITFIELD)
9317     bitfield = 1, decl_context = FIELD;
9318   else if (decl_context == TEMPLATE_TYPE_ARG)
9319     template_type_arg = true, decl_context = TYPENAME;
9320   else if (decl_context == TPARM)
9321     template_parm_flag = true, decl_context = PARM;
9322
9323   if (initialized > 1)
9324     funcdef_flag = true;
9325
9326   /* Look inside a declarator for the name being declared
9327      and get it as a string, for an error message.  */
9328   for (id_declarator = declarator;
9329        id_declarator;
9330        id_declarator = id_declarator->declarator)
9331     {
9332       if (id_declarator->kind != cdk_id)
9333         innermost_code = id_declarator->kind;
9334
9335       switch (id_declarator->kind)
9336         {
9337         case cdk_function:
9338           if (id_declarator->declarator
9339               && id_declarator->declarator->kind == cdk_id)
9340             {
9341               sfk = id_declarator->declarator->u.id.sfk;
9342               if (sfk == sfk_destructor)
9343                 flags = DTOR_FLAG;
9344             }
9345           break;
9346
9347         case cdk_id:
9348           {
9349             tree qualifying_scope = id_declarator->u.id.qualifying_scope;
9350             tree decl = id_declarator->u.id.unqualified_name;
9351             if (!decl)
9352               break;
9353             if (qualifying_scope)
9354               {
9355                 if (at_function_scope_p ())
9356                   {
9357                     /* [dcl.meaning] 
9358
9359                        A declarator-id shall not be qualified except
9360                        for ... 
9361
9362                        None of the cases are permitted in block
9363                        scope.  */
9364                     if (qualifying_scope == global_namespace)
9365                       error ("invalid use of qualified-name %<::%D%>",
9366                              decl);
9367                     else if (TYPE_P (qualifying_scope))
9368                       error ("invalid use of qualified-name %<%T::%D%>",
9369                              qualifying_scope, decl);
9370                     else 
9371                       error ("invalid use of qualified-name %<%D::%D%>",
9372                              qualifying_scope, decl);
9373                     return error_mark_node;
9374                   }
9375                 else if (TYPE_P (qualifying_scope))
9376                   {
9377                     ctype = qualifying_scope;
9378                     if (!MAYBE_CLASS_TYPE_P (ctype))
9379                       {
9380                         error ("%q#T is not a class or a namespace", ctype);
9381                         ctype = NULL_TREE;
9382                       }
9383                     else if (innermost_code != cdk_function
9384                              && current_class_type
9385                              && !uniquely_derived_from_p (ctype,
9386                                                           current_class_type))
9387                       {
9388                         error ("invalid use of qualified-name %<%T::%D%>",
9389                                qualifying_scope, decl);
9390                         return error_mark_node;
9391                       }
9392                   }
9393                 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
9394                   in_namespace = qualifying_scope;
9395               }
9396             switch (TREE_CODE (decl))
9397               {
9398               case BIT_NOT_EXPR:
9399                 {
9400                   tree type;
9401
9402                   if (innermost_code != cdk_function)
9403                     {
9404                       error ("declaration of %qD as non-function", decl);
9405                       return error_mark_node;
9406                     }
9407                   else if (!qualifying_scope
9408                            && !(current_class_type && at_class_scope_p ()))
9409                     {
9410                       error ("declaration of %qD as non-member", decl);
9411                       return error_mark_node;
9412                     }
9413
9414                   type = TREE_OPERAND (decl, 0);
9415                   if (TYPE_P (type))
9416                     type = constructor_name (type);
9417                   name = identifier_to_locale (IDENTIFIER_POINTER (type));
9418                   dname = decl;
9419                 }
9420                 break;
9421
9422               case TEMPLATE_ID_EXPR:
9423                 {
9424                   tree fns = TREE_OPERAND (decl, 0);
9425
9426                   dname = fns;
9427                   if (!identifier_p (dname))
9428                     {
9429                       if (variable_template_p (dname))
9430                         dname = DECL_NAME (dname);
9431                       else
9432                         {
9433                           gcc_assert (is_overloaded_fn (dname));
9434                           dname = DECL_NAME (get_first_fn (dname));
9435                         }
9436                     }
9437                 }
9438                 /* Fall through.  */
9439
9440               case IDENTIFIER_NODE:
9441                 if (identifier_p (decl))
9442                   dname = decl;
9443
9444                 if (C_IS_RESERVED_WORD (dname))
9445                   {
9446                     error ("declarator-id missing; using reserved word %qD",
9447                            dname);
9448                     name = identifier_to_locale (IDENTIFIER_POINTER (dname));
9449                   }
9450                 else if (!IDENTIFIER_TYPENAME_P (dname))
9451                   name = identifier_to_locale (IDENTIFIER_POINTER (dname));
9452                 else
9453                   {
9454                     gcc_assert (flags == NO_SPECIAL);
9455                     flags = TYPENAME_FLAG;
9456                     ctor_return_type = TREE_TYPE (dname);
9457                     sfk = sfk_conversion;
9458                     if (is_typename_at_global_scope (dname))
9459                       name = identifier_to_locale (IDENTIFIER_POINTER (dname));
9460                     else
9461                       name = "<invalid operator>";
9462                   }
9463                 break;
9464
9465               default:
9466                 gcc_unreachable ();
9467               }
9468             break;
9469           }
9470
9471         case cdk_array:
9472         case cdk_pointer:
9473         case cdk_reference:
9474         case cdk_ptrmem:
9475           break;
9476
9477         case cdk_error:
9478           return error_mark_node;
9479
9480         default:
9481           gcc_unreachable ();
9482         }
9483       if (id_declarator->kind == cdk_id)
9484         break;
9485     }
9486
9487   /* [dcl.fct.edf]
9488
9489      The declarator in a function-definition shall have the form
9490      D1 ( parameter-declaration-clause) ...  */
9491   if (funcdef_flag && innermost_code != cdk_function)
9492     {
9493       error ("function definition does not declare parameters");
9494       return error_mark_node;
9495     }
9496
9497   if (flags == TYPENAME_FLAG
9498       && innermost_code != cdk_function
9499       && ! (ctype && !declspecs->any_specifiers_p))
9500     {
9501       error ("declaration of %qD as non-function", dname);
9502       return error_mark_node;
9503     }
9504
9505   if (dname
9506       && identifier_p (dname)
9507       && UDLIT_OPER_P (dname)
9508       && innermost_code != cdk_function)
9509     {
9510       error ("declaration of %qD as non-function", dname);
9511       return error_mark_node;
9512     }
9513
9514   if (dname && IDENTIFIER_OPNAME_P (dname))
9515     {
9516       if (typedef_p)
9517         {
9518           error ("declaration of %qD as %<typedef%>", dname);
9519           return error_mark_node;
9520         }
9521       else if (decl_context == PARM || decl_context == CATCHPARM)
9522         {
9523           error ("declaration of %qD as parameter", dname);
9524           return error_mark_node;
9525         }
9526     }
9527
9528   /* Anything declared one level down from the top level
9529      must be one of the parameters of a function
9530      (because the body is at least two levels down).  */
9531
9532   /* This heuristic cannot be applied to C++ nodes! Fixed, however,
9533      by not allowing C++ class definitions to specify their parameters
9534      with xdecls (must be spec.d in the parmlist).
9535
9536      Since we now wait to push a class scope until we are sure that
9537      we are in a legitimate method context, we must set oldcname
9538      explicitly (since current_class_name is not yet alive).
9539
9540      We also want to avoid calling this a PARM if it is in a namespace.  */
9541
9542   if (decl_context == NORMAL && !toplevel_bindings_p ())
9543     {
9544       cp_binding_level *b = current_binding_level;
9545       current_binding_level = b->level_chain;
9546       if (current_binding_level != 0 && toplevel_bindings_p ())
9547         decl_context = PARM;
9548       current_binding_level = b;
9549     }
9550
9551   if (name == NULL)
9552     name = decl_context == PARM ? "parameter" : "type name";
9553
9554   if (concept_p && typedef_p)
9555     {
9556       error ("%<concept%> cannot appear in a typedef declaration");
9557       return error_mark_node;
9558     }
9559
9560   if (constexpr_p && typedef_p)
9561     {
9562       error ("%<constexpr%> cannot appear in a typedef declaration");
9563       return error_mark_node;
9564     }
9565
9566   /* If there were multiple types specified in the decl-specifier-seq,
9567      issue an error message.  */
9568   if (declspecs->multiple_types_p)
9569     {
9570       error ("two or more data types in declaration of %qs", name);
9571       return error_mark_node;
9572     }
9573
9574   if (declspecs->conflicting_specifiers_p)
9575     {
9576       error ("conflicting specifiers in declaration of %qs", name);
9577       return error_mark_node;
9578     }
9579
9580   /* Extract the basic type from the decl-specifier-seq.  */
9581   type = declspecs->type;
9582   if (type == error_mark_node)
9583     {
9584       type = NULL_TREE;
9585       type_was_error_mark_node = true;
9586     }
9587   /* If the entire declaration is itself tagged as deprecated then
9588      suppress reports of deprecated items.  */
9589   if (type && TREE_DEPRECATED (type)
9590       && deprecated_state != DEPRECATED_SUPPRESS)
9591     warn_deprecated_use (type, NULL_TREE);
9592   if (type && TREE_CODE (type) == TYPE_DECL)
9593     {
9594       typedef_decl = type;
9595       type = TREE_TYPE (typedef_decl);
9596       if (TREE_DEPRECATED (type)
9597           && DECL_ARTIFICIAL (typedef_decl)
9598           && deprecated_state != DEPRECATED_SUPPRESS)
9599         warn_deprecated_use (type, NULL_TREE);
9600     }
9601   /* No type at all: default to `int', and set DEFAULTED_INT
9602      because it was not a user-defined typedef.  */
9603   if (type == NULL_TREE)
9604     {
9605       if (signed_p || unsigned_p || long_p || short_p)
9606         {
9607           /* These imply 'int'.  */
9608           type = integer_type_node;
9609           defaulted_int = 1;
9610         }
9611       /* If we just have "complex", it is equivalent to "complex double".  */
9612       else if (!longlong && !explicit_intN
9613                && decl_spec_seq_has_spec_p (declspecs, ds_complex))
9614         {
9615           type = double_type_node;
9616           pedwarn (declspecs->locations[ds_complex], OPT_Wpedantic,
9617                    "ISO C++ does not support plain %<complex%> meaning "
9618                    "%<double complex%>");
9619         }
9620     }
9621   /* Gather flags.  */
9622   explicit_int = declspecs->explicit_int_p;
9623   explicit_char = declspecs->explicit_char_p;
9624
9625 #if 0
9626   /* See the code below that used this.  */
9627   if (typedef_decl)
9628     decl_attr = DECL_ATTRIBUTES (typedef_decl);
9629 #endif
9630   typedef_type = type;
9631
9632
9633   if (sfk != sfk_conversion)
9634     ctor_return_type = ctype;
9635
9636   if (sfk != sfk_none)
9637     {
9638       type = check_special_function_return_type (sfk, type,
9639                                                  ctor_return_type,
9640                                                  type_quals,
9641                                                  declspecs->locations);
9642       type_quals = TYPE_UNQUALIFIED;
9643     }
9644   else if (type == NULL_TREE)
9645     {
9646       int is_main;
9647
9648       explicit_int = -1;
9649
9650       /* We handle `main' specially here, because 'main () { }' is so
9651          common.  With no options, it is allowed.  With -Wreturn-type,
9652          it is a warning.  It is only an error with -pedantic-errors.  */
9653       is_main = (funcdef_flag
9654                  && dname && identifier_p (dname)
9655                  && MAIN_NAME_P (dname)
9656                  && ctype == NULL_TREE
9657                  && in_namespace == NULL_TREE
9658                  && current_namespace == global_namespace);
9659
9660       if (type_was_error_mark_node)
9661         /* We've already issued an error, don't complain more.  */;
9662       else if (in_system_header_at (input_location) || flag_ms_extensions)
9663         /* Allow it, sigh.  */;
9664       else if (! is_main)
9665         permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
9666       else if (pedantic)
9667         pedwarn (input_location, OPT_Wpedantic,
9668                  "ISO C++ forbids declaration of %qs with no type", name);
9669       else
9670         warning (OPT_Wreturn_type,
9671                  "ISO C++ forbids declaration of %qs with no type", name);
9672
9673       if (type_was_error_mark_node && template_parm_flag)
9674         /* FIXME we should be able to propagate the error_mark_node as is
9675            for other contexts too.  */
9676         type = error_mark_node;
9677       else
9678         type = integer_type_node;
9679     }
9680
9681   ctype = NULL_TREE;
9682
9683   if (explicit_intN)
9684     {
9685       if (! int_n_enabled_p[declspecs->int_n_idx])
9686        {
9687          error ("%<__int%d%> is not supported by this target",
9688                 int_n_data[declspecs->int_n_idx].bitsize);
9689          explicit_intN = false;
9690        }
9691       else if (pedantic && ! in_system_header_at (input_location))
9692        pedwarn (input_location, OPT_Wpedantic,
9693                 "ISO C++ does not support %<__int%d%> for %qs",
9694                 int_n_data[declspecs->int_n_idx].bitsize,  name);
9695     }
9696
9697   /* Now process the modifiers that were specified
9698      and check for invalid combinations.  */
9699
9700   /* Long double is a special combination.  */
9701   if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
9702     {
9703       long_p = false;
9704       type = cp_build_qualified_type (long_double_type_node,
9705                                       cp_type_quals (type));
9706     }
9707
9708   /* Check all other uses of type modifiers.  */
9709
9710   if (unsigned_p || signed_p || long_p || short_p)
9711     {
9712       int ok = 0;
9713
9714       if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
9715         error ("%<signed%> or %<unsigned%> invalid for %qs", name);
9716       else if (signed_p && unsigned_p)
9717         error ("%<signed%> and %<unsigned%> specified together for %qs", name);
9718       else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
9719         error ("%<long long%> invalid for %qs", name);
9720       else if (long_p && TREE_CODE (type) == REAL_TYPE)
9721         error ("%<long%> invalid for %qs", name);
9722       else if (short_p && TREE_CODE (type) == REAL_TYPE)
9723         error ("%<short%> invalid for %qs", name);
9724       else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE)
9725         error ("%<long%> or %<short%> invalid for %qs", name);
9726       else if ((long_p || short_p || explicit_char || explicit_int) && explicit_intN)
9727         error ("%<long%>, %<int%>, %<short%>, or %<char%> invalid for %qs", name);
9728       else if ((long_p || short_p) && explicit_char)
9729         error ("%<long%> or %<short%> specified with char for %qs", name);
9730       else if (long_p && short_p)
9731         error ("%<long%> and %<short%> specified together for %qs", name);
9732       else if (type == char16_type_node || type == char32_type_node)
9733         {
9734           if (signed_p || unsigned_p)
9735             error ("%<signed%> or %<unsigned%> invalid for %qs", name);
9736           else if (short_p || long_p)
9737             error ("%<short%> or %<long%> invalid for %qs", name);
9738         }
9739       else
9740         {
9741           ok = 1;
9742           if (!explicit_int && !defaulted_int && !explicit_char && !explicit_intN && pedantic)
9743             {
9744               pedwarn (input_location, OPT_Wpedantic, 
9745                        "long, short, signed or unsigned used invalidly for %qs",
9746                        name);
9747               if (flag_pedantic_errors)
9748                 ok = 0;
9749             }
9750         }
9751
9752       /* Discard the type modifiers if they are invalid.  */
9753       if (! ok)
9754         {
9755           unsigned_p = false;
9756           signed_p = false;
9757           long_p = false;
9758           short_p = false;
9759           longlong = 0;
9760         }
9761     }
9762
9763   /* Decide whether an integer type is signed or not.
9764      Optionally treat bitfields as signed by default.  */
9765   if (unsigned_p
9766       /* [class.bit]
9767
9768          It is implementation-defined whether a plain (neither
9769          explicitly signed or unsigned) char, short, int, or long
9770          bit-field is signed or unsigned.
9771
9772          Naturally, we extend this to long long as well.  Note that
9773          this does not include wchar_t.  */
9774       || (bitfield && !flag_signed_bitfields
9775           && !signed_p
9776           /* A typedef for plain `int' without `signed' can be
9777              controlled just like plain `int', but a typedef for
9778              `signed int' cannot be so controlled.  */
9779           && !(typedef_decl
9780                && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
9781           && TREE_CODE (type) == INTEGER_TYPE
9782           && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
9783     {
9784       if (explicit_intN)
9785         type = int_n_trees[declspecs->int_n_idx].unsigned_type;
9786       else if (longlong)
9787         type = long_long_unsigned_type_node;
9788       else if (long_p)
9789         type = long_unsigned_type_node;
9790       else if (short_p)
9791         type = short_unsigned_type_node;
9792       else if (type == char_type_node)
9793         type = unsigned_char_type_node;
9794       else if (typedef_decl)
9795         type = unsigned_type_for (type);
9796       else
9797         type = unsigned_type_node;
9798     }
9799   else if (signed_p && type == char_type_node)
9800     type = signed_char_type_node;
9801   else if (explicit_intN)
9802     type = int_n_trees[declspecs->int_n_idx].signed_type;
9803   else if (longlong)
9804     type = long_long_integer_type_node;
9805   else if (long_p)
9806     type = long_integer_type_node;
9807   else if (short_p)
9808     type = short_integer_type_node;
9809
9810   if (decl_spec_seq_has_spec_p (declspecs, ds_complex))
9811     {
9812       if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
9813         error ("complex invalid for %qs", name);
9814       /* If a modifier is specified, the resulting complex is the complex
9815          form of TYPE.  E.g, "complex short" is "complex short int".  */
9816       else if (type == integer_type_node)
9817         type = complex_integer_type_node;
9818       else if (type == float_type_node)
9819         type = complex_float_type_node;
9820       else if (type == double_type_node)
9821         type = complex_double_type_node;
9822       else if (type == long_double_type_node)
9823         type = complex_long_double_type_node;
9824       else
9825         type = build_complex_type (type);
9826     }
9827
9828   /* If we're using the injected-class-name to form a compound type or a
9829      declaration, replace it with the underlying class so we don't get
9830      redundant typedefs in the debug output.  But if we are returning the
9831      type unchanged, leave it alone so that it's available to
9832      maybe_get_template_decl_from_type_decl.  */
9833   if (CLASS_TYPE_P (type)
9834       && DECL_SELF_REFERENCE_P (TYPE_NAME (type))
9835       && type == TREE_TYPE (TYPE_NAME (type))
9836       && (declarator || type_quals))
9837     type = DECL_ORIGINAL_TYPE (TYPE_NAME (type));
9838
9839   type_quals |= cp_type_quals (type);
9840   type = cp_build_qualified_type_real
9841     (type, type_quals, ((((typedef_decl && !DECL_ARTIFICIAL (typedef_decl))
9842                           || declspecs->decltype_p)
9843                          ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
9844   /* We might have ignored or rejected some of the qualifiers.  */
9845   type_quals = cp_type_quals (type);
9846
9847   staticp = 0;
9848   inlinep = decl_spec_seq_has_spec_p (declspecs, ds_inline);
9849   virtualp =  decl_spec_seq_has_spec_p (declspecs, ds_virtual);
9850   explicitp = decl_spec_seq_has_spec_p (declspecs, ds_explicit);
9851
9852   storage_class = declspecs->storage_class;
9853   if (storage_class == sc_static)
9854     staticp = 1 + (decl_context == FIELD);
9855
9856   if (virtualp)
9857     {
9858       if (staticp == 2)
9859         {
9860           error ("member %qD cannot be declared both %<virtual%> "
9861                  "and %<static%>", dname);
9862           storage_class = sc_none;
9863           staticp = 0;
9864         }
9865       if (constexpr_p)
9866         error ("member %qD cannot be declared both %<virtual%> "
9867                "and %<constexpr%>", dname);
9868     }
9869   friendp = decl_spec_seq_has_spec_p (declspecs, ds_friend);
9870
9871   /* Issue errors about use of storage classes for parameters.  */
9872   if (decl_context == PARM)
9873     {
9874       if (typedef_p)
9875         {
9876           error ("typedef declaration invalid in parameter declaration");
9877           return error_mark_node;
9878         }
9879       else if (template_parm_flag && storage_class != sc_none)
9880         {
9881           error ("storage class specified for template parameter %qs", name);
9882           return error_mark_node;
9883         }
9884       else if (storage_class == sc_static
9885                || storage_class == sc_extern
9886                || thread_p)
9887         error ("storage class specifiers invalid in parameter declarations");
9888
9889       /* Function parameters cannot be concept. */
9890       if (concept_p)
9891           error ("a parameter cannot be declared %<concept%>");
9892       /* Function parameters cannot be constexpr.  If we saw one, moan
9893          and pretend it wasn't there.  */
9894       else if (constexpr_p)
9895         {
9896           error ("a parameter cannot be declared %<constexpr%>");
9897           constexpr_p = 0;
9898         }
9899     }
9900
9901   /* Give error if `virtual' is used outside of class declaration.  */
9902   if (virtualp
9903       && (current_class_name == NULL_TREE || decl_context != FIELD))
9904     {
9905       error_at (declspecs->locations[ds_virtual],
9906                 "%<virtual%> outside class declaration");
9907       virtualp = 0;
9908     }
9909
9910   /* Static anonymous unions are dealt with here.  */
9911   if (staticp && decl_context == TYPENAME
9912       && declspecs->type
9913       && ANON_AGGR_TYPE_P (declspecs->type))
9914     decl_context = FIELD;
9915
9916   /* Warn about storage classes that are invalid for certain
9917      kinds of declarations (parameters, typenames, etc.).  */
9918   if (thread_p
9919       && ((storage_class
9920            && storage_class != sc_extern
9921            && storage_class != sc_static)
9922           || typedef_p))
9923     {
9924       error ("multiple storage classes in declaration of %qs", name);
9925       thread_p = false;
9926     }
9927   if (decl_context != NORMAL
9928       && ((storage_class != sc_none
9929            && storage_class != sc_mutable)
9930           || thread_p))
9931     {
9932       if ((decl_context == PARM || decl_context == CATCHPARM)
9933           && (storage_class == sc_register
9934               || storage_class == sc_auto))
9935         ;
9936       else if (typedef_p)
9937         ;
9938       else if (decl_context == FIELD
9939                /* C++ allows static class elements.  */
9940                && storage_class == sc_static)
9941         /* C++ also allows inlines and signed and unsigned elements,
9942            but in those cases we don't come in here.  */
9943         ;
9944       else
9945         {
9946           if (decl_context == FIELD)
9947             error ("storage class specified for %qs", name);
9948           else
9949             {
9950               if (decl_context == PARM || decl_context == CATCHPARM)
9951                 error ("storage class specified for parameter %qs", name);
9952               else
9953                 error ("storage class specified for typename");
9954             }
9955           if (storage_class == sc_register
9956               || storage_class == sc_auto
9957               || storage_class == sc_extern
9958               || thread_p)
9959             storage_class = sc_none;
9960         }
9961     }
9962   else if (storage_class == sc_extern && funcdef_flag
9963            && ! toplevel_bindings_p ())
9964     error ("nested function %qs declared %<extern%>", name);
9965   else if (toplevel_bindings_p ())
9966     {
9967       if (storage_class == sc_auto)
9968         error ("top-level declaration of %qs specifies %<auto%>", name);
9969     }
9970   else if (thread_p
9971            && storage_class != sc_extern
9972            && storage_class != sc_static)
9973     {
9974       if (declspecs->gnu_thread_keyword_p)
9975         pedwarn (input_location, 0, "function-scope %qs implicitly auto and "
9976                  "declared %<__thread%>", name);
9977
9978       /* When thread_local is applied to a variable of block scope the
9979          storage-class-specifier static is implied if it does not appear
9980          explicitly.  */
9981       storage_class = declspecs->storage_class = sc_static;
9982       staticp = 1;
9983     }
9984
9985   if (storage_class && friendp)
9986     {
9987       error ("storage class specifiers invalid in friend function declarations");
9988       storage_class = sc_none;
9989       staticp = 0;
9990     }
9991
9992   if (!id_declarator)
9993     unqualified_id = NULL_TREE;
9994   else
9995     {
9996       unqualified_id = id_declarator->u.id.unqualified_name;
9997       switch (TREE_CODE (unqualified_id))
9998         {
9999         case BIT_NOT_EXPR:
10000           unqualified_id = TREE_OPERAND (unqualified_id, 0);
10001           if (TYPE_P (unqualified_id))
10002             unqualified_id = constructor_name (unqualified_id);
10003           break;
10004
10005         case IDENTIFIER_NODE:
10006         case TEMPLATE_ID_EXPR:
10007           break;
10008
10009         default:
10010           gcc_unreachable ();
10011         }
10012     }
10013
10014   if (declspecs->std_attributes)
10015     {
10016       /* Apply the c++11 attributes to the type preceding them.  */
10017       input_location = declspecs->locations[ds_std_attribute];
10018       decl_attributes (&type, declspecs->std_attributes, 0);
10019       input_location = saved_loc;
10020     }
10021
10022   /* Determine the type of the entity declared by recurring on the
10023      declarator.  */
10024   for (; declarator; declarator = declarator->declarator)
10025     {
10026       const cp_declarator *inner_declarator;
10027       tree attrs;
10028
10029       if (type == error_mark_node)
10030         return error_mark_node;
10031
10032       attrs = declarator->attributes;
10033       if (attrs)
10034         {
10035           int attr_flags;
10036
10037           attr_flags = 0;
10038           if (declarator == NULL || declarator->kind == cdk_id)
10039             attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
10040           if (declarator->kind == cdk_function)
10041             attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
10042           if (declarator->kind == cdk_array)
10043             attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
10044           returned_attrs = decl_attributes (&type,
10045                                             chainon (returned_attrs, attrs),
10046                                             attr_flags);
10047         }
10048
10049       if (declarator->kind == cdk_id)
10050         break;
10051
10052       inner_declarator = declarator->declarator;
10053
10054       switch (declarator->kind)
10055         {
10056         case cdk_array:
10057           type = create_array_type_for_decl (dname, type,
10058                                              declarator->u.array.bounds);
10059           if (!valid_array_size_p (input_location, type, dname))
10060             type = error_mark_node;
10061
10062           if (declarator->std_attributes)
10063             /* [dcl.array]/1:
10064
10065                The optional attribute-specifier-seq appertains to the
10066                array.  */
10067             returned_attrs = chainon (returned_attrs,
10068                                       declarator->std_attributes);
10069           break;
10070
10071         case cdk_function:
10072           {
10073             tree arg_types;
10074             int funcdecl_p;
10075
10076             /* Declaring a function type.
10077                Make sure we have a valid type for the function to return.  */
10078
10079             if (type_quals != TYPE_UNQUALIFIED)
10080               {
10081                 if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
10082                   warning (OPT_Wignored_qualifiers,
10083                            "type qualifiers ignored on function return type");
10084                 /* We now know that the TYPE_QUALS don't apply to the
10085                    decl, but to its return type.  */
10086                 type_quals = TYPE_UNQUALIFIED;
10087               }
10088             errmsg = targetm.invalid_return_type (type);
10089             if (errmsg)
10090               {
10091                 error (errmsg);
10092                 type = integer_type_node;
10093               }
10094
10095             /* Error about some types functions can't return.  */
10096
10097             if (TREE_CODE (type) == FUNCTION_TYPE)
10098               {
10099                 error ("%qs declared as function returning a function", name);
10100                 return error_mark_node;
10101               }
10102             if (TREE_CODE (type) == ARRAY_TYPE)
10103               {
10104                 error ("%qs declared as function returning an array", name);
10105                 return error_mark_node;
10106               }
10107
10108             input_location = declspecs->locations[ds_type_spec];
10109             abstract_virtuals_error (ACU_RETURN, type);
10110             input_location = saved_loc;
10111
10112             /* Pick up type qualifiers which should be applied to `this'.  */
10113             memfn_quals = declarator->u.function.qualifiers;
10114             /* Pick up virt-specifiers.  */
10115             virt_specifiers = declarator->u.function.virt_specifiers;
10116             /* And ref-qualifier, too */
10117             rqual = declarator->u.function.ref_qualifier;
10118             /* And tx-qualifier.  */
10119             tree tx_qual = declarator->u.function.tx_qualifier;
10120             /* Pick up the exception specifications.  */
10121             raises = declarator->u.function.exception_specification;
10122             /* If the exception-specification is ill-formed, let's pretend
10123                there wasn't one.  */
10124             if (raises == error_mark_node)
10125               raises = NULL_TREE;
10126
10127             if (reqs)
10128               error_at (location_of (reqs), "requires-clause on return type");
10129             reqs = declarator->u.function.requires_clause;
10130
10131             /* Say it's a definition only for the CALL_EXPR
10132                closest to the identifier.  */
10133             funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
10134
10135             /* Handle a late-specified return type.  */
10136             if (funcdecl_p)
10137               {
10138                 if (type_uses_auto (type))
10139                   {
10140                     if (!declarator->u.function.late_return_type)
10141                       {
10142                         if (current_class_type
10143                             && LAMBDA_TYPE_P (current_class_type))
10144                           /* OK for C++11 lambdas.  */;
10145                         else if (cxx_dialect < cxx14)
10146                           {
10147                             error ("%qs function uses "
10148                                    "%<auto%> type specifier without trailing "
10149                                    "return type", name);
10150                             inform (input_location, "deduced return type "
10151                                     "only available with -std=c++14 or "
10152                                     "-std=gnu++14");
10153                           }
10154                         else if (virtualp)
10155                           {
10156                             error ("virtual function cannot "
10157                                    "have deduced return type");
10158                             virtualp = false;
10159                           }
10160                       }
10161                     else if (!is_auto (type) && sfk != sfk_conversion)
10162                       {
10163                         error ("%qs function with trailing return type has"
10164                                " %qT as its type rather than plain %<auto%>",
10165                                name, type);
10166                         return error_mark_node;
10167                       }
10168                   }
10169                 else if (declarator->u.function.late_return_type
10170                          && sfk != sfk_conversion)
10171                   {
10172                     if (cxx_dialect < cxx11)
10173                       /* Not using maybe_warn_cpp0x because this should
10174                          always be an error.  */
10175                       error ("trailing return type only available with "
10176                              "-std=c++11 or -std=gnu++11");
10177                     else
10178                       error ("%qs function with trailing return type not "
10179                              "declared with %<auto%> type specifier", name);
10180                     return error_mark_node;
10181                   }
10182               }
10183             type = splice_late_return_type
10184               (type, declarator->u.function.late_return_type);
10185             if (type == error_mark_node)
10186               return error_mark_node;
10187
10188             if (declarator->u.function.late_return_type)
10189               late_return_type_p = true;
10190
10191             if (ctype == NULL_TREE
10192                 && decl_context == FIELD
10193                 && funcdecl_p
10194                 && friendp == 0)
10195               ctype = current_class_type;
10196
10197             if (ctype && (sfk == sfk_constructor
10198                           || sfk == sfk_destructor))
10199               {
10200                 /* We are within a class's scope. If our declarator name
10201                    is the same as the class name, and we are defining
10202                    a function, then it is a constructor/destructor, and
10203                    therefore returns a void type.  */
10204
10205                 /* ISO C++ 12.4/2.  A destructor may not be declared
10206                    const or volatile.  A destructor may not be static.
10207                    A destructor may not be declared with ref-qualifier.
10208
10209                    ISO C++ 12.1.  A constructor may not be declared
10210                    const or volatile.  A constructor may not be
10211                    virtual.  A constructor may not be static.
10212                    A constructor may not be declared with ref-qualifier. */
10213                 if (staticp == 2)
10214                   error ((flags == DTOR_FLAG)
10215                          ? G_("destructor cannot be static member function")
10216                          : G_("constructor cannot be static member function"));
10217                 if (memfn_quals)
10218                   {
10219                     error ((flags == DTOR_FLAG)
10220                            ? G_("destructors may not be cv-qualified")
10221                            : G_("constructors may not be cv-qualified"));
10222                     memfn_quals = TYPE_UNQUALIFIED;
10223                   }
10224
10225                 if (rqual)
10226                   {
10227                     maybe_warn_cpp0x (CPP0X_REF_QUALIFIER);
10228                     error ((flags == DTOR_FLAG)
10229                            ? "destructors may not be ref-qualified"
10230                            : "constructors may not be ref-qualified");
10231                     rqual = REF_QUAL_NONE;
10232                   }
10233
10234                 if (decl_context == FIELD
10235                     && !member_function_or_else (ctype,
10236                                                  current_class_type,
10237                                                  flags))
10238                   return error_mark_node;
10239
10240                 if (flags != DTOR_FLAG)
10241                   {
10242                     /* It's a constructor.  */
10243                     if (explicitp == 1)
10244                       explicitp = 2;
10245                     if (virtualp)
10246                       {
10247                         permerror (input_location,
10248                                    "constructors cannot be declared %<virtual%>");
10249                         virtualp = 0;
10250                       }
10251                     if (decl_context == FIELD
10252                         && sfk != sfk_constructor)
10253                       return error_mark_node;
10254                   }
10255                 if (decl_context == FIELD)
10256                   staticp = 0;
10257               }
10258             else if (friendp)
10259               {
10260                 if (virtualp)
10261                   {
10262                     /* Cannot be both friend and virtual.  */
10263                     error ("virtual functions cannot be friends");
10264                     friendp = 0;
10265                   }
10266                 if (decl_context == NORMAL)
10267                   error ("friend declaration not in class definition");
10268                 if (current_function_decl && funcdef_flag)
10269                   error ("can%'t define friend function %qs in a local "
10270                          "class definition",
10271                          name);
10272               }
10273             else if (ctype && sfk == sfk_conversion)
10274               {
10275                 if (explicitp == 1)
10276                   {
10277                     maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION);
10278                     explicitp = 2;
10279                   }
10280                 if (late_return_type_p)
10281                   error ("a conversion function cannot have a trailing return type");
10282               }
10283
10284             arg_types = grokparms (declarator->u.function.parameters,
10285                                    &parms);
10286
10287             if (inner_declarator
10288                 && inner_declarator->kind == cdk_id
10289                 && inner_declarator->u.id.sfk == sfk_destructor
10290                 && arg_types != void_list_node)
10291               {
10292                 error ("destructors may not have parameters");
10293                 arg_types = void_list_node;
10294                 parms = NULL_TREE;
10295               }
10296
10297             type = build_function_type (type, arg_types);
10298
10299             tree attrs = declarator->std_attributes;
10300             if (tx_qual)
10301               {
10302                 tree att = build_tree_list (tx_qual, NULL_TREE);
10303                 /* transaction_safe applies to the type, but
10304                    transaction_safe_dynamic applies to the function.  */
10305                 if (is_attribute_p ("transaction_safe", tx_qual))
10306                   attrs = chainon (attrs, att);
10307                 else
10308                   returned_attrs = chainon (returned_attrs, att);
10309               }
10310             if (attrs)
10311               /* [dcl.fct]/2:
10312
10313                  The optional attribute-specifier-seq appertains to
10314                  the function type.  */
10315               decl_attributes (&type, attrs, 0);
10316           }
10317           break;
10318
10319         case cdk_pointer:
10320         case cdk_reference:
10321         case cdk_ptrmem:
10322           /* Filter out pointers-to-references and references-to-references.
10323              We can get these if a TYPE_DECL is used.  */
10324
10325           if (TREE_CODE (type) == REFERENCE_TYPE)
10326             {
10327               if (declarator->kind != cdk_reference)
10328                 {
10329                   error ("cannot declare pointer to %q#T", type);
10330                   type = TREE_TYPE (type);
10331                 }
10332
10333               /* In C++0x, we allow reference to reference declarations
10334                  that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
10335                  and template type arguments [14.3.1/4 temp.arg.type]. The
10336                  check for direct reference to reference declarations, which
10337                  are still forbidden, occurs below. Reasoning behind the change
10338                  can be found in DR106, DR540, and the rvalue reference
10339                  proposals. */
10340               else if (cxx_dialect == cxx98)
10341                 {
10342                   error ("cannot declare reference to %q#T", type);
10343                   type = TREE_TYPE (type);
10344                 }
10345             }
10346           else if (VOID_TYPE_P (type))
10347             {
10348               if (declarator->kind == cdk_reference)
10349                 error ("cannot declare reference to %q#T", type);
10350               else if (declarator->kind == cdk_ptrmem)
10351                 error ("cannot declare pointer to %q#T member", type);
10352             }
10353
10354           /* We now know that the TYPE_QUALS don't apply to the decl,
10355              but to the target of the pointer.  */
10356           type_quals = TYPE_UNQUALIFIED;
10357
10358           /* This code used to handle METHOD_TYPE, but I don't think it's
10359              possible to get it here anymore.  */
10360           gcc_assert (TREE_CODE (type) != METHOD_TYPE);
10361           if (declarator->kind == cdk_ptrmem
10362               && TREE_CODE (type) == FUNCTION_TYPE)
10363             {
10364               memfn_quals |= type_memfn_quals (type);
10365               type = build_memfn_type (type,
10366                                        declarator->u.pointer.class_type,
10367                                        memfn_quals,
10368                                        rqual);
10369               if (type == error_mark_node)
10370                 return error_mark_node;
10371
10372               rqual = REF_QUAL_NONE;
10373               memfn_quals = TYPE_UNQUALIFIED;
10374             }
10375
10376           if (TREE_CODE (type) == FUNCTION_TYPE
10377               && (type_memfn_quals (type) != TYPE_UNQUALIFIED
10378                   || type_memfn_rqual (type) != REF_QUAL_NONE))
10379             error (declarator->kind == cdk_reference
10380                    ? G_("cannot declare reference to qualified function type %qT")
10381                    : G_("cannot declare pointer to qualified function type %qT"),
10382                    type);
10383
10384           /* When the pointed-to type involves components of variable size,
10385              care must be taken to ensure that the size evaluation code is
10386              emitted early enough to dominate all the possible later uses
10387              and late enough for the variables on which it depends to have
10388              been assigned.
10389
10390              This is expected to happen automatically when the pointed-to
10391              type has a name/declaration of it's own, but special attention
10392              is required if the type is anonymous.
10393
10394              We handle the NORMAL and FIELD contexts here by inserting a
10395              dummy statement that just evaluates the size at a safe point
10396              and ensures it is not deferred until e.g. within a deeper
10397              conditional context (c++/43555).
10398
10399              We expect nothing to be needed here for PARM or TYPENAME.
10400              Evaluating the size at this point for TYPENAME would
10401              actually be incorrect, as we might be in the middle of an
10402              expression with side effects on the pointed-to type size
10403              "arguments" prior to the pointer declaration point and the
10404              size evaluation could end up prior to the side effects.  */
10405
10406           if (!TYPE_NAME (type)
10407               && (decl_context == NORMAL || decl_context == FIELD)
10408               && at_function_scope_p ()
10409               && variably_modified_type_p (type, NULL_TREE))
10410             /* Force evaluation of the SAVE_EXPR.  */
10411             finish_expr_stmt (TYPE_SIZE (type));
10412
10413           if (declarator->kind == cdk_reference)
10414             {
10415               /* In C++0x, the type we are creating a reference to might be
10416                  a typedef which is itself a reference type. In that case,
10417                  we follow the reference collapsing rules in
10418                  [7.1.3/8 dcl.typedef] to create the final reference type:
10419
10420                  "If a typedef TD names a type that is a reference to a type
10421                  T, an attempt to create the type 'lvalue reference to cv TD'
10422                  creates the type 'lvalue reference to T,' while an attempt
10423                  to create the type "rvalue reference to cv TD' creates the
10424                  type TD."
10425               */
10426               if (VOID_TYPE_P (type))
10427                 /* We already gave an error.  */;
10428               else if (TREE_CODE (type) == REFERENCE_TYPE)
10429                 {
10430                   if (declarator->u.reference.rvalue_ref)
10431                     /* Leave type alone.  */;
10432                   else
10433                     type = cp_build_reference_type (TREE_TYPE (type), false);
10434                 }
10435               else
10436                 type = cp_build_reference_type
10437                   (type, declarator->u.reference.rvalue_ref);
10438
10439               /* In C++0x, we need this check for direct reference to
10440                  reference declarations, which are forbidden by
10441                  [8.3.2/5 dcl.ref]. Reference to reference declarations
10442                  are only allowed indirectly through typedefs and template
10443                  type arguments. Example:
10444
10445                    void foo(int & &);      // invalid ref-to-ref decl
10446
10447                    typedef int & int_ref;
10448                    void foo(int_ref &);    // valid ref-to-ref decl
10449               */
10450               if (inner_declarator && inner_declarator->kind == cdk_reference)
10451                 error ("cannot declare reference to %q#T, which is not "
10452                        "a typedef or a template type argument", type);
10453             }
10454           else if (TREE_CODE (type) == METHOD_TYPE)
10455             type = build_ptrmemfunc_type (build_pointer_type (type));
10456           else if (declarator->kind == cdk_ptrmem)
10457             {
10458               gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
10459                           != NAMESPACE_DECL);
10460               if (declarator->u.pointer.class_type == error_mark_node)
10461                 /* We will already have complained.  */
10462                 type = error_mark_node;
10463               else
10464                 type = build_ptrmem_type (declarator->u.pointer.class_type,
10465                                           type);
10466             }
10467           else
10468             type = build_pointer_type (type);
10469
10470           /* Process a list of type modifier keywords (such as
10471              const or volatile) that were given inside the `*' or `&'.  */
10472
10473           if (declarator->u.pointer.qualifiers)
10474             {
10475               type
10476                 = cp_build_qualified_type (type,
10477                                            declarator->u.pointer.qualifiers);
10478               type_quals = cp_type_quals (type);
10479             }
10480
10481           /* Apply C++11 attributes to the pointer, and not to the
10482              type pointed to.  This is unlike what is done for GNU
10483              attributes above.  It is to comply with [dcl.ptr]/1:
10484
10485                  [the optional attribute-specifier-seq (7.6.1) appertains
10486                   to the pointer and not to the object pointed to].  */
10487           if (declarator->std_attributes)
10488             decl_attributes (&type, declarator->std_attributes,
10489                              0);
10490
10491           ctype = NULL_TREE;
10492           break;
10493
10494         case cdk_error:
10495           break;
10496
10497         default:
10498           gcc_unreachable ();
10499         }
10500     }
10501
10502   /* A `constexpr' specifier used in an object declaration declares
10503      the object as `const'.  */
10504   if (constexpr_p && innermost_code != cdk_function)
10505     {
10506       /* DR1688 says that a `constexpr' specifier in combination with
10507          `volatile' is valid.  */
10508
10509       if (TREE_CODE (type) != REFERENCE_TYPE)
10510         {
10511           type_quals |= TYPE_QUAL_CONST;
10512           type = cp_build_qualified_type (type, type_quals);
10513         }
10514     }
10515
10516   if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
10517       && TREE_CODE (type) != FUNCTION_TYPE
10518       && TREE_CODE (type) != METHOD_TYPE
10519       && !variable_template_p (TREE_OPERAND (unqualified_id, 0)))
10520     {
10521       error ("template-id %qD used as a declarator",
10522              unqualified_id);
10523       unqualified_id = dname;
10524     }
10525
10526   /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
10527      qualified with a class-name, turn it into a METHOD_TYPE, unless
10528      we know that the function is static.  We take advantage of this
10529      opportunity to do other processing that pertains to entities
10530      explicitly declared to be class members.  Note that if DECLARATOR
10531      is non-NULL, we know it is a cdk_id declarator; otherwise, we
10532      would not have exited the loop above.  */
10533   if (declarator
10534       && declarator->u.id.qualifying_scope
10535       && MAYBE_CLASS_TYPE_P (declarator->u.id.qualifying_scope))
10536     {
10537       ctype = declarator->u.id.qualifying_scope;
10538       ctype = TYPE_MAIN_VARIANT (ctype);
10539       template_count = num_template_headers_for_class (ctype);
10540
10541       if (ctype == current_class_type)
10542         {
10543           if (friendp)
10544             {
10545               permerror (input_location, "member functions are implicitly friends of their class");
10546               friendp = 0;
10547             }
10548           else
10549             permerror (declarator->id_loc, 
10550                           "extra qualification %<%T::%> on member %qs",
10551                           ctype, name);
10552         }
10553       else if (/* If the qualifying type is already complete, then we
10554                   can skip the following checks.  */
10555                !COMPLETE_TYPE_P (ctype)
10556                && (/* If the function is being defined, then
10557                       qualifying type must certainly be complete.  */
10558                    funcdef_flag
10559                    /* A friend declaration of "T::f" is OK, even if
10560                       "T" is a template parameter.  But, if this
10561                       function is not a friend, the qualifying type
10562                       must be a class.  */
10563                    || (!friendp && !CLASS_TYPE_P (ctype))
10564                    /* For a declaration, the type need not be
10565                       complete, if either it is dependent (since there
10566                       is no meaningful definition of complete in that
10567                       case) or the qualifying class is currently being
10568                       defined.  */
10569                    || !(dependent_type_p (ctype)
10570                         || currently_open_class (ctype)))
10571                /* Check that the qualifying type is complete.  */
10572                && !complete_type_or_else (ctype, NULL_TREE))
10573         return error_mark_node;
10574       else if (TREE_CODE (type) == FUNCTION_TYPE)
10575         {
10576           if (current_class_type
10577               && (!friendp || funcdef_flag))
10578             {
10579               error (funcdef_flag
10580                      ? G_("cannot define member function %<%T::%s%> "
10581                           "within %<%T%>")
10582                      : G_("cannot declare member function %<%T::%s%> "
10583                           "within %<%T%>"),
10584                      ctype, name, current_class_type);
10585               return error_mark_node;
10586             }
10587         }
10588       else if (typedef_p && current_class_type)
10589         {
10590           error ("cannot declare member %<%T::%s%> within %qT",
10591                  ctype, name, current_class_type);
10592           return error_mark_node;
10593         }
10594     }
10595
10596   if (ctype == NULL_TREE && decl_context == FIELD && friendp == 0)
10597     ctype = current_class_type;
10598
10599   /* Now TYPE has the actual type.  */
10600
10601   if (returned_attrs)
10602     {
10603       if (attrlist)
10604         *attrlist = chainon (returned_attrs, *attrlist);
10605       else
10606         attrlist = &returned_attrs;
10607     }
10608
10609   if (declarator
10610       && declarator->kind == cdk_id
10611       && declarator->std_attributes)
10612     /* [dcl.meaning]/1: The optional attribute-specifier-seq following
10613        a declarator-id appertains to the entity that is declared.  */
10614     *attrlist = chainon (*attrlist, declarator->std_attributes);
10615
10616   /* Handle parameter packs. */
10617   if (parameter_pack_p)
10618     {
10619       if (decl_context == PARM)
10620         /* Turn the type into a pack expansion.*/
10621         type = make_pack_expansion (type);
10622       else
10623         error ("non-parameter %qs cannot be a parameter pack", name);
10624     }
10625
10626   if ((decl_context == FIELD || decl_context == PARM)
10627       && !processing_template_decl
10628       && variably_modified_type_p (type, NULL_TREE))
10629     {
10630       if (decl_context == FIELD)
10631         error ("data member may not have variably modified type %qT", type);
10632       else
10633         error ("parameter may not have variably modified type %qT", type);
10634       type = error_mark_node;
10635     }
10636
10637   if (explicitp == 1 || (explicitp && friendp))
10638     {
10639       /* [dcl.fct.spec] (C++11) The explicit specifier shall be used only
10640          in the declaration of a constructor or conversion function within
10641          a class definition.  */
10642       if (!current_class_type)
10643         error_at (declspecs->locations[ds_explicit],
10644                   "%<explicit%> outside class declaration");
10645       else if (friendp)
10646         error_at (declspecs->locations[ds_explicit],
10647                   "%<explicit%> in friend declaration");
10648       else
10649         error_at (declspecs->locations[ds_explicit],
10650                   "only declarations of constructors and conversion operators "
10651                   "can be %<explicit%>");
10652       explicitp = 0;
10653     }
10654
10655   if (storage_class == sc_mutable)
10656     {
10657       if (decl_context != FIELD || friendp)
10658         {
10659           error ("non-member %qs cannot be declared %<mutable%>", name);
10660           storage_class = sc_none;
10661         }
10662       else if (decl_context == TYPENAME || typedef_p)
10663         {
10664           error ("non-object member %qs cannot be declared %<mutable%>", name);
10665           storage_class = sc_none;
10666         }
10667       else if (TREE_CODE (type) == FUNCTION_TYPE
10668                || TREE_CODE (type) == METHOD_TYPE)
10669         {
10670           error ("function %qs cannot be declared %<mutable%>", name);
10671           storage_class = sc_none;
10672         }
10673       else if (staticp)
10674         {
10675           error ("static %qs cannot be declared %<mutable%>", name);
10676           storage_class = sc_none;
10677         }
10678       else if (type_quals & TYPE_QUAL_CONST)
10679         {
10680           error ("const %qs cannot be declared %<mutable%>", name);
10681           storage_class = sc_none;
10682         }
10683       else if (TREE_CODE (type) == REFERENCE_TYPE)
10684         {
10685           permerror (input_location, "reference %qs cannot be declared "
10686                      "%<mutable%>", name);
10687           storage_class = sc_none;
10688         }
10689     }
10690
10691   /* If this is declaring a typedef name, return a TYPE_DECL.  */
10692   if (typedef_p && decl_context != TYPENAME)
10693     {
10694       tree decl;
10695
10696       /* Note that the grammar rejects storage classes
10697          in typenames, fields or parameters.  */
10698       if (current_lang_name == lang_name_java)
10699         TYPE_FOR_JAVA (type) = 1;
10700
10701       /* This declaration:
10702
10703            typedef void f(int) const;
10704
10705          declares a function type which is not a member of any
10706          particular class, but which is cv-qualified; for
10707          example "f S::*" declares a pointer to a const-qualified
10708          member function of S.  We record the cv-qualification in the
10709          function type.  */
10710       if ((rqual || memfn_quals) && TREE_CODE (type) == FUNCTION_TYPE)
10711         {
10712           type = apply_memfn_quals (type, memfn_quals, rqual);
10713           
10714           /* We have now dealt with these qualifiers.  */
10715           memfn_quals = TYPE_UNQUALIFIED;
10716           rqual = REF_QUAL_NONE;
10717         }
10718
10719       if (type_uses_auto (type))
10720         {
10721           error ("typedef declared %<auto%>");
10722           type = error_mark_node;
10723         }
10724
10725       if (reqs)
10726         error_at (location_of (reqs), "requires-clause on typedef");
10727
10728       if (decl_context == FIELD)
10729         decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
10730       else
10731         decl = build_decl (input_location, TYPE_DECL, unqualified_id, type);
10732       if (id_declarator && declarator->u.id.qualifying_scope) {
10733         error_at (DECL_SOURCE_LOCATION (decl), 
10734                   "typedef name may not be a nested-name-specifier");
10735         TREE_TYPE (decl) = error_mark_node;
10736       }
10737
10738       if (decl_context != FIELD)
10739         {
10740           if (!current_function_decl)
10741             DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
10742           else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
10743                    || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
10744                        (current_function_decl)))
10745             /* The TYPE_DECL is "abstract" because there will be
10746                clones of this constructor/destructor, and there will
10747                be copies of this TYPE_DECL generated in those
10748                clones.  The decloning optimization (for space) may
10749                revert this subsequently if it determines that
10750                the clones should share a common implementation.  */
10751             DECL_ABSTRACT_P (decl) = true;
10752         }
10753       else if (current_class_type
10754                && constructor_name_p (unqualified_id, current_class_type))
10755         permerror (input_location, "ISO C++ forbids nested type %qD with same name "
10756                    "as enclosing class",
10757                    unqualified_id);
10758
10759       /* If the user declares "typedef struct {...} foo" then the
10760          struct will have an anonymous name.  Fill that name in now.
10761          Nothing can refer to it, so nothing needs know about the name
10762          change.  */
10763       if (type != error_mark_node
10764           && unqualified_id
10765           && TYPE_NAME (type)
10766           && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
10767           && TYPE_ANONYMOUS_P (type)
10768           && declspecs->type_definition_p
10769           && attributes_naming_typedef_ok (*attrlist)
10770           && cp_type_quals (type) == TYPE_UNQUALIFIED)
10771         {
10772           tree t;
10773
10774           /* Replace the anonymous name with the real name everywhere.  */
10775           for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
10776             {
10777               if (anon_aggrname_p (TYPE_IDENTIFIER (t)))
10778                 /* We do not rename the debug info representing the
10779                    anonymous tagged type because the standard says in
10780                    [dcl.typedef] that the naming applies only for
10781                    linkage purposes.  */
10782                 /*debug_hooks->set_name (t, decl);*/
10783                 TYPE_NAME (t) = decl;
10784             }
10785
10786           if (TYPE_LANG_SPECIFIC (type))
10787             TYPE_WAS_ANONYMOUS (type) = 1;
10788
10789           /* If this is a typedef within a template class, the nested
10790              type is a (non-primary) template.  The name for the
10791              template needs updating as well.  */
10792           if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
10793             DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
10794               = TYPE_IDENTIFIER (type);
10795
10796           /* Adjust linkage now that we aren't anonymous anymore.  */
10797           reset_type_linkage (type);
10798
10799           /* FIXME remangle member functions; member functions of a
10800              type with external linkage have external linkage.  */
10801         }
10802
10803       if (signed_p
10804           || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
10805         C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
10806
10807       bad_specifiers (decl, BSP_TYPE, virtualp,
10808                       memfn_quals != TYPE_UNQUALIFIED,
10809                       inlinep, friendp, raises != NULL_TREE);
10810
10811       if (decl_spec_seq_has_spec_p (declspecs, ds_alias))
10812         /* Acknowledge that this was written:
10813              `using analias = atype;'.  */
10814         TYPE_DECL_ALIAS_P (decl) = 1;
10815
10816       return decl;
10817     }
10818
10819   /* Detect the case of an array type of unspecified size
10820      which came, as such, direct from a typedef name.
10821      We must copy the type, so that the array's domain can be
10822      individually set by the object's initializer.  */
10823
10824   if (type && typedef_type
10825       && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
10826       && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
10827     type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
10828
10829   /* Detect where we're using a typedef of function type to declare a
10830      function. PARMS will not be set, so we must create it now.  */
10831
10832   if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
10833     {
10834       tree decls = NULL_TREE;
10835       tree args;
10836
10837       for (args = TYPE_ARG_TYPES (type);
10838            args && args != void_list_node;
10839            args = TREE_CHAIN (args))
10840         {
10841           tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
10842
10843           DECL_CHAIN (decl) = decls;
10844           decls = decl;
10845         }
10846
10847       parms = nreverse (decls);
10848
10849       if (decl_context != TYPENAME)
10850         {
10851           /* The qualifiers on the function type become the qualifiers on
10852              the non-static member function. */
10853           memfn_quals |= type_memfn_quals (type);
10854           rqual = type_memfn_rqual (type);
10855           type_quals = TYPE_UNQUALIFIED;
10856         }
10857     }
10858
10859   /* If this is a type name (such as, in a cast or sizeof),
10860      compute the type and return it now.  */
10861
10862   if (decl_context == TYPENAME)
10863     {
10864       /* Note that here we don't care about type_quals.  */
10865
10866       /* Special case: "friend class foo" looks like a TYPENAME context.  */
10867       if (friendp)
10868         {
10869           if (inlinep)
10870             {
10871               error ("%<inline%> specified for friend class declaration");
10872               inlinep = 0;
10873             }
10874
10875           if (!current_aggr)
10876             {
10877               /* Don't allow friend declaration without a class-key.  */
10878               if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
10879                 permerror (input_location, "template parameters cannot be friends");
10880               else if (TREE_CODE (type) == TYPENAME_TYPE)
10881                 permerror (input_location, "friend declaration requires class-key, "
10882                            "i.e. %<friend class %T::%D%>",
10883                            TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
10884               else
10885                 permerror (input_location, "friend declaration requires class-key, "
10886                            "i.e. %<friend %#T%>",
10887                            type);
10888             }
10889
10890           /* Only try to do this stuff if we didn't already give up.  */
10891           if (type != integer_type_node)
10892             {
10893               /* A friendly class?  */
10894               if (current_class_type)
10895                 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
10896                                    /*complain=*/true);
10897               else
10898                 error ("trying to make class %qT a friend of global scope",
10899                        type);
10900
10901               type = void_type_node;
10902             }
10903         }
10904       else if (memfn_quals || rqual)
10905         {
10906           if (ctype == NULL_TREE
10907               && TREE_CODE (type) == METHOD_TYPE)
10908             ctype = TYPE_METHOD_BASETYPE (type);
10909
10910           if (ctype)
10911             type = build_memfn_type (type, ctype, memfn_quals, rqual);
10912           /* Core issue #547: need to allow this in template type args.
10913              Allow it in general in C++11 for alias-declarations.  */
10914           else if ((template_type_arg || cxx_dialect >= cxx11)
10915                    && TREE_CODE (type) == FUNCTION_TYPE)
10916             type = apply_memfn_quals (type, memfn_quals, rqual);
10917           else
10918             error ("invalid qualifiers on non-member function type");
10919         }
10920
10921       if (reqs)
10922         error_at (location_of (reqs), "requires-clause on type-id");
10923
10924       return type;
10925     }
10926   else if (unqualified_id == NULL_TREE && decl_context != PARM
10927            && decl_context != CATCHPARM
10928            && TREE_CODE (type) != UNION_TYPE
10929            && ! bitfield)
10930     {
10931       error ("abstract declarator %qT used as declaration", type);
10932       return error_mark_node;
10933     }
10934
10935   /* Only functions may be declared using an operator-function-id.  */
10936   if (unqualified_id
10937       && IDENTIFIER_OPNAME_P (unqualified_id)
10938       && TREE_CODE (type) != FUNCTION_TYPE
10939       && TREE_CODE (type) != METHOD_TYPE)
10940     {
10941       error ("declaration of %qD as non-function", unqualified_id);
10942       return error_mark_node;
10943     }
10944
10945   if (reqs
10946       && TREE_CODE (type) != FUNCTION_TYPE
10947       && TREE_CODE (type) != METHOD_TYPE)
10948     error_at (location_of (reqs),
10949               "requires-clause on declaration of non-function type %qT",
10950               type);
10951
10952   /* We don't check parameter types here because we can emit a better
10953      error message later.  */
10954   if (decl_context != PARM)
10955     {
10956       type = check_var_type (unqualified_id, type);
10957       if (type == error_mark_node)
10958         return error_mark_node;
10959     }
10960
10961   /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
10962      or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE.  */
10963
10964   if (decl_context == PARM || decl_context == CATCHPARM)
10965     {
10966       if (ctype || in_namespace)
10967         error ("cannot use %<::%> in parameter declaration");
10968
10969       if (type_uses_auto (type))
10970         {
10971           if (cxx_dialect >= cxx14)
10972             error ("%<auto%> parameter not permitted in this context");
10973           else
10974             error ("parameter declared %<auto%>");
10975           type = error_mark_node;
10976         }
10977
10978       /* A parameter declared as an array of T is really a pointer to T.
10979          One declared as a function is really a pointer to a function.
10980          One declared as a member is really a pointer to member.  */
10981
10982       if (TREE_CODE (type) == ARRAY_TYPE)
10983         {
10984           /* Transfer const-ness of array into that of type pointed to.  */
10985           type = build_pointer_type (TREE_TYPE (type));
10986           type_quals = TYPE_UNQUALIFIED;
10987           array_parameter_p = true;
10988         }
10989       else if (TREE_CODE (type) == FUNCTION_TYPE)
10990         type = build_pointer_type (type);
10991     }
10992
10993   if (ctype && TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
10994       && !NEW_DELETE_OPNAME_P (unqualified_id))
10995     {
10996       cp_cv_quals real_quals = memfn_quals;
10997       if (cxx_dialect < cxx14 && constexpr_p
10998           && sfk != sfk_constructor && sfk != sfk_destructor)
10999         real_quals |= TYPE_QUAL_CONST;
11000       type = build_memfn_type (type, ctype, real_quals, rqual);
11001     }
11002
11003   {
11004     tree decl = NULL_TREE;
11005
11006     if (decl_context == PARM)
11007       {
11008         decl = cp_build_parm_decl (unqualified_id, type);
11009         DECL_ARRAY_PARAMETER_P (decl) = array_parameter_p;
11010
11011         bad_specifiers (decl, BSP_PARM, virtualp,
11012                         memfn_quals != TYPE_UNQUALIFIED,
11013                         inlinep, friendp, raises != NULL_TREE);
11014       }
11015     else if (decl_context == FIELD)
11016       {
11017         if (!staticp && !friendp && TREE_CODE (type) != METHOD_TYPE
11018             && type_uses_auto (type))
11019           {
11020             error ("non-static data member declared %<auto%>");
11021             type = error_mark_node;
11022           }
11023
11024         /* The C99 flexible array extension.  */
11025         if (!staticp && TREE_CODE (type) == ARRAY_TYPE
11026             && TYPE_DOMAIN (type) == NULL_TREE)
11027           {
11028             if (ctype
11029                 && (TREE_CODE (ctype) == UNION_TYPE
11030                     || TREE_CODE (ctype) == QUAL_UNION_TYPE))
11031               {
11032                 error ("flexible array member in union");
11033                 type = error_mark_node;
11034               }
11035             else 
11036               {
11037                 /* Flexible array member has a null domain.  */
11038                 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
11039               }
11040           }
11041
11042         if (type == error_mark_node)
11043           {
11044             /* Happens when declaring arrays of sizes which
11045                are error_mark_node, for example.  */
11046             decl = NULL_TREE;
11047           }
11048         else if (in_namespace && !friendp)
11049           {
11050             /* Something like struct S { int N::j; };  */
11051             error ("invalid use of %<::%>");
11052             return error_mark_node;
11053           }
11054         else if (TREE_CODE (type) == FUNCTION_TYPE
11055                  || TREE_CODE (type) == METHOD_TYPE)
11056           {
11057             int publicp = 0;
11058             tree function_context;
11059
11060             if (friendp == 0)
11061               {
11062                 /* This should never happen in pure C++ (the check
11063                    could be an assert).  It could happen in
11064                    Objective-C++ if someone writes invalid code that
11065                    uses a function declaration for an instance
11066                    variable or property (instance variables and
11067                    properties are parsed as FIELD_DECLs, but they are
11068                    part of an Objective-C class, not a C++ class).
11069                    That code is invalid and is caught by this
11070                    check.  */
11071                 if (!ctype)
11072                   {
11073                     error ("declaration of function %qD in invalid context",
11074                            unqualified_id);
11075                     return error_mark_node;
11076                   }
11077
11078                 /* ``A union may [ ... ] not [ have ] virtual functions.''
11079                    ARM 9.5 */
11080                 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
11081                   {
11082                     error ("function %qD declared %<virtual%> inside a union",
11083                            unqualified_id);
11084                     return error_mark_node;
11085                   }
11086
11087                 if (NEW_DELETE_OPNAME_P (unqualified_id))
11088                   {
11089                     if (virtualp)
11090                       {
11091                         error ("%qD cannot be declared %<virtual%>, since it "
11092                                "is always static",
11093                                unqualified_id);
11094                         virtualp = 0;
11095                       }
11096                   }
11097               }
11098
11099             /* Check that the name used for a destructor makes sense.  */
11100             if (sfk == sfk_destructor)
11101               {
11102                 tree uqname = id_declarator->u.id.unqualified_name;
11103
11104                 if (!ctype)
11105                   {
11106                     gcc_assert (friendp);
11107                     error ("expected qualified name in friend declaration "
11108                            "for destructor %qD", uqname);
11109                     return error_mark_node;
11110                   }
11111
11112                 if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
11113                   {
11114                     error ("declaration of %qD as member of %qT",
11115                            uqname, ctype);
11116                     return error_mark_node;
11117                   }
11118                 if (concept_p)
11119                   {
11120                     error ("a destructor cannot be %<concept%>");
11121                     return error_mark_node;
11122                   }
11123                 if (constexpr_p)
11124                   {
11125                     error ("a destructor cannot be %<constexpr%>");
11126                     return error_mark_node;
11127                   }
11128               }
11129             else if (sfk == sfk_constructor && friendp && !ctype)
11130               {
11131                 error ("expected qualified name in friend declaration "
11132                        "for constructor %qD",
11133                        id_declarator->u.id.unqualified_name);
11134                 return error_mark_node;
11135               }
11136             if (sfk == sfk_constructor)
11137               if (concept_p)
11138                 {
11139                   error ("a constructor cannot be %<concept%>");
11140                   return error_mark_node;
11141                 }
11142             if (concept_p)
11143               {
11144                 error ("a concept cannot be a member function");
11145                 concept_p = false;
11146               }
11147
11148             if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
11149               {
11150                 tree tmpl = TREE_OPERAND (unqualified_id, 0);
11151                 if (variable_template_p (tmpl))
11152                   {
11153                     error ("specialization of variable template %qD "
11154                            "declared as function", tmpl);
11155                     inform (DECL_SOURCE_LOCATION (tmpl),
11156                             "variable template declared here");
11157                     return error_mark_node;
11158                   }
11159               }
11160
11161             /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node.  */
11162             function_context = (ctype != NULL_TREE) ?
11163               decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
11164             publicp = (! friendp || ! staticp)
11165               && function_context == NULL_TREE;
11166
11167             if (late_return_type_p)
11168               TYPE_HAS_LATE_RETURN_TYPE (type) = 1;
11169
11170             decl = grokfndecl (ctype, type,
11171                                TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
11172                                ? unqualified_id : dname,
11173                                parms,
11174                                unqualified_id,
11175                                reqs,
11176                                virtualp, flags, memfn_quals, rqual, raises,
11177                                friendp ? -1 : 0, friendp, publicp,
11178                                inlinep | (2 * constexpr_p) | (4 * concept_p),
11179                                initialized == SD_DELETED, sfk,
11180                                funcdef_flag, template_count, in_namespace,
11181                                attrlist, declarator->id_loc);
11182             decl = set_virt_specifiers (decl, virt_specifiers);
11183             if (decl == NULL_TREE)
11184               return error_mark_node;
11185 #if 0
11186             /* This clobbers the attrs stored in `decl' from `attrlist'.  */
11187             /* The decl and setting of decl_attr is also turned off.  */
11188             decl = build_decl_attribute_variant (decl, decl_attr);
11189 #endif
11190
11191             /* [class.conv.ctor]
11192
11193                A constructor declared without the function-specifier
11194                explicit that can be called with a single parameter
11195                specifies a conversion from the type of its first
11196                parameter to the type of its class.  Such a constructor
11197                is called a converting constructor.  */
11198             if (explicitp == 2)
11199               DECL_NONCONVERTING_P (decl) = 1;
11200           }
11201         else if (!staticp && !dependent_type_p (type)
11202                  && !COMPLETE_TYPE_P (complete_type (type))
11203                  && (!complete_or_array_type_p (type)
11204                      || initialized == 0))
11205           {
11206             if (TREE_CODE (type) != ARRAY_TYPE
11207                 || !COMPLETE_TYPE_P (TREE_TYPE (type)))
11208               {
11209                 if (unqualified_id)
11210                   {
11211                     error ("field %qD has incomplete type %qT",
11212                            unqualified_id, type);
11213                     cxx_incomplete_type_inform (strip_array_types (type));
11214                   }
11215                 else
11216                   error ("name %qT has incomplete type", type);
11217
11218                 type = error_mark_node;
11219                 decl = NULL_TREE;
11220               }
11221           }
11222         else
11223           {
11224             if (friendp)
11225               {
11226                 error ("%qE is neither function nor member function; "
11227                        "cannot be declared friend", unqualified_id);
11228                 friendp = 0;
11229               }
11230             decl = NULL_TREE;
11231           }
11232
11233         if (friendp)
11234           {
11235             /* Friends are treated specially.  */
11236             if (ctype == current_class_type)
11237               ;  /* We already issued a permerror.  */
11238             else if (decl && DECL_NAME (decl))
11239               {
11240                 if (template_class_depth (current_class_type) == 0)
11241                   {
11242                     decl = check_explicit_specialization
11243                       (unqualified_id, decl, template_count,
11244                        2 * funcdef_flag + 4);
11245                     if (decl == error_mark_node)
11246                       return error_mark_node;
11247                   }
11248
11249                 decl = do_friend (ctype, unqualified_id, decl,
11250                                   *attrlist, flags,
11251                                   funcdef_flag);
11252                 return decl;
11253               }
11254             else
11255               return error_mark_node;
11256           }
11257
11258         /* Structure field.  It may not be a function, except for C++.  */
11259
11260         if (decl == NULL_TREE)
11261           {
11262             if (staticp)
11263               {
11264                 /* C++ allows static class members.  All other work
11265                    for this is done by grokfield.  */
11266                 decl = build_lang_decl_loc (declarator
11267                                             ? declarator->id_loc
11268                                             : input_location,
11269                                             VAR_DECL, unqualified_id, type);
11270                 set_linkage_for_static_data_member (decl);
11271                 /* Even if there is an in-class initialization, DECL
11272                    is considered undefined until an out-of-class
11273                    definition is provided.  */
11274                 DECL_EXTERNAL (decl) = 1;
11275
11276                 if (thread_p)
11277                   {
11278                     CP_DECL_THREAD_LOCAL_P (decl) = true;
11279                     if (!processing_template_decl)
11280                       set_decl_tls_model (decl, decl_default_tls_model (decl));
11281                     if (declspecs->gnu_thread_keyword_p)
11282                       SET_DECL_GNU_TLS_P (decl);
11283                   }
11284                 if (concept_p)
11285                     error ("static data member %qE declared %<concept%>",
11286                            unqualified_id);
11287                 else if (constexpr_p && !initialized)
11288                   {
11289                     error ("constexpr static data member %qD must have an "
11290                            "initializer", decl);
11291                     constexpr_p = false;
11292                   }
11293               }
11294             else
11295               {
11296                 if (concept_p)
11297                   error ("non-static data member %qE declared %<concept%>",
11298                          unqualified_id);
11299                 else if (constexpr_p)
11300                   {
11301                     error ("non-static data member %qE declared %<constexpr%>",
11302                            unqualified_id);
11303                     constexpr_p = false;
11304                   }
11305                 decl = build_decl (input_location,
11306                                    FIELD_DECL, unqualified_id, type);
11307                 DECL_NONADDRESSABLE_P (decl) = bitfield;
11308                 if (bitfield && !unqualified_id)
11309                   TREE_NO_WARNING (decl) = 1;
11310
11311                 if (storage_class == sc_mutable)
11312                   {
11313                     DECL_MUTABLE_P (decl) = 1;
11314                     storage_class = sc_none;
11315                   }
11316
11317                 if (initialized)
11318                   {
11319                     /* An attempt is being made to initialize a non-static
11320                        member.  This is new in C++11.  */
11321                     maybe_warn_cpp0x (CPP0X_NSDMI);
11322
11323                     /* If this has been parsed with static storage class, but
11324                        errors forced staticp to be cleared, ensure NSDMI is
11325                        not present.  */
11326                     if (declspecs->storage_class == sc_static)
11327                       DECL_INITIAL (decl) = error_mark_node;
11328                   }
11329               }
11330
11331             bad_specifiers (decl, BSP_FIELD, virtualp,
11332                             memfn_quals != TYPE_UNQUALIFIED,
11333                             inlinep, friendp, raises != NULL_TREE);
11334           }
11335       }
11336     else if (TREE_CODE (type) == FUNCTION_TYPE
11337              || TREE_CODE (type) == METHOD_TYPE)
11338       {
11339         tree original_name;
11340         int publicp = 0;
11341
11342         if (!unqualified_id)
11343           return error_mark_node;
11344
11345         if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
11346           original_name = dname;
11347         else
11348           original_name = unqualified_id;
11349
11350         if (storage_class == sc_auto)
11351           error ("storage class %<auto%> invalid for function %qs", name);
11352         else if (storage_class == sc_register)
11353           error ("storage class %<register%> invalid for function %qs", name);
11354         else if (thread_p)
11355           {
11356             if (declspecs->gnu_thread_keyword_p)
11357               error ("storage class %<__thread%> invalid for function %qs",
11358                      name);
11359             else
11360               error ("storage class %<thread_local%> invalid for function %qs",
11361                      name);
11362           }
11363
11364         if (virt_specifiers)
11365           error ("virt-specifiers in %qs not allowed outside a class definition", name);
11366         /* Function declaration not at top level.
11367            Storage classes other than `extern' are not allowed
11368            and `extern' makes no difference.  */
11369         if (! toplevel_bindings_p ()
11370             && (storage_class == sc_static
11371                 || decl_spec_seq_has_spec_p (declspecs, ds_inline))
11372             && pedantic)
11373           {
11374             if (storage_class == sc_static)
11375               pedwarn (input_location, OPT_Wpedantic, 
11376                        "%<static%> specified invalid for function %qs "
11377                        "declared out of global scope", name);
11378             else
11379               pedwarn (input_location, OPT_Wpedantic, 
11380                        "%<inline%> specifier invalid for function %qs "
11381                        "declared out of global scope", name);
11382           }
11383
11384         if (ctype == NULL_TREE)
11385           {
11386             if (virtualp)
11387               {
11388                 error ("virtual non-class function %qs", name);
11389                 virtualp = 0;
11390               }
11391             else if (sfk == sfk_constructor
11392                      || sfk == sfk_destructor)
11393               {
11394                 error (funcdef_flag
11395                        ? G_("%qs defined in a non-class scope")
11396                        : G_("%qs declared in a non-class scope"), name);
11397                 sfk = sfk_none;
11398               }
11399           }
11400
11401         /* Record whether the function is public.  */
11402         publicp = (ctype != NULL_TREE
11403                    || storage_class != sc_static);
11404
11405         if (late_return_type_p)
11406           TYPE_HAS_LATE_RETURN_TYPE (type) = 1;
11407
11408         decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
11409                            reqs, virtualp, flags, memfn_quals, rqual, raises,
11410                            1, friendp,
11411                            publicp,
11412                            inlinep | (2 * constexpr_p) | (4 * concept_p),
11413                            initialized == SD_DELETED,
11414                            sfk,
11415                            funcdef_flag,
11416                            template_count, in_namespace, attrlist,
11417                            declarator->id_loc);
11418         if (decl == NULL_TREE)
11419           return error_mark_node;
11420
11421         if (staticp == 1)
11422           {
11423             int invalid_static = 0;
11424
11425             /* Don't allow a static member function in a class, and forbid
11426                declaring main to be static.  */
11427             if (TREE_CODE (type) == METHOD_TYPE)
11428               {
11429                 permerror (input_location, "cannot declare member function %qD to have "
11430                            "static linkage", decl);
11431                 invalid_static = 1;
11432               }
11433             else if (current_function_decl)
11434               {
11435                 /* FIXME need arm citation */
11436                 error ("cannot declare static function inside another function");
11437                 invalid_static = 1;
11438               }
11439
11440             if (invalid_static)
11441               {
11442                 staticp = 0;
11443                 storage_class = sc_none;
11444               }
11445           }
11446       }
11447     else
11448       {
11449         /* It's a variable.  */
11450
11451         /* An uninitialized decl with `extern' is a reference.  */
11452         decl = grokvardecl (type, dname, unqualified_id,
11453                             declspecs,
11454                             initialized,
11455                             ((type_quals & TYPE_QUAL_CONST) != 0) | (2 * concept_p),
11456                             template_count,
11457                             ctype ? ctype : in_namespace);
11458         if (decl == NULL_TREE)
11459           return error_mark_node;
11460
11461         bad_specifiers (decl, BSP_VAR, virtualp,
11462                         memfn_quals != TYPE_UNQUALIFIED,
11463                         inlinep, friendp, raises != NULL_TREE);
11464
11465         if (ctype)
11466           {
11467             DECL_CONTEXT (decl) = ctype;
11468             if (staticp == 1)
11469               {
11470                 permerror (input_location, "%<static%> may not be used when defining "
11471                            "(as opposed to declaring) a static data member");
11472                 staticp = 0;
11473                 storage_class = sc_none;
11474               }
11475             if (storage_class == sc_register && TREE_STATIC (decl))
11476               {
11477                 error ("static member %qD declared %<register%>", decl);
11478                 storage_class = sc_none;
11479               }
11480             if (storage_class == sc_extern && pedantic)
11481               {
11482                 pedwarn (input_location, OPT_Wpedantic, 
11483                          "cannot explicitly declare member %q#D to have "
11484                          "extern linkage", decl);
11485                 storage_class = sc_none;
11486               }
11487           }
11488         else if (constexpr_p && DECL_EXTERNAL (decl))
11489           {
11490             error ("declaration of constexpr variable %qD is not a definition",
11491                    decl);
11492             constexpr_p = false;
11493           }
11494       }
11495
11496     if (storage_class == sc_extern && initialized && !funcdef_flag)
11497       {
11498         if (toplevel_bindings_p ())
11499           {
11500             /* It's common practice (and completely valid) to have a const
11501                be initialized and declared extern.  */
11502             if (!(type_quals & TYPE_QUAL_CONST))
11503               warning (0, "%qs initialized and declared %<extern%>", name);
11504           }
11505         else
11506           {
11507             error ("%qs has both %<extern%> and initializer", name);
11508             return error_mark_node;
11509           }
11510       }
11511
11512     /* Record `register' declaration for warnings on &
11513        and in case doing stupid register allocation.  */
11514
11515     if (storage_class == sc_register)
11516       DECL_REGISTER (decl) = 1;
11517     else if (storage_class == sc_extern)
11518       DECL_THIS_EXTERN (decl) = 1;
11519     else if (storage_class == sc_static)
11520       DECL_THIS_STATIC (decl) = 1;
11521
11522     /* Set constexpr flag on vars (functions got it in grokfndecl).  */
11523     if (constexpr_p && VAR_P (decl))
11524       DECL_DECLARED_CONSTEXPR_P (decl) = true;
11525
11526     /* Record constancy and volatility on the DECL itself .  There's
11527        no need to do this when processing a template; we'll do this
11528        for the instantiated declaration based on the type of DECL.  */
11529     if (!processing_template_decl)
11530       cp_apply_type_quals_to_decl (type_quals, decl);
11531
11532     return decl;
11533   }
11534 }
11535 \f
11536 /* Subroutine of start_function.  Ensure that each of the parameter
11537    types (as listed in PARMS) is complete, as is required for a
11538    function definition.  */
11539
11540 static void
11541 require_complete_types_for_parms (tree parms)
11542 {
11543   for (; parms; parms = DECL_CHAIN (parms))
11544     {
11545       if (dependent_type_p (TREE_TYPE (parms)))
11546         continue;
11547       if (!VOID_TYPE_P (TREE_TYPE (parms))
11548           && complete_type_or_else (TREE_TYPE (parms), parms))
11549         {
11550           relayout_decl (parms);
11551           DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
11552         }
11553       else
11554         /* grokparms or complete_type_or_else will have already issued
11555            an error.  */
11556         TREE_TYPE (parms) = error_mark_node;
11557     }
11558 }
11559
11560 /* Returns nonzero if T is a local variable.  */
11561
11562 int
11563 local_variable_p (const_tree t)
11564 {
11565   if ((VAR_P (t)
11566        /* A VAR_DECL with a context that is a _TYPE is a static data
11567           member.  */
11568        && !TYPE_P (CP_DECL_CONTEXT (t))
11569        /* Any other non-local variable must be at namespace scope.  */
11570        && !DECL_NAMESPACE_SCOPE_P (t))
11571       || (TREE_CODE (t) == PARM_DECL))
11572     return 1;
11573
11574   return 0;
11575 }
11576
11577 /* Like local_variable_p, but suitable for use as a tree-walking
11578    function.  */
11579
11580 static tree
11581 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
11582                          void * /*data*/)
11583 {
11584   if (local_variable_p (*tp)
11585       && (!DECL_ARTIFICIAL (*tp) || DECL_NAME (*tp) == this_identifier))
11586     return *tp;
11587   else if (TYPE_P (*tp))
11588     *walk_subtrees = 0;
11589
11590   return NULL_TREE;
11591 }
11592
11593 /* Check that ARG, which is a default-argument expression for a
11594    parameter DECL, is valid.  Returns ARG, or ERROR_MARK_NODE, if
11595    something goes wrong.  DECL may also be a _TYPE node, rather than a
11596    DECL, if there is no DECL available.  */
11597
11598 tree
11599 check_default_argument (tree decl, tree arg, tsubst_flags_t complain)
11600 {
11601   tree var;
11602   tree decl_type;
11603
11604   if (TREE_CODE (arg) == DEFAULT_ARG)
11605     /* We get a DEFAULT_ARG when looking at an in-class declaration
11606        with a default argument.  Ignore the argument for now; we'll
11607        deal with it after the class is complete.  */
11608     return arg;
11609
11610   if (TYPE_P (decl))
11611     {
11612       decl_type = decl;
11613       decl = NULL_TREE;
11614     }
11615   else
11616     decl_type = TREE_TYPE (decl);
11617
11618   if (arg == error_mark_node
11619       || decl == error_mark_node
11620       || TREE_TYPE (arg) == error_mark_node
11621       || decl_type == error_mark_node)
11622     /* Something already went wrong.  There's no need to check
11623        further.  */
11624     return error_mark_node;
11625
11626   /* [dcl.fct.default]
11627
11628      A default argument expression is implicitly converted to the
11629      parameter type.  */
11630   ++cp_unevaluated_operand;
11631   perform_implicit_conversion_flags (decl_type, arg, complain,
11632                                      LOOKUP_IMPLICIT);
11633   --cp_unevaluated_operand;
11634
11635   /* Avoid redundant -Wzero-as-null-pointer-constant warnings at
11636      the call sites.  */
11637   if (TYPE_PTR_OR_PTRMEM_P (decl_type)
11638       && null_ptr_cst_p (arg))
11639     return nullptr_node;
11640
11641   /* [dcl.fct.default]
11642
11643      Local variables shall not be used in default argument
11644      expressions.
11645
11646      The keyword `this' shall not be used in a default argument of a
11647      member function.  */
11648   var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
11649   if (var)
11650     {
11651       if (complain & tf_warning_or_error)
11652         {
11653           if (DECL_NAME (var) == this_identifier)
11654             permerror (input_location, "default argument %qE uses %qD",
11655                        arg, var);
11656           else
11657             error ("default argument %qE uses local variable %qD", arg, var);
11658         }
11659       return error_mark_node;
11660     }
11661
11662   /* All is well.  */
11663   return arg;
11664 }
11665
11666 /* Returns a deprecated type used within TYPE, or NULL_TREE if none.  */
11667
11668 static tree
11669 type_is_deprecated (tree type)
11670 {
11671   enum tree_code code;
11672   if (TREE_DEPRECATED (type))
11673     return type;
11674   if (TYPE_NAME (type))
11675     {
11676       if (TREE_DEPRECATED (TYPE_NAME (type)))
11677         return type;
11678       else
11679         return NULL_TREE;
11680     }
11681
11682   /* Do warn about using typedefs to a deprecated class.  */
11683   if (OVERLOAD_TYPE_P (type) && type != TYPE_MAIN_VARIANT (type))
11684     return type_is_deprecated (TYPE_MAIN_VARIANT (type));
11685
11686   code = TREE_CODE (type);
11687
11688   if (code == POINTER_TYPE || code == REFERENCE_TYPE
11689       || code == OFFSET_TYPE || code == FUNCTION_TYPE
11690       || code == METHOD_TYPE || code == ARRAY_TYPE)
11691     return type_is_deprecated (TREE_TYPE (type));
11692
11693   if (TYPE_PTRMEMFUNC_P (type))
11694     return type_is_deprecated
11695       (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
11696
11697   return NULL_TREE;
11698 }
11699
11700 /* Decode the list of parameter types for a function type.
11701    Given the list of things declared inside the parens,
11702    return a list of types.
11703
11704    If this parameter does not end with an ellipsis, we append
11705    void_list_node.
11706
11707    *PARMS is set to the chain of PARM_DECLs created.  */
11708
11709 tree
11710 grokparms (tree parmlist, tree *parms)
11711 {
11712   tree result = NULL_TREE;
11713   tree decls = NULL_TREE;
11714   tree parm;
11715   int any_error = 0;
11716
11717   for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
11718     {
11719       tree type = NULL_TREE;
11720       tree init = TREE_PURPOSE (parm);
11721       tree decl = TREE_VALUE (parm);
11722       const char *errmsg;
11723
11724       if (parm == void_list_node)
11725         break;
11726
11727       if (! decl || TREE_TYPE (decl) == error_mark_node)
11728         continue;
11729
11730       type = TREE_TYPE (decl);
11731       if (VOID_TYPE_P (type))
11732         {
11733           if (same_type_p (type, void_type_node)
11734               && !init
11735               && !DECL_NAME (decl) && !result
11736               && TREE_CHAIN (parm) == void_list_node)
11737             /* DR 577: A parameter list consisting of a single
11738                unnamed parameter of non-dependent type 'void'.  */
11739             break;
11740           else if (cv_qualified_p (type))
11741             error_at (DECL_SOURCE_LOCATION (decl),
11742                       "invalid use of cv-qualified type %qT in "
11743                       "parameter declaration", type);
11744           else
11745             error_at (DECL_SOURCE_LOCATION (decl),
11746                       "invalid use of type %<void%> in parameter "
11747                       "declaration");
11748           /* It's not a good idea to actually create parameters of
11749              type `void'; other parts of the compiler assume that a
11750              void type terminates the parameter list.  */
11751           type = error_mark_node;
11752           TREE_TYPE (decl) = error_mark_node;
11753         }
11754
11755       if (type != error_mark_node
11756           && TYPE_FOR_JAVA (type)
11757           && MAYBE_CLASS_TYPE_P (type))
11758         {
11759           error ("parameter %qD has Java class type", decl);
11760           type = error_mark_node;
11761           TREE_TYPE (decl) = error_mark_node;
11762           init = NULL_TREE;
11763         }
11764
11765       if (type != error_mark_node
11766           && (errmsg = targetm.invalid_parameter_type (type)))
11767         {
11768           error (errmsg);
11769           type = error_mark_node;
11770           TREE_TYPE (decl) = error_mark_node;
11771         }
11772
11773       if (type != error_mark_node)
11774         {
11775           if (deprecated_state != DEPRECATED_SUPPRESS)
11776             {
11777               tree deptype = type_is_deprecated (type);
11778               if (deptype)
11779                 warn_deprecated_use (deptype, NULL_TREE);
11780             }
11781
11782           /* Top-level qualifiers on the parameters are
11783              ignored for function types.  */
11784           type = cp_build_qualified_type (type, 0);
11785           if (TREE_CODE (type) == METHOD_TYPE)
11786             {
11787               error ("parameter %qD invalidly declared method type", decl);
11788               type = build_pointer_type (type);
11789               TREE_TYPE (decl) = type;
11790             }
11791           else if (abstract_virtuals_error (decl, type))
11792             any_error = 1;  /* Seems like a good idea.  */
11793           else if (POINTER_TYPE_P (type))
11794             {
11795               /* [dcl.fct]/6, parameter types cannot contain pointers
11796                  (references) to arrays of unknown bound.  */
11797               tree t = TREE_TYPE (type);
11798               int ptr = TYPE_PTR_P (type);
11799
11800               while (1)
11801                 {
11802                   if (TYPE_PTR_P (t))
11803                     ptr = 1;
11804                   else if (TREE_CODE (t) != ARRAY_TYPE)
11805                     break;
11806                   else if (!TYPE_DOMAIN (t))
11807                     break;
11808                   t = TREE_TYPE (t);
11809                 }
11810               if (TREE_CODE (t) == ARRAY_TYPE)
11811                 error (ptr
11812                        ? G_("parameter %qD includes pointer to array of "
11813                             "unknown bound %qT")
11814                        : G_("parameter %qD includes reference to array of "
11815                             "unknown bound %qT"),
11816                        decl, t);
11817             }
11818
11819           if (any_error)
11820             init = NULL_TREE;
11821           else if (init && !processing_template_decl)
11822             init = check_default_argument (decl, init, tf_warning_or_error);
11823         }
11824
11825       DECL_CHAIN (decl) = decls;
11826       decls = decl;
11827       result = tree_cons (init, type, result);
11828     }
11829   decls = nreverse (decls);
11830   result = nreverse (result);
11831   if (parm)
11832     result = chainon (result, void_list_node);
11833   *parms = decls;
11834
11835   return result;
11836 }
11837
11838 \f
11839 /* D is a constructor or overloaded `operator='.
11840
11841    Let T be the class in which D is declared. Then, this function
11842    returns:
11843
11844    -1 if D's is an ill-formed constructor or copy assignment operator
11845       whose first parameter is of type `T'.
11846    0  if D is not a copy constructor or copy assignment
11847       operator.
11848    1  if D is a copy constructor or copy assignment operator whose
11849       first parameter is a reference to non-const qualified T.
11850    2  if D is a copy constructor or copy assignment operator whose
11851       first parameter is a reference to const qualified T.
11852
11853    This function can be used as a predicate. Positive values indicate
11854    a copy constructor and nonzero values indicate a copy assignment
11855    operator.  */
11856
11857 int
11858 copy_fn_p (const_tree d)
11859 {
11860   tree args;
11861   tree arg_type;
11862   int result = 1;
11863
11864   gcc_assert (DECL_FUNCTION_MEMBER_P (d));
11865
11866   if (TREE_CODE (d) == TEMPLATE_DECL
11867       || (DECL_TEMPLATE_INFO (d)
11868           && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
11869     /* Instantiations of template member functions are never copy
11870        functions.  Note that member functions of templated classes are
11871        represented as template functions internally, and we must
11872        accept those as copy functions.  */
11873     return 0;
11874
11875   args = FUNCTION_FIRST_USER_PARMTYPE (d);
11876   if (!args)
11877     return 0;
11878
11879   arg_type = TREE_VALUE (args);
11880   if (arg_type == error_mark_node)
11881     return 0;
11882
11883   if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
11884     {
11885       /* Pass by value copy assignment operator.  */
11886       result = -1;
11887     }
11888   else if (TREE_CODE (arg_type) == REFERENCE_TYPE
11889            && !TYPE_REF_IS_RVALUE (arg_type)
11890            && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
11891     {
11892       if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
11893         result = 2;
11894     }
11895   else
11896     return 0;
11897
11898   args = TREE_CHAIN (args);
11899
11900   if (args && args != void_list_node && !TREE_PURPOSE (args))
11901     /* There are more non-optional args.  */
11902     return 0;
11903
11904   return result;
11905 }
11906
11907 /* D is a constructor or overloaded `operator='.
11908
11909    Let T be the class in which D is declared. Then, this function
11910    returns true when D is a move constructor or move assignment
11911    operator, false otherwise.  */
11912
11913 bool
11914 move_fn_p (const_tree d)
11915 {
11916   gcc_assert (DECL_FUNCTION_MEMBER_P (d));
11917
11918   if (cxx_dialect == cxx98)
11919     /* There are no move constructors if we are in C++98 mode.  */
11920     return false;
11921
11922   if (TREE_CODE (d) == TEMPLATE_DECL
11923       || (DECL_TEMPLATE_INFO (d)
11924          && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
11925     /* Instantiations of template member functions are never move
11926        functions.  Note that member functions of templated classes are
11927        represented as template functions internally, and we must
11928        accept those as move functions.  */
11929     return 0;
11930
11931   return move_signature_fn_p (d);
11932 }
11933
11934 /* D is a constructor or overloaded `operator='.
11935
11936    Then, this function returns true when D has the same signature as a move
11937    constructor or move assignment operator (because either it is such a
11938    ctor/op= or it is a template specialization with the same signature),
11939    false otherwise.  */
11940
11941 bool
11942 move_signature_fn_p (const_tree d)
11943 {
11944   tree args;
11945   tree arg_type;
11946   bool result = false;
11947
11948   args = FUNCTION_FIRST_USER_PARMTYPE (d);
11949   if (!args)
11950     return 0;
11951
11952   arg_type = TREE_VALUE (args);
11953   if (arg_type == error_mark_node)
11954     return 0;
11955
11956   if (TREE_CODE (arg_type) == REFERENCE_TYPE
11957       && TYPE_REF_IS_RVALUE (arg_type)
11958       && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
11959                       DECL_CONTEXT (d)))
11960     result = true;
11961
11962   args = TREE_CHAIN (args);
11963
11964   if (args && args != void_list_node && !TREE_PURPOSE (args))
11965     /* There are more non-optional args.  */
11966     return false;
11967
11968   return result;
11969 }
11970
11971 /* Remember any special properties of member function DECL.  */
11972
11973 void
11974 grok_special_member_properties (tree decl)
11975 {
11976   tree class_type;
11977
11978   if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
11979     return;
11980
11981   class_type = DECL_CONTEXT (decl);
11982   if (DECL_CONSTRUCTOR_P (decl))
11983     {
11984       int ctor = copy_fn_p (decl);
11985
11986       if (!DECL_ARTIFICIAL (decl))
11987         TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
11988
11989       if (ctor > 0)
11990         {
11991           /* [class.copy]
11992
11993              A non-template constructor for class X is a copy
11994              constructor if its first parameter is of type X&, const
11995              X&, volatile X& or const volatile X&, and either there
11996              are no other parameters or else all other parameters have
11997              default arguments.  */
11998           TYPE_HAS_COPY_CTOR (class_type) = 1;
11999           if (user_provided_p (decl))
12000             TYPE_HAS_COMPLEX_COPY_CTOR (class_type) = 1;
12001           if (ctor > 1)
12002             TYPE_HAS_CONST_COPY_CTOR (class_type) = 1;
12003         }
12004       else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
12005         TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
12006       else if (move_fn_p (decl) && user_provided_p (decl))
12007         TYPE_HAS_COMPLEX_MOVE_CTOR (class_type) = 1;
12008       else if (is_list_ctor (decl))
12009         TYPE_HAS_LIST_CTOR (class_type) = 1;
12010
12011       if (DECL_DECLARED_CONSTEXPR_P (decl)
12012           && !copy_fn_p (decl) && !move_fn_p (decl))
12013         TYPE_HAS_CONSTEXPR_CTOR (class_type) = 1;
12014     }
12015   else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
12016     {
12017       /* [class.copy]
12018
12019          A non-template assignment operator for class X is a copy
12020          assignment operator if its parameter is of type X, X&, const
12021          X&, volatile X& or const volatile X&.  */
12022
12023       int assop = copy_fn_p (decl);
12024
12025       if (assop)
12026         {
12027           TYPE_HAS_COPY_ASSIGN (class_type) = 1;
12028           if (user_provided_p (decl))
12029             TYPE_HAS_COMPLEX_COPY_ASSIGN (class_type) = 1;
12030           if (assop != 1)
12031             TYPE_HAS_CONST_COPY_ASSIGN (class_type) = 1;
12032         }
12033       else if (move_fn_p (decl) && user_provided_p (decl))
12034         TYPE_HAS_COMPLEX_MOVE_ASSIGN (class_type) = 1;
12035     }
12036   /* Destructors are handled in check_methods.  */
12037 }
12038
12039 /* Check a constructor DECL has the correct form.  Complains
12040    if the class has a constructor of the form X(X).  */
12041
12042 int
12043 grok_ctor_properties (const_tree ctype, const_tree decl)
12044 {
12045   int ctor_parm = copy_fn_p (decl);
12046
12047   if (ctor_parm < 0)
12048     {
12049       /* [class.copy]
12050
12051          A declaration of a constructor for a class X is ill-formed if
12052          its first parameter is of type (optionally cv-qualified) X
12053          and either there are no other parameters or else all other
12054          parameters have default arguments.
12055
12056          We *don't* complain about member template instantiations that
12057          have this form, though; they can occur as we try to decide
12058          what constructor to use during overload resolution.  Since
12059          overload resolution will never prefer such a constructor to
12060          the non-template copy constructor (which is either explicitly
12061          or implicitly defined), there's no need to worry about their
12062          existence.  Theoretically, they should never even be
12063          instantiated, but that's hard to forestall.  */
12064       error ("invalid constructor; you probably meant %<%T (const %T&)%>",
12065                 ctype, ctype);
12066       return 0;
12067     }
12068
12069   return 1;
12070 }
12071
12072 /* An operator with this code is unary, but can also be binary.  */
12073
12074 static int
12075 ambi_op_p (enum tree_code code)
12076 {
12077   return (code == INDIRECT_REF
12078           || code == ADDR_EXPR
12079           || code == UNARY_PLUS_EXPR
12080           || code == NEGATE_EXPR
12081           || code == PREINCREMENT_EXPR
12082           || code == PREDECREMENT_EXPR);
12083 }
12084
12085 /* An operator with this name can only be unary.  */
12086
12087 static int
12088 unary_op_p (enum tree_code code)
12089 {
12090   return (code == TRUTH_NOT_EXPR
12091           || code == BIT_NOT_EXPR
12092           || code == COMPONENT_REF
12093           || code == TYPE_EXPR);
12094 }
12095
12096 /* DECL is a declaration for an overloaded operator.  If COMPLAIN is true,
12097    errors are issued for invalid declarations.  */
12098
12099 bool
12100 grok_op_properties (tree decl, bool complain)
12101 {
12102   tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
12103   tree argtype;
12104   int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
12105   tree name = DECL_NAME (decl);
12106   enum tree_code operator_code;
12107   int arity;
12108   bool ellipsis_p;
12109   tree class_type;
12110
12111   /* Count the number of arguments and check for ellipsis.  */
12112   for (argtype = argtypes, arity = 0;
12113        argtype && argtype != void_list_node;
12114        argtype = TREE_CHAIN (argtype))
12115     ++arity;
12116   ellipsis_p = !argtype;
12117
12118   class_type = DECL_CONTEXT (decl);
12119   if (class_type && !CLASS_TYPE_P (class_type))
12120     class_type = NULL_TREE;
12121
12122   if (DECL_CONV_FN_P (decl))
12123     operator_code = TYPE_EXPR;
12124   else
12125     do
12126       {
12127 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P)       \
12128         if (ansi_opname (CODE) == name)                         \
12129           {                                                     \
12130             operator_code = (CODE);                             \
12131             break;                                              \
12132           }                                                     \
12133         else if (ansi_assopname (CODE) == name)                 \
12134           {                                                     \
12135             operator_code = (CODE);                             \
12136             DECL_ASSIGNMENT_OPERATOR_P (decl) = 1;              \
12137             break;                                              \
12138           }
12139
12140 #include "operators.def"
12141 #undef DEF_OPERATOR
12142
12143         gcc_unreachable ();
12144       }
12145     while (0);
12146   gcc_assert (operator_code != MAX_TREE_CODES);
12147   SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
12148
12149   if (class_type)
12150     switch (operator_code)
12151       {
12152       case NEW_EXPR:
12153         TYPE_HAS_NEW_OPERATOR (class_type) = 1;
12154         break;
12155
12156       case DELETE_EXPR:
12157         TYPE_GETS_DELETE (class_type) |= 1;
12158         break;
12159
12160       case VEC_NEW_EXPR:
12161         TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
12162         break;
12163
12164       case VEC_DELETE_EXPR:
12165         TYPE_GETS_DELETE (class_type) |= 2;
12166         break;
12167
12168       default:
12169         break;
12170       }
12171
12172     /* [basic.std.dynamic.allocation]/1:
12173
12174        A program is ill-formed if an allocation function is declared
12175        in a namespace scope other than global scope or declared static
12176        in global scope.
12177
12178        The same also holds true for deallocation functions.  */
12179   if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
12180       || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
12181     {
12182       if (DECL_NAMESPACE_SCOPE_P (decl))
12183         {
12184           if (CP_DECL_CONTEXT (decl) != global_namespace)
12185             {
12186               error ("%qD may not be declared within a namespace", decl);
12187               return false;
12188             }
12189           else if (!TREE_PUBLIC (decl))
12190             {
12191               error ("%qD may not be declared as static", decl);
12192               return false;
12193             }
12194         }
12195     }
12196
12197   if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
12198     {
12199       TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
12200       DECL_IS_OPERATOR_NEW (decl) = 1;
12201     }
12202   else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
12203     TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
12204   else
12205     {
12206       /* An operator function must either be a non-static member function
12207          or have at least one parameter of a class, a reference to a class,
12208          an enumeration, or a reference to an enumeration.  13.4.0.6 */
12209       if (! methodp || DECL_STATIC_FUNCTION_P (decl))
12210         {
12211           if (operator_code == TYPE_EXPR
12212               || operator_code == CALL_EXPR
12213               || operator_code == COMPONENT_REF
12214               || operator_code == ARRAY_REF
12215               || operator_code == NOP_EXPR)
12216             {
12217               error ("%qD must be a nonstatic member function", decl);
12218               return false;
12219             }
12220           else
12221             {
12222               tree p;
12223
12224               if (DECL_STATIC_FUNCTION_P (decl))
12225                 {
12226                   error ("%qD must be either a non-static member "
12227                          "function or a non-member function", decl);
12228                   return false;
12229                 }
12230
12231               for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
12232                 {
12233                   tree arg = non_reference (TREE_VALUE (p));
12234                   if (arg == error_mark_node)
12235                     return false;
12236
12237                   /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
12238                      because these checks are performed even on
12239                      template functions.  */
12240                   if (MAYBE_CLASS_TYPE_P (arg)
12241                       || TREE_CODE (arg) == ENUMERAL_TYPE)
12242                     break;
12243                 }
12244
12245               if (!p || p == void_list_node)
12246                 {
12247                   if (complain)
12248                     error ("%qD must have an argument of class or "
12249                            "enumerated type", decl);
12250                   return false;
12251                 }
12252             }
12253         }
12254
12255       /* There are no restrictions on the arguments to an overloaded
12256          "operator ()".  */
12257       if (operator_code == CALL_EXPR)
12258         return true;
12259
12260       /* Warn about conversion operators that will never be used.  */
12261       if (IDENTIFIER_TYPENAME_P (name)
12262           && ! DECL_TEMPLATE_INFO (decl)
12263           && warn_conversion
12264           /* Warn only declaring the function; there is no need to
12265              warn again about out-of-class definitions.  */
12266           && class_type == current_class_type)
12267         {
12268           tree t = TREE_TYPE (name);
12269           int ref = (TREE_CODE (t) == REFERENCE_TYPE);
12270
12271           if (ref)
12272             t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
12273
12274           if (VOID_TYPE_P (t))
12275             warning (OPT_Wconversion,
12276                      ref
12277                      ? G_("conversion to a reference to void "
12278                           "will never use a type conversion operator")
12279                      : G_("conversion to void "
12280                           "will never use a type conversion operator"));
12281           else if (class_type)
12282             {
12283               if (t == class_type)
12284                 warning (OPT_Wconversion,
12285                      ref
12286                      ? G_("conversion to a reference to the same type "
12287                           "will never use a type conversion operator")
12288                      : G_("conversion to the same type "
12289                           "will never use a type conversion operator"));                
12290               /* Don't force t to be complete here.  */
12291               else if (MAYBE_CLASS_TYPE_P (t)
12292                        && COMPLETE_TYPE_P (t)
12293                        && DERIVED_FROM_P (t, class_type))
12294                  warning (OPT_Wconversion,
12295                           ref
12296                           ? G_("conversion to a reference to a base class "
12297                                "will never use a type conversion operator")
12298                           : G_("conversion to a base class "
12299                                "will never use a type conversion operator"));           
12300             }
12301
12302         }
12303
12304       if (operator_code == COND_EXPR)
12305         {
12306           /* 13.4.0.3 */
12307           error ("ISO C++ prohibits overloading operator ?:");
12308           return false;
12309         }
12310       else if (ellipsis_p)
12311         {
12312           error ("%qD must not have variable number of arguments", decl);
12313           return false;
12314         }
12315       else if (ambi_op_p (operator_code))
12316         {
12317           if (arity == 1)
12318             /* We pick the one-argument operator codes by default, so
12319                we don't have to change anything.  */
12320             ;
12321           else if (arity == 2)
12322             {
12323               /* If we thought this was a unary operator, we now know
12324                  it to be a binary operator.  */
12325               switch (operator_code)
12326                 {
12327                 case INDIRECT_REF:
12328                   operator_code = MULT_EXPR;
12329                   break;
12330
12331                 case ADDR_EXPR:
12332                   operator_code = BIT_AND_EXPR;
12333                   break;
12334
12335                 case UNARY_PLUS_EXPR:
12336                   operator_code = PLUS_EXPR;
12337                   break;
12338
12339                 case NEGATE_EXPR:
12340                   operator_code = MINUS_EXPR;
12341                   break;
12342
12343                 case PREINCREMENT_EXPR:
12344                   operator_code = POSTINCREMENT_EXPR;
12345                   break;
12346
12347                 case PREDECREMENT_EXPR:
12348                   operator_code = POSTDECREMENT_EXPR;
12349                   break;
12350
12351                 default:
12352                   gcc_unreachable ();
12353                 }
12354
12355               SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
12356
12357               if ((operator_code == POSTINCREMENT_EXPR
12358                    || operator_code == POSTDECREMENT_EXPR)
12359                   && ! processing_template_decl
12360                   && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
12361                 {
12362                   if (methodp)
12363                     error ("postfix %qD must take %<int%> as its argument",
12364                            decl);
12365                   else
12366                     error ("postfix %qD must take %<int%> as its second "
12367                            "argument", decl);
12368                   return false;
12369                 }
12370             }
12371           else
12372             {
12373               if (methodp)
12374                 error ("%qD must take either zero or one argument", decl);
12375               else
12376                 error ("%qD must take either one or two arguments", decl);
12377               return false;
12378             }
12379
12380           /* More Effective C++ rule 6.  */
12381           if (warn_ecpp
12382               && (operator_code == POSTINCREMENT_EXPR
12383                   || operator_code == POSTDECREMENT_EXPR
12384                   || operator_code == PREINCREMENT_EXPR
12385                   || operator_code == PREDECREMENT_EXPR))
12386             {
12387               tree arg = TREE_VALUE (argtypes);
12388               tree ret = TREE_TYPE (TREE_TYPE (decl));
12389               if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
12390                 arg = TREE_TYPE (arg);
12391               arg = TYPE_MAIN_VARIANT (arg);
12392               if (operator_code == PREINCREMENT_EXPR
12393                   || operator_code == PREDECREMENT_EXPR)
12394                 {
12395                   if (TREE_CODE (ret) != REFERENCE_TYPE
12396                       || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
12397                                        arg))
12398                     warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
12399                              build_reference_type (arg));
12400                 }
12401               else
12402                 {
12403                   if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
12404                     warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
12405                 }
12406             }
12407         }
12408       else if (unary_op_p (operator_code))
12409         {
12410           if (arity != 1)
12411             {
12412               if (methodp)
12413                 error ("%qD must take %<void%>", decl);
12414               else
12415                 error ("%qD must take exactly one argument", decl);
12416               return false;
12417             }
12418         }
12419       else /* if (binary_op_p (operator_code)) */
12420         {
12421           if (arity != 2)
12422             {
12423               if (methodp)
12424                 error ("%qD must take exactly one argument", decl);
12425               else
12426                 error ("%qD must take exactly two arguments", decl);
12427               return false;
12428             }
12429
12430           /* More Effective C++ rule 7.  */
12431           if (warn_ecpp
12432               && (operator_code == TRUTH_ANDIF_EXPR
12433                   || operator_code == TRUTH_ORIF_EXPR
12434                   || operator_code == COMPOUND_EXPR))
12435             warning (OPT_Weffc__, "user-defined %qD always evaluates both arguments",
12436                      decl);
12437         }
12438
12439       /* Effective C++ rule 23.  */
12440       if (warn_ecpp
12441           && arity == 2
12442           && !DECL_ASSIGNMENT_OPERATOR_P (decl)
12443           && (operator_code == PLUS_EXPR
12444               || operator_code == MINUS_EXPR
12445               || operator_code == TRUNC_DIV_EXPR
12446               || operator_code == MULT_EXPR
12447               || operator_code == TRUNC_MOD_EXPR)
12448           && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
12449         warning (OPT_Weffc__, "%qD should return by value", decl);
12450
12451       /* [over.oper]/8 */
12452       for (; argtypes && argtypes != void_list_node;
12453           argtypes = TREE_CHAIN (argtypes))
12454         if (TREE_PURPOSE (argtypes))
12455           {
12456             TREE_PURPOSE (argtypes) = NULL_TREE;
12457             if (operator_code == POSTINCREMENT_EXPR
12458                 || operator_code == POSTDECREMENT_EXPR)
12459               {
12460                 pedwarn (input_location, OPT_Wpedantic, "%qD cannot have default arguments", 
12461                          decl);
12462               }
12463             else
12464               {
12465                 error ("%qD cannot have default arguments", decl);
12466                 return false;
12467               }
12468           }
12469     }
12470   return true;
12471 }
12472 \f
12473 /* Return a string giving the keyword associate with CODE.  */
12474
12475 static const char *
12476 tag_name (enum tag_types code)
12477 {
12478   switch (code)
12479     {
12480     case record_type:
12481       return "struct";
12482     case class_type:
12483       return "class";
12484     case union_type:
12485       return "union";
12486     case enum_type:
12487       return "enum";
12488     case typename_type:
12489       return "typename";
12490     default:
12491       gcc_unreachable ();
12492     }
12493 }
12494
12495 /* Name lookup in an elaborated-type-specifier (after the keyword
12496    indicated by TAG_CODE) has found the TYPE_DECL DECL.  If the
12497    elaborated-type-specifier is invalid, issue a diagnostic and return
12498    error_mark_node; otherwise, return the *_TYPE to which it referred.
12499    If ALLOW_TEMPLATE_P is true, TYPE may be a class template.  */
12500
12501 tree
12502 check_elaborated_type_specifier (enum tag_types tag_code,
12503                                  tree decl,
12504                                  bool allow_template_p)
12505 {
12506   tree type;
12507
12508   /* In the case of:
12509
12510        struct S { struct S *p; };
12511
12512      name lookup will find the TYPE_DECL for the implicit "S::S"
12513      typedef.  Adjust for that here.  */
12514   if (DECL_SELF_REFERENCE_P (decl))
12515     decl = TYPE_NAME (TREE_TYPE (decl));
12516
12517   type = TREE_TYPE (decl);
12518
12519   /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
12520      is false for this case as well.  */
12521   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
12522     {
12523       error ("using template type parameter %qT after %qs",
12524              type, tag_name (tag_code));
12525       return error_mark_node;
12526     }
12527   /* Accept template template parameters.  */
12528   else if (allow_template_p
12529            && (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM
12530                || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM))
12531     ;
12532   /*   [dcl.type.elab]
12533
12534        If the identifier resolves to a typedef-name or the
12535        simple-template-id resolves to an alias template
12536        specialization, the elaborated-type-specifier is ill-formed.
12537
12538      In other words, the only legitimate declaration to use in the
12539      elaborated type specifier is the implicit typedef created when
12540      the type is declared.  */
12541   else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
12542            && !DECL_SELF_REFERENCE_P (decl)
12543            && tag_code != typename_type)
12544     {
12545       if (alias_template_specialization_p (type))
12546         error ("using alias template specialization %qT after %qs",
12547                type, tag_name (tag_code));
12548       else
12549         error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
12550       inform (DECL_SOURCE_LOCATION (decl),
12551               "%qD has a previous declaration here", decl);
12552       return error_mark_node;
12553     }
12554   else if (TREE_CODE (type) != RECORD_TYPE
12555            && TREE_CODE (type) != UNION_TYPE
12556            && tag_code != enum_type
12557            && tag_code != typename_type)
12558     {
12559       error ("%qT referred to as %qs", type, tag_name (tag_code));
12560       inform (input_location, "%q+T has a previous declaration here", type);
12561       return error_mark_node;
12562     }
12563   else if (TREE_CODE (type) != ENUMERAL_TYPE
12564            && tag_code == enum_type)
12565     {
12566       error ("%qT referred to as enum", type);
12567       inform (input_location, "%q+T has a previous declaration here", type);
12568       return error_mark_node;
12569     }
12570   else if (!allow_template_p
12571            && TREE_CODE (type) == RECORD_TYPE
12572            && CLASSTYPE_IS_TEMPLATE (type))
12573     {
12574       /* If a class template appears as elaborated type specifier
12575          without a template header such as:
12576
12577            template <class T> class C {};
12578            void f(class C);             // No template header here
12579
12580          then the required template argument is missing.  */
12581       error ("template argument required for %<%s %T%>",
12582              tag_name (tag_code),
12583              DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
12584       return error_mark_node;
12585     }
12586
12587   return type;
12588 }
12589
12590 /* Lookup NAME in elaborate type specifier in scope according to
12591    SCOPE and issue diagnostics if necessary.
12592    Return *_TYPE node upon success, NULL_TREE when the NAME is not
12593    found, and ERROR_MARK_NODE for type error.  */
12594
12595 static tree
12596 lookup_and_check_tag (enum tag_types tag_code, tree name,
12597                       tag_scope scope, bool template_header_p)
12598 {
12599   tree t;
12600   tree decl;
12601   if (scope == ts_global)
12602     {
12603       /* First try ordinary name lookup, ignoring hidden class name
12604          injected via friend declaration.  */
12605       decl = lookup_name_prefer_type (name, 2);
12606       decl = strip_using_decl (decl);
12607       /* If that fails, the name will be placed in the smallest
12608          non-class, non-function-prototype scope according to 3.3.1/5.
12609          We may already have a hidden name declared as friend in this
12610          scope.  So lookup again but not ignoring hidden names.
12611          If we find one, that name will be made visible rather than
12612          creating a new tag.  */
12613       if (!decl)
12614         decl = lookup_type_scope (name, ts_within_enclosing_non_class);
12615     }
12616   else
12617     decl = lookup_type_scope (name, scope);
12618
12619   if (decl
12620       && (DECL_CLASS_TEMPLATE_P (decl)
12621           /* If scope is ts_current we're defining a class, so ignore a
12622              template template parameter.  */
12623           || (scope != ts_current
12624               && DECL_TEMPLATE_TEMPLATE_PARM_P (decl))))
12625     decl = DECL_TEMPLATE_RESULT (decl);
12626
12627   if (decl && TREE_CODE (decl) == TYPE_DECL)
12628     {
12629       /* Look for invalid nested type:
12630            class C {
12631              class C {};
12632            };  */
12633       if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
12634         {
12635           error ("%qD has the same name as the class in which it is "
12636                  "declared",
12637                  decl);
12638           return error_mark_node;
12639         }
12640
12641       /* Two cases we need to consider when deciding if a class
12642          template is allowed as an elaborated type specifier:
12643          1. It is a self reference to its own class.
12644          2. It comes with a template header.
12645
12646          For example:
12647
12648            template <class T> class C {
12649              class C *c1;               // DECL_SELF_REFERENCE_P is true
12650              class D;
12651            };
12652            template <class U> class C; // template_header_p is true
12653            template <class T> class C<T>::D {
12654              class C *c2;               // DECL_SELF_REFERENCE_P is true
12655            };  */
12656
12657       t = check_elaborated_type_specifier (tag_code,
12658                                            decl,
12659                                            template_header_p
12660                                            | DECL_SELF_REFERENCE_P (decl));
12661       if (template_header_p && t && CLASS_TYPE_P (t)
12662           && (!CLASSTYPE_TEMPLATE_INFO (t)
12663               || (!PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))))
12664         {
12665           error ("%qT is not a template", t);
12666           inform (location_of (t), "previous declaration here");
12667           if (TYPE_CLASS_SCOPE_P (t)
12668               && CLASSTYPE_TEMPLATE_INFO (TYPE_CONTEXT (t)))
12669             inform (input_location,
12670                     "perhaps you want to explicitly add %<%T::%>",
12671                     TYPE_CONTEXT (t));
12672           t = error_mark_node;
12673         }
12674
12675       return t;
12676     }
12677   else if (decl && TREE_CODE (decl) == TREE_LIST)
12678     {
12679       error ("reference to %qD is ambiguous", name);
12680       print_candidates (decl);
12681       return error_mark_node;
12682     }
12683   else
12684     return NULL_TREE;
12685 }
12686
12687 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
12688    Define the tag as a forward-reference if it is not defined.
12689
12690    If a declaration is given, process it here, and report an error if
12691    multiple declarations are not identical.
12692
12693    SCOPE is TS_CURRENT when this is also a definition.  Only look in
12694    the current frame for the name (since C++ allows new names in any
12695    scope.)  It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
12696    declaration.  Only look beginning from the current scope outward up
12697    till the nearest non-class scope.  Otherwise it is TS_GLOBAL.
12698
12699    TEMPLATE_HEADER_P is true when this declaration is preceded by
12700    a set of template parameters.  */
12701
12702 static tree
12703 xref_tag_1 (enum tag_types tag_code, tree name,
12704             tag_scope orig_scope, bool template_header_p)
12705 {
12706   enum tree_code code;
12707   tree t;
12708   tree context = NULL_TREE;
12709   tag_scope scope;
12710
12711   gcc_assert (identifier_p (name));
12712
12713   switch (tag_code)
12714     {
12715     case record_type:
12716     case class_type:
12717       code = RECORD_TYPE;
12718       break;
12719     case union_type:
12720       code = UNION_TYPE;
12721       break;
12722     case enum_type:
12723       code = ENUMERAL_TYPE;
12724       break;
12725     default:
12726       gcc_unreachable ();
12727     }
12728
12729   if (orig_scope == ts_lambda)
12730     scope = ts_current;
12731   else
12732     scope = orig_scope;
12733
12734   /* In case of anonymous name, xref_tag is only called to
12735      make type node and push name.  Name lookup is not required.  */
12736   if (anon_aggrname_p (name))
12737     t = NULL_TREE;
12738   else
12739     t = lookup_and_check_tag  (tag_code, name,
12740                                scope, template_header_p);
12741
12742   if (t == error_mark_node)
12743     return error_mark_node;
12744
12745   if (scope != ts_current && t && current_class_type
12746       && template_class_depth (current_class_type)
12747       && template_header_p)
12748     {
12749       if (TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM)
12750         return t;
12751
12752       /* Since SCOPE is not TS_CURRENT, we are not looking at a
12753          definition of this tag.  Since, in addition, we are currently
12754          processing a (member) template declaration of a template
12755          class, we must be very careful; consider:
12756
12757            template <class X>
12758            struct S1
12759
12760            template <class U>
12761            struct S2
12762            { template <class V>
12763            friend struct S1; };
12764
12765          Here, the S2::S1 declaration should not be confused with the
12766          outer declaration.  In particular, the inner version should
12767          have a template parameter of level 2, not level 1.  This
12768          would be particularly important if the member declaration
12769          were instead:
12770
12771            template <class V = U> friend struct S1;
12772
12773          say, when we should tsubst into `U' when instantiating
12774          S2.  On the other hand, when presented with:
12775
12776            template <class T>
12777            struct S1 {
12778              template <class U>
12779              struct S2 {};
12780              template <class U>
12781              friend struct S2;
12782            };
12783
12784          we must find the inner binding eventually.  We
12785          accomplish this by making sure that the new type we
12786          create to represent this declaration has the right
12787          TYPE_CONTEXT.  */
12788       context = TYPE_CONTEXT (t);
12789       t = NULL_TREE;
12790     }
12791
12792   if (! t)
12793     {
12794       /* If no such tag is yet defined, create a forward-reference node
12795          and record it as the "definition".
12796          When a real declaration of this type is found,
12797          the forward-reference will be altered into a real type.  */
12798       if (code == ENUMERAL_TYPE)
12799         {
12800           error ("use of enum %q#D without previous declaration", name);
12801           return error_mark_node;
12802         }
12803       else
12804         {
12805           t = make_class_type (code);
12806           TYPE_CONTEXT (t) = context;
12807           if (orig_scope == ts_lambda)
12808             /* Remember that we're declaring a lambda to avoid bogus errors
12809                in push_template_decl.  */
12810             CLASSTYPE_LAMBDA_EXPR (t) = error_mark_node;
12811           t = pushtag (name, t, scope);
12812         }
12813     }
12814   else
12815     {
12816       if (template_header_p && MAYBE_CLASS_TYPE_P (t))
12817         {
12818           /* Check that we aren't trying to overload a class with different
12819              constraints.  */
12820           tree constr = NULL_TREE;
12821           if (current_template_parms)
12822             {
12823               tree reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
12824               constr = build_constraints (reqs, NULL_TREE);
12825             }
12826           if (!redeclare_class_template (t, current_template_parms, constr))
12827             return error_mark_node;
12828         }
12829       else if (!processing_template_decl
12830                && CLASS_TYPE_P (t)
12831                && CLASSTYPE_IS_TEMPLATE (t))
12832         {
12833           error ("redeclaration of %qT as a non-template", t);
12834           error ("previous declaration %q+D", t);
12835           return error_mark_node;
12836         }
12837
12838       /* Make injected friend class visible.  */
12839       if (scope != ts_within_enclosing_non_class
12840           && hidden_name_p (TYPE_NAME (t)))
12841         {
12842           DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
12843           DECL_FRIEND_P (TYPE_NAME (t)) = 0;
12844
12845           if (TYPE_TEMPLATE_INFO (t))
12846             {
12847               DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
12848               DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
12849             }
12850         }
12851     }
12852
12853   return t;
12854 }
12855
12856 /* Wrapper for xref_tag_1.  */
12857
12858 tree
12859 xref_tag (enum tag_types tag_code, tree name,
12860           tag_scope scope, bool template_header_p)
12861 {
12862   tree ret;
12863   bool subtime;
12864   subtime = timevar_cond_start (TV_NAME_LOOKUP);
12865   ret = xref_tag_1 (tag_code, name, scope, template_header_p);
12866   timevar_cond_stop (TV_NAME_LOOKUP, subtime);
12867   return ret;
12868 }
12869
12870
12871 tree
12872 xref_tag_from_type (tree old, tree id, tag_scope scope)
12873 {
12874   enum tag_types tag_kind;
12875
12876   if (TREE_CODE (old) == RECORD_TYPE)
12877     tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
12878   else
12879     tag_kind  = union_type;
12880
12881   if (id == NULL_TREE)
12882     id = TYPE_IDENTIFIER (old);
12883
12884   return xref_tag (tag_kind, id, scope, false);
12885 }
12886
12887 /* Create the binfo hierarchy for REF with (possibly NULL) base list
12888    BASE_LIST.  For each element on BASE_LIST the TREE_PURPOSE is an
12889    access_* node, and the TREE_VALUE is the type of the base-class.
12890    Non-NULL TREE_TYPE indicates virtual inheritance.  
12891  
12892    Returns true if the binfo hierarchy was successfully created,
12893    false if an error was detected. */
12894
12895 bool
12896 xref_basetypes (tree ref, tree base_list)
12897 {
12898   tree *basep;
12899   tree binfo, base_binfo;
12900   unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases.  */
12901   unsigned max_bases = 0;  /* Maximum direct bases.  */
12902   unsigned max_dvbases = 0; /* Maximum direct virtual bases.  */
12903   int i;
12904   tree default_access;
12905   tree igo_prev; /* Track Inheritance Graph Order.  */
12906
12907   if (ref == error_mark_node)
12908     return false;
12909
12910   /* The base of a derived class is private by default, all others are
12911      public.  */
12912   default_access = (TREE_CODE (ref) == RECORD_TYPE
12913                     && CLASSTYPE_DECLARED_CLASS (ref)
12914                     ? access_private_node : access_public_node);
12915
12916   /* First, make sure that any templates in base-classes are
12917      instantiated.  This ensures that if we call ourselves recursively
12918      we do not get confused about which classes are marked and which
12919      are not.  */
12920   basep = &base_list;
12921   while (*basep)
12922     {
12923       tree basetype = TREE_VALUE (*basep);
12924
12925       /* The dependent_type_p call below should really be dependent_scope_p
12926          so that we give a hard error about using an incomplete type as a
12927          base, but we allow it with a pedwarn for backward
12928          compatibility.  */
12929       if (processing_template_decl
12930           && CLASS_TYPE_P (basetype) && TYPE_BEING_DEFINED (basetype))
12931         cxx_incomplete_type_diagnostic (NULL_TREE, basetype, DK_PEDWARN);
12932       if (!dependent_type_p (basetype)
12933           && !complete_type_or_else (basetype, NULL))
12934         /* An incomplete type.  Remove it from the list.  */
12935         *basep = TREE_CHAIN (*basep);
12936       else
12937         {
12938           max_bases++;
12939           if (TREE_TYPE (*basep))
12940             max_dvbases++;
12941           if (CLASS_TYPE_P (basetype))
12942             max_vbases += vec_safe_length (CLASSTYPE_VBASECLASSES (basetype));
12943           basep = &TREE_CHAIN (*basep);
12944         }
12945     }
12946   max_vbases += max_dvbases;
12947
12948   TYPE_MARKED_P (ref) = 1;
12949
12950   /* The binfo slot should be empty, unless this is an (ill-formed)
12951      redefinition.  */
12952   if (TYPE_BINFO (ref) && !TYPE_SIZE (ref))
12953     {
12954       error ("redefinition of %q#T", ref);
12955       return false;
12956     }
12957
12958   gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
12959
12960   binfo = make_tree_binfo (max_bases);
12961
12962   TYPE_BINFO (ref) = binfo;
12963   BINFO_OFFSET (binfo) = size_zero_node;
12964   BINFO_TYPE (binfo) = ref;
12965
12966   /* Apply base-class info set up to the variants of this type.  */
12967   fixup_type_variants (ref);
12968
12969   if (max_bases)
12970     {
12971       vec_alloc (BINFO_BASE_ACCESSES (binfo), max_bases);
12972       /* An aggregate cannot have baseclasses.  */
12973       CLASSTYPE_NON_AGGREGATE (ref) = 1;
12974
12975       if (TREE_CODE (ref) == UNION_TYPE)
12976         {
12977           error ("derived union %qT invalid", ref);
12978           return false;
12979         }
12980     }
12981
12982   if (max_bases > 1)
12983     {
12984       if (TYPE_FOR_JAVA (ref))
12985         {
12986           error ("Java class %qT cannot have multiple bases", ref);
12987           return false;
12988         }
12989       else
12990         warning (OPT_Wmultiple_inheritance,
12991                  "%qT defined with multiple direct bases", ref);
12992     }
12993
12994   if (max_vbases)
12995     {
12996       vec_alloc (CLASSTYPE_VBASECLASSES (ref), max_vbases);
12997
12998       if (TYPE_FOR_JAVA (ref))
12999         {
13000           error ("Java class %qT cannot have virtual bases", ref);
13001           return false;
13002         }
13003       else if (max_dvbases)
13004         warning (OPT_Wvirtual_inheritance,
13005                  "%qT defined with direct virtual base", ref);
13006     }
13007
13008   for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
13009     {
13010       tree access = TREE_PURPOSE (base_list);
13011       int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
13012       tree basetype = TREE_VALUE (base_list);
13013
13014       if (access == access_default_node)
13015         access = default_access;
13016
13017       if (PACK_EXPANSION_P (basetype))
13018         basetype = PACK_EXPANSION_PATTERN (basetype);
13019       if (TREE_CODE (basetype) == TYPE_DECL)
13020         basetype = TREE_TYPE (basetype);
13021       if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
13022         {
13023           error ("base type %qT fails to be a struct or class type",
13024                  basetype);
13025           return false;
13026         }
13027
13028       if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
13029         TYPE_FOR_JAVA (ref) = 1;
13030
13031       base_binfo = NULL_TREE;
13032       if (CLASS_TYPE_P (basetype) && !dependent_scope_p (basetype))
13033         {
13034           base_binfo = TYPE_BINFO (basetype);
13035           /* The original basetype could have been a typedef'd type.  */
13036           basetype = BINFO_TYPE (base_binfo);
13037
13038           /* Inherit flags from the base.  */
13039           TYPE_HAS_NEW_OPERATOR (ref)
13040             |= TYPE_HAS_NEW_OPERATOR (basetype);
13041           TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
13042             |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
13043           TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
13044           TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
13045           CLASSTYPE_DIAMOND_SHAPED_P (ref)
13046             |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
13047           CLASSTYPE_REPEATED_BASE_P (ref)
13048             |= CLASSTYPE_REPEATED_BASE_P (basetype);
13049         }
13050
13051       /* We must do this test after we've seen through a typedef
13052          type.  */
13053       if (TYPE_MARKED_P (basetype))
13054         {
13055           if (basetype == ref)
13056             error ("recursive type %qT undefined", basetype);
13057           else
13058             error ("duplicate base type %qT invalid", basetype);
13059           return false;
13060         }
13061
13062       if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
13063         /* Regenerate the pack expansion for the bases. */
13064         basetype = make_pack_expansion (basetype);
13065
13066       TYPE_MARKED_P (basetype) = 1;
13067
13068       base_binfo = copy_binfo (base_binfo, basetype, ref,
13069                                &igo_prev, via_virtual);
13070       if (!BINFO_INHERITANCE_CHAIN (base_binfo))
13071         BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
13072
13073       BINFO_BASE_APPEND (binfo, base_binfo);
13074       BINFO_BASE_ACCESS_APPEND (binfo, access);
13075     }
13076
13077   if (vec_safe_length (CLASSTYPE_VBASECLASSES (ref)) < max_vbases)
13078     /* If we didn't get max_vbases vbases, we must have shared at
13079        least one of them, and are therefore diamond shaped.  */
13080     CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
13081
13082   /* Unmark all the types.  */
13083   for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
13084     TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
13085   TYPE_MARKED_P (ref) = 0;
13086
13087   /* Now see if we have a repeated base type.  */
13088   if (!CLASSTYPE_REPEATED_BASE_P (ref))
13089     {
13090       for (base_binfo = binfo; base_binfo;
13091            base_binfo = TREE_CHAIN (base_binfo))
13092         {
13093           if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
13094             {
13095               CLASSTYPE_REPEATED_BASE_P (ref) = 1;
13096               break;
13097             }
13098           TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
13099         }
13100       for (base_binfo = binfo; base_binfo;
13101            base_binfo = TREE_CHAIN (base_binfo))
13102         if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
13103           TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
13104         else
13105           break;
13106     }
13107
13108   return true;
13109 }
13110
13111 \f
13112 /* Copies the enum-related properties from type SRC to type DST.
13113    Used with the underlying type of an enum and the enum itself.  */
13114 static void
13115 copy_type_enum (tree dst, tree src)
13116 {
13117   tree t;
13118   for (t = dst; t; t = TYPE_NEXT_VARIANT (t))
13119     {
13120       TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (src);
13121       TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (src);
13122       TYPE_SIZE (t) = TYPE_SIZE (src);
13123       TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (src);
13124       SET_TYPE_MODE (dst, TYPE_MODE (src));
13125       TYPE_PRECISION (t) = TYPE_PRECISION (src);
13126       unsigned valign = TYPE_ALIGN (src);
13127       if (TYPE_USER_ALIGN (t))
13128         valign = MAX (valign, TYPE_ALIGN (t));
13129       else
13130         TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (src);
13131       SET_TYPE_ALIGN (t, valign);
13132       TYPE_UNSIGNED (t) = TYPE_UNSIGNED (src);
13133     }
13134 }
13135
13136 /* Begin compiling the definition of an enumeration type.
13137    NAME is its name, 
13138
13139    if ENUMTYPE is not NULL_TREE then the type has alredy been found.
13140
13141    UNDERLYING_TYPE is the type that will be used as the storage for
13142    the enumeration type. This should be NULL_TREE if no storage type
13143    was specified.
13144
13145    ATTRIBUTES are any attributes specified after the enum-key.
13146
13147    SCOPED_ENUM_P is true if this is a scoped enumeration type.
13148
13149    if IS_NEW is not NULL, gets TRUE iff a new type is created.
13150
13151    Returns the type object, as yet incomplete.
13152    Also records info about it so that build_enumerator
13153    may be used to declare the individual values as they are read.  */
13154
13155 tree
13156 start_enum (tree name, tree enumtype, tree underlying_type,
13157             tree attributes, bool scoped_enum_p, bool *is_new)
13158 {
13159   tree prevtype = NULL_TREE;
13160   gcc_assert (identifier_p (name));
13161
13162   if (is_new)
13163     *is_new = false;
13164   /* [C++0x dcl.enum]p5:
13165
13166     If not explicitly specified, the underlying type of a scoped
13167     enumeration type is int.  */
13168   if (!underlying_type && scoped_enum_p)
13169     underlying_type = integer_type_node;
13170
13171   if (underlying_type)
13172     underlying_type = cv_unqualified (underlying_type);
13173
13174   /* If this is the real definition for a previous forward reference,
13175      fill in the contents in the same object that used to be the
13176      forward reference.  */
13177   if (!enumtype)
13178     enumtype = lookup_and_check_tag (enum_type, name,
13179                                      /*tag_scope=*/ts_current,
13180                                      /*template_header_p=*/false);
13181
13182   /* In case of a template_decl, the only check that should be deferred
13183      to instantiation time is the comparison of underlying types.  */
13184   if (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE)
13185     {
13186       if (scoped_enum_p != SCOPED_ENUM_P (enumtype))
13187         {
13188           error_at (input_location, "scoped/unscoped mismatch "
13189                     "in enum %q#T", enumtype);
13190           error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
13191                     "previous definition here");
13192           enumtype = error_mark_node;
13193         }
13194       else if (ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) != !! underlying_type)
13195         {
13196           error_at (input_location, "underlying type mismatch "
13197                     "in enum %q#T", enumtype);
13198           error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
13199                     "previous definition here");
13200           enumtype = error_mark_node;
13201         }
13202       else if (underlying_type && ENUM_UNDERLYING_TYPE (enumtype)
13203                && !dependent_type_p (underlying_type)
13204                && !dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))
13205                && !same_type_p (underlying_type,
13206                                 ENUM_UNDERLYING_TYPE (enumtype)))
13207         {
13208           error_at (input_location, "different underlying type "
13209                     "in enum %q#T", enumtype);
13210           error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
13211                     "previous definition here");
13212           underlying_type = NULL_TREE;
13213         }
13214     }
13215
13216   if (!enumtype || TREE_CODE (enumtype) != ENUMERAL_TYPE
13217       || processing_template_decl)
13218     {
13219       /* In case of error, make a dummy enum to allow parsing to
13220          continue.  */
13221       if (enumtype == error_mark_node)
13222         {
13223           name = make_anon_name ();
13224           enumtype = NULL_TREE;
13225         }
13226
13227       /* enumtype may be an ENUMERAL_TYPE if this is a redefinition
13228          of an opaque enum, or an opaque enum of an already defined
13229          enumeration (C++0x only).
13230          In any other case, it'll be NULL_TREE. */
13231       if (!enumtype)
13232         {
13233           if (is_new)
13234             *is_new = true;
13235         }
13236       prevtype = enumtype;
13237
13238       /* Do not push the decl more than once, unless we need to
13239          compare underlying types at instantiation time */
13240       if (!enumtype
13241           || TREE_CODE (enumtype) != ENUMERAL_TYPE
13242           || (underlying_type
13243               && dependent_type_p (underlying_type))
13244           || (ENUM_UNDERLYING_TYPE (enumtype)
13245               && dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))))
13246         {
13247           enumtype = cxx_make_type (ENUMERAL_TYPE);
13248           enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
13249         }
13250       else
13251           enumtype = xref_tag (enum_type, name, /*tag_scope=*/ts_current,
13252                                false);
13253
13254       if (enumtype == error_mark_node)
13255         return error_mark_node;
13256
13257       /* The enum is considered opaque until the opening '{' of the
13258          enumerator list.  */
13259       SET_OPAQUE_ENUM_P (enumtype, true);
13260       ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) = !! underlying_type;
13261     }
13262
13263   SET_SCOPED_ENUM_P (enumtype, scoped_enum_p);
13264
13265   cplus_decl_attributes (&enumtype, attributes, (int)ATTR_FLAG_TYPE_IN_PLACE);
13266
13267   if (underlying_type)
13268     {
13269       if (ENUM_UNDERLYING_TYPE (enumtype))
13270         /* We already checked that it matches, don't change it to a different
13271            typedef variant.  */;
13272       else if (CP_INTEGRAL_TYPE_P (underlying_type))
13273         {
13274           copy_type_enum (enumtype, underlying_type);
13275           ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
13276         }
13277       else if (dependent_type_p (underlying_type))
13278         ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
13279       else
13280         error ("underlying type %<%T%> of %<%T%> must be an integral type", 
13281                underlying_type, enumtype);
13282     }
13283
13284   /* If into a template class, the returned enum is always the first
13285      declaration (opaque or not) seen. This way all the references to
13286      this type will be to the same declaration. The following ones are used
13287      only to check for definition errors.  */
13288   if (prevtype && processing_template_decl)
13289     return prevtype;
13290   else
13291     return enumtype;
13292 }
13293
13294 /* After processing and defining all the values of an enumeration type,
13295    install their decls in the enumeration type.
13296    ENUMTYPE is the type object.  */
13297
13298 void
13299 finish_enum_value_list (tree enumtype)
13300 {
13301   tree values;
13302   tree underlying_type;
13303   tree decl;
13304   tree value;
13305   tree minnode, maxnode;
13306   tree t;
13307
13308   bool fixed_underlying_type_p 
13309     = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
13310
13311   /* We built up the VALUES in reverse order.  */
13312   TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
13313
13314   /* For an enum defined in a template, just set the type of the values;
13315      all further processing is postponed until the template is
13316      instantiated.  We need to set the type so that tsubst of a CONST_DECL
13317      works.  */
13318   if (processing_template_decl)
13319     {
13320       for (values = TYPE_VALUES (enumtype);
13321            values;
13322            values = TREE_CHAIN (values))
13323         TREE_TYPE (TREE_VALUE (values)) = enumtype;
13324       return;
13325     }
13326
13327   /* Determine the minimum and maximum values of the enumerators.  */
13328   if (TYPE_VALUES (enumtype))
13329     {
13330       minnode = maxnode = NULL_TREE;
13331
13332       for (values = TYPE_VALUES (enumtype);
13333            values;
13334            values = TREE_CHAIN (values))
13335         {
13336           decl = TREE_VALUE (values);
13337
13338           /* [dcl.enum]: Following the closing brace of an enum-specifier,
13339              each enumerator has the type of its enumeration.  Prior to the
13340              closing brace, the type of each enumerator is the type of its
13341              initializing value.  */
13342           TREE_TYPE (decl) = enumtype;
13343
13344           /* Update the minimum and maximum values, if appropriate.  */
13345           value = DECL_INITIAL (decl);
13346           if (value == error_mark_node)
13347             value = integer_zero_node;
13348           /* Figure out what the minimum and maximum values of the
13349              enumerators are.  */
13350           if (!minnode)
13351             minnode = maxnode = value;
13352           else if (tree_int_cst_lt (maxnode, value))
13353             maxnode = value;
13354           else if (tree_int_cst_lt (value, minnode))
13355             minnode = value;
13356         }
13357     }
13358   else
13359     /* [dcl.enum]
13360
13361        If the enumerator-list is empty, the underlying type is as if
13362        the enumeration had a single enumerator with value 0.  */
13363     minnode = maxnode = integer_zero_node;
13364
13365   if (!fixed_underlying_type_p)
13366     {
13367       /* Compute the number of bits require to represent all values of the
13368          enumeration.  We must do this before the type of MINNODE and
13369          MAXNODE are transformed, since tree_int_cst_min_precision relies
13370          on the TREE_TYPE of the value it is passed.  */
13371       signop sgn = tree_int_cst_sgn (minnode) >= 0 ? UNSIGNED : SIGNED;
13372       int lowprec = tree_int_cst_min_precision (minnode, sgn);
13373       int highprec = tree_int_cst_min_precision (maxnode, sgn);
13374       int precision = MAX (lowprec, highprec);
13375       unsigned int itk;
13376       bool use_short_enum;
13377
13378       /* Determine the underlying type of the enumeration.
13379
13380          [dcl.enum]
13381
13382          The underlying type of an enumeration is an integral type that
13383          can represent all the enumerator values defined in the
13384          enumeration.  It is implementation-defined which integral type is
13385          used as the underlying type for an enumeration except that the
13386          underlying type shall not be larger than int unless the value of
13387          an enumerator cannot fit in an int or unsigned int.
13388
13389          We use "int" or an "unsigned int" as the underlying type, even if
13390          a smaller integral type would work, unless the user has
13391          explicitly requested that we use the smallest possible type.  The
13392          user can request that for all enumerations with a command line
13393          flag, or for just one enumeration with an attribute.  */
13394
13395       use_short_enum = flag_short_enums
13396         || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
13397
13398       /* If the precision of the type was specified with an attribute and it
13399          was too small, give an error.  Otherwise, use it.  */
13400       if (TYPE_PRECISION (enumtype))
13401         {
13402           if (precision > TYPE_PRECISION (enumtype))
13403             error ("specified mode too small for enumeral values");
13404           else
13405             {
13406               use_short_enum = true;
13407               precision = TYPE_PRECISION (enumtype);
13408             }
13409         }
13410
13411       for (itk = (use_short_enum ? itk_char : itk_int);
13412            itk != itk_none;
13413            itk++)
13414         {
13415           underlying_type = integer_types[itk];
13416           if (underlying_type != NULL_TREE
13417               && TYPE_PRECISION (underlying_type) >= precision
13418               && TYPE_SIGN (underlying_type) == sgn)
13419             break;
13420         }
13421       if (itk == itk_none)
13422         {
13423           /* DR 377
13424
13425              IF no integral type can represent all the enumerator values, the
13426              enumeration is ill-formed.  */
13427           error ("no integral type can represent all of the enumerator values "
13428                  "for %qT", enumtype);
13429           precision = TYPE_PRECISION (long_long_integer_type_node);
13430           underlying_type = integer_types[itk_unsigned_long_long];
13431         }
13432
13433       /* [dcl.enum]
13434
13435          The value of sizeof() applied to an enumeration type, an object
13436          of an enumeration type, or an enumerator, is the value of sizeof()
13437          applied to the underlying type.  */
13438       copy_type_enum (enumtype, underlying_type);
13439
13440       /* Compute the minimum and maximum values for the type.
13441
13442          [dcl.enum]
13443
13444          For an enumeration where emin is the smallest enumerator and emax
13445          is the largest, the values of the enumeration are the values of the
13446          underlying type in the range bmin to bmax, where bmin and bmax are,
13447          respectively, the smallest and largest values of the smallest bit-
13448          field that can store emin and emax.  */
13449
13450       /* The middle-end currently assumes that types with TYPE_PRECISION
13451          narrower than their underlying type are suitably zero or sign
13452          extended to fill their mode.  Similarly, it assumes that the front
13453          end assures that a value of a particular type must be within
13454          TYPE_MIN_VALUE and TYPE_MAX_VALUE.
13455
13456          We used to set these fields based on bmin and bmax, but that led
13457          to invalid assumptions like optimizing away bounds checking.  So
13458          now we just set the TYPE_PRECISION, TYPE_MIN_VALUE, and
13459          TYPE_MAX_VALUE to the values for the mode above and only restrict
13460          the ENUM_UNDERLYING_TYPE for the benefit of diagnostics.  */
13461       ENUM_UNDERLYING_TYPE (enumtype)
13462         = build_distinct_type_copy (underlying_type);
13463       TYPE_PRECISION (ENUM_UNDERLYING_TYPE (enumtype)) = precision;
13464       set_min_and_max_values_for_integral_type
13465         (ENUM_UNDERLYING_TYPE (enumtype), precision, sgn);
13466
13467       /* If -fstrict-enums, still constrain TYPE_MIN/MAX_VALUE.  */
13468       if (flag_strict_enums)
13469         set_min_and_max_values_for_integral_type (enumtype, precision, sgn);
13470     }
13471   else
13472     underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
13473
13474   /* Convert each of the enumerators to the type of the underlying
13475      type of the enumeration.  */
13476   for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
13477     {
13478       location_t saved_location;
13479
13480       decl = TREE_VALUE (values);
13481       saved_location = input_location;
13482       input_location = DECL_SOURCE_LOCATION (decl);
13483       if (fixed_underlying_type_p)
13484         /* If the enumeration type has a fixed underlying type, we
13485            already checked all of the enumerator values.  */
13486         value = DECL_INITIAL (decl);
13487       else
13488         value = perform_implicit_conversion (underlying_type,
13489                                              DECL_INITIAL (decl),
13490                                              tf_warning_or_error);
13491       input_location = saved_location;
13492
13493       /* Do not clobber shared ints.  */
13494       value = copy_node (value);
13495
13496       TREE_TYPE (value) = enumtype;
13497       DECL_INITIAL (decl) = value;
13498     }
13499
13500   /* Fix up all variant types of this enum type.  */
13501   for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
13502     TYPE_VALUES (t) = TYPE_VALUES (enumtype);
13503
13504   if (at_class_scope_p ()
13505       && COMPLETE_TYPE_P (current_class_type)
13506       && UNSCOPED_ENUM_P (enumtype))
13507     {
13508       insert_late_enum_def_into_classtype_sorted_fields (enumtype,
13509                                                          current_class_type);
13510       fixup_type_variants (current_class_type);
13511     }
13512
13513   /* Finish debugging output for this type.  */
13514   rest_of_type_compilation (enumtype, namespace_bindings_p ());
13515
13516   /* Each enumerator now has the type of its enumeration.  Clear the cache
13517      so that this change in types doesn't confuse us later on.  */
13518   clear_cv_and_fold_caches ();
13519 }
13520
13521 /* Finishes the enum type. This is called only the first time an
13522    enumeration is seen, be it opaque or odinary.
13523    ENUMTYPE is the type object.  */
13524
13525 void
13526 finish_enum (tree enumtype)
13527 {
13528   if (processing_template_decl)
13529     {
13530       if (at_function_scope_p ())
13531         add_stmt (build_min (TAG_DEFN, enumtype));
13532       return;
13533     }
13534
13535   /* If this is a forward declaration, there should not be any variants,
13536      though we can get a variant in the middle of an enum-specifier with
13537      wacky code like 'enum E { e = sizeof(const E*) };'  */
13538   gcc_assert (enumtype == TYPE_MAIN_VARIANT (enumtype)
13539               && (TYPE_VALUES (enumtype)
13540                   || !TYPE_NEXT_VARIANT (enumtype)));
13541 }
13542
13543 /* Build and install a CONST_DECL for an enumeration constant of the
13544    enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
13545    Apply ATTRIBUTES if available.  LOC is the location of NAME.
13546    Assignment of sequential values by default is handled here.  */
13547
13548 void
13549 build_enumerator (tree name, tree value, tree enumtype, tree attributes,
13550                   location_t loc)
13551 {
13552   tree decl;
13553   tree context;
13554   tree type;
13555
13556   /* scalar_constant_value will pull out this expression, so make sure
13557      it's folded as appropriate.  */
13558   if (processing_template_decl)
13559     value = fold_non_dependent_expr (value);
13560
13561   /* If the VALUE was erroneous, pretend it wasn't there; that will
13562      result in the enum being assigned the next value in sequence.  */
13563   if (value == error_mark_node)
13564     value = NULL_TREE;
13565
13566   /* Remove no-op casts from the value.  */
13567   if (value)
13568     STRIP_TYPE_NOPS (value);
13569
13570   if (! processing_template_decl)
13571     {
13572       /* Validate and default VALUE.  */
13573       if (value != NULL_TREE)
13574         {
13575           if (!ENUM_UNDERLYING_TYPE (enumtype))
13576             {
13577               tree tmp_value = build_expr_type_conversion (WANT_INT | WANT_ENUM,
13578                                                            value, true);
13579               if (tmp_value)
13580                 value = tmp_value;
13581             }
13582           else if (! INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P
13583                    (TREE_TYPE (value)))
13584             value = perform_implicit_conversion_flags
13585               (ENUM_UNDERLYING_TYPE (enumtype), value, tf_warning_or_error,
13586                LOOKUP_IMPLICIT | LOOKUP_NO_NARROWING);
13587
13588           if (value == error_mark_node)
13589             value = NULL_TREE;
13590
13591           if (value != NULL_TREE)
13592             {
13593               value = cxx_constant_value (value);
13594
13595               if (TREE_CODE (value) != INTEGER_CST
13596                   || ! INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (value)))
13597                 {
13598                   error ("enumerator value for %qD is not an integer constant",
13599                          name);
13600                   value = NULL_TREE;
13601                 }
13602             }
13603         }
13604
13605       /* Default based on previous value.  */
13606       if (value == NULL_TREE)
13607         {
13608           if (TYPE_VALUES (enumtype))
13609             {
13610               tree prev_value;
13611               bool overflowed;
13612
13613               /* C++03 7.2/4: If no initializer is specified for the first
13614                  enumerator, the type is an unspecified integral
13615                  type. Otherwise the type is the same as the type of the
13616                  initializing value of the preceding enumerator unless the
13617                  incremented value is not representable in that type, in
13618                  which case the type is an unspecified integral type
13619                  sufficient to contain the incremented value.  */
13620               prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
13621               if (error_operand_p (prev_value))
13622                 value = error_mark_node;
13623               else
13624                 {
13625                   tree type = TREE_TYPE (prev_value);
13626                   signop sgn = TYPE_SIGN (type);
13627                   widest_int wi = wi::add (wi::to_widest (prev_value), 1, sgn,
13628                                            &overflowed);
13629                   if (!overflowed)
13630                     {
13631                       bool pos = !wi::neg_p (wi, sgn);
13632                       if (!wi::fits_to_tree_p (wi, type))
13633                         {
13634                           unsigned int itk;
13635                           for (itk = itk_int; itk != itk_none; itk++)
13636                             {
13637                               type = integer_types[itk];
13638                               if (type != NULL_TREE
13639                                   && (pos || !TYPE_UNSIGNED (type))
13640                                   && wi::fits_to_tree_p (wi, type))
13641                                 break;
13642                             }
13643                           if (type && cxx_dialect < cxx11
13644                               && itk > itk_unsigned_long)
13645                             pedwarn (input_location, OPT_Wlong_long, pos ? "\
13646 incremented enumerator value is too large for %<unsigned long%>" :  "\
13647 incremented enumerator value is too large for %<long%>");
13648                         }
13649                       if (type == NULL_TREE)
13650                         overflowed = true;
13651                       else
13652                         value = wide_int_to_tree (type, wi);
13653                     }
13654
13655                   if (overflowed)
13656                     {
13657                       error ("overflow in enumeration values at %qD", name);
13658                       value = error_mark_node;
13659                     }
13660                 }
13661             }
13662           else
13663             value = integer_zero_node;
13664         }
13665
13666       /* Remove no-op casts from the value.  */
13667       STRIP_TYPE_NOPS (value);
13668
13669       /* If the underlying type of the enum is fixed, check whether
13670          the enumerator values fits in the underlying type.  If it
13671          does not fit, the program is ill-formed [C++0x dcl.enum].  */
13672       if (ENUM_UNDERLYING_TYPE (enumtype)
13673           && value
13674           && TREE_CODE (value) == INTEGER_CST)
13675         {
13676           if (!int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
13677             error ("enumerator value %E is outside the range of underlying "
13678                    "type %<%T%>", value, ENUM_UNDERLYING_TYPE (enumtype));
13679
13680           /* Convert the value to the appropriate type.  */
13681           value = fold_convert (ENUM_UNDERLYING_TYPE (enumtype), value);
13682         }
13683     }
13684
13685   /* C++ associates enums with global, function, or class declarations.  */
13686   context = current_scope ();
13687
13688   /* Build the actual enumeration constant.  Note that the enumeration
13689      constants have the underlying type of the enum (if it is fixed)
13690      or the type of their initializer (if the underlying type of the
13691      enum is not fixed):
13692
13693       [ C++0x dcl.enum ]
13694
13695         If the underlying type is fixed, the type of each enumerator
13696         prior to the closing brace is the underlying type; if the
13697         initializing value of an enumerator cannot be represented by
13698         the underlying type, the program is ill-formed. If the
13699         underlying type is not fixed, the type of each enumerator is
13700         the type of its initializing value.
13701
13702     If the underlying type is not fixed, it will be computed by
13703     finish_enum and we will reset the type of this enumerator.  Of
13704     course, if we're processing a template, there may be no value.  */
13705   type = value ? TREE_TYPE (value) : NULL_TREE;
13706
13707   decl = build_decl (loc, CONST_DECL, name, type);
13708   
13709   DECL_CONTEXT (decl) = enumtype;
13710   TREE_CONSTANT (decl) = 1;
13711   TREE_READONLY (decl) = 1;
13712   DECL_INITIAL (decl) = value;
13713
13714   if (attributes)
13715     cplus_decl_attributes (&decl, attributes, 0);
13716
13717   if (context && context == current_class_type && !SCOPED_ENUM_P (enumtype))
13718     /* In something like `struct S { enum E { i = 7 }; };' we put `i'
13719        on the TYPE_FIELDS list for `S'.  (That's so that you can say
13720        things like `S::i' later.)  */
13721     finish_member_declaration (decl);
13722   else
13723     pushdecl (decl);
13724
13725   /* Add this enumeration constant to the list for this type.  */
13726   TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
13727 }
13728
13729 /* Look for an enumerator with the given NAME within the enumeration
13730    type ENUMTYPE.  This routine is used primarily for qualified name
13731    lookup into an enumerator in C++0x, e.g.,
13732
13733      enum class Color { Red, Green, Blue };
13734
13735      Color color = Color::Red;
13736
13737    Returns the value corresponding to the enumerator, or
13738    NULL_TREE if no such enumerator was found.  */
13739 tree
13740 lookup_enumerator (tree enumtype, tree name)
13741 {
13742   tree e;
13743   gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
13744
13745   e = purpose_member (name, TYPE_VALUES (enumtype));
13746   return e? TREE_VALUE (e) : NULL_TREE;
13747 }
13748
13749 \f
13750 /* We're defining DECL.  Make sure that its type is OK.  */
13751
13752 static void
13753 check_function_type (tree decl, tree current_function_parms)
13754 {
13755   tree fntype = TREE_TYPE (decl);
13756   tree return_type = complete_type (TREE_TYPE (fntype));
13757
13758   /* In a function definition, arg types must be complete.  */
13759   require_complete_types_for_parms (current_function_parms);
13760
13761   if (dependent_type_p (return_type)
13762       || type_uses_auto (return_type))
13763     return;
13764   if (!COMPLETE_OR_VOID_TYPE_P (return_type)
13765       || (TYPE_FOR_JAVA (return_type) && MAYBE_CLASS_TYPE_P (return_type)))
13766     {
13767       tree args = TYPE_ARG_TYPES (fntype);
13768
13769       if (!COMPLETE_OR_VOID_TYPE_P (return_type))
13770         error ("return type %q#T is incomplete", return_type);
13771       else
13772         error ("return type has Java class type %q#T", return_type);
13773
13774       /* Make it return void instead.  */
13775       if (TREE_CODE (fntype) == METHOD_TYPE)
13776         fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
13777                                              void_type_node,
13778                                              TREE_CHAIN (args));
13779       else
13780         fntype = build_function_type (void_type_node, args);
13781       fntype
13782         = build_exception_variant (fntype,
13783                                    TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
13784       fntype = (cp_build_type_attribute_variant
13785                 (fntype, TYPE_ATTRIBUTES (TREE_TYPE (decl))));
13786       TREE_TYPE (decl) = fntype;
13787     }
13788   else
13789     abstract_virtuals_error (decl, TREE_TYPE (fntype));
13790 }
13791
13792 /* True iff FN is an implicitly-defined default constructor.  */
13793
13794 static bool
13795 implicit_default_ctor_p (tree fn)
13796 {
13797   return (DECL_CONSTRUCTOR_P (fn)
13798           && !user_provided_p (fn)
13799           && sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (fn)));
13800 }
13801
13802 /* Clobber the contents of *this to let the back end know that the object
13803    storage is dead when we enter the constructor or leave the destructor.  */
13804
13805 static tree
13806 build_clobber_this ()
13807 {
13808   /* Clobbering an empty base is pointless, and harmful if its one byte
13809      TYPE_SIZE overlays real data.  */
13810   if (is_empty_class (current_class_type))
13811     return void_node;
13812
13813   /* If we have virtual bases, clobber the whole object, but only if we're in
13814      charge.  If we don't have virtual bases, clobber the as-base type so we
13815      don't mess with tail padding.  */
13816   bool vbases = CLASSTYPE_VBASECLASSES (current_class_type);
13817
13818   tree ctype = current_class_type;
13819   if (!vbases)
13820     ctype = CLASSTYPE_AS_BASE (ctype);
13821
13822   tree clobber = build_constructor (ctype, NULL);
13823   TREE_THIS_VOLATILE (clobber) = true;
13824
13825   tree thisref = current_class_ref;
13826   if (ctype != current_class_type)
13827     {
13828       thisref = build_nop (build_reference_type (ctype), current_class_ptr);
13829       thisref = convert_from_reference (thisref);
13830     }
13831
13832   tree exprstmt = build2 (MODIFY_EXPR, void_type_node, thisref, clobber);
13833   if (vbases)
13834     exprstmt = build_if_in_charge (exprstmt);
13835
13836   return exprstmt;
13837 }
13838
13839 /* Create the FUNCTION_DECL for a function definition.
13840    DECLSPECS and DECLARATOR are the parts of the declaration;
13841    they describe the function's name and the type it returns,
13842    but twisted together in a fashion that parallels the syntax of C.
13843
13844    FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
13845    DECLARATOR is really the DECL for the function we are about to
13846    process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
13847    indicating that the function is an inline defined in-class.
13848
13849    This function creates a binding context for the function body
13850    as well as setting up the FUNCTION_DECL in current_function_decl.
13851
13852    For C++, we must first check whether that datum makes any sense.
13853    For example, "class A local_a(1,2);" means that variable local_a
13854    is an aggregate of type A, which should have a constructor
13855    applied to it with the argument list [1, 2].
13856
13857    On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
13858    or may be a BLOCK if the function has been defined previously
13859    in this translation unit.  On exit, DECL_INITIAL (decl1) will be
13860    error_mark_node if the function has never been defined, or
13861    a BLOCK if the function has been defined somewhere.  */
13862
13863 bool
13864 start_preparsed_function (tree decl1, tree attrs, int flags)
13865 {
13866   tree ctype = NULL_TREE;
13867   tree fntype;
13868   tree restype;
13869   int doing_friend = 0;
13870   cp_binding_level *bl;
13871   tree current_function_parms;
13872   struct c_fileinfo *finfo
13873     = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
13874   bool honor_interface;
13875
13876   /* Sanity check.  */
13877   gcc_assert (VOID_TYPE_P (TREE_VALUE (void_list_node)));
13878   gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
13879
13880   fntype = TREE_TYPE (decl1);
13881   if (TREE_CODE (fntype) == METHOD_TYPE)
13882     ctype = TYPE_METHOD_BASETYPE (fntype);
13883
13884   /* ISO C++ 11.4/5.  A friend function defined in a class is in
13885      the (lexical) scope of the class in which it is defined.  */
13886   if (!ctype && DECL_FRIEND_P (decl1))
13887     {
13888       ctype = DECL_FRIEND_CONTEXT (decl1);
13889
13890       /* CTYPE could be null here if we're dealing with a template;
13891          for example, `inline friend float foo()' inside a template
13892          will have no CTYPE set.  */
13893       if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
13894         ctype = NULL_TREE;
13895       else
13896         doing_friend = 1;
13897     }
13898
13899   if (DECL_DECLARED_INLINE_P (decl1)
13900       && lookup_attribute ("noinline", attrs))
13901     warning_at (DECL_SOURCE_LOCATION (decl1), 0,
13902                 "inline function %qD given attribute noinline", decl1);
13903
13904   /* Handle gnu_inline attribute.  */
13905   if (GNU_INLINE_P (decl1))
13906     {
13907       DECL_EXTERNAL (decl1) = 1;
13908       DECL_NOT_REALLY_EXTERN (decl1) = 0;
13909       DECL_INTERFACE_KNOWN (decl1) = 1;
13910       DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
13911     }
13912
13913   if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
13914     /* This is a constructor, we must ensure that any default args
13915        introduced by this definition are propagated to the clones
13916        now. The clones are used directly in overload resolution.  */
13917     adjust_clone_args (decl1);
13918
13919   /* Sometimes we don't notice that a function is a static member, and
13920      build a METHOD_TYPE for it.  Fix that up now.  */
13921   gcc_assert (!(ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
13922                 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE));
13923
13924   /* Set up current_class_type, and enter the scope of the class, if
13925      appropriate.  */
13926   if (ctype)
13927     push_nested_class (ctype);
13928   else if (DECL_STATIC_FUNCTION_P (decl1))
13929     push_nested_class (DECL_CONTEXT (decl1));
13930
13931   /* Now that we have entered the scope of the class, we must restore
13932      the bindings for any template parameters surrounding DECL1, if it
13933      is an inline member template.  (Order is important; consider the
13934      case where a template parameter has the same name as a field of
13935      the class.)  It is not until after this point that
13936      PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly.  */
13937   if (flags & SF_INCLASS_INLINE)
13938     maybe_begin_member_template_processing (decl1);
13939
13940   /* Effective C++ rule 15.  */
13941   if (warn_ecpp
13942       && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
13943       && VOID_TYPE_P (TREE_TYPE (fntype)))
13944     warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
13945
13946   /* Make the init_value nonzero so pushdecl knows this is not tentative.
13947      error_mark_node is replaced below (in poplevel) with the BLOCK.  */
13948   if (!DECL_INITIAL (decl1))
13949     DECL_INITIAL (decl1) = error_mark_node;
13950
13951   /* This function exists in static storage.
13952      (This does not mean `static' in the C sense!)  */
13953   TREE_STATIC (decl1) = 1;
13954
13955   /* We must call push_template_decl after current_class_type is set
13956      up.  (If we are processing inline definitions after exiting a
13957      class scope, current_class_type will be NULL_TREE until set above
13958      by push_nested_class.)  */
13959   if (processing_template_decl)
13960     {
13961       tree newdecl1 = push_template_decl (decl1);
13962       if (newdecl1 == error_mark_node)
13963         {
13964           if (ctype || DECL_STATIC_FUNCTION_P (decl1))
13965             pop_nested_class ();
13966           return false;
13967         }
13968       decl1 = newdecl1;
13969     }
13970
13971   /* We are now in the scope of the function being defined.  */
13972   current_function_decl = decl1;
13973
13974   /* Save the parm names or decls from this function's declarator
13975      where store_parm_decls will find them.  */
13976   current_function_parms = DECL_ARGUMENTS (decl1);
13977
13978   /* Make sure the parameter and return types are reasonable.  When
13979      you declare a function, these types can be incomplete, but they
13980      must be complete when you define the function.  */
13981   check_function_type (decl1, current_function_parms);
13982
13983   /* Build the return declaration for the function.  */
13984   restype = TREE_TYPE (fntype);
13985
13986   if (DECL_RESULT (decl1) == NULL_TREE)
13987     {
13988       tree resdecl;
13989
13990       resdecl = build_decl (input_location, RESULT_DECL, 0, restype);
13991       DECL_ARTIFICIAL (resdecl) = 1;
13992       DECL_IGNORED_P (resdecl) = 1;
13993       DECL_RESULT (decl1) = resdecl;
13994
13995       cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
13996     }
13997
13998   /* Let the user know we're compiling this function.  */
13999   announce_function (decl1);
14000
14001   /* Record the decl so that the function name is defined.
14002      If we already have a decl for this name, and it is a FUNCTION_DECL,
14003      use the old decl.  */
14004   if (!processing_template_decl && !(flags & SF_PRE_PARSED))
14005     {
14006       /* A specialization is not used to guide overload resolution.  */
14007       if (!DECL_FUNCTION_MEMBER_P (decl1)
14008           && !(DECL_USE_TEMPLATE (decl1) &&
14009                PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
14010         {
14011           tree olddecl = pushdecl (decl1);
14012
14013           if (olddecl == error_mark_node)
14014             /* If something went wrong when registering the declaration,
14015                use DECL1; we have to have a FUNCTION_DECL to use when
14016                parsing the body of the function.  */
14017             ;
14018           else
14019             {
14020               /* Otherwise, OLDDECL is either a previous declaration
14021                  of the same function or DECL1 itself.  */
14022
14023               if (warn_missing_declarations
14024                   && olddecl == decl1
14025                   && !DECL_MAIN_P (decl1)
14026                   && TREE_PUBLIC (decl1)
14027                   && !DECL_DECLARED_INLINE_P (decl1))
14028                 {
14029                   tree context;
14030
14031                   /* Check whether DECL1 is in an anonymous
14032                      namespace.  */
14033                   for (context = DECL_CONTEXT (decl1);
14034                        context;
14035                        context = DECL_CONTEXT (context))
14036                     {
14037                       if (TREE_CODE (context) == NAMESPACE_DECL
14038                           && DECL_NAME (context) == NULL_TREE)
14039                         break;
14040                     }
14041
14042                   if (context == NULL)
14043                     warning_at (DECL_SOURCE_LOCATION (decl1),
14044                                 OPT_Wmissing_declarations,
14045                                 "no previous declaration for %qD", decl1);
14046                 }
14047
14048               decl1 = olddecl;
14049             }
14050         }
14051       else
14052         {
14053           /* We need to set the DECL_CONTEXT.  */
14054           if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
14055             DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
14056         }
14057       fntype = TREE_TYPE (decl1);
14058       restype = TREE_TYPE (fntype);
14059
14060       /* If #pragma weak applies, mark the decl appropriately now.
14061          The pragma only applies to global functions.  Because
14062          determining whether or not the #pragma applies involves
14063          computing the mangled name for the declaration, we cannot
14064          apply the pragma until after we have merged this declaration
14065          with any previous declarations; if the original declaration
14066          has a linkage specification, that specification applies to
14067          the definition as well, and may affect the mangled name.  */
14068       if (DECL_FILE_SCOPE_P (decl1))
14069         maybe_apply_pragma_weak (decl1);
14070     }
14071
14072   /* Reset this in case the call to pushdecl changed it.  */
14073   current_function_decl = decl1;
14074
14075   gcc_assert (DECL_INITIAL (decl1));
14076
14077   /* This function may already have been parsed, in which case just
14078      return; our caller will skip over the body without parsing.  */
14079   if (DECL_INITIAL (decl1) != error_mark_node)
14080     return true;
14081
14082   /* Initialize RTL machinery.  We cannot do this until
14083      CURRENT_FUNCTION_DECL and DECL_RESULT are set up.  We do this
14084      even when processing a template; this is how we get
14085      CFUN set up, and our per-function variables initialized.
14086      FIXME factor out the non-RTL stuff.  */
14087   bl = current_binding_level;
14088   allocate_struct_function (decl1, processing_template_decl);
14089
14090   /* Initialize the language data structures.  Whenever we start
14091      a new function, we destroy temporaries in the usual way.  */
14092   cfun->language = ggc_cleared_alloc<language_function> ();
14093   current_stmt_tree ()->stmts_are_full_exprs_p = 1;
14094   current_binding_level = bl;
14095
14096   if (!processing_template_decl && type_uses_auto (restype))
14097     {
14098       FNDECL_USED_AUTO (decl1) = true;
14099       current_function_auto_return_pattern = restype;
14100     }
14101
14102   /* Start the statement-tree, start the tree now.  */
14103   DECL_SAVED_TREE (decl1) = push_stmt_list ();
14104
14105   /* If we are (erroneously) defining a function that we have already
14106      defined before, wipe out what we knew before.  */
14107   if (!DECL_PENDING_INLINE_P (decl1))
14108     DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
14109
14110   if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
14111     {
14112       /* We know that this was set up by `grokclassfn'.  We do not
14113          wait until `store_parm_decls', since evil parse errors may
14114          never get us to that point.  Here we keep the consistency
14115          between `current_class_type' and `current_class_ptr'.  */
14116       tree t = DECL_ARGUMENTS (decl1);
14117
14118       gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
14119       gcc_assert (TYPE_PTR_P (TREE_TYPE (t)));
14120
14121       cp_function_chain->x_current_class_ref
14122         = cp_build_indirect_ref (t, RO_NULL, tf_warning_or_error);
14123       /* Set this second to avoid shortcut in cp_build_indirect_ref.  */
14124       cp_function_chain->x_current_class_ptr = t;
14125
14126       /* Constructors and destructors need to know whether they're "in
14127          charge" of initializing virtual base classes.  */
14128       t = DECL_CHAIN (t);
14129       if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
14130         {
14131           current_in_charge_parm = t;
14132           t = DECL_CHAIN (t);
14133         }
14134       if (DECL_HAS_VTT_PARM_P (decl1))
14135         {
14136           gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
14137           current_vtt_parm = t;
14138         }
14139     }
14140
14141   honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
14142                      /* Implicitly-defined methods (like the
14143                         destructor for a class in which no destructor
14144                         is explicitly declared) must not be defined
14145                         until their definition is needed.  So, we
14146                         ignore interface specifications for
14147                         compiler-generated functions.  */
14148                      && !DECL_ARTIFICIAL (decl1));
14149
14150   if (processing_template_decl)
14151     /* Don't mess with interface flags.  */;
14152   else if (DECL_INTERFACE_KNOWN (decl1))
14153     {
14154       tree ctx = decl_function_context (decl1);
14155
14156       if (DECL_NOT_REALLY_EXTERN (decl1))
14157         DECL_EXTERNAL (decl1) = 0;
14158
14159       if (ctx != NULL_TREE && vague_linkage_p (ctx))
14160         /* This is a function in a local class in an extern inline
14161            or template function.  */
14162         comdat_linkage (decl1);
14163     }
14164   /* If this function belongs to an interface, it is public.
14165      If it belongs to someone else's interface, it is also external.
14166      This only affects inlines and template instantiations.  */
14167   else if (!finfo->interface_unknown && honor_interface)
14168     {
14169       if (DECL_DECLARED_INLINE_P (decl1)
14170           || DECL_TEMPLATE_INSTANTIATION (decl1))
14171         {
14172           DECL_EXTERNAL (decl1)
14173             = (finfo->interface_only
14174                || (DECL_DECLARED_INLINE_P (decl1)
14175                    && ! flag_implement_inlines
14176                    && !DECL_VINDEX (decl1)));
14177
14178           /* For WIN32 we also want to put these in linkonce sections.  */
14179           maybe_make_one_only (decl1);
14180         }
14181       else
14182         DECL_EXTERNAL (decl1) = 0;
14183       DECL_INTERFACE_KNOWN (decl1) = 1;
14184       /* If this function is in an interface implemented in this file,
14185          make sure that the back end knows to emit this function
14186          here.  */
14187       if (!DECL_EXTERNAL (decl1))
14188         mark_needed (decl1);
14189     }
14190   else if (finfo->interface_unknown && finfo->interface_only
14191            && honor_interface)
14192     {
14193       /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
14194          interface, we will have both finfo->interface_unknown and
14195          finfo->interface_only set.  In that case, we don't want to
14196          use the normal heuristics because someone will supply a
14197          #pragma implementation elsewhere, and deducing it here would
14198          produce a conflict.  */
14199       comdat_linkage (decl1);
14200       DECL_EXTERNAL (decl1) = 0;
14201       DECL_INTERFACE_KNOWN (decl1) = 1;
14202       DECL_DEFER_OUTPUT (decl1) = 1;
14203     }
14204   else
14205     {
14206       /* This is a definition, not a reference.
14207          So clear DECL_EXTERNAL, unless this is a GNU extern inline.  */
14208       if (!GNU_INLINE_P (decl1))
14209         DECL_EXTERNAL (decl1) = 0;
14210
14211       if ((DECL_DECLARED_INLINE_P (decl1)
14212            || DECL_TEMPLATE_INSTANTIATION (decl1))
14213           && ! DECL_INTERFACE_KNOWN (decl1))
14214         DECL_DEFER_OUTPUT (decl1) = 1;
14215       else
14216         DECL_INTERFACE_KNOWN (decl1) = 1;
14217     }
14218
14219   /* Determine the ELF visibility attribute for the function.  We must not
14220      do this before calling "pushdecl", as we must allow "duplicate_decls"
14221      to merge any attributes appropriately.  We also need to wait until
14222      linkage is set.  */
14223   if (!DECL_CLONED_FUNCTION_P (decl1))
14224     determine_visibility (decl1);
14225
14226   if (!processing_template_decl)
14227     maybe_instantiate_noexcept (decl1);
14228
14229   begin_scope (sk_function_parms, decl1);
14230
14231   ++function_depth;
14232
14233   if (DECL_DESTRUCTOR_P (decl1)
14234       || (DECL_CONSTRUCTOR_P (decl1)
14235           && targetm.cxx.cdtor_returns_this ()))
14236     cdtor_label = create_artificial_label (input_location);
14237
14238   start_fname_decls ();
14239
14240   store_parm_decls (current_function_parms);
14241
14242   if (!processing_template_decl
14243       && (flag_lifetime_dse > 1)
14244       && DECL_CONSTRUCTOR_P (decl1)
14245       && !DECL_CLONED_FUNCTION_P (decl1)
14246       /* Clobbering an empty base is harmful if it overlays real data.  */
14247       && !is_empty_class (current_class_type)
14248       /* We can't clobber safely for an implicitly-defined default constructor
14249          because part of the initialization might happen before we enter the
14250          constructor, via AGGR_INIT_ZERO_FIRST (c++/68006).  */
14251       && !implicit_default_ctor_p (decl1))
14252     finish_expr_stmt (build_clobber_this ());
14253
14254   if (!processing_template_decl
14255       && DECL_CONSTRUCTOR_P (decl1)
14256       && (flag_sanitize & SANITIZE_VPTR)
14257       && !DECL_CLONED_FUNCTION_P (decl1)
14258       && !implicit_default_ctor_p (decl1))
14259     cp_ubsan_maybe_initialize_vtbl_ptrs (current_class_ptr);
14260
14261   return true;
14262 }
14263
14264
14265 /* Like start_preparsed_function, except that instead of a
14266    FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
14267
14268    Returns true on success.  If the DECLARATOR is not suitable
14269    for a function, we return false, which tells the parser to
14270    skip the entire function.  */
14271
14272 bool
14273 start_function (cp_decl_specifier_seq *declspecs,
14274                 const cp_declarator *declarator,
14275                 tree attrs)
14276 {
14277   tree decl1;
14278
14279   decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
14280   invoke_plugin_callbacks (PLUGIN_START_PARSE_FUNCTION, decl1);
14281   if (decl1 == error_mark_node)
14282     return false;
14283   /* If the declarator is not suitable for a function definition,
14284      cause a syntax error.  */
14285   if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
14286     {
14287       error ("invalid function declaration");
14288       return false;
14289     }
14290
14291   if (DECL_MAIN_P (decl1))
14292     /* main must return int.  grokfndecl should have corrected it
14293        (and issued a diagnostic) if the user got it wrong.  */
14294     gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
14295                              integer_type_node));
14296
14297   return start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
14298 }
14299 \f
14300 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
14301    FN.  */
14302
14303 static bool
14304 use_eh_spec_block (tree fn)
14305 {
14306   return (flag_exceptions && flag_enforce_eh_specs
14307           && !processing_template_decl
14308           && !type_throw_all_p (TREE_TYPE (fn))
14309           /* We insert the EH_SPEC_BLOCK only in the original
14310              function; then, it is copied automatically to the
14311              clones.  */
14312           && !DECL_CLONED_FUNCTION_P (fn)
14313           /* Implicitly-generated constructors and destructors have
14314              exception specifications.  However, those specifications
14315              are the union of the possible exceptions specified by the
14316              constructors/destructors for bases and members, so no
14317              unallowed exception will ever reach this function.  By
14318              not creating the EH_SPEC_BLOCK we save a little memory,
14319              and we avoid spurious warnings about unreachable
14320              code.  */
14321           && !DECL_DEFAULTED_FN (fn));
14322 }
14323
14324 /* Store the parameter declarations into the current function declaration.
14325    This is called after parsing the parameter declarations, before
14326    digesting the body of the function.
14327
14328    Also install to binding contour return value identifier, if any.  */
14329
14330 static void
14331 store_parm_decls (tree current_function_parms)
14332 {
14333   tree fndecl = current_function_decl;
14334   tree parm;
14335
14336   /* This is a chain of any other decls that came in among the parm
14337      declarations.  If a parm is declared with  enum {foo, bar} x;
14338      then CONST_DECLs for foo and bar are put here.  */
14339   tree nonparms = NULL_TREE;
14340
14341   if (current_function_parms)
14342     {
14343       /* This case is when the function was defined with an ANSI prototype.
14344          The parms already have decls, so we need not do anything here
14345          except record them as in effect
14346          and complain if any redundant old-style parm decls were written.  */
14347
14348       tree specparms = current_function_parms;
14349       tree next;
14350
14351       /* Must clear this because it might contain TYPE_DECLs declared
14352              at class level.  */
14353       current_binding_level->names = NULL;
14354
14355       /* If we're doing semantic analysis, then we'll call pushdecl
14356              for each of these.  We must do them in reverse order so that
14357              they end in the correct forward order.  */
14358       specparms = nreverse (specparms);
14359
14360       for (parm = specparms; parm; parm = next)
14361         {
14362           next = DECL_CHAIN (parm);
14363           if (TREE_CODE (parm) == PARM_DECL)
14364             {
14365               if (DECL_NAME (parm) == NULL_TREE
14366                   || !VOID_TYPE_P (parm))
14367                 pushdecl (parm);
14368               else
14369                 error ("parameter %qD declared void", parm);
14370             }
14371           else
14372             {
14373               /* If we find an enum constant or a type tag,
14374                  put it aside for the moment.  */
14375               TREE_CHAIN (parm) = NULL_TREE;
14376               nonparms = chainon (nonparms, parm);
14377             }
14378         }
14379
14380       /* Get the decls in their original chain order and record in the
14381          function.  This is all and only the PARM_DECLs that were
14382          pushed into scope by the loop above.  */
14383       DECL_ARGUMENTS (fndecl) = getdecls ();
14384     }
14385   else
14386     DECL_ARGUMENTS (fndecl) = NULL_TREE;
14387
14388   /* Now store the final chain of decls for the arguments
14389      as the decl-chain of the current lexical scope.
14390      Put the enumerators in as well, at the front so that
14391      DECL_ARGUMENTS is not modified.  */
14392   current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
14393
14394   if (use_eh_spec_block (current_function_decl))
14395     current_eh_spec_block = begin_eh_spec_block ();
14396 }
14397
14398 \f
14399 /* We have finished doing semantic analysis on DECL, but have not yet
14400    generated RTL for its body.  Save away our current state, so that
14401    when we want to generate RTL later we know what to do.  */
14402
14403 static void
14404 save_function_data (tree decl)
14405 {
14406   struct language_function *f;
14407
14408   /* Save the language-specific per-function data so that we can
14409      get it back when we really expand this function.  */
14410   gcc_assert (!DECL_PENDING_INLINE_P (decl));
14411
14412   /* Make a copy.  */
14413   f = ggc_alloc<language_function> ();
14414   memcpy (f, cp_function_chain, sizeof (struct language_function));
14415   DECL_SAVED_FUNCTION_DATA (decl) = f;
14416
14417   /* Clear out the bits we don't need.  */
14418   f->base.x_stmt_tree.x_cur_stmt_list = NULL;
14419   f->bindings = NULL;
14420   f->x_local_names = NULL;
14421   f->base.local_typedefs = NULL;
14422 }
14423
14424
14425 /* Set the return value of the constructor (if present).  */
14426
14427 static void
14428 finish_constructor_body (void)
14429 {
14430   tree val;
14431   tree exprstmt;
14432
14433   if (targetm.cxx.cdtor_returns_this ()
14434       && (! TYPE_FOR_JAVA (current_class_type)))
14435     {
14436       /* Any return from a constructor will end up here.  */
14437       add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
14438
14439       val = DECL_ARGUMENTS (current_function_decl);
14440       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
14441                     DECL_RESULT (current_function_decl), val);
14442       /* Return the address of the object.  */
14443       exprstmt = build_stmt (input_location, RETURN_EXPR, val);
14444       add_stmt (exprstmt);
14445     }
14446 }
14447
14448 /* Do all the processing for the beginning of a destructor; set up the
14449    vtable pointers and cleanups for bases and members.  */
14450
14451 static void
14452 begin_destructor_body (void)
14453 {
14454   tree compound_stmt;
14455
14456   /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
14457      issued an error message.  We still want to try to process the
14458      body of the function, but initialize_vtbl_ptrs will crash if
14459      TYPE_BINFO is NULL.  */
14460   if (COMPLETE_TYPE_P (current_class_type))
14461     {
14462       compound_stmt = begin_compound_stmt (0);
14463       /* Make all virtual function table pointers in non-virtual base
14464          classes point to CURRENT_CLASS_TYPE's virtual function
14465          tables.  */
14466       initialize_vtbl_ptrs (current_class_ptr);
14467       finish_compound_stmt (compound_stmt);
14468
14469       if (flag_lifetime_dse
14470           /* Clobbering an empty base is harmful if it overlays real data.  */
14471           && !is_empty_class (current_class_type))
14472         finish_decl_cleanup (NULL_TREE, build_clobber_this ());
14473
14474       /* And insert cleanups for our bases and members so that they
14475          will be properly destroyed if we throw.  */
14476       push_base_cleanups ();
14477     }
14478 }
14479
14480 /* At the end of every destructor we generate code to delete the object if
14481    necessary.  Do that now.  */
14482
14483 static void
14484 finish_destructor_body (void)
14485 {
14486   tree exprstmt;
14487
14488   /* Any return from a destructor will end up here; that way all base
14489      and member cleanups will be run when the function returns.  */
14490   add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
14491
14492   if (targetm.cxx.cdtor_returns_this ())
14493     {
14494       tree val;
14495
14496       val = DECL_ARGUMENTS (current_function_decl);
14497       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
14498                     DECL_RESULT (current_function_decl), val);
14499       /* Return the address of the object.  */
14500       exprstmt = build_stmt (input_location, RETURN_EXPR, val);
14501       add_stmt (exprstmt);
14502     }
14503 }
14504
14505 /* Do the necessary processing for the beginning of a function body, which
14506    in this case includes member-initializers, but not the catch clauses of
14507    a function-try-block.  Currently, this means opening a binding level
14508    for the member-initializers (in a ctor), member cleanups (in a dtor),
14509    and capture proxies (in a lambda operator()).  */
14510
14511 tree
14512 begin_function_body (void)
14513 {
14514   tree stmt;
14515
14516   if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
14517     return NULL_TREE;
14518
14519   if (processing_template_decl)
14520     /* Do nothing now.  */;
14521   else
14522     /* Always keep the BLOCK node associated with the outermost pair of
14523        curly braces of a function.  These are needed for correct
14524        operation of dwarfout.c.  */
14525     keep_next_level (true);
14526
14527   stmt = begin_compound_stmt (BCS_FN_BODY);
14528
14529   if (processing_template_decl)
14530     /* Do nothing now.  */;
14531   else if (DECL_DESTRUCTOR_P (current_function_decl))
14532     begin_destructor_body ();
14533
14534   return stmt;
14535 }
14536
14537 /* Do the processing for the end of a function body.  Currently, this means
14538    closing out the cleanups for fully-constructed bases and members, and in
14539    the case of the destructor, deleting the object if desired.  Again, this
14540    is only meaningful for [cd]tors, since they are the only functions where
14541    there is a significant distinction between the main body and any
14542    function catch clauses.  Handling, say, main() return semantics here
14543    would be wrong, as flowing off the end of a function catch clause for
14544    main() would also need to return 0.  */
14545
14546 void
14547 finish_function_body (tree compstmt)
14548 {
14549   if (compstmt == NULL_TREE)
14550     return;
14551
14552   /* Close the block.  */
14553   finish_compound_stmt (compstmt);
14554
14555   if (processing_template_decl)
14556     /* Do nothing now.  */;
14557   else if (DECL_CONSTRUCTOR_P (current_function_decl))
14558     finish_constructor_body ();
14559   else if (DECL_DESTRUCTOR_P (current_function_decl))
14560     finish_destructor_body ();
14561 }
14562
14563 /* Given a function, returns the BLOCK corresponding to the outermost level
14564    of curly braces, skipping the artificial block created for constructor
14565    initializers.  */
14566
14567 tree
14568 outer_curly_brace_block (tree fndecl)
14569 {
14570   tree block = DECL_INITIAL (fndecl);
14571   if (BLOCK_OUTER_CURLY_BRACE_P (block))
14572     return block;
14573   block = BLOCK_SUBBLOCKS (block);
14574   if (BLOCK_OUTER_CURLY_BRACE_P (block))
14575     return block;
14576   block = BLOCK_SUBBLOCKS (block);
14577   gcc_assert (BLOCK_OUTER_CURLY_BRACE_P (block));
14578   return block;
14579 }
14580
14581 /* If FNDECL is a class's key method, add the class to the list of
14582    keyed classes that should be emitted.  */
14583
14584 static void
14585 record_key_method_defined (tree fndecl)
14586 {
14587   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
14588       && DECL_VIRTUAL_P (fndecl)
14589       && !processing_template_decl)
14590     {
14591       tree fnclass = DECL_CONTEXT (fndecl);
14592       if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
14593         keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
14594     }
14595 }
14596
14597 /* Subroutine of finish_function.
14598    Save the body of constexpr functions for possible
14599    future compile time evaluation.  */
14600
14601 static void
14602 maybe_save_function_definition (tree fun)
14603 {
14604   if (!processing_template_decl
14605       && DECL_DECLARED_CONSTEXPR_P (fun)
14606       && !cp_function_chain->invalid_constexpr
14607       && !DECL_CLONED_FUNCTION_P (fun))
14608     register_constexpr_fundef (fun, DECL_SAVED_TREE (fun));
14609 }
14610
14611 /* Finish up a function declaration and compile that function
14612    all the way to assembler language output.  The free the storage
14613    for the function definition.
14614
14615    FLAGS is a bitwise or of the following values:
14616      2 - INCLASS_INLINE
14617        We just finished processing the body of an in-class inline
14618        function definition.  (This processing will have taken place
14619        after the class definition is complete.)  */
14620
14621 tree
14622 finish_function (int flags)
14623 {
14624   tree fndecl = current_function_decl;
14625   tree fntype, ctype = NULL_TREE;
14626   int inclass_inline = (flags & 2) != 0;
14627
14628   /* When we get some parse errors, we can end up without a
14629      current_function_decl, so cope.  */
14630   if (fndecl == NULL_TREE)
14631     return error_mark_node;
14632
14633   if (c_dialect_objc ())
14634     objc_finish_function ();
14635
14636   record_key_method_defined (fndecl);
14637
14638   fntype = TREE_TYPE (fndecl);
14639
14640   /*  TREE_READONLY (fndecl) = 1;
14641       This caused &foo to be of type ptr-to-const-function
14642       which then got a warning when stored in a ptr-to-function variable.  */
14643
14644   gcc_assert (building_stmt_list_p ());
14645   /* The current function is being defined, so its DECL_INITIAL should
14646      be set, and unless there's a multiple definition, it should be
14647      error_mark_node.  */
14648   gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
14649
14650   /* For a cloned function, we've already got all the code we need;
14651      there's no need to add any extra bits.  */
14652   if (!DECL_CLONED_FUNCTION_P (fndecl))
14653     {
14654       /* Make it so that `main' always returns 0 by default.  */
14655       if (DECL_MAIN_P (current_function_decl))
14656         finish_return_stmt (integer_zero_node);
14657
14658       if (use_eh_spec_block (current_function_decl))
14659         finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
14660                               (TREE_TYPE (current_function_decl)),
14661                               current_eh_spec_block);
14662     }
14663
14664   /* If we're saving up tree structure, tie off the function now.  */
14665   DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
14666
14667   if (fn_contains_cilk_spawn_p (cfun) && !processing_template_decl)
14668     cfun->cilk_frame_decl = insert_cilk_frame (fndecl);
14669
14670   finish_fname_decls ();
14671
14672   /* If this function can't throw any exceptions, remember that.  */
14673   if (!processing_template_decl
14674       && !cp_function_chain->can_throw
14675       && !flag_non_call_exceptions
14676       && !decl_replaceable_p (fndecl))
14677     TREE_NOTHROW (fndecl) = 1;
14678
14679   /* This must come after expand_function_end because cleanups might
14680      have declarations (from inline functions) that need to go into
14681      this function's blocks.  */
14682
14683   /* If the current binding level isn't the outermost binding level
14684      for this function, either there is a bug, or we have experienced
14685      syntax errors and the statement tree is malformed.  */
14686   if (current_binding_level->kind != sk_function_parms)
14687     {
14688       /* Make sure we have already experienced errors.  */
14689       gcc_assert (errorcount);
14690
14691       /* Throw away the broken statement tree and extra binding
14692          levels.  */
14693       DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
14694
14695       while (current_binding_level->kind != sk_function_parms)
14696         {
14697           if (current_binding_level->kind == sk_class)
14698             pop_nested_class ();
14699           else
14700             poplevel (0, 0, 0);
14701         }
14702     }
14703   poplevel (1, 0, 1);
14704
14705   /* Statements should always be full-expressions at the outermost set
14706      of curly braces for a function.  */
14707   gcc_assert (stmts_are_full_exprs_p ());
14708
14709   /* If there are no return statements in a function with auto return type,
14710      the return type is void.  But if the declared type is something like
14711      auto*, this is an error.  */
14712   if (!processing_template_decl && FNDECL_USED_AUTO (fndecl)
14713       && TREE_TYPE (fntype) == current_function_auto_return_pattern)
14714     {
14715       if (!is_auto (current_function_auto_return_pattern)
14716           && !current_function_returns_value && !current_function_returns_null)
14717         {
14718           error ("no return statements in function returning %qT",
14719                  current_function_auto_return_pattern);
14720           inform (input_location, "only plain %<auto%> return type can be "
14721                   "deduced to %<void%>");
14722         }
14723       apply_deduced_return_type (fndecl, void_type_node);
14724       fntype = TREE_TYPE (fndecl);
14725     }
14726
14727   // If this is a concept, check that the definition is reasonable.
14728   if (DECL_DECLARED_CONCEPT_P (fndecl))
14729     check_function_concept (fndecl);
14730
14731   /* Save constexpr function body before it gets munged by
14732      the NRV transformation.   */
14733   maybe_save_function_definition (fndecl);
14734
14735   /* Invoke the pre-genericize plugin before we start munging things.  */
14736   if (!processing_template_decl)
14737     invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
14738
14739   /* Perform delayed folding before NRV transformation.  */
14740   if (!processing_template_decl)
14741     cp_fold_function (fndecl);
14742
14743   /* Set up the named return value optimization, if we can.  Candidate
14744      variables are selected in check_return_expr.  */
14745   if (current_function_return_value)
14746     {
14747       tree r = current_function_return_value;
14748       tree outer;
14749
14750       if (r != error_mark_node
14751           /* This is only worth doing for fns that return in memory--and
14752              simpler, since we don't have to worry about promoted modes.  */
14753           && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
14754           /* Only allow this for variables declared in the outer scope of
14755              the function so we know that their lifetime always ends with a
14756              return; see g++.dg/opt/nrv6.C.  We could be more flexible if
14757              we were to do this optimization in tree-ssa.  */
14758           && (outer = outer_curly_brace_block (fndecl))
14759           && chain_member (r, BLOCK_VARS (outer)))
14760         finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
14761
14762       current_function_return_value = NULL_TREE;
14763     }
14764
14765   /* Remember that we were in class scope.  */
14766   if (current_class_name)
14767     ctype = current_class_type;
14768
14769   /* Must mark the RESULT_DECL as being in this function.  */
14770   DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
14771
14772   /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
14773      to the FUNCTION_DECL node itself.  */
14774   BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
14775
14776   /* Save away current state, if appropriate.  */
14777   if (!processing_template_decl)
14778     save_function_data (fndecl);
14779
14780   /* Complain if there's just no return statement.  */
14781   if (warn_return_type
14782       && !VOID_TYPE_P (TREE_TYPE (fntype))
14783       && !dependent_type_p (TREE_TYPE (fntype))
14784       && !current_function_returns_value && !current_function_returns_null
14785       /* Don't complain if we abort or throw.  */
14786       && !current_function_returns_abnormally
14787       /* Don't complain if there's an infinite loop.  */
14788       && !current_function_infinite_loop
14789       /* Don't complain if we are declared noreturn.  */
14790       && !TREE_THIS_VOLATILE (fndecl)
14791       && !DECL_NAME (DECL_RESULT (fndecl))
14792       && !TREE_NO_WARNING (fndecl)
14793       /* Structor return values (if any) are set by the compiler.  */
14794       && !DECL_CONSTRUCTOR_P (fndecl)
14795       && !DECL_DESTRUCTOR_P (fndecl)
14796       && targetm.warn_func_return (fndecl))
14797     {
14798       warning (OPT_Wreturn_type,
14799                "no return statement in function returning non-void");
14800       TREE_NO_WARNING (fndecl) = 1;
14801     }
14802
14803   /* Store the end of the function, so that we get good line number
14804      info for the epilogue.  */
14805   cfun->function_end_locus = input_location;
14806
14807   /* Complain about parameters that are only set, but never otherwise used.  */
14808   if (warn_unused_but_set_parameter
14809       && !processing_template_decl
14810       && errorcount == unused_but_set_errorcount
14811       && !DECL_CLONED_FUNCTION_P (fndecl))
14812     {
14813       tree decl;
14814
14815       for (decl = DECL_ARGUMENTS (fndecl);
14816            decl;
14817            decl = DECL_CHAIN (decl))
14818         if (TREE_USED (decl)
14819             && TREE_CODE (decl) == PARM_DECL
14820             && !DECL_READ_P (decl)
14821             && DECL_NAME (decl)
14822             && !DECL_ARTIFICIAL (decl)
14823             && !TREE_NO_WARNING (decl)
14824             && !DECL_IN_SYSTEM_HEADER (decl)
14825             && TREE_TYPE (decl) != error_mark_node
14826             && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
14827             && (!CLASS_TYPE_P (TREE_TYPE (decl))
14828                 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
14829           warning_at (DECL_SOURCE_LOCATION (decl),
14830                       OPT_Wunused_but_set_parameter,
14831                       "parameter %qD set but not used", decl);
14832       unused_but_set_errorcount = errorcount;
14833     }
14834
14835   /* Complain about locally defined typedefs that are not used in this
14836      function.  */
14837   maybe_warn_unused_local_typedefs ();
14838
14839   /* Possibly warn about unused parameters.  */
14840   if (warn_unused_parameter
14841       && !processing_template_decl 
14842       && !DECL_CLONED_FUNCTION_P (fndecl))
14843     do_warn_unused_parameter (fndecl);
14844
14845   /* Genericize before inlining.  */
14846   if (!processing_template_decl)
14847     {
14848       struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
14849       cp_genericize (fndecl);
14850       /* Clear out the bits we don't need.  */
14851       f->x_current_class_ptr = NULL;
14852       f->x_current_class_ref = NULL;
14853       f->x_eh_spec_block = NULL;
14854       f->x_in_charge_parm = NULL;
14855       f->x_vtt_parm = NULL;
14856       f->x_return_value = NULL;
14857       f->bindings = NULL;
14858       f->extern_decl_map = NULL;
14859       f->infinite_loops = NULL;
14860     }
14861   /* Clear out the bits we don't need.  */
14862   local_names = NULL;
14863
14864   /* We're leaving the context of this function, so zap cfun.  It's still in
14865      DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation.  */
14866   set_cfun (NULL);
14867   current_function_decl = NULL;
14868
14869   /* If this is an in-class inline definition, we may have to pop the
14870      bindings for the template parameters that we added in
14871      maybe_begin_member_template_processing when start_function was
14872      called.  */
14873   if (inclass_inline)
14874     maybe_end_member_template_processing ();
14875
14876   /* Leave the scope of the class.  */
14877   if (ctype)
14878     pop_nested_class ();
14879
14880   --function_depth;
14881
14882   /* Clean up.  */
14883   current_function_decl = NULL_TREE;
14884
14885   invoke_plugin_callbacks (PLUGIN_FINISH_PARSE_FUNCTION, fndecl);
14886   return fndecl;
14887 }
14888 \f
14889 /* Create the FUNCTION_DECL for a function definition.
14890    DECLSPECS and DECLARATOR are the parts of the declaration;
14891    they describe the return type and the name of the function,
14892    but twisted together in a fashion that parallels the syntax of C.
14893
14894    This function creates a binding context for the function body
14895    as well as setting up the FUNCTION_DECL in current_function_decl.
14896
14897    Returns a FUNCTION_DECL on success.
14898
14899    If the DECLARATOR is not suitable for a function (it defines a datum
14900    instead), we return 0, which tells yyparse to report a parse error.
14901
14902    May return void_type_node indicating that this method is actually
14903    a friend.  See grokfield for more details.
14904
14905    Came here with a `.pushlevel' .
14906
14907    DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
14908    CHANGES TO CODE IN `grokfield'.  */
14909
14910 tree
14911 grokmethod (cp_decl_specifier_seq *declspecs,
14912             const cp_declarator *declarator, tree attrlist)
14913 {
14914   tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
14915                                 &attrlist);
14916
14917   if (fndecl == error_mark_node)
14918     return error_mark_node;
14919
14920   if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
14921     {
14922       error ("invalid member function declaration");
14923       return error_mark_node;
14924     }
14925
14926   if (attrlist)
14927     cplus_decl_attributes (&fndecl, attrlist, 0);
14928
14929   /* Pass friends other than inline friend functions back.  */
14930   if (fndecl == void_type_node)
14931     return fndecl;
14932
14933   if (DECL_IN_AGGR_P (fndecl))
14934     {
14935       if (DECL_CLASS_SCOPE_P (fndecl))
14936         error ("%qD is already defined in class %qT", fndecl,
14937                DECL_CONTEXT (fndecl));
14938       return error_mark_node;
14939     }
14940
14941   check_template_shadow (fndecl);
14942
14943   if (TREE_PUBLIC (fndecl))
14944     DECL_COMDAT (fndecl) = 1;
14945   DECL_DECLARED_INLINE_P (fndecl) = 1;
14946   DECL_NO_INLINE_WARNING_P (fndecl) = 1;
14947
14948   /* We process method specializations in finish_struct_1.  */
14949   if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
14950     {
14951       fndecl = push_template_decl (fndecl);
14952       if (fndecl == error_mark_node)
14953         return fndecl;
14954     }
14955
14956   if (! DECL_FRIEND_P (fndecl))
14957     {
14958       if (DECL_CHAIN (fndecl))
14959         {
14960           fndecl = copy_node (fndecl);
14961           TREE_CHAIN (fndecl) = NULL_TREE;
14962         }
14963     }
14964
14965   cp_finish_decl (fndecl, NULL_TREE, false, NULL_TREE, 0);
14966
14967   DECL_IN_AGGR_P (fndecl) = 1;
14968   return fndecl;
14969 }
14970 \f
14971
14972 /* VAR is a VAR_DECL.  If its type is incomplete, remember VAR so that
14973    we can lay it out later, when and if its type becomes complete.
14974
14975    Also handle constexpr variables where the initializer involves
14976    an unlowered PTRMEM_CST because the class isn't complete yet.  */
14977
14978 void
14979 maybe_register_incomplete_var (tree var)
14980 {
14981   gcc_assert (VAR_P (var));
14982
14983   /* Keep track of variables with incomplete types.  */
14984   if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
14985       && DECL_EXTERNAL (var))
14986     {
14987       tree inner_type = TREE_TYPE (var);
14988
14989       while (TREE_CODE (inner_type) == ARRAY_TYPE)
14990         inner_type = TREE_TYPE (inner_type);
14991       inner_type = TYPE_MAIN_VARIANT (inner_type);
14992
14993       if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
14994           /* RTTI TD entries are created while defining the type_info.  */
14995           || (TYPE_LANG_SPECIFIC (inner_type)
14996               && TYPE_BEING_DEFINED (inner_type)))
14997         {
14998           incomplete_var iv = {var, inner_type};
14999           vec_safe_push (incomplete_vars, iv);
15000         }
15001       else if (!(DECL_LANG_SPECIFIC (var) && DECL_TEMPLATE_INFO (var))
15002                && decl_constant_var_p (var)
15003                && (TYPE_PTRMEM_P (inner_type) || CLASS_TYPE_P (inner_type)))
15004         {
15005           /* When the outermost open class is complete we can resolve any
15006              pointers-to-members.  */
15007           tree context = outermost_open_class ();
15008           incomplete_var iv = {var, context};
15009           vec_safe_push (incomplete_vars, iv);
15010         }
15011     }
15012 }
15013
15014 /* Called when a class type (given by TYPE) is defined.  If there are
15015    any existing VAR_DECLs whose type has been completed by this
15016    declaration, update them now.  */
15017
15018 void
15019 complete_vars (tree type)
15020 {
15021   unsigned ix;
15022   incomplete_var *iv;
15023
15024   for (ix = 0; vec_safe_iterate (incomplete_vars, ix, &iv); )
15025     {
15026       if (same_type_p (type, iv->incomplete_type))
15027         {
15028           tree var = iv->decl;
15029           tree type = TREE_TYPE (var);
15030
15031           if (type != error_mark_node
15032               && (TYPE_MAIN_VARIANT (strip_array_types (type))
15033                   == iv->incomplete_type))
15034             {
15035               /* Complete the type of the variable.  The VAR_DECL itself
15036                  will be laid out in expand_expr.  */
15037               complete_type (type);
15038               cp_apply_type_quals_to_decl (cp_type_quals (type), var);
15039             }
15040
15041           /* Remove this entry from the list.  */
15042           incomplete_vars->unordered_remove (ix);
15043         }
15044       else
15045         ix++;
15046     }
15047
15048   /* Check for pending declarations which may have abstract type.  */
15049   complete_type_check_abstract (type);
15050 }
15051
15052 /* If DECL is of a type which needs a cleanup, build and return an
15053    expression to perform that cleanup here.  Return NULL_TREE if no
15054    cleanup need be done.  DECL can also be a _REF when called from
15055    split_nonconstant_init_1.  */
15056
15057 tree
15058 cxx_maybe_build_cleanup (tree decl, tsubst_flags_t complain)
15059 {
15060   tree type;
15061   tree attr;
15062   tree cleanup;
15063
15064   /* Assume no cleanup is required.  */
15065   cleanup = NULL_TREE;
15066
15067   if (error_operand_p (decl))
15068     return cleanup;
15069
15070   /* Handle "__attribute__((cleanup))".  We run the cleanup function
15071      before the destructor since the destructor is what actually
15072      terminates the lifetime of the object.  */
15073   if (DECL_P (decl))
15074     attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
15075   else
15076     attr = NULL_TREE;
15077   if (attr)
15078     {
15079       tree id;
15080       tree fn;
15081       tree arg;
15082
15083       /* Get the name specified by the user for the cleanup function.  */
15084       id = TREE_VALUE (TREE_VALUE (attr));
15085       /* Look up the name to find the cleanup function to call.  It is
15086          important to use lookup_name here because that is what is
15087          used in c-common.c:handle_cleanup_attribute when performing
15088          initial checks on the attribute.  Note that those checks
15089          include ensuring that the function found is not an overloaded
15090          function, or an object with an overloaded call operator,
15091          etc.; we can rely on the fact that the function found is an
15092          ordinary FUNCTION_DECL.  */
15093       fn = lookup_name (id);
15094       arg = build_address (decl);
15095       if (!mark_used (decl, complain) && !(complain & tf_error))
15096         return error_mark_node;
15097       cleanup = cp_build_function_call_nary (fn, complain, arg, NULL_TREE);
15098       if (cleanup == error_mark_node)
15099         return error_mark_node;
15100     }
15101   /* Handle ordinary C++ destructors.  */
15102   type = TREE_TYPE (decl);
15103   if (type_build_dtor_call (type))
15104     {
15105       int flags = LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR;
15106       tree addr;
15107       tree call;
15108
15109       if (TREE_CODE (type) == ARRAY_TYPE)
15110         addr = decl;
15111       else
15112         addr = build_address (decl);
15113
15114       call = build_delete (TREE_TYPE (addr), addr,
15115                            sfk_complete_destructor, flags, 0, complain);
15116       if (call == error_mark_node)
15117         cleanup = error_mark_node;
15118       else if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
15119         /* Discard the call.  */;
15120       else if (cleanup)
15121         cleanup = cp_build_compound_expr (cleanup, call, complain);
15122       else
15123         cleanup = call;
15124     }
15125
15126   /* build_delete sets the location of the destructor call to the
15127      current location, even though the destructor is going to be
15128      called later, at the end of the current scope.  This can lead to
15129      a "jumpy" behavior for users of debuggers when they step around
15130      the end of the block.  So let's unset the location of the
15131      destructor call instead.  */
15132   protected_set_expr_location (cleanup, UNKNOWN_LOCATION);
15133
15134   if (cleanup
15135       && DECL_P (decl)
15136       && !lookup_attribute ("warn_unused", TYPE_ATTRIBUTES (TREE_TYPE (decl)))
15137       /* Treat objects with destructors as used; the destructor may do
15138          something substantive.  */
15139       && !mark_used (decl, complain) && !(complain & tf_error))
15140     return error_mark_node;
15141
15142   return cleanup;
15143 }
15144
15145 \f
15146 /* Return the FUNCTION_TYPE that corresponds to MEMFNTYPE, which can be a
15147    FUNCTION_DECL, METHOD_TYPE, FUNCTION_TYPE, pointer or reference to
15148    METHOD_TYPE or FUNCTION_TYPE, or pointer to member function.  */
15149
15150 tree
15151 static_fn_type (tree memfntype)
15152 {
15153   tree fntype;
15154   tree args;
15155
15156   if (TYPE_PTRMEMFUNC_P (memfntype))
15157     memfntype = TYPE_PTRMEMFUNC_FN_TYPE (memfntype);
15158   if (POINTER_TYPE_P (memfntype)
15159       || TREE_CODE (memfntype) == FUNCTION_DECL)
15160     memfntype = TREE_TYPE (memfntype);
15161   if (TREE_CODE (memfntype) == FUNCTION_TYPE)
15162     return memfntype;
15163   gcc_assert (TREE_CODE (memfntype) == METHOD_TYPE);
15164   args = TYPE_ARG_TYPES (memfntype);
15165   cp_ref_qualifier rqual = type_memfn_rqual (memfntype);
15166   fntype = build_function_type (TREE_TYPE (memfntype), TREE_CHAIN (args));
15167   fntype = apply_memfn_quals (fntype, type_memfn_quals (memfntype), rqual);
15168   fntype = (cp_build_type_attribute_variant
15169             (fntype, TYPE_ATTRIBUTES (memfntype)));
15170   fntype = (build_exception_variant
15171             (fntype, TYPE_RAISES_EXCEPTIONS (memfntype)));
15172   if (TYPE_HAS_LATE_RETURN_TYPE (memfntype))
15173     TYPE_HAS_LATE_RETURN_TYPE (fntype) = 1;
15174   return fntype;
15175 }
15176
15177 /* DECL was originally constructed as a non-static member function,
15178    but turned out to be static.  Update it accordingly.  */
15179
15180 void
15181 revert_static_member_fn (tree decl)
15182 {
15183   tree stype = static_fn_type (decl);
15184   cp_cv_quals quals = type_memfn_quals (stype);
15185   cp_ref_qualifier rqual = type_memfn_rqual (stype);
15186
15187   if (quals != TYPE_UNQUALIFIED || rqual != REF_QUAL_NONE)
15188     stype = apply_memfn_quals (stype, TYPE_UNQUALIFIED, REF_QUAL_NONE);
15189
15190   TREE_TYPE (decl) = stype;
15191
15192   if (DECL_ARGUMENTS (decl))
15193     DECL_ARGUMENTS (decl) = DECL_CHAIN (DECL_ARGUMENTS (decl));
15194   DECL_STATIC_FUNCTION_P (decl) = 1;
15195 }
15196
15197 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
15198    one of the language-independent trees.  */
15199
15200 enum cp_tree_node_structure_enum
15201 cp_tree_node_structure (union lang_tree_node * t)
15202 {
15203   switch (TREE_CODE (&t->generic))
15204     {
15205     case DEFAULT_ARG:           return TS_CP_DEFAULT_ARG;
15206     case DEFERRED_NOEXCEPT:     return TS_CP_DEFERRED_NOEXCEPT;
15207     case IDENTIFIER_NODE:       return TS_CP_IDENTIFIER;
15208     case OVERLOAD:              return TS_CP_OVERLOAD;
15209     case TEMPLATE_PARM_INDEX:   return TS_CP_TPI;
15210     case PTRMEM_CST:            return TS_CP_PTRMEM;
15211     case BASELINK:              return TS_CP_BASELINK;
15212     case TEMPLATE_DECL:         return TS_CP_TEMPLATE_DECL;
15213     case STATIC_ASSERT:         return TS_CP_STATIC_ASSERT;
15214     case ARGUMENT_PACK_SELECT:  return TS_CP_ARGUMENT_PACK_SELECT;
15215     case TRAIT_EXPR:            return TS_CP_TRAIT_EXPR;
15216     case LAMBDA_EXPR:           return TS_CP_LAMBDA_EXPR;
15217     case TEMPLATE_INFO:         return TS_CP_TEMPLATE_INFO;
15218     case CONSTRAINT_INFO:       return TS_CP_CONSTRAINT_INFO;
15219     case USERDEF_LITERAL:       return TS_CP_USERDEF_LITERAL;
15220     default:                    return TS_CP_GENERIC;
15221     }
15222 }
15223
15224 /* Build the void_list_node (void_type_node having been created).  */
15225 tree
15226 build_void_list_node (void)
15227 {
15228   tree t = build_tree_list (NULL_TREE, void_type_node);
15229   return t;
15230 }
15231
15232 bool
15233 cp_missing_noreturn_ok_p (tree decl)
15234 {
15235   /* A missing noreturn is ok for the `main' function.  */
15236   return DECL_MAIN_P (decl);
15237 }
15238
15239 /* Return the decl used to identify the COMDAT group into which DECL should
15240    be placed.  */
15241
15242 tree
15243 cxx_comdat_group (tree decl)
15244 {
15245   /* Virtual tables, construction virtual tables, and virtual table
15246      tables all go in a single COMDAT group, named after the primary
15247      virtual table.  */
15248   if (VAR_P (decl) && DECL_VTABLE_OR_VTT_P (decl))
15249     decl = CLASSTYPE_VTABLES (DECL_CONTEXT (decl));
15250   /* For all other DECLs, the COMDAT group is the mangled name of the
15251      declaration itself.  */
15252   else
15253     {
15254       while (DECL_THUNK_P (decl))
15255         {
15256           /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
15257              into the same section as the target function.  In that case
15258              we must return target's name.  */
15259           tree target = THUNK_TARGET (decl);
15260           if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
15261               && DECL_SECTION_NAME (target) != NULL
15262               && DECL_ONE_ONLY (target))
15263             decl = target;
15264           else
15265             break;
15266         }
15267     }
15268
15269   return decl;
15270 }
15271
15272 /* Returns the return type for FN as written by the user, which may include
15273    a placeholder for a deduced return type.  */
15274
15275 tree
15276 fndecl_declared_return_type (tree fn)
15277 {
15278   fn = STRIP_TEMPLATE (fn);
15279   if (FNDECL_USED_AUTO (fn))
15280     {
15281       struct language_function *f = NULL;
15282       if (DECL_STRUCT_FUNCTION (fn))
15283         f = DECL_STRUCT_FUNCTION (fn)->language;
15284       if (f == NULL)
15285         f = DECL_SAVED_FUNCTION_DATA (fn);
15286       return f->x_auto_return_pattern;
15287     }
15288   return TREE_TYPE (TREE_TYPE (fn));
15289 }
15290
15291 /* Returns true iff DECL was declared with an auto return type and it has
15292    not yet been deduced to a real type.  */
15293
15294 bool
15295 undeduced_auto_decl (tree decl)
15296 {
15297   if (cxx_dialect < cxx14)
15298     return false;
15299   return type_uses_auto (TREE_TYPE (decl));
15300 }
15301
15302 /* Complain if DECL has an undeduced return type.  */
15303
15304 void
15305 require_deduced_type (tree decl)
15306 {
15307   if (undeduced_auto_decl (decl))
15308     error ("use of %qD before deduction of %<auto%>", decl);
15309 }
15310
15311 #include "gt-cp-decl.h"