xref: /netbsd-src/external/gpl3/gcc.old/dist/gcc/cp/decl.c (revision c38e7cc395b1472a774ff828e46123de44c628e9)
1 /* Process declarations and variables for C++ compiler.
2    Copyright (C) 1988-2015 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 "tm.h"
33 #include "hash-set.h"
34 #include "machmode.h"
35 #include "vec.h"
36 #include "double-int.h"
37 #include "input.h"
38 #include "alias.h"
39 #include "symtab.h"
40 #include "wide-int.h"
41 #include "inchash.h"
42 #include "tree.h"
43 #include "tree-hasher.h"
44 #include "stringpool.h"
45 #include "stor-layout.h"
46 #include "varasm.h"
47 #include "attribs.h"
48 #include "calls.h"
49 #include "flags.h"
50 #include "cp-tree.h"
51 #include "tree-iterator.h"
52 #include "tree-inline.h"
53 #include "decl.h"
54 #include "intl.h"
55 #include "toplev.h"
56 #include "hashtab.h"
57 #include "tm_p.h"
58 #include "target.h"
59 #include "c-family/c-common.h"
60 #include "c-family/c-objc.h"
61 #include "c-family/c-pragma.h"
62 #include "c-family/c-target.h"
63 #include "c-family/c-ubsan.h"
64 #include "diagnostic.h"
65 #include "intl.h"
66 #include "debug.h"
67 #include "timevar.h"
68 #include "splay-tree.h"
69 #include "plugin.h"
70 #include "hash-map.h"
71 #include "is-a.h"
72 #include "plugin-api.h"
73 #include "hard-reg-set.h"
74 #include "input.h"
75 #include "function.h"
76 #include "ipa-ref.h"
77 #include "cgraph.h"
78 #include "cilk.h"
79 #include "wide-int.h"
80 #include "builtins.h"
81 
82 /* Possible cases of bad specifiers type used by bad_specifiers. */
83 enum bad_spec_place {
84   BSP_VAR,    /* variable */
85   BSP_PARM,   /* parameter */
86   BSP_TYPE,   /* type */
87   BSP_FIELD   /* field */
88 };
89 
90 static tree grokparms (tree parmlist, tree *);
91 static const char *redeclaration_error_message (tree, tree);
92 
93 static int decl_jump_unsafe (tree);
94 static void require_complete_types_for_parms (tree);
95 static int ambi_op_p (enum tree_code);
96 static int unary_op_p (enum tree_code);
97 static void push_local_name (tree);
98 static tree grok_reference_init (tree, tree, tree, int);
99 static tree grokvardecl (tree, tree, tree, const cp_decl_specifier_seq *,
100 			 int, int, int, tree);
101 static int check_static_variable_definition (tree, tree);
102 static void record_unknown_type (tree, const char *);
103 static tree builtin_function_1 (tree, tree, bool);
104 static int member_function_or_else (tree, tree, enum overload_flags);
105 static void bad_specifiers (tree, enum bad_spec_place, int, int, int, int,
106 			    int);
107 static void check_for_uninitialized_const_var (tree);
108 static tree local_variable_p_walkfn (tree *, int *, void *);
109 static tree record_builtin_java_type (const char *, int);
110 static const char *tag_name (enum tag_types);
111 static tree lookup_and_check_tag (enum tag_types, tree, tag_scope, bool);
112 static int walk_namespaces_r (tree, walk_namespaces_fn, void *);
113 static void maybe_deduce_size_from_array_init (tree, tree);
114 static void layout_var_decl (tree);
115 static tree check_initializer (tree, tree, int, vec<tree, va_gc> **);
116 static void make_rtl_for_nonlocal_decl (tree, tree, const char *);
117 static void save_function_data (tree);
118 static void copy_type_enum (tree , tree);
119 static void check_function_type (tree, tree);
120 static void finish_constructor_body (void);
121 static void begin_destructor_body (void);
122 static void finish_destructor_body (void);
123 static void record_key_method_defined (tree);
124 static tree create_array_type_for_decl (tree, tree, tree);
125 static tree get_atexit_node (void);
126 static tree get_dso_handle_node (void);
127 static tree start_cleanup_fn (void);
128 static void end_cleanup_fn (void);
129 static tree cp_make_fname_decl (location_t, tree, int);
130 static void initialize_predefined_identifiers (void);
131 static tree check_special_function_return_type
132 	(special_function_kind, tree, tree);
133 static tree push_cp_library_fn (enum tree_code, tree, int);
134 static tree build_cp_library_fn (tree, enum tree_code, tree, int);
135 static void store_parm_decls (tree);
136 static void initialize_local_var (tree, tree);
137 static void expand_static_init (tree, tree);
138 
139 /* The following symbols are subsumed in the cp_global_trees array, and
140    listed here individually for documentation purposes.
141 
142    C++ extensions
143 	tree wchar_decl_node;
144 
145 	tree vtable_entry_type;
146 	tree delta_type_node;
147 	tree __t_desc_type_node;
148 
149 	tree class_type_node;
150 	tree unknown_type_node;
151 
152    Array type `vtable_entry_type[]'
153 
154 	tree vtbl_type_node;
155 	tree vtbl_ptr_type_node;
156 
157    Namespaces,
158 
159 	tree std_node;
160 	tree abi_node;
161 
162    A FUNCTION_DECL which can call `abort'.  Not necessarily the
163    one that the user will declare, but sufficient to be called
164    by routines that want to abort the program.
165 
166 	tree abort_fndecl;
167 
168    Used by RTTI
169 	tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
170 	tree tinfo_var_id;  */
171 
172 tree cp_global_trees[CPTI_MAX];
173 
174 /* Indicates that there is a type value in some namespace, although
175    that is not necessarily in scope at the moment.  */
176 
177 tree global_type_node;
178 
179 /* The node that holds the "name" of the global scope.  */
180 tree global_scope_name;
181 
182 #define local_names cp_function_chain->x_local_names
183 
184 /* A list of objects which have constructors or destructors
185    which reside in the global scope.  The decl is stored in
186    the TREE_VALUE slot and the initializer is stored
187    in the TREE_PURPOSE slot.  */
188 tree static_aggregates;
189 
190 /* Like static_aggregates, but for thread_local variables.  */
191 tree tls_aggregates;
192 
193 /* -- end of C++ */
194 
195 /* A node for the integer constant 2.  */
196 
197 tree integer_two_node;
198 
199 /* Used only for jumps to as-yet undefined labels, since jumps to
200    defined labels can have their validity checked immediately.  */
201 
202 struct GTY((chain_next ("%h.next"))) named_label_use_entry {
203   struct named_label_use_entry *next;
204   /* The binding level to which this entry is *currently* attached.
205      This is initially the binding level in which the goto appeared,
206      but is modified as scopes are closed.  */
207   cp_binding_level *binding_level;
208   /* The head of the names list that was current when the goto appeared,
209      or the inner scope popped.  These are the decls that will *not* be
210      skipped when jumping to the label.  */
211   tree names_in_scope;
212   /* The location of the goto, for error reporting.  */
213   location_t o_goto_locus;
214   /* True if an OpenMP structured block scope has been closed since
215      the goto appeared.  This means that the branch from the label will
216      illegally exit an OpenMP scope.  */
217   bool in_omp_scope;
218 };
219 
220 /* A list of all LABEL_DECLs in the function that have names.  Here so
221    we can clear out their names' definitions at the end of the
222    function, and so we can check the validity of jumps to these labels.  */
223 
224 struct GTY((for_user)) named_label_entry {
225   /* The decl itself.  */
226   tree label_decl;
227 
228   /* The binding level to which the label is *currently* attached.
229      This is initially set to the binding level in which the label
230      is defined, but is modified as scopes are closed.  */
231   cp_binding_level *binding_level;
232   /* The head of the names list that was current when the label was
233      defined, or the inner scope popped.  These are the decls that will
234      be skipped when jumping to the label.  */
235   tree names_in_scope;
236   /* A vector of all decls from all binding levels that would be
237      crossed by a backward branch to the label.  */
238   vec<tree, va_gc> *bad_decls;
239 
240   /* A list of uses of the label, before the label is defined.  */
241   struct named_label_use_entry *uses;
242 
243   /* The following bits are set after the label is defined, and are
244      updated as scopes are popped.  They indicate that a backward jump
245      to the label will illegally enter a scope of the given flavor.  */
246   bool in_try_scope;
247   bool in_catch_scope;
248   bool in_omp_scope;
249 };
250 
251 #define named_labels cp_function_chain->x_named_labels
252 
253 /* The number of function bodies which we are currently processing.
254    (Zero if we are at namespace scope, one inside the body of a
255    function, two inside the body of a function in a local class, etc.)  */
256 int function_depth;
257 
258 /* To avoid unwanted recursion, finish_function defers all mark_used calls
259    encountered during its execution until it finishes.  */
260 bool defer_mark_used_calls;
261 vec<tree, va_gc> *deferred_mark_used_calls;
262 
263 /* States indicating how grokdeclarator() should handle declspecs marked
264    with __attribute__((deprecated)).  An object declared as
265    __attribute__((deprecated)) suppresses warnings of uses of other
266    deprecated items.  */
267 enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
268 
269 
270 /* A list of VAR_DECLs whose type was incomplete at the time the
271    variable was declared.  */
272 
273 typedef struct GTY(()) incomplete_var_d {
274   tree decl;
275   tree incomplete_type;
276 } incomplete_var;
277 
278 
279 static GTY(()) vec<incomplete_var, va_gc> *incomplete_vars;
280 
281 /* Returns the kind of template specialization we are currently
282    processing, given that it's declaration contained N_CLASS_SCOPES
283    explicit scope qualifications.  */
284 
285 tmpl_spec_kind
286 current_tmpl_spec_kind (int n_class_scopes)
287 {
288   int n_template_parm_scopes = 0;
289   int seen_specialization_p = 0;
290   int innermost_specialization_p = 0;
291   cp_binding_level *b;
292 
293   /* Scan through the template parameter scopes.  */
294   for (b = current_binding_level;
295        b->kind == sk_template_parms;
296        b = b->level_chain)
297     {
298       /* If we see a specialization scope inside a parameter scope,
299 	 then something is wrong.  That corresponds to a declaration
300 	 like:
301 
302 	    template <class T> template <> ...
303 
304 	 which is always invalid since [temp.expl.spec] forbids the
305 	 specialization of a class member template if the enclosing
306 	 class templates are not explicitly specialized as well.  */
307       if (b->explicit_spec_p)
308 	{
309 	  if (n_template_parm_scopes == 0)
310 	    innermost_specialization_p = 1;
311 	  else
312 	    seen_specialization_p = 1;
313 	}
314       else if (seen_specialization_p == 1)
315 	return tsk_invalid_member_spec;
316 
317       ++n_template_parm_scopes;
318     }
319 
320   /* Handle explicit instantiations.  */
321   if (processing_explicit_instantiation)
322     {
323       if (n_template_parm_scopes != 0)
324 	/* We've seen a template parameter list during an explicit
325 	   instantiation.  For example:
326 
327 	     template <class T> template void f(int);
328 
329 	   This is erroneous.  */
330 	return tsk_invalid_expl_inst;
331       else
332 	return tsk_expl_inst;
333     }
334 
335   if (n_template_parm_scopes < n_class_scopes)
336     /* We've not seen enough template headers to match all the
337        specialized classes present.  For example:
338 
339 	 template <class T> void R<T>::S<T>::f(int);
340 
341        This is invalid; there needs to be one set of template
342        parameters for each class.  */
343     return tsk_insufficient_parms;
344   else if (n_template_parm_scopes == n_class_scopes)
345     /* We're processing a non-template declaration (even though it may
346        be a member of a template class.)  For example:
347 
348 	 template <class T> void S<T>::f(int);
349 
350        The `class T' matches the `S<T>', leaving no template headers
351        corresponding to the `f'.  */
352     return tsk_none;
353   else if (n_template_parm_scopes > n_class_scopes + 1)
354     /* We've got too many template headers.  For example:
355 
356 	 template <> template <class T> void f (T);
357 
358        There need to be more enclosing classes.  */
359     return tsk_excessive_parms;
360   else
361     /* This must be a template.  It's of the form:
362 
363 	 template <class T> template <class U> void S<T>::f(U);
364 
365        This is a specialization if the innermost level was a
366        specialization; otherwise it's just a definition of the
367        template.  */
368     return innermost_specialization_p ? tsk_expl_spec : tsk_template;
369 }
370 
371 /* Exit the current scope.  */
372 
373 void
374 finish_scope (void)
375 {
376   poplevel (0, 0, 0);
377 }
378 
379 /* When a label goes out of scope, check to see if that label was used
380    in a valid manner, and issue any appropriate warnings or errors.  */
381 
382 static void
383 pop_label (tree label, tree old_value)
384 {
385   if (!processing_template_decl)
386     {
387       if (DECL_INITIAL (label) == NULL_TREE)
388 	{
389 	  location_t location;
390 
391 	  error ("label %q+D used but not defined", label);
392 	  location = input_location;
393 	    /* FIXME want (LOCATION_FILE (input_location), (line)0) */
394 	  /* Avoid crashing later.  */
395 	  define_label (location, DECL_NAME (label));
396 	}
397       else
398 	warn_for_unused_label (label);
399     }
400 
401   SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), old_value);
402 }
403 
404 /* At the end of a function, all labels declared within the function
405    go out of scope.  BLOCK is the top-level block for the
406    function.  */
407 
408 int
409 pop_labels_1 (named_label_entry **slot, tree block)
410 {
411   struct named_label_entry *ent = *slot;
412 
413   pop_label (ent->label_decl, NULL_TREE);
414 
415   /* Put the labels into the "variables" of the top-level block,
416      so debugger can see them.  */
417   DECL_CHAIN (ent->label_decl) = BLOCK_VARS (block);
418   BLOCK_VARS (block) = ent->label_decl;
419 
420   named_labels->clear_slot (slot);
421 
422   return 1;
423 }
424 
425 static void
426 pop_labels (tree block)
427 {
428   if (named_labels)
429     {
430       named_labels->traverse<tree, pop_labels_1> (block);
431       named_labels = NULL;
432     }
433 }
434 
435 /* At the end of a block with local labels, restore the outer definition.  */
436 
437 static void
438 pop_local_label (tree label, tree old_value)
439 {
440   struct named_label_entry dummy;
441 
442   pop_label (label, old_value);
443 
444   dummy.label_decl = label;
445   named_label_entry **slot = named_labels->find_slot (&dummy, NO_INSERT);
446   named_labels->clear_slot (slot);
447 }
448 
449 /* The following two routines are used to interface to Objective-C++.
450    The binding level is purposely treated as an opaque type.  */
451 
452 void *
453 objc_get_current_scope (void)
454 {
455   return current_binding_level;
456 }
457 
458 /* The following routine is used by the NeXT-style SJLJ exceptions;
459    variables get marked 'volatile' so as to not be clobbered by
460    _setjmp()/_longjmp() calls.  All variables in the current scope,
461    as well as parent scopes up to (but not including) ENCLOSING_BLK
462    shall be thusly marked.  */
463 
464 void
465 objc_mark_locals_volatile (void *enclosing_blk)
466 {
467   cp_binding_level *scope;
468 
469   for (scope = current_binding_level;
470        scope && scope != enclosing_blk;
471        scope = scope->level_chain)
472     {
473       tree decl;
474 
475       for (decl = scope->names; decl; decl = TREE_CHAIN (decl))
476 	objc_volatilize_decl (decl);
477 
478       /* Do not climb up past the current function.  */
479       if (scope->kind == sk_function_parms)
480 	break;
481     }
482 }
483 
484 /* Update data for defined and undefined labels when leaving a scope.  */
485 
486 int
487 poplevel_named_label_1 (named_label_entry **slot, cp_binding_level *bl)
488 {
489   named_label_entry *ent = *slot;
490   cp_binding_level *obl = bl->level_chain;
491 
492   if (ent->binding_level == bl)
493     {
494       tree decl;
495 
496       /* ENT->NAMES_IN_SCOPE may contain a mixture of DECLs and
497 	 TREE_LISTs representing OVERLOADs, so be careful.  */
498       for (decl = ent->names_in_scope; decl; decl = (DECL_P (decl)
499 						     ? DECL_CHAIN (decl)
500 						     : TREE_CHAIN (decl)))
501 	if (decl_jump_unsafe (decl))
502 	  vec_safe_push (ent->bad_decls, decl);
503 
504       ent->binding_level = obl;
505       ent->names_in_scope = obl->names;
506       switch (bl->kind)
507 	{
508 	case sk_try:
509 	  ent->in_try_scope = true;
510 	  break;
511 	case sk_catch:
512 	  ent->in_catch_scope = true;
513 	  break;
514 	case sk_omp:
515 	  ent->in_omp_scope = true;
516 	  break;
517 	default:
518 	  break;
519 	}
520     }
521   else if (ent->uses)
522     {
523       struct named_label_use_entry *use;
524 
525       for (use = ent->uses; use ; use = use->next)
526 	if (use->binding_level == bl)
527 	  {
528 	    use->binding_level = obl;
529 	    use->names_in_scope = obl->names;
530 	    if (bl->kind == sk_omp)
531 	      use->in_omp_scope = true;
532 	  }
533     }
534 
535   return 1;
536 }
537 
538 /* Saved errorcount to avoid -Wunused-but-set-{parameter,variable} warnings
539    when errors were reported, except for -Werror-unused-but-set-*.  */
540 static int unused_but_set_errorcount;
541 
542 /* Exit a binding level.
543    Pop the level off, and restore the state of the identifier-decl mappings
544    that were in effect when this level was entered.
545 
546    If KEEP == 1, this level had explicit declarations, so
547    and create a "block" (a BLOCK node) for the level
548    to record its declarations and subblocks for symbol table output.
549 
550    If FUNCTIONBODY is nonzero, this level is the body of a function,
551    so create a block as if KEEP were set and also clear out all
552    label names.
553 
554    If REVERSE is nonzero, reverse the order of decls before putting
555    them into the BLOCK.  */
556 
557 tree
558 poplevel (int keep, int reverse, int functionbody)
559 {
560   tree link;
561   /* The chain of decls was accumulated in reverse order.
562      Put it into forward order, just for cleanliness.  */
563   tree decls;
564   tree subblocks;
565   tree block;
566   tree decl;
567   int leaving_for_scope;
568   scope_kind kind;
569   unsigned ix;
570   cp_label_binding *label_bind;
571 
572   bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
573  restart:
574 
575   block = NULL_TREE;
576 
577   gcc_assert (current_binding_level->kind != sk_class);
578 
579   if (current_binding_level->kind == sk_cleanup)
580     functionbody = 0;
581   subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
582 
583   gcc_assert (!vec_safe_length (current_binding_level->class_shadowed));
584 
585   /* We used to use KEEP == 2 to indicate that the new block should go
586      at the beginning of the list of blocks at this binding level,
587      rather than the end.  This hack is no longer used.  */
588   gcc_assert (keep == 0 || keep == 1);
589 
590   if (current_binding_level->keep)
591     keep = 1;
592 
593   /* Any uses of undefined labels, and any defined labels, now operate
594      under constraints of next binding contour.  */
595   if (cfun && !functionbody && named_labels)
596     named_labels->traverse<cp_binding_level *, poplevel_named_label_1>
597 		   (current_binding_level);
598 
599   /* Get the decls in the order they were written.
600      Usually current_binding_level->names is in reverse order.
601      But parameter decls were previously put in forward order.  */
602 
603   if (reverse)
604     current_binding_level->names
605       = decls = nreverse (current_binding_level->names);
606   else
607     decls = current_binding_level->names;
608 
609   /* If there were any declarations or structure tags in that level,
610      or if this level is a function body,
611      create a BLOCK to record them for the life of this function.  */
612   block = NULL_TREE;
613   /* Avoid function body block if possible.  */
614   if (functionbody && subblocks && BLOCK_CHAIN (subblocks) == NULL_TREE)
615     keep = 0;
616   else if (keep == 1 || functionbody)
617     block = make_node (BLOCK);
618   if (block != NULL_TREE)
619     {
620       BLOCK_VARS (block) = decls;
621       BLOCK_SUBBLOCKS (block) = subblocks;
622     }
623 
624   /* In each subblock, record that this is its superior.  */
625   if (keep >= 0)
626     for (link = subblocks; link; link = BLOCK_CHAIN (link))
627       BLOCK_SUPERCONTEXT (link) = block;
628 
629   /* We still support the old for-scope rules, whereby the variables
630      in a for-init statement were in scope after the for-statement
631      ended.  We only use the new rules if flag_new_for_scope is
632      nonzero.  */
633   leaving_for_scope
634     = current_binding_level->kind == sk_for && flag_new_for_scope == 1;
635 
636   /* Before we remove the declarations first check for unused variables.  */
637   if ((warn_unused_variable || warn_unused_but_set_variable)
638       && current_binding_level->kind != sk_template_parms
639       && !processing_template_decl)
640     for (tree d = getdecls (); d; d = TREE_CHAIN (d))
641       {
642 	/* There are cases where D itself is a TREE_LIST.  See in
643 	   push_local_binding where the list of decls returned by
644 	   getdecls is built.  */
645 	decl = TREE_CODE (d) == TREE_LIST ? TREE_VALUE (d) : d;
646 	tree type = TREE_TYPE (decl);
647 	if (VAR_P (decl)
648 	    && (! TREE_USED (decl) || !DECL_READ_P (decl))
649 	    && ! DECL_IN_SYSTEM_HEADER (decl)
650 	    && DECL_NAME (decl) && ! DECL_ARTIFICIAL (decl)
651 	    && type != error_mark_node
652 	    && (!CLASS_TYPE_P (type)
653 		|| !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
654 		|| lookup_attribute ("warn_unused",
655 				     TYPE_ATTRIBUTES (TREE_TYPE (decl)))))
656 	  {
657 	    if (! TREE_USED (decl))
658 	      warning (OPT_Wunused_variable, "unused variable %q+D", decl);
659 	    else if (DECL_CONTEXT (decl) == current_function_decl
660 		     // For -Wunused-but-set-variable leave references alone.
661 		     && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
662 		     && errorcount == unused_but_set_errorcount)
663 	      {
664 		warning (OPT_Wunused_but_set_variable,
665 			 "variable %q+D 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.  If
896    DATA is non-NULL, this is the last time we will call
897    wrapup_global_declarations for this NAMESPACE.  */
898 
899 int
900 wrapup_globals_for_namespace (tree name_space, void* data)
901 {
902   cp_binding_level *level = NAMESPACE_LEVEL (name_space);
903   vec<tree, va_gc> *statics = level->static_decls;
904   tree *vec = statics->address ();
905   int len = statics->length ();
906   int last_time = (data != 0);
907 
908   if (last_time)
909     {
910       check_global_declarations (vec, len);
911       emit_debug_global_declarations (vec, len);
912       return 0;
913     }
914 
915   /* Write out any globals that need to be output.  */
916   return wrapup_global_declarations (vec, len);
917 }
918 
919 
920 /* In C++, you don't have to write `struct S' to refer to `S'; you
921    can just use `S'.  We accomplish this by creating a TYPE_DECL as
922    if the user had written `typedef struct S S'.  Create and return
923    the TYPE_DECL for TYPE.  */
924 
925 tree
926 create_implicit_typedef (tree name, tree type)
927 {
928   tree decl;
929 
930   decl = build_decl (input_location, TYPE_DECL, name, type);
931   DECL_ARTIFICIAL (decl) = 1;
932   /* There are other implicit type declarations, like the one *within*
933      a class that allows you to write `S::S'.  We must distinguish
934      amongst these.  */
935   SET_DECL_IMPLICIT_TYPEDEF_P (decl);
936   TYPE_NAME (type) = decl;
937   TYPE_STUB_DECL (type) = decl;
938 
939   return decl;
940 }
941 
942 /* Remember a local name for name-mangling purposes.  */
943 
944 static void
945 push_local_name (tree decl)
946 {
947   size_t i, nelts;
948   tree t, name;
949 
950   timevar_start (TV_NAME_LOOKUP);
951 
952   name = DECL_NAME (decl);
953 
954   nelts = vec_safe_length (local_names);
955   for (i = 0; i < nelts; i++)
956     {
957       t = (*local_names)[i];
958       if (DECL_NAME (t) == name)
959 	{
960 	  if (!DECL_LANG_SPECIFIC (decl))
961 	    retrofit_lang_decl (decl);
962 	  DECL_LANG_SPECIFIC (decl)->u.base.u2sel = 1;
963 	  if (DECL_DISCRIMINATOR_SET_P (t))
964 	    DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
965 	  else
966 	    DECL_DISCRIMINATOR (decl) = 1;
967 
968 	  (*local_names)[i] = decl;
969 	  timevar_stop (TV_NAME_LOOKUP);
970 	  return;
971 	}
972     }
973 
974   vec_safe_push (local_names, decl);
975   timevar_stop (TV_NAME_LOOKUP);
976 }
977 
978 /* Subroutine of duplicate_decls: return truthvalue of whether
979    or not types of these decls match.
980 
981    For C++, we must compare the parameter list so that `int' can match
982    `int&' in a parameter position, but `int&' is not confused with
983    `const int&'.  */
984 
985 int
986 decls_match (tree newdecl, tree olddecl)
987 {
988   int types_match;
989 
990   if (newdecl == olddecl)
991     return 1;
992 
993   if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
994     /* If the two DECLs are not even the same kind of thing, we're not
995        interested in their types.  */
996     return 0;
997 
998   gcc_assert (DECL_P (newdecl));
999 
1000   if (TREE_CODE (newdecl) == FUNCTION_DECL)
1001     {
1002       tree f1 = TREE_TYPE (newdecl);
1003       tree f2 = TREE_TYPE (olddecl);
1004       tree p1 = TYPE_ARG_TYPES (f1);
1005       tree p2 = TYPE_ARG_TYPES (f2);
1006       tree r2;
1007 
1008       /* Specializations of different templates are different functions
1009 	 even if they have the same type.  */
1010       tree t1 = (DECL_USE_TEMPLATE (newdecl)
1011 		 ? DECL_TI_TEMPLATE (newdecl)
1012 		 : NULL_TREE);
1013       tree t2 = (DECL_USE_TEMPLATE (olddecl)
1014 		 ? DECL_TI_TEMPLATE (olddecl)
1015 		 : NULL_TREE);
1016       if (t1 != t2)
1017 	return 0;
1018 
1019       if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1020 	  && ! (DECL_EXTERN_C_P (newdecl)
1021 		&& DECL_EXTERN_C_P (olddecl)))
1022 	return 0;
1023 
1024       /* A new declaration doesn't match a built-in one unless it
1025 	 is also extern "C".  */
1026       if (DECL_IS_BUILTIN (olddecl)
1027 	  && DECL_EXTERN_C_P (olddecl) && !DECL_EXTERN_C_P (newdecl))
1028 	return 0;
1029 
1030       if (TREE_CODE (f1) != TREE_CODE (f2))
1031 	return 0;
1032 
1033       /* A declaration with deduced return type should use its pre-deduction
1034 	 type for declaration matching.  */
1035       r2 = fndecl_declared_return_type (olddecl);
1036 
1037       if (same_type_p (TREE_TYPE (f1), r2))
1038 	{
1039 	  if (!prototype_p (f2) && DECL_EXTERN_C_P (olddecl)
1040 	      && (DECL_BUILT_IN (olddecl)
1041 #ifndef NO_IMPLICIT_EXTERN_C
1042 		  || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
1043 		  || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
1044 #endif
1045 	      ))
1046 	    {
1047 	      types_match = self_promoting_args_p (p1);
1048 	      if (p1 == void_list_node)
1049 		TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1050 	    }
1051 #ifndef NO_IMPLICIT_EXTERN_C
1052 	  else if (!prototype_p (f1)
1053 		   && (DECL_EXTERN_C_P (olddecl)
1054 		       && DECL_IN_SYSTEM_HEADER (olddecl)
1055 		       && !DECL_CLASS_SCOPE_P (olddecl))
1056 		   && (DECL_EXTERN_C_P (newdecl)
1057 		       && DECL_IN_SYSTEM_HEADER (newdecl)
1058 		       && !DECL_CLASS_SCOPE_P (newdecl)))
1059 	    {
1060 	      types_match = self_promoting_args_p (p2);
1061 	      TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1062 	    }
1063 #endif
1064 	  else
1065 	    types_match =
1066 	      compparms (p1, p2)
1067 	      && type_memfn_rqual (f1) == type_memfn_rqual (f2)
1068 	      && (TYPE_ATTRIBUTES (TREE_TYPE (newdecl)) == NULL_TREE
1069 	          || comp_type_attributes (TREE_TYPE (newdecl),
1070 					   TREE_TYPE (olddecl)) != 0);
1071 	}
1072       else
1073 	types_match = 0;
1074 
1075       /* The decls dont match if they correspond to two different versions
1076 	 of the same function.   Disallow extern "C" functions to be
1077 	 versions for now.  */
1078       if (types_match
1079 	  && !DECL_EXTERN_C_P (newdecl)
1080 	  && !DECL_EXTERN_C_P (olddecl)
1081 	  && targetm.target_option.function_versions (newdecl, olddecl))
1082 	{
1083 	  /* Mark functions as versions if necessary.  Modify the mangled decl
1084 	     name if necessary.  */
1085 	  if (DECL_FUNCTION_VERSIONED (newdecl)
1086 	      && DECL_FUNCTION_VERSIONED (olddecl))
1087 	    return 0;
1088 	  if (!DECL_FUNCTION_VERSIONED (newdecl))
1089 	    {
1090 	      DECL_FUNCTION_VERSIONED (newdecl) = 1;
1091 	      if (DECL_ASSEMBLER_NAME_SET_P (newdecl))
1092 	        mangle_decl (newdecl);
1093 	    }
1094 	  if (!DECL_FUNCTION_VERSIONED (olddecl))
1095 	    {
1096 	      DECL_FUNCTION_VERSIONED (olddecl) = 1;
1097 	      if (DECL_ASSEMBLER_NAME_SET_P (olddecl))
1098 	       mangle_decl (olddecl);
1099 	    }
1100 	  cgraph_node::record_function_versions (olddecl, newdecl);
1101 	  return 0;
1102 	}
1103     }
1104   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1105     {
1106       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl))
1107 	  != TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)))
1108 	return 0;
1109 
1110       if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1111 				DECL_TEMPLATE_PARMS (olddecl)))
1112 	return 0;
1113 
1114       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1115 	types_match = same_type_p (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl)),
1116 				   TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl)));
1117       else
1118 	types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
1119 				   DECL_TEMPLATE_RESULT (newdecl));
1120     }
1121   else
1122     {
1123       /* Need to check scope for variable declaration (VAR_DECL).
1124 	 For typedef (TYPE_DECL), scope is ignored.  */
1125       if (VAR_P (newdecl)
1126 	  && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1127 	  /* [dcl.link]
1128 	     Two declarations for an object with C language linkage
1129 	     with the same name (ignoring the namespace that qualify
1130 	     it) that appear in different namespace scopes refer to
1131 	     the same object.  */
1132 	  && !(DECL_EXTERN_C_P (olddecl) && DECL_EXTERN_C_P (newdecl)))
1133 	return 0;
1134 
1135       if (TREE_TYPE (newdecl) == error_mark_node)
1136 	types_match = TREE_TYPE (olddecl) == error_mark_node;
1137       else if (TREE_TYPE (olddecl) == NULL_TREE)
1138 	types_match = TREE_TYPE (newdecl) == NULL_TREE;
1139       else if (TREE_TYPE (newdecl) == NULL_TREE)
1140 	types_match = 0;
1141       else
1142 	types_match = comptypes (TREE_TYPE (newdecl),
1143 				 TREE_TYPE (olddecl),
1144 				 COMPARE_REDECLARATION);
1145     }
1146 
1147   return types_match;
1148 }
1149 
1150 /* If NEWDECL is `static' and an `extern' was seen previously,
1151    warn about it.  OLDDECL is the previous declaration.
1152 
1153    Note that this does not apply to the C++ case of declaring
1154    a variable `extern const' and then later `const'.
1155 
1156    Don't complain about built-in functions, since they are beyond
1157    the user's control.  */
1158 
1159 void
1160 warn_extern_redeclared_static (tree newdecl, tree olddecl)
1161 {
1162   if (TREE_CODE (newdecl) == TYPE_DECL
1163       || TREE_CODE (newdecl) == TEMPLATE_DECL
1164       || TREE_CODE (newdecl) == CONST_DECL
1165       || TREE_CODE (newdecl) == NAMESPACE_DECL)
1166     return;
1167 
1168   /* Don't get confused by static member functions; that's a different
1169      use of `static'.  */
1170   if (TREE_CODE (newdecl) == FUNCTION_DECL
1171       && DECL_STATIC_FUNCTION_P (newdecl))
1172     return;
1173 
1174   /* If the old declaration was `static', or the new one isn't, then
1175      everything is OK.  */
1176   if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1177     return;
1178 
1179   /* It's OK to declare a builtin function as `static'.  */
1180   if (TREE_CODE (olddecl) == FUNCTION_DECL
1181       && DECL_ARTIFICIAL (olddecl))
1182     return;
1183 
1184   if (permerror (input_location,
1185 		 "%qD was declared %<extern%> and later %<static%>", newdecl))
1186     inform (input_location, "previous declaration of %q+D", olddecl);
1187 }
1188 
1189 /* NEW_DECL is a redeclaration of OLD_DECL; both are functions or
1190    function templates.  If their exception specifications do not
1191    match, issue a diagnostic.  */
1192 
1193 static void
1194 check_redeclaration_exception_specification (tree new_decl,
1195 					     tree old_decl)
1196 {
1197   tree new_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (new_decl));
1198   tree old_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (old_decl));
1199 
1200   /* Two default specs are equivalent, don't force evaluation.  */
1201   if (UNEVALUATED_NOEXCEPT_SPEC_P (new_exceptions)
1202       && UNEVALUATED_NOEXCEPT_SPEC_P (old_exceptions))
1203     return;
1204 
1205   maybe_instantiate_noexcept (new_decl);
1206   maybe_instantiate_noexcept (old_decl);
1207   new_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (new_decl));
1208   old_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (old_decl));
1209 
1210   /* [except.spec]
1211 
1212      If any declaration of a function has an exception-specification,
1213      all declarations, including the definition and an explicit
1214      specialization, of that function shall have an
1215      exception-specification with the same set of type-ids.  */
1216   if ((pedantic || ! DECL_IN_SYSTEM_HEADER (old_decl))
1217       && ! DECL_IS_BUILTIN (old_decl)
1218       && flag_exceptions
1219       && !comp_except_specs (new_exceptions, old_exceptions, ce_normal))
1220     {
1221       error ("declaration of %qF has a different exception specifier",
1222 	     new_decl);
1223       error ("from previous declaration %q+F", old_decl);
1224     }
1225 }
1226 
1227 /* Return true if OLD_DECL and NEW_DECL agree on constexprness.
1228    Otherwise issue diagnostics.  */
1229 
1230 static bool
1231 validate_constexpr_redeclaration (tree old_decl, tree new_decl)
1232 {
1233   old_decl = STRIP_TEMPLATE (old_decl);
1234   new_decl = STRIP_TEMPLATE (new_decl);
1235   if (!VAR_OR_FUNCTION_DECL_P (old_decl)
1236       || !VAR_OR_FUNCTION_DECL_P (new_decl))
1237     return true;
1238   if (DECL_DECLARED_CONSTEXPR_P (old_decl)
1239       == DECL_DECLARED_CONSTEXPR_P (new_decl))
1240     return true;
1241   if (TREE_CODE (old_decl) == FUNCTION_DECL)
1242     {
1243       if (DECL_BUILT_IN (old_decl))
1244 	{
1245 	  /* Hide a built-in declaration.  */
1246 	  DECL_DECLARED_CONSTEXPR_P (old_decl)
1247 	    = DECL_DECLARED_CONSTEXPR_P (new_decl);
1248 	  return true;
1249 	}
1250       /* 7.1.5 [dcl.constexpr]
1251 	 Note: An explicit specialization can differ from the template
1252 	 declaration with respect to the constexpr specifier.  */
1253       if (! DECL_TEMPLATE_SPECIALIZATION (old_decl)
1254 	  && DECL_TEMPLATE_SPECIALIZATION (new_decl))
1255 	return true;
1256 
1257       error ("redeclaration %qD differs in %<constexpr%>", new_decl);
1258       error ("from previous declaration %q+D", old_decl);
1259       return false;
1260     }
1261   return true;
1262 }
1263 
1264 /* DECL is a redeclaration of a function or function template.  If
1265    it does have default arguments issue a diagnostic.  Note: this
1266    function is used to enforce the requirements in C++11 8.3.6 about
1267    no default arguments in redeclarations.  */
1268 
1269 static void
1270 check_redeclaration_no_default_args (tree decl)
1271 {
1272   gcc_assert (DECL_DECLARES_FUNCTION_P (decl));
1273 
1274   for (tree t = FUNCTION_FIRST_USER_PARMTYPE (decl);
1275        t && t != void_list_node; t = TREE_CHAIN (t))
1276     if (TREE_PURPOSE (t))
1277       {
1278 	permerror (input_location,
1279 		   "redeclaration of %q#D may not have default "
1280 		   "arguments", decl);
1281 	return;
1282       }
1283 }
1284 
1285 #define GNU_INLINE_P(fn) (DECL_DECLARED_INLINE_P (fn)			\
1286 			  && lookup_attribute ("gnu_inline",		\
1287 					       DECL_ATTRIBUTES (fn)))
1288 
1289 /* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1290    If the redeclaration is invalid, a diagnostic is issued, and the
1291    error_mark_node is returned.  Otherwise, OLDDECL is returned.
1292 
1293    If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
1294    returned.
1295 
1296    NEWDECL_IS_FRIEND is true if NEWDECL was declared as a friend.  */
1297 
1298 tree
1299 duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
1300 {
1301   unsigned olddecl_uid = DECL_UID (olddecl);
1302   int olddecl_friend = 0, types_match = 0, hidden_friend = 0;
1303   int new_defines_function = 0;
1304   tree new_template_info;
1305 
1306   if (newdecl == olddecl)
1307     return olddecl;
1308 
1309   types_match = decls_match (newdecl, olddecl);
1310 
1311   /* If either the type of the new decl or the type of the old decl is an
1312      error_mark_node, then that implies that we have already issued an
1313      error (earlier) for some bogus type specification, and in that case,
1314      it is rather pointless to harass the user with yet more error message
1315      about the same declaration, so just pretend the types match here.  */
1316   if (TREE_TYPE (newdecl) == error_mark_node
1317       || TREE_TYPE (olddecl) == error_mark_node)
1318     return error_mark_node;
1319 
1320   if (UDLIT_OPER_P (DECL_NAME (newdecl))
1321       && UDLIT_OPER_P (DECL_NAME (olddecl)))
1322     {
1323       if (TREE_CODE (newdecl) == TEMPLATE_DECL
1324 	  && TREE_CODE (olddecl) != TEMPLATE_DECL
1325 	  && check_raw_literal_operator (olddecl))
1326 	error ("literal operator template %q+D conflicts with"
1327 	       " raw literal operator %qD", newdecl, olddecl);
1328       else if (TREE_CODE (newdecl) != TEMPLATE_DECL
1329 	       && TREE_CODE (olddecl) == TEMPLATE_DECL
1330 	       && check_raw_literal_operator (newdecl))
1331 	error ("raw literal operator %q+D conflicts with"
1332 	       " literal operator template %qD", newdecl, olddecl);
1333     }
1334 
1335   if (DECL_P (olddecl)
1336       && TREE_CODE (newdecl) == FUNCTION_DECL
1337       && TREE_CODE (olddecl) == FUNCTION_DECL
1338       && (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl)))
1339     {
1340       if (DECL_DECLARED_INLINE_P (newdecl)
1341 	  && DECL_UNINLINABLE (newdecl)
1342 	  && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1343 	/* Already warned elsewhere.  */;
1344       else if (DECL_DECLARED_INLINE_P (olddecl)
1345 	       && DECL_UNINLINABLE (olddecl)
1346 	       && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1347 	/* Already warned.  */;
1348       else if (DECL_DECLARED_INLINE_P (newdecl)
1349 	       && DECL_UNINLINABLE (olddecl)
1350 	       && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1351 	{
1352 	  if (warning (OPT_Wattributes, "function %q+D redeclared as inline",
1353 		       newdecl))
1354 	    inform (DECL_SOURCE_LOCATION (olddecl),
1355 		    "previous declaration of %qD with attribute noinline",
1356 		    olddecl);
1357 	}
1358       else if (DECL_DECLARED_INLINE_P (olddecl)
1359 	       && DECL_UNINLINABLE (newdecl)
1360 	       && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1361 	{
1362 	  if (warning (OPT_Wattributes, "function %q+D redeclared with "
1363 		       "attribute noinline", newdecl))
1364 	    inform (DECL_SOURCE_LOCATION (olddecl),
1365 		    "previous declaration of %qD was inline",
1366 		    olddecl);
1367 	}
1368     }
1369 
1370   /* Check for redeclaration and other discrepancies.  */
1371   if (TREE_CODE (olddecl) == FUNCTION_DECL
1372       && DECL_ARTIFICIAL (olddecl))
1373     {
1374       gcc_assert (!DECL_HIDDEN_FRIEND_P (olddecl));
1375       if (TREE_CODE (newdecl) != FUNCTION_DECL)
1376 	{
1377 	  /* Avoid warnings redeclaring built-ins which have not been
1378 	     explicitly declared.  */
1379 	  if (DECL_ANTICIPATED (olddecl))
1380 	    return NULL_TREE;
1381 
1382 	  /* If you declare a built-in or predefined function name as static,
1383 	     the old definition is overridden, but optionally warn this was a
1384 	     bad choice of name.  */
1385 	  if (! TREE_PUBLIC (newdecl))
1386 	    {
1387 	      warning (OPT_Wshadow,
1388                        DECL_BUILT_IN (olddecl)
1389                        ? G_("shadowing built-in function %q#D")
1390                        : G_("shadowing library function %q#D"), olddecl);
1391 	      /* Discard the old built-in function.  */
1392 	      return NULL_TREE;
1393 	    }
1394 	  /* If the built-in is not ansi, then programs can override
1395 	     it even globally without an error.  */
1396 	  else if (! DECL_BUILT_IN (olddecl))
1397 	    warning (0, "library function %q#D redeclared as non-function %q#D",
1398 		     olddecl, newdecl);
1399 	  else
1400 	    error ("declaration of %q#D conflicts with built-in "
1401 		   "declaration %q#D", newdecl, olddecl);
1402 	  return NULL_TREE;
1403 	}
1404       else if (DECL_OMP_DECLARE_REDUCTION_P (olddecl))
1405 	{
1406 	  gcc_assert (DECL_OMP_DECLARE_REDUCTION_P (newdecl));
1407 	  error_at (DECL_SOURCE_LOCATION (newdecl),
1408 		    "redeclaration of %<pragma omp declare reduction%>");
1409 	  inform (DECL_SOURCE_LOCATION (olddecl),
1410 		  "previous %<pragma omp declare reduction%> declaration");
1411 	  return error_mark_node;
1412 	}
1413       else if (!types_match)
1414 	{
1415 	  /* Avoid warnings redeclaring built-ins which have not been
1416 	     explicitly declared.  */
1417 	  if (DECL_ANTICIPATED (olddecl))
1418 	    {
1419 	      /* Deal with fileptr_type_node.  FILE type is not known
1420 		 at the time we create the builtins.  */
1421 	      tree t1, t2;
1422 
1423 	      for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1424 		   t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1425 		   t1 || t2;
1426 		   t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1427 		if (!t1 || !t2)
1428 		  break;
1429 		else if (TREE_VALUE (t2) == fileptr_type_node)
1430 		  {
1431 		    tree t = TREE_VALUE (t1);
1432 
1433 		    if (TYPE_PTR_P (t)
1434 			&& TYPE_IDENTIFIER (TREE_TYPE (t))
1435 			   == get_identifier ("FILE")
1436 			&& compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1437 		      {
1438 			tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1439 
1440 			TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1441 			  = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1442 			types_match = decls_match (newdecl, olddecl);
1443 			if (types_match)
1444 			  return duplicate_decls (newdecl, olddecl,
1445 						  newdecl_is_friend);
1446 			TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1447 		      }
1448 		  }
1449 		else if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1450 		  break;
1451 	    }
1452 	  else if ((DECL_EXTERN_C_P (newdecl)
1453 		    && DECL_EXTERN_C_P (olddecl))
1454 		   || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1455 				 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1456 	    {
1457 	      /* A near match; override the builtin.  */
1458 
1459 	      if (TREE_PUBLIC (newdecl))
1460 		warning (0, "new declaration %q#D ambiguates built-in "
1461 			 "declaration %q#D", newdecl, olddecl);
1462 	      else
1463 		warning (OPT_Wshadow,
1464                          DECL_BUILT_IN (olddecl)
1465                          ? G_("shadowing built-in function %q#D")
1466                          : G_("shadowing library function %q#D"), olddecl);
1467 	    }
1468 	  else
1469 	    /* Discard the old built-in function.  */
1470 	    return NULL_TREE;
1471 
1472 	  /* Replace the old RTL to avoid problems with inlining.  */
1473 	  COPY_DECL_RTL (newdecl, olddecl);
1474 	}
1475       /* Even if the types match, prefer the new declarations type for
1476 	 built-ins which have not been explicitly declared, for
1477 	 exception lists, etc...  */
1478       else if (DECL_IS_BUILTIN (olddecl))
1479 	{
1480 	  tree type = TREE_TYPE (newdecl);
1481 	  tree attribs = (*targetm.merge_type_attributes)
1482 	    (TREE_TYPE (olddecl), type);
1483 
1484 	  type = cp_build_type_attribute_variant (type, attribs);
1485 	  TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
1486 	}
1487 
1488       /* If a function is explicitly declared "throw ()", propagate that to
1489 	 the corresponding builtin.  */
1490       if (DECL_BUILT_IN_CLASS (olddecl) == BUILT_IN_NORMAL
1491 	  && DECL_ANTICIPATED (olddecl)
1492 	  && TREE_NOTHROW (newdecl)
1493 	  && !TREE_NOTHROW (olddecl))
1494 	{
1495 	  enum built_in_function fncode = DECL_FUNCTION_CODE (olddecl);
1496 	  tree tmpdecl = builtin_decl_explicit (fncode);
1497 	  if (tmpdecl && tmpdecl != olddecl && types_match)
1498 	    TREE_NOTHROW (tmpdecl)  = 1;
1499 	}
1500 
1501       /* Whether or not the builtin can throw exceptions has no
1502 	 bearing on this declarator.  */
1503       TREE_NOTHROW (olddecl) = 0;
1504 
1505       if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1506 	{
1507 	  /* If a builtin function is redeclared as `static', merge
1508 	     the declarations, but make the original one static.  */
1509 	  DECL_THIS_STATIC (olddecl) = 1;
1510 	  TREE_PUBLIC (olddecl) = 0;
1511 
1512 	  /* Make the old declaration consistent with the new one so
1513 	     that all remnants of the builtin-ness of this function
1514 	     will be banished.  */
1515 	  SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1516 	  COPY_DECL_RTL (newdecl, olddecl);
1517 	}
1518     }
1519   else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1520     {
1521       /* C++ Standard, 3.3, clause 4:
1522 	 "[Note: a namespace name or a class template name must be unique
1523 	 in its declarative region (7.3.2, clause 14). ]"  */
1524       if (TREE_CODE (olddecl) != NAMESPACE_DECL
1525 	  && TREE_CODE (newdecl) != NAMESPACE_DECL
1526 	  && (TREE_CODE (olddecl) != TEMPLATE_DECL
1527 	      || TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) != TYPE_DECL)
1528 	  && (TREE_CODE (newdecl) != TEMPLATE_DECL
1529 	      || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != TYPE_DECL))
1530 	{
1531 	  if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1532 	       && TREE_CODE (newdecl) != TYPE_DECL)
1533 	      || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1534 		  && TREE_CODE (olddecl) != TYPE_DECL))
1535 	    {
1536 	      /* We do nothing special here, because C++ does such nasty
1537 		 things with TYPE_DECLs.  Instead, just let the TYPE_DECL
1538 		 get shadowed, and know that if we need to find a TYPE_DECL
1539 		 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1540 		 slot of the identifier.  */
1541 	      return NULL_TREE;
1542 	    }
1543 
1544 	    if ((TREE_CODE (newdecl) == FUNCTION_DECL
1545 		 && DECL_FUNCTION_TEMPLATE_P (olddecl))
1546 		|| (TREE_CODE (olddecl) == FUNCTION_DECL
1547 		    && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1548 	      return NULL_TREE;
1549 	}
1550 
1551       error ("%q#D redeclared as different kind of symbol", newdecl);
1552       if (TREE_CODE (olddecl) == TREE_LIST)
1553 	olddecl = TREE_VALUE (olddecl);
1554       inform (DECL_SOURCE_LOCATION (olddecl),
1555 	      "previous declaration %q#D", olddecl);
1556 
1557       return error_mark_node;
1558     }
1559   else if (!types_match)
1560     {
1561       if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
1562 	/* These are certainly not duplicate declarations; they're
1563 	   from different scopes.  */
1564 	return NULL_TREE;
1565 
1566       if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1567 	{
1568 	  /* The name of a class template may not be declared to refer to
1569 	     any other template, class, function, object, namespace, value,
1570 	     or type in the same scope.  */
1571 	  if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1572 	      || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1573 	    {
1574 	      error ("conflicting declaration of template %q#D", newdecl);
1575 	      inform (DECL_SOURCE_LOCATION (olddecl),
1576 		      "previous declaration %q#D", olddecl);
1577 	      return error_mark_node;
1578 	    }
1579 	  else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1580 		   && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1581 		   && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
1582 				 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
1583 		   && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1584 					   DECL_TEMPLATE_PARMS (olddecl))
1585 		   /* Template functions can be disambiguated by
1586 		      return type.  */
1587 		   && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1588 				   TREE_TYPE (TREE_TYPE (olddecl))))
1589 	    {
1590 	      error ("ambiguating new declaration %q#D", newdecl);
1591 	      inform (DECL_SOURCE_LOCATION (olddecl),
1592 		      "old declaration %q#D", olddecl);
1593 	    }
1594 	  return NULL_TREE;
1595 	}
1596       if (TREE_CODE (newdecl) == FUNCTION_DECL)
1597 	{
1598 	  if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
1599 	    {
1600 	      error ("conflicting declaration of C function %q#D",
1601 		     newdecl);
1602 	      inform (DECL_SOURCE_LOCATION (olddecl),
1603 		      "previous declaration %q#D", olddecl);
1604 	      return NULL_TREE;
1605 	    }
1606 	  /* For function versions, params and types match, but they
1607 	     are not ambiguous.  */
1608 	  else if ((!DECL_FUNCTION_VERSIONED (newdecl)
1609 		    && !DECL_FUNCTION_VERSIONED (olddecl))
1610 		   && compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1611 			      TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1612 	    {
1613 	      error ("ambiguating new declaration of %q#D", newdecl);
1614 	      inform (DECL_SOURCE_LOCATION (olddecl),
1615 		      "old declaration %q#D", olddecl);
1616               return error_mark_node;
1617 	    }
1618 	  else
1619 	    return NULL_TREE;
1620 	}
1621       else
1622 	{
1623 	  error ("conflicting declaration %q#D", newdecl);
1624 	  inform (DECL_SOURCE_LOCATION (olddecl),
1625 		  "previous declaration as %q#D", olddecl);
1626 	  return error_mark_node;
1627 	}
1628     }
1629   else if (TREE_CODE (newdecl) == FUNCTION_DECL
1630 	    && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1631 		 && (!DECL_TEMPLATE_INFO (newdecl)
1632 		     || (DECL_TI_TEMPLATE (newdecl)
1633 			 != DECL_TI_TEMPLATE (olddecl))))
1634 		|| (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1635 		    && (!DECL_TEMPLATE_INFO (olddecl)
1636 			|| (DECL_TI_TEMPLATE (olddecl)
1637 			    != DECL_TI_TEMPLATE (newdecl))))))
1638     /* It's OK to have a template specialization and a non-template
1639        with the same type, or to have specializations of two
1640        different templates with the same type.  Note that if one is a
1641        specialization, and the other is an instantiation of the same
1642        template, that we do not exit at this point.  That situation
1643        can occur if we instantiate a template class, and then
1644        specialize one of its methods.  This situation is valid, but
1645        the declarations must be merged in the usual way.  */
1646     return NULL_TREE;
1647   else if (TREE_CODE (newdecl) == FUNCTION_DECL
1648 	   && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
1649 		&& !DECL_USE_TEMPLATE (newdecl))
1650 	       || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1651 		   && !DECL_USE_TEMPLATE (olddecl))))
1652     /* One of the declarations is a template instantiation, and the
1653        other is not a template at all.  That's OK.  */
1654     return NULL_TREE;
1655   else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1656     {
1657       /* In [namespace.alias] we have:
1658 
1659 	   In a declarative region, a namespace-alias-definition can be
1660 	   used to redefine a namespace-alias declared in that declarative
1661 	   region to refer only to the namespace to which it already
1662 	   refers.
1663 
1664 	 Therefore, if we encounter a second alias directive for the same
1665 	 alias, we can just ignore the second directive.  */
1666       if (DECL_NAMESPACE_ALIAS (newdecl)
1667 	  && (DECL_NAMESPACE_ALIAS (newdecl)
1668 	      == DECL_NAMESPACE_ALIAS (olddecl)))
1669 	return olddecl;
1670       /* [namespace.alias]
1671 
1672 	 A namespace-name or namespace-alias shall not be declared as
1673 	 the name of any other entity in the same declarative region.
1674 	 A namespace-name defined at global scope shall not be
1675 	 declared as the name of any other entity in any global scope
1676 	 of the program.  */
1677       error ("conflicting declaration of namespace %qD", newdecl);
1678       inform (DECL_SOURCE_LOCATION (olddecl),
1679 	      "previous declaration of namespace %qD here", olddecl);
1680       return error_mark_node;
1681     }
1682   else
1683     {
1684       const char *errmsg = redeclaration_error_message (newdecl, olddecl);
1685       if (errmsg)
1686 	{
1687 	  error_at (DECL_SOURCE_LOCATION (newdecl), errmsg, newdecl);
1688 	  if (DECL_NAME (olddecl) != NULL_TREE)
1689 	    inform (input_location,
1690 		    (DECL_INITIAL (olddecl) && namespace_bindings_p ())
1691 		    ? G_("%q+#D previously defined here")
1692 		    : G_("%q+#D previously declared here"), olddecl);
1693 	  return error_mark_node;
1694 	}
1695       else if (TREE_CODE (olddecl) == FUNCTION_DECL
1696 	       && DECL_INITIAL (olddecl) != NULL_TREE
1697 	       && !prototype_p (TREE_TYPE (olddecl))
1698 	       && prototype_p (TREE_TYPE (newdecl)))
1699 	{
1700 	  /* Prototype decl follows defn w/o prototype.  */
1701 	  if (warning_at (DECL_SOURCE_LOCATION (newdecl), 0,
1702 			  "prototype specified for %q#D", newdecl))
1703 	    inform (DECL_SOURCE_LOCATION (olddecl),
1704 		    "previous non-prototype definition here");
1705 	}
1706       else if (VAR_OR_FUNCTION_DECL_P (olddecl)
1707 	       && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
1708 	{
1709 	  /* [dcl.link]
1710 	     If two declarations of the same function or object
1711 	     specify different linkage-specifications ..., the program
1712 	     is ill-formed.... Except for functions with C++ linkage,
1713 	     a function declaration without a linkage specification
1714 	     shall not precede the first linkage specification for
1715 	     that function.  A function can be declared without a
1716 	     linkage specification after an explicit linkage
1717 	     specification has been seen; the linkage explicitly
1718 	     specified in the earlier declaration is not affected by
1719 	     such a function declaration.
1720 
1721 	     DR 563 raises the question why the restrictions on
1722 	     functions should not also apply to objects.  Older
1723 	     versions of G++ silently ignore the linkage-specification
1724 	     for this example:
1725 
1726 	       namespace N {
1727                  extern int i;
1728    	         extern "C" int i;
1729                }
1730 
1731              which is clearly wrong.  Therefore, we now treat objects
1732 	     like functions.  */
1733 	  if (current_lang_depth () == 0)
1734 	    {
1735 	      /* There is no explicit linkage-specification, so we use
1736 		 the linkage from the previous declaration.  */
1737 	      if (!DECL_LANG_SPECIFIC (newdecl))
1738 		retrofit_lang_decl (newdecl);
1739 	      SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1740 	    }
1741 	  else
1742 	    {
1743 	      error ("conflicting declaration of %q#D with %qL linkage",
1744 		     newdecl, DECL_LANGUAGE (newdecl));
1745 	      inform (DECL_SOURCE_LOCATION (olddecl),
1746 		      "previous declaration with %qL linkage",
1747 		      DECL_LANGUAGE (olddecl));
1748 	    }
1749 	}
1750 
1751       if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
1752 	;
1753       else if (TREE_CODE (olddecl) == FUNCTION_DECL)
1754 	{
1755 	  /* Note: free functions, as TEMPLATE_DECLs, are handled below.  */
1756 	  if (DECL_FUNCTION_MEMBER_P (olddecl)
1757 	      && (/* grokfndecl passes member function templates too
1758 		     as FUNCTION_DECLs.  */
1759 		  DECL_TEMPLATE_INFO (olddecl)
1760 		  /* C++11 8.3.6/6.
1761 		     Default arguments for a member function of a class
1762 		     template shall be specified on the initial declaration
1763 		     of the member function within the class template.  */
1764 		  || CLASSTYPE_TEMPLATE_INFO (CP_DECL_CONTEXT (olddecl))))
1765 	    check_redeclaration_no_default_args (newdecl);
1766 	  else
1767 	    {
1768 	      tree t1 = FUNCTION_FIRST_USER_PARMTYPE (olddecl);
1769 	      tree t2 = FUNCTION_FIRST_USER_PARMTYPE (newdecl);
1770 	      int i = 1;
1771 
1772 	      for (; t1 && t1 != void_list_node;
1773 		   t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1774 		if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1775 		  {
1776 		    if (1 == simple_cst_equal (TREE_PURPOSE (t1),
1777 					       TREE_PURPOSE (t2)))
1778 		      {
1779 			if (permerror (input_location,
1780 				       "default argument given for parameter "
1781 				       "%d of %q#D", i, newdecl))
1782 			  inform (DECL_SOURCE_LOCATION (olddecl),
1783 				  "previous specification in %q#D here",
1784 				  olddecl);
1785 		      }
1786 		    else
1787 		      {
1788 			error ("default argument given for parameter %d "
1789 			       "of %q#D", i, newdecl);
1790 			inform (DECL_SOURCE_LOCATION (olddecl),
1791 				"previous specification in %q#D here",
1792 				olddecl);
1793 		      }
1794 		  }
1795 	    }
1796 	}
1797     }
1798 
1799   /* Do not merge an implicit typedef with an explicit one.  In:
1800 
1801        class A;
1802        ...
1803        typedef class A A __attribute__ ((foo));
1804 
1805      the attribute should apply only to the typedef.  */
1806   if (TREE_CODE (olddecl) == TYPE_DECL
1807       && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1808 	  || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
1809     return NULL_TREE;
1810 
1811   /* If new decl is `static' and an `extern' was seen previously,
1812      warn about it.  */
1813   warn_extern_redeclared_static (newdecl, olddecl);
1814 
1815   if (!validate_constexpr_redeclaration (olddecl, newdecl))
1816     return error_mark_node;
1817 
1818   /* We have committed to returning 1 at this point.  */
1819   if (TREE_CODE (newdecl) == FUNCTION_DECL)
1820     {
1821       /* Now that functions must hold information normally held
1822 	 by field decls, there is extra work to do so that
1823 	 declaration information does not get destroyed during
1824 	 definition.  */
1825       if (DECL_VINDEX (olddecl))
1826 	DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1827       if (DECL_CONTEXT (olddecl))
1828 	DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
1829       DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1830       DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1831       DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
1832       DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
1833       DECL_INVALID_OVERRIDER_P (newdecl) |= DECL_INVALID_OVERRIDER_P (olddecl);
1834       DECL_FINAL_P (newdecl) |= DECL_FINAL_P (olddecl);
1835       DECL_OVERRIDE_P (newdecl) |= DECL_OVERRIDE_P (olddecl);
1836       DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
1837       if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
1838 	SET_OVERLOADED_OPERATOR_CODE
1839 	  (newdecl, DECL_OVERLOADED_OPERATOR_P (olddecl));
1840       new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
1841 
1842       /* Optionally warn about more than one declaration for the same
1843 	 name, but don't warn about a function declaration followed by a
1844 	 definition.  */
1845       if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1846 	  && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
1847 	  /* Don't warn about extern decl followed by definition.  */
1848 	  && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
1849 	  /* Don't warn about friends, let add_friend take care of it.  */
1850 	  && ! (newdecl_is_friend || DECL_FRIEND_P (olddecl))
1851 	  /* Don't warn about declaration followed by specialization.  */
1852 	  && (! DECL_TEMPLATE_SPECIALIZATION (newdecl)
1853 	      || DECL_TEMPLATE_SPECIALIZATION (olddecl)))
1854 	{
1855 	  if (warning (OPT_Wredundant_decls,
1856 		       "redundant redeclaration of %qD in same scope",
1857 		       newdecl))
1858 	    inform (DECL_SOURCE_LOCATION (olddecl),
1859 		    "previous declaration of %qD", olddecl);
1860 	}
1861 
1862       if (!(DECL_TEMPLATE_INSTANTIATION (olddecl)
1863 	    && DECL_TEMPLATE_SPECIALIZATION (newdecl)))
1864 	{
1865 	  if (DECL_DELETED_FN (newdecl))
1866 	    {
1867 	      error ("deleted definition of %qD", newdecl);
1868 	      inform (DECL_SOURCE_LOCATION (olddecl),
1869 		      "previous declaration of %qD", olddecl);
1870 	    }
1871 	  DECL_DELETED_FN (newdecl) |= DECL_DELETED_FN (olddecl);
1872 	}
1873     }
1874 
1875   /* Deal with C++: must preserve virtual function table size.  */
1876   if (TREE_CODE (olddecl) == TYPE_DECL)
1877     {
1878       tree newtype = TREE_TYPE (newdecl);
1879       tree oldtype = TREE_TYPE (olddecl);
1880 
1881       if (newtype != error_mark_node && oldtype != error_mark_node
1882 	  && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
1883 	CLASSTYPE_FRIEND_CLASSES (newtype)
1884 	  = CLASSTYPE_FRIEND_CLASSES (oldtype);
1885 
1886       DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
1887     }
1888 
1889   /* Copy all the DECL_... slots specified in the new decl
1890      except for any that we copy here from the old type.  */
1891   DECL_ATTRIBUTES (newdecl)
1892     = (*targetm.merge_decl_attributes) (olddecl, newdecl);
1893 
1894   if (DECL_DECLARES_FUNCTION_P (olddecl) && DECL_DECLARES_FUNCTION_P (newdecl))
1895     {
1896       olddecl_friend = DECL_FRIEND_P (olddecl);
1897       hidden_friend = (DECL_ANTICIPATED (olddecl)
1898 		       && DECL_HIDDEN_FRIEND_P (olddecl)
1899 		       && newdecl_is_friend);
1900       if (!hidden_friend)
1901 	{
1902 	  DECL_ANTICIPATED (olddecl) = 0;
1903 	  DECL_HIDDEN_FRIEND_P (olddecl) = 0;
1904 	}
1905     }
1906 
1907   if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1908     {
1909       tree old_result;
1910       tree new_result;
1911       old_result = DECL_TEMPLATE_RESULT (olddecl);
1912       new_result = DECL_TEMPLATE_RESULT (newdecl);
1913       TREE_TYPE (olddecl) = TREE_TYPE (old_result);
1914       DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
1915 	= chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
1916 		   DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
1917 
1918       DECL_ATTRIBUTES (old_result)
1919 	= (*targetm.merge_decl_attributes) (old_result, new_result);
1920 
1921       if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1922 	{
1923 	  /* Per C++11 8.3.6/4, default arguments cannot be added in later
1924 	     declarations of a function template.  */
1925 	  if (DECL_SOURCE_LOCATION (newdecl)
1926 	      != DECL_SOURCE_LOCATION (olddecl))
1927 	    check_redeclaration_no_default_args (newdecl);
1928 
1929 	  check_default_args (newdecl);
1930 
1931 	  if (GNU_INLINE_P (old_result) != GNU_INLINE_P (new_result)
1932 	      && DECL_INITIAL (new_result))
1933 	    {
1934 	      if (DECL_INITIAL (old_result))
1935 		DECL_UNINLINABLE (old_result) = 1;
1936 	      else
1937 		DECL_UNINLINABLE (old_result) = DECL_UNINLINABLE (new_result);
1938 	      DECL_EXTERNAL (old_result) = DECL_EXTERNAL (new_result);
1939 	      DECL_NOT_REALLY_EXTERN (old_result)
1940 		= DECL_NOT_REALLY_EXTERN (new_result);
1941 	      DECL_INTERFACE_KNOWN (old_result)
1942 		= DECL_INTERFACE_KNOWN (new_result);
1943 	      DECL_DECLARED_INLINE_P (old_result)
1944 		= DECL_DECLARED_INLINE_P (new_result);
1945 	      DECL_DISREGARD_INLINE_LIMITS (old_result)
1946 	        |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1947 
1948 	    }
1949 	  else
1950 	    {
1951 	      DECL_DECLARED_INLINE_P (old_result)
1952 		|= DECL_DECLARED_INLINE_P (new_result);
1953 	      DECL_DISREGARD_INLINE_LIMITS (old_result)
1954 	        |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1955 	      check_redeclaration_exception_specification (newdecl, olddecl);
1956 	    }
1957 	}
1958 
1959       /* If the new declaration is a definition, update the file and
1960 	 line information on the declaration, and also make
1961 	 the old declaration the same definition.  */
1962       if (DECL_INITIAL (new_result) != NULL_TREE)
1963 	{
1964 	  DECL_SOURCE_LOCATION (olddecl)
1965 	    = DECL_SOURCE_LOCATION (old_result)
1966 	    = DECL_SOURCE_LOCATION (newdecl);
1967 	  DECL_INITIAL (old_result) = DECL_INITIAL (new_result);
1968 	  if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1969 	    {
1970 	      tree parm;
1971 	      DECL_ARGUMENTS (old_result)
1972 		= DECL_ARGUMENTS (new_result);
1973 	      for (parm = DECL_ARGUMENTS (old_result); parm;
1974 		   parm = DECL_CHAIN (parm))
1975 		DECL_CONTEXT (parm) = old_result;
1976 	    }
1977 	}
1978 
1979       return olddecl;
1980     }
1981 
1982   if (types_match)
1983     {
1984       if (TREE_CODE (newdecl) == FUNCTION_DECL)
1985 	check_redeclaration_exception_specification (newdecl, olddecl);
1986 
1987       /* Automatically handles default parameters.  */
1988       tree oldtype = TREE_TYPE (olddecl);
1989       tree newtype;
1990 
1991       /* For typedefs use the old type, as the new type's DECL_NAME points
1992 	 at newdecl, which will be ggc_freed.  */
1993       if (TREE_CODE (newdecl) == TYPE_DECL)
1994 	{
1995 	  /* But NEWTYPE might have an attribute, honor that.  */
1996 	  tree tem = TREE_TYPE (newdecl);
1997 	  newtype = oldtype;
1998 
1999 	  if (TYPE_USER_ALIGN (tem))
2000 	    {
2001 	      if (TYPE_ALIGN (tem) > TYPE_ALIGN (newtype))
2002 		TYPE_ALIGN (newtype) = TYPE_ALIGN (tem);
2003 	      TYPE_USER_ALIGN (newtype) = true;
2004 	    }
2005 
2006 	  /* And remove the new type from the variants list.  */
2007 	  if (TYPE_NAME (TREE_TYPE (newdecl)) == newdecl)
2008 	    {
2009 	      tree remove = TREE_TYPE (newdecl);
2010 	      for (tree t = TYPE_MAIN_VARIANT (remove); ;
2011 		   t = TYPE_NEXT_VARIANT (t))
2012 		if (TYPE_NEXT_VARIANT (t) == remove)
2013 		  {
2014 		    TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (remove);
2015 		    break;
2016 		  }
2017 	    }
2018 	}
2019       else
2020 	/* Merge the data types specified in the two decls.  */
2021 	newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
2022 
2023       if (VAR_P (newdecl))
2024 	{
2025 	  DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
2026 	  /* For already initialized vars, TREE_READONLY could have been
2027 	     cleared in cp_finish_decl, because the var needs runtime
2028 	     initialization or destruction.  Make sure not to set
2029 	     TREE_READONLY on it again.  */
2030 	  if (DECL_INITIALIZED_P (olddecl)
2031 	      && !DECL_EXTERNAL (olddecl)
2032 	      && !TREE_READONLY (olddecl))
2033 	    TREE_READONLY (newdecl) = 0;
2034 	  DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
2035 	  DECL_NONTRIVIALLY_INITIALIZED_P (newdecl)
2036 	    |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl);
2037 	  DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
2038 	    |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
2039 
2040 	  /* Merge the threadprivate attribute from OLDDECL into NEWDECL.  */
2041 	  if (DECL_LANG_SPECIFIC (olddecl)
2042 	      && CP_DECL_THREADPRIVATE_P (olddecl))
2043 	    {
2044 	      /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed.  */
2045 	      if (!DECL_LANG_SPECIFIC (newdecl))
2046 		retrofit_lang_decl (newdecl);
2047 
2048 	      CP_DECL_THREADPRIVATE_P (newdecl) = 1;
2049 	    }
2050 	}
2051 
2052       TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
2053 
2054       if (TREE_CODE (newdecl) == FUNCTION_DECL)
2055 	check_default_args (newdecl);
2056 
2057       /* Lay the type out, unless already done.  */
2058       if (! same_type_p (newtype, oldtype)
2059 	  && TREE_TYPE (newdecl) != error_mark_node
2060 	  && !(processing_template_decl && uses_template_parms (newdecl)))
2061 	layout_type (TREE_TYPE (newdecl));
2062 
2063       if ((VAR_P (newdecl)
2064 	   || TREE_CODE (newdecl) == PARM_DECL
2065 	   || TREE_CODE (newdecl) == RESULT_DECL
2066 	   || TREE_CODE (newdecl) == FIELD_DECL
2067 	   || TREE_CODE (newdecl) == TYPE_DECL)
2068 	  && !(processing_template_decl && uses_template_parms (newdecl)))
2069 	layout_decl (newdecl, 0);
2070 
2071       /* Merge the type qualifiers.  */
2072       if (TREE_READONLY (newdecl))
2073 	TREE_READONLY (olddecl) = 1;
2074       if (TREE_THIS_VOLATILE (newdecl))
2075 	TREE_THIS_VOLATILE (olddecl) = 1;
2076       if (TREE_NOTHROW (newdecl))
2077 	TREE_NOTHROW (olddecl) = 1;
2078 
2079       /* Merge deprecatedness.  */
2080       if (TREE_DEPRECATED (newdecl))
2081 	TREE_DEPRECATED (olddecl) = 1;
2082 
2083       /* Preserve function specific target and optimization options */
2084       if (TREE_CODE (newdecl) == FUNCTION_DECL)
2085 	{
2086 	  if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl)
2087 	      && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl))
2088 	    DECL_FUNCTION_SPECIFIC_TARGET (newdecl)
2089 	      = DECL_FUNCTION_SPECIFIC_TARGET (olddecl);
2090 
2091 	  if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl)
2092 	      && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl))
2093 	    DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl)
2094 	      = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl);
2095 	}
2096 
2097       /* Merge the initialization information.  */
2098       if (DECL_INITIAL (newdecl) == NULL_TREE
2099 	  && DECL_INITIAL (olddecl) != NULL_TREE)
2100 	{
2101 	  DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
2102 	  DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
2103 	  if (TREE_CODE (newdecl) == FUNCTION_DECL)
2104 	    {
2105 	      DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
2106 	      DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
2107 	    }
2108 	}
2109 
2110       if (TREE_CODE (newdecl) == FUNCTION_DECL)
2111 	{
2112 	  DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
2113 	    |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
2114 	  DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
2115 	  TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
2116 	  TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
2117 	  DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
2118 	  DECL_IS_OPERATOR_NEW (newdecl) |= DECL_IS_OPERATOR_NEW (olddecl);
2119 	  DECL_PURE_P (newdecl) |= DECL_PURE_P (olddecl);
2120 	  TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
2121 	  DECL_LOOPING_CONST_OR_PURE_P (newdecl)
2122 	    |= DECL_LOOPING_CONST_OR_PURE_P (olddecl);
2123 	  /* Keep the old RTL.  */
2124 	  COPY_DECL_RTL (olddecl, newdecl);
2125 	}
2126       else if (VAR_P (newdecl)
2127 	       && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
2128 	{
2129 	  /* Keep the old RTL.  We cannot keep the old RTL if the old
2130 	     declaration was for an incomplete object and the new
2131 	     declaration is not since many attributes of the RTL will
2132 	     change.  */
2133 	  COPY_DECL_RTL (olddecl, newdecl);
2134 	}
2135     }
2136   /* If cannot merge, then use the new type and qualifiers,
2137      and don't preserve the old rtl.  */
2138   else
2139     {
2140       /* Clean out any memory we had of the old declaration.  */
2141       tree oldstatic = value_member (olddecl, static_aggregates);
2142       if (oldstatic)
2143 	TREE_VALUE (oldstatic) = error_mark_node;
2144 
2145       TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
2146       TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
2147       TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
2148       TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
2149     }
2150 
2151   /* Merge the storage class information.  */
2152   merge_weak (newdecl, olddecl);
2153 
2154   DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
2155   TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
2156   TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
2157   if (! DECL_EXTERNAL (olddecl))
2158     DECL_EXTERNAL (newdecl) = 0;
2159 
2160   new_template_info = NULL_TREE;
2161   if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
2162     {
2163       bool new_redefines_gnu_inline = false;
2164 
2165       if (new_defines_function
2166 	  && ((DECL_INTERFACE_KNOWN (olddecl)
2167 	       && TREE_CODE (olddecl) == FUNCTION_DECL)
2168 	      || (TREE_CODE (olddecl) == TEMPLATE_DECL
2169 		  && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
2170 		      == FUNCTION_DECL))))
2171 	{
2172 	  tree fn = olddecl;
2173 
2174 	  if (TREE_CODE (fn) == TEMPLATE_DECL)
2175 	    fn = DECL_TEMPLATE_RESULT (olddecl);
2176 
2177 	  new_redefines_gnu_inline = GNU_INLINE_P (fn) && DECL_INITIAL (fn);
2178 	}
2179 
2180       if (!new_redefines_gnu_inline)
2181 	{
2182 	  DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
2183 	  DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
2184 	  DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
2185 	}
2186       DECL_TEMPLATE_INSTANTIATED (newdecl)
2187 	|= DECL_TEMPLATE_INSTANTIATED (olddecl);
2188       DECL_ODR_USED (newdecl) |= DECL_ODR_USED (olddecl);
2189 
2190       /* If the OLDDECL is an instantiation and/or specialization,
2191 	 then the NEWDECL must be too.  But, it may not yet be marked
2192 	 as such if the caller has created NEWDECL, but has not yet
2193 	 figured out that it is a redeclaration.  */
2194       if (!DECL_USE_TEMPLATE (newdecl))
2195 	DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
2196 
2197       /* Don't really know how much of the language-specific
2198 	 values we should copy from old to new.  */
2199       DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
2200       DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
2201       DECL_INITIALIZED_IN_CLASS_P (newdecl)
2202 	|= DECL_INITIALIZED_IN_CLASS_P (olddecl);
2203 
2204       if (LANG_DECL_HAS_MIN (newdecl))
2205 	{
2206 	  DECL_LANG_SPECIFIC (newdecl)->u.min.u2 =
2207 	    DECL_LANG_SPECIFIC (olddecl)->u.min.u2;
2208 	  if (DECL_TEMPLATE_INFO (newdecl))
2209 	    {
2210 	      new_template_info = DECL_TEMPLATE_INFO (newdecl);
2211 	      if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2212 		  && DECL_TEMPLATE_SPECIALIZATION (newdecl))
2213 		/* Remember the presence of explicit specialization args.  */
2214 		TINFO_USED_TEMPLATE_ID (DECL_TEMPLATE_INFO (olddecl))
2215 		  = TINFO_USED_TEMPLATE_ID (new_template_info);
2216 	    }
2217 	  DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
2218 	}
2219       /* Only functions have these fields.  */
2220       if (DECL_DECLARES_FUNCTION_P (newdecl))
2221 	{
2222 	  DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
2223 	  DECL_BEFRIENDING_CLASSES (newdecl)
2224 	    = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
2225 		       DECL_BEFRIENDING_CLASSES (olddecl));
2226 	  /* DECL_THUNKS is only valid for virtual functions,
2227 	     otherwise it is a DECL_FRIEND_CONTEXT.  */
2228 	  if (DECL_VIRTUAL_P (newdecl))
2229 	    SET_DECL_THUNKS (newdecl, DECL_THUNKS (olddecl));
2230 	}
2231       /* Only variables have this field.  */
2232       else if (VAR_P (newdecl)
2233 	       && VAR_HAD_UNKNOWN_BOUND (olddecl))
2234 	SET_VAR_HAD_UNKNOWN_BOUND (newdecl);
2235     }
2236 
2237   if (TREE_CODE (newdecl) == FUNCTION_DECL)
2238     {
2239       tree parm;
2240 
2241       /* Merge parameter attributes. */
2242       tree oldarg, newarg;
2243       for (oldarg = DECL_ARGUMENTS(olddecl),
2244                newarg = DECL_ARGUMENTS(newdecl);
2245            oldarg && newarg;
2246            oldarg = DECL_CHAIN(oldarg), newarg = DECL_CHAIN(newarg)) {
2247           DECL_ATTRIBUTES (newarg)
2248               = (*targetm.merge_decl_attributes) (oldarg, newarg);
2249           DECL_ATTRIBUTES (oldarg) = DECL_ATTRIBUTES (newarg);
2250       }
2251 
2252       if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2253 	  && !DECL_TEMPLATE_INSTANTIATION (newdecl))
2254 	{
2255 	  /* If newdecl is not a specialization, then it is not a
2256 	     template-related function at all.  And that means that we
2257 	     should have exited above, returning 0.  */
2258 	  gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
2259 
2260 	  if (DECL_ODR_USED (olddecl))
2261 	    /* From [temp.expl.spec]:
2262 
2263 	       If a template, a member template or the member of a class
2264 	       template is explicitly specialized then that
2265 	       specialization shall be declared before the first use of
2266 	       that specialization that would cause an implicit
2267 	       instantiation to take place, in every translation unit in
2268 	       which such a use occurs.  */
2269 	    error ("explicit specialization of %qD after first use",
2270 		      olddecl);
2271 
2272 	  SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
2273 	  DECL_COMDAT (newdecl) = (TREE_PUBLIC (newdecl)
2274 				   && DECL_DECLARED_INLINE_P (newdecl));
2275 
2276 	  /* Don't propagate visibility from the template to the
2277 	     specialization here.  We'll do that in determine_visibility if
2278 	     appropriate.  */
2279 	  DECL_VISIBILITY_SPECIFIED (olddecl) = 0;
2280 
2281 	  /* [temp.expl.spec/14] We don't inline explicit specialization
2282 	     just because the primary template says so.  */
2283 
2284 	  /* But still keep DECL_DISREGARD_INLINE_LIMITS in sync with
2285 	     the always_inline attribute.  */
2286 	  if (DECL_DISREGARD_INLINE_LIMITS (olddecl)
2287 	      && !DECL_DISREGARD_INLINE_LIMITS (newdecl))
2288 	    {
2289 	      if (DECL_DECLARED_INLINE_P (newdecl))
2290 		DECL_DISREGARD_INLINE_LIMITS (newdecl) = true;
2291 	      else
2292 		DECL_ATTRIBUTES (newdecl)
2293 		  = remove_attribute ("always_inline",
2294 				      DECL_ATTRIBUTES (newdecl));
2295 	    }
2296 	}
2297       else if (new_defines_function && DECL_INITIAL (olddecl))
2298 	{
2299 	  /* Never inline re-defined extern inline functions.
2300 	     FIXME: this could be better handled by keeping both
2301 	     function as separate declarations.  */
2302 	  DECL_UNINLINABLE (newdecl) = 1;
2303 	}
2304       else
2305 	{
2306 	  if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
2307 	    DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
2308 
2309 	  DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
2310 
2311 	  DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
2312 	    = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
2313 
2314 	  DECL_DISREGARD_INLINE_LIMITS (newdecl)
2315 	    = DECL_DISREGARD_INLINE_LIMITS (olddecl)
2316 	    = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
2317 	       || DECL_DISREGARD_INLINE_LIMITS (olddecl));
2318 	}
2319 
2320       /* Preserve abstractness on cloned [cd]tors.  */
2321       DECL_ABSTRACT_P (newdecl) = DECL_ABSTRACT_P (olddecl);
2322 
2323       /* Update newdecl's parms to point at olddecl.  */
2324       for (parm = DECL_ARGUMENTS (newdecl); parm;
2325 	   parm = DECL_CHAIN (parm))
2326 	DECL_CONTEXT (parm) = olddecl;
2327 
2328       if (! types_match)
2329 	{
2330 	  SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
2331 	  COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
2332 	  COPY_DECL_RTL (newdecl, olddecl);
2333 	}
2334       if (! types_match || new_defines_function)
2335 	{
2336 	  /* These need to be copied so that the names are available.
2337 	     Note that if the types do match, we'll preserve inline
2338 	     info and other bits, but if not, we won't.  */
2339 	  DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
2340 	  DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
2341 	}
2342       /* If redeclaring a builtin function, it stays built in
2343 	 if newdecl is a gnu_inline definition, or if newdecl is just
2344 	 a declaration.  */
2345       if (DECL_BUILT_IN (olddecl)
2346 	  && (new_defines_function ? GNU_INLINE_P (newdecl) : types_match))
2347 	{
2348 	  DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
2349 	  DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
2350 	  /* If we're keeping the built-in definition, keep the rtl,
2351 	     regardless of declaration matches.  */
2352 	  COPY_DECL_RTL (olddecl, newdecl);
2353 	  if (DECL_BUILT_IN_CLASS (newdecl) == BUILT_IN_NORMAL)
2354 	    {
2355 	      enum built_in_function fncode = DECL_FUNCTION_CODE (newdecl);
2356 	      switch (fncode)
2357 		{
2358 		  /* If a compatible prototype of these builtin functions
2359 		     is seen, assume the runtime implements it with the
2360 		     expected semantics.  */
2361 		case BUILT_IN_STPCPY:
2362 		  if (builtin_decl_explicit_p (fncode))
2363 		    set_builtin_decl_implicit_p (fncode, true);
2364 		  break;
2365 		default:
2366 		  if (builtin_decl_explicit_p (fncode))
2367 		    set_builtin_decl_declared_p (fncode, true);
2368 		  break;
2369 		}
2370 	    }
2371 	}
2372       if (new_defines_function)
2373 	/* If defining a function declared with other language
2374 	   linkage, use the previously declared language linkage.  */
2375 	SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
2376       else if (types_match)
2377 	{
2378 	  DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
2379 	  /* Don't clear out the arguments if we're just redeclaring a
2380 	     function.  */
2381 	  if (DECL_ARGUMENTS (olddecl))
2382 	    DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
2383 	}
2384     }
2385   else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
2386     NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
2387 
2388   /* Now preserve various other info from the definition.  */
2389   TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
2390   TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
2391   DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
2392   COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
2393 
2394   /* Warn about conflicting visibility specifications.  */
2395   if (DECL_VISIBILITY_SPECIFIED (olddecl)
2396       && DECL_VISIBILITY_SPECIFIED (newdecl)
2397       && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
2398     {
2399       if (warning_at (DECL_SOURCE_LOCATION (newdecl), OPT_Wattributes,
2400 		      "%qD: visibility attribute ignored because it "
2401 		      "conflicts with previous declaration", newdecl))
2402 	inform (DECL_SOURCE_LOCATION (olddecl),
2403 		"previous declaration of %qD", olddecl);
2404     }
2405   /* Choose the declaration which specified visibility.  */
2406   if (DECL_VISIBILITY_SPECIFIED (olddecl))
2407     {
2408       DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
2409       DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2410     }
2411   /* Init priority used to be merged from newdecl to olddecl by the memcpy,
2412      so keep this behavior.  */
2413   if (VAR_P (newdecl) && DECL_HAS_INIT_PRIORITY_P (newdecl))
2414     {
2415       SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
2416       DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
2417     }
2418   /* Likewise for DECL_ALIGN, DECL_USER_ALIGN and DECL_PACKED.  */
2419   if (DECL_ALIGN (olddecl) > DECL_ALIGN (newdecl))
2420     {
2421       DECL_ALIGN (newdecl) = DECL_ALIGN (olddecl);
2422       DECL_USER_ALIGN (newdecl) |= DECL_USER_ALIGN (olddecl);
2423     }
2424   DECL_USER_ALIGN (olddecl) = DECL_USER_ALIGN (newdecl);
2425   if (TREE_CODE (newdecl) == FIELD_DECL)
2426     DECL_PACKED (olddecl) = DECL_PACKED (newdecl);
2427 
2428   /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
2429      with that from NEWDECL below.  */
2430   if (DECL_LANG_SPECIFIC (olddecl))
2431     {
2432       gcc_assert (DECL_LANG_SPECIFIC (olddecl)
2433 		  != DECL_LANG_SPECIFIC (newdecl));
2434       ggc_free (DECL_LANG_SPECIFIC (olddecl));
2435     }
2436 
2437   /* Merge the USED information.  */
2438   if (TREE_USED (olddecl))
2439     TREE_USED (newdecl) = 1;
2440   else if (TREE_USED (newdecl))
2441     TREE_USED (olddecl) = 1;
2442   if (VAR_P (newdecl))
2443     {
2444       if (DECL_READ_P (olddecl))
2445 	DECL_READ_P (newdecl) = 1;
2446       else if (DECL_READ_P (newdecl))
2447 	DECL_READ_P (olddecl) = 1;
2448     }
2449   if (DECL_PRESERVE_P (olddecl))
2450     DECL_PRESERVE_P (newdecl) = 1;
2451   else if (DECL_PRESERVE_P (newdecl))
2452     DECL_PRESERVE_P (olddecl) = 1;
2453 
2454   /* Merge the DECL_FUNCTION_VERSIONED information.  newdecl will be copied
2455      to olddecl and deleted.  */
2456   if (TREE_CODE (newdecl) == FUNCTION_DECL
2457       && DECL_FUNCTION_VERSIONED (olddecl))
2458     {
2459       /* Set the flag for newdecl so that it gets copied to olddecl.  */
2460       DECL_FUNCTION_VERSIONED (newdecl) = 1;
2461       /* newdecl will be purged after copying to olddecl and is no longer
2462          a version.  */
2463       cgraph_node::delete_function_version (newdecl);
2464     }
2465 
2466   if (TREE_CODE (newdecl) == FUNCTION_DECL)
2467     {
2468       int function_size;
2469       struct symtab_node *snode = symtab_node::get (olddecl);
2470 
2471       function_size = sizeof (struct tree_decl_common);
2472 
2473       memcpy ((char *) olddecl + sizeof (struct tree_common),
2474 	      (char *) newdecl + sizeof (struct tree_common),
2475 	      function_size - sizeof (struct tree_common));
2476 
2477       memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2478 	      (char *) newdecl + sizeof (struct tree_decl_common),
2479 	      sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common));
2480 
2481       /* Preserve symtab node mapping.  */
2482       olddecl->decl_with_vis.symtab_node = snode;
2483 
2484       if (new_template_info)
2485 	/* If newdecl is a template instantiation, it is possible that
2486 	   the following sequence of events has occurred:
2487 
2488 	   o A friend function was declared in a class template.  The
2489 	   class template was instantiated.
2490 
2491 	   o The instantiation of the friend declaration was
2492 	   recorded on the instantiation list, and is newdecl.
2493 
2494 	   o Later, however, instantiate_class_template called pushdecl
2495 	   on the newdecl to perform name injection.  But, pushdecl in
2496 	   turn called duplicate_decls when it discovered that another
2497 	   declaration of a global function with the same name already
2498 	   existed.
2499 
2500 	   o Here, in duplicate_decls, we decided to clobber newdecl.
2501 
2502 	   If we're going to do that, we'd better make sure that
2503 	   olddecl, and not newdecl, is on the list of
2504 	   instantiations so that if we try to do the instantiation
2505 	   again we won't get the clobbered declaration.  */
2506 	reregister_specialization (newdecl,
2507 				   new_template_info,
2508 				   olddecl);
2509     }
2510   else
2511     {
2512       size_t size = tree_code_size (TREE_CODE (newdecl));
2513 
2514       memcpy ((char *) olddecl + sizeof (struct tree_common),
2515 	      (char *) newdecl + sizeof (struct tree_common),
2516 	      sizeof (struct tree_decl_common) - sizeof (struct tree_common));
2517       switch (TREE_CODE (newdecl))
2518 	{
2519 	case LABEL_DECL:
2520 	case VAR_DECL:
2521 	case RESULT_DECL:
2522 	case PARM_DECL:
2523 	case FIELD_DECL:
2524 	case TYPE_DECL:
2525 	case CONST_DECL:
2526 	  {
2527             struct symtab_node *snode = NULL;
2528 
2529             if (TREE_CODE (newdecl) == VAR_DECL
2530 		&& (TREE_STATIC (olddecl) || TREE_PUBLIC (olddecl) || DECL_EXTERNAL (olddecl)))
2531 	      snode = symtab_node::get (olddecl);
2532 	    memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2533 		    (char *) newdecl + sizeof (struct tree_decl_common),
2534 		    size - sizeof (struct tree_decl_common)
2535 		    + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2536             if (TREE_CODE (newdecl) == VAR_DECL)
2537 	      olddecl->decl_with_vis.symtab_node = snode;
2538 	  }
2539 	  break;
2540 	default:
2541 	  memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2542 		  (char *) newdecl + sizeof (struct tree_decl_common),
2543 		  sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common)
2544 		  + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2545 	  break;
2546 	}
2547     }
2548 
2549   if (TREE_CODE (newdecl) == FUNCTION_DECL
2550       || TREE_CODE (newdecl) == VAR_DECL)
2551     {
2552       if (DECL_EXTERNAL (olddecl)
2553 	  || TREE_PUBLIC (olddecl)
2554 	  || TREE_STATIC (olddecl))
2555 	{
2556 	  /* Merge the section attribute.
2557 	     We want to issue an error if the sections conflict but that must be
2558 	     done later in decl_attributes since we are called before attributes
2559 	     are assigned.  */
2560 	  if (DECL_SECTION_NAME (newdecl) != NULL)
2561 	    set_decl_section_name (olddecl, DECL_SECTION_NAME (newdecl));
2562 
2563 	  if (DECL_ONE_ONLY (newdecl))
2564 	    {
2565 	      struct symtab_node *oldsym, *newsym;
2566 	      if (TREE_CODE (olddecl) == FUNCTION_DECL)
2567 		oldsym = cgraph_node::get_create (olddecl);
2568 	      else
2569 		oldsym = varpool_node::get_create (olddecl);
2570 	      newsym = symtab_node::get (newdecl);
2571 	      oldsym->set_comdat_group (newsym->get_comdat_group ());
2572 	    }
2573 	}
2574 
2575       if (TREE_CODE (newdecl) == VAR_DECL
2576 	  && DECL_THREAD_LOCAL_P (newdecl))
2577 	set_decl_tls_model (olddecl, DECL_TLS_MODEL (newdecl));
2578     }
2579 
2580   DECL_UID (olddecl) = olddecl_uid;
2581   if (olddecl_friend)
2582     DECL_FRIEND_P (olddecl) = 1;
2583   if (hidden_friend)
2584     {
2585       DECL_ANTICIPATED (olddecl) = 1;
2586       DECL_HIDDEN_FRIEND_P (olddecl) = 1;
2587     }
2588 
2589   /* NEWDECL contains the merged attribute lists.
2590      Update OLDDECL to be the same.  */
2591   DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
2592 
2593   /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2594     so that encode_section_info has a chance to look at the new decl
2595     flags and attributes.  */
2596   if (DECL_RTL_SET_P (olddecl)
2597       && (TREE_CODE (olddecl) == FUNCTION_DECL
2598 	  || (VAR_P (olddecl)
2599 	      && TREE_STATIC (olddecl))))
2600     make_decl_rtl (olddecl);
2601 
2602   /* The NEWDECL will no longer be needed.  Because every out-of-class
2603      declaration of a member results in a call to duplicate_decls,
2604      freeing these nodes represents in a significant savings.
2605 
2606      Before releasing the node, be sore to remove function from symbol
2607      table that might have been inserted there to record comdat group.
2608      Be sure to however do not free DECL_STRUCT_FUNCTION becuase this
2609      structure is shared in between newdecl and oldecl.  */
2610   if (TREE_CODE (newdecl) == FUNCTION_DECL)
2611     DECL_STRUCT_FUNCTION (newdecl) = NULL;
2612   if (TREE_CODE (newdecl) == FUNCTION_DECL
2613       || TREE_CODE (newdecl) == VAR_DECL)
2614     {
2615       struct symtab_node *snode = symtab_node::get (newdecl);
2616       if (snode)
2617 	snode->remove ();
2618     }
2619   ggc_free (newdecl);
2620 
2621   return olddecl;
2622 }
2623 
2624 /* Return zero if the declaration NEWDECL is valid
2625    when the declaration OLDDECL (assumed to be for the same name)
2626    has already been seen.
2627    Otherwise return an error message format string with a %s
2628    where the identifier should go.  */
2629 
2630 static const char *
2631 redeclaration_error_message (tree newdecl, tree olddecl)
2632 {
2633   if (TREE_CODE (newdecl) == TYPE_DECL)
2634     {
2635       /* Because C++ can put things into name space for free,
2636 	 constructs like "typedef struct foo { ... } foo"
2637 	 would look like an erroneous redeclaration.  */
2638       if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
2639 	return NULL;
2640       else
2641 	return G_("redefinition of %q#D");
2642     }
2643   else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2644     {
2645       /* If this is a pure function, its olddecl will actually be
2646 	 the original initialization to `0' (which we force to call
2647 	 abort()).  Don't complain about redefinition in this case.  */
2648       if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
2649 	  && DECL_INITIAL (olddecl) == NULL_TREE)
2650 	return NULL;
2651 
2652       /* If both functions come from different namespaces, this is not
2653 	 a redeclaration - this is a conflict with a used function.  */
2654       if (DECL_NAMESPACE_SCOPE_P (olddecl)
2655 	  && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
2656 	  && ! decls_match (olddecl, newdecl))
2657 	return G_("%qD conflicts with used function");
2658 
2659       /* We'll complain about linkage mismatches in
2660 	 warn_extern_redeclared_static.  */
2661 
2662       /* Defining the same name twice is no good.  */
2663       if (DECL_INITIAL (olddecl) != NULL_TREE
2664 	  && DECL_INITIAL (newdecl) != NULL_TREE)
2665 	{
2666 	  if (DECL_NAME (olddecl) == NULL_TREE)
2667 	    return G_("%q#D not declared in class");
2668 	  else if (!GNU_INLINE_P (olddecl)
2669 		   || GNU_INLINE_P (newdecl))
2670 	    return G_("redefinition of %q#D");
2671 	}
2672 
2673       if (DECL_DECLARED_INLINE_P (olddecl) && DECL_DECLARED_INLINE_P (newdecl))
2674 	{
2675 	  bool olda = GNU_INLINE_P (olddecl);
2676 	  bool newa = GNU_INLINE_P (newdecl);
2677 
2678 	  if (olda != newa)
2679 	    {
2680 	      if (newa)
2681 		return G_("%q+D redeclared inline with "
2682 			  "%<gnu_inline%> attribute");
2683 	      else
2684 		return G_("%q+D redeclared inline without "
2685 			  "%<gnu_inline%> attribute");
2686 	    }
2687 	}
2688 
2689       check_abi_tag_redeclaration
2690 	(olddecl, lookup_attribute ("abi_tag", DECL_ATTRIBUTES (olddecl)),
2691 	 lookup_attribute ("abi_tag", DECL_ATTRIBUTES (newdecl)));
2692 
2693       return NULL;
2694     }
2695   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2696     {
2697       tree nt, ot;
2698 
2699       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2700 	{
2701 	  if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
2702 	      && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
2703 	    return G_("redefinition of %q#D");
2704 	  return NULL;
2705 	}
2706 
2707       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
2708 	  || (DECL_TEMPLATE_RESULT (newdecl)
2709 	      == DECL_TEMPLATE_RESULT (olddecl)))
2710 	return NULL;
2711 
2712       nt = DECL_TEMPLATE_RESULT (newdecl);
2713       if (DECL_TEMPLATE_INFO (nt))
2714 	nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
2715       ot = DECL_TEMPLATE_RESULT (olddecl);
2716       if (DECL_TEMPLATE_INFO (ot))
2717 	ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
2718       if (DECL_INITIAL (nt) && DECL_INITIAL (ot)
2719 	  && (!GNU_INLINE_P (ot) || GNU_INLINE_P (nt)))
2720 	return G_("redefinition of %q#D");
2721 
2722       if (DECL_DECLARED_INLINE_P (ot) && DECL_DECLARED_INLINE_P (nt))
2723 	{
2724 	  bool olda = GNU_INLINE_P (ot);
2725 	  bool newa = GNU_INLINE_P (nt);
2726 
2727 	  if (olda != newa)
2728 	    {
2729 	      if (newa)
2730 		return G_("%q+D redeclared inline with "
2731 			  "%<gnu_inline%> attribute");
2732 	      else
2733 		return G_("%q+D redeclared inline without "
2734 		     	  "%<gnu_inline%> attribute");
2735 	    }
2736 	}
2737 
2738       /* Core issue #226 (C++0x):
2739 
2740            If a friend function template declaration specifies a
2741            default template-argument, that declaration shall be a
2742            definition and shall be the only declaration of the
2743            function template in the translation unit.  */
2744       if ((cxx_dialect != cxx98)
2745           && TREE_CODE (ot) == FUNCTION_DECL && DECL_FRIEND_P (ot)
2746           && !check_default_tmpl_args (nt, DECL_TEMPLATE_PARMS (newdecl),
2747                                        /*is_primary=*/true,
2748 				       /*is_partial=*/false,
2749                                        /*is_friend_decl=*/2))
2750         return G_("redeclaration of friend %q#D "
2751 	 	  "may not have default template arguments");
2752 
2753       return NULL;
2754     }
2755   else if (VAR_P (newdecl)
2756 	   && DECL_THREAD_LOCAL_P (newdecl) != DECL_THREAD_LOCAL_P (olddecl)
2757 	   && (! DECL_LANG_SPECIFIC (olddecl)
2758 	       || ! CP_DECL_THREADPRIVATE_P (olddecl)
2759 	       || DECL_THREAD_LOCAL_P (newdecl)))
2760     {
2761       /* Only variables can be thread-local, and all declarations must
2762 	 agree on this property.  */
2763       if (DECL_THREAD_LOCAL_P (newdecl))
2764 	return G_("thread-local declaration of %q#D follows "
2765 	          "non-thread-local declaration");
2766       else
2767 	return G_("non-thread-local declaration of %q#D follows "
2768 	          "thread-local declaration");
2769     }
2770   else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
2771     {
2772       /* The objects have been declared at namespace scope.  If either
2773 	 is a member of an anonymous union, then this is an invalid
2774 	 redeclaration.  For example:
2775 
2776 	   int i;
2777 	   union { int i; };
2778 
2779 	   is invalid.  */
2780       if ((VAR_P (newdecl) && DECL_ANON_UNION_VAR_P (newdecl))
2781 	  || (VAR_P (olddecl) && DECL_ANON_UNION_VAR_P (olddecl)))
2782 	return G_("redeclaration of %q#D");
2783       /* If at least one declaration is a reference, there is no
2784 	 conflict.  For example:
2785 
2786 	   int i = 3;
2787 	   extern int i;
2788 
2789 	 is valid.  */
2790       if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
2791 	return NULL;
2792       /* Reject two definitions.  */
2793       return G_("redefinition of %q#D");
2794     }
2795   else
2796     {
2797       /* Objects declared with block scope:  */
2798       /* Reject two definitions, and reject a definition
2799 	 together with an external reference.  */
2800       if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
2801 	return G_("redeclaration of %q#D");
2802       return NULL;
2803     }
2804 }
2805 
2806 /* Hash and equality functions for the named_label table.  */
2807 
2808 hashval_t
2809 named_label_hasher::hash (named_label_entry *ent)
2810 {
2811   return DECL_UID (ent->label_decl);
2812 }
2813 
2814 bool
2815 named_label_hasher::equal (named_label_entry *a, named_label_entry *b)
2816 {
2817   return a->label_decl == b->label_decl;
2818 }
2819 
2820 /* Create a new label, named ID.  */
2821 
2822 static tree
2823 make_label_decl (tree id, int local_p)
2824 {
2825   struct named_label_entry *ent;
2826   tree decl;
2827 
2828   decl = build_decl (input_location, LABEL_DECL, id, void_type_node);
2829 
2830   DECL_CONTEXT (decl) = current_function_decl;
2831   DECL_MODE (decl) = VOIDmode;
2832   C_DECLARED_LABEL_FLAG (decl) = local_p;
2833 
2834   /* Say where one reference is to the label, for the sake of the
2835      error if it is not defined.  */
2836   DECL_SOURCE_LOCATION (decl) = input_location;
2837 
2838   /* Record the fact that this identifier is bound to this label.  */
2839   SET_IDENTIFIER_LABEL_VALUE (id, decl);
2840 
2841   /* Create the label htab for the function on demand.  */
2842   if (!named_labels)
2843     named_labels = hash_table<named_label_hasher>::create_ggc (13);
2844 
2845   /* Record this label on the list of labels used in this function.
2846      We do this before calling make_label_decl so that we get the
2847      IDENTIFIER_LABEL_VALUE before the new label is declared.  */
2848   ent = ggc_cleared_alloc<named_label_entry> ();
2849   ent->label_decl = decl;
2850 
2851   named_label_entry **slot = named_labels->find_slot (ent, INSERT);
2852   gcc_assert (*slot == NULL);
2853   *slot = ent;
2854 
2855   return decl;
2856 }
2857 
2858 /* Look for a label named ID in the current function.  If one cannot
2859    be found, create one.  (We keep track of used, but undefined,
2860    labels, and complain about them at the end of a function.)  */
2861 
2862 static tree
2863 lookup_label_1 (tree id)
2864 {
2865   tree decl;
2866 
2867   /* You can't use labels at global scope.  */
2868   if (current_function_decl == NULL_TREE)
2869     {
2870       error ("label %qE referenced outside of any function", id);
2871       return NULL_TREE;
2872     }
2873 
2874   /* See if we've already got this label.  */
2875   decl = IDENTIFIER_LABEL_VALUE (id);
2876   if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
2877     return decl;
2878 
2879   decl = make_label_decl (id, /*local_p=*/0);
2880   return decl;
2881 }
2882 
2883 /* Wrapper for lookup_label_1.  */
2884 
2885 tree
2886 lookup_label (tree id)
2887 {
2888   tree ret;
2889   bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
2890   ret = lookup_label_1 (id);
2891   timevar_cond_stop (TV_NAME_LOOKUP, subtime);
2892   return ret;
2893 }
2894 
2895 /* Declare a local label named ID.  */
2896 
2897 tree
2898 declare_local_label (tree id)
2899 {
2900   tree decl;
2901   cp_label_binding bind;
2902 
2903   /* Add a new entry to the SHADOWED_LABELS list so that when we leave
2904      this scope we can restore the old value of IDENTIFIER_TYPE_VALUE.  */
2905   bind.prev_value = IDENTIFIER_LABEL_VALUE (id);
2906 
2907   decl = make_label_decl (id, /*local_p=*/1);
2908   bind.label = decl;
2909   vec_safe_push (current_binding_level->shadowed_labels, bind);
2910 
2911   return decl;
2912 }
2913 
2914 /* Returns nonzero if it is ill-formed to jump past the declaration of
2915    DECL.  Returns 2 if it's also a real problem.  */
2916 
2917 static int
2918 decl_jump_unsafe (tree decl)
2919 {
2920   /* [stmt.dcl]/3: A program that jumps from a point where a local variable
2921      with automatic storage duration is not in scope to a point where it is
2922      in scope is ill-formed unless the variable has scalar type, class type
2923      with a trivial default constructor and a trivial destructor, a
2924      cv-qualified version of one of these types, or an array of one of the
2925      preceding types and is declared without an initializer (8.5).  */
2926   tree type = TREE_TYPE (decl);
2927 
2928   if (!VAR_P (decl) || TREE_STATIC (decl)
2929       || type == error_mark_node)
2930     return 0;
2931 
2932   if (DECL_NONTRIVIALLY_INITIALIZED_P (decl)
2933       || variably_modified_type_p (type, NULL_TREE))
2934     return 2;
2935 
2936   if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
2937     return 1;
2938 
2939   return 0;
2940 }
2941 
2942 /* A subroutine of check_previous_goto_1 and check_goto to identify a branch
2943    to the user.  */
2944 
2945 static bool
2946 identify_goto (tree decl, location_t loc, const location_t *locus,
2947 	       diagnostic_t diag_kind)
2948 {
2949   bool complained
2950     = (decl ? emit_diagnostic (diag_kind, loc, 0, "jump to label %qD", decl)
2951 	    : emit_diagnostic (diag_kind, loc, 0, "jump to case label"));
2952   if (complained && locus)
2953     inform (*locus, "  from here");
2954   return complained;
2955 }
2956 
2957 /* Check that a single previously seen jump to a newly defined label
2958    is OK.  DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
2959    the jump context; NAMES are the names in scope in LEVEL at the jump
2960    context; LOCUS is the source position of the jump or 0.  Returns
2961    true if all is well.  */
2962 
2963 static bool
2964 check_previous_goto_1 (tree decl, cp_binding_level* level, tree names,
2965 		       bool exited_omp, const location_t *locus)
2966 {
2967   cp_binding_level *b;
2968   bool complained = false;
2969   int identified = 0;
2970   bool saw_eh = false, saw_omp = false;
2971 
2972   if (exited_omp)
2973     {
2974       complained = identify_goto (decl, input_location, locus, DK_ERROR);
2975       if (complained)
2976 	inform (input_location, "  exits OpenMP structured block");
2977       saw_omp = true;
2978       identified = 2;
2979     }
2980 
2981   for (b = current_binding_level; b ; b = b->level_chain)
2982     {
2983       tree new_decls, old_decls = (b == level ? names : NULL_TREE);
2984 
2985       for (new_decls = b->names; new_decls != old_decls;
2986 	   new_decls = (DECL_P (new_decls) ? DECL_CHAIN (new_decls)
2987 			: TREE_CHAIN (new_decls)))
2988 	{
2989 	  int problem = decl_jump_unsafe (new_decls);
2990 	  if (! problem)
2991 	    continue;
2992 
2993 	  if (!identified)
2994 	    {
2995 	      complained = identify_goto (decl, input_location, locus,
2996 					  DK_PERMERROR);
2997 	      identified = 1;
2998 	    }
2999 	  if (complained)
3000 	    {
3001 	      if (problem > 1)
3002 		inform (input_location,
3003 			"  crosses initialization of %q+#D", new_decls);
3004 	      else
3005 		inform (input_location, "  enters scope of %q+#D which has "
3006 			"non-trivial destructor", new_decls);
3007 	    }
3008 	}
3009 
3010       if (b == level)
3011 	break;
3012       if ((b->kind == sk_try || b->kind == sk_catch) && !saw_eh)
3013 	{
3014 	  if (identified < 2)
3015 	    {
3016 	      complained = identify_goto (decl, input_location, locus,
3017 					  DK_ERROR);
3018 	      identified = 2;
3019 	    }
3020 	  if (complained)
3021 	    {
3022 	      if (b->kind == sk_try)
3023 		inform (input_location, "  enters try block");
3024 	      else
3025 		inform (input_location, "  enters catch block");
3026 	    }
3027 	  saw_eh = true;
3028 	}
3029       if (b->kind == sk_omp && !saw_omp)
3030 	{
3031 	  if (identified < 2)
3032 	    {
3033 	      complained = identify_goto (decl, input_location, locus,
3034 					  DK_ERROR);
3035 	      identified = 2;
3036 	    }
3037 	  if (complained)
3038 	    inform (input_location, "  enters OpenMP structured block");
3039 	  saw_omp = true;
3040 	}
3041     }
3042 
3043   return !identified;
3044 }
3045 
3046 static void
3047 check_previous_goto (tree decl, struct named_label_use_entry *use)
3048 {
3049   check_previous_goto_1 (decl, use->binding_level,
3050 			 use->names_in_scope, use->in_omp_scope,
3051 			 &use->o_goto_locus);
3052 }
3053 
3054 static bool
3055 check_switch_goto (cp_binding_level* level)
3056 {
3057   return check_previous_goto_1 (NULL_TREE, level, level->names, false, NULL);
3058 }
3059 
3060 /* Check that a new jump to a label DECL is OK.  Called by
3061    finish_goto_stmt.  */
3062 
3063 void
3064 check_goto (tree decl)
3065 {
3066   struct named_label_entry *ent, dummy;
3067   bool saw_catch = false, complained = false;
3068   int identified = 0;
3069   tree bad;
3070   unsigned ix;
3071 
3072   /* We can't know where a computed goto is jumping.
3073      So we assume that it's OK.  */
3074   if (TREE_CODE (decl) != LABEL_DECL)
3075     return;
3076 
3077   /* We didn't record any information about this label when we created it,
3078      and there's not much point since it's trivial to analyze as a return.  */
3079   if (decl == cdtor_label)
3080     return;
3081 
3082   dummy.label_decl = decl;
3083   ent = named_labels->find (&dummy);
3084   gcc_assert (ent != NULL);
3085 
3086   /* If the label hasn't been defined yet, defer checking.  */
3087   if (! DECL_INITIAL (decl))
3088     {
3089       struct named_label_use_entry *new_use;
3090 
3091       /* Don't bother creating another use if the last goto had the
3092 	 same data, and will therefore create the same set of errors.  */
3093       if (ent->uses
3094 	  && ent->uses->names_in_scope == current_binding_level->names)
3095 	return;
3096 
3097       new_use = ggc_alloc<named_label_use_entry> ();
3098       new_use->binding_level = current_binding_level;
3099       new_use->names_in_scope = current_binding_level->names;
3100       new_use->o_goto_locus = input_location;
3101       new_use->in_omp_scope = false;
3102 
3103       new_use->next = ent->uses;
3104       ent->uses = new_use;
3105       return;
3106     }
3107 
3108   if (ent->in_try_scope || ent->in_catch_scope
3109       || ent->in_omp_scope || !vec_safe_is_empty (ent->bad_decls))
3110     {
3111       diagnostic_t diag_kind = DK_PERMERROR;
3112       if (ent->in_try_scope || ent->in_catch_scope || ent->in_omp_scope)
3113 	diag_kind = DK_ERROR;
3114       complained = identify_goto (decl, DECL_SOURCE_LOCATION (decl),
3115 				  &input_location, diag_kind);
3116       identified = 1 + (diag_kind == DK_ERROR);
3117     }
3118 
3119   FOR_EACH_VEC_SAFE_ELT (ent->bad_decls, ix, bad)
3120     {
3121       int u = decl_jump_unsafe (bad);
3122 
3123       if (u > 1 && DECL_ARTIFICIAL (bad))
3124 	{
3125 	  /* Can't skip init of __exception_info.  */
3126 	  if (identified == 1)
3127 	    {
3128 	      complained = identify_goto (decl, DECL_SOURCE_LOCATION (decl),
3129 					  &input_location, DK_ERROR);
3130 	      identified = 2;
3131 	    }
3132 	  if (complained)
3133 	    inform (DECL_SOURCE_LOCATION (bad), "  enters catch block");
3134 	  saw_catch = true;
3135 	}
3136       else if (complained)
3137 	{
3138 	  if (u > 1)
3139 	    inform (input_location, "  skips initialization of %q+#D", bad);
3140 	  else
3141 	    inform (input_location, "  enters scope of %q+#D which has "
3142 		    "non-trivial destructor", bad);
3143 	}
3144     }
3145 
3146   if (complained)
3147     {
3148       if (ent->in_try_scope)
3149 	inform (input_location, "  enters try block");
3150       else if (ent->in_catch_scope && !saw_catch)
3151 	inform (input_location, "  enters catch block");
3152     }
3153 
3154   if (ent->in_omp_scope)
3155     {
3156       if (complained)
3157 	inform (input_location, "  enters OpenMP structured block");
3158     }
3159   else if (flag_openmp)
3160     {
3161       cp_binding_level *b;
3162       for (b = current_binding_level; b ; b = b->level_chain)
3163 	{
3164 	  if (b == ent->binding_level)
3165 	    break;
3166 	  if (b->kind == sk_omp)
3167 	    {
3168 	      if (identified < 2)
3169 		{
3170 		  complained = identify_goto (decl,
3171 					      DECL_SOURCE_LOCATION (decl),
3172 					      &input_location, DK_ERROR);
3173 		  identified = 2;
3174 		}
3175 	      if (complained)
3176 		inform (input_location, "  exits OpenMP structured block");
3177 	      break;
3178 	    }
3179 	}
3180     }
3181 }
3182 
3183 /* Check that a return is ok wrt OpenMP structured blocks.
3184    Called by finish_return_stmt.  Returns true if all is well.  */
3185 
3186 bool
3187 check_omp_return (void)
3188 {
3189   cp_binding_level *b;
3190   for (b = current_binding_level; b ; b = b->level_chain)
3191     if (b->kind == sk_omp)
3192       {
3193 	error ("invalid exit from OpenMP structured block");
3194 	return false;
3195       }
3196     else if (b->kind == sk_function_parms)
3197       break;
3198   return true;
3199 }
3200 
3201 /* Define a label, specifying the location in the source file.
3202    Return the LABEL_DECL node for the label.  */
3203 
3204 static tree
3205 define_label_1 (location_t location, tree name)
3206 {
3207   struct named_label_entry *ent, dummy;
3208   cp_binding_level *p;
3209   tree decl;
3210 
3211   decl = lookup_label (name);
3212 
3213   dummy.label_decl = decl;
3214   ent = named_labels->find (&dummy);
3215   gcc_assert (ent != NULL);
3216 
3217   /* After labels, make any new cleanups in the function go into their
3218      own new (temporary) binding contour.  */
3219   for (p = current_binding_level;
3220        p->kind != sk_function_parms;
3221        p = p->level_chain)
3222     p->more_cleanups_ok = 0;
3223 
3224   if (name == get_identifier ("wchar_t"))
3225     permerror (input_location, "label named wchar_t");
3226 
3227   if (DECL_INITIAL (decl) != NULL_TREE)
3228     {
3229       error ("duplicate label %qD", decl);
3230       return error_mark_node;
3231     }
3232   else
3233     {
3234       struct named_label_use_entry *use;
3235 
3236       /* Mark label as having been defined.  */
3237       DECL_INITIAL (decl) = error_mark_node;
3238       /* Say where in the source.  */
3239       DECL_SOURCE_LOCATION (decl) = location;
3240 
3241       ent->binding_level = current_binding_level;
3242       ent->names_in_scope = current_binding_level->names;
3243 
3244       for (use = ent->uses; use ; use = use->next)
3245 	check_previous_goto (decl, use);
3246       ent->uses = NULL;
3247     }
3248 
3249   return decl;
3250 }
3251 
3252 /* Wrapper for define_label_1.  */
3253 
3254 tree
3255 define_label (location_t location, tree name)
3256 {
3257   tree ret;
3258   bool running = timevar_cond_start (TV_NAME_LOOKUP);
3259   ret = define_label_1 (location, name);
3260   timevar_cond_stop (TV_NAME_LOOKUP, running);
3261   return ret;
3262 }
3263 
3264 
3265 struct cp_switch
3266 {
3267   cp_binding_level *level;
3268   struct cp_switch *next;
3269   /* The SWITCH_STMT being built.  */
3270   tree switch_stmt;
3271   /* A splay-tree mapping the low element of a case range to the high
3272      element, or NULL_TREE if there is no high element.  Used to
3273      determine whether or not a new case label duplicates an old case
3274      label.  We need a tree, rather than simply a hash table, because
3275      of the GNU case range extension.  */
3276   splay_tree cases;
3277 };
3278 
3279 /* A stack of the currently active switch statements.  The innermost
3280    switch statement is on the top of the stack.  There is no need to
3281    mark the stack for garbage collection because it is only active
3282    during the processing of the body of a function, and we never
3283    collect at that point.  */
3284 
3285 static struct cp_switch *switch_stack;
3286 
3287 /* Called right after a switch-statement condition is parsed.
3288    SWITCH_STMT is the switch statement being parsed.  */
3289 
3290 void
3291 push_switch (tree switch_stmt)
3292 {
3293   struct cp_switch *p = XNEW (struct cp_switch);
3294   p->level = current_binding_level;
3295   p->next = switch_stack;
3296   p->switch_stmt = switch_stmt;
3297   p->cases = splay_tree_new (case_compare, NULL, NULL);
3298   switch_stack = p;
3299 }
3300 
3301 void
3302 pop_switch (void)
3303 {
3304   struct cp_switch *cs = switch_stack;
3305   location_t switch_location;
3306 
3307   /* Emit warnings as needed.  */
3308   switch_location = EXPR_LOC_OR_LOC (cs->switch_stmt, input_location);
3309   if (!processing_template_decl)
3310     c_do_switch_warnings (cs->cases, switch_location,
3311 			  SWITCH_STMT_TYPE (cs->switch_stmt),
3312 			  SWITCH_STMT_COND (cs->switch_stmt));
3313 
3314   splay_tree_delete (cs->cases);
3315   switch_stack = switch_stack->next;
3316   free (cs);
3317 }
3318 
3319 /* Convert a case constant VALUE in a switch to the type TYPE of the switch
3320    condition.  Note that if TYPE and VALUE are already integral we don't
3321    really do the conversion because the language-independent
3322    warning/optimization code will work better that way.  */
3323 
3324 static tree
3325 case_conversion (tree type, tree value)
3326 {
3327   if (value == NULL_TREE)
3328     return value;
3329 
3330   if (cxx_dialect >= cxx11
3331       && (SCOPED_ENUM_P (type)
3332 	  || !INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (value))))
3333     {
3334       if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
3335 	type = type_promotes_to (type);
3336       value = (perform_implicit_conversion_flags
3337 	       (type, value, tf_warning_or_error,
3338 		LOOKUP_IMPLICIT | LOOKUP_NO_NON_INTEGRAL));
3339     }
3340   return cxx_constant_value (value);
3341 }
3342 
3343 /* Note that we've seen a definition of a case label, and complain if this
3344    is a bad place for one.  */
3345 
3346 tree
3347 finish_case_label (location_t loc, tree low_value, tree high_value)
3348 {
3349   tree cond, r;
3350   cp_binding_level *p;
3351   tree type;
3352 
3353   if (processing_template_decl)
3354     {
3355       tree label;
3356 
3357       /* For templates, just add the case label; we'll do semantic
3358 	 analysis at instantiation-time.  */
3359       label = build_decl (loc, LABEL_DECL, NULL_TREE, NULL_TREE);
3360       return add_stmt (build_case_label (low_value, high_value, label));
3361     }
3362 
3363   /* Find the condition on which this switch statement depends.  */
3364   cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
3365   if (cond && TREE_CODE (cond) == TREE_LIST)
3366     cond = TREE_VALUE (cond);
3367 
3368   if (!check_switch_goto (switch_stack->level))
3369     return error_mark_node;
3370 
3371   type = SWITCH_STMT_TYPE (switch_stack->switch_stmt);
3372 
3373   low_value = case_conversion (type, low_value);
3374   high_value = case_conversion (type, high_value);
3375 
3376   r = c_add_case_label (loc, switch_stack->cases, cond, type,
3377 			low_value, high_value);
3378 
3379   /* After labels, make any new cleanups in the function go into their
3380      own new (temporary) binding contour.  */
3381   for (p = current_binding_level;
3382        p->kind != sk_function_parms;
3383        p = p->level_chain)
3384     p->more_cleanups_ok = 0;
3385 
3386   return r;
3387 }
3388 
3389 struct typename_info {
3390   tree scope;
3391   tree name;
3392   tree template_id;
3393   bool enum_p;
3394   bool class_p;
3395 };
3396 
3397 struct typename_hasher : ggc_hasher<tree>
3398 {
3399   typedef typename_info *compare_type;
3400 
3401   /* Hash a TYPENAME_TYPE.  */
3402 
3403   static hashval_t
3404   hash (tree t)
3405   {
3406     hashval_t hash;
3407 
3408     hash = (htab_hash_pointer (TYPE_CONTEXT (t))
3409 	    ^ htab_hash_pointer (TYPE_IDENTIFIER (t)));
3410 
3411     return hash;
3412   }
3413 
3414   /* Compare two TYPENAME_TYPEs.  */
3415 
3416   static bool
3417   equal (tree t1, const typename_info *t2)
3418   {
3419     return (TYPE_IDENTIFIER (t1) == t2->name
3420 	    && TYPE_CONTEXT (t1) == t2->scope
3421 	    && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
3422 	    && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
3423 	    && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
3424   }
3425 };
3426 
3427 /* Build a TYPENAME_TYPE.  If the type is `typename T::t', CONTEXT is
3428    the type of `T', NAME is the IDENTIFIER_NODE for `t'.
3429 
3430    Returns the new TYPENAME_TYPE.  */
3431 
3432 static GTY (()) hash_table<typename_hasher> *typename_htab;
3433 
3434 static tree
3435 build_typename_type (tree context, tree name, tree fullname,
3436 		     enum tag_types tag_type)
3437 {
3438   tree t;
3439   tree d;
3440   typename_info ti;
3441   tree *e;
3442   hashval_t hash;
3443 
3444   if (typename_htab == NULL)
3445     typename_htab = hash_table<typename_hasher>::create_ggc (61);
3446 
3447   ti.scope = FROB_CONTEXT (context);
3448   ti.name = name;
3449   ti.template_id = fullname;
3450   ti.enum_p = tag_type == enum_type;
3451   ti.class_p = (tag_type == class_type
3452 		|| tag_type == record_type
3453 		|| tag_type == union_type);
3454   hash =  (htab_hash_pointer (ti.scope)
3455 	   ^ htab_hash_pointer (ti.name));
3456 
3457   /* See if we already have this type.  */
3458   e = typename_htab->find_slot_with_hash (&ti, hash, INSERT);
3459   if (*e)
3460     t = *e;
3461   else
3462     {
3463       /* Build the TYPENAME_TYPE.  */
3464       t = cxx_make_type (TYPENAME_TYPE);
3465       TYPE_CONTEXT (t) = ti.scope;
3466       TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
3467       TYPENAME_IS_ENUM_P (t) = ti.enum_p;
3468       TYPENAME_IS_CLASS_P (t) = ti.class_p;
3469 
3470       /* Build the corresponding TYPE_DECL.  */
3471       d = build_decl (input_location, TYPE_DECL, name, t);
3472       TYPE_NAME (TREE_TYPE (d)) = d;
3473       TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3474       DECL_CONTEXT (d) = FROB_CONTEXT (context);
3475       DECL_ARTIFICIAL (d) = 1;
3476 
3477       /* Store it in the hash table.  */
3478       *e = t;
3479 
3480       /* TYPENAME_TYPEs must always be compared structurally, because
3481 	 they may or may not resolve down to another type depending on
3482 	 the currently open classes. */
3483       SET_TYPE_STRUCTURAL_EQUALITY (t);
3484     }
3485 
3486   return t;
3487 }
3488 
3489 /* Resolve `typename CONTEXT::NAME'.  TAG_TYPE indicates the tag
3490    provided to name the type.  Returns an appropriate type, unless an
3491    error occurs, in which case error_mark_node is returned.  If we
3492    locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
3493    return that, rather than the _TYPE it corresponds to, in other
3494    cases we look through the type decl.  If TF_ERROR is set, complain
3495    about errors, otherwise be quiet.  */
3496 
3497 tree
3498 make_typename_type (tree context, tree name, enum tag_types tag_type,
3499 		    tsubst_flags_t complain)
3500 {
3501   tree fullname;
3502   tree t;
3503   bool want_template;
3504 
3505   if (name == error_mark_node
3506       || context == NULL_TREE
3507       || context == error_mark_node)
3508     return error_mark_node;
3509 
3510   if (TYPE_P (name))
3511     {
3512       if (!(TYPE_LANG_SPECIFIC (name)
3513 	    && (CLASSTYPE_IS_TEMPLATE (name)
3514 		|| CLASSTYPE_USE_TEMPLATE (name))))
3515 	name = TYPE_IDENTIFIER (name);
3516       else
3517 	/* Create a TEMPLATE_ID_EXPR for the type.  */
3518 	name = build_nt (TEMPLATE_ID_EXPR,
3519 			 CLASSTYPE_TI_TEMPLATE (name),
3520 			 CLASSTYPE_TI_ARGS (name));
3521     }
3522   else if (TREE_CODE (name) == TYPE_DECL)
3523     name = DECL_NAME (name);
3524 
3525   fullname = name;
3526 
3527   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3528     {
3529       name = TREE_OPERAND (name, 0);
3530       if (DECL_TYPE_TEMPLATE_P (name))
3531 	name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
3532       if (TREE_CODE (name) != IDENTIFIER_NODE)
3533 	{
3534 	  if (complain & tf_error)
3535 	    error ("%qD is not a type", name);
3536 	  return error_mark_node;
3537 	}
3538     }
3539   if (TREE_CODE (name) == TEMPLATE_DECL)
3540     {
3541       if (complain & tf_error)
3542 	error ("%qD used without template parameters", name);
3543       return error_mark_node;
3544     }
3545   gcc_assert (identifier_p (name));
3546   gcc_assert (TYPE_P (context));
3547 
3548   if (!MAYBE_CLASS_TYPE_P (context))
3549     {
3550       if (complain & tf_error)
3551 	error ("%q#T is not a class", context);
3552       return error_mark_node;
3553     }
3554 
3555   /* When the CONTEXT is a dependent type,  NAME could refer to a
3556      dependent base class of CONTEXT.  But look inside it anyway
3557      if CONTEXT is a currently open scope, in case it refers to a
3558      member of the current instantiation or a non-dependent base;
3559      lookup will stop when we hit a dependent base.  */
3560   if (!dependent_scope_p (context))
3561     /* We should only set WANT_TYPE when we're a nested typename type.
3562        Then we can give better diagnostics if we find a non-type.  */
3563     t = lookup_field (context, name, 2, /*want_type=*/true);
3564   else
3565     t = NULL_TREE;
3566 
3567   if ((!t || TREE_CODE (t) == TREE_LIST) && dependent_type_p (context))
3568     return build_typename_type (context, name, fullname, tag_type);
3569 
3570   want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR;
3571 
3572   if (!t)
3573     {
3574       if (complain & tf_error)
3575 	error (want_template ? G_("no class template named %q#T in %q#T")
3576 	       : G_("no type named %q#T in %q#T"), name, context);
3577       return error_mark_node;
3578     }
3579 
3580   /* Pull out the template from an injected-class-name (or multiple).  */
3581   if (want_template)
3582     t = maybe_get_template_decl_from_type_decl (t);
3583 
3584   if (TREE_CODE (t) == TREE_LIST)
3585     {
3586       if (complain & tf_error)
3587 	{
3588 	  error ("lookup of %qT in %qT is ambiguous", name, context);
3589 	  print_candidates (t);
3590 	}
3591       return error_mark_node;
3592     }
3593 
3594   if (want_template && !DECL_TYPE_TEMPLATE_P (t))
3595     {
3596       if (complain & tf_error)
3597 	error ("%<typename %T::%D%> names %q#T, which is not a class template",
3598 	       context, name, t);
3599       return error_mark_node;
3600     }
3601   if (!want_template && TREE_CODE (t) != TYPE_DECL)
3602     {
3603       if (complain & tf_error)
3604 	error ("%<typename %T::%D%> names %q#T, which is not a type",
3605 	       context, name, t);
3606       return error_mark_node;
3607     }
3608 
3609   if (!perform_or_defer_access_check (TYPE_BINFO (context), t, t, complain))
3610     return error_mark_node;
3611 
3612   /* If we are currently parsing a template and if T is a typedef accessed
3613      through CONTEXT then we need to remember and check access of T at
3614      template instantiation time.  */
3615   add_typedef_to_current_template_for_access_check (t, context, input_location);
3616 
3617   if (want_template)
3618     return lookup_template_class (t, TREE_OPERAND (fullname, 1),
3619 				  NULL_TREE, context,
3620 				  /*entering_scope=*/0,
3621 				  complain | tf_user);
3622 
3623   if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
3624     t = TREE_TYPE (t);
3625 
3626   maybe_record_typedef_use (t);
3627 
3628   return t;
3629 }
3630 
3631 /* Resolve `CONTEXT::template NAME'.  Returns a TEMPLATE_DECL if the name
3632    can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
3633    in which case error_mark_node is returned.
3634 
3635    If PARM_LIST is non-NULL, also make sure that the template parameter
3636    list of TEMPLATE_DECL matches.
3637 
3638    If COMPLAIN zero, don't complain about any errors that occur.  */
3639 
3640 tree
3641 make_unbound_class_template (tree context, tree name, tree parm_list,
3642 			     tsubst_flags_t complain)
3643 {
3644   tree t;
3645   tree d;
3646 
3647   if (TYPE_P (name))
3648     name = TYPE_IDENTIFIER (name);
3649   else if (DECL_P (name))
3650     name = DECL_NAME (name);
3651   gcc_assert (identifier_p (name));
3652 
3653   if (!dependent_type_p (context)
3654       || currently_open_class (context))
3655     {
3656       tree tmpl = NULL_TREE;
3657 
3658       if (MAYBE_CLASS_TYPE_P (context))
3659 	tmpl = lookup_field (context, name, 0, false);
3660 
3661       if (tmpl && TREE_CODE (tmpl) == TYPE_DECL)
3662 	tmpl = maybe_get_template_decl_from_type_decl (tmpl);
3663 
3664       if (!tmpl || !DECL_TYPE_TEMPLATE_P (tmpl))
3665 	{
3666 	  if (complain & tf_error)
3667 	    error ("no class template named %q#T in %q#T", name, context);
3668 	  return error_mark_node;
3669 	}
3670 
3671       if (parm_list
3672 	  && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
3673 	{
3674 	  if (complain & tf_error)
3675 	    {
3676 	      error ("template parameters do not match template %qD", tmpl);
3677 	      inform (DECL_SOURCE_LOCATION (tmpl),
3678 		      "%qD declared here", tmpl);
3679 	    }
3680 	  return error_mark_node;
3681 	}
3682 
3683       if (!perform_or_defer_access_check (TYPE_BINFO (context), tmpl, tmpl,
3684 					  complain))
3685 	return error_mark_node;
3686 
3687       return tmpl;
3688     }
3689 
3690   /* Build the UNBOUND_CLASS_TEMPLATE.  */
3691   t = cxx_make_type (UNBOUND_CLASS_TEMPLATE);
3692   TYPE_CONTEXT (t) = FROB_CONTEXT (context);
3693   TREE_TYPE (t) = NULL_TREE;
3694   SET_TYPE_STRUCTURAL_EQUALITY (t);
3695 
3696   /* Build the corresponding TEMPLATE_DECL.  */
3697   d = build_decl (input_location, TEMPLATE_DECL, name, t);
3698   TYPE_NAME (TREE_TYPE (d)) = d;
3699   TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3700   DECL_CONTEXT (d) = FROB_CONTEXT (context);
3701   DECL_ARTIFICIAL (d) = 1;
3702   DECL_TEMPLATE_PARMS (d) = parm_list;
3703 
3704   return t;
3705 }
3706 
3707 
3708 
3709 /* Push the declarations of builtin types into the namespace.
3710    RID_INDEX is the index of the builtin type in the array
3711    RID_POINTERS.  NAME is the name used when looking up the builtin
3712    type.  TYPE is the _TYPE node for the builtin type.  */
3713 
3714 void
3715 record_builtin_type (enum rid rid_index,
3716 		     const char* name,
3717 		     tree type)
3718 {
3719   tree rname = NULL_TREE, tname = NULL_TREE;
3720   tree tdecl = NULL_TREE;
3721 
3722   if ((int) rid_index < (int) RID_MAX)
3723     rname = ridpointers[(int) rid_index];
3724   if (name)
3725     tname = get_identifier (name);
3726 
3727   /* The calls to SET_IDENTIFIER_GLOBAL_VALUE below should be
3728      eliminated.  Built-in types should not be looked up name; their
3729      names are keywords that the parser can recognize.  However, there
3730      is code in c-common.c that uses identifier_global_value to look
3731      up built-in types by name.  */
3732   if (tname)
3733     {
3734       tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, tname, type);
3735       DECL_ARTIFICIAL (tdecl) = 1;
3736       SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
3737     }
3738   if (rname)
3739     {
3740       if (!tdecl)
3741 	{
3742 	  tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, rname, type);
3743 	  DECL_ARTIFICIAL (tdecl) = 1;
3744 	}
3745       SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
3746     }
3747 
3748   if (!TYPE_NAME (type))
3749     TYPE_NAME (type) = tdecl;
3750 
3751   if (tdecl)
3752     debug_hooks->type_decl (tdecl, 0);
3753 }
3754 
3755 /* Record one of the standard Java types.
3756  * Declare it as having the given NAME.
3757  * If SIZE > 0, it is the size of one of the integral types;
3758  * otherwise it is the negative of the size of one of the other types.  */
3759 
3760 static tree
3761 record_builtin_java_type (const char* name, int size)
3762 {
3763   tree type, decl;
3764   if (size > 0)
3765     {
3766       type = build_nonstandard_integer_type (size, 0);
3767       type = build_distinct_type_copy (type);
3768     }
3769   else if (size > -32)
3770     {
3771       tree stype;
3772       /* "__java_char" or ""__java_boolean".  */
3773       type = build_nonstandard_integer_type (-size, 1);
3774       type = build_distinct_type_copy (type);
3775       /* Get the signed type cached and attached to the unsigned type,
3776 	 so it doesn't get garbage-collected at "random" times,
3777 	 causing potential codegen differences out of different UIDs
3778 	 and different alias set numbers.  */
3779       stype = build_nonstandard_integer_type (-size, 0);
3780       stype = build_distinct_type_copy (stype);
3781       TREE_CHAIN (type) = stype;
3782       /*if (size == -1)	TREE_SET_CODE (type, BOOLEAN_TYPE);*/
3783     }
3784   else
3785     { /* "__java_float" or ""__java_double".  */
3786       type = make_node (REAL_TYPE);
3787       TYPE_PRECISION (type) = - size;
3788       layout_type (type);
3789     }
3790   record_builtin_type (RID_MAX, name, type);
3791   decl = TYPE_NAME (type);
3792 
3793   /* Suppress generate debug symbol entries for these types,
3794      since for normal C++ they are just clutter.
3795      However, push_lang_context undoes this if extern "Java" is seen.  */
3796   DECL_IGNORED_P (decl) = 1;
3797 
3798   TYPE_FOR_JAVA (type) = 1;
3799   return type;
3800 }
3801 
3802 /* Push a type into the namespace so that the back ends ignore it.  */
3803 
3804 static void
3805 record_unknown_type (tree type, const char* name)
3806 {
3807   tree decl = pushdecl (build_decl (UNKNOWN_LOCATION,
3808 				    TYPE_DECL, get_identifier (name), type));
3809   /* Make sure the "unknown type" typedecl gets ignored for debug info.  */
3810   DECL_IGNORED_P (decl) = 1;
3811   TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
3812   TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
3813   TYPE_ALIGN (type) = 1;
3814   TYPE_USER_ALIGN (type) = 0;
3815   SET_TYPE_MODE (type, TYPE_MODE (void_type_node));
3816 }
3817 
3818 /* A string for which we should create an IDENTIFIER_NODE at
3819    startup.  */
3820 
3821 typedef struct predefined_identifier
3822 {
3823   /* The name of the identifier.  */
3824   const char *const name;
3825   /* The place where the IDENTIFIER_NODE should be stored.  */
3826   tree *const node;
3827   /* Nonzero if this is the name of a constructor or destructor.  */
3828   const int ctor_or_dtor_p;
3829 } predefined_identifier;
3830 
3831 /* Create all the predefined identifiers.  */
3832 
3833 static void
3834 initialize_predefined_identifiers (void)
3835 {
3836   const predefined_identifier *pid;
3837 
3838   /* A table of identifiers to create at startup.  */
3839   static const predefined_identifier predefined_identifiers[] = {
3840     { "C++", &lang_name_cplusplus, 0 },
3841     { "C", &lang_name_c, 0 },
3842     { "Java", &lang_name_java, 0 },
3843     /* Some of these names have a trailing space so that it is
3844        impossible for them to conflict with names written by users.  */
3845     { "__ct ", &ctor_identifier, 1 },
3846     { "__base_ctor ", &base_ctor_identifier, 1 },
3847     { "__comp_ctor ", &complete_ctor_identifier, 1 },
3848     { "__dt ", &dtor_identifier, 1 },
3849     { "__comp_dtor ", &complete_dtor_identifier, 1 },
3850     { "__base_dtor ", &base_dtor_identifier, 1 },
3851     { "__deleting_dtor ", &deleting_dtor_identifier, 1 },
3852     { IN_CHARGE_NAME, &in_charge_identifier, 0 },
3853     { "nelts", &nelts_identifier, 0 },
3854     { THIS_NAME, &this_identifier, 0 },
3855     { VTABLE_DELTA_NAME, &delta_identifier, 0 },
3856     { VTABLE_PFN_NAME, &pfn_identifier, 0 },
3857     { "_vptr", &vptr_identifier, 0 },
3858     { "__vtt_parm", &vtt_parm_identifier, 0 },
3859     { "::", &global_scope_name, 0 },
3860     { "std", &std_identifier, 0 },
3861     { NULL, NULL, 0 }
3862   };
3863 
3864   for (pid = predefined_identifiers; pid->name; ++pid)
3865     {
3866       *pid->node = get_identifier (pid->name);
3867       if (pid->ctor_or_dtor_p)
3868 	IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
3869     }
3870 }
3871 
3872 /* Create the predefined scalar types of C,
3873    and some nodes representing standard constants (0, 1, (void *)0).
3874    Initialize the global binding level.
3875    Make definitions for built-in primitive functions.  */
3876 
3877 void
3878 cxx_init_decl_processing (void)
3879 {
3880   tree void_ftype;
3881   tree void_ftype_ptr;
3882 
3883   /* Create all the identifiers we need.  */
3884   initialize_predefined_identifiers ();
3885 
3886   /* Create the global variables.  */
3887   push_to_top_level ();
3888 
3889   current_function_decl = NULL_TREE;
3890   current_binding_level = NULL;
3891   /* Enter the global namespace.  */
3892   gcc_assert (global_namespace == NULL_TREE);
3893   global_namespace = build_lang_decl (NAMESPACE_DECL, global_scope_name,
3894 				      void_type_node);
3895   DECL_CONTEXT (global_namespace) = build_translation_unit_decl (NULL_TREE);
3896   debug_hooks->register_main_translation_unit
3897     (DECL_CONTEXT (global_namespace));
3898   TREE_PUBLIC (global_namespace) = 1;
3899   begin_scope (sk_namespace, global_namespace);
3900 
3901   if (flag_visibility_ms_compat)
3902     default_visibility = VISIBILITY_HIDDEN;
3903 
3904   /* Initially, C.  */
3905   current_lang_name = lang_name_c;
3906 
3907   /* Create the `std' namespace.  */
3908   push_namespace (std_identifier);
3909   std_node = current_namespace;
3910   pop_namespace ();
3911 
3912   c_common_nodes_and_builtins ();
3913 
3914   java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
3915   java_short_type_node = record_builtin_java_type ("__java_short", 16);
3916   java_int_type_node = record_builtin_java_type ("__java_int", 32);
3917   java_long_type_node = record_builtin_java_type ("__java_long", 64);
3918   java_float_type_node = record_builtin_java_type ("__java_float", -32);
3919   java_double_type_node = record_builtin_java_type ("__java_double", -64);
3920   java_char_type_node = record_builtin_java_type ("__java_char", -16);
3921   java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
3922 
3923   integer_two_node = build_int_cst (NULL_TREE, 2);
3924 
3925   record_builtin_type (RID_BOOL, "bool", boolean_type_node);
3926   truthvalue_type_node = boolean_type_node;
3927   truthvalue_false_node = boolean_false_node;
3928   truthvalue_true_node = boolean_true_node;
3929 
3930   empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
3931   noexcept_true_spec = build_tree_list (boolean_true_node, NULL_TREE);
3932   noexcept_false_spec = build_tree_list (boolean_false_node, NULL_TREE);
3933 
3934 #if 0
3935   record_builtin_type (RID_MAX, NULL, string_type_node);
3936 #endif
3937 
3938   delta_type_node = ptrdiff_type_node;
3939   vtable_index_type = ptrdiff_type_node;
3940 
3941   vtt_parm_type = build_pointer_type (const_ptr_type_node);
3942   void_ftype = build_function_type_list (void_type_node, NULL_TREE);
3943   void_ftype_ptr = build_function_type_list (void_type_node,
3944 					     ptr_type_node, NULL_TREE);
3945   void_ftype_ptr
3946     = build_exception_variant (void_ftype_ptr, empty_except_spec);
3947 
3948   /* C++ extensions */
3949 
3950   unknown_type_node = make_node (LANG_TYPE);
3951   record_unknown_type (unknown_type_node, "unknown type");
3952 
3953   /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node.  */
3954   TREE_TYPE (unknown_type_node) = unknown_type_node;
3955 
3956   /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
3957      result.  */
3958   TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
3959   TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
3960 
3961   init_list_type_node = make_node (LANG_TYPE);
3962   record_unknown_type (init_list_type_node, "init list");
3963 
3964   {
3965     /* Make sure we get a unique function type, so we can give
3966        its pointer type a name.  (This wins for gdb.) */
3967     tree vfunc_type = make_node (FUNCTION_TYPE);
3968     TREE_TYPE (vfunc_type) = integer_type_node;
3969     TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
3970     layout_type (vfunc_type);
3971 
3972     vtable_entry_type = build_pointer_type (vfunc_type);
3973   }
3974   record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
3975 
3976   vtbl_type_node
3977     = build_cplus_array_type (vtable_entry_type, NULL_TREE);
3978   layout_type (vtbl_type_node);
3979   vtbl_type_node = cp_build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
3980   record_builtin_type (RID_MAX, NULL, vtbl_type_node);
3981   vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
3982   layout_type (vtbl_ptr_type_node);
3983   record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
3984 
3985   push_namespace (get_identifier ("__cxxabiv1"));
3986   abi_node = current_namespace;
3987   pop_namespace ();
3988 
3989   global_type_node = make_node (LANG_TYPE);
3990   record_unknown_type (global_type_node, "global type");
3991 
3992   /* Now, C++.  */
3993   current_lang_name = lang_name_cplusplus;
3994 
3995   {
3996     tree newattrs, extvisattr;
3997     tree newtype, deltype;
3998     tree ptr_ftype_sizetype;
3999     tree new_eh_spec;
4000 
4001     ptr_ftype_sizetype
4002       = build_function_type_list (ptr_type_node, size_type_node, NULL_TREE);
4003     if (cxx_dialect == cxx98)
4004       {
4005 	tree bad_alloc_id;
4006 	tree bad_alloc_type_node;
4007 	tree bad_alloc_decl;
4008 
4009 	push_namespace (std_identifier);
4010 	bad_alloc_id = get_identifier ("bad_alloc");
4011 	bad_alloc_type_node = make_class_type (RECORD_TYPE);
4012 	TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
4013 	bad_alloc_decl
4014 	  = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
4015 	DECL_CONTEXT (bad_alloc_decl) = current_namespace;
4016 	pop_namespace ();
4017 
4018 	new_eh_spec
4019 	  = add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1);
4020       }
4021     else
4022       new_eh_spec = noexcept_false_spec;
4023 
4024     /* Ensure attribs.c is initialized.  */
4025     init_attributes ();
4026     extvisattr = build_tree_list (get_identifier ("externally_visible"),
4027 				  NULL_TREE);
4028     newattrs = tree_cons (get_identifier ("alloc_size"),
4029 			  build_tree_list (NULL_TREE, integer_one_node),
4030 			  extvisattr);
4031     newtype = cp_build_type_attribute_variant (ptr_ftype_sizetype, newattrs);
4032     newtype = build_exception_variant (newtype, new_eh_spec);
4033     deltype = cp_build_type_attribute_variant (void_ftype_ptr, extvisattr);
4034     deltype = build_exception_variant (deltype, empty_except_spec);
4035     tree opnew = push_cp_library_fn (NEW_EXPR, newtype, 0);
4036     DECL_IS_MALLOC (opnew) = 1;
4037     DECL_IS_OPERATOR_NEW (opnew) = 1;
4038     opnew = push_cp_library_fn (VEC_NEW_EXPR, newtype, 0);
4039     DECL_IS_MALLOC (opnew) = 1;
4040     DECL_IS_OPERATOR_NEW (opnew) = 1;
4041     push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4042     push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4043     if (flag_sized_deallocation)
4044       {
4045 	/* Also push the sized deallocation variants:
4046 	     void operator delete(void*, std::size_t) throw();
4047 	     void operator delete[](void*, std::size_t) throw();  */
4048 	tree void_ftype_ptr_size
4049 	  = build_function_type_list (void_type_node, ptr_type_node,
4050 				      size_type_node, NULL_TREE);
4051 	deltype = cp_build_type_attribute_variant (void_ftype_ptr_size,
4052 						   extvisattr);
4053 	deltype = build_exception_variant (deltype, empty_except_spec);
4054 	push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4055 	push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4056       }
4057 
4058     nullptr_type_node = make_node (NULLPTR_TYPE);
4059     TYPE_SIZE (nullptr_type_node) = bitsize_int (GET_MODE_BITSIZE (ptr_mode));
4060     TYPE_SIZE_UNIT (nullptr_type_node) = size_int (GET_MODE_SIZE (ptr_mode));
4061     TYPE_UNSIGNED (nullptr_type_node) = 1;
4062     TYPE_PRECISION (nullptr_type_node) = GET_MODE_BITSIZE (ptr_mode);
4063     if (abi_version_at_least (9))
4064       TYPE_ALIGN (nullptr_type_node) = GET_MODE_ALIGNMENT (ptr_mode);
4065     SET_TYPE_MODE (nullptr_type_node, ptr_mode);
4066     record_builtin_type (RID_MAX, "decltype(nullptr)", nullptr_type_node);
4067     nullptr_node = build_int_cst (nullptr_type_node, 0);
4068   }
4069 
4070   abort_fndecl
4071     = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype,
4072 			    ECF_NORETURN | ECF_NOTHROW);
4073 
4074   /* Perform other language dependent initializations.  */
4075   init_class_processing ();
4076   init_rtti_processing ();
4077   init_template_processing ();
4078 
4079   if (flag_exceptions)
4080     init_exception_processing ();
4081 
4082   if (! supports_one_only ())
4083     flag_weak = 0;
4084 
4085   make_fname_decl = cp_make_fname_decl;
4086   start_fname_decls ();
4087 
4088   /* Show we use EH for cleanups.  */
4089   if (flag_exceptions)
4090     using_eh_for_cleanups ();
4091 }
4092 
4093 /* Generate an initializer for a function naming variable from
4094    NAME. NAME may be NULL, to indicate a dependent name.  TYPE_P is
4095    filled in with the type of the init.  */
4096 
4097 tree
4098 cp_fname_init (const char* name, tree *type_p)
4099 {
4100   tree domain = NULL_TREE;
4101   tree type;
4102   tree init = NULL_TREE;
4103   size_t length = 0;
4104 
4105   if (name)
4106     {
4107       length = strlen (name);
4108       domain = build_index_type (size_int (length));
4109       init = build_string (length + 1, name);
4110     }
4111 
4112   type = cp_build_qualified_type (char_type_node, TYPE_QUAL_CONST);
4113   type = build_cplus_array_type (type, domain);
4114 
4115   *type_p = type;
4116 
4117   if (init)
4118     TREE_TYPE (init) = type;
4119   else
4120     init = error_mark_node;
4121 
4122   return init;
4123 }
4124 
4125 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give
4126    the decl, LOC is the location to give the decl, NAME is the
4127    initialization string and TYPE_DEP indicates whether NAME depended
4128    on the type of the function. We make use of that to detect
4129    __PRETTY_FUNCTION__ inside a template fn. This is being done lazily
4130    at the point of first use, so we mustn't push the decl now.  */
4131 
4132 static tree
4133 cp_make_fname_decl (location_t loc, tree id, int type_dep)
4134 {
4135   const char *const name = (type_dep && processing_template_decl
4136 			    ? NULL : fname_as_string (type_dep));
4137   tree type;
4138   tree init = cp_fname_init (name, &type);
4139   tree decl = build_decl (loc, VAR_DECL, id, type);
4140 
4141   if (name)
4142     free (CONST_CAST (char *, name));
4143 
4144   /* As we're using pushdecl_with_scope, we must set the context.  */
4145   DECL_CONTEXT (decl) = current_function_decl;
4146 
4147   TREE_STATIC (decl) = 1;
4148   TREE_READONLY (decl) = 1;
4149   DECL_ARTIFICIAL (decl) = 1;
4150 
4151   TREE_USED (decl) = 1;
4152 
4153   if (current_function_decl)
4154     {
4155       cp_binding_level *b = current_binding_level;
4156       if (b->kind == sk_function_parms)
4157 	return error_mark_node;
4158       while (b->level_chain->kind != sk_function_parms)
4159 	b = b->level_chain;
4160       pushdecl_with_scope (decl, b, /*is_friend=*/false);
4161       cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE,
4162 		      LOOKUP_ONLYCONVERTING);
4163     }
4164   else
4165     {
4166       DECL_THIS_STATIC (decl) = true;
4167       pushdecl_top_level_and_finish (decl, init);
4168     }
4169 
4170   return decl;
4171 }
4172 
4173 static tree
4174 builtin_function_1 (tree decl, tree context, bool is_global)
4175 {
4176   tree          id = DECL_NAME (decl);
4177   const char *name = IDENTIFIER_POINTER (id);
4178 
4179   retrofit_lang_decl (decl);
4180 
4181   DECL_ARTIFICIAL (decl) = 1;
4182   SET_OVERLOADED_OPERATOR_CODE (decl, ERROR_MARK);
4183   SET_DECL_LANGUAGE (decl, lang_c);
4184   /* Runtime library routines are, by definition, available in an
4185      external shared object.  */
4186   DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
4187   DECL_VISIBILITY_SPECIFIED (decl) = 1;
4188 
4189   DECL_CONTEXT (decl) = context;
4190 
4191   if (is_global)
4192     pushdecl_top_level (decl);
4193   else
4194     pushdecl (decl);
4195 
4196   /* A function in the user's namespace should have an explicit
4197      declaration before it is used.  Mark the built-in function as
4198      anticipated but not actually declared.  */
4199   if (name[0] != '_' || name[1] != '_')
4200     DECL_ANTICIPATED (decl) = 1;
4201   else if (strncmp (name + 2, "builtin_", strlen ("builtin_")) != 0)
4202     {
4203       size_t len = strlen (name);
4204 
4205       /* Treat __*_chk fortification functions as anticipated as well,
4206 	 unless they are __builtin_*.  */
4207       if (len > strlen ("___chk")
4208 	  && memcmp (name + len - strlen ("_chk"),
4209 		     "_chk", strlen ("_chk") + 1) == 0)
4210 	DECL_ANTICIPATED (decl) = 1;
4211     }
4212 
4213   return decl;
4214 }
4215 
4216 tree
4217 cxx_builtin_function (tree decl)
4218 {
4219   tree          id = DECL_NAME (decl);
4220   const char *name = IDENTIFIER_POINTER (id);
4221   /* All builtins that don't begin with an '_' should additionally
4222      go in the 'std' namespace.  */
4223   if (name[0] != '_')
4224     {
4225       tree decl2 = copy_node(decl);
4226       push_namespace (std_identifier);
4227       builtin_function_1 (decl2, std_node, false);
4228       pop_namespace ();
4229     }
4230 
4231   return builtin_function_1 (decl, NULL_TREE, false);
4232 }
4233 
4234 /* Like cxx_builtin_function, but guarantee the function is added to the global
4235    scope.  This is to allow function specific options to add new machine
4236    dependent builtins when the target ISA changes via attribute((target(...)))
4237    which saves space on program startup if the program does not use non-generic
4238    ISAs.  */
4239 
4240 tree
4241 cxx_builtin_function_ext_scope (tree decl)
4242 {
4243 
4244   tree          id = DECL_NAME (decl);
4245   const char *name = IDENTIFIER_POINTER (id);
4246   /* All builtins that don't begin with an '_' should additionally
4247      go in the 'std' namespace.  */
4248   if (name[0] != '_')
4249     {
4250       tree decl2 = copy_node(decl);
4251       push_namespace (std_identifier);
4252       builtin_function_1 (decl2, std_node, true);
4253       pop_namespace ();
4254     }
4255 
4256   return builtin_function_1 (decl, NULL_TREE, true);
4257 }
4258 
4259 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
4260    function.  Not called directly.  */
4261 
4262 static tree
4263 build_library_fn (tree name, enum tree_code operator_code, tree type,
4264 		  int ecf_flags)
4265 {
4266   tree fn = build_lang_decl (FUNCTION_DECL, name, type);
4267   DECL_EXTERNAL (fn) = 1;
4268   TREE_PUBLIC (fn) = 1;
4269   DECL_ARTIFICIAL (fn) = 1;
4270   SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
4271   SET_DECL_LANGUAGE (fn, lang_c);
4272   /* Runtime library routines are, by definition, available in an
4273      external shared object.  */
4274   DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
4275   DECL_VISIBILITY_SPECIFIED (fn) = 1;
4276   set_call_expr_flags (fn, ecf_flags);
4277   return fn;
4278 }
4279 
4280 /* Returns the _DECL for a library function with C++ linkage.  */
4281 
4282 static tree
4283 build_cp_library_fn (tree name, enum tree_code operator_code, tree type,
4284 		     int ecf_flags)
4285 {
4286   tree fn = build_library_fn (name, operator_code, type, ecf_flags);
4287   DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
4288   SET_DECL_LANGUAGE (fn, lang_cplusplus);
4289   return fn;
4290 }
4291 
4292 /* Like build_library_fn, but takes a C string instead of an
4293    IDENTIFIER_NODE.  */
4294 
4295 tree
4296 build_library_fn_ptr (const char* name, tree type, int ecf_flags)
4297 {
4298   return build_library_fn (get_identifier (name), ERROR_MARK, type, ecf_flags);
4299 }
4300 
4301 /* Like build_cp_library_fn, but takes a C string instead of an
4302    IDENTIFIER_NODE.  */
4303 
4304 tree
4305 build_cp_library_fn_ptr (const char* name, tree type, int ecf_flags)
4306 {
4307   return build_cp_library_fn (get_identifier (name), ERROR_MARK, type,
4308 			      ecf_flags);
4309 }
4310 
4311 /* Like build_library_fn, but also pushes the function so that we will
4312    be able to find it via IDENTIFIER_GLOBAL_VALUE.  Also, the function
4313    may throw exceptions listed in RAISES.  */
4314 
4315 tree
4316 push_library_fn (tree name, tree type, tree raises, int ecf_flags)
4317 {
4318   tree fn;
4319 
4320   if (raises)
4321     type = build_exception_variant (type, raises);
4322 
4323   fn = build_library_fn (name, ERROR_MARK, type, ecf_flags);
4324   pushdecl_top_level (fn);
4325   return fn;
4326 }
4327 
4328 /* Like build_cp_library_fn, but also pushes the function so that it
4329    will be found by normal lookup.  */
4330 
4331 static tree
4332 push_cp_library_fn (enum tree_code operator_code, tree type,
4333 		    int ecf_flags)
4334 {
4335   tree fn = build_cp_library_fn (ansi_opname (operator_code),
4336 				 operator_code,
4337 				 type, ecf_flags);
4338   pushdecl (fn);
4339   if (flag_tm)
4340     apply_tm_attr (fn, get_identifier ("transaction_safe"));
4341   return fn;
4342 }
4343 
4344 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
4345    a FUNCTION_TYPE.  */
4346 
4347 tree
4348 push_void_library_fn (tree name, tree parmtypes, int ecf_flags)
4349 {
4350   tree type = build_function_type (void_type_node, parmtypes);
4351   return push_library_fn (name, type, NULL_TREE, ecf_flags);
4352 }
4353 
4354 /* Like push_library_fn, but also note that this function throws
4355    and does not return.  Used for __throw_foo and the like.  */
4356 
4357 tree
4358 push_throw_library_fn (tree name, tree type)
4359 {
4360   tree fn = push_library_fn (name, type, NULL_TREE, ECF_NORETURN);
4361   return fn;
4362 }
4363 
4364 /* When we call finish_struct for an anonymous union, we create
4365    default copy constructors and such.  But, an anonymous union
4366    shouldn't have such things; this function undoes the damage to the
4367    anonymous union type T.
4368 
4369    (The reason that we create the synthesized methods is that we don't
4370    distinguish `union { int i; }' from `typedef union { int i; } U'.
4371    The first is an anonymous union; the second is just an ordinary
4372    union type.)  */
4373 
4374 void
4375 fixup_anonymous_aggr (tree t)
4376 {
4377   tree *q;
4378 
4379   /* Wipe out memory of synthesized methods.  */
4380   TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
4381   TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
4382   TYPE_HAS_COPY_CTOR (t) = 0;
4383   TYPE_HAS_CONST_COPY_CTOR (t) = 0;
4384   TYPE_HAS_COPY_ASSIGN (t) = 0;
4385   TYPE_HAS_CONST_COPY_ASSIGN (t) = 0;
4386 
4387   /* Splice the implicitly generated functions out of the TYPE_METHODS
4388      list.  */
4389   q = &TYPE_METHODS (t);
4390   while (*q)
4391     {
4392       if (DECL_ARTIFICIAL (*q))
4393 	*q = TREE_CHAIN (*q);
4394       else
4395 	q = &DECL_CHAIN (*q);
4396     }
4397 
4398   /* ISO C++ 9.5.3.  Anonymous unions may not have function members.  */
4399   if (TYPE_METHODS (t))
4400     {
4401       tree decl = TYPE_MAIN_DECL (t);
4402 
4403       if (TREE_CODE (t) != UNION_TYPE)
4404 	error_at (DECL_SOURCE_LOCATION (decl),
4405 		  "an anonymous struct cannot have function members");
4406       else
4407 	error_at (DECL_SOURCE_LOCATION (decl),
4408 		  "an anonymous union cannot have function members");
4409     }
4410 
4411   /* Anonymous aggregates cannot have fields with ctors, dtors or complex
4412      assignment operators (because they cannot have these methods themselves).
4413      For anonymous unions this is already checked because they are not allowed
4414      in any union, otherwise we have to check it.  */
4415   if (TREE_CODE (t) != UNION_TYPE)
4416     {
4417       tree field, type;
4418 
4419       for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
4420 	if (TREE_CODE (field) == FIELD_DECL)
4421 	  {
4422 	    type = TREE_TYPE (field);
4423 	    if (CLASS_TYPE_P (type))
4424 	      {
4425 		if (TYPE_NEEDS_CONSTRUCTING (type))
4426 		  error ("member %q+#D with constructor not allowed "
4427 			 "in anonymous aggregate", field);
4428 		if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
4429 		  error ("member %q+#D with destructor not allowed "
4430 			 "in anonymous aggregate", field);
4431 		if (TYPE_HAS_COMPLEX_COPY_ASSIGN (type))
4432 		  error ("member %q+#D with copy assignment operator "
4433 			 "not allowed in anonymous aggregate", field);
4434 	      }
4435 	  }
4436     }
4437 }
4438 
4439 /* Warn for an attribute located at LOCATION that appertains to the
4440    class type CLASS_TYPE that has not been properly placed after its
4441    class-key, in it class-specifier.  */
4442 
4443 void
4444 warn_misplaced_attr_for_class_type (source_location location,
4445 				    tree class_type)
4446 {
4447   gcc_assert (OVERLOAD_TYPE_P (class_type));
4448 
4449   if (warning_at (location, OPT_Wattributes,
4450 		  "attribute ignored in declaration "
4451 		  "of %q#T", class_type))
4452     inform (location,
4453 	    "attribute for %q#T must follow the %qs keyword",
4454 	    class_type, class_key_or_enum_as_string (class_type));
4455 }
4456 
4457 /* Make sure that a declaration with no declarator is well-formed, i.e.
4458    just declares a tagged type or anonymous union.
4459 
4460    Returns the type declared; or NULL_TREE if none.  */
4461 
4462 tree
4463 check_tag_decl (cp_decl_specifier_seq *declspecs,
4464 		bool explicit_type_instantiation_p)
4465 {
4466   int saw_friend = decl_spec_seq_has_spec_p (declspecs, ds_friend);
4467   int saw_typedef = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
4468   /* If a class, struct, or enum type is declared by the DECLSPECS
4469      (i.e, if a class-specifier, enum-specifier, or non-typename
4470      elaborated-type-specifier appears in the DECLSPECS),
4471      DECLARED_TYPE is set to the corresponding type.  */
4472   tree declared_type = NULL_TREE;
4473   bool error_p = false;
4474 
4475   if (declspecs->multiple_types_p)
4476     error ("multiple types in one declaration");
4477   else if (declspecs->redefined_builtin_type)
4478     {
4479       if (!in_system_header_at (input_location))
4480 	permerror (declspecs->locations[ds_redefined_builtin_type_spec],
4481 		   "redeclaration of C++ built-in type %qT",
4482 		   declspecs->redefined_builtin_type);
4483       return NULL_TREE;
4484     }
4485 
4486   if (declspecs->type
4487       && TYPE_P (declspecs->type)
4488       && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
4489 	   && MAYBE_CLASS_TYPE_P (declspecs->type))
4490 	  || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
4491     declared_type = declspecs->type;
4492   else if (declspecs->type == error_mark_node)
4493     error_p = true;
4494   if (declared_type == NULL_TREE && ! saw_friend && !error_p)
4495     permerror (input_location, "declaration does not declare anything");
4496   else if (declared_type != NULL_TREE && type_uses_auto (declared_type))
4497     {
4498       error ("%<auto%> can only be specified for variables "
4499 	     "or function declarations");
4500       return error_mark_node;
4501     }
4502   /* Check for an anonymous union.  */
4503   else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type))
4504 	   && TYPE_ANONYMOUS_P (declared_type))
4505     {
4506       /* 7/3 In a simple-declaration, the optional init-declarator-list
4507 	 can be omitted only when declaring a class (clause 9) or
4508 	 enumeration (7.2), that is, when the decl-specifier-seq contains
4509 	 either a class-specifier, an elaborated-type-specifier with
4510 	 a class-key (9.1), or an enum-specifier.  In these cases and
4511 	 whenever a class-specifier or enum-specifier is present in the
4512 	 decl-specifier-seq, the identifiers in these specifiers are among
4513 	 the names being declared by the declaration (as class-name,
4514 	 enum-names, or enumerators, depending on the syntax).  In such
4515 	 cases, and except for the declaration of an unnamed bit-field (9.6),
4516 	 the decl-specifier-seq shall introduce one or more names into the
4517 	 program, or shall redeclare a name introduced by a previous
4518 	 declaration.  [Example:
4519 	     enum { };			// ill-formed
4520 	     typedef class { };		// ill-formed
4521 	 --end example]  */
4522       if (saw_typedef)
4523 	{
4524 	  error ("missing type-name in typedef-declaration");
4525 	  return NULL_TREE;
4526 	}
4527       /* Anonymous unions are objects, so they can have specifiers.  */;
4528       SET_ANON_AGGR_TYPE_P (declared_type);
4529 
4530       if (TREE_CODE (declared_type) != UNION_TYPE
4531 	  && !in_system_header_at (input_location))
4532 	pedwarn (input_location, OPT_Wpedantic, "ISO C++ prohibits anonymous structs");
4533     }
4534 
4535   else
4536     {
4537       if (decl_spec_seq_has_spec_p (declspecs, ds_inline)
4538 	  || decl_spec_seq_has_spec_p (declspecs, ds_virtual))
4539 	error ("%qs can only be specified for functions",
4540 	       decl_spec_seq_has_spec_p (declspecs, ds_inline)
4541 	       ? "inline" : "virtual");
4542       else if (saw_friend
4543 	       && (!current_class_type
4544 		   || current_scope () != current_class_type))
4545 	error ("%<friend%> can only be specified inside a class");
4546       else if (decl_spec_seq_has_spec_p (declspecs, ds_explicit))
4547 	error ("%<explicit%> can only be specified for constructors");
4548       else if (declspecs->storage_class)
4549 	error ("a storage class can only be specified for objects "
4550 	       "and functions");
4551       else if (decl_spec_seq_has_spec_p (declspecs, ds_const)
4552 	       || decl_spec_seq_has_spec_p (declspecs, ds_volatile)
4553 	       || decl_spec_seq_has_spec_p (declspecs, ds_restrict)
4554 	       || decl_spec_seq_has_spec_p (declspecs, ds_thread))
4555 	error ("qualifiers can only be specified for objects "
4556 	       "and functions");
4557       else if (saw_typedef)
4558 	warning (0, "%<typedef%> was ignored in this declaration");
4559       else if (decl_spec_seq_has_spec_p (declspecs,  ds_constexpr))
4560         error ("%<constexpr%> cannot be used for type declarations");
4561     }
4562 
4563   if (declspecs->attributes && warn_attributes && declared_type)
4564     {
4565       location_t loc;
4566       if (!CLASS_TYPE_P (declared_type)
4567 	  || !CLASSTYPE_TEMPLATE_INSTANTIATION (declared_type))
4568 	/* For a non-template class, use the name location.  */
4569 	loc = location_of (declared_type);
4570       else
4571 	/* For a template class (an explicit instantiation), use the
4572 	   current location.  */
4573 	loc = input_location;
4574 
4575       if (explicit_type_instantiation_p)
4576 	/* [dcl.attr.grammar]/4:
4577 
4578 	       No attribute-specifier-seq shall appertain to an explicit
4579 	       instantiation.  */
4580 	{
4581 	  if (warning_at (loc, OPT_Wattributes,
4582 			  "attribute ignored in explicit instantiation %q#T",
4583 			  declared_type))
4584 	    inform (loc,
4585 		    "no attribute can be applied to "
4586 		    "an explicit instantiation");
4587 	}
4588       else
4589 	warn_misplaced_attr_for_class_type (loc, declared_type);
4590     }
4591 
4592   return declared_type;
4593 }
4594 
4595 /* Called when a declaration is seen that contains no names to declare.
4596    If its type is a reference to a structure, union or enum inherited
4597    from a containing scope, shadow that tag name for the current scope
4598    with a forward reference.
4599    If its type defines a new named structure or union
4600    or defines an enum, it is valid but we need not do anything here.
4601    Otherwise, it is an error.
4602 
4603    C++: may have to grok the declspecs to learn about static,
4604    complain for anonymous unions.
4605 
4606    Returns the TYPE declared -- or NULL_TREE if none.  */
4607 
4608 tree
4609 shadow_tag (cp_decl_specifier_seq *declspecs)
4610 {
4611   tree t = check_tag_decl (declspecs,
4612 			   /*explicit_type_instantiation_p=*/false);
4613 
4614   if (!t)
4615     return NULL_TREE;
4616 
4617   if (maybe_process_partial_specialization (t) == error_mark_node)
4618     return NULL_TREE;
4619 
4620   /* This is where the variables in an anonymous union are
4621      declared.  An anonymous union declaration looks like:
4622      union { ... } ;
4623      because there is no declarator after the union, the parser
4624      sends that declaration here.  */
4625   if (ANON_AGGR_TYPE_P (t))
4626     {
4627       fixup_anonymous_aggr (t);
4628 
4629       if (TYPE_FIELDS (t))
4630 	{
4631 	  tree decl = grokdeclarator (/*declarator=*/NULL,
4632 				      declspecs, NORMAL, 0, NULL);
4633 	  finish_anon_union (decl);
4634 	}
4635     }
4636 
4637   return t;
4638 }
4639 
4640 /* Decode a "typename", such as "int **", returning a ..._TYPE node.  */
4641 
4642 tree
4643 groktypename (cp_decl_specifier_seq *type_specifiers,
4644 	      const cp_declarator *declarator,
4645 	      bool is_template_arg)
4646 {
4647   tree attrs;
4648   tree type;
4649   enum decl_context context
4650     = is_template_arg ? TEMPLATE_TYPE_ARG : TYPENAME;
4651   attrs = type_specifiers->attributes;
4652   type_specifiers->attributes = NULL_TREE;
4653   type = grokdeclarator (declarator, type_specifiers, context, 0, &attrs);
4654   if (attrs && type != error_mark_node)
4655     {
4656       if (CLASS_TYPE_P (type))
4657 	warning (OPT_Wattributes, "ignoring attributes applied to class type %qT "
4658 		 "outside of definition", type);
4659       else if (MAYBE_CLASS_TYPE_P (type))
4660 	/* A template type parameter or other dependent type.  */
4661 	warning (OPT_Wattributes, "ignoring attributes applied to dependent "
4662 		 "type %qT without an associated declaration", type);
4663       else
4664 	cplus_decl_attributes (&type, attrs, 0);
4665     }
4666   return type;
4667 }
4668 
4669 /* Process a DECLARATOR for a function-scope variable declaration,
4670    namespace-scope variable declaration, or function declaration.
4671    (Function definitions go through start_function; class member
4672    declarations appearing in the body of the class go through
4673    grokfield.)  The DECL corresponding to the DECLARATOR is returned.
4674    If an error occurs, the error_mark_node is returned instead.
4675 
4676    DECLSPECS are the decl-specifiers for the declaration.  INITIALIZED is
4677    SD_INITIALIZED if an explicit initializer is present, or SD_DEFAULTED
4678    for an explicitly defaulted function, or SD_DELETED for an explicitly
4679    deleted function, but 0 (SD_UNINITIALIZED) if this is a variable
4680    implicitly initialized via a default constructor.  ATTRIBUTES and
4681    PREFIX_ATTRIBUTES are GNU attributes associated with this declaration.
4682 
4683    The scope represented by the context of the returned DECL is pushed
4684    (if it is not the global namespace) and is assigned to
4685    *PUSHED_SCOPE_P.  The caller is then responsible for calling
4686    pop_scope on *PUSHED_SCOPE_P if it is set.  */
4687 
4688 tree
4689 start_decl (const cp_declarator *declarator,
4690 	    cp_decl_specifier_seq *declspecs,
4691 	    int initialized,
4692 	    tree attributes,
4693 	    tree prefix_attributes,
4694 	    tree *pushed_scope_p)
4695 {
4696   tree decl;
4697   tree context;
4698   bool was_public;
4699   int flags;
4700   bool alias;
4701 
4702   *pushed_scope_p = NULL_TREE;
4703 
4704   /* An object declared as __attribute__((deprecated)) suppresses
4705      warnings of uses of other deprecated items.  */
4706   if (lookup_attribute ("deprecated", attributes))
4707     deprecated_state = DEPRECATED_SUPPRESS;
4708 
4709   attributes = chainon (attributes, prefix_attributes);
4710 
4711   decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
4712 			 &attributes);
4713 
4714   deprecated_state = DEPRECATED_NORMAL;
4715 
4716   if (decl == NULL_TREE || VOID_TYPE_P (decl)
4717       || decl == error_mark_node)
4718     return error_mark_node;
4719 
4720   context = CP_DECL_CONTEXT (decl);
4721   if (context != global_namespace)
4722     *pushed_scope_p = push_scope (context);
4723 
4724   /* Is it valid for this decl to have an initializer at all?
4725      If not, set INITIALIZED to zero, which will indirectly
4726      tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
4727   if (initialized
4728       && TREE_CODE (decl) == TYPE_DECL)
4729     {
4730       error ("typedef %qD is initialized (use decltype instead)", decl);
4731       return error_mark_node;
4732     }
4733 
4734   if (initialized)
4735     {
4736       if (! toplevel_bindings_p ()
4737 	  && DECL_EXTERNAL (decl))
4738 	warning (0, "declaration of %q#D has %<extern%> and is initialized",
4739 		 decl);
4740       DECL_EXTERNAL (decl) = 0;
4741       if (toplevel_bindings_p ())
4742 	TREE_STATIC (decl) = 1;
4743     }
4744   alias = lookup_attribute ("alias", DECL_ATTRIBUTES (decl)) != 0;
4745 
4746   if (alias && TREE_CODE (decl) == FUNCTION_DECL)
4747     record_key_method_defined (decl);
4748 
4749   /* If this is a typedef that names the class for linkage purposes
4750      (7.1.3p8), apply any attributes directly to the type.  */
4751   if (TREE_CODE (decl) == TYPE_DECL
4752       && OVERLOAD_TYPE_P (TREE_TYPE (decl))
4753       && decl == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl))))
4754     flags = ATTR_FLAG_TYPE_IN_PLACE;
4755   else
4756     flags = 0;
4757 
4758   /* Set attributes here so if duplicate decl, will have proper attributes.  */
4759   cplus_decl_attributes (&decl, attributes, flags);
4760 
4761   /* Dllimported symbols cannot be defined.  Static data members (which
4762      can be initialized in-class and dllimported) go through grokfield,
4763      not here, so we don't need to exclude those decls when checking for
4764      a definition.  */
4765   if (initialized && DECL_DLLIMPORT_P (decl))
4766     {
4767       error ("definition of %q#D is marked %<dllimport%>", decl);
4768       DECL_DLLIMPORT_P (decl) = 0;
4769     }
4770 
4771   /* If #pragma weak was used, mark the decl weak now.  */
4772   if (!processing_template_decl)
4773     maybe_apply_pragma_weak (decl);
4774 
4775   if (TREE_CODE (decl) == FUNCTION_DECL
4776       && DECL_DECLARED_INLINE_P (decl)
4777       && DECL_UNINLINABLE (decl)
4778       && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
4779     warning (0, "inline function %q+D given attribute noinline", decl);
4780 
4781   if (TYPE_P (context) && COMPLETE_TYPE_P (complete_type (context)))
4782     {
4783       bool this_tmpl = (processing_template_decl
4784 			> template_class_depth (context));
4785       if (VAR_P (decl))
4786 	{
4787 	  tree field = lookup_field (context, DECL_NAME (decl), 0, false);
4788 	  if (field == NULL_TREE
4789 	      || !(VAR_P (field) || variable_template_p (field)))
4790 	    error ("%q+#D is not a static data member of %q#T", decl, context);
4791 	  else if (variable_template_p (field) && !this_tmpl)
4792 	    {
4793 	      if (DECL_LANG_SPECIFIC (decl)
4794 		  && DECL_TEMPLATE_SPECIALIZATION (decl))
4795 		/* OK, specialization was already checked.  */;
4796 	      else
4797 		{
4798 		  error_at (DECL_SOURCE_LOCATION (decl),
4799 			    "non-member-template declaration of %qD", decl);
4800 		  inform (DECL_SOURCE_LOCATION (field), "does not match "
4801 			  "member template declaration here");
4802 		  return error_mark_node;
4803 		}
4804 	    }
4805 	  else
4806 	    {
4807 	      if (variable_template_p (field))
4808 		field = DECL_TEMPLATE_RESULT (field);
4809 
4810 	      if (DECL_CONTEXT (field) != context)
4811 		{
4812 		  if (!same_type_p (DECL_CONTEXT (field), context))
4813 		    permerror (input_location, "ISO C++ does not permit %<%T::%D%> "
4814 			       "to be defined as %<%T::%D%>",
4815 			       DECL_CONTEXT (field), DECL_NAME (decl),
4816 			       context, DECL_NAME (decl));
4817 		  DECL_CONTEXT (decl) = DECL_CONTEXT (field);
4818 		}
4819 	      /* Static data member are tricky; an in-class initialization
4820 		 still doesn't provide a definition, so the in-class
4821 		 declaration will have DECL_EXTERNAL set, but will have an
4822 		 initialization.  Thus, duplicate_decls won't warn
4823 		 about this situation, and so we check here.  */
4824 	      if (initialized && DECL_INITIALIZED_IN_CLASS_P (field))
4825 		error ("duplicate initialization of %qD", decl);
4826 	      if (duplicate_decls (decl, field, /*newdecl_is_friend=*/false))
4827 		decl = field;
4828               if (decl_spec_seq_has_spec_p (declspecs, ds_constexpr)
4829                   && !DECL_DECLARED_CONSTEXPR_P (field))
4830                 error ("%qD declared %<constexpr%> outside its class", field);
4831 	    }
4832 	}
4833       else
4834 	{
4835 	  tree field = check_classfn (context, decl,
4836 				      this_tmpl
4837 				      ? current_template_parms
4838 				      : NULL_TREE);
4839 	  if (field && field != error_mark_node
4840 	      && duplicate_decls (decl, field,
4841 				 /*newdecl_is_friend=*/false))
4842 	    decl = field;
4843 	}
4844 
4845       /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set.  */
4846       DECL_IN_AGGR_P (decl) = 0;
4847       /* Do not mark DECL as an explicit specialization if it was not
4848 	 already marked as an instantiation; a declaration should
4849 	 never be marked as a specialization unless we know what
4850 	 template is being specialized.  */
4851       if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
4852 	{
4853 	  SET_DECL_TEMPLATE_SPECIALIZATION (decl);
4854 	  if (TREE_CODE (decl) == FUNCTION_DECL)
4855 	    DECL_COMDAT (decl) = (TREE_PUBLIC (decl)
4856 				  && DECL_DECLARED_INLINE_P (decl));
4857 	  else
4858 	    DECL_COMDAT (decl) = false;
4859 
4860 	  /* [temp.expl.spec] An explicit specialization of a static data
4861 	     member of a template is a definition if the declaration
4862 	     includes an initializer; otherwise, it is a declaration.
4863 
4864 	     We check for processing_specialization so this only applies
4865 	     to the new specialization syntax.  */
4866 	  if (!initialized && processing_specialization)
4867 	    DECL_EXTERNAL (decl) = 1;
4868 	}
4869 
4870       if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl)
4871 	  /* Aliases are definitions. */
4872 	  && !alias)
4873 	permerror (input_location, "declaration of %q#D outside of class is not definition",
4874 		   decl);
4875     }
4876 
4877   was_public = TREE_PUBLIC (decl);
4878 
4879   /* Enter this declaration into the symbol table.  Don't push the plain
4880      VAR_DECL for a variable template.  */
4881   if (!template_parm_scope_p ()
4882       || TREE_CODE (decl) != VAR_DECL)
4883     decl = maybe_push_decl (decl);
4884 
4885   if (processing_template_decl)
4886     decl = push_template_decl (decl);
4887   if (decl == error_mark_node)
4888     return error_mark_node;
4889 
4890   if (VAR_P (decl)
4891       && DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) && !was_public
4892       && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl))
4893     {
4894       /* This is a const variable with implicit 'static'.  Set
4895 	 DECL_THIS_STATIC so we can tell it from variables that are
4896 	 !TREE_PUBLIC because of the anonymous namespace.  */
4897       gcc_assert (CP_TYPE_CONST_P (TREE_TYPE (decl)) || errorcount);
4898       DECL_THIS_STATIC (decl) = 1;
4899     }
4900 
4901   if (current_function_decl && VAR_P (decl)
4902       && DECL_DECLARED_CONSTEXPR_P (current_function_decl))
4903     {
4904       bool ok = false;
4905       if (DECL_THREAD_LOCAL_P (decl))
4906 	error ("%qD declared %<thread_local%> in %<constexpr%> function",
4907 	       decl);
4908       else if (TREE_STATIC (decl))
4909 	error ("%qD declared %<static%> in %<constexpr%> function", decl);
4910       else
4911 	ok = true;
4912       if (!ok)
4913 	cp_function_chain->invalid_constexpr = true;
4914     }
4915 
4916   if (!processing_template_decl && VAR_P (decl))
4917     start_decl_1 (decl, initialized);
4918 
4919   return decl;
4920 }
4921 
4922 /* Process the declaration of a variable DECL.  INITIALIZED is true
4923    iff DECL is explicitly initialized.  (INITIALIZED is false if the
4924    variable is initialized via an implicitly-called constructor.)
4925    This function must be called for ordinary variables (including, for
4926    example, implicit instantiations of templates), but must not be
4927    called for template declarations.  */
4928 
4929 void
4930 start_decl_1 (tree decl, bool initialized)
4931 {
4932   tree type;
4933   bool complete_p;
4934   bool aggregate_definition_p;
4935 
4936   gcc_assert (!processing_template_decl);
4937 
4938   if (error_operand_p (decl))
4939     return;
4940 
4941   gcc_assert (VAR_P (decl));
4942 
4943   type = TREE_TYPE (decl);
4944   complete_p = COMPLETE_TYPE_P (type);
4945   aggregate_definition_p = MAYBE_CLASS_TYPE_P (type) && !DECL_EXTERNAL (decl);
4946 
4947   /* If an explicit initializer is present, or if this is a definition
4948      of an aggregate, then we need a complete type at this point.
4949      (Scalars are always complete types, so there is nothing to
4950      check.)  This code just sets COMPLETE_P; errors (if necessary)
4951      are issued below.  */
4952   if ((initialized || aggregate_definition_p)
4953       && !complete_p
4954       && COMPLETE_TYPE_P (complete_type (type)))
4955     {
4956       complete_p = true;
4957       /* We will not yet have set TREE_READONLY on DECL if the type
4958 	 was "const", but incomplete, before this point.  But, now, we
4959 	 have a complete type, so we can try again.  */
4960       cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
4961     }
4962 
4963   if (initialized)
4964     /* Is it valid for this decl to have an initializer at all?  */
4965     {
4966       /* Don't allow initializations for incomplete types except for
4967 	 arrays which might be completed by the initialization.  */
4968       if (complete_p)
4969 	;			/* A complete type is ok.  */
4970       else if (type_uses_auto (type))
4971 	; 			/* An auto type is ok.  */
4972       else if (TREE_CODE (type) != ARRAY_TYPE)
4973 	{
4974 	  error ("variable %q#D has initializer but incomplete type", decl);
4975 	  type = TREE_TYPE (decl) = error_mark_node;
4976 	}
4977       else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
4978 	{
4979 	  if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
4980 	    error ("elements of array %q#D have incomplete type", decl);
4981 	  /* else we already gave an error in start_decl.  */
4982 	}
4983     }
4984   else if (aggregate_definition_p && !complete_p)
4985     {
4986       if (type_uses_auto (type))
4987 	error ("declaration of %q#D has no initializer", decl);
4988       else
4989 	error ("aggregate %q#D has incomplete type and cannot be defined",
4990 	       decl);
4991       /* Change the type so that assemble_variable will give
4992 	 DECL an rtl we can live with: (mem (const_int 0)).  */
4993       type = TREE_TYPE (decl) = error_mark_node;
4994     }
4995 
4996   /* Create a new scope to hold this declaration if necessary.
4997      Whether or not a new scope is necessary cannot be determined
4998      until after the type has been completed; if the type is a
4999      specialization of a class template it is not until after
5000      instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
5001      will be set correctly.  */
5002   maybe_push_cleanup_level (type);
5003 }
5004 
5005 /* Handle initialization of references.  DECL, TYPE, and INIT have the
5006    same meaning as in cp_finish_decl.  *CLEANUP must be NULL on entry,
5007    but will be set to a new CLEANUP_STMT if a temporary is created
5008    that must be destroyed subsequently.
5009 
5010    Returns an initializer expression to use to initialize DECL, or
5011    NULL if the initialization can be performed statically.
5012 
5013    Quotes on semantics can be found in ARM 8.4.3.  */
5014 
5015 static tree
5016 grok_reference_init (tree decl, tree type, tree init, int flags)
5017 {
5018   if (init == NULL_TREE)
5019     {
5020       if ((DECL_LANG_SPECIFIC (decl) == 0
5021 	   || DECL_IN_AGGR_P (decl) == 0)
5022 	  && ! DECL_THIS_EXTERN (decl))
5023 	error ("%qD declared as reference but not initialized", decl);
5024       return NULL_TREE;
5025     }
5026 
5027   if (TREE_CODE (init) == TREE_LIST)
5028     init = build_x_compound_expr_from_list (init, ELK_INIT,
5029 					    tf_warning_or_error);
5030 
5031   tree ttype = TREE_TYPE (type);
5032   if (TREE_CODE (ttype) != ARRAY_TYPE
5033       && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
5034     /* Note: default conversion is only called in very special cases.  */
5035     init = decay_conversion (init, tf_warning_or_error);
5036 
5037   /* check_initializer handles this for non-reference variables, but for
5038      references we need to do it here or the initializer will get the
5039      incomplete array type and confuse later calls to
5040      cp_complete_array_type.  */
5041   if (TREE_CODE (ttype) == ARRAY_TYPE
5042       && TYPE_DOMAIN (ttype) == NULL_TREE
5043       && (BRACE_ENCLOSED_INITIALIZER_P (init)
5044 	  || TREE_CODE (init) == STRING_CST))
5045     {
5046       cp_complete_array_type (&ttype, init, false);
5047       if (ttype != TREE_TYPE (type))
5048 	type = cp_build_reference_type (ttype, TYPE_REF_IS_RVALUE (type));
5049     }
5050 
5051   /* Convert INIT to the reference type TYPE.  This may involve the
5052      creation of a temporary, whose lifetime must be the same as that
5053      of the reference.  If so, a DECL_EXPR for the temporary will be
5054      added just after the DECL_EXPR for DECL.  That's why we don't set
5055      DECL_INITIAL for local references (instead assigning to them
5056      explicitly); we need to allow the temporary to be initialized
5057      first.  */
5058   return initialize_reference (type, init, flags,
5059 			       tf_warning_or_error);
5060 }
5061 
5062 /* Designated initializers in arrays are not supported in GNU C++.
5063    The parser cannot detect this error since it does not know whether
5064    a given brace-enclosed initializer is for a class type or for an
5065    array.  This function checks that CE does not use a designated
5066    initializer.  If it does, an error is issued.  Returns true if CE
5067    is valid, i.e., does not have a designated initializer.  */
5068 
5069 static bool
5070 check_array_designated_initializer (constructor_elt *ce,
5071 				    unsigned HOST_WIDE_INT index)
5072 {
5073   /* Designated initializers for array elements are not supported.  */
5074   if (ce->index)
5075     {
5076       /* The parser only allows identifiers as designated
5077 	 initializers.  */
5078       if (ce->index == error_mark_node)
5079 	{
5080 	  error ("name used in a GNU-style designated "
5081 		 "initializer for an array");
5082 	  return false;
5083 	}
5084       else if (identifier_p (ce->index))
5085 	{
5086 	  error ("name %qD used in a GNU-style designated "
5087 		 "initializer for an array", ce->index);
5088 	  return false;
5089 	}
5090 
5091       tree ce_index = build_expr_type_conversion (WANT_INT | WANT_ENUM,
5092 						  ce->index, true);
5093       if (ce_index
5094 	  && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (ce_index))
5095 	  && (TREE_CODE (ce_index = maybe_constant_value (ce_index))
5096 	      == INTEGER_CST))
5097 	{
5098 	  /* A C99 designator is OK if it matches the current index.  */
5099 	  if (wi::eq_p (ce_index, index))
5100 	    return true;
5101 	  else
5102 	    sorry ("non-trivial designated initializers not supported");
5103 	}
5104       else
5105 	error ("C99 designator %qE is not an integral constant-expression",
5106 	       ce->index);
5107 
5108       return false;
5109     }
5110 
5111   return true;
5112 }
5113 
5114 /* When parsing `int a[] = {1, 2};' we don't know the size of the
5115    array until we finish parsing the initializer.  If that's the
5116    situation we're in, update DECL accordingly.  */
5117 
5118 static void
5119 maybe_deduce_size_from_array_init (tree decl, tree init)
5120 {
5121   tree type = TREE_TYPE (decl);
5122 
5123   if (TREE_CODE (type) == ARRAY_TYPE
5124       && TYPE_DOMAIN (type) == NULL_TREE
5125       && TREE_CODE (decl) != TYPE_DECL)
5126     {
5127       /* do_default is really a C-ism to deal with tentative definitions.
5128 	 But let's leave it here to ease the eventual merge.  */
5129       int do_default = !DECL_EXTERNAL (decl);
5130       tree initializer = init ? init : DECL_INITIAL (decl);
5131       int failure = 0;
5132 
5133       /* Check that there are no designated initializers in INIT, as
5134 	 those are not supported in GNU C++, and as the middle-end
5135 	 will crash if presented with a non-numeric designated
5136 	 initializer.  */
5137       if (initializer && BRACE_ENCLOSED_INITIALIZER_P (initializer))
5138 	{
5139 	  vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initializer);
5140 	  constructor_elt *ce;
5141 	  HOST_WIDE_INT i;
5142 	  FOR_EACH_VEC_SAFE_ELT (v, i, ce)
5143 	    if (!check_array_designated_initializer (ce, i))
5144 	      failure = 1;
5145 	}
5146 
5147       if (!failure)
5148 	{
5149 	  failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
5150 					    do_default);
5151 	  if (failure == 1)
5152 	    {
5153 	      error ("initializer fails to determine size of %qD", decl);
5154 	    }
5155 	  else if (failure == 2)
5156 	    {
5157 	      if (do_default)
5158 		{
5159 		  error ("array size missing in %qD", decl);
5160 		}
5161 	      /* If a `static' var's size isn't known, make it extern as
5162 		 well as static, so it does not get allocated.  If it's not
5163 		 `static', then don't mark it extern; finish_incomplete_decl
5164 		 will give it a default size and it will get allocated.  */
5165 	      else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
5166 		DECL_EXTERNAL (decl) = 1;
5167 	    }
5168 	  else if (failure == 3)
5169 	    {
5170 	      error ("zero-size array %qD", decl);
5171 	    }
5172 	}
5173 
5174       cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
5175 
5176       relayout_decl (decl);
5177     }
5178 }
5179 
5180 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
5181    any appropriate error messages regarding the layout.  */
5182 
5183 static void
5184 layout_var_decl (tree decl)
5185 {
5186   tree type;
5187 
5188   type = TREE_TYPE (decl);
5189   if (type == error_mark_node)
5190     return;
5191 
5192   /* If we haven't already laid out this declaration, do so now.
5193      Note that we must not call complete type for an external object
5194      because it's type might involve templates that we are not
5195      supposed to instantiate yet.  (And it's perfectly valid to say
5196      `extern X x' for some incomplete type `X'.)  */
5197   if (!DECL_EXTERNAL (decl))
5198     complete_type (type);
5199   if (!DECL_SIZE (decl)
5200       && TREE_TYPE (decl) != error_mark_node
5201       && (COMPLETE_TYPE_P (type)
5202 	  || (TREE_CODE (type) == ARRAY_TYPE
5203 	      && !TYPE_DOMAIN (type)
5204 	      && COMPLETE_TYPE_P (TREE_TYPE (type)))))
5205     layout_decl (decl, 0);
5206 
5207   if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
5208     {
5209       /* An automatic variable with an incomplete type: that is an error.
5210 	 Don't talk about array types here, since we took care of that
5211 	 message in grokdeclarator.  */
5212       error ("storage size of %qD isn%'t known", decl);
5213       TREE_TYPE (decl) = error_mark_node;
5214     }
5215 #if 0
5216   /* Keep this code around in case we later want to control debug info
5217      based on whether a type is "used".  (jason 1999-11-11) */
5218 
5219   else if (!DECL_EXTERNAL (decl) && MAYBE_CLASS_TYPE_P (ttype))
5220     /* Let debugger know it should output info for this type.  */
5221     note_debug_info_needed (ttype);
5222 
5223   if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
5224     note_debug_info_needed (DECL_CONTEXT (decl));
5225 #endif
5226 
5227   if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
5228       && DECL_SIZE (decl) != NULL_TREE
5229       && ! TREE_CONSTANT (DECL_SIZE (decl)))
5230     {
5231       if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
5232 	constant_expression_warning (DECL_SIZE (decl));
5233       else
5234 	{
5235 	  error ("storage size of %qD isn%'t constant", decl);
5236 	  TREE_TYPE (decl) = error_mark_node;
5237 	}
5238     }
5239 }
5240 
5241 /* If a local static variable is declared in an inline function, or if
5242    we have a weak definition, we must endeavor to create only one
5243    instance of the variable at link-time.  */
5244 
5245 void
5246 maybe_commonize_var (tree decl)
5247 {
5248   /* Static data in a function with comdat linkage also has comdat
5249      linkage.  */
5250   if (TREE_STATIC (decl)
5251       /* Don't mess with __FUNCTION__.  */
5252       && ! DECL_ARTIFICIAL (decl)
5253       && DECL_FUNCTION_SCOPE_P (decl)
5254       && vague_linkage_p (DECL_CONTEXT (decl)))
5255     {
5256       if (flag_weak)
5257 	{
5258 	  /* With weak symbols, we simply make the variable COMDAT;
5259 	     that will cause copies in multiple translations units to
5260 	     be merged.  */
5261 	  comdat_linkage (decl);
5262 	}
5263       else
5264 	{
5265 	  if (DECL_INITIAL (decl) == NULL_TREE
5266 	      || DECL_INITIAL (decl) == error_mark_node)
5267 	    {
5268 	      /* Without weak symbols, we can use COMMON to merge
5269 		 uninitialized variables.  */
5270 	      TREE_PUBLIC (decl) = 1;
5271 	      DECL_COMMON (decl) = 1;
5272 	    }
5273 	  else
5274 	    {
5275 	      /* While for initialized variables, we must use internal
5276 		 linkage -- which means that multiple copies will not
5277 		 be merged.  */
5278 	      TREE_PUBLIC (decl) = 0;
5279 	      DECL_COMMON (decl) = 0;
5280 	      if (warning_at (DECL_SOURCE_LOCATION (decl), 0,
5281 			      "sorry: semantics of inline function static "
5282 			      "data %q#D are wrong (you%'ll wind up "
5283 			      "with multiple copies)", decl))
5284 		inform (DECL_SOURCE_LOCATION (decl),
5285 			"you can work around this by removing the initializer");
5286 	    }
5287 	}
5288     }
5289 }
5290 
5291 /* Issue an error message if DECL is an uninitialized const variable.  */
5292 
5293 static void
5294 check_for_uninitialized_const_var (tree decl)
5295 {
5296   tree type = strip_array_types (TREE_TYPE (decl));
5297 
5298   /* ``Unless explicitly declared extern, a const object does not have
5299      external linkage and must be initialized. ($8.4; $12.1)'' ARM
5300      7.1.6 */
5301   if (VAR_P (decl)
5302       && TREE_CODE (type) != REFERENCE_TYPE
5303       && (CP_TYPE_CONST_P (type) || var_in_constexpr_fn (decl))
5304       && !DECL_INITIAL (decl))
5305     {
5306       tree field = default_init_uninitialized_part (type);
5307       if (!field)
5308 	return;
5309 
5310       if (CP_TYPE_CONST_P (type))
5311 	permerror (DECL_SOURCE_LOCATION (decl),
5312 		   "uninitialized const %qD", decl);
5313       else
5314 	{
5315 	  error_at (DECL_SOURCE_LOCATION (decl),
5316 		    "uninitialized variable %qD in %<constexpr%> function",
5317 		    decl);
5318 	  cp_function_chain->invalid_constexpr = true;
5319 	}
5320 
5321       if (CLASS_TYPE_P (type))
5322 	{
5323 	  tree defaulted_ctor;
5324 
5325 	  inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
5326 		  "%q#T has no user-provided default constructor", type);
5327 	  defaulted_ctor = in_class_defaulted_default_constructor (type);
5328 	  if (defaulted_ctor)
5329 	    inform (DECL_SOURCE_LOCATION (defaulted_ctor),
5330 		    "constructor is not user-provided because it is "
5331 		    "explicitly defaulted in the class body");
5332 	  inform (0, "and the implicitly-defined constructor does not "
5333 		  "initialize %q+#D", field);
5334 	}
5335     }
5336 }
5337 
5338 /* Structure holding the current initializer being processed by reshape_init.
5339    CUR is a pointer to the current element being processed, END is a pointer
5340    after the last element present in the initializer.  */
5341 typedef struct reshape_iterator_t
5342 {
5343   constructor_elt *cur;
5344   constructor_elt *end;
5345 } reshape_iter;
5346 
5347 static tree reshape_init_r (tree, reshape_iter *, bool, tsubst_flags_t);
5348 
5349 /* FIELD is a FIELD_DECL or NULL.  In the former case, the value
5350    returned is the next FIELD_DECL (possibly FIELD itself) that can be
5351    initialized.  If there are no more such fields, the return value
5352    will be NULL.  */
5353 
5354 tree
5355 next_initializable_field (tree field)
5356 {
5357   while (field
5358 	 && (TREE_CODE (field) != FIELD_DECL
5359 	     || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
5360 	     || DECL_ARTIFICIAL (field)))
5361     field = DECL_CHAIN (field);
5362 
5363   return field;
5364 }
5365 
5366 /* Subroutine of reshape_init_array and reshape_init_vector, which does
5367    the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
5368    INTEGER_CST representing the size of the array minus one (the maximum index),
5369    or NULL_TREE if the array was declared without specifying the size. D is
5370    the iterator within the constructor.  */
5371 
5372 static tree
5373 reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d,
5374 		      tsubst_flags_t complain)
5375 {
5376   tree new_init;
5377   bool sized_array_p = (max_index && TREE_CONSTANT (max_index));
5378   unsigned HOST_WIDE_INT max_index_cst = 0;
5379   unsigned HOST_WIDE_INT index;
5380 
5381   /* The initializer for an array is always a CONSTRUCTOR.  */
5382   new_init = build_constructor (init_list_type_node, NULL);
5383 
5384   if (sized_array_p)
5385     {
5386       /* Minus 1 is used for zero sized arrays.  */
5387       if (integer_all_onesp (max_index))
5388 	return new_init;
5389 
5390       if (tree_fits_uhwi_p (max_index))
5391 	max_index_cst = tree_to_uhwi (max_index);
5392       /* sizetype is sign extended, not zero extended.  */
5393       else
5394 	max_index_cst = tree_to_uhwi (fold_convert (size_type_node, max_index));
5395     }
5396 
5397   /* Loop until there are no more initializers.  */
5398   for (index = 0;
5399        d->cur != d->end && (!sized_array_p || index <= max_index_cst);
5400        ++index)
5401     {
5402       tree elt_init;
5403       constructor_elt *old_cur = d->cur;
5404 
5405       check_array_designated_initializer (d->cur, index);
5406       elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false,
5407 				 complain);
5408       if (elt_init == error_mark_node)
5409 	return error_mark_node;
5410       CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init),
5411 			      size_int (index), elt_init);
5412       if (!TREE_CONSTANT (elt_init))
5413 	TREE_CONSTANT (new_init) = false;
5414 
5415       /* This can happen with an invalid initializer (c++/54501).  */
5416       if (d->cur == old_cur && !sized_array_p)
5417 	break;
5418     }
5419 
5420   return new_init;
5421 }
5422 
5423 /* Subroutine of reshape_init_r, processes the initializers for arrays.
5424    Parameters are the same of reshape_init_r.  */
5425 
5426 static tree
5427 reshape_init_array (tree type, reshape_iter *d, tsubst_flags_t complain)
5428 {
5429   tree max_index = NULL_TREE;
5430 
5431   gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
5432 
5433   if (TYPE_DOMAIN (type))
5434     max_index = array_type_nelts (type);
5435 
5436   return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5437 }
5438 
5439 /* Subroutine of reshape_init_r, processes the initializers for vectors.
5440    Parameters are the same of reshape_init_r.  */
5441 
5442 static tree
5443 reshape_init_vector (tree type, reshape_iter *d, tsubst_flags_t complain)
5444 {
5445   tree max_index = NULL_TREE;
5446 
5447   gcc_assert (TREE_CODE (type) == VECTOR_TYPE);
5448 
5449   if (COMPOUND_LITERAL_P (d->cur->value))
5450     {
5451       tree value = d->cur->value;
5452       if (!same_type_p (TREE_TYPE (value), type))
5453 	{
5454 	  if (complain & tf_error)
5455 	    error ("invalid type %qT as initializer for a vector of type %qT",
5456 		   TREE_TYPE (d->cur->value), type);
5457 	  value = error_mark_node;
5458 	}
5459       ++d->cur;
5460       return value;
5461     }
5462 
5463   /* For a vector, we initialize it as an array of the appropriate size.  */
5464   if (TREE_CODE (type) == VECTOR_TYPE)
5465     max_index = size_int (TYPE_VECTOR_SUBPARTS (type) - 1);
5466 
5467   return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5468 }
5469 
5470 /* Subroutine of reshape_init_r, processes the initializers for classes
5471    or union. Parameters are the same of reshape_init_r.  */
5472 
5473 static tree
5474 reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p,
5475 		    tsubst_flags_t complain)
5476 {
5477   tree field;
5478   tree new_init;
5479 
5480   gcc_assert (CLASS_TYPE_P (type));
5481 
5482   /* The initializer for a class is always a CONSTRUCTOR.  */
5483   new_init = build_constructor (init_list_type_node, NULL);
5484   field = next_initializable_field (TYPE_FIELDS (type));
5485 
5486   if (!field)
5487     {
5488       /* [dcl.init.aggr]
5489 
5490 	An initializer for an aggregate member that is an
5491 	empty class shall have the form of an empty
5492 	initializer-list {}.  */
5493       if (!first_initializer_p)
5494 	{
5495 	  if (complain & tf_error)
5496 	    error ("initializer for %qT must be brace-enclosed", type);
5497 	  return error_mark_node;
5498 	}
5499       return new_init;
5500     }
5501 
5502   /* Loop through the initializable fields, gathering initializers.  */
5503   while (d->cur != d->end)
5504     {
5505       tree field_init;
5506       constructor_elt *old_cur = d->cur;
5507 
5508       /* Handle designated initializers, as an extension.  */
5509       if (d->cur->index)
5510 	{
5511 	  if (d->cur->index == error_mark_node)
5512 	    return error_mark_node;
5513 
5514 	  if (TREE_CODE (d->cur->index) == FIELD_DECL)
5515 	    /* We already reshaped this.  */
5516 	    gcc_assert (d->cur->index == field);
5517 	  else if (TREE_CODE (d->cur->index) == IDENTIFIER_NODE)
5518 	    field = lookup_field_1 (type, d->cur->index, /*want_type=*/false);
5519 	  else
5520 	    {
5521 	      if (complain & tf_error)
5522 		error ("%<[%E] =%> used in a GNU-style designated initializer"
5523 		       " for class %qT", d->cur->index, type);
5524 	      return error_mark_node;
5525 	    }
5526 
5527 	  if (!field || TREE_CODE (field) != FIELD_DECL)
5528 	    {
5529 	      if (complain & tf_error)
5530 		error ("%qT has no non-static data member named %qD", type,
5531 		       d->cur->index);
5532 	      return error_mark_node;
5533 	    }
5534 	}
5535 
5536       /* If we processed all the member of the class, we are done.  */
5537       if (!field)
5538 	break;
5539 
5540       field_init = reshape_init_r (TREE_TYPE (field), d,
5541 				   /*first_initializer_p=*/false, complain);
5542       if (field_init == error_mark_node)
5543 	return error_mark_node;
5544 
5545       if (d->cur == old_cur && d->cur->index)
5546 	{
5547 	  /* This can happen with an invalid initializer for a flexible
5548 	     array member (c++/54441).  */
5549 	  if (complain & tf_error)
5550 	    error ("invalid initializer for %q#D", field);
5551 	  return error_mark_node;
5552 	}
5553 
5554       CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
5555 
5556       /* [dcl.init.aggr]
5557 
5558 	When a union  is  initialized with a brace-enclosed
5559 	initializer, the braces shall only contain an
5560 	initializer for the first member of the union.  */
5561       if (TREE_CODE (type) == UNION_TYPE)
5562 	break;
5563 
5564       field = next_initializable_field (DECL_CHAIN (field));
5565     }
5566 
5567   return new_init;
5568 }
5569 
5570 /* Subroutine of reshape_init_r.  We're in a context where C99 initializer
5571    designators are not valid; either complain or return true to indicate
5572    that reshape_init_r should return error_mark_node.  */
5573 
5574 static bool
5575 has_designator_problem (reshape_iter *d, tsubst_flags_t complain)
5576 {
5577   if (d->cur->index)
5578     {
5579       if (complain & tf_error)
5580 	error ("C99 designator %qE outside aggregate initializer",
5581 	       d->cur->index);
5582       else
5583 	return true;
5584     }
5585   return false;
5586 }
5587 
5588 /* Subroutine of reshape_init, which processes a single initializer (part of
5589    a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
5590    iterator within the CONSTRUCTOR which points to the initializer to process.
5591    FIRST_INITIALIZER_P is true if this is the first initializer of the
5592    outermost CONSTRUCTOR node.  */
5593 
5594 static tree
5595 reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p,
5596 		tsubst_flags_t complain)
5597 {
5598   tree init = d->cur->value;
5599 
5600   if (error_operand_p (init))
5601     return error_mark_node;
5602 
5603   if (first_initializer_p && !CP_AGGREGATE_TYPE_P (type)
5604       && has_designator_problem (d, complain))
5605     return error_mark_node;
5606 
5607   if (TREE_CODE (type) == COMPLEX_TYPE)
5608     {
5609       /* A complex type can be initialized from one or two initializers,
5610 	 but braces are not elided.  */
5611       d->cur++;
5612       if (BRACE_ENCLOSED_INITIALIZER_P (init))
5613 	{
5614 	  if (CONSTRUCTOR_NELTS (init) > 2)
5615 	    {
5616 	      if (complain & tf_error)
5617 		error ("too many initializers for %qT", type);
5618 	      else
5619 		return error_mark_node;
5620 	    }
5621 	}
5622       else if (first_initializer_p && d->cur != d->end)
5623 	{
5624 	  vec<constructor_elt, va_gc> *v = 0;
5625 	  CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, init);
5626 	  CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, d->cur->value);
5627 	  if (has_designator_problem (d, complain))
5628 	    return error_mark_node;
5629 	  d->cur++;
5630 	  init = build_constructor (init_list_type_node, v);
5631 	}
5632       return init;
5633     }
5634 
5635   /* A non-aggregate type is always initialized with a single
5636      initializer.  */
5637   if (!CP_AGGREGATE_TYPE_P (type))
5638     {
5639       /* It is invalid to initialize a non-aggregate type with a
5640 	 brace-enclosed initializer before C++0x.
5641 	 We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
5642 	 of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
5643 	 a CONSTRUCTOR (with a record type).  */
5644       if (TREE_CODE (init) == CONSTRUCTOR
5645 	  /* Don't complain about a capture-init.  */
5646 	  && !CONSTRUCTOR_IS_DIRECT_INIT (init)
5647 	  && BRACE_ENCLOSED_INITIALIZER_P (init))  /* p7626.C */
5648 	{
5649 	  if (SCALAR_TYPE_P (type))
5650 	    {
5651 	      if (cxx_dialect < cxx11
5652 		  /* Isn't value-initialization.  */
5653 		  || CONSTRUCTOR_NELTS (init) > 0)
5654 		{
5655 		  if (complain & tf_error)
5656 		    error ("braces around scalar initializer for type %qT",
5657 			   type);
5658 		  init = error_mark_node;
5659 		}
5660 	    }
5661 	  else
5662 	    maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5663 	}
5664 
5665       d->cur++;
5666       return init;
5667     }
5668 
5669   /* "If T is a class type and the initializer list has a single element of
5670      type cv U, where U is T or a class derived from T, the object is
5671      initialized from that element."  Even if T is an aggregate.  */
5672   if (cxx_dialect >= cxx11 && (CLASS_TYPE_P (type) || VECTOR_TYPE_P (type))
5673       && first_initializer_p
5674       && d->end - d->cur == 1
5675       && reference_related_p (type, TREE_TYPE (init)))
5676     {
5677       d->cur++;
5678       return init;
5679     }
5680 
5681   /* [dcl.init.aggr]
5682 
5683      All implicit type conversions (clause _conv_) are considered when
5684      initializing the aggregate member with an initializer from an
5685      initializer-list.  If the initializer can initialize a member,
5686      the member is initialized.  Otherwise, if the member is itself a
5687      non-empty subaggregate, brace elision is assumed and the
5688      initializer is considered for the initialization of the first
5689      member of the subaggregate.  */
5690   if (TREE_CODE (init) != CONSTRUCTOR
5691       /* But don't try this for the first initializer, since that would be
5692 	 looking through the outermost braces; A a2 = { a1 }; is not a
5693 	 valid aggregate initialization.  */
5694       && !first_initializer_p
5695       && (same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (init))
5696 	  || can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL,
5697 			      complain)))
5698     {
5699       d->cur++;
5700       return init;
5701     }
5702 
5703   /* [dcl.init.string]
5704 
5705       A char array (whether plain char, signed char, or unsigned char)
5706       can be initialized by a string-literal (optionally enclosed in
5707       braces); a wchar_t array can be initialized by a wide
5708       string-literal (optionally enclosed in braces).  */
5709   if (TREE_CODE (type) == ARRAY_TYPE
5710       && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
5711     {
5712       tree str_init = init;
5713 
5714       /* Strip one level of braces if and only if they enclose a single
5715 	 element (as allowed by [dcl.init.string]).  */
5716       if (!first_initializer_p
5717 	  && TREE_CODE (str_init) == CONSTRUCTOR
5718 	  && vec_safe_length (CONSTRUCTOR_ELTS (str_init)) == 1)
5719 	{
5720 	  str_init = (*CONSTRUCTOR_ELTS (str_init))[0].value;
5721 	}
5722 
5723       /* If it's a string literal, then it's the initializer for the array
5724 	 as a whole. Otherwise, continue with normal initialization for
5725 	 array types (one value per array element).  */
5726       if (TREE_CODE (str_init) == STRING_CST)
5727 	{
5728 	  if (has_designator_problem (d, complain))
5729 	    return error_mark_node;
5730 	  d->cur++;
5731 	  return str_init;
5732 	}
5733     }
5734 
5735   /* The following cases are about aggregates. If we are not within a full
5736      initializer already, and there is not a CONSTRUCTOR, it means that there
5737      is a missing set of braces (that is, we are processing the case for
5738      which reshape_init exists).  */
5739   if (!first_initializer_p)
5740     {
5741       if (TREE_CODE (init) == CONSTRUCTOR)
5742 	{
5743 	  if (TREE_TYPE (init) && TYPE_PTRMEMFUNC_P (TREE_TYPE (init)))
5744 	    /* There is no need to reshape pointer-to-member function
5745 	       initializers, as they are always constructed correctly
5746 	       by the front end.  */
5747            ;
5748 	  else if (COMPOUND_LITERAL_P (init))
5749 	  /* For a nested compound literal, there is no need to reshape since
5750 	     brace elision is not allowed. Even if we decided to allow it,
5751 	     we should add a call to reshape_init in finish_compound_literal,
5752 	     before calling digest_init, so changing this code would still
5753 	     not be necessary.  */
5754 	    gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
5755 	  else
5756 	    {
5757 	      ++d->cur;
5758 	      gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5759 	      return reshape_init (type, init, complain);
5760 	    }
5761 	}
5762 
5763       warning (OPT_Wmissing_braces, "missing braces around initializer for %qT",
5764 	       type);
5765     }
5766 
5767   /* Dispatch to specialized routines.  */
5768   if (CLASS_TYPE_P (type))
5769     return reshape_init_class (type, d, first_initializer_p, complain);
5770   else if (TREE_CODE (type) == ARRAY_TYPE)
5771     return reshape_init_array (type, d, complain);
5772   else if (TREE_CODE (type) == VECTOR_TYPE)
5773     return reshape_init_vector (type, d, complain);
5774   else
5775     gcc_unreachable();
5776 }
5777 
5778 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
5779    brace-enclosed aggregate initializer.
5780 
5781    INIT is the CONSTRUCTOR containing the list of initializers describing
5782    a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
5783    It may not presently match the shape of the TYPE; for example:
5784 
5785      struct S { int a; int b; };
5786      struct S a[] = { 1, 2, 3, 4 };
5787 
5788    Here INIT will hold a vector of four elements, rather than a
5789    vector of two elements, each itself a vector of two elements.  This
5790    routine transforms INIT from the former form into the latter.  The
5791    revised CONSTRUCTOR node is returned.  */
5792 
5793 tree
5794 reshape_init (tree type, tree init, tsubst_flags_t complain)
5795 {
5796   vec<constructor_elt, va_gc> *v;
5797   reshape_iter d;
5798   tree new_init;
5799 
5800   gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5801 
5802   v = CONSTRUCTOR_ELTS (init);
5803 
5804   /* An empty constructor does not need reshaping, and it is always a valid
5805      initializer.  */
5806   if (vec_safe_is_empty (v))
5807     return init;
5808 
5809   /* Recurse on this CONSTRUCTOR.  */
5810   d.cur = &(*v)[0];
5811   d.end = d.cur + v->length ();
5812 
5813   new_init = reshape_init_r (type, &d, true, complain);
5814   if (new_init == error_mark_node)
5815     return error_mark_node;
5816 
5817   /* Make sure all the element of the constructor were used. Otherwise,
5818      issue an error about exceeding initializers.  */
5819   if (d.cur != d.end)
5820     {
5821       if (complain & tf_error)
5822 	error ("too many initializers for %qT", type);
5823       else
5824 	return error_mark_node;
5825     }
5826 
5827   return new_init;
5828 }
5829 
5830 /* Verify array initializer.  Returns true if errors have been reported.  */
5831 
5832 bool
5833 check_array_initializer (tree decl, tree type, tree init)
5834 {
5835   tree element_type = TREE_TYPE (type);
5836 
5837   /* The array type itself need not be complete, because the
5838      initializer may tell us how many elements are in the array.
5839      But, the elements of the array must be complete.  */
5840   if (!COMPLETE_TYPE_P (complete_type (element_type)))
5841     {
5842       if (decl)
5843 	error ("elements of array %q#D have incomplete type", decl);
5844       else
5845 	error ("elements of array %q#T have incomplete type", type);
5846       return true;
5847     }
5848   /* A compound literal can't have variable size.  */
5849   if (init && !decl
5850       && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
5851 	  || !TREE_CONSTANT (TYPE_SIZE (element_type))))
5852     {
5853       error ("variable-sized compound literal");
5854       return true;
5855     }
5856   return false;
5857 }
5858 
5859 /* Subroutine of check_initializer; args are passed down from that function.
5860    Set stmts_are_full_exprs_p to 1 across a call to build_aggr_init.  */
5861 
5862 static tree
5863 build_aggr_init_full_exprs (tree decl, tree init, int flags)
5864 
5865 {
5866   gcc_assert (stmts_are_full_exprs_p ());
5867   return build_aggr_init (decl, init, flags, tf_warning_or_error);
5868 }
5869 
5870 /* Verify INIT (the initializer for DECL), and record the
5871    initialization in DECL_INITIAL, if appropriate.  CLEANUP is as for
5872    grok_reference_init.
5873 
5874    If the return value is non-NULL, it is an expression that must be
5875    evaluated dynamically to initialize DECL.  */
5876 
5877 static tree
5878 check_initializer (tree decl, tree init, int flags, vec<tree, va_gc> **cleanups)
5879 {
5880   tree type = TREE_TYPE (decl);
5881   tree init_code = NULL;
5882   tree core_type;
5883 
5884   /* Things that are going to be initialized need to have complete
5885      type.  */
5886   TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
5887 
5888   if (DECL_HAS_VALUE_EXPR_P (decl))
5889     {
5890       /* A variable with DECL_HAS_VALUE_EXPR_P set is just a placeholder,
5891 	 it doesn't have storage to be initialized.  */
5892       gcc_assert (init == NULL_TREE);
5893       return NULL_TREE;
5894     }
5895 
5896   if (type == error_mark_node)
5897     /* We will have already complained.  */
5898     return NULL_TREE;
5899 
5900   if (TREE_CODE (type) == ARRAY_TYPE)
5901     {
5902       if (check_array_initializer (decl, type, init))
5903 	return NULL_TREE;
5904     }
5905   else if (!COMPLETE_TYPE_P (type))
5906     {
5907       error ("%q#D has incomplete type", decl);
5908       TREE_TYPE (decl) = error_mark_node;
5909       return NULL_TREE;
5910     }
5911   else
5912     /* There is no way to make a variable-sized class type in GNU C++.  */
5913     gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
5914 
5915   if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
5916     {
5917       int init_len = vec_safe_length (CONSTRUCTOR_ELTS (init));
5918       if (SCALAR_TYPE_P (type))
5919 	{
5920 	  if (init_len == 0)
5921 	    {
5922 	      maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5923 	      init = build_zero_init (type, NULL_TREE, false);
5924 	    }
5925 	  else if (init_len != 1 && TREE_CODE (type) != COMPLEX_TYPE)
5926 	    {
5927 	      error ("scalar object %qD requires one element in initializer",
5928 		     decl);
5929 	      TREE_TYPE (decl) = error_mark_node;
5930 	      return NULL_TREE;
5931 	    }
5932 	}
5933     }
5934 
5935   if (TREE_CODE (decl) == CONST_DECL)
5936     {
5937       gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
5938 
5939       DECL_INITIAL (decl) = init;
5940 
5941       gcc_assert (init != NULL_TREE);
5942       init = NULL_TREE;
5943     }
5944   else if (!init && DECL_REALLY_EXTERN (decl))
5945     ;
5946   else if (init || type_build_ctor_call (type)
5947 	   || TREE_CODE (type) == REFERENCE_TYPE)
5948     {
5949       if (TREE_CODE (type) == REFERENCE_TYPE)
5950 	{
5951 	  init = grok_reference_init (decl, type, init, flags);
5952 	  flags |= LOOKUP_ALREADY_DIGESTED;
5953 	}
5954       else if (!init)
5955 	check_for_uninitialized_const_var (decl);
5956       /* Do not reshape constructors of vectors (they don't need to be
5957 	 reshaped.  */
5958       else if (BRACE_ENCLOSED_INITIALIZER_P (init))
5959 	{
5960 	  if (is_std_init_list (type))
5961 	    {
5962 	      init = perform_implicit_conversion (type, init,
5963 						  tf_warning_or_error);
5964 	      flags |= LOOKUP_ALREADY_DIGESTED;
5965 	    }
5966 	  else if (TYPE_NON_AGGREGATE_CLASS (type))
5967 	    {
5968 	      /* Don't reshape if the class has constructors.  */
5969 	      if (cxx_dialect == cxx98)
5970 		error ("in C++98 %qD must be initialized by constructor, "
5971 		       "not by %<{...}%>",
5972 		       decl);
5973 	    }
5974 	  else if (TREE_CODE (type) == VECTOR_TYPE && TYPE_VECTOR_OPAQUE (type))
5975 	    {
5976 	      error ("opaque vector types cannot be initialized");
5977 	      init = error_mark_node;
5978 	    }
5979 	  else
5980 	    {
5981 	      init = reshape_init (type, init, tf_warning_or_error);
5982 	      flags |= LOOKUP_NO_NARROWING;
5983 	    }
5984 	}
5985       else if (TREE_CODE (init) == TREE_LIST
5986 	       && TREE_TYPE (init) != unknown_type_node
5987 	       && !MAYBE_CLASS_TYPE_P (type))
5988 	{
5989 	  gcc_assert (TREE_CODE (decl) != RESULT_DECL);
5990 
5991 	  /* We get here with code like `int a (2);' */
5992 	  init = build_x_compound_expr_from_list (init, ELK_INIT,
5993 						  tf_warning_or_error);
5994 	}
5995 
5996       /* If DECL has an array type without a specific bound, deduce the
5997 	 array size from the initializer.  */
5998       maybe_deduce_size_from_array_init (decl, init);
5999       type = TREE_TYPE (decl);
6000       if (type == error_mark_node)
6001 	return NULL_TREE;
6002 
6003       if ((type_build_ctor_call (type) || CLASS_TYPE_P (type))
6004 	  && !(flags & LOOKUP_ALREADY_DIGESTED)
6005 	  && !(init && BRACE_ENCLOSED_INITIALIZER_P (init)
6006 	       && CP_AGGREGATE_TYPE_P (type)
6007 	       && (CLASS_TYPE_P (type)
6008 		   || !TYPE_NEEDS_CONSTRUCTING (type)
6009 		   || type_has_extended_temps (type))))
6010 	{
6011 	  init_code = build_aggr_init_full_exprs (decl, init, flags);
6012 
6013 	  /* A constructor call is a non-trivial initializer even if
6014 	     it isn't explicitly written.  */
6015 	  if (TREE_SIDE_EFFECTS (init_code))
6016 	    DECL_NONTRIVIALLY_INITIALIZED_P (decl) = true;
6017 
6018 	  /* If this is a constexpr initializer, expand_default_init will
6019 	     have returned an INIT_EXPR rather than a CALL_EXPR.  In that
6020 	     case, pull the initializer back out and pass it down into
6021 	     store_init_value.  */
6022 	  while (TREE_CODE (init_code) == EXPR_STMT
6023 		 || TREE_CODE (init_code) == CONVERT_EXPR)
6024 	    init_code = TREE_OPERAND (init_code, 0);
6025 	  if (TREE_CODE (init_code) == INIT_EXPR)
6026 	    {
6027 	      init = TREE_OPERAND (init_code, 1);
6028 	      init_code = NULL_TREE;
6029 	      /* Don't call digest_init; it's unnecessary and will complain
6030 		 about aggregate initialization of non-aggregate classes.  */
6031 	      flags |= LOOKUP_ALREADY_DIGESTED;
6032 	    }
6033 	  else if (DECL_DECLARED_CONSTEXPR_P (decl))
6034 	    {
6035 	      /* Declared constexpr, but no suitable initializer; massage
6036 		 init appropriately so we can pass it into store_init_value
6037 		 for the error.  */
6038 	      if (CLASS_TYPE_P (type)
6039 		  && (!init || TREE_CODE (init) == TREE_LIST))
6040 		{
6041 		  init = build_functional_cast (type, init, tf_none);
6042 		  if (TREE_CODE (init) == TARGET_EXPR)
6043 		    TARGET_EXPR_DIRECT_INIT_P (init) = true;
6044 		}
6045 	      init_code = NULL_TREE;
6046 	    }
6047 	  else
6048 	    init = NULL_TREE;
6049 	}
6050 
6051       if (init && TREE_CODE (init) != TREE_VEC)
6052 	{
6053 	  /* In aggregate initialization of a variable, each element
6054 	     initialization is a full-expression because there is no
6055 	     enclosing expression.  */
6056 	  gcc_assert (stmts_are_full_exprs_p ());
6057 
6058 	  init_code = store_init_value (decl, init, cleanups, flags);
6059 
6060 	  if (pedantic && TREE_CODE (type) == ARRAY_TYPE
6061 	      && DECL_INITIAL (decl)
6062 	      && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
6063 	      && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
6064 	    warning (0, "array %qD initialized by parenthesized string literal %qE",
6065 		     decl, DECL_INITIAL (decl));
6066 	  init = NULL;
6067 	}
6068     }
6069   else
6070     {
6071       if (CLASS_TYPE_P (core_type = strip_array_types (type))
6072 	  && (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type)
6073 	      || CLASSTYPE_REF_FIELDS_NEED_INIT (core_type)))
6074 	diagnose_uninitialized_cst_or_ref_member (core_type, /*using_new=*/false,
6075 						  /*complain=*/true);
6076 
6077       check_for_uninitialized_const_var (decl);
6078     }
6079 
6080   if (init && init != error_mark_node)
6081     init_code = build2 (INIT_EXPR, type, decl, init);
6082 
6083   if (init_code)
6084     {
6085       /* We might have set these in cp_finish_decl.  */
6086       DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = false;
6087       TREE_CONSTANT (decl) = false;
6088     }
6089 
6090   if (init_code && DECL_IN_AGGR_P (decl))
6091     {
6092       static int explained = 0;
6093 
6094       if (cxx_dialect < cxx11)
6095 	error ("initializer invalid for static member with constructor");
6096       else
6097 	error ("non-constant in-class initialization invalid for static "
6098 	       "member %qD", decl);
6099       if (!explained)
6100 	{
6101 	  inform (input_location,
6102 		  "(an out of class initialization is required)");
6103 	  explained = 1;
6104 	}
6105       return NULL_TREE;
6106     }
6107 
6108   return init_code;
6109 }
6110 
6111 /* If DECL is not a local variable, give it RTL.  */
6112 
6113 static void
6114 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
6115 {
6116   int toplev = toplevel_bindings_p ();
6117   int defer_p;
6118 
6119   /* Set the DECL_ASSEMBLER_NAME for the object.  */
6120   if (asmspec)
6121     {
6122       /* The `register' keyword, when used together with an
6123 	 asm-specification, indicates that the variable should be
6124 	 placed in a particular register.  */
6125       if (VAR_P (decl) && DECL_REGISTER (decl))
6126 	{
6127 	  set_user_assembler_name (decl, asmspec);
6128 	  DECL_HARD_REGISTER (decl) = 1;
6129 	}
6130       else
6131 	{
6132 	  if (TREE_CODE (decl) == FUNCTION_DECL
6133 	      && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
6134 	    set_builtin_user_assembler_name (decl, asmspec);
6135 	  set_user_assembler_name (decl, asmspec);
6136 	}
6137     }
6138 
6139   /* Handle non-variables up front.  */
6140   if (!VAR_P (decl))
6141     {
6142       rest_of_decl_compilation (decl, toplev, at_eof);
6143       return;
6144     }
6145 
6146   /* If we see a class member here, it should be a static data
6147      member.  */
6148   if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
6149     {
6150       gcc_assert (TREE_STATIC (decl));
6151       /* An in-class declaration of a static data member should be
6152 	 external; it is only a declaration, and not a definition.  */
6153       if (init == NULL_TREE)
6154 	gcc_assert (DECL_EXTERNAL (decl) || !TREE_PUBLIC (decl));
6155     }
6156 
6157   /* We don't create any RTL for local variables.  */
6158   if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
6159     return;
6160 
6161   /* We defer emission of local statics until the corresponding
6162      DECL_EXPR is expanded.  But with constexpr its function might never
6163      be expanded, so go ahead and tell cgraph about the variable now.  */
6164   defer_p = ((DECL_FUNCTION_SCOPE_P (decl)
6165 	      && !DECL_DECLARED_CONSTEXPR_P (DECL_CONTEXT (decl)))
6166 	     || DECL_VIRTUAL_P (decl));
6167 
6168   /* Defer template instantiations.  */
6169   if (DECL_LANG_SPECIFIC (decl)
6170       && DECL_IMPLICIT_INSTANTIATION (decl))
6171     defer_p = 1;
6172 
6173   /* If we're not deferring, go ahead and assemble the variable.  */
6174   if (!defer_p)
6175     rest_of_decl_compilation (decl, toplev, at_eof);
6176 }
6177 
6178 /* walk_tree helper for wrap_temporary_cleanups, below.  */
6179 
6180 static tree
6181 wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
6182 {
6183   /* Stop at types or full-expression boundaries.  */
6184   if (TYPE_P (*stmt_p)
6185       || TREE_CODE (*stmt_p) == CLEANUP_POINT_EXPR)
6186     {
6187       *walk_subtrees = 0;
6188       return NULL_TREE;
6189     }
6190 
6191   if (TREE_CODE (*stmt_p) == TARGET_EXPR)
6192     {
6193       tree guard = (tree)data;
6194       tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
6195 
6196       tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
6197       /* Tell honor_protect_cleanup_actions to handle this as a separate
6198 	 cleanup.  */
6199       TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
6200 
6201       TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
6202     }
6203 
6204   return NULL_TREE;
6205 }
6206 
6207 /* We're initializing a local variable which has a cleanup GUARD.  If there
6208    are any temporaries used in the initializer INIT of this variable, we
6209    need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
6210    variable will be cleaned up properly if one of them throws.
6211 
6212    Unfortunately, there's no way to express this properly in terms of
6213    nesting, as the regions for the temporaries overlap the region for the
6214    variable itself; if there are two temporaries, the variable needs to be
6215    the first thing destroyed if either of them throws.  However, we only
6216    want to run the variable's cleanup if it actually got constructed.  So
6217    we need to guard the temporary cleanups with the variable's cleanup if
6218    they are run on the normal path, but not if they are run on the
6219    exceptional path.  We implement this by telling
6220    honor_protect_cleanup_actions to strip the variable cleanup from the
6221    exceptional path.  */
6222 
6223 static void
6224 wrap_temporary_cleanups (tree init, tree guard)
6225 {
6226   cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
6227 }
6228 
6229 /* Generate code to initialize DECL (a local variable).  */
6230 
6231 static void
6232 initialize_local_var (tree decl, tree init)
6233 {
6234   tree type = TREE_TYPE (decl);
6235   tree cleanup;
6236   int already_used;
6237 
6238   gcc_assert (VAR_P (decl)
6239 	      || TREE_CODE (decl) == RESULT_DECL);
6240   gcc_assert (!TREE_STATIC (decl));
6241 
6242   if (DECL_SIZE (decl) == NULL_TREE)
6243     {
6244       /* If we used it already as memory, it must stay in memory.  */
6245       DECL_INITIAL (decl) = NULL_TREE;
6246       TREE_ADDRESSABLE (decl) = TREE_USED (decl);
6247       return;
6248     }
6249 
6250   if (type == error_mark_node)
6251     return;
6252 
6253   /* Compute and store the initial value.  */
6254   already_used = TREE_USED (decl) || TREE_USED (type);
6255   if (TREE_USED (type))
6256     DECL_READ_P (decl) = 1;
6257 
6258   /* Generate a cleanup, if necessary.  */
6259   cleanup = cxx_maybe_build_cleanup (decl, tf_warning_or_error);
6260 
6261   /* Perform the initialization.  */
6262   if (init)
6263     {
6264       tree rinit = (TREE_CODE (init) == INIT_EXPR
6265 		    ? TREE_OPERAND (init, 1) : NULL_TREE);
6266       if (rinit && !TREE_SIDE_EFFECTS (rinit))
6267 	{
6268 	  /* Stick simple initializers in DECL_INITIAL so that
6269 	     -Wno-init-self works (c++/34772).  */
6270 	  gcc_assert (TREE_OPERAND (init, 0) == decl);
6271 	  DECL_INITIAL (decl) = rinit;
6272 
6273 	  if (warn_init_self && TREE_CODE (type) == REFERENCE_TYPE)
6274 	    {
6275 	      STRIP_NOPS (rinit);
6276 	      if (rinit == decl)
6277 		warning_at (DECL_SOURCE_LOCATION (decl),
6278 			    OPT_Winit_self,
6279 			    "reference %qD is initialized with itself", decl);
6280 	    }
6281 	}
6282       else
6283 	{
6284 	  int saved_stmts_are_full_exprs_p;
6285 
6286 	  /* If we're only initializing a single object, guard the
6287 	     destructors of any temporaries used in its initializer with
6288 	     its destructor.  This isn't right for arrays because each
6289 	     element initialization is a full-expression.  */
6290 	  if (cleanup && TREE_CODE (type) != ARRAY_TYPE)
6291 	    wrap_temporary_cleanups (init, cleanup);
6292 
6293 	  gcc_assert (building_stmt_list_p ());
6294 	  saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
6295 	  current_stmt_tree ()->stmts_are_full_exprs_p = 1;
6296 	  finish_expr_stmt (init);
6297 	  current_stmt_tree ()->stmts_are_full_exprs_p =
6298 	    saved_stmts_are_full_exprs_p;
6299 	}
6300     }
6301 
6302   /* Set this to 0 so we can tell whether an aggregate which was
6303      initialized was ever used.  Don't do this if it has a
6304      destructor, so we don't complain about the 'resource
6305      allocation is initialization' idiom.  Now set
6306      attribute((unused)) on types so decls of that type will be
6307      marked used. (see TREE_USED, above.)  */
6308   if (TYPE_NEEDS_CONSTRUCTING (type)
6309       && ! already_used
6310       && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
6311       && DECL_NAME (decl))
6312     TREE_USED (decl) = 0;
6313   else if (already_used)
6314     TREE_USED (decl) = 1;
6315 
6316   if (cleanup)
6317     finish_decl_cleanup (decl, cleanup);
6318 }
6319 
6320 /* DECL is a VAR_DECL for a compiler-generated variable with static
6321    storage duration (like a virtual table) whose initializer is a
6322    compile-time constant.  Initialize the variable and provide it to the
6323    back end.  */
6324 
6325 void
6326 initialize_artificial_var (tree decl, vec<constructor_elt, va_gc> *v)
6327 {
6328   tree init;
6329   gcc_assert (DECL_ARTIFICIAL (decl));
6330   init = build_constructor (TREE_TYPE (decl), v);
6331   gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
6332   DECL_INITIAL (decl) = init;
6333   DECL_INITIALIZED_P (decl) = 1;
6334   determine_visibility (decl);
6335   layout_var_decl (decl);
6336   maybe_commonize_var (decl);
6337   make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
6338 }
6339 
6340 /* INIT is the initializer for a variable, as represented by the
6341    parser.  Returns true iff INIT is type-dependent.  */
6342 
6343 static bool
6344 type_dependent_init_p (tree init)
6345 {
6346   if (TREE_CODE (init) == TREE_LIST)
6347     /* A parenthesized initializer, e.g.: int i (3, 2); ? */
6348     return any_type_dependent_elements_p (init);
6349   else if (TREE_CODE (init) == CONSTRUCTOR)
6350   /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
6351     {
6352       if (dependent_type_p (TREE_TYPE (init)))
6353 	return true;
6354 
6355       vec<constructor_elt, va_gc> *elts;
6356       size_t nelts;
6357       size_t i;
6358 
6359       elts = CONSTRUCTOR_ELTS (init);
6360       nelts = vec_safe_length (elts);
6361       for (i = 0; i < nelts; ++i)
6362 	if (type_dependent_init_p ((*elts)[i].value))
6363 	  return true;
6364     }
6365   else
6366     /* It must be a simple expression, e.g., int i = 3;  */
6367     return type_dependent_expression_p (init);
6368 
6369   return false;
6370 }
6371 
6372 /* INIT is the initializer for a variable, as represented by the
6373    parser.  Returns true iff INIT is value-dependent.  */
6374 
6375 static bool
6376 value_dependent_init_p (tree init)
6377 {
6378   if (TREE_CODE (init) == TREE_LIST)
6379     /* A parenthesized initializer, e.g.: int i (3, 2); ? */
6380     return any_value_dependent_elements_p (init);
6381   else if (TREE_CODE (init) == CONSTRUCTOR)
6382   /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
6383     {
6384       vec<constructor_elt, va_gc> *elts;
6385       size_t nelts;
6386       size_t i;
6387 
6388       elts = CONSTRUCTOR_ELTS (init);
6389       nelts = vec_safe_length (elts);
6390       for (i = 0; i < nelts; ++i)
6391 	if (value_dependent_init_p ((*elts)[i].value))
6392 	  return true;
6393     }
6394   else
6395     /* It must be a simple expression, e.g., int i = 3;  */
6396     return value_dependent_expression_p (init);
6397 
6398   return false;
6399 }
6400 
6401 /* Finish processing of a declaration;
6402    install its line number and initial value.
6403    If the length of an array type is not known before,
6404    it must be determined now, from the initial value, or it is an error.
6405 
6406    INIT is the initializer (if any) for DECL.  If INIT_CONST_EXPR_P is
6407    true, then INIT is an integral constant expression.
6408 
6409    FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
6410    if the (init) syntax was used.  */
6411 
6412 void
6413 cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
6414 		tree asmspec_tree, int flags)
6415 {
6416   tree type;
6417   vec<tree, va_gc> *cleanups = NULL;
6418   const char *asmspec = NULL;
6419   int was_readonly = 0;
6420   bool var_definition_p = false;
6421   tree auto_node;
6422 
6423   if (decl == error_mark_node)
6424     return;
6425   else if (! decl)
6426     {
6427       if (init)
6428 	error ("assignment (not initialization) in declaration");
6429       return;
6430     }
6431 
6432   gcc_assert (TREE_CODE (decl) != RESULT_DECL);
6433   /* Parameters are handled by store_parm_decls, not cp_finish_decl.  */
6434   gcc_assert (TREE_CODE (decl) != PARM_DECL);
6435 
6436   type = TREE_TYPE (decl);
6437   if (type == error_mark_node)
6438     return;
6439 
6440   /* If a name was specified, get the string.  */
6441   if (at_namespace_scope_p ())
6442     asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
6443   if (asmspec_tree && asmspec_tree != error_mark_node)
6444     asmspec = TREE_STRING_POINTER (asmspec_tree);
6445 
6446   if (current_class_type
6447       && CP_DECL_CONTEXT (decl) == current_class_type
6448       && TYPE_BEING_DEFINED (current_class_type)
6449       && !CLASSTYPE_TEMPLATE_INSTANTIATION (current_class_type)
6450       && (DECL_INITIAL (decl) || init))
6451     DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
6452 
6453   if (TREE_CODE (decl) != FUNCTION_DECL
6454       && (auto_node = type_uses_auto (type)))
6455     {
6456       tree d_init;
6457       if (init == NULL_TREE)
6458 	{
6459 	  if (DECL_LANG_SPECIFIC (decl)
6460 	      && DECL_TEMPLATE_INSTANTIATION (decl)
6461 	      && !DECL_TEMPLATE_INSTANTIATED (decl))
6462 	    {
6463 	      /* init is null because we're deferring instantiating the
6464 		 initializer until we need it.  Well, we need it now.  */
6465 	      instantiate_decl (decl, /*defer_ok*/true, /*expl*/false);
6466 	      return;
6467 	    }
6468 
6469 	  error ("declaration of %q#D has no initializer", decl);
6470 	  TREE_TYPE (decl) = error_mark_node;
6471 	  return;
6472 	}
6473       d_init = init;
6474       if (TREE_CODE (d_init) == TREE_LIST)
6475 	d_init = build_x_compound_expr_from_list (d_init, ELK_INIT,
6476 						  tf_warning_or_error);
6477       d_init = resolve_nondeduced_context (d_init, tf_warning_or_error);
6478       type = TREE_TYPE (decl) = do_auto_deduction (type, d_init,
6479 						   auto_node);
6480       if (type == error_mark_node)
6481 	return;
6482       cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
6483     }
6484 
6485   if (!ensure_literal_type_for_constexpr_object (decl))
6486     DECL_DECLARED_CONSTEXPR_P (decl) = 0;
6487 
6488   if (VAR_P (decl)
6489       && DECL_CLASS_SCOPE_P (decl)
6490       && DECL_INITIALIZED_IN_CLASS_P (decl))
6491     check_static_variable_definition (decl, type);
6492 
6493   if (init && TREE_CODE (decl) == FUNCTION_DECL)
6494     {
6495       tree clone;
6496       if (init == ridpointers[(int)RID_DELETE])
6497 	{
6498 	  /* FIXME check this is 1st decl.  */
6499 	  DECL_DELETED_FN (decl) = 1;
6500 	  DECL_DECLARED_INLINE_P (decl) = 1;
6501 	  DECL_INITIAL (decl) = error_mark_node;
6502 	  FOR_EACH_CLONE (clone, decl)
6503 	    {
6504 	      DECL_DELETED_FN (clone) = 1;
6505 	      DECL_DECLARED_INLINE_P (clone) = 1;
6506 	      DECL_INITIAL (clone) = error_mark_node;
6507 	    }
6508 	  init = NULL_TREE;
6509 	}
6510       else if (init == ridpointers[(int)RID_DEFAULT])
6511 	{
6512 	  if (defaultable_fn_check (decl))
6513 	    DECL_DEFAULTED_FN (decl) = 1;
6514 	  else
6515 	    DECL_INITIAL (decl) = NULL_TREE;
6516 	}
6517     }
6518 
6519   if (init && VAR_P (decl))
6520     {
6521       DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
6522       /* If DECL is a reference, then we want to know whether init is a
6523 	 reference constant; init_const_expr_p as passed tells us whether
6524 	 it's an rvalue constant.  */
6525       if (TREE_CODE (type) == REFERENCE_TYPE)
6526 	init_const_expr_p = potential_constant_expression (init);
6527       if (init_const_expr_p)
6528 	{
6529 	  /* Set these flags now for templates.  We'll update the flags in
6530 	     store_init_value for instantiations.  */
6531 	  DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
6532 	  if (decl_maybe_constant_var_p (decl))
6533 	    TREE_CONSTANT (decl) = 1;
6534 	}
6535     }
6536 
6537   if (processing_template_decl)
6538     {
6539       bool type_dependent_p;
6540 
6541       /* Add this declaration to the statement-tree.  */
6542       if (at_function_scope_p ())
6543 	add_decl_expr (decl);
6544 
6545       type_dependent_p = dependent_type_p (type);
6546 
6547       if (check_for_bare_parameter_packs (init))
6548 	{
6549 	  init = NULL_TREE;
6550 	  DECL_INITIAL (decl) = NULL_TREE;
6551 	}
6552 
6553       /* Generally, initializers in templates are expanded when the
6554 	 template is instantiated.  But, if DECL is a variable constant
6555 	 then it can be used in future constant expressions, so its value
6556 	 must be available. */
6557 
6558       if (!VAR_P (decl) || dependent_type_p (type))
6559 	/* We can't do anything if the decl has dependent type.  */;
6560       else if (init
6561 	       && init_const_expr_p
6562 	       && !type_dependent_p
6563 	       && TREE_CODE (type) != REFERENCE_TYPE
6564 	       && decl_maybe_constant_var_p (decl)
6565 	       && !type_dependent_init_p (init)
6566 	       && !value_dependent_init_p (init))
6567 	{
6568 	  /* This variable seems to be a non-dependent constant, so process
6569 	     its initializer.  If check_initializer returns non-null the
6570 	     initialization wasn't constant after all.  */
6571 	  tree init_code;
6572 	  cleanups = make_tree_vector ();
6573 	  init_code = check_initializer (decl, init, flags, &cleanups);
6574 	  if (init_code == NULL_TREE)
6575 	    init = NULL_TREE;
6576 	  release_tree_vector (cleanups);
6577 	}
6578       else if (!DECL_PRETTY_FUNCTION_P (decl))
6579 	{
6580 	  /* Deduce array size even if the initializer is dependent.  */
6581 	  maybe_deduce_size_from_array_init (decl, init);
6582 	  /* And complain about multiple initializers.  */
6583 	  if (init && TREE_CODE (init) == TREE_LIST && TREE_CHAIN (init)
6584 	      && !MAYBE_CLASS_TYPE_P (type))
6585 	    init = build_x_compound_expr_from_list (init, ELK_INIT,
6586 						    tf_warning_or_error);
6587 	}
6588 
6589       if (init)
6590 	DECL_INITIAL (decl) = init;
6591       return;
6592     }
6593 
6594   /* Just store non-static data member initializers for later.  */
6595   if (init && TREE_CODE (decl) == FIELD_DECL)
6596     DECL_INITIAL (decl) = init;
6597 
6598   /* Take care of TYPE_DECLs up front.  */
6599   if (TREE_CODE (decl) == TYPE_DECL)
6600     {
6601       if (type != error_mark_node
6602 	  && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
6603 	{
6604 	  if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
6605 	    warning (0, "shadowing previous type declaration of %q#D", decl);
6606 	  set_identifier_type_value (DECL_NAME (decl), decl);
6607 	}
6608 
6609       /* If we have installed this as the canonical typedef for this
6610 	 type, and that type has not been defined yet, delay emitting
6611 	 the debug information for it, as we will emit it later.  */
6612       if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
6613 	  && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
6614 	TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6615 
6616       rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl),
6617 				at_eof);
6618       return;
6619     }
6620 
6621   /* A reference will be modified here, as it is initialized.  */
6622   if (! DECL_EXTERNAL (decl)
6623       && TREE_READONLY (decl)
6624       && TREE_CODE (type) == REFERENCE_TYPE)
6625     {
6626       was_readonly = 1;
6627       TREE_READONLY (decl) = 0;
6628     }
6629 
6630   if (VAR_P (decl))
6631     {
6632       /* If this is a local variable that will need a mangled name,
6633 	 register it now.  We must do this before processing the
6634 	 initializer for the variable, since the initialization might
6635 	 require a guard variable, and since the mangled name of the
6636 	 guard variable will depend on the mangled name of this
6637 	 variable.  */
6638       if (DECL_FUNCTION_SCOPE_P (decl)
6639 	  && TREE_STATIC (decl)
6640 	  && !DECL_ARTIFICIAL (decl))
6641 	{
6642 	  push_local_name (decl);
6643 	  if (DECL_CONSTRUCTOR_P (current_function_decl)
6644 	      || DECL_DESTRUCTOR_P (current_function_decl))
6645 	    /* Normally local_decls is populated during GIMPLE lowering,
6646 	       but [cd]tors are never actually compiled directly.  We need
6647 	       to put statics on the list so we can deal with the label
6648 	       address extension.  FIXME.  */
6649 	    add_local_decl (cfun, decl);
6650 	}
6651 
6652       /* Convert the initializer to the type of DECL, if we have not
6653 	 already initialized DECL.  */
6654       if (!DECL_INITIALIZED_P (decl)
6655 	  /* If !DECL_EXTERNAL then DECL is being defined.  In the
6656 	     case of a static data member initialized inside the
6657 	     class-specifier, there can be an initializer even if DECL
6658 	     is *not* defined.  */
6659 	  && (!DECL_EXTERNAL (decl) || init))
6660 	{
6661 	  if (TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
6662 	    {
6663 	      tree jclass
6664 		= IDENTIFIER_GLOBAL_VALUE (get_identifier ("jclass"));
6665 	      /* Allow libjava/prims.cc define primitive classes.  */
6666 	      if (init != NULL_TREE
6667 		  || jclass == NULL_TREE
6668 		  || TREE_CODE (jclass) != TYPE_DECL
6669 		  || !POINTER_TYPE_P (TREE_TYPE (jclass))
6670 		  || !same_type_ignoring_top_level_qualifiers_p
6671 					(type, TREE_TYPE (TREE_TYPE (jclass))))
6672 		error ("Java object %qD not allocated with %<new%>", decl);
6673 	      init = NULL_TREE;
6674 	    }
6675 	  cleanups = make_tree_vector ();
6676 	  init = check_initializer (decl, init, flags, &cleanups);
6677 
6678 	  /* Handle:
6679 
6680 	     [dcl.init]
6681 
6682 	     The memory occupied by any object of static storage
6683 	     duration is zero-initialized at program startup before
6684 	     any other initialization takes place.
6685 
6686 	     We cannot create an appropriate initializer until after
6687 	     the type of DECL is finalized.  If DECL_INITIAL is set,
6688 	     then the DECL is statically initialized, and any
6689 	     necessary zero-initialization has already been performed.  */
6690 	  if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
6691 	    DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
6692 						   /*nelts=*/NULL_TREE,
6693 						   /*static_storage_p=*/true);
6694 	  /* Remember that the initialization for this variable has
6695 	     taken place.  */
6696 	  DECL_INITIALIZED_P (decl) = 1;
6697 	  /* This declaration is the definition of this variable,
6698 	     unless we are initializing a static data member within
6699 	     the class specifier.  */
6700 	  if (!DECL_EXTERNAL (decl))
6701 	    var_definition_p = true;
6702 	}
6703       /* If the variable has an array type, lay out the type, even if
6704 	 there is no initializer.  It is valid to index through the
6705 	 array, and we must get TYPE_ALIGN set correctly on the array
6706 	 type.  */
6707       else if (TREE_CODE (type) == ARRAY_TYPE)
6708 	layout_type (type);
6709 
6710       if (TREE_STATIC (decl)
6711 	  && !at_function_scope_p ()
6712 	  && current_function_decl == NULL)
6713 	/* So decl is a global variable or a static member of a
6714 	   non local class. Record the types it uses
6715 	   so that we can decide later to emit debug info for them.  */
6716 	record_types_used_by_current_var_decl (decl);
6717     }
6718   else if (TREE_CODE (decl) == FIELD_DECL
6719 	   && TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
6720     error ("non-static data member %qD has Java class type", decl);
6721 
6722   /* Add this declaration to the statement-tree.  This needs to happen
6723      after the call to check_initializer so that the DECL_EXPR for a
6724      reference temp is added before the DECL_EXPR for the reference itself.  */
6725   if (DECL_FUNCTION_SCOPE_P (decl))
6726     {
6727       /* If we're building a variable sized type, and we might be
6728 	 reachable other than via the top of the current binding
6729 	 level, then create a new BIND_EXPR so that we deallocate
6730 	 the object at the right time.  */
6731       if (VAR_P (decl)
6732 	  && DECL_SIZE (decl)
6733 	  && !TREE_CONSTANT (DECL_SIZE (decl))
6734 	  && STATEMENT_LIST_HAS_LABEL (cur_stmt_list))
6735 	{
6736 	  tree bind;
6737 	  bind = build3 (BIND_EXPR, void_type_node, NULL, NULL, NULL);
6738 	  TREE_SIDE_EFFECTS (bind) = 1;
6739 	  add_stmt (bind);
6740 	  BIND_EXPR_BODY (bind) = push_stmt_list ();
6741 	}
6742       add_decl_expr (decl);
6743     }
6744 
6745   /* Let the middle end know about variables and functions -- but not
6746      static data members in uninstantiated class templates.  */
6747   if (VAR_OR_FUNCTION_DECL_P (decl))
6748     {
6749       if (VAR_P (decl))
6750 	{
6751 	  layout_var_decl (decl);
6752 	  maybe_commonize_var (decl);
6753 	}
6754 
6755       /* This needs to happen after the linkage is set. */
6756       determine_visibility (decl);
6757 
6758       if (var_definition_p && TREE_STATIC (decl))
6759 	{
6760 	  /* If a TREE_READONLY variable needs initialization
6761 	     at runtime, it is no longer readonly and we need to
6762 	     avoid MEM_READONLY_P being set on RTL created for it.  */
6763 	  if (init)
6764 	    {
6765 	      if (TREE_READONLY (decl))
6766 		TREE_READONLY (decl) = 0;
6767 	      was_readonly = 0;
6768 	    }
6769 	  else if (was_readonly)
6770 	    TREE_READONLY (decl) = 1;
6771 
6772 	  /* Likewise if it needs destruction.  */
6773 	  if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
6774 	    TREE_READONLY (decl) = 0;
6775 	}
6776 
6777       make_rtl_for_nonlocal_decl (decl, init, asmspec);
6778 
6779       /* Check for abstractness of the type. Notice that there is no
6780 	 need to strip array types here since the check for those types
6781 	 is already done within create_array_type_for_decl.  */
6782       abstract_virtuals_error (decl, type);
6783 
6784       if (TREE_TYPE (decl) == error_mark_node)
6785 	/* No initialization required.  */
6786 	;
6787       else if (TREE_CODE (decl) == FUNCTION_DECL)
6788 	{
6789 	  if (init)
6790 	    {
6791 	      if (init == ridpointers[(int)RID_DEFAULT])
6792 		{
6793 		  /* An out-of-class default definition is defined at
6794 		     the point where it is explicitly defaulted.  */
6795 		  if (DECL_DELETED_FN (decl))
6796 		    maybe_explain_implicit_delete (decl);
6797 		  else if (DECL_INITIAL (decl) == error_mark_node)
6798 		    synthesize_method (decl);
6799 		}
6800 	      else
6801 		error ("function %q#D is initialized like a variable", decl);
6802 	    }
6803 	  /* else no initialization required.  */
6804 	}
6805       else if (DECL_EXTERNAL (decl)
6806 	       && ! (DECL_LANG_SPECIFIC (decl)
6807 		     && DECL_NOT_REALLY_EXTERN (decl)))
6808 	{
6809 	  if (init)
6810 	    DECL_INITIAL (decl) = init;
6811 	}
6812       /* A variable definition.  */
6813       else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
6814 	/* Initialize the local variable.  */
6815 	initialize_local_var (decl, init);
6816 
6817       /* If a variable is defined, and then a subsequent
6818 	 definition with external linkage is encountered, we will
6819 	 get here twice for the same variable.  We want to avoid
6820 	 calling expand_static_init more than once.  For variables
6821 	 that are not static data members, we can call
6822 	 expand_static_init only when we actually process the
6823 	 initializer.  It is not legal to redeclare a static data
6824 	 member, so this issue does not arise in that case.  */
6825       else if (var_definition_p && TREE_STATIC (decl))
6826 	expand_static_init (decl, init);
6827     }
6828 
6829   /* If a CLEANUP_STMT was created to destroy a temporary bound to a
6830      reference, insert it in the statement-tree now.  */
6831   if (cleanups)
6832     {
6833       unsigned i; tree t;
6834       FOR_EACH_VEC_ELT (*cleanups, i, t)
6835 	push_cleanup (decl, t, false);
6836       release_tree_vector (cleanups);
6837     }
6838 
6839   if (was_readonly)
6840     TREE_READONLY (decl) = 1;
6841 
6842   invoke_plugin_callbacks (PLUGIN_FINISH_DECL, decl);
6843 }
6844 
6845 /* Returns a declaration for a VAR_DECL as if:
6846 
6847      extern "C" TYPE NAME;
6848 
6849    had been seen.  Used to create compiler-generated global
6850    variables.  */
6851 
6852 static tree
6853 declare_global_var (tree name, tree type)
6854 {
6855   tree decl;
6856 
6857   push_to_top_level ();
6858   decl = build_decl (input_location, VAR_DECL, name, type);
6859   TREE_PUBLIC (decl) = 1;
6860   DECL_EXTERNAL (decl) = 1;
6861   DECL_ARTIFICIAL (decl) = 1;
6862   /* If the user has explicitly declared this variable (perhaps
6863      because the code we are compiling is part of a low-level runtime
6864      library), then it is possible that our declaration will be merged
6865      with theirs by pushdecl.  */
6866   decl = pushdecl (decl);
6867   cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0);
6868   pop_from_top_level ();
6869 
6870   return decl;
6871 }
6872 
6873 /* Returns the type for the argument to "__cxa_atexit" (or "atexit",
6874    if "__cxa_atexit" is not being used) corresponding to the function
6875    to be called when the program exits.  */
6876 
6877 static tree
6878 get_atexit_fn_ptr_type (void)
6879 {
6880   tree fn_type;
6881 
6882   if (!atexit_fn_ptr_type_node)
6883     {
6884       tree arg_type;
6885       if (flag_use_cxa_atexit
6886 	  && !targetm.cxx.use_atexit_for_cxa_atexit ())
6887 	/* The parameter to "__cxa_atexit" is "void (*)(void *)".  */
6888 	arg_type = ptr_type_node;
6889       else
6890 	/* The parameter to "atexit" is "void (*)(void)".  */
6891 	arg_type = NULL_TREE;
6892 
6893       fn_type = build_function_type_list (void_type_node,
6894 					  arg_type, NULL_TREE);
6895       atexit_fn_ptr_type_node = build_pointer_type (fn_type);
6896     }
6897 
6898   return atexit_fn_ptr_type_node;
6899 }
6900 
6901 /* Returns a pointer to the `atexit' function.  Note that if
6902    FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
6903    `__cxa_atexit' function specified in the IA64 C++ ABI.  */
6904 
6905 static tree
6906 get_atexit_node (void)
6907 {
6908   tree atexit_fndecl;
6909   tree fn_type;
6910   tree fn_ptr_type;
6911   const char *name;
6912   bool use_aeabi_atexit;
6913 
6914   if (atexit_node)
6915     return atexit_node;
6916 
6917   if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
6918     {
6919       /* The declaration for `__cxa_atexit' is:
6920 
6921 	   int __cxa_atexit (void (*)(void *), void *, void *)
6922 
6923 	 We build up the argument types and then the function type
6924 	 itself.  */
6925       tree argtype0, argtype1, argtype2;
6926 
6927       use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
6928       /* First, build the pointer-to-function type for the first
6929 	 argument.  */
6930       fn_ptr_type = get_atexit_fn_ptr_type ();
6931       /* Then, build the rest of the argument types.  */
6932       argtype2 = ptr_type_node;
6933       if (use_aeabi_atexit)
6934 	{
6935 	  argtype1 = fn_ptr_type;
6936 	  argtype0 = ptr_type_node;
6937 	}
6938       else
6939 	{
6940 	  argtype1 = ptr_type_node;
6941 	  argtype0 = fn_ptr_type;
6942 	}
6943       /* And the final __cxa_atexit type.  */
6944       fn_type = build_function_type_list (integer_type_node,
6945 					  argtype0, argtype1, argtype2,
6946 					  NULL_TREE);
6947       if (use_aeabi_atexit)
6948 	name = "__aeabi_atexit";
6949       else
6950 	name = "__cxa_atexit";
6951     }
6952   else
6953     {
6954       /* The declaration for `atexit' is:
6955 
6956 	   int atexit (void (*)());
6957 
6958 	 We build up the argument types and then the function type
6959 	 itself.  */
6960       fn_ptr_type = get_atexit_fn_ptr_type ();
6961       /* Build the final atexit type.  */
6962       fn_type = build_function_type_list (integer_type_node,
6963 					  fn_ptr_type, NULL_TREE);
6964       name = "atexit";
6965     }
6966 
6967   /* Now, build the function declaration.  */
6968   push_lang_context (lang_name_c);
6969   atexit_fndecl = build_library_fn_ptr (name, fn_type, ECF_LEAF | ECF_NOTHROW);
6970   mark_used (atexit_fndecl);
6971   pop_lang_context ();
6972   atexit_node = decay_conversion (atexit_fndecl, tf_warning_or_error);
6973 
6974   return atexit_node;
6975 }
6976 
6977 /* Like get_atexit_node, but for thread-local cleanups.  */
6978 
6979 static tree
6980 get_thread_atexit_node (void)
6981 {
6982   /* The declaration for `__cxa_thread_atexit' is:
6983 
6984      int __cxa_thread_atexit (void (*)(void *), void *, void *) */
6985   tree fn_type = build_function_type_list (integer_type_node,
6986 					   get_atexit_fn_ptr_type (),
6987 					   ptr_type_node, ptr_type_node,
6988 					   NULL_TREE);
6989 
6990   /* Now, build the function declaration.  */
6991   tree atexit_fndecl = build_library_fn_ptr ("__cxa_thread_atexit", fn_type,
6992 					     ECF_LEAF | ECF_NOTHROW);
6993   return decay_conversion (atexit_fndecl, tf_warning_or_error);
6994 }
6995 
6996 /* Returns the __dso_handle VAR_DECL.  */
6997 
6998 static tree
6999 get_dso_handle_node (void)
7000 {
7001   if (dso_handle_node)
7002     return dso_handle_node;
7003 
7004   /* Declare the variable.  */
7005   dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
7006 					ptr_type_node);
7007 
7008 #ifdef HAVE_GAS_HIDDEN
7009   if (dso_handle_node != error_mark_node)
7010     {
7011       DECL_VISIBILITY (dso_handle_node) = VISIBILITY_HIDDEN;
7012       DECL_VISIBILITY_SPECIFIED (dso_handle_node) = 1;
7013     }
7014 #endif
7015 
7016   return dso_handle_node;
7017 }
7018 
7019 /* Begin a new function with internal linkage whose job will be simply
7020    to destroy some particular variable.  */
7021 
7022 static GTY(()) int start_cleanup_cnt;
7023 
7024 static tree
7025 start_cleanup_fn (void)
7026 {
7027   char name[32];
7028   tree fntype;
7029   tree fndecl;
7030   bool use_cxa_atexit = flag_use_cxa_atexit
7031 			&& !targetm.cxx.use_atexit_for_cxa_atexit ();
7032 
7033   push_to_top_level ();
7034 
7035   /* No need to mangle this.  */
7036   push_lang_context (lang_name_c);
7037 
7038   /* Build the name of the function.  */
7039   sprintf (name, "__tcf_%d", start_cleanup_cnt++);
7040   /* Build the function declaration.  */
7041   fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
7042   fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
7043   /* It's a function with internal linkage, generated by the
7044      compiler.  */
7045   TREE_PUBLIC (fndecl) = 0;
7046   DECL_ARTIFICIAL (fndecl) = 1;
7047   /* Make the function `inline' so that it is only emitted if it is
7048      actually needed.  It is unlikely that it will be inlined, since
7049      it is only called via a function pointer, but we avoid unnecessary
7050      emissions this way.  */
7051   DECL_DECLARED_INLINE_P (fndecl) = 1;
7052   DECL_INTERFACE_KNOWN (fndecl) = 1;
7053   /* Build the parameter.  */
7054   if (use_cxa_atexit)
7055     {
7056       tree parmdecl;
7057 
7058       parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
7059       DECL_CONTEXT (parmdecl) = fndecl;
7060       TREE_USED (parmdecl) = 1;
7061       DECL_READ_P (parmdecl) = 1;
7062       DECL_ARGUMENTS (fndecl) = parmdecl;
7063     }
7064 
7065   pushdecl (fndecl);
7066   start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
7067 
7068   pop_lang_context ();
7069 
7070   return current_function_decl;
7071 }
7072 
7073 /* Finish the cleanup function begun by start_cleanup_fn.  */
7074 
7075 static void
7076 end_cleanup_fn (void)
7077 {
7078   expand_or_defer_fn (finish_function (0));
7079 
7080   pop_from_top_level ();
7081 }
7082 
7083 /* Generate code to handle the destruction of DECL, an object with
7084    static storage duration.  */
7085 
7086 tree
7087 register_dtor_fn (tree decl)
7088 {
7089   tree cleanup;
7090   tree addr;
7091   tree compound_stmt;
7092   tree fcall;
7093   tree type;
7094   bool ob_parm, dso_parm, use_dtor;
7095   tree arg0, arg1, arg2;
7096   tree atex_node;
7097 
7098   type = TREE_TYPE (decl);
7099   if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
7100     return void_node;
7101 
7102   /* If we're using "__cxa_atexit" (or "__cxa_thread_atexit" or
7103      "__aeabi_atexit"), and DECL is a class object, we can just pass the
7104      destructor to "__cxa_atexit"; we don't have to build a temporary
7105      function to do the cleanup.  */
7106   dso_parm = (flag_use_cxa_atexit
7107 	      && !targetm.cxx.use_atexit_for_cxa_atexit ());
7108   ob_parm = (DECL_THREAD_LOCAL_P (decl) || dso_parm);
7109   use_dtor = ob_parm && CLASS_TYPE_P (type);
7110   if (use_dtor)
7111     {
7112       int idx;
7113 
7114       /* Find the destructor.  */
7115       idx = lookup_fnfields_1 (type, complete_dtor_identifier);
7116       gcc_assert (idx >= 0);
7117       cleanup = (*CLASSTYPE_METHOD_VEC (type))[idx];
7118       /* Make sure it is accessible.  */
7119       perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup,
7120 				     tf_warning_or_error);
7121     }
7122   else
7123     {
7124       /* Call build_cleanup before we enter the anonymous function so
7125 	 that any access checks will be done relative to the current
7126 	 scope, rather than the scope of the anonymous function.  */
7127       build_cleanup (decl);
7128 
7129       /* Now start the function.  */
7130       cleanup = start_cleanup_fn ();
7131 
7132       /* Now, recompute the cleanup.  It may contain SAVE_EXPRs that refer
7133 	 to the original function, rather than the anonymous one.  That
7134 	 will make the back end think that nested functions are in use,
7135 	 which causes confusion.  */
7136       push_deferring_access_checks (dk_no_check);
7137       fcall = build_cleanup (decl);
7138       pop_deferring_access_checks ();
7139 
7140       /* Create the body of the anonymous function.  */
7141       compound_stmt = begin_compound_stmt (BCS_FN_BODY);
7142       finish_expr_stmt (fcall);
7143       finish_compound_stmt (compound_stmt);
7144       end_cleanup_fn ();
7145     }
7146 
7147   /* Call atexit with the cleanup function.  */
7148   mark_used (cleanup);
7149   cleanup = build_address (cleanup);
7150 
7151   if (DECL_THREAD_LOCAL_P (decl))
7152     atex_node = get_thread_atexit_node ();
7153   else
7154     atex_node = get_atexit_node ();
7155 
7156   if (use_dtor)
7157     {
7158       /* We must convert CLEANUP to the type that "__cxa_atexit"
7159 	 expects.  */
7160       cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
7161       /* "__cxa_atexit" will pass the address of DECL to the
7162 	 cleanup function.  */
7163       mark_used (decl);
7164       addr = build_address (decl);
7165       /* The declared type of the parameter to "__cxa_atexit" is
7166 	 "void *".  For plain "T*", we could just let the
7167 	 machinery in cp_build_function_call convert it -- but if the
7168 	 type is "cv-qualified T *", then we need to convert it
7169 	 before passing it in, to avoid spurious errors.  */
7170       addr = build_nop (ptr_type_node, addr);
7171     }
7172   else
7173     /* Since the cleanup functions we build ignore the address
7174        they're given, there's no reason to pass the actual address
7175        in, and, in general, it's cheaper to pass NULL than any
7176        other value.  */
7177     addr = null_pointer_node;
7178 
7179   if (dso_parm)
7180     arg2 = cp_build_addr_expr (get_dso_handle_node (),
7181 			       tf_warning_or_error);
7182   else if (ob_parm)
7183     /* Just pass NULL to the dso handle parm if we don't actually
7184        have a DSO handle on this target.  */
7185     arg2 = null_pointer_node;
7186   else
7187     arg2 = NULL_TREE;
7188 
7189   if (ob_parm)
7190     {
7191       if (!DECL_THREAD_LOCAL_P (decl)
7192 	  && targetm.cxx.use_aeabi_atexit ())
7193 	{
7194 	  arg1 = cleanup;
7195 	  arg0 = addr;
7196 	}
7197       else
7198 	{
7199 	  arg1 = addr;
7200 	  arg0 = cleanup;
7201 	}
7202     }
7203   else
7204     {
7205       arg0 = cleanup;
7206       arg1 = NULL_TREE;
7207     }
7208   return cp_build_function_call_nary (atex_node, tf_warning_or_error,
7209 				      arg0, arg1, arg2, NULL_TREE);
7210 }
7211 
7212 /* DECL is a VAR_DECL with static storage duration.  INIT, if present,
7213    is its initializer.  Generate code to handle the construction
7214    and destruction of DECL.  */
7215 
7216 static void
7217 expand_static_init (tree decl, tree init)
7218 {
7219   gcc_assert (VAR_P (decl));
7220   gcc_assert (TREE_STATIC (decl));
7221 
7222   /* Some variables require no dynamic initialization.  */
7223   if (!init
7224       && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
7225     {
7226       /* Make sure the destructor is callable.  */
7227       cxx_maybe_build_cleanup (decl, tf_warning_or_error);
7228       return;
7229     }
7230 
7231   if (DECL_THREAD_LOCAL_P (decl) && DECL_GNU_TLS_P (decl)
7232       && !DECL_FUNCTION_SCOPE_P (decl))
7233     {
7234       if (init)
7235 	error ("non-local variable %qD declared %<__thread%> "
7236 	       "needs dynamic initialization", decl);
7237       else
7238 	error ("non-local variable %qD declared %<__thread%> "
7239 	       "has a non-trivial destructor", decl);
7240       static bool informed;
7241       if (!informed)
7242 	{
7243 	  inform (DECL_SOURCE_LOCATION (decl),
7244 		  "C++11 %<thread_local%> allows dynamic initialization "
7245 		  "and destruction");
7246 	  informed = true;
7247 	}
7248       return;
7249     }
7250 
7251   if (DECL_FUNCTION_SCOPE_P (decl))
7252     {
7253       /* Emit code to perform this initialization but once.  */
7254       tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
7255       tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
7256       tree guard, guard_addr;
7257       tree flag, begin;
7258       /* We don't need thread-safety code for thread-local vars.  */
7259       bool thread_guard = (flag_threadsafe_statics
7260 			   && !DECL_THREAD_LOCAL_P (decl));
7261 
7262       /* Emit code to perform this initialization but once.  This code
7263 	 looks like:
7264 
7265 	   static <type> guard;
7266 	   if (!guard.first_byte) {
7267 	     if (__cxa_guard_acquire (&guard)) {
7268 	       bool flag = false;
7269 	       try {
7270 		 // Do initialization.
7271 		 flag = true; __cxa_guard_release (&guard);
7272 		 // Register variable for destruction at end of program.
7273 	       } catch {
7274 		 if (!flag) __cxa_guard_abort (&guard);
7275 	       }
7276 	   }
7277 
7278 	 Note that the `flag' variable is only set to 1 *after* the
7279 	 initialization is complete.  This ensures that an exception,
7280 	 thrown during the construction, will cause the variable to
7281 	 reinitialized when we pass through this code again, as per:
7282 
7283 	   [stmt.dcl]
7284 
7285 	   If the initialization exits by throwing an exception, the
7286 	   initialization is not complete, so it will be tried again
7287 	   the next time control enters the declaration.
7288 
7289 	 This process should be thread-safe, too; multiple threads
7290 	 should not be able to initialize the variable more than
7291 	 once.  */
7292 
7293       /* Create the guard variable.  */
7294       guard = get_guard (decl);
7295 
7296       /* This optimization isn't safe on targets with relaxed memory
7297 	 consistency.  On such targets we force synchronization in
7298 	 __cxa_guard_acquire.  */
7299       if (!targetm.relaxed_ordering || !thread_guard)
7300 	{
7301 	  /* Begin the conditional initialization.  */
7302 	  if_stmt = begin_if_stmt ();
7303 	  finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
7304 	  then_clause = begin_compound_stmt (BCS_NO_SCOPE);
7305 	}
7306 
7307       if (thread_guard)
7308 	{
7309 	  tree vfntype = NULL_TREE;
7310 	  tree acquire_name, release_name, abort_name;
7311 	  tree acquire_fn, release_fn, abort_fn;
7312 	  guard_addr = build_address (guard);
7313 
7314 	  acquire_name = get_identifier ("__cxa_guard_acquire");
7315 	  release_name = get_identifier ("__cxa_guard_release");
7316 	  abort_name = get_identifier ("__cxa_guard_abort");
7317 	  acquire_fn = identifier_global_value (acquire_name);
7318 	  release_fn = identifier_global_value (release_name);
7319 	  abort_fn = identifier_global_value (abort_name);
7320 	  if (!acquire_fn)
7321 	    acquire_fn = push_library_fn
7322 	      (acquire_name, build_function_type_list (integer_type_node,
7323 						       TREE_TYPE (guard_addr),
7324 						       NULL_TREE),
7325 	       NULL_TREE, ECF_NOTHROW | ECF_LEAF);
7326 	  if (!release_fn || !abort_fn)
7327 	    vfntype = build_function_type_list (void_type_node,
7328 						TREE_TYPE (guard_addr),
7329 						NULL_TREE);
7330 	  if (!release_fn)
7331 	    release_fn = push_library_fn (release_name, vfntype, NULL_TREE,
7332 					   ECF_NOTHROW | ECF_LEAF);
7333 	  if (!abort_fn)
7334 	    abort_fn = push_library_fn (abort_name, vfntype, NULL_TREE,
7335 					ECF_NOTHROW | ECF_LEAF);
7336 
7337 	  inner_if_stmt = begin_if_stmt ();
7338 	  finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
7339 			       inner_if_stmt);
7340 
7341 	  inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
7342 	  begin = get_target_expr (boolean_false_node);
7343 	  flag = TARGET_EXPR_SLOT (begin);
7344 
7345 	  TARGET_EXPR_CLEANUP (begin)
7346 	    = build3 (COND_EXPR, void_type_node, flag,
7347 		      void_node,
7348 		      build_call_n (abort_fn, 1, guard_addr));
7349 	  CLEANUP_EH_ONLY (begin) = 1;
7350 
7351 	  /* Do the initialization itself.  */
7352 	  init = add_stmt_to_compound (begin, init);
7353 	  init = add_stmt_to_compound
7354 	    (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
7355 	  init = add_stmt_to_compound
7356 	    (init, build_call_n (release_fn, 1, guard_addr));
7357 	}
7358       else
7359 	init = add_stmt_to_compound (init, set_guard (guard));
7360 
7361       /* Use atexit to register a function for destroying this static
7362 	 variable.  */
7363       init = add_stmt_to_compound (init, register_dtor_fn (decl));
7364 
7365       finish_expr_stmt (init);
7366 
7367       if (thread_guard)
7368 	{
7369 	  finish_compound_stmt (inner_then_clause);
7370 	  finish_then_clause (inner_if_stmt);
7371 	  finish_if_stmt (inner_if_stmt);
7372 	}
7373 
7374       if (!targetm.relaxed_ordering || !thread_guard)
7375 	{
7376 	  finish_compound_stmt (then_clause);
7377 	  finish_then_clause (if_stmt);
7378 	  finish_if_stmt (if_stmt);
7379 	}
7380     }
7381   else if (DECL_THREAD_LOCAL_P (decl))
7382     tls_aggregates = tree_cons (init, decl, tls_aggregates);
7383   else
7384     static_aggregates = tree_cons (init, decl, static_aggregates);
7385 }
7386 
7387 
7388 /* Make TYPE a complete type based on INITIAL_VALUE.
7389    Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
7390    2 if there was no information (in which case assume 0 if DO_DEFAULT),
7391    3 if the initializer list is empty (in pedantic mode). */
7392 
7393 int
7394 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
7395 {
7396   int failure;
7397   tree type, elt_type;
7398 
7399   /* Don't get confused by a CONSTRUCTOR for some other type.  */
7400   if (initial_value && TREE_CODE (initial_value) == CONSTRUCTOR
7401       && !BRACE_ENCLOSED_INITIALIZER_P (initial_value)
7402       && TREE_CODE (TREE_TYPE (initial_value)) != ARRAY_TYPE)
7403     return 1;
7404 
7405   if (initial_value)
7406     {
7407       unsigned HOST_WIDE_INT i;
7408       tree value;
7409 
7410       /* An array of character type can be initialized from a
7411 	 brace-enclosed string constant.
7412 
7413 	 FIXME: this code is duplicated from reshape_init. Probably
7414 	 we should just call reshape_init here?  */
7415       if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
7416 	  && TREE_CODE (initial_value) == CONSTRUCTOR
7417 	  && !vec_safe_is_empty (CONSTRUCTOR_ELTS (initial_value)))
7418 	{
7419 	  vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initial_value);
7420 	  tree value = (*v)[0].value;
7421 
7422 	  if (TREE_CODE (value) == STRING_CST
7423 	      && v->length () == 1)
7424 	    initial_value = value;
7425 	}
7426 
7427       /* If any of the elements are parameter packs, we can't actually
7428 	 complete this type now because the array size is dependent.  */
7429       if (TREE_CODE (initial_value) == CONSTRUCTOR)
7430 	{
7431 	  FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value),
7432 				      i, value)
7433 	    {
7434 	      if (PACK_EXPANSION_P (value))
7435 		return 0;
7436 	    }
7437 	}
7438     }
7439 
7440   failure = complete_array_type (ptype, initial_value, do_default);
7441 
7442   /* We can create the array before the element type is complete, which
7443      means that we didn't have these two bits set in the original type
7444      either.  In completing the type, we are expected to propagate these
7445      bits.  See also complete_type which does the same thing for arrays
7446      of fixed size.  */
7447   type = *ptype;
7448   if (TYPE_DOMAIN (type))
7449     {
7450       elt_type = TREE_TYPE (type);
7451       TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
7452       TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
7453 	= TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
7454     }
7455 
7456   return failure;
7457 }
7458 
7459 /* As above, but either give an error or reject zero-size arrays, depending
7460    on COMPLAIN.  */
7461 
7462 int
7463 cp_complete_array_type_or_error (tree *ptype, tree initial_value,
7464 				 bool do_default, tsubst_flags_t complain)
7465 {
7466   int failure;
7467   bool sfinae = !(complain & tf_error);
7468   /* In SFINAE context we can't be lenient about zero-size arrays.  */
7469   if (sfinae)
7470     ++pedantic;
7471   failure = cp_complete_array_type (ptype, initial_value, do_default);
7472   if (sfinae)
7473     --pedantic;
7474   if (failure)
7475     {
7476       if (sfinae)
7477 	/* Not an error.  */;
7478       else if (failure == 1)
7479 	error ("initializer fails to determine size of %qT", *ptype);
7480       else if (failure == 2)
7481 	{
7482 	  if (do_default)
7483 	    error ("array size missing in %qT", *ptype);
7484 	}
7485       else if (failure == 3)
7486 	error ("zero-size array %qT", *ptype);
7487       *ptype = error_mark_node;
7488     }
7489   return failure;
7490 }
7491 
7492 /* Return zero if something is declared to be a member of type
7493    CTYPE when in the context of CUR_TYPE.  STRING is the error
7494    message to print in that case.  Otherwise, quietly return 1.  */
7495 
7496 static int
7497 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
7498 {
7499   if (ctype && ctype != cur_type)
7500     {
7501       if (flags == DTOR_FLAG)
7502 	error ("destructor for alien class %qT cannot be a member", ctype);
7503       else
7504 	error ("constructor for alien class %qT cannot be a member", ctype);
7505       return 0;
7506     }
7507   return 1;
7508 }
7509 
7510 /* Subroutine of `grokdeclarator'.  */
7511 
7512 /* Generate errors possibly applicable for a given set of specifiers.
7513    This is for ARM $7.1.2.  */
7514 
7515 static void
7516 bad_specifiers (tree object,
7517 		enum bad_spec_place type,
7518 		int virtualp,
7519 		int quals,
7520 		int inlinep,
7521 		int friendp,
7522 		int raises)
7523 {
7524   switch (type)
7525     {
7526       case BSP_VAR:
7527 	if (virtualp)
7528 	  error ("%qD declared as a %<virtual%> variable", object);
7529 	if (inlinep)
7530 	  error ("%qD declared as an %<inline%> variable", object);
7531 	if (quals)
7532 	  error ("%<const%> and %<volatile%> function specifiers on "
7533 	         "%qD invalid in variable declaration", object);
7534 	break;
7535       case BSP_PARM:
7536 	if (virtualp)
7537 	  error ("%qD declared as a %<virtual%> parameter", object);
7538 	if (inlinep)
7539 	  error ("%qD declared as an %<inline%> parameter", object);
7540 	if (quals)
7541 	  error ("%<const%> and %<volatile%> function specifiers on "
7542 	  	 "%qD invalid in parameter declaration", object);
7543 	break;
7544       case BSP_TYPE:
7545 	if (virtualp)
7546 	  error ("%qD declared as a %<virtual%> type", object);
7547 	if (inlinep)
7548 	  error ("%qD declared as an %<inline%> type", object);
7549 	if (quals)
7550 	  error ("%<const%> and %<volatile%> function specifiers on "
7551 	  	 "%qD invalid in type declaration", object);
7552 	break;
7553       case BSP_FIELD:
7554 	if (virtualp)
7555 	  error ("%qD declared as a %<virtual%> field", object);
7556 	if (inlinep)
7557 	  error ("%qD declared as an %<inline%> field", object);
7558 	if (quals)
7559 	  error ("%<const%> and %<volatile%> function specifiers on "
7560 	  	 "%qD invalid in field declaration", object);
7561 	break;
7562       default:
7563         gcc_unreachable();
7564     }
7565   if (friendp)
7566     error ("%q+D declared as a friend", object);
7567   if (raises
7568       && (TREE_CODE (object) == TYPE_DECL
7569 	  || (!TYPE_PTRFN_P (TREE_TYPE (object))
7570 	      && !TYPE_REFFN_P (TREE_TYPE (object))
7571 	      && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
7572     error ("%q+D declared with an exception specification", object);
7573 }
7574 
7575 /* DECL is a member function or static data member and is presently
7576    being defined.  Check that the definition is taking place in a
7577    valid namespace.  */
7578 
7579 static void
7580 check_class_member_definition_namespace (tree decl)
7581 {
7582   /* These checks only apply to member functions and static data
7583      members.  */
7584   gcc_assert (VAR_OR_FUNCTION_DECL_P (decl));
7585   /* We check for problems with specializations in pt.c in
7586      check_specialization_namespace, where we can issue better
7587      diagnostics.  */
7588   if (processing_specialization)
7589     return;
7590   /* There are no restrictions on the placement of
7591      explicit instantiations.  */
7592   if (processing_explicit_instantiation)
7593     return;
7594   /* [class.mfct]
7595 
7596      A member function definition that appears outside of the
7597      class definition shall appear in a namespace scope enclosing
7598      the class definition.
7599 
7600      [class.static.data]
7601 
7602      The definition for a static data member shall appear in a
7603      namespace scope enclosing the member's class definition.  */
7604   if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
7605     permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
7606 	       decl, DECL_CONTEXT (decl));
7607 }
7608 
7609 /* Build a PARM_DECL for the "this" parameter.  TYPE is the
7610    METHOD_TYPE for a non-static member function; QUALS are the
7611    cv-qualifiers that apply to the function.  */
7612 
7613 tree
7614 build_this_parm (tree type, cp_cv_quals quals)
7615 {
7616   tree this_type;
7617   tree qual_type;
7618   tree parm;
7619   cp_cv_quals this_quals;
7620 
7621   if (CLASS_TYPE_P (type))
7622     {
7623       this_type
7624 	= cp_build_qualified_type (type, quals & ~TYPE_QUAL_RESTRICT);
7625       this_type = build_pointer_type (this_type);
7626     }
7627   else
7628     this_type = type_of_this_parm (type);
7629   /* The `this' parameter is implicitly `const'; it cannot be
7630      assigned to.  */
7631   this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
7632   qual_type = cp_build_qualified_type (this_type, this_quals);
7633   parm = build_artificial_parm (this_identifier, qual_type);
7634   cp_apply_type_quals_to_decl (this_quals, parm);
7635   return parm;
7636 }
7637 
7638 /* DECL is a static member function.  Complain if it was declared
7639    with function-cv-quals.  */
7640 
7641 static void
7642 check_static_quals (tree decl, cp_cv_quals quals)
7643 {
7644   if (quals != TYPE_UNQUALIFIED)
7645     error ("static member function %q#D declared with type qualifiers",
7646 	   decl);
7647 }
7648 
7649 /* Helper function.  Replace the temporary this parameter injected
7650    during cp_finish_omp_declare_simd with the real this parameter.  */
7651 
7652 static tree
7653 declare_simd_adjust_this (tree *tp, int *walk_subtrees, void *data)
7654 {
7655   tree this_parm = (tree) data;
7656   if (TREE_CODE (*tp) == PARM_DECL
7657       && DECL_NAME (*tp) == this_identifier
7658       && *tp != this_parm)
7659     *tp = this_parm;
7660   else if (TYPE_P (*tp))
7661     *walk_subtrees = 0;
7662   return NULL_TREE;
7663 }
7664 
7665 /* CTYPE is class type, or null if non-class.
7666    TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
7667    or METHOD_TYPE.
7668    DECLARATOR is the function's name.
7669    PARMS is a chain of PARM_DECLs for the function.
7670    VIRTUALP is truthvalue of whether the function is virtual or not.
7671    FLAGS are to be passed through to `grokclassfn'.
7672    QUALS are qualifiers indicating whether the function is `const'
7673    or `volatile'.
7674    RAISES is a list of exceptions that this function can raise.
7675    CHECK is 1 if we must find this method in CTYPE, 0 if we should
7676    not look, and -1 if we should not call `grokclassfn' at all.
7677 
7678    SFK is the kind of special function (if any) for the new function.
7679 
7680    Returns `NULL_TREE' if something goes wrong, after issuing
7681    applicable error messages.  */
7682 
7683 static tree
7684 grokfndecl (tree ctype,
7685 	    tree type,
7686 	    tree declarator,
7687 	    tree parms,
7688 	    tree orig_declarator,
7689 	    int virtualp,
7690 	    enum overload_flags flags,
7691 	    cp_cv_quals quals,
7692 	    cp_ref_qualifier rqual,
7693 	    tree raises,
7694 	    int check,
7695 	    int friendp,
7696 	    int publicp,
7697 	    int inlinep,
7698 	    bool deletedp,
7699 	    special_function_kind sfk,
7700 	    bool funcdef_flag,
7701 	    int template_count,
7702 	    tree in_namespace,
7703 	    tree* attrlist,
7704 	    location_t location)
7705 {
7706   tree decl;
7707   int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
7708   tree t;
7709 
7710   if (rqual)
7711     type = build_ref_qualified_type (type, rqual);
7712   if (raises)
7713     type = build_exception_variant (type, raises);
7714 
7715   decl = build_lang_decl (FUNCTION_DECL, declarator, type);
7716 
7717   /* If we have an explicit location, use it, otherwise use whatever
7718      build_lang_decl used (probably input_location).  */
7719   if (location != UNKNOWN_LOCATION)
7720     DECL_SOURCE_LOCATION (decl) = location;
7721 
7722   if (TREE_CODE (type) == METHOD_TYPE)
7723     {
7724       tree parm;
7725       parm = build_this_parm (type, quals);
7726       DECL_CHAIN (parm) = parms;
7727       parms = parm;
7728     }
7729   DECL_ARGUMENTS (decl) = parms;
7730   for (t = parms; t; t = DECL_CHAIN (t))
7731     DECL_CONTEXT (t) = decl;
7732   /* Propagate volatile out from type to decl.  */
7733   if (TYPE_VOLATILE (type))
7734     TREE_THIS_VOLATILE (decl) = 1;
7735 
7736   /* Setup decl according to sfk.  */
7737   switch (sfk)
7738     {
7739     case sfk_constructor:
7740     case sfk_copy_constructor:
7741     case sfk_move_constructor:
7742       DECL_CONSTRUCTOR_P (decl) = 1;
7743       break;
7744     case sfk_destructor:
7745       DECL_DESTRUCTOR_P (decl) = 1;
7746       break;
7747     default:
7748       break;
7749     }
7750 
7751   /* If pointers to member functions use the least significant bit to
7752      indicate whether a function is virtual, ensure a pointer
7753      to this function will have that bit clear.  */
7754   if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
7755       && TREE_CODE (type) == METHOD_TYPE
7756       && DECL_ALIGN (decl) < 2 * BITS_PER_UNIT)
7757     DECL_ALIGN (decl) = 2 * BITS_PER_UNIT;
7758 
7759   if (friendp
7760       && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
7761     {
7762       if (funcdef_flag)
7763 	error
7764 	  ("defining explicit specialization %qD in friend declaration",
7765 	   orig_declarator);
7766       else
7767 	{
7768 	  tree fns = TREE_OPERAND (orig_declarator, 0);
7769 	  tree args = TREE_OPERAND (orig_declarator, 1);
7770 
7771 	  if (PROCESSING_REAL_TEMPLATE_DECL_P ())
7772 	    {
7773 	      /* Something like `template <class T> friend void f<T>()'.  */
7774 	      error ("invalid use of template-id %qD in declaration "
7775 		     "of primary template",
7776 		     orig_declarator);
7777 	      return NULL_TREE;
7778 	    }
7779 
7780 
7781 	  /* A friend declaration of the form friend void f<>().  Record
7782 	     the information in the TEMPLATE_ID_EXPR.  */
7783 	  SET_DECL_IMPLICIT_INSTANTIATION (decl);
7784 
7785 	  gcc_assert (identifier_p (fns) || TREE_CODE (fns) == OVERLOAD);
7786 	  DECL_TEMPLATE_INFO (decl) = build_template_info (fns, args);
7787 
7788 	  for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
7789 	    if (TREE_PURPOSE (t)
7790 		&& TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
7791 	    {
7792 	      error ("default arguments are not allowed in declaration "
7793 		     "of friend template specialization %qD",
7794 		     decl);
7795 	      return NULL_TREE;
7796 	    }
7797 
7798 	  if (inlinep & 1)
7799 	    error ("%<inline%> is not allowed in declaration of friend "
7800 		   "template specialization %qD",
7801 		   decl);
7802 	  if (inlinep & 2)
7803 	    error ("%<constexpr%> is not allowed in declaration of friend "
7804 		   "template specialization %qD",
7805 		   decl);
7806 	  if (inlinep)
7807 	    return NULL_TREE;
7808 	}
7809     }
7810 
7811   /* If this decl has namespace scope, set that up.  */
7812   if (in_namespace)
7813     set_decl_namespace (decl, in_namespace, friendp);
7814   else if (!ctype)
7815     DECL_CONTEXT (decl) = FROB_CONTEXT (current_decl_namespace ());
7816 
7817   /* `main' and builtins have implicit 'C' linkage.  */
7818   if ((MAIN_NAME_P (declarator)
7819        || (IDENTIFIER_LENGTH (declarator) > 10
7820 	   && IDENTIFIER_POINTER (declarator)[0] == '_'
7821 	   && IDENTIFIER_POINTER (declarator)[1] == '_'
7822 	   && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0)
7823        || (targetcm.cxx_implicit_extern_c
7824 	   && targetcm.cxx_implicit_extern_c(IDENTIFIER_POINTER (declarator))))
7825       && current_lang_name == lang_name_cplusplus
7826       && ctype == NULL_TREE
7827       && DECL_FILE_SCOPE_P (decl))
7828     SET_DECL_LANGUAGE (decl, lang_c);
7829 
7830   /* Should probably propagate const out from type to decl I bet (mrs).  */
7831   if (staticp)
7832     {
7833       DECL_STATIC_FUNCTION_P (decl) = 1;
7834       DECL_CONTEXT (decl) = ctype;
7835     }
7836 
7837   if (deletedp)
7838     DECL_DELETED_FN (decl) = 1;
7839 
7840   if (ctype)
7841     {
7842       DECL_CONTEXT (decl) = ctype;
7843       if (funcdef_flag)
7844 	check_class_member_definition_namespace (decl);
7845     }
7846 
7847   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
7848     {
7849       if (PROCESSING_REAL_TEMPLATE_DECL_P())
7850 	error ("cannot declare %<::main%> to be a template");
7851       if (inlinep & 1)
7852 	error ("cannot declare %<::main%> to be inline");
7853       if (inlinep & 2)
7854 	error ("cannot declare %<::main%> to be constexpr");
7855       if (!publicp)
7856 	error ("cannot declare %<::main%> to be static");
7857       inlinep = 0;
7858       publicp = 1;
7859     }
7860 
7861   /* Members of anonymous types and local classes have no linkage; make
7862      them internal.  If a typedef is made later, this will be changed.  */
7863   if (ctype && (TYPE_ANONYMOUS_P (ctype)
7864 		|| decl_function_context (TYPE_MAIN_DECL (ctype))))
7865     publicp = 0;
7866 
7867   if (publicp && cxx_dialect == cxx98)
7868     {
7869       /* [basic.link]: A name with no linkage (notably, the name of a class
7870 	 or enumeration declared in a local scope) shall not be used to
7871 	 declare an entity with linkage.
7872 
7873 	 DR 757 relaxes this restriction for C++0x.  */
7874       no_linkage_error (decl);
7875     }
7876 
7877   TREE_PUBLIC (decl) = publicp;
7878   if (! publicp)
7879     {
7880       DECL_INTERFACE_KNOWN (decl) = 1;
7881       DECL_NOT_REALLY_EXTERN (decl) = 1;
7882     }
7883 
7884   /* If the declaration was declared inline, mark it as such.  */
7885   if (inlinep)
7886     {
7887       DECL_DECLARED_INLINE_P (decl) = 1;
7888       if (publicp)
7889 	DECL_COMDAT (decl) = 1;
7890     }
7891   if (inlinep & 2)
7892     DECL_DECLARED_CONSTEXPR_P (decl) = true;
7893 
7894   DECL_EXTERNAL (decl) = 1;
7895   if (TREE_CODE (type) == FUNCTION_TYPE)
7896     {
7897       if (quals)
7898 	{
7899 	  error (ctype
7900 		 ? G_("static member function %qD cannot have cv-qualifier")
7901 		 : G_("non-member function %qD cannot have cv-qualifier"),
7902 		 decl);
7903 	  quals = TYPE_UNQUALIFIED;
7904 	}
7905 
7906       if (rqual)
7907 	{
7908 	  error (ctype
7909 		 ? G_("static member function %qD cannot have ref-qualifier")
7910 		 : G_("non-member function %qD cannot have ref-qualifier"),
7911 		 decl);
7912 	  rqual = REF_QUAL_NONE;
7913 	}
7914     }
7915 
7916   if (IDENTIFIER_OPNAME_P (DECL_NAME (decl))
7917       && !grok_op_properties (decl, /*complain=*/true))
7918     return NULL_TREE;
7919   else if (UDLIT_OPER_P (DECL_NAME (decl)))
7920     {
7921       bool long_long_unsigned_p;
7922       bool long_double_p;
7923       const char *suffix = NULL;
7924       /* [over.literal]/6: Literal operators shall not have C linkage. */
7925       if (DECL_LANGUAGE (decl) == lang_c)
7926 	{
7927 	  error ("literal operator with C linkage");
7928 	  return NULL_TREE;
7929 	}
7930 
7931       if (DECL_NAMESPACE_SCOPE_P (decl))
7932 	{
7933 	  if (!check_literal_operator_args (decl, &long_long_unsigned_p,
7934 					    &long_double_p))
7935 	    {
7936 	      error ("%qD has invalid argument list", decl);
7937 	      return NULL_TREE;
7938 	    }
7939 
7940 	  suffix = UDLIT_OP_SUFFIX (DECL_NAME (decl));
7941 	  if (long_long_unsigned_p)
7942 	    {
7943 	      if (cpp_interpret_int_suffix (parse_in, suffix, strlen (suffix)))
7944 		warning (0, "integer suffix %<%s%>"
7945 			    " shadowed by implementation", suffix);
7946 	    }
7947 	  else if (long_double_p)
7948 	    {
7949 	      if (cpp_interpret_float_suffix (parse_in, suffix, strlen (suffix)))
7950 		warning (0, "floating point suffix %<%s%>"
7951 			    " shadowed by implementation", suffix);
7952 	    }
7953 	}
7954       else
7955 	{
7956 	  error ("%qD must be a non-member function", decl);
7957 	  return NULL_TREE;
7958 	}
7959     }
7960 
7961   if (funcdef_flag)
7962     /* Make the init_value nonzero so pushdecl knows this is not
7963        tentative.  error_mark_node is replaced later with the BLOCK.  */
7964     DECL_INITIAL (decl) = error_mark_node;
7965 
7966   if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
7967     TREE_NOTHROW (decl) = 1;
7968 
7969   if (flag_openmp || flag_openmp_simd || flag_cilkplus)
7970     {
7971       /* Adjust "omp declare simd" attributes.  */
7972       tree ods = lookup_attribute ("omp declare simd", *attrlist);
7973       if (ods)
7974 	{
7975 	  tree attr;
7976 	  for (attr = ods; attr;
7977 	       attr = lookup_attribute ("omp declare simd", TREE_CHAIN (attr)))
7978 	    {
7979 	      if (TREE_CODE (type) == METHOD_TYPE)
7980 		walk_tree (&TREE_VALUE (attr), declare_simd_adjust_this,
7981 			   DECL_ARGUMENTS (decl), NULL);
7982 	      if (TREE_VALUE (attr) != NULL_TREE)
7983 		{
7984 		  tree cl = TREE_VALUE (TREE_VALUE (attr));
7985 		  cl = c_omp_declare_simd_clauses_to_numbers
7986 						(DECL_ARGUMENTS (decl), cl);
7987 		  if (cl)
7988 		    TREE_VALUE (TREE_VALUE (attr)) = cl;
7989 		  else
7990 		    TREE_VALUE (attr) = NULL_TREE;
7991 		}
7992 	    }
7993 	}
7994     }
7995 
7996   /* Caller will do the rest of this.  */
7997   if (check < 0)
7998     return decl;
7999 
8000   if (ctype != NULL_TREE)
8001     grokclassfn (ctype, decl, flags);
8002 
8003   /* 12.4/3  */
8004   if (cxx_dialect >= cxx11
8005       && DECL_DESTRUCTOR_P (decl)
8006       && !TYPE_BEING_DEFINED (DECL_CONTEXT (decl))
8007       && !processing_template_decl)
8008     deduce_noexcept_on_destructor (decl);
8009 
8010   decl = check_explicit_specialization (orig_declarator, decl,
8011 					template_count,
8012 					2 * funcdef_flag +
8013 					4 * (friendp != 0));
8014   if (decl == error_mark_node)
8015     return NULL_TREE;
8016 
8017   if (DECL_STATIC_FUNCTION_P (decl))
8018     check_static_quals (decl, quals);
8019 
8020   if (attrlist)
8021     {
8022       cplus_decl_attributes (&decl, *attrlist, 0);
8023       *attrlist = NULL_TREE;
8024     }
8025 
8026   /* Check main's type after attributes have been applied.  */
8027   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
8028     {
8029       if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
8030 			integer_type_node))
8031 	{
8032 	  tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
8033 	  tree newtype;
8034 	  error ("%<::main%> must return %<int%>");
8035 	  newtype = build_function_type (integer_type_node, oldtypeargs);
8036 	  TREE_TYPE (decl) = newtype;
8037 	}
8038       if (warn_main)
8039 	check_main_parameter_types (decl);
8040     }
8041 
8042   if (ctype != NULL_TREE
8043       && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
8044       && check)
8045     {
8046       tree old_decl = check_classfn (ctype, decl,
8047 				     (processing_template_decl
8048 				      > template_class_depth (ctype))
8049 				     ? current_template_parms
8050 				     : NULL_TREE);
8051 
8052       if (old_decl == error_mark_node)
8053 	return NULL_TREE;
8054 
8055       if (old_decl)
8056 	{
8057 	  tree ok;
8058 	  tree pushed_scope;
8059 
8060 	  if (TREE_CODE (old_decl) == TEMPLATE_DECL)
8061 	    /* Because grokfndecl is always supposed to return a
8062 	       FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
8063 	       here.  We depend on our callers to figure out that its
8064 	       really a template that's being returned.  */
8065 	    old_decl = DECL_TEMPLATE_RESULT (old_decl);
8066 
8067 	  if (DECL_STATIC_FUNCTION_P (old_decl)
8068 	      && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
8069 	    {
8070 	      /* Remove the `this' parm added by grokclassfn.  */
8071 	      revert_static_member_fn (decl);
8072 	      check_static_quals (decl, quals);
8073 	    }
8074 	  if (DECL_ARTIFICIAL (old_decl))
8075 	    {
8076 	      error ("definition of implicitly-declared %qD", old_decl);
8077 	      return NULL_TREE;
8078 	    }
8079 	  else if (DECL_DEFAULTED_FN (old_decl))
8080 	    {
8081 	      error ("definition of explicitly-defaulted %q+D", decl);
8082 	      error ("%q+#D explicitly defaulted here", old_decl);
8083 	      return NULL_TREE;
8084 	    }
8085 
8086 	  /* Since we've smashed OLD_DECL to its
8087 	     DECL_TEMPLATE_RESULT, we must do the same to DECL.  */
8088 	  if (TREE_CODE (decl) == TEMPLATE_DECL)
8089 	    decl = DECL_TEMPLATE_RESULT (decl);
8090 
8091 	  /* Attempt to merge the declarations.  This can fail, in
8092 	     the case of some invalid specialization declarations.  */
8093 	  pushed_scope = push_scope (ctype);
8094 	  ok = duplicate_decls (decl, old_decl, friendp);
8095 	  if (pushed_scope)
8096 	    pop_scope (pushed_scope);
8097 	  if (!ok)
8098 	    {
8099 	      error ("no %q#D member function declared in class %qT",
8100 		     decl, ctype);
8101 	      return NULL_TREE;
8102 	    }
8103 	  if (ok == error_mark_node)
8104 	    return NULL_TREE;
8105 	  return old_decl;
8106 	}
8107     }
8108 
8109   if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
8110     return NULL_TREE;
8111 
8112   if (ctype == NULL_TREE || check)
8113     return decl;
8114 
8115   if (virtualp)
8116     DECL_VIRTUAL_P (decl) = 1;
8117 
8118   return decl;
8119 }
8120 
8121 /* decl is a FUNCTION_DECL.
8122    specifiers are the parsed virt-specifiers.
8123 
8124    Set flags to reflect the virt-specifiers.
8125 
8126    Returns decl.  */
8127 
8128 static tree
8129 set_virt_specifiers (tree decl, cp_virt_specifiers specifiers)
8130 {
8131   if (decl == NULL_TREE)
8132     return decl;
8133   if (specifiers & VIRT_SPEC_OVERRIDE)
8134     DECL_OVERRIDE_P (decl) = 1;
8135   if (specifiers & VIRT_SPEC_FINAL)
8136     DECL_FINAL_P (decl) = 1;
8137   return decl;
8138 }
8139 
8140 /* DECL is a VAR_DECL for a static data member.  Set flags to reflect
8141    the linkage that DECL will receive in the object file.  */
8142 
8143 static void
8144 set_linkage_for_static_data_member (tree decl)
8145 {
8146   /* A static data member always has static storage duration and
8147      external linkage.  Note that static data members are forbidden in
8148      local classes -- the only situation in which a class has
8149      non-external linkage.  */
8150   TREE_PUBLIC (decl) = 1;
8151   TREE_STATIC (decl) = 1;
8152   /* For non-template classes, static data members are always put
8153      out in exactly those files where they are defined, just as
8154      with ordinary namespace-scope variables.  */
8155   if (!processing_template_decl)
8156     DECL_INTERFACE_KNOWN (decl) = 1;
8157 }
8158 
8159 /* Create a VAR_DECL named NAME with the indicated TYPE.
8160 
8161    If SCOPE is non-NULL, it is the class type or namespace containing
8162    the variable.  If SCOPE is NULL, the variable should is created in
8163    the innermost enclosing scope.  */
8164 
8165 static tree
8166 grokvardecl (tree type,
8167 	     tree name,
8168 	     tree orig_declarator,
8169 	     const cp_decl_specifier_seq *declspecs,
8170 	     int initialized,
8171 	     int constp,
8172 	     int template_count,
8173 	     tree scope)
8174 {
8175   tree decl;
8176   tree explicit_scope;
8177 
8178   gcc_assert (!name || identifier_p (name));
8179 
8180   /* Compute the scope in which to place the variable, but remember
8181      whether or not that scope was explicitly specified by the user.   */
8182   explicit_scope = scope;
8183   if (!scope)
8184     {
8185       /* An explicit "extern" specifier indicates a namespace-scope
8186 	 variable.  */
8187       if (declspecs->storage_class == sc_extern)
8188 	scope = current_decl_namespace ();
8189       else if (!at_function_scope_p ())
8190 	scope = current_scope ();
8191     }
8192 
8193   if (scope
8194       && (/* If the variable is a namespace-scope variable declared in a
8195 	     template, we need DECL_LANG_SPECIFIC.  */
8196 	  (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
8197 	  /* Similarly for namespace-scope variables with language linkage
8198 	     other than C++.  */
8199 	  || (TREE_CODE (scope) == NAMESPACE_DECL
8200 	      && current_lang_name != lang_name_cplusplus)
8201 	  /* Similarly for static data members.  */
8202 	  || TYPE_P (scope)
8203 	  /* Similarly for explicit specializations.  */
8204 	  || (orig_declarator
8205 	      && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)))
8206     decl = build_lang_decl (VAR_DECL, name, type);
8207   else
8208     decl = build_decl (input_location, VAR_DECL, name, type);
8209 
8210   if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
8211     set_decl_namespace (decl, explicit_scope, 0);
8212   else
8213     DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
8214 
8215   if (declspecs->storage_class == sc_extern)
8216     {
8217       DECL_THIS_EXTERN (decl) = 1;
8218       DECL_EXTERNAL (decl) = !initialized;
8219     }
8220 
8221   if (DECL_CLASS_SCOPE_P (decl))
8222     {
8223       set_linkage_for_static_data_member (decl);
8224       /* This function is only called with out-of-class definitions.  */
8225       DECL_EXTERNAL (decl) = 0;
8226       check_class_member_definition_namespace (decl);
8227     }
8228   /* At top level, either `static' or no s.c. makes a definition
8229      (perhaps tentative), and absence of `static' makes it public.  */
8230   else if (toplevel_bindings_p ())
8231     {
8232       TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
8233 			    && (DECL_THIS_EXTERN (decl) || ! constp));
8234       TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
8235     }
8236   /* Not at top level, only `static' makes a static definition.  */
8237   else
8238     {
8239       TREE_STATIC (decl) = declspecs->storage_class == sc_static;
8240       TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
8241     }
8242 
8243   if (decl_spec_seq_has_spec_p (declspecs, ds_thread))
8244     {
8245       if (DECL_EXTERNAL (decl) || TREE_STATIC (decl))
8246         set_decl_tls_model (decl, decl_default_tls_model (decl));
8247       if (declspecs->gnu_thread_keyword_p)
8248 	DECL_GNU_TLS_P (decl) = true;
8249     }
8250 
8251   /* If the type of the decl has no linkage, make sure that we'll
8252      notice that in mark_used.  */
8253   if (cxx_dialect > cxx98
8254       && decl_linkage (decl) != lk_none
8255       && DECL_LANG_SPECIFIC (decl) == NULL
8256       && !DECL_EXTERN_C_P (decl)
8257       && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
8258     retrofit_lang_decl (decl);
8259 
8260   if (TREE_PUBLIC (decl))
8261     {
8262       /* [basic.link]: A name with no linkage (notably, the name of a class
8263 	 or enumeration declared in a local scope) shall not be used to
8264 	 declare an entity with linkage.
8265 
8266 	 DR 757 relaxes this restriction for C++0x.  */
8267       if (cxx_dialect < cxx11)
8268 	no_linkage_error (decl);
8269     }
8270   else
8271     DECL_INTERFACE_KNOWN (decl) = 1;
8272 
8273   // Handle explicit specializations and instantiations of variable templates.
8274   if (orig_declarator
8275       /* For GCC 5 fix 65646 this way.  */
8276       && current_tmpl_spec_kind (template_count) != tsk_none)
8277     decl = check_explicit_specialization (orig_declarator, decl,
8278 					  template_count, 0);
8279 
8280   return decl != error_mark_node ? decl : NULL_TREE;
8281 }
8282 
8283 /* Create and return a canonical pointer to member function type, for
8284    TYPE, which is a POINTER_TYPE to a METHOD_TYPE.  */
8285 
8286 tree
8287 build_ptrmemfunc_type (tree type)
8288 {
8289   tree field, fields;
8290   tree t;
8291 
8292   if (type == error_mark_node)
8293     return type;
8294 
8295   /* Make sure that we always have the unqualified pointer-to-member
8296      type first.  */
8297   if (cp_cv_quals quals = cp_type_quals (type))
8298     {
8299       tree unqual = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
8300       return cp_build_qualified_type (unqual, quals);
8301     }
8302 
8303   /* If a canonical type already exists for this type, use it.  We use
8304      this method instead of type_hash_canon, because it only does a
8305      simple equality check on the list of field members.  */
8306 
8307   if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
8308     return t;
8309 
8310   t = make_node (RECORD_TYPE);
8311 
8312   /* Let the front end know this is a pointer to member function.  */
8313   TYPE_PTRMEMFUNC_FLAG (t) = 1;
8314 
8315   field = build_decl (input_location, FIELD_DECL, pfn_identifier, type);
8316   fields = field;
8317 
8318   field = build_decl (input_location, FIELD_DECL, delta_identifier,
8319 		      delta_type_node);
8320   DECL_CHAIN (field) = fields;
8321   fields = field;
8322 
8323   finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
8324 
8325   /* Zap out the name so that the back end will give us the debugging
8326      information for this anonymous RECORD_TYPE.  */
8327   TYPE_NAME (t) = NULL_TREE;
8328 
8329   /* Cache this pointer-to-member type so that we can find it again
8330      later.  */
8331   TYPE_SET_PTRMEMFUNC_TYPE (type, t);
8332 
8333   if (TYPE_STRUCTURAL_EQUALITY_P (type))
8334     SET_TYPE_STRUCTURAL_EQUALITY (t);
8335   else if (TYPE_CANONICAL (type) != type)
8336     TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
8337 
8338   return t;
8339 }
8340 
8341 /* Create and return a pointer to data member type.  */
8342 
8343 tree
8344 build_ptrmem_type (tree class_type, tree member_type)
8345 {
8346   if (TREE_CODE (member_type) == METHOD_TYPE)
8347     {
8348       cp_cv_quals quals = type_memfn_quals (member_type);
8349       cp_ref_qualifier rqual = type_memfn_rqual (member_type);
8350       member_type = build_memfn_type (member_type, class_type, quals, rqual);
8351       return build_ptrmemfunc_type (build_pointer_type (member_type));
8352     }
8353   else
8354     {
8355       gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
8356       return build_offset_type (class_type, member_type);
8357     }
8358 }
8359 
8360 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
8361    Check to see that the definition is valid.  Issue appropriate error
8362    messages.  Return 1 if the definition is particularly bad, or 0
8363    otherwise.  */
8364 
8365 static int
8366 check_static_variable_definition (tree decl, tree type)
8367 {
8368   /* Can't check yet if we don't know the type.  */
8369   if (dependent_type_p (type))
8370     return 0;
8371   /* If DECL is declared constexpr, we'll do the appropriate checks
8372      in check_initializer.  */
8373   if (DECL_P (decl) && DECL_DECLARED_CONSTEXPR_P (decl))
8374     return 0;
8375   else if (cxx_dialect >= cxx11 && !INTEGRAL_OR_ENUMERATION_TYPE_P (type))
8376     {
8377       if (!COMPLETE_TYPE_P (type))
8378 	error ("in-class initialization of static data member %q#D of "
8379 	       "incomplete type", decl);
8380       else if (literal_type_p (type))
8381 	permerror (input_location,
8382 		   "%<constexpr%> needed for in-class initialization of "
8383 		   "static data member %q#D of non-integral type", decl);
8384       else
8385 	error ("in-class initialization of static data member %q#D of "
8386 	       "non-literal type", decl);
8387       return 1;
8388     }
8389 
8390   /* Motion 10 at San Diego: If a static const integral data member is
8391      initialized with an integral constant expression, the initializer
8392      may appear either in the declaration (within the class), or in
8393      the definition, but not both.  If it appears in the class, the
8394      member is a member constant.  The file-scope definition is always
8395      required.  */
8396   if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
8397     {
8398       error ("invalid in-class initialization of static data member "
8399 	     "of non-integral type %qT",
8400 	     type);
8401       return 1;
8402     }
8403   else if (!CP_TYPE_CONST_P (type))
8404     error ("ISO C++ forbids in-class initialization of non-const "
8405 	   "static member %qD",
8406 	   decl);
8407   else if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
8408     pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids initialization of member constant "
8409 	     "%qD of non-integral type %qT", decl, type);
8410 
8411   return 0;
8412 }
8413 
8414 /* *expr_p is part of the TYPE_SIZE of a variably-sized array.  If any
8415    SAVE_EXPRs in *expr_p wrap expressions with side-effects, break those
8416    expressions out into temporary variables so that walk_tree doesn't
8417    step into them (c++/15764).  */
8418 
8419 static tree
8420 stabilize_save_expr_r (tree *expr_p, int *walk_subtrees, void *data)
8421 {
8422   hash_set<tree> *pset = (hash_set<tree> *)data;
8423   tree expr = *expr_p;
8424   if (TREE_CODE (expr) == SAVE_EXPR)
8425     {
8426       tree op = TREE_OPERAND (expr, 0);
8427       cp_walk_tree (&op, stabilize_save_expr_r, data, pset);
8428       if (TREE_SIDE_EFFECTS (op))
8429 	TREE_OPERAND (expr, 0) = get_temp_regvar (TREE_TYPE (op), op);
8430       *walk_subtrees = 0;
8431     }
8432   else if (!EXPR_P (expr) || !TREE_SIDE_EFFECTS (expr))
8433     *walk_subtrees = 0;
8434   return NULL;
8435 }
8436 
8437 /* Entry point for the above.  */
8438 
8439 static void
8440 stabilize_vla_size (tree size)
8441 {
8442   hash_set<tree> pset;
8443   /* Break out any function calls into temporary variables.  */
8444   cp_walk_tree (&size, stabilize_save_expr_r, &pset, &pset);
8445 }
8446 
8447 /* Helper function for compute_array_index_type.  Look for SIZEOF_EXPR
8448    not inside of SAVE_EXPR and fold them.  */
8449 
8450 static tree
8451 fold_sizeof_expr_r (tree *expr_p, int *walk_subtrees, void *data)
8452 {
8453   tree expr = *expr_p;
8454   if (TREE_CODE (expr) == SAVE_EXPR || TYPE_P (expr))
8455     *walk_subtrees = 0;
8456   else if (TREE_CODE (expr) == SIZEOF_EXPR)
8457     {
8458       *(bool *)data = true;
8459       if (SIZEOF_EXPR_TYPE_P (expr))
8460 	expr = cxx_sizeof_or_alignof_type (TREE_TYPE (TREE_OPERAND (expr, 0)),
8461 					   SIZEOF_EXPR, false);
8462       else if (TYPE_P (TREE_OPERAND (expr, 0)))
8463 	expr = cxx_sizeof_or_alignof_type (TREE_OPERAND (expr, 0), SIZEOF_EXPR,
8464 					   false);
8465       else
8466         expr = cxx_sizeof_or_alignof_expr (TREE_OPERAND (expr, 0), SIZEOF_EXPR,
8467 					   false);
8468       if (expr == error_mark_node)
8469         expr = size_one_node;
8470       *expr_p = expr;
8471       *walk_subtrees = 0;
8472     }
8473   return NULL;
8474 }
8475 
8476 /* Given the SIZE (i.e., number of elements) in an array, compute an
8477    appropriate index type for the array.  If non-NULL, NAME is the
8478    name of the thing being declared.  */
8479 
8480 tree
8481 compute_array_index_type (tree name, tree size, tsubst_flags_t complain)
8482 {
8483   tree itype;
8484   tree osize = size;
8485 
8486   if (error_operand_p (size))
8487     return error_mark_node;
8488 
8489   if (!type_dependent_expression_p (size))
8490     {
8491       tree type = TREE_TYPE (size);
8492 
8493       mark_rvalue_use (size);
8494 
8495       if (cxx_dialect < cxx11 && TREE_CODE (size) == NOP_EXPR
8496 	  && TREE_SIDE_EFFECTS (size))
8497 	/* In C++98, we mark a non-constant array bound with a magic
8498 	   NOP_EXPR with TREE_SIDE_EFFECTS; don't fold in that case.  */;
8499       else
8500 	{
8501 	  size = instantiate_non_dependent_expr_sfinae (size, complain);
8502 
8503 	  if (CLASS_TYPE_P (type)
8504 	      && CLASSTYPE_LITERAL_P (type))
8505 	    {
8506 	      size = build_expr_type_conversion (WANT_INT, size, true);
8507 	      if (!size)
8508 		{
8509 		  if (!(complain & tf_error))
8510 		    return error_mark_node;
8511 		  if (name)
8512 		    error ("size of array %qD has non-integral type %qT",
8513 			   name, type);
8514 		  else
8515 		    error ("size of array has non-integral type %qT", type);
8516 		  size = integer_one_node;
8517 		}
8518 	      if (size == error_mark_node)
8519 		return error_mark_node;
8520 	      type = TREE_TYPE (size);
8521 	    }
8522 
8523 	  if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
8524 	    size = maybe_constant_value (size);
8525 
8526 	  if (!TREE_CONSTANT (size))
8527 	    size = osize;
8528 	}
8529 
8530       if (error_operand_p (size))
8531 	return error_mark_node;
8532 
8533       /* The array bound must be an integer type.  */
8534       if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
8535 	{
8536 	  if (!(complain & tf_error))
8537 	    return error_mark_node;
8538 	  if (name)
8539 	    error ("size of array %qD has non-integral type %qT", name, type);
8540 	  else
8541 	    error ("size of array has non-integral type %qT", type);
8542 	  size = integer_one_node;
8543 	  type = TREE_TYPE (size);
8544 	}
8545     }
8546 
8547   /* A type is dependent if it is...an array type constructed from any
8548      dependent type or whose size is specified by a constant expression
8549      that is value-dependent.  */
8550   /* We can only call value_dependent_expression_p on integral constant
8551      expressions; treat non-constant expressions as dependent, too.  */
8552   if (processing_template_decl
8553       && (type_dependent_expression_p (size)
8554 	  || !TREE_CONSTANT (size) || value_dependent_expression_p (size)))
8555     {
8556       /* We cannot do any checking for a SIZE that isn't known to be
8557 	 constant. Just build the index type and mark that it requires
8558 	 structural equality checks.  */
8559       itype = build_index_type (build_min (MINUS_EXPR, sizetype,
8560 					   size, size_one_node));
8561       TYPE_DEPENDENT_P (itype) = 1;
8562       TYPE_DEPENDENT_P_VALID (itype) = 1;
8563       SET_TYPE_STRUCTURAL_EQUALITY (itype);
8564       return itype;
8565     }
8566 
8567   /* Normally, the array-bound will be a constant.  */
8568   if (TREE_CODE (size) == INTEGER_CST)
8569     {
8570       /* Check to see if the array bound overflowed.  Make that an
8571 	 error, no matter how generous we're being.  */
8572       constant_expression_error (size);
8573 
8574       /* An array must have a positive number of elements.  */
8575       if (tree_int_cst_lt (size, integer_zero_node))
8576 	{
8577 	  if (!(complain & tf_error))
8578 	    return error_mark_node;
8579 	  if (name)
8580 	    error ("size of array %qD is negative", name);
8581 	  else
8582 	    error ("size of array is negative");
8583 	  size = integer_one_node;
8584 	}
8585       /* As an extension we allow zero-sized arrays.  */
8586       else if (integer_zerop (size))
8587 	{
8588 	  if (!(complain & tf_error))
8589 	    /* We must fail if performing argument deduction (as
8590 	       indicated by the state of complain), so that
8591 	       another substitution can be found.  */
8592 	    return error_mark_node;
8593 	  else if (in_system_header_at (input_location))
8594 	    /* Allow them in system headers because glibc uses them.  */;
8595 	  else if (name)
8596 	    pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array %qD", name);
8597 	  else
8598 	    pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array");
8599 	}
8600     }
8601   else if (TREE_CONSTANT (size)
8602 	   /* We don't allow VLAs at non-function scopes, or during
8603 	      tentative template substitution.  */
8604 	   || !at_function_scope_p ()
8605 	   || !(complain & tf_error))
8606     {
8607       if (!(complain & tf_error))
8608 	return error_mark_node;
8609       /* `(int) &fn' is not a valid array bound.  */
8610       if (name)
8611 	error ("size of array %qD is not an integral constant-expression",
8612 	       name);
8613       else
8614 	error ("size of array is not an integral constant-expression");
8615       size = integer_one_node;
8616     }
8617   else if (pedantic && warn_vla != 0)
8618     {
8619       if (name)
8620 	pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array %qD", name);
8621       else
8622 	pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array");
8623     }
8624   else if (warn_vla > 0)
8625     {
8626       if (name)
8627 	warning (OPT_Wvla,
8628                  "variable length array %qD is used", name);
8629       else
8630 	warning (OPT_Wvla,
8631                  "variable length array is used");
8632     }
8633 
8634   if (processing_template_decl && !TREE_CONSTANT (size))
8635     /* A variable sized array.  */
8636     itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
8637   else
8638     {
8639       HOST_WIDE_INT saved_processing_template_decl;
8640 
8641       /* Compute the index of the largest element in the array.  It is
8642 	 one less than the number of elements in the array.  We save
8643 	 and restore PROCESSING_TEMPLATE_DECL so that computations in
8644 	 cp_build_binary_op will be appropriately folded.  */
8645       saved_processing_template_decl = processing_template_decl;
8646       processing_template_decl = 0;
8647       itype = cp_build_binary_op (input_location,
8648 				  MINUS_EXPR,
8649 				  cp_convert (ssizetype, size, complain),
8650 				  cp_convert (ssizetype, integer_one_node,
8651 					      complain),
8652 				  complain);
8653       itype = fold (itype);
8654       processing_template_decl = saved_processing_template_decl;
8655 
8656       if (!TREE_CONSTANT (itype))
8657 	{
8658 	  /* A variable sized array.  */
8659 	  itype = variable_size (itype);
8660 
8661 	  if (TREE_CODE (itype) != SAVE_EXPR)
8662 	    {
8663 	      /* Look for SIZEOF_EXPRs in itype and fold them, otherwise
8664 		 they might survive till gimplification.  */
8665 	      tree newitype = itype;
8666 	      bool found = false;
8667 	      cp_walk_tree_without_duplicates (&newitype,
8668 					       fold_sizeof_expr_r, &found);
8669 	      if (found)
8670 		itype = variable_size (fold (newitype));
8671 	    }
8672 
8673 	  stabilize_vla_size (itype);
8674 
8675 	  if (flag_sanitize & SANITIZE_VLA
8676 	      && do_ubsan_in_current_function ())
8677 	    {
8678 	      /* We have to add 1 -- in the ubsan routine we generate
8679 		 LE_EXPR rather than LT_EXPR.  */
8680 	      tree t = fold_build2 (PLUS_EXPR, TREE_TYPE (itype), itype,
8681 				    build_one_cst (TREE_TYPE (itype)));
8682 	      t = ubsan_instrument_vla (input_location, t);
8683 	      finish_expr_stmt (t);
8684 	    }
8685 	}
8686       /* Make sure that there was no overflow when creating to a signed
8687 	 index type.  (For example, on a 32-bit machine, an array with
8688 	 size 2^32 - 1 is too big.)  */
8689       else if (TREE_CODE (itype) == INTEGER_CST
8690 	       && TREE_OVERFLOW (itype))
8691 	{
8692 	  if (!(complain & tf_error))
8693 	    return error_mark_node;
8694 	  error ("overflow in array dimension");
8695 	  TREE_OVERFLOW (itype) = 0;
8696 	}
8697     }
8698 
8699   /* Create and return the appropriate index type.  */
8700   itype = build_index_type (itype);
8701 
8702   /* If the index type were dependent, we would have returned early, so
8703      remember that it isn't.  */
8704   TYPE_DEPENDENT_P (itype) = 0;
8705   TYPE_DEPENDENT_P_VALID (itype) = 1;
8706   return itype;
8707 }
8708 
8709 /* Returns the scope (if any) in which the entity declared by
8710    DECLARATOR will be located.  If the entity was declared with an
8711    unqualified name, NULL_TREE is returned.  */
8712 
8713 tree
8714 get_scope_of_declarator (const cp_declarator *declarator)
8715 {
8716   while (declarator && declarator->kind != cdk_id)
8717     declarator = declarator->declarator;
8718 
8719   /* If the declarator-id is a SCOPE_REF, the scope in which the
8720      declaration occurs is the first operand.  */
8721   if (declarator
8722       && declarator->u.id.qualifying_scope)
8723     return declarator->u.id.qualifying_scope;
8724 
8725   /* Otherwise, the declarator is not a qualified name; the entity will
8726      be declared in the current scope.  */
8727   return NULL_TREE;
8728 }
8729 
8730 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
8731    indicated TYPE.  If non-NULL, NAME is the NAME of the declaration
8732    with this type.  */
8733 
8734 static tree
8735 create_array_type_for_decl (tree name, tree type, tree size)
8736 {
8737   tree itype = NULL_TREE;
8738 
8739   /* If things have already gone awry, bail now.  */
8740   if (type == error_mark_node || size == error_mark_node)
8741     return error_mark_node;
8742 
8743   /* 8.3.4/1: If the type of the identifier of D contains the auto
8744      type-specifier, the program is ill-formed.  */
8745   if (type_uses_auto (type))
8746     {
8747       error ("%qD declared as array of %qT", name, type);
8748       return error_mark_node;
8749     }
8750 
8751   /* If there are some types which cannot be array elements,
8752      issue an error-message and return.  */
8753   switch (TREE_CODE (type))
8754     {
8755     case VOID_TYPE:
8756       if (name)
8757         error ("declaration of %qD as array of void", name);
8758       else
8759         error ("creating array of void");
8760       return error_mark_node;
8761 
8762     case FUNCTION_TYPE:
8763       if (name)
8764         error ("declaration of %qD as array of functions", name);
8765       else
8766         error ("creating array of functions");
8767       return error_mark_node;
8768 
8769     case REFERENCE_TYPE:
8770       if (name)
8771         error ("declaration of %qD as array of references", name);
8772       else
8773         error ("creating array of references");
8774       return error_mark_node;
8775 
8776     case METHOD_TYPE:
8777       if (name)
8778         error ("declaration of %qD as array of function members", name);
8779       else
8780         error ("creating array of function members");
8781       return error_mark_node;
8782 
8783     default:
8784       break;
8785     }
8786 
8787   /* [dcl.array]
8788 
8789      The constant expressions that specify the bounds of the arrays
8790      can be omitted only for the first member of the sequence.  */
8791   if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
8792     {
8793       if (name)
8794 	error ("declaration of %qD as multidimensional array must "
8795 	       "have bounds for all dimensions except the first",
8796 	       name);
8797       else
8798 	error ("multidimensional array must have bounds for all "
8799 	       "dimensions except the first");
8800 
8801       return error_mark_node;
8802     }
8803 
8804   /* Figure out the index type for the array.  */
8805   if (size)
8806     itype = compute_array_index_type (name, size, tf_warning_or_error);
8807 
8808   /* [dcl.array]
8809      T is called the array element type; this type shall not be [...] an
8810      abstract class type.  */
8811   abstract_virtuals_error (name, type);
8812 
8813   return build_cplus_array_type (type, itype);
8814 }
8815 
8816 /* Check that it's OK to declare a function with the indicated TYPE.
8817    SFK indicates the kind of special function (if any) that this
8818    function is.  OPTYPE is the type given in a conversion operator
8819    declaration, or the class type for a constructor/destructor.
8820    Returns the actual return type of the function; that
8821    may be different than TYPE if an error occurs, or for certain
8822    special functions.  */
8823 
8824 static tree
8825 check_special_function_return_type (special_function_kind sfk,
8826 				    tree type,
8827 				    tree optype)
8828 {
8829   switch (sfk)
8830     {
8831     case sfk_constructor:
8832       if (type)
8833 	error ("return type specification for constructor invalid");
8834 
8835       if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
8836 	type = build_pointer_type (optype);
8837       else
8838 	type = void_type_node;
8839       break;
8840 
8841     case sfk_destructor:
8842       if (type)
8843 	error ("return type specification for destructor invalid");
8844       /* We can't use the proper return type here because we run into
8845 	 problems with ambiguous bases and covariant returns.
8846 	 Java classes are left unchanged because (void *) isn't a valid
8847 	 Java type, and we don't want to change the Java ABI.  */
8848       if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
8849 	type = build_pointer_type (void_type_node);
8850       else
8851 	type = void_type_node;
8852       break;
8853 
8854     case sfk_conversion:
8855       if (type)
8856 	error ("return type specified for %<operator %T%>",  optype);
8857       type = optype;
8858       break;
8859 
8860     default:
8861       gcc_unreachable ();
8862     }
8863 
8864   return type;
8865 }
8866 
8867 /* A variable or data member (whose unqualified name is IDENTIFIER)
8868    has been declared with the indicated TYPE.  If the TYPE is not
8869    acceptable, issue an error message and return a type to use for
8870    error-recovery purposes.  */
8871 
8872 tree
8873 check_var_type (tree identifier, tree type)
8874 {
8875   if (VOID_TYPE_P (type))
8876     {
8877       if (!identifier)
8878 	error ("unnamed variable or field declared void");
8879       else if (identifier_p (identifier))
8880 	{
8881 	  gcc_assert (!IDENTIFIER_OPNAME_P (identifier));
8882 	  error ("variable or field %qE declared void", identifier);
8883 	}
8884       else
8885 	error ("variable or field declared void");
8886       type = error_mark_node;
8887     }
8888 
8889   return type;
8890 }
8891 
8892 /* Given declspecs and a declarator (abstract or otherwise), determine
8893    the name and type of the object declared and construct a DECL node
8894    for it.
8895 
8896    DECLSPECS points to the representation of declaration-specifier
8897    sequence that precedes declarator.
8898 
8899    DECL_CONTEXT says which syntactic context this declaration is in:
8900      NORMAL for most contexts.  Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
8901      FUNCDEF for a function definition.  Like NORMAL but a few different
8902       error messages in each case.  Return value may be zero meaning
8903       this definition is too screwy to try to parse.
8904      MEMFUNCDEF for a function definition.  Like FUNCDEF but prepares to
8905       handle member functions (which have FIELD context).
8906       Return value may be zero meaning this definition is too screwy to
8907       try to parse.
8908      PARM for a parameter declaration (either within a function prototype
8909       or before a function body).  Make a PARM_DECL, or return void_type_node.
8910      TPARM for a template parameter declaration.
8911      CATCHPARM for a parameter declaration before a catch clause.
8912      TYPENAME if for a typename (in a cast or sizeof).
8913       Don't make a DECL node; just return the ..._TYPE node.
8914      FIELD for a struct or union field; make a FIELD_DECL.
8915      BITFIELD for a field with specified width.
8916 
8917    INITIALIZED is as for start_decl.
8918 
8919    ATTRLIST is a pointer to the list of attributes, which may be NULL
8920    if there are none; *ATTRLIST may be modified if attributes from inside
8921    the declarator should be applied to the declaration.
8922 
8923    When this function is called, scoping variables (such as
8924    CURRENT_CLASS_TYPE) should reflect the scope in which the
8925    declaration occurs, not the scope in which the new declaration will
8926    be placed.  For example, on:
8927 
8928      void S::f() { ... }
8929 
8930    when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
8931    should not be `S'.
8932 
8933    Returns a DECL (if a declarator is present), a TYPE (if there is no
8934    declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
8935    error occurs. */
8936 
8937 tree
8938 grokdeclarator (const cp_declarator *declarator,
8939 		cp_decl_specifier_seq *declspecs,
8940 		enum decl_context decl_context,
8941 		int initialized,
8942 		tree* attrlist)
8943 {
8944   tree type = NULL_TREE;
8945   int longlong = 0;
8946   int explicit_intN = 0;
8947   int virtualp, explicitp, friendp, inlinep, staticp;
8948   int explicit_int = 0;
8949   int explicit_char = 0;
8950   int defaulted_int = 0;
8951 
8952   tree typedef_decl = NULL_TREE;
8953   const char *name = NULL;
8954   tree typedef_type = NULL_TREE;
8955   /* True if this declarator is a function definition.  */
8956   bool funcdef_flag = false;
8957   cp_declarator_kind innermost_code = cdk_error;
8958   int bitfield = 0;
8959 #if 0
8960   /* See the code below that used this.  */
8961   tree decl_attr = NULL_TREE;
8962 #endif
8963 
8964   /* Keep track of what sort of function is being processed
8965      so that we can warn about default return values, or explicit
8966      return values which do not match prescribed defaults.  */
8967   special_function_kind sfk = sfk_none;
8968 
8969   tree dname = NULL_TREE;
8970   tree ctor_return_type = NULL_TREE;
8971   enum overload_flags flags = NO_SPECIAL;
8972   /* cv-qualifiers that apply to the declarator, for a declaration of
8973      a member function.  */
8974   cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
8975   /* virt-specifiers that apply to the declarator, for a declaration of
8976      a member function.  */
8977   cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
8978   /* ref-qualifier that applies to the declarator, for a declaration of
8979      a member function.  */
8980   cp_ref_qualifier rqual = REF_QUAL_NONE;
8981   /* cv-qualifiers that apply to the type specified by the DECLSPECS.  */
8982   int type_quals;
8983   tree raises = NULL_TREE;
8984   int template_count = 0;
8985   tree returned_attrs = NULL_TREE;
8986   tree parms = NULL_TREE;
8987   const cp_declarator *id_declarator;
8988   /* The unqualified name of the declarator; either an
8989      IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR.  */
8990   tree unqualified_id;
8991   /* The class type, if any, in which this entity is located,
8992      or NULL_TREE if none.  Note that this value may be different from
8993      the current class type; for example if an attempt is made to declare
8994      "A::f" inside "B", this value will be "A".  */
8995   tree ctype = current_class_type;
8996   /* The NAMESPACE_DECL for the namespace in which this entity is
8997      located.  If an unqualified name is used to declare the entity,
8998      this value will be NULL_TREE, even if the entity is located at
8999      namespace scope.  */
9000   tree in_namespace = NULL_TREE;
9001   cp_storage_class storage_class;
9002   bool unsigned_p, signed_p, short_p, long_p, thread_p;
9003   bool type_was_error_mark_node = false;
9004   bool parameter_pack_p = declarator? declarator->parameter_pack_p : false;
9005   bool template_type_arg = false;
9006   bool template_parm_flag = false;
9007   bool typedef_p = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
9008   bool constexpr_p = decl_spec_seq_has_spec_p (declspecs, ds_constexpr);
9009   bool late_return_type_p = false;
9010   bool array_parameter_p = false;
9011   source_location saved_loc = input_location;
9012   const char *errmsg;
9013 
9014   signed_p = decl_spec_seq_has_spec_p (declspecs, ds_signed);
9015   unsigned_p = decl_spec_seq_has_spec_p (declspecs, ds_unsigned);
9016   short_p = decl_spec_seq_has_spec_p (declspecs, ds_short);
9017   long_p = decl_spec_seq_has_spec_p (declspecs, ds_long);
9018   longlong = decl_spec_seq_has_spec_p (declspecs, ds_long_long);
9019   explicit_intN = declspecs->explicit_intN_p;
9020   thread_p = decl_spec_seq_has_spec_p (declspecs, ds_thread);
9021 
9022   if (decl_context == FUNCDEF)
9023     funcdef_flag = true, decl_context = NORMAL;
9024   else if (decl_context == MEMFUNCDEF)
9025     funcdef_flag = true, decl_context = FIELD;
9026   else if (decl_context == BITFIELD)
9027     bitfield = 1, decl_context = FIELD;
9028   else if (decl_context == TEMPLATE_TYPE_ARG)
9029     template_type_arg = true, decl_context = TYPENAME;
9030   else if (decl_context == TPARM)
9031     template_parm_flag = true, decl_context = PARM;
9032 
9033   if (initialized > 1)
9034     funcdef_flag = true;
9035 
9036   /* Look inside a declarator for the name being declared
9037      and get it as a string, for an error message.  */
9038   for (id_declarator = declarator;
9039        id_declarator;
9040        id_declarator = id_declarator->declarator)
9041     {
9042       if (id_declarator->kind != cdk_id)
9043 	innermost_code = id_declarator->kind;
9044 
9045       switch (id_declarator->kind)
9046 	{
9047 	case cdk_function:
9048 	  if (id_declarator->declarator
9049 	      && id_declarator->declarator->kind == cdk_id)
9050 	    {
9051 	      sfk = id_declarator->declarator->u.id.sfk;
9052 	      if (sfk == sfk_destructor)
9053 		flags = DTOR_FLAG;
9054 	    }
9055 	  break;
9056 
9057 	case cdk_id:
9058 	  {
9059 	    tree qualifying_scope = id_declarator->u.id.qualifying_scope;
9060 	    tree decl = id_declarator->u.id.unqualified_name;
9061 	    if (!decl)
9062 	      break;
9063 	    if (qualifying_scope)
9064 	      {
9065 		if (at_function_scope_p ())
9066 		  {
9067 		    /* [dcl.meaning]
9068 
9069 		       A declarator-id shall not be qualified except
9070 		       for ...
9071 
9072 		       None of the cases are permitted in block
9073 		       scope.  */
9074 		    if (qualifying_scope == global_namespace)
9075 		      error ("invalid use of qualified-name %<::%D%>",
9076 			     decl);
9077 		    else if (TYPE_P (qualifying_scope))
9078 		      error ("invalid use of qualified-name %<%T::%D%>",
9079 			     qualifying_scope, decl);
9080 		    else
9081 		      error ("invalid use of qualified-name %<%D::%D%>",
9082 			     qualifying_scope, decl);
9083 		    return error_mark_node;
9084 		  }
9085 		else if (TYPE_P (qualifying_scope))
9086 		  {
9087 		    ctype = qualifying_scope;
9088 		    if (!MAYBE_CLASS_TYPE_P (ctype))
9089 		      {
9090 			error ("%q#T is not a class or a namespace", ctype);
9091 			ctype = NULL_TREE;
9092 		      }
9093 		    else if (innermost_code != cdk_function
9094 			     && current_class_type
9095 			     && !uniquely_derived_from_p (ctype,
9096 							  current_class_type))
9097 		      {
9098 			error ("invalid use of qualified-name %<%T::%D%>",
9099 			       qualifying_scope, decl);
9100 			return error_mark_node;
9101 		      }
9102 		  }
9103 		else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
9104 		  in_namespace = qualifying_scope;
9105 	      }
9106 	    switch (TREE_CODE (decl))
9107 	      {
9108 	      case BIT_NOT_EXPR:
9109 		{
9110 		  tree type;
9111 
9112 		  if (innermost_code != cdk_function)
9113 		    {
9114 		      error ("declaration of %qD as non-function", decl);
9115 		      return error_mark_node;
9116 		    }
9117 		  else if (!qualifying_scope
9118 			   && !(current_class_type && at_class_scope_p ()))
9119 		    {
9120 		      error ("declaration of %qD as non-member", decl);
9121 		      return error_mark_node;
9122 		    }
9123 
9124 		  type = TREE_OPERAND (decl, 0);
9125 		  if (TYPE_P (type))
9126 		    type = constructor_name (type);
9127 		  name = identifier_to_locale (IDENTIFIER_POINTER (type));
9128 		  dname = decl;
9129 		}
9130 		break;
9131 
9132 	      case TEMPLATE_ID_EXPR:
9133 		{
9134 		  tree fns = TREE_OPERAND (decl, 0);
9135 
9136 		  dname = fns;
9137 		  if (!identifier_p (dname))
9138 		    {
9139 		      if (variable_template_p (dname))
9140 			dname = DECL_NAME (dname);
9141 		      else
9142 		        {
9143 		          gcc_assert (is_overloaded_fn (dname));
9144 		          dname = DECL_NAME (get_first_fn (dname));
9145 		        }
9146 		    }
9147 		}
9148 		/* Fall through.  */
9149 
9150 	      case IDENTIFIER_NODE:
9151 		if (identifier_p (decl))
9152 		  dname = decl;
9153 
9154 		if (C_IS_RESERVED_WORD (dname))
9155 		  {
9156 		    error ("declarator-id missing; using reserved word %qD",
9157 			   dname);
9158 		    name = identifier_to_locale (IDENTIFIER_POINTER (dname));
9159 		  }
9160 		else if (!IDENTIFIER_TYPENAME_P (dname))
9161 		  name = identifier_to_locale (IDENTIFIER_POINTER (dname));
9162 		else
9163 		  {
9164 		    gcc_assert (flags == NO_SPECIAL);
9165 		    flags = TYPENAME_FLAG;
9166 		    ctor_return_type = TREE_TYPE (dname);
9167 		    sfk = sfk_conversion;
9168 		    if (is_typename_at_global_scope (dname))
9169 		      name = identifier_to_locale (IDENTIFIER_POINTER (dname));
9170 		    else
9171 		      name = "<invalid operator>";
9172 		  }
9173 		break;
9174 
9175 	      default:
9176 		gcc_unreachable ();
9177 	      }
9178 	    break;
9179 	  }
9180 
9181 	case cdk_array:
9182 	case cdk_pointer:
9183 	case cdk_reference:
9184 	case cdk_ptrmem:
9185 	  break;
9186 
9187 	case cdk_error:
9188 	  return error_mark_node;
9189 
9190 	default:
9191 	  gcc_unreachable ();
9192 	}
9193       if (id_declarator->kind == cdk_id)
9194 	break;
9195     }
9196 
9197   /* [dcl.fct.edf]
9198 
9199      The declarator in a function-definition shall have the form
9200      D1 ( parameter-declaration-clause) ...  */
9201   if (funcdef_flag && innermost_code != cdk_function)
9202     {
9203       error ("function definition does not declare parameters");
9204       return error_mark_node;
9205     }
9206 
9207   if (flags == TYPENAME_FLAG
9208       && innermost_code != cdk_function
9209       && ! (ctype && !declspecs->any_specifiers_p))
9210     {
9211       error ("declaration of %qD as non-function", dname);
9212       return error_mark_node;
9213     }
9214 
9215   if (dname
9216       && identifier_p (dname)
9217       && UDLIT_OPER_P (dname)
9218       && innermost_code != cdk_function)
9219     {
9220       error ("declaration of %qD as non-function", dname);
9221       return error_mark_node;
9222     }
9223 
9224   if (dname && IDENTIFIER_OPNAME_P (dname))
9225     {
9226       if (typedef_p)
9227 	{
9228 	  error ("declaration of %qD as %<typedef%>", dname);
9229 	  return error_mark_node;
9230 	}
9231       else if (decl_context == PARM || decl_context == CATCHPARM)
9232 	{
9233 	  error ("declaration of %qD as parameter", dname);
9234 	  return error_mark_node;
9235 	}
9236     }
9237 
9238   /* Anything declared one level down from the top level
9239      must be one of the parameters of a function
9240      (because the body is at least two levels down).  */
9241 
9242   /* This heuristic cannot be applied to C++ nodes! Fixed, however,
9243      by not allowing C++ class definitions to specify their parameters
9244      with xdecls (must be spec.d in the parmlist).
9245 
9246      Since we now wait to push a class scope until we are sure that
9247      we are in a legitimate method context, we must set oldcname
9248      explicitly (since current_class_name is not yet alive).
9249 
9250      We also want to avoid calling this a PARM if it is in a namespace.  */
9251 
9252   if (decl_context == NORMAL && !toplevel_bindings_p ())
9253     {
9254       cp_binding_level *b = current_binding_level;
9255       current_binding_level = b->level_chain;
9256       if (current_binding_level != 0 && toplevel_bindings_p ())
9257 	decl_context = PARM;
9258       current_binding_level = b;
9259     }
9260 
9261   if (name == NULL)
9262     name = decl_context == PARM ? "parameter" : "type name";
9263 
9264   if (constexpr_p && typedef_p)
9265     {
9266       error ("%<constexpr%> cannot appear in a typedef declaration");
9267       return error_mark_node;
9268     }
9269 
9270   /* If there were multiple types specified in the decl-specifier-seq,
9271      issue an error message.  */
9272   if (declspecs->multiple_types_p)
9273     {
9274       error ("two or more data types in declaration of %qs", name);
9275       return error_mark_node;
9276     }
9277 
9278   if (declspecs->conflicting_specifiers_p)
9279     {
9280       error ("conflicting specifiers in declaration of %qs", name);
9281       return error_mark_node;
9282     }
9283 
9284   /* Extract the basic type from the decl-specifier-seq.  */
9285   type = declspecs->type;
9286   if (type == error_mark_node)
9287     {
9288       type = NULL_TREE;
9289       type_was_error_mark_node = true;
9290     }
9291   /* If the entire declaration is itself tagged as deprecated then
9292      suppress reports of deprecated items.  */
9293   if (type && TREE_DEPRECATED (type)
9294       && deprecated_state != DEPRECATED_SUPPRESS)
9295     warn_deprecated_use (type, NULL_TREE);
9296   if (type && TREE_CODE (type) == TYPE_DECL)
9297     {
9298       typedef_decl = type;
9299       type = TREE_TYPE (typedef_decl);
9300       if (TREE_DEPRECATED (type)
9301 	  && DECL_ARTIFICIAL (typedef_decl)
9302 	  && deprecated_state != DEPRECATED_SUPPRESS)
9303 	warn_deprecated_use (type, NULL_TREE);
9304     }
9305   /* No type at all: default to `int', and set DEFAULTED_INT
9306      because it was not a user-defined typedef.  */
9307   if (type == NULL_TREE)
9308     {
9309       if (signed_p || unsigned_p || long_p || short_p)
9310 	{
9311 	  /* These imply 'int'.  */
9312 	  type = integer_type_node;
9313 	  defaulted_int = 1;
9314 	}
9315       /* If we just have "complex", it is equivalent to "complex double".  */
9316       else if (!longlong && !explicit_intN
9317 	       && decl_spec_seq_has_spec_p (declspecs, ds_complex))
9318 	{
9319 	  type = double_type_node;
9320 	  pedwarn (declspecs->locations[ds_complex], OPT_Wpedantic,
9321 		   "ISO C++ does not support plain %<complex%> meaning "
9322 		   "%<double complex%>");
9323 	}
9324     }
9325   /* Gather flags.  */
9326   explicit_int = declspecs->explicit_int_p;
9327   explicit_char = declspecs->explicit_char_p;
9328 
9329 #if 0
9330   /* See the code below that used this.  */
9331   if (typedef_decl)
9332     decl_attr = DECL_ATTRIBUTES (typedef_decl);
9333 #endif
9334   typedef_type = type;
9335 
9336 
9337   if (sfk != sfk_conversion)
9338     ctor_return_type = ctype;
9339 
9340   if (sfk != sfk_none)
9341     type = check_special_function_return_type (sfk, type,
9342 					       ctor_return_type);
9343   else if (type == NULL_TREE)
9344     {
9345       int is_main;
9346 
9347       explicit_int = -1;
9348 
9349       /* We handle `main' specially here, because 'main () { }' is so
9350 	 common.  With no options, it is allowed.  With -Wreturn-type,
9351 	 it is a warning.  It is only an error with -pedantic-errors.  */
9352       is_main = (funcdef_flag
9353 		 && dname && identifier_p (dname)
9354 		 && MAIN_NAME_P (dname)
9355 		 && ctype == NULL_TREE
9356 		 && in_namespace == NULL_TREE
9357 		 && current_namespace == global_namespace);
9358 
9359       if (type_was_error_mark_node)
9360 	/* We've already issued an error, don't complain more.  */;
9361       else if (in_system_header_at (input_location) || flag_ms_extensions)
9362 	/* Allow it, sigh.  */;
9363       else if (! is_main)
9364 	permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
9365       else if (pedantic)
9366 	pedwarn (input_location, OPT_Wpedantic,
9367 		 "ISO C++ forbids declaration of %qs with no type", name);
9368       else
9369 	warning (OPT_Wreturn_type,
9370                  "ISO C++ forbids declaration of %qs with no type", name);
9371 
9372       type = integer_type_node;
9373     }
9374 
9375   ctype = NULL_TREE;
9376 
9377   if (explicit_intN)
9378     {
9379       if (! int_n_enabled_p[declspecs->int_n_idx])
9380        {
9381          error ("%<__int%d%> is not supported by this target",
9382 		int_n_data[declspecs->int_n_idx].bitsize);
9383          explicit_intN = false;
9384        }
9385       else if (pedantic && ! in_system_header_at (input_location))
9386        pedwarn (input_location, OPT_Wpedantic,
9387                 "ISO C++ does not support %<__int%d%> for %qs",
9388 		int_n_data[declspecs->int_n_idx].bitsize,  name);
9389     }
9390 
9391   /* Now process the modifiers that were specified
9392      and check for invalid combinations.  */
9393 
9394   /* Long double is a special combination.  */
9395   if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
9396     {
9397       long_p = false;
9398       type = cp_build_qualified_type (long_double_type_node,
9399 				      cp_type_quals (type));
9400     }
9401 
9402   /* Check all other uses of type modifiers.  */
9403 
9404   if (unsigned_p || signed_p || long_p || short_p)
9405     {
9406       int ok = 0;
9407 
9408       if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
9409 	error ("%<signed%> or %<unsigned%> invalid for %qs", name);
9410       else if (signed_p && unsigned_p)
9411 	error ("%<signed%> and %<unsigned%> specified together for %qs", name);
9412       else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
9413 	error ("%<long long%> invalid for %qs", name);
9414       else if (long_p && TREE_CODE (type) == REAL_TYPE)
9415 	error ("%<long%> invalid for %qs", name);
9416       else if (short_p && TREE_CODE (type) == REAL_TYPE)
9417 	error ("%<short%> invalid for %qs", name);
9418       else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE)
9419 	error ("%<long%> or %<short%> invalid for %qs", name);
9420       else if ((long_p || short_p || explicit_char || explicit_int) && explicit_intN)
9421 	error ("%<long%>, %<int%>, %<short%>, or %<char%> invalid for %qs", name);
9422       else if ((long_p || short_p) && explicit_char)
9423 	error ("%<long%> or %<short%> specified with char for %qs", name);
9424       else if (long_p && short_p)
9425 	error ("%<long%> and %<short%> specified together for %qs", name);
9426       else if (type == char16_type_node || type == char32_type_node)
9427 	{
9428 	  if (signed_p || unsigned_p)
9429 	    error ("%<signed%> or %<unsigned%> invalid for %qs", name);
9430 	  else if (short_p || long_p)
9431 	    error ("%<short%> or %<long%> invalid for %qs", name);
9432 	}
9433       else
9434 	{
9435 	  ok = 1;
9436 	  if (!explicit_int && !defaulted_int && !explicit_char && !explicit_intN && pedantic)
9437 	    {
9438 	      pedwarn (input_location, OPT_Wpedantic,
9439 		       "long, short, signed or unsigned used invalidly for %qs",
9440 		       name);
9441 	      if (flag_pedantic_errors)
9442 		ok = 0;
9443 	    }
9444 	}
9445 
9446       /* Discard the type modifiers if they are invalid.  */
9447       if (! ok)
9448 	{
9449 	  unsigned_p = false;
9450 	  signed_p = false;
9451 	  long_p = false;
9452 	  short_p = false;
9453 	  longlong = 0;
9454 	}
9455     }
9456 
9457   /* Decide whether an integer type is signed or not.
9458      Optionally treat bitfields as signed by default.  */
9459   if (unsigned_p
9460       /* [class.bit]
9461 
9462 	 It is implementation-defined whether a plain (neither
9463 	 explicitly signed or unsigned) char, short, int, or long
9464 	 bit-field is signed or unsigned.
9465 
9466 	 Naturally, we extend this to long long as well.  Note that
9467 	 this does not include wchar_t.  */
9468       || (bitfield && !flag_signed_bitfields
9469 	  && !signed_p
9470 	  /* A typedef for plain `int' without `signed' can be
9471 	     controlled just like plain `int', but a typedef for
9472 	     `signed int' cannot be so controlled.  */
9473 	  && !(typedef_decl
9474 	       && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
9475 	  && TREE_CODE (type) == INTEGER_TYPE
9476 	  && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
9477     {
9478       if (explicit_intN)
9479 	type = int_n_trees[declspecs->int_n_idx].unsigned_type;
9480       else if (longlong)
9481 	type = long_long_unsigned_type_node;
9482       else if (long_p)
9483 	type = long_unsigned_type_node;
9484       else if (short_p)
9485 	type = short_unsigned_type_node;
9486       else if (type == char_type_node)
9487 	type = unsigned_char_type_node;
9488       else if (typedef_decl)
9489 	type = unsigned_type_for (type);
9490       else
9491 	type = unsigned_type_node;
9492     }
9493   else if (signed_p && type == char_type_node)
9494     type = signed_char_type_node;
9495   else if (explicit_intN)
9496     type = int_n_trees[declspecs->int_n_idx].signed_type;
9497   else if (longlong)
9498     type = long_long_integer_type_node;
9499   else if (long_p)
9500     type = long_integer_type_node;
9501   else if (short_p)
9502     type = short_integer_type_node;
9503 
9504   if (decl_spec_seq_has_spec_p (declspecs, ds_complex))
9505     {
9506       if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
9507 	error ("complex invalid for %qs", name);
9508       /* If a modifier is specified, the resulting complex is the complex
9509 	 form of TYPE.  E.g, "complex short" is "complex short int".  */
9510       else if (type == integer_type_node)
9511 	type = complex_integer_type_node;
9512       else if (type == float_type_node)
9513 	type = complex_float_type_node;
9514       else if (type == double_type_node)
9515 	type = complex_double_type_node;
9516       else if (type == long_double_type_node)
9517 	type = complex_long_double_type_node;
9518       else
9519 	type = build_complex_type (type);
9520     }
9521 
9522   type_quals = TYPE_UNQUALIFIED;
9523   if (decl_spec_seq_has_spec_p (declspecs, ds_const))
9524     type_quals |= TYPE_QUAL_CONST;
9525   if (decl_spec_seq_has_spec_p (declspecs, ds_volatile))
9526     type_quals |= TYPE_QUAL_VOLATILE;
9527   if (decl_spec_seq_has_spec_p (declspecs, ds_restrict))
9528     type_quals |= TYPE_QUAL_RESTRICT;
9529   if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
9530     error ("qualifiers are not allowed on declaration of %<operator %T%>",
9531 	   ctor_return_type);
9532 
9533   /* If we're using the injected-class-name to form a compound type or a
9534      declaration, replace it with the underlying class so we don't get
9535      redundant typedefs in the debug output.  But if we are returning the
9536      type unchanged, leave it alone so that it's available to
9537      maybe_get_template_decl_from_type_decl.  */
9538   if (CLASS_TYPE_P (type)
9539       && DECL_SELF_REFERENCE_P (TYPE_NAME (type))
9540       && type == TREE_TYPE (TYPE_NAME (type))
9541       && (declarator || type_quals))
9542     type = DECL_ORIGINAL_TYPE (TYPE_NAME (type));
9543 
9544   type_quals |= cp_type_quals (type);
9545   type = cp_build_qualified_type_real
9546     (type, type_quals, ((((typedef_decl && !DECL_ARTIFICIAL (typedef_decl))
9547 			  || declspecs->decltype_p)
9548 			 ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
9549   /* We might have ignored or rejected some of the qualifiers.  */
9550   type_quals = cp_type_quals (type);
9551 
9552   staticp = 0;
9553   inlinep = decl_spec_seq_has_spec_p (declspecs, ds_inline);
9554   virtualp =  decl_spec_seq_has_spec_p (declspecs, ds_virtual);
9555   explicitp = decl_spec_seq_has_spec_p (declspecs, ds_explicit);
9556 
9557   storage_class = declspecs->storage_class;
9558   if (storage_class == sc_static)
9559     staticp = 1 + (decl_context == FIELD);
9560 
9561   if (virtualp && staticp == 2)
9562     {
9563       error ("member %qD cannot be declared both virtual and static", dname);
9564       storage_class = sc_none;
9565       staticp = 0;
9566     }
9567   friendp = decl_spec_seq_has_spec_p (declspecs, ds_friend);
9568 
9569   /* Issue errors about use of storage classes for parameters.  */
9570   if (decl_context == PARM)
9571     {
9572       if (typedef_p)
9573 	{
9574 	  error ("typedef declaration invalid in parameter declaration");
9575 	  return error_mark_node;
9576 	}
9577       else if (template_parm_flag && storage_class != sc_none)
9578 	{
9579 	  error ("storage class specified for template parameter %qs", name);
9580 	  return error_mark_node;
9581 	}
9582       else if (storage_class == sc_static
9583 	       || storage_class == sc_extern
9584 	       || thread_p)
9585 	error ("storage class specifiers invalid in parameter declarations");
9586 
9587       /* Function parameters cannot be constexpr.  If we saw one, moan
9588          and pretend it wasn't there.  */
9589       if (constexpr_p)
9590         {
9591           error ("a parameter cannot be declared %<constexpr%>");
9592           constexpr_p = 0;
9593         }
9594     }
9595 
9596   /* Give error if `virtual' is used outside of class declaration.  */
9597   if (virtualp
9598       && (current_class_name == NULL_TREE || decl_context != FIELD))
9599     {
9600       error ("%<virtual%> outside class declaration");
9601       virtualp = 0;
9602     }
9603 
9604   /* Static anonymous unions are dealt with here.  */
9605   if (staticp && decl_context == TYPENAME
9606       && declspecs->type
9607       && ANON_AGGR_TYPE_P (declspecs->type))
9608     decl_context = FIELD;
9609 
9610   /* Warn about storage classes that are invalid for certain
9611      kinds of declarations (parameters, typenames, etc.).  */
9612   if (thread_p
9613       && ((storage_class
9614 	   && storage_class != sc_extern
9615 	   && storage_class != sc_static)
9616 	  || typedef_p))
9617     {
9618       error ("multiple storage classes in declaration of %qs", name);
9619       thread_p = false;
9620     }
9621   if (decl_context != NORMAL
9622       && ((storage_class != sc_none
9623 	   && storage_class != sc_mutable)
9624 	  || thread_p))
9625     {
9626       if ((decl_context == PARM || decl_context == CATCHPARM)
9627 	  && (storage_class == sc_register
9628 	      || storage_class == sc_auto))
9629 	;
9630       else if (typedef_p)
9631 	;
9632       else if (decl_context == FIELD
9633 	       /* C++ allows static class elements.  */
9634 	       && storage_class == sc_static)
9635 	/* C++ also allows inlines and signed and unsigned elements,
9636 	   but in those cases we don't come in here.  */
9637 	;
9638       else
9639 	{
9640 	  if (decl_context == FIELD)
9641 	    error ("storage class specified for %qs", name);
9642 	  else
9643 	    {
9644 	      if (decl_context == PARM || decl_context == CATCHPARM)
9645 		error ("storage class specified for parameter %qs", name);
9646 	      else
9647 		error ("storage class specified for typename");
9648 	    }
9649 	  if (storage_class == sc_register
9650 	      || storage_class == sc_auto
9651 	      || storage_class == sc_extern
9652 	      || thread_p)
9653 	    storage_class = sc_none;
9654 	}
9655     }
9656   else if (storage_class == sc_extern && funcdef_flag
9657 	   && ! toplevel_bindings_p ())
9658     error ("nested function %qs declared %<extern%>", name);
9659   else if (toplevel_bindings_p ())
9660     {
9661       if (storage_class == sc_auto)
9662 	error ("top-level declaration of %qs specifies %<auto%>", name);
9663     }
9664   else if (thread_p
9665 	   && storage_class != sc_extern
9666 	   && storage_class != sc_static)
9667     {
9668       if (declspecs->gnu_thread_keyword_p)
9669 	pedwarn (input_location, 0, "function-scope %qs implicitly auto and "
9670 		 "declared %<__thread%>", name);
9671 
9672       /* When thread_local is applied to a variable of block scope the
9673 	 storage-class-specifier static is implied if it does not appear
9674 	 explicitly.  */
9675       storage_class = declspecs->storage_class = sc_static;
9676       staticp = 1;
9677     }
9678 
9679   if (storage_class && friendp)
9680     {
9681       error ("storage class specifiers invalid in friend function declarations");
9682       storage_class = sc_none;
9683       staticp = 0;
9684     }
9685 
9686   if (!id_declarator)
9687     unqualified_id = NULL_TREE;
9688   else
9689     {
9690       unqualified_id = id_declarator->u.id.unqualified_name;
9691       switch (TREE_CODE (unqualified_id))
9692 	{
9693 	case BIT_NOT_EXPR:
9694 	  unqualified_id = TREE_OPERAND (unqualified_id, 0);
9695 	  if (TYPE_P (unqualified_id))
9696 	    unqualified_id = constructor_name (unqualified_id);
9697 	  break;
9698 
9699 	case IDENTIFIER_NODE:
9700 	case TEMPLATE_ID_EXPR:
9701 	  break;
9702 
9703 	default:
9704 	  gcc_unreachable ();
9705 	}
9706     }
9707 
9708   if (declspecs->std_attributes)
9709     {
9710       /* Apply the c++11 attributes to the type preceding them.  */
9711       input_location = declspecs->locations[ds_std_attribute];
9712       decl_attributes (&type, declspecs->std_attributes, 0);
9713       input_location = saved_loc;
9714     }
9715 
9716   /* Determine the type of the entity declared by recurring on the
9717      declarator.  */
9718   for (; declarator; declarator = declarator->declarator)
9719     {
9720       const cp_declarator *inner_declarator;
9721       tree attrs;
9722 
9723       if (type == error_mark_node)
9724 	return error_mark_node;
9725 
9726       attrs = declarator->attributes;
9727       if (attrs)
9728 	{
9729 	  int attr_flags;
9730 
9731 	  attr_flags = 0;
9732 	  if (declarator == NULL || declarator->kind == cdk_id)
9733 	    attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
9734 	  if (declarator->kind == cdk_function)
9735 	    attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
9736 	  if (declarator->kind == cdk_array)
9737 	    attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
9738 	  returned_attrs = decl_attributes (&type,
9739 					    chainon (returned_attrs, attrs),
9740 					    attr_flags);
9741 	}
9742 
9743       if (declarator->kind == cdk_id)
9744 	break;
9745 
9746       inner_declarator = declarator->declarator;
9747 
9748       switch (declarator->kind)
9749 	{
9750 	case cdk_array:
9751 	  type = create_array_type_for_decl (dname, type,
9752 					     declarator->u.array.bounds);
9753 	  if (declarator->std_attributes)
9754 	    /* [dcl.array]/1:
9755 
9756 	       The optional attribute-specifier-seq appertains to the
9757 	       array.  */
9758 	    returned_attrs = chainon (returned_attrs,
9759 				      declarator->std_attributes);
9760 	  break;
9761 
9762 	case cdk_function:
9763 	  {
9764 	    tree arg_types;
9765 	    int funcdecl_p;
9766 
9767 	    /* Declaring a function type.
9768 	       Make sure we have a valid type for the function to return.  */
9769 
9770 	    if (type_quals != TYPE_UNQUALIFIED)
9771 	      {
9772 		if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
9773 		  warning (OPT_Wignored_qualifiers,
9774 			   "type qualifiers ignored on function return type");
9775 		/* We now know that the TYPE_QUALS don't apply to the
9776 		   decl, but to its return type.  */
9777 		type_quals = TYPE_UNQUALIFIED;
9778 	      }
9779 	    errmsg = targetm.invalid_return_type (type);
9780 	    if (errmsg)
9781 	      {
9782 		error (errmsg);
9783 		type = integer_type_node;
9784 	      }
9785 
9786 	    /* Error about some types functions can't return.  */
9787 
9788 	    if (TREE_CODE (type) == FUNCTION_TYPE)
9789 	      {
9790 		error ("%qs declared as function returning a function", name);
9791 		return error_mark_node;
9792 	      }
9793 	    if (TREE_CODE (type) == ARRAY_TYPE)
9794 	      {
9795 		error ("%qs declared as function returning an array", name);
9796 		return error_mark_node;
9797 	      }
9798 
9799 	    input_location = declspecs->locations[ds_type_spec];
9800 	    abstract_virtuals_error (ACU_RETURN, type);
9801 	    input_location = saved_loc;
9802 
9803 	    /* Pick up type qualifiers which should be applied to `this'.  */
9804 	    memfn_quals = declarator->u.function.qualifiers;
9805 	    /* Pick up virt-specifiers.  */
9806             virt_specifiers = declarator->u.function.virt_specifiers;
9807 	    /* And ref-qualifier, too */
9808 	    rqual = declarator->u.function.ref_qualifier;
9809 	    /* Pick up the exception specifications.  */
9810 	    raises = declarator->u.function.exception_specification;
9811 	    /* If the exception-specification is ill-formed, let's pretend
9812 	       there wasn't one.  */
9813 	    if (raises == error_mark_node)
9814 	      raises = NULL_TREE;
9815 
9816 	    /* Say it's a definition only for the CALL_EXPR
9817 	       closest to the identifier.  */
9818 	    funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
9819 
9820 	    /* Handle a late-specified return type.  */
9821 	    if (funcdecl_p)
9822 	      {
9823 		if (type_uses_auto (type))
9824 		  {
9825 		    if (!declarator->u.function.late_return_type)
9826 		      {
9827 			if (current_class_type
9828 			    && LAMBDA_TYPE_P (current_class_type))
9829 			  /* OK for C++11 lambdas.  */;
9830 			else if (cxx_dialect < cxx14)
9831 			  {
9832 			    error ("%qs function uses "
9833 				   "%<auto%> type specifier without trailing "
9834 				   "return type", name);
9835 			    inform (input_location, "deduced return type "
9836 				    "only available with -std=c++14 or "
9837 				    "-std=gnu++14");
9838 			  }
9839 			else if (virtualp)
9840 			  {
9841 			    error ("virtual function cannot "
9842 				   "have deduced return type");
9843 			    virtualp = false;
9844 			  }
9845 		      }
9846 		    else if (!is_auto (type))
9847 		      {
9848 			error ("%qs function with trailing return type has"
9849 			       " %qT as its type rather than plain %<auto%>",
9850 			       name, type);
9851 			return error_mark_node;
9852 		      }
9853 		  }
9854 		else if (declarator->u.function.late_return_type)
9855 		  {
9856 		    if (cxx_dialect < cxx11)
9857 		      /* Not using maybe_warn_cpp0x because this should
9858 			 always be an error.  */
9859 		      error ("trailing return type only available with "
9860 			     "-std=c++11 or -std=gnu++11");
9861 		    else
9862 		      error ("%qs function with trailing return type not "
9863 			     "declared with %<auto%> type specifier", name);
9864 		    return error_mark_node;
9865 		  }
9866 	      }
9867 	    type = splice_late_return_type
9868 	      (type, declarator->u.function.late_return_type);
9869 	    if (type == error_mark_node)
9870 	      return error_mark_node;
9871 
9872 	    if (declarator->u.function.late_return_type)
9873 	      late_return_type_p = true;
9874 
9875 	    if (ctype == NULL_TREE
9876 		&& decl_context == FIELD
9877 		&& funcdecl_p
9878 		&& friendp == 0)
9879 	      ctype = current_class_type;
9880 
9881 	    if (ctype && (sfk == sfk_constructor
9882 			  || sfk == sfk_destructor))
9883 	      {
9884 		/* We are within a class's scope. If our declarator name
9885 		   is the same as the class name, and we are defining
9886 		   a function, then it is a constructor/destructor, and
9887 		   therefore returns a void type.  */
9888 
9889 		/* ISO C++ 12.4/2.  A destructor may not be declared
9890 		   const or volatile.  A destructor may not be static.
9891 		   A destructor may not be declared with ref-qualifier.
9892 
9893 		   ISO C++ 12.1.  A constructor may not be declared
9894 		   const or volatile.  A constructor may not be
9895 		   virtual.  A constructor may not be static.
9896 		   A constructor may not be declared with ref-qualifier. */
9897 		if (staticp == 2)
9898 		  error ((flags == DTOR_FLAG)
9899 			 ? G_("destructor cannot be static member function")
9900 			 : G_("constructor cannot be static member function"));
9901 		if (memfn_quals)
9902 		  {
9903 		    error ((flags == DTOR_FLAG)
9904 			   ? G_("destructors may not be cv-qualified")
9905 			   : G_("constructors may not be cv-qualified"));
9906 		    memfn_quals = TYPE_UNQUALIFIED;
9907 		  }
9908 
9909 		if (rqual)
9910 		  {
9911 		    maybe_warn_cpp0x (CPP0X_REF_QUALIFIER);
9912 		    error ((flags == DTOR_FLAG)
9913 			   ? "destructors may not be ref-qualified"
9914 			   : "constructors may not be ref-qualified");
9915 		    rqual = REF_QUAL_NONE;
9916 		  }
9917 
9918 		if (decl_context == FIELD
9919 		    && !member_function_or_else (ctype,
9920 						 current_class_type,
9921 						 flags))
9922 		  return error_mark_node;
9923 
9924 		if (flags != DTOR_FLAG)
9925 		  {
9926 		    /* It's a constructor.  */
9927 		    if (explicitp == 1)
9928 		      explicitp = 2;
9929 		    if (virtualp)
9930 		      {
9931 			permerror (input_location, "constructors cannot be declared virtual");
9932 			virtualp = 0;
9933 		      }
9934 		    if (decl_context == FIELD
9935 			&& sfk != sfk_constructor)
9936 		      return error_mark_node;
9937 		  }
9938 		if (decl_context == FIELD)
9939 		  staticp = 0;
9940 	      }
9941 	    else if (friendp)
9942 	      {
9943 		if (virtualp)
9944 		  {
9945 		    /* Cannot be both friend and virtual.  */
9946 		    error ("virtual functions cannot be friends");
9947 		    friendp = 0;
9948 		  }
9949 		if (decl_context == NORMAL)
9950 		  error ("friend declaration not in class definition");
9951 		if (current_function_decl && funcdef_flag)
9952 		  error ("can%'t define friend function %qs in a local "
9953 			 "class definition",
9954 			 name);
9955 	      }
9956 	    else if (ctype && sfk == sfk_conversion)
9957 	      {
9958 		if (explicitp == 1)
9959 		  {
9960 		    maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION);
9961 		    explicitp = 2;
9962 		  }
9963 	      }
9964 
9965 	    arg_types = grokparms (declarator->u.function.parameters,
9966 				   &parms);
9967 
9968 	    if (inner_declarator
9969 		&& inner_declarator->kind == cdk_id
9970 		&& inner_declarator->u.id.sfk == sfk_destructor
9971 		&& arg_types != void_list_node)
9972 	      {
9973 		error ("destructors may not have parameters");
9974 		arg_types = void_list_node;
9975 		parms = NULL_TREE;
9976 	      }
9977 
9978 	    type = build_function_type (type, arg_types);
9979 	    if (declarator->std_attributes)
9980 	      /* [dcl.fct]/2:
9981 
9982 		 The optional attribute-specifier-seq appertains to
9983 		 the function type.  */
9984 	      decl_attributes (&type, declarator->std_attributes,
9985 			       0);
9986 	  }
9987 	  break;
9988 
9989 	case cdk_pointer:
9990 	case cdk_reference:
9991 	case cdk_ptrmem:
9992 	  /* Filter out pointers-to-references and references-to-references.
9993 	     We can get these if a TYPE_DECL is used.  */
9994 
9995 	  if (TREE_CODE (type) == REFERENCE_TYPE)
9996 	    {
9997 	      if (declarator->kind != cdk_reference)
9998 		{
9999 		  error ("cannot declare pointer to %q#T", type);
10000 		  type = TREE_TYPE (type);
10001 		}
10002 
10003 	      /* In C++0x, we allow reference to reference declarations
10004 		 that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
10005 		 and template type arguments [14.3.1/4 temp.arg.type]. The
10006 		 check for direct reference to reference declarations, which
10007 		 are still forbidden, occurs below. Reasoning behind the change
10008 		 can be found in DR106, DR540, and the rvalue reference
10009 		 proposals. */
10010 	      else if (cxx_dialect == cxx98)
10011 		{
10012 		  error ("cannot declare reference to %q#T", type);
10013 		  type = TREE_TYPE (type);
10014 		}
10015 	    }
10016 	  else if (VOID_TYPE_P (type))
10017 	    {
10018 	      if (declarator->kind == cdk_reference)
10019 		error ("cannot declare reference to %q#T", type);
10020 	      else if (declarator->kind == cdk_ptrmem)
10021 		error ("cannot declare pointer to %q#T member", type);
10022 	    }
10023 
10024 	  /* We now know that the TYPE_QUALS don't apply to the decl,
10025 	     but to the target of the pointer.  */
10026 	  type_quals = TYPE_UNQUALIFIED;
10027 
10028 	  /* This code used to handle METHOD_TYPE, but I don't think it's
10029 	     possible to get it here anymore.  */
10030 	  gcc_assert (TREE_CODE (type) != METHOD_TYPE);
10031 	  if (declarator->kind == cdk_ptrmem
10032 	      && TREE_CODE (type) == FUNCTION_TYPE)
10033 	    {
10034 	      memfn_quals |= type_memfn_quals (type);
10035 	      type = build_memfn_type (type,
10036 				       declarator->u.pointer.class_type,
10037 				       memfn_quals,
10038 				       rqual);
10039 	      if (type == error_mark_node)
10040 		return error_mark_node;
10041 
10042 	      rqual = REF_QUAL_NONE;
10043 	      memfn_quals = TYPE_UNQUALIFIED;
10044 	    }
10045 
10046 	  if (TREE_CODE (type) == FUNCTION_TYPE
10047 	      && (type_memfn_quals (type) != TYPE_UNQUALIFIED
10048 		  || type_memfn_rqual (type) != REF_QUAL_NONE))
10049             error (declarator->kind == cdk_reference
10050                    ? G_("cannot declare reference to qualified function type %qT")
10051                    : G_("cannot declare pointer to qualified function type %qT"),
10052 		   type);
10053 
10054 	  /* When the pointed-to type involves components of variable size,
10055 	     care must be taken to ensure that the size evaluation code is
10056 	     emitted early enough to dominate all the possible later uses
10057 	     and late enough for the variables on which it depends to have
10058 	     been assigned.
10059 
10060 	     This is expected to happen automatically when the pointed-to
10061 	     type has a name/declaration of it's own, but special attention
10062 	     is required if the type is anonymous.
10063 
10064 	     We handle the NORMAL and FIELD contexts here by inserting a
10065 	     dummy statement that just evaluates the size at a safe point
10066 	     and ensures it is not deferred until e.g. within a deeper
10067 	     conditional context (c++/43555).
10068 
10069 	     We expect nothing to be needed here for PARM or TYPENAME.
10070 	     Evaluating the size at this point for TYPENAME would
10071 	     actually be incorrect, as we might be in the middle of an
10072 	     expression with side effects on the pointed-to type size
10073 	     "arguments" prior to the pointer declaration point and the
10074 	     size evaluation could end up prior to the side effects.  */
10075 
10076 	  if (!TYPE_NAME (type)
10077 	      && (decl_context == NORMAL || decl_context == FIELD)
10078 	      && at_function_scope_p ()
10079 	      && variably_modified_type_p (type, NULL_TREE))
10080 	    /* Force evaluation of the SAVE_EXPR.  */
10081 	    finish_expr_stmt (TYPE_SIZE (type));
10082 
10083 	  if (declarator->kind == cdk_reference)
10084 	    {
10085 	      /* In C++0x, the type we are creating a reference to might be
10086 		 a typedef which is itself a reference type. In that case,
10087 		 we follow the reference collapsing rules in
10088 		 [7.1.3/8 dcl.typedef] to create the final reference type:
10089 
10090 		 "If a typedef TD names a type that is a reference to a type
10091 		 T, an attempt to create the type 'lvalue reference to cv TD'
10092 		 creates the type 'lvalue reference to T,' while an attempt
10093 		 to create the type "rvalue reference to cv TD' creates the
10094 		 type TD."
10095               */
10096 	      if (VOID_TYPE_P (type))
10097 		/* We already gave an error.  */;
10098 	      else if (TREE_CODE (type) == REFERENCE_TYPE)
10099 		{
10100 		  if (declarator->u.reference.rvalue_ref)
10101 		    /* Leave type alone.  */;
10102 		  else
10103 		    type = cp_build_reference_type (TREE_TYPE (type), false);
10104 		}
10105 	      else
10106 		type = cp_build_reference_type
10107 		  (type, declarator->u.reference.rvalue_ref);
10108 
10109 	      /* In C++0x, we need this check for direct reference to
10110 		 reference declarations, which are forbidden by
10111 		 [8.3.2/5 dcl.ref]. Reference to reference declarations
10112 		 are only allowed indirectly through typedefs and template
10113 		 type arguments. Example:
10114 
10115 		   void foo(int & &);      // invalid ref-to-ref decl
10116 
10117 		   typedef int & int_ref;
10118 		   void foo(int_ref &);    // valid ref-to-ref decl
10119 	      */
10120 	      if (inner_declarator && inner_declarator->kind == cdk_reference)
10121 		error ("cannot declare reference to %q#T, which is not "
10122 		       "a typedef or a template type argument", type);
10123 	    }
10124 	  else if (TREE_CODE (type) == METHOD_TYPE)
10125 	    type = build_ptrmemfunc_type (build_pointer_type (type));
10126 	  else if (declarator->kind == cdk_ptrmem)
10127 	    {
10128 	      gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
10129 			  != NAMESPACE_DECL);
10130 	      if (declarator->u.pointer.class_type == error_mark_node)
10131 		/* We will already have complained.  */
10132 		type = error_mark_node;
10133 	      else
10134 		type = build_ptrmem_type (declarator->u.pointer.class_type,
10135 					  type);
10136 	    }
10137 	  else
10138 	    type = build_pointer_type (type);
10139 
10140 	  /* Process a list of type modifier keywords (such as
10141 	     const or volatile) that were given inside the `*' or `&'.  */
10142 
10143 	  if (declarator->u.pointer.qualifiers)
10144 	    {
10145 	      type
10146 		= cp_build_qualified_type (type,
10147 					   declarator->u.pointer.qualifiers);
10148 	      type_quals = cp_type_quals (type);
10149 	    }
10150 
10151 	  /* Apply C++11 attributes to the pointer, and not to the
10152 	     type pointed to.  This is unlike what is done for GNU
10153 	     attributes above.  It is to comply with [dcl.ptr]/1:
10154 
10155 		 [the optional attribute-specifier-seq (7.6.1) appertains
10156 		  to the pointer and not to the object pointed to].  */
10157 	  if (declarator->std_attributes)
10158 	    decl_attributes (&type, declarator->std_attributes,
10159 			     0);
10160 
10161 	  ctype = NULL_TREE;
10162 	  break;
10163 
10164 	case cdk_error:
10165 	  break;
10166 
10167 	default:
10168 	  gcc_unreachable ();
10169 	}
10170     }
10171 
10172   /* A `constexpr' specifier used in an object declaration declares
10173      the object as `const'.  */
10174   if (constexpr_p && innermost_code != cdk_function)
10175     {
10176       /* DR1688 says that a `constexpr' specifier in combination with
10177 	 `volatile' is valid.  */
10178 
10179       if (TREE_CODE (type) != REFERENCE_TYPE)
10180 	{
10181 	  type_quals |= TYPE_QUAL_CONST;
10182 	  type = cp_build_qualified_type (type, type_quals);
10183 	}
10184     }
10185 
10186   if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
10187       && TREE_CODE (type) != FUNCTION_TYPE
10188       && TREE_CODE (type) != METHOD_TYPE
10189       && !variable_template_p (TREE_OPERAND (unqualified_id, 0)))
10190     {
10191       error ("template-id %qD used as a declarator",
10192 	     unqualified_id);
10193       unqualified_id = dname;
10194     }
10195 
10196   /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
10197      qualified with a class-name, turn it into a METHOD_TYPE, unless
10198      we know that the function is static.  We take advantage of this
10199      opportunity to do other processing that pertains to entities
10200      explicitly declared to be class members.  Note that if DECLARATOR
10201      is non-NULL, we know it is a cdk_id declarator; otherwise, we
10202      would not have exited the loop above.  */
10203   if (declarator
10204       && declarator->u.id.qualifying_scope
10205       && MAYBE_CLASS_TYPE_P (declarator->u.id.qualifying_scope))
10206     {
10207       ctype = declarator->u.id.qualifying_scope;
10208       ctype = TYPE_MAIN_VARIANT (ctype);
10209       template_count = num_template_headers_for_class (ctype);
10210 
10211       if (ctype == current_class_type)
10212 	{
10213 	  if (friendp)
10214 	    {
10215 	      permerror (input_location, "member functions are implicitly friends of their class");
10216 	      friendp = 0;
10217 	    }
10218 	  else
10219 	    permerror (declarator->id_loc,
10220 			  "extra qualification %<%T::%> on member %qs",
10221 			  ctype, name);
10222 	}
10223       else if (/* If the qualifying type is already complete, then we
10224 		  can skip the following checks.  */
10225 	       !COMPLETE_TYPE_P (ctype)
10226 	       && (/* If the function is being defined, then
10227 		      qualifying type must certainly be complete.  */
10228 		   funcdef_flag
10229 		   /* A friend declaration of "T::f" is OK, even if
10230 		      "T" is a template parameter.  But, if this
10231 		      function is not a friend, the qualifying type
10232 		      must be a class.  */
10233 		   || (!friendp && !CLASS_TYPE_P (ctype))
10234 		   /* For a declaration, the type need not be
10235 		      complete, if either it is dependent (since there
10236 		      is no meaningful definition of complete in that
10237 		      case) or the qualifying class is currently being
10238 		      defined.  */
10239 		   || !(dependent_type_p (ctype)
10240 			|| currently_open_class (ctype)))
10241 	       /* Check that the qualifying type is complete.  */
10242 	       && !complete_type_or_else (ctype, NULL_TREE))
10243 	return error_mark_node;
10244       else if (TREE_CODE (type) == FUNCTION_TYPE)
10245 	{
10246 	  if (current_class_type
10247 	      && (!friendp || funcdef_flag))
10248 	    {
10249 	      error (funcdef_flag
10250 		     ? G_("cannot define member function %<%T::%s%> "
10251 			  "within %<%T%>")
10252 		     : G_("cannot declare member function %<%T::%s%> "
10253 			  "within %<%T%>"),
10254 		     ctype, name, current_class_type);
10255 	      return error_mark_node;
10256 	    }
10257 	}
10258       else if (typedef_p && current_class_type)
10259 	{
10260 	  error ("cannot declare member %<%T::%s%> within %qT",
10261 		 ctype, name, current_class_type);
10262 	  return error_mark_node;
10263 	}
10264     }
10265 
10266   if (ctype == NULL_TREE && decl_context == FIELD && friendp == 0)
10267     ctype = current_class_type;
10268 
10269   /* Now TYPE has the actual type.  */
10270 
10271   if (returned_attrs)
10272     {
10273       if (attrlist)
10274 	*attrlist = chainon (returned_attrs, *attrlist);
10275       else
10276 	attrlist = &returned_attrs;
10277     }
10278 
10279   if (declarator
10280       && declarator->kind == cdk_id
10281       && declarator->std_attributes)
10282     /* [dcl.meaning]/1: The optional attribute-specifier-seq following
10283        a declarator-id appertains to the entity that is declared.  */
10284     *attrlist = chainon (*attrlist, declarator->std_attributes);
10285 
10286   /* Handle parameter packs. */
10287   if (parameter_pack_p)
10288     {
10289       if (decl_context == PARM)
10290         /* Turn the type into a pack expansion.*/
10291         type = make_pack_expansion (type);
10292       else
10293         error ("non-parameter %qs cannot be a parameter pack", name);
10294     }
10295 
10296   /* Did array size calculations overflow or does the array cover more
10297      than half of the address-space?  */
10298   if (TREE_CODE (type) == ARRAY_TYPE
10299       && COMPLETE_TYPE_P (type)
10300       && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
10301       && ! valid_constant_size_p (TYPE_SIZE_UNIT (type)))
10302     {
10303       error ("size of array %qs is too large", name);
10304       /* If we proceed with the array type as it is, we'll eventually
10305 	 crash in tree_to_[su]hwi().  */
10306       type = error_mark_node;
10307     }
10308 
10309   if ((decl_context == FIELD || decl_context == PARM)
10310       && !processing_template_decl
10311       && variably_modified_type_p (type, NULL_TREE))
10312     {
10313       if (decl_context == FIELD)
10314 	error ("data member may not have variably modified type %qT", type);
10315       else
10316 	error ("parameter may not have variably modified type %qT", type);
10317       type = error_mark_node;
10318     }
10319 
10320   if (explicitp == 1 || (explicitp && friendp))
10321     {
10322       /* [dcl.fct.spec] (C++11) The explicit specifier shall be used only
10323 	 in the declaration of a constructor or conversion function within
10324 	 a class definition.  */
10325       if (!current_class_type)
10326 	error ("%<explicit%> outside class declaration");
10327       else if (friendp)
10328 	error ("%<explicit%> in friend declaration");
10329       else
10330 	error ("only declarations of constructors and conversion operators "
10331 	       "can be %<explicit%>");
10332       explicitp = 0;
10333     }
10334 
10335   if (storage_class == sc_mutable)
10336     {
10337       if (decl_context != FIELD || friendp)
10338 	{
10339 	  error ("non-member %qs cannot be declared %<mutable%>", name);
10340 	  storage_class = sc_none;
10341 	}
10342       else if (decl_context == TYPENAME || typedef_p)
10343 	{
10344 	  error ("non-object member %qs cannot be declared %<mutable%>", name);
10345 	  storage_class = sc_none;
10346 	}
10347       else if (TREE_CODE (type) == FUNCTION_TYPE
10348 	       || TREE_CODE (type) == METHOD_TYPE)
10349 	{
10350 	  error ("function %qs cannot be declared %<mutable%>", name);
10351 	  storage_class = sc_none;
10352 	}
10353       else if (staticp)
10354 	{
10355 	  error ("static %qs cannot be declared %<mutable%>", name);
10356 	  storage_class = sc_none;
10357 	}
10358       else if (type_quals & TYPE_QUAL_CONST)
10359 	{
10360 	  error ("const %qs cannot be declared %<mutable%>", name);
10361 	  storage_class = sc_none;
10362 	}
10363       else if (TREE_CODE (type) == REFERENCE_TYPE)
10364 	{
10365 	  permerror (input_location, "reference %qs cannot be declared "
10366 	             "%<mutable%>", name);
10367 	  storage_class = sc_none;
10368 	}
10369     }
10370 
10371   /* If this is declaring a typedef name, return a TYPE_DECL.  */
10372   if (typedef_p && decl_context != TYPENAME)
10373     {
10374       tree decl;
10375 
10376       /* Note that the grammar rejects storage classes
10377 	 in typenames, fields or parameters.  */
10378       if (current_lang_name == lang_name_java)
10379 	TYPE_FOR_JAVA (type) = 1;
10380 
10381       /* This declaration:
10382 
10383 	   typedef void f(int) const;
10384 
10385 	 declares a function type which is not a member of any
10386 	 particular class, but which is cv-qualified; for
10387 	 example "f S::*" declares a pointer to a const-qualified
10388 	 member function of S.  We record the cv-qualification in the
10389 	 function type.  */
10390       if ((rqual || memfn_quals) && TREE_CODE (type) == FUNCTION_TYPE)
10391         {
10392           type = apply_memfn_quals (type, memfn_quals, rqual);
10393 
10394           /* We have now dealt with these qualifiers.  */
10395           memfn_quals = TYPE_UNQUALIFIED;
10396 	  rqual = REF_QUAL_NONE;
10397         }
10398 
10399       if (type_uses_auto (type))
10400 	{
10401 	  error ("typedef declared %<auto%>");
10402 	  type = error_mark_node;
10403 	}
10404 
10405       if (decl_context == FIELD)
10406 	decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
10407       else
10408 	decl = build_decl (input_location, TYPE_DECL, unqualified_id, type);
10409       if (id_declarator && declarator->u.id.qualifying_scope) {
10410 	error_at (DECL_SOURCE_LOCATION (decl),
10411 		  "typedef name may not be a nested-name-specifier");
10412 	TREE_TYPE (decl) = error_mark_node;
10413       }
10414 
10415       if (decl_context != FIELD)
10416 	{
10417 	  if (!current_function_decl)
10418 	    DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
10419 	  else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
10420 		   || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
10421 		       (current_function_decl)))
10422 	    /* The TYPE_DECL is "abstract" because there will be
10423 	       clones of this constructor/destructor, and there will
10424 	       be copies of this TYPE_DECL generated in those
10425 	       clones.  The decloning optimization (for space) may
10426                revert this subsequently if it determines that
10427                the clones should share a common implementation.  */
10428 	    DECL_ABSTRACT_P (decl) = true;
10429 	}
10430       else if (current_class_type
10431 	       && constructor_name_p (unqualified_id, current_class_type))
10432 	permerror (input_location, "ISO C++ forbids nested type %qD with same name "
10433 		   "as enclosing class",
10434 		   unqualified_id);
10435 
10436       /* If the user declares "typedef struct {...} foo" then the
10437 	 struct will have an anonymous name.  Fill that name in now.
10438 	 Nothing can refer to it, so nothing needs know about the name
10439 	 change.  */
10440       if (type != error_mark_node
10441 	  && unqualified_id
10442 	  && TYPE_NAME (type)
10443 	  && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
10444 	  && TYPE_ANONYMOUS_P (type)
10445 	  && declspecs->type_definition_p
10446 	  && attributes_naming_typedef_ok (*attrlist)
10447 	  && cp_type_quals (type) == TYPE_UNQUALIFIED)
10448 	{
10449 	  tree t;
10450 
10451 	  /* Replace the anonymous name with the real name everywhere.  */
10452 	  for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
10453 	    {
10454 	      if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
10455 		/* We do not rename the debug info representing the
10456 		   anonymous tagged type because the standard says in
10457 		   [dcl.typedef] that the naming applies only for
10458 		   linkage purposes.  */
10459 		/*debug_hooks->set_name (t, decl);*/
10460 		TYPE_NAME (t) = decl;
10461   	    }
10462 
10463 	  if (TYPE_LANG_SPECIFIC (type))
10464 	    TYPE_WAS_ANONYMOUS (type) = 1;
10465 
10466 	  /* If this is a typedef within a template class, the nested
10467 	     type is a (non-primary) template.  The name for the
10468 	     template needs updating as well.  */
10469 	  if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
10470 	    DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
10471 	      = TYPE_IDENTIFIER (type);
10472 
10473 	  /* Adjust linkage now that we aren't anonymous anymore.  */
10474 	  reset_type_linkage (type);
10475 
10476 	  /* FIXME remangle member functions; member functions of a
10477 	     type with external linkage have external linkage.  */
10478 	}
10479 
10480       if (signed_p
10481 	  || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
10482 	C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
10483 
10484       bad_specifiers (decl, BSP_TYPE, virtualp,
10485 		      memfn_quals != TYPE_UNQUALIFIED,
10486 		      inlinep, friendp, raises != NULL_TREE);
10487 
10488       if (decl_spec_seq_has_spec_p (declspecs, ds_alias))
10489 	/* Acknowledge that this was written:
10490 	     `using analias = atype;'.  */
10491 	TYPE_DECL_ALIAS_P (decl) = 1;
10492 
10493       return decl;
10494     }
10495 
10496   /* Detect the case of an array type of unspecified size
10497      which came, as such, direct from a typedef name.
10498      We must copy the type, so that the array's domain can be
10499      individually set by the object's initializer.  */
10500 
10501   if (type && typedef_type
10502       && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
10503       && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
10504     type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
10505 
10506   /* Detect where we're using a typedef of function type to declare a
10507      function. PARMS will not be set, so we must create it now.  */
10508 
10509   if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
10510     {
10511       tree decls = NULL_TREE;
10512       tree args;
10513 
10514       for (args = TYPE_ARG_TYPES (type);
10515 	   args && args != void_list_node;
10516 	   args = TREE_CHAIN (args))
10517 	{
10518 	  tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
10519 
10520 	  DECL_CHAIN (decl) = decls;
10521 	  decls = decl;
10522 	}
10523 
10524       parms = nreverse (decls);
10525 
10526       if (decl_context != TYPENAME)
10527 	{
10528 	  /* The qualifiers on the function type become the qualifiers on
10529 	     the non-static member function. */
10530 	  memfn_quals |= type_memfn_quals (type);
10531 	  rqual = type_memfn_rqual (type);
10532 	  type_quals = TYPE_UNQUALIFIED;
10533 	}
10534     }
10535 
10536   /* If this is a type name (such as, in a cast or sizeof),
10537      compute the type and return it now.  */
10538 
10539   if (decl_context == TYPENAME)
10540     {
10541       /* Note that the grammar rejects storage classes
10542 	 in typenames, fields or parameters.  */
10543       if (type_quals != TYPE_UNQUALIFIED)
10544 	type_quals = TYPE_UNQUALIFIED;
10545 
10546       /* Special case: "friend class foo" looks like a TYPENAME context.  */
10547       if (friendp)
10548 	{
10549 	  if (type_quals != TYPE_UNQUALIFIED)
10550 	    {
10551 	      error ("type qualifiers specified for friend class declaration");
10552 	      type_quals = TYPE_UNQUALIFIED;
10553 	    }
10554 	  if (inlinep)
10555 	    {
10556 	      error ("%<inline%> specified for friend class declaration");
10557 	      inlinep = 0;
10558 	    }
10559 
10560 	  if (!current_aggr)
10561 	    {
10562 	      /* Don't allow friend declaration without a class-key.  */
10563 	      if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
10564 		permerror (input_location, "template parameters cannot be friends");
10565 	      else if (TREE_CODE (type) == TYPENAME_TYPE)
10566 		permerror (input_location, "friend declaration requires class-key, "
10567 			   "i.e. %<friend class %T::%D%>",
10568 			   TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
10569 	      else
10570 		permerror (input_location, "friend declaration requires class-key, "
10571 			   "i.e. %<friend %#T%>",
10572 			   type);
10573 	    }
10574 
10575 	  /* Only try to do this stuff if we didn't already give up.  */
10576 	  if (type != integer_type_node)
10577 	    {
10578 	      /* A friendly class?  */
10579 	      if (current_class_type)
10580 		make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
10581 				   /*complain=*/true);
10582 	      else
10583 		error ("trying to make class %qT a friend of global scope",
10584 		       type);
10585 
10586 	      type = void_type_node;
10587 	    }
10588 	}
10589       else if (memfn_quals || rqual)
10590 	{
10591 	  if (ctype == NULL_TREE
10592 	      && TREE_CODE (type) == METHOD_TYPE)
10593 	    ctype = TYPE_METHOD_BASETYPE (type);
10594 
10595 	  if (ctype)
10596 	    type = build_memfn_type (type, ctype, memfn_quals, rqual);
10597 	  /* Core issue #547: need to allow this in template type args.
10598 	     Allow it in general in C++11 for alias-declarations.  */
10599 	  else if ((template_type_arg || cxx_dialect >= cxx11)
10600 		   && TREE_CODE (type) == FUNCTION_TYPE)
10601 	    type = apply_memfn_quals (type, memfn_quals, rqual);
10602 	  else
10603 	    error ("invalid qualifiers on non-member function type");
10604 	}
10605 
10606       return type;
10607     }
10608   else if (unqualified_id == NULL_TREE && decl_context != PARM
10609 	   && decl_context != CATCHPARM
10610 	   && TREE_CODE (type) != UNION_TYPE
10611 	   && ! bitfield)
10612     {
10613       error ("abstract declarator %qT used as declaration", type);
10614       return error_mark_node;
10615     }
10616 
10617   /* Only functions may be declared using an operator-function-id.  */
10618   if (unqualified_id
10619       && IDENTIFIER_OPNAME_P (unqualified_id)
10620       && TREE_CODE (type) != FUNCTION_TYPE
10621       && TREE_CODE (type) != METHOD_TYPE)
10622     {
10623       error ("declaration of %qD as non-function", unqualified_id);
10624       return error_mark_node;
10625     }
10626 
10627   /* We don't check parameter types here because we can emit a better
10628      error message later.  */
10629   if (decl_context != PARM)
10630     {
10631       type = check_var_type (unqualified_id, type);
10632       if (type == error_mark_node)
10633         return error_mark_node;
10634     }
10635 
10636   /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
10637      or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE.  */
10638 
10639   if (decl_context == PARM || decl_context == CATCHPARM)
10640     {
10641       if (ctype || in_namespace)
10642 	error ("cannot use %<::%> in parameter declaration");
10643 
10644       if (type_uses_auto (type))
10645 	{
10646 	  if (cxx_dialect >= cxx14)
10647 	    error ("%<auto%> parameter not permitted in this context");
10648 	  else
10649 	    error ("parameter declared %<auto%>");
10650 	  type = error_mark_node;
10651 	}
10652 
10653       /* A parameter declared as an array of T is really a pointer to T.
10654 	 One declared as a function is really a pointer to a function.
10655 	 One declared as a member is really a pointer to member.  */
10656 
10657       if (TREE_CODE (type) == ARRAY_TYPE)
10658 	{
10659 	  /* Transfer const-ness of array into that of type pointed to.  */
10660 	  type = build_pointer_type (TREE_TYPE (type));
10661 	  type_quals = TYPE_UNQUALIFIED;
10662 	  array_parameter_p = true;
10663 	}
10664       else if (TREE_CODE (type) == FUNCTION_TYPE)
10665 	type = build_pointer_type (type);
10666     }
10667 
10668   if (ctype && TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
10669       && !NEW_DELETE_OPNAME_P (unqualified_id))
10670     {
10671       cp_cv_quals real_quals = memfn_quals;
10672       if (cxx_dialect < cxx14 && constexpr_p
10673 	  && sfk != sfk_constructor && sfk != sfk_destructor)
10674 	real_quals |= TYPE_QUAL_CONST;
10675       type = build_memfn_type (type, ctype, real_quals, rqual);
10676     }
10677 
10678   {
10679     tree decl;
10680 
10681     if (decl_context == PARM)
10682       {
10683 	decl = cp_build_parm_decl (unqualified_id, type);
10684 	DECL_ARRAY_PARAMETER_P (decl) = array_parameter_p;
10685 
10686 	bad_specifiers (decl, BSP_PARM, virtualp,
10687 			memfn_quals != TYPE_UNQUALIFIED,
10688 			inlinep, friendp, raises != NULL_TREE);
10689       }
10690     else if (decl_context == FIELD)
10691       {
10692 	if (!staticp && !friendp && TREE_CODE (type) != METHOD_TYPE
10693 	    && type_uses_auto (type))
10694 	  {
10695 	    error ("non-static data member declared %<auto%>");
10696 	    type = error_mark_node;
10697 	  }
10698 
10699 	/* The C99 flexible array extension.  */
10700 	if (!staticp && TREE_CODE (type) == ARRAY_TYPE
10701 	    && TYPE_DOMAIN (type) == NULL_TREE)
10702 	  {
10703 	    tree itype = compute_array_index_type (dname, integer_zero_node,
10704 						   tf_warning_or_error);
10705 	    type = build_cplus_array_type (TREE_TYPE (type), itype);
10706 	  }
10707 
10708 	if (type == error_mark_node)
10709 	  {
10710 	    /* Happens when declaring arrays of sizes which
10711 	       are error_mark_node, for example.  */
10712 	    decl = NULL_TREE;
10713 	  }
10714 	else if (in_namespace && !friendp)
10715 	  {
10716 	    /* Something like struct S { int N::j; };  */
10717 	    error ("invalid use of %<::%>");
10718 	    return error_mark_node;
10719 	  }
10720 	else if (TREE_CODE (type) == FUNCTION_TYPE
10721 		 || TREE_CODE (type) == METHOD_TYPE)
10722 	  {
10723 	    int publicp = 0;
10724 	    tree function_context;
10725 
10726 	    if (friendp == 0)
10727 	      {
10728 		/* This should never happen in pure C++ (the check
10729 		   could be an assert).  It could happen in
10730 		   Objective-C++ if someone writes invalid code that
10731 		   uses a function declaration for an instance
10732 		   variable or property (instance variables and
10733 		   properties are parsed as FIELD_DECLs, but they are
10734 		   part of an Objective-C class, not a C++ class).
10735 		   That code is invalid and is caught by this
10736 		   check.  */
10737 		if (!ctype)
10738 		  {
10739 		    error ("declaration of function %qD in invalid context",
10740 			   unqualified_id);
10741 		    return error_mark_node;
10742 		  }
10743 
10744 		/* ``A union may [ ... ] not [ have ] virtual functions.''
10745 		   ARM 9.5 */
10746 		if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
10747 		  {
10748 		    error ("function %qD declared virtual inside a union",
10749 			   unqualified_id);
10750 		    return error_mark_node;
10751 		  }
10752 
10753 		if (NEW_DELETE_OPNAME_P (unqualified_id))
10754 		  {
10755 		    if (virtualp)
10756 		      {
10757 			error ("%qD cannot be declared virtual, since it "
10758 			       "is always static",
10759 			       unqualified_id);
10760 			virtualp = 0;
10761 		      }
10762 		  }
10763 	      }
10764 
10765 	    /* Check that the name used for a destructor makes sense.  */
10766 	    if (sfk == sfk_destructor)
10767 	      {
10768 		tree uqname = id_declarator->u.id.unqualified_name;
10769 
10770 		if (!ctype)
10771 		  {
10772 		    gcc_assert (friendp);
10773 		    error ("expected qualified name in friend declaration "
10774 			   "for destructor %qD", uqname);
10775 		    return error_mark_node;
10776 		  }
10777 
10778 		if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
10779 		  {
10780 		    error ("declaration of %qD as member of %qT",
10781 			   uqname, ctype);
10782 		    return error_mark_node;
10783 		  }
10784                 if (constexpr_p)
10785                   {
10786                     error ("a destructor cannot be %<constexpr%>");
10787                     return error_mark_node;
10788                   }
10789 	      }
10790 	    else if (sfk == sfk_constructor && friendp && !ctype)
10791 	      {
10792 		error ("expected qualified name in friend declaration "
10793 		       "for constructor %qD",
10794 		       id_declarator->u.id.unqualified_name);
10795 		return error_mark_node;
10796 	      }
10797 
10798 	    if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
10799 	      {
10800 		tree tmpl = TREE_OPERAND (unqualified_id, 0);
10801 		if (variable_template_p (tmpl))
10802 		  {
10803 		    error ("specialization of variable template %qD "
10804 			   "declared as function", tmpl);
10805 		    inform (DECL_SOURCE_LOCATION (tmpl),
10806 			    "variable template declared here");
10807 		    return error_mark_node;
10808 		  }
10809 	      }
10810 
10811 	    /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node.  */
10812 	    function_context = (ctype != NULL_TREE) ?
10813 	      decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
10814 	    publicp = (! friendp || ! staticp)
10815 	      && function_context == NULL_TREE;
10816 
10817 	    if (late_return_type_p)
10818 	      TYPE_HAS_LATE_RETURN_TYPE (type) = 1;
10819 
10820 	    decl = grokfndecl (ctype, type,
10821 			       TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
10822 			       ? unqualified_id : dname,
10823 			       parms,
10824 			       unqualified_id,
10825 			       virtualp, flags, memfn_quals, rqual, raises,
10826 			       friendp ? -1 : 0, friendp, publicp,
10827                                inlinep | (2 * constexpr_p),
10828 			       initialized == SD_DELETED, sfk,
10829 			       funcdef_flag, template_count, in_namespace,
10830 			       attrlist, declarator->id_loc);
10831             decl = set_virt_specifiers (decl, virt_specifiers);
10832 	    if (decl == NULL_TREE)
10833 	      return error_mark_node;
10834 #if 0
10835 	    /* This clobbers the attrs stored in `decl' from `attrlist'.  */
10836 	    /* The decl and setting of decl_attr is also turned off.  */
10837 	    decl = build_decl_attribute_variant (decl, decl_attr);
10838 #endif
10839 
10840 	    /* [class.conv.ctor]
10841 
10842 	       A constructor declared without the function-specifier
10843 	       explicit that can be called with a single parameter
10844 	       specifies a conversion from the type of its first
10845 	       parameter to the type of its class.  Such a constructor
10846 	       is called a converting constructor.  */
10847 	    if (explicitp == 2)
10848 	      DECL_NONCONVERTING_P (decl) = 1;
10849 	  }
10850 	else if (!staticp && !dependent_type_p (type)
10851 		 && !COMPLETE_TYPE_P (complete_type (type))
10852 		 && (TREE_CODE (type) != ARRAY_TYPE
10853 		     || !COMPLETE_TYPE_P (TREE_TYPE (type))
10854 		     || initialized == 0))
10855 	  {
10856 	    if (unqualified_id)
10857 	      {
10858 		error ("field %qD has incomplete type %qT",
10859 		       unqualified_id, type);
10860 		cxx_incomplete_type_inform (strip_array_types (type));
10861 	      }
10862 	    else
10863 	      error ("name %qT has incomplete type", type);
10864 
10865 	    type = error_mark_node;
10866 	    decl = NULL_TREE;
10867 	  }
10868 	else
10869 	  {
10870 	    if (friendp)
10871 	      {
10872 		error ("%qE is neither function nor member function; "
10873 		       "cannot be declared friend", unqualified_id);
10874 		friendp = 0;
10875 	      }
10876 	    decl = NULL_TREE;
10877 	  }
10878 
10879 	if (friendp)
10880 	  {
10881 	    /* Friends are treated specially.  */
10882 	    if (ctype == current_class_type)
10883 	      ;  /* We already issued a permerror.  */
10884 	    else if (decl && DECL_NAME (decl))
10885 	      {
10886 		if (template_class_depth (current_class_type) == 0)
10887 		  {
10888 		    decl = check_explicit_specialization
10889 		      (unqualified_id, decl, template_count,
10890 		       2 * funcdef_flag + 4);
10891 		    if (decl == error_mark_node)
10892 		      return error_mark_node;
10893 		  }
10894 
10895 		decl = do_friend (ctype, unqualified_id, decl,
10896 				  *attrlist, flags,
10897 				  funcdef_flag);
10898 		return decl;
10899 	      }
10900 	    else
10901 	      return error_mark_node;
10902 	  }
10903 
10904 	/* Structure field.  It may not be a function, except for C++.  */
10905 
10906 	if (decl == NULL_TREE)
10907 	  {
10908 	    if (staticp)
10909 	      {
10910 		/* C++ allows static class members.  All other work
10911 		   for this is done by grokfield.  */
10912 		decl = build_lang_decl_loc (declarator
10913 					    ? declarator->id_loc
10914 					    : input_location,
10915 					    VAR_DECL, unqualified_id, type);
10916 		set_linkage_for_static_data_member (decl);
10917 		/* Even if there is an in-class initialization, DECL
10918 		   is considered undefined until an out-of-class
10919 		   definition is provided.  */
10920 		DECL_EXTERNAL (decl) = 1;
10921 
10922 		if (thread_p)
10923 		  {
10924 		    set_decl_tls_model (decl, decl_default_tls_model (decl));
10925 		    if (declspecs->gnu_thread_keyword_p)
10926 		      DECL_GNU_TLS_P (decl) = true;
10927 		  }
10928 
10929 		if (constexpr_p && !initialized)
10930 		  {
10931 		    error ("constexpr static data member %qD must have an "
10932 			   "initializer", decl);
10933 		    constexpr_p = false;
10934 		  }
10935 	      }
10936 	    else
10937 	      {
10938                 if (constexpr_p)
10939 		  {
10940 		    error ("non-static data member %qE declared %<constexpr%>",
10941 			   unqualified_id);
10942 		    constexpr_p = false;
10943 		  }
10944 		decl = build_decl (input_location,
10945 				   FIELD_DECL, unqualified_id, type);
10946 		DECL_NONADDRESSABLE_P (decl) = bitfield;
10947 		if (bitfield && !unqualified_id)
10948 		  TREE_NO_WARNING (decl) = 1;
10949 
10950 		if (storage_class == sc_mutable)
10951 		  {
10952 		    DECL_MUTABLE_P (decl) = 1;
10953 		    storage_class = sc_none;
10954 		  }
10955 
10956 		if (initialized)
10957 		  {
10958 		    /* An attempt is being made to initialize a non-static
10959 		       member.  This is new in C++11.  */
10960 		    maybe_warn_cpp0x (CPP0X_NSDMI);
10961 
10962 		    /* If this has been parsed with static storage class, but
10963 		       errors forced staticp to be cleared, ensure NSDMI is
10964 		       not present.  */
10965 		    if (declspecs->storage_class == sc_static)
10966 		      DECL_INITIAL (decl) = error_mark_node;
10967 		  }
10968 	      }
10969 
10970 	    bad_specifiers (decl, BSP_FIELD, virtualp,
10971 			    memfn_quals != TYPE_UNQUALIFIED,
10972 			    inlinep, friendp, raises != NULL_TREE);
10973 	  }
10974       }
10975     else if (TREE_CODE (type) == FUNCTION_TYPE
10976 	     || TREE_CODE (type) == METHOD_TYPE)
10977       {
10978 	tree original_name;
10979 	int publicp = 0;
10980 
10981 	if (!unqualified_id)
10982 	  return error_mark_node;
10983 
10984 	if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
10985 	  original_name = dname;
10986 	else
10987 	  original_name = unqualified_id;
10988 
10989 	if (storage_class == sc_auto)
10990 	  error ("storage class %<auto%> invalid for function %qs", name);
10991 	else if (storage_class == sc_register)
10992 	  error ("storage class %<register%> invalid for function %qs", name);
10993 	else if (thread_p)
10994 	  {
10995 	    if (declspecs->gnu_thread_keyword_p)
10996 	      error ("storage class %<__thread%> invalid for function %qs",
10997 		     name);
10998 	    else
10999 	      error ("storage class %<thread_local%> invalid for function %qs",
11000 		     name);
11001 	  }
11002 
11003         if (virt_specifiers)
11004           error ("virt-specifiers in %qs not allowed outside a class definition", name);
11005 	/* Function declaration not at top level.
11006 	   Storage classes other than `extern' are not allowed
11007 	   and `extern' makes no difference.  */
11008 	if (! toplevel_bindings_p ()
11009 	    && (storage_class == sc_static
11010 		|| decl_spec_seq_has_spec_p (declspecs, ds_inline))
11011 	    && pedantic)
11012 	  {
11013 	    if (storage_class == sc_static)
11014 	      pedwarn (input_location, OPT_Wpedantic,
11015 		       "%<static%> specified invalid for function %qs "
11016 		       "declared out of global scope", name);
11017 	    else
11018 	      pedwarn (input_location, OPT_Wpedantic,
11019 		       "%<inline%> specifier invalid for function %qs "
11020 		       "declared out of global scope", name);
11021 	  }
11022 
11023 	if (ctype == NULL_TREE)
11024 	  {
11025 	    if (virtualp)
11026 	      {
11027 		error ("virtual non-class function %qs", name);
11028 		virtualp = 0;
11029 	      }
11030 	    else if (sfk == sfk_constructor
11031 		     || sfk == sfk_destructor)
11032 	      {
11033 		error (funcdef_flag
11034 		       ? G_("%qs defined in a non-class scope")
11035 		       : G_("%qs declared in a non-class scope"), name);
11036 		sfk = sfk_none;
11037 	      }
11038 	  }
11039 
11040 	/* Record whether the function is public.  */
11041 	publicp = (ctype != NULL_TREE
11042 		   || storage_class != sc_static);
11043 
11044 	if (late_return_type_p)
11045 	  TYPE_HAS_LATE_RETURN_TYPE (type) = 1;
11046 
11047 	decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
11048 			   virtualp, flags, memfn_quals, rqual, raises,
11049 			   1, friendp,
11050 			   publicp, inlinep | (2 * constexpr_p),
11051 			   initialized == SD_DELETED, sfk,
11052                            funcdef_flag,
11053 			   template_count, in_namespace, attrlist,
11054 			   declarator->id_loc);
11055 	if (decl == NULL_TREE)
11056 	  return error_mark_node;
11057 
11058 	if (staticp == 1)
11059 	  {
11060 	    int invalid_static = 0;
11061 
11062 	    /* Don't allow a static member function in a class, and forbid
11063 	       declaring main to be static.  */
11064 	    if (TREE_CODE (type) == METHOD_TYPE)
11065 	      {
11066 		permerror (input_location, "cannot declare member function %qD to have "
11067 			   "static linkage", decl);
11068 		invalid_static = 1;
11069 	      }
11070 	    else if (current_function_decl)
11071 	      {
11072 		/* FIXME need arm citation */
11073 		error ("cannot declare static function inside another function");
11074 		invalid_static = 1;
11075 	      }
11076 
11077 	    if (invalid_static)
11078 	      {
11079 		staticp = 0;
11080 		storage_class = sc_none;
11081 	      }
11082 	  }
11083       }
11084     else
11085       {
11086 	/* It's a variable.  */
11087 
11088 	/* An uninitialized decl with `extern' is a reference.  */
11089 	decl = grokvardecl (type, dname, unqualified_id,
11090 			    declspecs,
11091 			    initialized,
11092 			    (type_quals & TYPE_QUAL_CONST) != 0,
11093 			    template_count,
11094 			    ctype ? ctype : in_namespace);
11095 	if (decl == NULL_TREE)
11096 	  return error_mark_node;
11097 
11098 	bad_specifiers (decl, BSP_VAR, virtualp,
11099 			memfn_quals != TYPE_UNQUALIFIED,
11100 			inlinep, friendp, raises != NULL_TREE);
11101 
11102 	if (ctype)
11103 	  {
11104 	    DECL_CONTEXT (decl) = ctype;
11105 	    if (staticp == 1)
11106 	      {
11107 		permerror (input_location, "%<static%> may not be used when defining "
11108 			   "(as opposed to declaring) a static data member");
11109 		staticp = 0;
11110 		storage_class = sc_none;
11111 	      }
11112 	    if (storage_class == sc_register && TREE_STATIC (decl))
11113 	      {
11114 		error ("static member %qD declared %<register%>", decl);
11115 		storage_class = sc_none;
11116 	      }
11117 	    if (storage_class == sc_extern && pedantic)
11118 	      {
11119 		pedwarn (input_location, OPT_Wpedantic,
11120 			 "cannot explicitly declare member %q#D to have "
11121 			 "extern linkage", decl);
11122 		storage_class = sc_none;
11123 	      }
11124 	  }
11125 	else if (constexpr_p && DECL_EXTERNAL (decl))
11126 	  {
11127 	    error ("declaration of constexpr variable %qD is not a definition",
11128 		   decl);
11129 	    constexpr_p = false;
11130 	  }
11131       }
11132 
11133     if (storage_class == sc_extern && initialized && !funcdef_flag)
11134       {
11135 	if (toplevel_bindings_p ())
11136 	  {
11137 	    /* It's common practice (and completely valid) to have a const
11138 	       be initialized and declared extern.  */
11139 	    if (!(type_quals & TYPE_QUAL_CONST))
11140 	      warning (0, "%qs initialized and declared %<extern%>", name);
11141 	  }
11142 	else
11143 	  {
11144 	    error ("%qs has both %<extern%> and initializer", name);
11145 	    return error_mark_node;
11146 	  }
11147       }
11148 
11149     /* Record `register' declaration for warnings on &
11150        and in case doing stupid register allocation.  */
11151 
11152     if (storage_class == sc_register)
11153       DECL_REGISTER (decl) = 1;
11154     else if (storage_class == sc_extern)
11155       DECL_THIS_EXTERN (decl) = 1;
11156     else if (storage_class == sc_static)
11157       DECL_THIS_STATIC (decl) = 1;
11158 
11159     /* Set constexpr flag on vars (functions got it in grokfndecl).  */
11160     if (constexpr_p && VAR_P (decl))
11161       DECL_DECLARED_CONSTEXPR_P (decl) = true;
11162 
11163     /* Record constancy and volatility on the DECL itself .  There's
11164        no need to do this when processing a template; we'll do this
11165        for the instantiated declaration based on the type of DECL.  */
11166     if (!processing_template_decl)
11167       cp_apply_type_quals_to_decl (type_quals, decl);
11168 
11169     return decl;
11170   }
11171 }
11172 
11173 /* Subroutine of start_function.  Ensure that each of the parameter
11174    types (as listed in PARMS) is complete, as is required for a
11175    function definition.  */
11176 
11177 static void
11178 require_complete_types_for_parms (tree parms)
11179 {
11180   for (; parms; parms = DECL_CHAIN (parms))
11181     {
11182       if (dependent_type_p (TREE_TYPE (parms)))
11183 	continue;
11184       if (!VOID_TYPE_P (TREE_TYPE (parms))
11185 	  && complete_type_or_else (TREE_TYPE (parms), parms))
11186 	{
11187 	  relayout_decl (parms);
11188 	  DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
11189 	}
11190       else
11191 	/* grokparms or complete_type_or_else will have already issued
11192 	   an error.  */
11193 	TREE_TYPE (parms) = error_mark_node;
11194     }
11195 }
11196 
11197 /* Returns nonzero if T is a local variable.  */
11198 
11199 int
11200 local_variable_p (const_tree t)
11201 {
11202   if ((VAR_P (t)
11203        /* A VAR_DECL with a context that is a _TYPE is a static data
11204 	  member.  */
11205        && !TYPE_P (CP_DECL_CONTEXT (t))
11206        /* Any other non-local variable must be at namespace scope.  */
11207        && !DECL_NAMESPACE_SCOPE_P (t))
11208       || (TREE_CODE (t) == PARM_DECL))
11209     return 1;
11210 
11211   return 0;
11212 }
11213 
11214 /* Like local_variable_p, but suitable for use as a tree-walking
11215    function.  */
11216 
11217 static tree
11218 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
11219 			 void * /*data*/)
11220 {
11221   if (local_variable_p (*tp)
11222       && (!DECL_ARTIFICIAL (*tp) || DECL_NAME (*tp) == this_identifier))
11223     return *tp;
11224   else if (TYPE_P (*tp))
11225     *walk_subtrees = 0;
11226 
11227   return NULL_TREE;
11228 }
11229 
11230 /* Check that ARG, which is a default-argument expression for a
11231    parameter DECL, is valid.  Returns ARG, or ERROR_MARK_NODE, if
11232    something goes wrong.  DECL may also be a _TYPE node, rather than a
11233    DECL, if there is no DECL available.  */
11234 
11235 tree
11236 check_default_argument (tree decl, tree arg, tsubst_flags_t complain)
11237 {
11238   tree var;
11239   tree decl_type;
11240 
11241   if (TREE_CODE (arg) == DEFAULT_ARG)
11242     /* We get a DEFAULT_ARG when looking at an in-class declaration
11243        with a default argument.  Ignore the argument for now; we'll
11244        deal with it after the class is complete.  */
11245     return arg;
11246 
11247   if (TYPE_P (decl))
11248     {
11249       decl_type = decl;
11250       decl = NULL_TREE;
11251     }
11252   else
11253     decl_type = TREE_TYPE (decl);
11254 
11255   if (arg == error_mark_node
11256       || decl == error_mark_node
11257       || TREE_TYPE (arg) == error_mark_node
11258       || decl_type == error_mark_node)
11259     /* Something already went wrong.  There's no need to check
11260        further.  */
11261     return error_mark_node;
11262 
11263   /* [dcl.fct.default]
11264 
11265      A default argument expression is implicitly converted to the
11266      parameter type.  */
11267   ++cp_unevaluated_operand;
11268   perform_implicit_conversion_flags (decl_type, arg, complain,
11269 				     LOOKUP_IMPLICIT);
11270   --cp_unevaluated_operand;
11271 
11272   /* Avoid redundant -Wzero-as-null-pointer-constant warnings at
11273      the call sites.  */
11274   if (TYPE_PTR_OR_PTRMEM_P (decl_type)
11275       && null_ptr_cst_p (arg))
11276     return nullptr_node;
11277 
11278   /* [dcl.fct.default]
11279 
11280      Local variables shall not be used in default argument
11281      expressions.
11282 
11283      The keyword `this' shall not be used in a default argument of a
11284      member function.  */
11285   var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
11286   if (var)
11287     {
11288       if (complain & tf_warning_or_error)
11289 	{
11290 	  if (DECL_NAME (var) == this_identifier)
11291 	    permerror (input_location, "default argument %qE uses %qD",
11292 		       arg, var);
11293 	  else
11294 	    error ("default argument %qE uses local variable %qD", arg, var);
11295 	}
11296       return error_mark_node;
11297     }
11298 
11299   /* All is well.  */
11300   return arg;
11301 }
11302 
11303 /* Returns a deprecated type used within TYPE, or NULL_TREE if none.  */
11304 
11305 static tree
11306 type_is_deprecated (tree type)
11307 {
11308   enum tree_code code;
11309   if (TREE_DEPRECATED (type))
11310     return type;
11311   if (TYPE_NAME (type)
11312       && TREE_DEPRECATED (TYPE_NAME (type)))
11313     return type;
11314 
11315   /* Do warn about using typedefs to a deprecated class.  */
11316   if (OVERLOAD_TYPE_P (type) && type != TYPE_MAIN_VARIANT (type))
11317     return type_is_deprecated (TYPE_MAIN_VARIANT (type));
11318 
11319   code = TREE_CODE (type);
11320 
11321   if (code == POINTER_TYPE || code == REFERENCE_TYPE
11322       || code == OFFSET_TYPE || code == FUNCTION_TYPE
11323       || code == METHOD_TYPE || code == ARRAY_TYPE)
11324     return type_is_deprecated (TREE_TYPE (type));
11325 
11326   if (TYPE_PTRMEMFUNC_P (type))
11327     return type_is_deprecated
11328       (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
11329 
11330   return NULL_TREE;
11331 }
11332 
11333 /* Decode the list of parameter types for a function type.
11334    Given the list of things declared inside the parens,
11335    return a list of types.
11336 
11337    If this parameter does not end with an ellipsis, we append
11338    void_list_node.
11339 
11340    *PARMS is set to the chain of PARM_DECLs created.  */
11341 
11342 static tree
11343 grokparms (tree parmlist, tree *parms)
11344 {
11345   tree result = NULL_TREE;
11346   tree decls = NULL_TREE;
11347   tree parm;
11348   int any_error = 0;
11349 
11350   for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
11351     {
11352       tree type = NULL_TREE;
11353       tree init = TREE_PURPOSE (parm);
11354       tree decl = TREE_VALUE (parm);
11355       const char *errmsg;
11356 
11357       if (parm == void_list_node)
11358 	break;
11359 
11360       if (! decl || TREE_TYPE (decl) == error_mark_node)
11361 	continue;
11362 
11363       type = TREE_TYPE (decl);
11364       if (VOID_TYPE_P (type))
11365 	{
11366 	  if (same_type_p (type, void_type_node)
11367 	      && !init
11368 	      && !DECL_NAME (decl) && !result
11369 	      && TREE_CHAIN (parm) == void_list_node)
11370 	    /* DR 577: A parameter list consisting of a single
11371 	       unnamed parameter of non-dependent type 'void'.  */
11372 	    break;
11373 	  else if (cv_qualified_p (type))
11374 	    error_at (DECL_SOURCE_LOCATION (decl),
11375 		      "invalid use of cv-qualified type %qT in "
11376 		      "parameter declaration", type);
11377 	  else
11378 	    error_at (DECL_SOURCE_LOCATION (decl),
11379 		      "invalid use of type %<void%> in parameter "
11380 		      "declaration");
11381 	  /* It's not a good idea to actually create parameters of
11382 	     type `void'; other parts of the compiler assume that a
11383 	     void type terminates the parameter list.  */
11384 	  type = error_mark_node;
11385 	  TREE_TYPE (decl) = error_mark_node;
11386 	}
11387 
11388       if (type != error_mark_node
11389 	  && TYPE_FOR_JAVA (type)
11390 	  && MAYBE_CLASS_TYPE_P (type))
11391 	{
11392 	  error ("parameter %qD has Java class type", decl);
11393 	  type = error_mark_node;
11394 	  TREE_TYPE (decl) = error_mark_node;
11395 	  init = NULL_TREE;
11396 	}
11397 
11398       if (type != error_mark_node
11399 	  && (errmsg = targetm.invalid_parameter_type (type)))
11400 	{
11401 	  error (errmsg);
11402 	  type = error_mark_node;
11403 	  TREE_TYPE (decl) = error_mark_node;
11404 	}
11405 
11406       if (type != error_mark_node)
11407 	{
11408 	  if (deprecated_state != DEPRECATED_SUPPRESS)
11409 	    {
11410 	      tree deptype = type_is_deprecated (type);
11411 	      if (deptype)
11412 		warn_deprecated_use (deptype, NULL_TREE);
11413 	    }
11414 
11415 	  /* Top-level qualifiers on the parameters are
11416 	     ignored for function types.  */
11417 	  type = cp_build_qualified_type (type, 0);
11418 	  if (TREE_CODE (type) == METHOD_TYPE)
11419 	    {
11420 	      error ("parameter %qD invalidly declared method type", decl);
11421 	      type = build_pointer_type (type);
11422 	      TREE_TYPE (decl) = type;
11423 	    }
11424 	  else if (abstract_virtuals_error (decl, type))
11425 	    any_error = 1;  /* Seems like a good idea.  */
11426 	  else if (POINTER_TYPE_P (type))
11427 	    {
11428 	      /* [dcl.fct]/6, parameter types cannot contain pointers
11429 		 (references) to arrays of unknown bound.  */
11430 	      tree t = TREE_TYPE (type);
11431 	      int ptr = TYPE_PTR_P (type);
11432 
11433 	      while (1)
11434 		{
11435 		  if (TYPE_PTR_P (t))
11436 		    ptr = 1;
11437 		  else if (TREE_CODE (t) != ARRAY_TYPE)
11438 		    break;
11439 		  else if (!TYPE_DOMAIN (t))
11440 		    break;
11441 		  t = TREE_TYPE (t);
11442 		}
11443 	      if (TREE_CODE (t) == ARRAY_TYPE)
11444 		error (ptr
11445                        ? G_("parameter %qD includes pointer to array of "
11446                             "unknown bound %qT")
11447                        : G_("parameter %qD includes reference to array of "
11448                             "unknown bound %qT"),
11449                        decl, t);
11450 	    }
11451 
11452 	  if (any_error)
11453 	    init = NULL_TREE;
11454 	  else if (init && !processing_template_decl)
11455 	    init = check_default_argument (decl, init, tf_warning_or_error);
11456 	}
11457 
11458       DECL_CHAIN (decl) = decls;
11459       decls = decl;
11460       result = tree_cons (init, type, result);
11461     }
11462   decls = nreverse (decls);
11463   result = nreverse (result);
11464   if (parm)
11465     result = chainon (result, void_list_node);
11466   *parms = decls;
11467 
11468   return result;
11469 }
11470 
11471 
11472 /* D is a constructor or overloaded `operator='.
11473 
11474    Let T be the class in which D is declared. Then, this function
11475    returns:
11476 
11477    -1 if D's is an ill-formed constructor or copy assignment operator
11478       whose first parameter is of type `T'.
11479    0  if D is not a copy constructor or copy assignment
11480       operator.
11481    1  if D is a copy constructor or copy assignment operator whose
11482       first parameter is a reference to non-const qualified T.
11483    2  if D is a copy constructor or copy assignment operator whose
11484       first parameter is a reference to const qualified T.
11485 
11486    This function can be used as a predicate. Positive values indicate
11487    a copy constructor and nonzero values indicate a copy assignment
11488    operator.  */
11489 
11490 int
11491 copy_fn_p (const_tree d)
11492 {
11493   tree args;
11494   tree arg_type;
11495   int result = 1;
11496 
11497   gcc_assert (DECL_FUNCTION_MEMBER_P (d));
11498 
11499   if (TREE_CODE (d) == TEMPLATE_DECL
11500       || (DECL_TEMPLATE_INFO (d)
11501 	  && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
11502     /* Instantiations of template member functions are never copy
11503        functions.  Note that member functions of templated classes are
11504        represented as template functions internally, and we must
11505        accept those as copy functions.  */
11506     return 0;
11507 
11508   args = FUNCTION_FIRST_USER_PARMTYPE (d);
11509   if (!args)
11510     return 0;
11511 
11512   arg_type = TREE_VALUE (args);
11513   if (arg_type == error_mark_node)
11514     return 0;
11515 
11516   if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
11517     {
11518       /* Pass by value copy assignment operator.  */
11519       result = -1;
11520     }
11521   else if (TREE_CODE (arg_type) == REFERENCE_TYPE
11522 	   && !TYPE_REF_IS_RVALUE (arg_type)
11523 	   && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
11524     {
11525       if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
11526 	result = 2;
11527     }
11528   else
11529     return 0;
11530 
11531   args = TREE_CHAIN (args);
11532 
11533   if (args && args != void_list_node && !TREE_PURPOSE (args))
11534     /* There are more non-optional args.  */
11535     return 0;
11536 
11537   return result;
11538 }
11539 
11540 /* D is a constructor or overloaded `operator='.
11541 
11542    Let T be the class in which D is declared. Then, this function
11543    returns true when D is a move constructor or move assignment
11544    operator, false otherwise.  */
11545 
11546 bool
11547 move_fn_p (const_tree d)
11548 {
11549   gcc_assert (DECL_FUNCTION_MEMBER_P (d));
11550 
11551   if (cxx_dialect == cxx98)
11552     /* There are no move constructors if we are in C++98 mode.  */
11553     return false;
11554 
11555   if (TREE_CODE (d) == TEMPLATE_DECL
11556       || (DECL_TEMPLATE_INFO (d)
11557          && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
11558     /* Instantiations of template member functions are never move
11559        functions.  Note that member functions of templated classes are
11560        represented as template functions internally, and we must
11561        accept those as move functions.  */
11562     return 0;
11563 
11564   return move_signature_fn_p (d);
11565 }
11566 
11567 /* D is a constructor or overloaded `operator='.
11568 
11569    Then, this function returns true when D has the same signature as a move
11570    constructor or move assignment operator (because either it is such a
11571    ctor/op= or it is a template specialization with the same signature),
11572    false otherwise.  */
11573 
11574 bool
11575 move_signature_fn_p (const_tree d)
11576 {
11577   tree args;
11578   tree arg_type;
11579   bool result = false;
11580 
11581   args = FUNCTION_FIRST_USER_PARMTYPE (d);
11582   if (!args)
11583     return 0;
11584 
11585   arg_type = TREE_VALUE (args);
11586   if (arg_type == error_mark_node)
11587     return 0;
11588 
11589   if (TREE_CODE (arg_type) == REFERENCE_TYPE
11590       && TYPE_REF_IS_RVALUE (arg_type)
11591       && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
11592                       DECL_CONTEXT (d)))
11593     result = true;
11594 
11595   args = TREE_CHAIN (args);
11596 
11597   if (args && args != void_list_node && !TREE_PURPOSE (args))
11598     /* There are more non-optional args.  */
11599     return false;
11600 
11601   return result;
11602 }
11603 
11604 /* Remember any special properties of member function DECL.  */
11605 
11606 void
11607 grok_special_member_properties (tree decl)
11608 {
11609   tree class_type;
11610 
11611   if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
11612     return;
11613 
11614   class_type = DECL_CONTEXT (decl);
11615   if (DECL_CONSTRUCTOR_P (decl))
11616     {
11617       int ctor = copy_fn_p (decl);
11618 
11619       if (!DECL_ARTIFICIAL (decl))
11620 	TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
11621 
11622       if (ctor > 0)
11623 	{
11624 	  /* [class.copy]
11625 
11626 	     A non-template constructor for class X is a copy
11627 	     constructor if its first parameter is of type X&, const
11628 	     X&, volatile X& or const volatile X&, and either there
11629 	     are no other parameters or else all other parameters have
11630 	     default arguments.  */
11631 	  TYPE_HAS_COPY_CTOR (class_type) = 1;
11632 	  if (user_provided_p (decl))
11633 	    TYPE_HAS_COMPLEX_COPY_CTOR (class_type) = 1;
11634 	  if (ctor > 1)
11635 	    TYPE_HAS_CONST_COPY_CTOR (class_type) = 1;
11636 	}
11637       else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
11638 	TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
11639       else if (move_fn_p (decl) && user_provided_p (decl))
11640 	TYPE_HAS_COMPLEX_MOVE_CTOR (class_type) = 1;
11641       else if (is_list_ctor (decl))
11642 	TYPE_HAS_LIST_CTOR (class_type) = 1;
11643 
11644       if (DECL_DECLARED_CONSTEXPR_P (decl)
11645 	  && !copy_fn_p (decl) && !move_fn_p (decl))
11646 	TYPE_HAS_CONSTEXPR_CTOR (class_type) = 1;
11647     }
11648   else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
11649     {
11650       /* [class.copy]
11651 
11652 	 A non-template assignment operator for class X is a copy
11653 	 assignment operator if its parameter is of type X, X&, const
11654 	 X&, volatile X& or const volatile X&.  */
11655 
11656       int assop = copy_fn_p (decl);
11657 
11658       if (assop)
11659 	{
11660 	  TYPE_HAS_COPY_ASSIGN (class_type) = 1;
11661 	  if (user_provided_p (decl))
11662 	    TYPE_HAS_COMPLEX_COPY_ASSIGN (class_type) = 1;
11663 	  if (assop != 1)
11664 	    TYPE_HAS_CONST_COPY_ASSIGN (class_type) = 1;
11665 	}
11666       else if (move_fn_p (decl) && user_provided_p (decl))
11667 	TYPE_HAS_COMPLEX_MOVE_ASSIGN (class_type) = 1;
11668     }
11669   /* Destructors are handled in check_methods.  */
11670 }
11671 
11672 /* Check a constructor DECL has the correct form.  Complains
11673    if the class has a constructor of the form X(X).  */
11674 
11675 int
11676 grok_ctor_properties (const_tree ctype, const_tree decl)
11677 {
11678   int ctor_parm = copy_fn_p (decl);
11679 
11680   if (ctor_parm < 0)
11681     {
11682       /* [class.copy]
11683 
11684 	 A declaration of a constructor for a class X is ill-formed if
11685 	 its first parameter is of type (optionally cv-qualified) X
11686 	 and either there are no other parameters or else all other
11687 	 parameters have default arguments.
11688 
11689 	 We *don't* complain about member template instantiations that
11690 	 have this form, though; they can occur as we try to decide
11691 	 what constructor to use during overload resolution.  Since
11692 	 overload resolution will never prefer such a constructor to
11693 	 the non-template copy constructor (which is either explicitly
11694 	 or implicitly defined), there's no need to worry about their
11695 	 existence.  Theoretically, they should never even be
11696 	 instantiated, but that's hard to forestall.  */
11697       error ("invalid constructor; you probably meant %<%T (const %T&)%>",
11698 		ctype, ctype);
11699       return 0;
11700     }
11701 
11702   return 1;
11703 }
11704 
11705 /* An operator with this code is unary, but can also be binary.  */
11706 
11707 static int
11708 ambi_op_p (enum tree_code code)
11709 {
11710   return (code == INDIRECT_REF
11711 	  || code == ADDR_EXPR
11712 	  || code == UNARY_PLUS_EXPR
11713 	  || code == NEGATE_EXPR
11714 	  || code == PREINCREMENT_EXPR
11715 	  || code == PREDECREMENT_EXPR);
11716 }
11717 
11718 /* An operator with this name can only be unary.  */
11719 
11720 static int
11721 unary_op_p (enum tree_code code)
11722 {
11723   return (code == TRUTH_NOT_EXPR
11724 	  || code == BIT_NOT_EXPR
11725 	  || code == COMPONENT_REF
11726 	  || code == TYPE_EXPR);
11727 }
11728 
11729 /* DECL is a declaration for an overloaded operator.  If COMPLAIN is true,
11730    errors are issued for invalid declarations.  */
11731 
11732 bool
11733 grok_op_properties (tree decl, bool complain)
11734 {
11735   tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
11736   tree argtype;
11737   int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
11738   tree name = DECL_NAME (decl);
11739   enum tree_code operator_code;
11740   int arity;
11741   bool ellipsis_p;
11742   tree class_type;
11743 
11744   /* Count the number of arguments and check for ellipsis.  */
11745   for (argtype = argtypes, arity = 0;
11746        argtype && argtype != void_list_node;
11747        argtype = TREE_CHAIN (argtype))
11748     ++arity;
11749   ellipsis_p = !argtype;
11750 
11751   class_type = DECL_CONTEXT (decl);
11752   if (class_type && !CLASS_TYPE_P (class_type))
11753     class_type = NULL_TREE;
11754 
11755   if (DECL_CONV_FN_P (decl))
11756     operator_code = TYPE_EXPR;
11757   else
11758     do
11759       {
11760 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P)	\
11761 	if (ansi_opname (CODE) == name)				\
11762 	  {							\
11763 	    operator_code = (CODE);				\
11764 	    break;						\
11765 	  }							\
11766 	else if (ansi_assopname (CODE) == name)			\
11767 	  {							\
11768 	    operator_code = (CODE);				\
11769 	    DECL_ASSIGNMENT_OPERATOR_P (decl) = 1;		\
11770 	    break;						\
11771 	  }
11772 
11773 #include "operators.def"
11774 #undef DEF_OPERATOR
11775 
11776 	gcc_unreachable ();
11777       }
11778     while (0);
11779   gcc_assert (operator_code != MAX_TREE_CODES);
11780   SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
11781 
11782   if (class_type)
11783     switch (operator_code)
11784       {
11785       case NEW_EXPR:
11786 	TYPE_HAS_NEW_OPERATOR (class_type) = 1;
11787 	break;
11788 
11789       case DELETE_EXPR:
11790 	TYPE_GETS_DELETE (class_type) |= 1;
11791 	break;
11792 
11793       case VEC_NEW_EXPR:
11794 	TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
11795 	break;
11796 
11797       case VEC_DELETE_EXPR:
11798 	TYPE_GETS_DELETE (class_type) |= 2;
11799 	break;
11800 
11801       default:
11802 	break;
11803       }
11804 
11805     /* [basic.std.dynamic.allocation]/1:
11806 
11807        A program is ill-formed if an allocation function is declared
11808        in a namespace scope other than global scope or declared static
11809        in global scope.
11810 
11811        The same also holds true for deallocation functions.  */
11812   if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
11813       || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
11814     {
11815       if (DECL_NAMESPACE_SCOPE_P (decl))
11816 	{
11817 	  if (CP_DECL_CONTEXT (decl) != global_namespace)
11818 	    {
11819 	      error ("%qD may not be declared within a namespace", decl);
11820 	      return false;
11821 	    }
11822 	  else if (!TREE_PUBLIC (decl))
11823 	    {
11824 	      error ("%qD may not be declared as static", decl);
11825 	      return false;
11826 	    }
11827 	  if (!flag_sized_deallocation && warn_cxx14_compat)
11828 	    {
11829 	      tree parm = FUNCTION_ARG_CHAIN (decl);
11830 	      if (parm && same_type_p (TREE_VALUE (parm), size_type_node)
11831 		  && TREE_CHAIN (parm) == void_list_node)
11832 		warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wc__14_compat,
11833 			    "%qD is a usual (non-placement) deallocation "
11834 			    "function in C++14 (or with -fsized-deallocation)",
11835 			    decl);
11836 	    }
11837 	}
11838     }
11839 
11840   if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
11841     {
11842       TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
11843       DECL_IS_OPERATOR_NEW (decl) = 1;
11844     }
11845   else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
11846     TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
11847   else
11848     {
11849       /* An operator function must either be a non-static member function
11850 	 or have at least one parameter of a class, a reference to a class,
11851 	 an enumeration, or a reference to an enumeration.  13.4.0.6 */
11852       if (! methodp || DECL_STATIC_FUNCTION_P (decl))
11853 	{
11854 	  if (operator_code == TYPE_EXPR
11855 	      || operator_code == CALL_EXPR
11856 	      || operator_code == COMPONENT_REF
11857 	      || operator_code == ARRAY_REF
11858 	      || operator_code == NOP_EXPR)
11859 	    {
11860 	      error ("%qD must be a nonstatic member function", decl);
11861 	      return false;
11862 	    }
11863 	  else
11864 	    {
11865 	      tree p;
11866 
11867 	      if (DECL_STATIC_FUNCTION_P (decl))
11868 		{
11869 		  error ("%qD must be either a non-static member "
11870 			 "function or a non-member function", decl);
11871 		  return false;
11872 		}
11873 
11874 	      for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
11875 		{
11876 		  tree arg = non_reference (TREE_VALUE (p));
11877 		  if (arg == error_mark_node)
11878 		    return false;
11879 
11880 		  /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
11881 		     because these checks are performed even on
11882 		     template functions.  */
11883 		  if (MAYBE_CLASS_TYPE_P (arg)
11884 		      || TREE_CODE (arg) == ENUMERAL_TYPE)
11885 		    break;
11886 		}
11887 
11888 	      if (!p || p == void_list_node)
11889 		{
11890 		  if (complain)
11891 		    error ("%qD must have an argument of class or "
11892 			   "enumerated type", decl);
11893 		  return false;
11894 		}
11895 	    }
11896 	}
11897 
11898       /* There are no restrictions on the arguments to an overloaded
11899 	 "operator ()".  */
11900       if (operator_code == CALL_EXPR)
11901 	return true;
11902 
11903       /* Warn about conversion operators that will never be used.  */
11904       if (IDENTIFIER_TYPENAME_P (name)
11905 	  && ! DECL_TEMPLATE_INFO (decl)
11906 	  && warn_conversion
11907 	  /* Warn only declaring the function; there is no need to
11908 	     warn again about out-of-class definitions.  */
11909 	  && class_type == current_class_type)
11910 	{
11911 	  tree t = TREE_TYPE (name);
11912 	  int ref = (TREE_CODE (t) == REFERENCE_TYPE);
11913 
11914 	  if (ref)
11915 	    t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
11916 
11917 	  if (VOID_TYPE_P (t))
11918             warning (OPT_Wconversion,
11919                      ref
11920                      ? G_("conversion to a reference to void "
11921                           "will never use a type conversion operator")
11922                      : G_("conversion to void "
11923                           "will never use a type conversion operator"));
11924 	  else if (class_type)
11925 	    {
11926 	      if (t == class_type)
11927                 warning (OPT_Wconversion,
11928                      ref
11929                      ? G_("conversion to a reference to the same type "
11930                           "will never use a type conversion operator")
11931                      : G_("conversion to the same type "
11932                           "will never use a type conversion operator"));
11933 	      /* Don't force t to be complete here.  */
11934 	      else if (MAYBE_CLASS_TYPE_P (t)
11935 		       && COMPLETE_TYPE_P (t)
11936 		       && DERIVED_FROM_P (t, class_type))
11937                  warning (OPT_Wconversion,
11938                           ref
11939                           ? G_("conversion to a reference to a base class "
11940                                "will never use a type conversion operator")
11941                           : G_("conversion to a base class "
11942                                "will never use a type conversion operator"));
11943 	    }
11944 
11945 	}
11946 
11947       if (operator_code == COND_EXPR)
11948 	{
11949 	  /* 13.4.0.3 */
11950 	  error ("ISO C++ prohibits overloading operator ?:");
11951 	  return false;
11952 	}
11953       else if (ellipsis_p)
11954 	{
11955 	  error ("%qD must not have variable number of arguments", decl);
11956 	  return false;
11957 	}
11958       else if (ambi_op_p (operator_code))
11959 	{
11960 	  if (arity == 1)
11961 	    /* We pick the one-argument operator codes by default, so
11962 	       we don't have to change anything.  */
11963 	    ;
11964 	  else if (arity == 2)
11965 	    {
11966 	      /* If we thought this was a unary operator, we now know
11967 		 it to be a binary operator.  */
11968 	      switch (operator_code)
11969 		{
11970 		case INDIRECT_REF:
11971 		  operator_code = MULT_EXPR;
11972 		  break;
11973 
11974 		case ADDR_EXPR:
11975 		  operator_code = BIT_AND_EXPR;
11976 		  break;
11977 
11978 		case UNARY_PLUS_EXPR:
11979 		  operator_code = PLUS_EXPR;
11980 		  break;
11981 
11982 		case NEGATE_EXPR:
11983 		  operator_code = MINUS_EXPR;
11984 		  break;
11985 
11986 		case PREINCREMENT_EXPR:
11987 		  operator_code = POSTINCREMENT_EXPR;
11988 		  break;
11989 
11990 		case PREDECREMENT_EXPR:
11991 		  operator_code = POSTDECREMENT_EXPR;
11992 		  break;
11993 
11994 		default:
11995 		  gcc_unreachable ();
11996 		}
11997 
11998 	      SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
11999 
12000 	      if ((operator_code == POSTINCREMENT_EXPR
12001 		   || operator_code == POSTDECREMENT_EXPR)
12002 		  && ! processing_template_decl
12003 		  && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
12004 		{
12005 		  if (methodp)
12006 		    error ("postfix %qD must take %<int%> as its argument",
12007 			   decl);
12008 		  else
12009 		    error ("postfix %qD must take %<int%> as its second "
12010 			   "argument", decl);
12011 		  return false;
12012 		}
12013 	    }
12014 	  else
12015 	    {
12016 	      if (methodp)
12017 		error ("%qD must take either zero or one argument", decl);
12018 	      else
12019 		error ("%qD must take either one or two arguments", decl);
12020 	      return false;
12021 	    }
12022 
12023 	  /* More Effective C++ rule 6.  */
12024 	  if (warn_ecpp
12025 	      && (operator_code == POSTINCREMENT_EXPR
12026 		  || operator_code == POSTDECREMENT_EXPR
12027 		  || operator_code == PREINCREMENT_EXPR
12028 		  || operator_code == PREDECREMENT_EXPR))
12029 	    {
12030 	      tree arg = TREE_VALUE (argtypes);
12031 	      tree ret = TREE_TYPE (TREE_TYPE (decl));
12032 	      if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
12033 		arg = TREE_TYPE (arg);
12034 	      arg = TYPE_MAIN_VARIANT (arg);
12035 	      if (operator_code == PREINCREMENT_EXPR
12036 		  || operator_code == PREDECREMENT_EXPR)
12037 		{
12038 		  if (TREE_CODE (ret) != REFERENCE_TYPE
12039 		      || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
12040 				       arg))
12041 		    warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
12042 			     build_reference_type (arg));
12043 		}
12044 	      else
12045 		{
12046 		  if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
12047 		    warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
12048 		}
12049 	    }
12050 	}
12051       else if (unary_op_p (operator_code))
12052 	{
12053 	  if (arity != 1)
12054 	    {
12055 	      if (methodp)
12056 		error ("%qD must take %<void%>", decl);
12057 	      else
12058 		error ("%qD must take exactly one argument", decl);
12059 	      return false;
12060 	    }
12061 	}
12062       else /* if (binary_op_p (operator_code)) */
12063 	{
12064 	  if (arity != 2)
12065 	    {
12066 	      if (methodp)
12067 		error ("%qD must take exactly one argument", decl);
12068 	      else
12069 		error ("%qD must take exactly two arguments", decl);
12070 	      return false;
12071 	    }
12072 
12073 	  /* More Effective C++ rule 7.  */
12074 	  if (warn_ecpp
12075 	      && (operator_code == TRUTH_ANDIF_EXPR
12076 		  || operator_code == TRUTH_ORIF_EXPR
12077 		  || operator_code == COMPOUND_EXPR))
12078 	    warning (OPT_Weffc__, "user-defined %qD always evaluates both arguments",
12079 		     decl);
12080 	}
12081 
12082       /* Effective C++ rule 23.  */
12083       if (warn_ecpp
12084 	  && arity == 2
12085 	  && !DECL_ASSIGNMENT_OPERATOR_P (decl)
12086 	  && (operator_code == PLUS_EXPR
12087 	      || operator_code == MINUS_EXPR
12088 	      || operator_code == TRUNC_DIV_EXPR
12089 	      || operator_code == MULT_EXPR
12090 	      || operator_code == TRUNC_MOD_EXPR)
12091 	  && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
12092 	warning (OPT_Weffc__, "%qD should return by value", decl);
12093 
12094       /* [over.oper]/8 */
12095       for (; argtypes && argtypes != void_list_node;
12096 	  argtypes = TREE_CHAIN (argtypes))
12097 	if (TREE_PURPOSE (argtypes))
12098 	  {
12099 	    TREE_PURPOSE (argtypes) = NULL_TREE;
12100 	    if (operator_code == POSTINCREMENT_EXPR
12101 		|| operator_code == POSTDECREMENT_EXPR)
12102 	      {
12103 		pedwarn (input_location, OPT_Wpedantic, "%qD cannot have default arguments",
12104 			 decl);
12105 	      }
12106 	    else
12107 	      {
12108 		error ("%qD cannot have default arguments", decl);
12109 		return false;
12110 	      }
12111 	  }
12112     }
12113   return true;
12114 }
12115 
12116 /* Return a string giving the keyword associate with CODE.  */
12117 
12118 static const char *
12119 tag_name (enum tag_types code)
12120 {
12121   switch (code)
12122     {
12123     case record_type:
12124       return "struct";
12125     case class_type:
12126       return "class";
12127     case union_type:
12128       return "union";
12129     case enum_type:
12130       return "enum";
12131     case typename_type:
12132       return "typename";
12133     default:
12134       gcc_unreachable ();
12135     }
12136 }
12137 
12138 /* Name lookup in an elaborated-type-specifier (after the keyword
12139    indicated by TAG_CODE) has found the TYPE_DECL DECL.  If the
12140    elaborated-type-specifier is invalid, issue a diagnostic and return
12141    error_mark_node; otherwise, return the *_TYPE to which it referred.
12142    If ALLOW_TEMPLATE_P is true, TYPE may be a class template.  */
12143 
12144 tree
12145 check_elaborated_type_specifier (enum tag_types tag_code,
12146 				 tree decl,
12147 				 bool allow_template_p)
12148 {
12149   tree type;
12150 
12151   /* In the case of:
12152 
12153        struct S { struct S *p; };
12154 
12155      name lookup will find the TYPE_DECL for the implicit "S::S"
12156      typedef.  Adjust for that here.  */
12157   if (DECL_SELF_REFERENCE_P (decl))
12158     decl = TYPE_NAME (TREE_TYPE (decl));
12159 
12160   type = TREE_TYPE (decl);
12161 
12162   /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
12163      is false for this case as well.  */
12164   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
12165     {
12166       error ("using template type parameter %qT after %qs",
12167 	     type, tag_name (tag_code));
12168       return error_mark_node;
12169     }
12170   /* Accept template template parameters.  */
12171   else if (allow_template_p
12172 	   && (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM
12173 	       || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM))
12174     ;
12175   /*   [dcl.type.elab]
12176 
12177        If the identifier resolves to a typedef-name or the
12178        simple-template-id resolves to an alias template
12179        specialization, the elaborated-type-specifier is ill-formed.
12180 
12181      In other words, the only legitimate declaration to use in the
12182      elaborated type specifier is the implicit typedef created when
12183      the type is declared.  */
12184   else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
12185 	   && !DECL_SELF_REFERENCE_P (decl)
12186 	   && tag_code != typename_type)
12187     {
12188       if (alias_template_specialization_p (type))
12189 	error ("using alias template specialization %qT after %qs",
12190 	       type, tag_name (tag_code));
12191       else
12192 	error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
12193       inform (DECL_SOURCE_LOCATION (decl),
12194 	      "%qD has a previous declaration here", decl);
12195       return error_mark_node;
12196     }
12197   else if (TREE_CODE (type) != RECORD_TYPE
12198 	   && TREE_CODE (type) != UNION_TYPE
12199 	   && tag_code != enum_type
12200 	   && tag_code != typename_type)
12201     {
12202       error ("%qT referred to as %qs", type, tag_name (tag_code));
12203       inform (input_location, "%q+T has a previous declaration here", type);
12204       return error_mark_node;
12205     }
12206   else if (TREE_CODE (type) != ENUMERAL_TYPE
12207 	   && tag_code == enum_type)
12208     {
12209       error ("%qT referred to as enum", type);
12210       inform (input_location, "%q+T has a previous declaration here", type);
12211       return error_mark_node;
12212     }
12213   else if (!allow_template_p
12214 	   && TREE_CODE (type) == RECORD_TYPE
12215 	   && CLASSTYPE_IS_TEMPLATE (type))
12216     {
12217       /* If a class template appears as elaborated type specifier
12218 	 without a template header such as:
12219 
12220 	   template <class T> class C {};
12221 	   void f(class C);		// No template header here
12222 
12223 	 then the required template argument is missing.  */
12224       error ("template argument required for %<%s %T%>",
12225 	     tag_name (tag_code),
12226 	     DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
12227       return error_mark_node;
12228     }
12229 
12230   return type;
12231 }
12232 
12233 /* Lookup NAME in elaborate type specifier in scope according to
12234    SCOPE and issue diagnostics if necessary.
12235    Return *_TYPE node upon success, NULL_TREE when the NAME is not
12236    found, and ERROR_MARK_NODE for type error.  */
12237 
12238 static tree
12239 lookup_and_check_tag (enum tag_types tag_code, tree name,
12240 		      tag_scope scope, bool template_header_p)
12241 {
12242   tree t;
12243   tree decl;
12244   if (scope == ts_global)
12245     {
12246       /* First try ordinary name lookup, ignoring hidden class name
12247 	 injected via friend declaration.  */
12248       decl = lookup_name_prefer_type (name, 2);
12249       decl = strip_using_decl (decl);
12250       /* If that fails, the name will be placed in the smallest
12251 	 non-class, non-function-prototype scope according to 3.3.1/5.
12252 	 We may already have a hidden name declared as friend in this
12253 	 scope.  So lookup again but not ignoring hidden names.
12254 	 If we find one, that name will be made visible rather than
12255 	 creating a new tag.  */
12256       if (!decl)
12257 	decl = lookup_type_scope (name, ts_within_enclosing_non_class);
12258     }
12259   else
12260     decl = lookup_type_scope (name, scope);
12261 
12262   if (decl
12263       && (DECL_CLASS_TEMPLATE_P (decl)
12264 	  /* If scope is ts_current we're defining a class, so ignore a
12265 	     template template parameter.  */
12266 	  || (scope != ts_current
12267 	      && DECL_TEMPLATE_TEMPLATE_PARM_P (decl))))
12268     decl = DECL_TEMPLATE_RESULT (decl);
12269 
12270   if (decl && TREE_CODE (decl) == TYPE_DECL)
12271     {
12272       /* Look for invalid nested type:
12273 	   class C {
12274 	     class C {};
12275 	   };  */
12276       if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
12277 	{
12278 	  error ("%qD has the same name as the class in which it is "
12279 		 "declared",
12280 		 decl);
12281 	  return error_mark_node;
12282 	}
12283 
12284       /* Two cases we need to consider when deciding if a class
12285 	 template is allowed as an elaborated type specifier:
12286 	 1. It is a self reference to its own class.
12287 	 2. It comes with a template header.
12288 
12289 	 For example:
12290 
12291 	   template <class T> class C {
12292 	     class C *c1;		// DECL_SELF_REFERENCE_P is true
12293 	     class D;
12294 	   };
12295 	   template <class U> class C; // template_header_p is true
12296 	   template <class T> class C<T>::D {
12297 	     class C *c2;		// DECL_SELF_REFERENCE_P is true
12298 	   };  */
12299 
12300       t = check_elaborated_type_specifier (tag_code,
12301 					   decl,
12302 					   template_header_p
12303 					   | DECL_SELF_REFERENCE_P (decl));
12304       return t;
12305     }
12306   else if (decl && TREE_CODE (decl) == TREE_LIST)
12307     {
12308       error ("reference to %qD is ambiguous", name);
12309       print_candidates (decl);
12310       return error_mark_node;
12311     }
12312   else
12313     return NULL_TREE;
12314 }
12315 
12316 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
12317    Define the tag as a forward-reference if it is not defined.
12318 
12319    If a declaration is given, process it here, and report an error if
12320    multiple declarations are not identical.
12321 
12322    SCOPE is TS_CURRENT when this is also a definition.  Only look in
12323    the current frame for the name (since C++ allows new names in any
12324    scope.)  It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
12325    declaration.  Only look beginning from the current scope outward up
12326    till the nearest non-class scope.  Otherwise it is TS_GLOBAL.
12327 
12328    TEMPLATE_HEADER_P is true when this declaration is preceded by
12329    a set of template parameters.  */
12330 
12331 static tree
12332 xref_tag_1 (enum tag_types tag_code, tree name,
12333             tag_scope orig_scope, bool template_header_p)
12334 {
12335   enum tree_code code;
12336   tree t;
12337   tree context = NULL_TREE;
12338   tag_scope scope;
12339 
12340   gcc_assert (identifier_p (name));
12341 
12342   switch (tag_code)
12343     {
12344     case record_type:
12345     case class_type:
12346       code = RECORD_TYPE;
12347       break;
12348     case union_type:
12349       code = UNION_TYPE;
12350       break;
12351     case enum_type:
12352       code = ENUMERAL_TYPE;
12353       break;
12354     default:
12355       gcc_unreachable ();
12356     }
12357 
12358   if (orig_scope == ts_lambda)
12359     scope = ts_current;
12360   else
12361     scope = orig_scope;
12362 
12363   /* In case of anonymous name, xref_tag is only called to
12364      make type node and push name.  Name lookup is not required.  */
12365   if (ANON_AGGRNAME_P (name))
12366     t = NULL_TREE;
12367   else
12368     t = lookup_and_check_tag  (tag_code, name,
12369 			       scope, template_header_p);
12370 
12371   if (t == error_mark_node)
12372     return error_mark_node;
12373 
12374   if (scope != ts_current && t && current_class_type
12375       && template_class_depth (current_class_type)
12376       && template_header_p)
12377     {
12378       if (TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM)
12379 	return t;
12380 
12381       /* Since SCOPE is not TS_CURRENT, we are not looking at a
12382 	 definition of this tag.  Since, in addition, we are currently
12383 	 processing a (member) template declaration of a template
12384 	 class, we must be very careful; consider:
12385 
12386 	   template <class X>
12387 	   struct S1
12388 
12389 	   template <class U>
12390 	   struct S2
12391 	   { template <class V>
12392 	   friend struct S1; };
12393 
12394 	 Here, the S2::S1 declaration should not be confused with the
12395 	 outer declaration.  In particular, the inner version should
12396 	 have a template parameter of level 2, not level 1.  This
12397 	 would be particularly important if the member declaration
12398 	 were instead:
12399 
12400 	   template <class V = U> friend struct S1;
12401 
12402 	 say, when we should tsubst into `U' when instantiating
12403 	 S2.  On the other hand, when presented with:
12404 
12405 	   template <class T>
12406 	   struct S1 {
12407 	     template <class U>
12408 	     struct S2 {};
12409 	     template <class U>
12410 	     friend struct S2;
12411 	   };
12412 
12413 	 we must find the inner binding eventually.  We
12414 	 accomplish this by making sure that the new type we
12415 	 create to represent this declaration has the right
12416 	 TYPE_CONTEXT.  */
12417       context = TYPE_CONTEXT (t);
12418       t = NULL_TREE;
12419     }
12420 
12421   if (! t)
12422     {
12423       /* If no such tag is yet defined, create a forward-reference node
12424 	 and record it as the "definition".
12425 	 When a real declaration of this type is found,
12426 	 the forward-reference will be altered into a real type.  */
12427       if (code == ENUMERAL_TYPE)
12428 	{
12429 	  error ("use of enum %q#D without previous declaration", name);
12430 	  return error_mark_node;
12431 	}
12432       else
12433 	{
12434 	  t = make_class_type (code);
12435 	  TYPE_CONTEXT (t) = context;
12436 	  if (orig_scope == ts_lambda)
12437 	    /* Remember that we're declaring a lambda to avoid bogus errors
12438 	       in push_template_decl.  */
12439 	    CLASSTYPE_LAMBDA_EXPR (t) = error_mark_node;
12440 	  t = pushtag (name, t, scope);
12441 	}
12442     }
12443   else
12444     {
12445       if (template_header_p && MAYBE_CLASS_TYPE_P (t))
12446         {
12447 	  if (!redeclare_class_template (t, current_template_parms))
12448             return error_mark_node;
12449         }
12450       else if (!processing_template_decl
12451 	       && CLASS_TYPE_P (t)
12452 	       && CLASSTYPE_IS_TEMPLATE (t))
12453 	{
12454 	  error ("redeclaration of %qT as a non-template", t);
12455 	  error ("previous declaration %q+D", t);
12456 	  return error_mark_node;
12457 	}
12458 
12459       /* Make injected friend class visible.  */
12460       if (scope != ts_within_enclosing_non_class
12461 	  && hidden_name_p (TYPE_NAME (t)))
12462 	{
12463 	  DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
12464 	  DECL_FRIEND_P (TYPE_NAME (t)) = 0;
12465 
12466 	  if (TYPE_TEMPLATE_INFO (t))
12467 	    {
12468 	      DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
12469 	      DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
12470 	    }
12471 	}
12472     }
12473 
12474   return t;
12475 }
12476 
12477 /* Wrapper for xref_tag_1.  */
12478 
12479 tree
12480 xref_tag (enum tag_types tag_code, tree name,
12481           tag_scope scope, bool template_header_p)
12482 {
12483   tree ret;
12484   bool subtime;
12485   subtime = timevar_cond_start (TV_NAME_LOOKUP);
12486   ret = xref_tag_1 (tag_code, name, scope, template_header_p);
12487   timevar_cond_stop (TV_NAME_LOOKUP, subtime);
12488   return ret;
12489 }
12490 
12491 
12492 tree
12493 xref_tag_from_type (tree old, tree id, tag_scope scope)
12494 {
12495   enum tag_types tag_kind;
12496 
12497   if (TREE_CODE (old) == RECORD_TYPE)
12498     tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
12499   else
12500     tag_kind  = union_type;
12501 
12502   if (id == NULL_TREE)
12503     id = TYPE_IDENTIFIER (old);
12504 
12505   return xref_tag (tag_kind, id, scope, false);
12506 }
12507 
12508 /* Create the binfo hierarchy for REF with (possibly NULL) base list
12509    BASE_LIST.  For each element on BASE_LIST the TREE_PURPOSE is an
12510    access_* node, and the TREE_VALUE is the type of the base-class.
12511    Non-NULL TREE_TYPE indicates virtual inheritance.
12512 
12513    Returns true if the binfo hierarchy was successfully created,
12514    false if an error was detected. */
12515 
12516 bool
12517 xref_basetypes (tree ref, tree base_list)
12518 {
12519   tree *basep;
12520   tree binfo, base_binfo;
12521   unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases.  */
12522   unsigned max_bases = 0;  /* Maximum direct bases.  */
12523   int i;
12524   tree default_access;
12525   tree igo_prev; /* Track Inheritance Graph Order.  */
12526 
12527   if (ref == error_mark_node)
12528     return false;
12529 
12530   /* The base of a derived class is private by default, all others are
12531      public.  */
12532   default_access = (TREE_CODE (ref) == RECORD_TYPE
12533 		    && CLASSTYPE_DECLARED_CLASS (ref)
12534 		    ? access_private_node : access_public_node);
12535 
12536   /* First, make sure that any templates in base-classes are
12537      instantiated.  This ensures that if we call ourselves recursively
12538      we do not get confused about which classes are marked and which
12539      are not.  */
12540   basep = &base_list;
12541   while (*basep)
12542     {
12543       tree basetype = TREE_VALUE (*basep);
12544 
12545       /* The dependent_type_p call below should really be dependent_scope_p
12546 	 so that we give a hard error about using an incomplete type as a
12547 	 base, but we allow it with a pedwarn for backward
12548 	 compatibility.  */
12549       if (processing_template_decl
12550 	  && CLASS_TYPE_P (basetype) && TYPE_BEING_DEFINED (basetype))
12551 	cxx_incomplete_type_diagnostic (NULL_TREE, basetype, DK_PEDWARN);
12552       if (!dependent_type_p (basetype)
12553 	  && !complete_type_or_else (basetype, NULL))
12554 	/* An incomplete type.  Remove it from the list.  */
12555 	*basep = TREE_CHAIN (*basep);
12556       else
12557 	{
12558 	  max_bases++;
12559 	  if (TREE_TYPE (*basep))
12560 	    max_vbases++;
12561 	  if (CLASS_TYPE_P (basetype))
12562 	    max_vbases += vec_safe_length (CLASSTYPE_VBASECLASSES (basetype));
12563 	  basep = &TREE_CHAIN (*basep);
12564 	}
12565     }
12566 
12567   TYPE_MARKED_P (ref) = 1;
12568 
12569   /* The binfo slot should be empty, unless this is an (ill-formed)
12570      redefinition.  */
12571   if (TYPE_BINFO (ref) && !TYPE_SIZE (ref))
12572     {
12573       error ("redefinition of %q#T", ref);
12574       return false;
12575     }
12576 
12577   gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
12578 
12579   binfo = make_tree_binfo (max_bases);
12580 
12581   TYPE_BINFO (ref) = binfo;
12582   BINFO_OFFSET (binfo) = size_zero_node;
12583   BINFO_TYPE (binfo) = ref;
12584 
12585   /* Apply base-class info set up to the variants of this type.  */
12586   fixup_type_variants (ref);
12587 
12588   if (max_bases)
12589     {
12590       vec_alloc (BINFO_BASE_ACCESSES (binfo), max_bases);
12591       /* An aggregate cannot have baseclasses.  */
12592       CLASSTYPE_NON_AGGREGATE (ref) = 1;
12593 
12594       if (TREE_CODE (ref) == UNION_TYPE)
12595         {
12596 	  error ("derived union %qT invalid", ref);
12597           return false;
12598         }
12599     }
12600 
12601   if (max_bases > 1)
12602     {
12603       if (TYPE_FOR_JAVA (ref))
12604         {
12605 	  error ("Java class %qT cannot have multiple bases", ref);
12606           return false;
12607         }
12608     }
12609 
12610   if (max_vbases)
12611     {
12612       vec_alloc (CLASSTYPE_VBASECLASSES (ref), max_vbases);
12613 
12614       if (TYPE_FOR_JAVA (ref))
12615         {
12616 	  error ("Java class %qT cannot have virtual bases", ref);
12617           return false;
12618         }
12619     }
12620 
12621   for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
12622     {
12623       tree access = TREE_PURPOSE (base_list);
12624       int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
12625       tree basetype = TREE_VALUE (base_list);
12626 
12627       if (access == access_default_node)
12628 	access = default_access;
12629 
12630       if (PACK_EXPANSION_P (basetype))
12631         basetype = PACK_EXPANSION_PATTERN (basetype);
12632       if (TREE_CODE (basetype) == TYPE_DECL)
12633 	basetype = TREE_TYPE (basetype);
12634       if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
12635 	{
12636 	  error ("base type %qT fails to be a struct or class type",
12637 		 basetype);
12638 	  return false;
12639 	}
12640 
12641       if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
12642 	TYPE_FOR_JAVA (ref) = 1;
12643 
12644       base_binfo = NULL_TREE;
12645       if (CLASS_TYPE_P (basetype) && !dependent_scope_p (basetype))
12646 	{
12647 	  base_binfo = TYPE_BINFO (basetype);
12648 	  /* The original basetype could have been a typedef'd type.  */
12649 	  basetype = BINFO_TYPE (base_binfo);
12650 
12651 	  /* Inherit flags from the base.  */
12652 	  TYPE_HAS_NEW_OPERATOR (ref)
12653 	    |= TYPE_HAS_NEW_OPERATOR (basetype);
12654 	  TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
12655 	    |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
12656 	  TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
12657 	  TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
12658 	  CLASSTYPE_DIAMOND_SHAPED_P (ref)
12659 	    |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
12660 	  CLASSTYPE_REPEATED_BASE_P (ref)
12661 	    |= CLASSTYPE_REPEATED_BASE_P (basetype);
12662 	}
12663 
12664       /* We must do this test after we've seen through a typedef
12665 	 type.  */
12666       if (TYPE_MARKED_P (basetype))
12667 	{
12668 	  if (basetype == ref)
12669 	    error ("recursive type %qT undefined", basetype);
12670 	  else
12671 	    error ("duplicate base type %qT invalid", basetype);
12672 	  return false;
12673 	}
12674 
12675       if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
12676         /* Regenerate the pack expansion for the bases. */
12677         basetype = make_pack_expansion (basetype);
12678 
12679       TYPE_MARKED_P (basetype) = 1;
12680 
12681       base_binfo = copy_binfo (base_binfo, basetype, ref,
12682 			       &igo_prev, via_virtual);
12683       if (!BINFO_INHERITANCE_CHAIN (base_binfo))
12684 	BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
12685 
12686       BINFO_BASE_APPEND (binfo, base_binfo);
12687       BINFO_BASE_ACCESS_APPEND (binfo, access);
12688     }
12689 
12690   if (vec_safe_length (CLASSTYPE_VBASECLASSES (ref)) < max_vbases)
12691     /* If we didn't get max_vbases vbases, we must have shared at
12692        least one of them, and are therefore diamond shaped.  */
12693     CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
12694 
12695   /* Unmark all the types.  */
12696   for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
12697     TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
12698   TYPE_MARKED_P (ref) = 0;
12699 
12700   /* Now see if we have a repeated base type.  */
12701   if (!CLASSTYPE_REPEATED_BASE_P (ref))
12702     {
12703       for (base_binfo = binfo; base_binfo;
12704 	   base_binfo = TREE_CHAIN (base_binfo))
12705 	{
12706 	  if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
12707 	    {
12708 	      CLASSTYPE_REPEATED_BASE_P (ref) = 1;
12709 	      break;
12710 	    }
12711 	  TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
12712 	}
12713       for (base_binfo = binfo; base_binfo;
12714 	   base_binfo = TREE_CHAIN (base_binfo))
12715 	if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
12716 	  TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
12717 	else
12718 	  break;
12719     }
12720 
12721   return true;
12722 }
12723 
12724 
12725 /* Copies the enum-related properties from type SRC to type DST.
12726    Used with the underlying type of an enum and the enum itself.  */
12727 static void
12728 copy_type_enum (tree dst, tree src)
12729 {
12730   tree t;
12731   for (t = dst; t; t = TYPE_NEXT_VARIANT (t))
12732     {
12733       TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (src);
12734       TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (src);
12735       TYPE_SIZE (t) = TYPE_SIZE (src);
12736       TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (src);
12737       SET_TYPE_MODE (dst, TYPE_MODE (src));
12738       TYPE_PRECISION (t) = TYPE_PRECISION (src);
12739       TYPE_ALIGN (t) = TYPE_ALIGN (src);
12740       TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (src);
12741       TYPE_UNSIGNED (t) = TYPE_UNSIGNED (src);
12742     }
12743 }
12744 
12745 /* Begin compiling the definition of an enumeration type.
12746    NAME is its name,
12747 
12748    if ENUMTYPE is not NULL_TREE then the type has alredy been found.
12749 
12750    UNDERLYING_TYPE is the type that will be used as the storage for
12751    the enumeration type. This should be NULL_TREE if no storage type
12752    was specified.
12753 
12754    SCOPED_ENUM_P is true if this is a scoped enumeration type.
12755 
12756    if IS_NEW is not NULL, gets TRUE iff a new type is created.
12757 
12758    Returns the type object, as yet incomplete.
12759    Also records info about it so that build_enumerator
12760    may be used to declare the individual values as they are read.  */
12761 
12762 tree
12763 start_enum (tree name, tree enumtype, tree underlying_type,
12764 	    bool scoped_enum_p, bool *is_new)
12765 {
12766   tree prevtype = NULL_TREE;
12767   gcc_assert (identifier_p (name));
12768 
12769   if (is_new)
12770     *is_new = false;
12771   /* [C++0x dcl.enum]p5:
12772 
12773     If not explicitly specified, the underlying type of a scoped
12774     enumeration type is int.  */
12775   if (!underlying_type && scoped_enum_p)
12776     underlying_type = integer_type_node;
12777 
12778   if (underlying_type)
12779     underlying_type = cv_unqualified (underlying_type);
12780 
12781   /* If this is the real definition for a previous forward reference,
12782      fill in the contents in the same object that used to be the
12783      forward reference.  */
12784   if (!enumtype)
12785     enumtype = lookup_and_check_tag (enum_type, name,
12786 				     /*tag_scope=*/ts_current,
12787 				     /*template_header_p=*/false);
12788 
12789   /* In case of a template_decl, the only check that should be deferred
12790      to instantiation time is the comparison of underlying types.  */
12791   if (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE)
12792     {
12793       if (scoped_enum_p != SCOPED_ENUM_P (enumtype))
12794 	{
12795 	  error_at (input_location, "scoped/unscoped mismatch "
12796 		    "in enum %q#T", enumtype);
12797 	  error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
12798 		    "previous definition here");
12799 	  enumtype = error_mark_node;
12800 	}
12801       else if (ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) != !! underlying_type)
12802 	{
12803 	  error_at (input_location, "underlying type mismatch "
12804 		    "in enum %q#T", enumtype);
12805 	  error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
12806 		    "previous definition here");
12807 	  enumtype = error_mark_node;
12808 	}
12809       else if (underlying_type && ENUM_UNDERLYING_TYPE (enumtype)
12810 	       && !dependent_type_p (underlying_type)
12811 	       && !dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))
12812 	       && !same_type_p (underlying_type,
12813 				ENUM_UNDERLYING_TYPE (enumtype)))
12814 	{
12815 	  error_at (input_location, "different underlying type "
12816 		    "in enum %q#T", enumtype);
12817 	  error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
12818 		    "previous definition here");
12819 	  underlying_type = NULL_TREE;
12820 	}
12821     }
12822 
12823   if (!enumtype || TREE_CODE (enumtype) != ENUMERAL_TYPE
12824       || processing_template_decl)
12825     {
12826       /* In case of error, make a dummy enum to allow parsing to
12827 	 continue.  */
12828       if (enumtype == error_mark_node)
12829 	{
12830 	  name = make_anon_name ();
12831 	  enumtype = NULL_TREE;
12832 	}
12833 
12834       /* enumtype may be an ENUMERAL_TYPE if this is a redefinition
12835          of an opaque enum, or an opaque enum of an already defined
12836 	 enumeration (C++0x only).
12837 	 In any other case, it'll be NULL_TREE. */
12838       if (!enumtype)
12839 	{
12840 	  if (is_new)
12841 	    *is_new = true;
12842 	}
12843       prevtype = enumtype;
12844 
12845       /* Do not push the decl more than once, unless we need to
12846 	 compare underlying types at instantiation time */
12847       if (!enumtype
12848 	  || TREE_CODE (enumtype) != ENUMERAL_TYPE
12849 	  || (underlying_type
12850 	      && dependent_type_p (underlying_type))
12851 	  || (ENUM_UNDERLYING_TYPE (enumtype)
12852 	      && dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))))
12853 	{
12854 	  enumtype = cxx_make_type (ENUMERAL_TYPE);
12855 	  enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
12856 	}
12857       else
12858 	  enumtype = xref_tag (enum_type, name, /*tag_scope=*/ts_current,
12859 			       false);
12860 
12861       if (enumtype == error_mark_node)
12862 	return error_mark_node;
12863 
12864       /* The enum is considered opaque until the opening '{' of the
12865 	 enumerator list.  */
12866       SET_OPAQUE_ENUM_P (enumtype, true);
12867       ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) = !! underlying_type;
12868     }
12869 
12870   SET_SCOPED_ENUM_P (enumtype, scoped_enum_p);
12871 
12872   if (underlying_type)
12873     {
12874       if (CP_INTEGRAL_TYPE_P (underlying_type))
12875         {
12876 	  copy_type_enum (enumtype, underlying_type);
12877           ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
12878         }
12879       else if (dependent_type_p (underlying_type))
12880 	ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
12881       else
12882         error ("underlying type %<%T%> of %<%T%> must be an integral type",
12883                underlying_type, enumtype);
12884     }
12885 
12886   /* If into a template class, the returned enum is always the first
12887      declaration (opaque or not) seen. This way all the references to
12888      this type will be to the same declaration. The following ones are used
12889      only to check for definition errors.  */
12890   if (prevtype && processing_template_decl)
12891     return prevtype;
12892   else
12893     return enumtype;
12894 }
12895 
12896 /* After processing and defining all the values of an enumeration type,
12897    install their decls in the enumeration type.
12898    ENUMTYPE is the type object.  */
12899 
12900 void
12901 finish_enum_value_list (tree enumtype)
12902 {
12903   tree values;
12904   tree underlying_type;
12905   tree decl;
12906   tree value;
12907   tree minnode, maxnode;
12908   tree t;
12909 
12910   bool fixed_underlying_type_p
12911     = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
12912 
12913   /* We built up the VALUES in reverse order.  */
12914   TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
12915 
12916   /* For an enum defined in a template, just set the type of the values;
12917      all further processing is postponed until the template is
12918      instantiated.  We need to set the type so that tsubst of a CONST_DECL
12919      works.  */
12920   if (processing_template_decl)
12921     {
12922       for (values = TYPE_VALUES (enumtype);
12923 	   values;
12924 	   values = TREE_CHAIN (values))
12925 	TREE_TYPE (TREE_VALUE (values)) = enumtype;
12926       return;
12927     }
12928 
12929   /* Determine the minimum and maximum values of the enumerators.  */
12930   if (TYPE_VALUES (enumtype))
12931     {
12932       minnode = maxnode = NULL_TREE;
12933 
12934       for (values = TYPE_VALUES (enumtype);
12935 	   values;
12936 	   values = TREE_CHAIN (values))
12937 	{
12938 	  decl = TREE_VALUE (values);
12939 
12940 	  /* [dcl.enum]: Following the closing brace of an enum-specifier,
12941 	     each enumerator has the type of its enumeration.  Prior to the
12942 	     closing brace, the type of each enumerator is the type of its
12943 	     initializing value.  */
12944 	  TREE_TYPE (decl) = enumtype;
12945 
12946 	  /* Update the minimum and maximum values, if appropriate.  */
12947 	  value = DECL_INITIAL (decl);
12948 	  if (value == error_mark_node)
12949 	    value = integer_zero_node;
12950 	  /* Figure out what the minimum and maximum values of the
12951 	     enumerators are.  */
12952 	  if (!minnode)
12953 	    minnode = maxnode = value;
12954 	  else if (tree_int_cst_lt (maxnode, value))
12955 	    maxnode = value;
12956 	  else if (tree_int_cst_lt (value, minnode))
12957 	    minnode = value;
12958 	}
12959     }
12960   else
12961     /* [dcl.enum]
12962 
12963        If the enumerator-list is empty, the underlying type is as if
12964        the enumeration had a single enumerator with value 0.  */
12965     minnode = maxnode = integer_zero_node;
12966 
12967   if (!fixed_underlying_type_p)
12968     {
12969       /* Compute the number of bits require to represent all values of the
12970 	 enumeration.  We must do this before the type of MINNODE and
12971 	 MAXNODE are transformed, since tree_int_cst_min_precision relies
12972 	 on the TREE_TYPE of the value it is passed.  */
12973       signop sgn = tree_int_cst_sgn (minnode) >= 0 ? UNSIGNED : SIGNED;
12974       int lowprec = tree_int_cst_min_precision (minnode, sgn);
12975       int highprec = tree_int_cst_min_precision (maxnode, sgn);
12976       int precision = MAX (lowprec, highprec);
12977       unsigned int itk;
12978       bool use_short_enum;
12979 
12980       /* Determine the underlying type of the enumeration.
12981 
12982          [dcl.enum]
12983 
12984          The underlying type of an enumeration is an integral type that
12985          can represent all the enumerator values defined in the
12986          enumeration.  It is implementation-defined which integral type is
12987          used as the underlying type for an enumeration except that the
12988          underlying type shall not be larger than int unless the value of
12989          an enumerator cannot fit in an int or unsigned int.
12990 
12991          We use "int" or an "unsigned int" as the underlying type, even if
12992          a smaller integral type would work, unless the user has
12993          explicitly requested that we use the smallest possible type.  The
12994          user can request that for all enumerations with a command line
12995          flag, or for just one enumeration with an attribute.  */
12996 
12997       use_short_enum = flag_short_enums
12998         || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
12999 
13000       for (itk = (use_short_enum ? itk_char : itk_int);
13001            itk != itk_none;
13002            itk++)
13003         {
13004           underlying_type = integer_types[itk];
13005           if (underlying_type != NULL_TREE
13006 	      && TYPE_PRECISION (underlying_type) >= precision
13007               && TYPE_SIGN (underlying_type) == sgn)
13008             break;
13009         }
13010       if (itk == itk_none)
13011         {
13012           /* DR 377
13013 
13014              IF no integral type can represent all the enumerator values, the
13015              enumeration is ill-formed.  */
13016           error ("no integral type can represent all of the enumerator values "
13017                  "for %qT", enumtype);
13018           precision = TYPE_PRECISION (long_long_integer_type_node);
13019           underlying_type = integer_types[itk_unsigned_long_long];
13020         }
13021 
13022       /* [dcl.enum]
13023 
13024          The value of sizeof() applied to an enumeration type, an object
13025          of an enumeration type, or an enumerator, is the value of sizeof()
13026          applied to the underlying type.  */
13027       copy_type_enum (enumtype, underlying_type);
13028 
13029       /* Compute the minimum and maximum values for the type.
13030 
13031 	 [dcl.enum]
13032 
13033 	 For an enumeration where emin is the smallest enumerator and emax
13034 	 is the largest, the values of the enumeration are the values of the
13035 	 underlying type in the range bmin to bmax, where bmin and bmax are,
13036 	 respectively, the smallest and largest values of the smallest bit-
13037 	 field that can store emin and emax.  */
13038 
13039       /* The middle-end currently assumes that types with TYPE_PRECISION
13040 	 narrower than their underlying type are suitably zero or sign
13041 	 extended to fill their mode.  Similarly, it assumes that the front
13042 	 end assures that a value of a particular type must be within
13043 	 TYPE_MIN_VALUE and TYPE_MAX_VALUE.
13044 
13045 	 We used to set these fields based on bmin and bmax, but that led
13046 	 to invalid assumptions like optimizing away bounds checking.  So
13047 	 now we just set the TYPE_PRECISION, TYPE_MIN_VALUE, and
13048 	 TYPE_MAX_VALUE to the values for the mode above and only restrict
13049 	 the ENUM_UNDERLYING_TYPE for the benefit of diagnostics.  */
13050       ENUM_UNDERLYING_TYPE (enumtype)
13051 	= build_distinct_type_copy (underlying_type);
13052       TYPE_PRECISION (ENUM_UNDERLYING_TYPE (enumtype)) = precision;
13053       set_min_and_max_values_for_integral_type
13054         (ENUM_UNDERLYING_TYPE (enumtype), precision, sgn);
13055 
13056       /* If -fstrict-enums, still constrain TYPE_MIN/MAX_VALUE.  */
13057       if (flag_strict_enums)
13058 	set_min_and_max_values_for_integral_type (enumtype, precision, sgn);
13059     }
13060   else
13061     underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
13062 
13063   /* Convert each of the enumerators to the type of the underlying
13064      type of the enumeration.  */
13065   for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
13066     {
13067       location_t saved_location;
13068 
13069       decl = TREE_VALUE (values);
13070       saved_location = input_location;
13071       input_location = DECL_SOURCE_LOCATION (decl);
13072       if (fixed_underlying_type_p)
13073         /* If the enumeration type has a fixed underlying type, we
13074            already checked all of the enumerator values.  */
13075         value = DECL_INITIAL (decl);
13076       else
13077         value = perform_implicit_conversion (underlying_type,
13078                                              DECL_INITIAL (decl),
13079                                              tf_warning_or_error);
13080       input_location = saved_location;
13081 
13082       /* Do not clobber shared ints.  */
13083       if (value != error_mark_node)
13084 	{
13085 	  value = copy_node (value);
13086 
13087 	  TREE_TYPE (value) = enumtype;
13088 	}
13089       DECL_INITIAL (decl) = value;
13090     }
13091 
13092   /* Fix up all variant types of this enum type.  */
13093   for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
13094     TYPE_VALUES (t) = TYPE_VALUES (enumtype);
13095 
13096   if (at_class_scope_p ()
13097       && COMPLETE_TYPE_P (current_class_type)
13098       && UNSCOPED_ENUM_P (enumtype))
13099     insert_late_enum_def_into_classtype_sorted_fields (enumtype,
13100 						       current_class_type);
13101 
13102   /* Finish debugging output for this type.  */
13103   rest_of_type_compilation (enumtype, namespace_bindings_p ());
13104 }
13105 
13106 /* Finishes the enum type. This is called only the first time an
13107    enumeration is seen, be it opaque or odinary.
13108    ENUMTYPE is the type object.  */
13109 
13110 void
13111 finish_enum (tree enumtype)
13112 {
13113   if (processing_template_decl)
13114     {
13115       if (at_function_scope_p ())
13116 	add_stmt (build_min (TAG_DEFN, enumtype));
13117       return;
13118     }
13119 
13120   /* If this is a forward declaration, there should not be any variants,
13121      though we can get a variant in the middle of an enum-specifier with
13122      wacky code like 'enum E { e = sizeof(const E*) };'  */
13123   gcc_assert (enumtype == TYPE_MAIN_VARIANT (enumtype)
13124 	      && (TYPE_VALUES (enumtype)
13125 		  || !TYPE_NEXT_VARIANT (enumtype)));
13126 }
13127 
13128 /* Build and install a CONST_DECL for an enumeration constant of the
13129    enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
13130    LOC is the location of NAME.
13131    Assignment of sequential values by default is handled here.  */
13132 
13133 void
13134 build_enumerator (tree name, tree value, tree enumtype, location_t loc)
13135 {
13136   tree decl;
13137   tree context;
13138   tree type;
13139 
13140   /* scalar_constant_value will pull out this expression, so make sure
13141      it's folded as appropriate.  */
13142   if (processing_template_decl)
13143     value = fold_non_dependent_expr (value);
13144 
13145   /* If the VALUE was erroneous, pretend it wasn't there; that will
13146      result in the enum being assigned the next value in sequence.  */
13147   if (value == error_mark_node)
13148     value = NULL_TREE;
13149 
13150   /* Remove no-op casts from the value.  */
13151   if (value)
13152     STRIP_TYPE_NOPS (value);
13153 
13154   if (! processing_template_decl)
13155     {
13156       /* Validate and default VALUE.  */
13157       if (value != NULL_TREE)
13158 	{
13159 	  if (!ENUM_UNDERLYING_TYPE (enumtype))
13160 	    {
13161 	      tree tmp_value = build_expr_type_conversion (WANT_INT | WANT_ENUM,
13162 							   value, true);
13163 	      if (tmp_value)
13164 		value = tmp_value;
13165 	    }
13166 	  else if (! INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (value)))
13167 	    value = perform_implicit_conversion_flags
13168 	      (ENUM_UNDERLYING_TYPE (enumtype), value, tf_warning_or_error,
13169 	       LOOKUP_IMPLICIT | LOOKUP_NO_NARROWING);
13170 
13171 	  if (value == error_mark_node)
13172 	    value = NULL_TREE;
13173 
13174 	  if (value != NULL_TREE)
13175 	    {
13176 	      value = cxx_constant_value (value);
13177 
13178 	      if (TREE_CODE (value) != INTEGER_CST
13179 		  || ! INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (value)))
13180 		{
13181 		  error ("enumerator value for %qD is not an integer constant",
13182 			 name);
13183 		  value = NULL_TREE;
13184 		}
13185 	    }
13186 	}
13187 
13188       /* Default based on previous value.  */
13189       if (value == NULL_TREE)
13190 	{
13191 	  if (TYPE_VALUES (enumtype))
13192 	    {
13193 	      tree prev_value;
13194 	      bool overflowed;
13195 
13196 	      /* C++03 7.2/4: If no initializer is specified for the first
13197 		 enumerator, the type is an unspecified integral
13198 		 type. Otherwise the type is the same as the type of the
13199 		 initializing value of the preceding enumerator unless the
13200 		 incremented value is not representable in that type, in
13201 		 which case the type is an unspecified integral type
13202 		 sufficient to contain the incremented value.  */
13203 	      prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
13204 	      if (error_operand_p (prev_value))
13205 		value = error_mark_node;
13206 	      else
13207 		{
13208 		  tree type = TREE_TYPE (prev_value);
13209 		  signop sgn = TYPE_SIGN (type);
13210 		  widest_int wi = wi::add (wi::to_widest (prev_value), 1, sgn,
13211 					   &overflowed);
13212 		  if (!overflowed)
13213 		    {
13214 		      bool pos = !wi::neg_p (wi, sgn);
13215 		      if (!wi::fits_to_tree_p (wi, type))
13216 			{
13217 			  unsigned int itk;
13218 			  for (itk = itk_int; itk != itk_none; itk++)
13219 			    {
13220 			      type = integer_types[itk];
13221 			      if (type != NULL_TREE
13222 				  && (pos || !TYPE_UNSIGNED (type))
13223 				  && wi::fits_to_tree_p (wi, type))
13224 				break;
13225 			    }
13226 			  if (type && cxx_dialect < cxx11
13227 			      && itk > itk_unsigned_long)
13228 			    pedwarn (input_location, OPT_Wlong_long, pos ? "\
13229 incremented enumerator value is too large for %<unsigned long%>" :  "\
13230 incremented enumerator value is too large for %<long%>");
13231 			}
13232 		      if (type == NULL_TREE)
13233 			overflowed = true;
13234 		      else
13235 			value = wide_int_to_tree (type, wi);
13236 		    }
13237 
13238 		  if (overflowed)
13239 		    {
13240 		      error ("overflow in enumeration values at %qD", name);
13241 		      value = error_mark_node;
13242 		    }
13243 		}
13244 	    }
13245 	  else
13246 	    value = integer_zero_node;
13247 	}
13248 
13249       /* Remove no-op casts from the value.  */
13250       STRIP_TYPE_NOPS (value);
13251 
13252       /* If the underlying type of the enum is fixed, check whether
13253          the enumerator values fits in the underlying type.  If it
13254          does not fit, the program is ill-formed [C++0x dcl.enum].  */
13255       if (ENUM_UNDERLYING_TYPE (enumtype)
13256           && value
13257           && TREE_CODE (value) == INTEGER_CST)
13258         {
13259 	  if (!int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
13260 	    error ("enumerator value %E is outside the range of underlying "
13261 		   "type %<%T%>", value, ENUM_UNDERLYING_TYPE (enumtype));
13262 
13263           /* Convert the value to the appropriate type.  */
13264           value = convert (ENUM_UNDERLYING_TYPE (enumtype), value);
13265         }
13266     }
13267 
13268   /* C++ associates enums with global, function, or class declarations.  */
13269   context = current_scope ();
13270 
13271   /* Build the actual enumeration constant.  Note that the enumeration
13272      constants have the underlying type of the enum (if it is fixed)
13273      or the type of their initializer (if the underlying type of the
13274      enum is not fixed):
13275 
13276       [ C++0x dcl.enum ]
13277 
13278         If the underlying type is fixed, the type of each enumerator
13279         prior to the closing brace is the underlying type; if the
13280         initializing value of an enumerator cannot be represented by
13281         the underlying type, the program is ill-formed. If the
13282         underlying type is not fixed, the type of each enumerator is
13283         the type of its initializing value.
13284 
13285     If the underlying type is not fixed, it will be computed by
13286     finish_enum and we will reset the type of this enumerator.  Of
13287     course, if we're processing a template, there may be no value.  */
13288   type = value ? TREE_TYPE (value) : NULL_TREE;
13289 
13290   decl = build_decl (loc, CONST_DECL, name, type);
13291 
13292   DECL_CONTEXT (decl) = enumtype;
13293   TREE_CONSTANT (decl) = 1;
13294   TREE_READONLY (decl) = 1;
13295   DECL_INITIAL (decl) = value;
13296 
13297   if (context && context == current_class_type && !SCOPED_ENUM_P (enumtype))
13298     /* In something like `struct S { enum E { i = 7 }; };' we put `i'
13299        on the TYPE_FIELDS list for `S'.  (That's so that you can say
13300        things like `S::i' later.)  */
13301     finish_member_declaration (decl);
13302   else
13303     pushdecl (decl);
13304 
13305   /* Add this enumeration constant to the list for this type.  */
13306   TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
13307 }
13308 
13309 /* Look for an enumerator with the given NAME within the enumeration
13310    type ENUMTYPE.  This routine is used primarily for qualified name
13311    lookup into an enumerator in C++0x, e.g.,
13312 
13313      enum class Color { Red, Green, Blue };
13314 
13315      Color color = Color::Red;
13316 
13317    Returns the value corresponding to the enumerator, or
13318    NULL_TREE if no such enumerator was found.  */
13319 tree
13320 lookup_enumerator (tree enumtype, tree name)
13321 {
13322   tree e;
13323   gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
13324 
13325   e = purpose_member (name, TYPE_VALUES (enumtype));
13326   return e? TREE_VALUE (e) : NULL_TREE;
13327 }
13328 
13329 
13330 /* We're defining DECL.  Make sure that its type is OK.  */
13331 
13332 static void
13333 check_function_type (tree decl, tree current_function_parms)
13334 {
13335   tree fntype = TREE_TYPE (decl);
13336   tree return_type = complete_type (TREE_TYPE (fntype));
13337 
13338   /* In a function definition, arg types must be complete.  */
13339   require_complete_types_for_parms (current_function_parms);
13340 
13341   if (dependent_type_p (return_type)
13342       || type_uses_auto (return_type))
13343     return;
13344   if (!COMPLETE_OR_VOID_TYPE_P (return_type)
13345       || (TYPE_FOR_JAVA (return_type) && MAYBE_CLASS_TYPE_P (return_type)))
13346     {
13347       tree args = TYPE_ARG_TYPES (fntype);
13348 
13349       if (!COMPLETE_OR_VOID_TYPE_P (return_type))
13350 	error ("return type %q#T is incomplete", return_type);
13351       else
13352 	error ("return type has Java class type %q#T", return_type);
13353 
13354       /* Make it return void instead.  */
13355       if (TREE_CODE (fntype) == METHOD_TYPE)
13356 	fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
13357 					     void_type_node,
13358 					     TREE_CHAIN (args));
13359       else
13360 	fntype = build_function_type (void_type_node, args);
13361       fntype
13362 	= build_exception_variant (fntype,
13363 				   TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
13364       fntype = (cp_build_type_attribute_variant
13365 		(fntype, TYPE_ATTRIBUTES (TREE_TYPE (decl))));
13366       TREE_TYPE (decl) = fntype;
13367     }
13368   else
13369     abstract_virtuals_error (decl, TREE_TYPE (fntype));
13370 }
13371 
13372 /* Create the FUNCTION_DECL for a function definition.
13373    DECLSPECS and DECLARATOR are the parts of the declaration;
13374    they describe the function's name and the type it returns,
13375    but twisted together in a fashion that parallels the syntax of C.
13376 
13377    FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
13378    DECLARATOR is really the DECL for the function we are about to
13379    process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
13380    indicating that the function is an inline defined in-class.
13381 
13382    This function creates a binding context for the function body
13383    as well as setting up the FUNCTION_DECL in current_function_decl.
13384 
13385    For C++, we must first check whether that datum makes any sense.
13386    For example, "class A local_a(1,2);" means that variable local_a
13387    is an aggregate of type A, which should have a constructor
13388    applied to it with the argument list [1, 2].
13389 
13390    On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
13391    or may be a BLOCK if the function has been defined previously
13392    in this translation unit.  On exit, DECL_INITIAL (decl1) will be
13393    error_mark_node if the function has never been defined, or
13394    a BLOCK if the function has been defined somewhere.  */
13395 
13396 bool
13397 start_preparsed_function (tree decl1, tree attrs, int flags)
13398 {
13399   tree ctype = NULL_TREE;
13400   tree fntype;
13401   tree restype;
13402   int doing_friend = 0;
13403   cp_binding_level *bl;
13404   tree current_function_parms;
13405   struct c_fileinfo *finfo
13406     = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
13407   bool honor_interface;
13408 
13409   /* Sanity check.  */
13410   gcc_assert (VOID_TYPE_P (TREE_VALUE (void_list_node)));
13411   gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
13412 
13413   fntype = TREE_TYPE (decl1);
13414   if (TREE_CODE (fntype) == METHOD_TYPE)
13415     ctype = TYPE_METHOD_BASETYPE (fntype);
13416 
13417   /* ISO C++ 11.4/5.  A friend function defined in a class is in
13418      the (lexical) scope of the class in which it is defined.  */
13419   if (!ctype && DECL_FRIEND_P (decl1))
13420     {
13421       ctype = DECL_FRIEND_CONTEXT (decl1);
13422 
13423       /* CTYPE could be null here if we're dealing with a template;
13424 	 for example, `inline friend float foo()' inside a template
13425 	 will have no CTYPE set.  */
13426       if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
13427 	ctype = NULL_TREE;
13428       else
13429 	doing_friend = 1;
13430     }
13431 
13432   if (DECL_DECLARED_INLINE_P (decl1)
13433       && lookup_attribute ("noinline", attrs))
13434     warning (0, "inline function %q+D given attribute noinline", decl1);
13435 
13436   /* Handle gnu_inline attribute.  */
13437   if (GNU_INLINE_P (decl1))
13438     {
13439       DECL_EXTERNAL (decl1) = 1;
13440       DECL_NOT_REALLY_EXTERN (decl1) = 0;
13441       DECL_INTERFACE_KNOWN (decl1) = 1;
13442       DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
13443     }
13444 
13445   if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
13446     /* This is a constructor, we must ensure that any default args
13447        introduced by this definition are propagated to the clones
13448        now. The clones are used directly in overload resolution.  */
13449     adjust_clone_args (decl1);
13450 
13451   /* Sometimes we don't notice that a function is a static member, and
13452      build a METHOD_TYPE for it.  Fix that up now.  */
13453   gcc_assert (!(ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
13454 		&& TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE));
13455 
13456   /* Set up current_class_type, and enter the scope of the class, if
13457      appropriate.  */
13458   if (ctype)
13459     push_nested_class (ctype);
13460   else if (DECL_STATIC_FUNCTION_P (decl1))
13461     push_nested_class (DECL_CONTEXT (decl1));
13462 
13463   /* Now that we have entered the scope of the class, we must restore
13464      the bindings for any template parameters surrounding DECL1, if it
13465      is an inline member template.  (Order is important; consider the
13466      case where a template parameter has the same name as a field of
13467      the class.)  It is not until after this point that
13468      PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly.  */
13469   if (flags & SF_INCLASS_INLINE)
13470     maybe_begin_member_template_processing (decl1);
13471 
13472   /* Effective C++ rule 15.  */
13473   if (warn_ecpp
13474       && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
13475       && VOID_TYPE_P (TREE_TYPE (fntype)))
13476     warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
13477 
13478   /* Make the init_value nonzero so pushdecl knows this is not tentative.
13479      error_mark_node is replaced below (in poplevel) with the BLOCK.  */
13480   if (!DECL_INITIAL (decl1))
13481     DECL_INITIAL (decl1) = error_mark_node;
13482 
13483   /* This function exists in static storage.
13484      (This does not mean `static' in the C sense!)  */
13485   TREE_STATIC (decl1) = 1;
13486 
13487   /* We must call push_template_decl after current_class_type is set
13488      up.  (If we are processing inline definitions after exiting a
13489      class scope, current_class_type will be NULL_TREE until set above
13490      by push_nested_class.)  */
13491   if (processing_template_decl)
13492     {
13493       tree newdecl1 = push_template_decl (decl1);
13494       if (newdecl1 == error_mark_node)
13495 	{
13496 	  if (ctype || DECL_STATIC_FUNCTION_P (decl1))
13497 	    pop_nested_class ();
13498 	  return false;
13499 	}
13500       decl1 = newdecl1;
13501     }
13502 
13503   /* We are now in the scope of the function being defined.  */
13504   current_function_decl = decl1;
13505 
13506   /* Save the parm names or decls from this function's declarator
13507      where store_parm_decls will find them.  */
13508   current_function_parms = DECL_ARGUMENTS (decl1);
13509 
13510   /* Make sure the parameter and return types are reasonable.  When
13511      you declare a function, these types can be incomplete, but they
13512      must be complete when you define the function.  */
13513   check_function_type (decl1, current_function_parms);
13514 
13515   /* Build the return declaration for the function.  */
13516   restype = TREE_TYPE (fntype);
13517 
13518   if (DECL_RESULT (decl1) == NULL_TREE)
13519     {
13520       tree resdecl;
13521 
13522       resdecl = build_decl (input_location, RESULT_DECL, 0, restype);
13523       DECL_ARTIFICIAL (resdecl) = 1;
13524       DECL_IGNORED_P (resdecl) = 1;
13525       DECL_RESULT (decl1) = resdecl;
13526 
13527       cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
13528     }
13529 
13530   /* Let the user know we're compiling this function.  */
13531   announce_function (decl1);
13532 
13533   /* Record the decl so that the function name is defined.
13534      If we already have a decl for this name, and it is a FUNCTION_DECL,
13535      use the old decl.  */
13536   if (!processing_template_decl && !(flags & SF_PRE_PARSED))
13537     {
13538       /* A specialization is not used to guide overload resolution.  */
13539       if (!DECL_FUNCTION_MEMBER_P (decl1)
13540 	  && !(DECL_USE_TEMPLATE (decl1) &&
13541 	       PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
13542 	{
13543 	  tree olddecl = pushdecl (decl1);
13544 
13545 	  if (olddecl == error_mark_node)
13546 	    /* If something went wrong when registering the declaration,
13547 	       use DECL1; we have to have a FUNCTION_DECL to use when
13548 	       parsing the body of the function.  */
13549 	    ;
13550 	  else
13551 	    {
13552 	      /* Otherwise, OLDDECL is either a previous declaration
13553 		 of the same function or DECL1 itself.  */
13554 
13555 	      if (warn_missing_declarations
13556 		  && olddecl == decl1
13557 		  && !DECL_MAIN_P (decl1)
13558 		  && TREE_PUBLIC (decl1)
13559 		  && !DECL_DECLARED_INLINE_P (decl1))
13560 		{
13561 		  tree context;
13562 
13563 		  /* Check whether DECL1 is in an anonymous
13564 		     namespace.  */
13565 		  for (context = DECL_CONTEXT (decl1);
13566 		       context;
13567 		       context = DECL_CONTEXT (context))
13568 		    {
13569 		      if (TREE_CODE (context) == NAMESPACE_DECL
13570 			  && DECL_NAME (context) == NULL_TREE)
13571 			break;
13572 		    }
13573 
13574 		  if (context == NULL)
13575 		    warning (OPT_Wmissing_declarations,
13576 			     "no previous declaration for %q+D", decl1);
13577 		}
13578 
13579 	      decl1 = olddecl;
13580 	    }
13581 	}
13582       else
13583 	{
13584 	  /* We need to set the DECL_CONTEXT.  */
13585 	  if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
13586 	    DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
13587 	}
13588       fntype = TREE_TYPE (decl1);
13589       restype = TREE_TYPE (fntype);
13590 
13591       /* If #pragma weak applies, mark the decl appropriately now.
13592 	 The pragma only applies to global functions.  Because
13593 	 determining whether or not the #pragma applies involves
13594 	 computing the mangled name for the declaration, we cannot
13595 	 apply the pragma until after we have merged this declaration
13596 	 with any previous declarations; if the original declaration
13597 	 has a linkage specification, that specification applies to
13598 	 the definition as well, and may affect the mangled name.  */
13599       if (DECL_FILE_SCOPE_P (decl1))
13600 	maybe_apply_pragma_weak (decl1);
13601     }
13602 
13603   /* Reset this in case the call to pushdecl changed it.  */
13604   current_function_decl = decl1;
13605 
13606   gcc_assert (DECL_INITIAL (decl1));
13607 
13608   /* This function may already have been parsed, in which case just
13609      return; our caller will skip over the body without parsing.  */
13610   if (DECL_INITIAL (decl1) != error_mark_node)
13611     return true;
13612 
13613   /* Initialize RTL machinery.  We cannot do this until
13614      CURRENT_FUNCTION_DECL and DECL_RESULT are set up.  We do this
13615      even when processing a template; this is how we get
13616      CFUN set up, and our per-function variables initialized.
13617      FIXME factor out the non-RTL stuff.  */
13618   bl = current_binding_level;
13619   allocate_struct_function (decl1, processing_template_decl);
13620 
13621   /* Initialize the language data structures.  Whenever we start
13622      a new function, we destroy temporaries in the usual way.  */
13623   cfun->language = ggc_cleared_alloc<language_function> ();
13624   current_stmt_tree ()->stmts_are_full_exprs_p = 1;
13625   current_binding_level = bl;
13626 
13627   if (!processing_template_decl && type_uses_auto (restype))
13628     {
13629       FNDECL_USED_AUTO (decl1) = true;
13630       current_function_auto_return_pattern = restype;
13631     }
13632 
13633   /* Start the statement-tree, start the tree now.  */
13634   DECL_SAVED_TREE (decl1) = push_stmt_list ();
13635 
13636   /* If we are (erroneously) defining a function that we have already
13637      defined before, wipe out what we knew before.  */
13638   if (!DECL_PENDING_INLINE_P (decl1))
13639     DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
13640 
13641   if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
13642     {
13643       /* We know that this was set up by `grokclassfn'.  We do not
13644 	 wait until `store_parm_decls', since evil parse errors may
13645 	 never get us to that point.  Here we keep the consistency
13646 	 between `current_class_type' and `current_class_ptr'.  */
13647       tree t = DECL_ARGUMENTS (decl1);
13648 
13649       gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
13650       gcc_assert (TYPE_PTR_P (TREE_TYPE (t)));
13651 
13652       cp_function_chain->x_current_class_ref
13653 	= cp_build_indirect_ref (t, RO_NULL, tf_warning_or_error);
13654       /* Set this second to avoid shortcut in cp_build_indirect_ref.  */
13655       cp_function_chain->x_current_class_ptr = t;
13656 
13657       /* Constructors and destructors need to know whether they're "in
13658 	 charge" of initializing virtual base classes.  */
13659       t = DECL_CHAIN (t);
13660       if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
13661 	{
13662 	  current_in_charge_parm = t;
13663 	  t = DECL_CHAIN (t);
13664 	}
13665       if (DECL_HAS_VTT_PARM_P (decl1))
13666 	{
13667 	  gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
13668 	  current_vtt_parm = t;
13669 	}
13670     }
13671 
13672   honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
13673 		     /* Implicitly-defined methods (like the
13674 			destructor for a class in which no destructor
13675 			is explicitly declared) must not be defined
13676 			until their definition is needed.  So, we
13677 			ignore interface specifications for
13678 			compiler-generated functions.  */
13679 		     && !DECL_ARTIFICIAL (decl1));
13680 
13681   if (processing_template_decl)
13682     /* Don't mess with interface flags.  */;
13683   else if (DECL_INTERFACE_KNOWN (decl1))
13684     {
13685       tree ctx = decl_function_context (decl1);
13686 
13687       if (DECL_NOT_REALLY_EXTERN (decl1))
13688 	DECL_EXTERNAL (decl1) = 0;
13689 
13690       if (ctx != NULL_TREE && vague_linkage_p (ctx))
13691 	/* This is a function in a local class in an extern inline
13692 	   or template function.  */
13693 	comdat_linkage (decl1);
13694     }
13695   /* If this function belongs to an interface, it is public.
13696      If it belongs to someone else's interface, it is also external.
13697      This only affects inlines and template instantiations.  */
13698   else if (!finfo->interface_unknown && honor_interface)
13699     {
13700       if (DECL_DECLARED_INLINE_P (decl1)
13701 	  || DECL_TEMPLATE_INSTANTIATION (decl1))
13702 	{
13703 	  DECL_EXTERNAL (decl1)
13704 	    = (finfo->interface_only
13705 	       || (DECL_DECLARED_INLINE_P (decl1)
13706 		   && ! flag_implement_inlines
13707 		   && !DECL_VINDEX (decl1)));
13708 
13709 	  /* For WIN32 we also want to put these in linkonce sections.  */
13710 	  maybe_make_one_only (decl1);
13711 	}
13712       else
13713 	DECL_EXTERNAL (decl1) = 0;
13714       DECL_INTERFACE_KNOWN (decl1) = 1;
13715       /* If this function is in an interface implemented in this file,
13716 	 make sure that the back end knows to emit this function
13717 	 here.  */
13718       if (!DECL_EXTERNAL (decl1))
13719 	mark_needed (decl1);
13720     }
13721   else if (finfo->interface_unknown && finfo->interface_only
13722 	   && honor_interface)
13723     {
13724       /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
13725 	 interface, we will have both finfo->interface_unknown and
13726 	 finfo->interface_only set.  In that case, we don't want to
13727 	 use the normal heuristics because someone will supply a
13728 	 #pragma implementation elsewhere, and deducing it here would
13729 	 produce a conflict.  */
13730       comdat_linkage (decl1);
13731       DECL_EXTERNAL (decl1) = 0;
13732       DECL_INTERFACE_KNOWN (decl1) = 1;
13733       DECL_DEFER_OUTPUT (decl1) = 1;
13734     }
13735   else
13736     {
13737       /* This is a definition, not a reference.
13738 	 So clear DECL_EXTERNAL, unless this is a GNU extern inline.  */
13739       if (!GNU_INLINE_P (decl1))
13740 	DECL_EXTERNAL (decl1) = 0;
13741 
13742       if ((DECL_DECLARED_INLINE_P (decl1)
13743 	   || DECL_TEMPLATE_INSTANTIATION (decl1))
13744 	  && ! DECL_INTERFACE_KNOWN (decl1))
13745 	DECL_DEFER_OUTPUT (decl1) = 1;
13746       else
13747 	DECL_INTERFACE_KNOWN (decl1) = 1;
13748     }
13749 
13750   /* Determine the ELF visibility attribute for the function.  We must not
13751      do this before calling "pushdecl", as we must allow "duplicate_decls"
13752      to merge any attributes appropriately.  We also need to wait until
13753      linkage is set.  */
13754   if (!DECL_CLONED_FUNCTION_P (decl1))
13755     determine_visibility (decl1);
13756 
13757   if (!processing_template_decl)
13758     maybe_instantiate_noexcept (decl1);
13759 
13760   begin_scope (sk_function_parms, decl1);
13761 
13762   ++function_depth;
13763 
13764   if (DECL_DESTRUCTOR_P (decl1)
13765       || (DECL_CONSTRUCTOR_P (decl1)
13766 	  && targetm.cxx.cdtor_returns_this ()))
13767     {
13768       cdtor_label = create_artificial_label (input_location);
13769     }
13770 
13771   start_fname_decls ();
13772 
13773   store_parm_decls (current_function_parms);
13774 
13775   return true;
13776 }
13777 
13778 
13779 /* Like start_preparsed_function, except that instead of a
13780    FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
13781 
13782    Returns true on success.  If the DECLARATOR is not suitable
13783    for a function, we return false, which tells the parser to
13784    skip the entire function.  */
13785 
13786 bool
13787 start_function (cp_decl_specifier_seq *declspecs,
13788 		const cp_declarator *declarator,
13789 		tree attrs)
13790 {
13791   tree decl1;
13792 
13793   decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
13794   if (decl1 == error_mark_node)
13795     return false;
13796   /* If the declarator is not suitable for a function definition,
13797      cause a syntax error.  */
13798   if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
13799     {
13800       error ("invalid function declaration");
13801       return false;
13802     }
13803 
13804   if (DECL_MAIN_P (decl1))
13805     /* main must return int.  grokfndecl should have corrected it
13806        (and issued a diagnostic) if the user got it wrong.  */
13807     gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
13808 			     integer_type_node));
13809 
13810   return start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
13811 }
13812 
13813 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
13814    FN.  */
13815 
13816 static bool
13817 use_eh_spec_block (tree fn)
13818 {
13819   return (flag_exceptions && flag_enforce_eh_specs
13820 	  && !processing_template_decl
13821 	  && !type_throw_all_p (TREE_TYPE (fn))
13822 	  /* We insert the EH_SPEC_BLOCK only in the original
13823 	     function; then, it is copied automatically to the
13824 	     clones.  */
13825 	  && !DECL_CLONED_FUNCTION_P (fn)
13826 	  /* Implicitly-generated constructors and destructors have
13827 	     exception specifications.  However, those specifications
13828 	     are the union of the possible exceptions specified by the
13829 	     constructors/destructors for bases and members, so no
13830 	     unallowed exception will ever reach this function.  By
13831 	     not creating the EH_SPEC_BLOCK we save a little memory,
13832 	     and we avoid spurious warnings about unreachable
13833 	     code.  */
13834 	  && !DECL_DEFAULTED_FN (fn));
13835 }
13836 
13837 /* Store the parameter declarations into the current function declaration.
13838    This is called after parsing the parameter declarations, before
13839    digesting the body of the function.
13840 
13841    Also install to binding contour return value identifier, if any.  */
13842 
13843 static void
13844 store_parm_decls (tree current_function_parms)
13845 {
13846   tree fndecl = current_function_decl;
13847   tree parm;
13848 
13849   /* This is a chain of any other decls that came in among the parm
13850      declarations.  If a parm is declared with  enum {foo, bar} x;
13851      then CONST_DECLs for foo and bar are put here.  */
13852   tree nonparms = NULL_TREE;
13853 
13854   if (current_function_parms)
13855     {
13856       /* This case is when the function was defined with an ANSI prototype.
13857 	 The parms already have decls, so we need not do anything here
13858 	 except record them as in effect
13859 	 and complain if any redundant old-style parm decls were written.  */
13860 
13861       tree specparms = current_function_parms;
13862       tree next;
13863 
13864       /* Must clear this because it might contain TYPE_DECLs declared
13865 	     at class level.  */
13866       current_binding_level->names = NULL;
13867 
13868       /* If we're doing semantic analysis, then we'll call pushdecl
13869 	     for each of these.  We must do them in reverse order so that
13870 	     they end in the correct forward order.  */
13871       specparms = nreverse (specparms);
13872 
13873       for (parm = specparms; parm; parm = next)
13874 	{
13875 	  next = DECL_CHAIN (parm);
13876 	  if (TREE_CODE (parm) == PARM_DECL)
13877 	    {
13878 	      if (DECL_NAME (parm) == NULL_TREE
13879 		  || !VOID_TYPE_P (parm))
13880 		pushdecl (parm);
13881 	      else
13882 		error ("parameter %qD declared void", parm);
13883 	    }
13884 	  else
13885 	    {
13886 	      /* If we find an enum constant or a type tag,
13887 		 put it aside for the moment.  */
13888 	      TREE_CHAIN (parm) = NULL_TREE;
13889 	      nonparms = chainon (nonparms, parm);
13890 	    }
13891 	}
13892 
13893       /* Get the decls in their original chain order and record in the
13894 	 function.  This is all and only the PARM_DECLs that were
13895 	 pushed into scope by the loop above.  */
13896       DECL_ARGUMENTS (fndecl) = getdecls ();
13897     }
13898   else
13899     DECL_ARGUMENTS (fndecl) = NULL_TREE;
13900 
13901   /* Now store the final chain of decls for the arguments
13902      as the decl-chain of the current lexical scope.
13903      Put the enumerators in as well, at the front so that
13904      DECL_ARGUMENTS is not modified.  */
13905   current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
13906 
13907   if (use_eh_spec_block (current_function_decl))
13908     current_eh_spec_block = begin_eh_spec_block ();
13909 }
13910 
13911 
13912 /* We have finished doing semantic analysis on DECL, but have not yet
13913    generated RTL for its body.  Save away our current state, so that
13914    when we want to generate RTL later we know what to do.  */
13915 
13916 static void
13917 save_function_data (tree decl)
13918 {
13919   struct language_function *f;
13920 
13921   /* Save the language-specific per-function data so that we can
13922      get it back when we really expand this function.  */
13923   gcc_assert (!DECL_PENDING_INLINE_P (decl));
13924 
13925   /* Make a copy.  */
13926   f = ggc_alloc<language_function> ();
13927   memcpy (f, cp_function_chain, sizeof (struct language_function));
13928   DECL_SAVED_FUNCTION_DATA (decl) = f;
13929 
13930   /* Clear out the bits we don't need.  */
13931   f->base.x_stmt_tree.x_cur_stmt_list = NULL;
13932   f->bindings = NULL;
13933   f->x_local_names = NULL;
13934   f->base.local_typedefs = NULL;
13935 }
13936 
13937 
13938 /* Set the return value of the constructor (if present).  */
13939 
13940 static void
13941 finish_constructor_body (void)
13942 {
13943   tree val;
13944   tree exprstmt;
13945 
13946   if (targetm.cxx.cdtor_returns_this ()
13947       && (! TYPE_FOR_JAVA (current_class_type)))
13948     {
13949       /* Any return from a constructor will end up here.  */
13950       add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
13951 
13952       val = DECL_ARGUMENTS (current_function_decl);
13953       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
13954 		    DECL_RESULT (current_function_decl), val);
13955       /* Return the address of the object.  */
13956       exprstmt = build_stmt (input_location, RETURN_EXPR, val);
13957       add_stmt (exprstmt);
13958     }
13959 }
13960 
13961 /* Do all the processing for the beginning of a destructor; set up the
13962    vtable pointers and cleanups for bases and members.  */
13963 
13964 static void
13965 begin_destructor_body (void)
13966 {
13967   tree compound_stmt;
13968 
13969   /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
13970      issued an error message.  We still want to try to process the
13971      body of the function, but initialize_vtbl_ptrs will crash if
13972      TYPE_BINFO is NULL.  */
13973   if (COMPLETE_TYPE_P (current_class_type))
13974     {
13975       compound_stmt = begin_compound_stmt (0);
13976       /* Make all virtual function table pointers in non-virtual base
13977 	 classes point to CURRENT_CLASS_TYPE's virtual function
13978 	 tables.  */
13979       initialize_vtbl_ptrs (current_class_ptr);
13980       finish_compound_stmt (compound_stmt);
13981 
13982       if (flag_lifetime_dse
13983 	  /* Clobbering an empty base is harmful if it overlays real data.  */
13984 	  && !is_empty_class (current_class_type))
13985 	{
13986 	  /* Insert a cleanup to let the back end know that the object is dead
13987 	     when we exit the destructor, either normally or via exception.  */
13988 	  tree btype = CLASSTYPE_AS_BASE (current_class_type);
13989 	  tree clobber = build_constructor (btype, NULL);
13990 	  TREE_THIS_VOLATILE (clobber) = true;
13991 	  tree bref = build_nop (build_reference_type (btype),
13992 				 current_class_ptr);
13993 	  bref = convert_from_reference (bref);
13994 	  tree exprstmt = build2 (MODIFY_EXPR, btype, bref, clobber);
13995 	  finish_decl_cleanup (NULL_TREE, exprstmt);
13996 	}
13997 
13998       /* And insert cleanups for our bases and members so that they
13999 	 will be properly destroyed if we throw.  */
14000       push_base_cleanups ();
14001     }
14002 }
14003 
14004 /* At the end of every destructor we generate code to delete the object if
14005    necessary.  Do that now.  */
14006 
14007 static void
14008 finish_destructor_body (void)
14009 {
14010   tree exprstmt;
14011 
14012   /* Any return from a destructor will end up here; that way all base
14013      and member cleanups will be run when the function returns.  */
14014   add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
14015 
14016   /* In a virtual destructor, we must call delete.  */
14017   if (DECL_VIRTUAL_P (current_function_decl))
14018     {
14019       tree if_stmt;
14020       tree virtual_size = cxx_sizeof (current_class_type);
14021 
14022       /* [class.dtor]
14023 
14024       At the point of definition of a virtual destructor (including
14025       an implicit definition), non-placement operator delete shall
14026       be looked up in the scope of the destructor's class and if
14027       found shall be accessible and unambiguous.  */
14028       exprstmt = build_op_delete_call (DELETE_EXPR, current_class_ptr,
14029 				       virtual_size,
14030 				       /*global_p=*/false,
14031 				       /*placement=*/NULL_TREE,
14032 				       /*alloc_fn=*/NULL_TREE,
14033 				       tf_warning_or_error);
14034 
14035       if_stmt = begin_if_stmt ();
14036       finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
14037 				   current_in_charge_parm,
14038 				   integer_one_node),
14039 			   if_stmt);
14040       finish_expr_stmt (exprstmt);
14041       finish_then_clause (if_stmt);
14042       finish_if_stmt (if_stmt);
14043     }
14044 
14045   if (targetm.cxx.cdtor_returns_this ())
14046     {
14047       tree val;
14048 
14049       val = DECL_ARGUMENTS (current_function_decl);
14050       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
14051 		    DECL_RESULT (current_function_decl), val);
14052       /* Return the address of the object.  */
14053       exprstmt = build_stmt (input_location, RETURN_EXPR, val);
14054       add_stmt (exprstmt);
14055     }
14056 }
14057 
14058 /* Do the necessary processing for the beginning of a function body, which
14059    in this case includes member-initializers, but not the catch clauses of
14060    a function-try-block.  Currently, this means opening a binding level
14061    for the member-initializers (in a ctor), member cleanups (in a dtor),
14062    and capture proxies (in a lambda operator()).  */
14063 
14064 tree
14065 begin_function_body (void)
14066 {
14067   tree stmt;
14068 
14069   if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
14070     return NULL_TREE;
14071 
14072   if (processing_template_decl)
14073     /* Do nothing now.  */;
14074   else
14075     /* Always keep the BLOCK node associated with the outermost pair of
14076        curly braces of a function.  These are needed for correct
14077        operation of dwarfout.c.  */
14078     keep_next_level (true);
14079 
14080   stmt = begin_compound_stmt (BCS_FN_BODY);
14081 
14082   if (processing_template_decl)
14083     /* Do nothing now.  */;
14084   else if (DECL_DESTRUCTOR_P (current_function_decl))
14085     begin_destructor_body ();
14086 
14087   return stmt;
14088 }
14089 
14090 /* Do the processing for the end of a function body.  Currently, this means
14091    closing out the cleanups for fully-constructed bases and members, and in
14092    the case of the destructor, deleting the object if desired.  Again, this
14093    is only meaningful for [cd]tors, since they are the only functions where
14094    there is a significant distinction between the main body and any
14095    function catch clauses.  Handling, say, main() return semantics here
14096    would be wrong, as flowing off the end of a function catch clause for
14097    main() would also need to return 0.  */
14098 
14099 void
14100 finish_function_body (tree compstmt)
14101 {
14102   if (compstmt == NULL_TREE)
14103     return;
14104 
14105   /* Close the block.  */
14106   finish_compound_stmt (compstmt);
14107 
14108   if (processing_template_decl)
14109     /* Do nothing now.  */;
14110   else if (DECL_CONSTRUCTOR_P (current_function_decl))
14111     finish_constructor_body ();
14112   else if (DECL_DESTRUCTOR_P (current_function_decl))
14113     finish_destructor_body ();
14114 }
14115 
14116 /* Given a function, returns the BLOCK corresponding to the outermost level
14117    of curly braces, skipping the artificial block created for constructor
14118    initializers.  */
14119 
14120 tree
14121 outer_curly_brace_block (tree fndecl)
14122 {
14123   tree block = DECL_INITIAL (fndecl);
14124   if (BLOCK_OUTER_CURLY_BRACE_P (block))
14125     return block;
14126   block = BLOCK_SUBBLOCKS (block);
14127   if (BLOCK_OUTER_CURLY_BRACE_P (block))
14128     return block;
14129   block = BLOCK_SUBBLOCKS (block);
14130   gcc_assert (BLOCK_OUTER_CURLY_BRACE_P (block));
14131   return block;
14132 }
14133 
14134 /* If FNDECL is a class's key method, add the class to the list of
14135    keyed classes that should be emitted.  */
14136 
14137 static void
14138 record_key_method_defined (tree fndecl)
14139 {
14140   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
14141       && DECL_VIRTUAL_P (fndecl)
14142       && !processing_template_decl)
14143     {
14144       tree fnclass = DECL_CONTEXT (fndecl);
14145       if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
14146 	keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
14147     }
14148 }
14149 
14150 /* Subroutine of finish_function.
14151    Save the body of constexpr functions for possible
14152    future compile time evaluation.  */
14153 
14154 static void
14155 maybe_save_function_definition (tree fun)
14156 {
14157   if (!processing_template_decl
14158       && DECL_DECLARED_CONSTEXPR_P (fun)
14159       && !cp_function_chain->invalid_constexpr
14160       && !DECL_CLONED_FUNCTION_P (fun))
14161     register_constexpr_fundef (fun, DECL_SAVED_TREE (fun));
14162 }
14163 
14164 /* Finish up a function declaration and compile that function
14165    all the way to assembler language output.  The free the storage
14166    for the function definition.
14167 
14168    FLAGS is a bitwise or of the following values:
14169      2 - INCLASS_INLINE
14170        We just finished processing the body of an in-class inline
14171        function definition.  (This processing will have taken place
14172        after the class definition is complete.)  */
14173 
14174 tree
14175 finish_function (int flags)
14176 {
14177   tree fndecl = current_function_decl;
14178   tree fntype, ctype = NULL_TREE;
14179   int inclass_inline = (flags & 2) != 0;
14180 
14181   /* When we get some parse errors, we can end up without a
14182      current_function_decl, so cope.  */
14183   if (fndecl == NULL_TREE)
14184     return error_mark_node;
14185 
14186   if (c_dialect_objc ())
14187     objc_finish_function ();
14188 
14189   gcc_assert (!defer_mark_used_calls);
14190   defer_mark_used_calls = true;
14191 
14192   record_key_method_defined (fndecl);
14193 
14194   fntype = TREE_TYPE (fndecl);
14195 
14196   /*  TREE_READONLY (fndecl) = 1;
14197       This caused &foo to be of type ptr-to-const-function
14198       which then got a warning when stored in a ptr-to-function variable.  */
14199 
14200   gcc_assert (building_stmt_list_p ());
14201   /* The current function is being defined, so its DECL_INITIAL should
14202      be set, and unless there's a multiple definition, it should be
14203      error_mark_node.  */
14204   gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
14205 
14206   /* For a cloned function, we've already got all the code we need;
14207      there's no need to add any extra bits.  */
14208   if (!DECL_CLONED_FUNCTION_P (fndecl))
14209     {
14210       /* Make it so that `main' always returns 0 by default.  */
14211       if (DECL_MAIN_P (current_function_decl))
14212 	finish_return_stmt (integer_zero_node);
14213 
14214       if (use_eh_spec_block (current_function_decl))
14215 	finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
14216 			      (TREE_TYPE (current_function_decl)),
14217 			      current_eh_spec_block);
14218     }
14219 
14220   /* If we're saving up tree structure, tie off the function now.  */
14221   DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
14222 
14223   if (fn_contains_cilk_spawn_p (cfun) && !processing_template_decl)
14224     cfun->cilk_frame_decl = insert_cilk_frame (fndecl);
14225 
14226   finish_fname_decls ();
14227 
14228   /* If this function can't throw any exceptions, remember that.  */
14229   if (!processing_template_decl
14230       && !cp_function_chain->can_throw
14231       && !flag_non_call_exceptions
14232       && !decl_replaceable_p (fndecl))
14233     TREE_NOTHROW (fndecl) = 1;
14234 
14235   /* This must come after expand_function_end because cleanups might
14236      have declarations (from inline functions) that need to go into
14237      this function's blocks.  */
14238 
14239   /* If the current binding level isn't the outermost binding level
14240      for this function, either there is a bug, or we have experienced
14241      syntax errors and the statement tree is malformed.  */
14242   if (current_binding_level->kind != sk_function_parms)
14243     {
14244       /* Make sure we have already experienced errors.  */
14245       gcc_assert (errorcount);
14246 
14247       /* Throw away the broken statement tree and extra binding
14248 	 levels.  */
14249       DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
14250 
14251       while (current_binding_level->kind != sk_function_parms)
14252 	{
14253 	  if (current_binding_level->kind == sk_class)
14254 	    pop_nested_class ();
14255 	  else
14256 	    poplevel (0, 0, 0);
14257 	}
14258     }
14259   poplevel (1, 0, 1);
14260 
14261   /* Statements should always be full-expressions at the outermost set
14262      of curly braces for a function.  */
14263   gcc_assert (stmts_are_full_exprs_p ());
14264 
14265   /* If there are no return statements in a function with auto return type,
14266      the return type is void.  But if the declared type is something like
14267      auto*, this is an error.  */
14268   if (!processing_template_decl && FNDECL_USED_AUTO (fndecl)
14269       && TREE_TYPE (fntype) == current_function_auto_return_pattern)
14270     {
14271       if (!is_auto (current_function_auto_return_pattern)
14272 	  && !current_function_returns_value && !current_function_returns_null)
14273 	{
14274 	  error ("no return statements in function returning %qT",
14275 		 current_function_auto_return_pattern);
14276 	  inform (input_location, "only plain %<auto%> return type can be "
14277 		  "deduced to %<void%>");
14278 	}
14279       apply_deduced_return_type (fndecl, void_type_node);
14280       fntype = TREE_TYPE (fndecl);
14281     }
14282 
14283   /* Save constexpr function body before it gets munged by
14284      the NRV transformation.   */
14285   maybe_save_function_definition (fndecl);
14286 
14287   /* Set up the named return value optimization, if we can.  Candidate
14288      variables are selected in check_return_expr.  */
14289   if (current_function_return_value)
14290     {
14291       tree r = current_function_return_value;
14292       tree outer;
14293 
14294       if (r != error_mark_node
14295 	  /* This is only worth doing for fns that return in memory--and
14296 	     simpler, since we don't have to worry about promoted modes.  */
14297 	  && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
14298 	  /* Only allow this for variables declared in the outer scope of
14299 	     the function so we know that their lifetime always ends with a
14300 	     return; see g++.dg/opt/nrv6.C.  We could be more flexible if
14301 	     we were to do this optimization in tree-ssa.  */
14302 	  && (outer = outer_curly_brace_block (fndecl))
14303 	  && chain_member (r, BLOCK_VARS (outer)))
14304 	finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
14305 
14306       current_function_return_value = NULL_TREE;
14307     }
14308 
14309   /* Remember that we were in class scope.  */
14310   if (current_class_name)
14311     ctype = current_class_type;
14312 
14313   /* Must mark the RESULT_DECL as being in this function.  */
14314   DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
14315 
14316   /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
14317      to the FUNCTION_DECL node itself.  */
14318   BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
14319 
14320   /* Save away current state, if appropriate.  */
14321   if (!processing_template_decl)
14322     save_function_data (fndecl);
14323 
14324   /* Complain if there's just no return statement.  */
14325   if (warn_return_type
14326       && !VOID_TYPE_P (TREE_TYPE (fntype))
14327       && !dependent_type_p (TREE_TYPE (fntype))
14328       && !current_function_returns_value && !current_function_returns_null
14329       /* Don't complain if we abort or throw.  */
14330       && !current_function_returns_abnormally
14331       /* Don't complain if there's an infinite loop.  */
14332       && !current_function_infinite_loop
14333       /* Don't complain if we are declared noreturn.  */
14334       && !TREE_THIS_VOLATILE (fndecl)
14335       && !DECL_NAME (DECL_RESULT (fndecl))
14336       && !TREE_NO_WARNING (fndecl)
14337       /* Structor return values (if any) are set by the compiler.  */
14338       && !DECL_CONSTRUCTOR_P (fndecl)
14339       && !DECL_DESTRUCTOR_P (fndecl)
14340       && targetm.warn_func_return (fndecl))
14341     {
14342       warning (OPT_Wreturn_type,
14343  	       "no return statement in function returning non-void");
14344       TREE_NO_WARNING (fndecl) = 1;
14345     }
14346 
14347   /* Store the end of the function, so that we get good line number
14348      info for the epilogue.  */
14349   cfun->function_end_locus = input_location;
14350 
14351   /* Complain about parameters that are only set, but never otherwise used.  */
14352   if (warn_unused_but_set_parameter
14353       && !processing_template_decl
14354       && errorcount == unused_but_set_errorcount
14355       && !DECL_CLONED_FUNCTION_P (fndecl))
14356     {
14357       tree decl;
14358 
14359       for (decl = DECL_ARGUMENTS (fndecl);
14360 	   decl;
14361 	   decl = DECL_CHAIN (decl))
14362 	if (TREE_USED (decl)
14363 	    && TREE_CODE (decl) == PARM_DECL
14364 	    && !DECL_READ_P (decl)
14365 	    && DECL_NAME (decl)
14366 	    && !DECL_ARTIFICIAL (decl)
14367 	    && !TREE_NO_WARNING (decl)
14368 	    && !DECL_IN_SYSTEM_HEADER (decl)
14369 	    && TREE_TYPE (decl) != error_mark_node
14370 	    && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
14371 	    && (!CLASS_TYPE_P (TREE_TYPE (decl))
14372 	        || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
14373 	  warning (OPT_Wunused_but_set_parameter,
14374 		   "parameter %q+D set but not used", decl);
14375       unused_but_set_errorcount = errorcount;
14376     }
14377 
14378   /* Complain about locally defined typedefs that are not used in this
14379      function.  */
14380   maybe_warn_unused_local_typedefs ();
14381 
14382   /* Genericize before inlining.  */
14383   if (!processing_template_decl)
14384     {
14385       struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
14386       invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
14387       cp_genericize (fndecl);
14388       /* Clear out the bits we don't need.  */
14389       f->x_current_class_ptr = NULL;
14390       f->x_current_class_ref = NULL;
14391       f->x_eh_spec_block = NULL;
14392       f->x_in_charge_parm = NULL;
14393       f->x_vtt_parm = NULL;
14394       f->x_return_value = NULL;
14395       f->bindings = NULL;
14396       f->extern_decl_map = NULL;
14397       f->infinite_loops = NULL;
14398     }
14399   /* Clear out the bits we don't need.  */
14400   local_names = NULL;
14401 
14402   /* We're leaving the context of this function, so zap cfun.  It's still in
14403      DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation.  */
14404   set_cfun (NULL);
14405   current_function_decl = NULL;
14406 
14407   /* If this is an in-class inline definition, we may have to pop the
14408      bindings for the template parameters that we added in
14409      maybe_begin_member_template_processing when start_function was
14410      called.  */
14411   if (inclass_inline)
14412     maybe_end_member_template_processing ();
14413 
14414   /* Leave the scope of the class.  */
14415   if (ctype)
14416     pop_nested_class ();
14417 
14418   --function_depth;
14419 
14420   /* Clean up.  */
14421   current_function_decl = NULL_TREE;
14422 
14423   defer_mark_used_calls = false;
14424   if (deferred_mark_used_calls)
14425     {
14426       unsigned int i;
14427       tree decl;
14428 
14429       FOR_EACH_VEC_SAFE_ELT (deferred_mark_used_calls, i, decl)
14430 	mark_used (decl);
14431       vec_free (deferred_mark_used_calls);
14432     }
14433 
14434   return fndecl;
14435 }
14436 
14437 /* Create the FUNCTION_DECL for a function definition.
14438    DECLSPECS and DECLARATOR are the parts of the declaration;
14439    they describe the return type and the name of the function,
14440    but twisted together in a fashion that parallels the syntax of C.
14441 
14442    This function creates a binding context for the function body
14443    as well as setting up the FUNCTION_DECL in current_function_decl.
14444 
14445    Returns a FUNCTION_DECL on success.
14446 
14447    If the DECLARATOR is not suitable for a function (it defines a datum
14448    instead), we return 0, which tells yyparse to report a parse error.
14449 
14450    May return void_type_node indicating that this method is actually
14451    a friend.  See grokfield for more details.
14452 
14453    Came here with a `.pushlevel' .
14454 
14455    DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
14456    CHANGES TO CODE IN `grokfield'.  */
14457 
14458 tree
14459 grokmethod (cp_decl_specifier_seq *declspecs,
14460 	    const cp_declarator *declarator, tree attrlist)
14461 {
14462   tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
14463 				&attrlist);
14464 
14465   if (fndecl == error_mark_node)
14466     return error_mark_node;
14467 
14468   if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
14469     {
14470       error ("invalid member function declaration");
14471       return error_mark_node;
14472     }
14473 
14474   if (attrlist)
14475     cplus_decl_attributes (&fndecl, attrlist, 0);
14476 
14477   /* Pass friends other than inline friend functions back.  */
14478   if (fndecl == void_type_node)
14479     return fndecl;
14480 
14481   if (DECL_IN_AGGR_P (fndecl))
14482     {
14483       if (DECL_CLASS_SCOPE_P (fndecl))
14484 	error ("%qD is already defined in class %qT", fndecl,
14485 	       DECL_CONTEXT (fndecl));
14486       return error_mark_node;
14487     }
14488 
14489   check_template_shadow (fndecl);
14490 
14491   DECL_COMDAT (fndecl) = 1;
14492   DECL_DECLARED_INLINE_P (fndecl) = 1;
14493   DECL_NO_INLINE_WARNING_P (fndecl) = 1;
14494 
14495   /* We process method specializations in finish_struct_1.  */
14496   if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
14497     {
14498       fndecl = push_template_decl (fndecl);
14499       if (fndecl == error_mark_node)
14500 	return fndecl;
14501     }
14502 
14503   if (! DECL_FRIEND_P (fndecl))
14504     {
14505       if (DECL_CHAIN (fndecl))
14506 	{
14507 	  fndecl = copy_node (fndecl);
14508 	  TREE_CHAIN (fndecl) = NULL_TREE;
14509 	}
14510     }
14511 
14512   cp_finish_decl (fndecl, NULL_TREE, false, NULL_TREE, 0);
14513 
14514   DECL_IN_AGGR_P (fndecl) = 1;
14515   return fndecl;
14516 }
14517 
14518 
14519 /* VAR is a VAR_DECL.  If its type is incomplete, remember VAR so that
14520    we can lay it out later, when and if its type becomes complete.
14521 
14522    Also handle constexpr variables where the initializer involves
14523    an unlowered PTRMEM_CST because the class isn't complete yet.  */
14524 
14525 void
14526 maybe_register_incomplete_var (tree var)
14527 {
14528   gcc_assert (VAR_P (var));
14529 
14530   /* Keep track of variables with incomplete types.  */
14531   if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
14532       && DECL_EXTERNAL (var))
14533     {
14534       tree inner_type = TREE_TYPE (var);
14535 
14536       while (TREE_CODE (inner_type) == ARRAY_TYPE)
14537 	inner_type = TREE_TYPE (inner_type);
14538       inner_type = TYPE_MAIN_VARIANT (inner_type);
14539 
14540       if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
14541 	  /* RTTI TD entries are created while defining the type_info.  */
14542 	  || (TYPE_LANG_SPECIFIC (inner_type)
14543 	      && TYPE_BEING_DEFINED (inner_type)))
14544 	{
14545 	  incomplete_var iv = {var, inner_type};
14546 	  vec_safe_push (incomplete_vars, iv);
14547 	}
14548       else if (!(DECL_LANG_SPECIFIC (var) && DECL_TEMPLATE_INFO (var))
14549 	       && decl_constant_var_p (var)
14550 	       && (TYPE_PTRMEM_P (inner_type) || CLASS_TYPE_P (inner_type)))
14551 	{
14552 	  /* When the outermost open class is complete we can resolve any
14553 	     pointers-to-members.  */
14554 	  tree context = outermost_open_class ();
14555 	  incomplete_var iv = {var, context};
14556 	  vec_safe_push (incomplete_vars, iv);
14557 	}
14558     }
14559 }
14560 
14561 /* Called when a class type (given by TYPE) is defined.  If there are
14562    any existing VAR_DECLs whose type has been completed by this
14563    declaration, update them now.  */
14564 
14565 void
14566 complete_vars (tree type)
14567 {
14568   unsigned ix;
14569   incomplete_var *iv;
14570 
14571   for (ix = 0; vec_safe_iterate (incomplete_vars, ix, &iv); )
14572     {
14573       if (same_type_p (type, iv->incomplete_type))
14574 	{
14575 	  tree var = iv->decl;
14576 	  tree type = TREE_TYPE (var);
14577 
14578 	  if (type != error_mark_node
14579 	      && (TYPE_MAIN_VARIANT (strip_array_types (type))
14580 		  == iv->incomplete_type))
14581 	    {
14582 	      /* Complete the type of the variable.  The VAR_DECL itself
14583 		 will be laid out in expand_expr.  */
14584 	      complete_type (type);
14585 	      cp_apply_type_quals_to_decl (cp_type_quals (type), var);
14586 	    }
14587 
14588 	  if (DECL_INITIAL (var)
14589 	      && decl_constant_var_p (var))
14590 	    DECL_INITIAL (var) = cplus_expand_constant (DECL_INITIAL (var));
14591 
14592 	  /* Remove this entry from the list.  */
14593 	  incomplete_vars->unordered_remove (ix);
14594 	}
14595       else
14596 	ix++;
14597     }
14598 
14599   /* Check for pending declarations which may have abstract type.  */
14600   complete_type_check_abstract (type);
14601 }
14602 
14603 /* If DECL is of a type which needs a cleanup, build and return an
14604    expression to perform that cleanup here.  Return NULL_TREE if no
14605    cleanup need be done.  DECL can also be a _REF when called from
14606    split_nonconstant_init_1.  */
14607 
14608 tree
14609 cxx_maybe_build_cleanup (tree decl, tsubst_flags_t complain)
14610 {
14611   tree type;
14612   tree attr;
14613   tree cleanup;
14614 
14615   /* Assume no cleanup is required.  */
14616   cleanup = NULL_TREE;
14617 
14618   if (error_operand_p (decl))
14619     return cleanup;
14620 
14621   /* Handle "__attribute__((cleanup))".  We run the cleanup function
14622      before the destructor since the destructor is what actually
14623      terminates the lifetime of the object.  */
14624   if (DECL_P (decl))
14625     attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
14626   else
14627     attr = NULL_TREE;
14628   if (attr)
14629     {
14630       tree id;
14631       tree fn;
14632       tree arg;
14633 
14634       /* Get the name specified by the user for the cleanup function.  */
14635       id = TREE_VALUE (TREE_VALUE (attr));
14636       /* Look up the name to find the cleanup function to call.  It is
14637 	 important to use lookup_name here because that is what is
14638 	 used in c-common.c:handle_cleanup_attribute when performing
14639 	 initial checks on the attribute.  Note that those checks
14640 	 include ensuring that the function found is not an overloaded
14641 	 function, or an object with an overloaded call operator,
14642 	 etc.; we can rely on the fact that the function found is an
14643 	 ordinary FUNCTION_DECL.  */
14644       fn = lookup_name (id);
14645       arg = build_address (decl);
14646       if (!mark_used (decl, complain) && !(complain & tf_error))
14647 	return error_mark_node;
14648       cleanup = cp_build_function_call_nary (fn, complain, arg, NULL_TREE);
14649       if (cleanup == error_mark_node)
14650 	return error_mark_node;
14651     }
14652   /* Handle ordinary C++ destructors.  */
14653   type = TREE_TYPE (decl);
14654   if (type_build_dtor_call (type))
14655     {
14656       int flags = LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR;
14657       tree addr;
14658       tree call;
14659 
14660       if (TREE_CODE (type) == ARRAY_TYPE)
14661 	addr = decl;
14662       else
14663 	addr = build_address (decl);
14664 
14665       call = build_delete (TREE_TYPE (addr), addr,
14666 			   sfk_complete_destructor, flags, 0, complain);
14667       if (call == error_mark_node)
14668 	cleanup = error_mark_node;
14669       else if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
14670 	/* Discard the call.  */;
14671       else if (cleanup)
14672 	cleanup = cp_build_compound_expr (cleanup, call, complain);
14673       else
14674 	cleanup = call;
14675     }
14676 
14677   /* build_delete sets the location of the destructor call to the
14678      current location, even though the destructor is going to be
14679      called later, at the end of the current scope.  This can lead to
14680      a "jumpy" behaviour for users of debuggers when they step around
14681      the end of the block.  So let's unset the location of the
14682      destructor call instead.  */
14683   if (cleanup != NULL && EXPR_P (cleanup))
14684     SET_EXPR_LOCATION (cleanup, UNKNOWN_LOCATION);
14685 
14686   if (cleanup
14687       && DECL_P (decl)
14688       && !lookup_attribute ("warn_unused", TYPE_ATTRIBUTES (TREE_TYPE (decl)))
14689       /* Treat objects with destructors as used; the destructor may do
14690 	 something substantive.  */
14691       && !mark_used (decl, complain) && !(complain & tf_error))
14692     return error_mark_node;
14693 
14694   return cleanup;
14695 }
14696 
14697 
14698 /* Return the FUNCTION_TYPE that corresponds to MEMFNTYPE, which can be a
14699    FUNCTION_DECL, METHOD_TYPE, FUNCTION_TYPE, pointer or reference to
14700    METHOD_TYPE or FUNCTION_TYPE, or pointer to member function.  */
14701 
14702 tree
14703 static_fn_type (tree memfntype)
14704 {
14705   tree fntype;
14706   tree args;
14707 
14708   if (TYPE_PTRMEMFUNC_P (memfntype))
14709     memfntype = TYPE_PTRMEMFUNC_FN_TYPE (memfntype);
14710   if (POINTER_TYPE_P (memfntype)
14711       || TREE_CODE (memfntype) == FUNCTION_DECL)
14712     memfntype = TREE_TYPE (memfntype);
14713   if (TREE_CODE (memfntype) == FUNCTION_TYPE)
14714     return memfntype;
14715   gcc_assert (TREE_CODE (memfntype) == METHOD_TYPE);
14716   args = TYPE_ARG_TYPES (memfntype);
14717   cp_ref_qualifier rqual = type_memfn_rqual (memfntype);
14718   fntype = build_function_type (TREE_TYPE (memfntype), TREE_CHAIN (args));
14719   fntype = apply_memfn_quals (fntype, type_memfn_quals (memfntype), rqual);
14720   fntype = (cp_build_type_attribute_variant
14721 	    (fntype, TYPE_ATTRIBUTES (memfntype)));
14722   fntype = (build_exception_variant
14723 	    (fntype, TYPE_RAISES_EXCEPTIONS (memfntype)));
14724   if (TYPE_HAS_LATE_RETURN_TYPE (memfntype))
14725     TYPE_HAS_LATE_RETURN_TYPE (fntype) = 1;
14726   return fntype;
14727 }
14728 
14729 /* DECL was originally constructed as a non-static member function,
14730    but turned out to be static.  Update it accordingly.  */
14731 
14732 void
14733 revert_static_member_fn (tree decl)
14734 {
14735   tree stype = static_fn_type (decl);
14736   cp_cv_quals quals = type_memfn_quals (stype);
14737   cp_ref_qualifier rqual = type_memfn_rqual (stype);
14738 
14739   if (quals != TYPE_UNQUALIFIED || rqual != REF_QUAL_NONE)
14740     stype = apply_memfn_quals (stype, TYPE_UNQUALIFIED, REF_QUAL_NONE);
14741 
14742   TREE_TYPE (decl) = stype;
14743 
14744   if (DECL_ARGUMENTS (decl))
14745     DECL_ARGUMENTS (decl) = DECL_CHAIN (DECL_ARGUMENTS (decl));
14746   DECL_STATIC_FUNCTION_P (decl) = 1;
14747 }
14748 
14749 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
14750    one of the language-independent trees.  */
14751 
14752 enum cp_tree_node_structure_enum
14753 cp_tree_node_structure (union lang_tree_node * t)
14754 {
14755   switch (TREE_CODE (&t->generic))
14756     {
14757     case DEFAULT_ARG:		return TS_CP_DEFAULT_ARG;
14758     case DEFERRED_NOEXCEPT:	return TS_CP_DEFERRED_NOEXCEPT;
14759     case IDENTIFIER_NODE:	return TS_CP_IDENTIFIER;
14760     case OVERLOAD:		return TS_CP_OVERLOAD;
14761     case TEMPLATE_PARM_INDEX:	return TS_CP_TPI;
14762     case PTRMEM_CST:		return TS_CP_PTRMEM;
14763     case BASELINK:		return TS_CP_BASELINK;
14764     case TEMPLATE_DECL:		return TS_CP_TEMPLATE_DECL;
14765     case STATIC_ASSERT:		return TS_CP_STATIC_ASSERT;
14766     case ARGUMENT_PACK_SELECT:  return TS_CP_ARGUMENT_PACK_SELECT;
14767     case TRAIT_EXPR:		return TS_CP_TRAIT_EXPR;
14768     case LAMBDA_EXPR:		return TS_CP_LAMBDA_EXPR;
14769     case TEMPLATE_INFO:		return TS_CP_TEMPLATE_INFO;
14770     case USERDEF_LITERAL:	return TS_CP_USERDEF_LITERAL;
14771     default:			return TS_CP_GENERIC;
14772     }
14773 }
14774 
14775 /* Build the void_list_node (void_type_node having been created).  */
14776 tree
14777 build_void_list_node (void)
14778 {
14779   tree t = build_tree_list (NULL_TREE, void_type_node);
14780   return t;
14781 }
14782 
14783 bool
14784 cp_missing_noreturn_ok_p (tree decl)
14785 {
14786   /* A missing noreturn is ok for the `main' function.  */
14787   return DECL_MAIN_P (decl);
14788 }
14789 
14790 /* Return the decl used to identify the COMDAT group into which DECL should
14791    be placed.  */
14792 
14793 tree
14794 cxx_comdat_group (tree decl)
14795 {
14796   /* Virtual tables, construction virtual tables, and virtual table
14797      tables all go in a single COMDAT group, named after the primary
14798      virtual table.  */
14799   if (VAR_P (decl) && DECL_VTABLE_OR_VTT_P (decl))
14800     decl = CLASSTYPE_VTABLES (DECL_CONTEXT (decl));
14801   /* For all other DECLs, the COMDAT group is the mangled name of the
14802      declaration itself.  */
14803   else
14804     {
14805       while (DECL_THUNK_P (decl))
14806 	{
14807 	  /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
14808 	     into the same section as the target function.  In that case
14809 	     we must return target's name.  */
14810 	  tree target = THUNK_TARGET (decl);
14811 	  if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
14812 	      && DECL_SECTION_NAME (target) != NULL
14813 	      && DECL_ONE_ONLY (target))
14814 	    decl = target;
14815 	  else
14816 	    break;
14817 	}
14818     }
14819 
14820   return decl;
14821 }
14822 
14823 /* Returns the return type for FN as written by the user, which may include
14824    a placeholder for a deduced return type.  */
14825 
14826 tree
14827 fndecl_declared_return_type (tree fn)
14828 {
14829   fn = STRIP_TEMPLATE (fn);
14830   if (FNDECL_USED_AUTO (fn))
14831     {
14832       struct language_function *f = NULL;
14833       if (DECL_STRUCT_FUNCTION (fn))
14834 	f = DECL_STRUCT_FUNCTION (fn)->language;
14835       if (f == NULL)
14836 	f = DECL_SAVED_FUNCTION_DATA (fn);
14837       return f->x_auto_return_pattern;
14838     }
14839   return TREE_TYPE (TREE_TYPE (fn));
14840 }
14841 
14842 /* Returns true iff DECL was declared with an auto return type and it has
14843    not yet been deduced to a real type.  */
14844 
14845 bool
14846 undeduced_auto_decl (tree decl)
14847 {
14848   if (cxx_dialect < cxx14)
14849     return false;
14850   return type_uses_auto (TREE_TYPE (decl));
14851 }
14852 
14853 /* Complain if DECL has an undeduced return type.  */
14854 
14855 void
14856 require_deduced_type (tree decl)
14857 {
14858   if (undeduced_auto_decl (decl))
14859     error ("use of %qD before deduction of %<auto%>", decl);
14860 }
14861 
14862 #include "gt-cp-decl.h"
14863